Diff for /loncom/interface/lonwishlist.pm between versions 1.11 and 1.21

version 1.11, 2012/05/14 16:39:41 version 1.21, 2014/02/28 19:24:03
Line 50  use Apache::lonnet; Line 50  use Apache::lonnet;
 use Apache::loncommon();  use Apache::loncommon();
 use Apache::lonhtmlcommon;  use Apache::lonhtmlcommon;
 use Apache::lonlocal;  use Apache::lonlocal;
 use LONCAPA;  use LONCAPA qw(:DEFAULT :match);
 use Tree;  use Tree;
   
   
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 466  sub getNodesToArray { Line 466  sub getNodesToArray {
      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).            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)  =item * &wishlistImport(nodes, numskipped)
   
      Returns the table-HTML-markup for the wishlist in mode "import".       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).            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).
         Side effect: increments the scalar ref: numskipped with a count of items in 
        Stored Links unavailable for selection, (e.g., now marked obsolete or
        inaccessible in Community context).
   
 =item * &makePage(mode, marked)  =item * &makePage(mode, marked)
   
Line 511  sub getNodesToArray { Line 513  sub getNodesToArray {
 # Return a script-tag containing Javascript-function  # Return a script-tag containing Javascript-function
 # needed for wishlist actions like 'new link' ect.  # needed for wishlist actions like 'new link' ect.
 sub JSforWishlist {  sub JSforWishlist {
     my $startPagePopup = &Apache::loncommon::start_page('Wishlist',undef,      my $startPagePopup = &Apache::loncommon::start_page('Stored Links',undef,
                                                             {'only_body' => 1,                                                              {'only_body' => 1,
                                                              'js_ready'  => 1,                                                               'js_ready'  => 1,
                                                              'bgcolor'   => '#FFFFFF',});                                                               'bgcolor'   => '#FFFFFF',});
Line 528  sub JSforWishlist { Line 530  sub JSforWishlist {
     # that means that it is checked wether a path contains .problem, .quiz, .exam etc.      # that means that it is checked wether a path contains .problem, .quiz, .exam etc.
     # this is good for most cases but crashes as soon as a real external website contains one of this pattern in its URL.      # this is good for most cases but crashes as soon as a real external website contains one of this pattern in its URL.
     # so maybe there's a better way to find out wether a given URL belongs to a LON-CAPA-server or not ...?      # so maybe there's a better way to find out wether a given URL belongs to a LON-CAPA-server or not ...?
     my $warningLinkNotAllowed1 = &mt('You can only insert links to LON-CAPA resources from the resource-pool '.      my $warningLinkNotAllowed1 =
                                     'or to external websites. Paths to LON-CAPA resources must be of the form /res/dom/usr... . '.          &mt('You can only insert links to LON-CAPA resources from the resource-pool'.
                                     'Paths to external websites must contain the network protocol (e.g. http://...).');              ' or to external websites.'.
     my $warningLinkNotAllowed2 = &mt('The following link is not allowed: ');              ' 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 $warningLink = &mt('You must insert a title and a path!');
     my $warningFolder = &mt('You must insert a title!');      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!');
     $foldersOption = '';      $foldersOption = '';
Line 808  sub JSforWishlist { Line 812  sub JSforWishlist {
   
     function setChecked(row,checked) {      function setChecked(row,checked) {
         var childCHECK = document.getElementById(row.id.replace('row','check'));          var childCHECK = document.getElementById(row.id.replace('row','check'));
         childCHECK.checked = checked;          if (!childCHECK.disabled) {
               childCHECK.checked = checked;
           }
     }      }
   
     function getPreviousFolderRows(row) {      function getPreviousFolderRows(row) {
Line 1008  sub JSforWishlist { Line 1014  sub JSforWishlist {
     function checkAll() {      function checkAll() {
         var checkboxes = document.getElementsByName('check');          var checkboxes = document.getElementsByName('check');
         for (var i = 0; i < checkboxes.length; i++) {          for (var i = 0; i < checkboxes.length; i++) {
             checkboxes[i].checked = "checked";              if (!checkboxes[i].disabled) {
                   checkboxes[i].checked = "checked";
               }
         }          }
     }      }
   
     function uncheckAll() {      function uncheckAll() {
         var checkboxes = document.getElementsByName('check');          var checkboxes = document.getElementsByName('check');
         for (var i = 0; i < checkboxes.length; i++) {          for (var i = 0; i < checkboxes.length; i++) {
             checkboxes[i].checked = "";              if (!checkboxes[i].disabled) {
                   checkboxes[i].checked = "";
               }
         }          }
     }      }
   
Line 1032  sub JSforImport{ Line 1042  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 1088  JAVASCRIPT Line 1104  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 1107  sub wishlistView { Line 1123  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 1115  sub wishlistView { Line 1131  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;">'.              $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('."'".$n->value()->path()."'".');">'.
                                  '<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 1145  sub wishlistView { Line 1161  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 1155  sub wishlistView { Line 1171  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 1190  sub wishlistEdit { Line 1206  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 1202  sub wishlistEdit { Line 1218  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 1232  sub wishlistEdit { Line 1248  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 1244  sub wishlistEdit { Line 1260  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 1268  sub wishlistMove { Line 1284  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;">';
             }              }
             # higlight 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 1290  sub wishlistMove { Line 1306  sub wishlistMove {
             }              }
             # link-image and title              # link-image and title
             $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('."'".$n->value()->path()."'".');" '.$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 1320  sub wishlistMove { Line 1336  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 1331  sub wishlistMove { Line 1347  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 = shift;      my ($nodes,$numskipped) = @_;
   
       my ($is_community,%nopick);
       if ($env{'request.course.id'}) {
           if (&Apache::loncommon::course_type() eq 'Community') {
               $is_community = 1;
           }
       }
   
     foreach my $n (@$nodes) {      foreach my $n (@$nodes) {
         my $index = $n->value()->nindex();          my $index = $n->value()->nindex();
           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 ++;
                   }
               } else {
                   unless (&Apache::lonnet::allowed('bre',$n->value()->path())) {
                       $nopick{$n->value()->path()} = $n->value()->title();
                       $$numskipped ++;
                   }
               }
           }
   
         # 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.          # 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          # only display the top level entries on load
Line 1346  sub wishlistImport { Line 1382  sub wishlistImport {
   
     
         # checkboxes          # checkboxes
         $wishlistHTMLimport .= '<td>'.          $wishlistHTMLimport .= '<td>';
                                '<input type="checkbox" name="check" id="check'.$index.'" value="'.$index.'" '.          my ($disabled,$onclick,$image,$style);
                                'onclick="selectAction('."'row".$index."'".')" />'.          if ($nopick{$n->value()->path()}) {
               $disabled = ' disabled="disabled"';
               $image = 'wishlist-link-lighter.png';
               $style = 'style="color:#808080;"';
           } else {
               $onclick = ' onclick="selectAction('."'row".$index."'".')"';
               $image = 'wishlist-link.png';
           }
           $wishlistHTMLimport .= '<input type="checkbox" name="check" id="check'.$index.'" value="'.$index.'" '.
                                  $disabled.$onclick.' />'.
                                '<input type="hidden" name="title'.$index.'" value="'.&escape($n->value()->title()).'" />'.                                 '<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="filelink'.$index.'" value="'.&escape($n->value()->path()).'" />'.
                                '<input type="hidden" name="id'.$index.'" />'.                                 '<input type="hidden" name="id'.$index.'" />';
                                '</td>';          $wishlistHTMLimport .= '</td>';
   
         # 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 1364  sub wishlistImport { Line 1409  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;">';
                                    '<a href="javascript:preview('."'".$n->value()->path()."'".');">'.              unless ($nopick{$n->value()->path()}) {
                                    '<img src="/res/adm/pages/wishlist-link.png" id="img'.$index.'" alt="link" />'.                  $wishlistHTMLimport .= '<a href="javascript:preview('."'".$n->value()->path()."'".');">';
                                    $n->value()->title().'</a></td>';              }
               $wishlistHTMLimport .= '<img src="/res/adm/pages/'.$image.'" id="img'.$index.'" alt="link" />'.
                                      '<span '.$style.'>'.$n->value()->title().'</span></a></td>';
                                    $form++;                                     $form++;
         }          }
   
Line 1395  sub wishlistImport { Line 1442  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);              &wishlistImport(\@children,$numskipped);
             $indent -= 20;              $indent_imp -= 20;
         }          }
     }      }
       return;
 }  }
   
 # Returns the HTML-Markup for wishlist  # Returns the HTML-Markup for wishlist
Line 1415  sub makePage { Line 1463  sub makePage {
     &Apache::lonhtmlcommon::clear_breadcrumbs();      &Apache::lonhtmlcommon::clear_breadcrumbs();
     &Apache::lonhtmlcommon::add_breadcrumb(      &Apache::lonhtmlcommon::add_breadcrumb(
               { href => '/adm/wishlist?mode='.$mode,                { href => '/adm/wishlist?mode='.$mode,
                 text => 'Wishlist'});                  text => 'Stored Links'});
     my $startPage = &Apache::loncommon::start_page('Wishlist',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 = '."'loncapaclient'"}});
   
     my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs(&mt('Wishlist').&Apache::loncommon::help_open_topic('Wishlist'));      my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs(&mt('Stored Links'),'Wishlist');
   
     # get javascript-code for wishlist-interactions      # get javascript-code for wishlist-interactions
     my $js = &JSforWishlist();      my $js = &JSforWishlist();
Line 1513  sub makePage { Line 1561  sub makePage {
             $inner .= &Apache::loncommon::end_data_table();              $inner .= &Apache::loncommon::end_data_table();
         }          }
         else {          else {
             $inner .= '<span class="LC_info">'.&mt("Your wishlist ist currently empty.").'</span>';              $inner .= '<span class="LC_info">'.&mt("Your Stored Links list is currently empty.").'</span>';
         }          }
         $wishlistHTMLedit = '';          $wishlistHTMLedit = '';
     }      }
Line 1523  sub makePage { Line 1571  sub makePage {
             $inner .= '<table class="LC_data_table LC_tableOfContent">'.$wishlistHTMLview.'</table>';              $inner .= '<table class="LC_data_table LC_tableOfContent">'.$wishlistHTMLview.'</table>';
         }          }
         else {          else {
             $inner .= '<span class="LC_info">'.&mt("Your wishlist ist currently empty.").'</span>';              $inner .= '<span class="LC_info">'.&mt("Your Stored Links list is currently empty.").'</span>';
         }          }
         $wishlistHTMLview = '';          $wishlistHTMLview = '';
     }      }
Line 1586  sub makePopUpNewLink { Line 1634  sub makePopUpNewLink {
   
     # HTML-Markup for the Pop-Up-window 'Set a link for this resource to wishlist'      # HTML-Markup for the Pop-Up-window 'Set a link for this resource to wishlist'
     my $startPageWishlistlink =       my $startPageWishlistlink = 
         &Apache::loncommon::start_page('Set link to wishlist',undef,          &Apache::loncommon::start_page('Save to Stored Links',undef,
                                       {'only_body' => 1,                                        {'only_body' => 1,
                                        'bgcolor'   => '#FFFFFF',});                                         'bgcolor'   => '#FFFFFF',});
   
     my $warningLink = &mt('You must insert a title!');      my $warningLink = &mt('You must insert a title!');
     my $warningLinkNotAllowed1 = &mt('You can only insert links to LON-CAPA resources from the resource-pool '.      my $warningLinkNotAllowed1 =
                                     'or to external websites. Paths to LON-CAPA resources must be of the form /res/dom/usr... . '.          &mt('You can only insert links to LON-CAPA resources from the resource-pool'.
                                     'Paths to external websites must contain the network protocol (e.g. http://...).');              ' 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://...');
   
     my $inPageWishlistlink1 = '<h1>'.&mt('Set a link to wishlist').'</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
     # submitting the window should close instead of offering a link to wishlist (like it should do      # submitting the window should close instead of offering a link to wishlist (like it should do
     # if we call 'Set New Link' from within a browsed ressource)      # if we call 'Set New Link' from within a browsed ressource)
Line 1623  sub makePopUpNewLink { Line 1673  sub makePopUpNewLink {
                               '<select name="folders">'.                                '<select name="folders">'.
                               $options.                                $options.
                               '</select>'.                                '</select>'.
                               '<input type="button" value="'.&mt('cancel').'" onclick="javascript:window.close();" />'.                                '<input type="button" value="'.&mt('Cancel').'" onclick="javascript:window.close();" />'.
                               '</form>';                                '</form>';
     $options = '';      $options = '';
   
Line 1742  SCRIPT Line 1792  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('Wishlist',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 set!'));      $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 wishlist').'</a>'.         .&Apache::lonhtmlcommon::actionbox(
                  '&nbsp;<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  
     my $page = $startPage.$inner.$endPage;  
   
     return $page;      return $output;
 }  }
   
   
Line 1772  sub makePageImport { Line 1825  sub makePageImport {
     $root = $rootgiven;      $root = $rootgiven;
     @childrenRt = $root->children();      @childrenRt = $root->children();
     # start_page       # start_page 
     my $startPage = &Apache::loncommon::start_page('Wishlist',undef,      my $startPage = &Apache::loncommon::start_page('Stored Links',undef,
                                                    {'only_body' => 1});                                                     {'only_body' => 1});
           
     # get javascript-code for wishlist-interactions      # get javascript-code for wishlist-interactions
     my $js = &JSforWishlist();      my $js = &JSforWishlist();
     $js .= &JSforImport($rat);      $js .= &JSforImport($rat);
   
     my $inner = '<h1>'.&mt('Import Resources from Wishlist').'</h1>';      my $inner = '<h1>'.&mt('Import Resources from Stored Links').'</h1>';
     if (!$rat) {      if (!$rat) {
         $inner .= '<p><span class="LC_info">'.&mt("Please note that you  can use the checkboxes corresponding to a folder to ".          $inner .=
                                                   "easily check all links within this folder. The folder structure itself can't be imported. ".              '<ul>'.
                                                   "All checked links will be imported into the current folder of your course.").'</span></p>';              '<li class="LC_info">'.&mt('Use the checkboxes corresponding to a folder to '.
                   'easily check all links within the folder.').'</li>'.
               '<li class="LC_info">'.&mt('The folder structure itself cannot be imported.').'</li>'.
               '<li class="LC_info">'.&mt('All checked links will be imported into the current folder of your course.').'</li>'.
               '</ul>';
     }      }
     else {      else {
         $inner .= '<p><span class="LC_info">'.&mt("Please note that you  can use the checkboxes corresponding to a folder to ".          $inner .=
                                                   "easily check all links within this folder. The folder structure itself can't be imported. ")              '<ul>'.
                                                   .'</span></p>';              '<li class="LC_info">'.&mt('Use the checkboxes corresponding to a folder to '.
                   'easily check all links within this folder.').'</li>'.
               '<li class="LC_info">'.&mt('The folder structure itself cannot be imported.').'</li>'.
               '</ul>';
     }      }
     my %wishlist = &getWishlist();      my %wishlist = &getWishlist();
   
Line 1813  sub makePageImport { Line 1873  sub makePageImport {
   
           
     # wishlist-table      # wishlist-table
     &wishlistImport(\@childrenRt);      my $numskipped = 0;
       &wishlistImport(\@childrenRt,\$numskipped);
     if ($wishlistHTMLimport ne '') {      if ($wishlistHTMLimport ne '') {
         $inner .= '<table class="LC_data_table LC_tableOfContent">'.$wishlistHTMLimport.'</table>';          $inner .= '<table class="LC_data_table LC_tableOfContent">'.$wishlistHTMLimport.'</table>';
     }      }
     else {      else {
         $inner .= '<span class="LC_info">'.&mt("Your wishlist ist currently empty.").'</span>';          $inner .= '<span class="LC_info">'.&mt("Your Stored Links list is currently empty.").'</span>';
       }
       if ($numskipped > 0) {
           $inner .= '<p class="LC_info">'.&mt('Note: where a Stored Link is unavailable for import in the current context it is grayed out.').'</p>';
     }      }
     $wishlistHTMLimport = '';      $wishlistHTMLimport = '';
   
Line 1839  sub makeErrorPage { Line 1903  sub makeErrorPage {
     # breadcrumbs and start_page       # breadcrumbs and start_page 
     &Apache::lonhtmlcommon::add_breadcrumb(      &Apache::lonhtmlcommon::add_breadcrumb(
               { href => '/adm/wishlist',                { href => '/adm/wishlist',
                 text => 'Wishlist'});                  text => 'Stored Links'});
     my $startPage = &Apache::loncommon::start_page('Wishlist');      my $startPage = &Apache::loncommon::start_page('Stored Links');
           
     my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs(&mt('Wishlist').&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();

Removed from v.1.11  
changed lines
  Added in v.1.21


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