[LON-CAPA-cvs] cvs: loncom /interface londocs.pm lonmenu.pm lonwishlist.pm
wenzelju
wenzelju@source.lon-capa.org
Mon, 16 Aug 2010 08:58:39 -0000
This is a MIME encoded message
--wenzelju1281949119
Content-Type: text/plain
wenzelju Mon Aug 16 08:58:39 2010 EDT
Modified files:
/loncom/interface londocs.pm lonmenu.pm lonwishlist.pm
Log:
londocs, lonmenu, lonwishlist:
- Added import-functionality for wishlist.
lonwishlist:
- Replaced getkeys() and get() by dump().
- Preview of links in wishlist now in Popup.
- Some little style changes (inserted <p> etc.).
--wenzelju1281949119
Content-Type: text/plain
Content-Disposition: attachment; filename="wenzelju-20100816085839.txt"
Index: loncom/interface/londocs.pm
diff -u loncom/interface/londocs.pm:1.434 loncom/interface/londocs.pm:1.435
--- loncom/interface/londocs.pm:1.434 Mon Aug 16 03:49:33 2010
+++ loncom/interface/londocs.pm Mon Aug 16 08:58:39 2010
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Documents
#
-# $Id: londocs.pm,v 1.434 2010/08/16 03:49:33 raeburn Exp $
+# $Id: londocs.pm,v 1.435 2010/08/16 08:58:39 wenzelju Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -2921,6 +2921,7 @@
'srch' => 'Search',
'impo' => 'Import',
'book' => 'Import Bookmarks',
+ 'wish' => 'Import from Wishlist',
'selm' => 'Select Map',
'load' => 'Load Map',
'reco' => 'Recover Deleted Documents',
@@ -2994,6 +2995,7 @@
{ '<img class="LC_noBorder LC_middle" src="/res/adm/pages/src.png" alt="'.$lt{srch}.'" onclick="javascript:groupsearch()" />' => "$uploadtag<a class='LC_menubuttons_link' href='javascript:groupsearch()'>$lt{'srch'}</a>" },
{ '<img class="LC_noBorder LC_middle" src="/res/adm/pages/res.png" alt="'.$lt{impo}.'" onclick="javascript:groupimport();"/>' => "<a class='LC_menubuttons_link' href='javascript:groupimport();'>$lt{'impo'}</a>$help{'Importing_LON-CAPA_Resource'}" },
{ '<img class="LC_noBorder LC_middle" src="/res/adm/pages/vbkm.png" alt="'.$lt{book}.'" onclick="javascript:groupopen(0,1,1);" />' => "<a class='LC_menubuttons_link' href='javascript:groupopen(0,1,1);'>$lt{'book'}</a>" },
+ { '<img class="LC_noBorder LC_middle" src="/res/adm/pages/wishlist.png" alt="'.$lt{wish}.'" onclick="javascript:open_Wishlist_Import();" />' => "<a class='LC_menubuttons_link' href='javascript:open_Wishlist_Import();'>$lt{'wish'}</a>" },
);
$simpleeditdefaultform .= create_form_ul(create_list_elements(@simpleeditdefaultforma));
$simpleeditdefaultform .=(<<SEDFFORM);
Index: loncom/interface/lonmenu.pm
diff -u loncom/interface/lonmenu.pm:1.333 loncom/interface/lonmenu.pm:1.334
--- loncom/interface/lonmenu.pm:1.333 Fri Aug 13 13:46:18 2010
+++ loncom/interface/lonmenu.pm Mon Aug 16 08:58:39 2010
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Routines to control the menu
#
-# $Id: lonmenu.pm,v 1.333 2010/08/13 13:46:18 wenzelju Exp $
+# $Id: lonmenu.pm,v 1.334 2010/08/16 08:58:39 wenzelju Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -1328,6 +1328,12 @@
wishlistlink.document.close();
}
+function open_Wishlist_Import() {
+ var newWin = window.open('/adm/wishlist?inhibitmenu=yes&mode=import',
+ 'wishlistImport','scrollbars=1,resizable=1,menubar=0');
+ newWin.focus();
+}
+
ENDUTILITY
}
Index: loncom/interface/lonwishlist.pm
diff -u loncom/interface/lonwishlist.pm:1.1 loncom/interface/lonwishlist.pm:1.2
--- loncom/interface/lonwishlist.pm:1.1 Tue Aug 10 14:30:20 2010
+++ loncom/interface/lonwishlist.pm Mon Aug 16 08:58:39 2010
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Routines to control the wishlist
#
-# $Id: lonwishlist.pm,v 1.1 2010/08/10 14:30:20 wenzelju Exp $
+# $Id: lonwishlist.pm,v 1.2 2010/08/16 08:58:39 wenzelju Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -36,6 +36,7 @@
use Apache::loncommon();
use Apache::lonhtmlcommon;
use Apache::lonlocal;
+use LONCAPA;
use Tree;
@@ -51,16 +52,14 @@
# Read wishlist from user-data
sub getWishlist {
- my @wishlistkeys = &Apache::lonnet::getkeys('wishlist');
- my %wishlist = &Apache::lonnet::get('wishlist',\@wishlistkeys);
- foreach my $i (%wishlist) {
+ my %wishlist = &Apache::lonnet::dump('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/) {
&Apache::lonnet::logthis($i.'! Create file by putting in the "root" of the directory tree.');
&Apache::lonnet::put('wishlist', {'root' => ''});
- @wishlistkeys = &Apache::lonnet::getkeys('wishlist');
- %wishlist = &Apache::lonnet::get('wishlist',\@wishlistkeys);
+ %wishlist = &Apache::lonnet::dump('wishlist');
}
elsif ($i =~ /^(con_lost|error|no_such_host)/i) {
&Apache::lonnet::logthis('ERROR while attempting to get wishlist: '.$i);
@@ -68,7 +67,8 @@
}
}
- #If hash is empty, put 'root' into it, so we got a node to start the tree
+ # if we got no keys in hash returned by dump(), return error.
+ # wishlist will not be loaded, instead the user will be asked to try again later
if ((keys %wishlist) == 0) {
&Apache::lonnet::logthis('ERROR while attempting to get wishlist: no keys retrieved!');
return 'error';
@@ -148,6 +148,7 @@
my $indexParent = shift;
my @nodesToMove = ();
+ # get all nodes that should be moved
&getNodesToArray(\@childrenRt);
foreach my $index (@$indexNodesToMove) {
my $foundNode = &Tree::getNodeByIndex($index, \@allNodes);
@@ -241,7 +242,7 @@
$root = &Tree::HashToTree();
@childrenRt = $root->children();
&getFoldersForOption(\@childrenRt);
- my $options = '<option value="" selected="selected"></option>'.$foldersOption;
+ my $options = '<option value="" selected="selected">('.&mt('Top level').')</option>'.$foldersOption;
$foldersOption = '';
return $options;
}
@@ -321,7 +322,7 @@
'<br/><br/>'.
'<input type="submit" value="'.$lt{'si'}.'" />'.
'<select name="folders">'.
- '<option value="" selected="selected"></option>'.
+ '<option value="" selected="selected">('.&mt('Top level').')</option>'.
$foldersOption.
'</select>'.
'<input type="button" value="'.$lt{'cl'}.'" onclick="javascript:window.close();" />'.
@@ -341,7 +342,7 @@
'<br/><br/>'.
'<input type="submit" value="'.$lt{'si'}.'" />'.
'<select name="folders">'.
- '<option value="" selected="selected"></option>'.
+ '<option value="" selected="selected">('.&mt('Top level').')</option>'.
$foldersOption.
'</select>'.
'<input type="button" value="'.$lt{'cl'}.'" onclick="javascript:window.close();" />'.
@@ -413,7 +414,7 @@
r = true;
}
document.getElementsByName('list')[0].setAttribute("action", "/adm/wishlist?mode="+mode);
- if(r){
+ if (r) {
document.getElementsByName('list')[0].submit();
}
}
@@ -799,6 +800,39 @@
return false;
}
+ function preview(url) {
+ var newWin = window.open(url+'?inhibitmenu=yes','preview','width=560,height=350,scrollbars=yes');
+ 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++) {
+ checkboxes[i].checked = "checked";
+ }
+ }
+
+ function uncheckAll() {
+ var checkboxes = document.getElementsByName('check');
+ for (var i = 0; i < checkboxes.length; i++) {
+ checkboxes[i].checked = "";
+ }
+ }
+
JAVASCRIPT
return $js;
}
@@ -834,8 +868,9 @@
# entry is a link
else {
$wishlistHTMLview .= '<td id="padd'.$index.'" style="padding-left:'.(($indent-$indentConst)<=0?$indentConst:$indent).'px; min-width: 220px;">'.
+ '<a href="javascript:preview('."'".$n->value()->path()."'".');">'.
'<img src="/res/adm/pages/wishlist-link.png" id="img'.$index.'" alt="link" />'.
- '<a href="'.$n->value()->path().'">'.$n->value()->title().'</a></td>';
+ $n->value()->title().'</a></td>';
}
# note-icon, different icons for an entries with note and those without
@@ -999,19 +1034,17 @@
}
# entry is a link
else {
- if (!$isIn) {
- $wishlistHTMLmove .= '<td></td>'.
- '<td id="padd'.$index.'" style="padding-left:'.(($indent-$indentConst)<=0?$indentConst:$indent).'px; min-width: 220px;">';
- }
# higlight the title, if the link was selected to be moved
- else {
- $wishlistHTMLmove .= '<td></td>'.
- '<td id="padd'.$index.'" style="padding-left:'.(($indent-$indentConst)<=0?$indentConst:$indent).'px; min-width: 220px;'.
- 'color:red;">';
+ my $highlight = '';
+ if ($isIn) {
+ $highlight = 'style="color:red;"';
}
# link-image and title
- $wishlistHTMLmove .= '<img src="/res/adm/pages/wishlist-link.png" id="img'.$index.'" alt="link"/>'.
- $n->value()->title().'</td>';
+ $wishlistHTMLmove .= '<td></td>'.
+ '<td id="padd'.$index.'" style="padding-left:'.(($indent-$indentConst)<=0?$indentConst:$indent).'px; min-width: 220px;">'.
+ '<a href="javascript:preview('."'".$n->value()->path()."'".');" '.$highlight.'>'.
+ '<img src="/res/adm/pages/wishlist-link.png" id="img'.$index.'" alt="link"/>'.
+ $n->value()->title().'</a></td>';
}
# note-icon, different icons for an entries with note and those without
@@ -1045,6 +1078,81 @@
}
}
+
+
+# HTML-Markup for table if in import-mode
+my $wishlistHTMLimport;
+my $indent = $indentConst;
+my $form = 1;
+sub wishlistImport {
+ my $nodes = shift;
+
+ foreach my $n (@$nodes) {
+ my $index = $n->value()->nindex();
+
+ # start row, use data_table routines to set class to LC_even or LC_odd automatically. this row contains a checkbox, the title and the note-icon.
+ # only display the top level entries on load
+ $wishlistHTMLimport .= ($n->parent()->value() eq 'root')?&Apache::loncommon::start_data_table_row('','row'.$index)
+ :&Apache::loncommon::continue_data_table_row('LC_hidden','row'.$index);
+
+
+ # checkboxes
+ $wishlistHTMLimport .= '<td>'.
+ '<input type="checkbox" name="check" id="check'.$index.'" value="'.$index.'" '.
+ 'onclick="selectAction('."'row".$index."'".')"/>'.
+ '<input type="hidden" name="title'.$index.'" value="'.&escape($n->value()->title()).'">'.
+ '<input type="hidden" name="filelink'.$index.'" value="'.&escape($n->value()->path()).'">'.
+ '<input type="hidden" name="id'.$index.'">'.
+ '</td>';
+
+ # entry is a folder
+ if ($n->value()->path() eq '') {
+ $wishlistHTMLimport .= '<td id="padd'.$index.'" style="padding-left:'.(($indent-$indentConst)<0?0:($indent-$indentConst)).'px; min-width: 220px;">'.
+ '<a href="javascript:;" onclick="folderAction('."'row".$index."'".')" style="vertical-align:top">'.
+ '<img src="/adm/lonIcons/arrow.closed.gif" id="img'.$index.'" alt = "" class="LC_icon"/>'.
+ '<img src="/adm/lonIcons/navmap.folder.closed.gif" id="imgFolder'.$index.'" alt="folder"/>'.
+ $n->value()->title().'</a></td>';
+ }
+ # entry is a link
+ else {
+ $wishlistHTMLimport .= '<td id="padd'.$index.'" style="padding-left:'.(($indent-$indentConst)<=0?$indentConst:$indent).'px; min-width: 220px;">'.
+ '<a href="javascript:preview('."'".$n->value()->path()."'".');">'.
+ '<img src="/res/adm/pages/wishlist-link.png" id="img'.$index.'" alt="link" />'.
+ $n->value()->title().'</a></td>';
+ $form++;
+ }
+
+ # note-icon, different icons for an entries with note and those without
+ my $noteIMG = 'anot.png';
+
+ if ($n->value()->note() ne '') {
+ $noteIMG = 'anot2.png';
+ }
+
+ $wishlistHTMLimport .= '<td style="padding-left:10px;"><a href="javascript:;" onclick="setDisplayNote('."'note".$index."'".')">'.
+ '<img id="noteImg'.$index.'" src="/res/adm/pages/'.$noteIMG.'" alt="'.&mt('Note').'" title="'.&mt('Note').'" '.
+ ' class="LC_icon"/></a></td>';
+
+ $wishlistHTMLimport .= &Apache::loncommon::end_data_table_row();
+
+ # start row containing the textarea for the note, do not display note on default, readonly in import-mode
+ $wishlistHTMLimport .= &Apache::loncommon::continue_data_table_row('LC_hidden','note'.$index).
+ '<td></td><td>'.
+ '<textarea id="noteText'.$index.'" cols="25" rows="3" style="width:100%" '.
+ 'name="newnote" readonly="readonly">'.
+ $n->value()->note().'</textarea></td><td></td>';
+ $wishlistHTMLimport .= &Apache::loncommon::end_data_table_row();
+
+ # 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;
+ &wishlistImport(\@children);
+ $indent -= 20;
+ }
+ }
+}
+
# Returns the HTML-Markup for wishlist
sub makePage {
my $mode = shift;
@@ -1142,7 +1250,7 @@
'<input type="hidden" id="action" name="action" value=""/>';
# only display subbox in view- or edit-mode
- if ($mode ne 'move') {
+ if ($mode eq 'view' || $mode eq 'edit') {
$inner .= $subbox;
}
@@ -1155,7 +1263,7 @@
$inner .= &Apache::loncommon::end_data_table();
}
else {
- $inner .= '<span class="LC_info">'.&mt("Your wihlist ist currently empty.").'</span>';
+ $inner .= '<span class="LC_info">'.&mt("Your wishlist ist currently empty.").'</span>';
}
$wishlistHTMLedit = '';
}
@@ -1165,7 +1273,7 @@
$inner .= '<table class="LC_data_table LC_tableOfContent">'.$wishlistHTMLview.'</table>';
}
else {
- $inner .= '<span class="LC_info">'.&mt("Your wihlist ist currently empty.").'</span>';
+ $inner .= '<span class="LC_info">'.&mt("Your wishlist ist currently empty.").'</span>';
}
$wishlistHTMLview = '';
}
@@ -1177,8 +1285,8 @@
if ($markStr) {
$markStr = substr($markStr, 0, length($markStr)-1);
$inner .= '<input type="hidden" value="'.$markStr.'" name="markedToMove"/>';
- $inner .= '<span class="LC_info">'.&mt('You have selected the red marked entries to be moved to another folder. '.
- 'Now choose the new destination folder.').'</span><br/><br/>';
+ $inner .= '<p><span class="LC_info">'.&mt('You have selected the red marked entries to be moved to another folder. '.
+ 'Now choose the new destination folder.').'</span></p>';
&wishlistMove(\@childrenRt, $marked);
$inner .= '<table class="LC_data_table LC_tableOfContent">'.$wishlistHTMLmove.'</table><br/><br/>';
$inner .= '<input type="button" value="'.&mt('Move').'" onclick="setFormAction('."'','view'".'); selectDestinationFolder()"/>'.
@@ -1188,7 +1296,7 @@
'<td>'.&mt('Top level').'</td><td></td></tr>';
}
else {
- $inner .= '<span class="LC_info">'.&mt("You haven't marked any entry to move.").'</span><br/>'.
+ $inner .= '<p><span class="LC_info">'.&mt("You haven't marked any entry to move.").'</span></p>'.
'<input type="button" value="'.&mt('Back').'" onclick="go('."'/adm/wishlist'".')"/>';
}
}
@@ -1199,7 +1307,7 @@
# end_page
my $endPage = &Apache::loncommon::end_page();
- # put all page-elements togther
+ # put all page-elements together
my $page = $startPage.$breadcrumbs.$js.$inner.$endPage;
return $page;
@@ -1223,13 +1331,60 @@
# end_page
my $endPage = &Apache::loncommon::end_page();
- # put all page-elements togther
+ # put all page-elements together
my $page = $startPage.$inner.$endPage;
return $page;
}
+# Returns the HTML-Markup for the page, shown when links should be imported into a course
+sub makePageImport {
+ # start_page
+ my $startPage = &Apache::loncommon::start_page('Wishlist',undef,
+ {'only_body' => 1});
+
+ # get javascript-code for wishlist-interactions
+ my $js = &JSforWishlist();
+
+ my $inner = '<h1>'.&mt('Import Resources from Wishlist').'</h1>';
+ $inner .= '<p><span class="LC_info">'.&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.").'</span></p>';
+
+ my %wishlist = &getWishlist();
+ my $fnum = (keys %wishlist)-1;
+
+ $inner .= '<form method="post" name="groupsort">'.
+ '<input type="hidden" value="'.$fnum.'" name="fnum">'.
+ '<input type="button" onclick="javascript:checkAll()" id="checkallbutton" value="'.&mt('Check All').'">'.
+ '<input type="button" onclick="javascript:uncheckAll()" id="uncheckallbutton" value="'.&mt('Uncheck All').'">'.
+ '<input type="button" value="'.&mt('Import Checked').'" onclick="finish_import();">'.
+ '<input type="button" value="'.&mt('Cancel').'" onclick="window.close();"><br/><br/>';
+
+
+ # wishlist-table
+ &wishlistImport(\@childrenRt);
+ if ($wishlistHTMLimport ne '') {
+ $inner .= '<table class="LC_data_table LC_tableOfContent">'.$wishlistHTMLimport.'</table>';
+ }
+ else {
+ $inner .= '<span class="LC_info">'.&mt("Your wishlist ist currently empty.").'</span>';
+ }
+ $wishlistHTMLimport = '';
+
+ $inner .= '</form>';
+
+ # end_page
+ my $endPage = &Apache::loncommon::end_page();
+
+ # put all page-elements together
+ my $page = $startPage.$js.$inner.$endPage;
+
+ return $page;
+}
+
+
# Returns the HTML-Markup for error-page
sub makeErrorPage {
# breadcrumbs and start_page
@@ -1250,7 +1405,7 @@
# end_page
my $endPage = &Apache::loncommon::end_page();
- # put all page-elements togther
+ # put all page-elements together
my $page = $startPage.$breadcrumbs.$inner.$endPage;
return $page;
@@ -1349,6 +1504,9 @@
elsif ($env{'form.mode'} eq 'move') {
$page = &makePage("move", \@marked);
}
+ elsif ($env{'form.mode'} eq 'import') {
+ $page = &makePageImport();
+ }
elsif ($env{'form.mode'} eq 'set') {
$page = &makePageSet();
}
@@ -1518,7 +1676,7 @@
}
}
# if there are nodes, build up the tree-structure
- if (defined $TreeHash{'root'}) {
+ if (defined $TreeHash{'root'} && $TreeHash{'root'} ne '') {
my @childrenRtIn = @{ $TreeHash{'root'} };
&buildTree(\$root, \@childrenRtIn,\@TreeNodes,\%TreeHash);
}
--wenzelju1281949119--