Diff for /loncom/interface/lonparmset.pm between versions 1.189 and 1.200

version 1.189, 2005/03/18 15:17:36 version 1.200, 2005/06/02 16:35:32
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;
   
 my %courseopt;  # --- Caches local to lonparmset
 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 115  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();
   
       my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
       my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
       my $useropt=&Apache::lonnet::get_userresdata($uname,$udom);
       my $courseopt=&Apache::lonnet::get_courseresdata($cnum,$cdom);
   
   
     my $result='';      my $result='';
     my @outpar=();      my @outpar=();
 # ----------------------------------------------------- Cascading lookup scheme  # ----------------------------------------------------- Cascading lookup scheme
Line 115  sub parmval { Line 132  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;
   
   
   
 # --------------------------------------------------------- first, check course  # --------------------------------------------------------- first, check course
   
     if (defined($courseopt{$courselevel})) {      if (defined($$courseopt{$courselevel})) {
  $outpar[11]=$courseopt{$courselevel};   $outpar[11]=$$courseopt{$courselevel};
  $result=11;   $result=11;
     }      }
   
     if (defined($courseopt{$courselevelm})) {      if (defined($$courseopt{$courselevelm})) {
  $outpar[10]=$courseopt{$courselevelm};   $outpar[10]=$$courseopt{$courselevelm};
  $result=10;   $result=10;
     }      }
   
Line 146  sub parmval { Line 163  sub parmval {
     my $thisparm=$parmhash{$symbparm};      my $thisparm=$parmhash{$symbparm};
     if (defined($thisparm)) { $outpar[8]=$thisparm; $result=8; }      if (defined($thisparm)) { $outpar[8]=$thisparm; $result=8; }
   
     if (defined($courseopt{$courselevelr})) {      if (defined($$courseopt{$courselevelr})) {
  $outpar[7]=$courseopt{$courselevelr};   $outpar[7]=$$courseopt{$courselevelr};
  $result=7;   $result=7;
     }      }
   
 # ------------------------------------------------------ fourth, back to course  # ------------------------------------------------------ fourth, back to course
     if (defined($csec)) {      if (defined($csec)) {
         if (defined($courseopt{$seclevel})) {          if (defined($$courseopt{$seclevel})) {
     $outpar[6]=$courseopt{$seclevel};      $outpar[6]=$$courseopt{$seclevel};
     $result=6;      $result=6;
  }   }
         if (defined($courseopt{$seclevelm})) {          if (defined($$courseopt{$seclevelm})) {
     $outpar[5]=$courseopt{$seclevelm};      $outpar[5]=$$courseopt{$seclevelm};
     $result=5;      $result=5;
  }   }
   
         if (defined($courseopt{$seclevelr})) {          if (defined($$courseopt{$seclevelr})) {
     $outpar[4]=$courseopt{$seclevelr};      $outpar[4]=$$courseopt
   {$seclevelr};
     $result=4;      $result=4;
  }   }
     }      }
Line 171  sub parmval { Line 189  sub parmval {
 # ---------------------------------------------------------- fifth, check user  # ---------------------------------------------------------- fifth, check user
   
     if (defined($uname)) {      if (defined($uname)) {
  if (defined($useropt{$courselevel})) {   if (defined($$useropt{$courselevel})) {
     $outpar[3]=$useropt{$courselevel};      $outpar[3]=$$useropt{$courselevel};
     $result=3;      $result=3;
  }   }
   
  if (defined($useropt{$courselevelm})) {   if (defined($$useropt{$courselevelm})) {
     $outpar[2]=$useropt{$courselevelm};      $outpar[2]=$$useropt{$courselevelm};
     $result=2;      $result=2;
  }   }
   
  if (defined($useropt{$courselevelr})) {   if (defined($$useropt{$courselevelr})) {
     $outpar[1]=$useropt{$courselevelr};      $outpar[1]=$$useropt{$courselevelr};
     $result=1;      $result=1;
  }   }
     }      }
     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'};
       }
   }
   
 ##################################################  ##################################################
 ##################################################  ##################################################
 #  #
 # Store a parameter  # Store a parameter by ID
 #  #
 # Takes  # Takes
 # - resource id  # - resource id
Line 206  sub parmval { Line 238  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 236  sub storeparm { Line 293  sub storeparm {
     if ($snum>3) {      if ($snum>3) {
 # ---------------------------------------------------------------- Store Course  # ---------------------------------------------------------------- Store Course
 #  #
    my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
    my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
 # 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');
  }   }
 # Store parameter  # Store parameter
  if ($delete) {   if ($delete) {
     $reply=&Apache::lonnet::del      $reply=&Apache::lonnet::del
  ('resourcedata',[keys(%storecontent)],   ('resourcedata',[keys(%storecontent)],$cdom,$cnum);
  $ENV{'course.'.$ENV{'request.course.id'}.'.domain'},  
  $ENV{'course.'.$ENV{'request.course.id'}.'.num'});  
  } else {   } else {
     $reply=&Apache::lonnet::cput      $reply=&Apache::lonnet::cput
  ('resourcedata',\%storecontent,   ('resourcedata',\%storecontent,$cdom,$cnum);
  $ENV{'course.'.$ENV{'request.course.id'}.'.domain'},  
  $ENV{'course.'.$ENV{'request.course.id'}.'.num'});  
  }   }
    &Apache::lonnet::devalidatecourseresdata($cnum,$cdom);
     } else {      } else {
 # ------------------------------------------------------------------ Store User  # ------------------------------------------------------------------ Store User
 #  #
Line 264  sub storeparm { Line 320  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');
  }   }
Line 279  sub storeparm { Line 335  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 424  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 441  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 511  $html
 $selscript  $selscript
 </head>  </head>
 $bodytag  $bodytag
   $breadcrumbs
 $overallhelp  $overallhelp
 ENDHEAD  ENDHEAD
   
Line 478  ENDHEAD2 Line 537  ENDHEAD2
     my %sectionhash=();      my %sectionhash=();
     my $sections='';      my $sections='';
     if (&Apache::loncommon::get_sections(      if (&Apache::loncommon::get_sections(
                  $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'},
  \%sectionhash)) {   \%sectionhash)) {
         $sections=$lt{'sg'}.': <select name="csec">';          $sections=$lt{'sg'}.': <select name="csec">';
  foreach ('',sort keys %sectionhash) {   foreach ('',sort keys %sectionhash) {
Line 489  ENDHEAD2 Line 548  ENDHEAD2
         $sections.='</select>';          $sections.='</select>';
      }       }
      $r->print(<<ENDHEAD3);       $r->print(<<ENDHEAD3);
 <form method="post" action="/adm/parmset" name="parmform">  <form method="post" action="/adm/parmset?action=settable" name="parmform">
 <h4>$lt{'captm'}</h4>  <h4>$lt{'captm'}</h4>
 ENDHEAD3  ENDHEAD3
   
Line 672  Input: See list below: Line 731  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 685  sub extractResourceInformation { Line 743  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) {  
  if ($_=~/^src\_(\d+)\.(\d+)$/) {      my $navmap = Apache::lonnavmaps::navmap->new();
     # there are no resources in the 0 level      my @allres=$navmap->retrieveResources(undef,undef,1,undef,1);
     if ($1 eq '0') { next; }      foreach my $resource (@allres) {
     my $mapid=$1;   my $id=$resource->id();
     my $resid=$2;          my ($mapid,$resid)=split(/\./,$id);
     my $id=$mapid.'.'.$resid;   if ($mapid eq '0') { next; }
     my $srcf=$$bighash{$_};   $$ids[$#$ids+1]=$id;
     if (1) {   my $srcf=$resource->src();
  $srcf=~/\.(\w+)$/;   $srcf=~/\.(\w+)$/;
  $$ids[$#$ids+1]=$id;   $$typep{$id}=$1;
  $$typep{$id}=$1;   $$keyp{$id}='';
  $$keyp{$id}='';          $$uris{$id}=$srcf;
  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 788  sub assessparms { Line 845  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 798  sub assessparms { Line 855  sub assessparms {
     my %allparts;      my %allparts;
   
     my %defp;      my %defp;
     %courseopt=();  
     %useropt=();  
     my %bighash=();  
   
     @ids=();      @ids=();
     %symbp=();      %symbp=();
Line 808  sub assessparms { Line 862  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 866  sub assessparms { Line 920  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 879  sub assessparms { Line 933  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 899  sub assessparms { Line 953  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  
     &Apache::lonnet::devalidatecourseresdata(  
                  $ENV{'course.'.$ENV{'request.course.id'}.'.num'},  
                  $ENV{'course.'.$ENV{'request.course.id'}.'.domain'});  
     &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
   
     @ids=sort  {      @ids=sort  {
Line 965  sub assessparms { Line 992  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 981  sub assessparms { Line 1004  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 1147  sub assessparms { Line 1170  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 1190  ENDTABLETWO Line 1213  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 1234  ENDTABLEHEADFOUR Line 1257  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 1333  ENDTABLEHEADFOUR Line 1356  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 1421  ENDMAPONE Line 1444  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 1481  ENDMAPONE Line 1504  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 1509  sub crsenv { Line 1530  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 1595  sub crsenv { Line 1618  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 1791  sub crsenv { Line 1814  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 1800  $browse_js Line 1823  $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 1811  $output Line 1835  $output
 </form>  </form>
 </body>  </body>
 </html>      </html>    
 ENDENV  ENDenv
 }  }
 ##################################################  ##################################################
   
Line 1840  sub overview { Line 1864  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 1849  $html Line 1874  $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 1858  ENDOVER Line 1884  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 1989  Returns: Line 2015  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 2046  sub change_clone { Line 2072  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 2056  sub change_clone { Line 2170  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 2068  sub handler { Line 2181  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 2084  sub handler { Line 2195  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.189  
changed lines
  Added in v.1.200


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