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

version 1.20, 2014/02/17 16:40:22 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 1131  sub wishlistView { Line 1135  sub wishlistView {
         }          }
         # entry is a link          # entry is a link
         else {          else {
               my $quotable_link = &Apache::loncommon::escape_single($n->value()->path());
             $wishlistHTMLview .= '<td id="padd'.$index.'" style="padding-left:'.(($indent_view-$indentConst)<=0?$indentConst:$indent_view).'px; min-width: 220px;">'.              $wishlistHTMLview .= '<td id="padd'.$index.'" style="padding-left:'.(($indent_view-$indentConst)<=0?$indentConst:$indent_view).'px; min-width: 220px;">'.
                                  '<a href="javascript:preview('."'".$n->value()->path()."'".');">'.                                   '<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 1305  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_move-$indentConst)<=0?$indentConst:$indent_move).'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 1361  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 1411  sub wishlistImport { Line 1431  sub wishlistImport {
         else {          else {
             $wishlistHTMLimport .= '<td id="padd'.$index.'" style="padding-left:'.(($indent_imp-$indentConst)<=0?$indentConst:$indent_imp).'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 1459  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 1467  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'),'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 1644  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 1747  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 1855  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 2111  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.20  
changed lines
  Added in v.1.27


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