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

version 1.2, 2004/06/18 20:42:16 version 1.6, 2004/06/25 18:47:18
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 assumed to reside in username/userfiles/portfolio/
    # returns a form consisting of a single submit button labeled with the file name
    my ($fileName, $currentPath) = @_;
    my $anchor = '<a href="/adm/portfolio?selectfile='.$fileName.'&currentpath='.$currentPath.'">'.$fileName.'</a>';
   # my $button = '
   # <form method="POST" action="/adm/portfolio">
   # <input type="hidden" name="selectfile" value="'.$fileName.'">
   # <input type="submit" value="'.$fileName.'" name="storeupl">
   # </form>
   # ';
    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=updir&currentpath='.$upPath.'">..</a><br />';
    } else {
    $displayOut = $displayOut.'at root '.$currentPath.'<br />';
    }
    while ($fileName = shift @dirList){
    if (($fileName ne './') && ($fileName ne '../')){
    if ($fileName =~ m:/$:){
    # handle directories different from files
    if ($fileName eq $currentFile){ #checks to bold the selected file
    $displayOut = $displayOut.'<strong>'.(makeAnchor($fileName, $currentPath.$fileName).'</strong><br />');
    }else{
    $displayOut = $displayOut.(makeAnchor($fileName, $currentPath.$fileName).'<br />');
    }
    }else{
    if ($fileName eq $currentFile){ #checks to bold the selected file
    $displayOut = $displayOut.'<strong>'.(makeAnchor($fileName, $currentPath).'</strong><br />');
    }else{
    $displayOut = $displayOut.(makeAnchor($fileName, $currentPath).'<br />');
    }
    }
    }
    }
    $displayOut = $displayOut.
    return $displayOut;
   }
   sub displayActions {
    # returns html to offer user appropriate actions depending on selected file/directory
    my $displayOut;
    my ($currentPath, $currentFile, $isDir, $isFile) = @_;
   # $displayOut = 'here are actions for '.$currentFile;
    if ($isDir){
    $displayOut = 'Directory';
    }
    if ($isFile){
    $displayOut = 'File';
    }
   
    $displayOut = $displayOut.'<form method="POST">
    <input type="hidden" name="selectfile" 
    value="'.$currentFile.'">
    <input type="hidden" name="fileaction" value="delete"> 
    <center>
    <input type="submit" 
   
    value="Delete '.$currentFile.'">
    </center>
    </form>
    <hr />
    <form method="POST">
    <input type="hidden" name="selectfile" 
    value="'.$currentFile.'">
    <input type="hidden" name="fileaction" value="rename"> 
    <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 your portfolio';
    # 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 {
    # this handles file management
  my $r=@_[0];   my $r=@_[0];
    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 $isDir;
    # send header
  $r->content_type('text/html');   $r->content_type('text/html');
  $r->send_http_header;   $r->send_http_header;
  return OK if $r->header_only;   $r->print('<html><head><title>'.
  my $file=&Apache::lonnet::filelocation("",$r->uri);                'Portfolio Management'.
  my $contents=&Apache::lonnet::getfile($file);                "</title></head>\n");
  $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 ('
  $r->print ('<br /> call to dirlist precedes <br />');   <body bgcolor="dogfood">
    <blockquote>');
    #grab stuff that was sent
    &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
                                               ['selectfile','currentpath', 'currentfile']);
    $r->print ('<br />CP= '.$ENV{'form.currentpath'}.'<br />');
    # 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'}){
    $r->print('<br />found selectfile'.$ENV{'form.selectfile'} .'<br />');
    # 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'}){   if ($ENV{'form.uploaddoc.filename'}){
  $r->print ('<br /> call to userfileupload follows <br />');   $r->print ($ENV{'form.storeupl'}.'<br />');
  $r->print (&Apache::lonnet::userfileupload('uploaddoc',undef,'portfolio').'<br />');   $r->print (&Apache::lonnet::userfileupload('uploaddoc','','portfolio'.$currentPath).'<br />');
  $r->print ('<br /> call to userfileupload precedes <br />');  
  }   }
    # similarly, we need to delete or rename files before getting directory list
  $r->print ($ENV{'form.uploaddoc.filename'}.'<br />');   if ($ENV{'form.selectfile'}){
  $r->print ($ENV{'form.storeupl'}.'<br />');   if ($ENV{'form.fileaction'} eq 'delete'){
  $r->print ($ENV{'form.saywhat'}.'<br />');   &Apache::lonnet::portfoliomanage($ENV{'form.selectfile'}, 'delete', undef );
    $currentFile = '';
  $r->print("here's the form<br />");   }elsif($ENV{'form.fileaction'} eq 'rename')  {
  # file upload form    &Apache::lonnet::portfoliomanage($ENV{'form.selectfile'}, 'rename', $ENV{'form.filenewname'} );
  $r->print('<form method="post" enctype="multipart/form-data">');   # $r->print ('We will rename your file');
  $r->print('<input name="uploaddoc" type="file">'.   }
    }
    # 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.
    @dirList = split /<br\s\/>/, (&Apache::lonnet::portfoliolist($currentPath, $currentFile));
    # portfoliolist returns isdir, isfile and udir as the final array elements
    # we'll pop them off the bottom of the array, and put them where they belong
   
  '<input type="submit" name="storeupl" value="Upload">'   # $londcall added to help debug
  );   my $londcall = pop @dirList;
  $r->print('</form>');   $r->print ('<br />udir '.$londcall.'<br />');
    $udir = pop @dirList;
    $r->print ('<br />path returned '.$udir.'<br />');
    $isFile = pop @dirList;
   # $r->print ('<br />isfile '.$isFile.'<br />');
    $isDir = pop @dirList;
   # $r->print ('<br />isdir '.$isDir.'<br />');
   # return OK if $r->header_only;
    # 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'} );
   # $r->print ('We will rename your file');
    }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 ('<hr /> start ');
    $r->print ($udir);
    $r->print ('<table border=1><tr><td>');
    $r->print (displayDirectory ($currentPath, $currentFile, $isDir, @dirList));
    $r->print ('</td>><td>');
    $r->print (displayActions ($currentPath, $currentFile, $isDir, $isFile));
    $r->print ('</td>></tr></table>');
    $r->print ('<br />end display<br /><hr />');
    $r->print ('</blockquote></body>');
  return OK;   return OK;
   
 }  }
   
 1;  1;

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


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