Diff for /loncom/interface/courseprefs.pm between versions 1.8.2.15 and 1.23

version 1.8.2.15, 2010/11/19 14:58:35 version 1.23, 2010/02/21 00:47:02
Line 122  Creates table used to display and set co Line 122  Creates table used to display and set co
   
 Inputs: $cdom,$items,$ordered,$settings,$rowtotal,$crstype  Inputs: $cdom,$items,$ordered,$settings,$rowtotal,$crstype
 where $cdom is course's domain, $items is HASH ref for current config  where $cdom is course's domain, $items is HASH ref for current config
 item, $ordered is ARRAY ref of items to include in row in  item, $ordered is ARRAY ref of items to include in row in 
 display order, $settings is HASH ref of current values forrow,  display order, $settings is HASH ref of current values forrow,
 $rowtotal is SCALAR ref used to accumulate row count, $crstype is  $rowtotal is SCALAR ref used to accumulate row count, $crstype is    
 course type.  course type.
   
 Returns: $datatable  Returns: $datatable
 HTML mark-up of data table which accumulates individual rows.  HTML mark-up of data table which accumulates individual rows.  
   
 =item nothidepriv_row()  =item nothidepriv_row()
   
 Creates row containing form elements used to display and set  Creates row containing form elements used to display and set
 whether Domain coordinators who are currently included in  whether Domain coordinators who are currently included in  
 advanced course user .db file for a course are to be hidden (e.g.,  advanced course user .db file for a course are to be hidden (e.g.,
 in syllabus, or from course user lists).  in syllabus, or from course user lists).
   
 Inputs: $cdom,$item,$settings,$crstype  Inputs: $cdom,$item,$settings,$crstype
 where $cdom is course domain, item is nothideprivileged, $settings is  where $cdom is course domain, item is nothideprivileged, $settings is
 HASH ref of the current values for nothideprivileged, $crstype is  HASH ref of the current values for nothideprivileged, $crstype is 
 course type (Course or Community).  course type (Course or Community). 
   
 Returns: $datatable  Return: $datatable
 HTML mark-up for Privileged users (Domain Coordinators) in staff listing.  HTML mark-up for Privileged users (Domain Coordinators) in staff listing.
   
 =item print_hdrfmt_row()  =item print_hdrfmt_row()
Line 163  for the "Print header format" row. Line 163  for the "Print header format" row.
 =item position_selector()  =item position_selector()
   
 Creates a select box which can be used to reorder substitutions  Creates a select box which can be used to reorder substitutions
 and text included in a printout header.  and text included in a printout header. 
   
 Inputs: $pos,$num,$maxnum  Inputs: $pos,$num,$maxnum
 where $pos is current position, $num is the unique identifier,  where $pos is current position, $num is the unique identifier,
Line 171  and $maxnum is the total number of items Line 171  and $maxnum is the total number of items
 and text in the printout header.  and text in the printout header.
   
 Returns: $output  Returns: $output
 HTML mark-up for the selectbox and a hidden form element containing  HTML mark-up for the selectbox and a hidden form element containing 
 the current position.  the current position.   
   
 =item substitution_selector()  =item substitution_selector()
   
 Creates a combination of select box for choosing an item  Creates a combination of select box for choosing an item 
 (student name, course ID or assignment note) to substitute,  (student name, course ID or assignment note) to substitute, 
 and a corresponding size limit in the header used for printouts.  and a corresponding size limit in the header used for printouts.
   
 Inputs: $num,$subst,$limit,$crstype  Inputs: $num,$subst,$limit,$crstype
 where $num is the unique identifier, $subst is the current  where $num is the unique identifier, $subst is the current 
 substitution (n,c or a, for name, course or note respectively,  substitution (n,c or a, for name, course or note respectively,
 $limit is the current size limit (integer), and $crstype is  $limit is the current size limit (integer), and $crstype is
 course type - course or community.  course type - course or community.
   
 Returns: $output  Returns: $output
 HTML mark-up for selectbox and textbox (separate table cells).  HTML mark-up for selectbox and textbox (separate table cells).  
   
 =item change_clone()  =item change_clone()
   
Line 272  sub handler { Line 272  sub handler {
                 gens => 'General community settings',                  gens => 'General community settings',
                 idnu => 'Community ID or number',                  idnu => 'Community ID or number',
                 desc => 'Community Description',                  desc => 'Community Description',
                 ownr => 'Community Owner',  
                 cown => 'Community Co-owners',  
                 catg => 'Categorize community',                  catg => 'Categorize community',
                 excc => 'Exclude from community catalog',                  excc => 'Exclude from community catalog',
                 clon => 'Users allowed to clone community',                  clon => 'Users allowed to clone community',
Line 299  sub handler { Line 297  sub handler {
                 gens => 'General course settings',                  gens => 'General course settings',
                 idnu => 'Course ID or number',                  idnu => 'Course ID or number',
                 desc => 'Course Description',                  desc => 'Course Description',
                 ownr => 'Course Owner',  
                 cown => 'Course Co-owners',  
                 catg => 'Categorize course',                  catg => 'Categorize course',
                 excc => 'Exclude from course catalog',                  excc => 'Exclude from course catalog',
                 clon => 'Users allowed to clone course',                  clon => 'Users allowed to clone course',
Line 344  sub handler { Line 340  sub handler {
         'courseinfo' =>          'courseinfo' =>
                    { text => $lt{'gens'},                     { text => $lt{'gens'},
                      help => 'Course_Environment',                       help => 'Course_Environment',
                      header => [{col1 => 'Setting',                       ordered => ['description','courseid','categories',
                                  col2 => 'Value'}],                                   'hidefromcat','externalsyllabus',
                      ordered => ['owner','co-owners','description','courseid',  
                                  'categories','hidefromcat','externalsyllabus',  
                                  'cloners','url','rolenames'],                                   'cloners','url','rolenames'],
                      itemtext => {                       itemtext => {
                                    'owner'            => $lt{'ownr'},                                     description      => $lt{'desc'},
                                    'co-owners'        => $lt{'cown'},                                     courseid         => $lt{'idnu'},
                                    'description'      => $lt{'desc'},                                     categories       => $lt{'catg'},
                                    'courseid'         => $lt{'idnu'},                                     hidefromcat      => $lt{'excc'},
                                    'categories'       => $lt{'catg'},                                     cloners          => $lt{'clon'}, 
                                    'hidefromcat'      => $lt{'excc'},                                     externalsyllabus => 'URL of Syllabus',
                                    'cloners'          => $lt{'clon'},                                      url              => 'Top Level Map',
                                    'externalsyllabus' => 'URL of Syllabus',                                     rolenames        => $lt{'rept'},
                                    'url'              => 'Top Level Map',  
                                    'rolenames'        => $lt{'rept'},  
                                  },                                   },
                     },                      },
         'localization' =>          'localization' =>
                     { text => 'Language/TimeZone/Locale',                      { text => 'Language & Time Localization',
                       help => 'Course_Environment',                        help => 'Course_Environment',
                       header => [{col1 => 'Setting',  
                                   col2 => 'Value',}],  
                       ordered => ['languages','timezone','datelocale'],                        ordered => ['languages','timezone','datelocale'],
                       itemtext => {                        itemtext => {
                                     languages  => 'Languages used',                                      languages  => 'Languages used',
Line 378  sub handler { Line 368  sub handler {
                     { text => 'Feedback messages',                      { text => 'Feedback messages',
                       help => 'Course_Environment',                        help => 'Course_Environment',
                       header => [{col1 => 'Questions about:',                        header => [{col1 => 'Questions about:',
                                   col2 => 'Recipients'},                                    col2 => 'Recipients'}],
                                  {col1 => 'Questions about:',  
                                   col2 => 'Custom Text'}],  
                       ordered => ['question.email','comment.email','policy.email'],                        ordered => ['question.email','comment.email','policy.email'],
                       itemtext => {                        itemtext => {
                                      'question.email' => 'Resource Content',                                       'question.email' => 'Resource Content',
Line 391  sub handler { Line 379  sub handler {
         'discussion' =>          'discussion' =>
                     { text => 'Discussion and Chat',                      { text => 'Discussion and Chat',
                       help => 'Course_Environment',                        help => 'Course_Environment',
                       header => [{col1 => 'Setting',                        ordered => ['plc.roles.denied','plc.users.denied',
                                   col2 => 'Value',}],                                    'pch.roles.denied','pch.users.denied',
                       ordered => ['pch.roles.denied','pch.users.denied',  
                                   'plc.roles.denied','plc.users.denied',  
                                   'allow_limited_html_in_feedback',                                    'allow_limited_html_in_feedback',
                                   'allow_discussion_post_editing'],                                    'allow_discussion_post_editing'],
                       itemtext => {                        itemtext => {
                          'pch.roles.denied'             => 'No Resource Discussion',                           'plc.roles.denied'             => 'No Resource Discussion',
                          'pch.users.denied'             => 'No Resource Discussion',                           'plc.users.denied'             => 'No Resource Discussion',
                          'plc.roles.denied'             => 'No Chat room use',                           'pch.roles.denied'             => 'No Chat room use',
                          'plc.users.denied'             => 'No Chat room use',                           'pch.users.denied'             => 'No Chat room use',
                          allow_limited_html_in_feedback => 'Allow limited HTML in discussion posts',                           allow_limited_html_in_feedback => 'Allow limited HTML in discussion',
                          allow_discussion_post_editing  => 'Users can edit/delete own discussion posts',                           allow_discussion_post_editing  => 'Users can edit/delete own discussion posts',
                                   },                                    },
                     },                      },
Line 418  sub handler { Line 404  sub handler {
                      ordered => ['default_enrollment_start_date',                       ordered => ['default_enrollment_start_date',
                                  'default_enrollment_end_date',                                   'default_enrollment_end_date',
                                  'nothideprivileged','student_classlist_view',                                   'nothideprivileged','student_classlist_view',
                                  'student_classlist_opt_in','student_classlist_portfiles'],                                   'student_opt_in','student_classlist_portfiles'],
                      itemtext => {                       itemtext => {
                          default_enrollment_start_date => 'Start date',                           default_enrollment_start_date => 'Start date',
                          default_enrollment_end_date   => 'End date',                           default_enrollment_end_date   => 'End date',
                          nothideprivileged             => $lt{'priv'},                           nothideprivileged             => $lt{'priv'},
                          student_classlist_view        => $lt{'stuv'},                           student_classlist_view        => $lt{'stuv'},
                          student_classlist_opt_in      => $lt{'stul'},                           student_opt_in                => $lt{'stul'},
                          student_classlist_portfiles   => 'Include link to accessible portfolio files',                           student_classlist_portfiles   => 'Include link to accessible portfolio files',
                                   },                                    },
                    },                     },
         'appearance' =>          'appearance' =>
                    { text => 'Display of resources ',                     { text => 'Display of resources ',
                      help => 'Course_Environment',                       help => 'Course_Environment',
                      header => [{col1 => 'Setting',  
                                  col2 => 'Value'}],  
                      ordered => ['default_xml_style','pageseparators',                       ordered => ['default_xml_style','pageseparators',
                                  'disable_receipt_display','texengine',                                   'disable_receipt_display','texengine',
                                  'tthoptions'],                                   'tthoptions'],
                       itemtext => {                        itemtext => {
                           default_xml_style       => 'Default XML Style File',                            default_xml_style       => 'Default XML style file',
                           pageseparators          => 'Visibly Separate Items on Pages',                            pageseparators          => 'Visibly Separate Items on Pages',
                           disable_receipt_display => 'Disable display of problem receipts',                            disable_receipt_display => 'Disable display of problem receipts',
                           texengine               => 'Force use of a specific math rendering engine',                            texengine               => 'Force use of a specific math rendering engine',
Line 447  sub handler { Line 431  sub handler {
         'grading' =>          'grading' =>
                   { text => 'Grading',                    { text => 'Grading',
                     help => 'Course_Environment',                      help => 'Course_Environment',
                     header => [{col1 => 'Setting',  
                                 col2 => 'Value',}],  
                     ordered => ['grading','rndseed',                      ordered => ['grading','rndseed',
                                 'receiptalg','disablesigfigs'],                                  'receiptalg','disablesigfigs'],
                     itemtext => {                      itemtext => {
Line 462  sub handler { Line 444  sub handler {
         'printouts' =>          'printouts' =>
                   { text => 'Printout generation',                    { text => 'Printout generation',
                     help => 'Course_Environment',                      help => 'Course_Environment',
                     header => [{col1 => 'Setting',  
                                 col2 => 'Value',}],  
                     ordered => ['problem_stream_switch','suppress_tries',                      ordered => ['problem_stream_switch','suppress_tries',
                                 'default_paper_size','print_header_format',                                  'default_paper_size','print_header_format',
                                 'disableexampointprint'],                                  'disableexampointprint','canuse_pdfforms'],
                     itemtext => {                      itemtext => {
                         problem_stream_switch => 'Allow problems to be split over pages',                          problem_stream_switch => 'Allow problems to be split over pages',
                         suppress_tries        => 'Suppress number of tries in printing',                          suppress_tries        => 'Suppress number of tries in printing',
                         default_paper_size    => 'Default paper type',                          default_paper_size    => 'Default paper type',
                         print_header_format   => 'Print header format',                          print_header_format   => 'Print header format',
                         disableexampointprint => 'Disable automatically printing point values on exams',                          disableexampointprint => 'Disable automatically printing point values on exams',
                           canuse_pdfforms    => 'Users can print problems as PDF forms and upload later for grading',
                                 },                                  },
                   },                    },
         'spreadsheet' =>          'spreadsheet' =>
                   { text => 'Spreadsheets',                    { text => 'Spreadsheets',
                     help => 'Course_Environment',                      help => 'Course_Environment',
                     header => [{col1 => 'Setting',  
                                 col2 => 'Value'}],  
                     ordered => ['spreadsheet_default_classcalc',                      ordered => ['spreadsheet_default_classcalc',
                                 'spreadsheet_default_studentcalc',                                  'spreadsheet_default_studentcalc',
                                 'spreadsheet_default_assesscalc','hideemptyrows'],                                  'spreadsheet_default_assesscalc','hideemptyrows'],
Line 493  sub handler { Line 472  sub handler {
         'bridgetasks' =>          'bridgetasks' =>
                   { text => 'Bridge tasks',                    { text => 'Bridge tasks',
                     help => 'Course_Environment',                      help => 'Course_Environment',
                     header => [{col1 => 'Setting',  
                                 col2 => 'Value'}],  
                     ordered => ['task_messages','task_grading',                      ordered => ['task_messages','task_grading',
                                 'suppress_embed_prompt'],                                  'suppress_embed_prompt'],
                     itemtext => {                      itemtext => {
Line 550  sub print_config_box { Line 527  sub print_config_box {
     my $itemtext = $item->{'itemtext'};      my $itemtext = $item->{'itemtext'};
     my $rowtotal = 0;      my $rowtotal = 0;
     my $output =      my $output =
          '<table class="LC_nested_outer">          '<h3><a href="#">'.&mt($item->{text}).'</a></h3>
           <tr>          <div>&nbsp;<span style="float:right">'.
            <th align="left" valign="middle"><span class="LC_font_larger">'.           &Apache::loncommon::help_open_topic($item->{'help'}).'</span>';
            &mt($item->{text}).'&nbsp;'.  
            &Apache::loncommon::help_open_topic($item->{'help'}).'</span></th>'."\n".  
           '</tr>';  
     if (($action eq 'feedback') || ($action eq 'classlists')) {      if (($action eq 'feedback') || ($action eq 'classlists')) {
         $output .= '          $output .= '
           <tr>              <table class="LC_nested">';   
            <td>          if (exists $item->{'header'}->[0]->{'col1'} || 
             <table class="LC_nested">              exists $item->{'header'}->[0]->{'col2'}) {
              <tr class="LC_info_row">   $output .= '          
             <tr class="LC_info_row">
               <td class="LC_left_item">'.&mt($item->{'header'}->[0]->{'col1'}).'</td>                <td class="LC_left_item">'.&mt($item->{'header'}->[0]->{'col1'}).'</td>
               <td class="LC_right_item">'.&mt($item->{'header'}->[0]->{'col2'}).'</td>                <td class="LC_right_item">'.&mt($item->{'header'}->[0]->{'col2'}).'</td>
              </tr>';              </tr>';
           }
         $rowtotal ++;          $rowtotal ++;
         if ($action eq 'feedback') {          if ($action eq 'feedback') {
             $output .= &print_feedback('top',$cdom,$settings,$ordered,$itemtext,\$rowtotal);              $output .= &print_feedback('top',$cdom,$settings,$ordered,$itemtext,\$rowtotal);
Line 573  sub print_config_box { Line 549  sub print_config_box {
         }          }
         $output .= '          $output .= '
            </table>             </table>
           </td>  
          </tr>  
          <tr>  
            <td>  
             <table class="LC_nested">              <table class="LC_nested">
              <tr class="LC_info_row">               <tr class="LC_info_row">
               <td class="LC_left_item">'.&mt($item->{'header'}->[1]->{'col1'}).'</td>';                <td class="LC_left_item">'.&mt($item->{'header'}->[1]->{'col1'}).'</td>';
Line 587  sub print_config_box { Line 559  sub print_config_box {
             $output .= &print_classlists('middle',$cdom,$settings,$itemtext,\$rowtotal,$crstype).              $output .= &print_classlists('middle',$cdom,$settings,$itemtext,\$rowtotal,$crstype).
                        '                         '
             </table>              </table>
            </td>              <table class="LC_nested">';
           </tr>              if (exists $item->{'header'}->[0]->{'col1'} || 
           <tr>              exists $item->{'header'}->[0]->{'col2'}) {
            <td>   $output .= '          
             <table class="LC_nested">   <tr class="LC_info_row">
              <tr class="LC_info_row">    <td class="LC_left_item">'.&mt($item->{'header'}->[0]->{'col1'}).'</td>
               <td class="LC_left_item" valign="top">'.&mt($item->{'header'}->[2]->{'col1'}).'</td>    <td class="LC_right_item">'.&mt($item->{'header'}->[0]->{'col2'}).'</td>
               <td class="LC_right_item" valign="top">'.&mt($item->{'header'}->[2]->{'col2'}).'</td>   </tr>';
              </tr>';          }
         }          }
     } else {      } else {
         $output .= '          $output .= '
           <tr>              <table class="LC_nested">';
            <td>          if (exists $item->{'header'}->[0]->{'col1'} || 
             <table class="LC_nested">              exists $item->{'header'}->[0]->{'col2'}) {
              <tr class="LC_info_row">   $output .= '          
             <tr class="LC_info_row">
               <td class="LC_left_item" valign="top">'.&mt($item->{'header'}->[0]->{'col1'}).'</td>                <td class="LC_left_item" valign="top">'.&mt($item->{'header'}->[0]->{'col1'}).'</td>
               <td class="LC_right_item" valign="top">'.&mt($item->{'header'}->[0]->{'col2'}).'</td>                <td class="LC_right_item" valign="top">'.&mt($item->{'header'}->[0]->{'col2'}).'</td>
              </tr>';              </tr>';
           }
     }      }
     $rowtotal ++;      $rowtotal ++;
     if ($action eq 'courseinfo') {      if ($action eq 'courseinfo') {
Line 633  sub print_config_box { Line 607  sub print_config_box {
     }      }
     $output .= '      $output .= '
    </table>     </table>
   </td>  </div>';
  </tr>  
 </table><br />';  
     return ($output,$rowtotal);      return ($output,$rowtotal);
 }  }
   
Line 709  sub process_changes { Line 681  sub process_changes {
                                 if (exists($env{'form.cloners_activate'})) {                                  if (exists($env{'form.cloners_activate'})) {
                                     my $actnum = $env{'form.cloners_activate'};                                      my $actnum = $env{'form.cloners_activate'};
                                     if ($actnum ne '') {                                      if ($actnum ne '') {
                                         if ($env{'form.cloners_dom_'.$actnum} ne '') {                                          if ($env{'form.clonersdom_'.$actnum} ne '') {
                                             my $clonedom = $env{'form.cloners_dom_'.$actnum};                                              my $clonedom = $env{'form.clonersdom_'.$actnum};
                                             if (&check_clone($clonedom,$disallowed) eq 'ok') {                                              if (&check_clone($clonedom,$disallowed) eq 'ok') {
                                                 $newvalues{$entry} = '*:'.$clonedom;                                                  $newvalues{$entry} = '*:'.$clonedom;
                                                 push(@clonedoms,$newvalues{$entry});                                                  push(@clonedoms,$newvalues{$entry});
Line 780  sub process_changes { Line 752  sub process_changes {
                                     }                                      }
                                 }                                  }
                             }                              }
                         } elsif ($entry eq 'co-owners') {  
                             my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};  
                             my $coowners = $values->{'internal.co-owners'};  
                             my @currcoown;  
                             if ($coowners) {  
                                 @currcoown = split(',',$coowners);  
                             }  
                             if (&Apache::lonnet::is_course_owner($cdom,$cnum)) {  
                                 my $autocoowner;  
                                 if (($crstype eq 'Course') &&  
                                     ($values->{'internal.coursecode'})) {  
                                     my %domconf =  
                                         &Apache::lonnet::get_dom('configuration',['autoenroll'],$cdom);  
                                     if (ref($domconf{'autoenroll'}) eq 'HASH') {  
                                         $autocoowner = $domconf{'autoenroll'}{'co-owners'};  
                                     }  
                                 }  
                                 unless ($autocoowner) {  
                                     my @keepcoowners = &Apache::loncommon::get_env_multiple('form.coowners');  
                                     my @pendingcoowners = &Apache::loncommon::get_env_multiple('form.pendingcoowners');  
                                     my @invitecoowners =  &Apache::loncommon::get_env_multiple('form.invitecoowners');  
                                     if (@invitecoowners) {  
                                         push(@pendingcoowners,@invitecoowners);  
                                     }  
                                     $newvalues{'pendingco-owners'} = join(',',sort(@pendingcoowners));  
                                     $newvalues{'co-owners'} = join(',',sort(@keepcoowners));  
                                     if ($newvalues{'co-owners'} ne $values->{'internal.co-owners'}) {  
                                         $changes->{$entry}{'co-owners'} = $newvalues{'co-owners'};  
                                         push(@{$changes->{$entry}{'changed'}},'co-owners');  
                                     }  
                                     if ($newvalues{'pendingco-owners'} ne $values->{'internal.pendingco-owners'}) {  
                                         $changes->{$entry}{'pendingco-owners'} = $newvalues{'pendingco-owners'};  
                                         push(@{$changes->{$entry}{'changed'}},'pendingco-owners');  
                                     }  
                                 }  
                             } else {  
                                 my (@newpending,@newcoown);  
                                 my $uname = $env{'user.name'};  
                                 my $udom = $env{'user.domain'};  
                                 my $pendingcoowners = $values->{'internal.pendingco-owners'};  
                                 my @pendingcoown = split(',',$pendingcoowners);  
                                 if ($env{'form.pending_coowoner'}) {  
                                     foreach my $item (@pendingcoown) {  
                                         unless ($item eq $uname.':'.$udom) {  
                                             push(@newpending,$item);  
                                         }  
                                     }  
                                     @newcoown = @currcoown;  
                                     if ($env{'form.pending_coowoner'} eq 'accept') {  
                                         unless (grep(/^\Q$uname\E:\Q$udom\E$/,@currcoown)) {  
                                             push(@newcoown,$uname.':'.$udom);  
                                         }  
                                     }  
                                 } elsif ($env{'form.remove_coowoner'}) {  
                                     foreach my $item (@currcoown) {  
                                         unless ($item eq $uname.':'.$udom) {  
                                             push(@newcoown,$item);  
                                         }  
                                     }  
                                     if ($pendingcoowners ne '') {  
                                         @newpending = @pendingcoown;  
                                     }  
                                 }  
                                 $newvalues{'pendingco-owners'} = join(',',sort(@newpending));  
                                 $newvalues{'co-owners'} = join(',',sort(@newcoown));  
                                 if ($newvalues{'co-owners'} ne $values->{'internal.co-owners'}) {  
                                     $changes->{$entry}{'co-owners'} = $newvalues{'co-owners'};  
                                     push(@{$changes->{$entry}{'changed'}},'co-owners');  
                                 }  
                                 if ($newvalues{'pendingco-owners'} ne $values->{'internal.pendingco-owners'}) {  
                                     $changes->{$entry}{'pendingco-owners'} = $newvalues{'pendingco-owners'};  
                                     push(@{$changes->{$entry}{'changed'}},'pendingco-owners');  
                                 }  
                             }  
                         } elsif ($entry =~ /^default_enrollment_(start|end)_date$/) {                          } elsif ($entry =~ /^default_enrollment_(start|end)_date$/) {
                             $newvalues{$entry}=&Apache::lonhtmlcommon::get_date_from_form($entry);                              $newvalues{$entry}=&Apache::lonhtmlcommon::get_date_from_form($entry);
                         } elsif ($entry eq 'rolenames') {                          } elsif ($entry eq 'rolenames') {
Line 1022  sub process_changes { Line 920  sub process_changes {
                                                 $hdr .= $env{'form.printfmthdr_limit_'.$i};                                                  $hdr .= $env{'form.printfmthdr_limit_'.$i};
                                             }                                              }
                                             $hdr .= $env{'form.printfmthdr_sub_'.$i};                                              $hdr .= $env{'form.printfmthdr_sub_'.$i};
                                         } elsif ($env{'form.printfmthdr_text_'.$i} ne '') {                                          } elsif ($env{'form.printfmthdr_sub_'.$i} ne '') {
                                             $hdr = $env{'form.printfmthdr_text_'.$i};                                              $hdr = $env{'form.printfmthdr_sub_'.$i};
                                         }                                          }
                                         $newhdr[$env{'form.printfmthdr_pos_'.$i}] = $hdr;                                          $newhdr[$env{'form.printfmthdr_pos_'.$i}] = $hdr;
                                     }                                      }
Line 1070  sub process_changes { Line 968  sub process_changes {
                         } else {                          } else {
                             $newvalues{$entry} = $env{'form.'.$entry};                              $newvalues{$entry} = $env{'form.'.$entry};
                         }                          }
                         unless ($entry eq 'co-owners') {                          if ($newvalues{$entry} ne $values->{$entry}) {
                             if ($newvalues{$entry} ne $values->{$entry}) {                              $changes->{$entry} = $newvalues{$entry};
                                 $changes->{$entry} = $newvalues{$entry};  
                             }  
                         }                          }
                     }                      }
                 }                  }
Line 1149  sub store_changes { Line 1045  sub store_changes {
             $output .= '<h3>'.&mt($prefs->{$item}{'text'}).'</h3>';              $output .= '<h3>'.&mt($prefs->{$item}{'text'}).'</h3>';
             if (ref($changes->{$item}) eq 'HASH') {              if (ref($changes->{$item}) eq 'HASH') {
                 if (keys(%{$changes->{$item}}) > 0) {                  if (keys(%{$changes->{$item}}) > 0) {
                     $output .= &mt('Changes made:').'<ul>';                      $output .= &mt('Changes made:').'<ul style="list-style:none;">';
                     if ($item eq 'other') {                      if ($item eq 'other') {
                         foreach my $key (sort(keys(%{$changes->{$item}}))) {                          foreach my $key (sort(keys(%{$changes->{$item}}))) {
                             $storehash{$key} = $changes->{$item}{$key};                              $storehash{$key} = $changes->{$item}{$key};
                             if ($changes->{$item}{$key} eq '') {                              if ($changes->{$item}{$key} eq '') {
                                 push(@delkeys,$key);                                  push(@delkeys,$key);
                                 $output .= '<li>'.&mt('Deleted setting for [_1]','<i>'.$key.'</i>').'</li>';                                  $output .= '<li>'.&Apache::lonhtmlcommon::confirm_success(&mt('Deleted setting for [_1]','<i>'.$key.'</i>')).'</li>';
                             } else {                              } else {
                                 $output .= '<li>'.&mt('[_1] set to [_2]','<i>'.$key.'</i>',                                  $output .= '<li>'.&Apache::lonhtmlcommon::confirm_success(&mt('[_1] set to [_2]','<i>'.$key.'</i>',
                                            "'$storehash{$key}'").'</li>';                                             "'$storehash{$key}'")).'</li>';
                             }                              }
                         }                          }
                     } else {                      } else {
Line 1190  sub store_changes { Line 1086  sub store_changes {
                                                 "'<b>".$newname."</b>'").'</li>';                                                  "'<b>".$newname."</b>'").'</li>';
                                     }                                      }
                                     if ($msg ne '') {                                      if ($msg ne '') {
                                         $output .= '<li>'.&mt($displayname).'<ul>'.$msg.'</ul></li>';                                          $output .= '<li>'.&Apache::lonhtmlcommon::confirm_success(&mt($displayname)).'<ul class="LC_success">'.$msg.'</ul></li>';
                                     }                                      }
                                 } else {                                  } else {
                                     next if (!exists($changes->{$item}{$key}));                                      next if (!exists($changes->{$item}{$key}));
                                     my ($displayname,$text);                                      my ($displayname,$text);
                                     $text = $prefs->{$item}->{'itemtext'}{$key};                                      $text = $prefs->{$item}->{'itemtext'}{$key};
                                     my $displayval;                                      my $displayval = $changes->{$item}{$key};
                                     unless ($key eq 'co-owners') {  
                                         $displayval = $changes->{$item}{$key};  
                                     }  
                                     if ($item eq 'feedback') {                                      if ($item eq 'feedback') {
                                         if ($key =~ /^(question|policy|comment)(\.email)\.text$/) {                                          if ($key =~ /^(question|policy|comment)(\.email)\.text$/) {
                                             $text = $prefs->{$item}->{'itemtext'}{$1.$2};                                              $text = $prefs->{$item}->{'itemtext'}{$1.$2};
Line 1253  sub store_changes { Line 1146  sub store_changes {
                                     if (defined($yesno{$key})) {                                      if (defined($yesno{$key})) {
                                         $displayval = &mt('No');                                          $displayval = &mt('No');
                                         if ($changes->{$item}{$key} eq 'yes') {                                          if ($changes->{$item}{$key} eq 'yes') {
                                             $displayval = &mt('Yes');                                                       $displayval = &mt('Yes');                          
                                         }                                          }
                                     } elsif (($key =~ /^default_enrollment_(start|end)_date$/) && ($displayval)) {                                      } elsif (($key =~ /^default_enrollment_(start|end)_date$/) && ($displayval)) {
                                         $displayval = &Apache::lonlocal::locallocaltime($displayval);                                          $displayval = &Apache::lonlocal::locallocaltime($displayval);
                                     } elsif ($key eq 'categories') {                                      } elsif ($key eq 'categories') {
                                         $displayval = $env{'form.categories_display'};                                          $displayval = $env{'form.categories_display'};
                                     }                                      } elsif ($key eq 'canuse_pdfforms') {
                                     if ($key eq 'co-owners') {                                          if ($changes->{$item}{$key} eq '1') {
                                         if (ref($changes->{$item}{$key}) eq 'HASH') {                                              $displayval = &mt('Yes');
                                             if (ref($changes->{$item}{$key}{'changed'}) eq 'ARRAY') {                                          } elsif ($changes->{$item}{$key} eq '0') {
                                                 foreach my $type ('co-owners','pendingco-owners') {                                              $displayval = &mt('No');
                                                     next unless (grep(/^\Q$type\E$/,@{$changes->{$item}{$key}{'changed'}}));  
                                                     if ($type eq 'pendingco-owners') {  
                                                         if (&Apache::lonnet::is_course_owner($cdom,$cnum)) {  
                                                             $displayname = &mt('Invited as co-owners, pending acceptance');  
                                                         }  
                                                     }  
                                                     if ($changes->{$item}{$key}{$type} eq '') {  
                                                         push(@delkeys,'internal.'.$type);  
                                                         if (&Apache::lonnet::is_course_owner($cdom,$cnum)) {  
                                                             $output .= '<li>'.&Apache::lonhtmlcommon::confirm_success(&mt('Deleted setting for [_1]',  
                                                             '<i>'.$displayname.'</i>')).'</li>';  
                                                         }  
                                                     } elsif (&Apache::lonnet::is_course_owner($cdom,$cnum)) {  
                                                         $displayval = join(', ',map { &Apache::loncommon::plainname(split(':',$_)); } split(',',$changes->{$item}{$key}{$type}));  
                                                         $output .= '<li>'.&Apache::lonhtmlcommon::confirm_success(&mt('[_1] set to [_2]',  
                                                                    '<i>'.$displayname.'</i>',  
                                                                    "'<b>$displayval</b>'")).'</li>';  
                                                     }  
                                                 }  
                                             }  
                                             unless (&Apache::lonnet::is_course_owner($cdom,$cnum)) {  
                                                 if ($env{'form.pending_coowoner'} eq 'accept') {  
                                                         $displayval = &mt('on');  
                                                 } elsif ($env{'form.pending_coowoner'} eq 'decline') {  
                                                         $displayval = '';  
                                                         $output .= '<li>'.&Apache::lonhtmlcommon::confirm_success(&mt('Invitation to be co-owner declined')).'</li>';  
                                                 } elsif ($env{'form.remove_coowoner'}) {  
                                                     $displayval = &mt('off');  
                                                 }  
                                                 if ($displayval) {  
                                                     $displayname = &mt('Your co-ownership status');  
                                                     $output .= '<li>'.&Apache::lonhtmlcommon::confirm_success(&mt('[_1] set to [_2]',  
                                                    '<i>'.$displayname.'</i>',  
                                                    "'<b>$displayval</b>'")).'</li>';  
                                                 }  
                                             }  
                                         }                                          }
                                     } elsif ($changes->{$item}{$key} eq '') {                                      }
                                       if ($changes->{$item}{$key} eq '') {
                                         push(@delkeys,$key);                                          push(@delkeys,$key);
                                         $output .= '<li>'.&Apache::lonhtmlcommon::confirm_success(&mt('Deleted setting for [_1]',                                          $output .= '<li>'.&Apache::lonhtmlcommon::confirm_success(&mt('Deleted setting for [_1]',
                                                    '<i>'.$displayname.'</i>')).'</li>';                                                     '<i>'.$displayname.'</i>')).'</li>';
Line 1312  sub store_changes { Line 1170  sub store_changes {
                                         if ($key eq 'url') {                                          if ($key eq 'url') {
                                             my $bkuptime=time;                                              my $bkuptime=time;
                                             $output .= ('&nbsp;'x2).&mt('(Previous URL backed up)').': '.                                              $output .= ('&nbsp;'x2).&mt('(Previous URL backed up)').': '.
                                             $storehash{'top level map backup '.$bkuptime} = $values->{$key};                                              $storehash{'top level map backup '.$bkuptime} => $values->{$key};
                                         }                                          }
                                         $output .= '</li>';                                          $output .= '</li>';
                                     }                                      }
                                     if ($key eq 'co-owners') {                                      $storehash{$key} = $changes->{$item}{$key};
                                         if (ref($changes->{$item}{$key}) eq 'HASH') {  
                                             if (ref($changes->{$item}{$key}{'changed'}) eq 'ARRAY') {  
                                                 foreach my $type ('co-owners','pendingco-owners') {  
                                                     next unless (grep(/^\Q$type\E$/,@{$changes->{$item}{$key}{'changed'}}));  
                                                     $storehash{'internal.'.$type} = $changes->{$item}{$key}{$type};  
                                                 }  
                                             }  
                                         }  
                                     } else {  
                                         $storehash{$key} = $changes->{$item}{$key};  
                                     }  
                                 }                                  }
                                 if ($key eq 'cloners') {                                  if ($key eq 'cloners') {
                                     # Get existing cloners                                      # Get existing cloners
                                     my %clonenames =                                      my %clonenames = 
                                         &Apache::lonnet::dump('environment',$cdom,$cnum,'cloners');                                          &Apache::lonnet::dump('environment',$cdom,$cnum,'cloners');
                                     if ($clonenames{'cloners'} =~ /,/) {                                      if ($clonenames{'cloners'} =~ /,/) {
                                         @oldcloner = split(/\s*\,\s*/,$clonenames{'cloners'});                                          @oldcloner = split(/\s*\,\s*/,$clonenames{'cloners'});
Line 1340  sub store_changes { Line 1187  sub store_changes {
                                     }                                      }
                                 }                                  }
                                 if (($key eq 'description') || ($key eq 'cloners') ||                                  if (($key eq 'description') || ($key eq 'cloners') ||
                                     ($key eq 'hidefromcat') || ($key eq 'categories') ||                                      ($key eq 'hidefromcat') || ($key eq 'categories')) {
                                     ($key eq 'co-owners')) {  
                                     push(@need_env_update,$key);                                      push(@need_env_update,$key);
                                 }                                  }
                             }                              }
Line 1376  sub store_changes { Line 1222  sub store_changes {
                     $output .= &mt('An error occurred when removing course settings which are no longer in use.');                      $output .= &mt('An error occurred when removing course settings which are no longer in use.');
                 }                  }
                 $output .= '</span>';                  $output .= '</span>';
             }              } else {
         } else {                  foreach my $key (@delkeys) {
             foreach my $key (@delkeys) {                      &Apache::lonnet::delenv('course.'.$cdom.'_'.$cnum.'.'.$key);
                 &Apache::lonnet::delenv('course.'.$cdom.'_'.$cnum.'.'.$key);                  }
             }              }
         }          }
         if (@need_env_update) {          if (@need_env_update) {
Line 1415  sub update_env { Line 1261  sub update_env {
                     &Apache::lonnet::appenv({'course.'.$env{'request.course.id'}.'.'.$key => $storehash->{$key}});                      &Apache::lonnet::appenv({'course.'.$env{'request.course.id'}.'.'.$key => $storehash->{$key}});
                     $crsinfo{$env{'request.course.id'}}{$key} = $storehash->{$key};                      $crsinfo{$env{'request.course.id'}}{$key} = $storehash->{$key};
                     $count ++;                      $count ++;
                 } elsif ($key eq 'co-owners') {  
                     if ($storehash->{'internal.co-owners'} ne '') {  
                         &Apache::lonnet::appenv({'course.'.$env{'request.course.id'}.'.internal.co-owners' => $storehash->{'internal.co-owners'}});  
                     }  
                     if ($storehash->{'internal.pendingco-owners'} ne '') {  
                         &Apache::lonnet::appenv({'course.'.$env{'request.course.id'}.'.internal.pendingco-owners' => $storehash->{'internal.pendingco-owners'}});  
                     }  
                     my @coowners = split(',',$storehash->{'internal.'.$key});  
                     $crsinfo{$env{'request.course.id'}}{'co-owners'} = \@coowners;  
                     $count ++;  
                 }                  }
             }              }
             if ($count) {              if ($count) {
Line 1639  sub print_courseinfo { Line 1475  sub print_courseinfo {
     unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY') && (ref($itemtext) eq 'HASH')) {      unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY') && (ref($itemtext) eq 'HASH')) {
         return;          return;
     }      }
     my ($cathash,$categoriesform,$autocoowner);      my ($cathash,$categoriesform);
     my %domconf =       my %domconf = 
         &Apache::lonnet::get_dom('configuration',['coursecategories','autoenroll'],$cdom);          &Apache::lonnet::get_dom('configuration',['coursecategories'],$cdom);
     if (ref($domconf{'coursecategories'}) eq 'HASH') {      if (ref($domconf{'coursecategories'}) eq 'HASH') {
         $cathash = $domconf{'coursecategories'}{'cats'};          $cathash = $domconf{'coursecategories'}{'cats'};
         if (ref($cathash) eq 'HASH') {          if (ref($cathash) eq 'HASH') {
Line 1650  sub print_courseinfo { Line 1486  sub print_courseinfo {
                                                 $settings->{'categories'},$crstype)."\n";                                                  $settings->{'categories'},$crstype)."\n";
         }          }
     }      }
     if (ref($domconf{'autoenroll'}) eq 'HASH') {  
         $autocoowner = $domconf{'autoenroll'}{'co-owners'};  
     }  
     if (!defined($categoriesform)) {      if (!defined($categoriesform)) {
         $categoriesform = &mt('No categories defined in this domain.');          $categoriesform = &mt('No categories defined in this domain.');
     }      }
Line 1675  sub print_courseinfo { Line 1508  sub print_courseinfo {
                            '</span>',                             '</span>',
                    input => 'textbox',                     input => 'textbox',
                    size  => '40',                     size  => '40',
                      advanced => 1
                  },                   },
         'description'  => {           'description'  => { 
                    text => '<b>'.&mt($itemtext->{'description'}).'</b>',                     text => '<b>'.&mt($itemtext->{'description'}).'</b>',
                    input => 'textbox',                     input => 'textbox',
                    size  => '25',                     size  => '25',
                           },                            },
         'owner'        => {  
                    text => '<b>'.&mt($itemtext->{'owner'}).'</b>',  
                           },  
         'co-owners'    => {  
                    text => '<b>'.&mt($itemtext->{'co-owners'}).'</b>',  
                           },  
         'courseid'     => {           'courseid'     => { 
                    text => '<b>'.&mt($itemtext->{'courseid'}).'</b><br />'.'('.                     text => '<b>'.&mt($itemtext->{'courseid'}).'</b><br />'.'('.
                            &mt('internal, optional').')',                             &mt('internal, optional').')',
Line 1695  sub print_courseinfo { Line 1523  sub print_courseinfo {
                           },                            },
         'cloners'      => {           'cloners'      => { 
                    text => '<b>'.&mt($itemtext->{'cloners'}).'</b><br />'.                     text => '<b>'.&mt($itemtext->{'cloners'}).'</b><br />'.
                            &mt('Owner and Coordinators included automatically'),                             &mt('Coordinators included automatically'),
                    input => 'textbox',                     input => 'textbox',
                    size  => '40',                     size  => '40',
                      advanced => 1
                          },                           },
         'rolenames'  => {           'rolenames'  => { 
                    text  => '<b>'.&mt($itemtext->{'rolenames'}).'</b><br />'.                     text  => '<b>'.&mt($itemtext->{'rolenames'}).'</b><br />'.
                             '('.$replace.')',                              '('.$replace.')',
                    input => 'textbox',                     input => 'textbox',
                    size  => '20',                     size  => '20',
                      advanced => 1
                         },                          },
         'externalsyllabus' => {          'externalsyllabus' => {
                    text => '<b>'.&mt($itemtext->{'externalsyllabus'}).'</b><br />('.                     text => '<b>'.&mt($itemtext->{'externalsyllabus'}).'</b><br />('.
Line 1732  sub print_courseinfo { Line 1562  sub print_courseinfo {
             next if (!$can_categorize);              next if (!$can_categorize);
         }          }
         $count ++;          $count ++;
         $datatable .= &item_table_row_start($items{$item}{text},$count);          if (exists $items{$item}{advanced} && $items{$item}{advanced} == 1) {
           $datatable .= &item_table_row_start($items{$item}{text},$count,"advanced");
           } else {
           $datatable .= &item_table_row_start($items{$item}{text},$count);
           }
         if ($items{$item}{input} eq 'radio') {          if ($items{$item}{input} eq 'radio') {
             $datatable .= &yesno_radio($item,$settings);              $datatable .= &yesno_radio($item,$settings);
         } elsif ($item eq 'cloners') {          } elsif ($item eq 'cloners') {
Line 1845  sub print_courseinfo { Line 1679  sub print_courseinfo {
             $datatable .= '<input type="hidden" name="categories" value="'.$settings->{$item}.'" />'.              $datatable .= '<input type="hidden" name="categories" value="'.$settings->{$item}.'" />'.
                           &Apache::lonhtmlcommon::textbox($item.'_display',$settings->{$item},                            &Apache::lonhtmlcommon::textbox($item.'_display',$settings->{$item},
                                                           $items{$item}{size},$launcher);                                                            $items{$item}{size},$launcher);
         } elsif ($item eq 'owner') {  
             my $owner = $env{'course.'.$env{'request.course.id'}.'.internal.courseowner'};  
             if ($owner =~ /:/) {  
                 my ($ownername,$ownerdom) = split(':',$owner);  
                 $owner = &Apache::loncommon::plainname($ownername,$ownerdom);  
             } elsif ($owner ne '') {  
                 $owner = &Apache::loncommon::plainname($owner,$cdom);  
             } else {  
                 $owner = &mt('None specified');  
             }  
             my $domdesc = &Apache::lonnet::domain($cdom,'description');  
             $datatable .= $owner;  
         } elsif ($item eq 'co-owners') {  
             my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};  
             my $coowners = $env{'course.'.$env{'request.course.id'}.'.internal.co-owners'};  
             my @currcoown;  
             if ($coowners) {  
                 @currcoown = split(',',$coowners);  
             }  
             if (&Apache::lonnet::is_course_owner($cdom,$cnum)) {  
                 if (($crstype eq 'Course') && ($env{'course.'.$env{'request.course.id'}.'.internal.coursecode'}) && ($autocoowner)) {  
                     $datatable .= &show_autocoowners(@currcoown);  
                 } else {  
                     $datatable .= &coowner_invitations($cnum,$cdom,@currcoown);  
                 }  
             } else {  
                 if (($crstype eq 'Course') && ($env{'course.'.$env{'request.course.id'}.'.internal.coursecode'}) && ($autocoowner)) {  
                     $datatable .= &show_autocoowners(@currcoown);  
                 } else {  
                     $datatable .= &manage_coownership($cnum,$cdom,@currcoown);  
                 }  
             }  
         } else {          } else {
             $datatable .= &Apache::lonhtmlcommon::textbox($item,$settings->{$item},$items{$item}{size});              $datatable .= &Apache::lonhtmlcommon::textbox($item,$settings->{$item},$items{$item}{size});
         }          }
Line 2034  ENDSCRIPT Line 1836  ENDSCRIPT
     return;      return;
 }  }
   
 sub show_autocoowners {  
     my (@currcoown) = @_;  
     my $output = '<i>'.&mt('Co-ownership is set automatically when a Course Coordinator role is assigned to official course personnel (from institutional data).').'</i>';  
     if (@currcoown > 0) {  
         $output .= '<br />'.&mt('Current co-owners are:').'&nbsp;'.  
                    join(', ',map { &Apache::loncommon::plainname(split(':',$_)); } (@currcoown));  
     } else {  
         $output .= '<br />'.&mt('Currently no co-owners.');  
     }  
     return $output;  
 }  
   
 sub coowner_invitations {  
     my ($cnum,$cdom,@currcoown) = @_;  
     my ($output,@pendingcoown,@othercoords);  
     my $pendingcoowners =  
         $env{'course.'.$env{'request.course.id'}.'.internal.pendingco-owners'};  
     if ($pendingcoowners) {  
         @pendingcoown = split(',',$pendingcoowners);  
     }  
     my $ccrole = 'cc';  
     my %ccroles = &Apache::lonnet::get_my_roles($cnum,$cdom,undef,undef,[$ccrole]);  
     foreach my $key (sort(keys(%ccroles))) {  
         my ($ccname,$ccdom,$role) = split(':',$key);  
         next if ($key eq $env{'user.name'}.':'.$env{'user.domain'}.':'.$ccrole);  
         unless (grep(/^\Q$ccname\E:\Q$ccdom\E$/,@currcoown,@pendingcoown)) {  
             push(@othercoords,$ccname.':'.$ccdom);  
         }  
     }  
     my $coowner_rows = @currcoown + @pendingcoown + @othercoords;  
     if ($coowner_rows) {  
         $output .= &Apache::loncommon::start_data_table();  
         if (@currcoown) {  
             $output .= &Apache::loncommon::start_data_table_row().  
                           '<td><i>'.&mt('Current co-owners').'</i></td><td>';  
             foreach my $person (@currcoown) {  
                 my ($co_uname,$co_dom) = split(':',$person);  
                 $output .= '<span class="LC_nobreak"><label><input type="checkbox" name="coowners" checked="checked" value="'.$person.'" />'.&Apache::loncommon::plainname($co_uname,$co_dom).'</label></span>'.('&nbsp;'x2).' ';  
             }  
             $output .= '</td>'.  
                           &Apache::loncommon::end_data_table_row();  
         }  
         if ($pendingcoowners) {  
             $output .= &Apache::loncommon::start_data_table_row().  
                           '<td><i>'.&mt('Invited as co-owners [_1](agreement pending)','<br />').'</i></td><td>';  
             foreach my $person (@pendingcoown) {  
                 my ($co_uname,$co_dom) = split(':',$person);  
                 $output .= '<span class="LC_nobreak"><label><input type="checkbox" name="pendingcoowners" checked="checked" value="'.$person.'" />'.&Apache::loncommon::plainname($co_uname,$co_dom).'</label></span>'.('&nbsp;'x2).' ';  
             }  
             $output .= '</td>'.  
                        &Apache::loncommon::end_data_table_row();  
         }  
         if (@othercoords) {  
             $output .= &Apache::loncommon::start_data_table_row().  
                           '<td><i>'.&mt('Invite other Coordinators [_1]to become co-owners','<br />').'</i></td><td>';  
             foreach my $person (@othercoords) {  
                 my ($co_uname,$co_dom) = split(':',$person);  
                 $output .= '<span class="LC_nobreak"><label><input type="checkbox" name="invitecoowners" value="'.$person.'" />'.&Apache::loncommon::plainname($co_uname,$co_dom).'</label></span>'.('&nbsp;'x2).' ';  
             }  
             $output .= '</td>'.  
                           &Apache::loncommon::end_data_table_row();  
         }  
         $output .= &Apache::loncommon::end_data_table();  
     } else {  
         $output = &mt('There are no coordinators to select as co-owners');  
     }  
     return $output;  
 }  
   
 sub manage_coownership  {  
     my ($cnum,$cdom,@currcoown) = @_;  
     my (@pendingcoown);  
     my $pendingcoowners =  
         $env{'course.'.$env{'request.course.id'}.'.internal.pendingco-owners'};  
     if ($pendingcoowners) {  
         @pendingcoown = split(',',$pendingcoowners);  
     }  
     my ($is_coowner,$is_pending,$output);  
     my $uname = $env{'user.name'};  
     my $udom = $env{'user.domain'};  
     if (grep(/^\Q$uname\E:\Q$udom\E$/,@currcoown)) {  
         $is_coowner = 1;  
     }  
     if (grep(/^\Q$uname\E:\Q$udom\E$/,@pendingcoown)) {  
         $is_pending = 1;  
     }  
     if (@currcoown && ($is_coowner || $is_pending)) {  
         $output = &Apache::loncommon::start_data_table();  
     }  
     if (@currcoown) {  
         if ($is_coowner || $is_pending) {  
             $output .= &Apache::loncommon::start_data_table().  
                        &Apache::loncommon::start_data_table_row().'<td>';  
         }  
         $output .= &mt('Current co-owners are:').'&nbsp;'.  
                    join(', ', map { &Apache::loncommon::plainname(split(':',$_)); } (@currcoown));  
         if ($is_coowner || $is_pending) {  
             $output .= '</td>'.&Apache::loncommon::end_data_table_row();  
         }  
     }  
     if ($is_coowner || $is_pending) {  
         if (@currcoown) {  
             $output .= &Apache::loncommon::start_data_table_row().'<td>';  
         }  
         $output .= '<span class="LC_nobreak">';  
         if ($is_coowner) {  
             $output .= &mt('You are currently a co-owner:').'&nbsp;<label><input type="checkbox" name="remove_coowoner" value="'.$uname.':'.$udom.'" />'.&mt('Discontinue?').'</label>';  
         } else {  
             $output .= &mt('The course owner has invited you to become a co-owner:').'&nbsp;<label><input type="radio" name="pending_coowoner" value="accept" />'.&mt('Accept?').'</label>'.('&nbsp;'x2).  
                        '<label><input type="radio" name=pending_coowoner" value="decline" />'.&mt('Decline?').'</label>';  
         }  
         $output .= '</span>';  
         if (@currcoown) {  
             $output .= '</td>'.&Apache::loncommon::end_data_table_row();  
         }  
     }  
     if (@currcoown && ($is_coowner || $is_pending)) {  
         $output .= &Apache::loncommon::end_data_table();  
     }  
     return $output;  
 }  
   
 sub print_localization {  sub print_localization {
     my ($cdom,$settings,$ordered,$itemtext,$rowtotal) = @_;      my ($cdom,$settings,$ordered,$itemtext,$rowtotal) = @_;
     unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY') && (ref($itemtext) eq 'HASH')) {      unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY') && (ref($itemtext) eq 'HASH')) {
Line 2163  sub print_localization { Line 1843  sub print_localization {
     }      }
     my %items = (      my %items = (
         languages => {          languages => {
                         text => &mt($itemtext->{'languages'}).'<br />'.                          text => '<b>'.&mt($itemtext->{'languages'}).'</b><br />'.
                                 &mt("(will override user's preference)"),                                  &mt("(overrides individual user preference)"),
                         input => 'selectbox',                          input => 'selectbox',
                      },                        }, 
         timezone => {          timezone => {
                         text  => &mt($itemtext->{'timezone'}),                          text  => '<b>'.&mt($itemtext->{'timezone'}).'</b>',
                         input => 'selectbox',                          input => 'selectbox',
                     },                      },
         datelocale  => {           datelocale  => { 
                          text => &mt($itemtext->{'datelocale'}),                           text => '<b>'.&mt($itemtext->{'datelocale'}).'</b>',
                          input => 'selectbox',                           input => 'selectbox',
                        },                         },
     );      );
Line 2290  sub print_feedback { Line 1970  sub print_feedback {
   
     foreach my $item (@{$ordered}) {      foreach my $item (@{$ordered}) {
         $count ++;          $count ++;
         $datatable .= &item_table_row_start($items{$item}{text},$count);          if ($position eq 'top') {
           $datatable .= &item_table_row_start($items{$item}{text},$count);
           } else {
           $datatable .= &item_table_row_start($items{$item}{text}."<br/>(Custom text)",$count, "advanced");
           }
         if ($position eq 'top') {          if ($position eq 'top') {
             my $includeempty = 0;              my $includeempty = 0;
             $datatable .= &user_table($cdom,$item,\@sections,              $datatable .= &user_table($cdom,$item,\@sections,
Line 2561  sub role_checkboxes { Line 2245  sub role_checkboxes {
                 $output .= '<tr>';                  $output .= '<tr>';
             }              }
         }          }
         $output .= '<td align="left"><span class="LC_nobreak"><label><input type="checkbox" name="'.          $output .= '<td align="left"><span class="LC_nobreak"><label><input type="checkbox" name='.
                    $item.'" value="'.$role.'"'.$checked.'/>&nbsp;'.                     $item.'" value="'.$role.'"'.$checked.'/>&nbsp;'.
                    $plrole.'</label></span></td>';                     $plrole.'</label></span></td>';
         if ($showsections) {          if ($showsections) {
Line 2593  sub role_checkboxes { Line 2277  sub role_checkboxes {
                     $output .= '<tr>';                      $output .= '<tr>';
                 }                  }
             }              }
             $output .= '<td><span class="LC_nobreak"><label><input type="checkbox" name="'.              $output .= '<td><span class="LC_nobreak"><label><input type="checkbox" name='.
                        $item.'" value="'.$value.'"'.$checked.' />&nbsp;'.$rolename.                         $item.'" value="'.$value.'"'.$checked.' />&nbsp;'.$rolename.
                        '</label></span></td>';                         '</label></span></td>';
             if ($showsections) {              if ($showsections) {
Line 2629  sub print_classlists { Line 2313  sub print_classlists {
         @ordered = ('nothideprivileged');          @ordered = ('nothideprivileged');
     } else {      } else {
         @ordered = ('student_classlist_view',          @ordered = ('student_classlist_view',
                     'student_classlist_opt_in',                      'student_opt_in','student_classlist_portfiles');
                     'student_classlist_portfiles');  
     }      }
     my %lt;      my %lt;
   
Line 2669  sub print_classlists { Line 2352  sub print_classlists {
                    options => \%lt,                     options => \%lt,
                    order => ['disabled','all','section'],                     order => ['disabled','all','section'],
                  },                   },
         'student_classlist_opt_in' => {          'student_opt_in' => {
                    text => '<b>'.&mt($itemtext->{'student_classlist_opt_in'}).'</b>',                     text => '<b>'.&mt($itemtext->{'student_opt_in'}).'</b>',
                    input => 'radio',                     input => 'radio',
                  },                   },
   
Line 2755  sub print_grading { Line 2438  sub print_grading {
                  },                   },
         'rndseed' => {          'rndseed' => {
                    text => '<b>'.&mt($itemtext->{'rndseed'}).'</b>'.                     text => '<b>'.&mt($itemtext->{'rndseed'}).'</b>'.
                            '<span class="LC_error">'.'<br />'.                             '<span class="LC_warning">'.'<br />'.
                            &mt('Modifying this will make problems have different numbers and answers!').                             &mt('Modifying this will make problems have different numbers and answers!').
                            '</span>',                             '</span>',
                    input => 'selectbox',                     input => 'selectbox',
Line 2827  sub print_printouts { Line 2510  sub print_printouts {
             text => '<b>'.&mt($itemtext->{'disableexampointprint'}).'</b>',              text => '<b>'.&mt($itemtext->{'disableexampointprint'}).'</b>',
             input => 'radio',              input => 'radio',
                                  },                                   },
           canuse_pdfforms => {
               text  => '<b>'.&mt($itemtext->{'canuse_pdfforms'}).'</b>',
               input => 'selectbox',
               options => {
                            1    => &mt('Yes'),
                            0    => &mt('No'),
                          },
               order => ['1','0'],
               nullval => 'None specified - use domain default',
                       }
     );      );
     return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal,$crstype);      return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal,$crstype);
 }  }
Line 2957  sub get_other_items { Line 2650  sub get_other_items {
 }  }
   
 sub item_table_row_start {  sub item_table_row_start {
     my ($text,$count) = @_;      my ($text,$count,$add_class) = @_;
     my $output;      my $output;
     if ($count%2) {   my $css_class = ($count % 2) ? 'LC_odd_row' : 'LC_even_row';
         $output .= '<tr class="LC_odd_row">';   $css_class = (join(' ',$css_class,$add_class)) unless ($add_class eq '');
     } else {   $output .= '<tr class="'.$css_class.'">'."\n";;
         $output .= '<tr>';  
     }  
     $output .= '<td class="LC_left_item">'.$text.      $output .= '<td class="LC_left_item">'.$text.
                '</td><td class="LC_right_item" align="right">';                 '</td><td class="LC_right_item">';
     return $output;      return $output;
 }  }
   
Line 3298  sub substitution_selector { Line 2989  sub substitution_selector {
                     a => 'assignment note',                      a => 'assignment note',
              );               );
     my $output .= &mt('Substitution').'<br />'.      my $output .= &mt('Substitution').'<br />'.
                   '<select name="printfmthdr_sub_'.$num.'">';                    '<select name=""printfmthdr_sub__'.$num.'">';
     if ($subst eq '') {      if ($subst eq '') {
         $output .= '<option value="" selected="selected"> </option>';          $output .= '<option value="" selected="selected"> </option>';
     }      }

Removed from v.1.8.2.15  
changed lines
  Added in v.1.23


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