Diff for /loncom/interface/portfolio.pm between versions 1.27 and 1.78

version 1.27, 2004/08/24 07:26:04 version 1.78, 2005/02/25 18:05:29
Line 33  use Apache::lonlocal; Line 33  use Apache::lonlocal;
 # receives a file name and path stub from username/userfiles/portfolio/  # receives a file name and path stub from username/userfiles/portfolio/
 # returns an anchor tag consisting encoding filename and currentpath  # returns an anchor tag consisting encoding filename and currentpath
 sub make_anchor {  sub make_anchor {
     my ($filename, $current_path) = @_;      my ($filename, $current_path, $current_mode, $field_name) = @_;
     my $anchor = '<a href="/adm/portfolio?selectfile='.$filename.'&currentpath='.$current_path.'">'.$filename.'</a>';      my $anchor = '<a href="/adm/portfolio?selectfile='.$filename.'&currentpath='.$current_path.'&mode='.$current_mode.'&fieldname='.$field_name.'">'.$filename.'</a>';
     return $anchor;      return $anchor;
 }  }
   
 # returns html with <br /> separated contents of the directory  
 # returns a <strong>currentFile</strong> (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.'<br /><hr />';  
         # 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;  
         }  
           
         # $displayOut = $displayOut.'<a href="/adm/portfolio?selectfile='.$upPath.'&currentpath='.$upPath.'">..</a><br />';  
     } else {  
         # $displayOut = $displayOut.'at root '.$currentPath.'<br />';  
     }  
     foreach my $line (@dirList) {  
     #$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.= '<strong>'.(&make_anchor($filename.'/', $filename.'/').'</strong><br />'."\n");  
                 } else {  
                     $displayOut.= (&make_anchor($filename.'/', $filename.'/').'<br />'."\n");  
                 }  
             } else {  
                 if ($filename eq $currentFile) {  
     #checks to bold the selected file  
                     $displayOut.='<strong>'.(&make_anchor($filename, $currentPath).'</strong><br />'."\n");  
                 } else {  
                     $displayOut.=(&make_anchor($filename, $currentPath).'<br />'."\n");  
                 }  
             }  
               
         }  
      
     }  
     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.'<form method="POST">  
             <input type="hidden" name="selectfile"   
             value="'.$currentFile.'" />  
             <input type="hidden" name="fileaction" value="delete" />   
             <input type="hidden" name="currentpath" value="'.$currentPath.'" />   
             <center>  
             <input type="submit"   
             value="Delete '.$currentFile.'" />  
             </center>  
             </form>';  
         }   
         if ($currentPath ne '/') {  
             $displayOut = $displayOut.'<hr />  
             <form method="POST">  
             <input type="hidden" name="selectfile"   
             value="'.$currentFile.'" />  
             <input type="hidden" name="fileaction" value="rename" />   
             <input type="hidden" name="currentpath" value="'.$currentPath.'" />   
             <input type="input" name="filenewname" value="Type new name here" />   
             <input type="submit"   
             value="Rename '.$currentFile.'" />  
             </form>';  
         }  
     } else {  #action options offered for files  
         $displayOut = $displayOut.'<form method="POST">';  
         $displayOut = $displayOut.'<input type="hidden" name="selectfile"';  
         $displayOut = $displayOut.'value="'.$currentFile;  
         $displayOut = $displayOut.'" /><input type="hidden" name="fileaction" value="delete" />   
         <input type="hidden" name="currentpath" value="'.$currentPath.'" />   
         <center>  
         <input type="submit"  
         value="Delete '.$currentFile.'" />  
         </center>  
         </form>';  
       
         $displayOut = $displayOut.'<hr />  
         <form method="POST">  
         <input type="hidden" name="selectfile"   
         value="'.$currentFile.'" />  
         <input type="hidden" name="fileaction" value="rename" />   
         <input type="hidden" name="currentpath" value="'.$currentPath.'" />   
         <input type="input" name="filenewname" value="Type new name here" />   
         <input type="submit"   
         value="Rename '.$currentFile.'" />  
         </form>  
         <hr />';  
     }  
     $displayOut = $displayOut.'<hr />Add a file to '.$currentPath;  
     # file upload form   
     $displayOut = $displayOut.'<form method="post" enctype="multipart/form-data">';  
     $displayOut = $displayOut.'<input name="uploaddoc" type="file" />'.  
         '<input type="hidden" name="currentpath" value="'.$currentPath.'" />'.  
         '<input type="submit" name="storeupl" value="Upload" />'.  
         '</form><hr />';  
     $displayOut = $displayOut.'<form method="POST">  
         <input name="subdir" type="text" />  
         <input type="submit" value="Create Subdirectory" />  
         </form>  
             ';  
     return $displayOut;  
 }  
   
 my $dirptr=16384;  my $dirptr=16384;
 sub display_directory {  sub display_common {
     my ($r,$current_path,$dir_list)=@_;      my ($r,$current_path,$is_empty,$dir_list)=@_;
     my $iconpath= $r->dir_config('lonIconsURL') . "/";      my $iconpath= $r->dir_config('lonIconsURL') . "/";
     $r->print('<table border="0" cellspacing="2" cellpadding="2"><tr valign="middle">');      $r->print('<table border="0" cellspacing="2" cellpadding="2"><tr valign="middle">');
     $r->print('<td bgcolor="#ccddaa" align="center">');      $r->print('<td bgcolor="#ccddaa" align="center">');
     my $displayOut = '<form method="post" enctype="multipart/form-data">';      my $displayOut = '<form method="post" enctype="multipart/form-data">';
     $displayOut = $displayOut.'<input name="uploaddoc" type="file" />'.      $displayOut .= '<input name="uploaddoc" type="file" />'.
         '<input type="hidden" name="currentpath" value="'.$current_path.'" />'.          '<input type="hidden" name="currentpath" value="'.$current_path.'" />'.
           '<input type="hidden" name="action" value="'.$ENV{"form.action"}.'" />'.
           '<input type="hidden" name="fieldname" value="'.$ENV{"form.fieldname"}.'" />'.
           '<input type="hidden" name="mode" value="'.$ENV{"form.mode"}.'" />'. 
         '<input type="submit" name="storeupl" value="Upload" />'.          '<input type="submit" name="storeupl" value="Upload" />'.
         '</form>';          '</form>';
     $r->print($displayOut);      $r->print($displayOut);
Line 175  sub display_directory { Line 56  sub display_directory {
     $displayOut = '<form method="post">';      $displayOut = '<form method="post">';
     $displayOut .= '<input name="newdir" type="input" />'.      $displayOut .= '<input name="newdir" type="input" />'.
         '<input type="hidden" name="currentpath" value="'.$current_path.'" />'.          '<input type="hidden" name="currentpath" value="'.$current_path.'" />'.
           '<input type="hidden" name="action" value="'.$ENV{"form.action"}.'" />'.
           '<input type="hidden" name="fieldname" value="'.$ENV{"form.fieldname"}.'" />'.
           '<input type="hidden" name="mode" value="'.$ENV{"form.mode"}.'" />'. 
         '<input type="submit" name="createdir" value="'.&mt("Create Directory").'" />'.          '<input type="submit" name="createdir" value="'.&mt("Create Directory").'" />'.
         '</form>';          '</form>';
     $r->print($displayOut);      $r->print($displayOut);
     $r->print('</td></tr></table>');      $r->print('</td></tr></table>');
     my @tree = split (/\//,$current_path);      my @tree = split (/\//,$current_path);
     $r->print('<font size="+2">'.&make_anchor('/','/'));      $r->print('<font size="+2">'.&make_anchor('portfolio','/',$ENV{"form.mode"},$ENV{"form.fieldname"}).'/');
     if (@tree > 1){      if (@tree > 1){
         my $newCurrentPath = '';          my $newCurrentPath = '';
         for (my $i = 1; $i< @tree; $i++){          for (my $i = 1; $i< @tree; $i++){
             $newCurrentPath .= $tree[$i].'/';              $newCurrentPath .= $tree[$i].'/';
             $r->print(&make_anchor($tree[$i],'/'.$newCurrentPath).'/');              $r->print(&make_anchor($tree[$i],'/'.$newCurrentPath, $ENV{"form.mode"},$ENV{"form.fieldname"}).'/');
         }          }
     }      }
     $r->print('</font>');      $r->print('</font>');
     &Apache::lonhtmlcommon::store_recent('portfolio',$current_path,$current_path);      &Apache::lonhtmlcommon::store_recent('portfolio',$current_path,$current_path);
     $r->print('<br /><form method=post action="/adm/portfolio">'.      $r->print('<br /><form method=post action="/adm/portfolio?mode='.$ENV{"form.mode"}.'&fieldname='.$ENV{"form.fieldname"}.'">'.
       &Apache::lonhtmlcommon::select_recent('portfolio','currentpath',        &Apache::lonhtmlcommon::select_recent('portfolio','currentpath',
     'this.form.submit();'));      'this.form.submit();'));
     $r->print("</form>");      $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>');  sub display_directory {
     my $href_location="/uploaded/$ENV{'user.domain'}/$ENV{'user.name'}/portfolio/$current_path/";      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" />'.
           '<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;
       }
       if ($select_mode eq 'true') {
           $r->print('<table border="0" cellspacing="2" cellpadding="2">'.
               '<tr><th>Select</th><th>&nbsp;</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>&nbsp;</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";
     foreach my $line (sort       foreach my $line (sort 
       {         { 
   my ($afile)=split('&',$a,2);    my ($afile)=split('&',$a,2);
Line 206  sub display_directory { Line 121  sub display_directory {
     #$strip holds directory/file name      #$strip holds directory/file name
     #$dom       #$dom 
     my ($filename,$dom,undef,$testdir,undef,undef,undef,undef,$size,undef,$mtime,undef,undef,undef,$obs,undef)=split(/\&/,$line,16);       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 '..')) {      $filename =~ s/\s+$//;
       if (($filename ne '.') && ($filename ne '..') && ($filename !~ /\.meta$/ )) {
             if ($dirptr&$testdir) {              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>Go to ...</td>');
                 $r->print('<td>'.&make_anchor($filename.'/',$current_path.$filename.'/').'</td>');                   $r->print('<td>'.&make_anchor($filename.'/',$current_path.$filename.'/',$ENV{'form.mode'},$ENV{"form.fieldname"}).'</td>'); 
                 $r->print('</tr>');                   $r->print('</tr>'); 
             } else {              } else {
                 $r->print('<tr bgcolor="#CCCCFF">');                  $r->print('<tr bgcolor="#CCCCFF">');
                 $r->print('<td>                  if ($select_mode eq 'true'){
 <form method="post" action="/adm/portfolio">                      $r->print('<td><input type="checkbox" name="selectfile" value="'.$filename.'"'); 
 <select name="action">                      if ($$checked_files{$filename} eq 'selected') {
   <option value=""></option>                          $r->print("CHECKED");
   <option value="delete">'.&mt("Delete").'</option>                      }
   <option value="rename">'.&mt("Rename").'</option>                      $r->print('></td>');
 </select>                  } else {
 <input type="submit" name="doit" value="Go" />                      if (exists $locked_files{$current_path.$filename}){
 <input type="hidden" name="selectfile" value="'.$filename.'" />                          $r->print('<td colspan="2">Locked</td>');
 <input type="hidden" name="currentpath" value="'.$current_path.'" />                      } else {
 </form>                          $r->print('<td><input type="checkbox" name="selectfile" value="'.$filename.'" />
 </td>');                              <a href="/adm/portfolio?rename='.$filename.'&amp;currentpath='.$current_path.'">Rename</a></td>
                               <td><a href="/adm/portfolio'.$current_path.$filename.'.meta">Meta</a>
                               </td>');
                       }
                   }
                 $r->print('<td><img src="'.$iconpath.'unknown.gif"></td>');                  $r->print('<td><img src="'.$iconpath.'unknown.gif"></td>');
                 $r->print('<td><a href="'.$href_location.$filename.'">'.                  $r->print('<td><a href="'.$href_location.$filename.'">'.
   $filename.'</a></td>');       $filename.'</a></td>'); 
                 $r->print('<td>'.$size.'</td>');                  $r->print('<td>'.$size.'</td>');
                 $r->print('<td>'.&Apache::lonlocal::locallocaltime($mtime).'</td>');                  $r->print('<td>'.&Apache::lonlocal::locallocaltime($mtime).'</td>');
                 $r->print('</tr>');                   $r->print('</tr>'); 
             }              }
         }          }
     }      }
 #   <tr bgcolor="#FFAA99"> pink bg       if ($select_mode eq 'true') {
 #   <tr bgcolor="#CCCCFF"> blue bg                      $r->print('</table>
 #   $r->print(&display_directory($current_path, $currentFile, @dir_list));              <input type="hidden" name="continue" value="true">
 #    $r->print('</td>><td>');              <input type="hidden" name="fieldname" value="'.$ENV{'form.fieldname'}.'">
 #   $r->print(&display_actions($current_path, $currentFile, $isEmpty));              <input type="hidden" name="mode" value="selectfile">
     $r->print('</table></form>');              <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>');        
       } 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 {  sub open_form {
     my ($r)=@_;      my ($r)=@_;
       my @files=&Apache::loncommon::get_env_multiple('form.selectfile');
     $r->print('<form method="post" action="/adm/portfolio">');      $r->print('<form method="post" action="/adm/portfolio">');
     $r->print('<input type="hidden" name="action" value="'.      $r->print('<input type="hidden" name="action" value="'.
       $ENV{'form.action'}.'" />');        $ENV{'form.action'}.'" />');
     $r->print('<input type="hidden" name="confirmed" value="1" />');      $r->print('<input type="hidden" name="confirmed" value="1" />');
     $r->print('<input type="hidden" name="selectfile" value="'.      foreach (@files) {
       $ENV{'form.selectfile'}.'" />');          $r->print('<input type="hidden" name="selectfile" value="'.
         $_.'" />');
       }
     $r->print('<input type="hidden" name="currentpath" value="'.      $r->print('<input type="hidden" name="currentpath" value="'.
       $ENV{'form.currentpath'}.'" />');        $ENV{'form.currentpath'}.'" />');
 }  }
Line 270  sub close_form { Line 207  sub close_form {
   
 sub display_file {  sub display_file {
     my ($path,$filename)=@_;      my ($path,$filename)=@_;
       my $display_file_text;
     if (!defined($path)) { $path=$ENV{'form.currentpath'}; }      if (!defined($path)) { $path=$ENV{'form.currentpath'}; }
     if (!defined($filename)) { $filename=$ENV{'form.selectfile'}; }      if (!defined($filename)) { 
     return '<tt>'.$path.$filename.'</tt>';          $filename=$ENV{'form.selectfile'};
           $display_file_text = '<tt>'.$path.$filename.'</tt>';
       } elsif (ref($filename) eq "ARRAY") {
           foreach (@$filename) {
               $display_file_text .= '<tt>'.$path.$_.'</tt><br />';
           }
       } elsif (ref($filename) eq "SCALAR") {
           $display_file_text = '<tt>'.$path.$filename.'</tt>';        
       }
       return $display_file_text;
 }  }
   
 sub done {  sub done {
       my ($message)=@_;
       unless (defined $message) {
           $message='Done';
       }
     return ('<h3><a href="/adm/portfolio?currentpath='.      return ('<h3><a href="/adm/portfolio?currentpath='.
     $ENV{'form.currentpath'}.'">'.&mt('Done').'</a></h3>');      $ENV{'form.currentpath'}.
       '&fieldname='.$ENV{'form.fieldname'}.
       '&mode='.$ENV{'form.mode'}.
       '">'.&mt($message).'</a></h3>');
 }  }
   
 sub delete {  sub delete {
     my ($r)=@_;      my ($r)=@_;
       my @check;
       my $file_name = $ENV{'form.currentpath'}.$ENV{'form.selectfile'};
       my @files=&Apache::loncommon::get_env_multiple('form.selectfile');
   
       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('Back'));
       } else {
           if (scalar(@files)) {
               &open_form($r);
               $r->print('<p>'.&mt('Delete').' '.&display_file(undef,\@files).'?</p>');
               &close_form($r);
           } else {
               $r->print("No file was checked to delete.<br />");
               $r->print(&done());
           }
       }
   } 
   
   sub delete_confirmed {
       my ($r)=@_;
       my @files=&Apache::loncommon::get_env_multiple('form.selectfile');
       my $result;
       foreach my $delete_file (@files) {
           $result=&Apache::lonnet::removeuserfile($ENV{'user.name'},
          $ENV{'user.domain'},'portfolio'.
          $ENV{'form.currentpath'}.
          $delete_file);
           if ($result ne 'ok') {
    $r->print('<font color="red"> An error occured ('.$result.
     ') while trying to delete '.&display_file(undef, $delete_file).'</font><br />');
           }
       }
       $r->print(&done());
   }
   
   sub delete_dir {
       my ($r)=@_;
     &open_form($r);      &open_form($r);
     $r->print('<p>'.&mt('Delete').' '.&display_file().'?</p>');      $r->print('<p>'.&mt('Delete').' '.&display_file().'?</p>');
     &close_form($r);      &close_form($r);
 }   } 
   
 sub delete_confirmed {  sub delete_dir_confirmed {
     my ($r)=@_;      my ($r)=@_;
       my $directory_name = $ENV{'form.currentpath'};
       $directory_name =~ m/\/$/;
       $directory_name = $`;
     my $result=&Apache::lonnet::removeuserfile($ENV{'user.name'},      my $result=&Apache::lonnet::removeuserfile($ENV{'user.name'},
        $ENV{'user.domain'},'portfolio'.         $ENV{'user.domain'},'portfolio'.
        $ENV{'form.currentpath'}.         $directory_name);
        $ENV{'form.selectfile'});         
     if ($result ne 'ok') {      if ($result ne 'ok') {
  $r->print('<font color="red"> An errror occured ('.$result.   $r->print('<font color="red"> An error occured (dir) ('.$result.
   ') while trying to delete '.&display_file().'</font><br />');    ') while trying to delete '.$directory_name.'</font><br />');
       } else {
           # now remove from recent
   #        $r->print('<br /> removing '.$directory_name.'<br /');
           &Apache::lonhtmlcommon::remove_recent('portfolio',[$directory_name.'/']);
           my @dirs = split m!/!, $directory_name;
           
   #        $directory_name =~ m/^(\/*\/)(\/*.)$/;
           $directory_name='/';
           for (my $i=1; $i < (@dirs - 1); $i ++){
               $directory_name .= $dirs[$i].'/';
           }
           $ENV{'form.currentpath'} = $directory_name;
     }      }
     $r->print(&done());      $r->print(&done());
 }  }
   
 sub rename {  sub rename {
     my ($r)=@_;      my ($r)=@_;
     &open_form($r);      my $file_name = $ENV{'form.currentpath'}.$ENV{'form.rename'};
     $r->print('<p>'.&mt('Rename').' '.&display_file().' to       if (&Apache::lonnet::is_locked($file_name,$ENV{'user.domain'},$ENV{'user.name'}) eq 'true') {
                <input name="filenewname" type="input" size="50" />?</p>');          $r->print ("The file is locked and cannot be renamed.<br />");
     &close_form($r);          $r->print(&done());
       } else {
           &open_form($r);
           $r->print('<p>'.&mt('Rename').' '.&display_file().' to 
                      <input name="filenewname" type="input" size="50" />?</p>');
           &close_form($r);
       }
 }  }
   
 sub rename_confirmed {  sub rename_confirmed {
Line 321  sub rename_confirmed { Line 334  sub rename_confirmed {
     my $result=      my $result=
  &Apache::lonnet::renameuserfile($ENV{'user.name'},$ENV{'user.domain'},   &Apache::lonnet::renameuserfile($ENV{'user.name'},$ENV{'user.domain'},
             'portfolio'.$ENV{'form.currentpath'}.$ENV{'form.selectfile'},              'portfolio'.$ENV{'form.currentpath'}.$ENV{'form.selectfile'},
             'portfolio'.$ENV{'form.currentpath'}.$ENV{'form.filenewname'});              'portfolio'.$ENV{'form.currentpath'}.$filenewname);
     if ($result ne 'ok') {      if ($result ne 'ok') {
  $r->print('<font color="red"> An errror occured ('.$result.   $r->print('<font color="red"> An errror occured ('.$result.
   ') while trying to rename '.&display_file().' to '.    ') while trying to rename '.&display_file().' to '.
   &display_file(undef,$filenewname).'</font><br />');    &display_file(undef,$filenewname).'</font><br />');
     }      }
       if ($filenewname ne $ENV{'form.filenewname'}) {
           $r->print("The new file name was changed from:<br /><strong>".$ENV{'form.filenewname'}."</strong> to <strong>$filenewname </strong>");
       }
     $r->print(&done());      $r->print(&done());
 }  }
   sub select_files {
       my ($r)=@_;
       if ($ENV{'form.continue'} eq 'true') {
           # here we update the selections for the currentpath
           # eventually, have to handle removing those not checked, but . . . 
           my @items=&Apache::loncommon::get_env_multiple('form.selectfile');
           &Apache::lonnet::save_selected_files($ENV{'user.name'}, $ENV{'form.currentpath'}, @items);
       } else {
           if ($ENV{'form.currentpath'} eq '/') {
               #empty the file for a fresh start
               # &Apache::lonnet::clear_selected_files($ENV{'user.name'});
           }
       }
       my @files = &Apache::lonnet::files_not_in_path($ENV{'user.name'}, $ENV{'form.currentpath'});
       my $java_files = join ",", @files;
       if ($java_files) {
           $java_files.=',';
       }
       my $javascript =(<<ENDSMP);
           <script language='javascript'>
           function finishSelect() {
   ENDSMP
       $javascript .= 'fileList = "'.$java_files.'";';
       $javascript .= (<<ENDSMP);
               for (i=0;i<document.forms.checkselect.length;i++) { 
                   if (document.forms.checkselect[i].checked){
                       fileList = fileList + document.forms.checkselect.currentpath.value + document.forms.checkselect[i].value + "," ;
                   }
               }
               opener.document.forms.lonhomework.
   ENDSMP
       $javascript .= $ENV{'form.fieldname'};
       $javascript .= (<<ENDSMP);
           .value=fileList;
               self.close();
           }
           </script>
   ENDSMP
       $r->print($javascript);
       $r->print("<h1>Select portfolio files</h1>
                   Check as many as you wish in response to the essay problem.<br />");
       $r->print("<strong>Files selected from other directories:</strong><br />");
       foreach (&Apache::lonnet::files_not_in_path($ENV{'user.name'}, $ENV{'form.currentpath'})) {
           $r->print($_."<br />");
       }
   }
 sub upload {  sub upload {
     my ($r)=@_;      my ($r)=@_;
     #FIXME if the file already exists we need to do a confirmation pass       my $fname=$ENV{'form.uploaddoc.filename'};
     #before overwriting      my $filesize = (length($ENV{'form.uploaddoc'})) / 1000; #express in k (1024?)
     my $result=&Apache::lonnet::userfileupload('uploaddoc','',      my $disk_quota = 20000; # expressed in k
  'portfolio'.$ENV{'form.currentpath'});      $fname=&Apache::lonnet::clean_filename($fname);
     if ($result !~ m|^/uploaded/|) {      my $portfolio_root = &Apache::loncommon::propath($ENV{'user.domain'},
  $r->print('<font color="red"> An errror occured ('.$result.   $ENV{'user.name'}).
   ') while trying to upload '.&display_file().'</font><br />');   '/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;
       my $locked_file = 0;
       foreach my $line (@dir_list) {
           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/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){
           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 {  sub createdir {
     my ($r)=@_;      my ($r)=@_;
     #FIXME 1) bad dirnames ( '/' etc)      my $newdir=&Apache::lonnet::clean_filename($ENV{'form.newdir'});
     #      2) file exists in place of dir (errormessage needs improvement)      if ($newdir eq '') {
     my $result=&Apache::lonnet::mkdiruserfile($ENV{'user.name'},      $r->print('<font color="red">'.
      $ENV{'user.domain'},'portfolio'.$ENV{'form.currentpath'}.$ENV{'form.newdir'});        &mt("Error: no directory name was provided.").
     if ($result ne 'ok') {        '</font><br />');
  $r->print('<font color="red"> An errror occured ('.$result.      $r->print(&done());
   ') while trying to create a new directory '.&display_file().'</font><br />');      return;
       } 
       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('<font color="red"> Unable to create a directory named <strong>'.$newdir.
                  ' </strong>a file or directory by that name already exists.</font><br />');
       } else {
           my $result=&Apache::lonnet::mkdiruserfile($ENV{'user.name'},
            $ENV{'user.domain'},'portfolio'.$ENV{'form.currentpath'}.$newdir);
           if ($result ne 'ok') {
          $r->print('<font color="red"> An errror occured ('.$result.
             ') while trying to create a new directory '.&display_file().'</font><br />');
           }
       }
       if ($newdir ne $ENV{'form.newdir'}) {
           $r->print("The new directory name was changed from:<br /><strong>".$ENV{'form.newdir'}."</strong> to <strong>$newdir </strong>");  
     }      }
     $r->print(&done());      $r->print(&done());
 }  }
Line 359  sub createdir { Line 487  sub createdir {
 sub handler {  sub handler {
     # this handles file management      # this handles file management
     my $r = shift;      my $r = shift;
       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::no_cache($r);
     &Apache::loncommon::content_type($r,'text/html');      &Apache::loncommon::content_type($r,'text/html');
     $r->send_http_header;      $r->send_http_header;
     # Give the LON-CAPA page 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').                &mt('Portfolio Manager').
               "</title></head>\n".                "</title></head>\n");
               &Apache::loncommon::bodytag('Portfolio Manager'));      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();      $r->rflush();
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},   if (($ENV{'form.storeupl'} eq 'Upload') & (!$ENV{'form.uploaddoc.filename'})){
                                             ['selectfile','currentpath',         $r->print('<font color="red"> No file was selected to upload.'.
      'currentfile']);                 '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'}) {      if ($ENV{'form.uploaddoc.filename'}) {
  &upload($r);   &upload($r);
Line 378  sub handler { Line 527  sub handler {
  &delete_confirmed($r);   &delete_confirmed($r);
     } elsif ($ENV{'form.action'} eq 'delete') {      } elsif ($ENV{'form.action'} eq 'delete') {
  &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'}) {      } elsif ($ENV{'form.action'} eq 'rename' && $ENV{'form.confirmed'}) {
  &rename_confirmed($r);   &rename_confirmed($r);
     } elsif ($ENV{'form.action'} eq 'rename') {      } elsif ($ENV{'form.rename'}) {
           $ENV{'form.selectfile'} = $ENV{'form.rename'};
           $ENV{'form.action'} = 'rename';
  &rename($r);   &rename($r);
     } elsif ($ENV{'form.createdir'}) {      } elsif ($ENV{'form.createdir'}) {
  &createdir($r);   &createdir($r);
Line 389  sub handler { Line 544  sub handler {
  if ($ENV{'form.currentpath'}) {   if ($ENV{'form.currentpath'}) {
     $current_path = $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,   my @dir_list=&Apache::lonnet::dirlist($current_path,
     $ENV{'user.domain'},      $ENV{'user.domain'},
     $ENV{'user.name'},$portfolio_root);      $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   # need to know if directory is empty so it can be removed if desired
  my $is_empty=(@dir_list == 2);   my $is_empty=(@dir_list == 2);
       &display_common($r,$current_path,$is_empty,\@dir_list);
  &display_directory($r,$current_path,\@dir_list);          &display_directory($r,$current_path,$is_empty,\@dir_list);
    $r->print("</body>\n</html>\n");
    return OK;
     }      }
   
     $r->print("</body>\n</html>\n");  
     $r->rflush();  
     return OK;  
 }  }
   
 1;  1;
 __END__  __END__

Removed from v.1.27  
changed lines
  Added in v.1.78


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>
500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.