Diff for /loncom/interface/lonparmset.pm between versions 1.186 and 1.196

version 1.186, 2005/03/17 21:08:43 version 1.196, 2005/06/01 02:02:41
Line 72  my %symbp; Line 72  my %symbp;
 my %mapp;  my %mapp;
 my %typep;  my %typep;
 my %keyp;  my %keyp;
   my %uris;
 my %maptitles;  my %maptitles;
   
 my $uname;  
 my $udom;  
 my $uhome;  
 my $csec;  
 my $coursename;  
   
 ##################################################  ##################################################
 ##################################################  ##################################################
   
Line 113  Returns:  A list, the first item is the Line 107  Returns:  A list, the first item is the
 ##################################################  ##################################################
 ##################################################  ##################################################
 sub parmval {  sub parmval {
     my ($what,$id,$def)=@_;      my ($what,$id,$def,$uname,$udom,$csec)=@_;
     my $result='';      my $result='';
     my @outpar=();      my @outpar=();
 # ----------------------------------------------------- Cascading lookup scheme  # ----------------------------------------------------- Cascading lookup scheme
Line 121  sub parmval { Line 115  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 207  sub parmval { Line 201  sub parmval {
 # - level  # - level
 # - new value  # - new value
 # - new type  # - new type
   # - username
   # - userdomain
   
 sub storeparm {  sub storeparm {
     my ($sresid,$spnam,$snum,$nval,$ntype)=@_;      my ($sresid,$spnam,$snum,$nval,$ntype,$uname,$udom,$csec)=@_;
     $spnam=~s/\_([^\_]+)$/\.$1/;      $spnam=~s/\_([^\_]+)$/\.$1/;
 # ---------------------------------------------------------- Construct prefixes  # ---------------------------------------------------------- Construct prefixes
           
     my $symbparm=$symbp{$sresid}.'.'.$spnam;      my $symbparm=$symbp{$sresid}.'.'.$spnam;
     my $mapparm=$mapp{$sresid}.'___(all).'.$spnam;      my $mapparm=$mapp{$sresid}.'___(all).'.$spnam;
           
     my $seclevel=$ENV{'request.course.id'}.'.['.$csec.'].'.$spnam;      my $seclevel=$env{'request.course.id'}.'.['.$csec.'].'.$spnam;
     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'}.'.'.$spnam;      my $courselevel=$env{'request.course.id'}.'.'.$spnam;
     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;
           
     my $storeunder='';      my $storeunder='';
     if (($snum==11) || ($snum==3)) { $storeunder=$courselevel; }      if (($snum==11) || ($snum==3)) { $storeunder=$courselevel; }
Line 252  sub storeparm { Line 249  sub storeparm {
  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 282  sub storeparm { Line 279  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 370  sub plink { Line 368  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 387  sub startpage { Line 385  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 456  $html Line 455  $html
 $selscript  $selscript
 </head>  </head>
 $bodytag  $bodytag
   $breadcrumbs
 $overallhelp  $overallhelp
 ENDHEAD  ENDHEAD
   
Line 477  $assessparmhelp Line 477  $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 488  ENDHEAD3 Line 501  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" />
 $lt{'oi'}  $lt{'oi'}
 <input type="text" value="$id" size="12" name="id">   <input type="text" value="$id" size="12" name="id" /> 
 $lt{'ad'}  $lt{'ad'}
 $chooseopt  $chooseopt
 </b>  </b>
Line 507  ENDHEAD Line 519  ENDHEAD
   
 sub print_row {  sub print_row {
     my ($r,$which,$part,$name,$rid,$default,$defaulttype,$display,$defbgone,      my ($r,$which,$part,$name,$rid,$default,$defaulttype,$display,$defbgone,
  $defbgtwo,$parmlev)=@_;   $defbgtwo,$parmlev,$uname,$udom,$csec)=@_;
 # get the values for the parameter in cascading order  # get the values for the parameter in cascading order
 # empty levels will remain empty  # empty levels will remain empty
     my ($result,@outpar)=&parmval($$part{$which}.'.'.$$name{$which},      my ($result,@outpar)=&parmval($$part{$which}.'.'.$$name{$which},
   $rid,$$default{$which});    $rid,$$default{$which},$uname,$udom,$csec);
 # get the type for the parameters  # get the type for the parameters
 # problem: these may not be set for all levels  # problem: these may not be set for all levels
     my ($typeresult,@typeoutpar)=&parmval($$part{$which}.'.'.      my ($typeresult,@typeoutpar)=&parmval($$part{$which}.'.'.
                                           $$name{$which}.'.type',                                            $$name{$which}.'.type',
   $rid,$$defaulttype{$which});    $rid,$$defaulttype{$which},$uname,$udom,$csec);
 # cascade down manually  # cascade down manually
     my $cascadetype=$$defaulttype{$which};      my $cascadetype=$$defaulttype{$which};
     for (my $i=11;$i>0;$i--) {      for (my $i=11;$i>0;$i--) {
Line 663  Input: See list below: Line 675  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 676  sub extractResourceInformation { Line 687  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 $name=&Apache::lonnet::metadata($srcf,$key.'.name');  
                     my $part= &Apache::lonnet::metadata($srcf,$key.'.part');  
                     my $parmdis = $display;  
                     $parmdis =~ s|(\[Part.*$)||g;  
                     my $partkey = $part;  
                     $partkey =~ tr|_|.|;  
                     $$allparms{$name} = $parmdis;  
                     $$allparts{$part} = "[Part $part]";  
                     $$allkeys{$allkey}=$display;  
                     if ($allkey eq $fcat) {  
         $$defp{$id}= &Apache::lonnet::metadata($srcf,$key);  
     }  
     if ($$keyp{$id}) {  
         $$keyp{$id}.=','.$key;  
     } else {  
         $$keyp{$id}=$key;  
     }  
   }  
  }   }
  $$mapp{$id}=   my $display= &Apache::lonnet::metadata($srcf,$key.'.display');
     &Apache::lonnet::declutter($$bighash{'map_id_'.$mapid});   my $name=&Apache::lonnet::metadata($srcf,$key.'.name');
                 $$mapp{$mapid}=$$mapp{$id};   my $part= &Apache::lonnet::metadata($srcf,$key.'.part');
  $$allmaps{$mapid}=$$mapp{$id};   my $parmdis = $display;
  if ($mapid eq '1') {   $parmdis =~ s|(\[Part.*)$||g;
     $$maptitles{$mapid}='Main Course Documents';   my $partkey = $part;
    $partkey =~ tr|_|.|;
    $$allparms{$name} = $parmdis;
    $$allparts{$part} = "[Part $part]";
    $$allkeys{$allkey}=$display;
    if ($allkey eq $fcat) {
       $$defp{$id}= &Apache::lonnet::metadata($srcf,$key);
    }
    if ($$keyp{$id}) {
       $$keyp{$id}.=','.$key;
  } 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 774  sub assessparms { Line 784  sub assessparms {
     my %allmaps=();      my %allmaps=();
     my %alllevs=();      my %alllevs=();
   
       my $uname;
       my $udom;
       my $uhome;
       my $csec;
    
       my $coursename=$env{'course.'.$env{'request.course.id'}.'.description'};
   
     $alllevs{'Resource Level'}='full';      $alllevs{'Resource Level'}='full';
 #    $alllevs{'Resource Level [BRIEF]'}='brief';  
     $alllevs{'Map Level'}='map';      $alllevs{'Map Level'}='map';
     $alllevs{'Course Level'}='general';      $alllevs{'Course Level'}='general';
   
Line 785  sub assessparms { Line 801  sub assessparms {
     my %defp;      my %defp;
     %courseopt=();      %courseopt=();
     %useropt=();      %useropt=();
     my %bighash=();  
   
     @ids=();      @ids=();
     %symbp=();      %symbp=();
Line 793  sub assessparms { Line 808  sub assessparms {
   
     my $message='';      my $message='';
   
     $csec=$ENV{'form.csec'};      $csec=$env{'form.csec'};
     if      ($udom=$ENV{'form.udom'}) {  
     } elsif ($udom=$ENV{'request.role.domain'}) {      if      ($udom=$env{'form.udom'}) {
     } elsif ($udom=$ENV{'user.domain'}) {      } elsif ($udom=$env{'request.role.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 ($parmlev==$ENV{'form.parmlev'}) {  
 #        $parmlev = 'full';  
 #    }  
     
     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 866  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 879  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 899  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  # ------------------------------------------------------------------- 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',      if (!(tie(%parmhash,'GDBM_File',
       $ENV{'request.course.fn'}.'_parms.db',&GDBM_READER(),0640))) {        $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)");   $r->print("Unable to access parameter data. (File $env{'request.course.fn'}_parms.db not tieable)");
  return ;   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);
 # ---------------------------------------------------------------- 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  # -------------------------------------------------------------- Get coursedata
     %courseopt = &Apache::lonnet::dump      %courseopt = &Apache::lonnet::dump
         ('resourcedata',          ('resourcedata',
          $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'});
 # --------------------------------------------------- Get userdata (if present)  # --------------------------------------------------- Get userdata (if present)
     if ($uname) {      if ($uname) {
         %useropt=&Apache::lonnet::dump('resourcedata',$udom,$uname);          %useropt=&Apache::lonnet::dump('resourcedata',$udom,$uname);
Line 937  sub assessparms { Line 946  sub assessparms {
  if ($fcat eq '') {   if ($fcat eq '') {
     $a<=>$b;      $a<=>$b;
  } else {   } else {
     my ($result,@outpar)=&parmval($fcat,$a,$defp{$a});      my ($result,@outpar)=&parmval($fcat,$a,$defp{$a},$uname,$udom,$csec);
     my $aparm=$outpar[$result];      my $aparm=$outpar[$result];
     ($result,@outpar)=&parmval($fcat,$b,$defp{$b});      ($result,@outpar)=&parmval($fcat,$b,$defp{$b},$uname,$udom,$csec);
     my $bparm=$outpar[$result];      my $bparm=$outpar[$result];
     1*$aparm<=>1*$bparm;      1*$aparm<=>1*$bparm;
  }   }
Line 952  sub assessparms { Line 961  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 (!$have_assesments) {
  untie(%bighash);  
  untie(%parmhash);   untie(%parmhash);
  return '';   return '';
     }      }
 #    if ($ENV{'form.url'}) {  #    if ($env{'form.url'}) {
 # $r->print('<input type="hidden" value="'.$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 968  sub assessparms { Line 977  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 1134  sub assessparms { Line 1143  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 1177  ENDTABLETWO Line 1186  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 1221  ENDTABLEHEADFOUR Line 1230  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 1276  ENDTABLEHEADFOUR Line 1285  ENDTABLEHEADFOUR
   
                             &print_row($r,$_,\%part,\%name,$rid,\%default,                              &print_row($r,$_,\%part,\%name,$rid,\%default,
                                        \%type,\%display,$defbgone,$defbgtwo,                                         \%type,\%display,$defbgone,$defbgtwo,
                                        $parmlev);                                         $parmlev,$uname,$udom,$csec);
                         }                          }
                     }                      }
                 }                  }
Line 1320  ENDTABLEHEADFOUR Line 1329  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 1384  ENDMAPONE Line 1393  ENDMAPONE
                     $r->print('<tr>');                      $r->print('<tr>');
                     &print_row($r,$_,\%part,\%name,$mapid,\%default,                      &print_row($r,$_,\%part,\%name,$mapid,\%default,
                            \%type,\%display,$defbgone,$defbgtwo,                             \%type,\%display,$defbgone,$defbgtwo,
                            $parmlev);                             $parmlev,$uname,$udom,$csec);
 #                    $r->print("<tr><td>resource.$part{$_}.$name{$_},$symbp{$mapid}</td></tr>\n");  #                    $r->print("<tr><td>resource.$part{$_}.$name{$_},$symbp{$mapid}</td></tr>\n");
                 }                  }
                 $r->print("</table></center>");                  $r->print("</table></center>");
Line 1408  ENDMAPONE Line 1417  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 1461  ENDMAPONE Line 1470  ENDMAPONE
     foreach (sort keys %name) {      foreach (sort keys %name) {
                 $r->print('<tr>');                  $r->print('<tr>');
                 &print_row($r,$_,\%part,\%name,$mapid,\%default,                  &print_row($r,$_,\%part,\%name,$mapid,\%default,
                        \%type,\%display,$defbgone,$defbgtwo,$parmlev);                         \%type,\%display,$defbgone,$defbgtwo,$parmlev,$uname,$udom,$csec);
 #                    $r->print("<tr><td>resource.$part{$_}.$name{$_},$symbp{$mapid}</td></tr>\n");  #                    $r->print("<tr><td>resource.$part{$_}.$name{$_},$symbp{$mapid}</td></tr>\n");
             }              }
             $r->print("</table></center>");              $r->print("</table></center>");
         } # end of $parmlev eq general          } # end of $parmlev eq general
     }      }
     $r->print('</form></body></html>');      $r->print('</form></body></html>');
     untie(%bighash);  
     untie(%parmhash);      untie(%parmhash);
 } # end sub assessparms  } # end sub assessparms
   
Line 1496  sub crsenv { Line 1504  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 1582  sub crsenv { Line 1592  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 1778  sub crsenv { Line 1788  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 1787  $browse_js Line 1797  $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 1798  $output Line 1809  $output
 </form>  </form>
 </body>  </body>
 </html>      </html>    
 ENDENV  ENDenv
 }  }
 ##################################################  ##################################################
   
Line 1827  sub overview { Line 1838  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 1836  $html Line 1848  $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 1845  ENDOVER Line 1858  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 1976  Returns: Line 1989  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 2033  sub change_clone { Line 2046  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 2043  sub change_clone { Line 2144  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 2055  sub handler { Line 2155  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
   
Line 2071  sub handler { Line 2172  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;
    
         $coursename=$ENV{'course.'.$ENV{'request.course.id'}.'.description'};  
   
  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.186  
changed lines
  Added in v.1.196


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