Diff for /loncom/interface/lonindexer.pm between versions 1.205 and 1.225

version 1.205, 2010/03/29 23:25:16 version 1.225, 2016/06/19 04:27:50
Line 34 Line 34
 ## 1. Description of functions                                               ##  ## 1. Description of functions                                               ##
 ## 2. Modules used by this module                                            ##  ## 2. Modules used by this module                                            ##
 ## 3. Choices for different output views (detailed, summary, xml, etc)       ##  ## 3. Choices for different output views (detailed, summary, xml, etc)       ##
 ## 4. BEGIN block (to be run once after compilation)                         ##  ## 4. Handling routine called via Apache and mod_perl                        ##
 ## 5. Handling routine called via Apache and mod_perl                        ##  ## 5. Other subroutines                                                      ##
 ## 6. Other subroutines                                                      ##  
 ##                                                                           ##  ##                                                                           ##
 ###############################################################################  ###############################################################################
   
Line 60  use LONCAPA qw(:match); Line 59  use LONCAPA qw(:match);
 # ---------------------------------------- variables used throughout the module  # ---------------------------------------- variables used throughout the module
 my %hash; # global user-specific gdbm file  my %hash; # global user-specific gdbm file
 my %dirs; # keys are directories, values are the open/close status  my %dirs; # keys are directories, values are the open/close status
 my %language; # has the reference information present in language.tab  
 my %dynhash; # hash of hashes for dynamic metadata  my %dynhash; # hash of hashes for dynamic metadata
 my %dynread; # hash of directories already read for dynamic metadata  my %dynread; # hash of directories already read for dynamic metadata
 my %fieldnames; # Metadata fieldnames  my %fieldnames; # Metadata fieldnames
Line 94  sub handler { Line 92  sub handler {
     undef (@Omit);      undef (@Omit);
     %fieldnames=&Apache::lonmeta::fieldnames();      %fieldnames=&Apache::lonmeta::fieldnames();
   
 # ------------------------------------- read in machine configuration variables  # --------------------------------------------------------------- get icon path
     my $iconpath= $r->dir_config('lonIconsURL') . "/";      my $iconpath= $r->dir_config('lonIconsURL') . "/";
     my $domain  = $r->dir_config('lonDefDomain');  
     my $role    = $r->dir_config('lonRole');  
     my $loadlim = $r->dir_config('lonLoadLim');  
     my $servadm = $r->dir_config('lonAdmEMail');  
     my $sysadm  = $r->dir_config('lonSysEMail');  
     my $lonhost = $r->dir_config('lonHostID');  
     my $tabdir  = $r->dir_config('lonTabDir');  
   
 #SB my $fileclr='#ffffe6';  #SB my $fileclr='#ffffe6';
     my $line;      my $line;
Line 120  sub handler { Line 111  sub handler {
     my $colspan='';       my $colspan=''; 
           
     $extrafield='';      $extrafield='';
     my $diropendb =       my $diropendb = LONCAPA::tempdir() .
  "/home/httpd/perl/tmp/$env{'user.domain'}_$env{'user.name'}_sel_res.db";   "$env{'user.domain'}_$env{'user.name'}_sel_res.db";
     %hash = ();      %hash = ();
     {      {
  my %dbfile;   my %dbfile;
Line 165  sub handler { Line 156  sub handler {
 ENDSUBM  ENDSUBM
        $r->print(&Apache::loncommon::start_page(undef,$js,         $r->print(&Apache::loncommon::start_page(undef,$js,
  {'only_body'   =>1,   {'only_body'   =>1,
                                                    'add_modal' => 1,
                                                    'add_wishlist' => 1,
  'add_entries' =>   'add_entries' =>
      {'onload' => "load();"},}       {'onload' => "load();"},}
  ).   ).
Line 321  function select_group() { Line 314  function select_group() {
   
 function changeURL(val) {  function changeURL(val) {
     if (window.opener.document) {      if (window.opener.document) {
         var elementname  = "$element"+"_value";          var elementname  = "$element";
         var checkboxname = "$element"+"_setparmval";  
  window.opener.document.forms["$form"].elements[elementname].value=val;   window.opener.document.forms["$form"].elements[elementname].value=val;
         window.opener.document.forms["$form"].elements[checkboxname].checked=true;  
     } else {      } else {
     alert("The file you selected is: "+val);      alert("The file you selected is: "+val);
     }      }
Line 392  function uncheckAll() { Line 383  function uncheckAll() {
         }          }
     }      }
 }  }
   
 function openWindow(url, wdwName, w, h, toolbar,scrollbar,locationbar) {  function openWindow(url, wdwName, w, h, toolbar,scrollbar,locationbar) {
     var xpos = (screen.width-w)/2;      var xpos = (screen.width-w)/2;
     xpos = (xpos < 0) ? '0' : xpos;      xpos = (xpos < 0) ? '0' : xpos;
Line 403  function openWindow(url, wdwName, w, h, Line 395  function openWindow(url, wdwName, w, h,
     var newWin = window.open(url, wdwName, options);      var newWin = window.open(url, wdwName, options);
     newWin.focus();      newWin.focus();
 }  }
   
 function gothere(val) {  function gothere(val) {
     window.location=val+'?acts='+document.forms.fileattr.acts.value$inhibit_menu;      window.location=val+'?acts='+document.forms.fileattr.acts.value$inhibit_menu;
 }  }
Line 415  ENDHEADER Line 408  ENDHEADER
         if ($env{'form.catalogmode'}) {          if ($env{'form.catalogmode'}) {
             # "Popup mode"              # "Popup mode"
             $r->print(&Apache::loncommon::start_page('Browse published resources',$js,              $r->print(&Apache::loncommon::start_page('Browse published resources',$js,
                                                      {'only_body' => 1,                                                       {'only_body' => 1, 'add_wishlist'=>1, 'add_modal' =>1, 
                                                       'domain' => $headerdom,}));                                                        'domain' => $headerdom,}));
         } else {          } else {
             # Only display page header and breadcrumbs in non-popup mode              # Only display page header and breadcrumbs in non-popup mode
             &Apache::lonhtmlcommon::clear_breadcrumbs();              &Apache::lonhtmlcommon::clear_breadcrumbs();
             &Apache::lonhtmlcommon::add_breadcrumb({              &Apache::lonhtmlcommon::add_breadcrumb({
                 'text'  => 'Browse published resources',                  'text'  => 'Browse published resources',
                 'href'  => '/res/fhwfdev/?launch=1',                  'href'  => '/res/'.$headerdom.'/?launch=1',
             });              });
             $r->print(&Apache::loncommon::start_page('Browse published resources',$js,              $r->print(&Apache::loncommon::start_page('Browse published resources',$js,
                                                      {'domain' => $headerdom,})                                                       {'domain' => $headerdom,})
Line 462  ENDHEADER Line 455  ENDHEADER
             push(@select_form_order,$types);              push(@select_form_order,$types);
         }          }
         $select_file_categories{'select_form_order'} = \@select_form_order;          $select_file_categories{'select_form_order'} = \@select_form_order;
           my $onchange = 'this.form.submit();';
         my $type_element=          my $type_element=
             &Apache::loncommon::select_form(              &Apache::loncommon::select_form(
                 $typeselect,                  $typeselect,
                 'only',                  'only',
                 %select_file_categories);                  \%select_file_categories,$onchange);
         my $type_selector = '<label>'.&mt('File Type Displayed: [_1]',          my $type_selector = '<label>'.&mt('File Type Displayed: [_1]',
                                           $type_element).'</label>';                                            $type_element).'</label>';
   
Line 589  END Line 583  END
         $r->print(&Apache::loncommon::start_data_table("LC_tableBrowseRes")          $r->print(&Apache::loncommon::start_data_table("LC_tableBrowseRes")
                  .&Apache::loncommon::start_data_table_header_row());                   .&Apache::loncommon::start_data_table_header_row());
  $r->print("<th $colspan>".&mt('Name')."</th>\n");   $r->print("<th $colspan>".&mt('Name')."</th>\n");
    $r->print("<th></th>\n");
  $r->print("<th>".&mt('Title')."</th>\n")    $r->print("<th>".&mt('Title')."</th>\n") 
     if ($hash{'display_attrs_0'} == 1);      if ($hash{'display_attrs_0'} == 1);
  $r->print('<th class="LC_right">'.&mt("Size")." (".&mt("bytes").") ".   $r->print('<th class="LC_right">'.&mt("Size")." (".&mt("bytes").") ".
Line 628  END Line 623  END
         
   
 # ----------------- read in what directories have previously been set to "open"  # ----------------- read in what directories have previously been set to "open"
  foreach (keys %hash) {   foreach (keys(%hash)) {
     if ($_ =~ /^diropen_status_/) {      if ($_ =~ /^diropen_status_/) {
  my $key = $_;   my $key = $_;
  $key =~ s/^diropen_status_//;   $key =~ s/^diropen_status_//;
Line 714  sub scanDir { Line 709  sub scanDir {
         return if ($c->aborted());          return if ($c->aborted());
  #This is a kludge, sorry aboot this   #This is a kludge, sorry aboot this
  my ($strip,$dom,undef,$testdir,undef,undef,undef,undef,undef,undef,undef,undef,undef,undef,$obs,undef)=split(/\&/,$line,16);    my ($strip,$dom,undef,$testdir,undef,undef,undef,undef,undef,undef,undef,undef,undef,undef,$obs,undef)=split(/\&/,$line,16); 
  next if($strip =~ /.*\.meta$/ | $obs eq '1');   next if (($strip =~ /\.meta$/) || ($obs));
           if ($dom ne 'domain') {
               my ($udom,$uname);
               if ($dom eq 'user') {
                   ($udom) = ($startdir =~ m{^/res/($match_domain)});
                   $uname = $strip;
               } else {
                   ($udom,$uname) = ($startdir =~ m{^/res/($match_domain)/($match_courseid)});
               }
               if ($udom ne '' && $uname ne '') {
                   # Don't display "course author" directory.
                   next if (&Apache::lonnet::is_course($udom,$uname));
               }
           }
  my (@fileparts) = split(/\./,$strip);   my (@fileparts) = split(/\./,$strip);
  if ($hash{'display_attrs_9'} != 1) {   if ($hash{'display_attrs_9'} != 1) {
             # if not all versions to be shown              # if not all versions to be shown
Line 755  sub scanDir { Line 763  sub scanDir {
 sub get_list {  sub get_list {
     my ($r,$uri)=@_;      my ($r,$uri)=@_;
     my @list=();      my @list=();
       my $listerror;
       
     (my $luri = $uri) =~ s/\//_/g;      (my $luri = $uri) =~ s/\//_/g;
     if ($env{'form.updatedisplay'}) {      if ($env{'form.updatedisplay'}) {
  foreach (keys %hash) {   foreach (keys(%hash)) {
     delete $hash{$_} if ($_ =~ /^dirlist_files_/);      delete $hash{$_} if ($_ =~ /^dirlist_files_/);
     delete $hash{$_} if ($_ =~ /^dirlist_timestamp_files_/);      delete $hash{$_} if ($_ =~ /^dirlist_timestamp_files_/);
  }   }
Line 778  sub get_list { Line 788  sub get_list {
  $hash{'dirlist_files_'.$luri} = join("\n",@list);   $hash{'dirlist_files_'.$luri} = join("\n",@list);
     } else {      } else {
 # is really a directory  # is really a directory
  @list = &Apache::lonnet::dirlist($uri);   (my $listref,$listerror) = &Apache::lonnet::dirlist($uri);
           if (ref($listref) eq 'ARRAY') {
               @list = @{$listref};
           }
  $hash{'dirlist_files_'.$luri} = join("\n",@list);   $hash{'dirlist_files_'.$luri} = join("\n",@list);
  $hash{'dirlist_timestamp_files_'.$luri} = time;   $hash{'dirlist_timestamp_files_'.$luri} = time;
     }      }
   #Checking for error messages associated with empty directories or inaccessible servers (See Bug 4984)
       if (($listerror eq 'no_such_dir') || ($listerror eq 'no_such_host') || ($listerror eq 'no_host')) { 
           $r->print("<p class='LC_info'>" . &mt("Directory does not exist."). "</p>");
       } elsif ($listerror eq 'con_lost') {
           $r->print("<p class='LC_info'>" . &mt("Directory temporarily not accessible."). "</p>");
       }
   
     return @list=&match_ext($r,@list);          return @list=&match_ext($r,@list);    
 }  }
   
Line 923  sub display_line { Line 943  sub display_line {
  $r->print ('<a href="#" onclick="document.dirpathUP.submit()"><img src="'.$iconpath.'arrow.up.gif"');   $r->print ('<a href="#" onclick="document.dirpathUP.submit()"><img src="'.$iconpath.'arrow.up.gif"');
  $r->print (' alt="'.$msg.'" class="LC_fileicon" />'.   $r->print (' alt="'.$msg.'" class="LC_fileicon" />'.
    "\n");     "\n");
  $r->print(&mt("Up")."</a></form>$tabtag");   $r->print(&mt("Up")."</a></form></td><td>$tabtag");
         $r->print(&Apache::loncommon::end_data_table_row());          $r->print(&Apache::loncommon::end_data_table_row());
  return OK;   return OK;
     }      }
Line 958  $r->print ('<input type="hidden" name="a Line 978  $r->print ('<input type="hidden" name="a
     $r->print("<br />(".&Apache::lonnet::domain($listname,'description').      $r->print("<br />(".&Apache::lonnet::domain($listname,'description').
       ")");        ")");
  }   }
  $r->print("</form>$tabtag");   $r->print("</form></td><td>$tabtag");
          $r->print(&Apache::loncommon::end_data_table_row());           $r->print(&Apache::loncommon::end_data_table_row());
  return OK;   return OK;
   
Line 982  $r->print ('<input type="hidden" name="a Line 1002  $r->print ('<input type="hidden" name="a
  $r->print (' alt="'.$msg.'"/></a>'.   $r->print (' alt="'.$msg.'"/></a>'.
    "\n");     "\n");
  my $quotable_curdir = &Apache::loncommon::escape_single($curdir);   my $quotable_curdir = &Apache::loncommon::escape_single($curdir);
           my $quotable_startdir = &Apache::loncommon::escape_single($startdir);
           my $quotable_listname = &Apache::loncommon::escape_single($listname);
   
  $r->print ('<a href="javascript:gothere(\''.$quotable_curdir   $r->print ('<a href="javascript:gothere(\''.$quotable_curdir
    .'\')"><img alt="'.$msg.'" src="'.     .'\')"><img alt="'.$msg.'" src="'.
    $iconpath.'quill.gif" class="LC_fileicon" />');     $iconpath.'quill.gif" class="LC_fileicon" />');
Line 990  $r->print ('<input type="hidden" name="a Line 1013  $r->print ('<input type="hidden" name="a
         $r->print ($listname.'</a>');          $r->print ($listname.'</a>');
   
         if (defined($plainname) && $plainname) { $r->print(" ($plainname) "); }          if (defined($plainname) && $plainname) { $r->print(" ($plainname) "); }
         $r->print('</form>'.$tabtag);  # Wishlistlink
           $r->print('</form></td><td><a href="javascript:;" '.
                     'title="'.&mt('Save a link for this folder in your personal Stored Links repository').'" '.
                     'onclick="set_wishlistlink('."'$plainname','$quotable_startdir$quotable_listname"."/'".')">'.
                     '<img class="LC_icon" src="/res/adm/pages/wishlist.png" '.
                     'alt="'.&mt('save in Stored Links').'" style="width:22px;"/></a>'.$tabtag);
         $r->print(&Apache::loncommon::end_data_table_row());          $r->print(&Apache::loncommon::end_data_table_row());
         return OK;          return OK;
     }      }
Line 1071  $r->print ('<input type="hidden" name="a Line 1099  $r->print ('<input type="hidden" name="a
 # Filetype icons  # Filetype icons
  $r->print("<img alt=\"\" src='$iconname' class='LC_fileicon' />\n");   $r->print("<img alt=\"\" src='$iconname' class='LC_fileicon' />\n");
  my $quotable_filelink = &Apache::loncommon::escape_single($filelink);   my $quotable_filelink = &Apache::loncommon::escape_single($filelink);
           my $quotable_startdir = Apache::loncommon::escape_single($startdir);
           my $quotable_listname = &Apache::loncommon::escape_single($listname);
   
  $r->print (" <a href=\"javascript:openWindow('".$quotable_filelink.   $r->print (" <a href=\"javascript:openMyModal('".$quotable_filelink."?inhibitmenu=yes',500,500,'yes');\">$listname</a> ");
    "?inhibitmenu=yes','previewfile','450','500','no','yes','yes');\"".  
    " target=\"_self\">$listname</a> ");  
  $quotable_filelink = &Apache::loncommon::escape_single($filelink.'.meta');   $quotable_filelink = &Apache::loncommon::escape_single($filelink.'.meta');
  &Apache::loncommon::inhibit_menu_check(\$quotable_filelink);   &Apache::loncommon::inhibit_menu_check(\$quotable_filelink);
  $r->print (" (<a href=\"javascript:openWindow('".$quotable_filelink.   $r->print (" (<a href=\"javascript:openMyModal('".$quotable_filelink."?inhibitmenu=yes',500,500,'yes');\">".&mt('metadata')."</a>) ");
    "?inhibitmenu=yes','metadatafile','500','550','no','yes','no');\" ".  
    " target=\"_self\">".&mt('metadata')."</a>) ");  
 # Close form to open/close sequence  # Close form to open/close sequence
  if ($filelink=~/\.(page|sequence)$/) {   if ($filelink=~/\.(page|sequence)$/) {
     $r->print('</form>');      $r->print('</form>');
  }   }
  $r->print("</td>\n");   $r->print("</td>\n");
   # Wishlistlink
           $r->print('<td><a href="javascript:;" title="'.&mt('Save a link for this resource in your personal Stored Links repository').'" '.
                     'onclick="set_wishlistlink('."'".&Apache::lonnet::gettitle($filelink).
                     "','$quotable_startdir$quotable_listname'".')">'.
                     '<img class="LC_icon" src="/res/adm/pages/wishlist.png" '.
                     'alt="'.&mt('save in Stored Links').'" style="width:22px;"/></a></td>');
  if ($hash{'display_attrs_0'} == 1) {   if ($hash{'display_attrs_0'} == 1) {
     $r->print('<td> '.($title eq '' ? '&nbsp;' : $title).      $r->print('<td> '.($title eq '' ? '&nbsp;' : $title).
       ' </td>'."\n");        ' </td>'."\n");
Line 1224  $r->print ('<input type="hidden" name="a Line 1256  $r->print ('<input type="hidden" name="a
  $r->print (' alt="'.$msg.'" class="LC_fileicon" /></a>'.   $r->print (' alt="'.$msg.'" class="LC_fileicon" /></a>'.
    "\n");     "\n");
  my $quotable_curdir = &Apache::loncommon::escape_single($curdir);   my $quotable_curdir = &Apache::loncommon::escape_single($curdir);
                   my $quotable_startdir = &Apache::loncommon::escape_single($startdir);
           my $quotable_listname = &Apache::loncommon::escape_single($listname);
   
         my $location = &Apache::loncommon::lonhttpdurl("/adm/lonIcons");          my $location = &Apache::loncommon::lonhttpdurl("/adm/lonIcons");
  my $icon = "navmap.folder.".($nowOpen ? "open":"closed").'.gif';   my $icon = "navmap.folder.".($nowOpen ? "open":"closed").'.gif';
         $r->print ('<a href="javascript:gothere('          $r->print ('<a href="javascript:gothere('
Line 1232  $r->print ('<input type="hidden" name="a Line 1266  $r->print ('<input type="hidden" name="a
                   .'<img class="LC_fileicon" alt="'.&mt('Open Folder').'" src="'                    .'<img class="LC_fileicon" alt="'.&mt('Open Folder').'" src="'
                   .$location.'/'.$icon.'" />'                    .$location.'/'.$icon.'" />'
                   ."\n");                    ."\n");
  $r->print ("$listname</a></form></td>\n");   $r->print ("$listname</a></form>");
   # Wishlistlink
           $r->print('</td><td><a href="javascript:;" '.
                     'title="'.&mt('Save a link for this folder in Stored Links').'" '.
                     'onclick="set_wishlistlink('."'$listname','$quotable_startdir$quotable_listname"."/'".')">'.
                     '<img class="LC_icon" src="/res/adm/pages/wishlist.png" '.
                     'alt="'.&mt('save in Stored Links').'" style="width:22px;"/></a></td>');
 # Attributes  # Attributes
  my $filelink = $startdir.$filecom[0].'/default';   my $filelink = $startdir.$filecom[0].'/default';
   
Line 1277  $r->print ('<input type="hidden" name="a Line 1317  $r->print ('<input type="hidden" name="a
  }   }
  if ($hash{'display_attrs_7'} == 1) {   if ($hash{'display_attrs_7'} == 1) {
    $r->print('<td>&nbsp;</td>');     $r->print('<td>&nbsp;</td>');
     }               }
     if ($hash{'display_attrs_11'} == 1) {          if ($hash{'display_attrs_11'} == 1) {
    $r->print('<td>&nbsp;</td>');     $r->print('<td>&nbsp;</td>');
  }   }
  if ($hash{'display_attrs_12'} == 1) {   if ($hash{'display_attrs_12'} == 1) {
Line 1321  sub coursecontext { Line 1361  sub coursecontext {
     my $filesymb=&Apache::lonnet::symbread($filelink);      my $filesymb=&Apache::lonnet::symbread($filelink);
     if ($filesymb) {      if ($filesymb) {
  my ($map,$index,$resource)=&Apache::lonnet::decode_symb($filesymb);   my ($map,$index,$resource)=&Apache::lonnet::decode_symb($filesymb);
  $r->print(&mt('Already in this course:<br />[_1] in folder/map [_2].<br />',   $r->print(
       &Apache::lonnet::gettitle($resource),              &mt('Already in this course:').'<br />'
       &Apache::lonnet::gettitle($map)));             .&mt('[_1] in folder/map [_2]',
                       &Apache::lonnet::gettitle($resource),
                       &Apache::lonnet::gettitle($map))
              .'<br />');
     }      }
 }  }
   
 sub showpreview {  sub showpreview {
     my ($filelink)=@_;      my ($filelink)=@_;
     if ($filelink=~m-^(/ext/|http://)-) {      if ($filelink=~m-^(/ext/|https?://)-) {
  return &mt('External Resource, preview not enabled');   return &mt('External Resource, preview not enabled');
     }      }
     my ($curfext)=($filelink=~/\.(\w+)$/);      my ($curfext)=($filelink=~/\.(\w+)$/);
Line 1409  sub start_fresh_session { Line 1452  sub start_fresh_session {
     delete $hash->{'form.element'};      delete $hash->{'form.element'};
     delete $hash->{'form.omit'};      delete $hash->{'form.omit'};
     delete $hash->{'form.only'};      delete $hash->{'form.only'};
     foreach (keys %{$hash}) {      foreach (keys(%{$hash})) {
         delete $hash->{$_} if (/^(pre_|store)/);          delete $hash->{$_} if (/^(pre_|store)/);
     }      }
 }  }
Line 1460  This module enables a scheme of browsing Line 1503  This module enables a scheme of browsing
 This is part of the LearningOnline Network with CAPA project  This is part of the LearningOnline Network with CAPA project
 described at http://www.lon-capa.org.  described at http://www.lon-capa.org.
   
 =head1 BEGIN SUBROUTINE  
   
 This routine is only run once after compilation.  
   
 =over 4  
   
 =item *  
   
 Initializes %language hash table.  
   
 =back  
   
 =head1 HANDLER SUBROUTINE  =head1 HANDLER SUBROUTINE
   
 This routine is called by Apache and mod_perl.  This routine is called by Apache and mod_perl.

Removed from v.1.205  
changed lines
  Added in v.1.225


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