--- loncom/interface/lonparmset.pm 2012/08/27 14:33:15 1.525 +++ loncom/interface/lonparmset.pm 2016/01/31 21:25:38 1.555 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to set parameters for assessments # -# $Id: lonparmset.pm,v 1.525 2012/08/27 14:33:15 raeburn Exp $ +# $Id: lonparmset.pm,v 1.555 2016/01/31 21:25:38 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -46,8 +46,6 @@ This module sets coursewide and assessme =over -=pod - =item parmval() Figure out a cascading parameter. @@ -139,16 +137,22 @@ javascript function 'pjump'. extractResourceInformation extracts lots of information about all of the the course's resources into a variety of hashes. -Input: See list below: +Input: See list below + +=over 4 =item * B : Current username =item * B : Domain of current user. -=item * b : Course + +=back Outputs: See list below: +=over 4 + =item * B (out) : An array that will contain all of the ids in the course. =item * B(out) : hash, id->type, where "type" contains the extension of the file, thus, I. @@ -173,6 +177,8 @@ Outputs: See list below: =item * B +=back + =item isdateparm() =item parmmenu() @@ -210,6 +216,8 @@ Returns: nothing Variables used (guessed by Jeremy): +=over + =item * B: ParameterS CATegories? ends up a list of the types of parameters that exist, e.g., tol, weight, acc, opendate, duedate, answerdate, sig, maxtries, type. =item * B: ParameterS PaRTs? a list of the parts of a problem that we are displaying? Used to display only selected parts? @@ -222,6 +230,8 @@ Variables used (guessed by Jeremy): When storing information, store as part 0 When requesting information, request from full part +=back + =item tablestart() =item tableend() @@ -288,7 +298,6 @@ Set portfolio metadata Main handler. Calls &assessparms subroutine. - =back =cut @@ -315,11 +324,15 @@ use LONCAPA qw(:DEFAULT :match); sub startSettingsScreen { - my ($r,$mode)=@_; + my ($r,$mode,$crstype)=@_; + my $tabtext = &mt('Course Settings'); + if ($crstype eq 'Community') { + $tabtext = &mt('Community Settings'); + } $r->print("\n".'
    '); $r->print("\n".'    '. - &mt('Course Settings'). + $tabtext. '    '); $r->print("\n".''. @@ -764,18 +777,22 @@ sub storeparm_by_symb_inner { sub valout { - my ($value,$type,$editable)=@_; + my ($value,$type,$name,$editable)=@_; my $result = ''; # Values of zero are valid. if (! $value && $value ne '0') { - if ($editable) { - $result = '*'; - } else { - $result=' '; - } + if ($editable) { + $result = + ''.&mt('Change').''; + } else { + $result=' '; + } } else { if ($type eq 'date_interval') { - my ($sec,$min,$hour,$mday,$mon,$year)=gmtime($value); + my ($totalsecs,$donebutton) = split(/_/,$value); + my ($sec,$min,$hour,$mday,$mon,$year)=gmtime($totalsecs); my @timer; $year=$year-70; $mday--; @@ -808,6 +825,9 @@ sub valout { push(@timer,&mt('[quant,_1,sec]',0)); } $result.=join(", ",@timer); + if ($donebutton eq 'done') { + $result .= ' '.&mt('+ "done"'); + } } elsif (&isdateparm($type)) { $result = &Apache::lonlocal::locallocaltime($value). &date_sanity_info($value); @@ -834,7 +854,7 @@ sub plink { my ($parmname)=((split(/\&/,$marker))[1]=~/\_([^\_]+)$/); my ($hour,$min,$sec,$val)=&preset_defaults($parmname); unless (defined($winvalue)) { $winvalue=$val; } - my $valout = &valout($value,$type,1); + my $valout = &valout($value,$type,$parmname,1); my $unencmarker = $marker; foreach my $item (\$type, \$dis, \$winvalue, \$marker, \$return, \$call, \$hour, \$min, \$sec) { @@ -916,8 +936,164 @@ function showHide_courseContent() { COURSECONTENTSCRIPT } +sub toggleparmtextbox_js { + return <<"ENDSCRIPT"; + +if (!document.getElementsByClassName) { + function getElementsByClassName(node, classname) { + var a = []; + var re = new RegExp('(^| )'+classname+'( |$)'); + var els = node.getElementsByTagName("*"); + for(var i=0,j=els.length; i$remove'); + }); + + \$(wrapper).delegate(".LC_remove_ipacc","click", function(e){ + e.preventDefault(); \$(this).closest("div").remove(); + }) +}); + + +END +} + sub startpage { - my ($r,$psymb) = @_; + my ($r,$psymb,$crstype) = @_; my %loaditems = ( 'onload' => "group_or_section('cgroup')", @@ -951,7 +1127,7 @@ sub startpage { my $escfilter=&Apache::lonhtmlcommon::entity_encode($env{'form.filter'}); my $escpart=&Apache::lonhtmlcommon::entity_encode($env{'form.part'}); $r->print($start_page.$breadcrumbs); - &startSettingsScreen($r,'parmset'); + &startSettingsScreen($r,'parmset',$crstype); $r->print(< @@ -966,10 +1142,11 @@ ENDHEAD sub print_row { my ($r,$which,$part,$name,$symbp,$rid,$default,$defaulttype,$display,$defbgone, - $defbgtwo,$defbgthree,$parmlev,$uname,$udom,$csec,$cgroup,$usersgroups)=@_; + $defbgtwo,$defbgthree,$parmlev,$uname,$udom,$csec,$cgroup,$usersgroups,$noeditgrp)=@_; my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; my $courseopt=&Apache::lonnet::get_courseresdata($cnum,$cdom); + # get the values for the parameter in cascading order # empty levels will remain empty my ($result,@outpar)=&parmval($$part{$which}.'.'.$$name{$which}, @@ -1005,30 +1182,29 @@ sub print_row { my $thismarker=$which; $thismarker=~s/^parameter\_//; my $mprefix=$rid.'&'.$thismarker.'&'; - my $effective_parm = &valout($outpar[$result],$typeoutpar[$result]); + my $effective_parm = &valout($outpar[$result],$typeoutpar[$result],$thismarker); my ($othergrp,$grp_parm,$controlgrp); if ($parmlev eq 'general') { - if ($uname) { - &print_td($r,3,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); + &print_td($r,3,$defbgone,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display); } elsif ($cgroup) { - &print_td($r,6,$defbgthree,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); + &print_td($r,6,$defbgthree,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display,$noeditgrp); } elsif ($csec) { - &print_td($r,9,$defbgtwo,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); + &print_td($r,9,$defbgtwo,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display); } else { - &print_td($r,14,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); + &print_td($r,14,$defbgone,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display); } } elsif ($parmlev eq 'map') { if ($uname) { - &print_td($r,2,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); + &print_td($r,2,$defbgone,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display); } elsif ($cgroup) { - &print_td($r,5,$defbgthree,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); + &print_td($r,5,$defbgthree,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display,$noeditgrp); } elsif ($csec) { - &print_td($r,8,$defbgtwo,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); + &print_td($r,8,$defbgtwo,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display); } else { - &print_td($r,13,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); + &print_td($r,13,$defbgone,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display); } } else { if ($uname) { @@ -1048,33 +1224,32 @@ sub print_row { } } - &print_td($r,14,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); - - &print_td($r,13,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); - &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); - &print_td($r,7,$defbgtwo,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); - } + &print_td($r,14,$defbgone,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display); + &print_td($r,13,$defbgone,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display); + &print_td($r,12,'#FFDDDD',$result,\@outpar,$mprefix,$which,\@typeoutpar,$display); + &print_td($r,11,'#FFDDDD',$result,\@outpar,$mprefix,$which,\@typeoutpar,$display); + &print_td($r,10,$defbgone,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display); + + if ($csec) { + &print_td($r,9,$defbgtwo,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display); + &print_td($r,8,$defbgtwo,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display); + &print_td($r,7,$defbgtwo,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display); + } if ($cgroup) { - &print_td($r,6,$defbgthree,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); - &print_td($r,5,$defbgthree,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); - &print_td($r,4,$defbgthree,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); + &print_td($r,6,$defbgthree,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display,$noeditgrp); + &print_td($r,5,$defbgthree,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display,$noeditgrp); + &print_td($r,4,$defbgthree,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display,$noeditgrp); } - if ($uname) { + if ($uname) { if ($othergrp) { $r->print($othergrp); } - &print_td($r,3,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); - &print_td($r,2,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); - &print_td($r,1,$defbgone,$result,\@outpar,$mprefix,$_,\@typeoutpar,$display); - } + &print_td($r,3,$defbgone,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display); + &print_td($r,2,$defbgone,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display); + &print_td($r,1,$defbgone,$result,\@outpar,$mprefix,$which,\@typeoutpar,$display); + } } # end of $parmlev if/else $r->print(''.$effective_parm.''); @@ -1085,7 +1260,7 @@ sub print_row { my $sessionvaltype=$typeoutpar[$result]; if (!defined($sessionvaltype)) { $sessionvaltype=$$defaulttype{$which}; } $r->print(''. - &valout($sessionval,$sessionvaltype).' '. + &valout($sessionval,$sessionvaltype,$$name{$which}).' '. ''); } $r->print(''); @@ -1093,19 +1268,29 @@ sub print_row { } sub print_td { - my ($r,$which,$defbg,$result,$outpar,$mprefix,$value,$typeoutpar,$display)=@_; + my ($r,$which,$defbg,$result,$outpar,$mprefix,$value,$typeoutpar,$display,$noeditgrp)=@_; $r->print(''); my $nolink = 0; if ($which == 11 || $which == 12) { $nolink = 1; + } elsif (($env{'request.course.sec'} ne '') && ($which > 9)) { + $nolink = 1; + } elsif ($which == 4 || $which == 5 || $which == 6) { + if ($noeditgrp) { + $nolink = 1; + } } elsif ($mprefix =~ /availablestudent\&$/) { if ($which > 3) { $nolink = 1; } + } elsif ($mprefix =~ /examcode\&$/) { + unless ($which == 2) { + $nolink = 1; + } } if ($nolink) { - $r->print(&valout($$outpar[$which],$$typeoutpar[$which])); + $r->print(&valout($$outpar[$which],$$typeoutpar[$which],$mprefix)); } else { $r->print(&plink($$typeoutpar[$which], $$display{$value},$$outpar[$which], @@ -1130,9 +1315,9 @@ sub print_usergroups { if (($coursereply) && ($cgroup ne $resultgroup)) { if ($result > 3) { $bgcolor = '#AAFFAA'; - $grp_parm = &valout($coursereply,$resulttype); + $grp_parm = &valout($coursereply,$resulttype,$what); } - $grp_parm = &valout($coursereply,$resulttype); + $grp_parm = &valout($coursereply,$resulttype,$what); $output = ''; if ($resultgroup && $resultlevel) { $output .= ''.$resultgroup.' ('.$resultlevel.'): '.$grp_parm; @@ -1256,7 +1441,7 @@ sub extractResourceInformation { $$mapp{$mapid}=$$mapp{$id}; $$allmaps{$mapid}=$$mapp{$id}; if ($mapid eq '1') { - $$maptitles{$mapid}=&mt('Main Course Documents'); + $$maptitles{$mapid}=&mt('Main Content'); } else { $$maptitles{$mapid}=&Apache::lonnet::gettitle($$mapp{$id}); } @@ -1390,8 +1575,8 @@ sub lookUpTableParameter { 'contentopen' => 'time_settings', 'contentclose' => 'time_settings', 'discussend' => 'time_settings', - 'printopendate' => 'time_settings', - 'printclosedate' => 'time_settings', + 'printstartdate' => 'time_settings', + 'printenddate' => 'time_settings', 'weight' => 'grading', 'handgrade' => 'grading', 'maxtries' => 'tries', @@ -1426,7 +1611,7 @@ sub lookUpTableParameter { 'lenient' => 'grading', 'retrypartial' => 'tries', 'discussvote' => 'misc', - + 'examcode' => 'high_level_randomization', ); } @@ -1478,9 +1663,7 @@ sub category_order { sub parmboxes { my ($r,$allparms,$pscat,$keyorder)=@_; - my $tempkey; - my $tempparameter; - my %categories = &categories; + my %categories = &categories(); my %category_order = &category_order(); my %categoryList = ( 'time_settings' => [], @@ -1495,37 +1678,29 @@ sub parmboxes { 'misc' => [], ); - foreach $tempparameter (keys %$allparms) { + foreach my $tempparameter (keys(%$allparms)) { &whatIsMyCategory($tempparameter, \%categoryList); } #part to print the parm-list - $r->print('
    '."\n"); - - #Print parameters - for my $key (sort { $category_order{$a} <=> $category_order{$b} } keys %categoryList) { - if(@{$categoryList{$key}} == 0) { - next; - } else { - $r->print('
    ' - .'

    ' - .&mt($categories{$key}) - .'

    '."\n"); - foreach $tempkey (&keysindisplayorderCategory($categoryList{$key},$keyorder)) { - $r->print('' - .'
    '."\n"); + foreach my $key (sort { $category_order{$a} <=> $category_order{$b} } keys(%categoryList)) { + next if (@{$categoryList{$key}} == 0); + next if ($key eq ''); + $r->print('
    ' + .'

    '.&mt($categories{$key}).'

    '."\n"); + foreach my $tempkey (&keysindisplayorderCategory($categoryList{$key},$keyorder)) { + $r->print('' + .'
    \n"); + $r->print(' />'.($$allparms{$tempkey}=~/\S/ ? $$allparms{$tempkey} + : $tempkey) + .'
    '."\n"); } + $r->print('
    '); } - - $r->print("
    \n"); + $r->print("\n"); } # # This function offers some links on the parameter section to get with one click a group a parameters @@ -1590,7 +1765,7 @@ sub partmenu { } sub usermenu { - my ($r,$uname,$id,$udom,$csec,$cgroup,$parmlev,$usersgroups)=@_; + my ($r,$uname,$id,$udom,$csec,$cgroup,$parmlev,$usersgroups,$pssymb)=@_; my $chooseopt=&Apache::loncommon::select_dom_form($udom,'udom').' '. &Apache::loncommon::selectstudent_link('parmform','uname','udom'); my $selscript=&Apache::loncommon::studentbrowser_javascript(); @@ -1599,18 +1774,29 @@ sub usermenu { my %sectionhash = &Apache::loncommon::get_sections(); my $groups; - my %grouphash = &Apache::longroup::coursegroups(); + my %grouphash; + if (($pssymb) || &Apache::lonnet::allowed('mdg',$env{'request.course.id'})) { + %grouphash = &Apache::longroup::coursegroups(); + } elsif ($env{'request.course.groups'} ne '') { + map { $grouphash{$_} = 1; } split(/,/,$env{'request.course.groups'}); + } my $g_s_header=''; my $g_s_footer=''; - if (%sectionhash) { + my $currsec = $env{'request.course.sec'}; + if ($currsec) { + $sections=&mt('Section:').' '.$currsec; + if (%grouphash) { + $sections .= ';'.(' ' x2); + } + } elsif (%sectionhash && $currsec eq '') { $sections=&mt('Section:').' '; } - if (%sectionhash && %grouphash && $parmlev ne 'full') { + if (%sectionhash && %grouphash && $parmlev ne 'full' && $currsec eq '') { $sections .= ' '.&mt('or').' '; $sections .= qq| '; + my $start_page = &Apache::loncommon::start_page('Set Parameters',$js, {'add_entries' => \%loaditems,}); my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs('Overview'); $r->print($start_page.$breadcrumbs); - &startSettingsScreen($r,'parmset'); + &startSettingsScreen($r,'parmset',$crstype); $r->print(< +
    ENDOVER my @ids=(); my %typep=(); @@ -3362,6 +4071,9 @@ ENDOVER @selected_sections = ('all'); } } + if ($env{'request.course.sec'} ne '') { + @selected_sections = ($env{'request.course.sec'}); + } my @selected_groups = &Apache::loncommon::get_env_multiple('form.Group'); @@ -3401,16 +4113,26 @@ ENDOVER &displaymenu($r,\%allparms,\@pscat,\%keyorder); $r->print(&Apache::lonhtmlcommon::start_pick_box()); $r->print(&Apache::lonhtmlcommon::row_title(&mt('Select Parts to View'))); + my $sectionselector = §ionmenu(\@selected_sections); + my $groupselector = &groupmenu(\@selected_groups); $r->print(''. - ''); + if ($sectionselector) { + $r->print(''); + } + if ($groupselector) { + $r->print(''); + } + $r->print('
    '.&mt('Parts').''.&mt('Section(s)'). - ''.&mt('Group(s)').'
    '); + '
    '.&mt('Parts').''.&mt('Section(s)').''.&mt('Group(s)').'
    '); &partmenu($r,\%allparts,\@psprt); - $r->print(''); - §ionmenu($r,\@selected_sections); - $r->print(''); - &groupmenu($r,\@selected_groups); - $r->print('
    '); - #$r->print(''); + $r->print(''); + if ($sectionselector) { + $r->print(''.$sectionselector.''); + } + if ($groupselector) { + $r->print(''.$groupselector.''); + } + $r->print(''); $r->print(&Apache::lonhtmlcommon::row_closure(1)); $r->print(&Apache::lonhtmlcommon::end_pick_box()); $r->print(''); @@ -3444,7 +4166,7 @@ ENDOVER # List data - &listdata($r,$resourcedata,$listdata,$sortorder); + &listdata($r,$resourcedata,$listdata,$sortorder,'newoverview'); } $r->print(&tableend(). ((($env{'form.store'}) || ($env{'form.dis'}))?'

    ':''). @@ -3468,7 +4190,7 @@ sub secgroup_lister { $$listdata{$newparmkey.'.type'}=$$defkeytype{$cat}; } elsif ($parmlev eq 'map') { # map-level parameter - foreach my $mapid (keys %{$allmaps}) { + foreach my $mapid (keys(%{$allmaps})) { if (($pschp ne 'all') && ($pschp ne $mapid)) { next; } my $newparmkey=$rootparmkey.'.'.$$allmaps{$mapid}.'___(all).'.$part.'.'.$cat; $$listdata{$newparmkey}=1; @@ -3492,14 +4214,25 @@ sub overview { my ($r) = @_; my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'}; my $crs = $env{'course.'.$env{'request.course.id'}.'.num'}; - + my $crstype = $env{'course.'.$env{'request.course.id'}.'.type'}; + my $js = ''."\n"; &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=setoverview', text=>"Overview Mode"}); - my $start_page=&Apache::loncommon::start_page('Modify Parameters'); + my %loaditems = ( + 'onload' => "showHideLenient();", + ); + + my $start_page=&Apache::loncommon::start_page('Modify Parameters',$js,{'add_entries' => \%loaditems,}); my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs('Overview'); $r->print($start_page.$breadcrumbs); - &startSettingsScreen($r,'parmset'); - $r->print(''); + &startSettingsScreen($r,'parmset',$crstype); + $r->print(''); # Store modified @@ -3507,7 +4240,7 @@ sub overview { # Read modified data - my $resourcedata=&readdata($crs,$dom); + my ($resourcedata,$classlist)=&readdata($crs,$dom); my $sortorder=$env{'form.sortorder'}; @@ -3516,10 +4249,9 @@ sub overview { # List data - my $foundkeys=&listdata($r,$resourcedata,$resourcedata,$sortorder); - + my $foundkeys=&listdata($r,$resourcedata,$resourcedata,$sortorder,'overview',$classlist); $r->print(&tableend().'

    '. - ($foundkeys?'':&mt('There are no parameters.')).'

    '. + ($foundkeys?'':''.&mt('There are no parameters.').'').'

    '. &Apache::loncommon::end_page()); } @@ -3595,8 +4327,9 @@ ENDOVER } elsif ($data{'realm_type'} eq 'symb') { my ($map,$resid,$url) = &Apache::lonnet::decode_symb($data{'realm'}); - $r->print(&mt('Resource: [_1]
       with ID: [_2]
       in folder [_3]', - $url,$resid,$map)); + $r->print(&mt('Resource: [_1]with ID: [_2]in folder [_3]', + $url.'
       ', + $resid.'
       ',$map)); } $r->print('
       '.&mt('Part: [_1]',$data{'parameter_part'})); $r->print(''); @@ -3614,19 +4347,19 @@ sub date_shift_one { my ($r) = @_; my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'}; my $crs = $env{'course.'.$env{'request.course.id'}.'.num'}; + my $crstype = $env{'course.'.$env{'request.course.id'}.'.type'}; &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=dateshift1&timebase='.$env{'form.timebase'}, text=>"Shifting Dates"}); my $start_page=&Apache::loncommon::start_page('Shift Dates'); my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs('Shift'); $r->print($start_page.$breadcrumbs); - &startSettingsScreen($r,'parmset'); - $r->print('
    '. + &startSettingsScreen($r,'parmset',$crstype); + $r->print(''. ''. ''. @@ -4457,6 +5203,13 @@ sub parm_change_log { !exists($parmlog{$id}{'logentry'}{$changed.'.type'})); my ($realm,$section,$parmname,$part,$what,$middle,$uname,$udom,$issection,$realmdescription)= &components($changed,$parmlog{$id}{'uname'},$parmlog{$id}{'udom'},undef,undef,$typeflag); + if ($env{'request.course.sec'} ne '') { + next if (($issection ne '') && ($issection ne $env{'request.course.sec'})); + if ($uname ne '') { + my $stusection = &Apache::lonnet::getsection($uname,$udom,$env{'request.course.id'}); + next if (($stusection ne '-1') && ($stusection ne $env{'request.course.sec'})); + } + } if ($env{'form.displayfilter'} eq 'currentfolder') { if ($folder) { if ($middle!~/^\Q$folder\E/) { next; } @@ -4598,10 +5351,10 @@ sub update_slots { action => 'reserve', context => 'parameter', ); - &Apache::lonnet::write_log('slotreservationslog',\%storehash, + &Apache::lonnet::write_log('course','slotreservationslog',\%storehash, '',$uname,$udom,$cnum,$cdom); - &Apache::lonnet::write_log($cdom.'_'.$cnum.'_slotlog',\%storehash, + &Apache::lonnet::write_log('course',$cdom.'_'.$cnum.'_slotlog',\%storehash, '',$uname,$udom,$uname,$udom); } return $success; @@ -4632,9 +5385,9 @@ sub delete_slots { action => 'release', context => 'parameter', ); - &Apache::lonnet::write_log('slotreservationslog',\%storehash, + &Apache::lonnet::write_log('course','slotreservationslog',\%storehash, 1,$uname,$udom,$cnum,$cdom); - &Apache::lonnet::write_log($cdom.'_'.$cnum.'_slotlog',\%storehash, + &Apache::lonnet::write_log('course',$cdom.'_'.$cnum.'_slotlog',\%storehash, 1,$uname,$udom,$uname,$udom); } } @@ -4658,49 +5411,20 @@ sub parameter_release_vars { } sub parameter_releasecheck { - my ($name,$value,$needsrelease,$chostname,$cmajor,$cminor) = @_; + my ($name,$value,$valmatch,$needsrelease,$cmajor,$cminor) = @_; my $needsnewer; my ($needsmajor,$needsminor) = split(/\./,$needsrelease); if (($cmajor < $needsmajor) || ($cmajor == $needsmajor && $cminor < $needsminor)) { $needsnewer = 1; - } else { - &Apache::lonnet::update_released_required($Apache::lonnet::needsrelease{'parameter:'.$name.':'.$value}); + } elsif ($valmatch) { + &Apache::lonnet::update_released_required($Apache::lonnet::needsrelease{'parameter:'.$name.'::'.$valmatch}); + } elsif ($value) { + &Apache::lonnet::update_released_required($Apache::lonnet::needsrelease{'parameter:'.$name.':'.$value.':'}); } return $needsnewer; } -sub oldversion_warning { - my ($name,$value,$chostname,$cmajor,$cminor,$needsrelease) = @_; - my $desc; - my %stringtypes = ( - type => 'string_questiontype', - lenient => 'string_lenient', - retrypartial => 'string_yesno', - discussvote => 'string_discussvote', - ); - if (exists($stringtypes{$name})) { - if (ref($strings{$stringtypes{$name}}) eq 'ARRAY') { - foreach my $possibilities (@{ $strings{$stringtypes{$name}} }) { - next unless (ref($possibilities) eq 'ARRAY'); - my ($parmval, $description) = @{ $possibilities }; - if ($parmval eq $value) { - $desc = $description; - last; - } - } - } - } - my $standard_name = &standard_parameter_names($name); - return '

    '. - &mt('[_1] was [_2]not[_3] set to [_4].', - $standard_name,'','','"'.$desc.'"').'
    '. - &mt('LON-CAPA version ([_1]) installed on home server ([_2]) does not meet version requirements ([_3] or newer).', - $cmajor.'.'.$cminor,$chostname, - $needsrelease). - '

    '; -} - sub handler { my $r=shift; 500 Internal Server Error

    Internal Server Error

    The server encountered an internal error or misconfiguration and was unable to complete your request.

    Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

    More information about this error may be available in the server error log.

    '.&mt('Currently set date:').''. &Apache::lonlocal::locallocaltime($env{'form.timebase'}).'
    '.&mt('Shifted date:').''. - &Apache::lonhtmlcommon::dshowerfuck.net -ate_setter('shiftform', + &Apache::lonhtmlcommon::date_setter('shiftform', 'timeshifted', $env{'form.timebase'},, ''). @@ -3642,18 +4375,25 @@ sub date_shift_two { my ($r) = @_; my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'}; my $crs = $env{'course.'.$env{'request.course.id'}.'.num'}; + my $crstype = $env{'course.'.$env{'request.course.id'}.'.type'}; &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=dateshift1&timebase='.$env{'form.timebase'}, text=>"Shifting Dates"}); my $start_page=&Apache::loncommon::start_page('Shift Dates'); my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs('Shift'); $r->print($start_page.$breadcrumbs); - &startSettingsScreen($r,'parmset'); + &startSettingsScreen($r,'parmset',$crstype); my $timeshifted=&Apache::lonhtmlcommon::get_date_from_form('timeshifted'); - $r->print(&mt('Shifting all dates such that [_1] becomes [_2]', + $r->print('

    '.&mt('Shift Dates').'

    '. + '

    '.&mt('Shifting all dates such that [_1] becomes [_2]', &Apache::lonlocal::locallocaltime($env{'form.timebase'}), - &Apache::lonlocal::locallocaltime($timeshifted))); + &Apache::lonlocal::locallocaltime($timeshifted)).'

    '); my $delta=$timeshifted-$env{'form.timebase'}; &dateshift($delta); + $r->print( + &Apache::lonhtmlcommon::confirm_success(&mt('Done')). + '

    '. + &Apache::lonhtmlcommon::actionbox( + [''.&mt('Content and Problem Settings').''])); &endSettingsScreen($r); $r->print(&Apache::loncommon::end_page()); } @@ -3709,7 +4449,10 @@ sub print_main_menu { # $r->print(&header()); $r->print(&Apache::lonhtmlcommon::breadcrumbs('Content and Problem Settings')); - &startSettingsScreen($r,'parmset'); + my $crstype = &Apache::loncommon::course_type(); + my $lc_crstype = lc($crstype); + + &startSettingsScreen($r,'parmset',$crstype); $r->print(< @@ -3725,9 +4468,6 @@ ENDMAINFORMHEAD '/'.$env{'request.course.sec'}); } - my $crstype = &Apache::loncommon::course_type(); - my $lc_crstype = lc($crstype); - my @menu = ( { categorytitle=>"Content Settings for this $crstype", items => [ @@ -3795,7 +4535,9 @@ ENDMAINFORMHEAD }]} ); $r->print(&Apache::lonhtmlcommon::generate_menu(@menu)); + $r->print(''); &endSettingsScreen($r); + $r->print(&Apache::loncommon::end_page()); return; } @@ -3863,6 +4605,7 @@ sub order_meta_fields { my $idx = 1; my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'}; my $crs = $env{'course.'.$env{'request.course.id'}.'.num'}; + my $crstype = $env{'course.'.$env{'request.course.id'}.'.type'};; $r->print(&Apache::loncommon::start_page('Order Metadata Fields')); &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=addmetadata', text=>"Add Metadata Field"}); @@ -3871,12 +4614,12 @@ sub order_meta_fields { text=>"Restrict Metadata"}, {text=>"Order Metadata"}); $r->print(&Apache::lonhtmlcommon::breadcrumbs('Order Metadata')); - &startSettingsScreen($r,'parmset'); + &startSettingsScreen($r,'parmset',$crstype); if ($env{'form.storeorder'}) { my $newpos = $env{'form.newpos'} - 1; my $currentpos = $env{'form.currentpos'} - 1; my @neworder = (); - my @oldorder = split /,/,$env{'course.'.$env{'request.course.id'}.'.metadata.addedorder'}; + my @oldorder = split(/,/,$env{'course.'.$env{'request.course.id'}.'.metadata.addedorder'}); my $i; if ($newpos > $currentpos) { # moving stuff up @@ -3910,10 +4653,10 @@ sub order_meta_fields { } my $fields = &get_added_meta_fieldnames($env{'request.course.id'}); my $ordered_fields; - my @fields_in_order = split /,/,$env{'course.'.$env{'request.course.id'}.'.metadata.addedorder'}; + my @fields_in_order = split(/,/,$env{'course.'.$env{'request.course.id'}.'.metadata.addedorder'}); if (!@fields_in_order) { # no order found, pick sorted order then create metadata.addedorder key. - foreach my $key (sort keys %$fields) { + foreach my $key (sort(keys(%$fields))) { push @fields_in_order, $key; $ordered_fields = join ",", @fields_in_order; } @@ -3925,7 +4668,7 @@ sub order_meta_fields { foreach my $key (@fields_in_order) { $r->print('
    '); $r->print('
    '); - $r->print(''); for (my $i = 1;$i le $num_fields;$i ++) { if ($i eq $idx) { $r->print(''); @@ -3961,9 +4704,10 @@ sub addmetafield { text=>"Add Metadata Field"}); $r->print(&Apache::loncommon::start_page('Add Metadata Field')); $r->print(&Apache::lonhtmlcommon::breadcrumbs('Add Metadata Field')); - &startSettingsScreen($r,'parmset'); my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'}; my $crs = $env{'course.'.$env{'request.course.id'}.'.num'}; + my $crstype = $env{'course.'.$env{'request.course.id'}.'.type'}; + &startSettingsScreen($r,'parmset',$crstype); if (exists($env{'form.undelete'})) { my @meta_fields = &Apache::loncommon::get_env_multiple('form.undeletefield'); foreach my $meta_field(@meta_fields) { @@ -4018,9 +4762,10 @@ sub setrestrictmeta { text=>"Restrict Metadata"}); $r->print(&Apache::loncommon::start_page('Restrict Metadata')); $r->print(&Apache::lonhtmlcommon::breadcrumbs('Restrict Metadata')); - &startSettingsScreen($r,'parmset'); my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'}; my $crs = $env{'course.'.$env{'request.course.id'}.'.num'}; + my $crstype = $env{'course.'.$env{'request.course.id'}.'.type'}; + &startSettingsScreen($r,'parmset',$crstype); my $key_base = $env{'course.'.$env{'request.course.id'}.'.'}; my $save_field = ''; if ($env{'form.restrictmeta'}) { @@ -4132,15 +4877,16 @@ sub defaultsetter { &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=setdefaults', text=>"Set Defaults"}); + my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; + my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; + my $crstype = $env{'course.'.$env{'request.course.id'}.'.type'}; my $start_page = - &Apache::loncommon::start_page('Parameter Setting Default Actions'); + &Apache::loncommon::start_page('Parameter Setting Default Actions'); my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs('Defaults'); $r->print($start_page.$breadcrumbs); - &startSettingsScreen($r,'parmset'); + &startSettingsScreen($r,'parmset',$crstype); $r->print(''); - my $dom = $env{'course.'.$env{'request.course.id'}.'.domain'}; - my $crs = $env{'course.'.$env{'request.course.id'}.'.num'}; my @ids=(); my %typep=(); my %keyp=(); @@ -4191,11 +4937,11 @@ sub defaultsetter { } } } - foreach my $key (keys %allparms) { + foreach my $key (keys(%allparms)) { $newrules{$key.'_triggers'}=$triggers{$key}; } - &Apache::lonnet::put('parmdefactions',\%newrules,$dom,$crs); - &Apache::lonnet::del('parmdefactions',\@delrules,$dom,$crs); + &Apache::lonnet::put('parmdefactions',\%newrules,$cdom,$cnum); + &Apache::lonnet::del('parmdefactions',\@delrules,$cdom,$cnum); &resetrulescache(); } my %lt=&Apache::lonlocal::texthash('days' => 'Days', @@ -4372,6 +5118,9 @@ sub standard_parameter_types { sub parm_change_log { my ($r)=@_; + my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; + my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; + my $crstype = $env{'course.'.$env{'request.course.id'}.'.type'} &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/parmset?action=settable', text=>"Parameter Change Log"}); my $js = ''."\n"; $r->print(&Apache::loncommon::start_page('Parameter Change Log',$js)); $r->print(&Apache::lonhtmlcommon::breadcrumbs('Parameter Change Log')); - &startSettingsScreen($r,'parmset'); - my %parmlog=&Apache::lonnet::dump('nohist_parameterlog', - $env{'course.'.$env{'request.course.id'}.'.domain'}, - $env{'course.'.$env{'request.course.id'}.'.num'}); + &startSettingsScreen($r,'parmset',$crstype); + my %parmlog=&Apache::lonnet::dump('nohist_parameterlog',$cdom,$cnum); if ((keys(%parmlog))[0]=~/^error\:/) { undef(%parmlog); } @@ -4402,8 +5149,7 @@ sub parm_change_log { ''. '

    '); - my $courseopt=&Apache::lonnet::get_courseresdata($env{'course.'.$env{'request.course.id'}.'.num'}, - $env{'course.'.$env{'request.course.id'}.'.domain'}); + my $courseopt=&Apache::lonnet::get_courseresdata($cnum,$cdom); $r->print(&Apache::loncommon::start_data_table().&Apache::loncommon::start_data_table_header_row(). '
    '.&mt('Time').''.&mt('User').''.&mt('Extent').''.&mt('Users').''. &mt('Parameter').''.&mt('Part').''.&mt('New Value').''.&mt('Announce').'