--- loncom/interface/portfolio.pm 2004/08/24 07:35:57 1.29
+++ loncom/interface/portfolio.pm 2004/10/25 17:00:25 1.52
@@ -37,137 +37,17 @@ sub make_anchor {
my $anchor = ''.$filename.'';
return $anchor;
}
-
-# returns html with
separated contents of the directory
-# returns a currentFile (bolds the selected file/dir)
-sub display_directory_old {
- my ($currentPath, $currentFile, @dirList,) = @_;
- my $displayOut='';
- my $filename;
- my $upPath;
- if ($currentPath ne '/') {
- $displayOut = 'Listing of '.$currentPath.'
');
my $displayOut = '';
$r->print($displayOut);
@@ -175,6 +55,8 @@ sub display_directory {
$displayOut = '';
$r->print($displayOut);
@@ -190,13 +72,30 @@ sub display_directory {
}
$r->print('');
&Apache::lonhtmlcommon::store_recent('portfolio',$current_path,$current_path);
+ #Fixme -- remove from recent those paths that are deleted
$r->print(' "); +} +sub display_directory { + my ($r,$current_path,$is_empty,$dir_list)=@_; + my $iconpath= $r->dir_config('lonIconsURL') . "/"; + my $display_out; + if ($is_empty && ($current_path ne '/')) { + $display_out = ''; + + $r->print($display_out); + return; + } $r->print('
'.&mt('Done').''); + $ENV{'form.currentpath'}. + '&fieldname='.$ENV{'form.fieldname'}. + '">'.&mt('Done').''); } sub delete { @@ -294,12 +249,47 @@ sub delete_confirmed { $ENV{'form.currentpath'}. $ENV{'form.selectfile'}); if ($result ne 'ok') { - $r->print(' An errror occured ('.$result. + $r->print(' An error occured ('.$result. ') while trying to delete '.&display_file().''); } $r->print(&done()); } +sub delete_dir { + my ($r)=@_; + &open_form($r); + $r->print(' '.&mt('Delete').' '.&display_file().'? '); + &close_form($r); +} + +sub delete_dir_confirmed { + my ($r)=@_; + my $directory_name = $ENV{'form.currentpath'}; + $directory_name =~ m/\/$/; + $directory_name = $`; + my $result=&Apache::lonnet::removeuserfile($ENV{'user.name'}, + $ENV{'user.domain'},'portfolio'. + $directory_name); + + if ($result ne 'ok') { + $r->print(' An error occured (dir) ('.$result. + ') while trying to delete '.$directory_name.''); + } else { + # now remove from recent +# $r->print(' removing '.$directory_name.' print(&done()); +} + sub rename { my ($r)=@_; &open_form($r); @@ -329,36 +319,102 @@ sub rename_confirmed { } $r->print(&done()); } - +sub select_files { + my ($r)=@_; + my $java_script =(< Select portfolio files+ Check as many as you wish in response to the essay problem."); +} sub upload { my ($r)=@_; - #FIXME if the file already exists we need to do a confirmation pass - #before overwriting - my $result=&Apache::lonnet::userfileupload('uploaddoc','', - 'portfolio'.$ENV{'form.currentpath'}); - if ($result !~ m|^/uploaded/|) { - $r->print(' An errror occured ('.$result. - ') while trying to upload '.&display_file().' '); + my $fname=$ENV{'form.uploaddoc.filename'}; + my $filesize = (length($ENV{'form.uploaddoc'})) / 1000; #express in k (1024?) + my $disk_quota = 20000; # expressed in k + $fname=&Apache::lonnet::clean_filename($fname); + my $portfolio_root = &Apache::loncommon::propath($ENV{'user.domain'}, + $ENV{'user.name'}). + '/userfiles/portfolio'; + # Fixme --- Move the checking for existing file to LOND error return + my @dir_list=&Apache::lonnet::dirlist($ENV{'form.currentpath'}, + $ENV{'user.domain'}, + $ENV{'user.name'},$portfolio_root); + my $found_file = 0; + foreach my $line (@dir_list) { + my ($filename)=split(/\&/,$line,2); + if ($filename eq $fname){ + $found_file = 1; + } + } + my $current_disk_usage = &Apache::lonnet::diskusage($ENV{'user.domain'}, $ENV{'user.name'},$portfolio_root); + if (($current_disk_usage + $filesize) > $disk_quota){ + $r->print('Unable to upload '.$fname.' (size = '.$filesize.' kilobytes. Disk quota will be exceeded.'. + ' Disk quota is '.$disk_quota.' kilobytes. Your current disk usage is '.$current_disk_usage.' kilobytes.'); + } + elsif ($found_file){ + $r->print('Unable to upload '.$fname.', a file by that name was found in '.$ENV{'form.currentpath'}.''. + ' To upload, rename or delete existing '.$fname.' in '.$ENV{'form.currentpath'}); + } else { + my $result=&Apache::lonnet::userfileupload('uploaddoc','', + 'portfolio'.$ENV{'form.currentpath'}); + if ($result !~ m|^/uploaded/|) { + $r->print(' An errror occured ('.$result. + ') while trying to upload '.&display_file().' '); + } } $r->print(&done()); } sub createdir { my ($r)=@_; - #FIXME 1) file exists in place of dir (errormessage needs improvement) my $newdir=&Apache::lonnet::clean_filename($ENV{'form.newdir'}); if ($newdir eq '') { - $r->print(''. - &mt("Error: no valid directory name was provided."). - ' '); - $r->print(&done()); - return; + $r->print(''. + &mt("Error: no directory name was provided."). + ' '); + $r->print(&done()); + return; } - my $result=&Apache::lonnet::mkdiruserfile($ENV{'user.name'}, - $ENV{'user.domain'},'portfolio'.$ENV{'form.currentpath'}.$newdir); - if ($result ne 'ok') { - $r->print(' An errror occured ('.$result. - ') while trying to create a new directory '.&display_file().' '); + my $portfolio_root = &Apache::loncommon::propath($ENV{'user.domain'}, + $ENV{'user.name'}). + '/userfiles/portfolio'; + my @dir_list=&Apache::lonnet::dirlist($ENV{'form.currentpath'}, + $ENV{'user.domain'}, + $ENV{'user.name'},$portfolio_root); + my $found_file = 0; + foreach my $line (@dir_list) { + my ($filename)=split(/\&/,$line,2); + if ($filename eq $newdir){ + $found_file = 1; + } + } + if ($found_file){ + $r->print(' Unable to create a directory named '.$newdir. + ' a file or directory by that name already exists. '); + } else { + my $result=&Apache::lonnet::mkdiruserfile($ENV{'user.name'}, + $ENV{'user.domain'},'portfolio'.$ENV{'form.currentpath'}.$newdir); + if ($result ne 'ok') { + $r->print(' An errror occured ('.$result. + ') while trying to create a new directory '.&display_file().' '); + } } $r->print(&done()); } @@ -366,6 +422,9 @@ sub createdir { sub handler { # this handles file management my $r = shift; + my $portfolio_root = &Apache::loncommon::propath($ENV{'user.domain'}, + $ENV{'user.name'}). + '/userfiles/portfolio'; &Apache::loncommon::no_cache($r); &Apache::loncommon::content_type($r,'text/html'); $r->send_http_header; @@ -377,14 +436,22 @@ sub handler { $r->rflush(); &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, ['selectfile','currentpath', - 'currentfile']); - + 'currentfile','action','fieldname','mode']); + if (($ENV{'form.storeupl'} eq 'Upload') & (!$ENV{'form.uploaddoc.filename'})){ + $r->print(' No file was selected to upload.'. + 'To upload a file, click Browse...'. + ', select a file, then click Upload,'); + } if ($ENV{'form.uploaddoc.filename'}) { &upload($r); } elsif ($ENV{'form.action'} eq 'delete' && $ENV{'form.confirmed'}) { &delete_confirmed($r); } elsif ($ENV{'form.action'} eq 'delete') { &delete($r); + } elsif ($ENV{'form.action'} eq 'deletedir' && $ENV{'form.confirmed'}) { + &delete_dir_confirmed($r); + } elsif ($ENV{'form.action'} eq 'deletedir'){ + &delete_dir($r); } elsif ($ENV{'form.action'} eq 'rename' && $ENV{'form.confirmed'}) { &rename_confirmed($r); } elsif ($ENV{'form.action'} eq 'rename') { @@ -396,25 +463,40 @@ sub handler { if ($ENV{'form.currentpath'}) { $current_path = $ENV{'form.currentpath'}; } - - my $portfolio_root = &Apache::loncommon::propath($ENV{'user.domain'}, - $ENV{'user.name'}). - '/userfiles/portfolio'; my @dir_list=&Apache::lonnet::dirlist($current_path, $ENV{'user.domain'}, $ENV{'user.name'},$portfolio_root); - + if ($dir_list[0] eq 'no_such_dir'){ + # two main reasons for this: + # 1) never been here, so directory structure not created + # 2) back-button navigation after deleting a directory + if ($current_path eq '/'){ + &Apache::lonnet::mkdiruserfile($ENV{'user.name'}, + $ENV{'user.domain'},'portfolio'); + } else { + # some directory that snuck in get rid of the directory + # from the recent pulldown, just in case + &Apache::lonhtmlcommon::remove_recent('portfolio', + [$current_path]); + $current_path = '/'; # force it back to the root + } + # now grab the directory list again, for the first time + @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); - + &display_common($r,$current_path,$is_empty,\@dir_list); + if ($ENV{"form.mode"} eq 'selectfile'){ + &select_files($r); + &display_file_select($r,$current_path,$is_empty,\@dir_list); + } else { + &display_directory($r,$current_path,$is_empty,\@dir_list); + } + $r->print(" |