version 1.114, 2011/11/14 00:20:31
|
version 1.119, 2013/06/04 22:20:16
|
Line 37
|
Line 37
|
|
|
=head1 NAME |
=head1 NAME |
|
|
Apache::loncfile - Construction space file management. |
Apache::loncfile - Authoring space file management. |
|
|
=head1 SYNOPSIS |
=head1 SYNOPSIS |
|
|
Line 68 use File::Basename;
|
Line 68 use File::Basename;
|
use File::Copy; |
use File::Copy; |
use HTML::Entities(); |
use HTML::Entities(); |
use Apache::Constants qw(:common :http :methods); |
use Apache::Constants qw(:common :http :methods); |
use Apache::loncacc; |
|
use Apache::lonnet; |
use Apache::lonnet; |
use Apache::loncommon(); |
use Apache::loncommon(); |
use Apache::lonlocal; |
use Apache::lonlocal; |
Line 102 my $r; # Needs to be global for some
|
Line 101 my $r; # Needs to be global for some
|
=cut |
=cut |
|
|
sub Debug { |
sub Debug { |
# Put out the indicated message butonly if DEBUG is true. |
# Put out the indicated message but only if DEBUG is true. |
if ($DEBUG) { |
if ($DEBUG) { |
my ($r,$message) = @_; |
my ($r,$message) = @_; |
$r->log_reason($message); |
$r->log_reason($message); |
Line 110 sub Debug {
|
Line 109 sub Debug {
|
} |
} |
|
|
sub done { |
sub done { |
my ($url)=@_; |
my ($url) = @_; |
my $done=&mt("Done"); |
return |
return(<<ENDDONE); |
'<p>' |
<a href="$url">$done</a> |
.&Apache::lonhtmlcommon::confirm_success(&mt("Done")) |
<script type="text/javascript"> |
.'<br /><a href="'.$url.'">'.&mt("Continue").'</a>' |
location.href="$url"; |
.'<script type="text/javascript">' |
</script> |
.'location.href="'.$url.'";' |
ENDDONE |
.'</script>' |
|
.'</p>'; |
} |
} |
|
|
=pod |
=pod |
Line 206 sub obsolete_unpub {
|
Line 206 sub obsolete_unpub {
|
# see if directory is empty |
# see if directory is empty |
# ignores any .meta, .save, .bak, and .log files created for a previously |
# ignores any .meta, .save, .bak, and .log files created for a previously |
# published file, which has since been marked obsolete and deleted. |
# published file, which has since been marked obsolete and deleted. |
|
# ignores a .DS_Store file put there when viewing directory via webDAV on MacOS. |
sub empty_directory { |
sub empty_directory { |
my ($dirname,$phase) = @_; |
my ($dirname,$phase) = @_; |
if (opendir DIR, $dirname) { |
if (opendir DIR, $dirname) { |
my @files = grep(!/^\.\.?$/, readdir(DIR)); # ignore . and .. |
my @files = grep(!/^\.\.?$/, readdir(DIR)); # ignore . and .. |
if (@files) { |
if (@files) { |
my @orphans = grep(/\.(meta|save|log|bak)$/,@files); |
my @orphans = grep(/\.(meta|save|log|bak|DS_Store)$/,@files); |
if (scalar(@files) - scalar(@orphans) > 0) { |
if (scalar(@files) - scalar(@orphans) > 0) { |
return 0; |
return 0; |
} else { |
} else { |
Line 234 sub empty_directory {
|
Line 235 sub empty_directory {
|
|
|
=item exists($user, $domain, $file) |
=item exists($user, $domain, $file) |
|
|
Determine if a resource file name has been published or exists |
Determine if a resource filename has been published or exists |
in the construction space. |
in the construction space. |
|
|
Parameters: |
Parameters: |
Line 367 sub cleanDest {
|
Line 368 sub cleanDest {
|
($newpath,$error)=&relativeDest($fn,$newpath,$uname,$udom); |
($newpath,$error)=&relativeDest($fn,$newpath,$uname,$udom); |
if (! -d "$newpath") { |
if (! -d "$newpath") { |
$request->print('<p><span class="LC_warning">' |
$request->print('<p><span class="LC_warning">' |
.&mt("You have requested to create file in directory [_1] which doesn't exist. The requested directory path has been removed from the requested file name." |
.&mt("You have requested to create file in directory [_1] which doesn't exist. The requested directory path has been removed from the requested filename." |
,&display($newpath)) |
,&display($newpath)) |
.'</span></p>'); |
.'</span></p>'); |
$dest=~s|.*/||; |
$dest=~s|.*/||; |
Line 408 sub relativeDest {
|
Line 409 sub relativeDest {
|
while ($newfilename=~m{/\.\./}) { |
while ($newfilename=~m{/\.\./}) { |
$newfilename=~ s{/[^/]+/\.\./}{/}g; #remove dir/.. |
$newfilename=~ s{/[^/]+/\.\./}{/}g; #remove dir/.. |
} |
} |
my ($authorname,$authordom)=&Apache::loncacc::constructaccess($newfilename); |
my ($authorname,$authordom)=&Apache::lonnet::constructaccess($newfilename); |
unless (($authorname) && ($authordom)) { |
unless (($authorname) && ($authordom)) { |
my $otherdir = &display($newfilename); |
my $otherdir = &display($newfilename); |
$error = &mt('Access denied to [_1]',$otherdir); |
$error = &mt('Access denied to [_1]',$otherdir); |
Line 436 Parameters:
|
Line 437 Parameters:
|
|
|
sub CloseForm1 { |
sub CloseForm1 { |
my ($request, $fn) = @_; |
my ($request, $fn) = @_; |
$request->print('<p><input type="submit" value="'.&mt('Continue').'" /></p></form>'); |
$request->print('<input type="submit" value="'.&mt('Continue').'" /></form>'); |
$request->print('<form action="'.&url($fn). |
$request->print(' <form action="'.&url($fn).'" method="post">'. |
'" method="post"><p><input type="submit" value="'.&mt('Cancel').'" /></p></form>'); |
'<input type="submit" value="'.&mt('Cancel').'" /></form>'); |
} |
} |
|
|
|
|
Line 824 Parameters:
|
Line 825 Parameters:
|
|
|
=item $domain - Name of the domain of the user |
=item $domain - Name of the domain of the user |
|
|
=item $fn - Source file name |
=item $fn - Source filename |
|
|
=item $newfilename |
=item $newfilename |
- Name of the file to be created; no path information |
- Name of the file to be created; no path information |
Line 837 Side Effects:
|
Line 838 Side Effects:
|
=item 2 new forms are displayed. Clicking on the confirmation button |
=item 2 new forms are displayed. Clicking on the confirmation button |
causes the browser to attempt to load the specfied URL, allowing the |
causes the browser to attempt to load the specfied URL, allowing the |
proper handler to take care of file creation. There is also a Cancel |
proper handler to take care of file creation. There is also a Cancel |
button which returns you to the driectory listing you came from |
button which returns you to the directory listing you came from |
|
|
=back |
=back |
|
|
Line 879 sub NewFile1 {
|
Line 880 sub NewFile1 {
|
'<form name="fileaction" action="/adm/cfile" method="post">'. |
'<form name="fileaction" action="/adm/cfile" method="post">'. |
'<input type="hidden" name="qualifiedfilename" value="'.$fn.'" />'. |
'<input type="hidden" name="qualifiedfilename" value="'.$fn.'" />'. |
'<input type="hidden" name="action" value="newfile" />'. |
'<input type="hidden" name="action" value="newfile" />'. |
'<span class ="LC_nobreak">'.&mt('Enter a file name: ').'<input type="text" name="newfilename" value="Type Name Here" onfocus="if (this.value == '."'Type Name Here') this.value=''".'" /> <input type="submit" value="Go" />'. |
'<span class ="LC_nobreak">'.&mt('Enter a filename: ').'<input type="text" name="newfilename" value="Type Name Here" onfocus="if (this.value == '."'Type Name Here') this.value=''".'" /> <input type="submit" value="Go" />'. |
'</span></form></p>'. |
'</span></form></p>'. |
'<p><form action="'.&url($fn). |
'<p><form action="'.&url($fn). |
'" method="post"><p><input type="submit" value="'.&mt('Cancel').'" /></form></p>'); |
'" method="post"><p><input type="submit" value="'.&mt('Cancel').'" /></form></p>'); |
Line 961 sub phaseone {
|
Line 962 sub phaseone {
|
$dirlist=$fn; |
$dirlist=$fn; |
} |
} |
$r->print('<div class="LC_error">'.$error.'</div>'. |
$r->print('<div class="LC_error">'.$error.'</div>'. |
'<h3><a href="'.&url($dirlist).'">'.&mt('Return to Directory'). |
'<p><a href="'.&url($dirlist).'">'.&mt('Return to Directory'). |
'</a></h3>'); |
'</a></p>'); |
return; |
return; |
} |
} |
$r->print('<form action="/adm/cfile" method="post">'. |
$r->print('<form action="/adm/cfile" method="post">'. |
Line 1098 sub Rename2 {
|
Line 1099 sub Rename2 {
|
} |
} |
} else { |
} else { |
$request->print( |
$request->print( |
'<p>' |
'<p class="LC_error">' |
.&mt('No such file: [_1]', |
.&mt('No such file: [_1]', |
&display($oldfile)) |
&display($oldfile)) |
.'</p></form>' |
.'</p></form>' |
Line 1386 sub phasetwo {
|
Line 1387 sub phasetwo {
|
$dest = $newdir."/"; |
$dest = $newdir."/"; |
} |
} |
if ( ($env{'form.action'} eq 'newdir') && ($env{'form.phase'} eq 'two') && ( ($env{'form.callingmode'} eq 'testbank') || ($env{'form.callingmode'} eq 'imsimport') ) ) { |
if ( ($env{'form.action'} eq 'newdir') && ($env{'form.phase'} eq 'two') && ( ($env{'form.callingmode'} eq 'testbank') || ($env{'form.callingmode'} eq 'imsimport') ) ) { |
$r->print('<h3><a href="javascript:self.close()">'.&mt('Done').'</a></h3>'); |
$r->print( |
|
'<p>' |
|
.&Apache::lonhtmlcommon::confirm_success(&mt('Done')) |
|
.'<br /><a href="javascript:self.close()">'.&mt('Continue').'</a>' |
|
.'</p>' |
|
); |
} else { |
} else { |
if ($env{'form.action'} eq 'rename') { |
if ($env{'form.action'} eq 'rename') { |
$r->print('<h3><a href="'.&url($dest).'">'.&mt('Return to Directory').'</a></h3>'); |
$r->print( |
$r->print('<h3><a href="'.&url($dest_newname).'">'.$disp_newname.'</a></h3>'); |
'<p>'.&Apache::lonhtmlcommon::confirm_success(&mt('Done')).'</p>' |
|
.&Apache::lonhtmlcommon::actionbox( |
|
['<a href="'.&url($dest).'">'.&mt('Return to Directory').'</a>', |
|
'<a href="'.&url($dest_newname).'">'.$disp_newname.'</a>'])); |
} else { |
} else { |
$r->print(&done(&url($dest))); |
$r->print(&done(&url($dest))); |
} |
} |
Line 1441 sub handler {
|
Line 1450 sub handler {
|
|
|
# ----------------------------------------------------------- Start page output |
# ----------------------------------------------------------- Start page output |
|
|
my ($uname,$udom) = &Apache::loncacc::constructaccess($fn); |
my ($uname,$udom) = &Apache::lonnet::constructaccess($fn); |
&Debug($r, |
&Debug($r, |
"loncfile::handler constructaccess uname = $uname domain = $udom"); |
"loncfile::handler constructaccess uname = $uname domain = $udom"); |
if (($uname eq '') || ($udom eq '')) { |
if (($uname eq '') || ($udom eq '')) { |
Line 1479 function writeDone() {
|
Line 1488 function writeDone() {
|
# Breadcrumbs |
# Breadcrumbs |
&Apache::lonhtmlcommon::clear_breadcrumbs(); |
&Apache::lonhtmlcommon::clear_breadcrumbs(); |
&Apache::lonhtmlcommon::add_breadcrumb({ |
&Apache::lonhtmlcommon::add_breadcrumb({ |
'text' => 'Construction Space', |
'text' => 'Authoring Space', |
'href' => &Apache::loncommon::authorspace($fn), |
'href' => &Apache::loncommon::authorspace($fn), |
}); |
}); |
&Apache::lonhtmlcommon::add_breadcrumb({ |
&Apache::lonhtmlcommon::add_breadcrumb({ |
'text' => 'File Operation', |
'text' => 'File Operation', |
'title' => 'Construction Space File Operation', |
'title' => 'Authoring Space File Operation', |
'href' => '', |
'href' => '', |
}); |
}); |
|
|
$r->print(&Apache::loncommon::start_page('Construction Space File Operation', |
$r->print(&Apache::loncommon::start_page('Authoring Space File Operation', |
$js, |
$js, |
{'add_entries' => \%loaditem,}) |
{'add_entries' => \%loaditem,}) |
.&Apache::lonhtmlcommon::breadcrumbs() |
.&Apache::lonhtmlcommon::breadcrumbs() |
Line 1496 function writeDone() {
|
Line 1505 function writeDone() {
|
&Apache::loncommon::CSTR_pageheader($trailfile)) |
&Apache::loncommon::CSTR_pageheader($trailfile)) |
); |
); |
|
|
$r->print('<h3>'.&mt('Location').': '.&display($fn).'</h3>'); |
$r->print('<p>'.&mt('Location').': '.&display($fn).'</p>'); |
|
|
if (($uname ne $env{'user.name'}) || ($udom ne $env{'user.domain'})) { |
if (($uname ne $env{'user.name'}) || ($udom ne $env{'user.domain'})) { |
$r->print('<p class="LC_info">' |
$r->print('<p class="LC_info">' |
Line 1507 function writeDone() {
|
Line 1516 function writeDone() {
|
|
|
|
|
&Debug($r, "loncfile::handler Form action is $env{'form.action'} "); |
&Debug($r, "loncfile::handler Form action is $env{'form.action'} "); |
if ($env{'form.action'} eq 'delete') { |
my %action = &Apache::lonlocal::texthash( |
$r->print('<h3>'.&mt('Delete').'</h3>'); |
'delete' => 'Delete', |
} elsif ($env{'form.action'} eq 'rename') { |
'rename' => 'Rename', |
$r->print('<h3>'.&mt('Rename').'</h3>'); |
'move' => 'Move', |
} elsif ($env{'form.action'} eq 'move') { |
'newdir' => 'New Directory', |
$r->print('<h3>'.&mt('Move').'</h3>'); |
'decompress' => 'Decompress', |
} elsif ($env{'form.action'} eq 'newdir') { |
'copy' => 'Copy', |
$r->print('<h3>'.&mt('New Directory').'</h3>'); |
'newfile' => 'New Resource', |
} elsif ($env{'form.action'} eq 'decompress') { |
'newhtmlfile' => 'New Resource', |
$r->print('<h3>'.&mt('Decompress').'</h3>'); |
'newproblemfile' => 'New Resource', |
} elsif ($env{'form.action'} eq 'copy') { |
'newpagefile' => 'New Resource', |
$r->print('<h3>'.&mt('Copy').'</h3>'); |
'newsequencefile' => 'New Resource', |
} elsif ($env{'form.action'} eq 'newfile' || |
'newrightsfile' => 'New Resource', |
$env{'form.action'} eq 'newhtmlfile' || |
'newstyfile' => 'New Resource', |
$env{'form.action'} eq 'newproblemfile' || |
'newtaskfile' => 'New Resource', |
$env{'form.action'} eq 'newpagefile' || |
'newlibraryfile' => 'New Resource', |
$env{'form.action'} eq 'newsequencefile' || |
'Select Action' => 'New Resource', |
$env{'form.action'} eq 'newrightsfile' || |
); |
$env{'form.action'} eq 'newstyfile' || |
if ($action{$env{'form.action'}}) { |
$env{'form.action'} eq 'newtaskfile' || |
$r->print('<h2>'.$action{$env{'form.action'}}.'</h2>'); |
$env{'form.action'} eq 'newlibraryfile' || |
|
$env{'form.action'} eq 'Select Action' ) { |
|
$r->print('<h3>'.&mt('New Resource').'</h3>'); |
|
} else { |
} else { |
$r->print('<p class="LC_error">' |
$r->print('<p class="LC_error">' |
.&mt('Unknown Action').' '.$env{'form.action'} |
.&mt('Unknown Action: [_1]',$env{'form.action'}) |
.'</p>' |
.'</p>' |
.&Apache::loncommon::end_page() |
.&Apache::loncommon::end_page() |
); |
); |
return OK; |
return OK; |
} |
} |
|
|
if ($env{'form.phase'} eq 'two') { |
if ($env{'form.phase'} eq 'two') { |
&Debug($r, "loncfile::handler entering phase2"); |
&Debug($r, "loncfile::handler entering phase2"); |
&phasetwo($r,$fn,$uname,$udom); |
&phasetwo($r,$fn,$uname,$udom); |