--- loncom/interface/lonwishlist.pm 2012/06/07 02:28:04 1.15
+++ loncom/interface/lonwishlist.pm 2015/06/09 21:22:57 1.25
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Utility-routines for wishlist
#
-# $Id: lonwishlist.pm,v 1.15 2012/06/07 02:28:04 raeburn Exp $
+# $Id: lonwishlist.pm,v 1.25 2015/06/09 21:22:57 damieng Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -94,10 +94,10 @@ my $foldersOption;
sub getWishlist {
my @keys = &Apache::lonnet::getkeys('wishlist');
my %wishlist = &Apache::lonnet::get('wishlist',\@keys);
- foreach my $i ( keys %wishlist) {
+ foreach my $i (keys(%wishlist)) {
#File not found. This appears at the first time using the wishlist
#Create file and put 'root' into it
- if ($i =~m/^error:No such file/) {
+ if ($i =~m/^\Qerror:No such file\E/) {
&Apache::lonnet::logthis($i.'! Create file by putting in the "root" of the directory tree.');
&Apache::lonnet::put('wishlist', {'root' => ''});
my $options = '';
@@ -113,7 +113,7 @@ sub getWishlist {
# if we got no keys in hash returned by get(), return error.
# wishlist will not be loaded, instead the user will be asked to try again later
- if ((keys %wishlist) == 0) {
+ if ((keys(%wishlist)) == 0) {
&Apache::lonnet::logthis('ERROR while attempting to get wishlist: no keys retrieved!');
return 'error';
}
@@ -197,7 +197,7 @@ sub newEntry() {
my $date = gmtime();
# Create Entry-Object
my $entry = Entry->new(title => $title, path => $path, note => $note, date => $date);
- # Create Tree-Object, this correspones a node in the wishlist-tree
+ # Create Tree-Object, this corresponds a node in the wishlist-tree
my $tree = Tree->new($entry);
# Add this node to wishlist-tree
my $folderIndex = $env{'form.folders'};
@@ -536,12 +536,16 @@ sub JSforWishlist {
' Paths to LON-CAPA resources must be of the form /res/domain/user/...'.
' Paths to external websites must contain the network protocol, e.g. http://...');
my $warningLinkNotAllowed2 = &mt('The following link is not allowed:').' ';
- my $warningLink = &mt('You must insert a title and a path!');
- my $warningFolder = &mt('You must insert a title!');
my $warningDelete = &mt('Are you sure you want to delete the selected entries? Deleting a folder also deletes all entries within this folder!');
my $warningSave = &mt('You have unsaved changes. You can either save these changes now by clicking "OK" or click "Cancel" if you do not want to save your changes.');
my $warningMoveS = &mt('You must select at minimum one entry to move!');
my $warningMoveD = &mt('You must select a destination folder!');
+ &js_escape(\$warningLinkNotAllowed1);
+ &js_escape(\$warningLinkNotAllowed2);
+ &js_escape(\$warningDelete);
+ &js_escape(\$warningSave);
+ &js_escape(\$warningMoveS);
+ &js_escape(\$warningMoveD);
$foldersOption = '';
my $js = &Apache::lonhtmlcommon::scripttag(<value()->path() eq '') {
- $wishlistHTMLview .= '
';
}
@@ -1155,9 +1166,9 @@ sub wishlistView {
# if the entry is a folder, it could have other entries as content. if it has, call wishlistView for those entries
my @children = $n->children();
if ($#children >=0) {
- $indent += 20;
+ $indent_view += 20;
&wishlistView(\@children);
- $indent -= 20;
+ $indent_view -= 20;
}
}
}
@@ -1165,7 +1176,7 @@ sub wishlistView {
# HTML-Markup for table if in edit-mode
my $wishlistHTMLedit;
-my $indent = $indentConst;
+my $indent_edit = $indentConst;
sub wishlistEdit {
my $nodes = shift;
my $curNode = 1;
@@ -1200,7 +1211,7 @@ sub wishlistEdit {
if ($n->value()->path() eq '') {
$wishlistHTMLedit .= '
';
@@ -1242,9 +1253,9 @@ sub wishlistEdit {
# if the entry is a folder, it could have other entries as content. if it has, call wishlistEdit for those entries
my @children = $n->children();
if ($#children >=0) {
- $indent += 20;
+ $indent_edit += 20;
&wishlistEdit(\@children);
- $indent -= 20;
+ $indent_edit -= 20;
}
}
}
@@ -1254,7 +1265,7 @@ sub wishlistEdit {
# HTML-Markup for table if in move-mode
my $wishlistHTMLmove ='
'.
'
'.&mt('Top level').'
';
-my $indent = $indentConst;
+my $indent_move = $indentConst;
sub wishlistMove {
my $nodes = shift;
my $marked = shift;
@@ -1278,12 +1289,12 @@ sub wishlistMove {
# display a radio-button, if the folder was not selected to be moved
if (!$isIn) {
$wishlistHTMLmove .= '
'.
- '
';
+ '
';
}
# highlight the title, if the folder was selected to be moved
else {
$wishlistHTMLmove .= '
'.
- '
';
}
#arrow- and folder-image, all folders are open, and title
@@ -1299,9 +1310,10 @@ sub wishlistMove {
$highlight = 'style="color:red;"';
}
# link-image and title
+ my $quotable_link = &Apache::loncommon::escape_single($n->value()->path());
$wishlistHTMLmove .= '
';
}
@@ -1330,9 +1342,9 @@ sub wishlistMove {
# if the entry is a folder, it could have other entries as content. if it has, call wishlistMove for those entries
my @children = $n->children();
if ($#children >=0) {
- $indent += 20;
+ $indent_move += 20;
&wishlistMove(\@children, $marked);
- $indent -= 20;
+ $indent_move -= 20;
}
}
}
@@ -1341,7 +1353,7 @@ sub wishlistMove {
# HTML-Markup for table if in import-mode
my $wishlistHTMLimport;
-my $indent = $indentConst;
+my $indent_imp = $indentConst;
my $form = 1;
sub wishlistImport {
my ($nodes,$numskipped) = @_;
@@ -1355,16 +1367,30 @@ sub wishlistImport {
foreach my $n (@$nodes) {
my $index = $n->value()->nindex();
+
+ #
+ # Determine which resources in stored links may be imported into a course/community.
+ # (a) Import of directories in /res space is not supported.
+ # (b) Import of a resource into a community requires user has 'bro' privilege for resource
+ # (i.e., user has author or co-author role for corresponcding Authoring Space).
+ # (c) Import of a resource into a course requires user has 'be' privilege for resource.
+ #
+
if ($n->value()->path() =~ m{^(/res/$match_domain/$match_username/)}) {
- if ($is_community) {
- unless (&Apache::lonnet::allowed('bro',$n->value()->path())) {
- $nopick{$n->value()->path()} = $n->value()->title();
- $$numskipped ++;
- }
+ if ($n->value()->path() =~ m{/$}) {
+ $nopick{$n->value()->path()} = $n->value()->title();
+ $$numskipped ++;
} else {
- unless (&Apache::lonnet::allowed('bre',$n->value()->path())) {
- $nopick{$n->value()->path()} = $n->value()->title();
- $$numskipped ++;
+ if ($is_community) {
+ unless (&Apache::lonnet::allowed('bro',$n->value()->path())) {
+ $nopick{$n->value()->path()} = $n->value()->title();
+ $$numskipped ++;
+ }
+ } else {
+ unless (&Apache::lonnet::allowed('bre',$n->value()->path())) {
+ $nopick{$n->value()->path()} = $n->value()->title();
+ $$numskipped ++;
+ }
}
}
}
@@ -1395,7 +1421,7 @@ sub wishlistImport {
# entry is a folder
if ($n->value()->path() eq '') {
- $wishlistHTMLimport .= '
';
@@ -1436,9 +1463,9 @@ sub wishlistImport {
# if the entry is a folder, it could have other entries as content. if it has, call wishlistImport for those entries
my @children = $n->children();
if ($#children >=0) {
- $indent += 20;
+ $indent_imp += 20;
&wishlistImport(\@children,$numskipped);
- $indent -= 20;
+ $indent_imp -= 20;
}
}
return;
@@ -1463,7 +1490,7 @@ sub makePage {
'onload' => 'javascript:onLoadAction('."'".$mode."'".');',
'onunload' => 'javascript:window.name = '."'loncapaclient'"}});
- my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs(&mt('Stored Links').&Apache::loncommon::help_open_topic('Wishlist'));
+ my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs(&mt('Stored Links'),'Wishlist');
# get javascript-code for wishlist-interactions
my $js = &JSforWishlist();
@@ -1638,6 +1665,8 @@ sub makePopUpNewLink {
' or to external websites.'.
' Paths to LON-CAPA resources must be of the form /res/domain/user/...'.
' Paths to external websites must contain the network protocol, e.g. http://...');
+ &js_escape(\$warningLink);
+ &js_escape(\$warningLinkNotAllowed1);
my $inPageWishlistlink1 = '
'.&mt('Save to Stored Links').'
';
# If no title is delivered, 'New Link' is called up from the wishlist-interface, so after
@@ -1741,7 +1770,7 @@ sub makePopUpNewFolder {
'bgcolor' => '#FFFFFF',});
my $warningFolder = &mt('You must insert a title!');
-
+ &js_escape(\$warningFolder);
my $inPageNewFolder = '