Diff for /loncom/interface/lonparmset.pm between versions 1.188 and 1.199

version 1.188, 2005/03/17 22:34:24 version 1.199, 2005/06/02 13:34:14
Line 62  use GDBM_File; Line 62  use GDBM_File;
 use Apache::lonhomework;  use Apache::lonhomework;
 use Apache::lonxml;  use Apache::lonxml;
 use Apache::lonlocal;  use Apache::lonlocal;
   use Apache::lonnavmaps;
   
   # --- Caches local to lonparmset
   
   my $courseoptid;
 my %courseopt;  my %courseopt;
   my $useroptid;
 my %useropt;  my %useropt;
   my $parmhashid;
 my %parmhash;  my %parmhash;
   
   # --- end local caches
   
   #
   # FIXME: get rid of items below
   #
 my @ids;  my @ids;
 my %symbp;  my %symbp;
 my %mapp;  my %mapp;
 my %typep;  my %typep;
 my %keyp;  my %keyp;
   my %uris;
 my %maptitles;  my %maptitles;
   
 ##################################################  ##################################################
Line 108  Returns:  A list, the first item is the Line 119  Returns:  A list, the first item is the
 ##################################################  ##################################################
 sub parmval {  sub parmval {
     my ($what,$id,$def,$uname,$udom,$csec)=@_;      my ($what,$id,$def,$uname,$udom,$csec)=@_;
   # load caches
       &cacheparmhash();
       &cacheuseropt($uname,$udom);
       &cachecourseopt();
   
     my $result='';      my $result='';
     my @outpar=();      my @outpar=();
 # ----------------------------------------------------- Cascading lookup scheme  # ----------------------------------------------------- Cascading lookup scheme
Line 115  sub parmval { Line 131  sub parmval {
     my $symbparm=$symbp{$id}.'.'.$what;      my $symbparm=$symbp{$id}.'.'.$what;
     my $mapparm=$mapp{$id}.'___(all).'.$what;      my $mapparm=$mapp{$id}.'___(all).'.$what;
   
     my $seclevel=$ENV{'request.course.id'}.'.['.$csec.'].'.$what;      my $seclevel=$env{'request.course.id'}.'.['.$csec.'].'.$what;
     my $seclevelr=$ENV{'request.course.id'}.'.['.$csec.'].'.$symbparm;      my $seclevelr=$env{'request.course.id'}.'.['.$csec.'].'.$symbparm;
     my $seclevelm=$ENV{'request.course.id'}.'.['.$csec.'].'.$mapparm;      my $seclevelm=$env{'request.course.id'}.'.['.$csec.'].'.$mapparm;
   
     my $courselevel=$ENV{'request.course.id'}.'.'.$what;      my $courselevel=$env{'request.course.id'}.'.'.$what;
     my $courselevelr=$ENV{'request.course.id'}.'.'.$symbparm;      my $courselevelr=$env{'request.course.id'}.'.'.$symbparm;
     my $courselevelm=$ENV{'request.course.id'}.'.'.$mapparm;      my $courselevelm=$env{'request.course.id'}.'.'.$mapparm;
   
   
   
Line 189  sub parmval { Line 205  sub parmval {
     return ($result,@outpar);      return ($result,@outpar);
 }  }
   
   sub resetparmhash {
       $parmhashid='';
   }
   
   sub cacheparmhash {
       if ($parmhashid eq  $env{'request.course.fn'}) { return; }
       my %parmhashfile;
       if (tie(%parmhashfile,'GDBM_File',
         $env{'request.course.fn'}.'_parms.db',&GDBM_READER(),0640)) {
    %parmhash=%parmhashfile;
    untie %parmhashfile;
    $parmhashid=$env{'request.course.fn'};
       }
   }
   
   sub resetuseropt {
       $useroptid='';
   }
   
   sub cacheuseropt {
       my ($uname,$udom)=@_;
       unless ($uname) { return; }
       if ($useroptid eq $uname.'@'.$udom) { return; }
       %useropt=&Apache::lonnet::dump('resourcedata',$udom,$uname);
       $useroptid=$uname.'@'.$udom;
   }
   
   sub resetcourseopt {
       $courseoptid='';
   }
   
   sub cachecourseopt {
       if ($courseoptid eq $env{'request.course.id'}) { return; };
       %courseopt = &Apache::lonnet::dump
           ('resourcedata',
            $env{'course.'.$env{'request.course.id'}.'.domain'},
            $env{'course.'.$env{'request.course.id'}.'.num'});
       $courseoptid=$env{'request.course.id'};
   }
   
 ##################################################  ##################################################
 ##################################################  ##################################################
 #  #
 # Store a parameter  # Store a parameter by ID
 #  #
 # Takes  # Takes
 # - resource id  # - resource id
Line 206  sub parmval { Line 261  sub parmval {
   
 sub storeparm {  sub storeparm {
     my ($sresid,$spnam,$snum,$nval,$ntype,$uname,$udom,$csec)=@_;      my ($sresid,$spnam,$snum,$nval,$ntype,$uname,$udom,$csec)=@_;
     $spnam=~s/\_([^\_]+)$/\.$1/;      my $navmap = Apache::lonnavmaps::navmap->new();
       if ($sresid=~/\./) {
    my $resource=$navmap->getById($sresid);
    &storeparm_by_symb($resource->symb(),$spnam,$snum,$nval,$ntype,$uname,$udom,$csec);
       } else {
           my $resource=$navmap->getByMapPc($sresid);
    &storeparm_by_symb(&Apache::lonnet::declutter($resource->src()),$spnam,$snum,$nval,$ntype,$uname,$udom,$csec);
       }
   }
   
   #
   # Store a parameter by symb
   #
   # Takes
   # - symb
   # - name of parameter
   # - level
   # - new value
   # - new type
   # - username
   # - userdomain
   
   sub storeparm_by_symb {
   # ---------------------------------------------------------- Get symb, map, etc
       my ($symb,$spnam,$snum,$nval,$ntype,$uname,$udom,$csec)=@_;
 # ---------------------------------------------------------- Construct prefixes  # ---------------------------------------------------------- Construct prefixes
       $spnam=~s/\_([^\_]+)$/\.$1/;
       my $map=(&Apache::lonnet::decode_symb($symb))[0];    
       my $symbparm=$symb.'.'.$spnam;
       my $mapparm=$map.'___(all).'.$spnam;
   
       my $seclevel=$env{'request.course.id'}.'.['.$csec.'].'.$spnam;
       my $seclevelr=$env{'request.course.id'}.'.['.$csec.'].'.$symbparm;
       my $seclevelm=$env{'request.course.id'}.'.['.$csec.'].'.$mapparm;
           
     my $symbparm=$symbp{$sresid}.'.'.$spnam;      my $courselevel=$env{'request.course.id'}.'.'.$spnam;
     my $mapparm=$mapp{$sresid}.'___(all).'.$spnam;      my $courselevelr=$env{'request.course.id'}.'.'.$symbparm;
           my $courselevelm=$env{'request.course.id'}.'.'.$mapparm;
     my $seclevel=$ENV{'request.course.id'}.'.['.$csec.'].'.$spnam;  
     my $seclevelr=$ENV{'request.course.id'}.'.['.$csec.'].'.$symbparm;  
     my $seclevelm=$ENV{'request.course.id'}.'.['.$csec.'].'.$mapparm;  
       
     my $courselevel=$ENV{'request.course.id'}.'.'.$spnam;  
     my $courselevelr=$ENV{'request.course.id'}.'.'.$symbparm;  
     my $courselevelm=$ENV{'request.course.id'}.'.'.$mapparm;  
           
     my $storeunder='';      my $storeunder='';
     if (($snum==11) || ($snum==3)) { $storeunder=$courselevel; }      if (($snum==11) || ($snum==3)) { $storeunder=$courselevel; }
Line 239  sub storeparm { Line 319  sub storeparm {
 # Expire sheets  # Expire sheets
  &Apache::lonnet::expirespread('','','studentcalc');   &Apache::lonnet::expirespread('','','studentcalc');
  if (($snum==7) || ($snum==4)) {   if (($snum==7) || ($snum==4)) {
     &Apache::lonnet::expirespread('','','assesscalc',$symbp{$sresid});      &Apache::lonnet::expirespread('','','assesscalc',$symb);
  } elsif (($snum==8) || ($snum==5)) {   } elsif (($snum==8) || ($snum==5)) {
     &Apache::lonnet::expirespread('','','assesscalc',$mapp{$sresid});      &Apache::lonnet::expirespread('','','assesscalc',$map);
  } else {   } else {
     &Apache::lonnet::expirespread('','','assesscalc');      &Apache::lonnet::expirespread('','','assesscalc');
  }   }
    &resetcourseopt();
 # Store parameter  # Store parameter
  if ($delete) {   if ($delete) {
     $reply=&Apache::lonnet::del      $reply=&Apache::lonnet::del
  ('resourcedata',[keys(%storecontent)],   ('resourcedata',[keys(%storecontent)],
  $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'});
  } else {   } else {
     $reply=&Apache::lonnet::cput      $reply=&Apache::lonnet::cput
  ('resourcedata',\%storecontent,   ('resourcedata',\%storecontent,
  $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'});
  }   }
     } else {      } else {
 # ------------------------------------------------------------------ Store User  # ------------------------------------------------------------------ Store User
Line 264  sub storeparm { Line 345  sub storeparm {
  &Apache::lonnet::expirespread($uname,$udom,'studentcalc');   &Apache::lonnet::expirespread($uname,$udom,'studentcalc');
  if ($snum==1) {   if ($snum==1) {
     &Apache::lonnet::expirespread      &Apache::lonnet::expirespread
  ($uname,$udom,'assesscalc',$symbp{$sresid});   ($uname,$udom,'assesscalc',$symb);
  } elsif ($snum==2) {   } elsif ($snum==2) {
     &Apache::lonnet::expirespread      &Apache::lonnet::expirespread
  ($uname,$udom,'assesscalc',$mapp{$sresid});   ($uname,$udom,'assesscalc',$map);
  } else {   } else {
     &Apache::lonnet::expirespread($uname,$udom,'assesscalc');      &Apache::lonnet::expirespread($uname,$udom,'assesscalc');
  }   }
    &resetuseropt();
 # Store parameter  # Store parameter
  if ($delete) {   if ($delete) {
     $reply=&Apache::lonnet::del      $reply=&Apache::lonnet::del
Line 279  sub storeparm { Line 361  sub storeparm {
     $reply=&Apache::lonnet::cput      $reply=&Apache::lonnet::cput
  ('resourcedata',\%storecontent,$udom,$uname);   ('resourcedata',\%storecontent,$udom,$uname);
  }   }
    &Apache::lonnet::devalidateuserresdata($uname,$udom);
     }      }
           
     if ($reply=~/^error\:(.*)/) {      if ($reply=~/^error\:(.*)/) {
Line 367  sub plink { Line 450  sub plink {
     my $winvalue=$value;      my $winvalue=$value;
     unless ($winvalue) {      unless ($winvalue) {
  if ($type=~/^date/) {   if ($type=~/^date/) {
             $winvalue=$ENV{'form.recent_'.$type};              $winvalue=$env{'form.recent_'.$type};
         } else {          } else {
             $winvalue=$ENV{'form.recent_'.(split(/\_/,$type))[0]};              $winvalue=$env{'form.recent_'.(split(/\_/,$type))[0]};
         }          }
     }      }
     return       return 
Line 384  sub startpage { Line 467  sub startpage {
   
     my $bodytag=&Apache::loncommon::bodytag('Set/Modify Course Parameters','',      my $bodytag=&Apache::loncommon::bodytag('Set/Modify Course Parameters','',
                                             'onUnload="pclose()"');                                              'onUnload="pclose()"');
       my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs(undef,'Table');
     my $chooseopt=&Apache::loncommon::select_dom_form($udom,'udom').' '.      my $chooseopt=&Apache::loncommon::select_dom_form($udom,'udom').' '.
         &Apache::loncommon::selectstudent_link('parmform','uname','udom');          &Apache::loncommon::selectstudent_link('parmform','uname','udom');
     my $selscript=&Apache::loncommon::studentbrowser_javascript();      my $selscript=&Apache::loncommon::studentbrowser_javascript();
Line 453  $html Line 537  $html
 $selscript  $selscript
 </head>  </head>
 $bodytag  $bodytag
   $breadcrumbs
 $overallhelp  $overallhelp
 ENDHEAD  ENDHEAD
   
Line 474  $assessparmhelp Line 559  $assessparmhelp
 </form>  </form>
 <hr />  <hr />
 ENDHEAD2  ENDHEAD2
 }      }
     $r->print(<<ENDHEAD3);      my %sectionhash=();
 <form method="post" action="/adm/parmset" name="parmform">      my $sections='';
       if (&Apache::loncommon::get_sections(
                    $env{'course.'.$env{'request.course.id'}.'.domain'},
                    $env{'course.'.$env{'request.course.id'}.'.num'},
    \%sectionhash)) {
           $sections=$lt{'sg'}.': <select name="csec">';
    foreach ('',sort keys %sectionhash) {
       $sections.='<option value="'.$_.'"'.
    ($_ eq $csec?'selected="selected"':'').'>'.$_.'</option>';
           }
           $sections.='</select>';
        }
        $r->print(<<ENDHEAD3);
   <form method="post" action="/adm/parmset?action=settable" name="parmform">
 <h4>$lt{'captm'}</h4>  <h4>$lt{'captm'}</h4>
 ENDHEAD3  ENDHEAD3
   
Line 485  ENDHEAD3 Line 583  ENDHEAD3
     } else {      } else {
  $r->print(<<ENDHEAD);   $r->print(<<ENDHEAD);
 <b>  <b>
 $lt{'sg'}:  $sections
 <input type="text" value="$csec" size="6" name="csec" />  
 <br />  <br />
 $lt{'fu'}   $lt{'fu'} 
 <input type="text" value="$uname" size="12" name="uname" />  <input type="text" value="$uname" size="12" name="uname" />
Line 660  Input: See list below: Line 757  Input: See list below:
 =cut  =cut
   
 sub extractResourceInformation {  sub extractResourceInformation {
     my $bighash = shift;  
     my $ids = shift;      my $ids = shift;
     my $typep = shift;      my $typep = shift;
     my $keyp = shift;      my $keyp = shift;
Line 673  sub extractResourceInformation { Line 769  sub extractResourceInformation {
     my $mapp = shift;      my $mapp = shift;
     my $symbp = shift;      my $symbp = shift;
     my $maptitles=shift;      my $maptitles=shift;
       my $uris=shift;
   
   
     foreach (keys %$bighash) {      my $navmap = Apache::lonnavmaps::navmap->new();
  if ($_=~/^src\_(\d+)\.(\d+)$/) {      my @allres=$navmap->retrieveResources(undef,undef,1,undef,1);
     # there are no resources in the 0 level      foreach my $resource (@allres) {
     if ($1 eq '0') { next; }   my $id=$resource->id();
     my $mapid=$1;          my ($mapid,$resid)=split(/\./,$id);
     my $resid=$2;   if ($mapid eq '0') { next; }
     my $id=$mapid.'.'.$resid;   $$ids[$#$ids+1]=$id;
     my $srcf=$$bighash{$_};   my $srcf=$resource->src();
     if (1) {   $srcf=~/\.(\w+)$/;
  $srcf=~/\.(\w+)$/;   $$typep{$id}=$1;
  $$ids[$#$ids+1]=$id;   $$keyp{$id}='';
  $$typep{$id}=$1;          $$uris{$id}=$srcf;
  $$keyp{$id}='';   foreach (split(/\,/,&Apache::lonnet::metadata($srcf,'allpossiblekeys'))) {
  foreach (split(/\,/,&Apache::lonnet::metadata($srcf,'allpossiblekeys'))) {      if ($_=~/^parameter\_(.*)/) {
   if ($_=~/^parameter\_(.*)/) {   my $key=$_;
                     my $key=$_;   my $allkey=$1;
                     my $allkey=$1;   $allkey=~s/\_/\./g;
                     $allkey=~s/\_/\./g;   if (&Apache::lonnet::metadata($srcf,$key.'.hidden') eq 
     if (&Apache::lonnet::metadata($srcf,$key.'.hidden') eq       'parm') {
  'parm') {      next; #hide hidden things
  next; #hide hidden things   }
     }   my $display= &Apache::lonnet::metadata($srcf,$key.'.display');
                     my $display= &Apache::lonnet::metadata($srcf,$key.'.display');   my $name=&Apache::lonnet::metadata($srcf,$key.'.name');
                     my $name=&Apache::lonnet::metadata($srcf,$key.'.name');   my $part= &Apache::lonnet::metadata($srcf,$key.'.part');
                     my $part= &Apache::lonnet::metadata($srcf,$key.'.part');   my $parmdis = $display;
                     my $parmdis = $display;   $parmdis =~ s|(\[Part.*)$||g;
                     $parmdis =~ s|(\[Part.*$)||g;   my $partkey = $part;
                     my $partkey = $part;   $partkey =~ tr|_|.|;
                     $partkey =~ tr|_|.|;   $$allparms{$name} = $parmdis;
                     $$allparms{$name} = $parmdis;   $$allparts{$part} = "[Part $part]";
                     $$allparts{$part} = "[Part $part]";   $$allkeys{$allkey}=$display;
                     $$allkeys{$allkey}=$display;   if ($allkey eq $fcat) {
                     if ($allkey eq $fcat) {      $$defp{$id}= &Apache::lonnet::metadata($srcf,$key);
         $$defp{$id}= &Apache::lonnet::metadata($srcf,$key);  
     }  
     if ($$keyp{$id}) {  
         $$keyp{$id}.=','.$key;  
     } else {  
         $$keyp{$id}=$key;  
     }  
   }  
  }   }
  $$mapp{$id}=   if ($$keyp{$id}) {
     &Apache::lonnet::declutter($$bighash{'map_id_'.$mapid});      $$keyp{$id}.=','.$key;
                 $$mapp{$mapid}=$$mapp{$id};  
  $$allmaps{$mapid}=$$mapp{$id};  
  if ($mapid eq '1') {  
     $$maptitles{$mapid}='Main Course Documents';  
  } else {   } else {
     $$maptitles{$mapid}=&Apache::lonnet::gettitle(&Apache::lonnet::clutter($$mapp{$id}));      $$keyp{$id}=$key;
  }   }
  $$maptitles{$$mapp{$id}}=$$maptitles{$mapid};  
  $$symbp{$id}=&Apache::lonnet::encode_symb($$mapp{$id},$resid,$srcf);  
                 $$symbp{$mapid}=$$mapp{$id}.'___(all)';  
     }      }
  }   }
    $$mapp{$id}=
       &Apache::lonnet::declutter($resource->enclosing_map_src());
    $$mapp{$mapid}=$$mapp{$id};
    $$allmaps{$mapid}=$$mapp{$id};
    if ($mapid eq '1') {
       $$maptitles{$mapid}='Main Course Documents';
    } else {
       $$maptitles{$mapid}=&Apache::lonnet::gettitle(&Apache::lonnet::clutter($$mapp{$id}));
    }
    $$maptitles{$$mapp{$id}}=$$maptitles{$mapid};
    $$symbp{$id}=&Apache::lonnet::encode_symb($$mapp{$id},$resid,$srcf);
    $$symbp{$mapid}=$$mapp{$id}.'___(all)';
     }      }
 }  }
   
Line 776  sub assessparms { Line 871  sub assessparms {
     my $uhome;      my $uhome;
     my $csec;      my $csec;
     
     my $coursename=$ENV{'course.'.$ENV{'request.course.id'}.'.description'};      my $coursename=$env{'course.'.$env{'request.course.id'}.'.description'};
   
     $alllevs{'Resource Level'}='full';      $alllevs{'Resource Level'}='full';
     $alllevs{'Map Level'}='map';      $alllevs{'Map Level'}='map';
Line 786  sub assessparms { Line 881  sub assessparms {
     my %allparts;      my %allparts;
   
     my %defp;      my %defp;
     %courseopt=();  
     %useropt=();  
     my %bighash=();  
   
     @ids=();      @ids=();
     %symbp=();      %symbp=();
Line 796  sub assessparms { Line 888  sub assessparms {
   
     my $message='';      my $message='';
   
     $csec=$ENV{'form.csec'};      $csec=$env{'form.csec'};
   
     if      ($udom=$ENV{'form.udom'}) {      if      ($udom=$env{'form.udom'}) {
     } elsif ($udom=$ENV{'request.role.domain'}) {      } elsif ($udom=$env{'request.role.domain'}) {
     } elsif ($udom=$ENV{'user.domain'}) {      } elsif ($udom=$env{'user.domain'}) {
     } else {      } else {
  $udom=$r->dir_config('lonDefDomain');   $udom=$r->dir_config('lonDefDomain');
     }      }
   
     my @pscat=&Apache::loncommon::get_env_multiple('form.pscat');      my @pscat=&Apache::loncommon::get_env_multiple('form.pscat');
     my $pschp=$ENV{'form.pschp'};      my $pschp=$env{'form.pschp'};
     my @psprt=&Apache::loncommon::get_env_multiple('form.psprt');      my @psprt=&Apache::loncommon::get_env_multiple('form.psprt');
     if (!@psprt) { $psprt[0]='0'; }      if (!@psprt) { $psprt[0]='0'; }
     my $showoptions=$ENV{'form.showoptions'};      my $showoptions=$env{'form.showoptions'};
   
     my $pssymb='';      my $pssymb='';
     my $parmlev='';      my $parmlev='';
     my $trimheader='';      my $trimheader='';
     my $prevvisit=$ENV{'form.prevvisit'};      my $prevvisit=$env{'form.prevvisit'};
     
     unless ($ENV{'form.parmlev'}) {      unless ($env{'form.parmlev'}) {
         $parmlev = 'map';          $parmlev = 'map';
     } else {      } else {
         $parmlev = $ENV{'form.parmlev'};          $parmlev = $env{'form.parmlev'};
     }      }
   
 # ----------------------------------------------- Was this started from grades?  # ----------------------------------------------- Was this started from grades?
   
     if (($ENV{'form.command'} eq 'set') && ($ENV{'form.url'})      if (($env{'form.command'} eq 'set') && ($env{'form.url'})
  && (!$ENV{'form.dis'})) {   && (!$env{'form.dis'})) {
  my $url=$ENV{'form.url'};   my $url=$env{'form.url'};
  $url=~s-^http://($ENV{'SERVER_NAME'}|$ENV{'HTTP_HOST'})--;   $url=~s-^http://($ENV{'SERVER_NAME'}|$ENV{'HTTP_HOST'})--;
  $pssymb=&Apache::lonnet::symbread($url);   $pssymb=&Apache::lonnet::symbread($url);
  if (!@pscat) { @pscat=('all'); }   if (!@pscat) { @pscat=('all'); }
  $pschp='';   $pschp='';
         $parmlev = 'full';          $parmlev = 'full';
         $trimheader='yes';          $trimheader='yes';
     } elsif ($ENV{'form.symb'}) {      } elsif ($env{'form.symb'}) {
  $pssymb=$ENV{'form.symb'};   $pssymb=$env{'form.symb'};
  if (!@pscat) { @pscat=('all'); }   if (!@pscat) { @pscat=('all'); }
  $pschp='';   $pschp='';
         $parmlev = 'full';          $parmlev = 'full';
         $trimheader='yes';          $trimheader='yes';
     } else {      } else {
  $ENV{'form.url'}='';   $env{'form.url'}='';
     }      }
   
     my $id=$ENV{'form.id'};      my $id=$env{'form.id'};
     if (($id) && ($udom)) {      if (($id) && ($udom)) {
  $uname=(&Apache::lonnet::idget($udom,$id))[1];   $uname=(&Apache::lonnet::idget($udom,$id))[1];
  if ($uname) {   if ($uname) {
Line 854  sub assessparms { Line 946  sub assessparms {
  &mt('at domain')." '$udom'</font>";   &mt('at domain')." '$udom'</font>";
  }   }
     } else {      } else {
  $uname=$ENV{'form.uname'};   $uname=$env{'form.uname'};
     }      }
     unless ($udom) { $uname=''; }      unless ($udom) { $uname=''; }
     $uhome='';      $uhome='';
Line 867  sub assessparms { Line 959  sub assessparms {
     $uname='';      $uname='';
         } else {          } else {
     $csec=&Apache::lonnet::getsection($udom,$uname,      $csec=&Apache::lonnet::getsection($udom,$uname,
       $ENV{'request.course.id'});        $env{'request.course.id'});
     if ($csec eq '-1') {      if ($csec eq '-1') {
  $message="<font color=red>".   $message="<font color=red>".
     &mt("User")." '$uname' ".&mt("at domain")." '$udom' ".      &mt("User")." '$uname' ".&mt("at domain")." '$udom' ".
     &mt("not in this course")."</font>";      &mt("not in this course")."</font>";
  $uname='';   $uname='';
  $csec=$ENV{'form.csec'};   $csec=$env{'form.csec'};
     } else {      } else {
  my %name=&Apache::lonnet::userenvironment($udom,$uname,   my %name=&Apache::lonnet::userenvironment($udom,$uname,
       ('firstname','middlename','lastname','generation','id'));        ('firstname','middlename','lastname','generation','id'));
Line 887  sub assessparms { Line 979  sub assessparms {
   
     unless ($csec) { $csec=''; }      unless ($csec) { $csec=''; }
   
     my $fcat=$ENV{'form.fcat'};      my $fcat=$env{'form.fcat'};
     unless ($fcat) { $fcat=''; }      unless ($fcat) { $fcat=''; }
   
 # ------------------------------------------------------------------- Tie hashs  
     if (!(tie(%bighash,'GDBM_File',$ENV{'request.course.fn'}.'.db',  
       &GDBM_READER(),0640))) {  
  $r->print("Unable to access course data. (File $ENV{'request.course.fn'}.db not tieable)");  
  return ;  
     }  
     if (!(tie(%parmhash,'GDBM_File',  
       $ENV{'request.course.fn'}.'_parms.db',&GDBM_READER(),0640))) {  
  $r->print("Unable to access parameter data. (File $ENV{'request.course.fn'}_parms.db not tieable)");  
  return ;  
     }  
   
 # --------------------------------------------------------- Get all assessments  # --------------------------------------------------------- Get all assessments
     &extractResourceInformation(\%bighash, \@ids, \%typep,\%keyp, \%allparms, \%allparts, \%allkeys, \%allmaps, $fcat, \%defp, \%mapp, \%symbp,\%maptitles);      &extractResourceInformation(\@ids, \%typep,\%keyp, \%allparms, \%allparts, \%allkeys, \%allmaps, $fcat, \%defp, \%mapp, \%symbp,\%maptitles,\%uris);
   
     $mapp{'0.0'} = '';      $mapp{'0.0'} = '';
     $symbp{'0.0'} = '';      $symbp{'0.0'} = '';
   
 # ---------------------------------------------------------- Anything to store?  # ---------------------------------------------------------- Anything to store?
     if ($ENV{'form.pres_marker'}) {      if ($env{'form.pres_marker'}) {
  $message.=&storeparm(split(/\&/,$ENV{'form.pres_marker'}),   $message.=&storeparm(split(/\&/,$env{'form.pres_marker'}),
      $ENV{'form.pres_value'},       $env{'form.pres_value'},
      $ENV{'form.pres_type'},       $env{'form.pres_type'},
                              $uname,$udom,$csec);                               $uname,$udom,$csec);
 # ---------------------------------------------------------------- Done storing  # ---------------------------------------------------------------- Done storing
  $message.='<h3>'.&mt('Changes can take up to 10 minutes before being active for all students.').&Apache::loncommon::help_open_topic('Caching').'</h3>';   $message.='<h3>'.&mt('Changes can take up to 10 minutes before being active for all students.').&Apache::loncommon::help_open_topic('Caching').'</h3>';
     }      }
 # --------------------------------------------- Devalidate cache for this child  # --------------------------------------------- Devalidate cache for this child
     &Apache::lonnet::devalidatecourseresdata(      &Apache::lonnet::devalidatecourseresdata(
                  $ENV{'course.'.$ENV{'request.course.id'}.'.num'},                   $env{'course.'.$env{'request.course.id'}.'.num'},
                  $ENV{'course.'.$ENV{'request.course.id'}.'.domain'});                   $env{'course.'.$env{'request.course.id'}.'.domain'});
     &Apache::lonnet::clear_EXT_cache_status();      #&Apache::lonnet::clear_EXT_cache_status();
 # -------------------------------------------------------------- Get coursedata  
     %courseopt = &Apache::lonnet::dump  
         ('resourcedata',  
          $ENV{'course.'.$ENV{'request.course.id'}.'.domain'},  
          $ENV{'course.'.$ENV{'request.course.id'}.'.num'});  
 # --------------------------------------------------- Get userdata (if present)  
     if ($uname) {  
         %useropt=&Apache::lonnet::dump('resourcedata',$udom,$uname);  
     }  
   
 # ------------------------------------------------------------------- Sort this  # ------------------------------------------------------------------- Sort this
   
Line 953  sub assessparms { Line 1024  sub assessparms {
     my $have_assesments=1;      my $have_assesments=1;
     if (scalar(keys(%allkeys)) eq 0) { $have_assesments=0; }      if (scalar(keys(%allkeys)) eq 0) { $have_assesments=0; }
   
       $trimheader = 'yes';
     &startpage($r,$id,$udom,$csec,$uname,$have_assesments,$trimheader);      &startpage($r,$id,$udom,$csec,$uname,$have_assesments,$trimheader);
   
     if (!$have_assesments) {  #    if ($env{'form.url'}) {
  untie(%bighash);  # $r->print('<input type="hidden" value="'.$env{'form.url'}.
  untie(%parmhash);  
  return '';  
     }  
 #    if ($ENV{'form.url'}) {  
 # $r->print('<input type="hidden" value="'.$ENV{'form.url'}.  
 #  '" name="url"><input type="hidden" name="command" value="set">');  #  '" name="url"><input type="hidden" name="command" value="set">');
 #    }  #    }
     $r->print('<input type="hidden" value="true" name="prevvisit">');      $r->print('<input type="hidden" value="true" name="prevvisit">');
Line 969  sub assessparms { Line 1036  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_'.$_.'">');
     }      }
   
     $r->print('<h2>'.$message.'</h2><table>');      $r->print('<h2>'.$message.'</h2><table>');
Line 1135  sub assessparms { Line 1202  sub assessparms {
     if (($prevvisit) || ($pschp) || ($pssymb)) {      if (($prevvisit) || ($pschp) || ($pssymb)) {
 # ----------------------------------------------------------------- Start Table  # ----------------------------------------------------------------- Start Table
         my @catmarker=map { tr|.|_|; 'parameter_'.$_; } @pscat;          my @catmarker=map { tr|.|_|; 'parameter_'.$_; } @pscat;
         my $csuname=$ENV{'user.name'};          my $csuname=$env{'user.name'};
         my $csudom=$ENV{'user.domain'};          my $csudom=$env{'user.domain'};
   
         if ($parmlev eq 'full' || $parmlev eq 'brief') {          if ($parmlev eq 'full' || $parmlev eq 'brief') {
            my $coursespan=$csec?8:5;             my $coursespan=$csec?8:5;
Line 1178  ENDTABLETWO Line 1245  ENDTABLETWO
            $r->print(<<ENDTABLEHEADFOUR);             $r->print(<<ENDTABLEHEADFOUR);
 </tr><tr><th>$lt{'aut'}</th><th>$lt{'type'}</th>  </tr><tr><th>$lt{'aut'}</th><th>$lt{'type'}</th>
 <th>$lt{'emof'}</th><th>$lt{'part'}</th><th>$lt{'pn'}</th>  <th>$lt{'emof'}</th><th>$lt{'part'}</th><th>$lt{'pn'}</th>
 <th>$lt{'gen'}</th><th>$lt{'femof'}</th>  <th>$lt{'gen'}</th><th>$lt{'foremf'}</th>
 <th>$lt{'def'}</th><th>$lt{'foremf'}</th><th>$lt{'fr'}</th>  <th>$lt{'def'}</th><th>$lt{'femof'}</th><th>$lt{'fr'}</th>
 ENDTABLEHEADFOUR  ENDTABLEHEADFOUR
   
            if ($csec) {             if ($csec) {
Line 1222  ENDTABLEHEADFOUR Line 1289  ENDTABLEHEADFOUR
                     my %display=();                      my %display=();
                     my %type=   ();                      my %type=   ();
                     my %default=();                      my %default=();
                     my $uri=&Apache::lonnet::declutter($bighash{'src_'.$rid});                      my $uri=&Apache::lonnet::declutter($uris{$rid});
   
                     foreach (split(/\,/,$keyp{$rid})) {                      foreach (split(/\,/,$keyp{$rid})) {
                         my $tempkeyp = $_;                          my $tempkeyp = $_;
Line 1321  ENDTABLEHEADFOUR Line 1388  ENDTABLEHEADFOUR
 #                  $r->print("$mapid:$map:   $rid <br /> \n");  #                  $r->print("$mapid:$map:   $rid <br /> \n");
   
                   if ($map eq $mapid) {                    if ($map eq $mapid) {
                     my $uri=&Apache::lonnet::declutter($bighash{'src_'.$rid});                      my $uri=&Apache::lonnet::declutter($uris{$rid});
 #                    $r->print("Keys: $keyp{$rid} <br />\n");  #                    $r->print("Keys: $keyp{$rid} <br />\n");
   
 #--------------------------------------------------------------------  #--------------------------------------------------------------------
Line 1409  ENDMAPONE Line 1476  ENDMAPONE
             foreach (@ids) {              foreach (@ids) {
                 my $rid = $_;                  my $rid = $_;
                   
                 my $uri=&Apache::lonnet::declutter($bighash{'src_'.$rid});                  my $uri=&Apache::lonnet::declutter($uris{$rid});
   
 #--------------------------------------------------------------------  #--------------------------------------------------------------------
 # @catmarker contains list of all possible parameters including part #s  # @catmarker contains list of all possible parameters including part #s
Line 1469  ENDMAPONE Line 1536  ENDMAPONE
         } # end of $parmlev eq general          } # end of $parmlev eq general
     }      }
     $r->print('</form></body></html>');      $r->print('</form></body></html>');
     untie(%bighash);  
     untie(%parmhash);  
 } # end sub assessparms  } # end sub assessparms
   
   
Line 1497  sub crsenv { Line 1562  sub crsenv {
     my $setoutput='';      my $setoutput='';
     my $bodytag=&Apache::loncommon::bodytag(      my $bodytag=&Apache::loncommon::bodytag(
                              'Set Course Environment Parameters');                               'Set Course Environment Parameters');
     my $dom = $ENV{'course.'.$ENV{'request.course.id'}.'.domain'};      my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs(undef,
     my $crs = $ENV{'course.'.$ENV{'request.course.id'}.'.num'};      'Edit Course Environment');
       my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'};
       my $crs = $env{'course.'.$env{'request.course.id'}.'.num'};
   
     #      #
     # Go through list of changes      # Go through list of changes
     foreach (keys %ENV) {      foreach (keys %env) {
         next if ($_!~/^form\.(.+)\_setparmval$/);          next if ($_!~/^form\.(.+)\_setparmval$/);
         my $name  = $1;          my $name  = $1;
         my $value = $ENV{'form.'.$name.'_value'};          my $value = $env{'form.'.$name.'_value'};
         if ($name eq 'newp') {          if ($name eq 'newp') {
             $name = $ENV{'form.newp_name'};              $name = $env{'form.newp_name'};
         }          }
         if ($name eq 'url') {          if ($name eq 'url') {
             $value=~s/^\/res\///;              $value=~s/^\/res\///;
Line 1583  sub crsenv { Line 1650  sub crsenv {
     }      }
 # ------------------------- Re-init course environment entries for this session  # ------------------------- Re-init course environment entries for this session
   
     &Apache::lonnet::coursedescription($ENV{'request.course.id'});      &Apache::lonnet::coursedescription($env{'request.course.id'});
   
 # -------------------------------------------------------- Get parameters again  # -------------------------------------------------------- Get parameters again
   
Line 1779  sub crsenv { Line 1846  sub crsenv {
     my $Set=&mt('Set');      my $Set=&mt('Set');
     my $browse_js=&Apache::loncommon::browser_and_searcher_javascript('parmset');      my $browse_js=&Apache::loncommon::browser_and_searcher_javascript('parmset');
     my $html=&Apache::lonxml::xmlbegin();      my $html=&Apache::lonxml::xmlbegin();
     $r->print(<<ENDENV);      $r->print(<<ENDenv);
 $html  $html
 <head>  <head>
 <script type="text/javascript" language="Javascript" >  <script type="text/javascript" language="Javascript" >
Line 1788  $browse_js Line 1855  $browse_js
 <title>LON-CAPA Course Environment</title>  <title>LON-CAPA Course Environment</title>
 </head>  </head>
 $bodytag  $bodytag
 <form method="post" action="/adm/parmset" name="envform">  $breadcrumbs
   <form method="post" action="/adm/parmset?action=crsenv" name="envform">
 $setoutput  $setoutput
 <p>  <p>
 <table border=2>  <table border=2>
Line 1799  $output Line 1867  $output
 </form>  </form>
 </body>  </body>
 </html>      </html>    
 ENDENV  ENDenv
 }  }
 ##################################################  ##################################################
   
Line 1828  sub overview { Line 1896  sub overview {
     my $r=shift;      my $r=shift;
     my $bodytag=&Apache::loncommon::bodytag(      my $bodytag=&Apache::loncommon::bodytag(
                              'Set/Modify Course Assessment Parameters');                               'Set/Modify Course Assessment Parameters');
     my $dom = $ENV{'course.'.$ENV{'request.course.id'}.'.domain'};      my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'};
     my $crs = $ENV{'course.'.$ENV{'request.course.id'}.'.num'};      my $crs = $env{'course.'.$env{'request.course.id'}.'.num'};
       my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs(undef,'Overview');
     my $html=&Apache::lonxml::xmlbegin();      my $html=&Apache::lonxml::xmlbegin();
     $r->print(<<ENDOVER);      $r->print(<<ENDOVER);
 $html  $html
Line 1837  $html Line 1906  $html
 <title>LON-CAPA Course Environment</title>  <title>LON-CAPA Course Environment</title>
 </head>  </head>
 $bodytag  $bodytag
 <form method="post" action="/adm/parmset" name="overviewform">  $breadcrumbs
   <form method="post" action="/adm/parmset?action=setoverview" name="overviewform">
 <input type="hidden" name="overview" value="1" />  <input type="hidden" name="overview" value="1" />
 ENDOVER  ENDOVER
 # Setting  # Setting
Line 1846  ENDOVER Line 1916  ENDOVER
     undef %newdata;      undef %newdata;
     my @deldata=();      my @deldata=();
     undef @deldata;      undef @deldata;
     foreach (keys %ENV) {      foreach (keys %env) {
  if ($_=~/^form\.([a-z]+)\_(.+)$/) {   if ($_=~/^form\.([a-z]+)\_(.+)$/) {
     my $cmd=$1;      my $cmd=$1;
     my $thiskey=$2;      my $thiskey=$2;
     if ($cmd eq 'set') {      if ($cmd eq 'set') {
  my $data=$ENV{$_};   my $data=$env{$_};
  if ($olddata{$thiskey} ne $data) { $newdata{$thiskey}=$data; }   if ($olddata{$thiskey} ne $data) { $newdata{$thiskey}=$data; }
     } elsif ($cmd eq 'del') {      } elsif ($cmd eq 'del') {
  push (@deldata,$thiskey);   push (@deldata,$thiskey);
     } elsif ($cmd eq 'datepointer') {      } elsif ($cmd eq 'datepointer') {
  my $data=&Apache::lonhtmlcommon::get_date_from_form($ENV{$_});   my $data=&Apache::lonhtmlcommon::get_date_from_form($env{$_});
  if (defined($data) and $olddata{$thiskey} ne $data) { $newdata{$thiskey}=$data; }   if (defined($data) and $olddata{$thiskey} ne $data) { $newdata{$thiskey}=$data; }
     }      }
  }   }
Line 1977  Returns: Line 2047  Returns:
 sub change_clone {  sub change_clone {
     my ($clonelist,$oldcloner) = @_;      my ($clonelist,$oldcloner) = @_;
     my ($uname,$udom);      my ($uname,$udom);
     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 $clone_crs = $cnum.':'.$cdom;      my $clone_crs = $cnum.':'.$cdom;
           
     if ($cnum && $cdom) {      if ($cnum && $cdom) {
Line 2034  sub change_clone { Line 2104  sub change_clone {
     }      }
 }  }
   
   
   ##################################################
   ##################################################
   
   =pod
   
   =item * header
   
   Output html header for page
   
   =cut
   
   ##################################################
   ##################################################
   sub header {
       my $html=&Apache::lonxml::xmlbegin();
       my $bodytag=&Apache::loncommon::bodytag('Parameter Manager');
       my $title = &mt('LON-CAPA Parameter Manager');
       return(<<ENDHEAD);
   $html
   <head>
   <title>$title</title>
   </head>
   $bodytag
   ENDHEAD
   }
   ##################################################
   ##################################################
   sub print_main_menu {
       my ($r,$parm_permission)=@_;
       #
       $r->print(<<ENDMAINFORMHEAD);
   <form method="post" enctype="multipart/form-data"
         action="/adm/parmset" name="studentform">
   ENDMAINFORMHEAD
   #
       my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
       my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
       my @menu =
           (
             { text => 'Set Course Environment Parameters',
               help => 'Course_Setting_Parameters',
               action => 'crsenv',
               permission => $parm_permission,
               },
             { text => 'Set/Modify Course Assessment Parameters - Helper Mode',
               url => '/adm/helper/parameter.helper',
               permission => $parm_permission,
               },
             { text => 'Modify Course Assessment Parameters - Overview Mode',
               action => 'setoverview',
               permission => $parm_permission,
               },
             { text => 'Set/Modify Course Assessment Parameters - Table Mode',
               action => 'settable',
               permission => $parm_permission,
               },
   #          { text => 'Set Parameter Default Preferences',
   #            help => 'Course_View_Class_List',
   #            action => 'setdefaults',
   #            permission => $parm_permission,
   #            },
             );
       my $menu_html = '';
       foreach my $menu_item (@menu) {
           next if (! $menu_item->{'permission'});
           $menu_html.='<p>';
           $menu_html.='<font size="+1">';
           if (exists($menu_item->{'url'})) {
               $menu_html.=qq{<a href="$menu_item->{'url'}">};
           } else {
               $menu_html.=
                   qq{<a href="/adm/parmset?action=$menu_item->{'action'}">};
           }
           $menu_html.= &mt($menu_item->{'text'}).'</a></font>';
           if (exists($menu_item->{'help'})) {
               $menu_html.=
                   &Apache::loncommon::help_open_topic($menu_item->{'help'});
           }
           $menu_html.='</p>'.$/;
       }
       $r->print($menu_html);
       return;
   }
   
   
   
   
 ##################################################  ##################################################
 ##################################################  ##################################################
   
Line 2044  sub change_clone { Line 2202  sub change_clone {
 Main handler.  Calls &assessparms and &crsenv subroutines.  Main handler.  Calls &assessparms and &crsenv subroutines.
   
 =cut  =cut
   
 ##################################################  ##################################################
 ##################################################  ##################################################
     use Data::Dumper;      use Data::Dumper;
Line 2056  sub handler { Line 2213  sub handler {
  $r->send_http_header;   $r->send_http_header;
  return OK;   return OK;
     }      }
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'});      &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
       ['action','state']);
   
 # ----------------------------------------------------------- Clear out garbage  # ----------------------------------------------------------- Clear out garbage
   
     %courseopt=();  
     %useropt=();  
     %parmhash=();  
   
     @ids=();      @ids=();
     %symbp=();      %symbp=();
Line 2072  sub handler { Line 2227  sub handler {
   
     %maptitles=();      %maptitles=();
   
       &Apache::lonhtmlcommon::clear_breadcrumbs();
       &Apache::lonhtmlcommon::add_breadcrumb({href=>"/adm/parmset",
       text=>"Parameter Manager",
       faq=>9,
       bug=>'Instructor Interface'});
 # ----------------------------------------------------- Needs to be in a course  # ----------------------------------------------------- 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'}));
       if ($env{'request.course.id'} &&  $parm_permission) {
   
     if (($ENV{'request.course.id'}) &&           # Start Page
  (&Apache::lonnet::allowed('opa',$ENV{'request.course.id'}) ||   
  &Apache::lonnet::allowed('opa',$ENV{'request.course.id'}.'/'.  
   $ENV{'request.course.sec'})  
  )) {  
   
         &Apache::loncommon::content_type($r,'text/html');          &Apache::loncommon::content_type($r,'text/html');
         $r->send_http_header;          $r->send_http_header;
   
  if (($ENV{'form.crsenv'}) || (!$ENV{'request.course.fn'})) {          #
 # ---------------------------------------------- This is for course environment          # Main switch on form.action and form.state, as appropriate
 # -------------------------- also call if toplevel map coudl not be initialized          #
     &crsenv($r);          # Check first if coming from someone else headed directly for
  } elsif ($ENV{'form.overview'}) {          #  the table mode
 # --------------------------------------------------------------- Overview mode          if ((($env{'form.command'} eq 'set') && ($env{'form.url'})
        && (!$env{'form.dis'})) || ($env{'form.symb'})) {
       &assessparms($r);
   
           } elsif (! exists($env{'form.action'})) {
               $r->print(&header());
               $r->print(&Apache::lonhtmlcommon::breadcrumbs(undef,
    'Parameter Manager'));
               &print_main_menu($r,$parm_permission);
           } elsif ($env{'form.action'} eq 'crsenv' && $parm_permission) {
               &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=crsenv',
       text=>"Course Environment"});
               $r->print(&Apache::lonhtmlcommon::breadcrumbs(undef,
      'Edit Course Environment'));
               &crsenv($r); 
           } elsif ($env{'form.action'} eq 'setoverview' && $parm_permission) {
               &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=setoverview',
       text=>"Overview Mode"});
     &overview($r);      &overview($r);
  } else {          } elsif ($env{'form.action'} eq 'settable' && $parm_permission) {
 # --------------------------------------------------------- Bring up assessment              &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=settable',
       text=>"Table Mode"});
     &assessparms($r);      &assessparms($r);
  }          }
           
     } 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'}=   $env{'user.error.msg'}=
     "/adm/parmset:opa:0:0:Cannot modify assessment parameters";      "/adm/parmset:opa:0:0:Cannot modify assessment parameters";
  return HTTP_NOT_ACCEPTABLE;   return HTTP_NOT_ACCEPTABLE;
     }      }

Removed from v.1.188  
changed lines
  Added in v.1.199


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