version 1.529, 2013/01/09 04:31:57
|
version 1.533, 2013/03/11 01:46:47
|
Line 152 sub dumpcourse {
|
Line 152 sub dumpcourse {
|
$r->print(&endContentScreen()); |
$r->print(&endContentScreen()); |
return ''; |
return ''; |
} |
} |
my ($ca,$cd)=split(/\@/,$env{'form.authorspace'}); |
my ($ca,$cd)=split(/\:/,$env{'form.authorspace'}); |
$r->print('<h3>'.&mt('Copying Files').'</h3>'); |
$r->print('<h3>'.&mt('Copying Files').'</h3>'); |
my $title=$env{'form.authorfolder'}; |
my $title=$env{'form.authorfolder'}; |
$title=&clean($title); |
$title=&clean($title); |
Line 335 sub group_import {
|
Line 335 sub group_import {
|
removefrommap => \%removefrommap, |
removefrommap => \%removefrommap, |
removeparam => \%removeparam, |
removeparam => \%removeparam, |
); |
); |
&apply_fixups($folder,1,$coursedom,$coursenum,\%import_errors,\%updated); |
my ($result,$msgsarray,$lockerror) = |
|
&apply_fixups($folder,1,$coursedom,$coursenum,\%import_errors,\%updated); |
if (keys(%import_errors) > 0) { |
if (keys(%import_errors) > 0) { |
$fixuperrors = |
$fixuperrors = |
'<p span class="LC_warning">'."\n". |
'<p span class="LC_warning">'."\n". |
&mt('The following files are either dependencies of a web page or references within a folder and/or composite page for which errors occurred during import:')."\n". |
&mt('The following files are either dependencies of a web page or references within a folder and/or composite page for which errors occurred during import:')."\n". |
'<ul>'."\n"; |
'<ul>'."\n"; |
Line 346 sub group_import {
|
Line 347 sub group_import {
|
} |
} |
$fixuperrors .= '</ul></p>'."\n"; |
$fixuperrors .= '</ul></p>'."\n"; |
} |
} |
|
if (ref($msgsarray) eq 'ARRAY') { |
|
if (@{$msgsarray} > 0) { |
|
$fixuperrors .= '<p class="LC_info">'. |
|
join('<br />',@{$msgsarray}). |
|
'</p>'; |
|
} |
|
} |
|
if ($lockerror) { |
|
$fixuperrors .= '<p class="LC_error">'. |
|
$lockerror. |
|
'</p>'; |
|
} |
} |
} |
my ($errtext,$fatal) = |
my ($errtext,$fatal) = |
&storemap($coursenum, $coursedom, $folder.'.'.$container,1); |
&storemap($coursenum, $coursedom, $folder.'.'.$container,1); |
Line 735 sub print_paste_buffer {
|
Line 748 sub print_paste_buffer {
|
$buffer = $type.': '. |
$buffer = $type.': '. |
&LONCAPA::map::qtescape($env{'docs.markedcopy_title'}).' ('. |
&LONCAPA::map::qtescape($env{'docs.markedcopy_title'}).' ('. |
&LONCAPA::map::qtescape($env{'docs.markedcopy_url'}).')'; |
&LONCAPA::map::qtescape($env{'docs.markedcopy_url'}).')'; |
} else { |
} else { |
my $icon = &Apache::loncommon::icon($extension); |
my $icon = &Apache::loncommon::icon($extension); |
if ($extension eq 'sequence' && |
if ($extension eq 'sequence' && |
$env{'docs.markedcopy_url'} =~ m{/default_\d+\.sequence$ }x) { |
$env{'docs.markedcopy_url'} =~ m{/default_\d+\.sequence$ }x) { |
Line 747 sub print_paste_buffer {
|
Line 760 sub print_paste_buffer {
|
} |
} |
if ($canpaste) { |
if ($canpaste) { |
$r->print('<form name="pasteform" action="/adm/coursedocs" method="post">'.$buffer); |
$r->print('<form name="pasteform" action="/adm/coursedocs" method="post">'.$buffer); |
if (($is_uploaded_map) && (!$areachange)) { |
if ((!$areachange) && (!$othercourse) && |
if ((!$othercourse) && ($env{'docs.markedcopy_cmd'} eq 'cut')) { |
($env{'docs.markedcopy_cmd'} eq 'cut')) { |
|
if (($is_uploaded_map) || |
|
($env{'docs.markedcopy_url'} =~ /(bulletinboard|smppg)$/) || |
|
($env{'docs.markedcopy_url'} =~ m{^/uploaded/$coursedom/$coursenum/(?:docs|supplemental)/(.+)$})) { |
|
my ($copytext,$movetext); |
|
if ($is_uploaded_map) { |
|
$copytext = &mt('Copy to new folder'); |
|
$movetext = &mt('Move old folder'); |
|
} elsif ($env{'docs.markedcopy_url'} =~ /bulletinboard$/) { |
|
$copytext = &mt('Copy to new bulletin board (not posts)'); |
|
$movetext = &mt('Move old bulletin board (not posts)'); |
|
} elsif ($env{'docs.markedcopy_url'} =~ /smppg$/) { |
|
$copytext = &mt('Copy to new simple page'); |
|
$movetext = &mt('Move old simple page'); |
|
} else { |
|
$copytext = &mt('Copy to new uploaded document'); |
|
$movetext = &mt('Move old uploaded document'); |
|
} |
$r->print((' 'x 4).'<span id="pasteoptionstext">'. |
$r->print((' 'x 4).'<span id="pasteoptionstext">'. |
'<a href="javascript:showPasteOptions();" class="LC_menubuttons_link">'. |
'<a href="javascript:showPasteOptions();" class="LC_menubuttons_link">'. |
&mt('Show Paste Options').'</a></span><br />'. |
&mt('Show Paste Options').'</a></span><br />'. |
'<div id="pasteoptions" class="LC_dccid">'.(' 'x 4). |
'<div id="pasteoptions" class="LC_dccid">'.(' 'x 4). |
'<label>'. |
'<label>'. |
'<input type="radio" name="docs.markedcopy_options" value="new" checked="checked" />'. |
'<input type="radio" name="docs.markedcopy_options" value="new" checked="checked" />'. |
&mt('Copy to new folder').'</label>'.(' ' x2). |
$copytext.'</label>'.(' ' x2). |
'<label>'. |
'<label>'. |
'<input type="radio" name="docs.markedcopy_options" value="move" />'. |
'<input type="radio" name="docs.markedcopy_options" value="move" />'. |
&mt('Move old folder').'</label><br />'); |
$movetext.'</label><br />'); |
if ($env{'docs.markedcopy_nested'}) { |
if (($is_uploaded_map) && ($env{'docs.markedcopy_nested'})) { |
$r->print('<br />'.&mt('Folder to paste contains sub-folders'). |
$r->print('<br />'.&mt('Folder to paste contains sub-folders'). |
'<br /><table border="0">'); |
'<br /><table border="0">'); |
my @pastemaps = split(/\&/,$env{'docs.markedcopy_nested'}); |
my @pastemaps = split(/\&/,$env{'docs.markedcopy_nested'}); |
Line 965 sub do_paste_from_buffer {
|
Line 995 sub do_paste_from_buffer {
|
} |
} |
if (($srcdom ne $coursedom) || ($srcnum ne $coursenum) || ($prefixchg) || |
if (($srcdom ne $coursedom) || ($srcnum ne $coursenum) || ($prefixchg) || |
(($newurl ne '') && ($newurl ne $url))) { |
(($newurl ne '') && ($newurl ne $url))) { |
unless (&url_paste_fixups($url,$folder,$prefixchg,$coursedom,$coursenum, |
unless (&url_paste_fixups($url,$folder,$prefixchg,$coursedom, |
$allmaps,\%rewrites,\%retitles,\%copies,\%dbcopies, |
$coursenum,$srcdom,$srcnum,$allmaps, |
|
\%rewrites,\%retitles,\%copies,\%dbcopies, |
\%zombies,\%params,\%mapmoves,\%mapchanges,\%tomove, |
\%zombies,\%params,\%mapmoves,\%mapchanges,\%tomove, |
\%newsubdir,\%newurls)) { |
\%newsubdir,\%newurls)) { |
$mapmoves{$url} = 1; |
$mapmoves{$url} = 1; |
} |
} |
$url = $newurl; |
$url = $newurl; |
} elsif ($env{'docs.markedcopy_nested'}) { |
} elsif ($env{'docs.markedcopy_nested'}) { |
&url_paste_fixups($url,$folder,$prefixchg,$coursedom,$coursenum,$allmaps,\%rewrites, |
&url_paste_fixups($url,$folder,$prefixchg,$coursedom,$coursenum, |
|
$srcdom,$srcnum,$allmaps,\%rewrites, |
\%retitles,\%copies,\%dbcopies,\%zombies,\%params,\%mapmoves, |
\%retitles,\%copies,\%dbcopies,\%zombies,\%params,\%mapmoves, |
\%mapchanges,\%tomove,\%newsubdir,\%newurls); |
\%mapchanges,\%tomove,\%newsubdir,\%newurls); |
} |
} |
Line 988 sub do_paste_from_buffer {
|
Line 1020 sub do_paste_from_buffer {
|
} |
} |
} |
} |
} |
} |
if ($url=~ m{/smppg$}) { |
my $lockerrors; |
my $db_name = &Apache::lonsimplepage::get_db_name($url); |
if ($url=~ m{/(bulletinboard|smppg)$}) { |
if ($db_name =~ /^smppage_/) { |
my $prefix = $1; |
#simple pages, need to copy the db contents to a new one. |
#need to copy the db contents to a new one, unless this is a move. |
my %contents=&Apache::lonnet::dump($db_name,$coursedom,$coursenum); |
my %info = ( |
my $now = time(); |
src => $url, |
$db_name =~ s{_\d*$ }{_$now}x; |
cdom => $coursedom, |
my $dbresult=&Apache::lonnet::put($db_name,\%contents, |
cnum => $coursenum, |
$coursedom,$coursenum); |
); |
if ($dbresult eq 'ok') { |
my (%lockerr,$msg); |
$url =~ s{/(\d*)/smppg$ }{/$now/smppg}x; |
unless ($env{'form.docs.markedcopy_options'} eq 'move') { |
|
my ($newurl,$result,$errtext) = |
|
&dbcopy(\%info,$coursedom,$coursenum,\%lockerr); |
|
if ($result eq 'ok') { |
|
$url = $newurl; |
$title=&mt('Copy of').' '.$title; |
$title=&mt('Copy of').' '.$title; |
} else { |
} else { |
return (&mt('Paste failed: An error occurred when copying the simple page.')); |
if ($prefix eq 'smppg') { |
|
$msg = &mt('Paste failed: An error occurred when copying the simple page.').' '.$errtext; |
|
} elsif ($prefix eq 'bulletinboard') { |
|
$msg = &mt('Paste failed: An error occurred when copying the bulletin board.').' '.$errtext; |
|
} |
|
return ($result,undef,[$msg],$lockerr{$prefix}); |
|
} |
|
if ($lockerr{$prefix}) { |
|
$lockerrors = $lockerr{$prefix}; |
} |
} |
} |
} |
} |
} |
$title = &LONCAPA::map::qtunescape($title); |
$title = &LONCAPA::map::qtunescape($title); |
my $ext='false'; |
my $ext='false'; |
Line 1030 sub do_paste_from_buffer {
|
Line 1074 sub do_paste_from_buffer {
|
if ($newdocsdir eq '') { |
if ($newdocsdir eq '') { |
$newdocsdir = 'default'; |
$newdocsdir = 'default'; |
} |
} |
if (($prefixchg) || ($srcdom ne $coursedom) || ($srcnum ne $coursenum)) { |
if (($prefixchg) || |
|
($srcdom ne $coursedom) || ($srcnum ne $coursenum) || |
|
($env{'form.docs.markedcopy_options'} ne 'move')) { |
my $newpath = "$newprefix/$newdocsdir/$newidx/$rem"; |
my $newpath = "$newprefix/$newdocsdir/$newidx/$rem"; |
$url = |
$url = |
&Apache::lonclonecourse::writefile($env{'request.course.id'},$newpath, |
&Apache::lonclonecourse::writefile($env{'request.course.id'},$newpath, |
Line 1066 sub do_paste_from_buffer {
|
Line 1112 sub do_paste_from_buffer {
|
copies => \%copies, |
copies => \%copies, |
docmoves => \%docmoves, |
docmoves => \%docmoves, |
mapmoves => \%mapmoves, |
mapmoves => \%mapmoves, |
); |
); |
$result = |
($result,my $msgsarray,my $lockerror) = |
&apply_fixups($folder,$is_map,$coursedom,$coursenum,$errors, |
&apply_fixups($folder,$is_map,$coursedom,$coursenum,$errors, |
\%updated,\%info,\%moves,$prefixchg,$oldurl,$url,'paste'); |
\%updated,\%info,\%moves,$prefixchg,$oldurl,$url,'paste'); |
|
$lockerrors .= $lockerror; |
if ($result eq 'ok') { |
if ($result eq 'ok') { |
if ($is_map) { |
if ($is_map) { |
my ($errtext,$fatal) = &mapread($coursenum,$coursedom, |
my ($errtext,$fatal) = &mapread($coursenum,$coursedom, |
$folder.'.'.$container); |
$folder.'.'.$container); |
return $errtext if ($fatal); |
return ($errtext,$save_err,$msgsarray,$lockerrors) if ($fatal); |
|
|
if ($#LONCAPA::map::order<1) { |
if ($#LONCAPA::map::order<1) { |
my $idx=&LONCAPA::map::getresidx(); |
my $idx=&LONCAPA::map::getresidx(); |
Line 1105 sub do_paste_from_buffer {
|
Line 1152 sub do_paste_from_buffer {
|
$save_err = $errtext; |
$save_err = $errtext; |
} |
} |
} |
} |
|
|
if ($env{'form.docs.markedcopy_options'} eq 'move') { |
if ($env{'form.docs.markedcopy_options'} eq 'move') { |
&Apache::lonnet::delenv('docs.markedcopy'); |
&Apache::lonnet::delenv('docs.markedcopy'); |
&Apache::lonnet::delenv('docs.markedcopy_nested'); |
&Apache::lonnet::delenv('docs.markedcopy_nested'); |
&Apache::lonnet::delenv('docs.markedcopy_nestednames'); |
&Apache::lonnet::delenv('docs.markedcopy_nestednames'); |
} |
} |
return ($result,$save_err); |
return ($result,$save_err,$msgsarray,$lockerrors); |
} |
} |
|
|
sub get_newmap_url { |
sub get_newmap_url { |
Line 1175 sub get_newmap_url {
|
Line 1222 sub get_newmap_url {
|
} |
} |
|
|
sub dbcopy { |
sub dbcopy { |
my ($url,$coursedom,$coursenum) = @_; |
my ($dbref,$coursedom,$coursenum,$lockerrorsref) = @_; |
if ($url=~ m{/smppg$}) { |
my ($url,$result,$errtext); |
my $db_name = &Apache::lonsimplepage::get_db_name($url); |
my $url = $dbref->{'src'}; |
if ($db_name =~ /^smppage_/) { |
if (ref($dbref) eq 'HASH') { |
#simple pages, need to copy the db contents to a new one. |
if ($url =~ m{/(smppg|bulletinboard)$}) { |
my %contents=&Apache::lonnet::dump($db_name,$coursedom,$coursenum); |
my $prefix = $1; |
my $now = time(); |
if (($dbref->{'cdom'} =~ /^$match_domain$/) && |
$db_name =~ s{_\d*$ }{_$now}x; |
($dbref->{'cnum'} =~ /^$match_courseid$/)) { |
my $result=&Apache::lonnet::put($db_name,\%contents, |
my $db_name; |
$coursedom,$coursenum); |
my $marker = (split(m{/},$url))[4]; |
$url =~ s{/(\d*)/smppg$ }{/$now/smppg}x; |
$marker=~s/\D//g; |
|
if ($dbref->{'src'} =~ m{/smppg$}) { |
|
$db_name = |
|
&Apache::lonsimplepage::get_db_name($url,$marker, |
|
$dbref->{'cdom'}, |
|
$dbref->{'cnum'}); |
|
} else { |
|
$db_name = 'bulletinpage_'.$marker; |
|
} |
|
my ($suffix,$freedlock,$error) = |
|
&Apache::lonnet::get_timebased_id($prefix,'num','templated', |
|
$coursedom,$coursenum, |
|
'concat'); |
|
if (!$suffix) { |
|
if ($prefix eq 'smppg') { |
|
$errtext = &mt('Failed to acquire a unique timestamp-based suffix when copying a simple page [_1].',$url); |
|
} else { |
|
$errtext = &mt('Failed to acquire a unique timestamp-based suffix when copying a bulletin board [_1].',$url); |
|
} |
|
if ($error) { |
|
$errtext .= '<br />'.$error; |
|
} |
|
} else { |
|
#need to copy the db contents to a new one. |
|
my %contents=&Apache::lonnet::dump($db_name, |
|
$dbref->{'cdom'}, |
|
$dbref->{'cnum'}); |
|
if (exists($contents{'uploaded.photourl'})) { |
|
my $photo = $contents{'uploaded.photourl'}; |
|
my ($subdir,$fname) = |
|
($photo =~ m{^/uploaded/$match_domain/$match_courseid/+(bulletin|simplepage)/(?:|\d+/)([^/]+)$}); |
|
my $newphoto; |
|
if ($fname ne '') { |
|
my $content = &Apache::lonnet::getfile($photo); |
|
unless ($content eq '-1') { |
|
$env{'form.'.$suffix.'.photourl'} = $content; |
|
$newphoto = |
|
&Apache::lonnet::finishuserfileupload($coursenum,$coursedom,$suffix.'.photourl',"$subdir/$suffix/$fname"); |
|
delete($env{'form.'.$suffix.'.photourl'}); |
|
} |
|
} |
|
if ($newphoto =~ m{^/uploaded/}) { |
|
$contents{'uploaded.photourl'} = $newphoto; |
|
} |
|
} |
|
$db_name =~ s{_\d*$ }{_$suffix}x; |
|
$result=&Apache::lonnet::put($db_name,\%contents, |
|
$coursedom,$coursenum); |
|
if ($result eq 'ok') { |
|
$url =~ s{/(\d*)/(smppg|bulletinboard)$}{/$suffix/$2}x; |
|
} |
|
} |
|
if (($freedlock ne 'ok') && (ref($lockerrorsref) eq 'HASH')) { |
|
$lockerrorsref->{$prefix} = |
|
'<div class="LC_error">'. |
|
&mt('There was a problem removing a lockfile.'); |
|
if ($prefix eq 'smppg') { |
|
$lockerrorsref->{$prefix} .= |
|
&mt('This will prevent creation of additional simple pages in this course.'); |
|
} else { |
|
$lockerrorsref->{$prefix} .= &mt('This will prevent creation of additional bulletin boards in this course.'); |
|
} |
|
$lockerrorsref->{$prefix} .= &mt('Please contact the domain coordinator for your LON-CAPA domain.').'</div>'; |
|
} |
|
} |
|
} elsif ($url =~ m{/syllabus$}) { |
|
if (($dbref->{'cdom'} =~ /^$match_domain$/) && |
|
($dbref->{'cnum'} =~ /^$match_courseid$/)) { |
|
if (($dbref->{'cdom'} ne $coursedom) || |
|
($dbref->{'cnum'} ne $coursenum)) { |
|
my %contents=&Apache::lonnet::dump('syllabus', |
|
$dbref->{'cdom'}, |
|
$dbref->{'cnum'}); |
|
$result=&Apache::lonnet::put('syllabus',\%contents, |
|
$coursedom,$coursenum); |
|
} |
|
} |
} |
} |
} |
} |
return $url; |
return ($url,$result,$errtext); |
} |
} |
|
|
sub uniqueness_check { |
sub uniqueness_check { |
Line 1254 sub contained_map_check {
|
Line 1377 sub contained_map_check {
|
} |
} |
|
|
sub url_paste_fixups { |
sub url_paste_fixups { |
my ($oldurl,$folder,$prefixchg,$cdom,$cnum,$allmaps,$rewrites,$retitles,$copies, |
my ($oldurl,$folder,$prefixchg,$cdom,$cnum,$fromcdom,$fromcnum,$allmaps, |
$dbcopies,$zombies,$params,$mapmoves,$mapchanges,$tomove,$newsubdir,$newurls) = @_; |
$rewrites,$retitles,$copies,$dbcopies,$zombies,$params,$mapmoves, |
|
$mapchanges,$tomove,$newsubdir,$newurls) = @_; |
my $checktitle; |
my $checktitle; |
if (($prefixchg) && |
if (($prefixchg) && |
($oldurl =~ m{^/uploaded/$match_domain/$match_courseid/supplemental})) { |
($oldurl =~ m{^/uploaded/$match_domain/$match_courseid/supplemental})) { |
Line 1282 sub url_paste_fixups {
|
Line 1406 sub url_paste_fixups {
|
my $title = $token->[2]->{'title'}; |
my $title = $token->[2]->{'title'}; |
if ($checktitle) { |
if ($checktitle) { |
if ($title =~ m{\d+\Q___&&&___\E$match_username\Q___&&&___\E$match_domain\Q___&&&___\E(.+)$}) { |
if ($title =~ m{\d+\Q___&&&___\E$match_username\Q___&&&___\E$match_domain\Q___&&&___\E(.+)$}) { |
$retitles->{$oldurl}{$ressrc} = $id; |
$retitles->{$oldurl}{$id} = $ressrc; |
} |
} |
} |
} |
next if ($token->[2]->{'type'} eq 'external'); |
next if ($token->[2]->{'type'} eq 'external'); |
if ($token->[2]->{'type'} eq 'zombie') { |
if ($token->[2]->{'type'} eq 'zombie') { |
next if ($skip); |
next if ($skip); |
$zombies->{$oldurl}{$ressrc} = $id; |
$zombies->{$oldurl}{$id} = $ressrc; |
$changed = 1; |
$changed = 1; |
} elsif ($ressrc =~ m{^/uploaded/($match_domain)/($match_courseid)/(.+)$}) { |
} elsif ($ressrc =~ m{^/uploaded/($match_domain)/($match_courseid)/(.+)$}) { |
my $srcdom = $1; |
my $srcdom = $1; |
Line 1300 sub url_paste_fixups {
|
Line 1424 sub url_paste_fixups {
|
my $prefix = $1; |
my $prefix = $1; |
$mapname = $prefix.$2; |
$mapname = $prefix.$2; |
if ($tomove->{$mapname}) { |
if ($tomove->{$mapname}) { |
&url_paste_fixups($ressrc,$folder,$prefixchg,$cdom,$cnum,$allmaps, |
&url_paste_fixups($ressrc,$folder,$prefixchg,$cdom,$cnum, |
$rewrites,$retitles,$copies,$dbcopies,$zombies, |
$srcdom,$srcnum,$allmaps,$rewrites, |
$params,$mapmoves,$mapchanges,$tomove,$newsubdir, |
$retitles,$copies,$dbcopies,$zombies, |
$newurls); |
$params,$mapmoves,$mapchanges,$tomove, |
|
$newsubdir,$newurls); |
next; |
next; |
} else { |
} else { |
($newurl,my $error) = |
($newurl,my $error) = |
Line 1321 sub url_paste_fixups {
|
Line 1446 sub url_paste_fixups {
|
($mapchanges->{$oldurl}) || (($newurl ne '') && ($newurl ne $oldurl))) { |
($mapchanges->{$oldurl}) || (($newurl ne '') && ($newurl ne $oldurl))) { |
|
|
if ($rem =~ /^(default|supplemental)(_?\d*).(sequence|page)$/) { |
if ($rem =~ /^(default|supplemental)(_?\d*).(sequence|page)$/) { |
$rewrites->{$oldurl}{$ressrc} = $id; |
$rewrites->{$oldurl}{$id} = $ressrc; |
$mapchanges->{$ressrc} = 1; |
$mapchanges->{$ressrc} = 1; |
unless (&url_paste_fixups($ressrc,$folder,$prefixchg,$cdom,$cnum,$allmaps, |
unless (&url_paste_fixups($ressrc,$folder,$prefixchg,$cdom, |
$rewrites,$retitles,$copies,$dbcopies,$zombies, |
$cnum,$srcdom,$srcnum,$allmaps, |
$params,$mapmoves,$mapchanges,$tomove,$newsubdir, |
$rewrites,$retitles,$copies,$dbcopies, |
$newurls)) { |
$zombies,$params,$mapmoves,$mapchanges, |
|
$tomove,$newsubdir,$newurls)) { |
$mapmoves->{$ressrc} = 1; |
$mapmoves->{$ressrc} = 1; |
} |
} |
$changed = 1; |
$changed = 1; |
} else { |
} else { |
$rewrites->{$oldurl}{$ressrc} = $id; |
$rewrites->{$oldurl}{$id} = $ressrc; |
$copies->{$oldurl}{$ressrc} = $id; |
$copies->{$oldurl}{$ressrc} = $id; |
$changed = 1; |
$changed = 1; |
} |
} |
} |
} |
} elsif ($ressrc =~ m{^/adm/($match_domain)/($match_courseid)/(.+)$}) { |
} elsif ($ressrc =~ m{^/adm/($match_domain)/($match_courseid)/.+$}) { |
next if ($skip); |
next if ($skip); |
my $srcdom = $1; |
my $srcdom = $1; |
my $srcnum = $2; |
my $srcnum = $2; |
if (($srcdom ne $cdom) || ($srcnum ne $cnum)) { |
if (($srcdom ne $cdom) || ($srcnum ne $cnum)) { |
$rewrites->{$oldurl}{$ressrc} = $id; |
$rewrites->{$oldurl}{$id} = $ressrc; |
$dbcopies->{$oldurl}{$ressrc} = $id; |
$dbcopies->{$oldurl}{$id}{'src'} = $ressrc; |
|
$dbcopies->{$oldurl}{$id}{'cdom'} = $srcdom; |
|
$dbcopies->{$oldurl}{$id}{'cnum'} = $srcnum; |
|
$changed = 1; |
|
} |
|
} elsif ($ressrc =~ m{^/adm/$match_domain/$match_username/\d+/(smppg|bulletinboard)$}) { |
|
if (($fromcdom ne $cdom) || ($fromcnum ne $cnum) || |
|
($env{'form.docs.markedcopy_options'} ne 'move')) { |
|
$dbcopies->{$oldurl}{$id}{'src'} = $ressrc; |
|
$dbcopies->{$oldurl}{$id}{'cdom'} = $fromcdom; |
|
$dbcopies->{$oldurl}{$id}{'cnum'} = $fromcnum; |
$changed = 1; |
$changed = 1; |
} |
} |
} elsif ($ressrc =~ m{^/public/($match_domain)/($match_courseid)/(.+)$}) { |
} elsif ($ressrc =~ m{^/public/($match_domain)/($match_courseid)/(.+)$}) { |
Line 1350 sub url_paste_fixups {
|
Line 1486 sub url_paste_fixups {
|
my $srcdom = $1; |
my $srcdom = $1; |
my $srcnum = $2; |
my $srcnum = $2; |
if (($srcdom ne $cdom) || ($srcnum ne $cnum)) { |
if (($srcdom ne $cdom) || ($srcnum ne $cnum)) { |
$rewrites->{$oldurl}{$ressrc} = $id; |
$dbcopies->{$oldurl}{$id}{'src'} = $ressrc; |
$dbcopies->{$oldurl}{$ressrc} = $id; |
$dbcopies->{$oldurl}{$id}{'cdom'} = $srcdom; |
|
$dbcopies->{$oldurl}{$id}{'cnum'} = $srcnum; |
$changed = 1; |
$changed = 1; |
} |
} |
} |
} |
Line 1374 sub apply_fixups {
|
Line 1511 sub apply_fixups {
|
my ($folder,$is_map,$cdom,$cnum,$errors,$updated,$info,$moves,$prefixchg, |
my ($folder,$is_map,$cdom,$cnum,$errors,$updated,$info,$moves,$prefixchg, |
$oldurl,$url,$caller) = @_; |
$oldurl,$url,$caller) = @_; |
my (%rewrites,%zombies,%removefrommap,%removeparam,%dbcopies,%retitles, |
my (%rewrites,%zombies,%removefrommap,%removeparam,%dbcopies,%retitles, |
%params,%newsubdir,%before,%after,%copies,%docmoves,%mapmoves); |
%params,%newsubdir,%before,%after,%copies,%docmoves,%mapmoves,@msgs, |
|
%lockerrors,$lockmsg); |
if (ref($updated) eq 'HASH') { |
if (ref($updated) eq 'HASH') { |
if (ref($updated->{'rewrites'}) eq 'HASH') { |
if (ref($updated->{'rewrites'}) eq 'HASH') { |
%rewrites = %{$updated->{'rewrites'}}; |
%rewrites = %{$updated->{'rewrites'}}; |
Line 1436 sub apply_fixups {
|
Line 1574 sub apply_fixups {
|
} |
} |
if ($key eq $oldurl) { |
if ($key eq $oldurl) { |
if ((exists($docmoves{$key}))) { |
if ((exists($docmoves{$key}))) { |
unless (grep(/^\Q$oldurl\E/,@allcopies)) { |
unless (grep(/^\Q$oldurl\E$/,@allcopies)) { |
push(@allcopies,$oldurl); |
push(@allcopies,$oldurl); |
} |
} |
} |
} |
Line 1458 sub apply_fixups {
|
Line 1596 sub apply_fixups {
|
$storefn =~ s/^\Q$before{'doc'}\E/$after{'doc'}/; |
$storefn =~ s/^\Q$before{'doc'}\E/$after{'doc'}/; |
} |
} |
if ($newsubdir{$key}) { |
if ($newsubdir{$key}) { |
$storefn =~ s#^(docs|supplemental)/\Q$oldsubdir\E/#$1/$newsubdir{$key}#; |
$storefn =~ s#^(docs|supplemental)/\Q$oldsubdir\E/#$1/$newsubdir{$key}/#; |
} |
} |
} |
} |
©_dependencies($item,$storefn,$relpath,$errors,\$content); |
©_dependencies($item,$storefn,$relpath,$errors,\$content); |
Line 1531 sub apply_fixups {
|
Line 1669 sub apply_fixups {
|
%zombie = %{$zombies{$key}}; |
%zombie = %{$zombies{$key}}; |
} |
} |
if (ref($dbcopies{$key}) eq 'HASH') { |
if (ref($dbcopies{$key}) eq 'HASH') { |
foreach my $item (keys(%{$dbcopies{$key}})) { |
foreach my $idx (keys(%{$dbcopies{$key}})) { |
$newdb{$item} = &dbcopy($item); |
if (ref($dbcopies{$key}{$idx}) eq 'HASH') { |
|
my ($newurl,$result,$errtext) = |
|
&dbcopy($dbcopies{$key}{$idx},$cdom,$cnum,\%lockerrors); |
|
if ($result eq 'ok') { |
|
$newdb{$idx} = $newurl; |
|
} elsif (ref($errors) eq 'HASH') { |
|
$errors->{$key} = 1; |
|
} |
|
push(@msgs,$errtext); |
|
} |
} |
} |
} |
} |
if (ref($params{$key}) eq 'HASH') { |
if (ref($params{$key}) eq 'HASH') { |
Line 1540 sub apply_fixups {
|
Line 1687 sub apply_fixups {
|
} |
} |
my ($errtext,$fatal) = &LONCAPA::map::mapread($key); |
my ($errtext,$fatal) = &LONCAPA::map::mapread($key); |
if ($fatal) { |
if ($fatal) { |
return $errtext; |
return ($errtext); |
} |
} |
for (my $i=0; $i<@LONCAPA::map::zombies; $i++) { |
for (my $i=0; $i<@LONCAPA::map::zombies; $i++) { |
if (defined($LONCAPA::map::zombies[$i])) { |
if (defined($LONCAPA::map::zombies[$i])) { |
my ($title,$src,$ext,$type)=split(/\:/,$LONCAPA::map::zombies[$i]); |
my ($title,$src,$ext,$type)=split(/\:/,$LONCAPA::map::zombies[$i]); |
if ($zombie{$src} eq $i) { |
if ($zombie{$i} eq $src) { |
undef($LONCAPA::map::zombies[$i]); |
undef($LONCAPA::map::zombies[$i]); |
} |
} |
} |
} |
Line 1565 sub apply_fixups {
|
Line 1712 sub apply_fixups {
|
next; |
next; |
} |
} |
my $origsrc = $src; |
my $origsrc = $src; |
if ((exists($toretitle{$src})) && ($toretitle{$src} eq $idx)) { |
if ((exists($toretitle{$idx})) && ($toretitle{$idx} eq $src)) { |
if ($title =~ m{^\d+\Q___&&&___\E$match_username\Q___&&&___\E$match_domain\Q___&&&___\E(.+)$}) { |
if ($title =~ m{^\d+\Q___&&&___\E$match_username\Q___&&&___\E$match_domain\Q___&&&___\E(.+)$}) { |
$changed = 1; |
$changed = 1; |
} |
} |
} |
} |
if ((exists($torewrite{$src})) && ($torewrite{$src} eq $idx)) { |
if ((exists($torewrite{$idx})) && ($torewrite{$idx} eq $src)) { |
$src =~ s{^/(uploaded|adm|public)/$match_domain/$match_courseid/}{/$1/$cdom/$cnum/}; |
$src =~ s{^/(uploaded|adm|public)/$match_domain/$match_courseid/}{/$1/$cdom/$cnum/}; |
if ($origsrc =~ m{^/uploaded/}) { |
if ($origsrc =~ m{^/uploaded/}) { |
if ($prefixchg && $before{'map'} && $after{'map'}) { |
if ($prefixchg && $before{'map'} && $after{'map'}) { |
Line 1580 sub apply_fixups {
|
Line 1727 sub apply_fixups {
|
$src =~ s#^(/uploaded/$match_domain/$match_courseid/)\Q$before{'doc'}\E#$1$after{'doc'}#; |
$src =~ s#^(/uploaded/$match_domain/$match_courseid/)\Q$before{'doc'}\E#$1$after{'doc'}#; |
} |
} |
} |
} |
if ($newsubdir{$origsrc}) { |
if ($origsrc =~ /\.(page|sequence)$/) { |
if ($src =~ /\.(page|sequence)$/) { |
if ($newsubdir{$origsrc}) { |
$src =~ s#^(/uploaded/$match_domain/$match_courseid/(?:default|supplemental)_)(\d+)#$1$newsubdir{$origsrc}#; |
$src =~ s#^(/uploaded/$match_domain/$match_courseid/(?:default|supplemental)_)(\d+)#$1$newsubdir{$origsrc}#; |
} else { |
|
$src =~ s#^(/uploaded/$match_domain/$match_courseid/\w+/)(\d+)#$1$newsubdir{$origsrc}#; |
|
} |
} |
|
} elsif ($newsubdir{$key}) { |
|
$src =~ s#^(/uploaded/$match_domain/$match_courseid/\w+/)(\d+)#$1$newsubdir{$key}#; |
} |
} |
} |
} |
$changed = 1; |
$changed = 1; |
} elsif ($newdb{$src} ne '') { |
} elsif ($newdb{$idx} ne '') { |
$src = $newdb{$src}; |
$src = $newdb{$idx}; |
$changed = 1; |
$changed = 1; |
} |
} |
if ($changed) { |
if ($changed) { |
Line 1605 sub apply_fixups {
|
Line 1752 sub apply_fixups {
|
} |
} |
} |
} |
} |
} |
|
if (values(%lockerrors) > 0) { |
|
$lockmsg = join('<br />',values(%lockerrors)); |
|
} |
my $storefn; |
my $storefn; |
if ($key eq $oldurl) { |
if ($key eq $oldurl) { |
$storefn = $url; |
$storefn = $url; |
Line 1627 sub apply_fixups {
|
Line 1777 sub apply_fixups {
|
&LONCAPA::map::storemap("/uploaded/$cdom/$cnum/$storefn",1,$report); |
&LONCAPA::map::storemap("/uploaded/$cdom/$cnum/$storefn",1,$report); |
if ($errtext) { |
if ($errtext) { |
if ($caller eq 'paste') { |
if ($caller eq 'paste') { |
return &mt('Paste failed: an error occurred saving the folder or page.'); |
return (&mt('Paste failed: an error occurred saving the folder or page.')); |
} |
} |
} |
} |
} |
} |
} |
} |
return 'ok'; |
return ('ok',\@msgs,$lockmsg); |
} |
} |
|
|
sub copy_dependencies { |
sub copy_dependencies { |
Line 1820 sub editor {
|
Line 1970 sub editor {
|
|
|
if ($env{'form.pastemarked'}) { |
if ($env{'form.pastemarked'}) { |
my %paste_errors; |
my %paste_errors; |
my ($paste_res,$save_error) = |
my ($paste_res,$save_error,$pastemsgarray,$lockerror) = |
&do_paste_from_buffer($coursenum,$coursedom,$folder,$container, |
&do_paste_from_buffer($coursenum,$coursedom,$folder,$container, |
\%paste_errors); |
\%paste_errors); |
|
if (ref($pastemsgarray) eq 'ARRAY') { |
|
if (@{$pastemsgarray} > 0) { |
|
|
|
$r->print('<p class="LC_info">'. |
|
join('<br />',@{$pastemsgarray}). |
|
'</p>'); |
|
} |
|
} |
|
if ($lockerror) { |
|
$r->print('<p class="LC_error">'. |
|
$lockerror. |
|
'</p>'); |
|
} |
if ($save_error ne '') { |
if ($save_error ne '') { |
return $save_error; |
return $save_error; |
} |
} |
Line 1856 sub editor {
|
Line 2019 sub editor {
|
foreach my $item (split(/\&/,$env{'form.importdetail'})) { |
foreach my $item (split(/\&/,$env{'form.importdetail'})) { |
if (defined($item)) { |
if (defined($item)) { |
my ($name,$url,$residx)= |
my ($name,$url,$residx)= |
map {&unescape($_)} split(/\=/,$item); |
map { &unescape($_); } split(/\=/,$item); |
if ($url=~ m{^\Q/uploaded/$coursedom/$coursenum/\E(default|supplemental)_new\.(sequence|page)$}) { |
if ($url =~ m{^\Q/uploaded/$coursedom/$coursenum/\E(default|supplemental)_new\.(sequence|page)$}) { |
my ($suffix,$errortxt,$locknotfreed) = |
my ($suffix,$errortxt,$locknotfreed) = |
&newmap_suffix($1,$2,$coursedom,$coursenum); |
&new_timebased_suffix($coursedom,$coursenum,'map',$1,$2); |
if ($locknotfreed) { |
if ($locknotfreed) { |
$r->print($locknotfreed); |
$r->print($locknotfreed); |
} |
} |
Line 1868 sub editor {
|
Line 2031 sub editor {
|
} else { |
} else { |
return $errortxt; |
return $errortxt; |
} |
} |
|
} elsif ($url =~ m{^/adm/$match_domain/$match_username/new/(smppg|bulletinboard)$}) { |
|
my $type = $1; |
|
my ($suffix,$errortxt,$locknotfreed) = |
|
&new_timebased_suffix($coursedom,$coursenum,$type); |
|
if ($locknotfreed) { |
|
$r->print($locknotfreed); |
|
} |
|
if ($suffix) { |
|
$url =~ s{^(/adm/$match_domain/$match_username)/new}{$1/$suffix}; |
|
} else { |
|
return $errortxt; |
|
} |
} |
} |
push(@imports, [$name, $url, $residx]); |
push(@imports, [$name, $url, $residx]); |
} |
} |
} |
} |
($errtext,$fatal,my $fixuperrors) = |
($errtext,$fatal,my $fixuperrors) = |
&group_import($coursenum, $coursedom, $folder,$container, |
&group_import($coursenum, $coursedom, $folder,$container, |
'londocs',@imports); |
'londocs',@imports); |
return $errtext if ($fatal); |
return $errtext if ($fatal); |
Line 2598 ENDPARMS
|
Line 2773 ENDPARMS
|
return $line; |
return $line; |
} |
} |
|
|
sub newmap_suffix { |
sub new_timebased_suffix { |
my ($area,$container,$coursedom,$coursenum) = @_; |
my ($coursedom,$coursenum,$type,$area,$container) = @_; |
my ($prefix,$idtype,$errtext,$locknotfreed); |
my ($prefix,$namespace,$idtype,$errtext,$locknotfreed); |
$prefix = 'docs'; |
if ($type eq 'map') { |
if ($area eq 'supplemental') { |
$prefix = 'docs'; |
$prefix = 'supp'; |
if ($area eq 'supplemental') { |
|
$prefix = 'supp'; |
|
} |
|
$prefix .= $container; |
|
$namespace = 'uploadedmaps'; |
|
} else { |
|
$prefix = $type; |
|
$namespace = 'templated'; |
} |
} |
$prefix .= $container; |
|
$idtype = 'concat'; |
$idtype = 'concat'; |
my ($suffix,$freedlock,$error) = |
my ($suffix,$freedlock,$error) = |
&Apache::lonnet::get_timebased_id($prefix,'num','uploadedmaps', |
&Apache::lonnet::get_timebased_id($prefix,'num',$namespace, |
$coursedom,$coursenum); |
$coursedom,$coursenum); |
if (!$suffix) { |
if (!$suffix) { |
$errtext = &mt('Failed to acquire a unique timestamp-based suffix for the new folder/page.'); |
if ($type eq 'map') { |
|
$errtext = &mt('Failed to acquire a unique timestamp-based suffix for the new folder/page.'); |
|
} elsif ($type eq 'smppg') { |
|
$errtext = &mt('Failed to acquire a unique timestamp-based suffix for the new simple page.'); |
|
} else { |
|
$errtext = &mt('Failed to acquire a unique timestamp-based suffix for the new bulletin board.'); |
|
} |
if ($error) { |
if ($error) { |
$errtext .= '<br />'.$error; |
$errtext .= '<br />'.$error; |
} |
} |
} |
} |
if ($freedlock ne 'ok') { |
if ($freedlock ne 'ok') { |
$locknotfreed = '<div class="LC_error">'.&mt('There was a problem removing a lockfile. This will prevent creation of additional folders or composite pages in this course. Please contact the domain coordinator for your LON-CAPA domain.').'</div>'; |
$locknotfreed = |
|
'<div class="LC_error">'. |
|
&mt('There was a problem removing a lockfile.').' '; |
|
if ($type eq 'map') { |
|
&mt('This will prevent creation of additional folders or composite pages in this course.'); |
|
} elsif ($type eq 'smppg') { |
|
$locknotfreed .= |
|
&mt('This will prevent creation of additional simple pages in this course.'); |
|
} else { |
|
$locknotfreed .= |
|
&mt('This will prevent creation of additional bulletin boards in this course.'); |
|
} |
|
$locknotfreed .= |
|
' '.&mt('Please contact the domain coordinator for your LON-CAPA domain.'). |
|
'</div>'; |
} |
} |
return ($suffix,$errtext,$locknotfreed); |
return ($suffix,$errtext,$locknotfreed); |
} |
} |
Line 3305 sub handler {
|
Line 3506 sub handler {
|
if ($env{'form.symb'} ne '') { |
if ($env{'form.symb'} ne '') { |
$env{'form.folderpath'}= |
$env{'form.folderpath'}= |
&Apache::loncommon::symb_to_docspath($env{'form.symb'}); |
&Apache::loncommon::symb_to_docspath($env{'form.symb'}); |
&Apache::lonnet::appenv({'docs.exit.'.$env{'request.course.id'} => |
&Apache::lonnet::appenv({'docs.exit.'.$env{'request.course.id'} => |
$env{'form.command'}.'_'.$env{'form.symb'}}); |
$env{'form.command'}.'_'.$env{'form.symb'}}); |
} elsif ($env{'form.supppath'} ne '') { |
} elsif ($env{'form.supppath'} ne '') { |
$env{'form.folderpath'}=$env{'form.supppath'}; |
$env{'form.folderpath'}=$env{'form.supppath'}; |
&Apache::lonnet::appenv({'docs.exit.'.$env{'request.course.id'} => |
&Apache::lonnet::appenv({'docs.exit.'.$env{'request.course.id'} => |
$env{'form.command'}.'_'.$env{'form.supppath'}}); |
$env{'form.command'}.'_'.$env{'form.supppath'}}); |
} |
} |
} elsif ($env{'form.command'} eq 'editdocs') { |
} elsif ($env{'form.command'} eq 'editdocs') { |
Line 4377 sub generate_edit_table {
|
Line 4578 sub generate_edit_table {
|
|
|
sub editing_js { |
sub editing_js { |
my ($udom,$uname,$supplementalflag) = @_; |
my ($udom,$uname,$supplementalflag) = @_; |
my $now = time(); |
|
my %lt = &Apache::lonlocal::texthash( |
my %lt = &Apache::lonlocal::texthash( |
p_mnf => 'Name of New Folder', |
p_mnf => 'Name of New Folder', |
t_mnf => 'New Folder', |
t_mnf => 'New Folder', |
Line 4417 sub editing_js {
|
Line 4617 sub editing_js {
|
my $toplevelsupp = &supplemental_base(); |
my $toplevelsupp = &supplemental_base(); |
|
|
my $backtourl; |
my $backtourl; |
if ($env{'docs.exit.'.$env{'request.course.id'}} =~ /^direct_(.+)$/) { |
if ($env{'docs.exit.'.$env{'request.course.id'}} =~ /^direct_(.+)$/) { |
my $caller = $1; |
my $caller = $1; |
if ($caller =~ /^supplemental/) { |
if ($caller =~ /^supplemental/) { |
$backtourl = '/adm/supplemental?folderpath='.&escape($caller); |
$backtourl = '/adm/supplemental?folderpath='.&escape($caller); |
} else { |
} else { |
Line 4475 function makesmppage() {
|
Line 4675 function makesmppage() {
|
var title=prompt('$lt{"p_msp"}'); |
var title=prompt('$lt{"p_msp"}'); |
if (title) { |
if (title) { |
this.document.forms.newsmppg.importdetail.value= |
this.document.forms.newsmppg.importdetail.value= |
escape(title)+'=/adm/$udom/$uname/$now/smppg'; |
escape(title)+'=/adm/$udom/$uname/new/smppg'; |
this.document.forms.newsmppg.submit(); |
this.document.forms.newsmppg.submit(); |
} |
} |
} |
} |
Line 4502 function makebulboard() {
|
Line 4702 function makebulboard() {
|
var title=prompt('$lt{"p_mbb"}'); |
var title=prompt('$lt{"p_mbb"}'); |
if (title) { |
if (title) { |
this.document.forms.newbul.importdetail.value= |
this.document.forms.newbul.importdetail.value= |
escape(title)+'=/adm/$udom/$uname/$now/bulletinboard'; |
escape(title)+'=/adm/$udom/$uname/new/bulletinboard'; |
this.document.forms.newbul.submit(); |
this.document.forms.newbul.submit(); |
} |
} |
} |
} |