Diff for /loncom/interface/lonparmset.pm between versions 1.413.6.1 and 1.416

version 1.413.6.1, 2009/09/15 02:21:20 version 1.416, 2008/11/19 21:14:42
Line 44  This module sets coursewide and assessme Line 44  This module sets coursewide and assessme
   
 =head1 INTERNAL SUBROUTINES  =head1 INTERNAL SUBROUTINES
   
 =over 4  =over
   
 =cut  
   
 ###################################################################  
 ###################################################################  
   
 package Apache::lonparmset;  
   
 use strict;  
 use Apache::lonnet;  
 use Apache::Constants qw(:common :http REDIRECT);  
 use Apache::lonhtmlcommon();  
 use Apache::loncommon;  
 use GDBM_File;  
 use Apache::lonhomework;  
 use Apache::lonxml;  
 use Apache::lonlocal;  
 use Apache::lonnavmaps;  
 use Apache::longroup;  
 use Apache::lonrss;  
 use LONCAPA qw(:DEFAULT :match);  
   
   
 ##################################################  
 ##################################################  
   
 =pod  =pod
   
 =item parmval  =item parmval()
   
 Figure out a cascading parameter.  Figure out a cascading parameter.
   
Line 98  Returns:  A list, the first item is the Line 73  Returns:  A list, the first item is the
 2 - Map or Folder level for specific student  2 - Map or Folder level for specific student
 1 - resource level for specific student  1 - resource level for specific student
   
   =item parmval_by_symb()
   
   =item reset_caches()
   
   =item cacheparmhash() 
   
   =item parmhash()
   
   =item symbcache()
   
   =item preset_defaults()
   
   =item date_sanity_info()
   
   =item storeparm()
   
   Store a parameter by symb
   
       Takes
       - symb
       - name of parameter
       - level
       - new value
       - new type
       - username
       - userdomain
   
   =item log_parmset()
   
   =item storeparm_by_symb_inner()
   
   =item valout()
   
   Format a value for output.
   
   Inputs:  $value, $type, $editable
   
   Returns: $value, formatted for output.  If $type indicates it is a date,
   localtime($value) is returned.
   $editable will return an icon to click on
   
   =item plink()
   
   Produces a link anchor.
   
   Inputs: $type,$dis,$value,$marker,$return,$call
   
   Returns: scalar with html code for a link which will envoke the 
   javascript function 'pjump'.
   
   =item page_js()
   
   =item startpage()
   
   =item print_row()
   
   =item print_td()
   
   =item print_usergroups()
   
   =item parm_control_group()
   
   =item extractResourceInformation() : 
   
   Given the course data hash, extractResourceInformation extracts lots of information about the course's resources into a variety of hashes.
   
   Input: See list below:
   
   =item * B<ids> : An array that will contain all of the ids in the course.
   
   =item * B<typep> : hash, id->type, where "type" contains the extension of the file, thus, I<problem exam quiz assess survey form>.
   
   =item * B<keyp> : hash, id->key list, will contain a comma separated list of the meta-data keys available for the given id
   
   =item * B<allparms> : hash, name of parameter->display value (what is the display value?)
   
   =item * B<allparts> : hash, part identification->text representation of part, where the text representation is "[Part $part]"
   
   =item * B<allkeys> : hash, full key to part->display value (what's display value?)
   
   =item * B<allmaps> : hash, ???
   
   =item * B<fcat> : ???
   
   =item * B<defp> : hash, ???
   
   =item * B<mapp> : ??
   
   =item * B<symbp> : hash, id->full sym?
   
   
   
   =item isdateparm()
   
   =item parmmenu()
   
   =item partmenu()
   
   =item usermenu()
   
   =item displaymenu()
   
   =item mapmenu()
   
   =item levelmenu()
   
   =item sectionmenu()
   
   =item keysplit()
   
   =item keysinorder()
   
   =item keysinorder_bytype()
   
   =item keysindisplayorder()
   
   =item standardkeyorder()
   
   =item assessparms() : 
   
   Show assessment data and parameters.  This is a large routine that should
   be simplified and shortened... someday.
   
   Inputs: $r
   
   Returns: nothing
   
   Variables used (guessed by Jeremy):
   
   =item * B<pscat>: ParameterS CATegories? ends up a list of the types of parameters that exist, e.g., tol, weight, acc, opendate, duedate, answerdate, sig, maxtries, type.
   
   =item * B<psprt>: ParameterS PaRTs? a list of the parts of a problem that we are displaying? Used to display only selected parts?
   
   =item * B<@catmarker> contains list of all possible parameters including part #s
   
   =item * B<$fullkeyp> contains the full part/id # for the extraction of proper parameters
   
   =item * B<$tempkeyp> contains part 0 only (no ids - ie, subparts)
           When storing information, store as part 0
           When requesting information, request from full part
   
   =item crsenv()
   
   Show and set course data and parameters.  This is a large routine that should
   be simplified and shortened... someday.
   
   Inputs: $r
   
   Returns: nothing
   
   =item can_modify_catsettings()
   
   =item assign_course_categories()
   
   =item tablestart()
   
   =item tableend()
   
   =item extractuser()
   
   =item parse_listdata_key()
   
   =item listdata()
   
   =item date_interval_selector()
   
   =item get_date_interval_from_form()
   
   =item default_selector()
   
   =item string_selector()
   
   =item dateshift()
   
   =item newoverview()
   
   =item secgroup_lister()
   
   =item overview()
   
   =item clean_parameters()
   
   =item date_shift_one()
   
   =item date_shift_two()
   
   =item parse_key()
   
   =item check_cloners() :
   
   Checks if new users included in list of allowed cloners
   are valid users.  Replaces supplied list with 
   cleaned list containing only users with valid usernames
   and domains.
   
   Inputs: $clonelist, $oldcloner 
   where $clonelist is ref to array of requested cloners,
   and $oldcloner is ref to array of currently allowed
   cloners.
   
   Returns: string - comma separated list of requested
   cloners (username:domain) who do not exist in system.
   
   =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. 
   
   
   =item check_cloners()
   
   =item change_clone()
   
   =item header()
   
   Output html header for page
   
   =item print_main_menu()
   
   =item output_row()
   
   Set portfolio metadata
   
   =item order_meta_fields()
   
   =item addmetafield()
   
   =item setrestrictmeta()
   
   =item get_added_meta_fieldnames()
   
   =item get_deleted_meta_fieldnames()
   
   =item defaultsetter()
   
   =item components()
   
   =item load_parameter_names()
   
   =item parm_change_log()
   
   =item handler() : 
   
   Main handler.  Calls &assessparms and &crsenv subroutines.
   
   
   =back
   
 =cut  =cut
   
 ##################################################  ###################################################################
   ###################################################################
   
   package Apache::lonparmset;
   
   use strict;
   use Apache::lonnet;
   use Apache::Constants qw(:common :http REDIRECT);
   use Apache::lonhtmlcommon();
   use Apache::loncommon;
   use GDBM_File;
   use Apache::lonhomework;
   use Apache::lonxml;
   use Apache::lonlocal;
   use Apache::lonnavmaps;
   use Apache::longroup;
   use Apache::lonrss;
   use LONCAPA qw(:DEFAULT :match);
   
   
 sub parmval {  sub parmval {
     my ($what,$id,$def,$uname,$udom,$csec,$cgroup,$courseopt)=@_;      my ($what,$id,$def,$uname,$udom,$csec,$cgroup,$courseopt)=@_;
     return &parmval_by_symb($what,&symbcache($id),$def,$uname,$udom,$csec,      return &parmval_by_symb($what,&symbcache($id),$def,$uname,$udom,$csec,
Line 302  sub reset_caches { Line 550  sub reset_caches {
     }      }
 }  }
   
   
   
 sub preset_defaults {  sub preset_defaults {
     my $type=shift;      my $type=shift;
     if (&rulescache($type.'_action') eq 'default') {      if (&rulescache($type.'_action') eq 'default') {
Line 316  sub preset_defaults { Line 566  sub preset_defaults {
     }      }
 }  }
   
 ##################################################  
   
   
 sub date_sanity_info {  sub date_sanity_info {
    my $checkdate=shift;     my $checkdate=shift;
Line 371  sub storeparm { Line 622  sub storeparm {
     &storeparm_by_symb(&symbcache($sresid),$spnam,$snum,$nval,$ntype,$uname,$udom,$csec,'',$cgroup);      &storeparm_by_symb(&symbcache($sresid),$spnam,$snum,$nval,$ntype,$uname,$udom,$csec,'',$cgroup);
 }  }
   
 #  
 # Store a parameter by symb  
 #  
 # Takes  
 # - symb  
 # - name of parameter  
 # - level  
 # - new value  
 # - new type  
 # - username  
 # - userdomain  
 my %recstack;  my %recstack;
 sub storeparm_by_symb {  sub storeparm_by_symb {
     my ($symb,$spnam,$snum,$nval,$ntype,$uname,$udom,$csec,$recflag,$cgroup)=@_;      my ($symb,$spnam,$snum,$nval,$ntype,$uname,$udom,$csec,$recflag,$cgroup)=@_;
Line 536  sub storeparm_by_symb_inner { Line 776  sub storeparm_by_symb_inner {
     return '';      return '';
 }  }
   
 ##################################################  
 ##################################################  
   
 =pod  
   
 =item valout  
   
 Format a value for output.  
   
 Inputs:  $value, $type, $editable  
   
 Returns: $value, formatted for output.  If $type indicates it is a date,  
 localtime($value) is returned.  
 $editable will return an icon to click on  
   
 =cut  
   
 ##################################################  
 ##################################################  
 sub valout {  sub valout {
     my ($value,$type,$editable)=@_;      my ($value,$type,$editable)=@_;
     my $result = '';      my $result = '';
Line 611  sub valout { Line 833  sub valout {
     return $result;      return $result;
 }  }
   
 ##################################################  
 ##################################################  
   
 =pod  
   
 =item plink  
   
 Produces a link anchor.  
   
 Inputs: $type,$dis,$value,$marker,$return,$call  
   
 Returns: scalar with html code for a link which will envoke the   
 javascript function 'pjump'.  
   
 =cut  
   
 ##################################################  
 ##################################################  
 sub plink {  sub plink {
     my ($type,$dis,$value,$marker,$return,$call)=@_;      my ($type,$dis,$value,$marker,$return,$call)=@_;
     my $winvalue=$value;      my $winvalue=$value;
Line 643  sub plink { Line 848  sub plink {
     my ($hour,$min,$sec,$val)=&preset_defaults($parmname);      my ($hour,$min,$sec,$val)=&preset_defaults($parmname);
     unless (defined($winvalue)) { $winvalue=$val; }      unless (defined($winvalue)) { $winvalue=$val; }
     my $valout = &valout($value,$type,1);      my $valout = &valout($value,$type,1);
     my $unencmarker = $marker;  
     foreach my $item (\$type, \$dis, \$winvalue, \$marker, \$return, \$call,      foreach my $item (\$type, \$dis, \$winvalue, \$marker, \$return, \$call,
       \$hour, \$min, \$sec) {        \$hour, \$min, \$sec) {
  $$item = &HTML::Entities::encode($$item,'"<>&');   $$item = &HTML::Entities::encode($$item,'"<>&');
  $$item =~ s/\'/\\\'/g;   $$item =~ s/\'/\\\'/g;
     }      }
     return '<table width="100%"><tr valign="top" align="right"><td><a name="'.$unencmarker.'" /></td></tr><tr><td align="center">'.      return '<table width="100%"><tr valign="top" align="right"><td><a name="'.$marker.'" /></td></tr><tr><td align="center">'.
  '<a href="javascript:pjump('."'".$type."','".$dis."','".$winvalue."','"   '<a href="javascript:pjump('."'".$type."','".$dis."','".$winvalue."','"
     .$marker."','".$return."','".$call."','".$hour."','".$min."','".$sec."'".');">'.      .$marker."','".$return."','".$call."','".$hour."','".$min."','".$sec."'".');">'.
     $valout.'</a></td></tr></table>';      $valout.'</a></td></tr></table>';
Line 712  sub startpage { Line 916  sub startpage {
     my %loaditems = ('onunload' => "pclose()",      my %loaditems = ('onunload' => "pclose()",
      'onload'   => "group_or_section('cgroup')",);       'onload'   => "group_or_section('cgroup')",);
   
       if ((($env{'form.command'} eq 'set') && ($env{'form.url'})
        && (!$env{'form.dis'})) || ($env{'form.symb'})) {
    &Apache::lonhtmlcommon::add_breadcrumb({help=>'Problem_Parameters',
       text=>"Problem Parameters"});
       } else {
    &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=settable',
      text=>"Table Mode",
      help => 'Course_Setting_Parameters'});
       }
     my $start_page =       my $start_page = 
  &Apache::loncommon::start_page('Set/Modify Course Parameters',   &Apache::loncommon::start_page('Set/Modify Course Parameters',
        &page_js(),         &page_js(),
Line 928  sub parm_control_group { Line 1141  sub parm_control_group {
     return($coursereply,$resultitem,$resultgroup,$resultlevel,$resulttype);      return($coursereply,$resultitem,$resultgroup,$resultlevel,$resulttype);
 }  }
   
 =pod  
   
 =item B<extractResourceInformation>: Given the course data hash, extractResourceInformation extracts lots of information about the course's resources into a variety of hashes.  
   
 Input: See list below:  
   
 =over 4  
   
 =item B<ids>: An array that will contain all of the ids in the course.  
   
 =item B<typep>: hash, id->type, where "type" contains the extension of the file, thus, I<problem exam quiz assess survey form>.  
   
 =item B<keyp>: hash, id->key list, will contain a comma separated list of the meta-data keys available for the given id  
   
 =item B<allparms>: hash, name of parameter->display value (what is the display value?)  
   
 =item B<allparts>: hash, part identification->text representation of part, where the text representation is "[Part $part]"  
   
 =item B<allkeys>: hash, full key to part->display value (what's display value?)  
   
 =item B<allmaps>: hash, ???  
   
 =item B<fcat>: ???  
   
 =item B<defp>: hash, ???  
   
 =item B<mapp>: ??  
   
 =item B<symbp>: hash, id->full sym?  
   
 =back  
   
 =cut  
   
 sub extractResourceInformation {  sub extractResourceInformation {
     my $ids = shift;      my $ids = shift;
Line 1000  sub extractResourceInformation { Line 1181  sub extractResourceInformation {
 #  #
     my $name=&Apache::lonnet::metadata($srcf,$key.'.name');      my $name=&Apache::lonnet::metadata($srcf,$key.'.name');
     if (!exists($$allparms{$name}) || $$allparms{$name} =~ m/^\s*$/ ) {      if (!exists($$allparms{$name}) || $$allparms{$name} =~ m/^\s*$/ ) {
  my ($display,$parmdis);   my $display= &Apache::lonnet::metadata($srcf,$key.'.display');
  $display = &standard_parameter_names($name);   my $parmdis = $display;
  if ($display eq '') {   $parmdis =~ s/\s*\[Part.*$//g;
     $display= &Apache::lonnet::metadata($srcf,$key.'.display');  
     $parmdis = $display;  
     $parmdis =~ s/\s*\[Part.*$//g;  
  } else {  
     $parmdis = &mt($display);  
  }  
  $$allparms{$name}=$parmdis;   $$allparms{$name}=$parmdis;
  if (ref($defkeytype)) {   if (ref($defkeytype)) {
     $$defkeytype{$name}=      $$defkeytype{$name}=
Line 1060  sub extractResourceInformation { Line 1235  sub extractResourceInformation {
 }  }
   
   
 ##################################################  
 ##################################################  
   
 sub isdateparm {  sub isdateparm {
     my $type=shift;      my $type=shift;
Line 1134  sub parmmenu { Line 1307  sub parmmenu {
 </script>  </script>
 ENDSCRIPT  ENDSCRIPT
     $r->print();      $r->print();
     $r->print("\n".'<table id="LC_parm_overview_parm_menu"><tr>');      $r->print("\n<table id=\"LC_parm_overview_parm_menu\"><tr>");
     my $cnt=0;      my $cnt=0;
     foreach $tempkey (&keysindisplayorder($allparms,$keyorder)) {      foreach $tempkey (&keysindisplayorder($allparms,$keyorder)) {
  $r->print("\n<td><label><input type='checkbox' name='pscat' ");   $r->print("\n<td><label><input type='checkbox' name='pscat' ");
  $r->print('value="'.$tempkey.'"');   $r->print('value="'.$tempkey.'"');
  if ($$pscat[0] eq "all" || grep $_ eq $tempkey, @{$pscat}) {   if ($$pscat[0] eq "all" || grep $_ eq $tempkey, @{$pscat}) {
     $r->print(' checked="checked"');      $r->print(' checked');
  }   }
  $r->print(' />'.($$allparms{$tempkey}=~/\S/ ? $$allparms{$tempkey}   $r->print('>'.($$allparms{$tempkey}=~/\S/ ? &mt($$allparms{$tempkey})
                                   : $tempkey)                                    : &mt($tempkey))
   .'</label></td>');    .'</label></td>');
   $cnt++;    $cnt++;
         if ($cnt==3) {          if ($cnt==3) {
Line 1152  ENDSCRIPT Line 1325  ENDSCRIPT
  }   }
     }      }
     $r->print('</tr>'      $r->print('</tr>'
              .'<tr id="LC_parm_overview_parm_menu_selectors">'               .'<tr id=\"LC_parm_overview_parm_menu_selectors\">'
              .'<td valign="top">'               .'<td valign="top">'
              .'<fieldset><legend><b>'.&mt('Parameter Selection').'</b></legend>'               .'<fieldset><legend><b>'.&mt('Parameter Selection').'</b></legend>'
              .'<span class="LC_nobreak">'               .'<span class="LC_nobreak">'
Line 1195  ENDSCRIPT Line 1368  ENDSCRIPT
   
 sub partmenu {  sub partmenu {
     my ($r,$allparts,$psprt)=@_;      my ($r,$allparts,$psprt)=@_;
     $r->print('<select multiple="multiple" name="psprt" size="8">');      $r->print('<select multiple name="psprt" size="8">');
     $r->print('<option value="all"');      $r->print('<option value="all"');
     $r->print(' selected="selected"') unless (@{$psprt});      $r->print(' selected="selected"') unless (@{$psprt});
     $r->print('>'.&mt('All Parts').'</option>');      $r->print('>'.&mt('All Parts').'</option>');
Line 1359  sub sectionmenu { Line 1532  sub sectionmenu {
     my %sectionhash = &Apache::loncommon::get_sections();      my %sectionhash = &Apache::loncommon::get_sections();
     return if (!%sectionhash);      return if (!%sectionhash);
   
     $r->print('<select name="Section" multiple="multiple" size="8">');      $r->print('<select name="Section" multiple="true" size="8" >');
     foreach my $s ('all',sort keys %sectionhash) {      foreach my $s ('all',sort keys %sectionhash) {
  $r->print('    <option value="'.$s.'"');   $r->print('    <option value="'.$s.'"');
  foreach (@{$selectedsections}) {   foreach (@{$selectedsections}) {
Line 1378  sub groupmenu { Line 1551  sub groupmenu {
     my %grouphash = &Apache::longroup::coursegroups();      my %grouphash = &Apache::longroup::coursegroups();
     return if (!%grouphash);      return if (!%grouphash);
   
     $r->print('<select name="Group" multiple="multiple" size="8">');      $r->print('<select name="Group" multiple="true" size="8" >');
     foreach my $group (sort(keys(%grouphash))) {      foreach my $group (sort(keys(%grouphash))) {
  $r->print('    <option value="'.$group.'"');   $r->print('    <option value="'.$group.'"');
  foreach (@{$selectedgroups}) {   foreach (@{$selectedgroups}) {
Line 1433  sub sortmenu { Line 1606  sub sortmenu {
     $r->print(' />'.&mt('Sort by realm first, then student (group/section)'));      $r->print(' />'.&mt('Sort by realm first, then student (group/section)'));
     $r->print('</label><br /><label><input type="radio" name="sortorder" value="studentrealm"');      $r->print('</label><br /><label><input type="radio" name="sortorder" value="studentrealm"');
     if ($sortorder eq 'studentrealm') {      if ($sortorder eq 'studentrealm') {
        $r->print(' checked="checked"');         $r->print(' checked="on"');
     }      }
     $r->print(' />'.&mt('Sort by student (group/section) first, then realm').      $r->print(' />'.&mt('Sort by student (group/section) first, then realm').
       '</label>');        '</label>');
Line 1462  sub standardkeyorder { Line 1635  sub standardkeyorder {
             'parameter_0_discusshide' => 20);              'parameter_0_discusshide' => 20);
 }  }
   
 ##################################################  
 ##################################################  
   
 =pod  
   
 =item assessparms  
   
 Show assessment data and parameters.  This is a large routine that should  
 be simplified and shortened... someday.  
   
 Inputs: $r  
   
 Returns: nothing  
   
 Variables used (guessed by Jeremy):  
   
 =over 4  
   
 =item B<pscat>: ParameterS CATegories? ends up a list of the types of parameters that exist, e.g., tol, weight, acc, opendate, duedate, answerdate, sig, maxtries, type.  
   
 =item B<psprt>: ParameterS PaRTs? a list of the parts of a problem that we are displaying? Used to display only selected parts?  
   
 =item B<allmaps>:  
   
 =back  
   
 =cut  
   
 ##################################################  
 ##################################################  
 sub assessparms {  sub assessparms {
   
     my $r=shift;      my $r=shift;
Line 1672  sub assessparms { Line 1816  sub assessparms {
     if (!$pssymb) {      if (!$pssymb) {
         $r->print('<table border="1"><tr><td>');          $r->print('<table border="1"><tr><td>');
         &levelmenu($r,\%alllevs,$parmlev);          &levelmenu($r,\%alllevs,$parmlev);
         $r->print('</td>');  
  if ($parmlev ne 'general') {   if ($parmlev ne 'general') {
             $r->print('<td>');              $r->print('<td>');
     &mapmenu($r,\%allmaps,$pschp,\%maptitles);      &mapmenu($r,\%allmaps,$pschp,\%maptitles);
     $r->print('</td>');      $r->print('</td>');
  }   }
         $r->print('</tr></table>');          $r->print('</td></tr></table>');
  &displaymenu($r,\%allparms,\%allparts,\@pscat,\@psprt,\%keyorder);   &displaymenu($r,\%allparms,\%allparts,\@pscat,\@psprt,\%keyorder);
     } else {      } else {
         my ($map,$id,$resource)=&Apache::lonnet::decode_symb($pssymb);          my ($map,$id,$resource)=&Apache::lonnet::decode_symb($pssymb);
Line 1825  ENDTABLEHEADFOUR Line 1968  ENDTABLEHEADFOUR
                         if (grep $_ eq $tempkeyp, @catmarker) {                          if (grep $_ eq $tempkeyp, @catmarker) {
                           $part{$_}=&Apache::lonnet::metadata($uri,$_.'.part');                            $part{$_}=&Apache::lonnet::metadata($uri,$_.'.part');
                           $name{$_}=&Apache::lonnet::metadata($uri,$_.'.name');                            $name{$_}=&Apache::lonnet::metadata($uri,$_.'.name');
                           my $parmdis=&Apache::lonnet::metadata($uri,$_.'.display');                            $display{$_}=&Apache::lonnet::metadata($uri,$_.'.display');
                           if ($allparms{$name{$_}} ne '') {  
                               my $identifier;  
                               if ($parmdis =~ /(\s*\[Part.*)$/) {  
                                   $identifier = $1;  
                               }  
                               $display{$_} = $allparms{$name{$_}}.$identifier;  
                           } else {  
                               $display{$_} = $parmdis;  
                           }  
                           unless ($display{$_}) { $display{$_}=''; }                            unless ($display{$_}) { $display{$_}=''; }
                           $display{$_}.=' ('.$name{$_}.')';                            $display{$_}.=' ('.$name{$_}.')';
                           $default{$_}=&Apache::lonnet::metadata($uri,$_);                            $default{$_}=&Apache::lonnet::metadata($uri,$_);
Line 1941  ENDTABLEHEADFOUR Line 2075  ENDTABLEHEADFOUR
                       if ((grep $_ eq $fullkeyp, @catmarker) &&(!$name{$tempkeyp})) {                        if ((grep $_ eq $fullkeyp, @catmarker) &&(!$name{$tempkeyp})) {
                         $part{$tempkeyp}="0";                          $part{$tempkeyp}="0";
                         $name{$tempkeyp}=&Apache::lonnet::metadata($uri,$fullkeyp.'.name');                          $name{$tempkeyp}=&Apache::lonnet::metadata($uri,$fullkeyp.'.name');
                         my $parmdis=&Apache::lonnet::metadata($uri,$fullkeyp.'.display');                          $display{$tempkeyp}=&Apache::lonnet::metadata($uri,$fullkeyp.'.display');
                         if ($allparms{$name{$tempkeyp}} ne '') {  
                             my $identifier;  
                             if ($parmdis =~ /(\s*\[Part.*)$/) {  
                                 $identifier = $1;  
                             }  
                             $display{$tempkeyp} = $allparms{$name{$tempkeyp}}.$identifier;  
                         } else {  
                             $display{$tempkeyp} = $parmdis;  
                         }  
                         unless ($display{$tempkeyp}) { $display{$tempkeyp}=''; }                          unless ($display{$tempkeyp}) { $display{$tempkeyp}=''; }
                         $display{$tempkeyp}.=' ('.$name{$tempkeyp}.')';                          $display{$tempkeyp}.=' ('.$name{$tempkeyp}.')';
                         $display{$tempkeyp} =~ s/_\w+_/_0_/;                          $display{$tempkeyp} =~ s/_\w+_/_0_/;
Line 2038  ENDTABLEHEADFOUR Line 2163  ENDTABLEHEADFOUR
                   if ((grep $_ eq $fullkeyp, @catmarker) &&(!$name{$tempkeyp})) {                    if ((grep $_ eq $fullkeyp, @catmarker) &&(!$name{$tempkeyp})) {
                     $part{$tempkeyp}="0";                      $part{$tempkeyp}="0";
                     $name{$tempkeyp}=&Apache::lonnet::metadata($uri,$fullkeyp.'.name');                      $name{$tempkeyp}=&Apache::lonnet::metadata($uri,$fullkeyp.'.name');
                     my $parmdis=&Apache::lonnet::metadata($uri,$fullkeyp.'.display');                      $display{$tempkeyp}=&Apache::lonnet::metadata($uri,$fullkeyp.'.display');
                     if ($allparms{$name{$tempkeyp}} ne '') {  
                         my $identifier;  
                         if ($parmdis =~ /(\s*\[Part.*)$/) {  
                             $identifier = $1;  
                         }  
                         $display{$tempkeyp} = $allparms{$name{$tempkeyp}}.$identifier;  
                     } else {  
                         $display{$tempkeyp} = $parmdis;  
                     }  
                     unless ($display{$tempkeyp}) { $display{$tempkeyp}=''; }                      unless ($display{$tempkeyp}) { $display{$tempkeyp}=''; }
                     $display{$tempkeyp}.=' ('.$name{$tempkeyp}.')';                      $display{$tempkeyp}.=' ('.$name{$tempkeyp}.')';
                     $display{$tempkeyp} =~ s/_\w+_/_0_/;                      $display{$tempkeyp} =~ s/_\w+_/_0_/;
Line 2092  ENDMAPONE Line 2208  ENDMAPONE
 } # end sub assessparms  } # end sub assessparms
   
   
 ##################################################  
 ##################################################  
   
 =pod  
   
 =item crsenv  
   
 Show and set course data and parameters.  This is a large routine that should  
 be simplified and shortened... someday.  
   
 Inputs: $r  
   
 Returns: nothing  
   
 =cut  
   
 ##################################################  
 ##################################################  
 sub crsenv {  sub crsenv {
     my $r=shift;      my $r=shift;
     my $setoutput='';      my $setoutput='';
   
       &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=crsenv',
    text=>"Course Environment"});
     my $breadcrumbs =       my $breadcrumbs = 
  &Apache::lonhtmlcommon::breadcrumbs('Edit Course Environment');   &Apache::lonhtmlcommon::breadcrumbs('Edit Course Environment');
     my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'};      my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'};
Line 2349  sub crsenv { Line 2450  sub crsenv {
              'student_classlist_view' => '<b>'.&mt('Allow students to view classlist.').'</b><br />'               'student_classlist_view' => '<b>'.&mt('Allow students to view classlist.').'</b><br />'
                                         .'('.&mt('[_1]: students can view all sections. [_2]: students can only view their own section. blank or [_3] prevents student view.','"<tt>all</tt>"','"<tt>section</tt>"','"<tt>disabled</tt>"').')',                                          .'('.&mt('[_1]: students can view all sections. [_2]: students can only view their own section. blank or [_3] prevents student view.','"<tt>all</tt>"','"<tt>section</tt>"','"<tt>disabled</tt>"').')',
              'student_classlist_portfiles' => '<b>'.&mt('Include link to accessible portfolio files').'</b><br />'               'student_classlist_portfiles' => '<b>'.&mt('Include link to accessible portfolio files').'</b><br />'
                                              .'('.&mt("[_1] for link to each a listing of each student's files.",'"<tt>yes</tt>"').')',                                               .'('.&mt('[_1] for link to each a listing of each student\'s files.','"<tt>yes</tt>"').')',
              'student_classlist_opt_in' => '<b>'.&mt("Student's agreement needed for listing in student-viewable roster").'</b><br />'               'student_classlist_opt_in' => '<b>'.&mt("Student's agreement needed for listing in student-viewable roster").'</b><br />'
                                            .'('.&mt('[_1] to require students to opt-in to listing in the roster (on the roster page).','"<tt>yes</tt>"').')',                                             .'('.&mt('[_1] to require students to opt-in to listing in the roster (on the roster page).','"<tt>yes</tt>"').')',
              'plc.roles.denied'=> '<b>'.&mt('Disallow live chatroom use for Roles').'</b><br />'               'plc.roles.denied'=> '<b>'.&mt('Disallow live chatroom use for Roles').'</b><br />'
Line 2436  sub crsenv { Line 2537  sub crsenv {
   
      'texengine'       'texengine'
          => '<b>'.&mt('Force all students in the course to use a specific math rendering engine.').'</b><br />'           => '<b>'.&mt('Force all students in the course to use a specific math rendering engine.').'</b><br />'
                    .'('.&mt("[_1], [_2] (Convert to Images), [_3] (TeX to HTML), or blank for student's preference",'"<tt>jsMath</tt>"','"<tt>mimetex</tt>"','"<tt>tth</tt>"').')',                     .'('.&mt('[_1], [_2] (Convert to Images), [_3] (TeX to HTML), or blank for student\'s preference','"<tt>jsMath</tt>"','"<tt>mimetex</tt>"','"<tt>tth</tt>"').')',
              'timezone'               'timezone'
                  => '<b>'.&mt('Timezone in which the course takes place').'</b>',                   => '<b>'.&mt('Timezone in which the course takes place').'</b>',
   
Line 2992  sub listdata { Line 3093  sub listdata {
     }      }
     if ($part ne $oldpart) {      if ($part ne $oldpart) {
  $r->print(&tableend().   $r->print(&tableend().
   "\n".'<span class="LC_parm_part">'.&mt('Part').": $part</span>");    "\n<span class=\"LC_parm_part\">".&mt('Part').": $part</span>");
  $oldpart=$part;   $oldpart=$part;
     }      }
 #  #
 # Ready to print  # Ready to print
 #  #
             my $parmitem = &standard_parameter_names($name);  
     $r->print(&tablestart().      $r->print(&tablestart().
       &Apache::loncommon::start_data_table_row().        &Apache::loncommon::start_data_table_row().
       '<td><b>'.&mt($parmitem).        '<td><b>'.&standard_parameter_names($name).
       '</b></td><td><input type="checkbox" name="del_'.        '</b></td><td><input type="checkbox" name="del_'.
       $thiskey.'" /></td><td>');        $thiskey.'" /></td><td>');
     $foundkeys++;      $foundkeys++;
Line 3028  sub listdata { Line 3128  sub listdata {
  $r->print(&default_selector($thiskey,$$resourcedata{$thiskey}));   $r->print(&default_selector($thiskey,$$resourcedata{$thiskey}));
     }      }
     $r->print('<input type="hidden" name="typeof_'.$thiskey.'" value="'.      $r->print('<input type="hidden" name="typeof_'.$thiskey.'" value="'.
       $thistype.'" />');        $thistype.'">');
     $r->print('</td>'.&Apache::loncommon::end_data_table_row());      $r->print('</td>'.&Apache::loncommon::end_data_table_row());
  }   }
     }      }
Line 3151  sub newoverview { Line 3251  sub newoverview {
   
     my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'};      my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'};
     my $crs = $env{'course.'.$env{'request.course.id'}.'.num'};      my $crs = $env{'course.'.$env{'request.course.id'}.'.num'};
       &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=setoverview',
       text=>"Overview Mode"});
     my $start_page = &Apache::loncommon::start_page('Set Parameters');      my $start_page = &Apache::loncommon::start_page('Set Parameters');
     my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs('Overview');      my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs('Overview');
     $r->print(<<ENDOVER);      $r->print(<<ENDOVER);
Line 3311  sub overview { Line 3413  sub overview {
     my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'};      my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'};
     my $crs = $env{'course.'.$env{'request.course.id'}.'.num'};      my $crs = $env{'course.'.$env{'request.course.id'}.'.num'};
   
       &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=setoverview',
    text=>"Overview Mode"});
     my $start_page=&Apache::loncommon::start_page('Modify Parameters');      my $start_page=&Apache::loncommon::start_page('Modify Parameters');
     my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs('Overview');      my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs('Overview');
     $r->print(<<ENDOVER);      $r->print(<<ENDOVER);
Line 3345  sub clean_parameters { Line 3449  sub clean_parameters {
     my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'};      my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'};
     my $crs = $env{'course.'.$env{'request.course.id'}.'.num'};      my $crs = $env{'course.'.$env{'request.course.id'}.'.num'};
   
       &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=cleanparameters',
       text=>"Clean Parameters"});
     my $start_page=&Apache::loncommon::start_page('Clean Parameters');      my $start_page=&Apache::loncommon::start_page('Clean Parameters');
     my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs('Clean');      my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs('Clean');
     $r->print(<<ENDOVER);      $r->print(<<ENDOVER);
Line 3388  ENDOVER Line 3494  ENDOVER
  $display_value =    $display_value = 
     &Apache::lonlocal::locallocaltime($display_value);      &Apache::lonlocal::locallocaltime($display_value);
     }      }
             my $parmitem = &standard_parameter_names($data{'parameter_name'});  
             $parmitem = &mt($parmitem);  
     $r->print(&mt('Parameter: "[_1]" with value: "[_2]"',      $r->print(&mt('Parameter: "[_1]" with value: "[_2]"',
   $parmitem,$resourcedata->{$thiskey}));    &standard_parameter_names($data{'parameter_name'}),
     $resourcedata->{$thiskey}));
     $r->print('<br />');      $r->print('<br />');
     if ($data{'scope_type'} eq 'all') {      if ($data{'scope_type'} eq 'all') {
  $r->print(&mt('All users'));   $r->print(&mt('All users'));
Line 3429  sub date_shift_one { Line 3534  sub date_shift_one {
     my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'};      my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'};
     my $crs = $env{'course.'.$env{'request.course.id'}.'.num'};      my $crs = $env{'course.'.$env{'request.course.id'}.'.num'};
   
       &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=dateshift1&timebase='.$env{'form.timebase'},
       text=>"Shifting Dates"});
     my $start_page=&Apache::loncommon::start_page('Shift Dates');      my $start_page=&Apache::loncommon::start_page('Shift Dates');
     my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs('Shift');      my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs('Shift');
     $r->print(<<ENDOVER);      $r->print(<<ENDOVER);
Line 3454  sub date_shift_two { Line 3561  sub date_shift_two {
     my ($r) = @_;      my ($r) = @_;
     my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'};      my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'};
     my $crs = $env{'course.'.$env{'request.course.id'}.'.num'};      my $crs = $env{'course.'.$env{'request.course.id'}.'.num'};
       &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=dateshift1&timebase='.$env{'form.timebase'},
       text=>"Shifting Dates"});
     my $start_page=&Apache::loncommon::start_page('Shift Dates');      my $start_page=&Apache::loncommon::start_page('Shift Dates');
     my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs('Shift');      my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs('Shift');
     $r->print(<<ENDOVER);      $r->print(<<ENDOVER);
Line 3508  sub parse_key { Line 3617  sub parse_key {
     return %data;      return %data;
 }  }
   
 ##################################################  
 ##################################################  
   
 =pod  
   
 =item check_cloners  
   
 Checks if new users included in list of allowed cloners  
 are valid users.  Replaces supplied list with   
 cleaned list containing only users with valid usernames  
 and domains.  
   
 Inputs: $clonelist, $oldcloner   
 where $clonelist is ref to array of requested cloners,  
 and $oldcloner is ref to array of currently allowed  
 cloners.  
   
 Returns: string - comma separated list of requested  
 cloners (username:domain) who do not exist in system.  
   
 =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.   
   
 =cut  
   
 ##################################################  
 ##################################################  
   
 sub extract_cloners {  sub extract_cloners {
     my ($clonelist,$allowclone) = @_;      my ($clonelist,$allowclone) = @_;
Line 3659  sub change_clone { Line 3734  sub change_clone {
 }  }
   
   
 ##################################################  
 ##################################################  
   
 =pod  
   
 =item * header  
   
 Output html header for page  
   
 =cut  
   
 ##################################################  
 ##################################################  
 sub header {  sub header {
     return &Apache::loncommon::start_page('Parameter Manager');      return &Apache::loncommon::start_page('Parameter Manager');
 }  }
 ##################################################  
 ##################################################  
   
 sub print_main_menu {  sub print_main_menu {
     my ($r,$parm_permission)=@_;      my ($r,$parm_permission)=@_;
     #      #
       $r->print(&header());
       $r->print(&Apache::lonhtmlcommon::breadcrumbs('Parameter Manager'));
     $r->print(<<ENDMAINFORMHEAD);      $r->print(<<ENDMAINFORMHEAD);
 <form method="post" enctype="multipart/form-data"  <form method="post" enctype="multipart/form-data"
       action="/adm/parmset" name="studentform">        action="/adm/parmset" name="studentform">
Line 3691  ENDMAINFORMHEAD Line 3757  ENDMAINFORMHEAD
     my $mgr  = &Apache::lonnet::allowed('mgr',$env{'request.course.id'});      my $mgr  = &Apache::lonnet::allowed('mgr',$env{'request.course.id'});
   
     my @menu =      my @menu =
         ( { divider=>'Settings for Your Course',          ( { categorytitle=>'Settings for Your Course',
   },      items => [
           { text => 'Set Course Environment',    { linktext => 'Set Course Environment',
     action => 'crsenv',      url => '/adm/parmset?action=crsenv',
             permission => $parm_permission,      permission => $parm_permission,
             help => 'Course_Environment',      help => 'Course_Environment',
             },      },
           { text => 'Set Portfolio Metadata',    { linktext => 'Set Portfolio Metadata',
     action => 'setrestrictmeta',      url => '/adm/parmset?action=setrestrictmeta',
             permission => $parm_permission,      permission => $parm_permission,
             },      },
   { text => 'Manage Course Slots',    { linktext => 'Manage Course Slots',
     url => '/adm/slotrequest?command=showslots',      url => '/adm/slotrequest?command=showslots',
     permission => $vgr,      permission => $vgr,
             },      },
   { text => 'Reset Student Access Times',    { linktext => 'Reset Student Access Times',
     url => '/adm/helper/resettimes.helper',      url => '/adm/helper/resettimes.helper',
     permission => $mgr,      permission => $mgr,
             },      },
   
           { text => 'Set Parameter Setting Default Actions',    { linktext => 'Set Parameter Setting Default Actions',
             action => 'setdefaults',      url => '/adm/parmset?action=setdefaults',
             permission => $parm_permission,      permission => $parm_permission,
             },                }]},          
   { divider => 'New and Existing Parameter Settings for Your Resources',    { categorytitle => 'New and Existing Parameter Settings for Your Resources',
     },      items => [
           { text => 'Set/Modify Resource Parameters - Helper Mode',    { linktext => 'Set/Modify Resource Parameters - Helper Mode',
             url => '/adm/helper/parameter.helper',      url => '/adm/helper/parameter.helper',
             permission => $parm_permission,      permission => $parm_permission,
             help => 'Parameter_Helper',      help => 'Parameter_Helper',
             },      },
    { text => 'Set/Modify Resource Parameters - Overview Mode',    { linktext => 'Set/Modify Resource Parameters - Overview Mode',
             action => 'newoverview',      url => '/adm/parmset?action=newoverview',
             permission => $parm_permission,      permission => $parm_permission,
             help => 'Parameter_Overview',      help => 'Parameter_Overview',
             },      },
           { text => 'Set/Modify Resource Parameters - Table Mode',    { linktext => 'Set/Modify Resource Parameters - Table Mode',
             action => 'settable',      url => '/adm/parmset?action=settable',
             permission => $parm_permission,      permission => $parm_permission,
             help => 'Table_Mode',      help => 'Table_Mode',
             },      }]},
            { divider => 'Existing Parameter Settings for Your Resources',             { categorytitle => 'Existing Parameter Settings for Your Resources',
   },       items => [
   { text => 'Modify Resource Parameters - Overview Mode',    { linktext => 'Modify Resource Parameters - Overview Mode',
             action => 'setoverview',      url => '/adm/parmset?action=setoverview',
             permission => $parm_permission,      permission => $parm_permission,
             help => 'Parameter_Overview',      help => 'Parameter_Overview',
      },                },          
   { text => 'Parameter Change Log and Course Blog Posting/User Notification',    { linktext => 'Parameter Change Log and Course Blog Posting/User Notification',
             action => 'parameterchangelog',      url => '/adm/parmset?action=parameterchangelog',
             permission => $parm_permission,      permission => $parm_permission,
             },      }]}
           );            );
     my $menu_html = '';  #---- Remove when done ----
     foreach my $menu_item (@menu) {  #    my $menu_html = '';
  if ($menu_item->{'divider'}) {  #    foreach my $menu_item (@menu) {
     $menu_html .= '<h3>'.&mt($menu_item->{'divider'}).'</h3>';  # if ($menu_item->{'categorytitle'}) {
     next;  #    $menu_html .= '<h3>'.&mt($menu_item->{'categorytitle'}).'</h3>';
  }  #    next;
         next if (! $menu_item->{'permission'});  # }
         $menu_html.='<p>';  #        next if (! $menu_item->{'permission'});
         $menu_html.='<span class="LC_parm_menu_item">';  #        $menu_html.='<p>';
         if (exists($menu_item->{'url'})) {  #        $menu_html.='<span class="LC_parm_menu_item">';
             $menu_html.=qq{<a href="$menu_item->{'url'}">};  #        if (exists($menu_item->{'url'})) {
         } else {  #            $menu_html.=qq{<a href="$menu_item->{'url'}">};
             $menu_html.=  #        } else {
                 qq{<a href="/adm/parmset?action=$menu_item->{'action'}">};  #            $menu_html.=
         }  #                qq{<a href="/adm/parmset?action=$menu_item->{'action'}">};
         $menu_html.= &mt($menu_item->{'text'}).'</a></span>';  #        }
         if (exists($menu_item->{'help'})) {  #        $menu_html.= &mt($menu_item->{'linktext'}).'</a></span>';
             $menu_html.=  #        if (exists($menu_item->{'help'})) {
                 &Apache::loncommon::help_open_topic($menu_item->{'help'});  #            $menu_html.=
         }  #                &Apache::loncommon::help_open_topic($menu_item->{'help'});
         $menu_html.='</p>'.$/;  #        }
     }  #        $menu_html.='</p>'.$/;
     $r->print($menu_html);  #    }
   # --------------------------
   
       $r->print(&Apache::lonhtmlcommon::generate_menu(@menu));
     return;      return;
 }  }
 ### Set portfolio metadata  
   
   
 sub output_row {  sub output_row {
     my ($r, $field_name, $field_text, $added_flag) = @_;      my ($r, $field_name, $field_text, $added_flag) = @_;
     my $output;      my $output;
Line 3805  sub output_row { Line 3876  sub output_row {
         my $multiple_checked;          my $multiple_checked;
         my $single_checked;          my $single_checked;
         if ($options =~ m/onlyone/) {          if ($options =~ m/onlyone/) {
             $multiple_checked = '';              $multiple_checked = "";
             $single_checked = ' checked="checked"';              $single_checked = " CHECKED ";
         } else {          } else {
             $multiple_checked = ' checked="checked"';              $multiple_checked = " CHECKED ";
             $single_checked = '';              $single_checked = "";
         }          }
  $output .= &Apache::loncommon::continue_data_table_row();   $output .= &Apache::loncommon::continue_data_table_row();
  $output .= '<td>'.('&nbsp;' x 10).'<span class="LC_metadata">   $output .= '<td>'.('&nbsp;' x 10).'<span class="LC_metadata">
             <input type="radio" name="'.$field_name.'_onlyone" value="multiple"'.$multiple_checked .' />              <input type="radio" name="'.$field_name.'_onlyone" value="multiple" '.$multiple_checked .'/>
             '.&mt('Student may select multiple choices from list').'</span></td>';              Student may select multiple choices from list</span></td>';
  $output .= &Apache::loncommon::end_data_table_row();   $output .= &Apache::loncommon::end_data_table_row();
  $output .= &Apache::loncommon::continue_data_table_row();   $output .= &Apache::loncommon::continue_data_table_row();
  $output .= '<td>'.('&nbsp;' x 10).'<span class="LC_metadata">   $output .= '<td>'.('&nbsp;' x 10).'<span class="LC_metadata">
             <input type="radio" name="'.$field_name.'_onlyone"  value="single" '.$single_checked.'/>              <input type="radio" name="'.$field_name.'_onlyone"  value="single" '.$single_checked.'/>
             '.&mt('Student may select only one choice from list').'</span></td>';              Student may select only one choice from list</span></td>';
  $output .= &Apache::loncommon::end_data_table_row();   $output .= &Apache::loncommon::end_data_table_row();
     }      }
     return ($output);      return ($output);
 }  }
   
   
   
 sub order_meta_fields {  sub order_meta_fields {
     my ($r)=@_;      my ($r)=@_;
     my $idx = 1;      my $idx = 1;
     my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'};      my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'};
     my $crs = $env{'course.'.$env{'request.course.id'}.'.num'};      my $crs = $env{'course.'.$env{'request.course.id'}.'.num'};
     $r->print(&Apache::loncommon::start_page('Order Metadata Fields'));      $r->print(&Apache::loncommon::start_page('Order Metadata Fields'));
       &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=addmetadata',
       text=>"Add Metadata Field"});
     &Apache::lonhtmlcommon::add_breadcrumb      &Apache::lonhtmlcommon::add_breadcrumb
             ({href=>"/adm/parmset?action=setrestrictmeta",              ({href=>"/adm/parmset?action=setrestrictmeta",
               text=>"Restrict Metadata"},                text=>"Restrict Metadata"},
Line 3906  sub order_meta_fields { Line 3982  sub order_meta_fields {
     $r->print('</table>');      $r->print('</table>');
     return 'ok';      return 'ok';
 }  }
   
   
 sub continue {  sub continue {
     my $output;      my $output;
     $output .= '<form action="" method="post">';      $output .= '<form action="" method="post">';
Line 3913  sub continue { Line 3991  sub continue {
     $output .= '<input type="submit" value="Continue" />';      $output .= '<input type="submit" value="Continue" />';
     return ($output);      return ($output);
 }  }
   
   
 sub addmetafield {  sub addmetafield {
     my ($r)=@_;      my ($r)=@_;
       &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=addmetadata',
       text=>"Add Metadata Field"});
     $r->print(&Apache::loncommon::start_page('Add Metadata Field'));      $r->print(&Apache::loncommon::start_page('Add Metadata Field'));
     $r->print(&Apache::lonhtmlcommon::breadcrumbs('Add Metadata Field'));      $r->print(&Apache::lonhtmlcommon::breadcrumbs('Add Metadata Field'));
     my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'};      my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'};
Line 3959  sub addmetafield { Line 4041  sub addmetafield {
     }      }
     $r->print('</form>');      $r->print('</form>');
 }  }
   
   
   
 sub setrestrictmeta {  sub setrestrictmeta {
     my ($r)=@_;      my ($r)=@_;
     my $next_meta;      my $next_meta;
     my $output;      my $output;
     my $item_num;      my $item_num;
     my $put_result;      my $put_result;
       &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=setrestrictmeta',
       text=>"Restrict Metadata"});
     $r->print(&Apache::loncommon::start_page('Restrict Metadata'));      $r->print(&Apache::loncommon::start_page('Restrict Metadata'));
     $r->print(&Apache::lonhtmlcommon::breadcrumbs('Restrict Metadata'));      $r->print(&Apache::lonhtmlcommon::breadcrumbs('Restrict Metadata'));
     my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'};      my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'};
Line 4042  ENDenv Line 4129  ENDenv
     $r->print(&Apache::loncommon::end_page());      $r->print(&Apache::loncommon::end_page());
     return 'ok';      return 'ok';
 }  }
 ##################################################  
   
   
 sub get_added_meta_fieldnames {  sub get_added_meta_fieldnames {
     my ($cid) = @_;      my ($cid) = @_;
     my %fields;      my %fields;
Line 4055  sub get_added_meta_fieldnames { Line 4144  sub get_added_meta_fieldnames {
     }      }
     return \%fields;      return \%fields;
 }  }
   
   
   
 sub get_deleted_meta_fieldnames {  sub get_deleted_meta_fieldnames {
     my ($cid) = @_;      my ($cid) = @_;
     my %fields;      my %fields;
Line 4072  sub get_deleted_meta_fieldnames { Line 4164  sub get_deleted_meta_fieldnames {
 sub defaultsetter {  sub defaultsetter {
     my ($r) = @_;      my ($r) = @_;
   
       &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=setdefaults',
       text=>"Set Defaults"});
     my $start_page =       my $start_page = 
  &Apache::loncommon::start_page('Parameter Setting Default Actions');   &Apache::loncommon::start_page('Parameter Setting Default Actions');
     my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs('Defaults');      my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs('Defaults');
Line 4268  sub components { Line 4362  sub components {
 }  }
   
 my %standard_parms;  my %standard_parms;
   
   
 sub load_parameter_names {  sub load_parameter_names {
     open(my $config,"<$Apache::lonnet::perlvar{'lonTabDir'}/packages.tab");      open(my $config,"<$Apache::lonnet::perlvar{'lonTabDir'}/packages.tab");
     while (my $configline=<$config>) {      while (my $configline=<$config>) {
Line 4282  sub load_parameter_names { Line 4378  sub load_parameter_names {
     close($config);      close($config);
     $standard_parms{'int_pos'}      = 'Positive Integer';      $standard_parms{'int_pos'}      = 'Positive Integer';
     $standard_parms{'int_zero_pos'} = 'Positive Integer or Zero';      $standard_parms{'int_zero_pos'} = 'Positive Integer or Zero';
       %standard_parms=&Apache::lonlocal::texthash(%standard_parms);
 }  }
   
 sub standard_parameter_names {  sub standard_parameter_names {
Line 4296  sub standard_parameter_names { Line 4393  sub standard_parameter_names {
     }      }
 }  }
   
 #  
 # Parameter Change Log  
 #  
   
   
 sub parm_change_log {  sub parm_change_log {
     my ($r)=@_;      my ($r)=@_;
       &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=settable',
    text=>"Parameter Change Log"});
     $r->print(&Apache::loncommon::start_page('Parameter Change Log'));      $r->print(&Apache::loncommon::start_page('Parameter Change Log'));
     $r->print(&Apache::lonhtmlcommon::breadcrumbs('Parameter Change Log'));      $r->print(&Apache::lonhtmlcommon::breadcrumbs('Parameter Change Log'));
   
Line 4395  sub parm_change_log { Line 4491  sub parm_change_log {
     } else {      } else {
  $makenewrow=1;   $makenewrow=1;
     }      }
             my $parmitem = &standard_parameter_names($parmname);  
     $output .='<td>'.$realm.'</td><td>'.$section.'</td><td>'.      $output .='<td>'.$realm.'</td><td>'.$section.'</td><td>'.
       &mt($parmitem).'</td><td>'.        &standard_parameter_names($parmname).'</td><td>'.
       ($part?&mt('Part: [_1]',$part):&mt('All Parts')).'</td><td>';        ($part?&mt('Part: [_1]',$part):&mt('All Parts')).'</td><td>';
     my $stillactive=0;      my $stillactive=0;
     if ($parmlog{$id}{'delflag'}) {      if ($parmlog{$id}{'delflag'}) {
  $output .= &mt('Deleted');   $output .= &mt('Deleted');
     } else {      } else {
  if ($typeflag) {   if ($typeflag) {
                     my $parmitem = &standard_parameter_names($value);      $output .= &mt('Type: [_1]',&standard_parameter_names($value));
                     $parmitem = &mt($parmitem);  
     $output .= &mt('Type: [_1]',$parmitem);  
  } else {   } else {
     my ($level,@all)=&parmval_by_symb($what,$middle,&Apache::lonnet::metadata($middle,$what),      my ($level,@all)=&parmval_by_symb($what,$middle,&Apache::lonnet::metadata($middle,$what),
       $uname,$udom,$issection,$issection,$courseopt);        $uname,$udom,$issection,$issection,$courseopt);
Line 4424  sub parm_change_log { Line 4517  sub parm_change_log {
     }      }
     $output .= '</td><td>';      $output .= '</td><td>';
     if ($stillactive) {      if ($stillactive) {
                 my $parmitem = &standard_parameter_names($parmname);   my $title=&mt('Changed [_1]',&standard_parameter_names($parmname));
                 $parmitem = &mt($parmitem);                  my $description=&mt('Changed [_1] for [_2] to [_3]',&standard_parameter_names($parmname),$realmdescription,
  my $title=&mt('Changed [_1]',$parmitem);  
                 my $description=&mt('Changed [_1] for [_2] to [_3]',  
                                     $parmitem,$realmdescription,  
     (&isdateparm($istype{$parmname})?&Apache::lonlocal::locallocaltime($value):$value));      (&isdateparm($istype{$parmname})?&Apache::lonlocal::locallocaltime($value):$value));
  if (($uname) && ($udom)) {   if (($uname) && ($udom)) {
     $output .=       $output .= 
Line 4470  sub check_for_course_info { Line 4560  sub check_for_course_info {
     return 0;      return 0;
 }  }
   
 ##################################################  
 ##################################################  
   
 =pod  
   
 =item * handler  
   
 Main handler.  Calls &assessparms and &crsenv subroutines.  
   
 =cut  
   
 ##################################################  
 ##################################################  
   
 sub handler {  sub handler {
     my $r=shift;      my $r=shift;
   
     &reset_caches();      &reset_caches();
   
     if ($r->header_only) {      &Apache::loncommon::content_type($r,'text/html');
  &Apache::loncommon::content_type($r,'text/html');      $r->send_http_header;
  $r->send_http_header;      return OK if $r->header_only;
  return OK;  
     }  
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},      &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
     ['action','state',      ['action','state',
                                              'pres_marker',                                               'pres_marker',
Line 4517  sub handler { Line 4593  sub handler {
     my $exists = &check_for_course_info();      my $exists = &check_for_course_info();
   
     if ($env{'request.course.id'} &&  $parm_permission && $exists) {      if ($env{'request.course.id'} &&  $parm_permission && $exists) {
   
         # Start Page  
         &Apache::loncommon::content_type($r,'text/html');  
         $r->send_http_header;  
   
   
         #          #
         # Main switch on form.action and form.state, as appropriate          # Main switch on form.action and form.state, as appropriate
         #          #
Line 4530  sub handler { Line 4600  sub handler {
         #  the table mode          #  the table mode
         if ((($env{'form.command'} eq 'set') && ($env{'form.url'})          if ((($env{'form.command'} eq 'set') && ($env{'form.url'})
      && (!$env{'form.dis'})) || ($env{'form.symb'})) {       && (!$env{'form.dis'})) || ($env{'form.symb'})) {
             &Apache::lonhtmlcommon::add_breadcrumb({help=>'Problem_Parameters',  
     text=>"Problem Parameters"});  
     &assessparms($r);      &assessparms($r);
   
         } elsif (! exists($env{'form.action'})) {          } elsif (! exists($env{'form.action'})) {
             $r->print(&header());  
             $r->print(&Apache::lonhtmlcommon::breadcrumbs('Parameter Manager'));  
             &print_main_menu($r,$parm_permission);              &print_main_menu($r,$parm_permission);
         } elsif ($env{'form.action'} eq 'crsenv' && $parm_permission) {          } elsif ($env{'form.action'} eq 'crsenv') {
             &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=crsenv',  
     text=>"Course Environment"});  
             &crsenv($r);               &crsenv($r); 
         } elsif ($env{'form.action'} eq 'setoverview' && $parm_permission) {          } elsif ($env{'form.action'} eq 'setoverview') {
             &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=setoverview',  
     text=>"Overview Mode"});  
     &overview($r);      &overview($r);
  } elsif ($env{'form.action'} eq 'addmetadata' && $parm_permission) {   } elsif ($env{'form.action'} eq 'addmetadata') {
             &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=addmetadata',  
     text=>"Add Metadata Field"});  
     &addmetafield($r);      &addmetafield($r);
  } elsif ($env{'form.action'} eq 'ordermetadata' && $parm_permission) {   } elsif ($env{'form.action'} eq 'ordermetadata') {
             &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=addmetadata',  
     text=>"Add Metadata Field"});  
     &order_meta_fields($r);      &order_meta_fields($r);
         } elsif ($env{'form.action'} eq 'setrestrictmeta' && $parm_permission) {          } elsif ($env{'form.action'} eq 'setrestrictmeta') {
             &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=setrestrictmeta',  
     text=>"Restrict Metadata"});  
     &setrestrictmeta($r);      &setrestrictmeta($r);
         } elsif ($env{'form.action'} eq 'newoverview' && $parm_permission) {          } elsif ($env{'form.action'} eq 'newoverview') {
             &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=setoverview',  
     text=>"Overview Mode"});  
     &newoverview($r);      &newoverview($r);
         }  elsif ($env{'form.action'} eq 'setdefaults' && $parm_permission) {          } elsif ($env{'form.action'} eq 'setdefaults') {
             &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=setdefaults',  
     text=>"Set Defaults"});  
     &defaultsetter($r);      &defaultsetter($r);
  } elsif ($env{'form.action'} eq 'settable' && $parm_permission) {   } elsif ($env{'form.action'} eq 'settable') {
             &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=settable',  
     text=>"Table Mode",  
     help => 'Course_Setting_Parameters'});  
     &assessparms($r);      &assessparms($r);
         } elsif ($env{'form.action'} eq 'parameterchangelog' && $parm_permission) {          } elsif ($env{'form.action'} eq 'parameterchangelog') {
             &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=settable',  
     text=>"Parameter Change Log"});  
     &parm_change_log($r);      &parm_change_log($r);
         } elsif ($env{'form.action'} eq 'cleanparameters' && $parm_permission) {          } elsif ($env{'form.action'} eq 'cleanparameters') {
             &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=cleanparameters',  
     text=>"Clean Parameters"});  
     &clean_parameters($r);      &clean_parameters($r);
         } elsif ($env{'form.action'} eq 'dateshift1' && $parm_permission) {          } elsif ($env{'form.action'} eq 'dateshift1') {
             &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=dateshift1&timebase='.$env{'form.timebase'},  
                                                     text=>"Shifting Dates"});  
             &date_shift_one($r);              &date_shift_one($r);
         } elsif ($env{'form.action'} eq 'dateshift2' && $parm_permission) {          } elsif ($env{'form.action'} eq 'dateshift2') {
             &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=dateshift1&timebase='.$env{'form.timebase'},  
                                                     text=>"Shifting Dates"});  
             &date_shift_two($r);              &date_shift_two($r);
  } elsif ($env{'form.action'} eq 'categorizecourse' && $parm_permission) {   } elsif ($env{'form.action'} eq 'categorizecourse') {
             &assign_course_categories($r);              &assign_course_categories($r);
         }           } 
     } else {      } else {
Line 4609  sub handler { Line 4649  sub handler {
 1;  1;
 __END__  __END__
   
 =pod  
   
 =back  
   
 =cut  
   
   
   

Removed from v.1.413.6.1  
changed lines
  Added in v.1.416


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