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

version 1.1, 2004/06/08 18:34:20 version 1.9, 2004/06/28 16:12:06
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 {  # receives a file name assumed to reside in username/userfiles/portfolio/
  my $r=@_[0];  # returns a form consisting of a single submit button labeled with the filename
  $r->content_type('text/html');  sub makeAnchor {
  $r->send_http_header;      my ($fileName, $currentPath) = @_;
  return OK if $r->header_only;      my $anchor = '<a href="/adm/portfolio?selectfile='.$fileName.'&currentpath='.$currentPath.'">'.$fileName.'</a>';
  $r->print("the portfolio handler is in use by $ENV{'user.name'} looking for "  #    my $button = '
  .$r->uri."<br />");  # <form method="POST" action="/adm/portfolio">
  my $file=&Apache::lonnet::filelocation("",$r->uri);  # <input type="hidden" name="selectfile" value="'.$fileName.'" />
  my $contents=&Apache::lonnet::getfile($file);  # <input type="submit" value="'.$fileName.'" name="storeupl" />
 # $r->print($contents);  # </form>
   # ';
  $r->print("here's the form<br />");      return $anchor;
  $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;  
 #    }  
   
   # returns html with <br /> separated contents of the directory
   # returns a <strong>currentFile</strong> (bolds the selected file/dir)
   sub displayDirectory {
       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;
   }
   
   # returns html to offer user appropriate actions depending on selected
   # file/directory
   sub displayActions {
       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 {
       # this handles file management
       my ($r)=@_;
       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
       # FIXME need to start using
       # &Apache::loncommon::content_type()
       $r->content_type('text/html');
       $r->send_http_header;
       $r->print('<html><head><title>'.
                 'Portfolio Management'.
                 "</title></head>\n");
   
 # $r->print($something);      # FIXME need to start using
 # $r->print($r);      # &Apache::loncommon::bodytag()
 # $r->print($ENV{'user.name'});      $r->print('
 # $r->print("<br />should have printed username above<br />");   <body bgcolor="dogfood">
 # my $key = "";   <blockquote>');
 # foreach my $key (sort(keys(%ENV))) {      #grab stuff that was sent
 # $r->print("$key is $ENV{$key} <br />\n");      &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
 # }                                              ['selectfile','currentpath',
 #       'currentfile']);
 # my @envkeys = keys(%ENV);      $r->print ('<br />CP= '.$ENV{'form.currentpath'}.'<br />');
 # my $i = 0;      # currentPath and currentFile need to be set for the rest of things to happen
 # for ($i = 0; $i < 30; $i++){      # sometimes, currentFile will be passed by a form field, selectedfile
 # $r->print("Key $i is $envkeys[$i] <br />");      # if there is no 'form.selectedfile' then the current directory is 
 # }      # considered as selected 
 # return OK;      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'}) {
    $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') {
       &Apache::lonnet::portfoliomanage($ENV{'form.selectfile'}, 'delete', undef );
       $currentFile = '';
    } elsif($ENV{'form.fileaction'} eq 'rename') {
       &Apache::lonnet::portfoliomanage($ENV{'form.selectfile'}, 'rename', $ENV{'form.filenewname'} );
       # $r->print('We will rename your 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
       
       # $londcall added to help debug
       my $londcall = pop(@dirList);
       $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;
 }  }
   
 1;  1;
 __END__  __END__

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


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