Diff for /loncom/interface/portfolio.pm between versions 1.3 and 1.23

version 1.3, 2004/06/18 23:59:55 version 1.23, 2004/08/24 05:01:42
Line 18 Line 18
 #  #
 # /home/httpd/html/adm/gpl.txt  # /home/httpd/html/adm/gpl.txt
 #  #
   
   
 # http://www.lon-capa.org/  # 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 33  use Apache::lontexconvert; Line 30  use Apache::lontexconvert;
 use Apache::lonfeedback;  use Apache::lonfeedback;
 use Apache::lonlocal;  use Apache::lonlocal;
   
 sub handler {  # receives a file name and path stub from username/userfiles/portfolio/
  my $r=@_[0];  # returns an anchor tag consisting encoding filename and currentpath
  $r->content_type('text/html');  sub make_anchor {
  $r->send_http_header;      my ($filename, $current_path) = @_;
  return OK if $r->header_only;      my $anchor = '<a href="/adm/portfolio?selectfile='.$filename.'&currentpath='.$current_path.'">'.$filename.'</a>';
  my $file=&Apache::lonnet::filelocation("",$r->uri);      return $anchor;
  my $contents=&Apache::lonnet::getfile($file);  }
  $r->print ('<br />Current contents of your portfolio directory: <br />');  
  $r->print (&Apache::lonnet::portfoliolist($r->uri, $ENV{'user.domain'}, $ENV{'user.name'}, udef ));  
  $r->print ('<br /> call to dirlist precedes <br />');  
  if ($ENV{'form.uploaddoc.filename'}){  
  $r->print ('<br /> call to userfileupload follows <br />');  
  $r->print (&Apache::lonnet::userfileupload('uploaddoc',undef,'portfolio').'<br />');  
  $r->print ('<br /> call to userfileupload precedes <br />');  
  }  
   
  $r->print ($ENV{'form.uploaddoc.filename'}.'<br />');  
  $r->print ($ENV{'form.storeupl'}.'<br />');  
  $r->print ($ENV{'form.saywhat'}.'<br />');  
   
  $r->print("here's the form<br />");  
  # file upload form   
  $r->print('<form method="post" enctype="multipart/form-data">');  
  $r->print('<input name="uploaddoc" type="file">'.  
   
  '<input type="submit" name="storeupl" value="Upload">'  
  );  
  $r->print('</form>');  
  return OK;  
   
   # returns html with <br /> separated contents of the directory
   # returns a <strong>currentFile</strong> (bolds the selected file/dir)
   sub display_directory {
       my ($currentPath, $currentFile, @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>'.(&make_anchor($filename.'/', $filename.'/').'</strong><br />'."\n");
                   } else {
                       $displayOut.= (&make_anchor($filename.'/', $filename.'/').'<br />'."\n");
                   }
               } else {
                   if ($filename eq $currentFile) {
       #checks to bold the selected file
                       $displayOut.='<strong>'.(&make_anchor($filename, $currentPath).'</strong><br />'."\n");
                   } else {
                       $displayOut.=(&make_anchor($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';
       @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 valign="middle">');
       $r->print('<td bgcolor="#ccddaa" align="center">');
       my $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>';
       $r->print($displayOut);
       $r->print('</td></tr><tr><td bgcolor="#ccddaa" align="center">');
       my $displayOut = '<form method="post">';
       $displayOut = $displayOut.'<input name="newdir" type="input" />'.
           '<input type="hidden" name="currentpath" value="'.$currentPath.'" />'.
           '<input type="submit" name="createdir" value="'.&mt("Create Directory").'" />'.
           '</form>';
       $r->print($displayOut);
       $r->print('</td></tr></table>');
       my @tree = split (/\//,$currentPath);
       $r->print('<font size="+2">'.&make_anchor('/','/'));
       if (@tree > 1){
           my $newCurrentPath = '';
           for (my $i = 1; $i< @tree; $i++){
               $newCurrentPath .= $tree[$i].'/';
               $r->print(&make_anchor($tree[$i],'/'.$newCurrentPath).'/');
           }
       }
       $r->print('</font>');
       &Apache::lonhtmlcommon::store_recent('portfolio',$currentPath,$currentPath);
       $r->print('<br /><form method=post action="/adm/portfolio">'.
         &Apache::lonhtmlcommon::select_recent('portfolio','currentpath',
       'this.form.submit();'));
       $r->print("</form>");
       $r->print('<table border="0" cellspacing="2" cellpadding="2">'.
               '<tr><th>Actions</th><th>&nbsp;</th><th>Name</th><th>Size</th><th>Last Modified</th></tr>');
       my $href_location="/uploaded/$ENV{'user.domain'}/$ENV{'user.name'}/portfolio/$currentPath/";
       foreach my $line (@dirList) {
       #$strip holds directory/file name
       #$dom 
       my ($filename,$dom,undef,$testdir,undef,undef,undef,undef,$size,undef,$mtime,undef,undef,undef,$obs,undef)=split(/\&/,$line,16); 
       if (($filename ne '.') && ($filename ne '..')) {
               if ($dirptr&$testdir) {
                   $r->print('<tr bgcolor="#FFAA99"><td><img src="'.$iconpath.'folder_closed.gif"></td>');
                   $r->print('<td>Go to ...</td>');
                   $r->print('<td>'.&make_anchor($filename.'/',$currentPath.$filename.'/').'</td>'); 
                   $r->print('</tr>'); 
               } else {
                   $r->print('<tr bgcolor="#CCCCFF">');
                   $r->print('<td>
   <select name="action">
     <option value=""></option>
     <option value="delete">'.&mt("Delete").'</option>
     <option value="rename">'.&mt("Rename").'</option>
   </select>
   <input type="submit" name="doit" value="Go" />
   </td>');
                   $r->print('<td><img src="'.$iconpath.'unknown.gif"></td>');
                   $r->print('<td><a href="'.$href_location.$filename.'">'.
     $filename.'</a></td>'); 
                   $r->print('<td>'.$size.'</td>');
                   $r->print('<td>'.&Apache::lonlocal::locallocaltime($mtime).'</td>');
                   $r->print('</tr>'); 
               }
           }
       }
   #   <tr bgcolor="#FFAA99"> pink bg 
   #   <tr bgcolor="#CCCCFF"> blue bg            
   #   $r->print(&display_directory($currentPath, $currentFile, @dirList));
   #    $r->print('</td>><td>');
   #   $r->print(&display_actions($currentPath, $currentFile, $isEmpty));
       $r->print('</table></form>');
       $r->print('</blockquote>');
       $r->print("</body>\n</html>\n");
       $r->rflush();
       return OK;
 }  }
   
 1;  1;

Removed from v.1.3  
changed lines
  Added in v.1.23


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