File:  [LON-CAPA] / loncom / interface / portfolio.pm
Revision 1.7: download - view: text, annotated - select for diffs
Fri Jun 25 20:50:05 2004 UTC (19 years, 11 months ago) by matthew
Branches: MAIN
CVS tags: HEAD
I seem to remember fixing this before...

    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: sub makeAnchor{
   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 file name
   38: 	my ($fileName, $currentPath) = @_;
   39: 	my $anchor = '<a href="/adm/portfolio?selectfile='.$fileName.'&currentpath='.$currentPath.'">'.$fileName.'</a>';
   40: #	my $button = '
   41: #		<form method="POST" action="/adm/portfolio">
   42: #		<input type="hidden" name="selectfile" value="'.$fileName.'">
   43: #		<input type="submit" value="'.$fileName.'" name="storeupl">
   44: #		</form>
   45: #		';
   46: 	return $anchor;
   47: }
   48: sub displayDirectory {
   49: 	# returns html with <br /> separated contents of the directory
   50: 	# returns a <strong>currentFile</strong> (bolds the selected file/dir)
   51: 	
   52: 	my ($currentPath, $currentFile, $isDir, @dirList,) = @_;
   53: 	my $displayOut='';	
   54: 	my $fileName;
   55: 	my $upPath;
   56: 	if ($currentPath ne '/'){
   57: 		$displayOut = 'Listing of '.$currentPath.'<br /><hr />'.
   58: 		# provides the "up one directory level" function
   59: 		# it means shortening the currentpath to the parent directory
   60: 		$currentPath =~ m:(^/.*)(/.*/$):;
   61: 		if ($1 ne '/'){
   62: 			$upPath = $1.'/';
   63: 		}else{
   64: 			$upPath = $1;
   65: 		}
   66: 		
   67: 		$displayOut = $displayOut.'<a href="/adm/portfolio?selectfile=updir&currentpath='.$upPath.'">..</a><br />';
   68: 	} else {
   69: 		$displayOut = $displayOut.'at root '.$currentPath.'<br />';
   70: 	}
   71: 	while ($fileName = shift @dirList){
   72: 		if (($fileName ne './') && ($fileName ne '../')){
   73: 			if ($fileName =~ m:/$:){
   74: 				# handle directories different from files
   75: 				if ($fileName eq $currentFile){ #checks to bold the selected file
   76: 					$displayOut = $displayOut.'<strong>'.(makeAnchor($fileName, $currentPath.$fileName).'</strong><br />');
   77: 				}else{
   78: 					$displayOut = $displayOut.(makeAnchor($fileName, $currentPath.$fileName).'<br />');
   79: 				}
   80: 			}else{
   81: 				if ($fileName eq $currentFile){ #checks to bold the selected file
   82: 					$displayOut = $displayOut.'<strong>'.(makeAnchor($fileName, $currentPath).'</strong><br />');
   83: 				}else{
   84: 					$displayOut = $displayOut.(makeAnchor($fileName, $currentPath).'<br />');
   85: 				}
   86: 			}
   87: 		}
   88: 	}
   89: 	$displayOut = $displayOut.
   90: 	return $displayOut;
   91: }
   92: sub displayActions {
   93: 	# returns html to offer user appropriate actions depending on selected file/directory
   94: 	my $displayOut;
   95: 	my ($currentPath, $currentFile, $isDir, $isFile) = @_;
   96: #	$displayOut = 'here are actions for '.$currentFile;
   97: 	if ($isDir){
   98: 		$displayOut = 'Directory';
   99: 	}
  100: 	if ($isFile){
  101: 		$displayOut = 'File';
  102: 	}
  103: 	
  104: 	$displayOut = 	$displayOut.'<form method="POST">
  105: 			<input type="hidden" name="selectfile" 
  106: 			value="'.$currentFile.'">
  107: 			<input type="hidden" name="fileaction" value="delete"> 
  108: 			<center>
  109: 			<input type="submit" 
  110: 			
  111: 			value="Delete '.$currentFile.'">
  112: 			</center>
  113: 			</form>
  114: 			<hr />
  115: 			<form method="POST">
  116: 			<input type="hidden" name="selectfile" 
  117: 			value="'.$currentFile.'">
  118: 			<input type="hidden" name="fileaction" value="rename"> 
  119: 			<input type="input" name="filenewname" value="Type new name here"> 
  120: 			<input type="submit" 
  121: 			value="Rename '.$currentFile.'">
  122: 			</form>
  123: 			<hr>';
  124: 	$displayOut = $displayOut.'<hr>Add a file to your portfolio';
  125: 	# file upload form 
  126: 	$displayOut = $displayOut.'<form method="post" enctype="multipart/form-data">';
  127: 	$displayOut = $displayOut.'<input name="uploaddoc" type="file">'.
  128: 		'<input type="hidden" name="currentpath" value="'.$currentPath.'">'.
  129: 		'<input type="submit" name="storeupl" value="Upload">'.
  130: 		'</form><hr>';
  131: 	$displayOut = $displayOut.'<form method="POST">
  132: 		<input name="subdir" type="text" >
  133: 		<input type="submit" value="Create Subdirectory">
  134: 		</form>
  135: 			';
  136: 	return $displayOut;
  137: }
  138: sub handler {
  139: 	# this handles file management
  140: 	my ($r)=@_;
  141: 	my @dirList; # will hold directory listing as array
  142: 	my $udir; # returned from home server
  143: 	my $currentPath; # path assuming /userfiles/portfolio/ as root
  144: 	my $currentFile; # directory or file contained in $pathToRoot.$currentPath
  145: 	my $action; # delete, rename, makedirectory, removedirectory,
  146: 	my $filenewname; # for rename action (guess what we do with it!)
  147: 	my $isFile;
  148: 	my $isDir;
  149: 	# send header
  150: 	$r->content_type('text/html');
  151: 	$r->send_http_header;
  152: 	$r->print('<html><head><title>'.
  153:               'Portfolio Management'.
  154:               "</title></head>\n");
  155: 
  156: 	$r->print ('
  157: 	<body bgcolor="dogfood">
  158: 	<blockquote>');
  159: 	#grab stuff that was sent
  160: 	&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
  161:                                             ['selectfile','currentpath', 'currentfile']);
  162: 	$r->print ('<br />CP= '.$ENV{'form.currentpath'}.'<br />');
  163: 	# currentPath and currentFile need to be set for the rest of things to happen
  164: 	# sometimes, currentFile will be passed by a form field, selectedfile
  165: 	# if there is no 'form.selectedfile' then the current directory is 
  166: 	# considered as selected 
  167: 	if ($ENV{'form.currentpath'}){
  168: 		$currentPath = $ENV{'form.currentpath'};
  169: 	}else{
  170: 		$currentPath = '/';
  171: 	}
  172: 	if ($ENV{'form.selectfile'}){
  173: 		$r->print('<br />found selectfile'.$ENV{'form.selectfile'} .'<br />');
  174: 		# have to check if the selected file is a subdirectory
  175: 		if ($ENV{'form.selectfile'} =~ /-\(Dir\)/){
  176: 			# $currentPath =~ /\-\(Dir\)/;
  177: 			$currentPath = $`.'/';
  178: 			$r->print('<br />'.$currentPath.'<br />');
  179: 		}
  180: 		$currentFile = $ENV{'form.selectfile'};
  181: 	}else{
  182: 		$currentFile = '';
  183: 	}
  184: 	# if we're uploading a file, we need to do it early so it will show in the directory list
  185: 	if ($ENV{'form.uploaddoc.filename'}){
  186: 		$r->print ($ENV{'form.storeupl'}.'<br />');
  187: 		$r->print (&Apache::lonnet::userfileupload('uploaddoc','','portfolio'.$currentPath).'<br />');	
  188: 	}
  189: 	# similarly, we need to delete or rename files before getting directory list
  190: 	if ($ENV{'form.selectfile'}){
  191: 		if ($ENV{'form.fileaction'} eq 'delete'){
  192: 			&Apache::lonnet::portfoliomanage($ENV{'form.selectfile'}, 'delete', undef );
  193: 			$currentFile = '';
  194: 		}elsif($ENV{'form.fileaction'} eq 'rename')  {
  195: 			&Apache::lonnet::portfoliomanage($ENV{'form.selectfile'}, 'rename', $ENV{'form.filenewname'} );
  196: 			# $r->print ('We will rename your file');
  197: 		}
  198: 	}
  199: 	# we always need $dirList, plus this will return information about the current file
  200: 	# as well as information about he home server directory structure, specifically
  201: 	# the path to the users userfiles directory.	
  202: 	@dirList = split /<br\s\/>/, (&Apache::lonnet::portfoliolist($currentPath, $currentFile));
  203: 	# portfoliolist returns isdir, isfile and udir as the final array elements
  204: 	# we'll pop them off the bottom of the array, and put them where they belong
  205: 	
  206: 	# $londcall added to help debug
  207: 	my $londcall = pop @dirList;
  208: 	$r->print ('<br />udir '.$londcall.'<br />');
  209: 	$udir = pop @dirList;
  210: 	$r->print ('<br />path returned '.$udir.'<br />');
  211: 	$isFile = pop @dirList;
  212: #	$r->print ('<br />isfile '.$isFile.'<br />');
  213: 	$isDir = pop @dirList;
  214: #	$r->print ('<br />isdir '.$isDir.'<br />');
  215: #	return OK if $r->header_only;
  216: 	# Stuff to maintain proper setting for selected file
  217: 	if ($ENV{'form.selectfile'}){
  218: 		if ($ENV{'form.fileaction'} eq 'delete'){
  219: 			&Apache::lonnet::portfoliomanage($ENV{'form.selectfile'}, 'delete', undef );
  220: 			$ENV{'portfolio.file'} = 'Selected File Deleted';
  221: 		}elsif($ENV{'form.fileaction'} eq 'rename')  {
  222: 			&Apache::lonnet::portfoliomanage($ENV{'form.selectfile'}, 'rename', $ENV{'form.filenewname'} );
  223: #			$r->print ('We will rename your file');
  224: 		}else{
  225: 	
  226: 		# Remember user's file selection for later
  227: 		$ENV{'portfolio.file'} = $ENV{'form.selectfile'};
  228: 		# offer things user can do with selected file
  229: 		}
  230: 	}else{
  231: 		unless ($ENV{'portfolio.file'}){
  232: 			$ENV{'portfolio.file'} = 'No File Selected';
  233: 		}
  234: 	}
  235: 	##############################
  236: 	#
  237: 	# Display begins here
  238: 	#
  239: 	##############################
  240: 	$r->print ('<hr /> start ');
  241: 	$r->print ($udir);
  242: 	$r->print ('<table border=1><tr><td>');
  243: 	$r->print (displayDirectory ($currentPath, $currentFile, $isDir, @dirList));
  244: 	$r->print ('</td>><td>');
  245: 	$r->print (displayActions ($currentPath, $currentFile, $isDir, $isFile));
  246: 	$r->print ('</td>></tr></table>');
  247: 	$r->print ('<br />end display<br /><hr />');
  248: 	$r->print ('</blockquote></body>');
  249: 	return OK;
  250: }
  251: 
  252: 1;
  253: __END__

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