Diff for /loncom/interface/courseprefs.pm between versions 1.8.2.6 and 1.8.2.7

version 1.8.2.6, 2010/02/12 00:39:51 version 1.8.2.7, 2010/02/21 01:06:13
Line 28 Line 28
 ###############################################################  ###############################################################
 ##############################################################  ##############################################################
   
   =pod
   
   =head1 NAME
   
   courseprefs- Handler to set/modify course configuration
   
   =head1 SYNOPSIS
   
   courseprefs provides an interface for setting general course configuration
   
   =head1 DESCRIPTION
   
   This module is used for configuration of a course
   
   =head1 INTERNAL SUBROUTINES
   
   =over
   
   =item get_allitems()
   
   =item print_config_box()
   
   =item process_changes()
   
   =item get_sec_str()
   
   =item check_clone()
   
   =item store_changes()
   
   =item update_env()
   
   =item display_disallowed()
   
   =item get_course()
   
   =item get_jscript()
   
   =item cloners_javascript()
   
   =item print_courseinfo()
   
   =item new_cloners_dom_row()
   
   =item can_modify_catsettings()
   
   =item assign_course_categories()
   
   =item print_localization()
   
   =item get_lang_choices()
   
   =item print_feedback()
   
   =item user_table()
   
   =item select_recipient()
   
   =item select_sections()
   
   =item print_discussion()
   
   =item role_checkboxes()
   
   =item print_classlists()
   
   =item print_appearance()
   
   =item print_grading()
   
   =item print_printouts()
   
   =item print_spreadsheet()
   
   =item print_bridgetasks()
   
   =item print_other()
   
   =item get_other_items()
   
   =item item_table_row_start()
   
   =item item_table_row_end()
   
   =item yes_no_radio()
   
   =item select_from_options()
   
   =item make_item_rows()
   
   Creates table used to display and set course configuration items.
   
   Inputs: $cdom,$items,$ordered,$settings,$rowtotal,$crstype
   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
   display order, $settings is HASH ref of current values forrow,
   $rowtotal is SCALAR ref used to accumulate row count, $crstype is
   course type.
   
   Returns: $datatable
   HTML mark-up of data table which accumulates individual rows.
   
   =item nothidepriv_row()
   
   Creates row containing form elements used to display and set
   whether Domain coordinators who are currently included in
   advanced course user .db file for a course are to be hidden (e.g.,
   in syllabus, or from course user lists).
   
   Inputs: $cdom,$item,$settings,$crstype
   where $cdom is course domain, item is nothideprivileged, $settings is
   HASH ref of the current values for nothideprivileged, $crstype is
   course type (Course or Community).
   
   Returns: $datatable
   HTML mark-up for Privileged users (Domain Coordinators) in staff listing.
   
   =item print_hdrfmt_row()
   
   Creates row containing form elements used to display and set
   substitution items and text to be used in the header included
   on printouts.
   
   Inputs: $item,$settings
   where $item is print_header_format, and $settings is a HASH ref
   of the current values stored for print_header_format.
   
   Returns: $output
   HTML mark-up containing Javascript functions: reOrder() and getIndexByName()
   used to dynamically update position selectboxes, and HTML table elements
   for the "Print header format" row.
   
   =item position_selector()
   
   Creates a select box which can be used to reorder substitutions
   and text included in a printout header.
   
   Inputs: $pos,$num,$maxnum
   where $pos is current position, $num is the unique identifier,
   and $maxnum is the total number of items (both substitutions
   and text in the printout header.
   
   Returns: $output
   HTML mark-up for the selectbox and a hidden form element containing
   the current position.
   
   =item substitution_selector()
   
   Creates a combination of select box for choosing an item
   (student name, course ID or assignment note) to substitute,
   and a corresponding size limit in the header used for printouts.
   
   Inputs: $num,$subst,$limit,$crstype
   where $num is the unique identifier, $subst is the current
   substitution (n,c or a, for name, course or note respectively,
   $limit is the current size limit (integer), and $crstype is
   course type - course or community.
   
   Returns: $output
   HTML mark-up for selectbox and textbox (separate table cells).
   
   =item change_clone()
   
   Modifies the list of courses a user can clone (stored
   in the user's environment.db file), called when a
   change is made to the list of users allowed to clone
   a course.
   
   Inputs: $action,$cloner
   where $action is add or drop, and $cloner is identity of
   user for whom cloning ability is to be changed in course.
   
   Returns: nothing
   
   =back
   
   =cut
   
   
 package Apache::courseprefs;  package Apache::courseprefs;
   
 use strict;  use strict;
Line 567  sub process_changes { Line 746  sub process_changes {
                                     my @cloners = split(',',$env{'form.'.$entry});                                      my @cloners = split(',',$env{'form.'.$entry});
                                     my @okcloners;                                      my @okcloners;
                                     foreach my $cloner (@cloners) {                                      foreach my $cloner (@cloners) {
                                         my ($uname,$udom) = split(':',$cloner);                                          $cloner =~ s/^\s+//;
                                         if (&check_clone($udom,$disallowed,$uname) eq 'ok') {                                          $cloner =~ s/\s+$//;
                                             if (!grep(/^\Q$cloner\E$/,@okcloners)) {                                          unless ($cloner eq '') {
                                                 push(@okcloners,$cloner);                                              my ($uname,$udom) = split(':',$cloner);
                                               if (&check_clone($udom,$disallowed,$uname) eq 'ok') {
                                                   if (!grep(/^\Q$cloner\E$/,@okcloners)) {
                                                       push(@okcloners,$cloner);
                                                   }
                                             }                                              }
                                         }                                          }
                                     }                                      }
Line 860  sub check_clone { Line 1043  sub check_clone {
 sub store_changes {  sub store_changes {
     my ($cdom,$cnum,$prefs_order,$actions,$prefs,$values,$changes,$crstype) = @_;      my ($cdom,$cnum,$prefs_order,$actions,$prefs,$values,$changes,$crstype) = @_;
     my ($chome,$output);      my ($chome,$output);
     my (%storehash,@delkeys,@need_env_update);      my (%storehash,@delkeys,@need_env_update,@oldcloner);
     if ((ref($values) eq 'HASH') && (ref($changes) eq 'HASH')) {      if ((ref($values) eq 'HASH') && (ref($changes) eq 'HASH')) {
         %storehash = %{$values};          %storehash = %{$values};
     } else {      } else {
Line 1009  sub store_changes { Line 1192  sub store_changes {
                                     }                                      }
                                     $storehash{$key} = $changes->{$item}{$key};                                      $storehash{$key} = $changes->{$item}{$key};
                                 }                                  }
                                   if ($key eq 'cloners') {
                                       # Get existing cloners
                                       my %clonenames =
                                           &Apache::lonnet::dump('environment',$cdom,$cnum,'cloners');
                                       if ($clonenames{'cloners'} =~ /,/) {
                                           @oldcloner = split(/\s*\,\s*/,$clonenames{'cloners'});
                                       } else {
                                           $oldcloner[0] = $clonenames{'cloners'};
                                       }
                                   }
                                 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')) {
                                     push(@need_env_update,$key);                                      push(@need_env_update,$key);
Line 1028  sub store_changes { Line 1221  sub store_changes {
         }          }
     }      }
     if (&Apache::lonnet::put('environment',\%storehash,$cdom,$cnum) eq 'ok') {      if (&Apache::lonnet::put('environment',\%storehash,$cdom,$cnum) eq 'ok') {
           if (ref($changes) eq 'HASH') {
               if (ref($changes->{'courseinfo'}) eq 'HASH') {
                   if (exists($changes->{'courseinfo'}{'cloners'})) {
                       &change_clone($cdom,$cnum,$changes->{'courseinfo'}{'cloners'},
                                     \@oldcloner);
                   }
               }
           }
         if (@delkeys) {          if (@delkeys) {
             if (&Apache::lonnet::del('environment',\@delkeys,$cdom,$cnum) ne 'ok') {              if (&Apache::lonnet::del('environment',\@delkeys,$cdom,$cnum) ne 'ok') {
                 $output .= '<br /><span class="LC_error">';                  $output .= '<br /><span class="LC_error">';
Line 1409  sub print_courseinfo { Line 1610  sub print_courseinfo {
                 if (@entries > 0) {                  if (@entries > 0) {
                     foreach my $entry (@entries) {                      foreach my $entry (@entries) {
                         my ($uname,$udom) = split(/:/,$entry);                          my ($uname,$udom) = split(/:/,$entry);
                           my ($uname,$udom) = split(/:/,$entry);
                           if ($udom =~ /^$match_domain$/) {
                               unless (&Apache::lonnet::domain($udom)) {
                                   next;
                               }
                           } else {
                               next;
                           }
                         if ($uname eq '*') {                          if ($uname eq '*') {
                             $datatable .=                               $datatable .= 
                                 &Apache::loncommon::start_data_table_row().                                  &Apache::loncommon::start_data_table_row().
                                 '<td valign="top" align="left"><span class="LC_nobreak">'.                                  '<td valign="top" align="left"><span class="LC_nobreak">'.
                                 &mt('Domain:').'<b>&nbsp;'.$udom.                                  &mt('Any user in domain:').'<b>&nbsp;'.$udom.
                                 '</b><input type="hidden" name="cloners_dom_'.$num.                                  '</b><input type="hidden" name="cloners_dom_'.$num.
                                 '" value="'.$udom.'" /></span><br />'.                                  '" value="'.$udom.'" /></span><br />'.
                                 '<span class="LC_nobreak"><label><input type="checkbox" '.                                  '<span class="LC_nobreak"><label><input type="checkbox" '.
Line 1421  sub print_courseinfo { Line 1630  sub print_courseinfo {
                                 &mt('Delete').'</label></span></td>'.                                  &mt('Delete').'</label></span></td>'.
                                 &Apache::loncommon::end_data_table_row();                                  &Apache::loncommon::end_data_table_row();
                             $num ++;                              $num ++;
                         } else {                          } elsif (&Apache::lonnet::homeserver($uname,$udom) ne 'no_host') {
                             push(@cloners,$entry);                              unless (grep(/^\Q$entry\E$/,@cloners)) {
                                   push(@cloners,$entry);
                               }
                         }                          }
                     }                      }
                 }                  }
Line 2639  sub print_hdrfmt_row { Line 2850  sub print_hdrfmt_row {
         $currstr .= '<b>'.&mt('Current print header:').' <span class="LC_warning"><tt>'.          $currstr .= '<b>'.&mt('Current print header:').' <span class="LC_warning"><tt>'.
                    $settings->{$item}.'</tt></span></b><br />';                     $settings->{$item}.'</tt></span></b><br />';
         my @current = split(/(%\d*[nca])/,$settings->{$item});          my @current = split(/(%\d*[nca])/,$settings->{$item});
         foreach my $item (@current) {          foreach my $val (@current) {
             unless ($item eq '') {              unless ($val eq '') {
                 push(@curr,$item);                  push(@curr,$val);
             }              }
         }          }
         $currnum = @curr;          $currnum = @curr;
Line 2794  sub substitution_selector { Line 3005  sub substitution_selector {
     return $output;      return $output;
 }  }
   
   sub change_clone {
       my ($cdom,$cnum,$clonelist,$oldcloner) = @_;
       my $clone_crs = $cnum.':'.$cdom;
       if ($cnum && $cdom) {
           my $clone_crs = $cnum.':'.$cdom;
           my @allowclone;
           if ($clonelist =~ /,/) {
               @allowclone = split(',',$clonelist);
           } else {
               $allowclone[0] = $clonelist;
           }
           foreach my $currclone (@allowclone) {
               if (!grep(/^$currclone$/,@$oldcloner)) {
                   if ($currclone ne '*') {
                       my ($uname,$udom) = split(/:/,$currclone);
                       if ($uname && $udom && $uname ne '*') {
                           if (&Apache::lonnet::homeserver($uname,$udom) ne 'no_host') {
                               my %currclonecrs = &Apache::lonnet::dump('environment',$udom,$uname,'cloneable');
                               if ($currclonecrs{'cloneable'} !~ /\Q$clone_crs\E/) {
                                   if ($currclonecrs{'cloneable'} eq '') {
                                       $currclonecrs{'cloneable'} = $clone_crs;
                                   } else {
                                       $currclonecrs{'cloneable'} .= ','.$clone_crs;
                                   }
                                   &Apache::lonnet::put('environment',\%currclonecrs,$udom,$uname);
                               }
                           }
                       }
                   }
               }
           }
           foreach my $oldclone (@$oldcloner) {
               if (!grep(/^\Q$oldclone\E$/,@allowclone)) {
                   if ($oldclone ne '*') {
                       my ($uname,$udom) = split(/:/,$oldclone);
                       if ($uname && $udom && $uname ne '*' ) {
                           if (&Apache::lonnet::homeserver($uname,$udom) ne 'no_host') {
                               my %currclonecrs = &Apache::lonnet::dump('environment',$udom,$uname,'cloneable');
                               my %newclonecrs = ();
                               if ($currclonecrs{'cloneable'} =~ /\Q$clone_crs\E/) {
                                   if ($currclonecrs{'cloneable'} =~ /,/) {
                                       my @currclonecrs = split/,/,$currclonecrs{'cloneable'};
                                       foreach my $crs (@currclonecrs) {
                                           if ($crs ne $clone_crs) {
                                               $newclonecrs{'cloneable'} .= $crs.',';
                                           }
                                       }
                                       $newclonecrs{'cloneable'} =~ s/,$//;
                                   } else {
                                       $newclonecrs{'cloneable'} = '';
                                   }
                                   &Apache::lonnet::put('environment',\%newclonecrs,$udom,$uname);
                               }
                           }
                       }
                   }
               }
           }
       }
       return;
   }
   
 1;  1;

Removed from v.1.8.2.6  
changed lines
  Added in v.1.8.2.7


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