[LON-CAPA-cvs] cvs: loncom(version_2_11_X) /interface lonparmset.pm

raeburn raeburn at source.lon-capa.org
Tue Oct 25 14:54:49 EDT 2016


raeburn		Tue Oct 25 18:54:49 2016 EDT

  Modified files:              (Branch: version_2_11_X)
    /loncom/interface	lonparmset.pm 
  Log:
  - For 2.11
    - Backport 1.552 (part), 1.553 (part), 1.568
  
  
-------------- next part --------------
Index: loncom/interface/lonparmset.pm
diff -u loncom/interface/lonparmset.pm:1.522.2.18 loncom/interface/lonparmset.pm:1.522.2.19
--- loncom/interface/lonparmset.pm:1.522.2.18	Thu Mar 12 02:48:15 2015
+++ loncom/interface/lonparmset.pm	Tue Oct 25 18:54:48 2016
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Handler to set parameters for assessments
 #
-# $Id: lonparmset.pm,v 1.522.2.18 2015/03/12 02:48:15 raeburn Exp $
+# $Id: lonparmset.pm,v 1.522.2.19 2016/10/25 18:54:48 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -954,7 +954,8 @@
 
 sub print_row {
     my ($r,$which,$part,$name,$symbp,$rid,$default,$defaulttype,$display,$defbgone,
-    $defbgtwo,$defbgthree,$parmlev,$uname,$udom,$csec,$cgroup,$usersgroups)=@_;
+    $defbgtwo,$defbgthree,$parmlev,$uname,$udom,$csec,$cgroup,$usersgroups,$noeditgrp,
+    $readonly)=@_;
     my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
     my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
     my $courseopt=&Apache::lonnet::get_courseresdata($cnum,$cdom);
@@ -999,24 +1000,24 @@
     if ($parmlev eq 'general') {
 
         if ($uname) {
-            &print_td($r,3,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display);
+            &print_td($r,3,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display,'',$readonly);
         } elsif ($cgroup) {
-            &print_td($r,6,$defbgthree,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display);
+            &print_td($r,6,$defbgthree,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display,$noeditgrp,$readonly);
         } elsif ($csec) {
-            &print_td($r,9,$defbgtwo,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display);
+            &print_td($r,9,$defbgtwo,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display,'',$readonly);
         } else {
-            &print_td($r,14,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display);
+            &print_td($r,14,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display,'',$readonly);
         }
     } elsif ($parmlev eq 'map') {
 
         if ($uname) {
-            &print_td($r,2,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display);
+            &print_td($r,2,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display,'',$readonly);
         } elsif ($cgroup) {
-            &print_td($r,5,$defbgthree,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display);
+            &print_td($r,5,$defbgthree,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display,$noeditgrp,$readonly);
         } elsif ($csec) {
-            &print_td($r,8,$defbgtwo,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display);
+            &print_td($r,8,$defbgtwo,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display,'',$readonly);
         } else {
-            &print_td($r,13,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display);
+            &print_td($r,13,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display,'',$readonly);
         }
     } else {
         if ($uname) {
@@ -1038,30 +1039,30 @@
 
         &print_td($r,14,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display);
 
-    &print_td($r,13,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display);
-    &print_td($r,12,'#FFDDDD',$result,\@outpar,$mprefix,$_,\@typeoutpar,$display);
-    &print_td($r,11,'#FFDDDD',$result,\@outpar,$mprefix,$_,\@typeoutpar,$display);
-    &print_td($r,10,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display);
+    &print_td($r,13,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display,'',$readonly);
+    &print_td($r,12,'#FFDDDD',$result,\@outpar,$mprefix,$_,\@typeoutpar,$display,'',$readonly);
+    &print_td($r,11,'#FFDDDD',$result,\@outpar,$mprefix,$_,\@typeoutpar,$display,'',$readonly);
+    &print_td($r,10,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display,'',$readonly);
 
     if ($csec) {
-        &print_td($r,9,$defbgtwo,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display);
-        &print_td($r,8,$defbgtwo,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display);
-        &print_td($r,7,$defbgtwo,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display);
+        &print_td($r,9,$defbgtwo,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display,'',$readonly);
+        &print_td($r,8,$defbgtwo,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display,'',$readonly);
+        &print_td($r,7,$defbgtwo,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display,'',$readonly);
     }
 
         if ($cgroup) {
-            &print_td($r,6,$defbgthree,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display);
-            &print_td($r,5,$defbgthree,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display);
-            &print_td($r,4,$defbgthree,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display);
+            &print_td($r,6,$defbgthree,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display,$noeditgrp,$readonly));
+            &print_td($r,5,$defbgthree,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display,$noeditgrp,$readonly));
+            &print_td($r,4,$defbgthree,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display,$noeditgrp,$readonly));
         }
 
     if ($uname) {
             if ($othergrp) {
                 $r->print($othergrp);
             }
-        &print_td($r,3,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display);
-        &print_td($r,2,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display);
-        &print_td($r,1,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display);
+        &print_td($r,3,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display,'',$readonly);
+        &print_td($r,2,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display,'',$readonly);
+        &print_td($r,1,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display,'',$readonly);
     }
 
     } # end of $parmlev if/else
@@ -1081,19 +1082,23 @@
 }
 
 sub print_td {
-    my ($r,$which,$defbg,$result,$outpar,$mprefix,$value,$typeoutpar,$display)=@_;
+    my ($r,$which,$defbg,$result,$outpar,$mprefix,$value,$typeoutpar,$display,$noeditgrp,$readonly)=@_;
     $r->print('<td style="background-color:'.(($result==$which)?'#AAFFAA':$defbg).
               ';" align="center">');
     my $nolink = 0;
-    if ($which == 11 || $which == 12) {
+    if ($readonly) {
         $nolink = 1;
-    } elsif ($mprefix =~ /availablestudent\&$/) {
-        if ($which > 3) {
-            $nolink = 1;
-        }
-    } elsif ($mprefix =~ /examcode\&$/) {
-        unless ($which == 2) {
+    } else {
+        if ($which == 11 || $which == 12) {
             $nolink = 1;
+        } elsif ($mprefix =~ /availablestudent\&$/) {
+            if ($which > 3) {
+                $nolink = 1;
+            }
+        } elsif ($mprefix =~ /examcode\&$/) {
+            unless ($which == 2) {
+                $nolink = 1;
+            }
         }
     }
     if ($nolink) {
@@ -1977,8 +1982,7 @@
 
 sub assessparms {
 
-    my $r=shift;
-
+    my ($r,$parm_permission) = @_;
 
 
 # -------------------------------------------------------- Variable declaration
@@ -2129,7 +2133,7 @@
     $symbp{'0.0'} = '';
 
 # ---------------------------------------------------------- Anything to store?
-    if ($env{'form.pres_marker'}) {
+    if ($env{'form.pres_marker'} && $parm_permission->{'edit'}) {
         my @markers=split(/\&\&\&/,$env{'form.pres_marker'});
         my @values=split(/\&\&\&/,$env{'form.pres_value'});
         my @types=split(/\&\&\&/,$env{'form.pres_type'});
@@ -2354,6 +2358,10 @@
         my @catmarker=map { tr|.|_|; 'parameter_'.$_; } @pscat;
         my $csuname=$env{'user.name'};
         my $csudom=$env{'user.domain'};
+        my $readonly = 1;
+        if ($parm_permission->{'edit'}) {
+            undef($readonly);
+        }
 
         if ($parmlev eq 'full') {
 #
@@ -2539,7 +2547,7 @@
                             &print_row($r,$_,\%part,\%name,\%symbp,$rid,\%default,
                                        \%type,\%display,$defbgone,$defbgtwo,
                                        $defbgthree,$parmlev,$uname,$udom,$csec,
-                                                            $cgroup,\@usersgroups);
+                                       $cgroup,\@usersgroups,$noeditgrp,$readonly);
                         }
                     }
                 }
@@ -2662,7 +2670,8 @@
                     $r->print(&Apache::loncommon::start_data_table_row());
                     &print_row($r,$_,\%part,\%name,\%symbp,$mapid,\%default,
                            \%type,\%display,$defbgone,$defbgtwo,$defbgthree,
-                           $parmlev,$uname,$udom,$csec,$cgroup);
+                           $parmlev,$uname,$udom,$csec,$cgroup,'',$noeditgrp,
+                           $readonly);
                 }
                 $r->print(&Apache::loncommon::end_data_table().'</p>'
                          .'</div>'
@@ -2752,8 +2761,9 @@
             foreach (&keysinorder(\%name,\%keyorder)) {
                 $r->print(&Apache::loncommon::start_data_table_row());
                 &print_row($r,$_,\%part,\%name,\%symbp,$mapid,\%default,
-                       \%type,\%display,$defbgone,$defbgtwo,$defbgthree,
-                                   $parmlev,$uname,$udom,$csec,$cgroup);
+                           \%type,\%display,$defbgone,$defbgtwo,$defbgthree,
+                           $parmlev,$uname,$udom,$csec,$cgroup,'',$noeditgrp,
+                           $readonly);
             }
             $r->print(&Apache::loncommon::end_data_table()
                      .'</p>'
@@ -2771,12 +2781,19 @@
 my $tableopen;
 
 sub tablestart {
+    my ($readonly) = @_;
     if ($tableopen) {
-    return '';
+        return '';
     } else {
-    $tableopen=1;
-    return &Apache::loncommon::start_data_table().'<tr><th>'.&mt('Parameter').'</th><th>'.
-        &mt('Delete').'</th><th>'.&mt('Set to ...').'</th></tr>';
+        $tableopen=1;
+        my $output = &Apache::loncommon::start_data_table().'<tr><th>'.&mt('Parameter').'</th>';
+        if ($readonly) {
+            $output .= '<th>'.&mt('Current value').'</th>';
+        } else {
+            $output .= '<th>'.&mt('Delete').'</th><th>'.&mt('Set to ...').'</th>';
+        }
+        $output .= '</tr>';
+        return $output;
     }
 }
 
@@ -2809,7 +2826,11 @@
         }
     }
     }
-    return $resourcedata;
+    if (wantarray) {
+        return ($resourcedata,$classlist);
+    } else {
+        return $resourcedata;
+    }
 }
 
 
@@ -2988,7 +3009,7 @@
 }
 
 sub listdata {
-    my ($r,$resourcedata,$listdata,$sortorder)=@_;
+    my ($r,$resourcedata,$listdata,$sortorder,$caller,$classlist,$readonly)=@_;
 # Start list output
 
     my $oldsection='';
@@ -3098,36 +3119,48 @@
 # Ready to print
 #
             my $parmitem = &standard_parameter_names($name);
-        $r->print(&tablestart().
+        $r->print(&tablestart($readonly).
               &Apache::loncommon::start_data_table_row().
               '<td><b>'.&mt($parmitem).
-              '</b></td><td><input type="checkbox" name="del_'.
-              $thiskey.'" /></td><td>');
+              '</b></td>');
+        unless ($readonly) {
+            $r->print('<td><input type="checkbox" name="del_'.
+                      $thiskey.'" /></td>');
+        }
+        $r->print('<td>');
         $foundkeys++;
         if (&isdateparm($thistype)) {
-        my $jskey='key_'.$pointer;
-        $pointer++;
-        $r->print(
-              &Apache::lonhtmlcommon::date_setter('parmform',
-                                  $jskey,
-                              $$resourcedata{$thiskey},
-                                  '',1,'','').
+            my $jskey='key_'.$pointer;
+            my $state;
+            $pointer++;
+            if ($readonly) {
+                $state = 'disabled';
+            }
+            $r->print(
+                &Apache::lonhtmlcommon::date_setter('parmform',
+                                                    $jskey,
+                                                    $$resourcedata{$thiskey},
+                                                    '',1,$state));
+            unless ($readonly) {
+                $r->print(
 '<input type="hidden" name="datepointer_'.$thiskey.'" value="'.$jskey.'" />'.
 (($$resourcedata{$thiskey}!=0)?'<span class="LC_nobreak"><a href="/adm/parmset?&action=dateshift1&timebase='.$$resourcedata{$thiskey}.'">'.
 &mt('Shift all dates based on this date').'</a></span>':'').
 &date_sanity_info($$resourcedata{$thiskey})
               );
+            }
         } elsif ($thistype eq 'date_interval') {
-        $r->print(&date_interval_selector($thiskey,
-                          $$resourcedata{$thiskey}));
+            $r->print(&date_interval_selector($thiskey,
+                      $$resourcedata{$thiskey},$readonly));
         } elsif ($thistype =~ m/^string/) {
-        $r->print(&string_selector($thistype,$thiskey,
-                       $$resourcedata{$thiskey},$name));
+            $r->print(&string_selector($thistype,$thiskey,
+                      $$resourcedata{$thiskey},$name,$readonly));
         } else {
-        $r->print(&default_selector($thiskey,$$resourcedata{$thiskey}));
+            $r->print(&default_selector($thiskey,$$resourcedata{$thiskey},$readonly));
         }
-        $r->print('<input type="hidden" name="typeof_'.$thiskey.'" value="'.
-              $thistype.'" />');
+        unless ($readonly) {
+            $r->print('<input type="hidden" name="typeof_'.$thiskey.'" value="'.
+                      $thistype.'" />');
         $r->print('</td>'.&Apache::loncommon::end_data_table_row());
     }
     }
@@ -3136,7 +3169,7 @@
 
 
 sub date_interval_selector {
-    my ($thiskey, $showval) = @_;
+    my ($thiskey, $showval, $readonly) = @_;
     my $result;
     foreach my $which (['days', 86400, 31],
                ['hours', 3600, 23],
@@ -3148,10 +3181,12 @@
     my %select = ((map {$_ => $_} (0..$max)),
               'select_form_order' => [0..$max]);
     $result .= &Apache::loncommon::select_form($amount,$name.'_'.$thiskey,
-                           \%select);
+                           \%select,'',$readonly);
     $result .= ' '.&mt($name);
     }
-    $result .= '<input type="hidden" name="dateinterval_'.$thiskey.'" />';
+    unless ($readonly) {
+        $result .= '<input type="hidden" name="dateinterval_'.$thiskey.'" />';
+    }
     return $result;
 
 }
@@ -3173,8 +3208,12 @@
 
 
 sub default_selector {
-    my ($thiskey, $showval) = @_;
-    return '<input type="text" name="set_'.$thiskey.'" value="'.$showval.'" />';
+    my ($thiskey, $showval, $readonly) = @_;
+    my $disabled;
+    if ($readonly) {
+        $disabled = ' disabled="disabled"';
+    }
+    return '<input type="text" name="set_'.$thiskey.'" value="'.$showval.'"'.$disabled.' />';
 }
 
 my %strings =
@@ -3215,10 +3254,10 @@
 }
 
 sub string_selector {
-    my ($thistype, $thiskey, $showval, $name) = @_;
+    my ($thistype, $thiskey, $showval, $name, $readonly) = @_;
 
     if (!exists($strings{$thistype})) {
-    return &default_selector($thiskey,$showval);
+    return &default_selector($thiskey,$showval,$readonly);
     }
 
     my %skiptype;
@@ -3244,9 +3283,12 @@
             }
         }
     }
-    
+ 
+    my ($result,$disabled);
 
-    my $result;
+    if ($readonly) {
+        $disabled = ' disabled="disabled"';
+    }
     my $numinrow = 3;
     if ($thistype eq 'string_problemstatus') {
         $numinrow = 2;
@@ -3272,7 +3314,7 @@
             $result .= '<td class="LC_left_item">'.
                        '<span class="LC_nobreak"><label>'.
                        '<input type="radio" name="set_'.$thiskey.
-                       '" value="'.$name.'"';
+                       '" value="'.$name.'"'.$disabled;
             if ($showval eq $name) {
                 $result .= ' checked="checked"';
             }
@@ -3331,10 +3373,14 @@
 }
 
 sub newoverview {
-    my ($r) = @_;
+    my ($r,$parm_permission) = @_;
 
     my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'};
     my $crs = $env{'course.'.$env{'request.course.id'}.'.num'};
+    my $readonly = 1;
+    if ($parm_permission->{'edit'}) {
+        undef($readonly);
+    }
     &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=setoverview',
         text=>"Overview Mode"});
 
@@ -3474,11 +3520,13 @@
 
 # List data
 
-        &listdata($r,$resourcedata,$listdata,$sortorder);
+        &listdata($r,$resourcedata,$listdata,$sortorder,'newoverview',undef,$readonly);
+    }
+    $r->print(&tableend());
+    unless ($readonly) {
+        $r->print(((($env{'form.store'}) || ($env{'form.dis'}))?'<p><input type="submit" name="store" value="'.&mt('Save').'" /></p>':''));
     }
-    $r->print(&tableend().
-         ((($env{'form.store'}) || ($env{'form.dis'}))?'<p><input type="submit" name="store" value="'.&mt('Save').'" /></p>':'').
-          '</form>');
+    $r->print('</form>');
     $r->print(&Apache::loncommon::end_page());
 }
 
@@ -3518,10 +3566,13 @@
 }
 
 sub overview {
-    my ($r) = @_;
+    my ($r,$parm_permission) = @_;
     my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'};
     my $crs = $env{'course.'.$env{'request.course.id'}.'.num'};
-
+    my $readonly = 1;
+    if ($parm_permission->{'edit'}) {
+        undef($readonly);
+    }
     &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=setoverview',
     text=>"Overview Mode"});
     my $start_page=&Apache::loncommon::start_page('Modify Parameters');
@@ -3530,25 +3581,39 @@
     $r->print('<form method="post" action="/adm/parmset?action=setoverview" name="parmform">');
 
 # Store modified
-
-    &storedata($r,$crs,$dom);
+    unless ($readonly) {
+        &storedata($r,$crs,$dom);
+    }
 
 # Read modified data
 
-    my $resourcedata=&readdata($crs,$dom);
+    my ($resourcedata,$classlist)=&readdata($crs,$dom);
 
 
     my $sortorder=$env{'form.sortorder'};
     unless ($sortorder) { $sortorder='realmstudent'; }
     &sortmenu($r,$sortorder);
 
+    my $submitbutton = '<input type="submit" value="'.&mt('Save').'" />';
+
+    if ($readonly) {
+        $r->print('<p>'.$submitbutton.'</p>');
+    }
+
+
 # List data
 
-    my $foundkeys=&listdata($r,$resourcedata,$resourcedata,$sortorder);
+    my $foundkeys=&listdata($r,$resourcedata,$resourcedata,$sortorder,'overview',$classlist,$readonly);
 
-    $r->print(&tableend().'<p>'.
-    ($foundkeys?'<input type="submit" value="'.&mt('Save').'" />':'<span class="LC_info">'.&mt('There are no parameters.').'</span>').'</p></form>'.
-          &Apache::loncommon::end_page());
+    $r->print(&tableend().'<p>');
+    if ($foundkeys) {
+        unless ($readonly) {
+            $r->print('<p>'.$submitbutton.'</p>');
+        }
+    } else {
+        $r->print('<p class="LC_info">'.&mt('There are no parameters.').'</p>');
+    }
+    $r->print('</form>'.&Apache::loncommon::end_page());
 }
 
 sub clean_parameters {
@@ -3738,6 +3803,9 @@
     #
     $r->print(&header());
     $r->print(&Apache::lonhtmlcommon::breadcrumbs('Content and Problem Settings'));
+    my $crstype = &Apache::loncommon::course_type();
+    my $lc_crstype = lc($crstype);
+
     $r->print(<<ENDMAINFORMHEAD);
 <form method="post" enctype="multipart/form-data"
       action="/adm/parmset" name="studentform">
@@ -3748,38 +3816,73 @@
     my $vgr  = &Apache::lonnet::allowed('vgr',$env{'request.course.id'});
     my $mgr  = &Apache::lonnet::allowed('mgr',$env{'request.course.id'});
     my $dcm = &Apache::lonnet::allowed('dcm',$env{'request.course.id'});
+    my $vcb = &Apache::lonnet::allowed('vcb',$env{'request.course.id'});
+    my $vpa = &Apache::lonnet::allowed('vpa',$env{'request.course.id'});
     if ((!$dcm) && ($env{'request.course.sec'} ne '')) {
         $dcm = &Apache::lonnet::allowed('dcm',$env{'request.course.id'}.
                                         '/'.$env{'request.course.sec'});
     }
-
-    my $crstype = &Apache::loncommon::course_type();
-    my $lc_crstype = lc($crstype);
-
+    if ((!$vcb) && ($env{'request.course.sec'} ne '')) {
+        $vcb = &Apache::lonnet::allowed('vcb',$env{'request.course.id'}.
+                                        '/'.$env{'request.course.sec'});
+    }
+    my (%linktext,%linktitle,%url);
+    if ($parm_permission->{'edit'}) {
+        %linktext = (
+                     newoverview     => 'Edit Resource Parameters - Overview Mode',
+                     settable        => 'Edit Resource Parameters - Table Mode',
+                     setoverview     => 'Modify Resource Parameters - Overview Mode',
+                    );
+        %linktitle = (
+                     newoverview     => 'Set/Modify resource parameters in overview mode.',
+                     settable        => 'Set/Modify resource parameters in table mode.',
+                     setoverview     => 'Set/Modify existing resource parameters in overview mode.',
+                     );
+    } else {
+        %linktext = (
+                     newoverview     => 'View Resource Parameters - Overview Mode',
+                     settable        => 'View Resource Parameters - Table Mode',
+                     setoverview     => 'View Resource Parameters - Overview Mode',
+                   );
+        %linktitle = (
+                     newoverview     => 'Display resource parameters in overview mode.',
+                     settable        => 'Display resource parameters in table mode.',
+                     setoverview     => 'Display existing resource parameters in overview mode.',
+                     );
+    }
+    if ($mgr) {
+        $linktext{'resettimes'} = 'Reset Student Access Times';
+        $linktitle{'resettimes'} = "Reset access times for folders/maps, resources or the $lc_crstype.";
+        $url{'resettimes'} = '/adm/helper/resettimes.helper';
+    } elsif ($vgr) {
+        $linktext{'resettimes'} = 'Display Student Access Times',
+        $linktitle{'resettimes'} = "Display access times for folders/maps, resources or the $lc_crstype.",
+        $url{'resettimes'} = '/adm/accesstimes';
+    }
     my @menu =
         ( { categorytitle=>"Content Settings for this $crstype",
         items => [
           { linktext => 'Portfolio Metadata',
             url => '/adm/parmset?action=setrestrictmeta',
-            permission => $parm_permission,
+            permission => $parm_permission->{'setrestrictmeta'},
             linktitle => "Restrict metadata for this $lc_crstype." ,
             icon =>'contact-new.png'   ,
             },
-          { linktext => 'Reset Student Access Times',
-            url => '/adm/helper/resettimes.helper',
-            permission => $mgr,
-            linktitle => "Reset access times for folders/maps, resources or the $lc_crstype."  ,
-            icon => 'start-here.png'  ,
+          { linktext => $linktext{'resettimes'},
+            url => $url{'resettimes'},
+            permission => ($vgr || $mgr)
+            linktitle => $linktitle{'resettimes'},
+            icon => 'start-here.png',
             },
           { linktext => 'Blocking Communication/Resource Access',
             url => '/adm/setblock',
-            permission => $dcm,
+            permission => ($vcb || $dcm),
             linktitle => 'Configure blocking of communication/collaboration and access to resources during an exam',
             icon => 'comblock.png',
             },
           { linktext => 'Set Parameter Setting Default Actions',
             url => '/adm/parmset?action=setdefaults',
-            permission => $parm_permission,
+            permission => $parm_permission->{'setdefaults'},
             linktitle =>'Set default actions for parameters.'  ,
             icon => 'folder-new.png'  ,
             }]},
@@ -3787,37 +3890,37 @@
         items => [
           { linktext => 'Edit Resource Parameters - Helper Mode',
             url => '/adm/helper/parameter.helper',
-            permission => $parm_permission,
+            permission => $parm_permission->{'helper'},
             linktitle =>'Set/Modify resource parameters in helper mode.'  ,
             icon => 'dialog-information.png'  ,
             #help => 'Parameter_Helper',
             },
-          { linktext => 'Edit Resource Parameters - Overview Mode',
+          { linktext => $linktext{'newoverview'},
             url => '/adm/parmset?action=newoverview',
-            permission => $parm_permission,
-            linktitle =>'Set/Modify resource parameters in overview mode.'  ,
-            icon => 'edit-find.png'  ,
+            permission => $parm_permission->{'newoverview'},
+            linktitle => $linktitle{'newoverview'},
+            icon => 'edit-find.png',
             #help => 'Parameter_Overview',
             },
-          { linktext => 'Edit Resource Parameters - Table Mode',
+          { linktext => $linktext{'settable'},
             url => '/adm/parmset?action=settable',
-            permission => $parm_permission,
-            linktitle =>'Set/Modify resource parameters in table mode.'  ,
-            icon => 'edit-copy.png'  ,
+            permission => $parm_permission->{'settable'},
+            linktitle => $linktitle{'settable'},
+            icon => 'edit-copy.png',
             #help => 'Table_Mode',
             }]},
            { categorytitle => 'Existing Parameter Settings for Resources',
          items => [
-          { linktext => 'Modify Resource Parameters - Overview Mode',
+          { linktext => $linktext{'setoverview'},
             url => '/adm/parmset?action=setoverview',
-            permission => $parm_permission,
-            linktitle =>'Set/Modify existing resource parameters in overview mode.'  ,
-            icon => 'preferences-desktop-wallpaper.png'  ,
+            permission => $parm_permission->{'setoverview'},
+            linktitle => $linktitle{'setoverview'},
+            icon => 'preferences-desktop-wallpaper.png',
             #help => 'Parameter_Overview',
             },
           { linktext => 'Change Log',
             url => '/adm/parmset?action=parameterchangelog',
-            permission => $parm_permission,
+            permission => $parm_permission->{'parameterchangelog'},
             linktitle =>"View parameter and $lc_crstype blog posting/user notification change log."  ,
             icon => 'document-properties.png',
             }]}
@@ -4391,7 +4494,7 @@
 }
 
 sub parm_change_log {
-    my ($r)=@_;
+    my ($r,$parm_permission)=@_;
     &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=settable',
     text=>"Parameter Change Log"});
     my $js = '<script type="text/javascript">'."\n".
@@ -4420,13 +4523,19 @@
     $r->print(&Apache::loncommon::display_filter('parmslog').' '."\n".
               '<input type="submit" value="'.&mt('Display').'" />'.
               '</form></fieldset></div><br clear="all" />');
-
+    my $readonly = 1;
+    if ($parm_permission->{'edit'}) {
+        undef($readonly);
+    }
     my $courseopt=&Apache::lonnet::get_courseresdata($env{'course.'.$env{'request.course.id'}.'.num'},
                              $env{'course.'.$env{'request.course.id'}.'.domain'});
     $r->print(&Apache::loncommon::start_data_table().&Apache::loncommon::start_data_table_header_row().
           '<th>'.&mt('Time').'</th><th>'.&mt('User').'</th><th>'.&mt('Extent').'</th><th>'.&mt('Users').'</th><th>'.
-          &mt('Parameter').'</th><th>'.&mt('Part').'</th><th>'.&mt('New Value').'</th><th>'.&mt('Announce').'</th>'.
-          &Apache::loncommon::end_data_table_header_row());
+          &mt('Parameter').'</th><th>'.&mt('Part').'</th><th>'.&mt('New Value').'</th>');
+    unless ($readonly) {
+        $r->print('<th>'.&mt('Announce').'</th>');
+    }
+    $r->print(&Apache::loncommon::end_data_table_header_row());
     my $shown=0;
     my $folder='';
     if ($env{'form.displayfilter'} eq 'currentfolder') {
@@ -4459,7 +4568,8 @@
                            $parmlog{$id}{'exe_uname'},
                            $parmlog{$id}{'exe_udom'});
     my $send_msg_link='';
-    if ((($parmlog{$id}{'exe_uname'} ne $env{'user.name'})
+    if ((!$readonly) && 
+        (($parmlog{$id}{'exe_uname'} ne $env{'user.name'})
          || ($parmlog{$id}{'exe_udom'} ne $env{'user.domain'}))) {
         $send_msg_link ='<br />'.
         &Apache::loncommon::messagewrapper(&mt('Send message'),
@@ -4529,27 +4639,31 @@
             }
         }
         }
-        $output .= '</td><td>';
-            
-        if ($stillactive) {
-                my $parmitem = &standard_parameter_names($parmname);
-                $parmitem = &mt($parmitem);
-        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));
-        if (($uname) && ($udom)) {
-            $output .=
-            &Apache::loncommon::messagewrapper('Notify User',
-                               $uname,$udom,$title,
-                               $description);
-        } else {
-            $output .=
-            &Apache::lonrss::course_blog_link($id,$title,
-                              $description);
-        }
-        }
-        $output .= '</td>'.&Apache::loncommon::end_data_table_row();
+        $output .= '</td>';
+
+            unless ($readonly) {
+                $output .= '<td>';
+                if ($stillactive) {
+                    my $parmitem = &standard_parameter_names($parmname);
+                    $parmitem = &mt($parmitem);
+                    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));
+                    if (($uname) && ($udom)) {
+                        $output .=
+                            &Apache::loncommon::messagewrapper('Notify User',
+                                                               $uname,$udom,$title,
+                                                               $description);
+                    } else {
+                        $output .=
+                            &Apache::lonrss::course_blog_link($id,$title,
+                                                              $description);
+                    }
+                }
+                $output .= '</td>';
+            }
+        $output .= &Apache::loncommon::end_data_table_row();
     }
         if ($env{'form.displayfilter'} eq 'containing') {
         my $wholeentry=$about_me_link.':'.
@@ -4735,6 +4849,46 @@
            '</p>';
 }
 
+sub get_permission {
+    my %permission;
+    my $allowed = 0;
+    return (\%permission,$allowed) unless ($env{'request.course.id'});
+    if ((&Apache::lonnet::allowed('opa',$env{'request.course.id'})) ||
+        (&Apache::lonnet::allowed('opa',$env{'request.course.id'}.'/'.
+                  $env{'request.course.sec'}))) {
+        %permission= (
+                       'edit'               => 1,
+                       'set'                => 1,
+                       'setoverview'        => 1,
+                       'addmetadata'        => 1,
+                       'ordermetadata'      => 1,
+                       'setrestrictmeta'    => 1,
+                       'newoverview'        => 1,
+                       'setdefaults'        => 1,
+                       'settable'           => 1,
+                       'parameterchangelog' => 1,
+                       'cleanparameters'    => 1,
+                       'dateshift1'         => 1,
+                       'dateshift2'         => 1,
+                       'helper'             => 1,
+         );
+    } elsif ((&Apache::lonnet::allowed('vpa',$env{'request.course.id'})) ||
+             (&Apache::lonnet::allowed('vpa',$env{'request.course.id'}.'/'.
+                  $env{'request.course.sec'}))) {
+        %permission = (
+                       'set'                => 1,
+                       'settable'           => 1,
+                       'newoverview'        => 1,
+                       'setoverview'        => 1,
+                       'parameterchangelog' => 1,
+                      );
+    }
+    foreach my $perm (values(%permission)) {
+        if ($perm) { $allowed=1; last; }
+    }
+    return (\%permission,$allowed);
+}
+
 sub handler {
     my $r=shift;
 
@@ -4762,41 +4916,41 @@
                                             'Parameter_Manager,Course_Environment,Parameter_Helper,Parameter_Overview,Table_Mode'});
 
 # ----------------------------------------------------- Needs to be in a course
-    my $parm_permission =
-    (&Apache::lonnet::allowed('opa',$env{'request.course.id'}) ||
-     &Apache::lonnet::allowed('opa',$env{'request.course.id'}.'/'.
-                  $env{'request.course.sec'}));
+    my ($parm_permission,$allowed) = &get_permission();
     my $exists = &check_for_course_info();
 
-    if ($env{'request.course.id'} &&  $parm_permission && $exists) {
+    if ($env{'request.course.id'} && $allowed && $exists) {
         #
         # Main switch on form.action and form.state, as appropriate
         #
         # Check first if coming from someone else headed directly for
         #  the table mode
-        if ((($env{'form.command'} eq 'set') && ($env{'form.url'})
-         && (!$env{'form.dis'})) || ($env{'form.symb'})) {
-        &assessparms($r);
+        if (($parm_permission->{'set'}) &&
+            ((($env{'form.command'} eq 'set') && ($env{'form.url'})
+               && (!$env{'form.dis'})) || ($env{'form.symb'}))) {
+            &assessparms($r,$parm_permission);
         } elsif (! exists($env{'form.action'})) {
             &print_main_menu($r,$parm_permission);
+        } elsif (!$parm_permission->{$env{'form.action'}}) {
+            &print_main_menu($r,$parm_permission);
         } elsif ($env{'form.action'} eq 'setoverview') {
-        &overview($r);
-    } elsif ($env{'form.action'} eq 'addmetadata') {
-        &addmetafield($r);
-    } elsif ($env{'form.action'} eq 'ordermetadata') {
-        &order_meta_fields($r);
+            &overview($r,$parm_permission);
+        } elsif ($env{'form.action'} eq 'addmetadata') {
+            &addmetafield($r);
+        } elsif ($env{'form.action'} eq 'ordermetadata') {
+            &order_meta_fields($r);
         } elsif ($env{'form.action'} eq 'setrestrictmeta') {
-        &setrestrictmeta($r);
+            &setrestrictmeta($r);
         } elsif ($env{'form.action'} eq 'newoverview') {
-        &newoverview($r);
+            &newoverview($r,$parm_permission);
         } elsif ($env{'form.action'} eq 'setdefaults') {
-        &defaultsetter($r);
-    } elsif ($env{'form.action'} eq 'settable') {
-        &assessparms($r);
+            &defaultsetter($r);
+        } elsif ($env{'form.action'} eq 'settable') {
+            &assessparms($r,$parm_permission);
         } elsif ($env{'form.action'} eq 'parameterchangelog') {
-        &parm_change_log($r);
+            &parm_change_log($r,$parm_permission);
         } elsif ($env{'form.action'} eq 'cleanparameters') {
-        &clean_parameters($r);
+            &clean_parameters($r);
         } elsif ($env{'form.action'} eq 'dateshift1') {
             &date_shift_one($r);
         } elsif ($env{'form.action'} eq 'dateshift2') {


More information about the LON-CAPA-cvs mailing list