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

version 1.1, 2004/06/08 18:34:20 version 1.7, 2004/06/25 20:50:05
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 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 {
  my $r=@_[0];   # 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
  $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>'.
  $r->print("the portfolio handler is in use by $ENV{'user.name'} looking for "                'Portfolio Management'.
  .$r->uri."<br />");                "</title></head>\n");
  my $file=&Apache::lonnet::filelocation("",$r->uri);  
  my $contents=&Apache::lonnet::getfile($file);  
 # $r->print($contents);  
   
  $r->print("here's the form<br />");  
  $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;  
 #    }  
   
   
   
 # $r->print($something);   $r->print ('
 # $r->print($r);   <body bgcolor="dogfood">
 # $r->print($ENV{'user.name'});   <blockquote>');
 # $r->print("<br />should have printed username above<br />");   #grab stuff that was sent
 # my $key = "";   &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
 # foreach my $key (sort(keys(%ENV))) {                                              ['selectfile','currentpath', 'currentfile']);
 # $r->print("$key is $ENV{$key} <br />\n");   $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
 # my @envkeys = keys(%ENV);   # if there is no 'form.selectedfile' then the current directory is 
 # my $i = 0;   # considered as selected 
 # for ($i = 0; $i < 30; $i++){   if ($ENV{'form.currentpath'}){
 # $r->print("Key $i is $envkeys[$i] <br />");   $currentPath = $ENV{'form.currentpath'};
 # }   }else{
 # return OK;   $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.7


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