--- loncom/interface/portfolio.pm 2004/08/28 15:57:35 1.35 +++ loncom/interface/portfolio.pm 2004/10/11 22:52:20 1.47 @@ -37,130 +37,102 @@ 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.'

'; - # 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; +my $dirptr=16384; +sub display_directory { + my ($r,$current_path,$is_empty,$dir_list)=@_; + my $iconpath= $r->dir_config('lonIconsURL') . "/"; + $r->print(''); + $r->print('
'); + my $displayOut = '
'; + $displayOut = $displayOut.''. + ''. + ''. + '
'; + $r->print($displayOut); + $r->print('
'); + $displayOut = '
'; + $displayOut .= ''. + ''. + ''. + '
'; + $r->print($displayOut); + $r->print('
'); + my @tree = split (/\//,$current_path); + $r->print(''.&make_anchor('portfolio','/').'/'); + if (@tree > 1){ + my $newCurrentPath = ''; + for (my $i = 1; $i< @tree; $i++){ + $newCurrentPath .= $tree[$i].'/'; + $r->print(&make_anchor($tree[$i],'/'.$newCurrentPath).'/'); } + } + $r->print(''); + &Apache::lonhtmlcommon::store_recent('portfolio',$current_path,$current_path); + #Fixme -- remove from recent those paths that are deleted + $r->print('
'. + &Apache::lonhtmlcommon::select_recent('portfolio','currentpath', + 'this.form.submit();')); + $r->print("
"); + if ($is_empty && ($current_path ne '/')) { + $displayOut = '
'. + ''. + ''. + ''. + ''. + '
'; - # $displayOut = $displayOut.'..
'; - } else { - # $displayOut = $displayOut.'at root '.$currentPath.'
'; + $r->print($displayOut); + return; } - foreach my $line (@dirList) { + $r->print(''. + ''); + my $href_location="/uploaded/$ENV{'user.domain'}/$ENV{'user.name'}/portfolio$current_path"; + foreach my $line (sort + { + my ($afile)=split('&',$a,2); + my ($bfile)=split('&',$b,2); + return (lc($afile) cmp lc($bfile)); + } (@$dir_list)) { #$strip holds directory/file name #$dom - my ($filename,$dom,undef,$testdir,undef,undef,undef,undef,undef,undef,undef,undef,undef,undef,$obs,undef)=split(/\&/,$line,16); - if (($filename ne '.') && ($filename ne '..')) { - if ($testdir =~ m:^1:) { - # handle directories different from files - if ($filename eq $currentFile) { - #checks to bold the selected file - $displayOut.= ''.(&make_anchor($filename.'/', $filename.'/').'
'."\n"); - } else { - $displayOut.= (&make_anchor($filename.'/', $filename.'/').'
'."\n"); - } + my ($filename,$dom,undef,$testdir,undef,undef,undef,undef,$size,undef,$mtime,undef,undef,undef,$obs,undef)=split(/\&/,$line,16); + if (($filename ne '.') && ($filename ne '..')) { + if ($dirptr&$testdir) { + $r->print(''); + $r->print(''); + $r->print(''); + $r->print(''); } else { - if ($filename eq $currentFile) { - #checks to bold the selected file - $displayOut.=''.(&make_anchor($filename, $currentPath).'
'."\n"); - } else { - $displayOut.=(&make_anchor($filename, $currentPath).'
'."\n"); - } + $r->print(''); + $r->print(''); + $r->print(''); + $r->print(''); + $r->print(''); + $r->print(''); + $r->print(''); } - } - } - return $displayOut; -} - -sub displayActions { - # returns html to offer user appropriate actions depending on selected file/directory - my $displayOut; - my ($currentPath, $currentFile, $isEmpty) = @_; -# $displayOut = 'here are actions for '.$currentFile; - if ($currentFile =~ m:/$:) { - # if the selected file is a directory, these are the options - # offer the chance to delete the directory only if it is empty - if ($isEmpty && ($currentPath ne '/')) { - $displayOut = $displayOut.' - - - -
- -
- '; - } - if ($currentPath ne '/') { - $displayOut = $displayOut.'
- - - - - - - '; - } - } else { #action options offered for files - $displayOut = $displayOut.''; - $displayOut = $displayOut.' - -
- -
- '; - - $displayOut = $displayOut.'
- - - - - - - -
'; - } - $displayOut = $displayOut.'
Add a file to '.$currentPath; - # file upload form - $displayOut = $displayOut.''; - $displayOut = $displayOut.''. - ''. - ''. - '
'; - $displayOut = $displayOut.' - - - - '; - return $displayOut; +# pink bg +# blue bg +# $r->print(&display_directory($current_path, $currentFile, @dir_list)); +# $r->print('>
Actions NameSizeLast Modified
Go to ...'.&make_anchor($filename.'/',$current_path.$filename.'/').'
+
+ + + + +
+
'. + $filename.''.$size.''.&Apache::lonlocal::locallocaltime($mtime).'
'); +# $r->print(&display_actions($current_path, $currentFile, $isEmpty)); + $r->print('
'); } - -my $dirptr=16384; -sub display_directory { +sub display_file_select { my ($r,$current_path,$is_empty,$dir_list)=@_; my $iconpath= $r->dir_config('lonIconsURL') . "/"; $r->print(''); @@ -190,11 +162,12 @@ 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('
'. &Apache::lonhtmlcommon::select_recent('portfolio','currentpath', 'this.form.submit();')); $r->print(""); - if ($is_empty) { + if ($is_empty && ($current_path ne '/')) { $displayOut = ''. ''. ''. @@ -206,8 +179,9 @@ sub display_directory { return; } $r->print('
'. - ''); - my $href_location="/uploaded/$ENV{'user.domain'}/$ENV{'user.name'}/portfolio/$current_path/"; + ''); + my $href_location="/uploaded/$ENV{'user.domain'}/$ENV{'user.name'}/portfolio$current_path"; + $r->print(''); foreach my $line (sort { my ($afile)=split('&',$a,2); @@ -226,26 +200,21 @@ sub display_directory { } else { $r->print(''); $r->print(''); + + '); $r->print(''); $r->print(''); + $filename.''); $r->print(''); $r->print(''); $r->print(''); } } } + $r->print(' + + '); + # pink bg # blue bg # $r->print(&display_directory($current_path, $currentFile, @dir_list)); @@ -331,6 +300,9 @@ sub delete_dir_confirmed { $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 select_files { + my ($r)=@_; + $r->print("

Select portfolio files

+ Check as many as you wish in response to the essay problem.
"); + my $portfolio_root = &Apache::loncommon::propath($ENV{'user.domain'}, + $ENV{'user.name'}). + '/userfiles/portfolio'; + my $current_path='/'; + if ($ENV{'form.currentpath'}) { + $current_path = $ENV{'form.currentpath'}; + } + 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_file_select($r,$current_path,$is_empty,\@dir_list); + $r->print("\n\n"); + return OK; +} sub upload { my ($r)=@_; 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); @@ -390,8 +403,12 @@ sub upload { $found_file = 1; } } - $r->print('
'.&Apache::lonnet::diskusage($ENV{'user.domain'}, $ENV{'user.name'},$portfolio_root).'
'); - if ($found_file){ + 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 { @@ -407,20 +424,37 @@ sub upload { 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()); } @@ -428,7 +462,7 @@ sub createdir { sub handler { # this handles file management my $r = shift; - my $portfolio_root = &Apache::loncommon::propath($ENV{'user.domain'}, + my $portfolio_root = &Apache::loncommon::propath($ENV{'user.domain'}, $ENV{'user.name'}). '/userfiles/portfolio'; &Apache::loncommon::no_cache($r); @@ -442,10 +476,16 @@ sub handler { $r->rflush(); &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, ['selectfile','currentpath', - 'currentfile']); - + 'currentfile','action']); + 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 'selectfile') { + &select_files($r); } elsif ($ENV{'form.action'} eq 'delete' && $ENV{'form.confirmed'}) { &delete_confirmed($r); } elsif ($ENV{'form.action'} eq 'delete') { @@ -468,7 +508,25 @@ sub handler { 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,$is_empty,\@dir_list);
Actions NameSizeLast Modified
Select NameSizeLast Modified
- - - - - - -'. - $filename.''.$size.''.&Apache::lonlocal::locallocaltime($mtime).'