--- loncom/interface/londocs.pm 2013/03/17 18:49:16 1.484.2.28 +++ loncom/interface/londocs.pm 2013/03/17 23:55:01 1.484.2.29 @@ -1,7 +1,7 @@ # The LearningOnline Network # Documents # -# $Id: londocs.pm,v 1.484.2.28 2013/03/17 18:49:16 raeburn Exp $ +# $Id: londocs.pm,v 1.484.2.29 2013/03/17 23:55:01 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -1889,23 +1889,93 @@ my %parameter_type = ( 'randompick' my $valid_parameters_re = join('|',keys(%parameter_type)); # set parameters sub update_parameter { - - return 0 if ($env{'form.changeparms'} !~ /^($valid_parameters_re)$/); - - my $which = $env{'form.changeparms'}; - my $idx = $env{'form.setparms'}; - if ($env{'form.'.$which.'_'.$idx}) { - my $value = ($which eq 'randompick') ? $env{'form.'.$which.'_'.$idx} - : 'yes'; - &LONCAPA::map::storeparameter($idx, 'parameter_'.$which, $value, - $parameter_type{$which}); - &remember_parms($idx,$which,'set',$value); + if ($env{'form.changeparms'} eq 'all') { + my (@allidx,@allmapidx,%allchecked,%currchecked); + %allchecked = ( + 'hiddenresource' => {}, + 'encrypturl' => {}, + 'randompick' => {}, + 'randomorder' => {}, + ); + foreach my $which (keys(%allchecked)) { + $env{'form.all'.$which} =~ s/,$//; + if ($which eq 'randompick') { + foreach my $item (split(/,/,$env{'form.all'.$which})) { + my ($res,$value) = split(/:/,$item); + if ($value =~ /^\d+$/) { + $allchecked{$which}{$res} = $value; + } + } + } else { + map { $allchecked{$which}{$_} = 1; } split(/,/,$env{'form.all'.$which}); + } + } + my $haschanges = 0; + foreach my $res (@LONCAPA::map::order) { + my ($name,$url)=split(/\:/,$LONCAPA::map::resources[$res]); + $name=&LONCAPA::map::qtescape($name); + $url=&LONCAPA::map::qtescape($url); + next unless ($name && $url); + my $is_map; + if ($url =~ m{/uploaded/.+\.(page|sequence)$}) { + $is_map = 1; + } + foreach my $which (keys(%allchecked)) { + if (($which eq 'randompick' || $which eq 'randomorder')) { + next if (!$is_map); + } + my $oldvalue = 0; + my $newvalue = 0; + if ($allchecked{$which}{$res}) { + $newvalue = $allchecked{$which}{$res}; + } + my $current = (&LONCAPA::map::getparameter($res,'parameter_'.$which))[0]; + if ($which eq 'randompick') { + if ($current =~ /^(\d+)$/) { + $oldvalue = $1; + } + } else { + if ($current =~ /^yes$/i) { + $oldvalue = 1; + } + } + if ($oldvalue ne $newvalue) { + $haschanges = 1; + if ($newvalue) { + my $storeval = 'yes'; + if ($which eq 'randompick') { + $storeval = $newvalue; + } + &LONCAPA::map::storeparameter($res,'parameter_'.$which, + $storeval, + $parameter_type{$which}); + &remember_parms($res,$which,'set',$storeval); + } elsif ($oldvalue) { + &LONCAPA::map::delparameter($res,'parameter_'.$which); + &remember_parms($res,$which,'del'); + } + } + } + } + return $haschanges; } else { - &LONCAPA::map::delparameter($idx,'parameter_'.$which); + return 0 if ($env{'form.changeparms'} !~ /^($valid_parameters_re)$/); - &remember_parms($idx,$which,'del'); + my $which = $env{'form.changeparms'}; + my $idx = $env{'form.setparms'}; + if ($env{'form.'.$which.'_'.$idx}) { + my $value = ($which eq 'randompick') ? $env{'form.rpicknum_'.$idx} + : 'yes'; + &LONCAPA::map::storeparameter($idx, 'parameter_'.$which, $value, + $parameter_type{$which}); + &remember_parms($idx,$which,'set',$value); + } else { + &LONCAPA::map::delparameter($idx,'parameter_'.$which); + + &remember_parms($idx,$which,'del'); + } + return 1; } - return 1; } @@ -2167,7 +2237,7 @@ sub editor { $r->print(''); } - my ($to_show,$output); + my ($to_show,$output,@allidx,@allmapidx); &Apache::loncommon::start_data_table_count(); #setup a row counter foreach my $res (@LONCAPA::map::order) { @@ -2176,6 +2246,10 @@ sub editor { $url=&LONCAPA::map::qtescape($url); unless ($name) { $name=(split(/\//,$url))[-1]; } unless ($name) { $idx++; next; } + push(@allidx,$res); + if ($url =~ m{/uploaded/.+\.(page|sequence)$}) { + push(@allmapidx,$res); + } $output .= &entryline($idx,$name,$url,$folder,$allowed,$res, $coursenum,$coursedom,$crstype, $pathitem,$supplementalflag,$container); @@ -2206,8 +2280,48 @@ sub editor { if ($folder !~ /^supplemental/) { $to_show .= ''.&mt('Settings').''; } - $to_show .= &Apache::loncommon::end_data_table_header_row() - .$output.' ' + $to_show .= &Apache::loncommon::end_data_table_header_row(); + if ($folder !~ /^supplemental/) { + my $idxlist = join(',',@allidx); + my $mapidxlist = join(',',@allmapidx); + if (@allidx > 0) { + my $path; + if ($env{'form.folderpath'}) { + $path = + &HTML::Entities::encode($env{'form.folderpath'},'<>&"'); + } + $to_show .= + &Apache::loncommon::continue_data_table_row(). + ' '. + ''. + '
'. + ''.&mt('Select:').' '. + ''.(' 'x2).'
'. + ''. + + ''. + &Apache::loncommon::end_data_table_row(); + } + } + $to_show .= $output.' ' .&Apache::loncommon::end_data_table() .'
' .&Apache::loncommon::end_scrollbox(); @@ -2718,21 +2832,24 @@ END if ($rpicknum) { $rpckchk = ' checked="checked"'; } - my $formname = 'edit_rpick_'.$orderidx; + my $formname = 'edit_randompick_'.$orderidx; $rand_pick_text = '
'."\n". $form_common."\n". -''; +''; if ($rpicknum ne '') { $rand_pick_text .= ': '.$rpicknum.''; } - $rand_pick_text .= ''; + $rand_pick_text .= '
'. + $form_end; my $ro_set= ((&LONCAPA::map::getparameter($orderidx,'parameter_randomorder'))[0]=~/^yes$/i?' checked="checked"':''); + my $formname = 'edit_rorder_'.$orderidx; $rand_order_text = -$form_start. -$form_common.' -'; +'
'."\n". +$form_common."\n". +''. +$form_end; } } elsif ($supplementalflag && !$allowed) { $url .= ($url =~ /\?/) ? '&':'?'; @@ -2806,16 +2923,18 @@ $form_common.' ((&LONCAPA::map::getparameter($orderidx,'parameter_encrypturl'))[0]=~/^yes$/i?' checked="checked"':''); my $hidtext= ((&LONCAPA::map::getparameter($orderidx,'parameter_hiddenresource'))[0]=~/^yes$/i?' checked="checked"':''); + my $formhidden = 'edit_hiddenresource_'.$orderidx; + my $formurlhidden = 'edit_encrypturl_'.$orderidx; $line.=(< - $form_start + $form_common - + $form_end
- $form_start + $form_common - + $form_end $rand_pick_text
@@ -4921,34 +5040,154 @@ this.document.forms.renameform.submit(); } function updatePick(targetform,index,caller) { - var pickitem = document.getElementById('rpick_'+index); - var picknumitem = document.getElementById('rpicknum_'+index); + var pickitem; + var picknumitem; + var picknumtext; + if (index == 'all') { + pickitem = document.getElementById('randompickall'); + picknumitem = document.getElementById('rpicknumall'); + picknumtext = document.getElementById('rpicktextall'); + } else { + pickitem = document.getElementById('randompick_'+index); + picknumitem = document.getElementById('rpicknum_'+index); + picknumtext = document.getElementById('randompicknum_'+index); + } if (pickitem.checked) { var picknum=prompt('$lt{"rpck"}',picknumitem.value); if (picknum == '' || picknum == null) { if (caller == 'check') { pickitem.checked=false; - return; + if (index == 'all') { + picknumtext.innerHTML = ''; + if (caller == 'link') { + propagateState(targetform,'rpicknum'); + } + } else { + checkForSubmit(targetform,'randompick'); + } } } else { picknum.toString(); var regexdigit=/^\\d+\$/; if (regexdigit.test(picknum)) { picknumitem.value = picknum; - targetform.changeparms.value='randompick'; - targetform.submit(); + if (index == 'all') { + picknumtext.innerHTML = ' '+picknum+''; + if (caller == 'link') { + propagateState(targetform,'rpicknum'); + } + } else { + picknumtext.innerHTML = ' '+picknum+''; + checkForSubmit(targetform,'randompick'); + } } else { if (caller == 'check') { - pickitem.checked=false; + if (index == 'all') { + picknumtext.innerHTML = ''; + if (caller == 'link') { + propagateState(targetform,'rpicknum'); + } + } else { + pickitem.checked=false; + checkForSubmit(targetform,'randompick'); + } } return; } } } else { - picknumitem.value = 0; - targetform.changeparms.value='randompick'; - targetform.submit(); + picknumitem.value = ''; + picknumtext.innerHTML = ''; + if (index == 'all') { + if (caller == 'link') { + propagateState(targetform,'rpicknum'); + } + } else { + checkForSubmit(targetform,'randompick'); + } + } +} + +function propagateState(form,param) { + if (document.getElementById(param+'all')) { + var setcheck = 0; + var rpick = 0; + if (param == 'rpicknum') { + if (document.getElementById('randompickall')) { + if (document.getElementById('randompickall').checked) { + if (document.getElementById('rpicknumall')) { + rpick = document.getElementById('rpicknumall').value; + } + } + } + } else { + if (document.getElementById(param+'all').checked) { + setcheck = 1; + } + } + if ((param == 'encrypturl') || (param == 'hiddenresource')) { + var allidxlist = form.allidx.value; + if (allidxlist != '') { + var allidxs = allidxlist.split(','); + if (allidxs.length > 1) { + for (var i=0; i 1) { + for (var i=0; i 0) { + document.getElementById('randompicknum_'+allmapidxs[i]).innerHTML = ': '+rpick+''; + } else { + document.getElementById('randompicknum_'+allmapidxs[i]).innerHTML = ''; + } + } + } + } else { + if (setcheck == 1) { + document.getElementById(param+'_'+allmapidxs[i]).checked = true; + } else { + document.getElementById(param+'_'+allmapidxs[i]).checked = false; + } + } + } + } + } + } + } } + return; +} + +function checkForSubmit(targetform,param) { + if (document.togglemultchecks.showmultpick.length) { + for (var i=0; i 1) { + for (var i=0; i