Diff for /loncom/interface/lonmodifycourse.pm between versions 1.37 and 1.38

version 1.37, 2007/12/30 23:22:41 version 1.38, 2008/06/30 01:28:56
Line 43  sub get_dc_settable { Line 43  sub get_dc_settable {
     return ('courseowner','coursecode','authtype','autharg');      return ('courseowner','coursecode','authtype','autharg');
 }  }
   
   sub catalog_settable {
       my ($confhash) = @_;
       my @settable;
       if (ref($confhash) eq 'HASH') {
           if ($confhash->{'togglecats'} ne 'crs') {
               push(@settable,'togglecats');
           }
           if ($confhash->{'categorize'} ne 'crs') {
               push(@settable,'categorize');
           }
       } else {
           push(@settable,('togglecats','categorize'));
       }
       return @settable;
   }
   
 sub get_enrollment_settings {  sub get_enrollment_settings {
     my ($cdom,$cnum) = @_;      my ($cdom,$cnum) = @_;
     my %settings = &Apache::lonnet::dump('environment',$cdom,$cnum);      my %settings = &Apache::lonnet::dump('environment',$cdom,$cnum);
Line 145  sub print_course_selection_page { Line 161  sub print_course_selection_page {
 }  }
   
 sub print_modification_menu {  sub print_modification_menu {
     my ($r,$cdesc,$domdesc) = @_;      my ($r,$cdesc,$domdesc,$dom) = @_;
     &print_header($r,$cdesc);      &print_header($r,$cdesc);
     my $type = 'Course';      my $type = 'Course';
     my $action = '/adm/modifycourse';      my $action = '/adm/modifycourse';
Line 165  sub print_modification_menu { Line 181  sub print_modification_menu {
             },              },
           { text => 'Modify institutional code, course owner and/or default authentication',            { text => 'Modify institutional code, course owner and/or default authentication',
             phase => 'setparms',              phase => 'setparms',
             }            },
          );           );
       my %domconf = &Apache::lonnet::get_dom('configuration',['coursecategories'],$dom);
       my @additional_params = &catalog_settable($domconf{'coursecategories'});
       if (@additional_params > 0) {
           push (@menu, { text => 'Modify course catalog settings for course',
                          phase => 'catsettings',
                        });
       }
     my $menu_html = '<h3>'.&mt('View/Modify settings for: ').$cdesc.'</h3>'."\n".      my $menu_html = '<h3>'.&mt('View/Modify settings for: ').$cdesc.'</h3>'."\n".
               &mt('Although almost all course settings can be modified by a [_1], a number of settings exist which only a [_2] may change:',$cctitle,$dctitle).'                &mt('Although almost all course settings can be modified by a [_1], a number of settings exist which only a [_2] may change:',$cctitle,$dctitle).'
 <ul>  <ul>
   <li>'.$lt{'some'}.'</li>    <li>'.$lt{'some'}.'</li>
   <li>'.$lt{'crqo'}.'</li>    <li>'.$lt{'crqo'}.'</li>'."\n";
 </ul>      foreach my $item (@additional_params) {
           if ($item eq 'togglecats') {
               $menu_html .= '  <li>'.&mt('Hiding a course from the course catalog (can be [_1]configured[_2] to be modifiable in course context)','<a href="/adm/domainprefs?actions=coursecategories&phase=display">','</a>').'</li>'."\n";
           } elsif ($item eq 'categorize') {
               $menu_html .= '  <li>'.&mt('Manual cataloging of a course (can be [_1]configured[_2] to be modifiable in course context)','<a href="/adm/domainprefs?actions=coursecategories&phase=display">','</a>').'</li>'."\n";
   
           }
       }
       $menu_html .= ' </ul>
 <form name="menu" method="post" action="'.$action.'" />'."\n".  <form name="menu" method="post" action="'.$action.'" />'."\n".
     &hidden_form_elements();      &hidden_form_elements();
   
Line 289  ENDDOCUMENT Line 320  ENDDOCUMENT
     return;      return;
 }  }
   
   sub print_catsettings {
       my ($r,$cdom,$cnum,$cdesc) = @_;
       &print_header($r,$cdesc);
       my %lt = &Apache::lonlocal::texthash(
                                            'back' => 'Back to options page',
                                           );
       $r->print('<form action="/adm/modifycourse" method="post" name="catsettings">'.
                 '<h3>'.&mt('Catalog Settings for Course').'</h3>');
       my %domconf = &Apache::lonnet::get_dom('configuration',['coursecategories'],$cdom);
       my @cat_params = &catalog_settable($domconf{'coursecategories'});
       if (@cat_params > 0) {
           my %currsettings = 
               &Apache::lonnet::get('environment',['hidefromcat','categories'],$cdom,$cnum);
           if (grep(/^togglecats$/,@cat_params)) {
               my $excludeon = '';
               my $excludeoff = ' checked="checked" ';
               if ($currsettings{'hidefromcat'} eq 'yes') {
                   $excludeon = $excludeoff;
                   $excludeoff = ''; 
               }
               $r->print('<h4>'.&mt('Visibility in Course Catalog').'</h4>'.
                         &mt("Unless excluded, a course is listed in this domain's publicly accessible course catalog if at least of one the following applies").':<ul>'.
                         '<li>'.&mt('Auto-cataloging is enabled and the course is assigned an institutional code').'</li>'.
                         '<li>'.&mt('The course has been categorized into at least one of the course categories defined for the domain.').'</li></ul>'.
                         '<br />'.&mt('Exclude from course catalog').'&nbsp;<label><input name="hidefromcat" type="radio" value="yes" '.$excludeon.' />'.&mt('Yes').'</label>&nbsp;&nbsp;&nbsp;<label><input name="hidefromcat" type="radio" value="" '.$excludeoff.' />'.&mt('No').'</label><br />'); 
           }
           if (grep(/^categorize$/,@cat_params)) {
               $r->print('<h4>'.&mt('Categorize Course').'</h4>');
               if (ref($domconf{'coursecategories'}) eq 'HASH') {
                   my $cathash = $domconf{'coursecategories'}{'cats'};
                   if (ref($cathash) eq 'HASH') {
                       $r->print(&mt('Assign one or more categories to this course.').'<br /><br />'.
                                 &Apache::loncommon::assign_categories_table($cathash,
                                                        $currsettings{'categories'}));
                   } else {
                       $r->print(&mt('No categories defined for this domain'));
                   }
               } else {
                   $r->print(&mt('No categories defined for this domain'));
               }
               $r->print('<p>'.&mt('If auto-cataloging based on institutional code is enabled in the domain, a course will continue to be listed in the catalog of official courses, in addition to receiving a listing under any manually assigned categor(ies).').'</p>');
           }
           $r->print('<input type="button" name="chgcatsettings" value="'.
                     &mt('Save').'" onclick="javascript:changePage(document.catsettings,'."'processcat'".');" />');
       } else {
           $r->print('<span class="LC_warning">'.&mt('Catalog settings in this domain are set in course context via "Set Course Environment".').'</span><br /><br />'."\n".
                     '<a href="javascript:changePage(document.catsettings,'."'menu'".');">'.
                     $lt{'back'}.'</a>');
       }
       $r->print(&hidden_form_elements().'</form>'."\n");
       return;
   }
   
 sub print_course_modification_page {  sub print_course_modification_page {
     my ($r,$cdom,$cnum,$cdesc,$domdesc) = @_;      my ($r,$cdom,$cnum,$cdesc,$domdesc) = @_;
     my %longtype = &course_settings_descrip();      my %longtype = &course_settings_descrip();
Line 508  sub modify_course { Line 592  sub modify_course {
     my @nochanges = ();      my @nochanges = ();
     my @sections = ();      my @sections = ();
     my @xlists = ();      my @xlists = ();
     my $changecode = 0;      my %changed = ( code       => 0,
     my $changeowner = 0;                      owner      => 0,
                     );
     unless ($settings{'internal.sectionnums'} eq '') {      unless ($settings{'internal.sectionnums'} eq '') {
         if ($settings{'internal.sectionnums'} =~ m/,/) {          if ($settings{'internal.sectionnums'} =~ m/,/) {
             @sections = split/,/,$settings{'internal.sectionnums'};              @sections = split/,/,$settings{'internal.sectionnums'};
Line 532  sub modify_course { Line 617  sub modify_course {
     }      }
   
     my $description = $settings{'description'};      my $description = $settings{'description'};
     my %cenv = ();  
   
     if ($env{'form.login'} eq 'krb') {      if ($env{'form.login'} eq 'krb') {
         $newattr{'authtype'} = $env{'form.login'};          $newattr{'authtype'} = $env{'form.login'};
Line 559  sub modify_course { Line 643  sub modify_course {
     if ( exists($env{'form.courseowner'}) ) {      if ( exists($env{'form.courseowner'}) ) {
         $newattr{'courseowner'}=$env{'form.courseowner'};          $newattr{'courseowner'}=$env{'form.courseowner'};
         unless ( $newattr{'courseowner'} eq $currattr{'courseowner'} ) {          unless ( $newattr{'courseowner'} eq $currattr{'courseowner'} ) {
             $changeowner = 1;              $changed{'owner'} = 1;
         }           } 
     }      }
               
     if ( exists($env{'form.coursecode'}) ) {      if ( exists($env{'form.coursecode'}) ) {
         $newattr{'coursecode'}=$env{'form.coursecode'};          $newattr{'coursecode'}=$env{'form.coursecode'};
         unless ( $newattr{'coursecode'} eq $currattr{'coursecode'} ) {          unless ( $newattr{'coursecode'} eq $currattr{'coursecode'} ) {
             $changecode = 1;              $changed{'code'} = 1;
         }          }
     }      }
     if ($changeowner == 1 || $changecode == 1) {      if ($changed{'owner'} || $changed{'code'}) { 
         my $courseid_entry = &escape($cdom.'_'.$cnum).'='.&escape($description).':'.&escape($env{'form.coursecode'}).':'.&escape($env{'form.courseowner'}).':'.&escape($type);          my %crsinfo = &Apache::lonnet::courseiddump($cdom,'.',1,'.','.',$cnum,
         my %courseid_entry = (                                                      undef,undef,'.');
              $cdom.'_'.$cnum => {          if (ref($crsinfo{$env{'form.pickedcourse'}}) eq 'HASH') {
                                 description => $description,              $crsinfo{$env{'form.pickedcourse'}}{'inst_code'} = $env{'form.coursecode'};
                                 inst_code   => $env{'form.coursecode'},              $crsinfo{$env{'form.pickedcourse'}}{'owner'} = $env{'form.courseowner'};
                                 owner       => $env{'form.courseowner'},              my $chome = &Apache::lonnet::homeserver($cnum,$cdom);
                                 type        => $type,              my $putres = &Apache::lonnet::courseidput($cdom,\%crsinfo,$chome,'notime');
                                },          }
         );  
         &Apache::lonnet::courseidput($cdom,\%courseid_entry,  
                                      &Apache::lonnet::homeserver($cnum,$cdom),'notime');  
     }      }
     foreach my $param (@modifiable_params) {      foreach my $param (@modifiable_params) {
         if ($currattr{$param} eq $newattr{$param}) {          if ($currattr{$param} eq $newattr{$param}) {
Line 609  sub modify_course { Line 690  sub modify_course {
             $nochgresponse .= "<li>$longtype{$attr} ".&mt("still set to \"").$currattr{$attr}."\".</li>";              $nochgresponse .= "<li>$longtype{$attr} ".&mt("still set to \"").$currattr{$attr}."\".</li>";
                 }                  }
             }              }
             if ($changecode || $changeowner) {              if ($changed{'code'} || $changed{'owner'}) {
                 if ( $newattr{'courseowner'} eq '') {                  if ( $newattr{'courseowner'} eq '') {
             $warning .= &mt("There is no owner associated with this LON-CAPA course.  If automated enrollment in LON-CAPA courses at your institution requires validation of course owners, automated enrollment will fail for this course.<br/>");              $warning .= &mt("There is no owner associated with this LON-CAPA course.  If automated enrollment in LON-CAPA courses at your institution requires validation of course owners, automated enrollment will fail for this course.<br/>");
                 } else {                  } else {
             if (@sections > 0) {              if (@sections > 0) {
                         if ($changecode) {                          if ($changed{'code'}) {
                     foreach my $sec (@sections) {                      foreach my $sec (@sections) {
                 if ($sec =~ m/^(.+):/) {                  if ($sec =~ m/^(.+):/) {
                     my $inst_course_id = $newattr{'coursecode'}.$1;                      my $inst_course_id = $newattr{'coursecode'}.$1;
Line 631  sub modify_course { Line 712  sub modify_course {
             $warning .= &mt("If automatic enrollment is enabled for LON-CAPA course: ").$description.&mt(", automated enrollment may fail for ").$newattr{'coursecode'}.&mt(" - section $sec because this is not a valid section entry.<br/>");              $warning .= &mt("If automatic enrollment is enabled for LON-CAPA course: ").$description.&mt(", automated enrollment may fail for ").$newattr{'coursecode'}.&mt(" - section $sec because this is not a valid section entry.<br/>");
                 }                  }
             }              }
                 } elsif ($changeowner) {                  } elsif ($changed{'owner'}) {
                             foreach my $sec (@sections) {                              foreach my $sec (@sections) {
                                 if ($sec =~ m/^(.+):/) {                                  if ($sec =~ m/^(.+):/) {
                                     my $inst_course_id = $newattr{'coursecode'}.$1;                                      my $inst_course_id = $newattr{'coursecode'}.$1;
Line 647  sub modify_course { Line 728  sub modify_course {
             } else {              } else {
                 $warning .= &mt("As no section numbers are currently listed for LON-CAPA course: ").$description.&mt(", automated enrollment will not occur for any sections of coursecode: ").$newattr{'coursecode'}."<br/>";                  $warning .= &mt("As no section numbers are currently listed for LON-CAPA course: ").$description.&mt(", automated enrollment will not occur for any sections of coursecode: ").$newattr{'coursecode'}."<br/>";
             }              }
             if ( (@xlists > 0) && ($changeowner) ) {              if ( (@xlists > 0) && ($changed{'owner'}) ) {
                 foreach my $xlist (@xlists) {                  foreach my $xlist (@xlists) {
             if ($xlist =~ m/^(.+):/) {              if ($xlist =~ m/^(.+):/) {
                                 my $outcome = &Apache::lonnet::auto_new_course($cnum,$cdom,$1,$newattr{'courseowner'});                                  my $outcome = &Apache::lonnet::auto_new_course($cnum,$cdom,$1,$newattr{'courseowner'});
Line 750  sub modify_quota { Line 831  sub modify_quota {
     return;      return;
 }  }
   
   sub modify_catsettings {
       my ($r,$cdom,$cnum,$cdesc,$domdesc) = @_;
       &print_header($r,$cdesc);
       my %lt = &Apache::lonlocal::texthash(
                                            'back' => 'Back to options page',
                                           );
       my %desc = &Apache::lonlocal::texthash(
                                              'hidefromcat' => 'Excluded from course catalog',
                                              'categories' => 'Assigned categories for this course',
                                             );
       $r->print('
   <form action="/adm/modifycourse" method="post" name="processcat">
   <h3>'.&mt('Category settings').'</h3>');
       my %domconf = &Apache::lonnet::get_dom('configuration',['coursecategories'],$cdom);
       my @cat_params = &catalog_settable($domconf{'coursecategories'});
       if (@cat_params > 0) {
           my (%cenv,@changes,@nochanges);
           my %currsettings =
               &Apache::lonnet::get('environment',['hidefromcat','categories'],$cdom,$cnum);
           my (@newcategories,%showitem); 
           if (grep(/^togglecats$/,@cat_params)) {
               if ($currsettings{'hidefromcat'} ne $env{'form.hidefromcat'}) {
                   push(@changes,'hidefromcat');
                   $cenv{'hidefromcat'} = $env{'form.hidefromcat'};
               } else {
                   push(@nochanges,'hidefromcat');
               }
               if ($env{'form.hidefromcat'} eq 'yes') {
                   $showitem{'hidefromcat'} = '"'.&mt('Yes')."'";
               } else {
                   $showitem{'hidefromcat'} = '"'.&mt('No').'"';
               }
           }
           if (grep(/^categorize$/,@cat_params)) {
               my (@cats,@trails,%allitems,%idx,@jsarray);
               if (ref($domconf{'coursecategories'}) eq 'HASH') {
                   my $cathash = $domconf{'coursecategories'}{'cats'};
                   if (ref($cathash) eq 'HASH') {
                       &Apache::loncommon::extract_categories($cathash,\@cats,\@trails,
                                                              \%allitems,\%idx,\@jsarray);
                   }
               }
               @newcategories =  &Apache::loncommon::get_env_multiple('form.usecategory');
               if (@newcategories == 0) {
                   $showitem{'categories'} = '"'.&mt('None').'"';
               } else {
                   $showitem{'categories'} = '<ul>';
                   foreach my $item (@newcategories) {
                       $showitem{'categories'} .= '<li>'.$trails[$allitems{$item}].'</li>';
                   }
                   $showitem{'categories'} .= '</ul>';
               }
               my $catchg = 0;
               if ($currsettings{'categories'} ne '') {
                   my @currcategories = split('&',$currsettings{'categories'});
                   foreach my $cat (@currcategories) {
                       if (!grep(/^\Q$cat\E$/,@newcategories)) {
                           $catchg = 1;
                           last;
                       }
                   }
                   if (!$catchg) {
                       foreach my $cat (@newcategories) {
                           if (!grep(/^\Q$cat\E$/,@currcategories)) {
                               $catchg = 1;
                               last;                     
                           } 
                       } 
                   }
               } else {
                   if (@newcategories > 0) {
                       $catchg = 1;
                   }
               }
               if ($catchg) {
                   $cenv{'categories'} = join('&',@newcategories);
                   push(@changes,'categories');
               } else {
                   push(@nochanges,'categories');
               }
               if (@changes > 0) {
                   my $putreply = &Apache::lonnet::put('environment',\%cenv,$cdom,$cnum);
                   if ($putreply eq 'ok') {
                       my %crsinfo = &Apache::lonnet::courseiddump($cdom,'.',1,'.','.',
                                                                   $cnum,undef,undef,'.');
                       if (ref($crsinfo{$env{'form.pickedcourse'}}) eq 'HASH') {
                           if (grep(/^hidefromcat$/,@changes)) {
                               $crsinfo{$env{'form.pickedcourse'}}{'hidefromcat'} = $env{'form.hidefromcat'};
                           }
                           if (grep(/^categories$/,@changes)) {
                               $crsinfo{$env{'form.pickedcourse'}}{'categories'} = $cenv{'categories'};
                           }
                           my $chome = &Apache::lonnet::homeserver($cnum,$cdom);
                           my $putres = &Apache::lonnet::courseidput($cdom,\%crsinfo,$chome,'notime');
                       }
                       $r->print(&mt('The following changes occurred').'<ul>');
                       foreach my $item (@changes) {
                           $r->print('<li>'.&mt('[_1] now set to [_2]',$desc{$item},$showitem{$item}).'</li>');
                       }
                       $r->print('</ul><br />');
                   }
               }
               if (@nochanges > 0) {
                   $r->print(&mt('The following were unchanged').'<ul>');
                   foreach my $item (@nochanges) {
                       $r->print('<li>'.&mt('[_1] still set to [_2]',$desc{$item},$showitem{$item}).'</li>');
                   }
                   $r->print('</ul>');
               }
           }
       } else {
           $r->print(&mt('Category settings for courses in this domain should be modified in course context (via "Set Course Environment").').'<br />');
       }
       $r->print('<br />'."\n".
                 '<a href="javascript:changePage(document.processcat,'."'menu'".')">'.
                 $lt{'back'}.'</a>');
       $r->print(&hidden_form_elements().'</form>');
       return;
   }
   
 sub print_header {  sub print_header {
     my ($r,$cdesc,$javascript_validations) = @_;      my ($r,$cdesc,$javascript_validations) = @_;
     my $phase = "start";      my $phase = "start";
Line 833  sub check_course { Line 1034  sub check_course {
     if ($cdom eq $dom) {      if ($cdom eq $dom) {
         my $description;          my $description;
         my %courseIDs = &Apache::lonnet::courseiddump($cdom,'.',1,'.','.',          my %courseIDs = &Apache::lonnet::courseiddump($cdom,'.',1,'.','.',
                                            $cnum,undef,undef,'.');                                                        $cnum,undef,undef,'.');
         if (keys(%courseIDs) > 0) {          if (keys(%courseIDs) > 0) {
             $ok_course = 'ok';              $ok_course = 'ok';
             my ($instcode,$owner);              my ($instcode,$owner);
Line 878  sub hidden_form_elements { Line 1079  sub hidden_form_elements {
     my $hidden_elements =       my $hidden_elements = 
       &Apache::lonhtmlcommon::echo_form_input(['gosearch','coursecode',        &Apache::lonhtmlcommon::echo_form_input(['gosearch','coursecode',
           'prevphase','numlocalcc','courseowner','login','coursequota','intarg',            'prevphase','numlocalcc','courseowner','login','coursequota','intarg',
           'locarg','krbarg','krbver','counter'])."\n".            'locarg','krbarg','krbver','counter','hidefromcat','usecategory'])."\n".
           '<input type="hidden" name="prevphase" value="'.$env{'form.phase'}.'" />';            '<input type="hidden" name="prevphase" value="'.$env{'form.phase'}.'" />';
     return $hidden_elements;      return $hidden_elements;
 }  }
Line 927  sub handler { Line 1128  sub handler {
                         &Apache::lonhtmlcommon::add_breadcrumb                          &Apache::lonhtmlcommon::add_breadcrumb
                         ({href=>"javascript:changePage(document.$phase,'menu')",                          ({href=>"javascript:changePage(document.$phase,'menu')",
                           text=>"Pick action"});                            text=>"Pick action"});
                         &print_modification_menu($r,$cdesc,$domdesc);                          &print_modification_menu($r,$cdesc,$domdesc,$dom);
                     } elsif ($phase eq 'ccrole') {                      } elsif ($phase eq 'ccrole') {
                         &Apache::lonhtmlcommon::add_breadcrumb                          &Apache::lonhtmlcommon::add_breadcrumb
                          ({href=>"javascript:changePage(document.$phase,'ccrole')",                           ({href=>"javascript:changePage(document.$phase,'ccrole')",
Line 942  sub handler { Line 1143  sub handler {
                             &Apache::lonhtmlcommon::add_breadcrumb                              &Apache::lonhtmlcommon::add_breadcrumb
                             ({href=>"javascript:changePage(document.$phase,'$phase')",                              ({href=>"javascript:changePage(document.$phase,'$phase')",
                               text=>"Set quota"});                                text=>"Set quota"});
                             &print_setquota($r,$cdom,$cnum,$cdesc,$type)                              &print_setquota($r,$cdom,$cnum,$cdesc,$type);
                         } elsif ($phase eq 'processquota') {                           } elsif ($phase eq 'processquota') { 
                             &Apache::lonhtmlcommon::add_breadcrumb                              &Apache::lonhtmlcommon::add_breadcrumb
                             ({href=>"javascript:changePage(document.$phase,'setquota')",                              ({href=>"javascript:changePage(document.$phase,'setquota')",
Line 969  sub handler { Line 1170  sub handler {
                             ({href=>"javascript:changePage(document.$phase,'$phase')",                              ({href=>"javascript:changePage(document.$phase,'$phase')",
                               text=>"Result"});                                text=>"Result"});
                             &modify_course($r,$cdom,$cnum,$cdesc,$domdesc,$type);                              &modify_course($r,$cdom,$cnum,$cdesc,$domdesc,$type);
                           } elsif ($phase eq 'catsettings') {
                               &Apache::lonhtmlcommon::add_breadcrumb
                               ({href=>"javascript:changePage(document.$phase,'$phase')",
                                 text=>"Catalog settings"});
                               &print_catsettings($r,$cdom,$cnum,$cdesc,$type);
                           } elsif ($phase eq 'processcat') {
                               &Apache::lonhtmlcommon::add_breadcrumb
                               ({href=>"javascript:changePage(document.$phase,'catsettings')",
                                 text=>"Catalog settings"});
                               &Apache::lonhtmlcommon::add_breadcrumb
                               ({href=>"javascript:changePage(document.$phase,'$phase')",
                                 text=>"Result"});
                               &modify_catsettings($r,$cdom,$cnum,$cdesc,$domdesc);
                         }                          }
                     }                      }
                 } else {                  } else {

Removed from v.1.37  
changed lines
  Added in v.1.38


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