Diff for /loncom/interface/portfolio.pm between versions 1.254.2.2 and 1.268

version 1.254.2.2, 2017/05/19 23:41:52 version 1.268, 2023/12/28 18:14:07
Line 112  sub display_common { Line 112  sub display_common {
 END  END
         }          }
   
           # Find space available before uploading
           my $free_space = &free_space($group);
   
         # Upload File          # Upload File
         $r->print('<div class="LC_left_float">'          $r->print('<div class="LC_left_float">'
                  .'<form method="post" enctype="multipart/form-data" action="'.$escuri.'">'                   .'<form method="post" enctype="multipart/form-data" action="'.$escuri.'">'
                  .'<fieldset>'                   .'<fieldset>'
                  .'<legend>'.$lt{'upload_label'}.'</legend>'                   .'<legend>'.$lt{'upload_label'}.'</legend>'
                  .$groupitem                    .$groupitem 
                  .'<input name="uploaddoc" type="file" />'                   .'<input name="uploaddoc" type="file" class="LC_flUpload" />'
                    .'<input type="hidden" id="LC_free_space" value="'.$free_space.'" />'
                  .'<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="action" value="'.$env{"form.action"}.'" />'
                  .'<input type="hidden" name="symb" value="'.$env{"form.symb"}.'" />'                   .'<input type="hidden" name="symb" value="'.$env{"form.symb"}.'" />'
Line 233  sub display_directory_line { Line 237  sub display_directory_line {
  if ($lock_info) {   if ($lock_info) {
     my %anchor_fields = ('lockinfo' => $fullpath);      my %anchor_fields = ('lockinfo' => $fullpath);
     if ($versions) { # hold the folder open      if ($versions) { # hold the folder open
         my ($fname,$version,$extension) = &Apache::grades::file_name_version_ext($fullpath);          my ($fname,$version,$extension) = &Apache::lonnet::file_name_version_ext($fullpath);
         $fname =~ s|^/||;          $fname =~ s|^/||;
         $anchor_fields{'showversions'} = $fname.'.'.$extension;          $anchor_fields{'showversions'} = $fname.'.'.$extension;
     }      }
Line 263  sub display_directory_line { Line 267  sub display_directory_line {
   
 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,$can_viewacl)=@_;
     my $iconpath= $r->dir_config('lonIconsURL') . "/";      my $iconpath= $r->dir_config('lonIconsURL') . "/";
     my $select_mode;      my $select_mode;
     my $checked_files;      my $checked_files;
     my $port_path = &get_port_path();      my $port_path = &get_port_path();
     my ($uname,$udom) = &get_name_dom($group);      my ($uname,$udom) = &get_name_dom($group);
     my $access_admin_text = &mt('View Status');      my $access_admin_text;
       if ($can_viewacl) {
           $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');
     }      }
Line 366  sub display_directory { Line 373  sub display_directory {
           } (@{$dir_list})) {            } (@{$dir_list})) {
        my ($filename,$dom,undef,$testdir,undef,undef,undef,undef,$size,undef,$mtime,undef,undef,undef,$obs,undef)=split(/\&/,$dir_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::lonnet::file_name_version_ext($filename);
        if ($version) {         if ($version) {
         my $fullpath = &prepend_group($current_path.$fname.'.'.$extension);          my $fullpath = &prepend_group($current_path.$fname.'.'.$extension);
            push(@{ $versioned{$fullpath} },             push(@{ $versioned{$fullpath} },
Line 379  sub display_directory { Line 386  sub display_directory {
     my $zerobyte;      my $zerobyte;
     foreach my $dir_line (@dir_lines) {      foreach my $dir_line (@dir_lines) {
         my ($filename,$dom,$testdir,$size,$mtime,$obs) = @$dir_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::lonnet::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;
        my $show_versions;         my $show_versions;
Line 483  sub display_directory { Line 490  sub display_directory {
     my $cond_access = 0;      my $cond_access = 0;
     foreach my $key (sort(keys(%{$access_controls{$fullpath}}))) {      foreach my $key (sort(keys(%{$access_controls{$fullpath}}))) {
  my ($num,$scope,$end,$start) = &unpack_acc_key($key);   my ($num,$scope,$end,$start) = &unpack_acc_key($key);
                           next if ($scope eq 'ip');   
  if (($now > $start) && (!$end || $end > $now)) {   if (($now > $start) && (!$end || $end > $now)) {
     if ($scope eq 'public')  {      if ($scope eq 'public')  {
  $pub_access = 1;   $pub_access = 1;
Line 510  sub display_directory { Line 518  sub display_directory {
     }      }
  }   }
                 &display_directory_line($r,$select_mode, $filename, $mtime, $size, $css_class, $line,                   &display_directory_line($r,$select_mode, $filename, $mtime, $size, $css_class, $line, 
                                         \%access_controls, $curr_access,$now, $version_flag, $href_location,                                           \%access_controls, $curr_access, $now, $version_flag, $href_location, 
                                         $url, $current_path, $access_admin_text);                                          $url, $current_path, $access_admin_text);
  if ($show_versions) {   if ($show_versions) {
     foreach my $dir_line (@{ $versioned{$fullpath} }) {      foreach my $dir_line (@{ $versioned{$fullpath} }) {
Line 883  sub access_for_renamed { Line 891  sub access_for_renamed {
 }  }
   
 sub display_access {  sub display_access {
     my ($r,$url,$group,$can_setacl,$port_path,$action) = @_;      my ($r,$url,$group,$can_setacl,$can_viewacl,$port_path,$action) = @_;
     my ($uname,$udom) = &get_name_dom($group);      my ($uname,$udom) = &get_name_dom($group);
     my $file_name = $env{'form.currentpath'}.$env{'form.access'};      my $file_name = $env{'form.currentpath'}.$env{'form.access'};
     $file_name = &prepend_group($file_name);      $file_name = &prepend_group($file_name);
Line 893  sub display_access { Line 901  sub display_access {
     my $aclcount = keys(%access_controls);      my $aclcount = keys(%access_controls);
     my ($header,$info);      my ($header,$info);
     if ($action eq 'chgaccess') {      if ($action eq 'chgaccess') {
           my $uhome = &Apache::lonnet::homeserver($uname,$udom);
           my $prefix = &Apache::lonnet::url_prefix($r,$udom,$uhome,'web');
         $header =          $header =
             '<h2>'              '<h2>'
             .&mt('Allowing others to retrieve file: [_1]'              .&mt('Allowing others to retrieve file: [_1]'
Line 905  sub display_access { Line 915  sub display_access {
         $info .= '</li><li>'.&mt('Passphrase-protected files do not require log-in, but will require the viewer to enter the passphrase you set.');          $info .= '</li><li>'.&mt('Passphrase-protected files do not require log-in, but will require the viewer to enter the passphrase you set.');
         $info .= '</li><li>'.&explain_conditionals();          $info .= '</li><li>'.&explain_conditionals();
         $info .= '</li></ul>'.          $info .= '</li></ul>'.
                   &mt('A listing of files viewable without log-in is available at: ')."<a href=\"/adm/$udom/$uname/aboutme/portfolio\">".&Apache::lonnet::absolute_url($ENV{'SERVER_NAME'})."/adm/$udom/$uname/aboutme/portfolio</a>.<br />";                    &mt('A listing of files viewable without log-in is available at: ')."<a href=\"$prefix/adm/$udom/$uname/aboutme/portfolio\">$prefix/adm/$udom/$uname/aboutme/portfolio</a>.<br />";
         if ($group eq '') {          if ($group eq '') {
             $info .= &mt("For logged in users a 'Display file listing' link will also appear (when there are viewable files) on your personal information page:");              $info .= &mt("For logged in users a 'Display file listing' link will also appear (when there are viewable files) on your personal information page:");
         } else {          } else {
             $info .= &mt("For logged in users a 'Display file listing' link will also appear (when there are viewable files) on the course information page:");              $info .= &mt("For logged in users a 'Display file listing' link will also appear (when there are viewable files) on the course information page:");
         }          }
         $info .= "<br /><a href=\"/adm/$udom/$uname/aboutme\">".&Apache::lonnet::absolute_url($ENV{'SERVER_NAME'})."/adm/$udom/$uname/aboutme</a><br />";          $info .= "<br /><a href=\"$prefix/adm/$udom/$uname/aboutme\">$prefix/adm/$udom/$uname/aboutme</a><br />";
         if ($group ne '') {          if ($group ne '') {
             $info .= &mt("Users with course editing rights may add a 'Group Portfolio' item using the Course Editor (Collaboration tab), to provide access to viewable group portfolio files.").'<br />';              $info .= &mt("Users with course editing rights may add a 'Group Portfolio' item using the Course Editor (Collaboration tab), to provide access to viewable group portfolio files.").'<br />';
         }          }
Line 932  sub display_access { Line 942  sub display_access {
                         'cancel' => &mt('Return to directory'),                          'cancel' => &mt('Return to directory'),
                       };                        };
         &close_form($r,$url,$button_text);          &close_form($r,$url,$button_text);
     } else {      } elsif ($can_viewacl) {
         $r->print($header);          $r->print($header);
         if ($aclcount) {            if ($aclcount) {  
             $r->print($info);              $r->print($info);
         }          }
         &view_access_settings($r,$url,$access_controls{$file_name},$aclcount);          &view_access_settings($r,$url,$access_controls{$file_name},$aclcount);
       } else {
           $r->print($header);
           $r->print(&mt('You do not have sufficient privileges to view access controls').'<br />');
     }      }
       my %anchor_fields = (
           'currentpath' => $env{'form.currentpath'}
       );
       $r->print('<br />'.&make_anchor($url, \%anchor_fields, &mt('Return to directory')));
       return;
 }  }
   
 sub explain_conditionals {  sub explain_conditionals {
Line 988  sub build_access_summary { Line 1006  sub build_access_summary {
                       domains => 'Conditional: domain-based',                        domains => 'Conditional: domain-based',
                       users => 'Conditional: user-based',                        users => 'Conditional: user-based',
                       course => 'Conditional: course/community-based',                        course => 'Conditional: course/community-based',
                       ip     => 'Conditional: IP-based',                        userip => 'Conditional: IP-based',
                      );                       );
     my @allscopes = ('public','guest','domains','users','course','ip');      my @allscopes = ('public','guest','domains','users','course','userip');
     foreach my $scope (@allscopes) {      foreach my $scope (@allscopes) {
         if ((!(exists($todisplay{$scope}))) || (ref($todisplay{$scope}) ne 'HASH')) {          if ((!(exists($todisplay{$scope}))) || (ref($todisplay{$scope}) ne 'HASH')) {
             next;              next;
Line 1067  sub build_access_summary { Line 1085  sub build_access_summary {
                 } elsif ($scope eq 'users') {                  } elsif ($scope eq 'users') {
                     my $curr_user_list = &sort_users($content->{'users'});                      my $curr_user_list = &sort_users($content->{'users'});
                     $r->print(&mt('Users: ').$curr_user_list);                      $r->print(&mt('Users: ').$curr_user_list);
                 } elsif ($scope eq 'ip') {                  } elsif ($scope eq 'userip') {
                     my $curr_ips_list = &sort_ips($content->{'ip'});                      my $curr_ips_list = &sort_ips($content->{'userip'});
                     $r->print(&mt('IP(s):').' '.$curr_ips_list);                      $r->print(&mt('IP(s):').' '.$curr_ips_list);
                 } else {                  } else {
                     $r->print('&nbsp;');                      $r->print('&nbsp;');
Line 1178  sub update_access { Line 1196  sub update_access {
     my $totalnew = 0;      my $totalnew = 0;
     my $status = 'new';      my $status = 'new';
     my ($firstitem,$lastitem);      my ($firstitem,$lastitem);
     my @types = ('course','domains','users','ip');      my @types = ('course','domains','users','userip');
     foreach my $newitem (@types) {      foreach my $newitem (@types) {
         $allnew += $env{'form.new'.$newitem};          $allnew += $env{'form.new'.$newitem};
     }      }
Line 1190  sub update_access { Line 1208  sub update_access {
            course  => 'course/community',             course  => 'course/community',
            domains => 'domain',             domains => 'domain',
            users   => 'user',             users   => 'user',
            ip      => 'IP',             userip  => 'IP',
         );          );
         foreach my $newitem (@types) {          foreach my $newitem (@types) {
             next if ($env{'form.new'.$newitem} <= 0);              next if ($env{'form.new'.$newitem} <= 0);
Line 1294  sub build_access_record { Line 1312  sub build_access_record {
  'udom'  => $udom   'udom'  => $udom
  });   });
  }   }
     } elsif ($scope eq 'ip') {      } elsif ($scope eq 'userip') {
         my $ipslist = $env{'form.ips_'.$num};          my $ipslist = $env{'form.ips_'.$num};
         $ipslist =~ s/\s+//sg;          $ipslist =~ s/\s+//sg;
         my %ipshash = map { ($_,1) } (split(/,/,$ipslist));          my %ipshash = map { ($_,1) } (split(/,/,$ipslist));
Line 1365  sub access_setting_table { Line 1383  sub access_setting_table {
                 push(@domains,$key);                  push(@domains,$key);
             } elsif ($scope eq 'users') {              } elsif ($scope eq 'users') {
                 push(@users,$key);                  push(@users,$key);
             } elsif ($scope eq 'ip') {              } elsif ($scope eq 'userip') {
                 push(@ips,$key);                  push(@ips,$key);
             }              }
         }          }
Line 1427  sub standard_settings { Line 1445  sub standard_settings {
     my $numconditionals = 0;      my $numconditionals = 0;
     my $conditionstext;      my $conditionstext;
     my %cond_status;      my %cond_status;
     foreach my $scope ('domains','users','course','ip') {      foreach my $scope ('domains','users','course','userip') {
         $numconditionals += $acl_count->{$scope};           $numconditionals += $acl_count->{$scope}; 
         if ($acl_count->{$scope} > 0) {          if ($acl_count->{$scope} > 0) {
             if ($conditionstext ne 'Active') {              if ($conditionstext ne 'Active') {
Line 1474  sub condition_setting { Line 1492  sub condition_setting {
     $r->print('</td></tr><tr><td colspan="3"></td></tr><tr><td valign="top">');      $r->print('</td></tr><tr><td colspan="3"></td></tr><tr><td valign="top">');
     &access_element($r,'course',$acl_count,$courses,$access_controls,$now,$then);      &access_element($r,'course',$acl_count,$courses,$access_controls,$now,$then);
     $r->print('</td><td>&nbsp;</td><td valign="top">');      $r->print('</td><td>&nbsp;</td><td valign="top">');
     &access_element($r,'ip',$acl_count,$ips,$access_controls,$now,$then);      &access_element($r,'userip',$acl_count,$ips,$access_controls,$now,$then);
     $r->print('</td></tr></table>');      $r->print('</td></tr></table>');
 }  }
   
Line 1495  sub access_element { Line 1513  sub access_element {
         domains => 'Domain',          domains => 'Domain',
         users   => 'User',          users   => 'User',
         course  => 'Course/Community',          course  => 'Course/Community',
         ip      => 'IP',          userip  => 'IP',
     );      );
     $r->print('<h3>'.&mt($typetext{$type}.'-based conditional access:').' ');      $r->print('<h3>'.&mt($typetext{$type}.'-based conditional access:').' ');
     if ($$acl_count{$type}) {      if ($$acl_count{$type}) {
Line 1520  sub display_access_row { Line 1538  sub display_access_row {
     } elsif ($type eq 'users') {      } elsif ($type eq 'users') {
         $showtype = &mt('Users');          $showtype = &mt('Users');
         $infotype = 'User';          $infotype = 'User';
     } elsif ($type eq 'ip') {      } elsif ($type eq 'userip') {
         $showtype = &mt('IP-based');          $showtype = &mt('IP-based');
         $infotype = 'IP';            $infotype = 'IP';  
     }      }
Line 1548  sub display_access_row { Line 1566  sub display_access_row {
                             $then);                              $then);
             } elsif ($type eq 'users') {              } elsif ($type eq 'users') {
                 &users_row($r,$status,$key,$access_controls,$now,$then);                  &users_row($r,$status,$key,$access_controls,$now,$then);
             } elsif ($type eq 'ip') {              } elsif ($type eq 'userip') {
                 &ips_row($r,$status,$key,$access_controls,$now,$then);                  &ips_row($r,$status,$key,$access_controls,$now,$then);
             }              }
     $r->print(&Apache::loncommon::end_data_table_row());      $r->print(&Apache::loncommon::end_data_table_row());
Line 1731  sub users_row { Line 1749  sub users_row {
 sub ips_row {  sub ips_row {
     my ($r,$status,$item,$access_controls,$now,$then) = @_;      my ($r,$status,$item,$access_controls,$now,$then) = @_;
     my ($num,$scope,$end,$start) = &set_identifiers($status,$item,$now,$then,      my ($num,$scope,$end,$start) = &set_identifiers($status,$item,$now,$then,
                                                     'ip');                                                      'userip');
     my $curr_ips_list;      my $curr_ips_list;
     if ($status eq 'old') {      if ($status eq 'old') {
         my $content = $$access_controls{$item};          my $content = $$access_controls{$item};
         $curr_ips_list = &sort_ips($content->{'ip'});          $curr_ips_list = &sort_ips($content->{'userip'});
     }      }
     $r->print('<td>'.&actionbox($status,$num,$scope).'</td><td>'.&mt('Format for IP controls').'<br />'.      $r->print('<td>'.&actionbox($status,$num,$scope).'</td><td>'.&mt('Format for IP controls').'<br />'.
               &mt('[_1] or [_2] or [_3] or [_4] or [_5]','<tt>35.8.*</tt>','<tt>35.8.3.[34-56]</tt>',                &mt('[_1] or [_2] or [_3] or [_4] or [_5]','<tt>35.8.*</tt>','<tt>35.8.3.[34-56]</tt>',
Line 1754  sub additional_item { Line 1772  sub additional_item {
         $showtype = 'domain';          $showtype = 'domain';
     } elsif ($type eq 'users') {      } elsif ($type eq 'users') {
         $showtype = 'user';          $showtype = 'user';
     } elsif ($type eq 'ip') {      } elsif ($type eq 'userip') {
         $showtype = 'IP';          $showtype = 'IP';
     }      }
     return      return
Line 1768  sub actionbox { Line 1786  sub actionbox {
     my $output = '<span class="LC_nobreak"><label>';      my $output = '<span class="LC_nobreak"><label>';
     if ($status eq 'new') {      if ($status eq 'new') {
         my $checkstate;          my $checkstate;
         if ($scope eq 'domains' || $scope eq 'users' || $scope eq 'course' || $scope eq 'ip') {          if ($scope eq 'domains' || $scope eq 'users' || $scope eq 'course' || $scope eq 'userip') {
             $checkstate = 'checked="checked"';              $checkstate = 'checked="checked"';
         }          }
         $output .= '<input type="checkbox" name="activate" value="'.$num.'" '.          $output .= '<input type="checkbox" name="activate" value="'.$num.'" '.
Line 2509  sub missing_priv { Line 2527  sub missing_priv {
                       delete => 'delete files',                        delete => 'delete files',
                       rename => 'rename files',                        rename => 'rename files',
                       setacl => 'set access controls for files',                        setacl => 'set access controls for files',
                         viewacl => 'view access controls for files',
     );      );
     my $escpath = &HTML::Entities::encode($env{'form.currentpath'},'&<>"');      my $escpath = &HTML::Entities::encode($env{'form.currentpath'},'&<>"');
     my $rtnlink = '<a href="'.$url;      my $rtnlink = '<a href="'.$url;
Line 2545  sub coursegrp_portfolio_header { Line 2564  sub coursegrp_portfolio_header {
     }      }
     &Apache::lonhtmlcommon::add_breadcrumb      &Apache::lonhtmlcommon::add_breadcrumb
         ({href=>"/adm/$cdom/$cnum/$env{'form.group'}/smppg?ref=$env{'form.ref'}",          ({href=>"/adm/$cdom/$cnum/$env{'form.group'}/smppg?ref=$env{'form.ref'}",
           text=>"$ucgpterm: $grp_desc",            text=>&mt('Group').": $grp_desc",
           title=>"Go to group's home page"},            title=>&mt("Go to group's home page"),
             no_mt=>1},
          {href=>"/adm/coursegrp_portfolio?".&group_args(),           {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('Group portfolio files - [_1]',$grp_desc),
                                                        undef,undef,undef,undef,1);
     return $output;      return $output;
 }  }
   
Line 2598  STATE Line 2619  STATE
     return $state;      return $state;
 }  }
   
   # Find space available in a user's portfolio (convert to bytes)
   sub free_space {
       my ($group) = @_;
       my $disk_quota = &get_quota($group); # Expressed in kB
       my ($uname,$udom) = &get_name_dom($group);
       my $portfolio_root = &get_portfolio_root();
       my $getpropath = 1;
       my $current_disk_usage = &Apache::lonnet::diskusage($udom, $uname,
                                $portfolio_root, $getpropath); # Expressed in kB
       my $free_space = 1024 * ($disk_quota - $current_disk_usage);
       return $free_space;
   }
   
   sub valid_container {
       my ($uname,$udom,$group) = @_;
       my $container_prefix;
       if ($group ne '') {
           $container_prefix = "/uploaded/$udom/$uname/groups/$group/portfolio";
       } else {
           $container_prefix = "/uploaded/$udom/$uname/portfolio";
       }
       if ($env{'form.currentpath'}) {
           $container_prefix .= $env{'form.currentpath'};
       } else {
           $container_prefix .= '/';
       }
       if ($env{'form.container'} =~ m{^\Q$container_prefix\E(.+)$}) {
           my $filename = $1;
           if ($filename eq &Apache::lonnet::clean_filename($filename)) {
               return 1;
           }
       }
       return;
   }
   
   sub invalid_parms {
       my ($r,$url,$currentpath) = @_;
       my $escpath = &HTML::Entities::encode($currentpath,'&<>"');
       my $rtnlink = '<a href="'.$url;
       if ($url =~ /\?/) {
           $rtnlink .= '&';
       } else {
           $rtnlink .= '?';
       }
       $rtnlink .= 'currentpath='.$escpath;
       $rtnlink .= '">'.&mt('Return to directory').'</a>';
       $r->print('<h3>'.&mt('Action disallowed').'</h3>');
       $r->print(&mt('Some of the data included with this request were invalid'));
       $r->print('<br />'.$rtnlink);
       return;
   }
   
 sub handler {  sub handler {
     # this handles file management      # this handles file management
     my $r = shift;      my $r = shift;
Line 2610  sub handler { Line 2683  sub handler {
         $url = $1.$2;          $url = $1.$2;
         $caller = $2;          $caller = $2;
     }      }
     my ($can_modify,$can_delete,$can_upload,$can_setacl);      my ($can_modify,$can_delete,$can_upload,$can_setacl,$can_viewacl);
     if ($caller eq 'coursegrp_portfolio') {      if ($caller eq 'coursegrp_portfolio') {
     #  Needs to be in a course      #  Needs to be in a course
         if (! ($env{'request.course.fn'})) {          if (! ($env{'request.course.fn'})) {
Line 2654  sub handler { Line 2727  sub handler {
             $can_delete = 1;              $can_delete = 1;
             $can_upload = 1;              $can_upload = 1;
             $can_setacl = 1;              $can_setacl = 1;
               $can_viewacl = 1;
         } else {          } else {
             if (&Apache::lonnet::allowed('agf',$env{'request.course.id'}.'/'.$group)) {              if (&Apache::lonnet::allowed('agf',$env{'request.course.id'}.'/'.$group)) {
                 $can_setacl = 1;                  $can_setacl = 1;
Line 2667  sub handler { Line 2741  sub handler {
             if (&Apache::lonnet::allowed('dgf',$env{'request.course.id'}.'/'.$group)) {              if (&Apache::lonnet::allowed('dgf',$env{'request.course.id'}.'/'.$group)) {
                 $can_delete = 1;                  $can_delete = 1;
             }              }
               if (&Apache::lonnet::allowed('rgf',$env{'request.course.id'}.'/'.$group)) {
                   $can_viewacl = 1;
               }
         }          }
     } else {      } else {
         ($uname,$udom) = &get_name_dom();          ($uname,$udom) = &get_name_dom();
Line 2675  sub handler { Line 2752  sub handler {
         $can_modify = 1;          $can_modify = 1;
         $can_delete = 1;          $can_delete = 1;
         $can_upload = 1;          $can_upload = 1;
         $can_setacl = 1;          if (&Apache::lonnet::usertools_access('','','portaccess',
                                                 undef,'tools')) {
               $can_viewacl = 1;
               $can_setacl = 1;
           }
     }      }
   
     my $port_path = &get_port_path();      my $port_path = &get_port_path();
Line 2685  sub handler { Line 2766  sub handler {
     # Give the LON-CAPA page header      # Give the LON-CAPA page header
     my $brcrum = [{href=>"/adm/portfolio",text=>"Portfolio Manager"}];      my $brcrum = [{href=>"/adm/portfolio",text=>"Portfolio Manager"}];
   
       my $js = '<script type="text/javascript"
                   src="/res/adm/includes/file_upload.js"></script>';
       
     if ($env{"form.mode"} eq 'selectfile'){      if ($env{"form.mode"} eq 'selectfile'){
         $r->print(&Apache::loncommon::start_page($title,undef,          $r->print(&Apache::loncommon::start_page($title, $js,
  {'only_body' => 1}));   {'only_body' => 1}));
     } elsif ($env{'form.action'} eq 'rolepicker') {      } elsif ($env{'form.action'} eq 'rolepicker') {
         $r->print(&Apache::loncommon::start_page('New role-based condition',undef,          $r->print(&Apache::loncommon::start_page('New role-based condition', $js,
                                                  {'no_nav_bar'  => 1, }));                                                   {'no_nav_bar'  => 1, }));
     } elsif ($caller eq 'coursegrp_portfolio') {      } elsif ($caller eq 'coursegrp_portfolio') {
         $r->print(&Apache::loncommon::start_page($title));          $r->print(&Apache::loncommon::start_page($title, $js));
     } else {      } else {
         $r->print(&Apache::loncommon::start_page($title,undef,          $r->print(&Apache::loncommon::start_page($title, $js,
                                                  {'bread_crumbs' => $brcrum}));                                                   {'bread_crumbs' => $brcrum}));
         if (!&Apache::lonnet::usertools_access($uname,$udom,'portfolio')) {          if (!&Apache::lonnet::usertools_access($uname,$udom,'portfolio')) {
             $r->print('<h2>'.&mt('No user portfolio available') .'</h2>'.              $r->print('<h2>'.&mt('No user portfolio available') .'</h2>'.
Line 2708  sub handler { Line 2792  sub handler {
     }      }
     $r->rflush();      $r->rflush();
     # Check if access to portfolio is blocked by one or more blocking events in courses.      # Check if access to portfolio is blocked by one or more blocking events in courses.
       my $clientip = &Apache::lonnet::get_requestor_ip($r);
     my ($blocked,$blocktext) =       my ($blocked,$blocktext) = 
         &Apache::loncommon::blocking_status('port',$uname,$udom);          &Apache::loncommon::blocking_status('port',$clientip,$uname,$udom);
     if ($blocked) {      if ($blocked) {
         my $evade_block;          my $evade_block;
         # If portfolio display is in a window popped up from a "Select Portfolio Files"          # If portfolio display is in a window popped up from a "Select Portfolio Files"
Line 2744  sub handler { Line 2829  sub handler {
             return OK;              return OK;
         }          }
     }      }
       if (($env{'form.currentpath'}) && ($env{'form.currentpath'} ne '/')) {
           my $clean_currentpath = '/'.&Apache::loncommon::clean_path($env{'form.currentpath'}).'/';
           unless ($env{'form.currentpath'} eq $clean_currentpath) {
               &invalid_parms($r,$url);
               $r->print(&Apache::loncommon::end_page());
               return OK;
           }
       }
       if ($env{'form.container'}) {
           unless (&valid_container($uname,$udom,$group)) {
               &invalid_parms($r,$url,$env{'form.currentpath'});
               $r->print(&Apache::loncommon::end_page());
               return OK;
           }
       }
     if (($env{'form.storeupl'}) & (!$env{'form.uploaddoc.filename'})){      if (($env{'form.storeupl'}) & (!$env{'form.uploaddoc.filename'})){
     $r->print(      $r->print(
             '<p><span class="LC_warning">'              '<p><span class="LC_warning">'
Line 2837  sub handler { Line 2937  sub handler {
         }          }
     } elsif ($env{'form.access'}) {      } elsif ($env{'form.access'}) {
         $env{'form.selectfile'} = $env{'form.access'};          $env{'form.selectfile'} = $env{'form.access'};
         if (!defined($env{'form.action'})) {           if (!defined($env{'form.action'})) {
             $env{'form.action'} = 'chgaccess';              $env{'form.action'} = 'chgaccess';
         }          }
         &display_access($r,$url,$group,$can_setacl,$port_path,$env{'form.action'});          if (($can_viewacl) || ($can_setacl)) {
               &display_access($r,$url,$group,$can_setacl,$can_viewacl,$port_path,$env{'form.action'});
           } else {
               &missing_priv($r,$url,'viewacl');
           }
     } elsif (($env{'form.action'} eq 'chgaccess') ||       } elsif (($env{'form.action'} eq 'chgaccess') || 
              ($env{'form.action'} eq 'chgconditions')) {               ($env{'form.action'} eq 'chgconditions')) {
         if ($can_setacl) {          if ($can_setacl) {
Line 2914  sub handler { Line 3018  sub handler {
  &display_common($r,$url,$current_path,$is_empty,$dirlistref,   &display_common($r,$url,$current_path,$is_empty,$dirlistref,
  $can_upload,$group);   $can_upload,$group);
         &display_directory($r,$url,$current_path,$is_empty,$dirlistref,$group,          &display_directory($r,$url,$current_path,$is_empty,$dirlistref,$group,
                            $can_upload,$can_modify,$can_delete,$can_setacl);                             $can_upload,$can_modify,$can_delete,$can_setacl,
                              $can_viewacl);
     }      }
     $r->print(&Apache::loncommon::end_page());      $r->print(&Apache::loncommon::end_page());
     return OK;      return OK;

Removed from v.1.254.2.2  
changed lines
  Added in v.1.268


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>