Annotation of loncom/interface/lonparmset.pm, revision 1.210

1.1       www         1: # The LearningOnline Network with CAPA
                      2: # Handler to set parameters for assessments
                      3: #
1.210   ! www         4: # $Id: lonparmset.pm,v 1.209 2005/06/05 01:37:26 www Exp $
1.40      albertel    5: #
                      6: # Copyright Michigan State University Board of Trustees
                      7: #
                      8: # This file is part of the LearningOnline Network with CAPA (LON-CAPA).
                      9: #
                     10: # LON-CAPA is free software; you can redistribute it and/or modify
                     11: # it under the terms of the GNU General Public License as published by
                     12: # the Free Software Foundation; either version 2 of the License, or
                     13: # (at your option) any later version.
                     14: #
                     15: # LON-CAPA is distributed in the hope that it will be useful,
                     16: # but WITHOUT ANY WARRANTY; without even the implied warranty of
                     17: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                     18: # GNU General Public License for more details.
                     19: #
                     20: # You should have received a copy of the GNU General Public License
                     21: # along with LON-CAPA; if not, write to the Free Software
                     22: # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
                     23: #
                     24: # /home/httpd/html/adm/gpl.txt
                     25: #
                     26: # http://www.lon-capa.org/
                     27: #
1.59      matthew    28: ###################################################################
                     29: ###################################################################
                     30: 
                     31: =pod
                     32: 
                     33: =head1 NAME
                     34: 
                     35: lonparmset - Handler to set parameters for assessments and course
                     36: 
                     37: =head1 SYNOPSIS
                     38: 
                     39: lonparmset provides an interface to setting course parameters. 
                     40: 
                     41: =head1 DESCRIPTION
                     42: 
                     43: This module sets coursewide and assessment parameters.
                     44: 
                     45: =head1 INTERNAL SUBROUTINES
                     46: 
                     47: =over 4
                     48: 
                     49: =cut
                     50: 
                     51: ###################################################################
                     52: ###################################################################
1.1       www        53: 
                     54: package Apache::lonparmset;
                     55: 
                     56: use strict;
                     57: use Apache::lonnet;
                     58: use Apache::Constants qw(:common :http REDIRECT);
1.88      matthew    59: use Apache::lonhtmlcommon();
1.36      albertel   60: use Apache::loncommon;
1.1       www        61: use GDBM_File;
1.57      albertel   62: use Apache::lonhomework;
                     63: use Apache::lonxml;
1.130     www        64: use Apache::lonlocal;
1.197     www        65: use Apache::lonnavmaps;
1.1       www        66: 
1.198     www        67: # --- Caches local to lonparmset
1.2       www        68: 
1.199     www        69: my $parmhashid;
                     70: my %parmhash;
1.201     www        71: my $symbsid;
                     72: my %symbs;
1.198     www        73: 
                     74: # --- end local caches
                     75: 
1.59      matthew    76: ##################################################
                     77: ##################################################
                     78: 
                     79: =pod
                     80: 
                     81: =item parmval
                     82: 
                     83: Figure out a cascading parameter.
                     84: 
1.71      albertel   85: Inputs:  $what - a parameter spec (incluse part info and name I.E. 0.weight)
1.162     albertel   86:          $id   - a bighash Id number
1.71      albertel   87:          $def  - the resource's default value   'stupid emacs
                     88: 
                     89: Returns:  A list, the first item is the index into the remaining list of items of parm valuse that is the active one, the list consists of parm values at the 11 possible levels
                     90: 
1.182     albertel   91: 11 - General Course
                     92: 10 - Map or Folder level in course
                     93: 9- resource default
                     94: 8- map default
1.71      albertel   95: 7 - resource level in course
                     96: 6 - General for section
1.82      www        97: 5 - Map or Folder level for section
1.71      albertel   98: 4 - resource level in section
                     99: 3 - General for specific student
1.82      www       100: 2 - Map or Folder level for specific student
1.71      albertel  101: 1 - resource level for specific student
1.2       www       102: 
1.59      matthew   103: =cut
                    104: 
                    105: ##################################################
1.2       www       106: sub parmval {
1.187     www       107:     my ($what,$id,$def,$uname,$udom,$csec)=@_;
1.201     www       108:     return &parmval_by_symb($what,&symbcache($id),$def,$uname,$udom,$csec);
                    109: }
                    110: 
                    111: sub parmval_by_symb {
                    112:     my ($what,$symb,$def,$uname,$udom,$csec)=@_;
1.198     www       113: # load caches
1.200     www       114: 
1.198     www       115:     &cacheparmhash();
1.200     www       116: 
                    117:     my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
                    118:     my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
                    119:     my $useropt=&Apache::lonnet::get_userresdata($uname,$udom);
                    120:     my $courseopt=&Apache::lonnet::get_courseresdata($cnum,$cdom);
                    121: 
1.198     www       122: 
1.8       www       123:     my $result='';
1.44      albertel  124:     my @outpar=();
1.2       www       125: # ----------------------------------------------------- Cascading lookup scheme
1.201     www       126:     my $map=(&Apache::lonnet::decode_symb($symb))[0];    
1.10      www       127: 
1.201     www       128:     my $symbparm=$symb.'.'.$what;
                    129:     my $mapparm=$map.'___(all).'.$what;
1.10      www       130: 
1.190     albertel  131:     my $seclevel=$env{'request.course.id'}.'.['.$csec.'].'.$what;
                    132:     my $seclevelr=$env{'request.course.id'}.'.['.$csec.'].'.$symbparm;
                    133:     my $seclevelm=$env{'request.course.id'}.'.['.$csec.'].'.$mapparm;
                    134: 
                    135:     my $courselevel=$env{'request.course.id'}.'.'.$what;
                    136:     my $courselevelr=$env{'request.course.id'}.'.'.$symbparm;
                    137:     my $courselevelm=$env{'request.course.id'}.'.'.$mapparm;
1.2       www       138: 
1.11      www       139: 
                    140: 
1.182     albertel  141: # --------------------------------------------------------- first, check course
1.11      www       142: 
1.200     www       143:     if (defined($$courseopt{$courselevel})) {
                    144: 	$outpar[11]=$$courseopt{$courselevel};
1.182     albertel  145: 	$result=11;
1.43      albertel  146:     }
1.11      www       147: 
1.200     www       148:     if (defined($$courseopt{$courselevelm})) {
                    149: 	$outpar[10]=$$courseopt{$courselevelm};
1.182     albertel  150: 	$result=10;
1.43      albertel  151:     }
1.11      www       152: 
1.182     albertel  153: # ------------------------------------------------------- second, check default
                    154: 
                    155:     if (defined($def)) { $outpar[9]=$def; $result=9; }
                    156: 
                    157: # ------------------------------------------------------ third, check map parms
                    158: 
                    159:     my $thisparm=$parmhash{$symbparm};
                    160:     if (defined($thisparm)) { $outpar[8]=$thisparm; $result=8; }
                    161: 
1.200     www       162:     if (defined($$courseopt{$courselevelr})) {
                    163: 	$outpar[7]=$$courseopt{$courselevelr};
1.43      albertel  164: 	$result=7;
                    165:     }
1.11      www       166: 
1.182     albertel  167: # ------------------------------------------------------ fourth, back to course
1.71      albertel  168:     if (defined($csec)) {
1.200     www       169:         if (defined($$courseopt{$seclevel})) {
                    170: 	    $outpar[6]=$$courseopt{$seclevel};
1.43      albertel  171: 	    $result=6;
                    172: 	}
1.200     www       173:         if (defined($$courseopt{$seclevelm})) {
                    174: 	    $outpar[5]=$$courseopt{$seclevelm};
1.43      albertel  175: 	    $result=5;
                    176: 	}
                    177: 
1.200     www       178:         if (defined($$courseopt{$seclevelr})) {
1.201     www       179: 	    $outpar[4]=$$courseopt{$seclevelr};
1.43      albertel  180: 	    $result=4;
                    181: 	}
                    182:     }
1.11      www       183: 
1.182     albertel  184: # ---------------------------------------------------------- fifth, check user
1.11      www       185: 
1.71      albertel  186:     if (defined($uname)) {
1.200     www       187: 	if (defined($$useropt{$courselevel})) {
                    188: 	    $outpar[3]=$$useropt{$courselevel};
1.43      albertel  189: 	    $result=3;
                    190: 	}
1.10      www       191: 
1.200     www       192: 	if (defined($$useropt{$courselevelm})) {
                    193: 	    $outpar[2]=$$useropt{$courselevelm};
1.43      albertel  194: 	    $result=2;
                    195: 	}
1.2       www       196: 
1.200     www       197: 	if (defined($$useropt{$courselevelr})) {
                    198: 	    $outpar[1]=$$useropt{$courselevelr};
1.43      albertel  199: 	    $result=1;
                    200: 	}
                    201:     }
1.44      albertel  202:     return ($result,@outpar);
1.2       www       203: }
                    204: 
1.198     www       205: sub resetparmhash {
                    206:     $parmhashid='';
                    207: }
                    208: 
                    209: sub cacheparmhash {
                    210:     if ($parmhashid eq  $env{'request.course.fn'}) { return; }
                    211:     my %parmhashfile;
                    212:     if (tie(%parmhashfile,'GDBM_File',
                    213: 	      $env{'request.course.fn'}.'_parms.db',&GDBM_READER(),0640)) {
                    214: 	%parmhash=%parmhashfile;
                    215: 	untie %parmhashfile;
                    216: 	$parmhashid=$env{'request.course.fn'};
                    217:     }
                    218: }
                    219: 
1.203     www       220: sub resetsymbcache {
                    221:     $symbsid='';
                    222: }
                    223: 
1.201     www       224: sub symbcache {
                    225:     my $id=shift;
                    226:     if ($symbsid ne $env{'request.course.id'}) {
                    227: 	%symbs=();
                    228:     }
                    229:     unless ($symbs{$id}) {
                    230: 	my $navmap = Apache::lonnavmaps::navmap->new();
                    231: 	if ($id=~/\./) {
                    232: 	    my $resource=$navmap->getById($id);
                    233: 	    $symbs{$id}=$resource->symb();
                    234: 	} else {
                    235: 	    my $resource=$navmap->getByMapPc($id);
                    236: 	    $symbs{$id}=&Apache::lonnet::declutter($resource->src());
                    237: 	}
                    238: 	$symbsid=$env{'request.course.id'};
                    239:     }
                    240:     return $symbs{$id};
                    241: }
                    242: 
1.186     www       243: ##################################################
                    244: ##################################################
                    245: #
1.197     www       246: # Store a parameter by ID
1.186     www       247: #
                    248: # Takes
                    249: # - resource id
                    250: # - name of parameter
                    251: # - level
                    252: # - new value
                    253: # - new type
1.187     www       254: # - username
                    255: # - userdomain
                    256: 
1.186     www       257: sub storeparm {
1.187     www       258:     my ($sresid,$spnam,$snum,$nval,$ntype,$uname,$udom,$csec)=@_;
1.201     www       259:     &storeparm_by_symb(&symbcache($sresid),$spnam,$snum,$nval,$ntype,$uname,$udom,$csec);
1.197     www       260: }
                    261: 
                    262: #
                    263: # Store a parameter by symb
                    264: #
                    265: # Takes
                    266: # - symb
                    267: # - name of parameter
                    268: # - level
                    269: # - new value
                    270: # - new type
                    271: # - username
                    272: # - userdomain
                    273: 
                    274: sub storeparm_by_symb {
                    275: # ---------------------------------------------------------- Get symb, map, etc
                    276:     my ($symb,$spnam,$snum,$nval,$ntype,$uname,$udom,$csec)=@_;
                    277: # ---------------------------------------------------------- Construct prefixes
1.186     www       278:     $spnam=~s/\_([^\_]+)$/\.$1/;
1.197     www       279:     my $map=(&Apache::lonnet::decode_symb($symb))[0];    
                    280:     my $symbparm=$symb.'.'.$spnam;
                    281:     my $mapparm=$map.'___(all).'.$spnam;
                    282: 
1.190     albertel  283:     my $seclevel=$env{'request.course.id'}.'.['.$csec.'].'.$spnam;
                    284:     my $seclevelr=$env{'request.course.id'}.'.['.$csec.'].'.$symbparm;
                    285:     my $seclevelm=$env{'request.course.id'}.'.['.$csec.'].'.$mapparm;
1.186     www       286:     
1.190     albertel  287:     my $courselevel=$env{'request.course.id'}.'.'.$spnam;
                    288:     my $courselevelr=$env{'request.course.id'}.'.'.$symbparm;
                    289:     my $courselevelm=$env{'request.course.id'}.'.'.$mapparm;
1.186     www       290:     
                    291:     my $storeunder='';
                    292:     if (($snum==11) || ($snum==3)) { $storeunder=$courselevel; }
                    293:     if (($snum==10) || ($snum==2)) { $storeunder=$courselevelm; }
                    294:     if (($snum==7) || ($snum==1)) { $storeunder=$courselevelr; }
                    295:     if ($snum==6) { $storeunder=$seclevel; }
                    296:     if ($snum==5) { $storeunder=$seclevelm; }
                    297:     if ($snum==4) { $storeunder=$seclevelr; }
                    298:     
                    299:     my $delete;
                    300:     if ($nval eq '') { $delete=1;}
                    301:     my %storecontent = ($storeunder         => $nval,
                    302: 			$storeunder.'.type' => $ntype);
                    303:     my $reply='';
                    304:     if ($snum>3) {
                    305: # ---------------------------------------------------------------- Store Course
                    306: #
1.200     www       307: 	my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
                    308: 	my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
1.186     www       309: # Expire sheets
                    310: 	&Apache::lonnet::expirespread('','','studentcalc');
                    311: 	if (($snum==7) || ($snum==4)) {
1.197     www       312: 	    &Apache::lonnet::expirespread('','','assesscalc',$symb);
1.186     www       313: 	} elsif (($snum==8) || ($snum==5)) {
1.197     www       314: 	    &Apache::lonnet::expirespread('','','assesscalc',$map);
1.186     www       315: 	} else {
                    316: 	    &Apache::lonnet::expirespread('','','assesscalc');
                    317: 	}
                    318: # Store parameter
                    319: 	if ($delete) {
                    320: 	    $reply=&Apache::lonnet::del
1.200     www       321: 		('resourcedata',[keys(%storecontent)],$cdom,$cnum);
1.186     www       322: 	} else {
                    323: 	    $reply=&Apache::lonnet::cput
1.200     www       324: 		('resourcedata',\%storecontent,$cdom,$cnum);
1.186     www       325: 	}
1.200     www       326: 	&Apache::lonnet::devalidatecourseresdata($cnum,$cdom);
1.186     www       327:     } else {
                    328: # ------------------------------------------------------------------ Store User
                    329: #
                    330: # Expire sheets
                    331: 	&Apache::lonnet::expirespread($uname,$udom,'studentcalc');
                    332: 	if ($snum==1) {
                    333: 	    &Apache::lonnet::expirespread
1.197     www       334: 		($uname,$udom,'assesscalc',$symb);
1.186     www       335: 	} elsif ($snum==2) {
                    336: 	    &Apache::lonnet::expirespread
1.197     www       337: 		($uname,$udom,'assesscalc',$map);
1.186     www       338: 	} else {
                    339: 	    &Apache::lonnet::expirespread($uname,$udom,'assesscalc');
                    340: 	}
                    341: # Store parameter
                    342: 	if ($delete) {
                    343: 	    $reply=&Apache::lonnet::del
                    344: 		('resourcedata',[keys(%storecontent)],$udom,$uname);
                    345: 	} else {
                    346: 	    $reply=&Apache::lonnet::cput
                    347: 		('resourcedata',\%storecontent,$udom,$uname);
                    348: 	}
1.191     albertel  349: 	&Apache::lonnet::devalidateuserresdata($uname,$udom);
1.186     www       350:     }
                    351:     
                    352:     if ($reply=~/^error\:(.*)/) {
                    353: 	return "<font color=red>Write Error: $1</font>";
                    354:     }
                    355:     return '';
                    356: }
                    357: 
1.59      matthew   358: ##################################################
                    359: ##################################################
                    360: 
                    361: =pod
                    362: 
                    363: =item valout
                    364: 
                    365: Format a value for output.
                    366: 
                    367: Inputs:  $value, $type
                    368: 
                    369: Returns: $value, formatted for output.  If $type indicates it is a date,
                    370: localtime($value) is returned.
1.9       www       371: 
1.59      matthew   372: =cut
                    373: 
                    374: ##################################################
                    375: ##################################################
1.9       www       376: sub valout {
                    377:     my ($value,$type)=@_;
1.59      matthew   378:     my $result = '';
                    379:     # Values of zero are valid.
                    380:     if (! $value && $value ne '0') {
1.71      albertel  381: 	$result = '&nbsp;&nbsp;';
1.59      matthew   382:     } else {
1.66      www       383:         if ($type eq 'date_interval') {
                    384:             my ($sec,$min,$hour,$mday,$mon,$year)=gmtime($value);
                    385:             $year=$year-70;
                    386:             $mday--;
                    387:             if ($year) {
                    388: 		$result.=$year.' yrs ';
                    389:             }
                    390:             if ($mon) {
                    391: 		$result.=$mon.' mths ';
                    392:             }
                    393:             if ($mday) {
                    394: 		$result.=$mday.' days ';
                    395:             }
                    396:             if ($hour) {
                    397: 		$result.=$hour.' hrs ';
                    398:             }
                    399:             if ($min) {
                    400: 		$result.=$min.' mins ';
                    401:             }
                    402:             if ($sec) {
                    403: 		$result.=$sec.' secs ';
                    404:             }
                    405:             $result=~s/\s+$//;
                    406:         } elsif ($type=~/^date/) {
1.59      matthew   407:             $result = localtime($value);
                    408:         } else {
                    409:             $result = $value;
                    410:         }
                    411:     }
                    412:     return $result;
1.9       www       413: }
                    414: 
1.59      matthew   415: ##################################################
                    416: ##################################################
                    417: 
                    418: =pod
1.5       www       419: 
1.59      matthew   420: =item plink
                    421: 
                    422: Produces a link anchor.
                    423: 
                    424: Inputs: $type,$dis,$value,$marker,$return,$call
                    425: 
                    426: Returns: scalar with html code for a link which will envoke the 
                    427: javascript function 'pjump'.
                    428: 
                    429: =cut
                    430: 
                    431: ##################################################
                    432: ##################################################
1.5       www       433: sub plink {
                    434:     my ($type,$dis,$value,$marker,$return,$call)=@_;
1.23      www       435:     my $winvalue=$value;
                    436:     unless ($winvalue) {
                    437: 	if ($type=~/^date/) {
1.190     albertel  438:             $winvalue=$env{'form.recent_'.$type};
1.23      www       439:         } else {
1.190     albertel  440:             $winvalue=$env{'form.recent_'.(split(/\_/,$type))[0]};
1.23      www       441:         }
                    442:     }
1.209     www       443: 
                    444: 
1.23      www       445:     return 
1.43      albertel  446: 	'<a href="javascript:pjump('."'".$type."','".$dis."','".$winvalue."','"
                    447: 	    .$marker."','".$return."','".$call."'".');">'.
                    448: 		&valout($value,$type).'</a><a name="'.$marker.'"></a>';
1.5       www       449: }
                    450: 
1.44      albertel  451: sub startpage {
1.209     www       452:     my $r=shift;
1.99      albertel  453: 
1.120     www       454:     my $bodytag=&Apache::loncommon::bodytag('Set/Modify Course Parameters','',
1.98      www       455:                                             'onUnload="pclose()"');
1.204     www       456:     my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs(undef,'Table Mode Parameter Setting');
1.81      www       457:     my $selscript=&Apache::loncommon::studentbrowser_javascript();
1.88      matthew   458:     my $pjump_def = &Apache::lonhtmlcommon::pjump_javascript_definition();
1.183     albertel  459:     my $html=&Apache::lonxml::xmlbegin();
1.44      albertel  460:     $r->print(<<ENDHEAD);
1.183     albertel  461: $html
1.44      albertel  462: <head>
                    463: <title>LON-CAPA Course Parameters</title>
                    464: <script>
                    465: 
                    466:     function pclose() {
                    467:         parmwin=window.open("/adm/rat/empty.html","LONCAPAparms",
                    468:                  "height=350,width=350,scrollbars=no,menubar=no");
                    469:         parmwin.close();
                    470:     }
                    471: 
1.88      matthew   472:     $pjump_def
1.44      albertel  473: 
                    474:     function psub() {
                    475:         pclose();
                    476:         if (document.parmform.pres_marker.value!='') {
                    477:             document.parmform.action+='#'+document.parmform.pres_marker.value;
                    478:             var typedef=new Array();
                    479:             typedef=document.parmform.pres_type.value.split('_');
                    480:            if (document.parmform.pres_type.value!='') {
                    481:             if (typedef[0]=='date') {
                    482:                 eval('document.parmform.recent_'+
                    483:                      document.parmform.pres_type.value+
                    484: 		     '.value=document.parmform.pres_value.value;');
                    485:             } else {
                    486:                 eval('document.parmform.recent_'+typedef[0]+
                    487: 		     '.value=document.parmform.pres_value.value;');
                    488:             }
                    489: 	   }
                    490:             document.parmform.submit();
                    491:         } else {
                    492:             document.parmform.pres_value.value='';
                    493:             document.parmform.pres_marker.value='';
                    494:         }
                    495:     }
                    496: 
1.57      albertel  497:     function openWindow(url, wdwName, w, h, toolbar,scrollbar) {
                    498:         var options = "width=" + w + ",height=" + h + ",";
                    499:         options += "resizable=yes,scrollbars="+scrollbar+",status=no,";
                    500:         options += "menubar=no,toolbar="+toolbar+",location=no,directories=no";
                    501:         var newWin = window.open(url, wdwName, options);
                    502:         newWin.focus();
                    503:     }
1.44      albertel  504: </script>
1.81      www       505: $selscript
1.44      albertel  506: </head>
1.64      www       507: $bodytag
1.193     albertel  508: $breadcrumbs
                    509: <form method="post" action="/adm/parmset?action=settable" name="parmform">
1.44      albertel  510: <input type="hidden" value='' name="pres_value">
                    511: <input type="hidden" value='' name="pres_type">
                    512: <input type="hidden" value='' name="pres_marker">
1.209     www       513: <input type="hidden" value='1' name="prevvisit">
1.44      albertel  514: ENDHEAD
                    515: }
                    516: 
1.209     www       517: 
1.44      albertel  518: sub print_row {
1.201     www       519:     my ($r,$which,$part,$name,$symbp,$rid,$default,$defaulttype,$display,$defbgone,
1.187     www       520: 	$defbgtwo,$parmlev,$uname,$udom,$csec)=@_;
1.66      www       521: # get the values for the parameter in cascading order
                    522: # empty levels will remain empty
1.44      albertel  523:     my ($result,@outpar)=&parmval($$part{$which}.'.'.$$name{$which},
1.187     www       524: 				  $rid,$$default{$which},$uname,$udom,$csec);
1.66      www       525: # get the type for the parameters
                    526: # problem: these may not be set for all levels
                    527:     my ($typeresult,@typeoutpar)=&parmval($$part{$which}.'.'.
                    528:                                           $$name{$which}.'.type',
1.187     www       529: 				  $rid,$$defaulttype{$which},$uname,$udom,$csec);
1.66      www       530: # cascade down manually
1.182     albertel  531:     my $cascadetype=$$defaulttype{$which};
                    532:     for (my $i=11;$i>0;$i--) {
1.66      www       533: 	 if ($typeoutpar[$i]) { 
                    534:             $cascadetype=$typeoutpar[$i];
                    535: 	} else {
                    536:             $typeoutpar[$i]=$cascadetype;
                    537:         }
                    538:     }
1.57      albertel  539:     my $parm=$$display{$which};
                    540: 
1.203     www       541:     if ($parmlev eq 'full') {
1.57      albertel  542:         $r->print('<td bgcolor='.$defbgtwo.' align="center">'
                    543:                   .$$part{$which}.'</td>');
                    544:     } else {    
                    545:         $parm=~s|\[.*\]\s||g;
                    546:     }
                    547: 
1.159     albertel  548:     $r->print('<td bgcolor='.$defbgone.'>'.$parm.'</td>');
1.57      albertel  549:    
1.44      albertel  550:     my $thismarker=$which;
                    551:     $thismarker=~s/^parameter\_//;
                    552:     my $mprefix=$rid.'&'.$thismarker.'&';
                    553: 
1.57      albertel  554:     if ($parmlev eq 'general') {
                    555: 
                    556:         if ($uname) {
1.66      www       557:             &print_td($r,3,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display);
1.57      albertel  558:         } elsif ($csec) {
1.66      www       559:             &print_td($r,6,$defbgtwo,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); 
1.57      albertel  560:         } else {
1.182     albertel  561:             &print_td($r,11,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); 
1.57      albertel  562:         }
                    563:     } elsif ($parmlev eq 'map') {
                    564: 
                    565:         if ($uname) {
1.66      www       566:             &print_td($r,2,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display);
1.57      albertel  567:         } elsif ($csec) {
1.66      www       568:             &print_td($r,5,$defbgtwo,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display);
1.57      albertel  569:         } else {
1.182     albertel  570:             &print_td($r,10,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display);
1.57      albertel  571:         }
                    572:     } else {
                    573: 
1.182     albertel  574:         &print_td($r,11,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display);
1.57      albertel  575: 
1.203     www       576: 	&print_td($r,10,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display);
                    577: 	&print_td($r,9,'#FFDDDD',$result,\@outpar,$mprefix,$_,\@typeoutpar,$display);
                    578: 	&print_td($r,8,'#FFDDDD',$result,\@outpar,$mprefix,$_,\@typeoutpar,$display);
                    579: 	&print_td($r,7,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display);
                    580: 	
                    581: 	if ($csec) {
                    582: 	    &print_td($r,6,$defbgtwo,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display);
                    583: 	    &print_td($r,5,$defbgtwo,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display);
                    584: 	    &print_td($r,4,$defbgtwo,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display);
                    585: 	}
                    586: 	if ($uname) {
                    587: 	    &print_td($r,3,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display);
                    588: 	    &print_td($r,2,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display);
                    589: 	    &print_td($r,1,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display);
                    590: 	}
1.57      albertel  591: 
                    592:     } # end of $parmlev if/else
                    593: 
1.136     albertel  594:     $r->print('<td bgcolor=#CCCCFF align="center">'.
                    595:                   &valout($outpar[$result],$typeoutpar[$result]).'</td>');
                    596: 
1.203     www       597:     if ($parmlev eq 'full') {
1.136     albertel  598:         my $sessionval=&Apache::lonnet::EXT('resource.'.$$part{$which}.
1.201     www       599:                                         '.'.$$name{$which},$$symbp{$rid});
1.136     albertel  600:         my $sessionvaltype=$typeoutpar[$result];
                    601:         if (!defined($sessionvaltype)) { $sessionvaltype=$$defaulttype{$which}; }
                    602:         $r->print('<td bgcolor=#999999 align="center"><font color=#FFFFFF>'.
1.66      www       603:                   &valout($sessionval,$sessionvaltype).'&nbsp;'.
1.57      albertel  604:                   '</font></td>');
1.136     albertel  605:     }
1.44      albertel  606:     $r->print('</tr>');
1.57      albertel  607:     $r->print("\n");
1.44      albertel  608: }
1.59      matthew   609: 
1.44      albertel  610: sub print_td {
1.66      www       611:     my ($r,$which,$defbg,$result,$outpar,$mprefix,$value,$typeoutpar,$display)=@_;
1.57      albertel  612:     $r->print('<td bgcolor='.(($result==$which)?'"#AAFFAA"':$defbg).
1.114     www       613:               ' align="center">');
1.182     albertel  614:     if ($which<8 || $which > 9) {
1.114     www       615: 	$r->print(&plink($$typeoutpar[$which],
                    616: 			 $$display{$value},$$outpar[$which],
                    617: 			 $mprefix."$which",'parmform.pres','psub'));
                    618:     } else {
                    619: 	$r->print(&valout($$outpar[$which],$$typeoutpar[$which]));
                    620:     }
                    621:     $r->print('</td>'."\n");
1.57      albertel  622: }
                    623: 
1.201     www       624: 
1.63      bowersj2  625: =pod
                    626: 
                    627: =item B<extractResourceInformation>: Given the course data hash, extractResourceInformation extracts lots of information about the course's resources into a variety of hashes.
                    628: 
                    629: Input: See list below:
                    630: 
                    631: =over 4
                    632: 
                    633: =item B<ids>: An array that will contain all of the ids in the course.
                    634: 
                    635: =item B<typep>: hash, id->type, where "type" contains the extension of the file, thus, I<problem exam quiz assess survey form>.
                    636: 
1.171     www       637: =item B<keyp>: hash, id->key list, will contain a comma separated list of the meta-data keys available for the given id
1.63      bowersj2  638: 
                    639: =item B<allparms>: hash, name of parameter->display value (what is the display value?)
                    640: 
                    641: =item B<allparts>: hash, part identification->text representation of part, where the text representation is "[Part $part]"
                    642: 
                    643: =item B<allkeys>: hash, full key to part->display value (what's display value?)
                    644: 
                    645: =item B<allmaps>: hash, ???
                    646: 
                    647: =item B<fcat>: ???
                    648: 
                    649: =item B<defp>: hash, ???
                    650: 
                    651: =item B<mapp>: ??
                    652: 
                    653: =item B<symbp>: hash, id->full sym?
                    654: 
                    655: =back
                    656: 
                    657: =cut
                    658: 
                    659: sub extractResourceInformation {
                    660:     my $ids = shift;
                    661:     my $typep = shift;
                    662:     my $keyp = shift;
                    663:     my $allparms = shift;
                    664:     my $allparts = shift;
                    665:     my $allmaps = shift;
                    666:     my $mapp = shift;
                    667:     my $symbp = shift;
1.82      www       668:     my $maptitles=shift;
1.196     www       669:     my $uris=shift;
1.210   ! www       670:     my $keyorder=shift;
1.196     www       671: 
1.210   ! www       672:     my $keyordercnt=100;
1.63      bowersj2  673: 
1.196     www       674:     my $navmap = Apache::lonnavmaps::navmap->new();
                    675:     my @allres=$navmap->retrieveResources(undef,undef,1,undef,1);
                    676:     foreach my $resource (@allres) {
                    677: 	my $id=$resource->id();
                    678:         my ($mapid,$resid)=split(/\./,$id);
                    679: 	if ($mapid eq '0') { next; }
                    680: 	$$ids[$#$ids+1]=$id;
                    681: 	my $srcf=$resource->src();
                    682: 	$srcf=~/\.(\w+)$/;
                    683: 	$$typep{$id}=$1;
                    684: 	$$keyp{$id}='';
                    685:         $$uris{$id}=$srcf;
                    686: 	foreach (split(/\,/,&Apache::lonnet::metadata($srcf,'allpossiblekeys'))) {
                    687: 	    if ($_=~/^parameter\_(.*)/) {
                    688: 		my $key=$_;
1.209     www       689: # Hidden parameters
                    690: 		if (&Apache::lonnet::metadata($srcf,$key.'.hidden') eq 'parm') {
                    691: 		    next;
1.63      bowersj2  692: 		}
1.196     www       693: 		my $display= &Apache::lonnet::metadata($srcf,$key.'.display');
                    694: 		my $name=&Apache::lonnet::metadata($srcf,$key.'.name');
                    695: 		my $part= &Apache::lonnet::metadata($srcf,$key.'.part');
1.209     www       696: #
                    697: # allparms is a hash of parameter names
                    698: #
1.196     www       699: 		my $parmdis = $display;
1.209     www       700: 		$parmdis =~ s/\[Part.*$//g;
                    701:                 $$allparms{$name}=$parmdis;
                    702: #
                    703: # allparts is a hash of all parts
                    704: #
                    705: 		$$allparts{$part} = "Part: $part";
                    706: #
                    707: # Remember all keys going with this resource
                    708: #
1.196     www       709: 		if ($$keyp{$id}) {
                    710: 		    $$keyp{$id}.=','.$key;
1.175     albertel  711: 		} else {
1.196     www       712: 		    $$keyp{$id}=$key;
1.175     albertel  713: 		}
1.210   ! www       714: #
        !           715: # Put in order
        !           716: # 
        !           717:                 unless ($$keyorder{$key}) {
        !           718:                     $$keyorder{$key}=$keyordercnt;
        !           719:                     $keyordercnt++;
        !           720: 		}
        !           721: 
1.63      bowersj2  722: 	    }
                    723: 	}
1.196     www       724: 	$$mapp{$id}=
                    725: 	    &Apache::lonnet::declutter($resource->enclosing_map_src());
                    726: 	$$mapp{$mapid}=$$mapp{$id};
                    727: 	$$allmaps{$mapid}=$$mapp{$id};
                    728: 	if ($mapid eq '1') {
                    729: 	    $$maptitles{$mapid}='Main Course Documents';
                    730: 	} else {
                    731: 	    $$maptitles{$mapid}=&Apache::lonnet::gettitle(&Apache::lonnet::clutter($$mapp{$id}));
                    732: 	}
                    733: 	$$maptitles{$$mapp{$id}}=$$maptitles{$mapid};
                    734: 	$$symbp{$id}=&Apache::lonnet::encode_symb($$mapp{$id},$resid,$srcf);
                    735: 	$$symbp{$mapid}=$$mapp{$id}.'___(all)';
1.63      bowersj2  736:     }
                    737: }
                    738: 
1.208     www       739: 
                    740: ##################################################
                    741: ##################################################
                    742: 
                    743: sub parmmenu {
                    744:     my ($r,$allparms,$pscat)=@_;
                    745:     my $tempkey;
                    746:     $r->print(<<ENDSCRIPT);
                    747: <script type="text/javascript">
                    748:     function checkall(value, checkName) {
                    749: 	for (i=0; i<document.forms.parmform.elements.length; i++) {
                    750:             ele = document.forms.parmform.elements[i];
                    751:             if (ele.name == checkName) {
                    752:                 document.forms.parmform.elements[i].checked=value;
                    753:             }
                    754:         }
                    755:     }
1.210   ! www       756: 
        !           757:     function checkthis(thisvalue, checkName) {
        !           758: 	for (i=0; i<document.forms.parmform.elements.length; i++) {
        !           759:             ele = document.forms.parmform.elements[i];
        !           760:             if (ele.name == checkName) {
        !           761: 		if (ele.value == thisvalue) {
        !           762: 		    document.forms.parmform.elements[i].checked=true;
        !           763: 		}
        !           764:             }
        !           765:         }
        !           766:     }
        !           767: 
        !           768:     function checkdates() {
        !           769: 	checkthis('duedate','pscat');
        !           770:  	checkthis('opendate','pscat');
        !           771: 	checkthis('answerdate','pscat');
        !           772: 	checkthis('interval','pscat');
        !           773:    }
        !           774: 
        !           775:     function checkvisi() {
        !           776: 	checkthis('hiddenresource','pscat');
        !           777:  	checkthis('encrypturl','pscat');
        !           778: 	checkthis('problemstatus','pscat');
        !           779: 	checkthis('contentopen','pscat');
        !           780: 	checkthis('opendate','pscat');
        !           781:     }
        !           782: 
        !           783:     function checkparts() {
        !           784: 	checkthis('hiddenparts','pscat');
        !           785: 	checkthis('display','pscat');
        !           786: 	checkthis('ordered','pscat');
        !           787:     }
        !           788: 
        !           789:     function checkstandard() {
        !           790:         checkall(false,'pscat');
        !           791: 	checkdates();
        !           792: 	checkthis('weight','pscat');
        !           793: 	checkthis('maxtries','pscat');
        !           794:     }
        !           795: 
1.208     www       796: </script>
                    797: ENDSCRIPT
1.209     www       798:     $r->print();
1.208     www       799:     $r->print("\n<table><tr>");
                    800:     my $cnt=0;
                    801:     foreach $tempkey (sort { $$allparms{$a} cmp $$allparms{$b} }
                    802:                       keys %{$allparms} ) {
1.209     www       803: 	$r->print("\n<td><font size='-1'><input type='checkbox' name='pscat' ");
1.208     www       804: 	$r->print('value="'.$tempkey.'"');
                    805: 	if ($$pscat[0] eq "all" || grep $_ eq $tempkey, @{$pscat}) {
                    806: 	    $r->print(' checked');
                    807: 	}
1.209     www       808: 	$r->print('>'.$$allparms{$tempkey}.'</font></td>');
                    809:  	$cnt++;
                    810:         if ($cnt==3) {
                    811: 	    $r->print("</tr>\n<tr>");
                    812: 	    $cnt=0;
                    813: 	}
1.208     www       814:     }
                    815:     $r->print('
                    816: </tr><tr><td>
1.210   ! www       817: <a href="javascript:checkall(true, \'pscat\')">Select All</a>
        !           818: <a href="javascript:checkstandard()">Select Standard</a>
        !           819: </td><td>
        !           820: <a href="javascript:checkdates()">Select Dates</a>
        !           821: <a href="javascript:checkvisi()">Select Visibilities</a>
        !           822: <a href="javascript:checkparts()">Select Part Parameters</a>
        !           823: </td><td>
        !           824: <a href="javascript:checkall(false, \'pscat\')">Unselect All</a>
1.208     www       825: </td>
                    826: ');
                    827:     $r->print('</tr></table>');
                    828: }
                    829: 
1.209     www       830: sub partmenu {
                    831:     my ($r,$allparts,$psprt)=@_;
                    832:     $r->print('<select multiple name="psprt" size="5">');
1.208     www       833:     $r->print('<option value="all"');
                    834:     $r->print(' selected') unless (@{$psprt});
                    835:     $r->print('>'.&mt('All Parts').'</option>');
                    836:     my %temphash=();
                    837:     foreach (@{$psprt}) { $temphash{$_}=1; }
1.209     www       838:     foreach my $tempkey (sort keys %{$allparts}) {
1.208     www       839: 	unless ($tempkey =~ /\./) {
                    840: 	    $r->print('<option value="'.$tempkey.'"');
                    841: 	    if ($$psprt[0] eq "all" ||  $temphash{$tempkey}) {
                    842: 		$r->print(' selected');
                    843: 	    }
                    844: 	    $r->print('>'.$$allparts{$tempkey}.'</option>');
                    845: 	}
                    846:     }
1.209     www       847:     $r->print('</select>');
                    848: }
                    849: 
                    850: sub usermenu {
                    851:     my ($r,$uname,$id,$udom,$csec)=@_;
                    852:     my $chooseopt=&Apache::loncommon::select_dom_form($udom,'udom').' '.
                    853:         &Apache::loncommon::selectstudent_link('parmform','uname','udom');
                    854:     my $selscript=&Apache::loncommon::studentbrowser_javascript();
                    855:     my %lt=&Apache::lonlocal::texthash(
                    856: 		    'sg'    => "Section/Group",
                    857: 		    'fu'    => "For User",
                    858: 		    'oi'    => "or ID",
                    859: 		    'ad'    => "at Domain"
                    860: 				       );
                    861:     my %sectionhash=();
                    862:     my $sections='';
                    863:     if (&Apache::loncommon::get_sections(
                    864:                  $env{'course.'.$env{'request.course.id'}.'.domain'},
                    865:                  $env{'course.'.$env{'request.course.id'}.'.num'},
                    866: 					 \%sectionhash)) {
                    867:         $sections=$lt{'sg'}.': <select name="csec">';
                    868: 	foreach ('',sort keys %sectionhash) {
                    869: 	    $sections.='<option value="'.$_.'"'.
                    870: 		($_ eq $csec?'selected="selected"':'').'>'.$_.'</option>';
                    871:         }
                    872:         $sections.='</select>';
                    873:      }
                    874:      $r->print(<<ENDMENU);
                    875: <b>
                    876: $sections
                    877: <br />
                    878: $lt{'fu'} 
                    879: <input type="text" value="$uname" size="12" name="uname" />
                    880: $lt{'oi'}
                    881: <input type="text" value="$id" size="12" name="id" /> 
                    882: $lt{'ad'}
                    883: $chooseopt
                    884: </b>
                    885: ENDMENU
                    886: }
                    887: 
                    888: sub displaymenu {
                    889:     my ($r,$allparms,$allparts,$pscat,$psprt)=@_;
                    890:     $r->print('<table border="1"><tr><th>'.&mt('Select Parameters to View').'</th><th>'.
                    891: 	     &mt('Select Parts to View').'</th></tr><tr><td>');  
                    892:     &parmmenu($r,$allparms,$pscat);
                    893:     $r->print('</td><td>');
                    894:     &partmenu($r,$allparts,$psprt);
                    895:     $r->print('</td></tr></table>');
                    896: }
                    897: 
                    898: sub mapmenu {
                    899:     my ($r,$allmaps,$pschp,$maptitles)=@_;
                    900:     $r->print(&mt('Select Enclosing Map or Folder').' ');
                    901:     $r->print('<select name="pschp">');
                    902:     $r->print('<option value="all">'.&mt('All Maps or Folders').'</option>');
                    903:     foreach (sort {$$allmaps{$a} cmp $$allmaps{$b}} keys %{$allmaps}) {
1.208     www       904: 	$r->print('<option value="'.$_.'"');
1.209     www       905: 	if (($pschp eq $_)) { $r->print(' selected'); }
                    906: 	$r->print('>'.$$maptitles{$_}.($$allmaps{$_}!~/^uploaded/?' ['.$$allmaps{$_}.']':'').'</option>');
                    907:     }
                    908:     $r->print("</select>");
                    909: }
                    910: 
                    911: sub levelmenu {
                    912:     my ($r,$alllevs,$parmlev)=@_;
                    913:     $r->print(&mt('Select Parameter Level').
                    914: 	      &Apache::loncommon::help_open_topic('Course_Parameter_Levels').' ');
                    915:     $r->print('<select name="parmlev">');
                    916:     foreach (reverse sort keys %{$alllevs}) {
                    917: 	$r->print('<option value="'.$$alllevs{$_}.'"');
                    918: 	if ($parmlev eq $$alllevs{$_}) {
                    919: 	    $r->print(' selected'); 
                    920: 	}
                    921: 	$r->print('>'.$_.'</option>');
1.208     www       922:     }
1.209     www       923:     $r->print("</select>");
1.208     www       924: }
                    925: 
1.210   ! www       926: sub keysplit {
        !           927:     my $keyp=shift;
        !           928:     return (split(/\,/,$keyp));
        !           929: }
        !           930: 
        !           931: sub keysinorder {
        !           932:     my ($name,$keyorder)=@_;
        !           933:     return sort {
        !           934: 	$$keyorder{$a} <=> $$keyorder{$b};
        !           935:     } (keys %{$name});
        !           936: }
        !           937: 
1.59      matthew   938: ##################################################
                    939: ##################################################
                    940: 
                    941: =pod
                    942: 
                    943: =item assessparms
                    944: 
                    945: Show assessment data and parameters.  This is a large routine that should
                    946: be simplified and shortened... someday.
                    947: 
                    948: Inputs: $r
                    949: 
                    950: Returns: nothing
                    951: 
1.63      bowersj2  952: Variables used (guessed by Jeremy):
                    953: 
                    954: =over 4
                    955: 
                    956: =item B<pscat>: ParameterS CATegories? ends up a list of the types of parameters that exist, e.g., tol, weight, acc, opendate, duedate, answerdate, sig, maxtries, type.
                    957: 
                    958: =item B<psprt>: ParameterS PaRTs? a list of the parts of a problem that we are displaying? Used to display only selected parts?
                    959: 
                    960: =item B<allmaps>:
                    961: 
                    962: =back
                    963: 
1.59      matthew   964: =cut
                    965: 
                    966: ##################################################
                    967: ##################################################
1.30      www       968: sub assessparms {
1.1       www       969: 
1.43      albertel  970:     my $r=shift;
1.201     www       971: 
                    972:     my @ids=();
                    973:     my %symbp=();
                    974:     my %mapp=();
                    975:     my %typep=();
                    976:     my %keyp=();
                    977:     my %uris=();
                    978:     my %maptitles=();
                    979: 
1.2       www       980: # -------------------------------------------------------- Variable declaration
1.209     www       981: 
1.129     www       982:     my %allmaps=();
                    983:     my %alllevs=();
1.57      albertel  984: 
1.187     www       985:     my $uname;
                    986:     my $udom;
                    987:     my $uhome;
                    988:     my $csec;
                    989:  
1.190     albertel  990:     my $coursename=$env{'course.'.$env{'request.course.id'}.'.description'};
1.187     www       991: 
1.57      albertel  992:     $alllevs{'Resource Level'}='full';
                    993:     $alllevs{'Map Level'}='map';
                    994:     $alllevs{'Course Level'}='general';
                    995: 
                    996:     my %allparms;
                    997:     my %allparts;
1.210   ! www       998: #
        !           999: # Order in which these parameters will be displayed
        !          1000: #
        !          1001:     my %keyorder=('parameter_0_opendate' => 1,
        !          1002:                   'parameter_0_duedate' => 2,
        !          1003:                   'parameter_0_answerdate' => 3,
        !          1004:                   'parameter_0_interval' => 4,
        !          1005:                   'parameter_0_weight' => 5,
        !          1006:                   'parameter_0_maxtries' => 6,
        !          1007:                   'parameter_0_hinttries' => 7,
        !          1008:                   'parameter_0_contentopen' => 8,
        !          1009:                   'parameter_0_contentclose' => 9,
        !          1010:                   'parameter_0_type' => 10,
        !          1011:                   'parameter_0_problemstatus' => 11,
        !          1012:                   'parameter_0_hiddenresource' => 12,
        !          1013:                   'parameter_0_hiddenparts' => 13,
        !          1014:                   'parameter_0_display' => 14,
        !          1015:                   'parameter_0_ordered' => 15,
        !          1016:                   'parameter_0_tol' => 16,
        !          1017:                   'parameter_0_sig' => 17,
        !          1018:                   'parameter_0_turnoffunit' => 18);
1.43      albertel 1019:     @ids=();
                   1020:     %symbp=();
                   1021:     %typep=();
                   1022: 
                   1023:     my $message='';
                   1024: 
1.190     albertel 1025:     $csec=$env{'form.csec'};
1.188     www      1026: 
1.190     albertel 1027:     if      ($udom=$env{'form.udom'}) {
                   1028:     } elsif ($udom=$env{'request.role.domain'}) {
                   1029:     } elsif ($udom=$env{'user.domain'}) {
1.172     albertel 1030:     } else {
                   1031: 	$udom=$r->dir_config('lonDefDomain');
                   1032:     }
1.43      albertel 1033: 
1.134     albertel 1034:     my @pscat=&Apache::loncommon::get_env_multiple('form.pscat');
1.190     albertel 1035:     my $pschp=$env{'form.pschp'};
1.134     albertel 1036:     my @psprt=&Apache::loncommon::get_env_multiple('form.psprt');
1.76      www      1037:     if (!@psprt) { $psprt[0]='0'; }
1.57      albertel 1038: 
1.43      albertel 1039:     my $pssymb='';
1.57      albertel 1040:     my $parmlev='';
                   1041:  
1.190     albertel 1042:     unless ($env{'form.parmlev'}) {
1.57      albertel 1043:         $parmlev = 'map';
                   1044:     } else {
1.190     albertel 1045:         $parmlev = $env{'form.parmlev'};
1.57      albertel 1046:     }
1.26      www      1047: 
1.29      www      1048: # ----------------------------------------------- Was this started from grades?
                   1049: 
1.190     albertel 1050:     if (($env{'form.command'} eq 'set') && ($env{'form.url'})
                   1051: 	&& (!$env{'form.dis'})) {
                   1052: 	my $url=$env{'form.url'};
1.194     albertel 1053: 	$url=~s-^http://($ENV{'SERVER_NAME'}|$ENV{'HTTP_HOST'})--;
1.43      albertel 1054: 	$pssymb=&Apache::lonnet::symbread($url);
1.92      albertel 1055: 	if (!@pscat) { @pscat=('all'); }
1.43      albertel 1056: 	$pschp='';
1.57      albertel 1057:         $parmlev = 'full';
1.190     albertel 1058:     } elsif ($env{'form.symb'}) {
                   1059: 	$pssymb=$env{'form.symb'};
1.92      albertel 1060: 	if (!@pscat) { @pscat=('all'); }
1.43      albertel 1061: 	$pschp='';
1.57      albertel 1062:         $parmlev = 'full';
1.43      albertel 1063:     } else {
1.190     albertel 1064: 	$env{'form.url'}='';
1.43      albertel 1065:     }
                   1066: 
1.190     albertel 1067:     my $id=$env{'form.id'};
1.43      albertel 1068:     if (($id) && ($udom)) {
                   1069: 	$uname=(&Apache::lonnet::idget($udom,$id))[1];
                   1070: 	if ($uname) {
                   1071: 	    $id='';
                   1072: 	} else {
                   1073: 	    $message=
1.133     www      1074: 		"<font color=red>".&mt("Unknown ID")." '$id' ".
                   1075: 		&mt('at domain')." '$udom'</font>";
1.43      albertel 1076: 	}
                   1077:     } else {
1.190     albertel 1078: 	$uname=$env{'form.uname'};
1.43      albertel 1079:     }
                   1080:     unless ($udom) { $uname=''; }
                   1081:     $uhome='';
                   1082:     if ($uname) {
                   1083: 	$uhome=&Apache::lonnet::homeserver($uname,$udom);
                   1084:         if ($uhome eq 'no_host') {
                   1085: 	    $message=
1.133     www      1086: 		"<font color=red>".&mt("Unknown user")." '$uname' ".
                   1087: 		&mt("at domain")." '$udom'</font>";
1.43      albertel 1088: 	    $uname='';
1.12      www      1089:         } else {
1.103     albertel 1090: 	    $csec=&Apache::lonnet::getsection($udom,$uname,
1.190     albertel 1091: 					      $env{'request.course.id'});
1.43      albertel 1092: 	    if ($csec eq '-1') {
                   1093: 		$message="<font color=red>".
1.133     www      1094: 		    &mt("User")." '$uname' ".&mt("at domain")." '$udom' ".
                   1095: 		    &mt("not in this course")."</font>";
1.43      albertel 1096: 		$uname='';
1.190     albertel 1097: 		$csec=$env{'form.csec'};
1.43      albertel 1098: 	    } else {
                   1099: 		my %name=&Apache::lonnet::userenvironment($udom,$uname,
                   1100: 		      ('firstname','middlename','lastname','generation','id'));
1.133     www      1101: 		$message="\n<p>\n".&mt("Full Name").": ".
1.43      albertel 1102: 		    $name{'firstname'}.' '.$name{'middlename'}.' '
                   1103: 			.$name{'lastname'}.' '.$name{'generation'}.
1.133     www      1104: 			    "<br>\n".&mt('ID').": ".$name{'id'}.'<p>';
1.43      albertel 1105: 	    }
1.12      www      1106:         }
1.43      albertel 1107:     }
1.2       www      1108: 
1.43      albertel 1109:     unless ($csec) { $csec=''; }
1.12      www      1110: 
1.14      www      1111: # --------------------------------------------------------- Get all assessments
1.210   ! www      1112:     &extractResourceInformation(\@ids, \%typep,\%keyp, \%allparms, \%allparts, \%allmaps, 
        !          1113: 				\%mapp, \%symbp,\%maptitles,\%uris,
        !          1114: 				\%keyorder);
1.63      bowersj2 1115: 
1.57      albertel 1116:     $mapp{'0.0'} = '';
                   1117:     $symbp{'0.0'} = '';
1.99      albertel 1118: 
1.14      www      1119: # ---------------------------------------------------------- Anything to store?
1.190     albertel 1120:     if ($env{'form.pres_marker'}) {
1.205     www      1121:         my @markers=split(/\&\&\&/,$env{'form.pres_marker'});
                   1122:         my @values=split(/\&\&\&/,$env{'form.pres_value'});
                   1123:         my @types=split(/\&\&\&/,$env{'form.pres_type'});
                   1124: 	for (my $i=0;$i<=$#markers;$i++) {
                   1125: 	    $message.=&storeparm(split(/\&/,$markers[$i]),
                   1126: 				 $values[$i],
                   1127: 				 $types[$i],
                   1128: 				 $uname,$udom,$csec);
                   1129: 	}
1.68      www      1130: # ---------------------------------------------------------------- Done storing
1.130     www      1131: 	$message.='<h3>'.&mt('Changes can take up to 10 minutes before being active for all students.').&Apache::loncommon::help_open_topic('Caching').'</h3>';
1.68      www      1132:     }
1.57      albertel 1133: #----------------------------------------------- if all selected, fill in array
1.209     www      1134:     if ($pscat[0] eq "all") {@pscat = (keys %allparms);}
                   1135:     if (!@pscat) { @pscat=('duedate','opendate','answerdate','weight','maxtries') }; 
1.57      albertel 1136:     if ($psprt[0] eq "all" || !@psprt) {@psprt = (keys %allparts);}
1.2       www      1137: # ------------------------------------------------------------------ Start page
1.63      bowersj2 1138: 
1.209     www      1139:     &startpage($r);
1.57      albertel 1140: 
1.44      albertel 1141:     foreach ('tolerance','date_default','date_start','date_end',
                   1142: 	     'date_interval','int','float','string') {
                   1143: 	$r->print('<input type="hidden" value="'.
1.190     albertel 1144: 		  $env{'form.recent_'.$_}.'" name="recent_'.$_.'">');
1.44      albertel 1145:     }
1.57      albertel 1146:                         
1.44      albertel 1147:     if (!$pssymb) {
1.209     www      1148:         $r->print('<table border="1"><tr><td>');
                   1149:         &levelmenu($r,\%alllevs,$parmlev);
1.128     albertel 1150: 	if ($parmlev ne 'general') {
1.209     www      1151:             $r->print('<td>');
                   1152: 	    &mapmenu($r,\%allmaps,$pschp,\%maptitles);
                   1153: 	    $r->print('</td>');
1.128     albertel 1154: 	}
1.209     www      1155:         $r->print('</td></tr></table>');
                   1156: 	&displaymenu($r,\%allparms,\%allparts,\@pscat,\@psprt);
1.44      albertel 1157:     } else {
1.125     www      1158:         my ($map,$id,$resource)=&Apache::lonnet::decode_symb($pssymb);
1.209     www      1159:         $r->print(&mt('Specific Resource').": ".$resource.
                   1160:                   '<input type="hidden" value="'.$pssymb.'" name="symb">');
1.57      albertel 1161:     }
1.209     www      1162:     &usermenu($r,$uname,$id,$udom,$csec);    
1.57      albertel 1163: 
1.210   ! www      1164:     $r->print('<p>'.$message.'</p>');
        !          1165: 
1.209     www      1166:     $r->print('<br /><input type="submit" name="dis" value="'.&mt("Update Parameter Display").'" />');
1.57      albertel 1167: 
                   1168:     my @temp_pscat;
                   1169:     map {
                   1170:         my $cat = $_;
                   1171:         push(@temp_pscat, map { $_.'.'.$cat } @psprt);
                   1172:     } @pscat;
                   1173: 
                   1174:     @pscat = @temp_pscat;
                   1175: 
1.209     www      1176:     if (($env{'form.prevvisit'}) || ($pschp) || ($pssymb)) {
1.10      www      1177: # ----------------------------------------------------------------- Start Table
1.57      albertel 1178:         my @catmarker=map { tr|.|_|; 'parameter_'.$_; } @pscat;
1.190     albertel 1179:         my $csuname=$env{'user.name'};
                   1180:         my $csudom=$env{'user.domain'};
1.57      albertel 1181: 
1.203     www      1182:         if ($parmlev eq 'full') {
1.57      albertel 1183:            my $coursespan=$csec?8:5;
                   1184:            $r->print('<p><table border=2>');
                   1185:            $r->print('<tr><td colspan=5></td>');
1.130     www      1186:            $r->print('<th colspan='.($coursespan).'>'.&mt('Any User').'</th>');
1.57      albertel 1187:            if ($uname) {
                   1188:                $r->print("<th colspan=3 rowspan=2>");
1.130     www      1189:                $r->print(&mt("User")." $uname ".&mt('at Domain')." $udom</th>");
1.57      albertel 1190:            }
1.133     www      1191: 	   my %lt=&Apache::lonlocal::texthash(
                   1192: 				  'pie'    => "Parameter in Effect",
                   1193: 				  'csv'    => "Current Session Value",
                   1194:                                   'at'     => 'at',
                   1195:                                   'rl'     => "Resource Level",
                   1196: 				  'ic'     => 'in Course',
                   1197: 				  'aut'    => "Assessment URL and Title",
1.143     albertel 1198: 				  'type'   => 'Type',
1.133     www      1199: 				  'emof'   => "Enclosing Map or Folder",
1.143     albertel 1200: 				  'part'   => 'Part',
1.133     www      1201:                                   'pn'     => 'Parameter Name',
                   1202: 				  'def'    => 'default',
                   1203: 				  'femof'  => 'from Enclosing Map or Folder',
                   1204: 				  'gen'    => 'general',
                   1205: 				  'foremf' => 'for Enclosing Map or Folder',
                   1206: 				  'fr'     => 'for Resource'
                   1207: 					      );
1.57      albertel 1208:            $r->print(<<ENDTABLETWO);
1.133     www      1209: <th rowspan=3>$lt{'pie'}</th>
                   1210: <th rowspan=3>$lt{'csv'}<br>($csuname $lt{'at'} $csudom)</th>
1.182     albertel 1211: </tr><tr><td colspan=5></td><th colspan=2>$lt{'ic'}</th><th colspan=2>$lt{'rl'}</th>
                   1212: <th colspan=1>$lt{'ic'}</th>
                   1213: 
1.10      www      1214: ENDTABLETWO
1.57      albertel 1215:            if ($csec) {
1.133     www      1216:                 $r->print("<th colspan=3>".
                   1217: 			  &mt("in Section/Group")." $csec</th>");
1.57      albertel 1218:            }
                   1219:            $r->print(<<ENDTABLEHEADFOUR);
1.133     www      1220: </tr><tr><th>$lt{'aut'}</th><th>$lt{'type'}</th>
                   1221: <th>$lt{'emof'}</th><th>$lt{'part'}</th><th>$lt{'pn'}</th>
1.192     albertel 1222: <th>$lt{'gen'}</th><th>$lt{'foremf'}</th>
                   1223: <th>$lt{'def'}</th><th>$lt{'femof'}</th><th>$lt{'fr'}</th>
1.10      www      1224: ENDTABLEHEADFOUR
1.57      albertel 1225: 
                   1226:            if ($csec) {
1.130     www      1227:                $r->print('<th>'.&mt('general').'</th><th>'.&mt('for Enclosing Map or Folder').'</th><th>'.&mt('for Resource').'</th>');
1.57      albertel 1228:            }
                   1229: 
                   1230:            if ($uname) {
1.130     www      1231:                $r->print('<th>'.&mt('general').'</th><th>'.&mt('for Enclosing Map or Folder').'</th><th>'.&mt('for Resource').'</th>');
1.57      albertel 1232:            }
                   1233: 
                   1234:            $r->print('</tr>');
                   1235: 
                   1236:            my $defbgone='';
                   1237:            my $defbgtwo='';
                   1238: 
                   1239:            foreach (@ids) {
                   1240: 
                   1241:                 my $rid=$_;
                   1242:                 my ($inmapid)=($rid=~/\.(\d+)$/);
                   1243: 
1.152     albertel 1244:                 if ((!$pssymb && 
                   1245: 		     (($pschp eq 'all') || ($allmaps{$pschp} eq $mapp{$rid})))
                   1246: 		    ||
                   1247: 		    ($pssymb && $pssymb eq $symbp{$rid})) {
1.4       www      1248: # ------------------------------------------------------ Entry for one resource
1.184     albertel 1249:                     if ($defbgone eq '"#E0E099"') {
                   1250:                         $defbgone='"#E0E0DD"';
1.57      albertel 1251:                     } else {
1.184     albertel 1252:                         $defbgone='"#E0E099"';
1.57      albertel 1253:                     }
1.184     albertel 1254:                     if ($defbgtwo eq '"#FFFF99"') {
                   1255:                         $defbgtwo='"#FFFFDD"';
1.57      albertel 1256:                     } else {
1.184     albertel 1257:                         $defbgtwo='"#FFFF99"';
1.57      albertel 1258:                     }
                   1259:                     my $thistitle='';
                   1260:                     my %name=   ();
                   1261:                     undef %name;
                   1262:                     my %part=   ();
                   1263:                     my %display=();
                   1264:                     my %type=   ();
                   1265:                     my %default=();
1.196     www      1266:                     my $uri=&Apache::lonnet::declutter($uris{$rid});
1.57      albertel 1267: 
1.210   ! www      1268:                     foreach (&keysplit($keyp{$rid})) {
1.57      albertel 1269:                         my $tempkeyp = $_;
                   1270:                         if (grep $_ eq $tempkeyp, @catmarker) {
                   1271:                           $part{$_}=&Apache::lonnet::metadata($uri,$_.'.part');
                   1272:                           $name{$_}=&Apache::lonnet::metadata($uri,$_.'.name');
                   1273:                           $display{$_}=&Apache::lonnet::metadata($uri,$_.'.display');
                   1274:                           unless ($display{$_}) { $display{$_}=''; }
                   1275:                           $display{$_}.=' ('.$name{$_}.')';
                   1276:                           $default{$_}=&Apache::lonnet::metadata($uri,$_);
                   1277:                           $type{$_}=&Apache::lonnet::metadata($uri,$_.'.type');
                   1278:                           $thistitle=&Apache::lonnet::metadata($uri,$_.'.title');
                   1279:                         }
                   1280:                     }
                   1281:                     my $totalparms=scalar keys %name;
                   1282:                     if ($totalparms>0) {
                   1283:                         my $firstrow=1;
1.180     albertel 1284: 			my $title=&Apache::lonnet::gettitle($uri);
1.57      albertel 1285:                         $r->print('<tr><td bgcolor='.$defbgone.
                   1286:                              ' rowspan='.$totalparms.
                   1287:                              '><tt><font size=-1>'.
                   1288:                              join(' / ',split(/\//,$uri)).
                   1289:                              '</font></tt><p><b>'.
1.154     albertel 1290:                              "<a href=\"javascript:openWindow('".
                   1291: 				  &Apache::lonnet::clutter($uri).
1.57      albertel 1292:                              "', 'metadatafile', '450', '500', 'no', 'yes')\";".
1.127     albertel 1293:                              " TARGET=_self>$title");
1.57      albertel 1294: 
                   1295:                         if ($thistitle) {
                   1296:                             $r->print(' ('.$thistitle.')');
                   1297:                         }
                   1298:                         $r->print('</a></b></td>');
                   1299:                         $r->print('<td bgcolor='.$defbgtwo.
                   1300:                                       ' rowspan='.$totalparms.'>'.$typep{$rid}.
                   1301:                                       '</td>');
                   1302: 
                   1303:                         $r->print('<td bgcolor='.$defbgone.
                   1304:                                       ' rowspan='.$totalparms.
                   1305:                                       '><tt><font size=-1>');
                   1306: 
                   1307:                         $r->print(' / res / ');
                   1308:                         $r->print(join(' / ', split(/\//,$mapp{$rid})));
                   1309: 
                   1310:                         $r->print('</font></tt></td>');
                   1311: 
1.210   ! www      1312:                         foreach (&keysinorder(\%name,\%keyorder)) {
1.57      albertel 1313:                             unless ($firstrow) {
                   1314:                                 $r->print('<tr>');
                   1315:                             } else {
                   1316:                                 undef $firstrow;
                   1317:                             }
                   1318: 
1.201     www      1319:                             &print_row($r,$_,\%part,\%name,\%symbp,$rid,\%default,
1.57      albertel 1320:                                        \%type,\%display,$defbgone,$defbgtwo,
1.187     www      1321:                                        $parmlev,$uname,$udom,$csec);
1.57      albertel 1322:                         }
                   1323:                     }
                   1324:                 }
                   1325:             } # end foreach ids
1.43      albertel 1326: # -------------------------------------------------- End entry for one resource
1.57      albertel 1327:             $r->print('</table>');
1.203     www      1328:         } # end of  full
1.57      albertel 1329: #--------------------------------------------------- Entry for parm level map
                   1330:         if ($parmlev eq 'map') {
                   1331:             my $defbgone = '"E0E099"';
                   1332:             my $defbgtwo = '"FFFF99"';
                   1333: 
                   1334:             my %maplist;
                   1335: 
                   1336:             if ($pschp eq 'all') {
                   1337:                 %maplist = %allmaps; 
                   1338:             } else {
                   1339:                 %maplist = ($pschp => $mapp{$pschp});
                   1340:             }
                   1341: 
                   1342: #-------------------------------------------- for each map, gather information
                   1343:             my $mapid;
1.60      albertel 1344: 	    foreach $mapid (sort {$maplist{$a} cmp $maplist{$b}} keys %maplist) {
                   1345:                 my $maptitle = $maplist{$mapid};
1.57      albertel 1346: 
                   1347: #-----------------------  loop through ids and get all parameter types for map
                   1348: #-----------------------------------------          and associated information
                   1349:                 my %name = ();
                   1350:                 my %part = ();
                   1351:                 my %display = ();
                   1352:                 my %type = ();
                   1353:                 my %default = ();
                   1354:                 my $map = 0;
                   1355: 
                   1356: #		$r->print("Catmarker: @catmarker<br />\n");
                   1357:                
                   1358:                 foreach (@ids) {
                   1359:                   ($map)=(/([\d]*?)\./);
                   1360:                   my $rid = $_;
                   1361:         
                   1362: #                  $r->print("$mapid:$map:   $rid <br /> \n");
                   1363: 
                   1364:                   if ($map eq $mapid) {
1.196     www      1365:                     my $uri=&Apache::lonnet::declutter($uris{$rid});
1.57      albertel 1366: #                    $r->print("Keys: $keyp{$rid} <br />\n");
                   1367: 
                   1368: #--------------------------------------------------------------------
                   1369: # @catmarker contains list of all possible parameters including part #s
                   1370: # $fullkeyp contains the full part/id # for the extraction of proper parameters
                   1371: # $tempkeyp contains part 0 only (no ids - ie, subparts)
                   1372: # When storing information, store as part 0
                   1373: # When requesting information, request from full part
                   1374: #-------------------------------------------------------------------
1.210   ! www      1375:                     foreach (&keysplit($keyp{$rid})) {
1.57      albertel 1376:                       my $tempkeyp = $_;
                   1377:                       my $fullkeyp = $tempkeyp;
1.73      albertel 1378:                       $tempkeyp =~ s/_\w+_/_0_/;
1.57      albertel 1379:                       
                   1380:                       if ((grep $_ eq $fullkeyp, @catmarker) &&(!$name{$tempkeyp})) {
                   1381:                         $part{$tempkeyp}="0";
                   1382:                         $name{$tempkeyp}=&Apache::lonnet::metadata($uri,$fullkeyp.'.name');
                   1383:                         $display{$tempkeyp}=&Apache::lonnet::metadata($uri,$fullkeyp.'.display');
                   1384:                         unless ($display{$tempkeyp}) { $display{$tempkeyp}=''; }
                   1385:                         $display{$tempkeyp}.=' ('.$name{$tempkeyp}.')';
1.73      albertel 1386:                         $display{$tempkeyp} =~ s/_\w+_/_0_/;
1.57      albertel 1387:                         $default{$tempkeyp}=&Apache::lonnet::metadata($uri,$fullkeyp);
                   1388:                         $type{$tempkeyp}=&Apache::lonnet::metadata($uri,$fullkeyp.'.type');
                   1389:                       }
                   1390:                     } # end loop through keys
                   1391:                   }
                   1392:                 } # end loop through ids
                   1393:                                  
                   1394: #---------------------------------------------------- print header information
1.133     www      1395:                 my $foldermap=&mt($maptitle=~/^uploaded/?'Folder':'Map');
1.82      www      1396:                 my $showtitle=$maptitles{$maptitle}.($maptitle!~/^uploaded/?' ['.$maptitle.']':'');
1.57      albertel 1397:                 $r->print(<<ENDMAPONE);
                   1398: <center><h4>
1.135     albertel 1399: Set Defaults for All Resources in $foldermap<br />
                   1400: <font color="red"><i>$showtitle</i></font><br />
1.57      albertel 1401: Specifically for
                   1402: ENDMAPONE
                   1403:                 if ($uname) {
                   1404:                     my %name=&Apache::lonnet::userenvironment($udom,$uname,
                   1405:                       ('firstname','middlename','lastname','generation', 'id'));
                   1406:                     my $person=$name{'firstname'}.' '.$name{'middlename'}.' '
                   1407:                            .$name{'lastname'}.' '.$name{'generation'};
1.135     albertel 1408:                     $r->print(&mt("User")." <font color=\"red\"><i>$uname \($person\) </i></font> ".
1.130     www      1409:                         &mt('in')." \n");
1.57      albertel 1410:                 } else {
1.135     albertel 1411:                     $r->print("<font color=\"red\"><i>".&mt('all').'</i></font> '.&mt('users in')." \n");
1.57      albertel 1412:                 }
                   1413:             
1.135     albertel 1414:                 if ($csec) {$r->print(&mt("Section")." <font color=\"red\"><i>$csec</i></font> ".
1.130     www      1415: 				      &mt('of')." \n")};
1.57      albertel 1416: 
1.135     albertel 1417:                 $r->print("<font color=\"red\"><i>$coursename</i></font><br />");
                   1418:                 $r->print("</h4>\n");
1.57      albertel 1419: #---------------------------------------------------------------- print table
                   1420:                 $r->print('<p><table border="2">');
1.130     www      1421:                 $r->print('<tr><th>'.&mt('Parameter Name').'</th>');
                   1422:                 $r->print('<th>'.&mt('Default Value').'</th>');
                   1423:                 $r->print('<th>'.&mt('Parameter in Effect').'</th></tr>');
1.57      albertel 1424: 
1.210   ! www      1425: 	        foreach (&keysinorder(\%name,\%keyorder)) {
1.168     matthew  1426:                     $r->print('<tr>');
1.201     www      1427:                     &print_row($r,$_,\%part,\%name,\%symbp,$mapid,\%default,
1.57      albertel 1428:                            \%type,\%display,$defbgone,$defbgtwo,
1.187     www      1429:                            $parmlev,$uname,$udom,$csec);
1.57      albertel 1430:                 }
                   1431:                 $r->print("</table></center>");
                   1432:             } # end each map
                   1433:         } # end of $parmlev eq map
                   1434: #--------------------------------- Entry for parm level general (Course level)
                   1435:         if ($parmlev eq 'general') {
                   1436:             my $defbgone = '"E0E099"';
                   1437:             my $defbgtwo = '"FFFF99"';
                   1438: 
                   1439: #-------------------------------------------- for each map, gather information
                   1440:             my $mapid="0.0";
                   1441: #-----------------------  loop through ids and get all parameter types for map
                   1442: #-----------------------------------------          and associated information
                   1443:             my %name = ();
                   1444:             my %part = ();
                   1445:             my %display = ();
                   1446:             my %type = ();
                   1447:             my %default = ();
                   1448:                
                   1449:             foreach (@ids) {
                   1450:                 my $rid = $_;
                   1451:         
1.196     www      1452:                 my $uri=&Apache::lonnet::declutter($uris{$rid});
1.57      albertel 1453: 
                   1454: #--------------------------------------------------------------------
                   1455: # @catmarker contains list of all possible parameters including part #s
                   1456: # $fullkeyp contains the full part/id # for the extraction of proper parameters
                   1457: # $tempkeyp contains part 0 only (no ids - ie, subparts)
                   1458: # When storing information, store as part 0
                   1459: # When requesting information, request from full part
                   1460: #-------------------------------------------------------------------
1.210   ! www      1461:                 foreach (&keysplit($keyp{$rid})) {
1.57      albertel 1462:                   my $tempkeyp = $_;
                   1463:                   my $fullkeyp = $tempkeyp;
1.73      albertel 1464:                   $tempkeyp =~ s/_\w+_/_0_/;
1.57      albertel 1465:                   if ((grep $_ eq $fullkeyp, @catmarker) &&(!$name{$tempkeyp})) {
                   1466:                     $part{$tempkeyp}="0";
                   1467:                     $name{$tempkeyp}=&Apache::lonnet::metadata($uri,$fullkeyp.'.name');
                   1468:                     $display{$tempkeyp}=&Apache::lonnet::metadata($uri,$fullkeyp.'.display');
                   1469:                     unless ($display{$tempkeyp}) { $display{$tempkeyp}=''; }
                   1470:                     $display{$tempkeyp}.=' ('.$name{$tempkeyp}.')';
1.73      albertel 1471:                     $display{$tempkeyp} =~ s/_\w+_/_0_/;
1.57      albertel 1472:                     $default{$tempkeyp}=&Apache::lonnet::metadata($uri,$fullkeyp);
                   1473:                     $type{$tempkeyp}=&Apache::lonnet::metadata($uri,$fullkeyp.'.type');
                   1474:                   }
                   1475:                 } # end loop through keys
                   1476:             } # end loop through ids
                   1477:                                  
                   1478: #---------------------------------------------------- print header information
1.133     www      1479: 	    my $setdef=&mt("Set Defaults for All Resources in Course");
1.57      albertel 1480:             $r->print(<<ENDMAPONE);
1.133     www      1481: <center><h4>$setdef
1.135     albertel 1482: <font color="red"><i>$coursename</i></font><br />
1.57      albertel 1483: ENDMAPONE
                   1484:             if ($uname) {
                   1485:                 my %name=&Apache::lonnet::userenvironment($udom,$uname,
                   1486:                   ('firstname','middlename','lastname','generation', 'id'));
                   1487:                 my $person=$name{'firstname'}.' '.$name{'middlename'}.' '
                   1488:                        .$name{'lastname'}.' '.$name{'generation'};
1.135     albertel 1489:                 $r->print(" ".&mt("User")."<font color=\"red\"> <i>$uname \($person\) </i></font> \n");
1.57      albertel 1490:             } else {
1.135     albertel 1491:                 $r->print("<i><font color=\"red\"> ".&mt("ALL")."</i> ".&mt("USERS")."</font> \n");
1.57      albertel 1492:             }
                   1493:             
1.135     albertel 1494:             if ($csec) {$r->print(&mt("Section")."<font color=\"red\"> <i>$csec</i></font>\n")};
                   1495:             $r->print("</h4>\n");
1.57      albertel 1496: #---------------------------------------------------------------- print table
                   1497:             $r->print('<p><table border="2">');
1.130     www      1498:             $r->print('<tr><th>'.&mt('Parameter Name').'</th>');
                   1499:             $r->print('<th>'.&mt('Default Value').'</th>');
                   1500:             $r->print('<th>'.&mt('Parameter in Effect').'</th></tr>');
1.57      albertel 1501: 
1.210   ! www      1502: 	    foreach (&keysinorder(\%name,\%keyorder)) {
1.168     matthew  1503:                 $r->print('<tr>');
1.201     www      1504:                 &print_row($r,$_,\%part,\%name,\%symbp,$mapid,\%default,
1.187     www      1505:                        \%type,\%display,$defbgone,$defbgtwo,$parmlev,$uname,$udom,$csec);
1.57      albertel 1506:             }
                   1507:             $r->print("</table></center>");
                   1508:         } # end of $parmlev eq general
1.43      albertel 1509:     }
1.44      albertel 1510:     $r->print('</form></body></html>');
1.57      albertel 1511: } # end sub assessparms
1.30      www      1512: 
1.59      matthew  1513: 
                   1514: ##################################################
                   1515: ##################################################
                   1516: 
                   1517: =pod
                   1518: 
                   1519: =item crsenv
                   1520: 
1.105     matthew  1521: Show and set course data and parameters.  This is a large routine that should
1.59      matthew  1522: be simplified and shortened... someday.
                   1523: 
                   1524: Inputs: $r
                   1525: 
                   1526: Returns: nothing
                   1527: 
                   1528: =cut
                   1529: 
                   1530: ##################################################
                   1531: ##################################################
1.30      www      1532: sub crsenv {
                   1533:     my $r=shift;
                   1534:     my $setoutput='';
1.64      www      1535:     my $bodytag=&Apache::loncommon::bodytag(
                   1536:                              'Set Course Environment Parameters');
1.194     albertel 1537:     my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs(undef,
                   1538: 						    'Edit Course Environment');
1.190     albertel 1539:     my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'};
                   1540:     my $crs = $env{'course.'.$env{'request.course.id'}.'.num'};
1.105     matthew  1541: 
                   1542:     #
                   1543:     # Go through list of changes
1.190     albertel 1544:     foreach (keys %env) {
1.105     matthew  1545:         next if ($_!~/^form\.(.+)\_setparmval$/);
                   1546:         my $name  = $1;
1.190     albertel 1547:         my $value = $env{'form.'.$name.'_value'};
1.105     matthew  1548:         if ($name eq 'newp') {
1.190     albertel 1549:             $name = $env{'form.newp_name'};
1.105     matthew  1550:         }
                   1551:         if ($name eq 'url') {
                   1552:             $value=~s/^\/res\///;
                   1553:             my $bkuptime=time;
                   1554:             my @tmp = &Apache::lonnet::get
                   1555:                 ('environment',['url'],$dom,$crs);
1.130     www      1556:             $setoutput.=&mt('Backing up previous URL').': '.
1.105     matthew  1557:                 &Apache::lonnet::put
                   1558:                 ('environment',
                   1559:                  {'top level map backup '.$bkuptime => $tmp[1] },
                   1560:                  $dom,$crs).
                   1561:                      '<br>';
                   1562:         }
                   1563:         #
                   1564:         # Deal with modified default spreadsheets
                   1565:         if ($name =~ /^spreadsheet_default_(classcalc|
                   1566:                                             studentcalc|
                   1567:                                             assesscalc)$/x) {
                   1568:             my $sheettype = $1; 
                   1569:             if ($sheettype eq 'classcalc') {
                   1570:                 # no need to do anything since viewing the sheet will
                   1571:                 # cause it to be updated. 
                   1572:             } elsif ($sheettype eq 'studentcalc') {
                   1573:                 # expire all the student spreadsheets
                   1574:                 &Apache::lonnet::expirespread('','','studentcalc');
                   1575:             } else {
                   1576:                 # expire all the assessment spreadsheets 
                   1577:                 #    this includes non-default spreadsheets, but better to
                   1578:                 #    be safe than sorry.
                   1579:                 &Apache::lonnet::expirespread('','','assesscalc');
                   1580:                 # expire all the student spreadsheets
                   1581:                 &Apache::lonnet::expirespread('','','studentcalc');
1.30      www      1582:             }
1.105     matthew  1583:         }
                   1584:         #
1.107     matthew  1585:         # Deal with the enrollment dates
                   1586:         if ($name =~ /^default_enrollment_(start|end)_date$/) {
                   1587:             $value=&Apache::lonhtmlcommon::get_date_from_form($name.'_value');
                   1588:         }
1.178     raeburn  1589:         # Get existing cloners
                   1590:         my @oldcloner = ();
                   1591:         if ($name eq 'cloners') {
                   1592:             my %clonenames=&Apache::lonnet::dump('environment',$dom,$crs,'cloners');
                   1593:             if ($clonenames{'cloners'} =~ /,/) {
                   1594:                 @oldcloner = split/,/,$clonenames{'cloners'};
                   1595:             } else {
                   1596:                 $oldcloner[0] = $clonenames{'cloners'};
                   1597:             }
                   1598:         }
1.107     matthew  1599:         #
1.105     matthew  1600:         # Let the user know we made the changes
1.153     albertel 1601:         if ($name && defined($value)) {
1.178     raeburn  1602:             if ($name eq 'cloners') {
                   1603:                 $value =~ s/^,//;
                   1604:                 $value =~ s/,$//;
                   1605:             }
1.105     matthew  1606:             my $put_result = &Apache::lonnet::put('environment',
                   1607:                                                   {$name=>$value},$dom,$crs);
                   1608:             if ($put_result eq 'ok') {
1.130     www      1609:                 $setoutput.=&mt('Set').' <b>'.$name.'</b> '.&mt('to').' <b>'.$value.'</b>.<br />';
1.178     raeburn  1610:                 if ($name eq 'cloners') {
                   1611:                     &change_clone($value,\@oldcloner);
                   1612:                 }
1.179     raeburn  1613:                 # Flush the course logs so course description is immediately updated
                   1614:                 if ($name eq 'description' && defined($value)) {
                   1615:                     &Apache::lonnet::flushcourselogs();
                   1616:                 }
1.105     matthew  1617:             } else {
1.130     www      1618:                 $setoutput.=&mt('Unable to set').' <b>'.$name.'</b> '.&mt('to').
                   1619: 		    ' <b>'.$value.'</b> '.&mt('due to').' '.$put_result.'.<br />';
1.30      www      1620:             }
                   1621:         }
1.38      harris41 1622:     }
1.108     www      1623: # ------------------------- Re-init course environment entries for this session
                   1624: 
1.190     albertel 1625:     &Apache::lonnet::coursedescription($env{'request.course.id'});
1.105     matthew  1626: 
1.30      www      1627: # -------------------------------------------------------- Get parameters again
1.45      matthew  1628: 
                   1629:     my %values=&Apache::lonnet::dump('environment',$dom,$crs);
1.140     sakharuk 1630:     my $SelectStyleFile=&mt('Select Style File');
1.141     sakharuk 1631:     my $SelectSpreadsheetFile=&mt('Select Spreadsheet File');
1.30      www      1632:     my $output='';
1.45      matthew  1633:     if (! exists($values{'con_lost'})) {
1.30      www      1634:         my %descriptions=
1.140     sakharuk 1635: 	    ('url'            => '<b>'.&mt('Top Level Map').'</b> '.
1.46      matthew  1636:                                  '<a href="javascript:openbrowser'.
1.47      matthew  1637:                                  "('envform','url','sequence')\">".
1.140     sakharuk 1638:                                  &mt('Select Map').'</a><br /><font color=red> '.
                   1639:                                  &mt('Modification may make assessment data inaccessible').
                   1640:                                  '</font>',
                   1641:              'description'    => '<b>'.&mt('Course Description').'</b>',
1.158     sakharuk 1642:              'courseid'       => '<b>'.&mt('Course ID or number').
1.140     sakharuk 1643:                                  '</b><br />'.
                   1644:                                  '('.&mt('internal').', '.&mt('optional').')',
1.177     raeburn  1645:              'cloners'        => '<b>'.&mt('Users allowed to clone course').'</b><br /><tt>(user:domain,user:domain)</tt><br />'.&mt('Users with active Course Coordinator role in the course automatically have the right to clone it, and can be omitted from list.'),
1.150     www      1646:              'grading'        => '<b>'.&mt('Grading').'</b><br />'.
                   1647:                                  '<tt>"standard", "external", or "spreadsheet"</tt> '.&Apache::loncommon::help_open_topic('GradingOptions'),
1.140     sakharuk 1648:              'default_xml_style' => '<b>'.&mt('Default XML Style File').'</b> '.
1.52      www      1649:                     '<a href="javascript:openbrowser'.
                   1650:                     "('envform','default_xml_style'".
1.140     sakharuk 1651:                     ",'sty')\">$SelectStyleFile</a><br>",
1.141     sakharuk 1652:              'question.email' => '<b>'.&mt('Feedback Addresses for Resource Content Question').
                   1653:                                  '</b><br />(<tt>user:domain,'.
1.74      www      1654:                                  'user:domain(section;section;...;*;...),...</tt>)',
1.141     sakharuk 1655:              'comment.email'  => '<b>'.&mt('Feedback Addresses for Course Content Comments').'</b><br />'.
1.74      www      1656:                                  '(<tt>user:domain,user:domain(section;section;...;*;...),...</tt>)',
1.141     sakharuk 1657:              'policy.email'   => '<b>'.&mt('Feedback Addresses for Course Policy').'</b>'.
1.75      albertel 1658:                                  '<br />(<tt>user:domain,user:domain(section;section;...;*;...),...</tt>)',
1.141     sakharuk 1659:              'hideemptyrows'  => '<b>'.&mt('Hide Empty Rows in Spreadsheets').'</b><br />'.
1.158     sakharuk 1660:                                  '('.&mt('"[_1]" for default hiding','<tt>yes</tt>').')',
1.141     sakharuk 1661:              'pageseparators'  => '<b>'.&mt('Visibly Separate Items on Pages').'</b><br />'.
1.158     sakharuk 1662:                                  '('.&mt('"[_1]" for visible separation','<tt>yes</tt>').', '.
1.141     sakharuk 1663:                                  &mt('changes will not show until next login').')',
1.169     matthew  1664:              'student_classlist_view' => '<b>'.&mt('Allow students to view classlist.').'</b>'.&mt('("all":students can view all sections,"section":students can only view their own section.blank or "disabled" prevents student view.'),
1.118     matthew  1665: 
1.141     sakharuk 1666:              'plc.roles.denied'=> '<b>'.&mt('Disallow live chatroom use for Roles').
                   1667:                                   '</b><br />"<tt>st</tt>": '.
1.158     sakharuk 1668:                                   &mt('student').', "<tt>ta</tt>": '.
1.118     matthew  1669:                                   'TA, "<tt>in</tt>": '.
1.158     sakharuk 1670:                                   &mt('instructor').';<br /><tt>'.&mt('role,role,...').'</tt>) '.
1.118     matthew  1671: 	       Apache::loncommon::help_open_topic("Course_Disable_Discussion"),
                   1672:              'plc.users.denied' => 
1.141     sakharuk 1673:                           '<b>'.&mt('Disallow live chatroom use for Users').'</b><br />'.
1.118     matthew  1674:                                  '(<tt>user:domain,user:domain,...</tt>)',
                   1675: 
1.141     sakharuk 1676:              'pch.roles.denied'=> '<b>'.&mt('Disallow Resource Discussion for Roles').
                   1677:                                   '</b><br />"<tt>st</tt>": '.
1.61      albertel 1678:                                   'student, "<tt>ta</tt>": '.
                   1679:                                   'TA, "<tt>in</tt>": '.
1.75      albertel 1680:                                   'instructor;<br /><tt>role,role,...</tt>) '.
1.61      albertel 1681: 	       Apache::loncommon::help_open_topic("Course_Disable_Discussion"),
1.53      www      1682:              'pch.users.denied' => 
1.141     sakharuk 1683:                           '<b>'.&mt('Disallow Resource Discussion for Users').'</b><br />'.
1.53      www      1684:                                  '(<tt>user:domain,user:domain,...</tt>)',
1.49      matthew  1685:              'spreadsheet_default_classcalc' 
1.141     sakharuk 1686:                  => '<b>'.&mt('Default Course Spreadsheet').'</b> '.
1.50      matthew  1687:                     '<a href="javascript:openbrowser'.
                   1688:                     "('envform','spreadsheet_default_classcalc'".
1.141     sakharuk 1689:                     ",'spreadsheet')\">$SelectSpreadsheetFile</a><br />",
1.49      matthew  1690:              'spreadsheet_default_studentcalc' 
1.141     sakharuk 1691:                  => '<b>'.&mt('Default Student Spreadsheet').'</b> '.
1.50      matthew  1692:                     '<a href="javascript:openbrowser'.
                   1693:                     "('envform','spreadsheet_default_calc'".
1.141     sakharuk 1694:                     ",'spreadsheet')\">$SelectSpreadsheetFile</a><br />",
1.49      matthew  1695:              'spreadsheet_default_assesscalc' 
1.141     sakharuk 1696:                  => '<b>'.&mt('Default Assessment Spreadsheet').'</b> '.
1.50      matthew  1697:                     '<a href="javascript:openbrowser'.
                   1698:                     "('envform','spreadsheet_default_assesscalc'".
1.141     sakharuk 1699:                     ",'spreadsheet')\">$SelectSpreadsheetFile</a><br />",
1.75      albertel 1700: 	     'allow_limited_html_in_feedback'
1.141     sakharuk 1701: 	         => '<b>'.&mt('Allow limited HTML in discussion posts').'</b><br />'.
1.158     sakharuk 1702: 	            '('.&mt('Set value to "[_1]" to allow',"<tt>yes</tt>").')',
1.170     raeburn  1703:              'allow_discussion_post_editing'
                   1704:                  => '<b>'.&mt('Allow users to edit/delete their own discussion posts').'</b><br />'.
                   1705:                     '('.&mt('Set value to "[_1]" to allow',"<tt>yes</tt>").')',
1.89      albertel 1706: 	     'rndseed'
1.140     sakharuk 1707: 	         => '<b>'.&mt('Randomization algorithm used').'</b> <br />'.
                   1708:                     '<font color="red">'.&mt('Modifying this will make problems').' '.
                   1709:                     &mt('have different numbers and answers').'</font>',
1.151     albertel 1710: 	     'receiptalg'
                   1711: 	         => '<b>'.&mt('Receipt algorithm used').'</b> <br />'.
                   1712:                     &mt('This controls how receipt numbers are generated.'),
1.164     sakharuk 1713:              'suppress_tries'
                   1714:                  => '<b>'.&mt('Suppress number of tries in printing').'</b>('.
                   1715:                     &mt('yes if supress').')',
1.113     sakharuk 1716:              'problem_stream_switch'
1.141     sakharuk 1717:                  => '<b>'.&mt('Allow problems to be split over pages').'</b><br />'.
1.158     sakharuk 1718:                     ' ('.&mt('"[_1]" if allowed, anything else if not','<tt>yes</tt>').')',
1.161     sakharuk 1719:              'default_paper_size' 
                   1720:                  => '<b>'.&mt('Default paper type').'</b><br />'.
                   1721:                     ' ('.&mt('supported types').': Letter [8 1/2x11 in], Legal [8 1/2x14 in],'. 
                   1722:                     ' Tabloid [11x17 in], Executive [7 1/2x10 in], A2 [420x594 mm],'. 
                   1723:                     ' A3 [297x420 mm], A4 [210x297 mm], A5 [148x210 mm], A6 [105x148 mm])',
1.111     sakharuk 1724:              'anonymous_quiz'
1.150     www      1725:                  => '<b>'.&mt('Anonymous quiz/exam').'</b><br />'.
1.141     sakharuk 1726:                     ' (<tt><b>'.&mt('yes').'</b> '.&mt('to avoid print students names').' </tt>)',
                   1727:              'default_enrollment_start_date' => '<b>'.&mt('Default beginning date when enrolling students').'</b>',
                   1728:              'default_enrollment_end_date'   => '<b>'.&mt('Default ending date when enrolling students').'</b>',
1.150     www      1729:              'nothideprivileged'   => '<b>'.&mt('Privileged users that should not be hidden on staff listings').'</b>'.
                   1730:                                  '<br />(<tt>user:domain,user:domain,...</tt>)',
1.140     sakharuk 1731:              'languages' => '<b>'.&mt('Languages used').'</b>',
1.115     www      1732:              'disable_receipt_display'
1.141     sakharuk 1733:                  => '<b>'.&mt('Disable display of problem receipts').'</b><br />'.
1.158     sakharuk 1734:                     ' ('.&mt('"[_1]" to disable, anything else if not','<tt>yes</tt>').')',
1.163     albertel 1735: 	     'disablesigfigs'
                   1736: 	         => '<b>'.&mt('Disable checking of Significant Figures').'</b><br />'.
                   1737:                     ' ('.&mt('"[_1]" to disable, anything else if not','<tt>yes</tt>').')',
1.149     albertel 1738: 	     'tthoptions'
                   1739: 	         => '<b>'.&mt('Default set of options to pass to tth/m when converting tex').'</b>'
1.107     matthew  1740:              ); 
1.177     raeburn  1741:         my @Display_Order = ('url','description','courseid','cloners','grading',
1.107     matthew  1742:                              'default_xml_style','pageseparators',
                   1743:                              'question.email','comment.email','policy.email',
1.169     matthew  1744:                              'student_classlist_view',
1.118     matthew  1745:                              'plc.roles.denied','plc.users.denied',
1.107     matthew  1746:                              'pch.roles.denied','pch.users.denied',
                   1747:                              'allow_limited_html_in_feedback',
1.170     raeburn  1748:                              'allow_discussion_post_editing',
1.108     www      1749:                              'languages',
1.150     www      1750: 			     'nothideprivileged',
1.107     matthew  1751:                              'rndseed',
1.151     albertel 1752:                              'receiptalg',
1.107     matthew  1753:                              'problem_stream_switch',
1.164     sakharuk 1754: 			     'suppress_tries',
1.161     sakharuk 1755:                              'default_paper_size',
1.115     www      1756:                              'disable_receipt_display',
1.107     matthew  1757:                              'spreadsheet_default_classcalc',
                   1758:                              'spreadsheet_default_studentcalc',
                   1759:                              'spreadsheet_default_assesscalc', 
                   1760:                              'hideemptyrows',
                   1761:                              'default_enrollment_start_date',
                   1762:                              'default_enrollment_end_date',
1.163     albertel 1763: 			     'tthoptions',
                   1764: 			     'disablesigfigs'
1.107     matthew  1765:                              );
                   1766: 	foreach my $parameter (sort(keys(%values))) {
1.142     raeburn  1767:             unless ($parameter =~ m/^internal\./) {
                   1768:                 if (! $descriptions{$parameter}) {
                   1769:                     $descriptions{$parameter}=$parameter;
                   1770:                     push(@Display_Order,$parameter);
                   1771:                 }
                   1772:             }
1.43      albertel 1773: 	}
1.107     matthew  1774:         foreach my $parameter (@Display_Order) {
                   1775:             my $description = $descriptions{$parameter};
1.51      matthew  1776:             # onchange is javascript to automatically check the 'Set' button.
1.69      www      1777:             my $onchange = 'onFocus="javascript:window.document.forms'.
1.107     matthew  1778:                 "['envform'].elements['".$parameter."_setparmval']".
1.51      matthew  1779:                 '.checked=true;"';
1.107     matthew  1780:             $output .= '<tr><td>'.$description.'</td>';
                   1781:             if ($parameter =~ /^default_enrollment_(start|end)_date$/) {
                   1782:                 $output .= '<td>'.
                   1783:                     &Apache::lonhtmlcommon::date_setter('envform',
                   1784:                                                         $parameter.'_value',
                   1785:                                                         $values{$parameter},
                   1786:                                                         $onchange).
                   1787:                                                         '</td>';
                   1788:             } else {
                   1789:                 $output .= '<td>'.
                   1790:                     &Apache::lonhtmlcommon::textbox($parameter.'_value',
                   1791:                                                     $values{$parameter},
                   1792:                                                     40,$onchange).'</td>';
                   1793:             }
                   1794:             $output .= '<td>'.
                   1795:                 &Apache::lonhtmlcommon::checkbox($parameter.'_setparmval').
                   1796:                 '</td>';
                   1797:             $output .= "</tr>\n";
1.51      matthew  1798: 	}
1.69      www      1799:         my $onchange = 'onFocus="javascript:window.document.forms'.
1.51      matthew  1800:             '[\'envform\'].elements[\'newp_setparmval\']'.
                   1801:             '.checked=true;"';
1.130     www      1802: 	$output.='<tr><td><i>'.&mt('Create New Environment Variable').'</i><br />'.
1.51      matthew  1803: 	    '<input type="text" size=40 name="newp_name" '.
                   1804:                 $onchange.' /></td><td>'.
                   1805:             '<input type="text" size=40 name="newp_value" '.
                   1806:                 $onchange.' /></td><td>'.
                   1807: 	    '<input type="checkbox" name="newp_setparmval" /></td></tr>';
1.43      albertel 1808:     }
1.157     sakharuk 1809:     my %lt=&Apache::lonlocal::texthash(
                   1810: 		    'par'   => 'Parameter',
                   1811: 		    'val'   => 'Value',
                   1812: 		    'set'   => 'Set',
                   1813: 		    'sce'   => 'Set Course Environment'
                   1814: 				       );
                   1815: 
1.140     sakharuk 1816:     my $Parameter=&mt('Parameter');
                   1817:     my $Value=&mt('Value');
1.141     sakharuk 1818:     my $Set=&mt('Set');
1.167     albertel 1819:     my $browse_js=&Apache::loncommon::browser_and_searcher_javascript('parmset');
1.183     albertel 1820:     my $html=&Apache::lonxml::xmlbegin();
1.190     albertel 1821:     $r->print(<<ENDenv);
1.183     albertel 1822: $html
                   1823: <head>
1.46      matthew  1824: <script type="text/javascript" language="Javascript" >
1.155     albertel 1825: $browse_js
1.46      matthew  1826: </script>
1.30      www      1827: <title>LON-CAPA Course Environment</title>
                   1828: </head>
1.64      www      1829: $bodytag
1.193     albertel 1830: $breadcrumbs
                   1831: <form method="post" action="/adm/parmset?action=crsenv" name="envform">
1.30      www      1832: $setoutput
                   1833: <p>
                   1834: <table border=2>
1.157     sakharuk 1835: <tr><th>$lt{'par'}</th><th>$lt{'val'}</th><th>$lt{'set'}?</th></tr>
1.30      www      1836: $output
                   1837: </table>
1.157     sakharuk 1838: <input type="submit" name="crsenv" value="$lt{'sce'}">
1.30      www      1839: </form>
                   1840: </body>
                   1841: </html>    
1.190     albertel 1842: ENDenv
1.30      www      1843: }
1.120     www      1844: ##################################################
1.207     www      1845: # Overview mode
                   1846: ##################################################
1.124     www      1847: my $tableopen;
                   1848: 
                   1849: sub tablestart {
                   1850:     if ($tableopen) {
                   1851: 	return '';
                   1852:     } else {
                   1853: 	$tableopen=1;
1.130     www      1854: 	return '<table border="2"><tr><th>'.&mt('Parameter').'</th><th>'.
                   1855: 	    &mt('Delete').'</th><th>'.&mt('Set to ...').'</th></tr>';
1.124     www      1856:     }
                   1857: }
                   1858: 
                   1859: sub tableend {
                   1860:     if ($tableopen) {
                   1861: 	$tableopen=0;
                   1862: 	return '</table>';
                   1863:     } else {
                   1864: 	return'';
                   1865:     }
                   1866: }
                   1867: 
1.207     www      1868: sub readdata {
                   1869:     my ($crs,$dom)=@_;
                   1870: # Read coursedata
                   1871:     my $resourcedata=&Apache::lonnet::get_courseresdata($crs,$dom);
                   1872: # Read userdata
                   1873: 
                   1874:     my $classlist=&Apache::loncoursedata::get_classlist();
                   1875:     foreach (keys %$classlist) {
                   1876:         # the following undefs are for 'domain', and 'username' respectively.
                   1877:         if ($_=~/^(\w+)\:(\w+)$/) {
                   1878: 	    my ($tuname,$tudom)=($1,$2);
                   1879: 	    my $useropt=&Apache::lonnet::get_userresdata($tuname,$tudom);
                   1880:             foreach my $userkey (keys %{$useropt}) {
                   1881: 		if ($userkey=~/^$env{'request.course.id'}/) {
                   1882:                     my $newkey=$userkey;
                   1883: 		    $newkey=~s/^($env{'request.course.id'}\.)/$1\[useropt\:$tuname\:$tudom\]\./;
                   1884: 		    $$resourcedata{$newkey}=$$useropt{$userkey};
                   1885: 		}
                   1886: 	    }
                   1887: 	}
                   1888:     }
                   1889:     return $resourcedata;
                   1890: }
                   1891: 
                   1892: 
1.124     www      1893: # Setting
1.208     www      1894: 
                   1895: sub storedata {
                   1896:     my ($r,$crs,$dom)=@_;
1.207     www      1897: # Set userlevel immediately
                   1898: # Do an intermediate store of course level
                   1899:     my $olddata=&readdata($crs,$dom);
1.124     www      1900:     my %newdata=();
                   1901:     undef %newdata;
                   1902:     my @deldata=();
                   1903:     undef @deldata;
1.190     albertel 1904:     foreach (keys %env) {
1.124     www      1905: 	if ($_=~/^form\.([a-z]+)\_(.+)$/) {
                   1906: 	    my $cmd=$1;
                   1907: 	    my $thiskey=$2;
1.207     www      1908: 	    my ($tuname,$tudom)=&extractuser($thiskey);
                   1909: 	    my $tkey=$thiskey;
                   1910:             if ($tuname) {
                   1911: 		$tkey=~s/\.\[useropt\:$tuname\:$tudom\]\./\./;
                   1912: 	    }
1.124     www      1913: 	    if ($cmd eq 'set') {
1.190     albertel 1914: 		my $data=$env{$_};
1.207     www      1915: 		if ($$olddata{$thiskey} ne $data) { 
                   1916: 		    if ($tuname) {
                   1917: 			if (&Apache::lonnet::put('resourcedata',{$tkey=>$data},$tudom,$tuname) eq 'ok') {
                   1918: 			    $r->print('<br />'.&mt('Stored modified parameter for').' '.
                   1919: 				      &Apache::loncommon::plainname($tuname,$tudom));
                   1920: 			} else {
                   1921: 			    $r->print('<h2><font color="red">'.
                   1922: 				      &mt('Error storing parameters').'</font></h2>');
                   1923: 			}
                   1924: 			&Apache::lonnet::devalidateuserresdata($tuname,$tudom);
                   1925: 		    } else {
                   1926: 			$newdata{$thiskey}=$data;
                   1927:                     } 
                   1928: 		}
1.124     www      1929: 	    } elsif ($cmd eq 'del') {
1.207     www      1930: 		if ($tuname) {
                   1931: 		    if (&Apache::lonnet::del('resourcedata',[$tkey],$tudom,$tuname) eq 'ok') {
                   1932: 			$r->print('<br />'.&mt('Deleted parameter for').' '.&Apache::loncommon::plainname($tuname,$tudom));
                   1933: 		    } else {
                   1934: 			$r->print('<h2><font color="red">'.
                   1935: 				  &mt('Error deleting parameters').'</font></h2>');
                   1936: 		    }
                   1937: 		    &Apache::lonnet::devalidateuserresdata($tuname,$tudom);
                   1938: 		} else {
                   1939: 		    push (@deldata,$thiskey);
                   1940: 		}
1.124     www      1941: 	    } elsif ($cmd eq 'datepointer') {
1.190     albertel 1942: 		my $data=&Apache::lonhtmlcommon::get_date_from_form($env{$_});
1.207     www      1943: 		if (defined($data) and $$olddata{$thiskey} ne $data) { 
                   1944: 		    if ($tuname) {
                   1945: 			if (&Apache::lonnet::put('resourcedata',{$tkey=>$data},$tudom,$tuname) eq 'ok') {
                   1946: 			    $r->print('<br />'.&mt('Stored modified date for').' '.&Apache::loncommon::plainname($tuname,$tudom));
                   1947: 			} else {
                   1948: 			    $r->print('<h2><font color="red">'.
                   1949: 				      &mt('Error storing parameters').'</font></h2>');
                   1950: 			}
                   1951: 			&Apache::lonnet::devalidateuserresdata($tuname,$tudom);
                   1952: 		    } else {
                   1953: 			$newdata{$thiskey}=$data; 
                   1954: 		    }
                   1955: 		}
1.124     www      1956: 	    }
                   1957: 	}
                   1958:     }
1.207     www      1959: # Store all course level
1.144     www      1960:     my $delentries=$#deldata+1;
                   1961:     my @newdatakeys=keys %newdata;
                   1962:     my $putentries=$#newdatakeys+1;
                   1963:     if ($delentries) {
                   1964: 	if (&Apache::lonnet::del('resourcedata',\@deldata,$dom,$crs) eq 'ok') {
                   1965: 	    $r->print('<h2>'.&mt('Deleted [_1] parameter(s)</h2>',$delentries));
                   1966: 	} else {
                   1967: 	    $r->print('<h2><font color="red">'.
                   1968: 		      &mt('Error deleting parameters').'</font></h2>');
                   1969: 	}
1.205     www      1970: 	&Apache::lonnet::devalidatecourseresdata($crs,$dom);
1.144     www      1971:     }
                   1972:     if ($putentries) {
                   1973: 	if (&Apache::lonnet::put('resourcedata',\%newdata,$dom,$crs) eq 'ok') {
                   1974: 	    $r->print('<h2>'.&mt('Stored [_1] parameter(s)</h2>',$putentries));
                   1975: 	} else {
                   1976: 	    $r->print('<h2><font color="red">'.
                   1977: 		      &mt('Error storing parameters').'</font></h2>');
                   1978: 	}
1.205     www      1979: 	&Apache::lonnet::devalidatecourseresdata($crs,$dom);
1.144     www      1980:     }
1.208     www      1981: }
1.207     www      1982: 
1.208     www      1983: sub extractuser {
                   1984:     my $key=shift;
                   1985:     return ($key=~/^$env{'request.course.id'}.\[useropt\:(\w+)\:(\w+)\]\./);
                   1986: }
1.206     www      1987: 
1.208     www      1988: sub listdata {
                   1989:     my ($r,$resourcedata,$listdata)=@_;
1.207     www      1990: # Start list output
1.206     www      1991: 
1.122     www      1992:     my $oldsection='';
                   1993:     my $oldrealm='';
                   1994:     my $oldpart='';
1.123     www      1995:     my $pointer=0;
1.124     www      1996:     $tableopen=0;
1.145     www      1997:     my $foundkeys=0;
1.208     www      1998:     foreach my $thiskey (sort keys %{$listdata}) {
1.206     www      1999: 	if ($$resourcedata{$thiskey.'.type'}) {
1.207     www      2000: 	    my ($middle,$part,$name)=
                   2001: 		($thiskey=~/^$env{'request.course.id'}\.(?:(.+)\.)*([\w\s]+)\.(\w+)$/);
1.130     www      2002: 	    my $section=&mt('All Students');
1.207     www      2003: 	    if ($middle=~/^\[(.*)\]/) {
1.206     www      2004: 		my $issection=$1;
                   2005: 		if ($issection=~/^useropt\:(\w+)\:(\w+)/) {
                   2006: 		    $section=&mt('User').": ".&Apache::loncommon::plainname($1,$2);
                   2007: 		} else {
                   2008: 		    $section=&mt('Group/Section').': '.$issection;
                   2009: 		}
1.207     www      2010: 		$middle=~s/^\[(.*)\]//;
1.122     www      2011: 	    }
1.207     www      2012: 	    $middle=~s/\.+$//;
                   2013: 	    $middle=~s/^\.+//;
1.130     www      2014: 	    my $realm='<font color="red">'.&mt('All Resources').'</font>';
1.122     www      2015: 	    if ($middle=~/^(.+)\_\_\_\(all\)$/) {
1.174     albertel 2016: 		$realm='<font color="green">'.&mt('Folder/Map').': '.&Apache::lonnet::gettitle($1).' <br /><font color="#aaaaaa" size="-2">('.$1.')</font></font>';
1.122     www      2017: 	    } elsif ($middle) {
1.174     albertel 2018: 		my ($map,$id,$url)=&Apache::lonnet::decode_symb($middle);
                   2019: 		$realm='<font color="orange">'.&mt('Resource').': '.&Apache::lonnet::gettitle($middle).' <br /><font color="#aaaaaa" size="-2">('.$url.' in '.$map.' id: '.$id.')</font></font>';
1.122     www      2020: 	    }
                   2021: 	    if ($section ne $oldsection) {
1.124     www      2022: 		$r->print(&tableend()."\n<hr /><h1>$section</h1>");
1.122     www      2023: 		$oldsection=$section;
                   2024: 		$oldrealm='';
                   2025: 	    }
                   2026: 	    if ($realm ne $oldrealm) {
1.124     www      2027: 		$r->print(&tableend()."\n<h2>$realm</h2>");
1.122     www      2028: 		$oldrealm=$realm;
                   2029: 		$oldpart='';
                   2030: 	    }
                   2031: 	    if ($part ne $oldpart) {
1.124     www      2032: 		$r->print(&tableend().
1.130     www      2033: 			  "\n<h3><font color='blue'>".&mt('Part').": $part</font></h3>");
1.122     www      2034: 		$oldpart=$part;
                   2035: 	    }
1.123     www      2036: #
                   2037: # Ready to print
                   2038: #
1.124     www      2039: 	    $r->print(&tablestart().'<tr><td><b>'.$name.
                   2040: 		      ':</b></td><td><input type="checkbox" name="del_'.
                   2041: 		      $thiskey.'" /></td><td>');
1.145     www      2042: 	    $foundkeys++;
1.206     www      2043: 	    if ($$resourcedata{$thiskey.'.type'}=~/^date/) {
1.123     www      2044: 		my $jskey='key_'.$pointer;
                   2045: 		$pointer++;
                   2046: 		$r->print(
                   2047: 			  &Apache::lonhtmlcommon::date_setter('overviewform',
                   2048: 							      $jskey,
1.206     www      2049: 						      $$resourcedata{$thiskey}).
1.123     www      2050: '<input type="hidden" name="datepointer_'.$thiskey.'" value="'.$jskey.'" />'
                   2051: 			  );
                   2052: 	    } else {
                   2053: 		$r->print(
                   2054: 			  '<input type="text" name="set_'.$thiskey.'" value="'.
1.206     www      2055: 			  $$resourcedata{$thiskey}.'">');
1.123     www      2056: 	    }
1.124     www      2057: 	    $r->print('</td></tr>');
1.122     www      2058: 	}
1.121     www      2059:     }
1.208     www      2060:     return $foundkeys;
                   2061: }
                   2062: 
                   2063: sub newoverview {
                   2064:     my $r=shift;
                   2065:     my $bodytag=&Apache::loncommon::bodytag(
                   2066:                              'Set Course Assessment Parameters');
                   2067:     my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'};
                   2068:     my $crs = $env{'course.'.$env{'request.course.id'}.'.num'};
                   2069:     my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs(undef,'Overview');
                   2070:     my $html=&Apache::lonxml::xmlbegin();
                   2071:     $r->print(<<ENDOVER);
                   2072: $html
                   2073: <head>
                   2074: <title>LON-CAPA Parameters</title>
                   2075: </head>
                   2076: $bodytag
                   2077: $breadcrumbs
                   2078: <form method="post" action="/adm/parmset?action=newoverview" name="overviewform">
                   2079: ENDOVER
                   2080:    $r->print(&tableend().
                   2081: 	     '<p><input type="submit" value="'.&mt('Submit').'" /></p></form></body></html>');
                   2082: }
                   2083: 
                   2084: sub overview {
                   2085:     my $r=shift;
                   2086:     my $bodytag=&Apache::loncommon::bodytag(
                   2087:                              'Modify Course Assessment Parameters');
                   2088:     my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'};
                   2089:     my $crs = $env{'course.'.$env{'request.course.id'}.'.num'};
                   2090:     my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs(undef,'Overview');
                   2091:     my $html=&Apache::lonxml::xmlbegin();
                   2092:     $r->print(<<ENDOVER);
                   2093: $html
                   2094: <head>
                   2095: <title>LON-CAPA Parameters</title>
                   2096: </head>
                   2097: $bodytag
                   2098: $breadcrumbs
                   2099: <form method="post" action="/adm/parmset?action=setoverview" name="overviewform">
                   2100: ENDOVER
                   2101: # Store modified
                   2102: 
                   2103:     &storedata($r,$crs,$dom);
                   2104: 
                   2105: # Read modified data
                   2106: 
                   2107:     my $resourcedata=&readdata($crs,$dom);
                   2108: 
                   2109: # List data
                   2110: 
                   2111:     my $foundkeys=&listdata($r,$resourcedata,$resourcedata);
                   2112: 
1.145     www      2113:     $r->print(&tableend().'<p>'.
1.208     www      2114: 	($foundkeys?'<input type="submit" value="'.&mt('Modify Parameters').'" />':&mt('There are no parameters.')).'</p></form></body></html>');
1.120     www      2115: }
1.121     www      2116: 
1.59      matthew  2117: ##################################################
                   2118: ##################################################
1.178     raeburn  2119:                                                                                             
                   2120: =pod
                   2121:                                                                                             
                   2122: =item change clone
                   2123:                                                                                             
                   2124: Modifies the list of courses a user can clone (stored
                   2125: in the user's environemnt.db file), called when a
                   2126: change is made to the list of users allowed to clone
                   2127: a course.
                   2128:                                                                                             
                   2129: Inputs: $action,$cloner
                   2130: where $action is add or drop, and $cloner is identity of 
                   2131: user for whom cloning ability is to be changed in course. 
                   2132:                                                                                             
                   2133: Returns: 
                   2134: 
                   2135: =cut
                   2136:                                                                                             
                   2137: ##################################################
                   2138: ##################################################
                   2139: 
                   2140: 
                   2141: sub change_clone {
                   2142:     my ($clonelist,$oldcloner) = @_;
                   2143:     my ($uname,$udom);
1.190     albertel 2144:     my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
                   2145:     my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
1.178     raeburn  2146:     my $clone_crs = $cnum.':'.$cdom;
                   2147:     
                   2148:     if ($cnum && $cdom) {
                   2149:         my @allowclone = ();
                   2150:         if ($clonelist =~ /,/) {
                   2151:             @allowclone = split/,/,$clonelist;
                   2152:         } else {
                   2153:             $allowclone[0] = $clonelist;
                   2154:         }
                   2155:         foreach my $currclone (@allowclone) {
                   2156:             if (!grep/^$currclone$/,@$oldcloner) {
                   2157:                 ($uname,$udom) = split/:/,$currclone;
                   2158:                 if ($uname && $udom) {
                   2159:                     unless (&Apache::lonnet::homeserver($uname,$udom) eq 'no_host') {
                   2160:                         my %currclonecrs = &Apache::lonnet::dump('environment',$udom,$uname,'cloneable');
                   2161:                         if ($currclonecrs{'cloneable'} !~ /\Q$clone_crs\E/) {
                   2162:                             if ($currclonecrs{'cloneable'} eq '') {
                   2163:                                 $currclonecrs{'cloneable'} = $clone_crs;
                   2164:                             } else {
                   2165:                                 $currclonecrs{'cloneable'} .= ','.$clone_crs;
                   2166:                             }
                   2167:                             &Apache::lonnet::put('environment',\%currclonecrs,$udom,$uname);
                   2168:                         }
                   2169:                     }
                   2170:                 }
                   2171:             }
                   2172:         }
                   2173:         foreach my $oldclone (@$oldcloner) {
                   2174:             if (!grep/^$oldclone$/,@allowclone) {
                   2175:                 ($uname,$udom) = split/:/,$oldclone;
                   2176:                 if ($uname && $udom) {
                   2177:                     unless (&Apache::lonnet::homeserver($uname,$udom) eq 'no_host') {
                   2178:                         my %currclonecrs = &Apache::lonnet::dump('environment',$udom,$uname,'cloneable');
                   2179:                         my %newclonecrs = ();
                   2180:                         if ($currclonecrs{'cloneable'} =~ /\Q$clone_crs\E/) {
                   2181:                             if ($currclonecrs{'cloneable'} =~ /,/) {
                   2182:                                 my @currclonecrs = split/,/,$currclonecrs{'cloneable'};
                   2183:                                 foreach (@currclonecrs) {
                   2184:                                     unless ($_ eq $clone_crs) {
                   2185:                                         $newclonecrs{'cloneable'} .= $_.',';
                   2186:                                     }
                   2187:                                 }
                   2188:                                 $newclonecrs{'cloneable'} =~ s/,$//;
                   2189:                             } else {
                   2190:                                 $newclonecrs{'cloneable'} = '';
                   2191:                             }
                   2192:                             &Apache::lonnet::put('environment',\%newclonecrs,$udom,$uname);
                   2193:                         }
                   2194:                     }
                   2195:                 }
                   2196:             }
                   2197:         }
                   2198:     }
                   2199: }
                   2200: 
1.193     albertel 2201: 
                   2202: ##################################################
                   2203: ##################################################
                   2204: 
                   2205: =pod
                   2206: 
                   2207: =item * header
                   2208: 
                   2209: Output html header for page
                   2210: 
                   2211: =cut
                   2212: 
                   2213: ##################################################
                   2214: ##################################################
                   2215: sub header {
                   2216:     my $html=&Apache::lonxml::xmlbegin();
                   2217:     my $bodytag=&Apache::loncommon::bodytag('Parameter Manager');
                   2218:     my $title = &mt('LON-CAPA Parameter Manager');
                   2219:     return(<<ENDHEAD);
                   2220: $html
                   2221: <head>
                   2222: <title>$title</title>
                   2223: </head>
                   2224: $bodytag
                   2225: ENDHEAD
                   2226: }
                   2227: ##################################################
                   2228: ##################################################
                   2229: sub print_main_menu {
                   2230:     my ($r,$parm_permission)=@_;
                   2231:     #
                   2232:     $r->print(<<ENDMAINFORMHEAD);
                   2233: <form method="post" enctype="multipart/form-data"
                   2234:       action="/adm/parmset" name="studentform">
                   2235: ENDMAINFORMHEAD
                   2236: #
1.195     albertel 2237:     my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
                   2238:     my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
1.193     albertel 2239:     my @menu =
                   2240:         (
                   2241:           { text => 'Set Course Environment Parameters',
1.204     www      2242: 	    action => 'crsenv',
1.193     albertel 2243:             permission => $parm_permission,
                   2244:             },
                   2245:           { text => 'Set/Modify Course Assessment Parameters - Helper Mode',
                   2246:             url => '/adm/helper/parameter.helper',
                   2247:             permission => $parm_permission,
                   2248:             },
                   2249:           { text => 'Modify Course Assessment Parameters - Overview Mode',
                   2250:             action => 'setoverview',
                   2251:             permission => $parm_permission,
1.208     www      2252:             },          
                   2253: 	  { text => 'Set Course Assessment Parameters - Overview Mode',
                   2254:             action => 'newoverview',
                   2255:             permission => $parm_permission,
1.193     albertel 2256:             },
                   2257:           { text => 'Set/Modify Course Assessment Parameters - Table Mode',
                   2258:             action => 'settable',
                   2259:             permission => $parm_permission,
1.204     www      2260:             help => 'Cascading_Parameters',
1.193     albertel 2261:             },
                   2262: #          { text => 'Set Parameter Default Preferences',
                   2263: #            help => 'Course_View_Class_List',
                   2264: #            action => 'setdefaults',
                   2265: #            permission => $parm_permission,
                   2266: #            },
                   2267:           );
                   2268:     my $menu_html = '';
                   2269:     foreach my $menu_item (@menu) {
                   2270:         next if (! $menu_item->{'permission'});
                   2271:         $menu_html.='<p>';
                   2272:         $menu_html.='<font size="+1">';
                   2273:         if (exists($menu_item->{'url'})) {
                   2274:             $menu_html.=qq{<a href="$menu_item->{'url'}">};
                   2275:         } else {
                   2276:             $menu_html.=
                   2277:                 qq{<a href="/adm/parmset?action=$menu_item->{'action'}">};
                   2278:         }
                   2279:         $menu_html.= &mt($menu_item->{'text'}).'</a></font>';
                   2280:         if (exists($menu_item->{'help'})) {
                   2281:             $menu_html.=
                   2282:                 &Apache::loncommon::help_open_topic($menu_item->{'help'});
                   2283:         }
                   2284:         $menu_html.='</p>'.$/;
                   2285:     }
                   2286:     $r->print($menu_html);
                   2287:     return;
                   2288: }
                   2289: 
                   2290: 
                   2291: 
                   2292: 
1.178     raeburn  2293: ##################################################
                   2294: ##################################################
1.30      www      2295: 
1.59      matthew  2296: =pod
                   2297: 
1.83      bowersj2 2298: =item * handler
1.59      matthew  2299: 
                   2300: Main handler.  Calls &assessparms and &crsenv subroutines.
                   2301: 
                   2302: =cut
                   2303: ##################################################
                   2304: ##################################################
1.85      bowersj2 2305:     use Data::Dumper;
1.30      www      2306: sub handler {
1.43      albertel 2307:     my $r=shift;
1.30      www      2308: 
1.43      albertel 2309:     if ($r->header_only) {
1.126     www      2310: 	&Apache::loncommon::content_type($r,'text/html');
1.43      albertel 2311: 	$r->send_http_header;
                   2312: 	return OK;
                   2313:     }
1.193     albertel 2314:     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
1.205     www      2315: 					    ['action','state',
                   2316:                                              'pres_marker',
                   2317:                                              'pres_value',
1.206     www      2318:                                              'pres_type',
                   2319:                                              'udom','uname']);
1.131     www      2320: 
1.83      bowersj2 2321: 
1.193     albertel 2322:     &Apache::lonhtmlcommon::clear_breadcrumbs();
1.194     albertel 2323:     &Apache::lonhtmlcommon::add_breadcrumb({href=>"/adm/parmset",
                   2324: 					    text=>"Parameter Manager",
1.204     www      2325: 					    faq=>10,
1.194     albertel 2326: 					    bug=>'Instructor Interface'});
1.203     www      2327: 
1.30      www      2328: # ----------------------------------------------------- Needs to be in a course
1.194     albertel 2329:     my $parm_permission =
                   2330: 	(&Apache::lonnet::allowed('opa',$env{'request.course.id'}) ||
1.190     albertel 2331: 	 &Apache::lonnet::allowed('opa',$env{'request.course.id'}.'/'.
1.193     albertel 2332: 				  $env{'request.course.sec'}));
1.194     albertel 2333:     if ($env{'request.course.id'} &&  $parm_permission) {
1.193     albertel 2334: 
                   2335:         # Start Page
1.126     www      2336:         &Apache::loncommon::content_type($r,'text/html');
1.106     www      2337:         $r->send_http_header;
1.30      www      2338: 
1.203     www      2339: 
                   2340:         # id numbers can change on re-ordering of folders
                   2341: 
                   2342:         &resetsymbcache();
                   2343: 
1.193     albertel 2344:         #
                   2345:         # Main switch on form.action and form.state, as appropriate
                   2346:         #
                   2347:         # Check first if coming from someone else headed directly for
                   2348:         #  the table mode
                   2349:         if ((($env{'form.command'} eq 'set') && ($env{'form.url'})
                   2350: 	     && (!$env{'form.dis'})) || ($env{'form.symb'})) {
                   2351: 	    &assessparms($r);
                   2352: 
                   2353:         } elsif (! exists($env{'form.action'})) {
                   2354:             $r->print(&header());
1.194     albertel 2355:             $r->print(&Apache::lonhtmlcommon::breadcrumbs(undef,
                   2356: 							 'Parameter Manager'));
1.193     albertel 2357:             &print_main_menu($r,$parm_permission);
                   2358:         } elsif ($env{'form.action'} eq 'crsenv' && $parm_permission) {
1.194     albertel 2359:             &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=crsenv',
                   2360: 						    text=>"Course Environment"});
                   2361:             $r->print(&Apache::lonhtmlcommon::breadcrumbs(undef,
                   2362: 						   'Edit Course Environment'));
1.193     albertel 2363:             &crsenv($r); 
                   2364:         } elsif ($env{'form.action'} eq 'setoverview' && $parm_permission) {
1.194     albertel 2365:             &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=setoverview',
                   2366: 						    text=>"Overview Mode"});
1.121     www      2367: 	    &overview($r);
1.208     www      2368:         } elsif ($env{'form.action'} eq 'newoverview' && $parm_permission) {
                   2369:             &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=setoverview',
                   2370: 						    text=>"Overview Mode"});
                   2371: 	    &newoverview($r);
1.193     albertel 2372:         } elsif ($env{'form.action'} eq 'settable' && $parm_permission) {
1.194     albertel 2373:             &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=settable',
1.204     www      2374: 						    text=>"Table Mode",
                   2375: 						    help => 'Course_Setting_Parameters'});
1.121     www      2376: 	    &assessparms($r);
1.193     albertel 2377:         }
                   2378:         
1.43      albertel 2379:     } else {
1.1       www      2380: # ----------------------------- Not in a course, or not allowed to modify parms
1.190     albertel 2381: 	$env{'user.error.msg'}=
1.43      albertel 2382: 	    "/adm/parmset:opa:0:0:Cannot modify assessment parameters";
                   2383: 	return HTTP_NOT_ACCEPTABLE;
                   2384:     }
                   2385:     return OK;
1.1       www      2386: }
                   2387: 
                   2388: 1;
                   2389: __END__
                   2390: 
1.59      matthew  2391: =pod
1.38      harris41 2392: 
                   2393: =back
                   2394: 
                   2395: =cut
1.1       www      2396: 
                   2397: 
                   2398: 

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