Diff for /loncom/interface/lonparmset.pm between versions 1.195 and 1.197

version 1.195, 2005/05/30 17:58:51 version 1.197, 2005/06/01 21:44:00
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;  my %courseopt;
 my %useropt;  my %useropt;
Line 72  my %symbp; Line 73  my %symbp;
 my %mapp;  my %mapp;
 my %typep;  my %typep;
 my %keyp;  my %keyp;
   my %uris;
 my %maptitles;  my %maptitles;
   
 ##################################################  ##################################################
Line 193  sub parmval { Line 194  sub parmval {
 ##################################################  ##################################################
 ##################################################  ##################################################
 #  #
 # Store a parameter  # Store a parameter by ID
 #  #
 # Takes  # Takes
 # - resource id  # - resource id
Line 206  sub parmval { Line 207  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 $symbparm=$symbp{$sresid}.'.'.$spnam;      my $map=(&Apache::lonnet::decode_symb($symb))[0];    
     my $mapparm=$mapp{$sresid}.'___(all).'.$spnam;      my $symbparm=$symb.'.'.$spnam;
           my $mapparm=$map.'___(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;
Line 239  sub storeparm { Line 265  sub storeparm {
 # Expire sheets  # Expire sheets
  &Apache::lonnet::expirespread('','','studentcalc');   &Apache::lonnet::expirespread('','','studentcalc');
  if (($snum==7) || ($snum==4)) {   if (($snum==7) || ($snum==4)) {
     &Apache::lonnet::expirespread('','','assesscalc',$symbp{$sresid});      &Apache::lonnet::expirespread('','','assesscalc',$symb);
  } elsif (($snum==8) || ($snum==5)) {   } elsif (($snum==8) || ($snum==5)) {
     &Apache::lonnet::expirespread('','','assesscalc',$mapp{$sresid});      &Apache::lonnet::expirespread('','','assesscalc',$map);
  } else {   } else {
     &Apache::lonnet::expirespread('','','assesscalc');      &Apache::lonnet::expirespread('','','assesscalc');
  }   }
Line 264  sub storeparm { Line 290  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 675  Input: See list below: Line 701  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 688  sub extractResourceInformation { Line 713  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 803  sub assessparms { Line 827  sub assessparms {
     my %defp;      my %defp;
     %courseopt=();      %courseopt=();
     %useropt=();      %useropt=();
     my %bighash=();  
   
     @ids=();      @ids=();
     %symbp=();      %symbp=();
Line 906  sub assessparms { Line 929  sub assessparms {
     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)");
Line 918  sub assessparms { Line 937  sub assessparms {
     }      }
   
 # --------------------------------------------------------- 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'} = '';
Line 972  sub assessparms { Line 991  sub assessparms {
     &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 '';
     }      }
Line 1238  ENDTABLEHEADFOUR Line 1256  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 1337  ENDTABLEHEADFOUR Line 1355  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 1425  ENDMAPONE Line 1443  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 1485  ENDMAPONE Line 1503  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);      untie(%parmhash);
 } # end sub assessparms  } # end sub assessparms
   

Removed from v.1.195  
changed lines
  Added in v.1.197


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