Diff for /loncom/interface/portfolio.pm between versions 1.132 and 1.154

version 1.132, 2006/07/08 01:20:40 version 1.154, 2006/08/12 06:18:44
Line 40  use Apache::lonhtmlcommon; Line 40  use Apache::lonhtmlcommon;
 use HTML::Entities;  use HTML::Entities;
 use LONCAPA;  use LONCAPA;
   
   sub group_args {
       my $output;
       if (defined($env{'form.group'})) {
           $output .= '&group='.$env{'form.group'};
    if (defined($env{'form.ref'})) {
       $output .= '&ref='.$env{'form.ref'};
    }
       }
       return $output;
   }
   
   sub group_form_data {
       my $output;
       if (defined($env{'form.group'})) {
    $output = '<input type="hidden" name="group" value="'.$env{'form.group'}.'" />';
    if (exists($env{'form.ref'})) {
       $output .= '<input type="hidden" name="ref" value="'.
    $env{'form.ref'}.'" />';
    }
       }
       return $output;
   } 
   
 # 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 ($url, $filename, $current_path, $current_mode, $field_name,      my ($url, $anchor_fields, $inner_text) = @_;
         $continue_select,$group) = @_;      if ($$anchor_fields{'continue'} ne 'true') {$$anchor_fields{'continue'} = 'false'};
     if ($continue_select ne 'true') {$continue_select = 'false'};      my $anchor = '<a href="'.$url.'?';
     my $anchor = '<a href="'.$url.'?selectfile='.$filename.'&amp;currentpath='.$current_path.'&amp;mode='.$current_mode.'&amp;continue='.$continue_select.'&amp;fieldname='.$field_name;      foreach my $field_name (keys(%$anchor_fields)) {
     if (defined($group)) {          $anchor .= $field_name.'='.$$anchor_fields{$field_name}.'&amp;';
         $anchor .= '&amp;group='.$group;      }
     }      $anchor =~ s/&amp;$//;
     $anchor .= '">'.$filename.'</a>';      $anchor .= &group_args();
       $anchor .= '">'.$inner_text.'</a>';
     return $anchor;      return $anchor;
 }  }
   
 my $dirptr=16384;  my $dirptr=16384;
 sub display_common {  sub display_common {
     my ($r,$url,$current_path,$is_empty,$dir_list,$group,$can_upload)=@_;      my ($r,$url,$current_path,$is_empty,$dir_list,$can_upload)=@_;
     my $namespace = &get_namespace($group);      my $namespace = &get_namespace();
     my $port_path = &get_port_path($group);      my $port_path = &get_port_path();
     if ($can_upload) {      if ($can_upload) {
         my $groupitem;          my $groupitem = &group_form_data();
         if (defined($group)) {  
             $groupitem = '<input type="hidden" name="group" value="'.$group.'" />';  
         }   
         my $iconpath= $r->dir_config('lonIconsURL') . "/";          my $iconpath= $r->dir_config('lonIconsURL') . "/";
         my %text=&Apache::lonlocal::texthash(          my %text=&Apache::lonlocal::texthash(
  'upload' => 'Upload',   'upload' => 'Upload',
Line 109  sub display_common { Line 132  sub display_common {
 TABLE  TABLE
     }      }
     my @tree = split (/\//,$current_path);      my @tree = split (/\//,$current_path);
     $r->print('<span class="LC_current_location">'.&make_anchor($url,$port_path,'/',$env{"form.mode"},$env{"form.fieldname"},$env{"form.continue"},$group).'/');      my %anchor_fields = (
           'selectfile'    => $port_path,
           'currentpath'   => '/',
           'mode'          => $env{"form.mode"},
           'fieldname'     => $env{"form.fieldname"},
           'continue'      => $env{"form.continue"}
       );
       $r->print('<span class="LC_current_location">'.&make_anchor($url,\%anchor_fields,$port_path).'/');
     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($url,$tree[$i],'/'.$newCurrentPath, $env{"form.mode"},$env{"form.fieldname"}, $env{"form.continue"},$group).'/');              my %anchor_fields = (
                   'selectfile' => $tree[$i],
                   'currentpath' => '/',
                   'mode' => $env{"form.mode"},
                   'fieldname' => $env{"form.fieldname"},
                   'continue' => $env{"form.continue"}
               );
               $r->print(&make_anchor($url,\%anchor_fields,$tree[$i]).'/');
         }          }
     }      }
     $r->print('</span>');      $r->print('</span>');
     &Apache::lonhtmlcommon::store_recent($namespace,$current_path,$current_path);      &Apache::lonhtmlcommon::store_recent($namespace,$current_path,$current_path);
     $r->print('<br /><form method="post" action="'.$url.'?mode='.$env{"form.mode"}.'&amp;fieldname='.$env{"form.fieldname"});      $r->print('<br /><form method="post" action="'.$url.'?mode='.$env{"form.mode"}.'&amp;fieldname='.$env{"form.fieldname"}.&group_args());
     if (defined($group)) {  
         $r->print('&amp;group='.$group);  
     }  
     $r->print('">'.      $r->print('">'.
       &Apache::lonhtmlcommon::select_recent($namespace,'currentpath',        &Apache::lonhtmlcommon::select_recent($namespace,'currentpath',
     'this.form.submit();'));      'this.form.submit();'));
     $r->print("</form>");      $r->print("</form>");
 }  }
   
   sub display_directory_line {
       my ($r,$select_mode,$fullpath, $filename, $mtime, $size, $css_class,
    $line, $access_controls, $curr_access, $now, $version_flag,
    $href_location, $url, $current_path, $access_admin_text, $versions)=@_;
       # my ($filename,$dom,undef,$testdir,undef,undef,undef,undef,$size,undef,$mtime,undef,undef,undef,$obs,undef)=split(/\&/,$line,16); 
       $r->print('<tr class="'.$css_class.'">');
       $r->print($line); # contains first two cells of table
       if ($$version_flag{$filename}) { # versioned can't be versioned, so TRUE when root file
           $r->print('<td><img alt="" src="'.&Apache::loncommon::icon($filename).'" /></td>');
           $r->print('<td>'.$$version_flag{$filename}.'</td>');
       } else { # this is a graded or handed back file
           my ($user,$domain) = &get_name_dom();
           my $permissions_hash = &Apache::lonnet::get_portfile_permissions($domain,$user);
           my $lock_info;
           foreach my $key (keys(%$permissions_hash)) {
               $key =~ s|^/||;
               if ($key =~ /$filename/) {
                   &Apache::lonnet::logthis("filename match");
                   my $value = $$permissions_hash{$key};
                   if (ref($value) eq 'ARRAY') {
                       my $info = pop(@$value);
                       my $info2 = pop(@$info);
                       &Apache::lonnet::logthis("the info2 is $info2");
                       $lock_info = $info2;
                       #foreach my $key2(keys(%hash)){
                        #   &Apache::lonnet::logthis("a key2 is $key2");
                       #}
                       foreach my $value_element (@$value) {
                           #&Apache::lonnet::logthis("and the array element is $value_element");
                           foreach my $sub_value (@$value_element) {
                               #&Apache::lonnet::logthis("subvalue is $sub_value");
                           }
                       }
                   }
               }
           }
           $r->print('<td colspan="2">'.$lock_info.'</td>');
       }
       # $r->print('<td>'.$$version_flag{$filename}.'</td><td>');
       $r->print('<td>'.&make_anchor($href_location.$filename,undef,$filename).'</td>'); 
       $r->print('<td>'.$size.'</td>');
       $r->print('<td>'.&Apache::lonlocal::locallocaltime($mtime).'</td>');
       if ($select_mode ne 'true') {
    $r->print('<td><span style="white-space: nowrap">'.
     &mt($curr_access).'&nbsp;&nbsp;&nbsp;');
           my %anchor_fields = (
               'access' => $filename,
               'currentpath' => $current_path
           );
    $r->print(&make_anchor($url, \%anchor_fields, $access_admin_text).'</span></td>');
       }
       $r->print('</tr>'.$/);
   }
   
 sub display_directory {  sub display_directory {
     my ($r,$url,$current_path,$is_empty,$dir_list,$group,$can_upload,      my ($r,$url,$current_path,$is_empty,$dir_list,$group,$can_upload,
         $can_modify,$can_delete,$can_setacl)=@_;          $can_modify,$can_delete,$can_setacl)=@_;
     my $iconpath= $r->dir_config('lonIconsURL') . "/";      my $iconpath= $r->dir_config('lonIconsURL') . "/";
     my ($groupitem,$groupecho);  
     my $display_out;      my $display_out;
     my $select_mode;      my $select_mode;
     my $checked_files;      my $checked_files;
     my $port_path = &get_port_path($group);      my $port_path = &get_port_path();
     my ($uname,$udom) = &get_name_dom($group);      my ($uname,$udom) = &get_name_dom();
     my $access_admin_text = &mt('View Status');      my $access_admin_text = &mt('View Status');
     if ($can_setacl) {      if ($can_setacl) {
         $access_admin_text = &mt('View/Change Status');          $access_admin_text = &mt('View/Change Status');
     }      }
     if ((defined($group)) && (defined($env{'request.course.id'}))) {  
        $groupitem = '<input type="hidden" name="group" value="'.$group.'" />';   
        $groupecho = '&amp;group='.$group;  
     }  
   
     my $current_permissions = &Apache::lonnet::get_portfile_permissions($udom,      my $current_permissions = &Apache::lonnet::get_portfile_permissions($udom,
                                                                         $uname);                                                                          $uname);
Line 159  sub display_directory { Line 243  sub display_directory {
  $select_mode = 'true';   $select_mode = 'true';
     }       } 
     if ($is_empty && ($current_path ne '/') && $can_delete) {      if ($is_empty && ($current_path ne '/') && $can_delete) {
         $display_out = '<form method="post" action="'.$url.'">'.$groupitem.          $display_out = '<form method="post" action="'.$url.'">'.
       &group_form_data().
         '<input type="hidden" name="action" value="deletedir" />'.          '<input type="hidden" name="action" value="deletedir" />'.
         '<input type="submit" name="deletedir" value="'.&mt("Delete Directory").'" />'.          '<input type="submit" name="deletedir" value="'.&mt("Delete Directory").'" />'.
         '<input type="hidden" name="selectfile" value="" />'.          '<input type="hidden" name="selectfile" value="" />'.
Line 172  sub display_directory { Line 257  sub display_directory {
     if ($select_mode eq 'true') {      if ($select_mode eq 'true') {
         $r->print('<form method="post" name="checkselect" action="'.$url.'">');          $r->print('<form method="post" name="checkselect" action="'.$url.'">');
         $r->print('<table id="LC_browser">'.          $r->print('<table id="LC_browser">'.
             '<tr><th>Select</th><th>&nbsp;</th><th>Name</th><th>Size</th><th>Last Modified</th></tr>');              '<tr><th>Select</th><th>&nbsp;</th><th>&nbsp;</th><th>Name</th><th>Size</th><th>Last Modified</th></tr>');
     } else {      } else {
         $r->print('<form method="post" action="'.$url.'">');          $r->print('<form method="post" action="'.$url.'">');
         $r->print('<table id="LC_browser">'.          $r->print('<table id="LC_browser">'.
             '<tr><th colspan="2">Actions</th><th>&nbsp;</th><th>Name</th><th>Size</th><th>Last Modified</th><th>Current Access Status</th></tr>');              '<tr><th colspan="2">Actions</th><th>&nbsp;</th><th>&nbsp;</th><th>Name</th><th>Size</th><th>Last Modified</th><th>Current Access Status</th></tr>');
     }  
     if (defined($group)) {  
         $r->print("\n".$groupitem."\n");  
     }      }
       $r->print("\n".&group_form_data()."\n");
   
     my $href_location="/uploaded/$udom/$uname/$port_path".$current_path;      my $href_location="/uploaded/$udom/$uname/$port_path".$current_path;
     my $href_edit_location="/editupload/$udom/$uname/$port_path".$current_path;      my $href_edit_location="/editupload/$udom/$uname/$port_path".$current_path;
     my @dir_lines;      my @dir_lines;
     my @version_lines;      my @version_lines;
     my %versioned;      my %versioned;
     foreach my $line (sort       foreach my $dir_line (sort 
       {         { 
   my ($afile)=split('&',$a,2);    my ($afile)=split('&',$a,2);
   my ($bfile)=split('&',$b,2);    my ($bfile)=split('&',$b,2);
Line 194  sub display_directory { Line 278  sub display_directory {
       } (@$dir_list)) {        } (@$dir_list)) {
     #$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(/\&/,$dir_line,16); 
     $filename =~ s/\s+$//;      $filename =~ s/\s+$//;
     my ($fname,$version,$extension) = &Apache::grades::file_name_version_ext($filename);      my ($fname,$version,$extension) = &Apache::grades::file_name_version_ext($filename);
     if ($version) {      if ($version) {
Line 204  sub display_directory { Line 288  sub display_directory {
        push(@dir_lines, [$filename,$dom,$testdir,$size,$mtime,$obs]);         push(@dir_lines, [$filename,$dom,$testdir,$size,$mtime,$obs]);
     }      }
     }      }
     foreach my $line (@dir_lines) {      foreach my $dir_line (@dir_lines) {
         my ($filename,$dom,$testdir,$size,$mtime,$obs) = @$line;          my ($filename,$dom,$testdir,$size,$mtime,$obs) = @$dir_line;
         my ($fname,$version,$extension) = &Apache::grades::file_name_version_ext($filename);          my ($fname,$version,$extension) = &Apache::grades::file_name_version_ext($filename);
     if (($filename ne '.') && ($filename ne '..') && ($filename !~ /\.meta$/ ) && ($filename !~ /(.*)\.(\d+)\.([^\.]*)$/)) {      if (($filename ne '.') && ($filename ne '..') && ($filename !~ /\.meta$/ ) && ($filename !~ /(.*)\.(\d+)\.([^\.]*)$/)) {
        my %version_flag;         my %version_flag;
Line 214  sub display_directory { Line 298  sub display_directory {
            $show_versions = 'true';             $show_versions = 'true';
        }         }
        if (exists($versioned{$filename})) {         if (exists($versioned{$filename})) {
            $version_flag{$filename} = '<a href="portfolio?showversions='.$filename.'"><img alt="'.&mt('closed folder').'" src="'.$iconpath.'folder_pointer_closed.gif" /></a>';             my %anchor_fields = (
                  'selectfile' => $filename,
                  'continue' => 'false',
                  'currentpath' => $current_path,
              );
              if ($show_versions) {
                       $version_flag{$filename} = &make_anchor('portfolio',\%anchor_fields,
                           '<img class="LC_icon" alt="'.&mt('opened folder').'" src="'.$iconpath.'folder_pointer_opened.gif" />');
              } else {
                  $anchor_fields{'showversions'} = $filename;
                       $version_flag{$filename} = &make_anchor('portfolio',\%anchor_fields,
                           '<img class="LC_icon" alt="'.&mt('closed folder').'" src="'.$iconpath.'folder_pointer_closed.gif" />');
                   }
        } else {         } else {
            $version_flag{$filename} = '';             $version_flag{$filename} = '&nbsp;';
        }         }
             if ($dirptr&$testdir) {              if ($dirptr&$testdir) {
  my $colspan='colspan="2"';   my $colspan='colspan="2"';
Line 225  sub display_directory { Line 321  sub display_directory {
                 }                  }
  $r->print('<tr class="LC_browser_folder"><td '.$colspan.'><img alt="'.&mt('closed folder').'" src="'.$iconpath.'folder_closed.gif" /></td>');   $r->print('<tr class="LC_browser_folder"><td '.$colspan.'><img alt="'.&mt('closed folder').'" src="'.$iconpath.'folder_closed.gif" /></td>');
                 $r->print('<td>Go to ...</td>');                  $r->print('<td>Go to ...</td>');
                 $r->print('<td>'.$version_flag{$filename}.&make_anchor($url,$filename.'/',$current_path.$filename.'/',$env{'form.mode'},$env{"form.fieldname"},$env{'form.continue'},$group).'</td>');                   my %anchor_fields = (
                       'selectfile'    => $filename.'/',
                       'currentpath'   => $current_path.$filename.'/',
                       'mode'          => $env{"form.mode"},
                       'fieldname'     => $env{"form.fieldname"},
                       'continue'      => $env{"form.continue"}
                   );  
                   $r->print('<td>'.$version_flag{$filename}.'</td><td>'.&make_anchor($url,\%anchor_fields,$filename.'/').'</td>'); 
                 $r->print('</tr>');                   $r->print('</tr>'); 
             } else {              } else {
  my $css_class = 'LC_browser_file';   my $css_class = 'LC_browser_file';
  my $line;   my $line;
                 my $fullpath = $current_path.$filename;                  my $fullpath = $current_path.$filename;
                 $fullpath = &prepend_group($fullpath,$group);                  $fullpath = &prepend_group($fullpath);
                 if ($select_mode eq 'true') {                  if ($select_mode eq 'true') {
                     $line='<td><input type="checkbox" name="checkfile" value="'.$filename.'"';                      $line='<td><input type="checkbox" name="checkfile" value="'.$filename.'"';
     if ($$checked_files{$filename} eq 'selected') {      if ($$checked_files{$filename} eq 'selected') {
Line 240  sub display_directory { Line 343  sub display_directory {
     $line.=' /></td>';      $line.=' /></td>';
                 } else {                  } else {
                     if (exists $locked_files{$fullpath}) {                      if (exists $locked_files{$fullpath}) {
                         $line.='<td colspan="2"><a href="'.$url.'?lockinfo='.$current_path.$filename.$groupecho.'">Locked</a></td>';                          my %anchor_fields = (
                               'lockinfo' => $current_path.$filename
                           );
                           $line.='<td colspan="2">'.&make_anchor($url,\%anchor_fields,'Locked').'</td>';
  $css_class= 'LC_browser_file_locked';   $css_class= 'LC_browser_file_locked';
                     } else {                      } else {
                         if (!$can_modify) {                          if (!$can_modify) {
Line 252  sub display_directory { Line 358  sub display_directory {
                             $line .= '<input type="checkbox" name="selectfile" value="'.$filename.'" />';                              $line .= '<input type="checkbox" name="selectfile" value="'.$filename.'" />';
                         }                          }
                         if ($can_modify) {                          if ($can_modify) {
                             my $cat='<img alt="'.&mt('Catalog Information').                              my $cat='<img class="LC_icon" alt="'.&mt('Catalog Information').
                             '" src="'.&Apache::loncommon::lonhttpdurl('/res/adm/pages/catalog.gif').'" />';                              '" src="'.&Apache::loncommon::lonhttpdurl('/res/adm/pages/catalog.gif').'" />';
                             $line .= '<a href="'.$url.'?rename='.$filename.'&amp;currentpath='.$current_path.$groupecho.'">Rename</a>';                              my %anchor_fields = (
                             $line .= '</td><td>'.$version_flag{$filename}.'<a href="'.$href_edit_location.$filename.'.meta">'.$cat.'</a>';                                  'rename' => $filename,
                                   currentpath => $current_path
                               );
                               $line .= &make_anchor($url,\%anchor_fields,'Rename');
                               $line .= '</td><td>'.&make_anchor($href_edit_location.$filename.'.meta',undef,$cat);
                               # '<a href="'.$href_edit_location.$filename.'.meta">'.$cat.'</a>';
                         }                          }
                         $line .= '</td>';                          $line .= '</td>';
                     }                      }
                 }                  }
  $r->print('<tr class="'.$css_class.'">');  
  $r->print($line);  
  my $curr_access;   my $curr_access;
  if ($select_mode ne 'true') {   if ($select_mode ne 'true') {
     my $pub_access = 0;      my $pub_access = 0;
Line 295  sub display_directory { Line 404  sub display_directory {
  $curr_access = join('+ ',@allaccesses);   $curr_access = join('+ ',@allaccesses);
     }      }
  }   }
  $r->print('<td><img alt="" src="'.&Apache::loncommon::icon($filename).'" /></td>');                  &display_directory_line($r,$select_mode,$fullpath, $filename, $mtime, $size, $css_class, $line, 
  $r->print('<td>'.$version_flag{$filename}.'<a href="'.$href_location.$filename.'">'.                                          \%access_controls, $curr_access,$now, \%version_flag, $href_location, 
   $filename.'</a></td>');                                           $url, $current_path, $access_admin_text);
  $r->print('<td>'.$size.'</td>');   if ($show_versions) {
  $r->print('<td>'.&Apache::lonlocal::locallocaltime($mtime).'</td>');      foreach my $dir_line (@version_lines) {
  if ($select_mode ne 'true') {          my ($v_filename,$dom,$testdir,$size,$mtime,$obs) = @$dir_line;
     $r->print('<td><span style="white-space: nowrap">'.                          my ($v_fname,$version,$v_extension) = &Apache::grades::file_name_version_ext($v_filename);
       &mt($curr_access).'&nbsp;&nbsp;&nbsp;');                          $line = '<td colspan="2">&nbsp;</td>';
     $r->print('<a href="'.$url.'?access='.$filename.                          if (($v_fname eq $fname)&&($v_extension eq $extension)) {
       '&amp;currentpath='.$current_path.$groupecho.              &display_directory_line($r,$select_mode,$fullpath, $v_filename, $mtime, $size, 
       '">'.$access_admin_text.'</a></span></td>');                              $css_class, $line, \%access_controls, $curr_access, $now,
                                \%version_flag, $href_location, $url, $current_path, $access_admin_text, 1);
           }
       }
  }   }
  $r->print('</tr>'.$/);  
             }              }
         }          }
     }      }
Line 349  sub open_form { Line 460  sub open_form {
 }  }
   
 sub close_form {  sub close_form {
     my ($r,$url,$group,$button_text)=@_;      my ($r,$url,$button_text)=@_;
     if (!defined($button_text)) {      if (!defined($button_text)) {
         $button_text = {          $button_text = {
                          'continue' => &mt('Continue'),                           'continue' => &mt('Continue'),
Line 357  sub close_form { Line 468  sub close_form {
                        };                         };
     }      }
     $r->print('<p><input type="submit" value="'.$button_text->{'continue'}.'" />');      $r->print('<p><input type="submit" value="'.$button_text->{'continue'}.'" />');
     if (defined($group)) {      $r->print(&group_form_data().'</p></form>');
        $r->print("\n".'<input type="hidden" name="group" value="'.  
               $group.'" />');  
     }  
     $r->print('</p></form>');  
     $r->print('<form action="'.$url.'" method="post">      $r->print('<form action="'.$url.'" method="post">
                <p>                 <p>
               <input type="hidden" name="currentpath" value="'.                <input type="hidden" name="currentpath" value="'.
       $env{'form.currentpath'}.'" />');        $env{'form.currentpath'}.'" />'.
     if (defined($group)) {        &group_form_data());
        $r->print("\n".'<input type="hidden" name="group" value="'.  
               $group.'" />');  
     }  
     $r->print("\n".'   <input type="submit" value="'.$button_text->{'cancel'}.'" />      $r->print("\n".'   <input type="submit" value="'.$button_text->{'cancel'}.'" />
                </p></form>');                  </p></form>'); 
 }  }
Line 396  sub display_file { Line 500  sub display_file {
 }  }
   
 sub done {  sub done {
     my ($message,$url,$group)=@_;      my ($message,$url)=@_;
     unless (defined $message) {      unless (defined $message) {
         $message='Done';          $message='Done';
     }      }
     my $result = '<h3><a href="'.$url.'?currentpath='.      my %anchor_fields = (
          $env{'form.currentpath'}.          'currentpath' => $env{'form.currentpath'},
          '&fieldname='.$env{'form.fieldname'}.          'fieldname' => $env{'form.fieldname'},
          '&mode='.$env{'form.mode'};          'mode'      => $env{'form.mode'}
     if (defined($group)) {      );
         $result .= '&group='.$group;      my $result = '<h3>'.&make_anchor($url,\%anchor_fields,&mt($message)).'</h3>';
     }  
     $result .= '">'.&mt($message).'</a></h3>';  
     return $result;      return $result;
 }  }
   
 sub delete {  sub delete {
     my ($r,$url,$group)=@_;      my ($r,$url)=@_;
     my @check;      my @check;
     my $file_name = $env{'form.currentpath'}.$env{'form.selectfile'};      my $file_name = $env{'form.currentpath'}.$env{'form.selectfile'};
     $file_name = &prepend_group($file_name,$group);      $file_name = &prepend_group($file_name);
     my @files=&Apache::loncommon::get_env_multiple('form.selectfile');      my @files=&Apache::loncommon::get_env_multiple('form.selectfile');
     my ($uname,$udom) = &get_name_dom($group);      my ($uname,$udom) = &get_name_dom();
     if (&Apache::lonnet::is_locked($file_name,$udom,$uname) eq 'true') {      if (&Apache::lonnet::is_locked($file_name,$udom,$uname) eq 'true') {
         $r->print ("The file is locked and cannot be deleted.<br />");          $r->print ("The file is locked and cannot be deleted.<br />");
         $r->print(&done('Back',$url,$group));          $r->print(&done('Back',$url));
     } else {      } else {
         if (scalar(@files)) {          if (scalar(@files)) {
             &open_form($r,$url);              &open_form($r,$url);
             $r->print('<p>'.&mt('Delete').' '.&display_file(undef,\@files).'?</p>');              $r->print('<p>'.&mt('Delete').' '.&display_file(undef,\@files).'?</p>');
             &close_form($r,$url,$group);              &close_form($r,$url);
         } else {          } else {
             $r->print("No file was checked to delete.<br />");              $r->print("No file was checked to delete.<br />");
             $r->print(&done(undef,$url,$group));              $r->print(&done(undef,$url));
         }          }
     }      }
 }   } 
   
 sub delete_confirmed {  sub delete_confirmed {
     my ($r,$url,$group)=@_;      my ($r,$url)=@_;
     my @files=&Apache::loncommon::get_env_multiple('form.selectfile');      my @files=&Apache::loncommon::get_env_multiple('form.selectfile');
     my $result;      my $result;
     my ($uname,$udom) = &get_name_dom($group);      my ($uname,$udom) = &get_name_dom();
     my $port_path = &get_port_path($group);      my $port_path = &get_port_path();
     foreach my $delete_file (@files) {      foreach my $delete_file (@files) {
         $result=&Apache::lonnet::removeuserfile($uname,$udom,$port_path.          $result=&Apache::lonnet::removeuserfile($uname,$udom,$port_path.
        $env{'form.currentpath'}.         $env{'form.currentpath'}.
Line 448  sub delete_confirmed { Line 550  sub delete_confirmed {
   ') while trying to delete '.&display_file(undef, $delete_file).'</span><br />');    ') while trying to delete '.&display_file(undef, $delete_file).'</span><br />');
         }          }
     }      }
     $r->print(&done(undef,$url,$group));      $r->print(&done(undef,$url));
 }  }
   
 sub delete_dir {  sub delete_dir {
     my ($r,$url,$group)=@_;      my ($r,$url)=@_;
     &open_form($r,$url);      &open_form($r,$url);
     $r->print('<p>'.&mt('Delete').' '.&display_file().'?</p>');      $r->print('<p>'.&mt('Delete').' '.&display_file().'?</p>');
     &close_form($r,$url,$group);      &close_form($r,$url);
 }   } 
   
 sub delete_dir_confirmed {  sub delete_dir_confirmed {
     my ($r,$url,$group)=@_;      my ($r,$url)=@_;
     my $directory_name = $env{'form.currentpath'};      my $directory_name = $env{'form.currentpath'};
     $directory_name =~ s|/$||; # remove any trailing slash      $directory_name =~ s|/$||; # remove any trailing slash
     my ($uname,$udom) = &get_name_dom($group);      my ($uname,$udom) = &get_name_dom();
     my $namespace = &get_namespace($group);      my $namespace = &get_namespace();
     my $port_path = &get_port_path($group);      my $port_path = &get_port_path();
     my $result=&Apache::lonnet::removeuserfile($uname,$udom,$port_path.      my $result=&Apache::lonnet::removeuserfile($uname,$udom,$port_path.
        $directory_name);         $directory_name);
                 
Line 484  sub delete_dir_confirmed { Line 586  sub delete_dir_confirmed {
         }          }
         $env{'form.currentpath'} = $directory_name;          $env{'form.currentpath'} = $directory_name;
     }      }
     $r->print(&done(undef,$url,$group));      $r->print(&done(undef,$url));
 }  }
   
 sub rename {  sub rename {
     my ($r,$url,$group)=@_;      my ($r,$url)=@_;
     my $file_name = $env{'form.currentpath'}.$env{'form.rename'};      my $file_name = $env{'form.currentpath'}.$env{'form.rename'};
     my ($uname,$udom) = &get_name_dom($group);      my ($uname,$udom) = &get_name_dom();
     $file_name = &prepend_group($file_name,$group);      $file_name = &prepend_group($file_name);
     if (&Apache::lonnet::is_locked($file_name,$udom,$uname) eq 'true') {      if (&Apache::lonnet::is_locked($file_name,$udom,$uname) eq 'true') {
         $r->print ("The file is locked and cannot be renamed.<br />");          $r->print ("The file is locked and cannot be renamed.<br />");
         $r->print(&done(undef,$url,$group));          $r->print(&done(undef,$url));
     } else {      } else {
         &open_form($r,$url);          &open_form($r,$url);
         $r->print('<p>'.&mt('Rename').' '.&display_file().' to           $r->print('<p>'.&mt('Rename').' '.&display_file().' to 
                    <input name="filenewname" type="input" size="50" />?</p>');                     <input name="filenewname" type="input" size="50" />?</p>');
         &close_form($r,$url,$group);          &close_form($r,$url);
     }      }
 }  }
   
 sub rename_confirmed {  sub rename_confirmed {
     my ($r,$url,$group)=@_;      my ($r,$url)=@_;
     my $filenewname=&Apache::lonnet::clean_filename($env{'form.filenewname'});      my $filenewname=&Apache::lonnet::clean_filename($env{'form.filenewname'});
     my ($uname,$udom) = &get_name_dom($group);      my ($uname,$udom) = &get_name_dom();
     my $port_path = &get_port_path($group);      my $port_path = &get_port_path();
     if ($filenewname eq '') {      if ($filenewname eq '') {
  $r->print('<span class="LC_error">'.   $r->print('<span class="LC_error">'.
   &mt("Error: no valid filename was provided to rename to.").    &mt("Error: no valid filename was provided to rename to.").
   '</span><br />');    '</span><br />');
  $r->print(&done(undef,$url,$group));   $r->print(&done(undef,$url));
  return;   return;
     }       } 
     my $result=      my $result=
Line 530  sub rename_confirmed { Line 632  sub rename_confirmed {
       '<strong>'.&display_file('',$env{'form.filenewname'}).'</strong>',        '<strong>'.&display_file('',$env{'form.filenewname'}).'</strong>',
       '<strong>'.&display_file('',$filenewname).'</strong>'));        '<strong>'.&display_file('',$filenewname).'</strong>'));
     }      }
     $r->print(&done(undef,$url,$group));      $r->print(&done(undef,$url));
 }  }
   
 sub display_access {  sub display_access {
     my ($r,$url,$group,$can_setacl) = @_;      my ($r,$url,$group,$can_setacl,$port_path) = @_;
     my ($uname,$udom) = &get_name_dom($group);      my ($uname,$udom) = &get_name_dom();
     my $file_name = $env{'form.currentpath'}.$env{'form.access'};      my $file_name = $env{'form.currentpath'}.$env{'form.access'};
     $file_name = &prepend_group($file_name,$group);      $file_name = &prepend_group($file_name);
     my $current_permissions = &Apache::lonnet::get_portfile_permissions($udom,      my $current_permissions = &Apache::lonnet::get_portfile_permissions($udom,
                                                                         $uname);                                                                          $uname);
     my %access_controls = &Apache::lonnet::get_access_controls($current_permissions,$group,$file_name);      my %access_controls = &Apache::lonnet::get_access_controls($current_permissions,$group,$file_name);
     my $aclcount = keys(%access_controls);      my $aclcount = keys(%access_controls);
     my $header = '<h3>'.&mt('Allowing others to retrieve portfolio file: [_1]',$env{'form.currentpath'}.$env{'form.access'}).'</h3>';      my $header = '<h3>'.&mt('Allowing others to retrieve file: [_1]',$port_path.$env{'form.currentpath'}.$env{'form.access'}).'</h3>';
     my $info .= &mt('Access to this file by others can be set to be one or more of the following types: public, passphrase-protected or conditional.').'<br /><ul><li>'.&mt('Public files are available to anyone without the need for login.').'</li><li>'.&mt('Passphrase-protected files do not require log-in, but will require the viewer to enter the passphrase you set.').'</li><li>'.&mt('Conditional files are accessible to logged-in users with accounts in the LON-CAPA network, who satisfy the conditions you set.').'<br />'.&mt('The conditions can include affiliation with a particular course or group, or a user account in a specific domain.').'<br />'.&mt('Alternatively access can be granted to people with specific LON-CAPA usernames and domains.').'</li></ul>';      my $info .= &mt('Access to this file by others can be set to be one or ');
       $info .= &mt('more of the following types: public, passphrase-protected or conditional.');
       $info .= '<br /><ul><li>'.&mt('Public files are available to anyone without the need for login.');
       $info .= '</li><li>'.&mt('Passphrase-protected files do not require log-in, but will require ');
       $info .= &mt('the viewer to enter the passphrase you set.');
       $info .= '</li><li>'.&mt('Conditional files are accessible to logged-in users with accounts ');
       $info .= &mt('in the LON-CAPA network, who satisfy the conditions you set.').'<br />';
       $info .= &mt('The conditions can include affiliation with a particular course or group, ');
       $info .= &mt('or a user account in a specific domain.').'<br />';
       $info .= &mt('Alternatively access can be granted to people with specific LON-CAPA usernames and domains.').'</li></ul>';
       if ($group eq '') {
           $info .= (&mt("Direct others to the 'Display file listing' link (shown when there are viewable files) on your personal information page:<br /><a href='/adm/$udom/$uname/aboutme'>http://$ENV{'SERVER_NAME'}/adm/$udom/$uname/aboutme</a>"));
       }
       
     if ($can_setacl) {      if ($can_setacl) {
         &open_form($r,$url);          &open_form($r,$url);
         $r->print($header.$info);          $r->print($header.$info);
Line 552  sub display_access { Line 667  sub display_access {
                         'continue' => &mt('Proceed'),                          'continue' => &mt('Proceed'),
                         'cancel' => &mt('Back to directory listing'),                          'cancel' => &mt('Back to directory listing'),
                       };                        };
         &close_form($r,$url,$group,$button_text);          &close_form($r,$url,$button_text);
     } else {      } else {
         $r->print($header);          $r->print($header);
         if ($aclcount) {            if ($aclcount) {  
             $r->print($info);              $r->print($info);
         }          }
         &view_access_settings($r,$url,$group,$access_controls{$file_name},          &view_access_settings($r,$url,$access_controls{$file_name},$aclcount);
                               $aclcount);  
     }      }
 }  }
   
 sub view_access_settings {  sub view_access_settings {
     my ($r,$url,$group,$access_controls,$aclcount) = @_;      my ($r,$url,$access_controls,$aclcount) = @_;
     my ($showstart,$showend);      my ($showstart,$showend);
     my %todisplay;      my %todisplay;
     foreach my $key (sort(keys(%{$access_controls}))) {      foreach my $key (sort(keys(%{$access_controls}))) {
Line 585  sub view_access_settings { Line 699  sub view_access_settings {
     } else {      } else {
         $r->print(&mt('No access control settings currently exist for this file.<br />' ));          $r->print(&mt('No access control settings currently exist for this file.<br />' ));
     }      }
     my $group_arg;      my %anchor_fields = (
     if ($group) {          'currentpath' => $env{'form.currentpath'}
         $group_arg = '&amp;group='.$group;      );
     }      $r->print('<br />'.&make_anchor($url, \%anchor_fields, &mt('Return to directory listing')));
     $r->print('<br /><a href="'.$url.'?currentpath='.$env{'form.currentpath'}.  
               $group_arg.'">'.&mt('Return to directory listing').'</a>');  
     return;      return;
 }  }
   
Line 698  sub build_access_summary { Line 810  sub build_access_summary {
   
   
 sub update_access {  sub update_access {
     my ($r,$url,$group) = @_;      my ($r,$url,$group,$port_path) = @_;
     my $totalprocessed = 0;      my $totalprocessed = 0;
     my %processing;      my %processing;
     my %title  = (      my %title  = (
Line 723  sub update_access { Line 835  sub update_access {
         }          }
     }      }
     my $file_name = $env{'form.currentpath'}.$env{'form.selectfile'};      my $file_name = $env{'form.currentpath'}.$env{'form.selectfile'};
     $r->print('<h3>'.&mt('Allowing others to retrieve portfolio file: [_1]',      $r->print('<h3>'.&mt('Allowing others to retrieve file: [_1]',
               $file_name).'</h3>'."\n");                $port_path.$file_name).'</h3>'."\n");
     $file_name = &prepend_group($file_name,$group);      $file_name = &prepend_group($file_name);
     my ($uname,$udom) = &get_name_dom($group);      my ($uname,$udom) = &get_name_dom();
     my ($errors,$outcome,$deloutcome,$new_values,$translation);      my ($errors,$outcome,$deloutcome,$new_values,$translation);
     if ($totalprocessed) {      if ($totalprocessed) {
         ($outcome,$deloutcome,$new_values,$translation) =          ($outcome,$deloutcome,$new_values,$translation) =
Line 797  sub update_access { Line 909  sub update_access {
     if ($allnew > 0) {      if ($allnew > 0) {
         my $now = time;          my $now = time;
         my $then = $now + (60*60*24*180); # six months approx.          my $then = $now + (60*60*24*180); # six months approx.
         &open_form($r,$url,$group);          &open_form($r,$url);
         foreach my $newitem ('course','group','domains','users') {          foreach my $newitem ('course','group','domains','users') {
             if ($env{'form.new'.$newitem} > 0) {              if ($env{'form.new'.$newitem} > 0) {
                 $r->print('<br />'.&mt('Add new <b>[_1]-based</b> access control for portfolio file: <b>[_2]</b>',$newitem,$env{'form.currentpath'}.$env{'form.selectfile'}).'<br /><br />');                  $r->print('<br />'.&mt('Add new <b>[_1]-based</b> access control for portfolio file: <b>[_2]</b>',$newitem,$env{'form.currentpath'}.$env{'form.selectfile'}).'<br /><br />');
Line 812  sub update_access { Line 924  sub update_access {
                                     $access_controls{$file_name},$now,$then);                                      $access_controls{$file_name},$now,$then);
             }              }
         }          }
         &close_form($r,$url,$group);          &close_form($r,$url);
     } else {      } else {
         my $group_arg;          my %anchor_fields = (
         if ($group) {              'currentpath' => $env{'form.currentpath'},
             $group_arg = '&amp;group='.$group;              'access' => $env{'form.selectfile'}
         }          );
         $r->print('<br /><a href="'.$url.'?access='.$env{'form.selectfile'}.          $r->print('<br />'.&make_anchor($url, \%anchor_fields, &mt('Display all access settings for this file')));
                   '&amp;currentpath='.$env{'form.currentpath'}.$group_arg.'">'.          delete $anchor_fields{'access'};
                    &mt('Display all access settings for this file').'</a>');          $r->print('&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'.&make_anchor($url,\%anchor_fields,&mt('Return to directory listing')));
     }      }
     return;      return;
 }  }
Line 1388  END_SCRIPT Line 1500  END_SCRIPT
 }  }
   
 sub select_files {  sub select_files {
     my ($r,$group) = @_;      my ($r) = @_;
     if ($env{'form.continue'} eq 'true') {      if ($env{'form.continue'} eq 'true') {
         # here we update the selections for the currentpath          # here we update the selections for the currentpath
         # eventually, have to handle removing those not checked, but . . .           # eventually, have to handle removing those not checked, but . . . 
Line 1432  ENDSMP Line 1544  ENDSMP
  }   }
     }      }
 }  }
   
 sub upload {  sub upload {
     my ($r,$url,$group)=@_;      my ($r,$url,$group)=@_;
     my $fname=$env{'form.uploaddoc.filename'};      my $fname=$env{'form.uploaddoc.filename'};
Line 1447  sub upload { Line 1560  sub upload {
     }      }
     $fname=&Apache::lonnet::clean_filename($fname);      $fname=&Apache::lonnet::clean_filename($fname);
   
     my $portfolio_root=&get_portfolio_root($group);      my $portfolio_root=&get_portfolio_root();
     my ($uname,$udom) = &get_name_dom($group);      my ($uname,$udom) = &get_name_dom();
     my $port_path = &get_port_path($group);      my $port_path = &get_port_path();
     # Fixme --- Move the checking for existing file to LOND error return      # Fixme --- Move the checking for existing file to LOND error return
     my @dir_list=&get_dir_list($portfolio_root,$group);      my @dir_list=&get_dir_list($portfolio_root);
     my $found_file = 0;      my $found_file = 0;
     my $locked_file = 0;      my $locked_file = 0;
     foreach my $line (@dir_list) {      foreach my $line (@dir_list) {
         my ($file_name)=split(/\&/,$line,2);          my ($file_name)=split(/\&/,$line,2);
         if ($file_name eq $fname){          if ($file_name eq $fname){
             $file_name = $env{'form.currentpath'}.$file_name;              $file_name = $env{'form.currentpath'}.$file_name;
             $file_name = &prepend_group($file_name,$group);              $file_name = &prepend_group($file_name);
             $found_file = 1;              $found_file = 1;
             if (defined($group)) {  
                 $file_name = $group.'/'.$file_name;  
             }  
             if (&Apache::lonnet::is_locked($file_name,$udom,$uname) eq 'true') {              if (&Apache::lonnet::is_locked($file_name,$udom,$uname) eq 'true') {
                 $locked_file = 1;                  $locked_file = 1;
             }               } 
Line 1472  sub upload { Line 1582  sub upload {
     if (($current_disk_usage + $filesize) > $disk_quota){      if (($current_disk_usage + $filesize) > $disk_quota){
         $r->print('<span class="LC_error">Unable to upload <strong>'.$fname.' (size = '.$filesize.' kilobytes)</strong>. Disk quota will be exceeded.</span>'.          $r->print('<span class="LC_error">Unable to upload <strong>'.$fname.' (size = '.$filesize.' kilobytes)</strong>. Disk quota will be exceeded.</span>'.
                   '<br />Disk quota is '.$disk_quota.' kilobytes. Your current disk usage is '.$current_disk_usage.' kilobytes.');                    '<br />Disk quota is '.$disk_quota.' kilobytes. Your current disk usage is '.$current_disk_usage.' kilobytes.');
         $r->print(&done('Back',$url,$group));          $r->print(&done('Back',$url));
     }       } 
     elsif ($found_file){      elsif ($found_file){
         if ($locked_file){          if ($locked_file){
             $r->print('<span class="LC_error">'.'Unable to upload <strong>'.$fname.'</strong>, a <strong>locked</strong> file by that name was found in <strong>'.$port_path.$env{'form.currentpath'}.'</strong></span>'.              $r->print('<span class="LC_error">'.'Unable to upload <strong>'.$fname.'</strong>, a <strong>locked</strong> file by that name was found in <strong>'.$port_path.$env{'form.currentpath'}.'</strong></span>'.
                   '<br />You will be able to rename or delete existing '.$fname.' after a grade has been assigned.');                    '<br />You will be able to rename or delete existing '.$fname.' after a grade has been assigned.');
             $r->print(&done('Back',$url,$group));                    $r->print(&done('Back',$url));      
         } else {             } else {   
             $r->print('<span class="LC_error">'.'Unable to upload <strong>'.$fname.'</strong>, a file by that name was found in <strong>'.$port_path.$env{'form.currentpath'}.'</strong></span>'.              $r->print('<span class="LC_error">'.'Unable to upload <strong>'.$fname.'</strong>, a file by that name was found in <strong>'.$port_path.$env{'form.currentpath'}.'</strong></span>'.
                   '<br />To upload, rename or delete existing '.$fname.' in '.$port_path.$env{'form.currentpath'});                    '<br />To upload, rename or delete existing '.$fname.' in '.$port_path.$env{'form.currentpath'});
             $r->print(&done('Back',$url,$group));              $r->print(&done('Back',$url));
         }          }
     } else {      } else {
         my $result=&Apache::lonnet::userfileupload('uploaddoc','',          my $result=&Apache::lonnet::userfileupload('uploaddoc','',
Line 1490  sub upload { Line 1600  sub upload {
         if ($result !~ m|^/uploaded/|) {          if ($result !~ m|^/uploaded/|) {
             $r->print('<span class="LC_error">'.'An errror occured ('.$result.              $r->print('<span class="LC_error">'.'An errror occured ('.$result.
               ') while trying to upload '.&display_file().'</span><br />');                ') while trying to upload '.&display_file().'</span><br />');
     $r->print(&done('Back',$url,$group));      $r->print(&done('Back',$url));
         } else {          } else {
             $r->print(&done(undef,$url,$group));              $r->print(&done(undef,$url));
         }          }
     }      }
 }  }
   
 sub lock_info {  sub lock_info {
     my ($r,$url,$group) = @_;      my ($r,$url,$group) = @_;
     my ($uname,$udom) = &get_name_dom($group);      my ($uname,$udom) = &get_name_dom();
     my $current_permissions = &Apache::lonnet::get_portfile_permissions($udom,      my $current_permissions = &Apache::lonnet::get_portfile_permissions($udom,
                                                                        $uname);                                                                         $uname);
     my $file_name = $env{'form.lockinfo'};      my $file_name = $env{'form.lockinfo'};
     $file_name = &prepend_group($file_name,$group);      $file_name = &prepend_group($file_name);
     if (defined($file_name) && defined($$current_permissions{$file_name})) {      if (defined($file_name) && defined($$current_permissions{$file_name})) {
         foreach my $array_item (@{$$current_permissions{$file_name}}) {          foreach my $array_item (@{$$current_permissions{$file_name}}) {
             if (ref($array_item) eq 'ARRAY') {              if (ref($array_item) eq 'ARRAY') {
Line 1526  sub lock_info { Line 1636  sub lock_info {
             }              }
         }          }
     }      }
     $r->print(&done('Back',$url,$group));      $r->print(&done('Back',$url));
     return 'ok';      return 'ok';
 }  }
   
 sub createdir {  sub createdir {
     my ($r,$url,$group)=@_;      my ($r,$url)=@_;
     my $newdir=&Apache::lonnet::clean_filename($env{'form.newdir'});      my $newdir=&Apache::lonnet::clean_filename($env{'form.newdir'});
     if ($newdir eq '') {      if ($newdir eq '') {
     $r->print('<span class="LC_error">'.      $r->print('<span class="LC_error">'.
       &mt("Error: no directory name was provided.").        &mt("Error: no directory name was provided.").
       '</span><br />');        '</span><br />');
     $r->print(&done(undef,$url,$group));      $r->print(&done(undef,$url));
     return;      return;
     }      }
     my $portfolio_root = &get_portfolio_root($group);       my $portfolio_root = &get_portfolio_root(); 
     my @dir_list=&get_dir_list($portfolio_root,$group);      my @dir_list=&get_dir_list($portfolio_root);
     my $found_file = 0;      my $found_file = 0;
     foreach my $line (@dir_list) {      foreach my $line (@dir_list) {
         my ($filename)=split(/\&/,$line,2);          my ($filename)=split(/\&/,$line,2);
Line 1552  sub createdir { Line 1663  sub createdir {
        $r->print('<span class="LC_error">'.'Unable to create a directory named <strong>'.$newdir.         $r->print('<span class="LC_error">'.'Unable to create a directory named <strong>'.$newdir.
                ' </strong>a file or directory by that name already exists.</span><br />');                 ' </strong>a file or directory by that name already exists.</span><br />');
     } else {      } else {
         my ($uname,$udom) = &get_name_dom($group);          my ($uname,$udom) = &get_name_dom();
         my $port_path = &get_port_path($group);          my $port_path = &get_port_path();
         my $result=&Apache::lonnet::mkdiruserfile($uname,$udom,          my $result=&Apache::lonnet::mkdiruserfile($uname,$udom,
          $port_path.$env{'form.currentpath'}.$newdir);           $port_path.$env{'form.currentpath'}.$newdir);
         if ($result ne 'ok') {          if ($result ne 'ok') {
Line 1564  sub createdir { Line 1675  sub createdir {
     if ($newdir ne $env{'form.newdir'}) {      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("The new directory name was changed from:<br /><strong>".$env{'form.newdir'}."</strong> to <strong>$newdir </strong>");  
     }      }
     $r->print(&done(undef,$url,$group));      $r->print(&done(undef,$url));
 }  }
   
 sub get_portfolio_root {  sub get_portfolio_root {
     my ($group) = @_;      my ($uname,$udom) = &get_name_dom();
     my ($portfolio_root,$udom,$uname,$path);      my $path;
     ($uname,$udom) = &get_name_dom($group);      if (defined($env{'form.group'})) {
     if (defined($group)) {          $path = '/userfiles/groups/'.$env{'form.group'}.'/portfolio';
         $path = '/userfiles/groups/'.$group.'/portfolio';  
     } else {      } else {
         $path = '/userfiles/portfolio';          $path = '/userfiles/portfolio';
     }      }
Line 1597  sub get_group_quota { Line 1707  sub get_group_quota {
 }   } 
   
 sub get_dir_list {  sub get_dir_list {
     my ($portfolio_root,$group) = @_;      my ($portfolio_root) = @_;
     my ($uname,$udom) = &get_name_dom($group);      my ($uname,$udom) = &get_name_dom();
     return &Apache::lonnet::dirlist($env{'form.currentpath'},      return &Apache::lonnet::dirlist($env{'form.currentpath'},
                                           $udom,$uname,$portfolio_root);                                            $udom,$uname,$portfolio_root);
 }  }
   
 sub get_name_dom {  sub get_name_dom {
     my ($group) = @_;  
     my ($uname,$udom);      my ($uname,$udom);
     if (defined($group)) {      if (defined($env{'form.group'})) {
         $udom = $env{'course.'.$env{'request.course.id'}.'.domain'};          $udom = $env{'course.'.$env{'request.course.id'}.'.domain'};
         $uname = $env{'course.'.$env{'request.course.id'}.'.num'};          $uname = $env{'course.'.$env{'request.course.id'}.'.num'};
     } else {      } else {
Line 1617  sub get_name_dom { Line 1726  sub get_name_dom {
 }  }
   
 sub prepend_group {  sub prepend_group {
     my ($filename,$group) = @_;      my ($filename) = @_;
     if (defined($group)) {      if (defined($env{'form.group'})) {
         $filename = $group.$filename;          $filename = $env{'form.group'}.$filename;
     }      }
     return $filename;      return $filename;
 }  }
   
 sub get_namespace {  sub get_namespace {
     my ($group) = @_;  
     my $namespace = 'portfolio';      my $namespace = 'portfolio';
     if (defined($group)) {      if (defined($env{'form.group'})) {
         my ($uname,$udom) = &get_name_dom($group);          my ($uname,$udom) = &get_name_dom();
         $namespace .= '_'.$udom.'_'.$uname.'_'.$group;          $namespace .= '_'.$udom.'_'.$uname.'_'.$env{'form.group'};
     }      }
     return $namespace;      return $namespace;
 }  }
   
 sub get_port_path {  sub get_port_path {
     my ($group) = @_;  
     my $port_path;      my $port_path;
     if (defined($group)) {      if (defined($env{'form.group'})) {
        $port_path = "groups/$group/portfolio";         $port_path = "groups/$env{'form.group'}/portfolio";
     } else {      } else {
        $port_path = 'portfolio';         $port_path = 'portfolio';
     }      }
Line 1646  sub get_port_path { Line 1753  sub get_port_path {
 }  }
   
 sub missing_priv {  sub missing_priv {
     my ($r,$url,$priv,$group) = @_;      my ($r,$url,$priv) = @_;
     my $longtext = {      my $longtext = {
                       upload => 'upload files',                        upload => 'upload files',
                       delete => 'delete files',                        delete => 'delete files',
Line 1664  sub missing_priv { Line 1771  sub missing_priv {
     $r->print(&mt('<h3>Action disallowed</h3>'));      $r->print(&mt('<h3>Action disallowed</h3>'));
     $r->print(&mt('You do not have sufficient privileges to [_1] ',      $r->print(&mt('You do not have sufficient privileges to [_1] ',
                   $longtext->{$priv}));                    $longtext->{$priv}));
     if ($group) {      if (defined($env{'form.group'})) {
         $r->print(&mt("in the group's file repository."));          $r->print(&mt("in the group's file repository."));
         $rtnlink .= '&group='.$group;          $rtnlink .= &group_args()
     } else {      } else {
         $r->print(&mt('in this portfolio.'));          $r->print(&mt('in this portfolio.'));
     }      }
Line 1677  sub missing_priv { Line 1784  sub missing_priv {
 }  }
   
 sub coursegrp_portfolio_header {  sub coursegrp_portfolio_header {
     my ($cdom,$cnum,$group,$grp_desc)=@_;      my ($cdom,$cnum,$grp_desc)=@_;
     my $gpterm  = &Apache::loncommon::group_term();      my $gpterm  = &Apache::loncommon::group_term();
     my $ucgpterm = $gpterm;      my $ucgpterm = $gpterm;
     $ucgpterm =~ s/^(\w)/uc($1)/e;      $ucgpterm =~ s/^(\w)/uc($1)/e;
       if ($env{'form.ref'}) {
           &Apache::lonhtmlcommon::add_breadcrumb
               ({href=>"/adm/coursegroups",
                 text=>"Groups",
                 title=>"Course Groups"});
       }
     &Apache::lonhtmlcommon::add_breadcrumb      &Apache::lonhtmlcommon::add_breadcrumb
         ({href=>"/adm/$cdom/$cnum/$group/smppg",          ({href=>"/adm/$cdom/$cnum/$env{'form.group'}/smppg?ref=$env{'form.ref'}",
           text=>"$ucgpterm: $grp_desc",            text=>"$ucgpterm: $grp_desc",
           title=>"Go to group's home page"},            title=>"Go to group's home page"},
          {href=>"//?group=$group",           {href=>"/adm/coursegrp_portfolio?".&group_args(),
           text=>"Group Portfolio",            text=>"Group Portfolio",
           title=>"Display group portfolio"},);            title=>"Display group portfolio"});
     my $output = &Apache::lonhtmlcommon::breadcrumbs(      my $output = &Apache::lonhtmlcommon::breadcrumbs(
                          &mt('[_1] portfolio files - [_2]',$gpterm,$grp_desc));                           &mt('[_1] portfolio files - [_2]',$gpterm,$grp_desc));
     return $output;      return $output;
Line 1700  sub handler { Line 1813  sub handler {
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},      &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
          ['selectfile','currentpath','meta','lockinfo','currentfile','action',           ['selectfile','currentpath','meta','lockinfo','currentfile','action',
   'fieldname','mode','rename','continue','group','access','setnum',    'fieldname','mode','rename','continue','group','access','setnum',
           'cnum','cdom','type','setroles','showversions']);            'cnum','cdom','type','setroles','showversions','ref']);
     my ($uname,$udom,$portfolio_root,$url,$group,$caller,$title,$grp_desc);      my ($uname,$udom,$portfolio_root,$url,$caller,$title,$group,$grp_desc);
     if ($r->uri =~ m|^(/adm/)([^/]+)|) {      if ($r->uri =~ m|^(/adm/)([^/]+)|) {
         $url = $1.$2;          $url = $1.$2;
         $caller = $2;          $caller = $2;
Line 1716  sub handler { Line 1829  sub handler {
             return HTTP_NOT_ACCEPTABLE;              return HTTP_NOT_ACCEPTABLE;
         }          }
         my $earlyout = 0;          my $earlyout = 0;
         my $view_permission = &Apache::lonnet::allowed('vcg',          my $view_permission = 
                                                 $env{'request.course.id'});             &Apache::lonnet::allowed('vcg',$env{'request.course.id'}.($env{'request.course.sec'}?'/'.$env{'request.course.sec'}:''));
         $group = $env{'form.group'};          $env{'form.group'} =~ s/\W//g;
         $group =~ s/\W//g;   $group = $env{'form.group'};
         if ($group) {          if ($group) {
             ($uname,$udom) = &get_name_dom($group);              ($uname,$udom) = &get_name_dom();
             my %curr_groups = &Apache::longroup::coursegroups($udom,$uname,              my %curr_groups = &Apache::longroup::coursegroups($udom,$uname,
        $group);          $group); 
             if (%curr_groups) {              if (%curr_groups) {
Line 1730  sub handler { Line 1843  sub handler {
                 $grp_desc = &unescape($grp_content{'description'});                  $grp_desc = &unescape($grp_content{'description'});
                 if (($view_permission) || (&Apache::lonnet::allowed('rgf',                  if (($view_permission) || (&Apache::lonnet::allowed('rgf',
                                       $env{'request.course.id'}.'/'.$group))) {                                        $env{'request.course.id'}.'/'.$group))) {
                     $portfolio_root = &get_portfolio_root($group);                      $portfolio_root = &get_portfolio_root();
                 } else {                  } else {
                     $r->print('You do not have the privileges required to access the shared files space for this group.');                      $r->print('You do not have the privileges required to access the shared files space for this group.');
                     $earlyout = 1;                      $earlyout = 1;
Line 1774  sub handler { Line 1887  sub handler {
         $can_setacl = 1;          $can_setacl = 1;
     }      }
   
       my $port_path = &get_port_path();
     &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;
Line 1799  sub handler { Line 1913  sub handler {
         &open_form($r,$url);          &open_form($r,$url);
 #        $r->print(&edit_meta_data($r, $env{'form.currentpath'}.$env{'form.selectfile'}));  #        $r->print(&edit_meta_data($r, $env{'form.currentpath'}.$env{'form.selectfile'}));
         $r->print('Edit the meta data<br />');          $r->print('Edit the meta data<br />');
         &close_form($r,$url,$group);          &close_form($r,$url);
     }      }
     if ($env{'form.store'}) {      if ($env{'form.store'}) {
     }      }
Line 1808  sub handler { Line 1922  sub handler {
         if ($can_upload) {          if ($can_upload) {
     &upload($r,$url,$group);      &upload($r,$url,$group);
         } else {          } else {
             &missing_priv($r,$url,'upload',$group),              &missing_priv($r,$url,'upload');
         }          }
     } elsif ($env{'form.action'} eq 'delete' && $env{'form.confirmed'}) {      } elsif ($env{'form.action'} eq 'delete' && $env{'form.confirmed'}) {
         if ($can_delete) {          if ($can_delete) {
     &delete_confirmed($r,$url,$group);      &delete_confirmed($r,$url);
         } else {          } else {
             &missing_priv($r,$url,'delete',$group);              &missing_priv($r,$url,'delete');
         }          }
     } elsif ($env{'form.action'} eq 'delete') {      } elsif ($env{'form.action'} eq 'delete') {
         if ($can_delete) {          if ($can_delete) {
     &delete($r,$url,$group);      &delete($r,$url);
         } else {          } else {
             &missing_priv($r,$url,'delete',$group);              &missing_priv($r,$url,'delete');
         }          }
     } elsif ($env{'form.action'} eq 'deletedir' && $env{'form.confirmed'}) {      } elsif ($env{'form.action'} eq 'deletedir' && $env{'form.confirmed'}) {
         if ($can_delete) {          if ($can_delete) {
     &delete_dir_confirmed($r,$url,$group);      &delete_dir_confirmed($r,$url);
         } else {          } else {
             &missing_priv($r,$url,'delete',$group);              &missing_priv($r,$url,'delete');
         }          }
     } elsif ($env{'form.action'} eq 'deletedir') {      } elsif ($env{'form.action'} eq 'deletedir') {
         if ($can_delete) {          if ($can_delete) {
     &delete_dir($r,$url,$group);      &delete_dir($r,$url);
         } else {          } else {
             &missing_priv($r,$url,'delete',$group);              &missing_priv($r,$url,'delete');
         }          }
     } elsif ($env{'form.action'} eq 'rename' && $env{'form.confirmed'}) {      } elsif ($env{'form.action'} eq 'rename' && $env{'form.confirmed'}) {
         if ($can_modify) {          if ($can_modify) {
     &rename_confirmed($r,$url,$group);      &rename_confirmed($r,$url);
         } else {          } else {
             &missing_priv($r,$url,'rename',$group);              &missing_priv($r,$url,'rename');
         }          }
     } elsif ($env{'form.rename'}) {      } elsif ($env{'form.rename'}) {
         $env{'form.selectfile'} = $env{'form.rename'};          $env{'form.selectfile'} = $env{'form.rename'};
         $env{'form.action'} = 'rename';          $env{'form.action'} = 'rename';
         if ($can_modify) {          if ($can_modify) {
     &rename($r,$url,$group);      &rename($r,$url);
         } else {          } else {
             &missing_priv($r,$url,'rename',$group);              &missing_priv($r,$url,'rename');
         }          }
     } elsif ($env{'form.access'}) {      } elsif ($env{'form.access'}) {
         $env{'form.selectfile'} = $env{'form.access'};          $env{'form.selectfile'} = $env{'form.access'};
         $env{'form.action'} = 'chgaccess';          $env{'form.action'} = 'chgaccess';
         &display_access($r,$url,$group,$can_setacl);          &display_access($r,$url,$group,$can_setacl,$port_path);
     } elsif ($env{'form.action'} eq 'chgaccess') {      } elsif ($env{'form.action'} eq 'chgaccess') {
         if ($can_setacl) {          if ($can_setacl) {
             &update_access($r,$url,$group);              &update_access($r,$url,$group,$port_path);
         } else {          } else {
             &missing_priv($r,$url,'setacl',$group);              &missing_priv($r,$url,'setacl');
         }          }
     } elsif ($env{'form.action'} eq 'rolepicker') {      } elsif ($env{'form.action'} eq 'rolepicker') {
         if ($can_setacl) {           if ($can_setacl) { 
             &role_options_window($r);              &role_options_window($r);
         } else {          } else {
             &missing_priv($r,$url,'setacl',$group);              &missing_priv($r,$url,'setacl');
         }          }
     } elsif ($env{'form.createdir'}) {      } elsif ($env{'form.createdir'}) {
         if ($can_upload) {          if ($can_upload) {
     &createdir($r,$url,$group);      &createdir($r,$url);
         } else {          } else {
             &missing_priv($r,$url,'upload',$group);              &missing_priv($r,$url,'upload');
         }          }
     } elsif ($env{'form.lockinfo'}) {      } elsif ($env{'form.lockinfo'}) {
         &lock_info($r,$url,$group);          &lock_info($r,$url,$group);
Line 1879  sub handler { Line 1993  sub handler {
  }   }
         if ($caller eq 'coursegrp_portfolio') {          if ($caller eq 'coursegrp_portfolio') {
             &Apache::lonhtmlcommon::clear_breadcrumbs();              &Apache::lonhtmlcommon::clear_breadcrumbs();
             $r->print(&coursegrp_portfolio_header($udom,$uname,$group,$grp_desc));              $r->print(&coursegrp_portfolio_header($udom,$uname,$grp_desc));
         }          }
         my @dir_list=&get_dir_list($portfolio_root,$group);          my @dir_list=&get_dir_list($portfolio_root);
  if ($dir_list[0] eq 'no_such_dir'){   if ($dir_list[0] eq 'no_such_dir'){
     # two main reasons for this:      # two main reasons for this:
             #    1) never been here, so directory structure not created              #    1) never been here, so directory structure not created
     #    2) back-button navigation after deleting a directory      #    2) back-button navigation after deleting a directory
     if ($current_path eq '/'){      if ($current_path eq '/'){
         &Apache::lonnet::mkdiruserfile($uname,$udom,          &Apache::lonnet::mkdiruserfile($uname,$udom,
        &get_port_path($group));         &get_port_path());
     } else {      } else {
                 # some directory that snuck in get rid of the directory                  # some directory that snuck in get rid of the directory
                 # from the recent pulldown, just in case                  # from the recent pulldown, just in case
Line 1902  sub handler { Line 2016  sub handler {
         }          }
  # 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,$url,$current_path,$is_empty,\@dir_list,$group,   &display_common($r,$url,$current_path,$is_empty,\@dir_list,
                         $can_upload);   $can_upload);
         &display_directory($r,$url,$current_path,$is_empty,\@dir_list,$group,          &display_directory($r,$url,$current_path,$is_empty,\@dir_list,$group,
                            $can_upload,$can_modify,$can_delete,$can_setacl);                             $can_upload,$can_modify,$can_delete,$can_setacl);
  $r->print(&Apache::loncommon::end_page());   $r->print(&Apache::loncommon::end_page());

Removed from v.1.132  
changed lines
  Added in v.1.154


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.