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

albertel lon-capa-cvs@mail.lon-capa.org
Tue, 24 Aug 2004 06:16:55 -0000


This is a MIME encoded message

--albertel1093328215
Content-Type: text/plain

albertel		Tue Aug 24 02:16:55 2004 EDT

  Modified files:              
    /loncom/interface	portfolio.pm 
  Log:
  - delete works, (and upload)
  
  - much refactoring
  
  
--albertel1093328215
Content-Type: text/plain
Content-Disposition: attachment; filename="albertel-20040824021655.txt"

Index: loncom/interface/portfolio.pm
diff -u loncom/interface/portfolio.pm:1.23 loncom/interface/portfolio.pm:1.24
--- loncom/interface/portfolio.pm:1.23	Tue Aug 24 01:01:42 2004
+++ loncom/interface/portfolio.pm	Tue Aug 24 02:16:55 2004
@@ -40,7 +40,7 @@
 
 # returns html with <br /> separated contents of the directory
 # returns a <strong>currentFile</strong> (bolds the selected file/dir)
-sub display_directory {
+sub display_directory_old {
     my ($currentPath, $currentFile, @dirList,) = @_;
     my $displayOut='';  
     my $filename;
@@ -159,118 +159,27 @@
     return $displayOut;
 }
 
-sub handler {
-    # this handles file management
-    my $r = shift;
+my $dirptr=16384;
+sub display_directory {
+    my ($r,$current_path,$dir_list)=@_;
     my $iconpath= $r->dir_config('lonIconsURL') . "/";
-    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 $isEmpty;
-    my $dirptr=16384;
-    &Apache::loncommon::no_cache($r);
-    &Apache::loncommon::content_type($r,'text/html');
-    $r->send_http_header;
-    # Give the LON-CAPA page header
-    $r->print('<html><head><title>'.
-              &mt('Portfolio Manager').
-              "</title></head>\n".
-              &Apache::loncommon::bodytag('Portfolio Manager'));
-    $r->rflush();
-    &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
-                                            ['selectfile','currentpath', 'currentfile']);
-    # 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'}) {
-        # 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') {
-            $r->print('<br />trying to delete '.$currentPath.$ENV{'form.selectfile'}.'<br />');
-            $r->print(&Apache::lonnet::removeuserfile($ENV{'user.name'}, $ENV{'user.domain'},'portfolio'.$currentPath.$ENV{'form.selectfile'}));
-            $currentFile = '';
-        } elsif ($ENV{'form.fileaction'} eq 'rename') {
-            &Apache::lonnet::portfoliomanage($currentPath.$ENV{'form.selectfile'}, 'rename', $currentPath.$ENV{'form.filenewname'} );
-        }
-    }
-    # we always need $dirList, plus this will return information about the current file
-    # as well as information about the home server directory structure, specifically
-    # the path to the users userfiles directory.    
-    # 
-    my $portfolio_root = &Apache::loncommon::propath($ENV{'user.domain'},
-						     $ENV{'user.name'}).
-						       '/userfiles/portfolio';
-    @dirList = &Apache::lonnet::dirlist($currentPath,  $ENV{'user.domain'}, $ENV{'user.name'}, $portfolio_root);
-    
-    if (@dirList == 2) { # need to know if directory is empty so it can be removed if desired
-        $isEmpty = 1;
-    } else {
-        $isEmpty = 0;
-    }
-   
-    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'});
-        } 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('<table border="0" cellspacing="2" cellpadding="2"><tr valign="middle">');
     $r->print('<td bgcolor="#ccddaa" align="center">');
     my $displayOut = '<form method="post" enctype="multipart/form-data">';
     $displayOut = $displayOut.'<input name="uploaddoc" type="file" />'.
-        '<input type="hidden" name="currentpath" value="'.$currentPath.'" />'.
+        '<input type="hidden" name="currentpath" value="'.$current_path.'" />'.
         '<input type="submit" name="storeupl" value="Upload" />'.
         '</form>';
     $r->print($displayOut);
     $r->print('</td></tr><tr><td bgcolor="#ccddaa" align="center">');
-    my $displayOut = '<form method="post">';
-    $displayOut = $displayOut.'<input name="newdir" type="input" />'.
-        '<input type="hidden" name="currentpath" value="'.$currentPath.'" />'.
+    $displayOut = '<form method="post">';
+    $displayOut .= '<input name="newdir" type="input" />'.
+        '<input type="hidden" name="currentpath" value="'.$current_path.'" />'.
         '<input type="submit" name="createdir" value="'.&mt("Create Directory").'" />'.
         '</form>';
     $r->print($displayOut);
     $r->print('</td></tr></table>');
-    my @tree = split (/\//,$currentPath);
+    my @tree = split (/\//,$current_path);
     $r->print('<font size="+2">'.&make_anchor('/','/'));
     if (@tree > 1){
         my $newCurrentPath = '';
@@ -280,15 +189,15 @@
         }
     }
     $r->print('</font>');
-    &Apache::lonhtmlcommon::store_recent('portfolio',$currentPath,$currentPath);
+    &Apache::lonhtmlcommon::store_recent('portfolio',$current_path,$current_path);
     $r->print('<br /><form method=post action="/adm/portfolio">'.
 	      &Apache::lonhtmlcommon::select_recent('portfolio','currentpath',
 						    'this.form.submit();'));
     $r->print("</form>");
     $r->print('<table border="0" cellspacing="2" cellpadding="2">'.
             '<tr><th>Actions</th><th>&nbsp;</th><th>Name</th><th>Size</th><th>Last Modified</th></tr>');
-    my $href_location="/uploaded/$ENV{'user.domain'}/$ENV{'user.name'}/portfolio/$currentPath/";
-    foreach my $line (@dirList) {
+    my $href_location="/uploaded/$ENV{'user.domain'}/$ENV{'user.name'}/portfolio/$current_path/";
+    foreach my $line (@$dir_list) {
     	#$strip holds directory/file name
     	#$dom 
     	my ($filename,$dom,undef,$testdir,undef,undef,undef,undef,$size,undef,$mtime,undef,undef,undef,$obs,undef)=split(/\&/,$line,16); 
@@ -296,17 +205,21 @@
             if ($dirptr&$testdir) {
                 $r->print('<tr bgcolor="#FFAA99"><td><img src="'.$iconpath.'folder_closed.gif"></td>');
                 $r->print('<td>Go to ...</td>');
-                $r->print('<td>'.&make_anchor($filename.'/',$currentPath.$filename.'/').'</td>'); 
+                $r->print('<td>'.&make_anchor($filename.'/',$current_path.$filename.'/').'</td>'); 
                 $r->print('</tr>'); 
             } else {
                 $r->print('<tr bgcolor="#CCCCFF">');
                 $r->print('<td>
+<form method="post" action="/adm/portfolio">
 <select name="action">
   <option value=""></option>
   <option value="delete">'.&mt("Delete").'</option>
   <option value="rename">'.&mt("Rename").'</option>
 </select>
 <input type="submit" name="doit" value="Go" />
+<input type="hidden" name="selectfile" value="'.$filename.'" />
+<input type="hidden" name="currentpath" value="'.$current_path.'" />
+</form>
 </td>');
                 $r->print('<td><img src="'.$iconpath.'unknown.gif"></td>');
                 $r->print('<td><a href="'.$href_location.$filename.'">'.
@@ -319,11 +232,145 @@
     }
 #   <tr bgcolor="#FFAA99"> pink bg 
 #   <tr bgcolor="#CCCCFF"> blue bg            
-#   $r->print(&display_directory($currentPath, $currentFile, @dirList));
+#   $r->print(&display_directory($current_path, $currentFile, @dir_list));
 #    $r->print('</td>><td>');
-#   $r->print(&display_actions($currentPath, $currentFile, $isEmpty));
+#   $r->print(&display_actions($current_path, $currentFile, $isEmpty));
     $r->print('</table></form>');
-    $r->print('</blockquote>');
+}
+
+sub open_form {
+    my ($r)=@_;
+    $r->print('<form method="post" action="/adm/portfolio">');
+    $r->print('<input type="hidden" name="action" value="'.
+	      $ENV{'form.action'}.'" />');
+    $r->print('<input type="hidden" name="confirmed" value="1" />');
+    $r->print('<input type="hidden" name="selectfile" value="'.
+	      $ENV{'form.selectfile'}.'" />');
+    $r->print('<input type="hidden" name="currentpath" value="'.
+	      $ENV{'form.currentpath'}.'" />');
+}
+
+sub close_form {
+    my ($r)=@_;
+    $r->print('<p><input type="submit" value="'.&mt('Continue').
+	      '" /></p></form>');
+    $r->print('<form action="/adm/portfolio" method="POST">
+               <p>
+              <input type="hidden" name="currentpath" value="'.
+	      $ENV{'form.currentpath'}.'" />
+                 <input type="submit" value="'.&mt('Cancel').'" />
+               </p></form>');
+
+}
+
+sub display_file {
+    return $ENV{'form.currentpath'}.$ENV{'form.selectfile'};
+}
+
+sub done {
+    return ('<h3><a href="/adm/portfolio?currentpath="'.
+	    $ENV{'form.currentpath'}.'">'.&mt('Done').'</a></h3>');
+}
+
+sub delete {
+    my ($r)=@_;
+    &open_form($r);
+    $r->print('<p>'.&mt('Delete').' '.&display_file().'?</p>');
+    &close_form($r);
+} 
+
+sub delete_confirmed {
+    my ($r)=@_;
+    my $result=&Apache::lonnet::removeuserfile($ENV{'user.name'},
+					       $ENV{'user.domain'},'portfolio'.
+					       $ENV{'form.currentpath'}.
+					       $ENV{'form.selectfile'});
+    if ($result ne 'ok') {
+	$r->print('<font color="red"> An errror occured ('.$result.
+		  ')while trying to delete '.&display_file().'</font><br />');
+    }
+    $r->print(&done());
+}
+
+sub rename {
+    my ($r)=@_;
+    &open_form($r);
+    $r->print('<p>'.&mt('Rename').' '.&display_file().'?</p>');
+    &close_form($r);
+}
+
+sub rename_confirmed {
+    my ($r)=@_;
+    &Apache::lonnet::renameuserfile($ENV{'form.currentpath'}.$ENV{'form.selectfile'}, 'rename', $ENV{'form.currentpath'}.$ENV{'form.filenewname'} );
+} 
+
+sub upload {
+    my ($r)=@_;
+    my $result=&Apache::lonnet::userfileupload('uploaddoc','',
+					 'portfolio'.$ENV{'form.currentpath'});
+    if ($result !~ m|^/uploaded/|) {
+	$r->print('<font color="red"> An errror occured ('.$result.
+		  ')while trying to upload '.&display_file().'</font><br />');
+    }
+    $r->print(&done());
+}
+
+sub handler {
+    # this handles file management
+    my $r = shift;
+    my @dir_list; # will hold directory listing as array
+    my $udir; # returned from home server
+    my $currentFile; # directory or file contained in $pathToRoot.$current_path
+    my $action; # delete, rename, makedirectory, removedirectory,
+    my $filenewname; # for rename action (guess what we do with it!)
+    my $isFile;
+    &Apache::loncommon::no_cache($r);
+    &Apache::loncommon::content_type($r,'text/html');
+    $r->send_http_header;
+    # Give the LON-CAPA page header
+    $r->print('<html><head><title>'.
+              &mt('Portfolio Manager').
+              "</title></head>\n".
+              &Apache::loncommon::bodytag('Portfolio Manager'));
+    $r->rflush();
+    &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
+                                            ['selectfile','currentpath',
+					     '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'}) {
+	&upload($r);
+    } elsif ($ENV{'form.action'} eq 'delete') {
+	if ($ENV{'form.confirmed'}) {
+	    &delete_confirmed($r);
+	} else {
+	    &delete($r);
+	}
+    } elsif ($ENV{'form.action'} eq 'rename') {
+	# similarly, we need to delete or rename files before getting
+	# directory list
+	&rename($r);
+    } else {
+	my $current_path='/';
+	if ($ENV{'form.currentpath'}) {
+	    $current_path = $ENV{'form.currentpath'};
+	}
+
+	my $portfolio_root = &Apache::loncommon::propath($ENV{'user.domain'},
+							 $ENV{'user.name'}).
+							'/userfiles/portfolio';
+	@dir_list=&Apache::lonnet::dirlist($current_path,$ENV{'user.domain'},
+					   $ENV{'user.name'},$portfolio_root);
+    
+	# need to know if directory is empty so it can be removed if desired
+	my $is_empty=(@dir_list == 2);
+   
+	&display_directory($r,$current_path,\@dir_list);
+
+    }
+
     $r->print("</body>\n</html>\n");
     $r->rflush();
     return OK;

--albertel1093328215--