--- loncom/interface/portfolio.pm 2004/08/24 06:16:55 1.24 +++ loncom/interface/portfolio.pm 2004/08/24 20:57:12 1.30 @@ -161,7 +161,7 @@ sub displayActions { my $dirptr=16384; sub display_directory { - my ($r,$current_path,$dir_list)=@_; + my ($r,$current_path,$is_empty,$dir_list)=@_; my $iconpath= $r->dir_config('lonIconsURL') . "/"; $r->print(''); $r->print('
'); @@ -180,7 +180,7 @@ sub display_directory { $r->print($displayOut); $r->print('
'); my @tree = split (/\//,$current_path); - $r->print(''.&make_anchor('/','/')); + $r->print(''.&make_anchor('portfolio','/').'/'); if (@tree > 1){ my $newCurrentPath = ''; for (my $i = 1; $i< @tree; $i++){ @@ -194,10 +194,25 @@ sub display_directory { &Apache::lonhtmlcommon::select_recent('portfolio','currentpath', 'this.form.submit();')); $r->print(""); + if ($is_empty){ + $displayOut = '
'. + ''. + ''. + ''. + ''. + '
'; + + $r->print($displayOut); + }else{ $r->print(''. ''); my $href_location="/uploaded/$ENV{'user.domain'}/$ENV{'user.name'}/portfolio/$current_path/"; - foreach my $line (@$dir_list) { + 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,$size,undef,$mtime,undef,undef,undef,$obs,undef)=split(/\&/,$line,16); @@ -236,6 +251,7 @@ sub display_directory { # $r->print('>
Actions NameSizeLast Modified
'); # $r->print(&display_actions($current_path, $currentFile, $isEmpty)); $r->print('
'); + } } sub open_form { @@ -264,11 +280,14 @@ sub close_form { } sub display_file { - return $ENV{'form.currentpath'}.$ENV{'form.selectfile'}; + my ($path,$filename)=@_; + if (!defined($path)) { $path=$ENV{'form.currentpath'}; } + if (!defined($filename)) { $filename=$ENV{'form.selectfile'}; } + return ''.$path.$filename.''; } sub done { - return ('

'.&mt('Done').'

'); } @@ -286,8 +305,32 @@ sub delete_confirmed { $ENV{'form.currentpath'}. $ENV{'form.selectfile'}); if ($result ne 'ok') { - $r->print(' An errror occured ('.$result. - ')while trying to delete '.&display_file().'
'); + $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'}; + $r->print('
'.$directory_name.'
'); + $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 '.&display_file().'
'); + ') while trying to delete '.$directory_name.'

'); } $r->print(&done()); } @@ -295,22 +338,62 @@ sub delete_confirmed { sub rename { my ($r)=@_; &open_form($r); - $r->print('

'.&mt('Rename').' '.&display_file().'?

'); + $r->print('

'.&mt('Rename').' '.&display_file().' to + ?

'); &close_form($r); } sub rename_confirmed { my ($r)=@_; - &Apache::lonnet::renameuserfile($ENV{'form.currentpath'}.$ENV{'form.selectfile'}, 'rename', $ENV{'form.currentpath'}.$ENV{'form.filenewname'} ); -} + my $filenewname=&Apache::lonnet::clean_filename($ENV{'form.filenewname'}); + if ($filenewname eq '') { + $r->print(''. + &mt("Error: no valid filename was provided to rename to."). + '
'); + $r->print(&done()); + return; + } + my $result= + &Apache::lonnet::renameuserfile($ENV{'user.name'},$ENV{'user.domain'}, + 'portfolio'.$ENV{'form.currentpath'}.$ENV{'form.selectfile'}, + 'portfolio'.$ENV{'form.currentpath'}.$ENV{'form.filenewname'}); + if ($result ne 'ok') { + $r->print(' An errror occured ('.$result. + ') while trying to rename '.&display_file().' to '. + &display_file(undef,$filenewname).'
'); + } + $r->print(&done()); +} 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().'
'); + ') 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; + } + 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()); } @@ -318,12 +401,6 @@ sub upload { 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; @@ -337,21 +414,22 @@ sub handler { ['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' && $ENV{'form.confirmed'}) { + &delete_confirmed($r); } elsif ($ENV{'form.action'} eq 'delete') { - if ($ENV{'form.confirmed'}) { - &delete_confirmed($r); - } else { - &delete($r); - } + &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') { - # similarly, we need to delete or rename files before getting - # directory list &rename($r); + } elsif ($ENV{'form.createdir'}) { + &createdir($r); } else { my $current_path='/'; if ($ENV{'form.currentpath'}) { @@ -361,20 +439,17 @@ sub handler { 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); + my @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_directory($r,$current_path,$is_empty,\@dir_list); $r->print("\n\n"); $r->rflush(); return OK; + } } - 1; __END__