[LON-CAPA-cvs] cvs: loncom /interface portfolio.pm

banghart lon-capa-cvs@mail.lon-capa.org
Fri, 25 Jun 2004 18:47:18 -0000


This is a MIME encoded message

--banghart1088189238
Content-Type: text/plain

banghart		Fri Jun 25 14:47:18 2004 EDT

  Modified files:              
    /loncom/interface	portfolio.pm 
  Log:
  
  	Still very much under construction. Beginning of directory 
  	navigation is working. Upload seems to work, but needs to be
  	made more secure. 
  
  	Immediate to do:
  		Delete files
  		Create subdirectories
  		Make all actions context sensitive
  
  
  
--banghart1088189238
Content-Type: text/plain
Content-Disposition: attachment; filename="banghart-20040625144718.txt"

Index: loncom/interface/portfolio.pm
diff -u loncom/interface/portfolio.pm:1.5 loncom/interface/portfolio.pm:1.6
--- loncom/interface/portfolio.pm:1.5	Mon Jun 21 10:10:05 2004
+++ loncom/interface/portfolio.pm	Fri Jun 25 14:47:18 2004
@@ -32,41 +32,221 @@
 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 {
-	my ($r)=@_;
+	# this handles file management
+	my $r=@_[0];
+	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;
-	return OK if $r->header_only;
-#	my $file=&Apache::lonnet::filelocation("",$r->uri);	
-#	my $contents=&Apache::lonnet::getfile($file);
-#	upload a file if we enter with a filename set
-	$r->print ('<body bgcolor="dogfood">
-		<blockquote>');
-	
+	$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 (&Apache::lonnet::userfileupload('uploaddoc',undef,'portfolio').'<br />');	
+		$r->print ($ENV{'form.storeupl'}.'<br />');
+		$r->print (&Apache::lonnet::userfileupload('uploaddoc','','portfolio'.$currentPath).'<br />');	
 	}
-	$r->print ('<br />Current contents of your portfolio directory: <br /><hr />');
-	$r->print (&Apache::lonnet::portfoliolist($r->uri, $ENV{'user.domain'}, $ENV{'user.name'}, undef ));
-	$r->print ('<hr />');
-#	$r->print ($ENV{'form.uploaddoc.filename'}.'<br />');
-#	$r->print ($ENV{'form.storeupl'}.'<br />');
-#	$r->print ($ENV{'form.saywhat'}.'<br />');
-
-	$r->print("Upload files to your portfolio<br />");
-	# file upload form 
-	$r->print('<form method="post" enctype="multipart/form-data">');
-	$r->print('<input name="uploaddoc" type="file">'.
+	# 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
 	
-		'<input type="submit" name="storeupl" value="Upload">'
-		);
-	$r->print('</form>
-	</blockquote>
-	</body>');
+	# $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;

--banghart1088189238--