--- loncom/interface/portfolio.pm 2004/12/16 21:19:46 1.68 +++ loncom/interface/portfolio.pm 2005/02/25 18:05:29 1.78 @@ -83,7 +83,14 @@ sub display_directory { my ($r,$current_path,$is_empty,$dir_list)=@_; my $iconpath= $r->dir_config('lonIconsURL') . "/"; my $display_out; + my $select_mode; + my $checked_files; my %locked_files = &Apache::lonnet::get_marked_as_readonly_hash ($ENV{'user.domain'},$ENV{'user.name'}); + if ($ENV{"form.mode"} eq 'selectfile'){ + &select_files($r); + $checked_files =&Apache::lonnet::files_in_path($ENV{'user.name'},$ENV{'form.currentpath'}); + $select_mode = 'true'; + } if ($is_empty && ($current_path ne '/')) { $display_out = '<form method="post" action="/adm/portfolio">'. '<input type="hidden" name="action" value="deletedir" />'. @@ -95,75 +102,16 @@ sub display_directory { $r->print($display_out); return; } - $r->print('<table border="0" cellspacing="2" cellpadding="2">'. - '<tr><th>Actions</th><th> </th><th>Name</th><th>Size</th><th>Last Modified</th></tr>'); - my $href_location="/uploaded/$ENV{'user.domain'}/$ENV{'user.name'}/portfolio$current_path"; - $r->print('<form method="post" action="/adm/portfolio">'); - 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); - if (($filename ne '.') && ($filename ne '..')) { - 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.'/',$current_path.$filename.'/',$ENV{'form.mode'},$ENV{"form.fieldname"}).'</td>'); - $r->print('</tr>'); - } else { - $r->print('<tr bgcolor="#CCCCFF">'); - if (exists $locked_files{$current_path.$filename}){ - $r->print('<td>Locked</td>'); - } else { - $r->print('<td>Delete<input type="checkbox" name="selectfile" value="'.$filename.'" /> - <a href="/adm/portfolio?rename='.$filename.'&currentpath='.$current_path.'">Rename</a> - </td>'); - } - $r->print('<td><img src="'.$iconpath.'unknown.gif"></td>'); - $r->print('<td><a href="'.$href_location.$filename.'">'. - $filename.'</a></td>'); - $r->print('<td>'.$size.'</td>'); - $r->print('<td>'.&Apache::lonlocal::locallocaltime($mtime).'</td>'); - $r->print('</tr>'); - } - } - } -# <tr bgcolor="#FFAA99"> pink bg -# <tr bgcolor="#CCCCFF"> blue bg -# $r->print(&display_directory($current_path, $currentFile, @dir_list)); -# $r->print('</td>><td>'); -# $r->print(&display_actions($current_path, $currentFile, $isEmpty)); - $r->print('</table> - <input type="submit" name="doit" value="Delete Checked Files" /> - <input type="hidden" name="action" value="delete" /> - <input type="hidden" name="currentpath" value="'.$current_path.'" /> - </form>'); -} -sub display_file_select { - my ($r,$current_path,$is_empty,$dir_list)=@_; - my $iconpath= $r->dir_config('lonIconsURL') . "/"; - my $display_out; - my $checked_files = &Apache::lonnet::files_in_path($ENV{'user.name'}, $ENV{'form.currentpath'}); - if ($is_empty && ($current_path ne '/')) { - $display_out = '<form method="post" action="/adm/portfolio">'. - '<input type="hidden" name="action" value="deletedir" />'. - '<input type="submit" name="deletedir" value="'.&mt("Delete Directory").'" />'. - '<input type="hidden" name="selectfile" value="" />'. - '<input type="hidden" name="currentpath" value="'.$current_path.'" />'. - - '</form>'; - - $r->print($display_out); - return; - } - $r->print('<table border="0" cellspacing="2" cellpadding="2">'. + if ($select_mode eq 'true') { + $r->print('<table border="0" cellspacing="2" cellpadding="2">'. '<tr><th>Select</th><th> </th><th>Name</th><th>Size</th><th>Last Modified</th></tr>'); + $r->print('<form method="post" name="checkselect" action="/adm/portfolio">'); + } else { + $r->print('<table border="0" cellspacing="2" cellpadding="2">'. + '<tr><th colspan="2">Actions</th><th> </th><th>Name</th><th>Size</th><th>Last Modified</th></tr>'); + $r->print('<form method="post" action="/adm/portfolio">'); + } my $href_location="/uploaded/$ENV{'user.domain'}/$ENV{'user.name'}/portfolio$current_path"; - $r->print('<form method="post" name="checkselect" action="/adm/portfolio">'); foreach my $line (sort { my ($afile)=split('&',$a,2); @@ -174,19 +122,34 @@ sub display_file_select { #$dom my ($filename,$dom,undef,$testdir,undef,undef,undef,undef,$size,undef,$mtime,undef,undef,undef,$obs,undef)=split(/\&/,$line,16); $filename =~ s/\s+$//; - if (($filename ne '.') && ($filename ne '..')) { + if (($filename ne '.') && ($filename ne '..') && ($filename !~ /\.meta$/ )) { if ($dirptr&$testdir) { - $r->print('<tr bgcolor="#FFAA99"><td><img src="'.$iconpath.'folder_closed.gif"></td>'); + if ($select_mode eq 'true'){ + $r->print('<tr bgcolor="#FFAA99"><td><img src="'.$iconpath.'folder_closed.gif"></td>'); + } else { + $r->print('<tr bgcolor="#FFAA99"><td colspan="2"><img src="'.$iconpath.'folder_closed.gif"></td>'); + } $r->print('<td>Go to ...</td>'); $r->print('<td>'.&make_anchor($filename.'/',$current_path.$filename.'/',$ENV{'form.mode'},$ENV{"form.fieldname"}).'</td>'); $r->print('</tr>'); } else { $r->print('<tr bgcolor="#CCCCFF">'); - $r->print('<td><input type="checkbox" name="selectfile" value="'.$filename.'"'); - if ($$checked_files{$filename} eq 'selected') { - $r->print("CHECKED"); + if ($select_mode eq 'true'){ + $r->print('<td><input type="checkbox" name="selectfile" value="'.$filename.'"'); + if ($$checked_files{$filename} eq 'selected') { + $r->print("CHECKED"); + } + $r->print('></td>'); + } else { + if (exists $locked_files{$current_path.$filename}){ + $r->print('<td colspan="2">Locked</td>'); + } else { + $r->print('<td><input type="checkbox" name="selectfile" value="'.$filename.'" /> + <a href="/adm/portfolio?rename='.$filename.'&currentpath='.$current_path.'">Rename</a></td> + <td><a href="/adm/portfolio'.$current_path.$filename.'.meta">Meta</a> + </td>'); + } } - $r->print('></td>'); $r->print('<td><img src="'.$iconpath.'unknown.gif"></td>'); $r->print('<td><a href="'.$href_location.$filename.'">'. $filename.'</a></td>'); @@ -196,14 +159,22 @@ sub display_file_select { } } } - $r->print('</table> + if ($select_mode eq 'true') { + $r->print('</table> <input type="hidden" name="continue" value="true"> <input type="hidden" name="fieldname" value="'.$ENV{'form.fieldname'}.'"> <input type="hidden" name="mode" value="selectfile"> <input type="submit" name="submit" value="Select checked files, and continue selecting." /><br /> <input type="button" name="doit" onClick= "finishSelect();" value="Select checked files, and close window" /> <input type="hidden" name="currentpath" value="'.$current_path.'" /> - </form>'); + </form>'); + } else { + $r->print('</table> + <input type="submit" name="doit" value="Delete Checked Files" /> + <input type="hidden" name="action" value="delete" /> + <input type="hidden" name="currentpath" value="'.$current_path.'" /> + </form>'); + } } sub open_form { @@ -252,11 +223,15 @@ sub display_file { } sub done { + my ($message)=@_; + unless (defined $message) { + $message='Done'; + } return ('<h3><a href="/adm/portfolio?currentpath='. $ENV{'form.currentpath'}. '&fieldname='.$ENV{'form.fieldname'}. '&mode='.$ENV{'form.mode'}. - '">'.&mt('Done').'</a></h3>'); + '">'.&mt($message).'</a></h3>'); } sub delete { @@ -267,7 +242,7 @@ sub delete { if (&Apache::lonnet::is_locked($file_name,$ENV{'user.domain'},$ENV{'user.name'} ) eq 'true') { $r->print ("The file is locked and cannot be deleted.<br />"); - $r->print(&done()); + $r->print(&done('Back')); } else { if (scalar(@files)) { &open_form($r); @@ -430,29 +405,43 @@ sub upload { $ENV{'user.domain'}, $ENV{'user.name'},$portfolio_root); my $found_file = 0; + my $locked_file = 0; foreach my $line (@dir_list) { - my ($filename)=split(/\&/,$line,2); - if ($filename eq $fname){ + my ($file_name)=split(/\&/,$line,2); + if ($file_name eq $fname){ $found_file = 1; + if (&Apache::lonnet::is_locked($ENV{'form.currentpath'}.$file_name,$ENV{'user.domain'},$ENV{'user.name'} ) eq 'true') { + $locked_file = 1; + } } } my $current_disk_usage = &Apache::lonnet::diskusage($ENV{'user.domain'}, $ENV{'user.name'},$portfolio_root); - if (($current_disk_usage + $filesize) > $disk_quota){ + if ((($current_disk_usage/1000) + $filesize) > $disk_quota){ $r->print('<font color="red">Unable to upload <strong>'.$fname.' (size = '.$filesize.' kilobytes</strong>. Disk quota will be exceeded.'. '<br />Disk quota is '.$disk_quota.' kilobytes. Your current disk usage is '.$current_disk_usage.' kilobytes.'); + $r->print(&done('Back')); } - elsif ($found_file){ - $r->print('<font color="red">Unable to upload <strong>'.$fname.'</strong>, a file by that name was found in <strong>'.$ENV{'form.currentpath'}.'</strong></font>'. - '<br />To upload, rename or delete existing '.$fname.' in '.$ENV{'form.currentpath'}); + elsif ($found_file){ + if ($locked_file){ + $r->print('<font color="red">Unable to upload <strong>'.$fname.'</strong>, a <strong>locked</strong> file by that name was found in <strong>portfolio'.$ENV{'form.currentpath'}.'</strong></font>'. + '<br />You will be able to rename or delete existing '.$fname.' after a grade has been assigned.'); + $r->print(&done('Back')); + } else { + $r->print('<font color="red">Unable to upload <strong>'.$fname.'</strong>, a file by that name was found in <strong>portfolio'.$ENV{'form.currentpath'}.'</strong></font>'. + '<br />To upload, rename or delete existing '.$fname.' in portfolio'.$ENV{'form.currentpath'}); + $r->print(&done('Back')); + } } else { 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('Back')); + } else { + $r->print(&done()); } } - $r->print(&done()); } sub createdir { @@ -501,23 +490,37 @@ sub handler { my $portfolio_root = &Apache::loncommon::propath($ENV{'user.domain'}, $ENV{'user.name'}). '/userfiles/portfolio'; + &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, + ['selectfile','currentpath','meta', + 'currentfile','action','fieldname','mode','rename']); &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>'. + my $html=&Apache::lonxml::xmlbegin(); + $r->print($html.'<head><title>'. &mt('Portfolio Manager'). - "</title></head>\n". - &Apache::loncommon::bodytag('Portfolio Manager')); + "</title></head>\n"); + if ($ENV{"form.mode"} eq 'selectfile'){ + $r->print(&Apache::loncommon::bodytag('Portfolio Manager',undef,undef,1)); + } else { + $r->print(&Apache::loncommon::bodytag('Portfolio Manager')); + } $r->rflush(); - &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, - ['selectfile','currentpath', - 'currentfile','action','fieldname','mode','rename']); if (($ENV{'form.storeupl'} eq 'Upload') & (!$ENV{'form.uploaddoc.filename'})){ $r->print('<font color="red"> No file was selected to upload.'. 'To upload a file, click <strong>Browse...</strong>'. ', select a file, then click <strong>Upload</strong>,</font>'); } + if ($ENV{'form.meta'}) { + &open_form($r); +# $r->print(&edit_meta_data($r, $ENV{'form.currentpath'}.$ENV{'form.selectfile'})); + $r->print('Edit the meta data<br />'); + &close_form($r); + } + if ($ENV{'form.store'}) { + } + if ($ENV{'form.uploaddoc.filename'}) { &upload($r); } elsif ($ENV{'form.action'} eq 'delete' && $ENV{'form.confirmed'}) { @@ -566,12 +569,7 @@ sub handler { # need to know if directory is empty so it can be removed if desired my $is_empty=(@dir_list == 2); &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); - } + &display_directory($r,$current_path,$is_empty,\@dir_list); $r->print("</body>\n</html>\n"); return OK; }