--- loncom/interface/lonparmset.pm 2000/11/28 02:53:40 1.16 +++ loncom/interface/lonparmset.pm 2002/09/07 17:30:31 1.66 @@ -1,368 +1,284 @@ # The LearningOnline Network with CAPA # Handler to set parameters for assessments # -# (Handler to resolve ambiguous file locations +# $Id: lonparmset.pm,v 1.66 2002/09/07 17:30:31 www Exp $ # -# (TeX Content Handler +# Copyright Michigan State University Board of Trustees # -# 05/29/00,05/30,10/11 Gerd Kortemeyer) +# This file is part of the LearningOnline Network with CAPA (LON-CAPA). # -# 10/11,10/12,10/16 Gerd Kortemeyer) +# LON-CAPA is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. # -# 11/20,11/21,11/22,11/23,11/24,11/25,11/27 Gerd Kortemeyer +# LON-CAPA is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with LON-CAPA; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# /home/httpd/html/adm/gpl.txt +# +# http://www.lon-capa.org/ +# +################################################################### +################################################################### + +=pod + +=head1 NAME + +lonparmset - Handler to set parameters for assessments and course + +=head1 SYNOPSIS + +lonparmset provides an interface to setting course parameters. + +=head1 DESCRIPTION + +This module sets coursewide and assessment parameters. + +=head1 INTERNAL SUBROUTINES + +=over 4 + +=cut + +################################################################### +################################################################### package Apache::lonparmset; use strict; use Apache::lonnet; use Apache::Constants qw(:common :http REDIRECT); +use Apache::loncommon; use GDBM_File; +use Apache::lonhomework; +use Apache::lonxml; my %courseopt; my %useropt; -my %bighash; my %parmhash; -my @outpar; - my @ids; my %symbp; my %mapp; my %typep; my %keyp; -my %allkeys; - my $uname; my $udom; my $uhome; - my $csec; +my $coursename; + +################################################## +################################################## -my $fcat; +=pod -# -------------------------------------------- Figure out a cascading parameter +=item parmval +Figure out a cascading parameter. + +Inputs: $what $id $def + +Returns: I am not entirely sure. + +=cut + +################################################## +################################################## sub parmval { my ($what,$id,$def)=@_; my $result=''; - @outpar=(); + my @outpar=(); # ----------------------------------------------------- Cascading lookup scheme - my $symbparm=$symbp{$id}.'.'.$what; - my $mapparm=$mapp{$id}.'___(all).'.$what; + my $symbparm=$symbp{$id}.'.'.$what; + my $mapparm=$mapp{$id}.'___(all).'.$what; - my $seclevel= - $ENV{'request.course.id'}.'.['. - $csec.'].'.$what; - my $seclevelr= - $ENV{'request.course.id'}.'.['. - $csec.'].'.$symbparm; - my $seclevelm= - $ENV{'request.course.id'}.'.['. - $csec.'].'.$mapparm; - - my $courselevel= - $ENV{'request.course.id'}.'.'.$what; - my $courselevelr= - $ENV{'request.course.id'}.'.'.$symbparm; - my $courselevelm= - $ENV{'request.course.id'}.'.'.$mapparm; + my $seclevel=$ENV{'request.course.id'}.'.['.$csec.'].'.$what; + my $seclevelr=$ENV{'request.course.id'}.'.['.$csec.'].'.$symbparm; + my $seclevelm=$ENV{'request.course.id'}.'.['.$csec.'].'.$mapparm; + + my $courselevel=$ENV{'request.course.id'}.'.'.$what; + my $courselevelr=$ENV{'request.course.id'}.'.'.$symbparm; + my $courselevelm=$ENV{'request.course.id'}.'.'.$mapparm; # -------------------------------------------------------- first, check default - if ($def) { $outpar[11]=$def; - $result=11; } + if ($def) { $outpar[11]=$def; $result=11; } # ----------------------------------------------------- second, check map parms - my $thisparm=$parmhash{$symbparm}; - if ($thisparm) { $outpar[10]=$thisparm; - $result=10; } + my $thisparm=$parmhash{$symbparm}; + if ($thisparm) { $outpar[10]=$thisparm; $result=10; } # --------------------------------------------------------- third, check course - if ($courseopt{$courselevel}) { $outpar[9]=$courseopt{$courselevel}; - $result=9; } + if ($courseopt{$courselevel}) { + $outpar[9]=$courseopt{$courselevel}; + $result=9; + } - if ($courseopt{$courselevelm}) { $outpar[8]=$courseopt{$courselevelm}; - $result=8; } + if ($courseopt{$courselevelm}) { + $outpar[8]=$courseopt{$courselevelm}; + $result=8; + } - if ($courseopt{$courselevelr}) { $outpar[7]=$courseopt{$courselevelr}; - $result=7; } + if ($courseopt{$courselevelr}) { + $outpar[7]=$courseopt{$courselevelr}; + $result=7; + } - if ($csec) { + if ($csec) { + if ($courseopt{$seclevel}) { + $outpar[6]=$courseopt{$seclevel}; + $result=6; + } + if ($courseopt{$seclevelm}) { + $outpar[5]=$courseopt{$seclevelm}; + $result=5; + } + + if ($courseopt{$seclevelr}) { + $outpar[4]=$courseopt{$seclevelr}; + $result=4; + } + } - if ($courseopt{$seclevel}) { $outpar[6]=$courseopt{$seclevel}; - $result=6; } +# ---------------------------------------------------------- fourth, check user - if ($courseopt{$seclevelm}) { $outpar[5]=$courseopt{$seclevelm}; - $result=5; } - - if ($courseopt{$seclevelr}) { $outpar[4]=$courseopt{$seclevelr}; - $result=4; } - - } + if ($uname) { + if ($useropt{$courselevel}) { + $outpar[3]=$useropt{$courselevel}; + $result=3; + } + + if ($useropt{$courselevelm}) { + $outpar[2]=$useropt{$courselevelm}; + $result=2; + } + + if ($useropt{$courselevelr}) { + $outpar[1]=$useropt{$courselevelr}; + $result=1; + } + } -# ---------------------------------------------------------- fourth, check user - - if ($uname) { + return ($result,@outpar); +} - if ($useropt{$courselevel}) { $outpar[3]=$useropt{$courselevel}; - $result=3; } +################################################## +################################################## - if ($useropt{$courselevelm}) { $outpar[2]=$useropt{$courselevelm}; - $result=2; } +=pod - if ($useropt{$courselevelr}) { $outpar[1]=$useropt{$courselevelr}; - $result=1; } +=item valout - } - - return $result; -} +Format a value for output. -# ---------------------------------------------------------------- Sort routine +Inputs: $value, $type -sub bycat { - if ($fcat eq '') { - $a<=>$b; - } else { - &parmval($fcat,$a)<=>&parmval($fcat,$b); - } -} +Returns: $value, formatted for output. If $type indicates it is a date, +localtime($value) is returned. -# ------------------------------------------------------------ Output for value +=cut +################################################## +################################################## sub valout { my ($value,$type)=@_; - return - ($value?(($type=~/^date/)?localtime($value):$value):' '); + my $result = ''; + # Values of zero are valid. + if (! $value && $value ne '0') { + $result = ' '; + } else { + if ($type eq 'date_interval') { + my ($sec,$min,$hour,$mday,$mon,$year)=gmtime($value); + $year=$year-70; + $mday--; + if ($year) { + $result.=$year.' yrs '; + } + if ($mon) { + $result.=$mon.' mths '; + } + if ($mday) { + $result.=$mday.' days '; + } + if ($hour) { + $result.=$hour.' hrs '; + } + if ($min) { + $result.=$min.' mins '; + } + if ($sec) { + $result.=$sec.' secs '; + } + $result=~s/\s+$//; + } elsif ($type=~/^date/) { + $result = localtime($value); + } else { + $result = $value; + } + } + return $result; } -# -------------------------------------------------------- Produces link anchor +################################################## +################################################## -sub plink { - my ($type,$dis,$value,$marker,$return,$call)=@_; - return ''. - &valout($value,$type).''; -} +=pod -# ================================================================ Main Handler +=item plink -sub handler { - my $r=shift; +Produces a link anchor. - if ($r->header_only) { - $r->content_type('text/html'); - $r->send_http_header; - return OK; - } +Inputs: $type,$dis,$value,$marker,$return,$call -# ----------------------------------------------------- Needs to be in a course +Returns: scalar with html code for a link which will envoke the +javascript function 'pjump'. - if (($ENV{'request.course.fn'}) && - (&Apache::lonnet::allowed('opa',$ENV{'request.course.id'}))) { -# -------------------------------------------------------- Variable declaration +=cut - %courseopt=(); - %useropt=(); - %bighash=(); - - @ids=(); - %symbp=(); - %typep=(); - - my $message=''; - - $csec=$ENV{'form.csec'}; - $udom=$ENV{'form.udom'}; - my $id=$ENV{'form.id'}; - if (($id) && ($udom)) { - $uname=(&Apache::lonnet::idget($udom,$id))[1]; - if ($uname) { - $id=''; - } else { - $message= - "
\nFull Name: ".
- $name{'firstname'}.' '.$name{'middlename'}
- .$name{'lastname'}.' '.$name{'generation'}.
- "
\nID: ".$name{'id'}.'
'; - } + $winvalue=$ENV{'form.recent_'.(split(/\_/,$type))[0]}; } - } - - unless ($csec) { $csec=''; } - - $fcat=$ENV{'form.fcat'}; - unless ($fcat) { $fcat=''; } - -# ------------------------------------------------------------------- Tie hashs - if ((tie(%bighash,'GDBM_File',$ENV{'request.course.fn'}.'.db', - &GDBM_READER,0640)) && - (tie(%parmhash,'GDBM_File', - $ENV{'request.course.fn'}.'_parms.db',&GDBM_READER,0640))) { - -# --------------------------------------------------------- Get all assessments - %allkeys=(); - - map { - if ($_=~/^src\_(\d+)\.(\d+)$/) { - my $mapid=$1; - my $resid=$2; - my $id=$mapid.'.'.$resid; - my $srcf=$bighash{$_}; - if ($srcf=~/\.(problem|exam|quiz|assess|survey|form)$/) { - $ids[$#ids+1]=$id; - $typep{$id}=$1; - $keyp{$id}=''; - map { - if ($_=~/^parameter\_(.*)/) { - my $key=$_; - my $allkey=$1; - my $display= - &Apache::lonnet::metadata($srcf,$key.'.display'); - unless ($display) { - $display= - &Apache::lonnet::metadata($srcf,$key.'.name'); - } - $allkeys{$allkey}=$display; - if ($keyp{$id}) { - $keyp{$id}.=','.$key; - } else { - $keyp{$id}=$key; - } - } - } split(/\,/, - &Apache::lonnet::metadata($srcf,'keys')); - $mapp{$id}= - &Apache::lonnet::declutter($bighash{'map_id_'.$mapid}); - $symbp{$id}=$mapp{$id}. - '___'.$resid.'___'. - &Apache::lonnet::declutter($srcf); - } - } - } keys %bighash; -# ---------------------------------------------------------- Anything to store? - if ($ENV{'form.pres_marker'}) { - my ($sresid,$spnam,$snum)=split(/\&/,$ENV{'form.pres_marker'}); - $spnam=~s/\_/\./; -# ---------------------------------------------------------- Construct prefixes + } + return + ''. + &valout($value,$type).''; +} - my $symbparm=$symbp{$sresid}.'.'.$spnam; - my $mapparm=$mapp{$sresid}.'___(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 $courselevel= - $ENV{'request.course.id'}.'.'.$spnam; - my $courselevelr= - $ENV{'request.course.id'}.'.'.$symbparm; - my $courselevelm= - $ENV{'request.course.id'}.'.'.$mapparm; - - my $storeunder=''; - if (($snum==9) || ($snum==3)) { $storeunder=$courselevel; } - if (($snum==8) || ($snum==2)) { $storeunder=$courselevelm; } - if (($snum==7) || ($snum==1)) { $storeunder=$courselevelr; } - if ($snum==6) { $storeunder=$seclevel; } - if ($snum==5) { $storeunder=$seclevelm; } - if ($snum==4) { $storeunder=$seclevelr; } - $storeunder=&Apache::lonnet::escape($storeunder); +sub startpage { + my ($r,$id,$udom,$csec,$uname)=@_; + $r->content_type('text/html'); + $r->send_http_header; - my $storecontent= - $storeunder.'='.&Apache::lonnet::escape($ENV{'form.pres_value'}).'&'. - $storeunder.'.type='.&Apache::lonnet::escape($ENV{'form.pres_type'}); - - my $reply=''; - if ($snum>3) { -# ---------------------------------------------------------------- Store Course - $reply=&Apache::lonnet::critical('put:'. - $ENV{'course.'.$ENV{'request.course.id'}.'.domain'}.':'. - $ENV{'course.'.$ENV{'request.course.id'}.'.num'}.':resourcedata:'. - $storecontent, - $ENV{'course.'.$ENV{'request.course.id'}.'.home'}); - } else { -# ------------------------------------------------------------------ Store User - $reply= - &Apache::lonnet::critical('put:'.$udom.':'.$uname.':resourcedata:'. - $storecontent,$uhome); - } - - if ($reply=~/^error\:(.*)/) { - $message.="