[LON-CAPA-cvs] cvs: loncom(version_2_11_X) /interface lonblockingmenu.pm
raeburn
raeburn at source.lon-capa.org
Sun Oct 23 13:06:49 EDT 2016
raeburn Sun Oct 23 17:06:49 2016 EDT
Modified files: (Branch: version_2_11_X)
/loncom/interface lonblockingmenu.pm
Log:
- For 2.11
- Backport 1.19, 1.20, 1.21, 1.22, 1.23, 1.24
-------------- next part --------------
Index: loncom/interface/lonblockingmenu.pm
diff -u loncom/interface/lonblockingmenu.pm:1.14.2.2 loncom/interface/lonblockingmenu.pm:1.14.2.3
--- loncom/interface/lonblockingmenu.pm:1.14.2.2 Wed Jan 27 03:05:37 2016
+++ loncom/interface/lonblockingmenu.pm Sun Oct 23 17:06:49 2016
@@ -2,7 +2,7 @@
# Routines for configuring blocking of access to collaborative functions,
# and specific resources during an exam
#
-# $Id: lonblockingmenu.pm,v 1.14.2.2 2016/01/27 03:05:37 raeburn Exp $
+# $Id: lonblockingmenu.pm,v 1.14.2.3 2016/10/23 17:06:49 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -105,6 +105,19 @@
=over
+=item &get_permission()
+
+Returns information about permission user has to set/modify exam
+blocking events.
+
+Inputs: None
+
+Outputs: 2
+ $readonly - true if modification of blocking events is prohibited.
+
+ $allowed - true if blocking events information can be shown.
+
+
=item &get_timed_items()
Provides perl data structure with information about timed interval
@@ -222,7 +235,7 @@
Generates web form elements used to display, cancel, or modify
existing blocking events.
-Inputs: 7
+Inputs: 8
- $r - Apache request object
- $records - Reference to hash of current blocks
@@ -238,6 +251,9 @@
- $blockcount - number of existing blocking events in course
+ - $readonly - if true, modification not allowed.
+
+
Output: None
Side Effects: prints web form elements (in a table) for current blocks.
@@ -302,13 +318,16 @@
items in the course for use in an exam block of type: "Triggered by
Activating Timer".
-Inputs: 7 (three required, last four optional)
+Inputs: 8 (four required, last four optional)
- $intervals - Reference to hash of parameters for timed intervals
- $parmcount - numeric ID of current block
- $navmap - navmaps object
+ - $context - this will be "accesstimes" if called by lonaccesstimes.pm,
+ or "blocking" if called internally by lonblockingmenu.pm
+
- $currkey - current interval (where this is a block already using
an interval-based trigger).
@@ -323,6 +342,34 @@
Outputs: 1 - $intervalform - web form elements used to select a time interval
+=item &interval_details()
+
+Creates name/scope of current interval and expandable/collapsible
+showing which interval parameters apply to the current folder/resource
+
+Inputs: 6
+
+ - $item - course, map url, or resource symb
+
+ - $type - course, map, or resource
+
+ - $url - url of item (null if item is course).
+
+ - $navmap - navmaps object
+
+ - $intervals - Reference to hash of parameters for timed intervals
+
+ - $parmcount - unique ID for current element.
+
+
+Outputs: 2
+
+ - $itemname - name/scope of interval (timer) parameter
+
+ - $iteminfo - Expandable/collapsible block showing which interval
+ (timer) parameters affect the current folder or resource.
+
+
=item &trigger_details_toggle()
Creates link used to expand item showing information about timer for current
@@ -332,6 +379,7 @@
Outputs: 1 - returns HTML for link to display contents of information item
+
=item &show_timer_path()
Display hierarchy of names of folders/sub-folders containing the current
@@ -376,12 +424,21 @@
=item * for action to take -- add or modify block
-=item * for display of detailed information about intervals
-
=back
-=back
+=item &details_javascript()
+
+Create Javascript to toggle visibility of unordered list item
+containing details about item with timed interval parameter.
+
+Inputs: none
+
+Output: 1 Javascript (with <script></script> tags) for functions used to:
+ toggle visibility of unordered list for display of detailed
+ information about intervals.
+
+=back
=cut
@@ -422,11 +479,10 @@
# ----------------------------------------------------------- Permissions check
- unless ((&Apache::lonnet::allowed('dcm',$env{'request.course.id'})) ||
- (&Apache::lonnet::allowed('dcm',$env{'request.course.id'}.
- '/'.$env{'request.course.sec'}))) {
+ my ($readonly,$allowed) = &get_permission();
+ unless ($allowed) {
$env{'user.error.msg'}=
- "/adm/setblock:dcm:0:0:Cannot set blocking of communications in a course";
+ "/adm/setblock:dcm:0:0:Cannot view/set blocking of communications in a course";
return HTTP_NOT_ACCEPTABLE;
}
@@ -471,7 +527,7 @@
$r->print(&Apache::loncourserespicker::create_picker($navmap,
'examblock','resourceblocks',$crstype,
\%blockedmaps,\%blockedresources,
- $env{'form.block'}));
+ $env{'form.block'},'','',undef,$readonly));
} else {
$r->print($errormsg);
}
@@ -480,10 +536,12 @@
# -------------------------- Store changes and retrieve latest block information
my $storeresult;
- if ($env{'form.action'} eq 'store') {
- (my $numchanges,$storeresult) = &blockstore($r,$crstype,$blockcount,\%records);
- if ($numchanges > 0) {
- $blockcount = &get_blockdates(\%records);
+ unless ($readonly) {
+ if ($env{'form.action'} eq 'store') {
+ (my $numchanges,$storeresult) = &blockstore($r,$crstype,$blockcount,\%records);
+ if ($numchanges > 0) {
+ $blockcount = &get_blockdates(\%records);
+ }
}
}
@@ -503,7 +561,8 @@
({href=>'/adm/setblock',
text=>'Blocking communication/content access'});
- my $js = &blockingmenu_javascript($blockcount);
+ my $js = &blockingmenu_javascript($blockcount).
+ &details_javascript();
$r->print(
&Apache::loncommon::start_page('Blocking communication/content access',$js).
@@ -569,8 +628,10 @@
# ------------------------ Choose between modifying existing block or adding new
$r->print('<form name="blockform" method="post" action="/adm/setblock?action=store">');
- if ($blockcount > 0) {
- $r->print(<<"END");
+
+ unless ($readonly) {
+ if ($blockcount > 0) {
+ $r->print(<<"END");
<div class="LC_left_float">
<fieldset><legend>$lt{'actt'}</legend>
<span class="LC_nobreak">
@@ -587,33 +648,61 @@
<br clear="all" />
<div id="showadd" style="display:none">
END
- } else {
- $r->print($lt{'ncbc'}.'<br /><br />'.
- '<h4>'.$lt{'addn'}.'</h4>'.
- '<input type="hidden" name="blockaction" value="add" />');
+ } else {
+ $r->print($lt{'ncbc'}.'<br /><br />'.
+ '<h4>'.$lt{'addn'}.'</h4>'.
+ '<input type="hidden" name="blockaction" value="add" />');
+ }
}
my ($navmap,$errormsg) =
&Apache::loncourserespicker::get_navmap_object($crstype,'examblock');
# --------------------------------------------- Interface for adding a new block
- &display_addblocker_table($r,$blockcount,\%ltext,\%intervals,
- $navmap,$errormsg);
-
-# ------------------------------------------------- Interface for existig blocks
- if ($blockcount > 0) {
- $r->print('</div>');
+ unless ($readonly) {
+ &display_addblocker_table($r,$blockcount,\%ltext,\%intervals,
+ $navmap,$errormsg);
+ if ($blockcount > 0) {
+ $r->print('</div>');
+ }
+ }
+# ------------------------------------------------ Interface for existing blocks
+ if (!$blockcount) {
+ if ($readonly) {
+ $r->print($lt{'ncbc'}.'<br />');
+ }
+ } else {
&display_blocker_status($r,\%records,\%ltext,\%intervals,
- $navmap,$errormsg,$blockcount);
+ $navmap,$errormsg,$blockcount,$readonly);
}
- $r->print(<<"END");
+ unless ($readonly) {
+ $r->print(<<"END");
<br />
<input type ="submit" value="$lt{'stor'}" />
-</form>
END
- $r->print(&Apache::loncommon::end_page());
+ }
+ $r->print('</form>'.
+ &Apache::loncommon::end_page());
return OK;
}
+sub get_permission {
+ my %permission;
+ my $allowed = 0;
+ my $readonly = 0;
+ return ($readonly,$allowed) unless ($env{'request.course.id'});
+ if ((&Apache::lonnet::allowed('dcm',$env{'request.course.id'})) ||
+ (&Apache::lonnet::allowed('dcm',$env{'request.course.id'}.'/'.
+ $env{'request.course.sec'}))) {
+ $allowed = 1;
+ } elsif ((&Apache::lonnet::allowed('vcb',$env{'request.course.id'})) ||
+ (&Apache::lonnet::allowed('vcb',$env{'request.course.id'}.'/'.
+ $env{'request.course.sec'}))) {
+ $readonly = 1;
+ $allowed = 1;
+ }
+ return ($readonly,$allowed);
+}
+
sub get_timed_items {
my ($cdom,$cnum) = @_;
my ($cid,%intervals);
@@ -630,7 +719,7 @@
my $resourcedata=&Apache::lonparmset::readdata($cnum,$cdom);
if (ref($resourcedata) eq 'HASH') {
foreach my $key (keys(%{$resourcedata})) {
- if ($key =~ /^\Q$cid\E(.+)\.0\.interval$/) {
+ if ($key =~ /^\Q$cid\E(.*)\.0\.interval$/) {
my $middle = $1;
if ($middle eq '') {
$intervals{'course'}{'all'} = $resourcedata->{$key};
@@ -975,9 +1064,9 @@
}
sub display_blocker_status {
- my ($r,$records,$ltext,$intervals,$navmap,$errormsg,$blockcount) = @_;
+ my ($r,$records,$ltext,$intervals,$navmap,$errormsg,$blockcount,$readonly) = @_;
my $parmcount = 0;
- my (%map_url,%resource_symb,%titles,%lookups);
+ my (%map_url,%resource_symb,%titles,%lookups,$disabled);
&Apache::loncourserespicker::enumerate_course_contents($navmap,\%map_url,\%resource_symb,\%titles,'examblock');
%{$lookups{'maps'}} = reverse(%map_url);
%{$lookups{'resources'}} = reverse(%resource_symb);
@@ -987,10 +1076,13 @@
'noch' => 'No change',
);
$r->print('<div id="showmodify" style="display:block">'.
- &Apache::loncommon::start_data_table());
+ &Apache::loncommon::start_data_table().'<tr>');
+ if ($readonly) {
+ $disabled = ' disabled="disabled"';
+ } else {
+ $r->print('<th></th>');
+ }
$r->print(<<"END");
- <tr>
- <th></th>
<th>$ltext->{'type'}</th>
<th>$ltext->{'even'}</th>
<th>$ltext->{'blck'}</th>
@@ -1009,8 +1101,12 @@
&Apache::loncommon::aboutmewrapper(
&Apache::loncommon::plainname($setuname,$setudom),
$setuname,$setudom);
+ my $state = '';
$r->print(&Apache::loncommon::start_data_table_row());
- $r->print(<<"ACT");
+ if ($readonly) {
+ $state = 'disabled';
+ } else {
+ $r->print(<<"ACT");
<td valign="middle"><span class="LC_nobreak"><label>
<input type="radio" name="action_$parmcount" value="modify" />$lt{'modi'}
@@ -1024,19 +1120,21 @@
</label></span>
</td>
ACT
+ }
my ($start,$end,$startform,$endform);
if ($record =~ /^(\d+)____(\d+)$/) {
($start,$end) = split(/____/,$record);
$startform = &Apache::lonhtmlcommon::date_setter('blockform','startdate_'.
- $parmcount,$start,$onchange);
+ $parmcount,$start,$onchange,
+ undef,$state);
$endform = &Apache::lonhtmlcommon::date_setter('blockform','enddate_'.
- $parmcount,$end,$onchange);
+ $parmcount,$end,$onchange,
+ undef,$state);
$r->print('<td><fieldset><legend>'.$ltext->{'defs'}.'</legend>'.
$ltext->{'star'}.': '.$startform.'<br />'.
$ltext->{'endd'}.': '.$endform.'</fieldset></td>');
} elsif ($record =~ /^firstaccess____(.+)$/) {
my $item = $1;
- my ($itemname,$iteminfo,$skipdetails);
my $type = 'map';
my $url;
if ($item eq 'course') {
@@ -1048,130 +1146,20 @@
$url = $item;
}
$r->print('<td><fieldset><legend>'.$ltext->{'trig'}.'</legend>');
- if ($type eq 'course') {
- $itemname = &mt('Timer for all items in course.');
- } else {
- if (&Apache::lonnet::is_on_map($url)) {
- if ($type eq 'map') {
- if (ref($navmap)) {
- my $title;
- my $resobj = $navmap->getResourceByUrl($item);
- if (ref($resobj)) {
- $title = $resobj->compTitle();
- } else {
- $title = &Apache::lonnet::gettitle($item);
- }
- $itemname = &mt('Timer for all items in folder: [_1]',
- '<span style="font-style:italic">'.
- $title.'</span>');
- }
- } else {
- if (ref($navmap)) {
- my $title;
- my $resobj = $navmap->getBySymb($item);
- if (ref($resobj)) {
- $title = $resobj->compTitle();
- } else {
- $title = &Apache::lonnet::gettitle($item);
- }
- $itemname = &mt('Timer for resource: [_1]',
- '<span style="font-style:italic">'.
- $title.'</span>');
- }
- }
- if (ref($navmap)) {
- my $path = &show_timer_path($type,$item);
- if ($path) {
- $iteminfo = ' <span style="font-size:90%;">'.
- &mt('(in: [_1])',$path).
- '</span>';
- }
- }
- } else {
- $skipdetails = 1;
- $itemname = '<span style="LC_warning">'.
- &mt('Timer folder/resource not in course').
- '</span>';
- }
- }
- if ((!$skipdetails) && (ref($intervals) eq 'HASH')) {
- if (ref($intervals->{$type}) eq 'HASH') {
- $iteminfo .= &trigger_details_toggle($parmcount).
- '<ul id="trigdetails_'.$parmcount.'" style="display:none">';
- if ($type eq 'course') {
- foreach my $scope (keys(%{$intervals->{$type}})) {
- if ($scope eq 'all') {
- $iteminfo .= '<li>'.&mt('All users -- time limit: [_1]',
- &convlim($intervals->{$type}->{$scope})).'</li>';
- } elsif ($scope eq 'secgrp') {
- if (ref($intervals->{$type}->{$scope}) eq 'HASH') {
- $iteminfo .= '<li>'.&mt('Sections/groups').'<ul>';
- foreach my $item (sort(keys(%{$intervals->{$type}->{$scope}}))) {
- $iteminfo .= '<li>'.&mt('[_1] -- time limit: [_2]',$item,
- &convlim($intervals->{$type}->{$scope}->{$item})).
- '</li>';
- }
- $iteminfo .= '</ul></li>';
- }
- } elsif ($scope eq 'users') {
- if (ref($intervals->{$type}->{$scope}) eq 'HASH') {
- $iteminfo .= '<li>'.&mt('Users').'<ul>';
- foreach my $item (sort(keys(%{$intervals->{$type}->{$scope}}))) {
- $iteminfo .= '<li>'.&mt('[_1] -- time limit: [_2]',
- &convlim($item,$intervals->{$type}->{$scope}->{$item})).
- '</li>';
- }
- $iteminfo .= '</ul></li>';
- }
- }
- }
- } elsif (($type eq 'map') || ($type eq 'resource')) {
- if (ref($intervals->{$type}->{$item}) eq 'HASH') {
- foreach my $scope (keys(%{$intervals->{$type}->{$item}})) {
- if ($scope eq 'all') {
- $iteminfo .= '<li>'.&mt('All users -- time limit: [_1]',
- &convlim($intervals->{$type}->{$item}->{$scope})).
- '</li>';
- } elsif ($scope eq 'secgrp') {
- if (ref($intervals->{$type}->{$item}->{$scope}) eq 'HASH') {
- $iteminfo .= '<li>'.&mt('Sections/groups').'<ul>';
- foreach my $sec (sort(keys(%{$intervals->{$type}->{$item}->{$scope}}))) {
- $iteminfo .= '<li>'.&mt('[_1] -- time limit: [_2]',$sec,
- &convlim($intervals->{$type}->{$item}->{$scope}->{$sec})).
- '</li>';
- }
- $iteminfo .= '</ul></li>';
- }
- } elsif ($scope eq 'users') {
- if (ref($intervals->{$type}->{$item}->{$scope}) eq 'HASH') {
- $iteminfo .= '<li>'.&mt('Users').'<ul>';
- foreach my $user (sort(keys(%{$intervals->{$type}->{$item}->{$scope}}))) {
- $iteminfo .= '<li>'.&mt('[_1] -- time limit: [_2]',$user,
- &convlim($intervals->{$type}->{$item}->{$scope}->{$user})).
- '</li>';
- }
- $iteminfo .= '</ul></li>';
- }
- }
- }
- }
- }
- $iteminfo .= '</ul>';
- }
- }
- $r->print(&create_interval_form($intervals,$parmcount,$navmap,$item,$jschg,
- $itemname,$iteminfo).'</fieldset></td>');
+ my ($itemname,$iteminfo) = &interval_details($item,$type,$url,$navmap,$intervals,$parmcount);
+ $r->print(&create_interval_form($intervals,$parmcount,$navmap,'blocking',$item,$jschg,
+ $itemname,$iteminfo,$disabled).'</fieldset></td>');
}
$r->print(<<"END");
<td>
- <input type="text" name="title_$parmcount" size="15" value="$title" onfocus="$jschg" />
+ <input type="text" name="title_$parmcount" size="15" value="$title" onfocus="$jschg" $disabled />
<input type="hidden" name="key_$parmcount" value="$blockid" />
<br />
<br />
$ltext->{'setb'}: $settername
</td>
END
- $r->print('<td>'.&blocker_checkboxes($parmcount,$blocks,$jschg,\%lookups).'</td>'.
+ $r->print('<td>'.&blocker_checkboxes($parmcount,$blocks,$jschg,\%lookups,$disabled).'</td>'.
&Apache::loncommon::end_data_table_row());
$parmcount++;
}
@@ -1223,7 +1211,7 @@
my %lt = &Apache::lonlocal::texthash(
'exam' => 'e.g., Exam 1',
);
- my $intervalform = &create_interval_form($intervals,$parmcount,$navmap);
+ my $intervalform = &create_interval_form($intervals,$parmcount,$navmap,'blocking');
if ($intervalform ne '') {
$intervalform = '<fieldset>'.
'<legend>'.$ltext->{'chtr'}.'</legend>'.
@@ -1261,7 +1249,7 @@
}
sub blocker_checkboxes {
- my ($parmcount,$blocks,$jschg,$lookups) = @_;
+ my ($parmcount,$blocks,$jschg,$lookups,$disabled) = @_;
my ($typeorder,$types) = &blocktype_text();
my $numinrow = 2;
my %currdocs;
@@ -1328,7 +1316,7 @@
}
$output .= '<span class="LC_nobreak"><label>'."\n".
'<input type="checkbox" id="'.$item.'" name="'.$item.'"'.
- $blockstatus.$clickaction.' value="1" />'.
+ $blockstatus.$clickaction.' value="1"'.$disabled.' />'.
$types->{$block}.'</label></span>'."\n";
if ($block eq 'docs') {
if ($blockstatus ne '') {
@@ -1347,9 +1335,10 @@
}
sub create_interval_form {
- my ($intervals,$parmcount,$navmap,$currkey,$jschg,$itemname,$iteminfo) = @_;
+ my ($intervals,$parmcount,$navmap,$context,$currkey,$jschg,$itemname,$iteminfo,$disabled) = @_;
return unless ((ref($intervals) eq 'HASH') && (ref($navmap)));
my $intervalform;
+ my $counter = 0;
if (keys(%{$intervals}) > 0) {
foreach my $type (sort(keys(%{$intervals}))) {
if ($type eq 'course') {
@@ -1360,7 +1349,7 @@
$clickaction = ' onclick="'.$jschg.'"';
}
$intervalform .= '<label><input type="radio" name="firstaccess_'.$parmcount.
- '" value="course"'.$checked.$clickaction.' />';
+ '" value="course"'.$checked.$clickaction.$disabled.' />';
if ($currkey eq 'course') {
$intervalform .= $itemname;
} else {
@@ -1369,8 +1358,14 @@
$intervalform .= '</label>';
if ($currkey eq 'course') {
$intervalform .= $iteminfo;
+ } elsif ($context eq 'accesstimes') {
+ (undef,$iteminfo) = &interval_details('course',$type,'',$navmap,$intervals,$counter);
+ if ($iteminfo) {
+ $intervalform .= ' '.$iteminfo;
+ }
}
$intervalform .= '<br />';
+ $counter ++;
} elsif ($type eq 'map') {
if (ref($intervals->{$type}) eq 'HASH') {
if (ref($navmap)) {
@@ -1385,7 +1380,7 @@
}
$intervalform .= '<label><input type="radio" name="firstaccess_'.$parmcount.
'" value="'.&HTML::Entities::encode($map,'"<>&').'"'.
- $checked.$clickaction.' />';
+ $checked.$clickaction.$disabled.' />';
if ($currkey eq $map) {
$intervalform .= $itemname.'</label>'.$iteminfo;
} else {
@@ -1405,8 +1400,15 @@
$intervalform .= &mt('Timer for all items in folder: [_1]',
'<i>'.$title.'</i>').
'</label>'.$path;
+ if ($context eq 'accesstimes') {
+ (undef,$iteminfo) = &interval_details($map,$type,$map,$navmap,$intervals,$counter);
+ if ($iteminfo) {
+ $intervalform .= ' '.$iteminfo;
+ }
+ }
}
$intervalform .= '<br />';
+ $counter ++;
}
}
}
@@ -1426,14 +1428,15 @@
}
$intervalform .= '<label><input type="radio" name="firstaccess_'.$parmcount.
'" value="'.&HTML::Entities::encode($resource,'"<>&').'"'.
- $checked.$clickaction.' />';
+ $checked.$clickaction.$disabled.' />';
if ($currkey eq $resource) {
$intervalform .= $itemname.'</label>'.$iteminfo;
} else {
my ($title,$path,$hierarchy);
if (ref($resobj)) {
$title = $resobj->compTitle();
- } else {
+ }
+ if ($title eq '') {
$title = &Apache::lonnet::gettitle($resource);
}
$hierarchy = &show_timer_path($type,$resource,$navmap);
@@ -1445,8 +1448,19 @@
$intervalform .= &mt('Timer for resource: [_1]','<i>'.$title.'</i>').
'</label>'.
$path;
+ if ($context eq 'accesstimes') {
+ if (ref($resobj)) {
+ my $url = $resobj->src();
+ if ($url eq '') {
+ (my $map, my $resid, $url) = &Apache::lonnet::decode_symb($resource);
+ }
+ ($itemname,$iteminfo) = &interval_details($resource,$type,$url,$navmap,$intervals,$counter);
+ $intervalform .= ' '.$iteminfo;
+ }
+ }
}
$intervalform .= '<br />';
+ $counter ++;
}
}
}
@@ -1456,7 +1470,7 @@
if ($currkey ne '') {
$intervalform = '<input type="radio" name="firstaccess_'.$parmcount.
'" checked="checked" value="'.
- &HTML::Entities::encode($currkey,'"<>&').' />'.
+ &HTML::Entities::encode($currkey,'"<>&').'"'.$disabled.' />'.
$itemname.'<br />';
} else {
$intervalform = &mt('No timed items defined.').' '.
@@ -1474,6 +1488,121 @@
'style="text-decoration: none;"><b>'.&mt('(More ...)').'</b></a></span>';
}
+sub interval_details {
+ my ($item,$type,$url,$navmap,$intervals,$parmcount) = @_;
+ my ($itemname,$iteminfo,$skipdetails);
+ if ($type eq 'course') {
+ $itemname = &mt('Timer for all items in course.');
+ } else {
+ if (&Apache::lonnet::is_on_map($url)) {
+ if ($type eq 'map') {
+ if (ref($navmap)) {
+ my $title;
+ my $resobj = $navmap->getResourceByUrl($item);
+ if (ref($resobj)) {
+ $title = $resobj->compTitle();
+ } else {
+ $title = &Apache::lonnet::gettitle($item);
+ }
+ $itemname = &mt('Timer for all items in folder: [_1]',
+ '<span style="font-style:italic">'.
+ $title.'</span>');
+ }
+ } else {
+ if (ref($navmap)) {
+ my $title;
+ my $resobj = $navmap->getBySymb($item);
+ if (ref($resobj)) {
+ $title = $resobj->compTitle();
+ } else {
+ $title = &Apache::lonnet::gettitle($item);
+ }
+ $itemname = &mt('Timer for resource: [_1]',
+ '<span style="font-style:italic">'.
+ $title.'</span>');
+ }
+ }
+ if (ref($navmap)) {
+ my $path = &show_timer_path($type,$item);
+ if ($path) {
+ $iteminfo = ' <span style="font-size:90%;">'.
+ &mt('(in: [_1])',$path).
+ '</span>';
+ }
+ }
+ } else {
+ $skipdetails = 1;
+ $itemname = '<span style="LC_warning">'.
+ &mt('Timer folder/resource not in course').
+ '</span>';
+ }
+ }
+ if ((!$skipdetails) && (ref($intervals) eq 'HASH') && (ref($intervals->{$type}) eq 'HASH')) {
+ $iteminfo = &trigger_details_toggle($parmcount).
+ '<ul id="trigdetails_'.$parmcount.'" style="display:none">';
+ if ($type eq 'course') {
+ foreach my $scope (keys(%{$intervals->{$type}})) {
+ if ($scope eq 'all') {
+ $iteminfo .= '<li>'.&mt('All users -- time limit: [_1]',
+ &convlim($intervals->{$type}->{$scope})).'</li>';
+ } elsif ($scope eq 'secgrp') {
+ if (ref($intervals->{$type}->{$scope}) eq 'HASH') {
+ $iteminfo .= '<li>'.&mt('Sections/groups').'<ul>';
+ foreach my $item (sort(keys(%{$intervals->{$type}->{$scope}}))) {
+ $iteminfo .= '<li>'.&mt('[_1] -- time limit: [_2]',$item,
+ &convlim($intervals->{$type}->{$scope}->{$item})).
+ '</li>';
+ }
+ $iteminfo .= '</ul></li>';
+ }
+ } elsif ($scope eq 'users') {
+ if (ref($intervals->{$type}->{$scope}) eq 'HASH') {
+ $iteminfo .= '<li>'.&mt('Users').'<ul>';
+ foreach my $item (sort(keys(%{$intervals->{$type}->{$scope}}))) {
+ $iteminfo .= '<li>'.&mt('[_1] -- time limit: [_2]',
+ &convlim($item,$intervals->{$type}->{$scope}->{$item})).
+ '</li>';
+ }
+ $iteminfo .= '</ul></li>';
+ }
+ }
+ }
+ } elsif (($type eq 'map') || ($type eq 'resource')) {
+ if (ref($intervals->{$type}->{$item}) eq 'HASH') {
+ foreach my $scope (keys(%{$intervals->{$type}->{$item}})) {
+ if ($scope eq 'all') {
+ $iteminfo .= '<li>'.&mt('All users -- time limit: [_1]',
+ &convlim($intervals->{$type}->{$item}->{$scope})).
+ '</li>';
+ } elsif ($scope eq 'secgrp') {
+ if (ref($intervals->{$type}->{$item}->{$scope}) eq 'HASH') {
+ $iteminfo .= '<li>'.&mt('Sections/groups').'<ul>';
+ foreach my $sec (sort(keys(%{$intervals->{$type}->{$item}->{$scope}}))) {
+ $iteminfo .= '<li>'.&mt('[_1] -- time limit: [_2]',$sec,
+ &convlim($intervals->{$type}->{$item}->{$scope}->{$sec})).
+ '</li>';
+ }
+ $iteminfo .= '</ul></li>';
+ }
+ } elsif ($scope eq 'users') {
+ if (ref($intervals->{$type}->{$item}->{$scope}) eq 'HASH') {
+ $iteminfo .= '<li>'.&mt('Users').'<ul>';
+ foreach my $user (sort(keys(%{$intervals->{$type}->{$item}->{$scope}}))) {
+ $iteminfo .= '<li>'.&mt('[_1] -- time limit: [_2]',$user,
+ &convlim($intervals->{$type}->{$item}->{$scope}->{$user})).
+ '</li>';
+ }
+ $iteminfo .= '</ul></li>';
+ }
+ }
+ }
+ }
+ }
+ $iteminfo .= '</ul>';
+ }
+ return ($itemname,$iteminfo);
+}
+
sub show_timer_path {
my ($type,$item,$navmap) = @_;
return unless(ref($navmap));
@@ -1510,10 +1639,6 @@
sub blockingmenu_javascript {
my ($blockcount) = @_;
- my %lt = &Apache::lonlocal::texthash (
- more => 'More ...',
- less => 'Less ...',
- );
return <<ENDSCRIPT;
<script type="text/javascript">
// <![CDATA[
@@ -1569,6 +1694,22 @@
return;
}
+// ]]>
+</script>
+ENDSCRIPT
+
+}
+
+sub details_javascript {
+ my %lt = &Apache::lonlocal::texthash (
+ more => 'More ...',
+ less => 'Less ...',
+ );
+ return <<ENDSCRIPT;
+
+<script type="text/javascript">
+// <![CDATA[
+
function showTriggerDetails(item) {
document.getElementById('trigdetails_'+item).style.display='block';
document.getElementById('trigdetails_'+item).style.textAlign='left';
More information about the LON-CAPA-cvs
mailing list