version 1.103, 2006/06/07 21:15:01
|
version 1.106, 2006/06/20 03:02:33
|
Line 166 sub display_directory {
|
Line 166 sub display_directory {
|
} |
} |
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 %versioned; |
foreach my $line (sort |
foreach my $line (sort |
{ |
{ |
my ($afile)=split('&',$a,2); |
my ($afile)=split('&',$a,2); |
Line 176 sub display_directory {
|
Line 178 sub display_directory {
|
#$dom |
#$dom |
my ($filename,$dom,undef,$testdir,undef,undef,undef,undef,$size,undef,$mtime,undef,undef,undef,$obs,undef)=split(/\&/,$line,16); |
my ($filename,$dom,undef,$testdir,undef,undef,undef,undef,$size,undef,$mtime,undef,undef,undef,$obs,undef)=split(/\&/,$line,16); |
$filename =~ s/\s+$//; |
$filename =~ s/\s+$//; |
|
my ($fname,$version,$extension) = &Apache::grades::file_name_version_ext($filename); |
|
if ($version) { |
|
$versioned{$fname} .= $version.","; |
|
} |
|
push(@dir_lines, [$filename,$dom,$testdir,$size,$mtime,$obs]); |
|
} |
|
foreach my $line (@dir_lines) { |
|
my ($filename,$dom,$testdir,$size,$mtime,$obs) = @$line; |
|
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+)\.([^\.]*)$/)) { |
if ($dirptr&$testdir) { |
if ($dirptr&$testdir) { |
if ($select_mode eq 'true'){ |
if ($select_mode eq 'true'){ |
Line 188 sub display_directory {
|
Line 199 sub display_directory {
|
$r->print('</tr>'); |
$r->print('</tr>'); |
} else { |
} else { |
$r->print('<tr bgcolor="#CCCCFF">'); |
$r->print('<tr bgcolor="#CCCCFF">'); |
my $fullpath = $current_path.$filename; |
my $version_flag; |
|
if (exists($versioned{$fname})) { |
|
$version_flag = "*"; |
|
} else { |
|
$version_flag = ""; |
|
} |
|
my $fullpath = $current_path.$filename; |
$fullpath = &prepend_group($fullpath,$group); |
$fullpath = &prepend_group($fullpath,$group); |
if ($select_mode eq 'true'){ |
if ($select_mode eq 'true'){ |
$r->print('<td><input type="checkbox" name="checkfile" value="'.$filename.'"'); |
$r->print('<td><input type="checkbox" name="checkfile" value="'.$filename.'"'); |
Line 211 sub display_directory {
|
Line 228 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 458 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'}.'¤tpath='.$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). |
|
' <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). |
|
'  <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 992 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'}) { |