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

version 1.1, 2004/06/08 18:34:20 version 1.26, 2004/08/24 06:51:11
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;
   
   # receives a file name and path stub from username/userfiles/portfolio/
   # returns an anchor tag consisting encoding filename and currentpath
   sub make_anchor {
       my ($filename, $current_path) = @_;
       my $anchor = '<a href="/adm/portfolio?selectfile='.$filename.'&currentpath='.$current_path.'">'.$filename.'</a>';
       return $anchor;
   }
   
   # returns html with <br /> separated contents of the directory
   # returns a <strong>currentFile</strong> (bolds the selected file/dir)
   sub display_directory_old {
       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;
   }
   
   my $dirptr=16384;
   sub display_directory {
       my ($r,$current_path,$dir_list)=@_;
       my $iconpath= $r->dir_config('lonIconsURL') . "/";
       $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="'.$current_path.'" />'.
           '<input type="submit" name="storeupl" value="Upload" />'.
           '</form>';
       $r->print($displayOut);
       $r->print('</td></tr><tr><td bgcolor="#ccddaa" align="center">');
       $displayOut = '<form method="post">';
       $displayOut .= '<input name="newdir" type="input" />'.
           '<input type="hidden" name="currentpath" value="'.$current_path.'" />'.
           '<input type="submit" name="createdir" value="'.&mt("Create Directory").'" />'.
           '</form>';
       $r->print($displayOut);
       $r->print('</td></tr></table>');
       my @tree = split (/\//,$current_path);
       $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',$current_path,$current_path);
       $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/$current_path/";
       foreach my $line (sort 
         { 
     my ($afile)=split('&',$a,2);
     my ($bfile)=split('&',$b,2);
     return (lc($afile) cmp lc($bfile));
         } (@$dir_list)) {
       #$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.'/',$current_path.$filename.'/').'</td>'); 
                   $r->print('</tr>'); 
               } else {
                   $r->print('<tr bgcolor="#CCCCFF">');
                   $r->print('<td>
   <form method="post" action="/adm/portfolio">
   <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" />
   <input type="hidden" name="selectfile" value="'.$filename.'" />
   <input type="hidden" name="currentpath" value="'.$current_path.'" />
   </form>
   </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($current_path, $currentFile, @dir_list));
   #    $r->print('</td>><td>');
   #   $r->print(&display_actions($current_path, $currentFile, $isEmpty));
       $r->print('</table></form>');
   }
   
   sub open_form {
       my ($r)=@_;
       $r->print('<form method="post" action="/adm/portfolio">');
       $r->print('<input type="hidden" name="action" value="'.
         $ENV{'form.action'}.'" />');
       $r->print('<input type="hidden" name="confirmed" value="1" />');
       $r->print('<input type="hidden" name="selectfile" value="'.
         $ENV{'form.selectfile'}.'" />');
       $r->print('<input type="hidden" name="currentpath" value="'.
         $ENV{'form.currentpath'}.'" />');
   }
   
   sub close_form {
       my ($r)=@_;
       $r->print('<p><input type="submit" value="'.&mt('Continue').
         '" /></p></form>');
       $r->print('<form action="/adm/portfolio" method="POST">
                  <p>
                 <input type="hidden" name="currentpath" value="'.
         $ENV{'form.currentpath'}.'" />
                    <input type="submit" value="'.&mt('Cancel').'" />
                  </p></form>');
   
   }
   
   sub display_file {
       return $ENV{'form.currentpath'}.$ENV{'form.selectfile'};
   }
   
   sub done {
       return ('<h3><a href="/adm/portfolio?currentpath='.
       $ENV{'form.currentpath'}.'">'.&mt('Done').'</a></h3>');
   }
   
   sub delete {
       my ($r)=@_;
       &open_form($r);
       $r->print('<p>'.&mt('Delete').' '.&display_file().'?</p>');
       &close_form($r);
   } 
   
   sub delete_confirmed {
       my ($r)=@_;
       my $result=&Apache::lonnet::removeuserfile($ENV{'user.name'},
          $ENV{'user.domain'},'portfolio'.
          $ENV{'form.currentpath'}.
          $ENV{'form.selectfile'});
       if ($result ne 'ok') {
    $r->print('<font color="red"> An errror occured ('.$result.
     ') while trying to delete '.&display_file().'</font><br />');
       }
       $r->print(&done());
   }
   
   sub rename {
       my ($r)=@_;
       &open_form($r);
       $r->print('<p>'.&mt('Rename').' '.&display_file().'?</p>');
       &close_form($r);
   }
   
   sub rename_confirmed {
       my ($r)=@_;
       &Apache::lonnet::renameuserfile($ENV{'form.currentpath'}.$ENV{'form.selectfile'}, 'rename', $ENV{'form.currentpath'}.$ENV{'form.filenewname'} );
   } 
   
   sub upload {
       my ($r)=@_;
       #FIXME if the file already exists we need to do a confirmation pass 
       #before overwriting
       my $result=&Apache::lonnet::userfileupload('uploaddoc','',
    'portfolio'.$ENV{'form.currentpath'});
       if ($result !~ m|^/uploaded/|) {
    $r->print('<font color="red"> An errror occured ('.$result.
     ') while trying to upload '.&display_file().'</font><br />');
       }
       $r->print(&done());
   }
   
   sub createdir {
       my ($r)=@_;
       #FIXME 1) bad dirnames ( '/' etc)
       #      2) file exists in place of dir (errormessage needs improvement)
       my $result=&Apache::lonnet::mkdiruserfile($ENV{'user.name'},
        $ENV{'user.domain'},'portfolio'.$ENV{'form.currentpath'}.$ENV{'form.newdir'});
       if ($result ne 'ok') {
    $r->print('<font color="red"> An errror occured ('.$result.
     ') while trying to create a new directory '.&display_file().'</font><br />');
       }
       $r->print(&done());
   }
   
 sub handler {  sub handler {
  my $r=@_[0];      # this handles file management
  $r->content_type('text/html');      my $r = shift;
  $r->send_http_header;      my @dir_list; # will hold directory listing as array
  return OK if $r->header_only;      my $udir; # returned from home server
  $r->print("the portfolio handler is in use by $ENV{'user.name'} looking for "      my $currentFile; # directory or file contained in $pathToRoot.$current_path
  .$r->uri."<br />");      my $action; # delete, rename, makedirectory, removedirectory,
  my $file=&Apache::lonnet::filelocation("",$r->uri);      my $filenewname; # for rename action (guess what we do with it!)
  my $contents=&Apache::lonnet::getfile($file);      my $isFile;
 # $r->print($contents);      &Apache::loncommon::no_cache($r);
       &Apache::loncommon::content_type($r,'text/html');
  $r->print("here's the form<br />");      $r->send_http_header;
  $r->print('<form method=post enctype="multipart/form-data" action="'.$r->uri.'">');      # Give the LON-CAPA page header
  $r->print('<input type=submit value="upload">');      $r->print('<html><head><title>'.
  $r->print('<input name="saywhat" type="file">');                &mt('Portfolio Manager').
  $r->print('</form>');                "</title></head>\n".
  return OK;                &Apache::loncommon::bodytag('Portfolio Manager'));
 # my $something = "this is something<br />";      $r->rflush();
 # my (undef,undef,$cdom,$cnum)=split(/\//,$r->uri);      &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
 # Is this even a user?                                              ['selectfile','currentpath',
 #    if (&Apache::lonnet::homeserver($cnum,$cdom) eq 'no_host') {       'currentfile']);
 # $r->print('</head><body>'.  
 #  &mt('No user information available').'</body></html>');      # if we're uploading a file, we need to do it early so it will
 #       return OK;      # show in the directory list
 #    }  
   
       if ($ENV{'form.uploaddoc.filename'}) {
    &upload($r);
       } elsif ($ENV{'form.action'} eq 'delete') {
    if ($ENV{'form.confirmed'}) {
       &delete_confirmed($r);
    } else {
       &delete($r);
    }
       } elsif ($ENV{'form.action'} eq 'rename') {
    # similarly, we need to delete or rename files before getting
    # directory list
    &rename($r);
       } elsif ($ENV{'form.createdir'}) {
    &createdir($r);
       } else {
    my $current_path='/';
    if ($ENV{'form.currentpath'}) {
       $current_path = $ENV{'form.currentpath'};
    }
   
    my $portfolio_root = &Apache::loncommon::propath($ENV{'user.domain'},
    $ENV{'user.name'}).
    '/userfiles/portfolio';
    @dir_list=&Apache::lonnet::dirlist($current_path,$ENV{'user.domain'},
      $ENV{'user.name'},$portfolio_root);
       
    # need to know if directory is empty so it can be removed if desired
    my $is_empty=(@dir_list == 2);
      
    &display_directory($r,$current_path,\@dir_list);
   
 # $r->print($something);      }
 # $r->print($r);  
 # $r->print($ENV{'user.name'});      $r->print("</body>\n</html>\n");
 # $r->print("<br />should have printed username above<br />");      $r->rflush();
 # my $key = "";      return OK;
 # foreach my $key (sort(keys(%ENV))) {  
 # $r->print("$key is $ENV{$key} <br />\n");  
 # }  
 #  
 # my @envkeys = keys(%ENV);  
 # my $i = 0;  
 # for ($i = 0; $i < 30; $i++){  
 # $r->print("Key $i is $envkeys[$i] <br />");  
 # }  
 # return OK;  
 }  }
   
 1;  1;
 __END__  __END__

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


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