Diff for /loncom/interface/lonparmset.pm between versions 1.284 and 1.292

version 1.284, 2006/04/13 20:54:35 version 1.292, 2006/04/18 02:13:49
Line 396  sub storeparm_by_symb { Line 396  sub storeparm_by_symb {
   
 {  {
     my $logid;      my $logid;
     sub logparmset {      sub log_parmset {
  my ($symb,$spnam,$snum,$nval,$ntype,$uname,$udom,$csec,$cgroup)=@_;   my ($storehash,$delflag,$uname,$udom)=@_;
           my $logentry=join(',',map {
       &Apache::lonnet::escape($_).'=>'.&Apache::lonnet::escape($$storehash{$_});
    } keys %$storehash);
  $logid++;   $logid++;
  my $id=time.'00000'.$$.'00000'.$logid;   my $id=time().'00000'.$$.'00000'.$logid;
  &Apache::lonnet::put('parameterlog',{   &Apache::lonnet::put('nohist_parameterlog',
      $id.'_exe_uname' => $env{'user.name'},       {
      $id.'_exe_udom' => $env{'user.domain'},   $id.'_exe_uname' => $env{'user.name'},
      $id.'_exe_time' => time,   $id.'_exe_udom'  => $env{'user.domain'},
      $id.'_exe_ip' => $ENV{'REMOTE_ADDR'},   $id.'_exe_time'  => time(),
      $id.'_symb' => $symb,   $id.'_exe_ip'    => $ENV{'REMOTE_ADDR'},
                              $id.'_spnam' => $spnam,   $id.'_delflag'   => $delflag,
                              $id.'_snum' => $snum,                                   $id.'_logentry'  => $logentry,
      $id.'_nval' => $nval,   $id.'_uname'     => $uname,
      $id.'_ntype' => $ntype,   $id.'_udom'      => $udom,
                              $id.'_uname' => $uname,       },
      $id.'_udom' => $udom,  
      $id.'_csec' => $csec,  
      $id.'_cgroup' => $cgroup},  
      $env{'course.'.$env{'request.course.id'}.'.domain'},       $env{'course.'.$env{'request.course.id'}.'.domain'},
      $env{'course.'.$env{'request.course.id'}.'.num'}       $env{'course.'.$env{'request.course.id'}.'.num'}
      );       );
Line 423  sub storeparm_by_symb { Line 423  sub storeparm_by_symb {
 sub storeparm_by_symb_inner {  sub storeparm_by_symb_inner {
 # ---------------------------------------------------------- Get symb, map, etc  # ---------------------------------------------------------- Get symb, map, etc
     my ($symb,$spnam,$snum,$nval,$ntype,$uname,$udom,$csec,$cgroup)=@_;      my ($symb,$spnam,$snum,$nval,$ntype,$uname,$udom,$csec,$cgroup)=@_;
     &logparmset(@_);  
 # ---------------------------------------------------------- Construct prefixes  # ---------------------------------------------------------- Construct prefixes
     $spnam=~s/\_([^\_]+)$/\.$1/;      $spnam=~s/\_([^\_]+)$/\.$1/;
     my $map=(&Apache::lonnet::decode_symb($symb))[0];          my $map=(&Apache::lonnet::decode_symb($symb))[0];    
Line 477  sub storeparm_by_symb_inner { Line 476  sub storeparm_by_symb_inner {
  if ($delete) {   if ($delete) {
     $reply=&Apache::lonnet::del      $reply=&Apache::lonnet::del
  ('resourcedata',[keys(%storecontent)],$cdom,$cnum);   ('resourcedata',[keys(%storecontent)],$cdom,$cnum);
               &log_parmset(\%storecontent,1);
  } else {   } else {
     $reply=&Apache::lonnet::cput      $reply=&Apache::lonnet::cput
  ('resourcedata',\%storecontent,$cdom,$cnum);   ('resourcedata',\%storecontent,$cdom,$cnum);
       &log_parmset(\%storecontent);
  }   }
  &Apache::lonnet::devalidatecourseresdata($cnum,$cdom);   &Apache::lonnet::devalidatecourseresdata($cnum,$cdom);
     } else {      } else {
Line 500  sub storeparm_by_symb_inner { Line 501  sub storeparm_by_symb_inner {
  if ($delete) {   if ($delete) {
     $reply=&Apache::lonnet::del      $reply=&Apache::lonnet::del
  ('resourcedata',[keys(%storecontent)],$udom,$uname);   ('resourcedata',[keys(%storecontent)],$udom,$uname);
       &log_parmset(\%storecontent,1,$uname,$udom);
  } else {   } else {
     $reply=&Apache::lonnet::cput      $reply=&Apache::lonnet::cput
  ('resourcedata',\%storecontent,$udom,$uname);   ('resourcedata',\%storecontent,$udom,$uname);
       &log_parmset(\%storecontent,0,$uname,$udom);
  }   }
  &Apache::lonnet::devalidateuserresdata($uname,$udom);   &Apache::lonnet::devalidateuserresdata($uname,$udom);
     }      }
Line 2419  sub storedata { Line 2422  sub storedata {
  if (&Apache::lonnet::put('resourcedata',{$tkey=>$data,   if (&Apache::lonnet::put('resourcedata',{$tkey=>$data,
  $tkey.'.type' => $typeof},   $tkey.'.type' => $typeof},
  $tudom,$tuname) eq 'ok') {   $tudom,$tuname) eq 'ok') {
       &log_parmset({$tkey=>$data,$tkey.'.type' => $typeof},0,$tuname,$tudom);
     $r->print('<br />'.&mt('Stored modified parameter for').' '.      $r->print('<br />'.&mt('Stored modified parameter for').' '.
       &Apache::loncommon::plainname($tuname,$tudom));        &Apache::loncommon::plainname($tuname,$tudom));
  } else {   } else {
Line 2434  sub storedata { Line 2438  sub storedata {
     } elsif ($cmd eq 'del') {      } elsif ($cmd eq 'del') {
  if ($tuname) {   if ($tuname) {
     if (&Apache::lonnet::del('resourcedata',[$tkey],$tudom,$tuname) eq 'ok') {      if (&Apache::lonnet::del('resourcedata',[$tkey],$tudom,$tuname) eq 'ok') {
       &log_parmset({$tkey=>''},1,$tuname,$tudom);
  $r->print('<br />'.&mt('Deleted parameter for').' '.&Apache::loncommon::plainname($tuname,$tudom));   $r->print('<br />'.&mt('Deleted parameter for').' '.&Apache::loncommon::plainname($tuname,$tudom));
     } else {      } else {
  $r->print('<h2><font color="red">'.   $r->print('<h2><font color="red">'.
Line 2451  sub storedata { Line 2456  sub storedata {
  if (&Apache::lonnet::put('resourcedata',{$tkey=>$data,   if (&Apache::lonnet::put('resourcedata',{$tkey=>$data,
  $tkey.'.type' => $typeof},   $tkey.'.type' => $typeof},
  $tudom,$tuname) eq 'ok') {   $tudom,$tuname) eq 'ok') {
       &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('Stored modified date for').' '.&Apache::loncommon::plainname($tuname,$tudom));
  } else {   } else {
     $r->print('<h2><font color="red">'.      $r->print('<h2><font color="red">'.
Line 2471  sub storedata { Line 2477  sub storedata {
     my $putentries=$#newdatakeys+1;      my $putentries=$#newdatakeys+1;
     if ($delentries) {      if ($delentries) {
  if (&Apache::lonnet::del('resourcedata',\@deldata,$dom,$crs) eq 'ok') {   if (&Apache::lonnet::del('resourcedata',\@deldata,$dom,$crs) eq 'ok') {
       my %loghash=map { $_ => '' } @deldata;
       &log_parmset(\%loghash,1);
     $r->print('<h2>'.&mt('Deleted [_1] parameter(s)</h2>',$delentries));      $r->print('<h2>'.&mt('Deleted [_1] parameter(s)</h2>',$delentries));
  } else {   } else {
     $r->print('<h2><font color="red">'.      $r->print('<h2><font color="red">'.
Line 2480  sub storedata { Line 2488  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);
     $r->print('<h3>'.&mt('Stored [_1] parameter(s)',$putentries/2).'</h3>');      $r->print('<h3>'.&mt('Stored [_1] parameter(s)',$putentries/2).'</h3>');
  } else {   } else {
     $r->print('<h2><font color="red">'.      $r->print('<h2><font color="red">'.
Line 3044  ENDMAINFORMHEAD Line 3053  ENDMAINFORMHEAD
             action => 'setdefaults',              action => 'setdefaults',
             permission => $parm_permission,              permission => $parm_permission,
             },                        },          
   { text => 'Parameter Change Log and Course Blog Posting',    { text => 'Parameter Change Log and Course Blog Posting/User Notification',
             action => 'parameterchangelog',              action => 'parameterchangelog',
             permission => $parm_permission,              permission => $parm_permission,
             },              },
Line 3314  ENDYESNO Line 3323  ENDYESNO
     return;      return;
 }  }
   
 sub parmchangelog {  sub components {
       my ($key,$uname,$udom,$exeuser,$exedomain)=@_;
       my $typeflag=0;
       if ($key=~/\.type$/) {
    $key=~s/\.type$//;
           $typeflag=1;
       }
       my $issection;
       my ($middle,$part,$name)=($key=~/^$env{'request.course.id'}\.(?:(.+)\.)*([\w\s]+)\.(\w+)$/);
       my $section=&mt('All Students');
       if ($middle=~/^\[(.*)\]/) {
    $issection=$1;
    $section=&mt('Group/Section').': '.$issection;
    $middle=~s/^\[(.*)\]//;
       }
       $middle=~s/\.+$//;
       $middle=~s/^\.+//;
       if ($uname) {
    $section=&mt('User').": ".&Apache::loncommon::plainname($uname,$udom);
    $issection='';
       }
       my $realm='<font color="red">'.&mt('All Resources').'</font>';
       if ($middle=~/^(.+)\_\_\_\(all\)$/) {
    $realm='<font color="green">'.&mt('Folder/Map').': '.&Apache::lonnet::gettitle($1).' <br /><font color="#aaaaaa" size="-2">('.$1.')</font></font>';
       } elsif ($middle) {
    my ($map,$id,$url)=&Apache::lonnet::decode_symb($middle);
    $realm='<font color="orange">'.&mt('Resource').': '.&Apache::lonnet::gettitle($middle).' <br /><font color="#aaaaaa" size="-2">('.$url.' in '.$map.' id: '.$id.')</font></font>';
       }
       my $what=$part.'.'.$name;
       return ($realm,$section,$name,$part,$typeflag,
       $what,$middle,$uname,$udom,$issection);
   }
   sub standard_parameter_names {
       my ($name)=@_;
       my %standard_parms=&Apache::lonlocal::texthash('duedate' => 'Due Date',
      'answerdate' => 'Answer Date',
      'opendate' => 'Open Date',
      'maxtries' => 'Max. Number of Tries',
      'weight' => 'Weight',
      'date_start' => 'Starting Date',
      'date_end' => 'Ending Date');
       if ($standard_parms{$name}) {
    return $standard_parms{$name}; 
       } else { 
    return $name; 
       }
   }
   
   sub parm_change_log {
     my ($r)=@_;      my ($r)=@_;
     &startpage($r);      &startpage($r);
       my %parmlog=&Apache::lonnet::dump('nohist_parameterlog',
         $env{'course.'.$env{'request.course.id'}.'.domain'},
         $env{'course.'.$env{'request.course.id'}.'.num'});
       my %exetime=();
       foreach my $key (keys(%parmlog)) {
    if ($key=~/^(.+)\_exe\_time$/) {
       $exetime{$1}=$parmlog{$key};
    }
       }    
       my $courseopt=&Apache::lonnet::get_courseresdata($env{'course.'.$env{'request.course.id'}.'.num'},
        $env{'course.'.$env{'request.course.id'}.'.domain'});
       $r->print('<table border="2">');
       foreach my $id (sort { $exetime{$b}<=>$exetime{$a} } (keys(%exetime))) {
           my @changes=split(/\,/,$parmlog{$id.'_logentry'});
    my $count=$#changes+1;
    my $time =
       &Apache::lonlocal::locallocaltime($parmlog{$id.'_exe_time'});
    my $plainname = 
       &Apache::loncommon::plainname($parmlog{$id.'_exe_uname'},
     $parmlog{$id.'_exe_udom'});
    my $about_me_link = 
       &Apache::loncommon::aboutmewrapper($plainname,
          $parmlog{$id.'_exe_uname'},
          $parmlog{$id.'_exe_udom'});
   
    my $send_msg_link;
    if ((($parmlog{$id.'_exe_uname'} ne $env{'user.name'}) 
        || ($parmlog{$id.'_exe_udom'} ne $env{'user.domain'}))) {
       my $send_msg_link ='<br />'.
    &Apache::loncommon::messagewrapper(&mt('Send message'),
      $parmlog{$id.'_exe_uname'},
      $parmlog{$id.'_exe_udom'});
    }
    $r->print('<tr><td rowspan="'.$count.'">'.$time.'</td>
                          <td rowspan="'.$count.'">'.$about_me_link.
     '<br /><tt>'.$parmlog{$id.'_exe_uname'}.
             ':'.$parmlog{$id.'_exe_udom'}.'</tt>'.
     $send_msg_link.'</td>');
    my $makenewrow=0;
    my %istype=();
    foreach my $changed (sort @changes) {
               my ($key,$value)=split(/\=\>/,&Apache::lonnet::unescape($changed));
               my ($realm,$section,$parmname,$part,$typeflag,$what,$middle,$uname,$udom,$issection)=
    &components($key,$parmlog{$id.'_uname'},$parmlog{$id.'_udom'});
       if ($typeflag) { $istype{$parmname}=$value; }
       if ($makenewrow) { $r->print('<tr>'); } else { $makenewrow=1; }
       $r->print('<td>'.$realm.'</td><td>'.$section.'</td><td>'.
         &standard_parameter_names($parmname).'</td><td>'.
         ($part?&mt('Part: [_1]',$part):&mt('All Parts')).'</td><td>');
       my $stillactive=0;
       if ($parmlog{$id.'_deleteflag'}) {
    $r->print(&mt('Deleted'));
       } else {
    if ($typeflag) {
       $r->print(&mt('Type: [_1]',&standard_parameter_names($value)));
    } else {
       my ($level,@all)=&parmval_by_symb($what,$middle,&Apache::lonnet::metadata($middle,$what),
         $uname,$udom,$issection,$issection,$courseopt);
       if (&isdateparm($istype{$parmname})) {
    $r->print(&Apache::lonlocal::locallocaltime($value));
       } else {
    $r->print($value);
       }
       if ($value ne $all[$level]) {
    $r->print('<br /><font color="red">'.&mt('Not active anymore').'</font>');
       } else {
    $stillactive=1;
       }
    }
       }
       $r->print('</td>');
       if ($stillactive) {
    if (($uname) && ($udom)) {
       $r->print('<td>Notify Link</td>');
    } else {
       $r->print('<td>Blog Link</td>');
    }
       } else {
    $r->print('<td>&nbsp;</td>');
       }
       $r->print('</tr>');
    }
       }
       $r->print('</table>');
     $r->print(&Apache::loncommon::end_page());      $r->print(&Apache::loncommon::end_page());
 }  }
   
Line 3414  sub handler { Line 3555  sub handler {
     &assessparms($r);      &assessparms($r);
         } elsif ($env{'form.action'} eq 'parameterchangelog' && $parm_permission) {          } elsif ($env{'form.action'} eq 'parameterchangelog' && $parm_permission) {
             &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=settable',              &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=settable',
     text=>"Parameter Change Log and Course Blog Posting"});      text=>"Parameter Change Log"});
     &parmchangelog($r);      &parm_change_log($r);
  }          }       
     } else {      } else {
 # ----------------------------- Not in a course, or not allowed to modify parms  # ----------------------------- Not in a course, or not allowed to modify parms

Removed from v.1.284  
changed lines
  Added in v.1.292


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