Diff for /loncom/interface/lonwishlist.pm between versions 1.16 and 1.27

version 1.16, 2012/08/01 19:07:51 version 1.27, 2018/04/14 02:29:44
Line 94  my $foldersOption; Line 94  my $foldersOption;
 sub getWishlist {  sub getWishlist {
     my @keys = &Apache::lonnet::getkeys('wishlist');      my @keys = &Apache::lonnet::getkeys('wishlist');
     my %wishlist = &Apache::lonnet::get('wishlist',\@keys);      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          #File not found. This appears at the first time using the wishlist
         #Create file and put 'root' into it          #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::logthis($i.'! Create file by putting in the "root" of the directory tree.');
            &Apache::lonnet::put('wishlist', {'root' => ''});             &Apache::lonnet::put('wishlist', {'root' => ''});
            my $options = '<option value="" selected="selected">('.&mt('Top level').')</option>';             my $options = '<option value="" selected="selected">('.&mt('Top level').')</option>';
Line 113  sub getWishlist { Line 113  sub getWishlist {
   
     # if we got no keys in hash returned by get(), return error.      # 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      # 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!');          &Apache::lonnet::logthis('ERROR while attempting to get wishlist: no keys retrieved!');
         return 'error';          return 'error';
     }      }
Line 197  sub newEntry() { Line 197  sub newEntry() {
     my $date = gmtime();      my $date = gmtime();
     # Create Entry-Object      # Create Entry-Object
     my $entry = Entry->new(title => $title, path => $path, note => $note, date => $date);      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);      my $tree = Tree->new($entry);
     # Add this node to wishlist-tree      # Add this node to wishlist-tree
     my $folderIndex = $env{'form.folders'};      my $folderIndex = $env{'form.folders'};
Line 536  sub JSforWishlist { Line 536  sub JSforWishlist {
             ' Paths to LON-CAPA resources must be of the form /res/domain/user/...'.              ' 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://...');              ' Paths to external websites must contain the network protocol, e.g. http://...');
     my $warningLinkNotAllowed2 = &mt('The following link is not allowed:').' ';      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 $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 $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 $warningMoveS = &mt('You must select at minimum one entry to move!');
     my $warningMoveD = &mt('You must select a destination folder!');      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 = '';      $foldersOption = '';
   
     my $js = &Apache::lonhtmlcommon::scripttag(<<JAVASCRIPT);      my $js = &Apache::lonhtmlcommon::scripttag(<<JAVASCRIPT);
Line 1042  sub JSforImport{ Line 1046  sub JSforImport{
         function finish_import() {          function finish_import() {
             opener.document.forms.simpleedit.importdetail.value='';              opener.document.forms.simpleedit.importdetail.value='';
             for (var num = 0; num < document.forms.groupsort.fnum.value; num++) {              for (var num = 0; num < document.forms.groupsort.fnum.value; num++) {
                   try {
                       eval("document.forms.groupsort.filelink"+num+".value");
                   }
                   catch(err) {
                      continue;
                   }
                 if (eval("document.forms.groupsort.check"+num+".checked") && eval("document.forms.groupsort.filelink"+num+".value") != '') {                  if (eval("document.forms.groupsort.check"+num+".checked") && eval("document.forms.groupsort.filelink"+num+".value") != '') {
                     opener.document.forms.simpleedit.importdetail.value+='&'+                      opener.document.forms.simpleedit.importdetail.value+='&'+
                     eval("document.forms.groupsort.title"+num+".value")+'='+                      eval("document.forms.groupsort.title"+num+".value")+'='+
Line 1098  JAVASCRIPT Line 1108  JAVASCRIPT
   
 # HTML-Markup for table if in view-mode  # HTML-Markup for table if in view-mode
 my $wishlistHTMLview;  my $wishlistHTMLview;
 my $indent = $indentConst;  my $indent_view = $indentConst;
 sub wishlistView {  sub wishlistView {
     my $nodes = shift;      my $nodes = shift;
   
Line 1117  sub wishlistView { Line 1127  sub wishlistView {
   
         # entry is a folder          # entry is a folder
         if ($n->value()->path() eq '') {          if ($n->value()->path() eq '') {
             $wishlistHTMLview .= '<td id="padd'.$index.'" style="padding-left:'.(($indent-$indentConst)<0?0:($indent-$indentConst)).'px; min-width: 220px;">'.              $wishlistHTMLview .= '<td id="padd'.$index.'" style="padding-left:'.(($indent_view-$indentConst)<0?0:($indent_view-$indentConst)).'px; min-width: 220px;">'.
                                  '<a href="javascript:;" onclick="folderAction('."'row".$index."'".')" style="vertical-align:top">'.                                   '<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/arrow.closed.gif" id="img'.$index.'" alt = "" class="LC_icon"/>'.
                                  '<img src="/adm/lonIcons/navmap.folder.closed.gif" id="imgFolder'.$index.'" alt="folder"/>'.                                   '<img src="/adm/lonIcons/navmap.folder.closed.gif" id="imgFolder'.$index.'" alt="folder"/>'.
Line 1125  sub wishlistView { Line 1135  sub wishlistView {
         }          }
         # entry is a link          # entry is a link
         else {          else {
             $wishlistHTMLview .= '<td id="padd'.$index.'" style="padding-left:'.(($indent-$indentConst)<=0?$indentConst:$indent).'px; min-width: 220px;">'.              my $quotable_link = &Apache::loncommon::escape_single($n->value()->path());
                                  '<a href="javascript:preview('."'".$n->value()->path()."'".');">'.              $wishlistHTMLview .= '<td id="padd'.$index.'" style="padding-left:'.(($indent_view-$indentConst)<=0?$indentConst:$indent_view).'px; min-width: 220px;">'.
                                    '<a href="javascript:preview('."'".$quotable_link."'".');">'.
                                  '<img src="/res/adm/pages/wishlist-link.png" id="img'.$index.'" alt="link" />'.                                   '<img src="/res/adm/pages/wishlist-link.png" id="img'.$index.'" alt="link" />'.
                                  $n->value()->title().'</a></td>';                                   $n->value()->title().'</a></td>';
         }          }
Line 1155  sub wishlistView { Line 1166  sub wishlistView {
         # if the entry is a folder, it could have other entries as content. if it has, call wishlistView for those entries           # 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();          my @children = $n->children();
         if ($#children >=0) {          if ($#children >=0) {
             $indent += 20;              $indent_view += 20;
             &wishlistView(\@children);              &wishlistView(\@children);
             $indent -= 20;              $indent_view -= 20;
         }          }
     }      }
 }  }
Line 1165  sub wishlistView { Line 1176  sub wishlistView {
   
 # HTML-Markup for table if in edit-mode  # HTML-Markup for table if in edit-mode
 my $wishlistHTMLedit;  my $wishlistHTMLedit;
 my $indent = $indentConst;  my $indent_edit = $indentConst;
 sub wishlistEdit {  sub wishlistEdit {
     my $nodes = shift;      my $nodes = shift;
     my $curNode = 1;      my $curNode = 1;
Line 1200  sub wishlistEdit { Line 1211  sub wishlistEdit {
         if ($n->value()->path() eq '') {          if ($n->value()->path() eq '') {
             $wishlistHTMLedit .= '<td><select class="LC_hidden" name="sel" id="sel'.$index.'" onchange="submitSelect();">'.              $wishlistHTMLedit .= '<td><select class="LC_hidden" name="sel" id="sel'.$index.'" onchange="submitSelect();">'.
                                  $options.'</select></td>'.                                   $options.'</select></td>'.
                                  '<td id="padd'.$index.'" style="padding-left:'.(($indent-$indentConst)<0?0:($indent-$indentConst)).'px;">'.                                   '<td id="padd'.$index.'" style="padding-left:'.(($indent_edit-$indentConst)<0?0:($indent_edit-$indentConst)).'px;">'.
                                  '<a href="javascript:;" onclick="folderAction('."'row".$index."'".')" style="vertical-align:top" >'.                                   '<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/arrow.closed.gif" id="img'.$index.'" alt = ""  class="LC_icon"/>'.
                                  '<img src="/adm/lonIcons/navmap.folder.closed.gif" id="imgFolder'.$index.'" alt="folder"/></a>'.                                   '<img src="/adm/lonIcons/navmap.folder.closed.gif" id="imgFolder'.$index.'" alt="folder"/></a>'.
Line 1212  sub wishlistEdit { Line 1223  sub wishlistEdit {
         else {          else {
             $wishlistHTMLedit .= '<td><select class="LC_hidden" name="sel" id="sel'.$index.'" onchange="submitSelect();">'.              $wishlistHTMLedit .= '<td><select class="LC_hidden" name="sel" id="sel'.$index.'" onchange="submitSelect();">'.
                                  $options.'</select></td>'.                                   $options.'</select></td>'.
                                  '<td id="padd'.$index.'" style="padding-left:'.(($indent-$indentConst)<=0?$indentConst:$indent).'px;">'.                                   '<td id="padd'.$index.'" style="padding-left:'.(($indent_edit-$indentConst)<=0?$indentConst:$indent_edit).'px;">'.
                                  '<img src="/res/adm/pages/wishlist-link.png" id="img'.$index.'" alt="link"/>'.                                   '<img src="/res/adm/pages/wishlist-link.png" id="img'.$index.'" alt="link"/>'.
                                  '<input type="text" name="newtitle" value="'.$n->value()->title().'" alt = "'.$n->value()->title().'" /></td>'.                                   '<input type="text" name="newtitle" value="'.$n->value()->title().'" alt = "'.$n->value()->title().'" /></td>'.
                                  '<td><input type="text" name="newpath" value="'.$n->value()->path().'" alt = "'.$n->value()->path().'" /></td>';                                   '<td><input type="text" name="newpath" value="'.$n->value()->path().'" alt = "'.$n->value()->path().'" /></td>';
Line 1242  sub wishlistEdit { Line 1253  sub wishlistEdit {
         # if the entry is a folder, it could have other entries as content. if it has, call wishlistEdit for those entries           # 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();          my @children = $n->children();
         if ($#children >=0) {          if ($#children >=0) {
             $indent += 20;              $indent_edit += 20;
             &wishlistEdit(\@children);              &wishlistEdit(\@children);
             $indent -= 20;              $indent_edit -= 20;
         }          }
     }      }
 }  }
Line 1254  sub wishlistEdit { Line 1265  sub wishlistEdit {
 # HTML-Markup for table if in move-mode  # HTML-Markup for table if in move-mode
 my $wishlistHTMLmove ='<tr id="root" class="LC_odd_row"><td><input type="radio" name="mark" id="radioRoot" value="root" /></td>'.  my $wishlistHTMLmove ='<tr id="root" class="LC_odd_row"><td><input type="radio" name="mark" id="radioRoot" value="root" /></td>'.
                       '<td>'.&mt('Top level').'</td><td></td></tr>';                        '<td>'.&mt('Top level').'</td><td></td></tr>';
 my $indent = $indentConst;  my $indent_move = $indentConst;
 sub wishlistMove {  sub wishlistMove {
     my $nodes = shift;      my $nodes = shift;
     my $marked = shift;      my $marked = shift;
Line 1278  sub wishlistMove { Line 1289  sub wishlistMove {
             # display a radio-button, if the folder was not selected to be moved              # display a radio-button, if the folder was not selected to be moved
             if (!$isIn) {              if (!$isIn) {
                 $wishlistHTMLmove .= '<td><input type="radio" name="mark" id="radio'.$index.'" value="'.$index.'" /></td>'.                  $wishlistHTMLmove .= '<td><input type="radio" name="mark" id="radio'.$index.'" value="'.$index.'" /></td>'.
                                      '<td id="padd'.$index.'" style="padding-left:'.(($indent-$indentConst)<0?0:($indent-$indentConst)).'px; min-width: 220px;">';                                       '<td id="padd'.$index.'" style="padding-left:'.(($indent_move-$indentConst)<0?0:($indent_move-$indentConst)).'px; min-width: 220px;">';
             }              }
             # highlight the title, if the folder was selected to be moved              # highlight the title, if the folder was selected to be moved
             else {              else {
                 $wishlistHTMLmove .= '<td></td>'.                  $wishlistHTMLmove .= '<td></td>'.
                                      '<td id="padd'.$index.'" style="padding-left:'.(($indent-$indentConst)<0?0:($indent-$indentConst)).'px; min-width: 220px;'.                                       '<td id="padd'.$index.'" style="padding-left:'.(($indent_move-$indentConst)<0?0:($indent_move-$indentConst)).'px; min-width: 220px;'.
                                      'color:red;">';                                       'color:red;">';
             }              }
             #arrow- and folder-image, all folders are open, and title              #arrow- and folder-image, all folders are open, and title
Line 1299  sub wishlistMove { Line 1310  sub wishlistMove {
                $highlight = 'style="color:red;"';                 $highlight = 'style="color:red;"';
             }              }
             # link-image and title              # link-image and title
               my $quotable_link = &Apache::loncommon::escape_single($n->value()->path());
             $wishlistHTMLmove .= '<td></td>'.              $wishlistHTMLmove .= '<td></td>'.
                                  '<td id="padd'.$index.'" style="padding-left:'.(($indent-$indentConst)<=0?$indentConst:$indent).'px; min-width: 220px;">'.                                   '<td id="padd'.$index.'" style="padding-left:'.(($indent_move-$indentConst)<=0?$indentConst:$indent_move).'px; min-width: 220px;">'.
                                  '<a href="javascript:preview('."'".$n->value()->path()."'".');" '.$highlight.'>'.                                   '<a href="javascript:preview('."'".$quotable_link."'".');" '.$highlight.'>'.
                                  '<img src="/res/adm/pages/wishlist-link.png" id="img'.$index.'" alt="link"/>'.                                   '<img src="/res/adm/pages/wishlist-link.png" id="img'.$index.'" alt="link"/>'.
                                  $n->value()->title().'</a></td>';                                   $n->value()->title().'</a></td>';
         }          }
Line 1330  sub wishlistMove { Line 1342  sub wishlistMove {
         # if the entry is a folder, it could have other entries as content. if it has, call wishlistMove for those entries           # 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();          my @children = $n->children();
         if ($#children >=0) {          if ($#children >=0) {
             $indent += 20;              $indent_move += 20;
             &wishlistMove(\@children, $marked);              &wishlistMove(\@children, $marked);
             $indent -= 20;              $indent_move -= 20;
         }          }
     }      }
 }  }
Line 1341  sub wishlistMove { Line 1353  sub wishlistMove {
   
 # HTML-Markup for table if in import-mode  # HTML-Markup for table if in import-mode
 my $wishlistHTMLimport;  my $wishlistHTMLimport;
 my $indent = $indentConst;  my $indent_imp = $indentConst;
 my $form = 1;  my $form = 1;
 sub wishlistImport {  sub wishlistImport {
     my ($nodes,$numskipped) = @_;      my ($nodes,$numskipped) = @_;
Line 1355  sub wishlistImport { Line 1367  sub wishlistImport {
   
     foreach my $n (@$nodes) {      foreach my $n (@$nodes) {
         my $index = $n->value()->nindex();          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 ($n->value()->path() =~ m{^(/res/$match_domain/$match_username/)}) {
             if ($is_community) {              if ($n->value()->path() =~ m{/$}) {
                 unless (&Apache::lonnet::allowed('bro',$n->value()->path())) {                  $nopick{$n->value()->path()} = $n->value()->title();
                     $nopick{$n->value()->path()} = $n->value()->title();                  $$numskipped ++;
                     $$numskipped ++;  
                 }  
             } else {              } else {
                 unless (&Apache::lonnet::allowed('bre',$n->value()->path())) {                  if ($is_community) {
                     $nopick{$n->value()->path()} = $n->value()->title();                      unless (&Apache::lonnet::allowed('bro',$n->value()->path())) {
                     $$numskipped ++;                          $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 ++;
                       }
                 }                  }
             }              }
         }          }
Line 1395  sub wishlistImport { Line 1421  sub wishlistImport {
   
         # entry is a folder          # entry is a folder
         if ($n->value()->path() eq '') {          if ($n->value()->path() eq '') {
             $wishlistHTMLimport .= '<td id="padd'.$index.'" style="padding-left:'.(($indent-$indentConst)<0?0:($indent-$indentConst)).'px; min-width: 220px;">'.              $wishlistHTMLimport .= '<td id="padd'.$index.'" style="padding-left:'.(($indent_imp-$indentConst)<0?0:($indent_imp-$indentConst)).'px; min-width: 220px;">'.
                                    '<a href="javascript:;" onclick="folderAction('."'row".$index."'".')" style="vertical-align:top">'.                                     '<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/arrow.closed.gif" id="img'.$index.'" alt = "" class="LC_icon"/>'.
                                    '<img src="/adm/lonIcons/navmap.folder.closed.gif" id="imgFolder'.$index.'" alt="folder"/>'.                                     '<img src="/adm/lonIcons/navmap.folder.closed.gif" id="imgFolder'.$index.'" alt="folder"/>'.
Line 1403  sub wishlistImport { Line 1429  sub wishlistImport {
         }          }
         # entry is a link          # entry is a link
         else {          else {
             $wishlistHTMLimport .= '<td id="padd'.$index.'" style="padding-left:'.(($indent-$indentConst)<=0?$indentConst:$indent).'px; min-width: 220px;">';              $wishlistHTMLimport .= '<td id="padd'.$index.'" style="padding-left:'.(($indent_imp-$indentConst)<=0?$indentConst:$indent_imp).'px; min-width: 220px;">';
             unless ($nopick{$n->value()->path()}) {              unless ($nopick{$n->value()->path()}) {
                 $wishlistHTMLimport .= '<a href="javascript:preview('."'".$n->value()->path()."'".');">';                  my $quotable_link = &Apache::loncommon::escape_single($n->value()->path());
                   $wishlistHTMLimport .= '<a href="javascript:preview('."'".$quotable_link."'".');">';
             }              }
             $wishlistHTMLimport .= '<img src="/res/adm/pages/'.$image.'" id="img'.$index.'" alt="link" />'.              $wishlistHTMLimport .= '<img src="/res/adm/pages/'.$image.'" id="img'.$index.'" alt="link" />'.
                                    '<span '.$style.'>'.$n->value()->title().'</span></a></td>';                                     '<span '.$style.'>'.$n->value()->title().'</span></a></td>';
Line 1436  sub wishlistImport { Line 1463  sub wishlistImport {
         # if the entry is a folder, it could have other entries as content. if it has, call wishlistImport for those entries           # 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();          my @children = $n->children();
         if ($#children >=0) {          if ($#children >=0) {
             $indent += 20;              $indent_imp += 20;
             &wishlistImport(\@children,$numskipped);              &wishlistImport(\@children,$numskipped);
             $indent -= 20;              $indent_imp -= 20;
         }          }
     }      }
     return;      return;
Line 1453  sub makePage { Line 1480  sub makePage {
     $root = $rootgiven;      $root = $rootgiven;
     @childrenRt = $root->children();      @childrenRt = $root->children();
   
       my $windowname = 'loncapaclient';
       if ($env{'request.lti.login'}) {
           $windowname .= 'lti';
       }
   
     # breadcrumbs and start_page      # breadcrumbs and start_page
     &Apache::lonhtmlcommon::clear_breadcrumbs();      &Apache::lonhtmlcommon::clear_breadcrumbs();
     &Apache::lonhtmlcommon::add_breadcrumb(      &Apache::lonhtmlcommon::add_breadcrumb(
Line 1461  sub makePage { Line 1493  sub makePage {
     my $startPage = &Apache::loncommon::start_page('Stored Links',undef,      my $startPage = &Apache::loncommon::start_page('Stored Links',undef,
                                                      {'add_entries' => {                                                       {'add_entries' => {
                                                         'onload' => 'javascript:onLoadAction('."'".$mode."'".');',                                                          'onload' => 'javascript:onLoadAction('."'".$mode."'".');',
                                                         'onunload' => 'javascript:window.name = '."'loncapaclient'"}});                                                          'onunload' => 'javascript:window.name = '."'$windowname'"}});
   
     my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs(&mt('Stored Links').&Apache::loncommon::help_open_topic('Wishlist'));      my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs('Stored Links','Wishlist');
   
     # get javascript-code for wishlist-interactions      # get javascript-code for wishlist-interactions
     my $js = &JSforWishlist();      my $js = &JSforWishlist();
Line 1638  sub makePopUpNewLink { Line 1670  sub makePopUpNewLink {
             ' or to external websites.'.              ' or to external websites.'.
             ' Paths to LON-CAPA resources must be of the form /res/domain/user/...'.              ' 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://...');              ' Paths to external websites must contain the network protocol, e.g. http://...');
       &js_escape(\$warningLink);
       &js_escape(\$warningLinkNotAllowed1);
   
     my $inPageWishlistlink1 = '<h1>'.&mt('Save to Stored Links').'</h1>';      my $inPageWishlistlink1 = '<h1>'.&mt('Save to Stored Links').'</h1>';
     # If no title is delivered, 'New Link' is called up from the wishlist-interface, so after      # If no title is delivered, 'New Link' is called up from the wishlist-interface, so after
Line 1741  sub makePopUpNewFolder { Line 1775  sub makePopUpNewFolder {
                                        'bgcolor'   => '#FFFFFF',});                                         'bgcolor'   => '#FFFFFF',});
   
     my $warningFolder = &mt('You must insert a title!');      my $warningFolder = &mt('You must insert a title!');
       &js_escape(\$warningFolder);
   
     my $inPageNewFolder = '<h1>'.&mt('New Folder').'</h1>'.      my $inPageNewFolder = '<h1>'.&mt('New Folder').'</h1>'.
                           '<form method="post" name="newfolder" action="/adm/wishlist" target="wishlist" '.                            '<form method="post" name="newfolder" action="/adm/wishlist" target="wishlist" '.
Line 1786  SCRIPT Line 1820  SCRIPT
   
 # Returns the HTML-Markup for the page, shown when a link was set  # Returns the HTML-Markup for the page, shown when a link was set
 sub makePageSet {  sub makePageSet {
     # start_page       my $title = 'Stored Links';
     my $startPage = &Apache::loncommon::start_page('Stored Links',undef,  
                                                    {'only_body' => 1});      # start_page
       my $output =
           &Apache::loncommon::start_page($title,undef,
                                          {'only_body' => 1})
          .'<h1>'.&mt($title).'</h1>';
           
     # confirm success and offer link to wishlist      # confirm success and offer link to wishlist
     my $message = &Apache::lonhtmlcommon::confirm_success(&mt('Link successfully saved!'));      $output .=
     $message = &Apache::loncommon::confirmwrapper($message);          &Apache::loncommon::confirmwrapper(
               &Apache::lonhtmlcommon::confirm_success(
     my $inner .= '<br>'.$message.'<br/><br/>'.                  &mt('Link successfully saved!')))
                  '<a href="javascript:;" onclick="opener.open('."'/adm/wishlist'".');window.close();">'.&mt('Go to Stored Links').'</a>'.('&nbsp;' x 3).         .&Apache::lonhtmlcommon::actionbox(
                  '<a href="javascript:;" onclick="window.close();">'.&mt('Close this window').'</a>';              ['<a href="javascript:;" onclick="opener.open('."'/adm/wishlist'".');window.close();">'.&mt('Go to Stored Links').'</a>',
                '<a href="javascript:;" onclick="window.close();">'.&mt('Close this window').'</a>'
               ]);
   
     # end_page       # end_page 
     my $endPage =  &Apache::loncommon::end_page();      $output .= &Apache::loncommon::end_page();
   
     # put all page-elements together      return $output;
     my $page = $startPage.$inner.$endPage;  
   
     return $page;  
 }  }
   
   
Line 1846  sub makePageImport { Line 1883  sub makePageImport {
     #FIXME Saved string containing all folders in wishlist.db-file (key 'folders') in first version of lonwishlist      #FIXME Saved string containing all folders in wishlist.db-file (key 'folders') in first version of lonwishlist
     #After splitting lonwishlist into two modules, this is not necessary anymore. So, dependent from when the wishlist      #After splitting lonwishlist into two modules, this is not necessary anymore. So, dependent from when the wishlist
     #was first called (i.e. when wishlist.db was created), there might be an entry 'folders' or not. Number of links in      #was first called (i.e. when wishlist.db was created), there might be an entry 'folders' or not. Number of links in
     #wishlist.db depends on wether this entry exists or not...JW        #wishlist.db depends on whether this entry exists or not...JW  
     my $fnum;      my $fnum;
     if (defined $wishlist{'folders'}) {      if (defined $wishlist{'folders'}) {
         $fnum = (keys %wishlist)-2;          $fnum = (keys(%wishlist))-2;
     }      }
     else {      else {
         $fnum = (keys %wishlist)-1;          $fnum = (keys(%wishlist))-1;
     }      }
   
     $inner .= '<form method="post" name="groupsort" action="">'.      $inner .= '<form method="post" name="groupsort" action="">'.
Line 1897  sub makeErrorPage { Line 1934  sub makeErrorPage {
                 text => 'Stored Links'});                  text => 'Stored Links'});
     my $startPage = &Apache::loncommon::start_page('Stored Links');      my $startPage = &Apache::loncommon::start_page('Stored Links');
           
     my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs(&mt('Stored Links').&Apache::loncommon::help_open_topic('Wishlist'));      my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs(&mt('Stored Links'),'Wishlist');
     &Apache::lonhtmlcommon::clear_breadcrumbs();      &Apache::lonhtmlcommon::clear_breadcrumbs();
   
     # error-message      # error-message
     my $inner .= '<span class="LC_error">'.&mt('An error occurred! Please try again later.').'</span>';      my $inner .= '<p class="LC_error">'.&mt('An error occurred! Please try again later.').'</p>';
   
     # end_page       # end_page 
     my $endPage =  &Apache::loncommon::end_page();      my $endPage =  &Apache::loncommon::end_page();
Line 2102  sub HashToTree { Line 2139  sub HashToTree {
     my @TreeNodes = ();      my @TreeNodes = ();
     my $root;      my $root;
   
     foreach my $key (keys %$TreeHash) {      foreach my $key (keys(%$TreeHash)) {
         if ($key eq 'root') {          if ($key eq 'root') {
             $root = Tree->new("root");              $root = Tree->new("root");
         }          }

Removed from v.1.16  
changed lines
  Added in v.1.27


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>