--- loncom/interface/lonwishlist.pm 2010/08/16 13:37:41 1.3
+++ loncom/interface/lonwishlist.pm 2010/08/20 10:38:41 1.7
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Routines to control the wishlist
#
-# $Id: lonwishlist.pm,v 1.3 2010/08/16 13:37:41 wenzelju Exp $
+# $Id: lonwishlist.pm,v 1.7 2010/08/20 10:38:41 wenzelju Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -26,7 +26,20 @@
# http://www.lon-capa.org/
#
+=pod
+=head1 NAME
+
+Apache::lonwishlist - Wishlist-Module
+
+=head1 SYNOPSIS
+
+The wishlist offers a possibility to store links to resources from the resource-pool and external websites in a hierarchical list.
+It is only available for user with access to the resource-pool. The list can be structured by folders.
+
+The wishlist-module uses the CPAN-module "Tree" for easily handling the directory-structure of the wishlist. Each node in the tree has an index to be referenced by.
+
+=cut
package Apache::lonwishlist;
@@ -49,6 +62,31 @@ my @allFolders;
my @allNodes;
my $indentConst = 20;
+=pod
+
+=head2 Routines for getting and putting the wishlist data from and accordingly to users data.
+
+=over 4
+
+=item * &getWishlist()
+
+ Get the wishlist-data via lonnet::dump() and returns the got data in a hash.
+
+
+=item * &putWishlist(wishlist)
+
+ Parameter is a reference to a hash. Puts the wishlist-data contained in the given hash via lonnet::put() to user-data.
+
+
+=item * &deleteWishlist()
+
+ Deletes all entries from the user-data for wishlist. Do this before putting in new data.
+
+
+=back
+
+=cut
+
# Read wishlist from user-data
sub getWishlist {
@@ -92,6 +130,57 @@ sub deleteWishlist {
}
+=pod
+
+=head2 Routines for changing the directory struture of the wishlist.
+
+=over 4
+
+=item * &newEntry(title, path, note)
+
+ Creates a new entry in the wishlist containing the given informations. Additionally saves the date of creation in the entry.
+
+
+=item * &deleteEntries(marked)
+
+ Parameter is a reference to an array containing the indices of all nodes that should be removed from the tree.
+
+
+=item * &sortEntries(indexNode, at)
+
+ Changes the position of a node given by indexNode within its siblings. New position is given by at.
+
+
+=item * &moveEntries(indexNodesToMove, indexParent)
+
+ Parameter is a reference to an array containing the indices of all nodes that should be moved. indexParent specifies the node that will become the new Parent for these nodes.
+
+
+=item * &setNewTitle(nodeindex, newTitle)
+
+ Sets the title for the node given by nodeindex to newTitle.
+
+
+=item * &setNewPath(nodeindex, newPath)
+
+ Sets the path for the node given by nodeindex to newPath.
+
+
+=item * &setNewNote(nodeindex, newNote)
+
+ Sets the note for the node given by nodeindex to newNote.
+
+
+=item * &saveChanges()
+
+ Prepares the wishlist-hash to save it via &putWishlist(wishlist).
+
+
+=back
+
+=cut
+
+
# Create a new entry
sub newEntry() {
my ($title, $path, $note) = @_;
@@ -226,6 +315,40 @@ sub saveChanges {
}
+=pod
+
+=head2 Routines for handling the directory structure
+
+=over 4
+
+=item * &getFoldersForOption(nodes)
+
+ Return the titles for all exiting folders in an option-tag, used to offer the users a possibility to create a new link or folder in an existing folder.
+ Recursive call starting with all children of the root of the tree (parameter nodes is reference to an array containing the nodes of the current level).
+
+
+=item * &getfoldersOption()
+
+ Returns the option-tag build by &getFoldersForOption(nodes). Use it to transfer this to other modules (e.g. lonmenu.pm).
+
+
+=item * &getFoldersToArray(children)
+
+ Puts all nodes that represent folders in the wishlist into an array.
+ Recursive call starting with all children of the root of the tree (parameter nodes is reference to an array containing the nodes of the current level).
+
+
+=item * &getNodesToArray(children)
+
+ Puts all existing nodes into an array (apart from the root node, because this one does not represent an entry in the wishlist).
+ Recursive call starting with all children of the root of the tree (parameter nodes is reference to an array containing the nodes of the current level).
+
+
+ =back
+
+=cut
+
+
# Return the names for all exiting folders in option-tags, so
# a new link or a new folder can be created in an existing folder
my $indent = 0;
@@ -294,6 +417,67 @@ sub getNodesToArray {
}
+=pod
+
+=head2 Routines for the user-interface of the wishlist
+
+=over 4
+
+=item * &JSforWishlist()
+
+ Returns JavaScript-functions needed for wishlist actions like open and close folders.
+
+
+=item * &wishlistView(nodes)
+
+ Returns the table-HTML-markup for the wishlist in mode "view".
+ Recursive call starting with all children of the root of the tree (parameter nodes is reference to an array containing the nodes of the current level).
+
+
+=item * &wishlistEdit(nodes)
+
+ Returns the table-HTML-markup for the wishlist in mode "edit".
+ Recursive call starting with all children of the root of the tree (parameter nodes is reference to an array containing the nodes of the current level).
+
+
+=item * &wishlistMove(nodes, marked)
+
+ Returns the table-HTML-markup for the wishlist in mode "move". Highlights all entry "selected to move" contained in marked (reference to array).
+ Recursive call starting with all children of the root of the tree (parameter nodes is reference to an array containing the nodes of the current level).
+
+
+=item * &wishlistImport(nodes)
+
+ Returns the table-HTML-markup for the wishlist in mode "import".
+ Recursive call starting with all children of the root of the tree (parameter nodes is reference to an array containing the nodes of the current level).
+
+
+=item * &makePage(mode, marked)
+
+ Returns the HTML-markup for the whole wishlist depending on mode. If mode is "move" we need the marked entries to be highlighted a "selected to move".
+ Calls &wishlistView(nodes), &wishlistEdit(nodes) or &wishlistMove(nodes, marked).
+
+
+=item * &makePageSet()
+
+ Returns the HTML-Markup for the page shown when a link was set by using the icon when viewing a resource.
+
+
+=item * &makePageImport()
+
+ Returns the HTML-Markup for the page shown when links should be imported into courses.
+
+
+=item * &makeErrorPage ()
+
+ Returns the HTML-Markup for an error-page shown if the wishlist could not be loaded.
+
+
+=back
+
+=cut
+
+
# Return a script-tag containing Javascript-function
# needed for wishlist actions like 'new link' ect.
sub JSforWishlist {
@@ -453,6 +637,9 @@ sub JSforWishlist {
else if (action == 'saveOK') {
r = linksOK();
}
+ else if (action == 'move') {
+ r = selectDestinationFolder();
+ }
document.getElementsByName('list')[0].setAttribute("action", "/adm/wishlist?mode="+mode);
if (r) {
document.getElementsByName('list')[0].submit();
@@ -879,20 +1066,6 @@ sub JSforWishlist {
newWin.focus();
}
- function finish_import() {
- opener.document.forms.simpleedit.importdetail.value='';
- for (var num = 0; num < document.forms.groupsort.fnum.value; num++) {
- if (eval("document.forms.groupsort.check"+num+".checked") && eval("document.forms.groupsort.filelink"+num+".value") != '') {
- opener.document.forms.simpleedit.importdetail.value+='&'+
- eval("document.forms.groupsort.title"+num+".value")+'='+
- eval("document.forms.groupsort.filelink"+num+".value")+'='+
- eval("document.forms.groupsort.id"+num+".value");
- }
- }
- opener.document.forms.simpleedit.submit();
- self.close();
- }
-
function checkAll() {
var checkboxes = document.getElementsByName('check');
for (var i = 0; i < checkboxes.length; i++) {
@@ -911,6 +1084,68 @@ JAVASCRIPT
return $js;
}
+sub JSforImport{
+ my $rat = shift;
+
+ my $js;
+ if ($rat eq 'simple' || $rat eq '') {
+ $js = &Apache::lonhtmlcommon::scripttag(<');
+ my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs(&mt('Wishlist').&Apache::loncommon::help_open_topic('Wishlist'));
# get javascript-code for wishlist-interactions
my $js = &JSforWishlist();
@@ -1364,7 +1596,7 @@ sub makePage {
'Now choose the new destination folder.').'
'.&mt("Please note that you can use the checkboxes corresponding to a folder to ". - "easily check all links within this folder. The folder structure itself can't be imported. ". - "All checked links will be imported into the current folder of your course.").'
'; - + if (!$rat) { + $inner .= ''.&mt("Please note that you can use the checkboxes corresponding to a folder to ". + "easily check all links within this folder. The folder structure itself can't be imported. ". + "All checked links will be imported into the current folder of your course.").'
'; + } + else { + $inner .= ''.&mt("Please note that you can use the checkboxes corresponding to a folder to ". + "easily check all links within this folder. The folder structure itself can't be imported. ") + .'
'; + } my %wishlist = &getWishlist(); my $fnum = (keys %wishlist)-1; @@ -1468,10 +1708,7 @@ sub makeErrorPage { text => 'Wishlist'}); my $startPage = &Apache::loncommon::start_page('Wishlist'); - my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs('Wishlist '. - ''. - '