Diff for /loncom/interface/loncoursequeueadmin.pm between versions 1.44 and 1.52.2.2.6.1

version 1.44, 2014/03/03 17:11:41 version 1.52.2.2.6.1, 2020/04/06 22:32:32
Line 90  use Apache::loncommon; Line 90  use Apache::loncommon;
 use Apache::lonmsg;  use Apache::lonmsg;
 use Apache::lonlocal;  use Apache::lonlocal;
 use Apache::lonuserutils;  use Apache::lonuserutils;
   use LONCAPA::batchcreatecourse;
 use LONCAPA qw(:DEFAULT :match);  use LONCAPA qw(:DEFAULT :match);
   
 sub send_selfserve_notification {  sub send_selfserve_notification {
Line 395  sub display_queued_requests { Line 396  sub display_queued_requests {
         if ($context eq 'pending') {          if ($context eq 'pending') {
             $disposition = 'pending';              $disposition = 'pending';
             $nextphase = 'requestvalidation';              $nextphase = 'requestvalidation';
           } elsif ($context eq 'displaypending') {
               $disposition = 'pending';
         }          }
         %requesthash = &Apache::lonnet::dump_dom($namespace,$dom,'_'.$disposition);          %requesthash = &Apache::lonnet::dump_dom($namespace,$dom,'_'.$disposition);
         $nextelement = '<input type="hidden" name="phase" value="'.$nextphase.'" />';          $nextelement = '<input type="hidden" name="phase" value="'.$nextphase.'" />';
Line 421  sub display_queued_requests { Line 424  sub display_queued_requests {
                     my ($cnum,$disposition) = split('_',$item);                      my ($cnum,$disposition) = split('_',$item);
                     $entry = $cnum.':'.$requesthash{$item}{'ownername'}.':'.                      $entry = $cnum.':'.$requesthash{$item}{'ownername'}.':'.
                              $requesthash{$item}{'ownerdom'}.':';                               $requesthash{$item}{'ownerdom'}.':';
                     if ($context eq 'pending') {                      if (($context eq 'pending') || ($context eq 'displaypending')) {
                         $entry .= $requesthash{$item}{'instcode'};                          $entry .= $requesthash{$item}{'instcode'};
                     } else {                      } else {
                         $entry .= $requesthash{$item}{'crstype'};                          $entry .= $requesthash{$item}{'crstype'};
Line 440  sub display_queued_requests { Line 443  sub display_queued_requests {
         if (keys(%queue_by_date) > 0) {          if (keys(%queue_by_date) > 0) {
             if ($context eq 'course') {              if ($context eq 'course') {
                 $output .=  '<h3>'.&mt('Self-enrollment requests queued pending approval by a Coordinator').'</h3>';                  $output .=  '<h3>'.&mt('Self-enrollment requests queued pending approval by a Coordinator').'</h3>';
             } elsif ($context eq 'pending') {              } elsif (($context eq 'pending') || ($context eq 'displaypending')) {
                 $output .= '<h3>'.&mt('Requests for official courses queued pending validation').'</h3>'.                  $output .= '<h3>'.&mt('Requests for official courses queued pending validation').'</h3>'.
                            '<p>'.&mt('Requests are validated against institutional data to confirm that the requestor is an instructor of record.').'<br />'.                             '<p>'.&mt('Requests are validated against institutional data to confirm that the requestor is an instructor of record.').'<br />'.
                            &mt('Validation is attempted when the request is submitted.').' '.&mt('If unvalidated, the request will be held in a queue.').' '.&mt('Validation of pending requests is automatically repeated daily.').'</p>';                             &mt('Validation is attempted when the request is submitted.').' '.
                              &mt('If unvalidated, the request will be held in a queue.').' '.
                              &mt('Validation of pending requests is automatically repeated daily.').'</p>';
             } elsif ($context eq 'requestauthor') {              } elsif ($context eq 'requestauthor') {
                 $output .= '<h3>'.&mt('Requests for Authoring Space queued pending approval by a Domain Coordinator').'</h3>';                  $output .= '<h3>'.&mt('Requests for Authoring Space queued pending approval by a Domain Coordinator').'</h3>';
             } elsif ($context eq 'requestusername') {              } elsif ($context eq 'requestusername') {
Line 471  sub display_queued_requests { Line 476  sub display_queued_requests {
         if ($context eq 'pending') {          if ($context eq 'pending') {
             $output .= '<br /><input type="submit" name="validationcheck" value="'.              $output .= '<br /><input type="submit" name="validationcheck" value="'.
                        &mt('Validate').'" /><br />'."\n".                         &mt('Validate').'" /><br />'."\n".
                        '<p>'.&mt('Any course/community requests which are successfully validated will be created immediately.').' '.&mt('Unvalidated requests will be listed for manual approval/rejection.').'</p>';                         '<p>'.&mt('Any course/community requests which are successfully validated will be created immediately.').' '.
         } else {                               &mt('Unvalidated requests will be listed for manual approval/rejection.').'</p>';
           } elsif (($context ne 'helpdesk') && ($context ne 'displaypending')) {
             $output .= '<br /><input type="submit" name="processqueue" value="'.&mt('Save').'" />';              $output .= '<br /><input type="submit" name="processqueue" value="'.&mt('Save').'" />';
         }          }
         $output .= '</form>';          $output .= '</form>';
Line 480  sub display_queued_requests { Line 486  sub display_queued_requests {
         $output .= '<div class="LC_info">';          $output .= '<div class="LC_info">';
         if ($context eq 'course') {          if ($context eq 'course') {
             $output .= &mt('There are currently no enrollment requests awaiting approval.');              $output .= &mt('There are currently no enrollment requests awaiting approval.');
         } elsif ($context eq 'pending') {          } elsif (($context eq 'pending') || ($context eq 'displaypending')) {
             $output .= &mt('There are currently no requests for official courses awaiting validation.');              $output .= &mt('There are currently no requests for official courses awaiting validation.');
         } elsif ($context eq 'requestauthor') {          } elsif ($context eq 'requestauthor') {
             $output .= &mt('There are currently no requests for Authoring Space awaiting approval.');              $output .= &mt('There are currently no requests for Authoring Space awaiting approval.');
Line 500  sub build_queue_display { Line 506  sub build_queue_display {
     my %crstypes;      my %crstypes;
     my $output =  &Apache::loncommon::start_data_table().      my $output =  &Apache::loncommon::start_data_table().
                   &Apache::loncommon::start_data_table_header_row();                    &Apache::loncommon::start_data_table_header_row();
     unless ($context eq 'pending') {       unless (($context eq 'pending') || ($context eq 'displaypending') || ($context eq 'helpdesk')) {
         $output .= '<th>'.&mt('Action').'</th>';          $output .= '<th>'.&mt('Action').'</th>';
     }      }
     $output .= '<th>'.&mt('Requestor').'</th>';      $output .= '<th>'.&mt('Requestor').'</th>';
Line 512  sub build_queue_display { Line 518  sub build_queue_display {
     } elsif ($context eq 'requestusername') {      } elsif ($context eq 'requestusername') {
         $output .= '<th>'.&mt('Date requested').'</th>'.          $output .= '<th>'.&mt('Date requested').'</th>'.
                    '<th>'.&mt('Details').'</th>';                     '<th>'.&mt('Details').'</th>';
     } elsif ($context eq 'pending' || $context eq 'stillpending') {      } elsif ($context eq 'pending' || $context eq 'displaypending' || $context eq 'stillpending') {
         $output .= '<th>'.&mt('Institutional code').'</th>'.          $output .= '<th>'.&mt('Institutional code').'</th>'.
                    '<th>'.&mt('Date requested').'</th>'.                     '<th>'.&mt('Date requested').'</th>'.
                    '<th>'.&mt('Details').'</th>';                     '<th>'.&mt('Details').'</th>';
Line 567  sub build_queue_display { Line 573  sub build_queue_display {
                 } else {                  } else {
                     my ($cnum,$ownername,$ownerdom,$type,$cdesc);                      my ($cnum,$ownername,$ownerdom,$type,$cdesc);
                     my $queued = 'approval';                       my $queued = 'approval'; 
                     if ($context eq 'pending' || $context eq 'stillpending') {                      if ($context eq 'pending' || $context eq 'displaypending' || $context eq 'stillpending') {
                         ($cnum,$ownername,$ownerdom,$instcode,$cdesc)=split(/:/,$request,5);                          ($cnum,$ownername,$ownerdom,$instcode,$cdesc)=split(/:/,$request,5);
                         $queued = 'pending';                                                  $queued = 'pending';                        
                     } else {                      } else {
Line 585  sub build_queue_display { Line 591  sub build_queue_display {
                                 &Apache::loncommon::plainname($ownername,$ownerdom),                                  &Apache::loncommon::plainname($ownername,$ownerdom),
                                 $ownername,$ownerdom);                                  $ownername,$ownerdom);
                 }                  }
                 unless ($context eq 'pending') {                  unless (($context eq 'pending') || ($context eq 'displaypending') || ($context eq 'helpdesk')) {
                     $row = '<td><span class="LC_nobreak"><label>'.                      $row = '<td><span class="LC_nobreak"><label>'.
                            '<input type="radio" value="'.$approve.'" name="'.$count.'radioreq" />'.&mt('Approve').'</label>'.                             '<input type="radio" value="'.$approve.'" name="'.$count.'radioreq" />'.&mt('Approve').'</label>'.
                            '<label>'.('&nbsp;'x2).                             '<label>'.('&nbsp;'x2).
Line 603  sub build_queue_display { Line 609  sub build_queue_display {
                 } elsif ($context eq 'requestusername') {                  } elsif ($context eq 'requestusername') {
                     $row .= '<td>'.$showtime.'</td>'."\n".                      $row .= '<td>'.$showtime.'</td>'."\n".
                             '<td>'.$detailslink.'</td>'."\n";                              '<td>'.$detailslink.'</td>'."\n";
                 } else {                   } else {
                     if ($context eq 'pending' || $context eq 'stillpending') {                      if ($context eq 'pending' || $context eq 'displaypending' || $context eq 'stillpending') {
                         $row .= '<td>'.$instcode.'</td>'."\n";                          $row .= '<td>'.$instcode.'</td>'."\n";
                     } else {                      } else {
                         $row .= '<td>'.$crstype.'</td>'."\n";                          $row .= '<td>'.$crstype.'</td>'."\n";
Line 650  sub update_request_queue { Line 656  sub update_request_queue {
         $beneficiary = 'enroller';          $beneficiary = 'enroller';
         $cid = $env{'request.course.id'};          $cid = $env{'request.course.id'};
         $crstype = lc(&Apache::loncommon::course_type());          $crstype = lc(&Apache::loncommon::course_type());
         $firsturl = &course_portal_url($cnum,$cdom);          $firsturl = &Apache::lonnet::course_portal_url($cnum,$cdom);
         %requesthash = &Apache::lonnet::dump($namespace,$cdom,$cnum);          %requesthash = &Apache::lonnet::dump($namespace,$cdom,$cnum);
         $access_start =  $env{'course.'.$cid.'.internal.selfenroll_start_access'};          $access_start =  $env{'course.'.$cid.'.internal.selfenroll_start_access'};
         $access_end =  $env{'course.'.$cid.'.internal.selfenroll_end_access'};          $access_end =  $env{'course.'.$cid.'.internal.selfenroll_end_access'};
Line 679  sub update_request_queue { Line 685  sub update_request_queue {
             }              }
         }          }
         my $domconfiguser = &Apache::lonnet::get_domainconfiguser($cdom);          my $domconfiguser = &Apache::lonnet::get_domainconfiguser($cdom);
         $firsturl = &course_portal_url($domconfiguser,$cdom);          $firsturl = &Apache::lonnet::course_portal_url($domconfiguser,$cdom);
         $approvedmsg = [{          $approvedmsg = [{
                             mt => 'Your request for Authoring Space has been approved.',                              mt => 'Your request for Authoring Space has been approved.',
                         },                          },
Line 704  sub update_request_queue { Line 710  sub update_request_queue {
             }              }
         }          }
         my $domconfiguser = &Apache::lonnet::get_domainconfiguser($cdom);          my $domconfiguser = &Apache::lonnet::get_domainconfiguser($cdom);
         $firsturl = &course_portal_url($domconfiguser,$cdom);          $firsturl = &Apache::lonnet::course_portal_url($domconfiguser,$cdom);
         $approvedmsg = [{          $approvedmsg = [{
                             mt => 'Your request for a LON-CAPA account has been approved.',                              mt => 'Your request for a LON-CAPA account has been approved.',
                         },                          },
Line 885  sub update_request_queue { Line 891  sub update_request_queue {
                 $middlename = $curr{$uname}{'middlename'};                  $middlename = $curr{$uname}{'middlename'};
                 $lastname   = $curr{$uname}{'lastname'};                  $lastname   = $curr{$uname}{'lastname'};
                 $generation = $curr{$uname}{'generation'};                  $generation = $curr{$uname}{'generation'};
                 $inststatus = $curr{$uname}{'usertype'};                  $inststatus = $curr{$uname}{'inststatus'};
   
                 my ($key,$caller)=split(/&/,$curr{$uname}{'tmpinfo'});                  my ($key,$caller)=split(/&/,$curr{$uname}{'tmpinfo'});
                 if ($caller eq 'createaccount') {                  if ($caller eq 'createaccount') {
Line 967  sub update_request_queue { Line 973  sub update_request_queue {
                                     }                                      }
                                 }                                  }
                             }                              }
                               if ($history{'details'}{'clonecrs'}) {
                                   $customitems{'_LC_clonefrom'} = $history{'details'}{'clonedom'}.'_'.$history{'details'}{'clonecrs'};
                               }
                             my ($result,$postprocess) = &course_creation($cdom,$cnum,$context,$history{'details'},\$logmsg,                              my ($result,$postprocess) = &course_creation($cdom,$cnum,$context,$history{'details'},\$logmsg,
                                                         \$newusermsg,\$addresult,\$enrollcount,                                                          \$newusermsg,\$addresult,\$enrollcount,
                                                         \$response,\$keysmsg,\%domdefs,$longroles,\$code,\%customitems);                                                          \$response,\$keysmsg,\%domdefs,$longroles,\$code,\%customitems);
Line 976  sub update_request_queue { Line 985  sub update_request_queue {
                                 } else {                                  } else {
                                     $approvedmsg = $approvalmsg{'course'};                                      $approvedmsg = $approvalmsg{'course'};
                                 }                                  }
                                 my $firsturl = &course_portal_url($cnum,$cdom);                                  my $firsturl = &Apache::lonnet::course_portal_url($cnum,$cdom);
                                 if (ref($approvedmsg) eq 'ARRAY') {                                  if (ref($approvedmsg) eq 'ARRAY') {
                                     if (ref($approvedmsg->[1]) eq 'HASH') {                                      if (ref($approvedmsg->[1]) eq 'HASH') {
                                         $approvedmsg->[1]->{'args'} = [$firsturl];                                          $approvedmsg->[1]->{'args'} = [$firsturl];
Line 1310  sub update_request_queue { Line 1319  sub update_request_queue {
                         my $syllabuslink =                          my $syllabuslink =
                             &Apache::loncommon::syllabuswrapper($showcourse,$cnum,$cdom);                              &Apache::loncommon::syllabuswrapper($showcourse,$cnum,$cdom);
                         if ($codes{$cnum}) {                          if ($codes{$cnum}) {
                             $syllabuslink .= &mt('Unique code: [_1]',$codes{$cnum});                              $syllabuslink .= ' '.&mt('Unique code: [_1]',$codes{$cnum});
                         }                          }
                         $output .= '<li>'.$syllabuslink.'</li>';                          $output .= '<li>'.$syllabuslink.'</li>';
                     }                      }
Line 1560  sub update_request_queue { Line 1569  sub update_request_queue {
     return $output;      return $output;
 }  }
   
 sub course_portal_url {  
     my ($cnum,$cdom) = @_;  
     my $chome = &Apache::lonnet::homeserver($cnum,$cdom);  
     my $hostname = &Apache::lonnet::hostname($chome);  
     my $protocol = $Apache::lonnet::protocol{$chome};  
     $protocol = 'http' if ($protocol ne 'https');  
     my %domdefaults = &Apache::lonnet::get_domain_defaults($cdom);  
     my $firsturl;  
     if ($domdefaults{'portal_def'}) {  
         $firsturl = $domdefaults{'portal_def'};  
     } else {  
         $firsturl = $protocol.'://'.$hostname;  
     }  
     return $firsturl;  
 }  
   
 sub get_student_counts {  sub get_student_counts {
     my ($cdom,$cnum) = @_;      my ($cdom,$cnum) = @_;
     my (%idx,%stucounts);      my (%idx,%stucounts);
Line 1599  sub course_creation { Line 1592  sub course_creation {
         $keysmsg,$domdefs,$longroles,$coderef,$customhash) =  @_;          $keysmsg,$domdefs,$longroles,$coderef,$customhash) =  @_;
     unless ((ref($details) eq 'HASH') && (ref($domdefs) eq 'HASH') &&       unless ((ref($details) eq 'HASH') && (ref($domdefs) eq 'HASH') && 
             (ref($longroles) eq 'HASH')) {              (ref($longroles) eq 'HASH')) {
         return 'error: Invalid request';          return ('error: Invalid request');
     }      }
     my ($result,$ownername,$ownerdom);      my ($result,$ownername,$ownerdom);
     my $crstype = $details->{'crstype'};      my $crstype = $details->{'crstype'};
     my $coursedesc = $details->{'cdescr'};      my $coursedesc = $details->{'cdescr'};
     my %domconfig = &Apache::lonnet::get_dom('configuration',['requestauthor'],$dom);      my $accessstart = $details->{'accessstart'};
       my $accessend = $details->{'accessend'};
       my %domconfig = &Apache::lonnet::get_dom('configuration',['requestcourses'],$dom);
     if (ref($domconfig{'requestcourses'}) eq 'HASH') {      if (ref($domconfig{'requestcourses'}) eq 'HASH') {
         if (ref($domconfig{'requestcourses'}{'uniquecode'}) eq 'HASH') {          if (ref($domconfig{'requestcourses'}{'uniquecode'}) eq 'HASH') {
             if ($domconfig{'requestcourses'}{'uniquecode'}{$crstype}) {              if ($domconfig{'requestcourses'}{'uniquecode'}{$crstype}) {
Line 1638  sub course_creation { Line 1633  sub course_creation {
             $code = $$coderef;              $code = $$coderef;
         }          }
         $postprocess = &Apache::lonnet::auto_crsreq_update($dom,$cnum,$crstype,$result,$ownername,          $postprocess = &Apache::lonnet::auto_crsreq_update($dom,$cnum,$crstype,$result,$ownername,
                                                            $ownerdom,$fullname,$coursedesc,$code,$customhash);                                                             $ownerdom,$fullname,$coursedesc,$code,
                                                              $accessstart,$accessend,$customhash);
     } else {      } else {
         $result = 'error: '.$cid;          $result = 'error: '.$cid;
     }      }
Line 1712  sub build_batchcreatehash { Line 1708  sub build_batchcreatehash {
         $batchhash{'users'}{$owner}{lastname} = $owner_lastname;          $batchhash{'users'}{$owner}{lastname} = $owner_lastname;
         $batchhash{'users'}{$owner}{emailenc} = $emailenc;          $batchhash{'users'}{$owner}{emailenc} = $emailenc;
         $batchhash{'users'}{$owner}{owneremail} = $owneremail;          $batchhash{'users'}{$owner}{owneremail} = $owneremail;
           $batchhash{'setcomment'} = 1;
     }      }
     return %batchhash;      return %batchhash;
 }  }
   
 sub can_clone_course {  sub can_clone_course {
     my ($uname,$udom,$clonecrs,$clonedom,$crstype) = @_;      my ($uname,$udom,$clonecrs,$clonedom,$crstype,$dom,$instcode) = @_;
     my $canclone;      my $canclone;
     my $ccrole = 'cc';      my $ccrole = 'cc';
     if ($crstype eq 'community') {      if ($crstype eq 'community') {
Line 1728  sub can_clone_course { Line 1725  sub can_clone_course {
     if (exists($roleshash{$clonecrs.':'.$clonedom.':'.$ccrole})) {      if (exists($roleshash{$clonecrs.':'.$clonedom.':'.$ccrole})) {
         $canclone = 1;          $canclone = 1;
     } else {      } else {
         my %courseenv = &Apache::lonnet::userenvironment($clonedom,$clonecrs,('cloners'));          my %courseenv = &Apache::lonnet::userenvironment($clonedom,$clonecrs,
                                                            ('cloners','internal.coursecode'));
         my $cloners = $courseenv{'cloners'};          my $cloners = $courseenv{'cloners'};
           my $clonefromcode = $courseenv{'internal.coursecode'};
         if ($cloners ne '') {          if ($cloners ne '') {
             my @cloneable = split(',',$cloners);              my @cloneable = split(',',$cloners);
             if (grep(/^\*$/,@cloneable)) {              if (grep(/^\*$/,@cloneable)) {
                 $canclone = 1;                  $canclone = 1;
             }              } elsif (grep(/^\*:\Q$udom\E$/,@cloneable)) {
             if (grep(/^\*:\Q$udom\E$/,@cloneable)) {  
                 $canclone = 1;                  $canclone = 1;
             }              } elsif (grep(/^\Q$uname\E:\Q$udom\E$/,@cloneable)) {
             if (grep(/^\Q$uname\E:\Q$udom\E$/,@cloneable)) {  
                 $canclone = 1;                  $canclone = 1;
             }              }
               unless ($canclone) {
                   if (($clonefromcode) && ($instcode) && ($clonedom eq $dom)) {
                       my (%gotdomdefaults,%gotcodedefaults);
                       foreach my $cloner (@cloneable) {
                           if (($cloner ne '*') && ($cloner !~ /^\*\:$match_domain$/) &&
                               ($cloner !~ /^$match_username\:$match_domain$/) && ($cloner ne '')) {
                               if ($cloner =~ /\=/) {
                                   my (%codedefaults,@code_order);
                                   if (ref($gotcodedefaults{$clonedom}) eq 'HASH') {
                                       if (ref($gotcodedefaults{$clonedom}{'defaults'}) eq 'HASH') {
                                           %codedefaults = %{$gotcodedefaults{$clonedom}{'defaults'}};
                                       }
                                       if (ref($gotcodedefaults{$clonedom}{'order'}) eq 'ARRAY') {
                                           @code_order = @{$gotcodedefaults{$dom}{'order'}};
                                       }
                                   } else {
                                       &Apache::lonnet::auto_instcode_defaults($clonedom,
                                                                               \%codedefaults,
                                                                               \@code_order);
                                       $gotcodedefaults{$clonedom}{'defaults'} = \%codedefaults;
                                       $gotcodedefaults{$clonedom}{'order'} = \@code_order;
                                   }
                                   if (@code_order > 0) {
                                       if (&Apache::lonnet::check_instcode_cloning(\%codedefaults,\@code_order,
                                                                                   $cloner,$clonefromcode,$instcode)) {
                                           $canclone = 1;
                                           last; 
                                       }
                                   }
                               }
                           }
                       }
                   }
               }
           } else {
               my %domdefs = &Apache::lonnet::get_domain_defaults($clonedom);
               if ($domdefs{'canclone'}) {
                   unless ($domdefs{'canclone'} eq 'none') {
                       if ($domdefs{'canclone'} eq 'domain') {
                           if ($udom eq $clonedom) {
                               $canclone = 1;
                           }
                       } elsif (($clonefromcode) && ($instcode) &&
                                ($clonedom eq $dom)) {
                           if (&Apache::lonnet::default_instcode_cloning($clonedom,$domdefs{'canclone'},
                                                                         $clonefromcode,$instcode)) {
                               $canclone = 1;
                           }
                       }
                   }
               }
         }          }
         unless ($canclone) {          unless ($canclone) {
             if (&Apache::lonnet::is_course_owner($clonedom,$clonecrs,$uname,$udom)) {              if (&Apache::lonnet::is_course_owner($clonedom,$clonecrs,$uname,$udom)) {
Line 2022  sub process_official_reqs { Line 2070  sub process_official_reqs {
                             }                              }
                         }                          }
                     }                      }
                       if ($history{'details'}{'clonecrs'}) {
                           $customitems{'_LC_clonefrom'} = $history{'details'}{'clonedom'}.'_'.$history{'details'}{'clonecrs'};
                       }
                     my ($result,$postprocess) =                       my ($result,$postprocess) = 
                         &course_creation($dom,$cnum,'domain',$history{'details'},\$logmsg,\$newusermsg,\$addresult,                          &course_creation($dom,$cnum,'domain',$history{'details'},\$logmsg,\$newusermsg,\$addresult,
                                          \$enrollcount,\$response,\$keysmsg,\%domdefs,\%longroles,\$code,\%customitems);                                           \$enrollcount,\$response,\$keysmsg,\%domdefs,\%longroles,\$code,\%customitems);
Line 2031  sub process_official_reqs { Line 2082  sub process_official_reqs {
                         my $cid = $dom.'_'.$cnum;                          my $cid = $dom.'_'.$cnum;
                         push(@{$newcids{$instcode}},$cid);                          push(@{$newcids{$instcode}},$cid);
                         if ($dcname && $dcdom) {                          if ($dcname && $dcdom) {
                             my $firsturl = &course_portal_url($cnum,$dom);                              my $firsturl = &Apache::lonnet::course_portal_url($cnum,$dom);
                             my $beneficiary = 'pendingrequestor';                              my $beneficiary = 'pendingrequestor';
                             my $now = time;                              my $now = time;
                             my $owner = $ownername.':'.$ownerdom;                              my $owner = $ownername.':'.$ownerdom;
Line 2058  sub process_official_reqs { Line 2109  sub process_official_reqs {
                                         }                                          }
                                     }                                      }
                                 }                                  }
                                   if (ref($postprocess->{'createdactions'}) eq 'HASH') {
                                       if (ref($postprocess->{'createdactions'}{'environment'}) eq 'HASH') {
                                           &postprocess_crsenv($dom,$cnum,$postprocess->{'createdactions'}{'environment'});
                                       }
                                   }
                             }                              }
                             &send_selfserve_notification($owner,$approvedmsg,                              &send_selfserve_notification($owner,$approvedmsg,
                                                          $cid,$cdescr,$now,                                                           $cid,$cdescr,$now,
Line 2129  sub process_official_reqs { Line 2185  sub process_official_reqs {
     return $output;      return $output;
 }  }
   
   sub postprocess_crsenv {
       my ($dom,$cnum,$postprocessenv) = @_;
       if (ref($postprocessenv) eq 'HASH') {    
           my $cid = $dom.'_'.$cnum;
           my %settablecrsenv = (
                                 'internal.selfenroll_types'        => 1,
                                 'internal.selfenroll_registered'   => 1,
                                 'internal.selfenroll_section'      => 1,
                                 'internal.selfenroll_start_access' => 1,
                                 'internal.selfenroll_end_access'   => 1,
                                 'internal.selfenroll_limit'        => 1,
                                 'internal.selfenroll_cap'          => 1,
                                 'internal.selfenroll_approval'     => 1,
                                 'internal.selfenroll_notifylist'   => 1,
                                );
           my %needcrsidput = (
                                 'internal.selfenroll_types'      => 1,
                                 'internal.selfenroll_start_date' => 1,
                                 'internal. selfenroll_end_date'  => 1,
                              );
           my (@needupdate,%newcrsenv);
           foreach my $key (keys(%{$postprocessenv})) { 
               if ($settablecrsenv{$key}) {
                   $newcrsenv{$key} = $postprocessenv->{$key};
                   if ($needcrsidput{$key}) {
                       push(@needupdate,$key); 
                   }
               }
               if (keys(%newcrsenv)) {
                   my $putresult = &Apache::lonnet::put('environment',\%newcrsenv,$dom,$cnum);
                   if ($putresult eq 'ok') {
                       if (@needupdate) {
                           my %crsinfo =
                               &Apache::lonnet::courseiddump($dom,'.',1,'.','.',$cnum,undef,undef,'.');
                           if (ref($crsinfo{$cid}) eq 'HASH') {
                               foreach my $key (@needupdate) {
                                   $crsinfo{$cid}{$key} = $newcrsenv{$key};
                               }
                               my $chome = &Apache::lonnet::homeserver($cnum,$dom);
                               &Apache::lonnet::courseidput($dom,\%crsinfo,$chome,'notime');
                           }
                       }
                   }
               }
           }
       }
       return;
   }
   
   
   sub requestcourses_validation_types {
       my @items = ('url','fields','button','markup');
       my %names =  &Apache::lonlocal::texthash (
               url      => 'Web address of validation server/script',
               fields   => 'Form fields to send to validator',
               button   => 'Text for validation button',
               markup   => 'Validation description (HTML)',
       );
       my @fields = ('owner','course','coursetype','description');
       return (\@items,\%names,\@fields);
   }
   
 sub is_active_author {  sub is_active_author {
     if ($env{'user.role.au./'.$env{'user.domain'}.'/'} =~ /^(\d*)\.(\d*)$/) {      if ($env{'user.role.au./'.$env{'user.domain'}.'/'} =~ /^(\d*)\.(\d*)$/) {
         if ((!$1 || $1 < time) &&          if ((!$1 || $1 < time) &&

Removed from v.1.44  
changed lines
  Added in v.1.52.2.2.6.1


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>