--- loncom/interface/lonparmset.pm 2021/08/04 19:59:10 1.601
+++ loncom/interface/lonparmset.pm 2022/05/24 16:23:03 1.613
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler to set parameters for assessments
#
-# $Id: lonparmset.pm,v 1.601 2021/08/04 19:59:10 raeburn Exp $
+# $Id: lonparmset.pm,v 1.613 2022/05/24 16:23:03 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -1252,6 +1252,7 @@ function validateParms() {
var dlKeyRegExp = /^deeplink_key_/;
var dlMenusRegExp = /^deeplink_menus_/;
var dlCollsRegExp = /^deeplink_colls_/;
+ var dlTargetRegExp = /^deeplink_target_/;
var patternIP = /[\[\]\*\.a-zA-Z\d\-]+/;
if ((document.parmform.elements.length != 'undefined') && (document.parmform.elements.length) != 'null') {
if (document.parmform.elements.length) {
@@ -1406,6 +1407,17 @@ function validateParms() {
}
document.parmform.elements['set_'+identifier].value += posslinkmenu;
}
+ } else if (dlTargetRegExp.text(name)) {
+ var identifier = name.replace(dlTargetExp,'');
+ var idx = document.parmform.elements[i].selectedIndex;
+ if (idx > 0) {
+ var possdeeplink = document.parmform.elements[i].options[idx].value
+ possdeeplink = possdeeplink.replace(/^\s+|\s+$/g,'');
+ if (document.parmform.elements['set_'+identifier].value) {
+ possdeeplink = ','+possdeeplink;
+ }
+ document.parmform.elements['set_'+identifier].value += possdeeplink;
+ }
}
}
}
@@ -1461,6 +1473,8 @@ END
# Javascript function toggleSecret, for overview mode.
sub done_proctor_js {
+ my $defaultdone = &mt('Done');
+ &js_escape(\$defaultdone);
return <<"END";
function toggleSecret(form,radio,key) {
var radios = form[radio+key];
@@ -1477,6 +1491,15 @@ function toggleSecret(form,radio,key) {
document.getElementById('done_'+key+'_proctorkey').value='';
}
}
+ if (document.getElementById('done_'+key+'_buttontext')) {
+ if (radios[i].value == '') {
+ document.getElementById('done_'+key+'_buttontext').value = '';
+ } else {
+ if (document.getElementById('done_'+key+'_buttontext').value == '') {
+ document.getElementById('done_'+key+'_buttontext').value = '$defaultdone';
+ }
+ }
+ }
}
}
}
@@ -1736,13 +1759,11 @@ sub print_row {
my ($domltistr,$crsltistr);
my %lti =
&Apache::lonnet::get_domain_lti($env{'course.'.$env{'request.course.id'}.'.domain'},
- 'provider');
+ 'linkprot');
if (keys(%lti)) {
foreach my $item (sort { $a <=> $b } (keys(%lti))) {
- if (ref($lti{$item}) eq 'HASH') {
- unless ($lti{$item}{'requser'}) {
- $domltistr .= $item.':'.&escape(&escape($lti{$item}{'consumer'})).',';
- }
+ if (($item =~ /^\d+$/) && (ref($lti{$item}) eq 'HASH')) {
+ $domltistr .= $item.':'.&escape(&escape($lti{$item}{'name'})).',';
}
}
$domltistr =~ s/,$//;
@@ -2076,6 +2097,7 @@ sub parm_control_group {
# @param {hash reference} $uris - hash resource/map id -> resource src
# @param {hash reference} $keyorder - hash parameter key -> appearance rank for this parameter when looking through every resource and every parameter, starting at 100 (integer)
# @param {hash reference} $defkeytype - hash parameter name -> parameter type
+# @param {string} $pssymb - resource symb (when a single resource is selected)
sub extractResourceInformation {
my $ids = shift;
my $typep = shift;
@@ -2089,11 +2111,22 @@ sub extractResourceInformation {
my $uris=shift;
my $keyorder=shift;
my $defkeytype=shift;
+ my $pssymb=shift;
my $keyordercnt=100;
my $navmap = Apache::lonnavmaps::navmap->new();
- my @allres=$navmap->retrieveResources(undef,undef,1,undef,1);
+ return unless(ref($navmap));
+ my @allres;
+ if ($pssymb ne '') {
+ my $res = $navmap->getBySymb($pssymb);
+ if (ref($res)) {
+ @allres = ($res);
+ }
+ }
+ if (!@allres) {
+ @allres=$navmap->retrieveResources(undef,undef,1,undef,1);
+ }
foreach my $resource (@allres) {
my $id=$resource->id();
my ($mapid,$resid)=split(/\./,$id);
@@ -2217,7 +2250,7 @@ sub isdateparm {
sub is_specialstring {
my $type=shift;
- return (($type=~/^string_/) && (($type ne 'string_yesno')));
+ return (($type=~/^string_/) && ($type ne 'string_yesno'));
}
# Prints the HTML and Javascript to select parameters, with various shortcuts.
@@ -2733,8 +2766,9 @@ sub displaymenu {
# @param {string} $pschp - selected map pc, or 'all'
# @param {hash reference} $maptitles - hash map id or src -> map title
# @param {hash reference} $symbp - hash map pc or resource/map id -> map src.'___(all)' or resource symb
+# @param {string} $parmlev - parameter level (Resource:'full', Map:'map', Course:'general')
sub mapmenu {
- my ($r,$allmaps,$pschp,$maptitles,$symbp)=@_;
+ my ($r,$allmaps,$pschp,$maptitles,$symbp,$parmlev)=@_;
my %allmaps_inverted = reverse %$allmaps;
my $navmap = Apache::lonnavmaps::navmap->new();
my $tree=[];
@@ -2782,7 +2816,11 @@ sub mapmenu {
}
}
# Show it ...
- $r->print(&Apache::lonhtmlcommon::row_title(&mt('Select Enclosing Map or Folder'),'','',' id="mapmenu"'));
+ my $rowattr = ' id="mapmenu"';
+ if ($parmlev eq 'general') {
+ $rowattr .= ' style="display:none"';
+ }
+ $r->print(&Apache::lonhtmlcommon::row_title(&mt('Select Enclosing Map or Folder'),'','',$rowattr));
if ((ref($tree) eq 'ARRAY') && (ref($treeinfo) eq 'HASH')) {
my $icon = '';
my $whitespace =
@@ -3024,19 +3062,33 @@ sub keysindisplayorder {
#
# @param {Apache2::RequestRec} $r - the Apache request
# @param {string} $sortorder - realmstudent|studentrealm
+# @param {string} $context - newoverview|overview
sub sortmenu {
- my ($r,$sortorder)=@_;
- $r->print('
');
}
# Returns a hash parameter key -> order (integer) giving the order for some parameters.
@@ -3366,7 +3418,7 @@ sub assessparms {
# --------------------------------------------------------- Get all assessments
&extractResourceInformation(\@ids, \%typep,\%keyp, \%allparms, \%allparts, \%allmaps,
\%mapp, \%symbp,\%maptitles,\%uris,
- \%keyorder);
+ \%keyorder,undef,$pssymb);
%allmaps_inverted = reverse(%allmaps);
@@ -3383,6 +3435,7 @@ sub assessparms {
my $chome = $env{'course.'.$env{'request.course.id'}.'.home'};
my ($got_chostname,$chostname,$cmajor,$cminor);
my $totalstored = 0;
+ my $totalskippeduser = 0;
my $now = time;
for (my $i=0;$i<=$#markers;$i++) {
my ($needsrelease,$needsnewer,$name,$namematch);
@@ -3391,6 +3444,11 @@ sub assessparms {
}
if ($markers[$i] =~ /\&(8|7|6|5)$/) {
next if ($noeditgrp);
+ } elsif ($markers[$i] =~ /\&(4|3|2|1)$/) {
+ if ($uname eq '') {
+ $totalskippeduser ++;
+ next;
+ }
}
if ($markers[$i] =~ /\&(17|11|7|3)$/) {
$namematch = 'maplevelrecurse';
@@ -3529,9 +3587,27 @@ sub assessparms {
# ---------------------------------------------------------------- Done storing
if ($totalstored) {
$message.='
'
+ .&mt('Changes for [quant,_1,parameter] saved.',$totalstored)
+ .' '
.&mt('Changes can take up to 10 minutes before being active for all students.')
.&Apache::loncommon::help_open_topic('Caching')
.'
';
+ } else {
+ $message.='
'.&mt('No parameter changes saved.').'
';
+ }
+ if ($totalskippeduser) {
+ $message .= '
';
+ if ($uhome eq 'no_host') {
+ $message .= &mt('Changes for [quant,_1,user-specific parameter] not saved because the username or ID was invalid.',
+ $totalskippeduser);
+ } elsif ($env{'form.userroles'} eq 'any') {
+ $message .= &mt('Changes for [quant,_1,user-specific parameter] not saved because the user does not have a course role.',
+ $totalskippeduser);
+ } else {
+ $message .= &mt('Changes for [quant,_1,user-specific parameter] not saved because the user is not a student.',
+ $totalskippeduser);
+ }
+ $message .= '