Diff for /loncom/interface/portfolio.pm between versions 1.1 and 1.18

version 1.1, 2004/06/08 18:34:20 version 1.18, 2004/07/28 19:00:19
Line 1 Line 1
   # Copyright Michigan State University Board of Trustees
   #
   # This file is part of the LearningOnline Network with CAPA (LON-CAPA).
   #
   # LON-CAPA is free software; you can redistribute it and/or modify
   # it under the terms of the GNU General Public License as published by
   # the Free Software Foundation; either version 2 of the License, or 
   # (at your option) any later version.
   #
   # LON-CAPA is distributed in the hope that it will be useful,
   # but WITHOUT ANY WARRANTY; without even the implied warranty of
   # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   # GNU General Public License for more details.
   #
   # You should have received a copy of the GNU General Public License
   # along with LON-CAPA; if not, write to the Free Software
   # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
   #
   # /home/httpd/html/adm/gpl.txt
   #
   # http://www.lon-capa.org/
   #
   
 package Apache::portfolio;  package Apache::portfolio;
 use strict;  use strict;
 use Apache::Constants qw(:common :http);  use Apache::Constants qw(:common :http);
 # use Apache::loncommon;  use Apache::loncommon;
 use Apache::lonnet;  use Apache::lonnet;
 # use Apache::lontexconvert;  use Apache::lontexconvert;
 # use Apache::lonfeedback;  use Apache::lonfeedback;
 # use Apache::lonlocal;  use Apache::lonlocal;
   
 sub handler {  
  my $r=@_[0];  
  $r->content_type('text/html');  
  $r->send_http_header;  
  return OK if $r->header_only;  
  $r->print("the portfolio handler is in use by $ENV{'user.name'} looking for "  
  .$r->uri."<br />");  
  my $file=&Apache::lonnet::filelocation("",$r->uri);  
  my $contents=&Apache::lonnet::getfile($file);  
 # $r->print($contents);  
   
  $r->print("here's the form<br />");  
  $r->print('<form method=post enctype="multipart/form-data" action="'.$r->uri.'">');  
  $r->print('<input type=submit value="upload">');  
  $r->print('<input name="saywhat" type="file">');  
  $r->print('</form>');  
  return OK;  
 # my $something = "this is something<br />";  
 # my (undef,undef,$cdom,$cnum)=split(/\//,$r->uri);  
 # Is this even a user?  
 #    if (&Apache::lonnet::homeserver($cnum,$cdom) eq 'no_host') {  
 # $r->print('</head><body>'.  
 #  &mt('No user information available').'</body></html>');  
 #       return OK;  
 #    }  
   
   
   # receives a file name and path stub from username/userfiles/portfolio/
   # returns an anchor tag consisting encoding filename and currentpath
   sub makeAnchor{
       my ($fileName, $currentPath) = @_;
       my $anchor = '<a href="/adm/portfolio?selectfile='.$fileName.'&currentpath='.$currentPath.'">'.$fileName.'</a>';
       return $anchor;
   }
   
 # $r->print($something);  # returns html with <br /> separated contents of the directory
 # $r->print($r);  # returns a <strong>currentFile</strong> (bolds the selected file/dir)
 # $r->print($ENV{'user.name'});  sub displayDirectory {
 # $r->print("<br />should have printed username above<br />");      my ($currentPath, $currentFile, @dirList,) = @_;
 # my $key = "";      my $displayOut='';  
 # foreach my $key (sort(keys(%ENV))) {      my $fileName;
 # $r->print("$key is $ENV{$key} <br />\n");      my $upPath;
 # }      if ($currentPath ne '/'){
 #          $displayOut = 'Listing of '.$currentPath.'<br /><hr />'.
 # my @envkeys = keys(%ENV);          # provides the "up one directory level" function
 # my $i = 0;          # it means shortening the currentpath to the parent directory
 # for ($i = 0; $i < 30; $i++){          $currentPath =~ m:(^/.*)(/.*/$):;
 # $r->print("Key $i is $envkeys[$i] <br />");          if ($1 ne '/'){
 # }              $upPath = $1.'/';
 # return OK;          }else{
               $upPath = $1;
           }
           
           # $displayOut = $displayOut.'<a href="/adm/portfolio?selectfile='.$upPath.'&currentpath='.$upPath.'">..</a><br />';
       } else {
           # $displayOut = $displayOut.'at root '.$currentPath.'<br />';
       }
       foreach my $line (@dirList) {
       #$strip holds directory/file name
       #$dom 
       my ($fileName,$dom,undef,$testdir,undef,undef,undef,undef,undef,undef,undef,undef,undef,undef,$obs,undef)=split(/\&/,$line,16); 
           if (($fileName ne '.') && ($fileName ne '..')){
               if ($testdir =~ m:^1:){
                   # handle directories different from files
                   if ($fileName eq $currentFile){ #checks to bold the selected file
                       $displayOut.= '<strong>'.(makeAnchor($fileName.'/', $fileName.'/').'</strong><br />'."\n");
                   }else{
                       $displayOut.= (makeAnchor($fileName.'/', $fileName.'/').'<br />'."\n");
                   }
               }else{
                   if ($fileName eq $currentFile){ #checks to bold the selected file
                       $displayOut.='<strong>'.(makeAnchor($fileName, $currentPath).'</strong><br />'."\n");
                   }else{
                       $displayOut.=(makeAnchor($fileName, $currentPath).'<br />'."\n");
                   }
               }
               
           }
      
       }
       return $displayOut;
 }  }
   sub displayActions {
       # returns html to offer user appropriate actions depending on selected file/directory
       my $displayOut;
       my ($currentPath, $currentFile, $isEmpty) = @_;
   #   $displayOut = 'here are actions for '.$currentFile;
       if ($currentFile =~ m:/$:){
           # if the selected file is a directory, these are the options
           # offer the chance to delete the directory only if it is empty
           if ($isEmpty && ($currentPath ne '/')) {
               $displayOut =   $displayOut.'<form method="POST">
               <input type="hidden" name="selectfile" 
               value="'.$currentFile.'" />
               <input type="hidden" name="fileaction" value="delete" /> 
               <input type="hidden" name="currentpath" value="'.$currentPath.'" /> 
               <center>
               <input type="submit" 
               value="Delete '.$currentFile.'" />
               </center>
               </form>';
           } 
           if ($currentPath ne '/') {
               $displayOut = $displayOut.'<hr />
               <form method="POST">
               <input type="hidden" name="selectfile" 
               value="'.$currentFile.'" />
               <input type="hidden" name="fileaction" value="rename" /> 
               <input type="hidden" name="currentpath" value="'.$currentPath.'" /> 
               <input type="input" name="filenewname" value="Type new name here" /> 
               <input type="submit" 
               value="Rename '.$currentFile.'" />
               </form>';
           }
       }else{  #action options offered for files
           $displayOut = $displayOut.'<form method="POST">';
           $displayOut = $displayOut.'<input type="hidden" name="selectfile"';
           $displayOut = $displayOut.'value="'.$currentFile;
           $displayOut = $displayOut.'" /><input type="hidden" name="fileaction" value="delete" /> 
           <input type="hidden" name="currentpath" value="'.$currentPath.'" /> 
           <center>
           <input type="submit"
           value="Delete '.$currentFile.'" />
           </center>
           </form>';
       
           $displayOut = $displayOut.'<hr />
           <form method="POST">
           <input type="hidden" name="selectfile" 
           value="'.$currentFile.'" />
           <input type="hidden" name="fileaction" value="rename" /> 
           <input type="hidden" name="currentpath" value="'.$currentPath.'" /> 
           <input type="input" name="filenewname" value="Type new name here" /> 
           <input type="submit" 
           value="Rename '.$currentFile.'" />
           </form>
           <hr />';
       }
       $displayOut = $displayOut.'<hr />Add a file to '.$currentPath;
       # file upload form 
       $displayOut = $displayOut.'<form method="post" enctype="multipart/form-data">';
       $displayOut = $displayOut.'<input name="uploaddoc" type="file" />'.
           '<input type="hidden" name="currentpath" value="'.$currentPath.'" />'.
           '<input type="submit" name="storeupl" value="Upload" />'.
           '</form><hr />';
       $displayOut = $displayOut.'<form method="POST">
           <input name="subdir" type="text" />
           <input type="submit" value="Create Subdirectory" />
           </form>
               ';
       return $displayOut;
   }
   sub handler {
       # this handles file management
       my $r = shift;
       my $iconpath= $r->dir_config('lonIconsURL') . "/";
       my @dirList; # will hold directory listing as array
       my $udir; # returned from home server
       my $currentPath; # path assuming /userfiles/portfolio/ as root
       my $currentFile; # directory or file contained in $pathToRoot.$currentPath
       my $action; # delete, rename, makedirectory, removedirectory,
       my $filenewname; # for rename action (guess what we do with it!)
       my $isFile;
       my $isEmpty;
       my $dirptr=16384;
       &Apache::loncommon::no_cache($r);
       &Apache::loncommon::content_type($r,'text/html');
       $r->send_http_header;
       # Give the LON-CAPA page header
       $r->print('<html><head><title>'.
                 &mt('Portfolio Manager').
                 "</title></head>\n".
                 &Apache::loncommon::bodytag('Portfolio Manager'));
       $r->rflush();
       &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
                                               ['selectfile','currentpath', 'currentfile']);
       # currentPath and currentFile need to be set for the rest of things to happen
       # sometimes, currentFile will be passed by a form field, selectedfile
       # if there is no 'form.selectedfile' then the current directory is 
       # considered as selected 
       if ($ENV{'form.currentpath'}) {
           $currentPath = $ENV{'form.currentpath'};
       } else {
           $currentPath = '/';
       }
       if ($ENV{'form.selectfile'}) {
           # have to check if the selected file is a subdirectory
           if ($ENV{'form.selectfile'} =~ /-\(Dir\)/){
               # $currentPath =~ /\-\(Dir\)/;
               $currentPath = $`.'/';
               $r->print('<br />'.$currentPath.'<br />');
           }
           $currentFile = $ENV{'form.selectfile'};
       } else {
           $currentFile = '';
       }
       # if we're uploading a file, we need to do it early so it will show in the directory list
       if ($ENV{'form.uploaddoc.filename'}) {
           $r->print($ENV{'form.storeupl'}.'<br />');
           $r->print(&Apache::lonnet::userfileupload('uploaddoc','','portfolio'.$currentPath).'<br />');  
       }
       # similarly, we need to delete or rename files before getting directory list
       if ($ENV{'form.selectfile'}){
           if ($ENV{'form.fileaction'} eq 'delete') {
               $r->print('<br />trying to delete '.$currentPath.$ENV{'form.selectfile'}.'<br />');
               $r->print(&Apache::lonnet::removeuserfile($ENV{'user.name'}, $ENV{'user.domain'},'portfolio'.$currentPath.$ENV{'form.selectfile'}));
               $currentFile = '';
           } elsif ($ENV{'form.fileaction'} eq 'rename') {
               &Apache::lonnet::portfoliomanage($currentPath.$ENV{'form.selectfile'}, 'rename', $currentPath.$ENV{'form.filenewname'} );
           }
       }
       # we always need $dirList, plus this will return information about the current file
       # as well as information about the home server directory structure, specifically
       # the path to the users userfiles directory.    
       # 
       my $portfolio_root = &Apache::loncommon::propath($ENV{'user.domain'},
        $ENV{'user.name'}).
          '/userfiles/portfolio'.$currentPath;
       @dirList = &Apache::lonnet::dirlist($currentPath,  $ENV{'user.domain'}, $ENV{'user.name'}, $portfolio_root);
       
       if (@dirList == 2) { # need to know if directory is empty so it can be removed if desired
           $isEmpty = 1;
       } else {
           $isEmpty = 0;
       }
      
       if ($ENV{'form.selectfile'}) {
           if ($ENV{'form.fileaction'} eq 'delete') {
               &Apache::lonnet::portfoliomanage($ENV{'form.selectfile'}, 'delete', undef );
               $ENV{'portfolio.file'} = 'Selected File Deleted';
           } elsif ($ENV{'form.fileaction'} eq 'rename') {
               &Apache::lonnet::portfoliomanage($ENV{'form.selectfile'}, 'rename', $ENV{'form.filenewname'});
           } else {
           # Remember user's file selection for later
           $ENV{'portfolio.file'} = $ENV{'form.selectfile'};
           # offer things user can do with selected file
           }
       }else{
           unless ($ENV{'portfolio.file'}){
               $ENV{'portfolio.file'} = 'No File Selected';
           }
       }
       ##############################
       #
       # Display begins here
       #
       ##############################
       $r->print('<table border="0" cellspacing="2" cellpadding="2">'.
               '<tr><th>&nbsp;</th><th>Actions</th><th>Name</th><th>Title</th><th>Status</th><th>Last Modified</th></tr>');
       foreach my $line (@dirList) {
       #$strip holds directory/file name
       #$dom 
       my ($fileName,$dom,undef,$testdir,undef,undef,undef,undef,undef,undef,undef,undef,undef,undef,$obs,undef)=split(/\&/,$line,16); 
           if ($dirptr&$testdir){
               $r->print('<tr bgcolor="#FFAA99"><td><img src="'.$iconpath.'folder_closed.gif"></td></tr>'); 
           }else{
               $r->print('<tr bgcolor="#FFAA99"><td><img src="'.$iconpath.'doc.gif"></td></tr>');
           }
       }
   #   <tr bgcolor="#FFAA99"> pink bg 
   #   <tr bgcolor="#CCCCFF"> blue bg            
   #   $r->print(displayDirectory($currentPath, $currentFile, @dirList));
   #    $r->print('</td>><td>');
   #   $r->print(displayActions($currentPath, $currentFile, $isEmpty));
       $r->print('</table>');
       $r->print('</blockquote>');
       $r->print("</body>\n</html>\n");
       $r->rflush();
       return OK;
   }
   
 1;  1;
 __END__  __END__

Removed from v.1.1  
changed lines
  Added in v.1.18


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