Diff for /loncom/interface/portfolio.pm between versions 1.2 and 1.15

version 1.2, 2004/06/18 20:42:16 version 1.15, 2004/07/09 18:43:40
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);
Line 6  use Apache::lonnet; Line 32  use Apache::lonnet;
 use Apache::lontexconvert;  use Apache::lontexconvert;
 use Apache::lonfeedback;  use Apache::lonfeedback;
 use Apache::lonlocal;  use Apache::lonlocal;
   sub makeAnchor{
       # receives a file name and path stub from username/userfiles/portfolio/
       # returns an anchor tag consisting encoding filename and currentpath
       my ($fileName, $currentPath) = @_;
       my $anchor = '<a href="/adm/portfolio?selectfile='.$fileName.'&currentpath='.$currentPath.'">'.$fileName.'</a>';
       return $anchor;
   }
   sub displayDirectory {
       # returns html with <br /> separated contents of the directory
       # returns a <strong>currentFile</strong> (bolds the selected file/dir)
       my ($currentPath, $currentFile, $isDir, @dirList,) = @_;
       my $displayOut='';  
       my $fileName;
       my $upPath;
       if ($currentPath ne '/'){
           $displayOut = 'Listing of '.$currentPath.'<br /><hr />'.
           # provides the "up one directory level" function
           # it means shortening the currentpath to the parent directory
           $currentPath =~ m:(^/.*)(/.*/$):;
           if ($1 ne '/'){
               $upPath = $1.'/';
           }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.'/', $currentPath.$fileName.'/').'</strong><br />');
                   }else{
                       $displayOut.= (makeAnchor($fileName.'/', $currentPath.$fileName.'/').'<br />');
                   }
               }else{
                   if ($fileName eq $currentFile){ #checks to bold the selected file
                       $displayOut.='<strong>'.(makeAnchor($fileName, $currentPath).'</strong><br />');
                   }else{
                       $displayOut.=(makeAnchor($fileName, $currentPath).'<br />');
                   }
               }
           }
      
       }
       return $displayOut;
   }
   sub displayActions {
       # returns html to offer user appropriate actions depending on selected file/directory
       my $displayOut;
       my ($currentPath, $currentFile, $isDir, $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 {  sub handler {
  my $r=@_[0];      # this handles file management
  $r->content_type('text/html');      my $r = shift;
  $r->send_http_header;      my @dirList; # will hold directory listing as array
  return OK if $r->header_only;      my $udir; # returned from home server
  my $file=&Apache::lonnet::filelocation("",$r->uri);      my $currentPath; # path assuming /userfiles/portfolio/ as root
  my $contents=&Apache::lonnet::getfile($file);      my $currentFile; # directory or file contained in $pathToRoot.$currentPath
  $r->print ('<br />Current contents of your portfolio directory: <br />');      my $action; # delete, rename, makedirectory, removedirectory,
  $r->print (&Apache::lonnet::portfoliolist($r->uri, $ENV{'user.domain'}, $ENV{'user.name'}, udef ));      my $filenewname; # for rename action (guess what we do with it!)
  $r->print ('<br /> call to dirlist precedes <br />');      my $isFile;
  if ($ENV{'form.uploaddoc.filename'}){      my $isDir;
  $r->print ('<br /> call to userfileupload follows <br />');      my $isEmpty;
  $r->print (&Apache::lonnet::userfileupload('uploaddoc',undef,'portfolio').'<br />');      &Apache::loncommon::no_cache($r);
  $r->print ('<br /> call to userfileupload precedes <br />');      &Apache::loncommon::content_type($r,'text/html');
  }      $r->send_http_header;
       # Give the LON-CAPA page header
  $r->print ($ENV{'form.uploaddoc.filename'}.'<br />');      $r->print('<html><head><title>'.
  $r->print ($ENV{'form.storeupl'}.'<br />');                &mt('Portfolio Manager').
  $r->print ($ENV{'form.saywhat'}.'<br />');                "</title></head>\n".
                 &Apache::loncommon::bodytag('Portfolio Manager'));
  $r->print("here's the form<br />");      $r->rflush();
  # file upload form       &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
  $r->print('<form method="post" enctype="multipart/form-data">');                                              ['selectfile','currentpath', 'currentfile']);
  $r->print('<input name="uploaddoc" type="file">'.      # currentPath and currentFile need to be set for the rest of things to happen
       # sometimes, currentFile will be passed by a form field, selectedfile
  '<input type="submit" name="storeupl" value="Upload">'      # if there is no 'form.selectedfile' then the current directory is 
  );      # considered as selected 
  $r->print('</form>');      if ($ENV{'form.currentpath'}) {
  return OK;          $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 he 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';
       my @list = &Apache::lonnet::dirlist($currentPath,  $ENV{'user.domain'}, $ENV{'user.name'}, $portfolio_root);
       @dirList = @list;
       if (@dirList == 2) { # need to know if directory is empty so it can be removed if desired
           $isEmpty = 1;
       } else {
           $isEmpty = 0;
       }
       # Stuff to maintain proper setting for selected file
       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=1><tr><td>');
       $r->print(displayDirectory($currentPath, $currentFile, $isDir, @dirList));
       $r->print('</td>><td>');
       $r->print(displayActions($currentPath, $currentFile, $isDir, $isEmpty));
       $r->print('</td>></tr></table>');
       $r->print('</blockquote>');
       $r->print("</body>\n</html>\n");
       $r->rflush();
       return OK;
 }  }
   
 1;  1;

Removed from v.1.2  
changed lines
  Added in v.1.15


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