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, 10 months ago) by matthew
Branches: MAIN
CVS tags: HEAD
I seem to remember fixing this before...

# 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;
use strict;
use Apache::Constants qw(:common :http);
use Apache::loncommon;
use Apache::lonnet;
use Apache::lontexconvert;
use Apache::lonfeedback;
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 {
	# 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->send_http_header;
	$r->print('<html><head><title>'.
              'Portfolio Management'.
              "</title></head>\n");

	$r->print ('
	<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'}){
		$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;
__END__

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