Diff for /loncom/interface/portfolio.pm between versions 1.103 and 1.104

version 1.103, 2006/06/07 21:15:01 version 1.104, 2006/06/16 22:37:10
Line 211  sub display_directory { Line 211  sub display_directory {
                 my $curr_access;                  my $curr_access;
                 my $pub_access = 0;                  my $pub_access = 0;
                 foreach my $key (sort(keys(%{$access_controls{$fullpath}}))) {                  foreach my $key (sort(keys(%{$access_controls{$fullpath}}))) {
                     my ($scope,$end,$start) = ($key =~ /^\d+:(\w+)_(\d*)_?(\d*)$/);                      my ($scope,$end,$start) = ($key =~ /^[^:]+:([a-z]+)_(\d*)_?(\d*)$/);
                     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;
                             last;  
                         }                          }
                     }                      }
                 }                  }
                 if (!$pub_access) {                  if (!$pub_access) {
                     $curr_access = 'Private'                      $curr_access = 'Private'
                 } elsif ($pub_access) {                  } else {
                     $curr_access = 'Public';                      $curr_access = 'Public';
                 }                  }
                 $r->print('<td><img src="'.&Apache::loncommon::icon($filename).'"></td>');                  $r->print('<td><img src="'.&Apache::loncommon::icon($filename).'"></td>');
Line 442  sub rename_confirmed { Line 441  sub rename_confirmed {
     $r->print(&done(undef,$url,$group));      $r->print(&done(undef,$url,$group));
 }  }
   
   sub display_access {
       my ($r,$url,$group) = @_;
       my ($uname,$udom) = &get_name_dom($group);
       my $file_name = $env{'form.currentpath'}.$env{'form.access'};
       $file_name = &prepend_group($file_name,$group);
       my $current_permissions = &Apache::lonnet::get_portfile_permissions($udom,
                                                                           $uname);
       my %access_controls = &Apache::lonnet::get_access_controls($current_permissions,$group,$file_name);
       &open_form($r,$url);
       $r->print('<h3>'.&mt('Allowing others to retrieve portfolio file: [_1]',$env{'form.currentpath'}.$env{'form.access'}).'</h3>'."\n");
       $r->print(&mt('Access to this file by others can be set to be one the following types: public.').'<br /><ul><li>'.&mt('Public files are available to anyone without the need for login.').'</li></ul><br />');
       &access_setting_table($r,$access_controls{$file_name});
       &close_form($r,$url,$group);
   }
   
   sub update_access {
       my ($r,$url,$group) = @_;
       my $totalprocessed = 0;
       my %processing;
       my %title  = (
                            'activate' => 'New controls added',
                            'delete'   => 'Existing controls deleted',
                            'update'   => 'Existing controls modified',
                        );
       my $changes;   
       foreach my $chg (sort(keys(%title))) {     
           @{$processing{$chg}} = &Apache::loncommon::get_env_multiple('form.'.$chg);
           $totalprocessed += @{$processing{$chg}};
           foreach my $num (@{$processing{$chg}}) {
               my $scope = $env{'form.scope_'.$num};
               my ($start,$end) = &get_dates_from_form($num);
               my $newkey = $num.':'.$scope.'_'.$end.'_'.$start;
               if ($chg eq 'delete') {
                   $$changes{$chg}{$newkey} = 1;
               } else {
                   $$changes{$chg}{$newkey} = 
                                    &build_access_record($num,$scope,$start,$end);
               }
           }
       }
       my $file_name = $env{'form.currentpath'}.$env{'form.selectfile'};
       $r->print('<h3>'.&mt('Allowing others to retrieve portfolio file: [_1]',$file_name).'</h3>'."\n");
       $file_name = &prepend_group($file_name,$group);
       my ($uname,$udom) = &get_name_dom($group);
       my ($errors,$outcome,$deloutcome,$new_values,$translation);
       if ($totalprocessed) {
           ($outcome,$deloutcome,$new_values,$translation) =
           &Apache::lonnet::modify_access_controls($file_name,$changes,$udom,$uname);
       }
       my $current_permissions = &Apache::lonnet::get_portfile_permissions($udom,                                                                    $uname);
       my %access_controls = &Apache::lonnet::get_access_controls($current_permissions,$group,$file_name);
       if ($totalprocessed) {
           if ($outcome eq 'ok') {
               my $updated_controls = $access_controls{$file_name};
               my ($showstart,$showend);
               $r->print(&Apache::loncommon::start_data_table());
               $r->print(&Apache::loncommon::start_data_table_row());
               $r->print('<th>'.&mt('Type of change').'</th><th>'.&mt('Access control').'</th><th>'.&mt('Start date').'</th><th>'.&mt('End date').'</th>');
               $r->print(&Apache::loncommon::end_data_table_row());
               foreach my $chg (sort(keys(%processing))) {
                   if (@{$processing{$chg}} > 0) {
                       if ($chg eq 'delete') {
                           if (!($deloutcome eq 'ok')) {
                               $errors .= &mt('A problem occurred deleting access controls: [_1]',$deloutcome);
                               next;
                           }
                       }
                       my $numchgs = @{$processing{$chg}};
                       $r->print(&Apache::loncommon::start_data_table_row());
                       $r->print('<td rowspan="'.$numchgs.'">'.&mt($title{$chg}).'.</td>');
                       my $count = 0;
                       foreach my $key (sort(keys(%{$$changes{$chg}}))) {
                           if ($count) {
                               $r->print(&Apache::loncommon::start_data_table_row());
                           }
                           my ($num,$scope,$end,$start) = 
                                      ($key =~ /^([^:]+):([a-z]+)_(\d*)_?(\d*)$/);
                           my $newkey = $key;
                           if ($chg eq 'activate') {
                               $newkey =~ s/^(\d+)/$$translation{$1}/;
                           }
                           my %content = &Apache::lonnet::parse_access_controls(
                                                        $$updated_controls{$newkey});
                           if ($chg eq 'delete') {
                               $showstart = &mt('Deleted');
                               $showend = $showstart;
                           } else {
                               $showstart = localtime($start);
                               if ($end == 0) {
                                   $showend = &mt('No end date');
                               } else {
                                   $showend = localtime($end);
                               }
                           }
                           $r->print('<td>'.&mt($scope).'</td><td>'.$showstart.
                                     '</td><td>'. $showend.'</td>');
                           $r->print(&Apache::loncommon::end_data_table_row());
                           $count ++;
                       }
                   }
               }
               $r->print(&Apache::loncommon::end_data_table());
           } else {
               if ((@{$processing{'activate'}} > 0) || (@{$processing{'update'}} > 0)) {
                   $errors .= &mt('A problem occurred storing access control settings: [_1]',$outcome);
               }
           }
           if ($errors) { 
               $r->print($errors);
           }
       }
       $r->print('<br /><a href="'.$url.'?access='.$env{'form.selectfile'}.'&currentpath='.$env{'form.currentpath'}.'">'.&mt('Display all access settings for this file').'</a>');
       return;
   }
   
   sub build_access_record {
       my ($num,$scope,$start,$end) = @_;
       my $record = '<scope type="'.$scope.'"><start>'.$start.'</start><end>'.$end.
                    '</end></scope>';
       return $record;
   }
   
   sub get_dates_from_form {
       my ($id) = @_;
       my $startdate;
       my $enddate;
       $startdate = &Apache::lonhtmlcommon::get_date_from_form('startdate_'.$id);
       $enddate   = &Apache::lonhtmlcommon::get_date_from_form('enddate_'.$id);
       if ( exists ($env{'form.noend_'.$id}) ) {
           $enddate = 0;
       }
       return ($startdate,$enddate);
   }
   
   sub access_setting_table {
       my ($r,$access_controls) = @_;
       my ($public,$publictext);
       $publictext = '<b>'.&mt('Off').'</b>';
       my ($guest,$guesttext);
       $guesttext = '<b>'.&mt('Off').'</b>';
       my @courses = ();
       my @groups = ();
       my @domains = ();
       my @users = ();
       my $now = time;
       my $then = $now + (60*60*24*180); # six months approx.
       foreach my $key (sort(keys(%{$access_controls}))) {
           my ($scope) = ($key =~ /^[^:]+:([a-z]+)_\d*_?\d*$/);
           if ($scope eq 'public') {
               $public = $key;
               $publictext = '<b>'.&mt('On').'</b>';
           }
       }
       $r->print(&Apache::loncommon::start_data_table());
       $r->print(&Apache::loncommon::start_data_table_row());
       $r->print('<th>'.&mt('Access Type').'</th><th colspan="3">'.
                 &mt('Settings').'</th>'."\n");
       $r->print(&Apache::loncommon::end_data_table_row());
       $r->print(&Apache::loncommon::start_data_table_row());
       $r->print('<td><b>Public</b><br />'.$publictext.'</td><td colspan="3">');
       $r->print(&Apache::loncommon::start_data_table());
       $r->print(&Apache::loncommon::start_data_table_row());
       my ($pub_startdate,$pub_enddate,$pub_action,$pub_noend);
       if ($public) {
           my ($num,$end,$start) = ($public =~ /^([^:]+):[a-z]+_(\d*)_?(\d*)$/);
           if ($end == 0) {
               $pub_noend = 'checked="checked"';
           }
           $pub_action = '<td><input type="checkbox" name="delete" value="'.$num.
                         '" />'.&mt('Delete').'<br /><input type="checkbox" '.
                         'name="update" value="'.$num.'" />'.&mt('Update').
                         '<input type="hidden" name="scope_'.$num.'"'.
                         ' value="public" /></td>';
           $pub_startdate = &Apache::lonhtmlcommon::date_setter('portform',
                             'startdate_'.$num,$start,undef,undef,undef,1,undef,
                             undef,undef,1);
           $pub_enddate = &Apache::lonhtmlcommon::date_setter('portform',
                             'enddate_'.$num,$end,undef,undef,undef,1,undef,
                             undef,undef,1).
                          '&nbsp;&nbsp;<nobr><input type="checkbox" name="noend_'.
                          $num.'" '.$pub_noend.' />'.&mt('No end date').'</nobr>';
       } else {
           $pub_action = '<input type="checkbox" name="activate" value="0" />'.
                         &mt('Activate').
                         '<input type="hidden" name="scope_0" value="public" />';
           $pub_startdate = &Apache::lonhtmlcommon::date_setter('portform',
                             'startdate_0',$now,undef,undef,undef,1,undef,
                             undef,undef,1);
           $pub_enddate = &Apache::lonhtmlcommon::date_setter('portform',
                             'enddate_0',$then,,undef,undef,undef,1,undef,
                             undef,undef,1).
                          '&nbsp;&nbsp<nobr><input type="checkbox" '.
                          'name="noend_0" />'.&mt('No end date').
                          '</nobr>';
   
       }
       $r->print('<td>'.$pub_action.'</td><td>'.&mt('Start: ').$pub_startdate.
                 '<br />'.&mt('End: ').$pub_enddate.'</td>');
       $r->print(&Apache::loncommon::end_data_table_row());
       $r->print(&Apache::loncommon::end_data_table());
       $r->print('</td>');
       $r->print(&Apache::loncommon::end_data_table_row());
       $r->print(&Apache::loncommon::end_data_table());
   }
   
 sub select_files {  sub select_files {
     my ($r,$group)=@_;      my ($r,$group) = @_;
     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 771  sub handler { Line 975  sub handler {
         $env{'form.selectfile'} = $env{'form.rename'};          $env{'form.selectfile'} = $env{'form.rename'};
         $env{'form.action'} = 'rename';          $env{'form.action'} = 'rename';
  &rename($r,$url,$group);   &rename($r,$url,$group);
       } elsif ($env{'form.access'}) {
           $env{'form.selectfile'} = $env{'form.access'};
           $env{'form.action'} = 'chgaccess';
           &display_access($r,$url,$group);
       } elsif ($env{'form.action'} eq 'chgaccess') {
           &update_access($r,$url,$group);
     } elsif ($env{'form.createdir'}) {      } elsif ($env{'form.createdir'}) {
  &createdir($r,$url,$group);   &createdir($r,$url,$group);
     } elsif ($env{'form.lockinfo'}) {      } elsif ($env{'form.lockinfo'}) {

Removed from v.1.103  
changed lines
  Added in v.1.104


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