Diff for /loncom/interface/lonrequestcourse.pm between versions 1.95.2.2.2.1 and 1.95.2.4

version 1.95.2.2.2.1, 2020/07/17 20:39:55 version 1.95.2.4, 2019/07/26 17:57:12
Line 119  use Apache::loncoursequeueadmin; Line 119  use Apache::loncoursequeueadmin;
 use Apache::lonuserutils;  use Apache::lonuserutils;
 use LONCAPA qw(:DEFAULT :match);  use LONCAPA qw(:DEFAULT :match);
   
   my $registered_flush;
   my $registered_instcats;
   my $modified_dom;
   
 sub handler {  sub handler {
     my ($r) = @_;      my ($r) = @_;
     &Apache::loncommon::content_type($r,'text/html');      &Apache::loncommon::content_type($r,'text/html');
Line 127  sub handler { Line 131  sub handler {
         return OK;          return OK;
     }      }
   
       $registered_flush = 0;
       $registered_instcats = 0;
       $modified_dom = '';
   
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},      &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
         ['action','showdom','cnum','state','crstype','queue','tabs']);          ['action','showdom','cnum','state','crstype','queue','tabs']);
     &Apache::lonhtmlcommon::clear_breadcrumbs();      &Apache::lonhtmlcommon::clear_breadcrumbs();
Line 551  sub form_elements { Line 559  sub form_elements {
                 clonedom         => 'selectbox',                  clonedom         => 'selectbox',
                 datemode         => 'radio',                  datemode         => 'radio',
                 dateshift        => 'text',                  dateshift        => 'text',
                 tinyurls         => 'radio',  
             },              },
             enrollment  => {              enrollment  => {
                 accessstart_month  => 'selectbox',                  accessstart_month  => 'selectbox',
Line 2918  sub print_review { Line 2925  sub print_review {
         $inst_values .= '<td>'.$env{'form.coursecredits'}.'</td>';          $inst_values .= '<td>'.$env{'form.coursecredits'}.'</td>';
     }      }
   
     my %ctxt = &clone_text($env{'form.crstype'});      my %ctxt = &clone_text();
     $inst_headers .= '<th>'.&mt('Clone From').'</th>';      $inst_headers .= '<th>'.&mt('Clone From').'</th>';
     if (($env{'form.cloning'}) &&      if (($env{'form.cloning'}) &&
         ($env{'form.clonecrs'} =~ /^$match_name$/) &&           ($env{'form.clonecrs'} =~ /^$match_name$/) && 
Line 2930  sub print_review { Line 2937  sub print_review {
             my %courseenv = &Apache::lonnet::userenvironment($env{'form.clonedom'},              my %courseenv = &Apache::lonnet::userenvironment($env{'form.clonedom'},
                               $env{'form.clonecrs'},('description','internal.coursecode'));                                $env{'form.clonecrs'},('description','internal.coursecode'));
             if (keys(%courseenv) > 0) {              if (keys(%courseenv) > 0) {
                 $inst_headers .= '<th>'.$ctxt{'dsh'}.'</th>'.                  $inst_headers .= '<th>'.$ctxt{'dsh'}.'</th>';
                                  '<th>'.$ctxt{'dpl'}.'</th>';  
                 $inst_values .= '<td>'.$courseenv{'description'}.'&nbsp;';                  $inst_values .= '<td>'.$courseenv{'description'}.'&nbsp;';
                 my $cloneinst = $courseenv{'internal.coursecode'};                  my $cloneinst = $courseenv{'internal.coursecode'};
                 if ($cloneinst ne '') {                  if ($cloneinst ne '') {
Line 2947  sub print_review { Line 2953  sub print_review {
                 } else {                  } else {
                     $inst_values .= $ctxt{'ncd'};                      $inst_values .= $ctxt{'ncd'};
                 }                  }
                 $inst_values .= '</td><td>';  
                 if ($env{'form.tinyurls'} eq 'delete') {  
                     $inst_values .= $ctxt{'nsl'};  
                 } elsif ($env{'form.tinyurls'} eq 'transfer') {  
                     $inst_values .= $ctxt{'tsl'};  
                 } else {  
                     $inst_values .= $ctxt{'csl'};  
                 }  
                 $inst_values .= '</td>';                  $inst_values .= '</td>';
              } else {               } else {
                  $inst_values .= '<td>'.&mt('Unknown').'</td>';                   $inst_values .= '<td>'.&mt('Unknown').'</td>';
Line 3183  sub clone_form { Line 3181  sub clone_form {
     if ($crstype eq 'community') {      if ($crstype eq 'community') {
         $type = 'Community';          $type = 'Community';
     }      }
     my %lt = &clone_text($crstype);      my %lt = &clone_text();
     my $output .=       my $output .= 
         &Apache::lonhtmlcommon::row_title($lt{'dmn'}).'<label>'.          &Apache::lonhtmlcommon::row_title($lt{'dmn'}).'<label>'.
         &Apache::loncommon::select_dom_form($dom,'clonedom').'</label>'.          &Apache::loncommon::select_dom_form($dom,'clonedom').'</label>'.
Line 3201  sub clone_form { Line 3199  sub clone_form {
         '<input type="radio" name="datemode" value="shift" checked="checked" /> '.          '<input type="radio" name="datemode" value="shift" checked="checked" /> '.
         $lt{'shd'}.'</label>'.          $lt{'shd'}.'</label>'.
         '<input type="text" size="5" name="dateshift" value="365" />'.          '<input type="text" size="5" name="dateshift" value="365" />'.
         &Apache::lonhtmlcommon::row_closure(1).  
         &Apache::lonhtmlcommon::row_title($lt{'dpl'}).'<label>'.  
         '<input type="radio" name="tinyurls" value="delete" /> '.$lt{'nsl'}.  
         '</label><br /><label>'.  
         '<input type="radio" name="tinyurls" value="transfer" /> '.$lt{'tsl'}.  
         '</label><br /><label>'.  
         '<input type="radio" name="tinyurls" value="create" checked="checked" /> '.$lt{'csl'}.  
         '</label>'.  
         &Apache::lonhtmlcommon::row_closure(1);          &Apache::lonhtmlcommon::row_closure(1);
     return $output;      return $output;
 }  }
   
 sub clone_text {  sub clone_text {
     my ($crstype) = @_;      return &Apache::lonlocal::texthash(
     my %lt = &Apache::lonlocal::texthash(  
                'cid'  => 'Course ID',                 'cid'  => 'Course ID',
                'dmn'  => 'Domain',                 'dmn'  => 'Domain',
                'dsh'  => 'Date Shift',                 'dsh'  => 'Date Shift',
                'ncd'  => 'Do not clone date parameters',                 'ncd'  => 'Do not clone date parameters',
                'prd'  => 'Clone date parameters as-is',                 'prd'  => 'Clone date parameters as-is',
                'shd'  => 'Shift date parameters by number of days',                 'shd'  => 'Shift date parameters by number of days',
                'dpl'  => 'URL shortcuts (for deep linking)',          );
                'nsl'  => 'Do not clone URL shortcuts',  
                'tsl'  => 'Transfer URL shortcuts from existing course to new course',  
                'csl'  => 'Create new URL shortcuts in new course',  
     );  
     if ($crstype eq 'Community') {  
         $lt{'tsl'} = &mt('Transfer URL shortcuts from existing course to new community');  
         $lt{'csl'} = &mt('Create new URL shortcuts in new course');  
     }  
     return %lt;  
 }  }
   
 sub coursecode_form {  sub coursecode_form {
Line 3673  sub print_request_outcome { Line 3653  sub print_request_outcome {
                     clonecrs       => $clonecrs,                      clonecrs       => $clonecrs,
                     datemode       => $env{'form.datemode'},                      datemode       => $env{'form.datemode'},
                     dateshift      => $env{'form.dateshift'},                      dateshift      => $env{'form.dateshift'},
                     tinyurls       => $env{'form.tinyurls'},  
                     sectotal       => $sectotal,                      sectotal       => $sectotal,
                     sections       => \%sections,                      sections       => \%sections,
                     crosslisttotal => $crosslisttotal,                      crosslisttotal => $crosslisttotal,
Line 3805  sub process_request { Line 3784  sub process_request {
             $storeresult = 'rejected';              $storeresult = 'rejected';
         } elsif ($disposition eq 'process') {          } elsif ($disposition eq 'process') {
             my %domdefs = &Apache::lonnet::get_domain_defaults($dom);              my %domdefs = &Apache::lonnet::get_domain_defaults($dom);
             my ($logmsg,$newusermsg,$addresult,$enrollcount,$response,              my ($logmsg,$newusermsg,$addresult,$enrollcount,$response,$keysmsg,%longroles,$code);
                 $keysmsg,%longroles,$code);  
             my $clonemsg = [];  
             my $type = 'Course';              my $type = 'Course';
             if ($crstype eq 'community') {              if ($crstype eq 'community') {
                 $type = 'Community';                  $type = 'Community';
Line 3840  sub process_request { Line 3817  sub process_request {
             $customitems{'_LC_coursestartdate'} = $accessstart;              $customitems{'_LC_coursestartdate'} = $accessstart;
             $customitems{'_LC_courseenddate'} = $accessend;              $customitems{'_LC_courseenddate'} = $accessend;
             my ($result,$postprocess) = &Apache::loncoursequeueadmin::course_creation($dom,$cnum,              my ($result,$postprocess) = &Apache::loncoursequeueadmin::course_creation($dom,$cnum,
                                           'autocreate',$details,\$logmsg,$clonemsg,\$newusermsg,                                            'autocreate',$details,\$logmsg,\$newusermsg,\$addresult,
                                           \$addresult,\$enrollcount,\$response,\$keysmsg,\%domdefs,                                            \$enrollcount,\$response,\$keysmsg,\%domdefs,\%longroles,
                                           \%longroles,\$code,\%customitems);                                            \$code,\%customitems);
             if (ref($postprocess) eq 'HASH') {              if (ref($postprocess) eq 'HASH') {
                 $customized = $postprocess->{'createdcustomized'};                  $customized = $postprocess->{'createdcustomized'};
             }              }
Line 3876  sub process_request { Line 3853  sub process_request {
                     $output .= '<br />'.$role_result;                      $output .= '<br />'.$role_result;
                 }                  }
                 $output .= '</p>';                  $output .= '</p>';
                 if ($logmsg) {                  $creationresult = 'created';
                     $output .= '<p>'.$logmsg.'</p>';                  # Flush the course logs so reverse user roles immediately updated
                 }                  unless ($registered_flush) {
                 if ((ref($clonemsg) eq 'ARRAY') && (@{$clonemsg})) {                      my $handlers = $r->get_handlers('PerlCleanupHandler');
                     $output .= '<p class="LC_info">';                      $r->set_handlers('PerlCleanupHandler' => [\&Apache::lonnet::flushcourselogs,@{$handlers}]);
                     my $user_lh = &Apache::loncommon::user_lang($env{'user.name'},$env{'user.domain'});                      $registered_flush=1;
                     foreach my $item (@{$clonemsg}) {                  }
                         if (ref($item) eq 'HASH') {                  if ($instcode ne '') {
                             $output .= &mt_user($user_lh,$item->{mt},                      &Apache::lonnet::devalidate_cache_new('instcats',$dom);
                                                 @{$item->{args}}).'<br />'."\n";                      # Update cache of self-cataloging courses on institution's server(s).
                       if (&Apache::lonnet::shared_institution($dom)) {
                           unless ($registered_instcats) {
                               my $handlers = $r->get_handlers('PerlCleanupHandler');
                               $r->set_handlers('PerlCleanupHandler' => [\&devalidate_remote_instcats,@{$handlers}]);
                               $registered_instcats=1;
                               $modified_dom = $dom;
                         }                          }
                     }                      }
                     $output .= '</p>'."\n";  
                 }                  }
                 $creationresult = 'created';  
             } else {              } else {
                 $output = '<span class="LC_error">';                  $output = '<span class="LC_error">';
                 if ($crstype eq 'community') {                  if ($crstype eq 'community') {
Line 4026  sub process_request { Line 4007  sub process_request {
     }      }
 }  }
   
   sub devalidate_remote_instcats {
       if ($modified_dom ne '') {
           my %servers = &Apache::lonnet::internet_dom_servers($modified_dom);
           my %thismachine;
           map { $thismachine{$_} = 1; } &Apache::lonnet::current_machine_ids();
           if (keys(%servers)) {
               foreach my $server (keys(%servers)) {
                   next if ($thismachine{$server});
                   &Apache::lonnet::remote_devalidate_cache($server,['instcats:'.$modified_dom]);
               }
           }
           $modified_dom = '';
       }
       return;
   }
   
 sub custom_formitems {  sub custom_formitems {
     my ($preprocess,$customhash) = @_;      my ($preprocess,$customhash) = @_;
     return unless ((ref($preprocess) eq 'HASH') && (ref($customhash) eq 'HASH'));        return unless ((ref($preprocess) eq 'HASH') && (ref($customhash) eq 'HASH'));  
Line 4334  sub pending_validation_form { Line 4331  sub pending_validation_form {
                         $buttontext = &mt('Create course');                          $buttontext = &mt('Create course');
                     }                      }
                 }                  }
                   my $hostname = &Apache::lonnet::hostname($lonhost);
                 my $protocol = $Apache::lonnet::protocol{$lonhost};                  my $protocol = $Apache::lonnet::protocol{$lonhost};
                 $protocol = 'http' if ($protocol ne 'https');                  $protocol = 'http' if ($protocol ne 'https');
                 my $crscreator = $protocol.'://'.&Apache::lonnet::hostname($lonhost).'/cgi-bin/createpending.pl';                  my $crscreator = $protocol.'://'.$hostname.'/cgi-bin/createpending.pl';
                 $output .= '<input type="hidden" name="crscreator" value="'.$crscreator.'" />'."\n".                  $output .= '<input type="hidden" name="crscreator" value="'.$crscreator.'" />'."\n".
                            '<input type="hidden" name="token" value="'.$token.'" />'."\n".                             '<input type="hidden" name="token" value="'.$token.'" />'."\n".
                            '<input type="submit" name="validate" value="'.$buttontext.'" />'."\n".                             '<input type="submit" name="validate" value="'.$buttontext.'" />'."\n".
Line 4412  sub retrieve_settings { Line 4410  sub retrieve_settings {
             }              }
             $env{'form.datemode'} = $reqinfo{'datemode'};              $env{'form.datemode'} = $reqinfo{'datemode'};
             $env{'form.dateshift'} = $reqinfo{'dateshift'};              $env{'form.dateshift'} = $reqinfo{'dateshift'};
             $env{'form.tinyurls'} = $reqinfo{'tinyurls'};  
             if ($reqinfo{'crstype'} eq 'official') {              if ($reqinfo{'crstype'} eq 'official') {
                 $env{'form.autoadds'} = $reqinfo{'autoadds'};                  $env{'form.autoadds'} = $reqinfo{'autoadds'};
                 $env{'form.autodrops'} = $reqinfo{'autodrops'};                  $env{'form.autodrops'} = $reqinfo{'autodrops'};
Line 4815  sub print_textbook_form { Line 4812  sub print_textbook_form {
 #  #
 # Table of user's current courses (owner and/or course coordinator)  # Table of user's current courses (owner and/or course coordinator)
 #  #
     my %lt = &clone_text('Course');      my %lt = &clone_text();
     if (keys(%cloneable)) {      if (keys(%cloneable)) {
         $r->print('<div id="showexisting" style="display:none">'.          $r->print('<div id="showexisting" style="display:none">'.
                   &clone_selection_table($dom,'owned',\%cloneable).                    &clone_selection_table($dom,'owned',\%cloneable).
                   '<fieldset style="display:inline-block"><legend>'.$lt{'dsh'}.'</legend><label>'.                    '<p><input type="radio" name="owndatemode" value="delete" /> '.$lt{'ncd'}.
                   '<input type="radio" name="owndatemode" value="delete" /> '.$lt{'ncd'}.  
                   '</label><br /><label>'.                    '</label><br /><label>'.
                   '<input type="radio" name="owndatemode" value="preserve" /> '.$lt{'prd'}.                    '<input type="radio" name="owndatemode" value="preserve" /> '.$lt{'prd'}.
                   '</label><br /><label>'.                    '</label><br /><label>'.
                   '<input type="radio" name="owndatemode" value="shift" checked="checked" /> '.                    '<input type="radio" name="owndatemode" value="shift" checked="checked" /> '.
                   $lt{'shd'}.'</label>'.                    $lt{'shd'}.'</label>'.
                   '<input type="text" size="5" name="owndateshift" value="365" />'.                    '<input type="text" size="5" name="owndateshift" value="365" />'.
                   '</fieldset><fieldset style="display:inline-block">'.  
                   '<legend>'.$lt{'dpl'}.'</legend><label>'.  
                   '<input type="radio" name="owntinyurls" value="delete" />'.$lt{'nsl'}.  
                   '</label><br /><label>'.  
                   '<input type="radio" name="owntinyurls" value="transfer" />'.$lt{'tsl'}.  
                   '</label><br /><label>'.  
                   '<input type="radio" name="owntinyurls" value="create" checked="checked" />'.$lt{'csl'}.  
                   '</label></fieldset>'.  
                   '</div>');                    '</div>');
     }      }
 #  #
Line 4843  sub print_textbook_form { Line 4831  sub print_textbook_form {
     if (keys(%domcloneable)) {      if (keys(%domcloneable)) {
         $r->print('<div id="showcolleague" style="display:none">'.          $r->print('<div id="showcolleague" style="display:none">'.
                   &clone_selection_table($dom,'colleague',\%domcloneable).                    &clone_selection_table($dom,'colleague',\%domcloneable).
                   '<fieldset style="display:inline-block"><legend>'.$lt{'dsh'}.'</legend><label>'.                    '<p><input type="radio" name="colldatemode" value="delete" /> '.$lt{'ncd'}.
                   '<input type="radio" name="colldatemode" value="delete" /> '.$lt{'ncd'}.  
                   '</label><br /><label>'.                    '</label><br /><label>'.
                   '<input type="radio" name="colldatemode" value="preserve" /> '.$lt{'prd'}.                    '<input type="radio" name="colldatemode" value="preserve" /> '.$lt{'prd'}.
                   '</label><br /><label>'.                    '</label><br /><label>'.
                   '<input type="radio" name="colldatemode" value="shift" checked="checked" /> '.                    '<input type="radio" name="colldatemode" value="shift" checked="checked" /> '.
                   $lt{'shd'}.'</label>'.                    $lt{'shd'}.'</label>'.
                   '<input type="text" size="5" name="colldateshift" value="365" />'.                    '<input type="text" size="5" name="colldateshift" value="365" />'.
                   '</fieldset><fieldset style="display:inline-block">'.  
                   '<legend>'.$lt{'dpl'}.'</legend><label>'.  
                   '<input type="radio" name="colltinyurls" value="delete" />'.$lt{'nsl'}.  
                   '</label><br /><label>'.  
                   '<input type="radio" name="colltinyurls" value="create" checked="checked" />'.$lt{'csl'}.  
                   '</label></fieldset>'.  
                   '</div>');                    '</div>');
     }      }
   
Line 5087  sub process_textbook_request { Line 5068  sub process_textbook_request {
             } else {              } else {
                 $details->{dateshift} = '';                  $details->{dateshift} = '';
             }              }
             $details->{tinyurls} = $env{'form.owntinyurls'};  
         } elsif ($reqtype eq 'colleague') {          } elsif ($reqtype eq 'colleague') {
             $details->{datemode} = $env{'form.colldatemode'};              $details->{datemode} = $env{'form.colldatemode'};
             if ($details->{datemode} eq 'shift') {              if ($details->{datemode} eq 'shift') {
Line 5095  sub process_textbook_request { Line 5075  sub process_textbook_request {
             } else {              } else {
                 $details->{dateshift} = '';                  $details->{dateshift} = '';
             }              }
             $details->{tinyurls} = $env{'form.colltinyurls'};  
         } elsif (($reqtype eq 'textbook') || ($reqtype eq 'template')) {          } elsif (($reqtype eq 'textbook') || ($reqtype eq 'template')) {
             $details->{datemode} = 'delete';              $details->{datemode} = 'delete';
             $details->{dateshift} = '';              $details->{dateshift} = '';
             $details->{tinyurls} = '';  
         }          }
         if ($details->{dateshift} ne '') {          if ($details->{dateshift} ne '') {
             $details->{dateshift} =~ s/[^\d\.]+//g;              $details->{dateshift} =~ s/[^\d\.]+//g;
Line 5107  sub process_textbook_request { Line 5085  sub process_textbook_request {
     } else {      } else {
         $details->{datemode} = '';          $details->{datemode} = '';
         $details->{dateshift} = '';          $details->{dateshift} = '';
         $details->{tinyurls} = '';  
     }      }
     my $lonhost = $r->dir_config('lonHostID');      my $lonhost = $r->dir_config('lonHostID');
     $r->rflush();      $r->rflush();

Removed from v.1.95.2.2.2.1  
changed lines
  Added in v.1.95.2.4


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