+ENDHEAD3
+
+ if (!$have_assesments) {
+ $r->print(''.&mt('There are no assesment parameters in this course to set.').' ');
+ } else {
+ $r->print(<
-Section/Group:
-
-
-For User
-
-at Domain
-
+$sections
+
+$lt{'fu'}
+
+$lt{'oi'}
+
+$lt{'ad'}
+$chooseopt
+
+
+
ENDHEAD
-
- if ($uhome eq 'no_host') {
- $r->print($message);
- }
- $r->print('
Sort list by ');
- $r->print('');
- $r->print(<
-
Assessment URL and Title
Part No.
Parameter Name
-
Resource Metadata
Enclosing Map Parameter
-
Course
-ENDTABLEHEAD
- if ($csec) {
- $r->print('
Section/Group: '.$csec.'
');
}
- $r->print('
Resource in Course
');
+}
+
+sub print_row {
+ my ($r,$which,$part,$name,$symbp,$rid,$default,$defaulttype,$display,$defbgone,
+ $defbgtwo,$parmlev,$uname,$udom,$csec)=@_;
+# get the values for the parameter in cascading order
+# empty levels will remain empty
+ my ($result,@outpar)=&parmval($$part{$which}.'.'.$$name{$which},
+ $rid,$$default{$which},$uname,$udom,$csec);
+# get the type for the parameters
+# problem: these may not be set for all levels
+ my ($typeresult,@typeoutpar)=&parmval($$part{$which}.'.'.
+ $$name{$which}.'.type',
+ $rid,$$defaulttype{$which},$uname,$udom,$csec);
+# cascade down manually
+ my $cascadetype=$$defaulttype{$which};
+ for (my $i=11;$i>0;$i--) {
+ if ($typeoutpar[$i]) {
+ $cascadetype=$typeoutpar[$i];
+ } else {
+ $typeoutpar[$i]=$cascadetype;
+ }
+ }
+ my $parm=$$display{$which};
+
+ if ($parmlev eq 'full' || $parmlev eq 'brief') {
+ $r->print('
');
+
+ if ($parmlev eq 'full' || $parmlev eq 'brief') {
+ my $sessionval=&Apache::lonnet::EXT('resource.'.$$part{$which}.
+ '.'.$$name{$which},$$symbp{$rid});
+
+# this doesn't seem to work, and I don't think is correct
+# my $sessionvaltype=&Apache::lonnet::EXT('resource.'.$$part{$which}.
+# '.'.$$name{$which}.'.type',$symbp{$rid});
+# this seems to work
+ my $sessionvaltype=$typeoutpar[$result];
+ if (!defined($sessionvaltype)) { $sessionvaltype=$$defaulttype{$which}; }
+ $r->print('
'."\n");
+}
+
+
+=pod
+
+=item B: Given the course data hash, extractResourceInformation extracts lots of information about the course's resources into a variety of hashes.
+
+Input: See list below:
+
+=over 4
+
+=item B: An array that will contain all of the ids in the course.
+
+=item B: hash, id->type, where "type" contains the extension of the file, thus, I.
+
+=item B: hash, id->key list, will contain a comma separated list of the meta-data keys available for the given id
+
+=item B: hash, name of parameter->display value (what is the display value?)
+
+=item B: hash, part identification->text representation of part, where the text representation is "[Part $part]"
+
+=item B: hash, full key to part->display value (what's display value?)
+
+=item B: hash, ???
+
+=item B: ???
+
+=item B: hash, ???
+
+=item B: ??
+
+=item B: hash, id->full sym?
+
+=back
+
+=cut
+
+sub extractResourceInformation {
+ my $ids = shift;
+ my $typep = shift;
+ my $keyp = shift;
+ my $allparms = shift;
+ my $allparts = shift;
+ my $allkeys = shift;
+ my $allmaps = shift;
+ my $fcat = shift;
+ my $defp = shift;
+ my $mapp = shift;
+ my $symbp = shift;
+ my $maptitles=shift;
+ my $uris=shift;
+
+
+ my $navmap = Apache::lonnavmaps::navmap->new();
+ my @allres=$navmap->retrieveResources(undef,undef,1,undef,1);
+ foreach my $resource (@allres) {
+ my $id=$resource->id();
+ my ($mapid,$resid)=split(/\./,$id);
+ if ($mapid eq '0') { next; }
+ $$ids[$#$ids+1]=$id;
+ my $srcf=$resource->src();
+ $srcf=~/\.(\w+)$/;
+ $$typep{$id}=$1;
+ $$keyp{$id}='';
+ $$uris{$id}=$srcf;
+ foreach (split(/\,/,&Apache::lonnet::metadata($srcf,'allpossiblekeys'))) {
+ if ($_=~/^parameter\_(.*)/) {
+ my $key=$_;
+ my $allkey=$1;
+ $allkey=~s/\_/\./g;
+ if (&Apache::lonnet::metadata($srcf,$key.'.hidden') eq
+ 'parm') {
+ 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}=
+ &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)';
+ }
+}
+
+##################################################
+##################################################
+
+=pod
+
+=item assessparms
+
+Show assessment data and parameters. This is a large routine that should
+be simplified and shortened... someday.
+
+Inputs: $r
+
+Returns: nothing
+
+Variables used (guessed by Jeremy):
+
+=over 4
+
+=item B: ParameterS CATegories? ends up a list of the types of parameters that exist, e.g., tol, weight, acc, opendate, duedate, answerdate, sig, maxtries, type.
+
+=item B: ParameterS PaRTs? a list of the parts of a problem that we are displaying? Used to display only selected parts?
+
+=item B:
+
+=back
+
+=cut
+
+##################################################
+##################################################
+sub assessparms {
+
+ my $r=shift;
+
+ my @ids=();
+ my %symbp=();
+ my %mapp=();
+ my %typep=();
+ my %keyp=();
+ my %uris=();
+ my %maptitles=();
+
+# -------------------------------------------------------- Variable declaration
+ my %allkeys=();
+ my %allmaps=();
+ my %alllevs=();
+
+ my $uname;
+ my $udom;
+ my $uhome;
+ my $csec;
+
+ my $coursename=$env{'course.'.$env{'request.course.id'}.'.description'};
+
+ $alllevs{'Resource Level'}='full';
+ $alllevs{'Map Level'}='map';
+ $alllevs{'Course Level'}='general';
+
+ my %allparms;
+ my %allparts;
+
+ my %defp;
+
+ @ids=();
+ %symbp=();
+ %typep=();
+
+ my $message='';
+
+ $csec=$env{'form.csec'};
+
+ if ($udom=$env{'form.udom'}) {
+ } elsif ($udom=$env{'request.role.domain'}) {
+ } elsif ($udom=$env{'user.domain'}) {
+ } else {
+ $udom=$r->dir_config('lonDefDomain');
+ }
+
+ my @pscat=&Apache::loncommon::get_env_multiple('form.pscat');
+ my $pschp=$env{'form.pschp'};
+ my @psprt=&Apache::loncommon::get_env_multiple('form.psprt');
+ if (!@psprt) { $psprt[0]='0'; }
+ my $showoptions=$env{'form.showoptions'};
+
+ my $pssymb='';
+ my $parmlev='';
+ my $trimheader='';
+ my $prevvisit=$env{'form.prevvisit'};
+
+ unless ($env{'form.parmlev'}) {
+ $parmlev = 'map';
+ } else {
+ $parmlev = $env{'form.parmlev'};
+ }
+
+# ----------------------------------------------- Was this started from grades?
+
+ if (($env{'form.command'} eq 'set') && ($env{'form.url'})
+ && (!$env{'form.dis'})) {
+ my $url=$env{'form.url'};
+ $url=~s-^http://($ENV{'SERVER_NAME'}|$ENV{'HTTP_HOST'})--;
+ $pssymb=&Apache::lonnet::symbread($url);
+ if (!@pscat) { @pscat=('all'); }
+ $pschp='';
+ $parmlev = 'full';
+ $trimheader='yes';
+ } elsif ($env{'form.symb'}) {
+ $pssymb=$env{'form.symb'};
+ if (!@pscat) { @pscat=('all'); }
+ $pschp='';
+ $parmlev = 'full';
+ $trimheader='yes';
+ } else {
+ $env{'form.url'}='';
+ }
+
+ my $id=$env{'form.id'};
+ if (($id) && ($udom)) {
+ $uname=(&Apache::lonnet::idget($udom,$id))[1];
if ($uname) {
- $r->print('
');
+ } else {
+ undef $firstrow;
+ }
+
+ &print_row($r,$_,\%part,\%name,\%symbp,$rid,\%default,
+ \%type,\%display,$defbgone,$defbgtwo,
+ $parmlev,$uname,$udom,$csec);
+ }
}
}
- if ($_ eq 'title') {
- $thistitle=$metadata{$_};
+ } # end foreach ids
+# -------------------------------------------------- End entry for one resource
+ $r->print('
');
+ } # end of brief/full
+#--------------------------------------------------- Entry for parm level map
+ if ($parmlev eq 'map') {
+ my $defbgone = '"E0E099"';
+ my $defbgtwo = '"FFFF99"';
+
+ my %maplist;
+
+ if ($pschp eq 'all') {
+ %maplist = %allmaps;
+ } else {
+ %maplist = ($pschp => $mapp{$pschp});
+ }
+
+#-------------------------------------------- for each map, gather information
+ my $mapid;
+ foreach $mapid (sort {$maplist{$a} cmp $maplist{$b}} keys %maplist) {
+ my $maptitle = $maplist{$mapid};
+
+#----------------------- loop through ids and get all parameter types for map
+#----------------------------------------- and associated information
+ my %name = ();
+ my %part = ();
+ my %display = ();
+ my %type = ();
+ my %default = ();
+ my $map = 0;
+
+# $r->print("Catmarker: @catmarker \n");
+
+ foreach (@ids) {
+ ($map)=(/([\d]*?)\./);
+ my $rid = $_;
+
+# $r->print("$mapid:$map: $rid \n");
+
+ if ($map eq $mapid) {
+ my $uri=&Apache::lonnet::declutter($uris{$rid});
+# $r->print("Keys: $keyp{$rid} \n");
+
+#--------------------------------------------------------------------
+# @catmarker contains list of all possible parameters including part #s
+# $fullkeyp contains the full part/id # for the extraction of proper parameters
+# $tempkeyp contains part 0 only (no ids - ie, subparts)
+# When storing information, store as part 0
+# When requesting information, request from full part
+#-------------------------------------------------------------------
+ foreach (split(/\,/,$keyp{$rid})) {
+ my $tempkeyp = $_;
+ my $fullkeyp = $tempkeyp;
+ $tempkeyp =~ s/_\w+_/_0_/;
+
+ if ((grep $_ eq $fullkeyp, @catmarker) &&(!$name{$tempkeyp})) {
+ $part{$tempkeyp}="0";
+ $name{$tempkeyp}=&Apache::lonnet::metadata($uri,$fullkeyp.'.name');
+ $display{$tempkeyp}=&Apache::lonnet::metadata($uri,$fullkeyp.'.display');
+ unless ($display{$tempkeyp}) { $display{$tempkeyp}=''; }
+ $display{$tempkeyp}.=' ('.$name{$tempkeyp}.')';
+ $display{$tempkeyp} =~ s/_\w+_/_0_/;
+ $default{$tempkeyp}=&Apache::lonnet::metadata($uri,$fullkeyp);
+ $type{$tempkeyp}=&Apache::lonnet::metadata($uri,$fullkeyp.'.type');
+ }
+ } # end loop through keys
+ }
+ } # end loop through ids
+
+#---------------------------------------------------- print header information
+ my $foldermap=&mt($maptitle=~/^uploaded/?'Folder':'Map');
+ my $showtitle=$maptitles{$maptitle}.($maptitle!~/^uploaded/?' ['.$maptitle.']':'');
+ $r->print(<
+Set Defaults for All Resources in $foldermap
+$showtitle
+Specifically for
+ENDMAPONE
+ if ($uname) {
+ my %name=&Apache::lonnet::userenvironment($udom,$uname,
+ ('firstname','middlename','lastname','generation', 'id'));
+ my $person=$name{'firstname'}.' '.$name{'middlename'}.' '
+ .$name{'lastname'}.' '.$name{'generation'};
+ $r->print(&mt("User")." $uname \($person\) ".
+ &mt('in')." \n");
+ } else {
+ $r->print("".&mt('all').' '.&mt('users in')." \n");
}
- } keys %metadata;
- my $totalparms=$#name+1;
- $r->print('