File:  [LON-CAPA] / loncom / interface / portfolio.pm
Revision 1.8: download - view: text, annotated - select for diffs
Mon Jun 28 16:07:47 2004 UTC (20 years ago) by albertel
Branches: MAIN
CVS tags: HEAD
- retabinate

    1: # Copyright Michigan State University Board of Trustees
    2: #
    3: # This file is part of the LearningOnline Network with CAPA (LON-CAPA).
    4: #
    5: # LON-CAPA is free software; you can redistribute it and/or modify
    6: # it under the terms of the GNU General Public License as published by
    7: # the Free Software Foundation; either version 2 of the License, or 
    8: # (at your option) any later version.
    9: #
   10: # LON-CAPA is distributed in the hope that it will be useful,
   11: # but WITHOUT ANY WARRANTY; without even the implied warranty of
   12: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   13: # GNU General Public License for more details.
   14: #
   15: # You should have received a copy of the GNU General Public License
   16: # along with LON-CAPA; if not, write to the Free Software
   17: # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
   18: #
   19: # /home/httpd/html/adm/gpl.txt
   20: #
   21: 
   22: 
   23: # http://www.lon-capa.org/
   24: #
   25: 
   26: 
   27: package Apache::portfolio;
   28: use strict;
   29: use Apache::Constants qw(:common :http);
   30: use Apache::loncommon;
   31: use Apache::lonnet;
   32: use Apache::lontexconvert;
   33: use Apache::lonfeedback;
   34: use Apache::lonlocal;
   35: 
   36: # receives a file name assumed to reside in username/userfiles/portfolio/
   37: # returns a form consisting of a single submit button labeled with the filename
   38: sub makeAnchor {
   39:     my ($fileName, $currentPath) = @_;
   40:     my $anchor = '<a href="/adm/portfolio?selectfile='.$fileName.'&currentpath='.$currentPath.'">'.$fileName.'</a>';
   41: #    my $button = '
   42: #		<form method="POST" action="/adm/portfolio">
   43: #		<input type="hidden" name="selectfile" value="'.$fileName.'">
   44: #		<input type="submit" value="'.$fileName.'" name="storeupl">
   45: #		</form>
   46: #		';
   47:     return $anchor;
   48: }
   49: 
   50: # returns html with <br /> separated contents of the directory
   51: # returns a <strong>currentFile</strong> (bolds the selected file/dir)
   52: sub displayDirectory {
   53:     my ($currentPath, $currentFile, $isDir, @dirList,) = @_;
   54:     my $displayOut='';	
   55:     my $fileName;
   56:     my $upPath;
   57:     if ($currentPath ne '/') {
   58: 	$displayOut = 'Listing of '.$currentPath.'<br /><hr />'.
   59: 	    # provides the "up one directory level" function
   60: 	    # it means shortening the currentpath to the parent directory
   61: 	    $currentPath =~ m:(^/.*)(/.*/$ ):;
   62: 	if ($1 ne '/') {
   63: 	    $upPath = $1.'/';
   64: 	} else {
   65: 	    $upPath = $1;
   66: 	}
   67: 		
   68: 	$displayOut = $displayOut.'<a href="/adm/portfolio?selectfile=updir&currentpath='.$upPath.'">..</a><br />';
   69:     } else {
   70: 	$displayOut = $displayOut.'at root '.$currentPath.'<br />';
   71:     }
   72:     while ($fileName = shift @dirList) {
   73: 	if (($fileName ne './') && ($fileName ne '../')) {
   74: 	    if ($fileName =~ m:/$:) {
   75: 		# handle directories different from files
   76: 		if ($fileName eq $currentFile) {
   77: 		    #checks to bold the selected file
   78: 		    $displayOut = $displayOut.'<strong>'.(&makeAnchor($fileName, $currentPath.$fileName).'</strong><br />');
   79: 		} else {
   80: 		    $displayOut = $displayOut.(&makeAnchor($fileName, $currentPath.$fileName).'<br />');
   81: 		}
   82: 	    } else {
   83: 		if ($fileName eq $currentFile) {
   84: 		    #checks to bold the selected file
   85: 		    $displayOut = $displayOut.'<strong>'.(&makeAnchor($fileName, $currentPath).'</strong><br />');
   86: 		} else {
   87: 		    $displayOut = $displayOut.(&makeAnchor($fileName, $currentPath).'<br />');
   88: 		}
   89: 	    }
   90: 	}
   91:     }
   92:     #$displayOut = $displayOut.
   93:     return $displayOut;
   94: }
   95: 
   96: # returns html to offer user appropriate actions depending on selected
   97: # file/directory
   98: sub displayActions {
   99:     my $displayOut;
  100:     my ($currentPath, $currentFile, $isDir, $isFile) = @_;
  101: #   $displayOut = 'here are actions for '.$currentFile;
  102:     if ($isDir){
  103: 	$displayOut = 'Directory';
  104:     }
  105:     if ($isFile){
  106: 	$displayOut = 'File';
  107:     }
  108:     
  109:     $displayOut = $displayOut.'<form method="POST">
  110: 			<input type="hidden" name="selectfile" 
  111: 			value="'.$currentFile.'">
  112: 			<input type="hidden" name="fileaction" value="delete"> 
  113: 			<center>
  114: 			<input type="submit" 
  115: 			
  116: 			value="Delete '.$currentFile.'">
  117: 			</center>
  118: 			</form>
  119: 			<hr />
  120: 			<form method="POST">
  121: 			<input type="hidden" name="selectfile" 
  122: 			value="'.$currentFile.'">
  123: 			<input type="hidden" name="fileaction" value="rename"> 
  124: 			<input type="input" name="filenewname" value="Type new name here"> 
  125: 			<input type="submit" 
  126: 			value="Rename '.$currentFile.'">
  127: 			</form>
  128: 			<hr>';
  129:     $displayOut = $displayOut.'<hr>Add a file to your portfolio';
  130:     # file upload form 
  131:     $displayOut = $displayOut.'<form method="post" enctype="multipart/form-data">';
  132:     $displayOut = $displayOut.'<input name="uploaddoc" type="file">'.
  133: 	'<input type="hidden" name="currentpath" value="'.$currentPath.'">'.
  134: 	'<input type="submit" name="storeupl" value="Upload">'.
  135: 	'</form><hr>';
  136:     $displayOut = $displayOut.'<form method="POST">
  137: 		<input name="subdir" type="text" >
  138: 		<input type="submit" value="Create Subdirectory">
  139: 		</form>
  140: 			';
  141:     return $displayOut;
  142: }
  143: 
  144: sub handler {
  145:     # this handles file management
  146:     my ($r)=@_;
  147:     my @dirList; # will hold directory listing as array
  148:     my $udir; # returned from home server
  149:     my $currentPath; # path assuming /userfiles/portfolio/ as root
  150:     my $currentFile; # directory or file contained in $pathToRoot.$currentPath
  151:     my $action; # delete, rename, makedirectory, removedirectory,
  152:     my $filenewname; # for rename action (guess what we do with it!)
  153:     my $isFile;
  154:     my $isDir;
  155:     # send header
  156:     $r->content_type('text/html');
  157:     $r->send_http_header;
  158:     $r->print('<html><head><title>'.
  159:               'Portfolio Management'.
  160:               "</title></head>\n");
  161: 
  162:     $r->print('
  163: 	<body bgcolor="dogfood">
  164: 	<blockquote>');
  165:     #grab stuff that was sent
  166:     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
  167:                                             ['selectfile','currentpath',
  168: 					     'currentfile']);
  169:     $r->print ('<br />CP= '.$ENV{'form.currentpath'}.'<br />');
  170:     # currentPath and currentFile need to be set for the rest of things to happen
  171:     # sometimes, currentFile will be passed by a form field, selectedfile
  172:     # if there is no 'form.selectedfile' then the current directory is 
  173:     # considered as selected 
  174:     if ($ENV{'form.currentpath'}) {
  175: 	$currentPath = $ENV{'form.currentpath'};
  176:     } else {
  177: 	$currentPath = '/';
  178:     }
  179:     if ($ENV{'form.selectfile'}) {
  180: 	$r->print('<br />found selectfile'.$ENV{'form.selectfile'} .'<br />');
  181: 	# have to check if the selected file is a subdirectory
  182: 	if ($ENV{'form.selectfile'} =~ /-\(Dir\)/) {
  183: 	    # $currentPath =~ /\-\(Dir\)/;
  184: 	    $currentPath = $`.'/';
  185: 	    $r->print('<br />'.$currentPath.'<br />');
  186: 	}
  187: 	$currentFile = $ENV{'form.selectfile'};
  188:     } else {
  189: 	$currentFile = '';
  190:     }
  191:     # if we're uploading a file, we need to do it early so it will show in the directory list
  192:     if ($ENV{'form.uploaddoc.filename'}) {
  193: 	$r->print($ENV{'form.storeupl'}.'<br />');
  194: 	$r->print(&Apache::lonnet::userfileupload('uploaddoc','','portfolio'.$currentPath).'<br />');	
  195:     }
  196:     # similarly, we need to delete or rename files before getting directory list
  197:     if ($ENV{'form.selectfile'}) {
  198: 	if ($ENV{'form.fileaction'} eq 'delete') {
  199: 	    &Apache::lonnet::portfoliomanage($ENV{'form.selectfile'}, 'delete', undef );
  200: 	    $currentFile = '';
  201: 	} elsif($ENV{'form.fileaction'} eq 'rename') {
  202: 	    &Apache::lonnet::portfoliomanage($ENV{'form.selectfile'}, 'rename', $ENV{'form.filenewname'} );
  203: 	    # $r->print('We will rename your file');
  204: 	}
  205:     }
  206:     # we always need $dirList, plus this will return information about the current file
  207:     # as well as information about he home server directory structure, specifically
  208:     # the path to the users userfiles directory.	
  209:     @dirList = split /<br\s\/>/, (&Apache::lonnet::portfoliolist($currentPath, $currentFile));
  210:     # portfoliolist returns isdir, isfile and udir as the final array elements
  211:     # we'll pop them off the bottom of the array, and put them where they belong
  212:     
  213:     # $londcall added to help debug
  214:     my $londcall = pop(@dirList);
  215:     $r->print('<br />udir '.$londcall.'<br />');
  216:     $udir = pop(@dirList);
  217:     $r->print('<br />path returned '.$udir.'<br />');
  218:     $isFile = pop(@dirList);
  219: #   $r->print('<br />isfile '.$isFile.'<br />');
  220:     $isDir = pop(@dirList);
  221: #   $r->print('<br />isdir '.$isDir.'<br />');
  222: #   return OK if $r->header_only;
  223:     # Stuff to maintain proper setting for selected file
  224:     if ($ENV{'form.selectfile'}) {
  225: 	if ($ENV{'form.fileaction'} eq 'delete') {
  226: 	    &Apache::lonnet::portfoliomanage($ENV{'form.selectfile'}, 'delete', undef );
  227: 	    $ENV{'portfolio.file'} = 'Selected File Deleted';
  228: 	} elsif($ENV{'form.fileaction'} eq 'rename') {
  229: 	    &Apache::lonnet::portfoliomanage($ENV{'form.selectfile'}, 'rename', $ENV{'form.filenewname'} );
  230: #			$r->print('We will rename your file');
  231: 	} else {
  232: 	    
  233: 	    # Remember user's file selection for later
  234: 	    $ENV{'portfolio.file'} = $ENV{'form.selectfile'};
  235: 	    # offer things user can do with selected file
  236: 	}
  237:     } else {
  238: 	unless ($ENV{'portfolio.file'}) {
  239: 	    $ENV{'portfolio.file'} = 'No File Selected';
  240: 	}
  241:     }
  242:     ##############################
  243:     #
  244:     # Display begins here
  245:     #
  246:     ##############################
  247:     $r->print('<hr /> start ');
  248:     $r->print($udir);
  249:     $r->print('<table border=1><tr><td>');
  250:     $r->print(&displayDirectory($currentPath, $currentFile, $isDir, @dirList));
  251:     $r->print('</td>><td>');
  252:     $r->print(&displayActions($currentPath, $currentFile, $isDir, $isFile));
  253:     $r->print('</td>></tr></table>');
  254:     $r->print('<br />end display<br /><hr />');
  255:     $r->print('</blockquote></body>');
  256:     return OK;
  257: }
  258: 
  259: 1;
  260: __END__

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