Diff for /loncom/interface/lonparmset.pm between versions 1.333 and 1.375

version 1.333, 2006/08/18 22:39:37 version 1.375, 2007/08/07 23:56:34
Line 65  use Apache::lonlocal; Line 65  use Apache::lonlocal;
 use Apache::lonnavmaps;  use Apache::lonnavmaps;
 use Apache::longroup;  use Apache::longroup;
 use Apache::lonrss;  use Apache::lonrss;
 use LONCAPA;  use LONCAPA qw(:DEFAULT :match);
   
 # --- Caches local to lonparmset  # --- Caches local to lonparmset
   
Line 122  sub parmval_by_symb { Line 122  sub parmval_by_symb {
 # load caches  # load caches
     &cacheparmhash();      &cacheparmhash();
   
     my $useropt=&Apache::lonnet::get_userresdata($uname,$udom);      my $useropt;
       if ($uname ne '' && $udom ne '') {
    $useropt = &Apache::lonnet::get_userresdata($uname,$udom);
       }
   
     my $result='';      my $result='';
     my @outpar=();      my @outpar=();
Line 173  sub parmval_by_symb { Line 176  sub parmval_by_symb {
     }      }
   
 # ------------------------------------------------------ fourth, back to course  # ------------------------------------------------------ fourth, back to course
     if (defined($csec)) {      if ($csec ne '') {
         if (defined($$courseopt{$seclevel})) {          if (defined($$courseopt{$seclevel})) {
     $outpar[9]=$$courseopt{$seclevel};      $outpar[9]=$$courseopt{$seclevel};
     $result=9;      $result=9;
Line 189  sub parmval_by_symb { Line 192  sub parmval_by_symb {
  }   }
     }      }
 # ------------------------------------------------------ fifth, check course group  # ------------------------------------------------------ fifth, check course group
     if (defined($cgroup)) {      if ($cgroup ne '') {
         if (defined($$courseopt{$grplevel})) {          if (defined($$courseopt{$grplevel})) {
             $outpar[6]=$$courseopt{$grplevel};              $outpar[6]=$$courseopt{$grplevel};
             $result=6;              $result=6;
Line 206  sub parmval_by_symb { Line 209  sub parmval_by_symb {
   
 # ---------------------------------------------------------- fifth, check user  # ---------------------------------------------------------- fifth, check user
   
     if (defined($uname)) {      if ($uname ne '') {
  if (defined($$useropt{$courselevel})) {   if (defined($$useropt{$courselevel})) {
     $outpar[3]=$$useropt{$courselevel};      $outpar[3]=$$useropt{$courselevel};
     $result=3;      $result=3;
Line 269  sub resetrulescache { Line 272  sub resetrulescache {
   
 sub rulescache {  sub rulescache {
     my $id=shift;      my $id=shift;
     if ($rulesid ne $env{'request.course.id'}) {      if ($rulesid ne $env{'request.course.id'}
  %rules=();   && !defined($rules{$id})) {
     }  
     unless (defined($rules{$id})) {  
  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'};
  %rules=&Apache::lonnet::dump('parmdefactions',$dom,$crs);   %rules=&Apache::lonnet::dump('parmdefactions',$dom,$crs);
Line 553  sub valout { Line 554  sub valout {
             }              }
             $result=~s/\s+$//;              $result=~s/\s+$//;
         } elsif (&isdateparm($type)) {          } elsif (&isdateparm($type)) {
             $result = localtime($value).&date_sanity_info($value);              $result = &Apache::lonlocal::locallocaltime($value).
    &date_sanity_info($value);
         } else {          } else {
             $result = $value;              $result = $value;
         }          }
Line 933  sub extractResourceInformation { Line 935  sub extractResourceInformation {
  $$typep{$id}=$1;   $$typep{$id}=$1;
  $$keyp{$id}='';   $$keyp{$id}='';
         $$uris{$id}=$srcf;          $$uris{$id}=$srcf;
  foreach (split(/\,/,&Apache::lonnet::metadata($srcf,'allpossiblekeys'))) {   foreach my $key (split(/\,/,&Apache::lonnet::metadata($srcf,'allpossiblekeys'))) {
     if ($_=~/^parameter\_(.*)/) {      next if ($key!~/^parameter_/);
  my $key=$_;  
 # Hidden parameters  # Hidden parameters
  if (&Apache::lonnet::metadata($srcf,$key.'.hidden') eq 'parm') {      next if (&Apache::lonnet::metadata($srcf,$key.'.hidden') eq 'parm');
     next;  
  }  
  my $display= &Apache::lonnet::metadata($srcf,$key.'.display');  
  my $name=&Apache::lonnet::metadata($srcf,$key.'.name');  
  my $part= &Apache::lonnet::metadata($srcf,$key.'.part');  
 #  #
 # allparms is a hash of parameter names  # allparms is a hash of parameter names
 #  #
       my $name=&Apache::lonnet::metadata($srcf,$key.'.name');
       if (!exists($$allparms{$name}) || $$allparms{$name} =~ m/^\s*$/ ) {
    my $display= &Apache::lonnet::metadata($srcf,$key.'.display');
  my $parmdis = $display;   my $parmdis = $display;
  $parmdis =~ s/\[Part.*$//g;   $parmdis =~ s/\[Part.*$//g;
                 $$allparms{$name}=$parmdis;   $$allparms{$name}=$parmdis;
  $$defkeytype{$name}=&Apache::lonnet::metadata($srcf,$key.'.type');   if (ref($defkeytype)) {
       $$defkeytype{$name}=
    &Apache::lonnet::metadata($srcf,$key.'.type');
    }
       }
   
 #  #
 # allparts is a hash of all parts  # allparts is a hash of all parts
 #  #
  $$allparts{$part} = "Part: $part";      my $part= &Apache::lonnet::metadata($srcf,$key.'.part');
       $$allparts{$part} = "Part: $part";
 #  #
 # Remember all keys going with this resource  # Remember all keys going with this resource
 #  #
  if ($$keyp{$id}) {      if ($$keyp{$id}) {
     $$keyp{$id}.=','.$key;   $$keyp{$id}.=','.$key;
  } else {      } else {
     $$keyp{$id}=$key;   $$keyp{$id}=$key;
  }      }
 #  #
 # Put in order  # Put in order
 #   # 
                 unless ($$keyorder{$key}) {      unless ($$keyorder{$key}) {
                     $$keyorder{$key}=$keyordercnt;   $$keyorder{$key}=$keyordercnt;
                     $keyordercnt++;   $keyordercnt++;
  }  
   
     }      }
  }   }
  $$mapp{$id}=  
     &Apache::lonnet::declutter($resource->enclosing_map_src());  
  $$mapp{$mapid}=$$mapp{$id};   if (!exists($$mapp{$mapid})) {
  $$allmaps{$mapid}=$$mapp{$id};      $$mapp{$id}=
  if ($mapid eq '1') {   &Apache::lonnet::declutter($resource->enclosing_map_src());
     $$maptitles{$mapid}='Main Course Documents';      $$mapp{$mapid}=$$mapp{$id};
       $$allmaps{$mapid}=$$mapp{$id};
       if ($mapid eq '1') {
    $$maptitles{$mapid}='Main Course Documents';
       } else {
    $$maptitles{$mapid}=
       &Apache::lonnet::gettitle($$mapp{$id});    
       }
       $$maptitles{$$mapp{$id}}=$$maptitles{$mapid};
       $$symbp{$mapid}=$$mapp{$id}.'___(all)';
  } else {   } else {
     $$maptitles{$mapid}=&Apache::lonnet::gettitle(&Apache::lonnet::clutter($$mapp{$id}));      $$mapp{$id} = $$mapp{$mapid};
  }   }
  $$maptitles{$$mapp{$id}}=$$maptitles{$mapid};  
  $$symbp{$id}=&Apache::lonnet::encode_symb($$mapp{$id},$resid,$srcf);   $$symbp{$id}=&Apache::lonnet::encode_symb($$mapp{$id},$resid,$srcf);
  $$symbp{$mapid}=$$mapp{$id}.'___(all)';  
     }      }
 }  }
   
Line 1070  ENDSCRIPT Line 1081  ENDSCRIPT
  if ($$pscat[0] eq "all" || grep $_ eq $tempkey, @{$pscat}) {   if ($$pscat[0] eq "all" || grep $_ eq $tempkey, @{$pscat}) {
     $r->print(' checked');      $r->print(' checked');
  }   }
  $r->print('>'.$$allparms{$tempkey}.'</label></td>');   $r->print('>'.($$allparms{$tempkey}=~/\S/ ? $$allparms{$tempkey}
                                     : $tempkey)
     .'</label></td>');
   $cnt++;    $cnt++;
         if ($cnt==3) {          if ($cnt==3) {
     $r->print("</tr>\n<tr>");      $r->print("</tr>\n<tr>");
Line 1514  sub assessparms { Line 1527  sub assessparms {
  $message="\n<p>\n".&mt("Full Name").": ".   $message="\n<p>\n".&mt("Full Name").": ".
     $name{'firstname'}.' '.$name{'middlename'}.' '      $name{'firstname'}.' '.$name{'middlename'}.' '
  .$name{'lastname'}.' '.$name{'generation'}.   .$name{'lastname'}.' '.$name{'generation'}.
     "<br>\n".&mt('ID').": ".$name{'id'}.'<p>';      "<br />\n".&mt('ID').": ".$name{'id'}.'<p>';
     }      }
             @usersgroups = &Apache::lonnet::get_users_groups(              @usersgroups = &Apache::lonnet::get_users_groups(
                                        $udom,$uname,$env{'request.course.id'});                                         $udom,$uname,$env{'request.course.id'});
Line 1562  sub assessparms { Line 1575  sub assessparms {
     foreach ('tolerance','date_default','date_start','date_end',      foreach ('tolerance','date_default','date_start','date_end',
      'date_interval','int','float','string') {       'date_interval','int','float','string') {
  $r->print('<input type="hidden" value="'.   $r->print('<input type="hidden" value="'.
   $env{'form.recent_'.$_}.'" name="recent_'.$_.'">');    $env{'form.recent_'.$_}.'" name="recent_'.$_.'" />');
     }      }
                                                   
     if (!$pssymb) {      if (!$pssymb) {
Line 1639  sub assessparms { Line 1652  sub assessparms {
       );        );
            $r->print(<<ENDTABLETWO);             $r->print(<<ENDTABLETWO);
 <th rowspan=3>$lt{'pie'}</th>  <th rowspan=3>$lt{'pie'}</th>
 <th rowspan=3>$lt{'csv'}<br>($csuname $lt{'at'} $csudom)</th>  <th rowspan=3>$lt{'csv'}<br />($csuname $lt{'at'} $csudom)</th>
 </tr><tr><td colspan=5></td><th colspan=2>$lt{'ic'}</th><th colspan=2>$lt{'rl'}</th>  </tr><tr><td colspan=5></td><th colspan=2>$lt{'ic'}</th><th colspan=2>$lt{'rl'}</th>
 <th colspan=1>$lt{'ic'}</th>  <th colspan=1>$lt{'ic'}</th>
   
Line 1740  ENDTABLEHEADFOUR Line 1753  ENDTABLEHEADFOUR
                              "<a href=\"javascript:openWindow('".                               "<a href=\"javascript:openWindow('".
   &Apache::lonnet::clutter($uri).'?symb='.    &Apache::lonnet::clutter($uri).'?symb='.
   &escape($symbp{$rid}).    &escape($symbp{$rid}).
                              "', 'metadatafile', '450', '500', 'no', 'yes')\";".                               "', 'metadatafile', '450', '500', 'no', 'yes');\"".
                              " TARGET=_self>$title");                               " target=\"_self\">$title");
   
                         if ($thistitle) {                          if ($thistitle) {
                             $r->print(' ('.$thistitle.')');                              $r->print(' ('.$thistitle.')');
Line 2005  sub crsenv { Line 2018  sub crsenv {
                 ('environment',                  ('environment',
                  {'top level map backup '.$bkuptime => $tmp[1] },                   {'top level map backup '.$bkuptime => $tmp[1] },
                  $dom,$crs).                   $dom,$crs).
                      '<br>';                       '<br />';
         }          }
         #          #
         # Deal with modified default spreadsheets          # Deal with modified default spreadsheets
Line 2033  sub crsenv { Line 2046  sub crsenv {
         if ($name =~ /^default_enrollment_(start|end)_date$/) {          if ($name =~ /^default_enrollment_(start|end)_date$/) {
             $value=&Apache::lonhtmlcommon::get_date_from_form($name.'_value');              $value=&Apache::lonhtmlcommon::get_date_from_form($name.'_value');
         }          }
    #
           # Deal with the emails
           if ($name =~ /\.email$/) {
       foreach my $specifier (split(',',$value)) {
    my ($user,$sections_or_groups)=
       ($specifier=~/^([^\(]+)\(([^\)]+)\)/);
    if (!$sections_or_groups) {
       $user = $specifier;
    }
    my ($name,$domain) = split(':',$user);
    if (!defined($user) || !defined($domain)) {
       $setoutput.= '<br /> <span class="LC_error">'.
    &mt("Invalid email address specified, address must be of the form username:domain what was specified was ([_1])",$user).
    '</span>';
       undef($value);
    } elsif (&Apache::lonnet::homeserver($user,$domain) eq 'no_host') {
       $setoutput.= '<br /> <span class="LC_error">'.
    &mt("Invalid email address specified, user [_1] is unknown.",$name).
    '</span>';
       undef($value);
    }
       }
           }
         # Get existing cloners          # Get existing cloners
         my @oldcloner = ();          my @oldcloner = ();
         if ($name eq 'cloners') {          if ($name eq 'cloners') {
Line 2113  sub crsenv { Line 2149  sub crsenv {
              'cloners'        => '<b>'.&mt('Users allowed to clone course').'</b><br /><tt>(user:domain,user:domain)</tt><br />'.&mt('Users with active Course Coordinator role in the course automatically have the right to clone it, and can be omitted from list.'),               'cloners'        => '<b>'.&mt('Users allowed to clone course').'</b><br /><tt>(user:domain,user:domain)</tt><br />'.&mt('Users with active Course Coordinator role in the course automatically have the right to clone it, and can be omitted from list.'),
              'grading'        => '<b>'.&mt('Grading').'</b><br />'.               'grading'        => '<b>'.&mt('Grading').'</b><br />'.
                                  '<tt>"standard", "external", or "spreadsheet"</tt> '.&Apache::loncommon::help_open_topic('GradingOptions'),                                   '<tt>"standard", "external", or "spreadsheet"</tt> '.&Apache::loncommon::help_open_topic('GradingOptions'),
        'task_grading'   => '<b>'.&mt('Bridge Task Grading').'</b><br />'.
                                    &mt('Instructors and TAs in sections, when grading bridge tasks, should be allowed to grade other sections, "[_1]" they are allowed (this is the default), "[_2]" no, they can only grade their own section','<tt>any</tt>','<tt>section</tt>'),
              'default_xml_style' => '<b>'.&mt('Default XML Style File').'</b> '.               'default_xml_style' => '<b>'.&mt('Default XML Style File').'</b> '.
                     '<a href="javascript:openbrowser'.                      '<a href="javascript:openbrowser'.
                     "('envform','default_xml_style'".                      "('envform','default_xml_style'".
                     ",'sty')\">$SelectStyleFile</a><br>",                      ",'sty')\">$SelectStyleFile</a><br />",
              'question.email' => '<b>'.&mt('Feedback Addresses for Resource Content Question').               'question.email' => '<b>'.&mt('Feedback Addresses for Resource Content Question').
                                  '</b><br />(<tt>user:domain,'.                                   '</b><br />(<tt>user:domain,'.
                                  'user:domain(section;section;...;*;...),...</tt>)',                                   'user:domain(section;section;...;*;...),...</tt>)',
                'question.email.text' => '<b>'.&mt('Custom Text for Resource Content Question Option in Feedback').
                                    '</b>',
              'comment.email'  => '<b>'.&mt('Feedback Addresses for Course Content Comments').'</b><br />'.               'comment.email'  => '<b>'.&mt('Feedback Addresses for Course Content Comments').'</b><br />'.
                                  '(<tt>user:domain,user:domain(section;section;...;*;...),...</tt>)',                                   '(<tt>user:domain,user:domain(section;section;...;*;...),...</tt>)',
                'comment.email.text' => '<b>'.&mt('Custom Text for Course Content Option in Feedback').
                                    '</b>',
              'policy.email'   => '<b>'.&mt('Feedback Addresses for Course Policy').'</b>'.               'policy.email'   => '<b>'.&mt('Feedback Addresses for Course Policy').'</b>'.
                                  '<br />(<tt>user:domain,user:domain(section;section;...;*;...),...</tt>)',                                   '<br />(<tt>user:domain,user:domain(section;section;...;*;...),...</tt>)',
                'policy.email.text' => '<b>'.&mt('Custom Text for Course Policy Option in Feedback').
                                    '</b>',
              'hideemptyrows'  => '<b>'.&mt('Hide Empty Rows in Spreadsheets').'</b><br />'.               'hideemptyrows'  => '<b>'.&mt('Hide Empty Rows in Spreadsheets').'</b><br />'.
                                  '('.&mt('"[_1]" for default hiding','<tt>yes</tt>').')',                                   '('.&mt('"[_1]" for default hiding','<tt>yes</tt>').')',
              'pageseparators'  => '<b>'.&mt('Visibly Separate Items on Pages').'</b><br />'.               'pageseparators'  => '<b>'.&mt('Visibly Separate Items on Pages').'</b><br />'.
                                  '('.&mt('"[_1]" for visible separation','<tt>yes</tt>').', '.                                   '('.&mt('"[_1]" for visible separation','<tt>yes</tt>').', '.
                                  &mt('changes will not show until next login').')',                                   &mt('changes will not show until next login').')',
              'student_classlist_view' => '<b>'.&mt('Allow students to view classlist.').'</b>'.&mt('("all":students can view all sections,"section":students can only view their own section.blank or "disabled" prevents student view.'),               'student_classlist_view' => '<b>'.&mt('Allow students to view classlist.').'</b>'.&mt('("all":students can view all sections,"section":students can only view their own section.blank or "disabled" prevents student view.'),
                '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>'),
                '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>'),
              'plc.roles.denied'=> '<b>'.&mt('Disallow live chatroom use for Roles').               'plc.roles.denied'=> '<b>'.&mt('Disallow live chatroom use for Roles').
                                   '</b><br />"<tt>st</tt>": '.                                    '</b><br />"<tt>st</tt>": '.
                                   &mt('student').', "<tt>ta</tt>": '.                                    &mt('student').', "<tt>ta</tt>": '.
Line 2193  sub crsenv { Line 2238  sub crsenv {
                     ' Tabloid [11x17 in], Executive [7 1/2x10 in], A2 [420x594 mm],'.                       ' Tabloid [11x17 in], Executive [7 1/2x10 in], A2 [420x594 mm],'. 
                     ' A3 [297x420 mm], A4 [210x297 mm], A5 [148x210 mm], A6 [105x148 mm])',                      ' A3 [297x420 mm], A4 [210x297 mm], A5 [148x210 mm], A6 [105x148 mm])',
      'print_header_format'       'print_header_format'
          => '<b>Print header format; substitutions:  %n student name %c course id %a assignment',           => &mtn('<b> Print header format; substitutions </b>:  %n student name %c course id %a assignment note, numbers after the % limit the field size.').'</b>',
              'anonymous_quiz'  
                  => '<b>'.&mt('Anonymous quiz/exam').'</b><br />'.  
                     ' (<tt><b>'.&mt('yes').'</b> '.&mt('to avoid print students names').' </tt>)',  
              'default_enrollment_start_date' => '<b>'.&mt('Default beginning date for student access.').'</b>',               'default_enrollment_start_date' => '<b>'.&mt('Default beginning date for student access.').'</b>',
              'default_enrollment_end_date'   => '<b>'.&mt('Default ending date for student access.').'</b>',               'default_enrollment_end_date'   => '<b>'.&mt('Default ending date for student access.').'</b>',
              'nothideprivileged'   => '<b>'.&mt('Privileged users that should not be hidden on staff listings').'</b>'.               'nothideprivileged'   => '<b>'.&mt('Privileged users that should not be hidden on staff listings').'</b>'.
Line 2206  sub crsenv { Line 2248  sub crsenv {
                  => '<b>'.&mt('Disable display of problem receipts').'</b><br />'.                   => '<b>'.&mt('Disable display of problem receipts').'</b><br />'.
                     ' ('.&mt('"[_1]" to disable, anything else if not','<tt>yes</tt>').')',                      ' ('.&mt('"[_1]" to disable, anything else if not','<tt>yes</tt>').')',
      'task_messages'       'task_messages'
          => '<b>'.&mt('Send message to student when clicking Done on Tasks. [_1] to send a message only to student, [_2] to send message to student and add record to user information page for instructors. Leave blank to disable.','<tt>only_student</tt>','<tt>student_and_user_notes_screen</tt>').'</b>',           => '<b>'.&mt('Send message to student when clicking Done on Tasks').'</b><br /> ('.&mt('[_1] to send a message only to student, [_2] to send message to student and add record to user information page for instructors. Leave blank to disable.','<tt>only_student</tt>','<tt>student_and_user_notes_screen</tt>').')',
      'disablesigfigs'       'disablesigfigs'
          => '<b>'.&mt('Disable checking of Significant Figures').'</b><br />'.           => '<b>'.&mt('Disable checking of Significant Figures').'</b><br />'.
                     ' ('.&mt('"[_1]" to disable, anything else if not','<tt>yes</tt>').')',                      ' ('.&mt('"[_1]" to disable, anything else if not','<tt>yes</tt>').')',
Line 2216  sub crsenv { Line 2258  sub crsenv {
              'externalsyllabus'               'externalsyllabus'
                  => '<b>'.&mt('URL of Syllabus (not using internal handler)').'</b>',                   => '<b>'.&mt('URL of Syllabus (not using internal handler)').'</b>',
      'tthoptions'       'tthoptions'
          => '<b>'.&mt('Default set of options to pass to tth/m when converting tex').'</b>'           => '<b>'.&mt('Default set of options to pass to tth/m when converting tex').'</b>',
   
        'texengine'
            => '<b>'.&mt('Force all students in the course to use a specific math rendering engine.').'</b><br />'.&mt('(Valid options are [_1].)','"tth", "jsMath", "mimetex"').'</b>',
              );                ); 
         my @Display_Order = ('url','description','courseid','cloners','grading',          my @Display_Order = ('url','description','courseid','cloners','grading',
                              'externalsyllabus',                               'externalsyllabus',
                              'default_xml_style','pageseparators',                               'default_xml_style','pageseparators',
                              'question.email','comment.email','policy.email',                               'question.email','question.email.text','comment.email','comment.email.text','policy.email','policy.email.text',
                              'student_classlist_view',                               'student_classlist_view',
                                'student_classlist_opt_in',
                                'student_classlist_portfiles',
                              'plc.roles.denied','plc.users.denied',                               'plc.roles.denied','plc.users.denied',
                              'pch.roles.denied','pch.users.denied',                               'pch.roles.denied','pch.users.denied',
                              'allow_limited_html_in_feedback',                               'allow_limited_html_in_feedback',
Line 2243  sub crsenv { Line 2290  sub crsenv {
                              'default_enrollment_start_date',                               'default_enrollment_start_date',
                              'default_enrollment_end_date',                               'default_enrollment_end_date',
      'tthoptions',       'tthoptions',
        'texengine',
      'disablesigfigs',       'disablesigfigs',
      'disableexampointprint',       'disableexampointprint',
      'task_messages'       'task_messages','task_grading',
                              );                               );
  foreach my $parameter (sort(keys(%values))) {   foreach my $parameter (sort(keys(%values))) {
             unless (($parameter =~ m/^internal\./)||($parameter =~ m/^metadata\./)) {              unless (($parameter =~ m/^internal\./)||($parameter =~ m/^metadata\./)) {
Line 2326  $start_header_row Line 2374  $start_header_row
 $end_header_row  $end_header_row
 $output  $output
 $end_table  $end_table
 <input type="submit" name="crsenv" value="$lt{'sce'}">  <input type="submit" name="crsenv" value="$lt{'sce'}" />
 </form>  </form>
 $end_page  $end_page
 ENDENV  ENDENV
Line 2363  sub readdata { Line 2411  sub readdata {
   
     my $classlist=&Apache::loncoursedata::get_classlist();      my $classlist=&Apache::loncoursedata::get_classlist();
     foreach (keys %$classlist) {      foreach (keys %$classlist) {
         # the following undefs are for 'domain', and 'username' respectively.          if ($_=~/^($match_username)\:($match_domain)$/) {
         if ($_=~/^(\w+)\:(\w+)$/) {  
     my ($tuname,$tudom)=($1,$2);      my ($tuname,$tudom)=($1,$2);
     my $useropt=&Apache::lonnet::get_userresdata($tuname,$tudom);      my $useropt=&Apache::lonnet::get_userresdata($tuname,$tudom);
             foreach my $userkey (keys %{$useropt}) {              foreach my $userkey (keys %{$useropt}) {
Line 2409  sub storedata { Line 2456  sub storedata {
  $tkey.'.type' => $typeof},   $tkey.'.type' => $typeof},
  $tudom,$tuname) eq 'ok') {   $tudom,$tuname) eq 'ok') {
     &log_parmset({$tkey=>$data,$tkey.'.type' => $typeof},0,$tuname,$tudom);      &log_parmset({$tkey=>$data,$tkey.'.type' => $typeof},0,$tuname,$tudom);
     $r->print('<br />'.&mt('Stored modified parameter for').' '.      $r->print('<br />'.&mt('Saved modified parameter for').' '.
       &Apache::loncommon::plainname($tuname,$tudom));        &Apache::loncommon::plainname($tuname,$tudom));
  } else {   } else {
     $r->print('<div class="LC_error">'.      $r->print('<div class="LC_error">'.
       &mt('Error storing parameters').'</div>');        &mt('Error saving parameters').'</div>');
  }   }
  &Apache::lonnet::devalidateuserresdata($tuname,$tudom);   &Apache::lonnet::devalidateuserresdata($tuname,$tudom);
     } else {      } else {
Line 2443  sub storedata { Line 2490  sub storedata {
  $tkey.'.type' => $typeof},   $tkey.'.type' => $typeof},
  $tudom,$tuname) eq 'ok') {   $tudom,$tuname) eq 'ok') {
     &log_parmset({$tkey=>$data,$tkey.'.type' => $typeof},0,$tuname,$tudom);      &log_parmset({$tkey=>$data,$tkey.'.type' => $typeof},0,$tuname,$tudom);
     $r->print('<br />'.&mt('Stored modified date for').' '.&Apache::loncommon::plainname($tuname,$tudom));      $r->print('<br />'.&mt('Saved modified date for').' '.&Apache::loncommon::plainname($tuname,$tudom));
  } else {   } else {
     $r->print('<div class="LC_error">'.      $r->print('<div class="LC_error">'.
       &mt('Error storing parameters').'</div>');        &mt('Error saving parameters').'</div>');
  }   }
  &Apache::lonnet::devalidateuserresdata($tuname,$tudom);   &Apache::lonnet::devalidateuserresdata($tuname,$tudom);
     } else {      } else {
Line 2475  sub storedata { Line 2522  sub storedata {
     if ($putentries) {      if ($putentries) {
  if (&Apache::lonnet::put('resourcedata',\%newdata,$dom,$crs) eq 'ok') {   if (&Apache::lonnet::put('resourcedata',\%newdata,$dom,$crs) eq 'ok') {
     &log_parmset(\%newdata,0);      &log_parmset(\%newdata,0);
     $r->print('<h3>'.&mt('Stored [_1] parameter(s)',$putentries/2).'</h3>');      $r->print('<h3>'.&mt('Saved [_1] parameter(s)',$putentries/2).'</h3>');
  } else {   } else {
     $r->print('<div class="LC_error">'.      $r->print('<div class="LC_error">'.
       &mt('Error storing parameters').'</div>');        &mt('Error saving parameters').'</div>');
  }   }
  &Apache::lonnet::devalidatecourseresdata($crs,$dom);   &Apache::lonnet::devalidatecourseresdata($crs,$dom);
     }      }
Line 2486  sub storedata { Line 2533  sub storedata {
   
 sub extractuser {  sub extractuser {
     my $key=shift;      my $key=shift;
     return ($key=~/^$env{'request.course.id'}.\[useropt\:(\w+)\:(\w+)\]\./);      return ($key=~/^$env{'request.course.id'}.\[useropt\:($match_username)\:($match_domain)\]\./);
 }  }
   
 sub listdata {  sub listdata {
Line 2544  sub listdata { Line 2591  sub listdata {
     my $section=&mt('All Students');      my $section=&mt('All Students');
     if ($middle=~/^\[(.*)\]/) {      if ($middle=~/^\[(.*)\]/) {
  my $issection=$1;   my $issection=$1;
  if ($issection=~/^useropt\:(\w+)\:(\w+)/) {   if ($issection=~/^useropt\:($match_username)\:($match_domain)/) {
     $section=&mt('User').": ".&Apache::loncommon::plainname($1,$2);      $section=&mt('User').": ".&Apache::loncommon::plainname($1,$2);
  } else {   } else {
     $section=&mt('Group/Section').': '.$issection;      $section=&mt('Group/Section').': '.$issection;
Line 2682  ENDOVER Line 2729  ENDOVER
     my @selected_sections =       my @selected_sections = 
  &Apache::loncommon::get_env_multiple('form.Section');   &Apache::loncommon::get_env_multiple('form.Section');
     @selected_sections = ('all') if (! @selected_sections);      @selected_sections = ('all') if (! @selected_sections);
     foreach (@selected_sections) {      foreach my $sec (@selected_sections) {
         if ($_ eq 'all') {          if ($sec eq 'all') {
             @selected_sections = ('all');              @selected_sections = ('all');
         }          }
     }      }
Line 2703  ENDOVER Line 2750  ENDOVER
  \%mapp, \%symbp,\%maptitles,\%uris,   \%mapp, \%symbp,\%maptitles,\%uris,
  \%keyorder,\%defkeytype);   \%keyorder,\%defkeytype);
   
       if (grep {$_ eq 'all'} (@psprt)) {
    @psprt = keys(%allparts);
       }
 # Menu to select levels, etc  # Menu to select levels, etc
   
     $r->print('<table id="LC_parm_overview_scope">      $r->print('<table id="LC_parm_overview_scope">
Line 2759  ENDOVER Line 2809  ENDOVER
  &listdata($r,$resourcedata,$listdata,$sortorder);   &listdata($r,$resourcedata,$listdata,$sortorder);
     }      }
     $r->print(&tableend().      $r->print(&tableend().
      ((($env{'form.store'}) || ($env{'form.dis'}))?'<p><input type="submit" name="store" value="'.&mt('Store').'" /></p>':'').       ((($env{'form.store'}) || ($env{'form.dis'}))?'<p><input type="submit" name="store" value="'.&mt('Save').'" /></p>':'').
       '</form>'.&Apache::loncommon::end_page());        '</form>'.&Apache::loncommon::end_page());
 }  }
   
Line 2875  ENDOVER Line 2925  ENDOVER
       '<td><input type="checkbox" name="del_'.$thiskey.'" /></td>'      );        '<td><input type="checkbox" name="del_'.$thiskey.'" /></td>'      );
           
     $r->print('<td>');      $r->print('<td>');
       my $display_value = $resourcedata->{$thiskey};
       if (&isdateparm($resourcedata->{$thiskey.'.type'})) {
    $display_value = 
       &Apache::lonlocal::locallocaltime($display_value);
       }
     $r->print(&mt('Parameter: "[_1]" with value: "[_2]"',      $r->print(&mt('Parameter: "[_1]" with value: "[_2]"',
   &standard_parameter_names($data{'parameter_name'}),    &standard_parameter_names($data{'parameter_name'}),
   $resourcedata->{$thiskey}));    $resourcedata->{$thiskey}));
Line 2899  ENDOVER Line 2954  ENDOVER
  $r->print(&mt('Resource: [_1] <br />&nbsp;&nbsp;&nbsp;with ID: [_2] <br />&nbsp;&nbsp;&nbsp;in folder [_3]',   $r->print(&mt('Resource: [_1] <br />&nbsp;&nbsp;&nbsp;with ID: [_2] <br />&nbsp;&nbsp;&nbsp;in folder [_3]',
       $url,$resid,$map));        $url,$resid,$map));
     }      }
     $r->print(&mt('Part: [_1]',$data{'parameter_part'}));      $r->print(' <br />&nbsp;&nbsp;&nbsp;'.&mt('Part: [_1]',$data{'parameter_part'}));
     $r->print('</td></tr>');      $r->print('</td></tr>');
   
  }   }
Line 2918  sub parse_key { Line 2973  sub parse_key {
     $data{'scope_type'} = 'all';      $data{'scope_type'} = 'all';
     if ($middle=~/^\[(.*)\]/) {      if ($middle=~/^\[(.*)\]/) {
         $data{'scope'} = $1;          $data{'scope'} = $1;
  if ($data{'scope'}=~/^useropt\:(\w+)\:(\w+)/) {   if ($data{'scope'}=~/^useropt\:($match_username)\:($match_domain)/) {
     $data{'scope_type'} = 'user';      $data{'scope_type'} = 'user';
     $data{'scope'} = [$1,$2];      $data{'scope'} = [$1,$2];
  } else {   } else {
Line 3111  ENDMAINFORMHEAD Line 3166  ENDMAINFORMHEAD
     my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};      my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
     my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};      my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
     my $vgr  = &Apache::lonnet::allowed('vgr',$env{'request.course.id'});      my $vgr  = &Apache::lonnet::allowed('vgr',$env{'request.course.id'});
       my $mgr  = &Apache::lonnet::allowed('mgr',$env{'request.course.id'});
   
     my @menu =      my @menu =
         ( { divider=>'Settings for Your Course',          ( { divider=>'Settings for Your Course',
Line 3128  ENDMAINFORMHEAD Line 3184  ENDMAINFORMHEAD
     url => '/adm/slotrequest?command=showslots',      url => '/adm/slotrequest?command=showslots',
     permission => $vgr,      permission => $vgr,
             },              },
     { text => 'Reset Student Access Times',
       url => '/adm/helper/resettimes.helper',
       permission => $mgr,
               },
   
           { text => 'Set Parameter Setting Default Actions',            { text => 'Set Parameter Setting Default Actions',
             action => 'setdefaults',              action => 'setdefaults',
             permission => $parm_permission,              permission => $parm_permission,
Line 3188  ENDMAINFORMHEAD Line 3249  ENDMAINFORMHEAD
 }  }
 ### Set portfolio metadata  ### Set portfolio metadata
 sub output_row {  sub output_row {
     my ($r, $field_name, $field_text) = @_;      my ($r, $field_name, $field_text, $added_flag) = @_;
     my $output;      my $output;
     my $options=$env{'course.'.$env{'request.course.id'}.'.metadata.'.$field_name.'.options'};      my $options=$env{'course.'.$env{'request.course.id'}.'.metadata.'.$field_name.'.options'};
     my $values=$env{'course.'.$env{'request.course.id'}.'.metadata.'.$field_name.'.values'};      my $values=$env{'course.'.$env{'request.course.id'}.'.metadata.'.$field_name.'.values'};
     unless (defined($options)) {      if (!defined($options)) {
         $options = 'active,stuadd';          $options = 'active,stuadd';
         $values = '';          $values = '';
     }      }
     $output.='<strong>'.$field_text.':</strong>';      if (!($options =~ /deleted/)) {
     $output.='<input name="'.$field_name.'_values" type="text" value="'.$values.'" size="80" /><br />';          my @options= ( ['active', 'Show to student'],
                       ['stuadd', 'Provide text area for students to type catalog information'],
     my @options= ( ['active', 'Show to student'],                      ['choices','Provide choices for students to select from']);
    ['onlyone','Student may select only one choice'],  #   ['onlyone','Student may select only one choice']);
    ['stuadd', 'Student may type choices']);          if ($added_flag) {
     foreach my $opt (@options) {              push @options,['deleted', 'Delete Metadata Field'];
  my $checked = ($options =~ m/$opt->[0]/) ? ' checked="checked" ' : '' ;          }
  $output.=('&nbsp;'x5).'<label><input type="checkbox" name="'.         $output = &Apache::loncommon::start_data_table_row();
     $field_name.'_'.$opt->[0].'" value="yes"'.$checked.' />'.          $output .= '<td><span class="LC_metadata"><strong>'.$field_text.':</strong></span></td>';
     &mt($opt->[1]).'</label> <br />';          $output .= &Apache::loncommon::end_data_table_row();
           foreach my $opt (@options) {
       my $checked = ($options =~ m/$opt->[0]/) ? ' checked="checked" ' : '' ;
       $output .= &Apache::loncommon::continue_data_table_row();
       $output .= '<td>'.('&nbsp;' x 5).'<span class="LC_metadata"><label>
                  <input type="checkbox" name="'.
                  $field_name.'_'.$opt->[0].'" value="yes"'.$checked.' />'.
                  &mt($opt->[1]).'</label></span> </td>';
       $output .= &Apache::loncommon::end_data_table_row();
    }
           $output .= &Apache::loncommon::continue_data_table_row();
           $output .= '<td>'.('&nbsp;' x 10).'<span class="LC_metadata"><input name="'.$field_name.'_values" type="text" value="'.$values.'" size="80" /></span></td>';
           $output .= &Apache::loncommon::end_data_table_row();
           my $multiple_checked;
           my $single_checked;
           if ($options =~ m/onlyone/) {
               $multiple_checked = "";
               $single_checked = " CHECKED ";
           } else {
               $multiple_checked = " CHECKED ";
               $single_checked = "";
           }
    $output .= &Apache::loncommon::continue_data_table_row();
    $output .= '<td>'.('&nbsp;' x 10).'<span class="LC_metadata">
               <input type="radio" name="'.$field_name.'_onlyone" value="multiple" '.$multiple_checked .'/>
               Student may select multiple choices from list</span></td>';
    $output .= &Apache::loncommon::end_data_table_row();
    $output .= &Apache::loncommon::continue_data_table_row();
    $output .= '<td>'.('&nbsp;' x 10).'<span class="LC_metadata">
               <input type="radio" name="'.$field_name.'_onlyone"  value="single" '.$single_checked.'/>
               Student may select only one choice from list</span></td>';
    $output .= &Apache::loncommon::end_data_table_row();
     }      }
     return ($output);      return ($output);
 }  }
   sub order_meta_fields {
       my ($r)=@_;
       my $idx = 1;
       my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'};
       my $crs = $env{'course.'.$env{'request.course.id'}.'.num'};
       $r->print(&Apache::loncommon::start_page('Order Metadata Fields'));
       &Apache::lonhtmlcommon::add_breadcrumb
               ({href=>"/adm/parmset?action=setrestrictmeta",
                 text=>"Restrict Metadata"},
                {text=>"Order Metadata"});
       $r->print(&Apache::lonhtmlcommon::breadcrumbs('Order Metadata'));
       if ($env{'form.storeorder'}) {
           my $newpos = $env{'form.newpos'} - 1;
           my $currentpos = $env{'form.currentpos'} - 1;
           my @neworder = ();
           my @oldorder = split /,/,$env{'course.'.$env{'request.course.id'}.'.metadata.addedorder'};
           my $i;
           if ($newpos > $currentpos) {
           # moving stuff up
               for ($i=0;$i<$currentpos;$i++) {
           $neworder[$i]=$oldorder[$i];
               }
               for ($i=$currentpos;$i<$newpos;$i++) {
           $neworder[$i]=$oldorder[$i+1];
               }
               $neworder[$newpos]=$oldorder[$currentpos];
               for ($i=$newpos+1;$i<=$#oldorder;$i++) {
           $neworder[$i]=$oldorder[$i];
               }
           } else {
           # moving stuff down
          for ($i=0;$i<$newpos;$i++) {
              $neworder[$i]=$oldorder[$i];
          }
          $neworder[$newpos]=$oldorder[$currentpos];
          for ($i=$newpos+1;$i<$currentpos+1;$i++) {
              $neworder[$i]=$oldorder[$i-1];
          }
          for ($i=$currentpos+1;$i<=$#oldorder;$i++) {
              $neworder[$i]=$oldorder[$i];
          }
           }
    my $ordered_fields = join ",", @neworder;
           my $put_result = &Apache::lonnet::put('environment',
                              {'metadata.addedorder'=>$ordered_fields},$dom,$crs);
    &Apache::lonnet::appenv('course.'.$env{'request.course.id'}.'.metadata.addedorder' => $ordered_fields);
       }
       my $fields = &get_added_meta_fieldnames($env{'request.course.id'});
       my $ordered_fields;
       my @fields_in_order = split /,/,$env{'course.'.$env{'request.course.id'}.'.metadata.addedorder'};
       if (!@fields_in_order) {
           # no order found, pick sorted order then create metadata.addedorder key.
           foreach my $key (sort keys %$fields) {
               push @fields_in_order, $key;
               $ordered_fields = join ",", @fields_in_order;
           }
           my $put_result = &Apache::lonnet::put('environment',
                               {'metadata.addedorder'=>$ordered_fields},$dom,$crs); 
       } 
       $r->print('<table>');
       my $num_fields = scalar(@fields_in_order);
       foreach my $key (@fields_in_order) {
           $r->print('<tr><td>');
           $r->print('<form method="post" action="">');
           $r->print('<select name="newpos" onChange="this.form.submit()">');
           for (my $i = 1;$i le $num_fields;$i ++) {
               if ($i eq $idx) {
                   $r->print('<option value="'.$i.'"  SELECTED>('.$i.')</option>');
               } else {
                   $r->print('<option value="'.$i.'">'.$i.'</option>');
               }
           }
           $r->print('</select></td><td>');
           $r->print('<input type="hidden" name="currentpos" value="'.$idx.'" />');
           $r->print('<input type="hidden" name="storeorder" value="true" />');
           $r->print('</form>');
           $r->print($$fields{$key}.'</td></tr>');
           $idx ++;
       }
       $r->print('</table>');
       return 'ok';
   }
   sub continue {
       my $output;
       $output .= '<form action="" method="post">';
       $output .= '<input type="hidden" name="action" value="setrestrictmeta" />';
       $output .= '<input type="submit" value="Continue" />';
       return ($output);
   }
   sub addmetafield {
       my ($r)=@_;
       $r->print(&Apache::loncommon::start_page('Add Metadata Field'));
       $r->print(&Apache::lonhtmlcommon::breadcrumbs('Add Metadata Field'));
       my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'};
       my $crs = $env{'course.'.$env{'request.course.id'}.'.num'};
       if (exists($env{'form.undelete'})) {
           my @meta_fields = &Apache::loncommon::get_env_multiple('form.undeletefield');
           foreach my $meta_field(@meta_fields) {
               my $options = $env{'course.'.$env{'request.course.id'}.'.metadata.'.$meta_field.'.options'};
               $options =~ s/deleted//;
               $options =~ s/,,/,/;
               my $put_result = &Apache::lonnet::put('environment',
                                           {'metadata.'.$meta_field.'.options'=>$options},$dom,$crs);
                                           
               $r->print('Undeleted Metadata Field <strong>'.$env{'course.'.$env{'request.course.id'}.'.metadata.'.$meta_field.'.added'}."</strong> with result ".$put_result.'<br />');
           }
           $r->print(&continue());
       } elsif (exists($env{'form.fieldname'})) {
           my $meta_field = $env{'form.fieldname'};
           my $display_field = $env{'form.fieldname'};
           $meta_field =~ s/\W/_/g;
           $meta_field =~ tr/A-Z/a-z/;
           my $put_result = &Apache::lonnet::put('environment',
                               {'metadata.'.$meta_field.'.values'=>"",
                                'metadata.'.$meta_field.'.added'=>"$display_field",
                                'metadata.'.$meta_field.'.options'=>""},$dom,$crs);
           $r->print('Added new Metadata Field <strong>'.$env{'form.fieldname'}."</strong> with result ".$put_result.'<br />');
           $r->print(&continue());
       } else {
           my $fields = &get_deleted_meta_fieldnames($env{'request.course.id'});
           if ($fields) {
               $r->print('You may undelete previously deleted fields.<br />Check those you wish to undelete and click Undelete.<br />');
               $r->print('<form method="post" action="">');
               foreach my $key(keys(%$fields)) {
                   $r->print('<input type="checkbox" name="undeletefield" value="'.$key.'" />'.$$fields{$key}.'<br /');
               }
               $r->print('<input type="submit" name="undelete" value="Undelete" />');
               $r->print('</form>');
           }
           $r->print('<hr /><strong>Or</strong> you may enter a new metadata field name.<form method="post" action="/adm/parmset?action=addmetadata"');
           $r->print('<input type="text" name="fieldname" /><br />');
           $r->print('<input type="submit" value="Add Metadata Field" />');
       }
       $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;
       
     $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 3235  sub setrestrictmeta { Line 3460  sub setrestrictmeta {
                if ($env{'form.'.$meta_field.'_stuadd'}) {                 if ($env{'form.'.$meta_field.'_stuadd'}) {
                    $options.='stuadd,';                     $options.='stuadd,';
                }                  } 
                if ($env{'form.'.$meta_field.'_onlyone'}) {                 if ($env{'form.'.$meta_field.'_choices'}) {
                      $options.='choices,';
                  } 
                  if ($env{'form.'.$meta_field.'_onlyone'} eq 'single') {
                    $options.='onlyone,';                     $options.='onlyone,';
                }                  } 
                if ($env{'form.'.$meta_field.'_active'}) {                 if ($env{'form.'.$meta_field.'_active'}) {
                    $options.='active,';                     $options.='active,';
                }                 }
                  if ($env{'form.'.$meta_field.'_deleted'}) {
                      $options.='deleted,';
                  }
                     my $name = $save_field;                      my $name = $save_field;
                      $put_result = &Apache::lonnet::put('environment',                       $put_result = &Apache::lonnet::put('environment',
                                                   {'metadata.'.$meta_field.'.options'=>$options,                                                    {'metadata.'.$meta_field.'.options'=>$options,
Line 3252  sub setrestrictmeta { Line 3483  sub setrestrictmeta {
     }      }
     &Apache::lonnet::coursedescription($env{'request.course.id'},      &Apache::lonnet::coursedescription($env{'request.course.id'},
        {'freshen_cache' => 1});         {'freshen_cache' => 1});
       # Get the default metadata fields
     my %metadata_fields = &Apache::lonmeta::fieldnames('portfolio');      my %metadata_fields = &Apache::lonmeta::fieldnames('portfolio');
       # Now get possible added metadata fields
       my $added_metadata_fields = &get_added_meta_fieldnames($env{'request.course.id'});
       my $row_alt = 1;
       $output .= &Apache::loncommon::start_data_table();
     foreach my $field (sort(keys(%metadata_fields))) {      foreach my $field (sort(keys(%metadata_fields))) {
         &Apache::lonnet::logthis ($field);  
         if ($field ne 'courserestricted') {          if ($field ne 'courserestricted') {
               $row_alt = $row_alt ? 0 : 1;
     $output.= &output_row($r, $field, $metadata_fields{$field});      $output.= &output_row($r, $field, $metadata_fields{$field});
  }   }
     }      }
       my $buttons = (<<ENDButtons);
           <input type="submit" name="restrictmeta" value="Save" />
           </form><br />
           <form method="post" action="/adm/parmset?action=addmetadata" name="form1">
           <input type="submit" name="restrictmeta" value="Add a Metadata Field" />
           </form>
           <br />
           <form method="post" action="/adm/parmset?action=ordermetadata" name="form2">
           <input type="submit" name="restrictmeta" value="Order Metadata Fields" />
   ENDButtons
       my $added_flag = 1;
       foreach my $field (sort(keys(%$added_metadata_fields))) {
           $row_alt = $row_alt ? 0 : 1;
           $output.= &output_row($r, $field, $$added_metadata_fields{$field},$added_flag, $row_alt);
       }
       $output .= &Apache::loncommon::end_data_table();
     $r->print(<<ENDenv);             $r->print(<<ENDenv);       
         <form method="post" action="/adm/parmset?action=setrestrictmeta" name="form">          <form method="post" action="/adm/parmset?action=setrestrictmeta" name="form">
         <p>  
         $output          $output
         <input type="submit" name="restrictmeta" value="Update Metadata Restrictions">          $buttons
         </form>          </form>
 ENDenv  ENDenv
     $r->print(&Apache::loncommon::end_page());      $r->print(&Apache::loncommon::end_page());
     return 'ok';      return 'ok';
 }  }
 ##################################################  ##################################################
   sub get_added_meta_fieldnames {
       my ($cid) = @_;
       my %fields;
       foreach my $key(%env) {
           if ($key =~ m/\Q$cid\E\.metadata\.(.+)\.added$/) {
               my $field_name = $1;
               my ($display_field_name) = $env{$key};
               $fields{$field_name} = $display_field_name;
           }
       }
       return \%fields;
   }
   sub get_deleted_meta_fieldnames {
       my ($cid) = @_;
       my %fields;
       foreach my $key(%env) {
           if ($key =~ m/\Q$cid\E\.metadata\.(.+)\.added$/) {
               my $field_name = $1;
               if ($env{'course.'.$env{'request.course.id'}.'.metadata.'.$field_name.'.options'} =~ m/deleted/) {
                   my ($display_field_name) = $env{$key};
                   $fields{$field_name} = $display_field_name;
               }
           }
       }
       return \%fields;
   }
 sub defaultsetter {  sub defaultsetter {
     my ($r) = @_;      my ($r) = @_;
   
Line 3426  ENDYESNO Line 3702  ENDYESNO
     }      }
     $r->print(&Apache::loncommon::end_data_table().      $r->print(&Apache::loncommon::end_data_table().
       "\n<input type='submit' name='storerules' value='".        "\n<input type='submit' name='storerules' value='".
       &mt('Store Rules')."' /></form>\n".        &mt('Save Rules')."' /></form>\n".
       &Apache::loncommon::end_page());        &Apache::loncommon::end_page());
     return;      return;
 }  }
Line 3523  sub parm_change_log { Line 3799  sub parm_change_log {
                                               \%saveable_parameters);                                                \%saveable_parameters);
     &Apache::loncommon::restore_course_settings('parameter_log',      &Apache::loncommon::restore_course_settings('parameter_log',
                                                 \%saveable_parameters);                                                  \%saveable_parameters);
     if (!$env{'form.show'}) { $env{'form.show'}=10; }      $r->print(&Apache::loncommon::display_filter().
   
     my $countselect =  
  &Apache::lonmeta::selectbox('show',$env{'form.show'},undef,  
     (&mt('all'),10,20,50,100,1000,10000));  
   
     $r->print('<nobr>'.&mt('[_1] Records',$countselect).'</nobr>'.  
               '<label>'.&Apache::lonhtmlcommon::checkbox('includetypes',$env{'form.includetypes'},'1').                '<label>'.&Apache::lonhtmlcommon::checkbox('includetypes',$env{'form.includetypes'},'1').
       ' '.&mt('Include parameter types').'</label>'.        ' '.&mt('Include parameter types').'</label>'.
       '<input type="submit" value="'.&mt('Display').'" /></form>');        '<input type="submit" value="'.&mt('Display').'" /></form>');
Line 3541  sub parm_change_log { Line 3811  sub parm_change_log {
       &mt('Parameter').'</th><th>'.&mt('Part').'</th><th>'.&mt('New Value').'</th><th>'.&mt('Announce').'</th>'.        &mt('Parameter').'</th><th>'.&mt('Part').'</th><th>'.&mt('New Value').'</th><th>'.&mt('Announce').'</th>'.
       &Apache::loncommon::end_data_table_header_row());        &Apache::loncommon::end_data_table_header_row());
     my $shown=0;      my $shown=0;
     foreach my $id (sort { $parmlog{$b}{'exe_time'}<=>$parmlog{$a}{'exe_time'} } (keys(%parmlog))) {      my $folder='';
       if ($env{'form.displayfilter'} eq 'currentfolder') {
    my $last='';
    if (tie(my %hash,'GDBM_File',$env{'request.course.fn'}.'_symb.db',
    &GDBM_READER(),0640)) {
       $last=$hash{'last_known'};
       untie(%hash);
    }
    if ($last) { ($folder) = &Apache::lonnet::decode_symb($last); }
       }
       foreach my $id (sort 
       {
    if ($parmlog{$b}{'exe_time'} ne $parmlog{$a}{'exe_time'}) {
       return $parmlog{$b}{'exe_time'} <=>$parmlog{$a}{'exe_time'}
    }
    my $aid = (split('00000',$a))[-1];
    my $bid = (split('00000',$b))[-1];
    return $bid<=>$aid;
       } (keys(%parmlog))) {
         my @changes=keys(%{$parmlog{$id}{'logentry'}});          my @changes=keys(%{$parmlog{$id}{'logentry'}});
  my $count = 0;   my $count = 0;
  my $time =   my $time =
Line 3562  sub parm_change_log { Line 3850  sub parm_change_log {
    $parmlog{$id}{'exe_udom'});     $parmlog{$id}{'exe_udom'});
  }   }
  my $row_start=&Apache::loncommon::start_data_table_row();   my $row_start=&Apache::loncommon::start_data_table_row();
  $r->print($row_start);  
  my $makenewrow=0;   my $makenewrow=0;
  my %istype=();   my %istype=();
  my $output;   my $output;
Line 3572  sub parm_change_log { Line 3859  sub parm_change_log {
     !exists($parmlog{$id}{'logentry'}{$changed.'.type'}));      !exists($parmlog{$id}{'logentry'}{$changed.'.type'}));
             my ($realm,$section,$parmname,$part,$what,$middle,$uname,$udom,$issection,$realmdescription)=              my ($realm,$section,$parmname,$part,$what,$middle,$uname,$udom,$issection,$realmdescription)=
  &components($changed,$parmlog{$id}{'uname'},$parmlog{$id}{'udom'},undef,undef,$typeflag);   &components($changed,$parmlog{$id}{'uname'},$parmlog{$id}{'udom'},undef,undef,$typeflag);
       if ($env{'form.displayfilter'} eq 'currentfolder') {
    if ($folder) {
       if ($middle!~/^\Q$folder\E/) { next; }
    }
       }
     if ($typeflag) {      if ($typeflag) {
  $istype{$parmname}=$value;    $istype{$parmname}=$value; 
  if (!$env{'form.includetypes'}) { next; }    if (!$env{'form.includetypes'}) { next; } 
Line 3624  sub parm_change_log { Line 3916  sub parm_change_log {
     }      }
     $output .= '</td>'.&Apache::loncommon::end_data_table_row();      $output .= '</td>'.&Apache::loncommon::end_data_table_row();
  }   }
  $r->print('<td rowspan="'.$count.'">'.$time.'</td>          if ($env{'form.displayfilter'} eq 'containing') {
       my $wholeentry=$about_me_link.':'.
    $parmlog{$id}{'exe_uname'}.':'.$parmlog{$id}{'exe_udom'}.':'.
    $output;
       if ($wholeentry!~/\Q$env{'form.containingphrase'}\E/i) { next; }        
    }
           if ($count) {
       $r->print($row_start.'<td rowspan="'.$count.'">'.$time.'</td>
                        <td rowspan="'.$count.'">'.$about_me_link.                         <td rowspan="'.$count.'">'.$about_me_link.
   '<br /><tt>'.$parmlog{$id}{'exe_uname'}.    '<br /><tt>'.$parmlog{$id}{'exe_uname'}.
           ':'.$parmlog{$id}{'exe_udom'}.'</tt>'.            ':'.$parmlog{$id}{'exe_udom'}.'</tt>'.
   $send_msg_link.'</td>'.$output);    $send_msg_link.'</td>'.$output);
       $shown++;
  $shown++;   }
  if (!($env{'form.show'} eq &mt('all')    if (!($env{'form.show'} eq &mt('all') 
       || $shown<=$env{'form.show'})) { last; }        || $shown<=$env{'form.show'})) { last; }
     }      }
Line 3638  sub parm_change_log { Line 3937  sub parm_change_log {
     $r->print(&Apache::loncommon::end_page());      $r->print(&Apache::loncommon::end_page());
 }  }
   
   sub check_for_course_info {
       my $navmap = Apache::lonnavmaps::navmap->new();
       return 1 if ($navmap);
       return 0;
   }
   
 ##################################################  ##################################################
 ##################################################  ##################################################
   
Line 3681  sub handler { Line 3986  sub handler {
  (&Apache::lonnet::allowed('opa',$env{'request.course.id'}) ||   (&Apache::lonnet::allowed('opa',$env{'request.course.id'}) ||
  &Apache::lonnet::allowed('opa',$env{'request.course.id'}.'/'.   &Apache::lonnet::allowed('opa',$env{'request.course.id'}.'/'.
   $env{'request.course.sec'}));    $env{'request.course.sec'}));
     if ($env{'request.course.id'} &&  $parm_permission) {      my $exists = &check_for_course_info();
   
       if ($env{'request.course.id'} &&  $parm_permission && $exists) {
   
         # Start Page          # Start Page
         &Apache::loncommon::content_type($r,'text/html');          &Apache::loncommon::content_type($r,'text/html');
Line 3715  sub handler { Line 4022  sub handler {
             &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=setoverview',              &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=setoverview',
     text=>"Overview Mode"});      text=>"Overview Mode"});
     &overview($r);      &overview($r);
    } elsif ($env{'form.action'} eq 'addmetadata' && $parm_permission) {
               &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=addmetadata',
       text=>"Add Metadata Field"});
       &addmetafield($r);
    } elsif ($env{'form.action'} eq 'ordermetadata' && $parm_permission) {
               &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=addmetadata',
       text=>"Add Metadata Field"});
       &order_meta_fields($r);
         } elsif ($env{'form.action'} eq 'setrestrictmeta' && $parm_permission) {          } elsif ($env{'form.action'} eq 'setrestrictmeta' && $parm_permission) {
             &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=setrestrictmeta',              &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=setrestrictmeta',
     text=>"Restrict Metadata"});      text=>"Restrict Metadata"});
Line 3743  sub handler { Line 4058  sub handler {
  }          }       
     } else {      } else {
 # ----------------------------- Not in a course, or not allowed to modify parms  # ----------------------------- Not in a course, or not allowed to modify parms
  $env{'user.error.msg'}=   if ($exists) {
     "/adm/parmset:opa:0:0:Cannot modify assessment parameters";      $env{'user.error.msg'}=
    "/adm/parmset:opa:0:0:Cannot modify assessment parameters";
    } else {
       $env{'user.error.msg'}=
    "/adm/parmset::0:1:Course environment gone, reinitialize the course";
    }
  return HTTP_NOT_ACCEPTABLE;   return HTTP_NOT_ACCEPTABLE;
     }      }
     return OK;      return OK;

Removed from v.1.333  
changed lines
  Added in v.1.375


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