--- loncom/interface/loncourserespicker.pm 2013/01/03 21:06:38 1.3
+++ loncom/interface/loncourserespicker.pm 2024/11/22 22:42:27 1.17
@@ -1,6 +1,6 @@
# The LearningOnline Network
#
-# $Id: loncourserespicker.pm,v 1.3 2013/01/03 21:06:38 raeburn Exp $
+# $Id: loncourserespicker.pm,v 1.17 2024/11/22 22:42:27 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -37,7 +37,9 @@ loncourserespicker provides an interface
resources are to be either:
(a) exported to an IMS Content Package
-(b) subject to access blocking for the duriation of an exam/quiz.
+(b) subject to access blocking for the duration of an exam/quiz.
+(c) dumped to an Authoring Space
+(d) receive shortened URLs to be used when deep-linking into a course
=head1 DESCRIPTION
@@ -50,8 +52,8 @@ window used to display the Course Conten
=head1 OVERVIEW
The main subroutine: &create_picker() will display the hierarchy of folders,
-sub-folders, and resources in the Main Course Documents area. Items can be
-selected using checkboxes, and/or a "Check All" button. Selection of a folder
+sub-folders, and resources in the Main Content area. Items can be selected
+using checkboxes, and/or a "Check All" button. Selection of a folder
causes the contents of the folder to also be selected automatically. The
propagation of check status is recursive into sub-folders. Likewise, if an
item deep in a nested set of folders and sub-folders is unchecked, the
@@ -59,11 +61,12 @@ uncheck will propagate up through the hi
a higher level to become unchecked.
There is a submit button, which will be named differently according to the
-content in which resource/folder selection is being made.
+context in which resource/folder selection is being made.
-The two contexts currently supported are: IMS export and selection of
+The four contexts currently supported are: IMS export, selection of
content to be subject to access restructions for the duration of an
-exam.
+exam, selection of items for dumping to an Authoring Space, and
+display or creation of shortened URLs for deep-linking,
=head1 INTERNAL SUBROUTINES
@@ -74,12 +77,13 @@ select items. Checking a folder causes
within the folder. Unchecking a resource causing unchecking of folders
containing the item back up to the top level.
-Inputs: 7.
+Inputs: 11.
- $navmap -- Reference to LON-CAPA navmap object
(encapsulates information about resources in the course).
- $context -- Context in which course resource selection is being made.
- Currently imsexport and examblock are supported.
+ Currently imsexport, examblock, dumpdocs, and shorturls
+ are supported.
- $formname -- Name of the form in the window from which the pop-up
used to select course items was launched.
@@ -95,6 +99,24 @@ Inputs: 7.
- $block -- An internal ID (integer) used to track which exam
block currently being configured.
+ - $preamble -- HTML form elements used to select Authoring Space
+ if more than one available, and also set name of 'Folder
+ in Authoring Space' where content will be dumped, when
+ context is 'dumpdocs'.
+
+ - $numhome -- number of possible Authoring Spaces where content could
+ be dumped when context is 'dumpdocs'.
+
+ - $uploadedfiles -- Reference to hash: keys are paths to files in
+ /home/httpd/lonUsers/$cdom/$1/$2/$3/$cnum/userfiles.
+
+ - $tiny -- Reference to hash: keys are symbs of course items for which
+ shortened URLs have already been created.
+
+ - $readonly -- if true, no "check all" or "uncheck all" buttons will
+ be displayed, and checkboxes will be disabled, if this
+ is for an exam block or for shortened URL creation.
+
Output: $output is the HTML mark-up for display/selection of content
items in the pop-up window.
@@ -111,7 +133,7 @@ Inputs: 7.
- $numcount -- Total numer of folders and resources in course.
- $context -- Context in which resources are being displayed
- (imsexport or examblock).
+ (imsexport, examblock, dumpdocs or shorturls).
- $formname -- Name of form.
@@ -121,7 +143,7 @@ Inputs: 7.
- $checked_maps -- Reference to array of folders currently checked.
-Output: 1. Javascript (witthin tags.
+Output: 1. Javascript (within tags.
=item &get_navmap_object()
@@ -132,7 +154,49 @@ no object instantiated.
Inputs: 2.
- $crstype -- Container type: Course or Community
- - $context -- Context: imsexport or examblock
+ - $context -- Context: imsexport, examblock, dumpdocs, or shorturls
+
+
+=item &clean()
+
+Takes incoming title and replaces non-alphanumeric characters with underscore,
+so title can be used as suggested file name (with appended extension) for file
+copied from course to Authoring Space.
+
+
+=item &enumerate_course_contents()
+
+Create hashes of maps (for folders/pages) and symbs (for resources) in
+a course, where keys are numbers (starting with 1) and values are
+map url, or symb, for an iteration through the course, as seen by
+a Course Coordinator. Used to generate numerical IDs to facilitate
+(a) storage of lists of maps or resources to be blocked during an exam,
+(b) processing selected form element during dumping of selected course
+ content to Authoring Space.
+(c)
+
+Inputs: 7
+
+ $navmap - navmaps object
+
+ $map_url - reference to hash to contain URLs of maps in course
+
+ $resource_symb - reference to hash to contain symbs for
+ resources in course
+
+ $title_ref - reference to hash containing titles for items in
+ course
+
+ $context - examblock, dumpdocs or shorturls
+
+ $cdom - course's domain
+
+ $cnum - courseID
+
+Outputs: None
+
+Side Effects: $map_url and $resource_symb hashrefs are populated.
+
=over
@@ -153,15 +217,25 @@ use Apache::lonlocal;
use LONCAPA qw(:DEFAULT :match);
sub create_picker {
- my ($navmap,$context,$formname,$crstype,$blockedmaps,$blockedresources,$block) = @_;
+ my ($navmap,$context,$formname,$crstype,$blockedmaps,$blockedresources,$block,$preamble,
+ $numhome,$uploadedfiles,$tiny,$readonly) = @_;
return unless (ref($navmap));
- my ($it,$output,$numdisc,%maps,%resources,%discussiontime,%currmaps,%currresources);
+ my ($it,$output,$numdisc,%discussiontime,%currmaps,%currresources,%files,
+ %shorturls,$chkname);
+ $chkname = 'archive';
+ if ($context eq 'shorturls') {
+ $chkname = 'addtiny';
+ }
$it = $navmap->getIterator(undef,undef,undef,1,undef,undef);
if (ref($blockedmaps) eq 'HASH') {
%currmaps = %{$blockedmaps};
}
if (ref($blockedresources) eq 'HASH') {
%currresources = %{$blockedresources};
+ } elsif (ref($uploadedfiles) eq 'HASH') {
+ %files = %{$uploadedfiles};
+ } elsif (ref($tiny) eq 'HASH') {
+ %shorturls = %{$tiny};
}
my @checked_maps;
my $curRes;
@@ -174,42 +248,54 @@ sub create_picker {
my %children = ();
my %hierarchy = ();
my $location=&Apache::loncommon::lonhttpdurl("/adm/lonIcons");
- my $whitespace =
+ my $whitespace =
'';
- my $onsubmit;
+ my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
+ my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
+ my $crsprefix = &propath($cdom,$cnum).'/userfiles/';
+
+ my ($info,$display,$onsubmit,$togglebuttons,$disabled);
if ($context eq 'examblock') {
my $maps_elem = 'docs_maps_'.$block;
my $res_elem = 'docs_resources_'.$block;
$onsubmit = ' onsubmit="return writeToOpener('."'$maps_elem','$res_elem'".');"';
+ $info = &mt('Items in '.lc($crstype).' for which access will be blocked.');
+ if ($readonly) {
+ $disabled = ' disabled="disabled"';
+ }
}
- my $display =
- '