--- loncom/interface/lonparmset.pm 2009/05/06 16:19:34 1.444 +++ loncom/interface/lonparmset.pm 2009/05/30 21:52:30 1.452 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to set parameters for assessments # -# $Id: lonparmset.pm,v 1.444 2009/05/06 16:19:34 bisitz Exp $ +# $Id: lonparmset.pm,v 1.452 2009/05/30 21:52:30 bisitz Exp $ # # Copyright Michigan State University Board of Trustees # @@ -214,19 +214,6 @@ Variables used (guessed by Jeremy): When storing information, store as part 0 When requesting information, request from full part -=item crsenv() - -Show and set course data and parameters. This is a large routine that should -be simplified and shortened... someday. - -Inputs: $r - -Returns: nothing - -=item can_modify_catsettings() - -=item assign_course_categories() - =item tablestart() =item tableend() @@ -322,7 +309,7 @@ Set portfolio metadata =item handler() : -Main handler. Calls &assessparms and &crsenv subroutines. +Main handler. Calls &assessparms subroutine. =back @@ -366,7 +353,7 @@ sub parmval_by_symb { my $result=''; my @outpar=(); # ----------------------------------------------------- Cascading lookup scheme - my $map=(&Apache::lonnet::decode_symb($symb))[0]; + my $map=(&Apache::lonnet::decode_symb($symb))[0]; $map = &Apache::lonnet::deversion($map); my $symbparm=$symb.'.'.$what; @@ -468,7 +455,7 @@ sub parmval_by_symb { # --- Caches local to lonparmset - + sub reset_caches { &resetparmhash(); &resetsymbcache(); @@ -482,7 +469,7 @@ sub reset_caches { undef($parmhashid); undef(%parmhash); } - + sub cacheparmhash { if ($parmhashid eq $env{'request.course.fn'}) { return; } my %parmhashfile; @@ -493,7 +480,7 @@ sub reset_caches { $parmhashid=$env{'request.course.fn'}; } } - + sub parmhash { my ($id) = @_; &cacheparmhash(); @@ -501,14 +488,14 @@ sub reset_caches { } } -{ +{ my $symbsid; my %symbs; sub resetsymbcache { undef($symbsid); undef(%symbs); } - + sub symbcache { my $id=shift; if ($symbsid ne $env{'request.course.id'}) { @@ -529,14 +516,14 @@ sub reset_caches { } } -{ +{ my $rulesid; my %rules; sub resetrulescache { undef($rulesid); undef(%rules); } - + sub rulescache { my $id=shift; if ($rulesid ne $env{'request.course.id'} @@ -683,7 +670,7 @@ sub storeparm_by_symb_inner { my ($symb,$spnam,$snum,$nval,$ntype,$uname,$udom,$csec,$cgroup)=@_; # ---------------------------------------------------------- Construct prefixes $spnam=~s/\_([^\_]+)$/\.$1/; - my $map=(&Apache::lonnet::decode_symb($symb))[0]; + my $map=(&Apache::lonnet::decode_symb($symb))[0]; $map = &Apache::lonnet::deversion($map); my $symbparm=$symb.'.'.$spnam; @@ -696,11 +683,11 @@ sub storeparm_by_symb_inner { my $seclevel=$env{'request.course.id'}.'.['.$csec.'].'.$spnam; my $seclevelr=$env{'request.course.id'}.'.['.$csec.'].'.$symbparm; my $seclevelm=$env{'request.course.id'}.'.['.$csec.'].'.$mapparm; - + my $courselevel=$env{'request.course.id'}.'.'.$spnam; my $courselevelr=$env{'request.course.id'}.'.'.$symbparm; my $courselevelm=$env{'request.course.id'}.'.'.$mapparm; - + my $storeunder=''; if (($snum==14) || ($snum==3)) { $storeunder=$courselevel; } if (($snum==13) || ($snum==2)) { $storeunder=$courselevelm; } @@ -712,7 +699,7 @@ sub storeparm_by_symb_inner { if ($snum==5) { $storeunder=$grplevelm; } if ($snum==4) { $storeunder=$grplevelr; } - + my $delete; if ($nval eq '') { $delete=1;} my %storecontent = ($storeunder => $nval, @@ -769,7 +756,7 @@ sub storeparm_by_symb_inner { } &Apache::lonnet::devalidateuserresdata($uname,$udom); } - + if ($reply=~/^error\:(.*)/) { return "Write Error: $1"; } @@ -926,11 +913,11 @@ sub startpage { text=>"Table Mode", help => 'Course_Setting_Parameters'}); } - my $start_page = + my $start_page = &Apache::loncommon::start_page('Set/Modify Course Parameters', &page_js(), {'add_entries' => \%loaditems,}); - my $breadcrumbs = + my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs('Table Mode Parameter Setting','Table_Mode'); $r->print(<0;$i--) { - if ($typeoutpar[$i]) { + if ($typeoutpar[$i]) { $cascadetype=$typeoutpar[$i]; } else { $typeoutpar[$i]=$cascadetype; @@ -981,7 +968,7 @@ sub print_row { $parm.='
'.&mt('Automatically sets').' '.join(', ',split(/\:/,$automatic)).'
'; } $r->print(''.$parm.''); - + my $thismarker=$which; $thismarker=~s/^parameter\_//; my $mprefix=$rid.'&'.$thismarker.'&'; @@ -995,9 +982,9 @@ sub print_row { } elsif ($cgroup) { &print_td($r,6,$defbgthree,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); } elsif ($csec) { - &print_td($r,9,$defbgtwo,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); + &print_td($r,9,$defbgtwo,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); } else { - &print_td($r,14,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); + &print_td($r,14,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); } } elsif ($parmlev eq 'map') { @@ -1034,7 +1021,7 @@ sub print_row { &print_td($r,12,'#FFDDDD',$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); &print_td($r,11,'#FFDDDD',$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); &print_td($r,10,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); - + if ($csec) { &print_td($r,9,$defbgtwo,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); &print_td($r,8,$defbgtwo,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); @@ -1046,7 +1033,7 @@ sub print_row { &print_td($r,5,$defbgthree,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); &print_td($r,4,$defbgthree,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); } - + if ($uname) { if ($othergrp) { $r->print($othergrp); @@ -1107,7 +1094,7 @@ sub print_usergroups { $courseopt); my $bgcolor = $defbg; my $grp_parm; - if (($coursereply) && ($cgroup ne $resultgroup)) { + if (($coursereply) && ($cgroup ne $resultgroup)) { if ($result > 3) { $bgcolor = '#AAFFAA'; $grp_parm = &valout($coursereply,$resulttype); @@ -1221,14 +1208,14 @@ sub extractResourceInformation { } # # Put in order -# +# unless ($$keyorder{$key}) { $$keyorder{$key}=$keyordercnt; $keyordercnt++; } } - + if (!exists($$mapp{$mapid})) { $$mapp{$id}= &Apache::lonnet::declutter($resource->enclosing_map_src()); @@ -1238,7 +1225,7 @@ sub extractResourceInformation { $$maptitles{$mapid}=&mt('Main Course Documents'); } else { $$maptitles{$mapid}= - &Apache::lonnet::gettitle($$mapp{$id}); + &Apache::lonnet::gettitle($$mapp{$id}); } $$maptitles{$$mapp{$id}}=$$maptitles{$mapid}; $$symbp{$mapid}=$$mapp{$id}.'___(all)'; @@ -1296,7 +1283,7 @@ sub parmmenu { checkthis('contentopen','pscat'); checkthis('contentclose','pscat'); } - + function checkvisi() { checkthis('hiddenresource','pscat'); @@ -1322,11 +1309,7 @@ sub parmmenu { ENDSCRIPT $r->print(); - $r->print(''); - $r->print(''); - $r->print('
'.&mt('Select Parameters to View').'
'); - $r->print(''); - $r->print('
'); + $r->print(&Apache::lonhtmlcommon::row_title(&mt('Select Parameters to View'))); $r->print("\n".''); my $cnt=0; foreach $tempkey (&keysindisplayorder($allparms,$keyorder)) { @@ -1384,16 +1367,11 @@ ENDSCRIPT .'' .'
' ); - $r->print('
'); } sub partmenu { my ($r,$allparts,$psprt)=@_; - $r->print(''); - $r->print(''); - $r->print('
'. &mt('Select Parts to View').'
'); - $r->print(''); - $r->print('
'); + $r->print(''); - $r->print('
'); } sub usermenu { @@ -1429,7 +1406,7 @@ sub usermenu { my $g_s_header=''; my $g_s_footer=''; - + if (%sectionhash) { $sections=&mt('Section:').' print(''); - $r->print(''); - $r->print('
'.&mt('Group/Section').'
'); - $r->print(''); - $r->print('
'); + if (%sectionhash || %grouphash) { + $r->print(&Apache::lonhtmlcommon::row_title(&mt('Group/Section'))); $r->print($sections.$groups); - $r->print('
'); + $r->print(&Apache::lonhtmlcommon::row_closure()); } - $r->print(''); - $r->print(''); - $r->print('
'. &mt('User').'
'); - $r->print(''); - $r->print('
'); - + + $r->print(&Apache::lonhtmlcommon::row_title(&mt('User'))); $r->print(&mt('For User [_1] or Student/Employee ID [_2] at Domain [_3]' ,'' ,' ' - ,$chooseopt)); - - $r->print('
'); + ,$chooseopt)); } sub displaymenu { my ($r,$allparms,$allparts,$pscat,$psprt,$keyorder)=@_; - $r->print('
'); - $r->print('

Step 2

'); - $r->print('
'); - $r->print(''); - - #$r->print('
'.&mt('Select Parameters to View').''. &mt('Select Parts to View').'
'); + $r->print(&Apache::lonhtmlcommon::topic_bar (2,&mt('Select Parameters'))); + $r->print(&Apache::lonhtmlcommon::start_pick_box()); &parmmenu($r,$allparms,$pscat,$keyorder); - + $r->print(&Apache::lonhtmlcommon::row_closure()); + + $r->print(&Apache::lonhtmlcommon::row_title(&mt('Select Parts to View'))); &partmenu($r,$allparts,$psprt); - $r->print('
'); + $r->print(&Apache::lonhtmlcommon::row_closure(1)); + $r->print(&Apache::lonhtmlcommon::end_pick_box()); } -sub mapmenu {## - my ($r,$allmaps,$pschp,$maptitles)=@_; - $r->print(''); - $r->print(''); - $r->print('
'.&mt('Select Enclosing Map or Folder').'
'); - $r->print(''); - $r->print('
'); +sub mapmenu { + my ($r,$allmaps,$pschp,$maptitles)=@_; + + $r->print(&Apache::lonhtmlcommon::row_title(&mt('Select Enclosing Map or Folder'))); $r->print('"); - $r->print('
'); + } sub levelmenu { - my ($r,$alllevs,$parmlev)=@_; - $r->print(''); - $r->print(''); - $r->print('
'.&mt('Select Parameter Level').&Apache::loncommon::help_open_topic('Course_Parameter_Levels').'
'); - $r->print(''); - $r->print('
'); + my ($r,$alllevs,$parmlev)=@_; + + $r->print(&Apache::lonhtmlcommon::row_title(&mt('Select Parameter Level').&Apache::loncommon::help_open_topic('Course_Parameter_Levels'))); $r->print('"); - $r->print('
'); } @@ -1702,7 +1661,7 @@ sub assessparms { my $csec; my $cgroup; my @usersgroups = (); - + my $coursename=$env{'course.'.$env{'request.course.id'}.'.description'}; $alllevs{'Resource Level'}='full'; @@ -1739,7 +1698,7 @@ sub assessparms { my $pssymb=''; my $parmlev=''; - + unless ($env{'form.parmlev'}) { $parmlev = 'map'; } else { @@ -1790,7 +1749,7 @@ sub assessparms { } else { $csec=&Apache::lonnet::getsection($udom,$uname, $env{'request.course.id'}); - + if ($csec eq '-1') { $message=''. &mt("User")." '$uname' ".&mt("at domain")." '$udom' ". @@ -1820,7 +1779,7 @@ sub assessparms { unless ($cgroup) { $cgroup=''; } # --------------------------------------------------------- Get all assessments - &extractResourceInformation(\@ids, \%typep,\%keyp, \%allparms, \%allparts, \%allmaps, + &extractResourceInformation(\@ids, \%typep,\%keyp, \%allparms, \%allparts, \%allmaps, \%mapp, \%symbp,\%maptitles,\%uris, \%keyorder); @@ -1876,7 +1835,7 @@ sub assessparms { } #----------------------------------------------- if all selected, fill in array if ($pscat[0] eq "all") {@pscat = (keys %allparms);} - if (!@pscat) { @pscat=('duedate','opendate','answerdate','weight','maxtries') }; + if (!@pscat) { @pscat=('duedate','opendate','answerdate','weight','maxtries') }; if ($psprt[0] eq "all" || !@psprt) {@psprt = (keys %allparts);} # ------------------------------------------------------------------ Start page @@ -1888,22 +1847,21 @@ sub assessparms { &HTML::Entities::encode($env{'form.recent_'.$_},'"&<>'). '" name="recent_'.$_.'" />'); } - - if (!$pssymb) { - $r->print('
'); - $r->print('

Step 1

'); - $r->print('
'); - $r->print(''); + + if (!$pssymb) { + $r->print(&Apache::lonhtmlcommon::topic_bar (1,&mt('General Parameters'))); + $r->print(&Apache::lonhtmlcommon::start_pick_box()); + &levelmenu($r,\%alllevs,$parmlev); - + if ($parmlev ne 'general') { - + $r->print(&Apache::lonhtmlcommon::row_closure()); &mapmenu($r,\%allmaps,$pschp,\%maptitles); - } - $r->print('
'); - $r->print('
'); - $r->print('
'); + + $r->print(&Apache::lonhtmlcommon::row_closure(1)); + $r->print(&Apache::lonhtmlcommon::end_pick_box()); + &displaymenu($r,\%allparms,\%allparts,\@pscat,\@psprt,\%keyorder); } else { my ($map,$id,$resource)=&Apache::lonnet::decode_symb($pssymb); @@ -1913,14 +1871,12 @@ sub assessparms { '

'); } - $r->print('
'); - $r->print('

Step 3

'); - $r->print('
'); - $r->print(''); - &usermenu($r,$uname,$id,$udom,$csec,$cgroup,$parmlev,\@usersgroups); - $r->print('
'); - $r->print('
'); - $r->print('
'); + $r->print(&Apache::lonhtmlcommon::topic_bar (3,&mt('User Selection'))); + $r->print(&Apache::lonhtmlcommon::start_pick_box()); + &usermenu($r,$uname,$id,$udom,$csec,$cgroup,$parmlev,\@usersgroups); + $r->print(&Apache::lonhtmlcommon::row_closure(1)); + $r->print(&Apache::lonhtmlcommon::end_pick_box()); + $r->print('

'.$message.'

'); @@ -1945,8 +1901,8 @@ sub assessparms { my $userspan=3; if ($cgroup ne '') { $coursespan += 3; - } - + } + $r->print('

'); $r->print(''); $r->print(''); @@ -2022,7 +1978,7 @@ ENDTABLEHEADFOUR my $rid=$_; my ($inmapid)=($rid=~/\.(\d+)$/); - if ((!$pssymb && + if ((!$pssymb && (($pschp eq 'all') || ($allmaps{$pschp} eq $mapp{$rid}))) || ($pssymb && $pssymb eq $symbp{$rid})) { @@ -2127,7 +2083,7 @@ ENDTABLEHEADFOUR my %maplist; if ($pschp eq 'all') { - %maplist = %allmaps; + %maplist = %allmaps; } else { %maplist = ($pschp => $mapp{$pschp}); } @@ -2147,11 +2103,11 @@ ENDTABLEHEADFOUR my $map = 0; # $r->print("Catmarker: @catmarker
\n"); - + foreach (@ids) { ($map)=(/([\d]*?)\./); my $rid = $_; - + # $r->print("$mapid:$map: $rid
\n"); if ($map eq $mapid) { @@ -2169,7 +2125,7 @@ ENDTABLEHEADFOUR my $tempkeyp = $_; my $fullkeyp = $tempkeyp; $tempkeyp =~ s/_\w+_/_0_/; - + if ((grep $_ eq $fullkeyp, @catmarker) &&(!$name{$tempkeyp})) { $part{$tempkeyp}="0"; $name{$tempkeyp}=&Apache::lonnet::metadata($uri,$fullkeyp.'.name'); @@ -2192,7 +2148,7 @@ ENDTABLEHEADFOUR } # end loop through keys } } # end loop through ids - + #---------------------------------------------------- print header information my $foldermap=&mt($maptitle=~/^uploaded/?'Folder':'Map'); my $showtitle=$maptitles{$maptitle}.($maptitle!~/^uploaded/?' ['.$maptitle.']':''); @@ -2255,10 +2211,10 @@ ENDTABLEHEADFOUR my %display = (); my %type = (); my %default = (); - + foreach (@ids) { my $rid = $_; - + my $uri=&Apache::lonnet::declutter($uris{$rid}); #-------------------------------------------------------------------- @@ -2293,7 +2249,7 @@ ENDTABLEHEADFOUR } } # end loop through keys } # end loop through ids - + #---------------------------------------------------- print header information my $setdef=&mt("Set Defaults for All Resources in Course"); $r->print(<print(" ".&mt("ALL")." ".&mt("USERS")." \n"); } - + if ($csec) {$r->print(&mt("Section")." $csec\n")}; if ($cgroup) {$r->print(&mt("Group")." $cgroup\n")}; $r->print("\n"); @@ -2335,806 +2291,6 @@ ENDMAPONE $r->print(''.&Apache::loncommon::end_page()); } # end sub assessparms - - -sub crsenv { - my $r=shift; - my $setoutput=''; - - &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=crsenv', - text=>"Course Environment"}); - my $breadcrumbs = - &Apache::lonhtmlcommon::breadcrumbs('Edit Course Environment'); - my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'}; - my $crs = $env{'course.'.$env{'request.course.id'}.'.num'}; - - my (%crsinfo,$chome); - my $crstype = &Apache::loncommon::course_type(); - - # - # Go through list of changes - foreach (keys %env) { - next if ($_!~/^form\.(.+)\_setparmval$/); - my $name = $1; - my $value = $env{'form.'.$name.'_value'}; - if ($name eq 'newp') { - $name = $env{'form.newp_name'}; - } - if ($name =~ /^rolenames_([^_]+)$/) { - $name = $1.'.plaintext'; - my $standardtitle = - &Apache::lonnet::plaintext($1,$crstype,$env{'request.course.id'},1); - my %adv_roles = - &Apache::lonnet::get_course_adv_roles($env{'request.course.id'},1); - if ($value ne '') { - foreach my $role (keys(%adv_roles)) { - if ($role =~ m{^cr/$match_domain/$match_name/\Q$value\E$}) { - $setoutput.= ''. - &mt('Requested replacement title for [_1] role is already used as the name of a custom role ([_2]).',$standardtitle,$value). - '
'; - undef($value); - } - } - } - } - if ($name eq 'url') { - $value=~s/^\/res\///; - my $bkuptime=time; - my @tmp = &Apache::lonnet::get - ('environment',['url'],$dom,$crs); - $setoutput.=&mt('Backing up previous URL').': '. - &Apache::lonnet::put - ('environment', - {'top level map backup '.$bkuptime => $tmp[1] }, - $dom,$crs). - '
'; - } - # - # Deal with modified default spreadsheets - if ($name =~ /^spreadsheet_default_(classcalc| - studentcalc| - assesscalc)$/x) { - my $sheettype = $1; - if ($sheettype eq 'classcalc') { - # no need to do anything since viewing the sheet will - # cause it to be updated. - } elsif ($sheettype eq 'studentcalc') { - # expire all the student spreadsheets - &Apache::lonnet::expirespread('','','studentcalc'); - } else { - # expire all the assessment spreadsheets - # this includes non-default spreadsheets, but better to - # be safe than sorry. - &Apache::lonnet::expirespread('','','assesscalc'); - # expire all the student spreadsheets - &Apache::lonnet::expirespread('','','studentcalc'); - } - } - # - # Deal with the enrollment dates - if ($name =~ /^default_enrollment_(start|end)_date$/) { - $value=&Apache::lonhtmlcommon::get_date_from_form($name.'_value'); - } - # - # Deal with the emails - if ($name =~ /\.email$/) { - foreach my $specifier (split(',',$value)) { - my ($user,$sections_or_groups)= - ($specifier=~/^([^\(]+)\(([^\)]+)\)/); - if (!$sections_or_groups) { - $user = $specifier; - } - my ($name,$domain) = split(':',$user); - if (!defined($user) || !defined($domain)) { - $setoutput.= '
'. - &mt("Invalid e-mail address specified, address must be of the form username:domain what was specified was ([_1])",$user). - ''; - undef($value); - } elsif (&Apache::lonnet::homeserver($user,$domain) eq 'no_host') { - $setoutput.= '
'. - &mt("Invalid e-mail address specified, user [_1] is unknown.",$name). - ''; - undef($value); - } - } - } - # Get existing cloners - my @oldcloner = (); - if ($name eq 'cloners') { - my %clonenames=&Apache::lonnet::dump('environment',$dom,$crs,'cloners'); - if ($clonenames{'cloners'} =~ /,/) { - @oldcloner = split/,/,$clonenames{'cloners'}; - } else { - $oldcloner[0] = $clonenames{'cloners'}; - } - } - # - # Let the user know we made the changes - if ($name && defined($value)) { - my %failed_cloners; - if ($name eq 'cloners') { - $value =~ s/\s//g; - $value =~ s/^,//; - $value =~ s/,$//; - # check requested clones are valid users. - %failed_cloners = &check_cloners(\$value,\@oldcloner); - } - my $put_result = &Apache::lonnet::put('environment', - {$name=>$value},$dom,$crs); - if ($put_result eq 'ok') { - $setoutput.=&mt('Set').' '.$name.' '.&mt('to').' '; - if ($name =~ /^default_enrollment_(start|end)_date$/) { - $setoutput .= &Apache::lonlocal::locallocaltime($value); - } elsif ($name eq 'categories') { - $setoutput .= $env{'form.categories_display'}; - } else { - $setoutput .= $value; - } - $setoutput .= '.
'; - if ($name eq 'cloners') { - &change_clone($value,\@oldcloner); - } - # Update environment and nohist_courseids.db - if (($name eq 'description') || ($name eq 'cloners') || - ($name eq 'hidefromcat') || ($name eq 'categories')) { - if ($chome eq '') { - %crsinfo = - &Apache::lonnet::courseiddump($dom,'.',1,'.','.', - $crs,undef,undef,'.'); - $chome = &Apache::lonnet::homeserver($crs,$dom); - } - } - if ($name eq 'description' && defined($value)) { - &Apache::lonnet::appenv({'course.'.$env{'request.course.id'}.'.description' => $value}); - if (ref($crsinfo{$env{'request.course.id'}}) eq 'HASH') { - $crsinfo{$env{'request.course.id'}}{'description'} = $value; - my $putresult = - &Apache::lonnet::courseidput($dom,\%crsinfo, - $chome,'notime'); - } - } - if (($name eq 'cloners') || ($name eq 'hidefromcat') || ($name eq 'categories')) { - if (ref($crsinfo{$env{'request.course.id'}}) eq 'HASH') { - &Apache::lonnet::appenv({'course.'.$env{'request.course.id'}.'.'.$name => $value}); - $crsinfo{$env{'request.course.id'}}{$name} = $value; - my $putresult = - &Apache::lonnet::courseidput($dom,\%crsinfo, - $chome,'notime'); - } - } - } else { - $setoutput.=&mt('Unable to set').' '.$name.' '.&mt('to'). - ' '.$value.' '.&mt('due to').' '.$put_result.'.
'; - } - if (($name eq 'cloners') && (keys(%failed_cloners) > 0)) { - $setoutput.= &mt('Unable to include').': '; - my @fails; - my $num = 0; - if (defined($failed_cloners{'format'})) { - $fails[$num] .= ''.$failed_cloners{'format'}. - ', '.&mt('reason').' - '. - &mt('Invalid format'); - $num ++; - } - if (defined($failed_cloners{'domain'})) { - $fails[$num] .= ''.$failed_cloners{'domain'}. - ', '.&mt('reason').' - '. - &mt('Domain does not exist'); - $num ++; - } - if (defined($failed_cloners{'newuser'})) { - $fails[$num] .= ''.$failed_cloners{'newuser'}. ', '.&mt('reason').' - '. - &mt('LON-CAPA user(s) do(es) not exist.'). - '.
'.&mt('Please '). - ' '. - &mt('add the user(s)').', '. - &mt('and then return to the '). - ''. - &mt('Course Parameters page').' '. - &mt('to add the new user(s) to the list of possible cloners'); - } - $setoutput .= join(';  ',@fails).'.
'; - } - } - } - -# ------------------------- Re-init course environment entries for this session - - &Apache::lonnet::coursedescription($env{'request.course.id'}, - {'freshen_cache' => 1}); - -# -------------------------------------------------------- Get parameters again - - my %values=&Apache::lonnet::dump('environment',$dom,$crs); - my $SelectStyleFile=&mt('Select Style File'); - my $SelectSpreadsheetFile=&mt('Select Spreadsheet File'); - my $output=''; - my $output_SB = ''; # will be replaced by "$output" when all changes are done - my $can_categorize; - my %lt=&Apache::lonlocal::texthash( - 'par' => 'Parameter', - 'val' => 'Value', - 'set' => 'Set?', - 'sav' => 'Save', - ); - if (! exists($values{'con_lost'})) { - my %descriptions= - ('url' => ''.&mt('Top Level Map').'
'. - '". - &mt('Select Map').'
'. - &mt('Modification may make assessment data inaccessible!'). - '', - 'description' => ''.&mt('Course Title').'', - 'courseid' => ''.&mt('Course ID or number'). - '
'. - '('.&mt('internal, optional').')', - 'cloners' => ''.&mt('Users allowed to clone course').'
' - .'("'.&mt('user:domain,user:domain,*:domain').'")
' - .&mt('Users with active Course Coordinator role in this course are permitted to clone and need not be included.').'
' - .&mt('Use [_1] to allow course to be cloned by anyone in the specified domain.','"*:domain"').'
' - .&mt('Use [_1] to allow unrestricted cloning in all domains.','"*"'), - 'grading' => ''.&mt('Grading').'
'. - &mt('[_1], [_2], or [_3]','"standard"','"external"','"spreadsheet"').&Apache::loncommon::help_open_topic('GradingOptions'), - 'task_grading' => ''.&mt('Bridge Task Grading').'
' - .&mt('Instructors and TAs in sections, when grading bridge tasks, should be allowed to grade other sections.').'
' - .'('.&mt('[_1]: they are allowed (this is the default). [_2]: no, they can only grade their own section.','"any"','"section"').')', - 'default_xml_style' => ''.&mt('Default XML Style File').'
'. - '$SelectStyleFile
", - 'question.email' => ''.&mt('Feedback Addresses for Resource Content Question').'
' - .'("'.&mt('user:domain,user:domain(section;section;...;*;...),...').'")', - 'question.email.text' => ''.&mt('Custom Text for Resource Content Question Option in Feedback').'', - 'comment.email' => ''.&mt('Feedback Addresses for Course Content Comments').'
' - .'("'.&mt('user:domain,user:domain(section;section;...;*;...),...').'")', - 'comment.email.text' => ''.&mt('Custom Text for Course Content Option in Feedback').'', - 'policy.email' => ''.&mt('Feedback Addresses for Course Policy').'
' - .'("'.&mt('user:domain,user:domain(section;section;...;*;...),...').'")', - 'policy.email.text' => ''.&mt('Custom Text for Course Policy Option in Feedback').'', - 'hideemptyrows' => ''.&mt('Hide Empty Rows in Spreadsheets').'
' - .'('.&mt('[_1] for default hiding','"yes"').')', - 'pageseparators' => ''.&mt('Visibly Separate Items on Pages').'
' - .'('.&mt('[_1] for visible separation.','"yes"').' ' - .&mt('Changes will not show until next login.').')', - 'student_classlist_view' => ''.&mt('Allow students to view classlist.').'
' - .'('.&mt('[_1]: students can view all sections. [_2]: students can only view their own section. blank or [_3] prevents student view.','"all"','"section"','"disabled"').')', - 'student_classlist_portfiles' => ''.&mt('Include link to accessible portfolio files').'
' - .'('.&mt("[_1] for link to each a listing of each student's files.",'"yes"').')', - 'student_classlist_opt_in' => ''.&mt("Student's agreement needed for listing in student-viewable roster").'
' - .'('.&mt('[_1] to require students to opt-in to listing in the roster (on the roster page).','"yes"').')', - 'plc.roles.denied'=> ''.&mt('Disallow chat room use for Roles').'
' - .'('.&mt('[_1]: student, [_2]: TA, [_3]: instructor','"st"','"ta"','"in"').')
' - .'("'.&mt('role,role,...').'") ' - .Apache::loncommon::help_open_topic("Course_Disable_Discussion"), - 'plc.users.denied' => - ''.&mt('Disallow chat room use for Users').'
'. - '("'.&mt('user:domain,user:domain,...').'")', - - 'pch.roles.denied'=> ''.&mt('Disallow Resource Discussion for Roles').'
' - .'('.&mt('[_1]: student, [_2]: TA, [_3]: instructor','"st"','"ta"','"in"') - .'("'.&mt('role,role,...').'") ' - .Apache::loncommon::help_open_topic("Course_Disable_Discussion"), - 'pch.users.denied' => - ''.&mt('Disallow Resource Discussion for Users').'
'. - '("'.&mt('user:domain,user:domain,...').'")', - 'spreadsheet_default_classcalc' - => ''.&mt('Default Course Spreadsheet').' '. - '$SelectSpreadsheetFile
", - 'spreadsheet_default_studentcalc' - => ''.&mt('Default Student Spreadsheet').'
'. - '$SelectSpreadsheetFile
", - 'spreadsheet_default_assesscalc' - => ''.&mt('Default Assessment Spreadsheet').' '. - '$SelectSpreadsheetFile
", - 'allow_limited_html_in_feedback' - => ''.&mt('Allow limited HTML in discussion posts').'
'. - '('.&mt('Set value to [_1] to allow.','"yes"').')', - 'allow_discussion_post_editing' - => ''.&mt('Allow users with specified roles to edit/delete their own discussion posts').'
' - .'('.&mt('[_1]: student, [_2]: TA, [_3]: instructor','"st"','"ta"','"in"').')
' - .'('.&mt('Set value to [_1] to allow all roles.','"yes"').')' - .'("'.&mt('role:section,role:section,...').'")
' - .'('.&mt('Example: "st:001,st:002,in,cc" would permit students in sections 001 and 002 and instructors in any section, and course coordinators to edit their own posts.').')', - 'rndseed' - => ''.&mt('Randomization algorithm used').'
' - .'' - .&mt('Modifying this will make problems have different numbers and answers!') - .'', - 'receiptalg' - => ''.&mt('Receipt algorithm used').'
'. - &mt('This controls how receipt numbers are generated.'), - 'suppress_tries' - => ''.&mt('Suppress number of tries in printing').'
'. - ' ('.&mt('[_1] to suppress, anything else to not suppress','"yes"').')', - 'problem_stream_switch' - => ''.&mt('Allow problems to be split over pages').'
'. - ' ('.&mt('[_1] if allowed, anything else if not','"yes"').')', - 'default_paper_size' - => ''.&mt('Default paper type').'
'. - ' ('.&mt('supported types').': Letter [8 1/2x11 in], Legal [8 1/2x14 in],'. - ' Tabloid [11x17 in], Executive [7 1/2x10 in], A2 [420x594 mm],'. - ' A3 [297x420 mm], A4 [210x297 mm], A5 [148x210 mm], A6 [105x148 mm])', - 'print_header_format' - => ' '.&mt('Print header format').'
' - .&mt('Substitutions:
[_1]: student name, [_2]: course id, [_3]: assignment note. Numbers after the % limit the field size.','"%n"','"%c"','"%a"'), - 'default_enrollment_start_date' => ''.&mt('Default beginning date for student access.').'', - 'default_enrollment_end_date' => ''.&mt('Default ending date for student access.').'', - 'nothideprivileged' => ''.&mt('Privileged users that should not be hidden on staff listings').'
' - .'("'.&mt('user:domain,user:domain,*:domain').'")', - 'languages' => ''.&mt('Languages used').'', - 'disable_receipt_display' - => ''.&mt('Disable display of problem receipts').'
'. - ' ('.&mt('"[_1]" to disable, anything else if not','yes').')', - 'task_messages' - => ''.&mt('Send message to student when clicking Done on Tasks').'
('.&mt('[_1] to send a message only to student, [_2] to send message to student and add record to user information page for instructors. Leave blank to disable.','"only_student"','"student_and_user_notes_screen"').')', - 'disablesigfigs' - => ''.&mt('Disable checking of Significant Figures').'
'. - ' ('.&mt('"[_1]" to disable, anything else if not','yes').')', - 'disableexampointprint' - => ''.&mt('Disable automatically printing point values onto exams.').'
'. - ' ('.&mt('"[_1]" to disable, anything else if not','yes').')', - 'externalsyllabus' - => ''.&mt('URL of Syllabus (not using internal handler)').'', - 'tthoptions' - => ''.&mt('Default set of options to pass to tth/m when converting TeX').'', - - 'texengine' - => ''.&mt('Force all students in the course to use a specific math rendering engine.').'
' - .'('.&mt("[_1], [_2] (Convert to Images), [_3] (TeX to HTML), or blank for student's preference",'"jsMath"','"mimetex"','"tth"').')', - 'timezone' - => ''.&mt('Timezone in which the course takes place').'', - - 'suppress_embed_prompt' - => ''.&mt('Suppress prompt to upload items referenced in a web page being uploaded to portfolio, when current role is student.').'
'. - ' ('.&mt('[_1] to suppress, anything else to not suppress','"yes"').')', - 'hidefromcat' - => ''.&mt('Exclude from course catalog').'
'. - ' ('.&mt('[_1] to exclude, anything else to include - included if assigned an institutional code, or manually catagorized','"yes"').')', - 'categories' - => ''.&mt('Categorize course').' '. - &mt('Display Categories').'', - 'datelocale' - => ''.&mt('Locale used for course calendar').'', - 'rolenames' - => ''.&mt('Replacement titles for standard course roles').'
'. - '('.&mt('To replace the standard title for a course role, enter the title you wish to use, otherwise leave blank.').')', - ); - - -# ---------------------------------------------------------------- -# Begin: New Version with Parameter Categories - - sub parameter_row { - # Create parameter row for course environment screen - - my ($parameter, $description) = @_; - - # Start Parameter Row - my $output = &Apache::loncommon::start_data_table_row(); - - # Column 1/3: Descriptive text of current parameter - $output .= '
'; - - # Column 2/3: Input field (Sometimes special field(s), depending on parameter) - - # onchange is javascript to automatically check the 'Set' button. - my $onchange = 'onFocus="javascript:window.document.forms' - ."['envform'].elements['".$parameter."_setparmval']" - .'.checked=true;"'; - if ($parameter =~ /^default_enrollment_(start|end)_date$/) { - $output .= ''; - } elsif ($parameter eq 'timezone') { - my $includeempty = 1; - my $timezone = &Apache::lonlocal::gettimezone(); - $output .= ''; - } elsif ($parameter eq 'datelocale') { - my $includeempty = 1; - my $locale_obj = &Apache::lonlocal::getdatelocale(); - my $currdatelocale; - if (ref($locale_obj)) { - $currdatelocale = $locale_obj->id(); - } - $output .= ''; - } elsif ($parameter eq 'rolenames') { - $output.= ''; - } elsif ($parameter eq 'categories') { - my $catdisplay; - if ($values{'categories'} ne '') { - my @curritems = split(/\&/,$values{'categories'}); - foreach my $item (@curritems) { - my ($name,$parent,$pos) = split(/:/,$item); - $catdisplay .= &unescape($name).'&'; - } - $catdisplay =~ s/\&$//; - } - $output .= ''; - } else { # Display default textbox in all other cases - $output .= ''; - } - - # Column 3/3: Check Box (in most cases) - unless ($parameter eq 'rolenames') { - $output .= ''; - } - - # End Parameter Row - $output .= &Apache::loncommon::end_data_table_row(); - - return $output; - } # End sub parameter_row - - - # Parameter Category Names - my %parm_cat_names = &Apache::lonlocal::texthash ( - 'cat_0' => 'Parameter Category Zero', - 'cat_1' => 'Parameter Category One', - 'cat_2' => 'Parameter Category Two', - 'cat_3' => 'Parameter Category Three', - 'cat_4' => 'Parameter Category Four', - 'cat_5' => 'Parameter Category Five', - 'cat_6' => 'Parameter Category Six', - 'cat_7' => 'Parameter Category Seven', - 'cat_can' => 'Parameter Category Can', - 'cat_custom' => 'Parameter Category Custom', - ); - - # Display Order of Parameter Categories - my @Display_Order = ( - 'cat_0', - 'cat_1', - 'cat_2', - 'cat_3', - 'cat_4', - 'cat_5', - 'cat_6', - 'cat_7', - 'cat_can', - 'cat_custom', - ); - - # Link Parameter Categories with Parameters - # Order of parameters is display order - my %parm_cat_parms = ( - 'cat_0' => [ - 'url', - 'description', - 'courseid', - 'cloners' - ], - 'cat_1' => [ - 'grading', - 'externalsyllabus', - 'default_xml_style', - 'pageseparators' - ], - 'cat_2' => [ - 'question.email', - 'question.email.text', - 'comment.email', - 'comment.email.text', - 'policy.email', - 'policy.email.text', - ], - 'cat_3' => [ - 'student_classlist_view', - 'student_classlist_opt_in', - 'student_classlist_portfiles', - 'plc.roles.denied', - 'plc.users.denied', - 'pch.roles.denied', - 'pch.users.denied', - 'allow_limited_html_in_feedback', - 'allow_discussion_post_editing', - ], - 'cat_4' => [ - 'languages', - 'timezone', - 'datelocale', - 'rolenames', - 'nothideprivileged', - 'rndseed', - 'receiptalg', - 'problem_stream_switch', - 'suppress_tries', - 'suppress_embed_prompt', - 'default_paper_size', - 'print_header_format', - 'disable_receipt_display', - ], - 'cat_5' => [ - 'spreadsheet_default_classcalc', - 'spreadsheet_default_studentcalc', - 'spreadsheet_default_assesscalc', - 'hideemptyrows', - ], - 'cat_6' => [ - 'default_enrollment_start_date', - 'default_enrollment_end_date', - ], - 'cat_7' => [ - 'tthoptions', - 'texengine', - 'disablesigfigs', - 'disableexampointprint', - 'task_messages', - 'task_grading', - ], - ); - - # Add special parameters depending on special context to parameter categories hash - my @can_cats; - (my $can_toggle_cat,$can_categorize) = &can_modify_catsettings($dom); - if ($can_toggle_cat) { - push(@can_cats,'hidefromcat'); - } - if ($can_categorize) { - push(@can_cats,'categories'); - } - $parm_cat_parms{'cat_can'} = [@can_cats]; - - # Add custom parameters to custom parameter category - my @custom_cats; - foreach my $parameter (sort(keys(%values))) { - unless (($parameter =~ m/^internal\./)||($parameter =~ m/^metadata\./) || - ($parameter =~ m/^selfenroll_/) || ($parameter =~ /_selfenroll$/) - || ($parameter eq 'type') || - ($parameter =~ m/^(cc|in|ta|ep|ad|st)\.plaintext$/)) { - if (! $descriptions{$parameter}) { - $descriptions{$parameter}=$parameter; - push(@custom_cats,$parameter); - } - } - } - $parm_cat_parms{'cat_custom'} = [@custom_cats]; - - -# Display Course Parameter Overview -# Provide hyperlinks to detailed parameter settings -$output_SB .= '' - .''; - - -my $buttons='
' - .'' - .'
'.&mt('Back to Course Parameter Overview').'' - .'
'; - -# Display all Parameters grouped by categories -$output_SB .= '

'.&mt('Course Parameters').'

'; - -foreach my $catkey (@Display_Order) { - if (!@{$parm_cat_parms{$catkey}}) { next; } # Only display non-empty categories - $output_SB .= &Apache::loncommon::start_data_table(); - $output_SB .= &Apache::loncommon::start_data_table_empty_row() - .'' - .&Apache::loncommon::end_data_table_empty_row - .&Apache::loncommon::start_data_table_header_row() - .'' - .&Apache::loncommon::end_data_table_header_row(); - - foreach my $parameter (@{$parm_cat_parms{$catkey}}) { - my $description = $descriptions{$parameter}; - $output_SB .= ¶meter_row($parameter, $description); - } - # Add special row to custom category - # Offer possibilty to create a new environment variable - if ($catkey eq 'cat_custom') { - my $onchange = 'onFocus="javascript:window.document.forms' - .'[\'envform\'].elements[\'newp_setparmval\']' - .'.checked=true;"'; - $output_SB .= &Apache::loncommon::start_data_table_row() - .'' - .&Apache::loncommon::end_data_table_row(); - } - # Add buttons row at end of each category - $output_SB .= &Apache::loncommon::start_data_table_empty_row() - .'' - .&Apache::loncommon::end_data_table_empty_row; - - $output_SB .= &Apache::loncommon::end_data_table() - . '
'; -} - -# End: New Version with Parameter Categories -# ---------------------------------------------------------------- - - - } - - my ($jscript,$categorize_js); - my $browse_js = &Apache::loncommon::browser_and_searcher_javascript('parmset'); - if ($can_categorize) { - $categorize_js = <'; - my $start_page = - &Apache::loncommon::start_page('Set Course Environment', - $jscript); - my $end_page = - &Apache::loncommon::end_page(); - $r->print(< -$setoutput -$output_SB - -$end_page -ENDENV -} - -sub can_modify_catsettings { - my ($dom) = @_; - my %domconf = &Apache::lonnet::get_dom('configuration',['coursecategories'],$dom); - my ($can_toggle_cat,$can_categorize); - if (ref($domconf{'coursecategories'}) eq 'HASH') { - if ($domconf{'coursecategories'}{'togglecats'} eq 'crs') { - $can_toggle_cat = 1; - } - if ($domconf{'coursecategories'}{'categorize'} eq 'crs') { - $can_categorize = 1; - } - } - return ($can_toggle_cat,$can_categorize); -} - -sub assign_course_categories { - my ($r) = @_; - my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; - my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; - my $hascats = 0; - my $cathash; - my %domconf = &Apache::lonnet::get_dom('configuration',['coursecategories'],$cdom); - if (ref($domconf{'coursecategories'}) eq 'HASH') { - $cathash = $domconf{'coursecategories'}{'cats'}; - if (ref($cathash) eq 'HASH') { - $hascats = 1; - } - } - my $catwin_js; - if ($hascats) { - my $alert = &mt('Use \"Save\" in the main window to save course categories'); - $catwin_js = < - -function updateCategories() { - var newcategories = ''; - var unescapedcats = ''; - if (document.chgcats.usecategory.length) { - for (var i=0; i 0) { - newcategories = newcategories.slice(0,-1); - } - if (unescapedcats.length > 0) { - unescapedcats = unescapedcats.slice(0,-3); - } - } else { - if (document.chgcats.usecategory.checked == true) { - newcategories = document.chgcats.usecategory.value; - unescapedcats = document.chgcats.catname.value; - } - } - opener.document.envform.categories_value.value = newcategories; - opener.document.envform.categories_display.value = unescapedcats; - opener.document.envform.categories_setparmval.checked = true; - alert("$alert"); - self.close(); - return; -} - - -ENDSCRIPT - } else { - my $onload; - } - my $start_page = - &Apache::loncommon::start_page('Course Categories',$catwin_js, - {'only_body' => 1,}); - my $end_page = &Apache::loncommon::end_page(); - my $categoriesform = '

'.&mt('Categorize Course').'

'; - if ($hascats) { - my %currsettings = - &Apache::lonnet::get('environment',['hidefromcat','categories'],$cdom,$cnum); - $categoriesform .= &mt('Assign one or more categories to this course.').'

'. - '
'."\n" - .&Apache::loncommon::assign_categories_table($cathash, - $currsettings{'categories'})."\n" - .'

'; - } else { - $categoriesform .= &mt('No categories defined for this domain'); - } - $r->print($start_page.$categoriesform.$end_page); - return; -} - ################################################## # Overview mode ################################################## @@ -3218,7 +2374,7 @@ sub storedata { $typeof=$env{'form.typeof_'.$thiskey}; $text = &mt('Saved modified date for'); } - if (defined($data) and $$olddata{$thiskey} ne $data) { + if (defined($data) and $$olddata{$thiskey} ne $data) { if ($tuname) { if (&Apache::lonnet::put('resourcedata',{$tkey=>$data, $tkey.'.type' => $typeof}, @@ -3233,8 +2389,8 @@ sub storedata { &Apache::lonnet::devalidateuserresdata($tuname,$tudom); } else { $newdata{$thiskey}=$data; - $newdata{$thiskey.'.type'}=$typeof; - } + $newdata{$thiskey.'.type'}=$typeof; + } } } elsif ($cmd eq 'del') { if ($tuname) { @@ -3288,7 +2444,7 @@ sub parse_listdata_key { my ($key,$listdata) = @_; # split into student/section affected, and # the realm (folder/resource part and parameter - my ($student,$realm) = + my ($student,$realm) = ($key=~/^\Q$env{'request.course.id'}\E\.\[([^\.]+)\]\.(.+)$/); # if course wide student would be undefined if (!defined($student)) { @@ -3329,13 +2485,13 @@ sub listdata { if ($sortorder eq 'realmstudent') { if ($ares ne $bres ) { $result = ($ares cmp $bres); - } elsif ($astudent ne $bstudent) { + } elsif ($astudent ne $bstudent) { $result = ($astudent cmp $bstudent); } elsif ($apart ne $bpart ) { $result = ($apart cmp $bpart); } } else { - if ($astudent ne $bstudent) { + if ($astudent ne $bstudent) { $result = ($astudent cmp $bstudent); } elsif ($ares ne $bres ) { $result = ($ares cmp $bres); @@ -3343,7 +2499,7 @@ sub listdata { $result = ($apart cmp $bpart); } } - + if (!$result) { if (defined($aparm) && defined($bparm)) { $result = ($aparm <=> $bparm); @@ -3493,7 +2649,7 @@ sub default_selector { return ''; } -my %strings = +my %strings = ( 'string_yesno' => [[ 'yes', 'Yes' ], @@ -3508,7 +2664,7 @@ my %strings = sub string_selector { my ($thistype, $thiskey, $showval) = @_; - + if (!exists($strings{$thistype})) { return &default_selector($thiskey,$showval); } @@ -3601,7 +2757,7 @@ ENDOVER my @psprt=&Apache::loncommon::get_env_multiple('form.psprt'); if (!@psprt) { $psprt[0]='0'; } - my @selected_sections = + my @selected_sections = &Apache::loncommon::get_env_multiple('form.Section'); @selected_sections = ('all') if (! @selected_sections); foreach my $sec (@selected_sections) { @@ -3614,14 +2770,14 @@ ENDOVER my $pssymb=''; my $parmlev=''; - + unless ($env{'form.parmlev'}) { $parmlev = 'map'; } else { $parmlev = $env{'form.parmlev'}; } - &extractResourceInformation(\@ids, \%typep,\%keyp, \%allparms, \%allparts, \%allmaps, + &extractResourceInformation(\@ids, \%typep,\%keyp, \%allparms, \%allparts, \%allmaps, \%mapp, \%symbp,\%maptitles,\%uris, \%keyorder,\%defkeytype); @@ -3630,21 +2786,35 @@ ENDOVER } # Menu to select levels, etc - $r->print('
'.&mt('Any User').''.$description.''. - &Apache::lonhtmlcommon::date_setter('envform', - $parameter.'_value', - $values{$parameter}, - $onchange). - ''. - &Apache::loncommon::select_timezone($parameter.'_value', - $timezone, - $onchange,$includeempty).''. - &Apache::loncommon::select_datelocale($parameter.'_value', - $currdatelocale, - $onchange,$includeempty).''; - foreach my $role ('cc','in','ta','ep','ad','st') { - my $onchange = 'onFocus="javascript:window.document.forms'. - "['envform'].elements['". - $parameter.'_'.$role."_setparmval']". - '.checked=true;"'; - $output.= ''; - } - $output .= '
'.&Apache::lonnet::plaintext($role,$crstype,undef,1). - ''. - &Apache::lonhtmlcommon::textbox($parameter.'_'.$role.'_value', - $values{$role.'.plaintext'}, - 15,$onchange). - '
'; - foreach my $role ('cc','in','ta','ep','ad','st') { - $output .= ''; - } - $output .= '
'.&Apache::lonhtmlcommon::checkbox($parameter.'_'.$role.'_setparmval'). - '
'. - ''. - '' - .&Apache::lonhtmlcommon::textbox($parameter.'_value', - $values{$parameter}, - 40, - $onchange) - .'' - .&Apache::lonhtmlcommon::checkbox($parameter.'_setparmval') - .'' - .'' - .'

'.$parm_cat_names{$catkey}.'

' - .'
'.$lt{'par'}.''.$lt{'val'}.''.$lt{'set'}.'' - .''.&mt('Create New Environment Variable').'
' - .'' - .'
' - .'' - .'' - .'' - .$buttons - .'
-
'); + #$r->print(' + # '); + #$r->print(''); } - $r->print('
'); + $r->print('
'); + #$r->print('

Step 1

'); + $r->print('
'); + $r->print(&Apache::lonhtmlcommon::start_pick_box()); &levelmenu($r,\%alllevs,$parmlev); if ($parmlev ne 'general') { - $r->print('
'); + #$r->print(''); + $r->print(&Apache::lonhtmlcommon::row_closure()); &mapmenu($r,\%allmaps,$pschp,\%maptitles); - $r->print('
'); + $r->print(&Apache::lonhtmlcommon::row_closure(1)); + $r->print(&Apache::lonhtmlcommon::end_pick_box()); + $r->print(''); + #$r->print('
'); - $r->print(' - '. '' ); - + $r->print(''); - + } } $r->print(&Apache::loncommon::end_data_table().'

'. @@ -3925,7 +3101,7 @@ sub parse_key { my ($map,$resid,$url) = &Apache::lonnet::decode_symb($data{'realm'}); $data{'realm_exists'} = &Apache::lonnet::symbverify($data{'realm'},$url); } - + $data{'parameter_part'} = $part; $data{'parameter_name'} = $name; @@ -3965,7 +3141,7 @@ sub check_cloners { $disallowed{'format'} .= $currclone.','; } } elsif ($currclone !~/^($match_username)\:($match_domain)$/) { - $disallowed{'format'} .= $currclone.','; + $disallowed{'format'} .= $currclone.','; } else { if (&Apache::lonnet::homeserver($uname,$udom) eq 'no_host') { $disallowed{'newuser'} .= $currclone.','; @@ -3994,7 +3170,7 @@ sub change_clone { my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; my $clone_crs = $cnum.':'.$cdom; - + if ($cnum && $cdom) { my @allowclone; &extract_cloners($clonelist,\@allowclone); @@ -4075,10 +3251,10 @@ ENDMAINFORMHEAD my @menu = ( { categorytitle=>'Settings for this Course', items => [ - { linktext => 'Course Environment', - url => '/adm/parmset?action=crsenv', + { linktext => 'Course Configuration', + url => '/adm/courseprefs?origin=params', permission => $parm_permission, - linktitle =>'Edit environment settings for this course.' , + linktitle =>'Edit course configuration.' , icon => 'preferences-desktop-remote-desktop.png' , #help => 'Course_Environment', }, @@ -4106,7 +3282,7 @@ ENDMAINFORMHEAD permission => $parm_permission, linktitle =>'Set default actions for parameters.' , icon => 'folder-new.png' , - }]}, + }]}, { categorytitle => 'New and Existing Parameter Settings for Resources', items => [ { linktext => 'Edit Resource Parameters - Helper Mode', @@ -4138,7 +3314,7 @@ ENDMAINFORMHEAD linktitle =>'Set/Modify existing resource parameters in overview mode.' , icon => 'preferences-desktop-wallpaper.png' , #help => 'Parameter_Overview', - }, + }, { linktext => 'Change Log', url => '/adm/parmset?action=parameterchangelog', permission => $parm_permission, @@ -4170,19 +3346,19 @@ sub output_row { push @options,['deleted', 'Delete Metadata Field']; } $output = &Apache::loncommon::start_data_table_row(); - $output .= '

'; + $output .= ''; $output .= &Apache::loncommon::end_data_table_row(); foreach my $opt (@options) { my $checked = ($options =~ m/$opt->[0]/) ? ' checked="checked" ' : '' ; $output .= &Apache::loncommon::continue_data_table_row(); - $output .= ''; + &mt($opt->[1]).''; $output .= &Apache::loncommon::end_data_table_row(); } $output .= &Apache::loncommon::continue_data_table_row(); - $output .= ''; + $output .= ''; $output .= &Apache::loncommon::end_data_table_row(); my $multiple_checked; my $single_checked; @@ -4194,14 +3370,14 @@ sub output_row { $single_checked = ''; } $output .= &Apache::loncommon::continue_data_table_row(); - $output .= ''; + '.&mt('Student may select multiple choices from list').''; $output .= &Apache::loncommon::end_data_table_row(); $output .= &Apache::loncommon::continue_data_table_row(); - $output .= ''; + '.&mt('Student may select only one choice from list').''; $output .= &Apache::loncommon::end_data_table_row(); } return ($output); @@ -4255,7 +3431,7 @@ sub order_meta_fields { } my $ordered_fields = join ",", @neworder; my $put_result = &Apache::lonnet::put('environment', - {'metadata.addedorder'=>$ordered_fields},$dom,$crs); + {'metadata.addedorder'=>$ordered_fields},$dom,$crs); &Apache::lonnet::appenv({'course.'.$env{'request.course.id'}.'.metadata.addedorder' => $ordered_fields}); } my $fields = &get_added_meta_fieldnames($env{'request.course.id'}); @@ -4268,8 +3444,8 @@ sub order_meta_fields { $ordered_fields = join ",", @fields_in_order; } my $put_result = &Apache::lonnet::put('environment', - {'metadata.addedorder'=>$ordered_fields},$dom,$crs); - } + {'metadata.addedorder'=>$ordered_fields},$dom,$crs); + } $r->print('
'); + #$r->print(' + #
'); + $r->print('
'); + $r->print('
'); + $r->print(&Apache::lonhtmlcommon::start_pick_box()); &parmmenu($r,\%allparms,\@pscat,\%keyorder); - $r->print('
- '. + $r->print(&Apache::lonhtmlcommon::row_closure()); + + $r->print(&Apache::lonhtmlcommon::row_title(&mt('Select Parts to View'))); + #$r->print('
'. + $r->print(''. '
'.&mt('Parts').''.&mt('Section(s)'). ''.&mt('Group(s)').'
'); &partmenu($r,\%allparts,\@psprt); @@ -3653,11 +2823,17 @@ ENDOVER $r->print(''); &groupmenu($r,\@selected_groups); $r->print('
'); - $r->print('
'); - + #$r->print('
'); + $r->print(&Apache::lonhtmlcommon::row_closure(1)); + $r->print(&Apache::lonhtmlcommon::end_pick_box()); + $r->print(''); + + $r->print('
'); + $r->print('
'); my $sortorder=$env{'form.sortorder'}; unless ($sortorder) { $sortorder='realmstudent'; } &sortmenu($r,$sortorder); + $r->print('
'); $r->print('

'); @@ -3802,11 +2978,11 @@ ENDOVER $r->print(&Apache::loncommon::start_data_table_row(). '
'); my $display_value = $resourcedata->{$thiskey}; if (&isdateparm($resourcedata->{$thiskey.'.type'})) { - $display_value = + $display_value = &Apache::lonlocal::locallocaltime($display_value); } $r->print(&mt('Parameter: "[_1]" with value: "[_2]"', @@ -3835,7 +3011,7 @@ ENDOVER } $r->print('
   '.&mt('Part: [_1]',$data{'parameter_part'})); $r->print('
'.$field_text.':'.(' ' x 5).''.(' ' x 5).' '.(' ' x 10).''.(' ' x 10).''.(' ' x 10).''.(' ' x 10).' - '.&mt('Student may select multiple choices from list').''.(' ' x 10).''.(' ' x 10).' - '.&mt('Student may select only one choice from list').'
'); my $num_fields = scalar(@fields_in_order); foreach my $key (@fields_in_order) { @@ -4320,7 +3496,7 @@ sub addmetafield { $options =~ s/,,/,/; my $put_result = &Apache::lonnet::put('environment', {'metadata.'.$meta_field.'.options'=>$options},$dom,$crs); - + $r->print('Undeleted Metadata Field '.$env{'course.'.$env{'request.course.id'}.'.metadata.'.$meta_field.'.added'}." with result ".$put_result.'
'); } $r->print(&continue()); @@ -4379,13 +3555,13 @@ sub setrestrictmeta { $save_field = $meta_field; if ($env{'form.'.$meta_field.'_stuadd'}) { $options.='stuadd,'; - } + } if ($env{'form.'.$meta_field.'_choices'}) { $options.='choices,'; - } + } if ($env{'form.'.$meta_field.'_onlyone'} eq 'single') { $options.='onlyone,'; - } + } if ($env{'form.'.$meta_field.'_active'}) { $options.='active,'; } @@ -4431,7 +3607,7 @@ ENDButtons $output.= &output_row($r, $field, $$added_metadata_fields{$field},$added_flag, $row_alt); } $output .= &Apache::loncommon::end_data_table(); - $r->print(<print(< $output $buttons @@ -4477,7 +3653,7 @@ sub defaultsetter { &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=setdefaults', text=>"Set Defaults"}); - my $start_page = + my $start_page = &Apache::loncommon::start_page('Parameter Setting Default Actions'); my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs('Defaults'); $r->print(<print(&mt('Manual setting rules apply to all interfaces.').'
'. &mt('Automatic setting rules apply to table mode interfaces only.')); @@ -4658,7 +3834,7 @@ sub components { $issection=''; } my $realm=''.&mt('All Resources').''; - my $realmdescription=&mt('all resources'); + my $realmdescription=&mt('all resources'); if ($middle=~/^(.+)\_\_\_\(all\)$/) { $realm=''.&mt('Folder/Map').': '.&Apache::lonnet::gettitle($1).'
('.$1.')
'; $realmdescription=&mt('folder').' '.&Apache::lonnet::gettitle($1); @@ -4689,7 +3865,7 @@ sub load_parameter_names { close($config); $standard_parms{'int_pos'} = 'Positive Integer'; $standard_parms{'int_zero_pos'} = 'Positive Integer or Zero'; - %standard_parms=&Apache::lonlocal::texthash(%standard_parms); + %standard_parms=&Apache::lonlocal::texthash(%standard_parms); } sub standard_parameter_names { @@ -4698,9 +3874,9 @@ sub standard_parameter_names { &load_parameter_names(); } if ($standard_parms{$name}) { - return $standard_parms{$name}; - } else { - return $name; + return $standard_parms{$name}; + } else { + return $name; } } @@ -4721,7 +3897,7 @@ sub parm_change_log { $r->print('
'); - + my %saveable_parameters = ('show' => 'scalar',); &Apache::loncommon::store_course_settings('parameter_log', \%saveable_parameters); @@ -4749,7 +3925,7 @@ sub parm_change_log { } if ($last) { ($folder) = &Apache::lonnet::decode_symb($last); } } - foreach my $id (sort + foreach my $id (sort { if ($parmlog{$b}{'exe_time'} ne $parmlog{$a}{'exe_time'}) { return $parmlog{$b}{'exe_time'} <=>$parmlog{$a}{'exe_time'} @@ -4762,15 +3938,15 @@ sub parm_change_log { my $count = 0; my $time = &Apache::lonlocal::locallocaltime($parmlog{$id}{'exe_time'}); - my $plainname = + my $plainname = &Apache::loncommon::plainname($parmlog{$id}{'exe_uname'}, $parmlog{$id}{'exe_udom'}); - my $about_me_link = + my $about_me_link = &Apache::loncommon::aboutmewrapper($plainname, $parmlog{$id}{'exe_uname'}, $parmlog{$id}{'exe_udom'}); my $send_msg_link=''; - if ((($parmlog{$id}{'exe_uname'} ne $env{'user.name'}) + if ((($parmlog{$id}{'exe_uname'} ne $env{'user.name'}) || ($parmlog{$id}{'exe_udom'} ne $env{'user.domain'}))) { $send_msg_link ='
'. &Apache::loncommon::messagewrapper(&mt('Send message'), @@ -4793,8 +3969,8 @@ sub parm_change_log { } } if ($typeflag) { - $istype{$parmname}=$value; - if (!$env{'form.includetypes'}) { next; } + $istype{$parmname}=$value; + if (!$env{'form.includetypes'}) { next; } } $count++; if ($makenewrow) { @@ -4832,12 +4008,12 @@ sub parm_change_log { my $description=&mt('Changed [_1] for [_2] to [_3]',&standard_parameter_names($parmname),$realmdescription, (&isdateparm($istype{$parmname})?&Apache::lonlocal::locallocaltime($value):$value)); if (($uname) && ($udom)) { - $output .= + $output .= &Apache::loncommon::messagewrapper('Notify User', $uname,$udom,$title, $description); } else { - $output .= + $output .= &Apache::lonrss::course_blog_link($id,$title, $description); } @@ -4848,7 +4024,7 @@ sub parm_change_log { my $wholeentry=$about_me_link.':'. $parmlog{$id}{'exe_uname'}.':'.$parmlog{$id}{'exe_udom'}.':'. $output; - if ($wholeentry!~/\Q$env{'form.containingphrase'}\E/i) { next; } + if ($wholeentry!~/\Q$env{'form.containingphrase'}\E/i) { next; } } if ($count) { $r->print($row_start.'
@@ -4858,7 +4034,7 @@ sub parm_change_log { $send_msg_link.''.$output); $shown++; } - if (!($env{'form.show'} eq &mt('all') + if (!($env{'form.show'} eq &mt('all') || $shown<=$env{'form.show'})) { last; } } $r->print(&Apache::loncommon::end_data_table()); @@ -5003,8 +4179,6 @@ sub handler { &assessparms($r); } elsif (! exists($env{'form.action'})) { &print_main_menu($r,$parm_permission); - } elsif ($env{'form.action'} eq 'crsenv') { - &crsenv($r); } elsif ($env{'form.action'} eq 'setoverview') { &overview($r); } elsif ($env{'form.action'} eq 'addmetadata') { @@ -5029,7 +4203,7 @@ sub handler { &date_shift_two($r); } elsif ($env{'form.action'} eq 'categorizecourse') { &assign_course_categories($r); - } + } } else { # ----------------------------- Not in a course, or not allowed to modify parms if ($exists) {
'.$time.'