';
}
}
- if ($pasteitems eq '') {
- &Apache::lonnet::delenv('docs.markedcopies');
- }
- my ($pasteform,$form_start,$buttons,$form_end);
- if ($pasteitems) {
- $pasteitems .= '';
- $form_start = '';
+
+ $r->print('');
}
sub recurse_print {
- my ($outputref,$dir,$deps,$display) = @_;
- $$outputref .= $display->{$dir}."\n";
+ my ($r,$dir,$deps,$display) = @_;
+ $r->print($display->{$dir}."\n");
if (ref($deps->{$dir}) eq 'ARRAY') {
foreach my $subdir (@{$deps->{$dir}}) {
- &recurse_print($outputref,$subdir,$deps,$display);
+ &recurse_print($r,$subdir,$deps,$display);
}
}
}
@@ -1343,76 +904,22 @@ sub supp_pasteable {
sub paste_popup_js {
my %lt = &Apache::lonlocal::texthash(
- show => 'Show Options',
- hide => 'Hide Options',
- none => 'No items selected from clipboard.',
+ show => 'Show Paste Options',
+ hide => 'Hide Paste Options',
);
return <<"END";
-function showPasteOptions(suffix) {
- document.getElementById('pasteoptions_'+suffix).style.display='block';
- document.getElementById('pasteoptionstext_'+suffix).innerHTML = ' $lt{'hide'}';
+function showPasteOptions() {
+ document.getElementById('pasteoptions').style.display='block';
+ document.getElementById('pasteoptions').style.textAlign='left';
+ document.getElementById('pasteoptions').style.textFace='normal';
+ document.getElementById('pasteoptionstext').innerHTML ='$lt{'hide'} ';
return;
}
-function hidePasteOptions(suffix) {
- document.getElementById('pasteoptions_'+suffix).style.display='none';
- document.getElementById('pasteoptionstext_'+suffix).innerHTML =' $lt{'show'}';
- return;
-}
-
-function showOptions(caller,suffix) {
- if (document.getElementById('pasteoptionstext_'+suffix)) {
- if (caller.checked) {
- document.getElementById('pasteoptionstext_'+suffix).innerHTML =' $lt{'show'}';
- } else {
- document.getElementById('pasteoptionstext_'+suffix).innerHTML ='';
- }
- if (document.getElementById('pasteoptions_'+suffix)) {
- document.getElementById('pasteoptions_'+suffix).style.display='none';
- }
- }
- return;
-}
-
-function validateClipboard() {
- var numchk = 0;
- if (document.pasteform.pasting.length > 1) {
- for (var i=0; i 0) {
- return true;
- } else {
- alert("$lt{'none'}");
- return false;
- }
-}
-
-function checkClipboard() {
- if (document.pasteform.pasting.length > 1) {
- for (var i=0; i1) {
- for (var i=0; i$lt{'show'}';
return;
}
@@ -1420,425 +927,280 @@ END
}
+
sub do_paste_from_buffer {
my ($coursenum,$coursedom,$folder,$container,$errors) = @_;
-# Array of items in paste buffer
- my (@currpaste,%pastebuffer,%allerrors);
- @currpaste = split(/,/,$env{'docs.markedcopies'});
-
# Early out if paste buffer is empty
- if (@currpaste == 0) {
+ if (!$env{'form.pastemarked'}) {
return ();
- }
- map { $pastebuffer{$_} = 1; } @currpaste;
-
-# Array of items selected items to paste
- my @reqpaste = &Apache::loncommon::get_env_multiple('form.pasting');
-
-# Early out if nothing selected to paste
- if (@reqpaste == 0) {
- return();
- }
- my @topaste;
- foreach my $suffix (@reqpaste) {
- next if ($suffix =~ /\D/);
- next unless (exists($pastebuffer{$suffix}));
- push(@topaste,$suffix);
- }
-
-# Early out if nothing available to paste
- if (@topaste == 0) {
- return();
}
- my (%msgs,%before,%after,@dopaste,%is_map,%notinsupp,%notincrs,%duplicate,
- %prefixchg,%srcdom,%srcnum,%marktomove,$save_err,$lockerrors,$allresult);
-
- foreach my $suffix (@topaste) {
- my $url=&LONCAPA::map::qtescape($env{'docs.markedcopy_url_'.$suffix});
# Supplemental content may only include certain types of content
# Early out if pasted content is not supported in Supplemental area
- if ($folder =~ /^supplemental/) {
- unless (&supp_pasteable($url)) {
- $notinsupp{$suffix} = 1;
- next;
- }
+ if ($folder =~ /^supplemental/) {
+ unless (&supp_pasteable($env{'docs.markedcopy_url'})) {
+ return (&mt('Paste failed: content type is not supported within Supplemental Content'));
}
- if ($url =~ m{^/uploaded/($match_domain)/($match_courseid)/}) {
- my $srcd = $1;
- my $srcn = $2;
+ }
+
+# Prepare to paste resource at end of list
+ my $url=&LONCAPA::map::qtescape($env{'docs.markedcopy_url'});
+ my $title=&LONCAPA::map::qtescape($env{'docs.markedcopy_title'});
+
+ my ($is_map,$srcdom,$srcnum,$prefixchg,%before,%after,%mapchanges,%tomove);
+ if ($url=~/\.(page|sequence)$/) {
+ $is_map = 1;
+ }
+ if ($url =~ m{^/uploaded/($match_domain)/($match_courseid)/([^/]+)}) {
+ $srcdom = $1;
+ $srcnum = $2;
+ my $oldprefix = $3;
# When paste buffer was populated using an active role in a different course
-# check for mdc privilege in the course from which the resource was pasted
- if (($srcd ne $coursedom) || ($srcn ne $coursenum)) {
- unless ($env{"user.priv.cm./$srcd/$srcn"} =~ /\Q:mdc&F\E/) {
- $notincrs{$suffix} = 1;
- next;
- }
+# check for mdc privilege in the course from which the resource was pasted
+ if (($srcdom ne $coursedom) || ($srcnum ne $coursenum)) {
+ unless ($env{"user.priv.cm./$srcdom/$srcnum"} =~ /\Q:mdc&F\E/) {
+ return (&mt('Paste failed: Item is from a different course which you do not have rights to edit.'));
}
- $srcdom{$suffix} = $srcd;
- $srcnum{$suffix} = $srcn;
- }
-
- push(@dopaste,$suffix);
- if ($url=~/\.(page|sequence)$/) {
- $is_map{$suffix} = 1;
}
-
- if ($url =~ m{^/uploaded/$match_domain/$match_courseid/([^/]+)}) {
- my $oldprefix = $1;
# When pasting content from Main Content to Supplemental Content and vice versa
# URLs will contain different paths (which depend on whether pasted item is
# a folder/page or a document.
- if (($folder =~ /^supplemental/) && (($oldprefix =~ /^default/) || ($oldprefix eq 'docs'))) {
- $prefixchg{$suffix} = 'docstosupp';
- } elsif (($folder =~ /^default/) && ($oldprefix =~ /^supplemental/)) {
- $prefixchg{$suffix} = 'supptodocs';
- }
+ if (($folder =~ /^supplemental/) && (($oldprefix =~ /^default/) || ($oldprefix eq 'docs'))) {
+ $prefixchg = 1;
+ %before = ( map => 'default',
+ doc => 'docs');
+ %after = ( map => 'supplemental',
+ doc => 'supplemental' );
+ } elsif (($folder =~ /^default/) && ($oldprefix =~ /^supplemental/)) {
+ $prefixchg = 1;
+ %before = ( map => 'supplemental',
+ doc => 'supplemental');
+ %after = ( map => 'default',
+ doc => 'docs');
+ }
# If pasting an uploaded map, get list of contained uploaded maps.
- if ($env{'docs.markedcopy_nested_'.$suffix}) {
- my @nested;
- my ($type) = ($oldprefix =~ /^(default|supplemental)/);
- my @items = split(/\&/,$env{'docs.markedcopy_nested_'.$suffix});
- my @deps = map { /\d+:([\d,]+$)/ } @items;
- foreach my $dep (@deps) {
- if ($dep =~ /,/) {
- push(@nested,split(/,/,$dep));
- } else {
- push(@nested,$dep);
- }
+ my @nested;
+ if ($env{'docs.markedcopy_nested'}) {
+ my ($type) = ($oldprefix =~ /^(default|supplemental)/);
+ my @items = split(/\&/,$env{'docs.markedcopy_nested'});
+ my @deps = map { /\d+:([\d,]+$)/ } @items;
+ foreach my $dep (@deps) {
+ if ($dep =~ /,/) {
+ push(@nested,split(/,/,$dep));
+ } else {
+ push(@nested,$dep);
}
- foreach my $item (@nested) {
- if ($env{'form.docs.markedcopy_'.$suffix.'_'.$item} eq 'move') {
- push(@{$marktomove{$suffix}},$type.'_'.$item);
- }
+ }
+ foreach my $item (@nested) {
+ if ($env{'form.docs.markedcopy_'.$item} eq 'move') {
+ $tomove{$type.'_'.$item} = 1;
}
}
}
}
-# Early out if nothing available to paste
- if (@dopaste == 0) {
- return ();
- }
-
-# Populate message hash and hashes used for main content <=> supplemental content
-# changes
-
- %msgs = &Apache::lonlocal::texthash (
- notinsupp => 'Paste failed: content type is not supported within Supplemental Content',
- notincrs => 'Paste failed: Item is from a different course which you do not have rights to edit.',
- duplicate => 'Paste failed: only one instance of a particular published sequence or page is allowed within each course.',
- );
-
- %before = (
- docstosupp => {
- map => 'default',
- doc => 'docs',
- },
- supptodocs => {
- map => 'supplemental',
- doc => 'supplemental',
- },
- );
-
- %after = (
- docstosupp => {
- map => 'supplemental',
- doc => 'supplemental'
- },
- supptodocs => {
- map => 'default',
- doc => 'docs',
- },
- );
-
-# Retrieve information about all course maps in main content area
-
- my $allmaps = {};
- if ($folder =~ /^default/) {
- $allmaps =
- &Apache::loncommon::allmaps_incourse($coursedom,$coursenum,
- $env{"course.$env{'request.course.id'}.home"},
- $env{'request.course.id'});
- }
-
- my (@toclear,%mapurls,%lockerrs,%msgerrs,%results);
-
-# Loop over the items to paste
- foreach my $suffix (@dopaste) {
# Maps need to be copied first
- my (%removefrommap,%removeparam,%addedmaps,%rewrites,%retitles,%copies,
- %dbcopies,%zombies,%params,%docmoves,%mapmoves,%mapchanges,%newsubdir,
- %newurls,%tomove);
- if (ref($marktomove{$suffix}) eq 'ARRAY') {
- map { $tomove{$_} = 1; } @{$marktomove{$suffix}};
- }
- my $url=&LONCAPA::map::qtescape($env{'docs.markedcopy_url_'.$suffix});
- my $title=&LONCAPA::map::qtescape($env{'docs.markedcopy_title_'.$suffix});
- my $oldurl = $url;
- if ($is_map{$suffix}) {
+ my ($oldurl,%removefrommap,%removeparam,%addedmaps,%rewrites,%retitles,%copies,
+ %dbcopies,%zombies,%params,%docmoves,%mapmoves,%newsubdir,%newurls);
+ $oldurl = $url;
+ if ($is_map) {
# If pasting a map, check if map contains other maps
- my (%hierarchy,%titles);
- &contained_map_check($url,$folder,\%removefrommap,\%removeparam,
- \%addedmaps,\%hierarchy,\%titles,$allmaps);
- if ($url=~ m{^/uploaded/}) {
- my $newurl;
- unless ($env{'form.docs.markedcopy_options_'.$suffix} eq 'move') {
- ($newurl,my $error) =
- &get_newmap_url($url,$folder,$prefixchg{$suffix},$coursedom,
- $coursenum,$srcdom{$suffix},$srcnum{$suffix},
- \$title,$allmaps,\%newurls);
- if ($error) {
- $allerrors{$suffix} = $error;
- next;
- }
- if ($newurl ne '') {
- if ($newurl ne $url) {
- if ($newurl =~ /(?:default|supplemental)_(\d+).(?:sequence|page)$/) {
- $newsubdir{$url} = $1;
- }
- $mapchanges{$url} = 1;
- }
- }
- }
- if (($srcdom{$suffix} ne $coursedom) ||
- ($srcnum{$suffix} ne $coursenum) ||
- ($prefixchg{$suffix}) || (($newurl ne '') && ($newurl ne $url))) {
- unless (&url_paste_fixups($url,$folder,$prefixchg{$suffix},
- $coursedom,$coursenum,$srcdom{$suffix},
- $srcnum{$suffix},$allmaps,\%rewrites,
- \%retitles,\%copies,\%dbcopies,
- \%zombies,\%params,\%mapmoves,
- \%mapchanges,\%tomove,\%newsubdir,
- \%newurls)) {
- $mapmoves{$url} = 1;
- }
- $url = $newurl;
- } elsif ($env{'docs.markedcopy_nested_'.$suffix}) {
- &url_paste_fixups($url,$folder,$prefixchg{$suffix},$coursedom,
- $coursenum,$srcdom{$suffix},$srcnum{$suffix},
- $allmaps,\%rewrites,\%retitles,\%copies,\%dbcopies,
- \%zombies,\%params,\%mapmoves,\%mapchanges,
- \%tomove,\%newsubdir,\%newurls);
- }
- } elsif ($url=~m {^/res/}) {
-# published map can only exists once, so remove from paste buffer when done
- push(@toclear,$suffix);
-# if pasting published map (main content area only) check map not already in course
- if ($folder =~ /^default/) {
- if ((ref($allmaps) eq 'HASH') && ($allmaps->{$url})) {
- $duplicate{$suffix} = 1;
- next;
+ my ($allmaps,%hierarchy,%titles);
+ $allmaps = {};
+ if ($folder =~ /^default/) {
+ $allmaps =
+ &Apache::loncommon::allmaps_incourse($coursedom,$coursenum,
+ $env{"course.$env{'request.course.id'}.home"},
+ $env{'request.course.id'});
+ }
+ &contained_map_check($url,$folder,\%removefrommap,\%removeparam,
+ \%addedmaps,\%hierarchy,\%titles,$allmaps);
+ if ($url=~ m{^/uploaded/}) {
+ my $newurl;
+ unless ($env{'form.docs.markedcopy_options'} eq 'move') {
+ ($newurl,my $error) =
+ &get_newmap_url($url,$folder,$prefixchg,$coursedom,$coursenum,
+ $srcdom,$srcnum,\$title,$allmaps,\%newurls);
+ if ($error) {
+ return ($error);
+ }
+ if ($newurl ne '') {
+ if ($newurl ne $url) {
+ if ($newurl =~ /(?:default|supplemental)_(\d+).(?:sequence|page)$/) {
+ $newsubdir{$url} = $1;
+ }
+ $mapchanges{$url} = 1;
}
}
}
- }
- if ($url=~ m{/(bulletinboard|smppg)$}) {
- my $prefix = $1;
- #need to copy the db contents to a new one, unless this is a move.
- my %info = (
- src => $url,
- cdom => $coursedom,
- cnum => $coursenum,
- );
- unless ($env{'form.docs.markedcopy_options_'.$suffix} eq 'move') {
- my (%lockerr,$msg);
- my ($newurl,$result,$errtext) =
- &dbcopy(\%info,$coursedom,$coursenum,\%lockerr);
- if ($result eq 'ok') {
- $url = $newurl;
- $title=&mt('Copy of').' '.$title;
- } else {
- 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 discussion board.').' '.$errtext;
- }
- $results{$suffix} = $result;
- $msgerrs{$suffix} = $msg;
- $lockerrs{$suffix} = $lockerr{$prefix};
- next;
- }
- if ($lockerr{$prefix}) {
- $lockerrs{$suffix} = $lockerr{$prefix};
+ if (($srcdom ne $coursedom) || ($srcnum ne $coursenum) || ($prefixchg) ||
+ (($newurl ne '') && ($newurl ne $url))) {
+ unless (&url_paste_fixups($url,$folder,$prefixchg,$coursedom,
+ $coursenum,$srcdom,$srcnum,$allmaps,
+ \%rewrites,\%retitles,\%copies,\%dbcopies,
+ \%zombies,\%params,\%mapmoves,\%mapchanges,\%tomove,
+ \%newsubdir,\%newurls)) {
+ $mapmoves{$url} = 1;
+ }
+ $url = $newurl;
+ } elsif ($env{'docs.markedcopy_nested'}) {
+ &url_paste_fixups($url,$folder,$prefixchg,$coursedom,$coursenum,
+ $srcdom,$srcnum,$allmaps,\%rewrites,
+ \%retitles,\%copies,\%dbcopies,\%zombies,\%params,\%mapmoves,
+ \%mapchanges,\%tomove,\%newsubdir,\%newurls);
+ }
+ } elsif ($url=~m {^/res/}) {
+# published maps can only exists once, so remove it from paste buffer when done
+ &Apache::lonnet::delenv('docs.markedcopy');
+# if pasting published map (main content are only) check map is not already in course
+ if ($folder =~ /^default/) {
+ if ((ref($allmaps) eq 'HASH') && ($allmaps->{$url})) {
+ return (&mt('Paste failed: only one instance of a particular published sequence or page is allowed within each course.'));
}
}
}
- $title = &LONCAPA::map::qtunescape($title);
- my $ext='false';
- if ($url=~m{^http(|s)://}) { $ext='true'; }
- if ($env{'docs.markedcopy_supplemental_'.$suffix}) {
- if ($folder !~ /^supplemental/) {
- (undef,undef,$title) =
- &Apache::loncommon::parse_supplemental_title($env{'docs.markedcopy_supplemental_'.$suffix});
- }
- } else {
- if ($folder=~/^supplemental/) {
- $title=time.'___&&&___'.$env{'user.name'}.'___&&&___'.
- $env{'user.domain'}.'___&&&___'.$title;
+ }
+ my $lockerrors;
+ if ($url=~ m{/(bulletinboard|smppg)$}) {
+ my $prefix = $1;
+ #need to copy the db contents to a new one, unless this is a move.
+ my %info = (
+ src => $url,
+ cdom => $coursedom,
+ cnum => $coursenum,
+ );
+ my (%lockerr,$msg);
+ 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;
+ } else {
+ 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);
+ my $ext='false';
+ if ($url=~m{^http(|s)://}) { $ext='true'; }
+ $url = &LONCAPA::map::qtunescape($url);
# For uploaded files (excluding pages/sequences) path in copied file is changed
# if paste is from Main to Supplemental (or vice versa), or if pasting between
# courses.
- unless ($is_map{$suffix}) {
- my $newidx;
+ my $newidx;
+ unless ($is_map) {
# Now insert the URL at the bottom
- $newidx = &LONCAPA::map::getresidx(&LONCAPA::map::qtunescape($url));
- if ($url =~ m{^/uploaded/$match_domain/$match_courseid/(?:docs|supplemental)/(.+)$}) {
- my $relpath = $1;
- if ($relpath ne '') {
- my ($prefix,$subdir,$rem) = ($relpath =~ m{^(default|\d+)/(\d+)/(.+)$});
- my ($newloc,$newdocsdir) = ($folder =~ /^(default|supplemental)_?(\d*)/);
- my $newprefix = $newloc;
- if ($newloc eq 'default') {
- $newprefix = 'docs';
- }
- if ($newdocsdir eq '') {
- $newdocsdir = 'default';
- }
- if (($prefixchg{$suffix}) ||
- ($srcdom{$suffix} ne $coursedom) ||
- ($srcnum{$suffix} ne $coursenum) ||
- ($env{'form.docs.markedcopy_options_'.$suffix} ne 'move')) {
- my $newpath = "$newprefix/$newdocsdir/$newidx/$rem";
- $url =
- &Apache::lonclonecourse::writefile($env{'request.course.id'},$newpath,
- &Apache::lonnet::getfile($oldurl));
- if ($url eq '/adm/notfound.html') {
- $msgs{$suffix} = &mt('Paste failed: an error occurred saving the file.');
- next;
- } else {
- my ($newsubpath) = ($newpath =~ m{^(.*/)[^/]*$});
- $newsubpath =~ s{/+$}{/};
- $docmoves{$oldurl} = $newsubpath;
- }
+ $newidx = &LONCAPA::map::getresidx($url);
+ if ($url =~ m{^/uploaded/$match_domain/$match_courseid/(?:docs|supplemental)/(.+)$}) {
+ my $relpath = $1;
+ if ($relpath ne '') {
+ my ($prefix,$subdir,$rem) = ($relpath =~ m{^(default|\d+)/(\d+)/(.+)$});
+ my ($newloc,$newdocsdir) = ($folder =~ /^(default|supplemental)_?(\d*)/);
+ my $newprefix = $newloc;
+ if ($newloc eq 'default') {
+ $newprefix = 'docs';
+ }
+ if ($newdocsdir eq '') {
+ $newdocsdir = 'default';
+ }
+ if (($prefixchg) ||
+ ($srcdom ne $coursedom) || ($srcnum ne $coursenum) ||
+ ($env{'form.docs.markedcopy_options'} ne 'move')) {
+ my $newpath = "$newprefix/$newdocsdir/$newidx/$rem";
+ $url =
+ &Apache::lonclonecourse::writefile($env{'request.course.id'},$newpath,
+ &Apache::lonnet::getfile($oldurl));
+ if ($url eq '/adm/notfound.html') {
+ return (&mt('Paste failed: an error occurred saving the file.'));
+ } else {
+ my ($newsubpath) = ($newpath =~ m{^(.*/)[^/]*$});
+ $newsubpath =~ s{/+$}{/};
+ $docmoves{$oldurl} = $newsubpath;
}
}
}
- $LONCAPA::map::resources[$newidx]=$title.':'.&LONCAPA::map::qtunescape($url).
- ':'.$ext.':normal:res';
- push(@LONCAPA::map::order,$newidx);
-# Store the result
- my ($errtext,$fatal) =
- &storemap($coursenum,$coursedom,$folder.'.'.$container,1);
- if ($fatal) {
- $save_err .= $errtext;
- $allresult = 'fail';
- }
}
-
+ }
# Apply any changes to maps, or copy dependencies for uploaded HTML pages
- unless ($allresult eq 'fail') {
- my %updated = (
- rewrites => \%rewrites,
- zombies => \%zombies,
- removefrommap => \%removefrommap,
- removeparam => \%removeparam,
- dbcopies => \%dbcopies,
- retitles => \%retitles,
- );
- my %info = (
- newsubdir => \%newsubdir,
- params => \%params,
- );
- if ($prefixchg{$suffix}) {
- $info{'before'} = $before{$prefixchg{$suffix}};
- $info{'after'} = $after{$prefixchg{$suffix}};
- }
- my %moves = (
- copies => \%copies,
- docmoves => \%docmoves,
- mapmoves => \%mapmoves,
- );
- (my $result,$msgs{$suffix},my $lockerror) =
- &apply_fixups($folder,$is_map{$suffix},$coursedom,$coursenum,$errors,
- \%updated,\%info,\%moves,$prefixchg{$suffix},$oldurl,
- $url,'paste');
- $lockerrors .= $lockerror;
- if ($result eq 'ok') {
- if ($is_map{$suffix}) {
- my ($errtext,$fatal) = &mapread($coursenum,$coursedom,
- $folder.'.'.$container);
- if ($fatal) {
- $allresult = 'failread';
- } else {
- if ($#LONCAPA::map::order<1) {
- my $idx=&LONCAPA::map::getresidx();
- if ($idx<=0) { $idx=1; }
- $LONCAPA::map::order[0]=$idx;
- $LONCAPA::map::resources[$idx]='';
- }
- my $newidx = &LONCAPA::map::getresidx(&LONCAPA::map::qtunescape($url));
- $LONCAPA::map::resources[$newidx]=$title.':'.&LONCAPA::map::qtunescape($url).
- ':'.$ext.':normal:res';
- push(@LONCAPA::map::order,$newidx);
+ my ($result,$save_err);
+ my %updated = (
+ rewrites => \%rewrites,
+ zombies => \%zombies,
+ removefrommap => \%removefrommap,
+ removeparam => \%removeparam,
+ dbcopies => \%dbcopies,
+ retitles => \%retitles,
+ );
+ my %info = (
+ newsubdir => \%newsubdir,
+ params => \%params,
+ before => \%before,
+ after => \%after,
+ );
+ my %moves = (
+ copies => \%copies,
+ docmoves => \%docmoves,
+ mapmoves => \%mapmoves,
+ );
+ ($result,my $msgsarray,my $lockerror) =
+ &apply_fixups($folder,$is_map,$coursedom,$coursenum,$errors,
+ \%updated,\%info,\%moves,$prefixchg,$oldurl,$url,'paste');
+ $lockerrors .= $lockerror;
+ if ($result eq 'ok') {
+ if ($is_map) {
+ my ($errtext,$fatal) = &mapread($coursenum,$coursedom,
+ $folder.'.'.$container);
+ return ($errtext,$save_err,$msgsarray,$lockerrors) if ($fatal);
-# Store the result
- my ($errtext,$fatal) =
- &storemap($coursenum,$coursedom,$folder.'.'.$container,1);
- if ($fatal) {
- $save_err .= $errtext;
- $allresult = 'failstore';
- }
- }
- }
- if ($env{'form.docs.markedcopy_options_'.$suffix} eq 'move') {
- push(@toclear,$suffix);
- }
+ if ($#LONCAPA::map::order<1) {
+ my $idx=&LONCAPA::map::getresidx();
+ if ($idx<=0) { $idx=1; }
+ $LONCAPA::map::order[0]=$idx;
+ $LONCAPA::map::resources[$idx]='';
}
+ $newidx = &LONCAPA::map::getresidx($url);
}
- }
- &clear_from_buffer(\@toclear,\@currpaste);
- my $msgsarray;
- foreach my $suffix (keys(%msgs)) {
- if (ref($msgs{$suffix}) eq 'ARRAY') {
- $msgsarray .= join(',',@{$msgs{$suffix}});
- }
- }
- return ($allresult,$save_err,$msgsarray,$lockerrors);
-}
+ if ($env{'docs.markedcopy_supplemental'}) {
+ if ($folder !~ /^supplemental/) {
+ (undef,undef,$title) =
+ &Apache::loncommon::parse_supplemental_title($env{'docs.markedcopy_supplemental'});
+ }
+ } else {
+ if ($folder=~/^supplemental/) {
+ $title=time.'___&&&___'.$env{'user.name'}.'___&&&___'.
+ $env{'user.domain'}.'___&&&___'.$title;
+ }
+ }
+ $LONCAPA::map::resources[$newidx]= $title.':'.$url.':'.$ext.':normal:res';
+ push(@LONCAPA::map::order, $newidx);
-sub do_buffer_empty {
- my @currpaste = split(/,/,$env{'docs.markedcopies'});
- if (@currpaste == 0) {
- return &mt('Clipboard is already empty');
- }
- my @toclear = &Apache::loncommon::get_env_multiple('form.pasting');
- if (@toclear == 0) {
- return &mt('Nothing selected to clear from clipboard');
- }
- my $numdel = &clear_from_buffer(\@toclear,\@currpaste);
- if ($numdel) {
- return &mt('[quant,_1,item] cleared from clipboard',$numdel);
- } else {
- return &mt('Clipboard unchanged');
+# Store the result
+ my ($errtext,$fatal) =
+ &storemap($coursenum,$coursedom,$folder.'.'.$container,1);
+ if ($fatal) {
+ $save_err = $errtext;
+ }
}
- return;
-}
-sub clear_from_buffer {
- my ($toclear,$currpaste) = @_;
- return unless ((ref($toclear) eq 'ARRAY') && (ref($currpaste) eq 'ARRAY'));
- my %pastebuffer;
- map { $pastebuffer{$_} = 1; } @{$currpaste};
- my $numdel = 0;
- foreach my $suffix (@{$toclear}) {
- next if ($suffix =~ /\D/);
- next unless (exists($pastebuffer{$suffix}));
- my $regexp = 'docs.markedcopy_[a-z]+_'.$suffix;
- if (&Apache::lonnet::delenv($regexp,1) eq 'ok') {
- delete($pastebuffer{$suffix});
- $numdel ++;
- }
- }
- my $newbuffer = join(',',sort(keys(%pastebuffer)));
- &Apache::lonnet::appenv({'docs.markedcopies' => $newbuffer});
- return $numdel;
+ if ($env{'form.docs.markedcopy_options'} eq 'move') {
+ &Apache::lonnet::delenv('docs.markedcopy');
+ &Apache::lonnet::delenv('docs.markedcopy_nested');
+ &Apache::lonnet::delenv('docs.markedcopy_nestednames');
+ }
+ return ($result,$save_err,$msgsarray,$lockerrors);
}
sub get_newmap_url {
@@ -1904,11 +1266,11 @@ sub get_newmap_url {
sub dbcopy {
my ($dbref,$coursedom,$coursenum,$lockerrorsref) = @_;
my ($url,$result,$errtext);
- $url = $dbref->{'src'};
+ my $url = $dbref->{'src'};
if (ref($dbref) eq 'HASH') {
if ($url =~ m{/(smppg|bulletinboard)$}) {
my $prefix = $1;
- if (($dbref->{'cdom'} =~ /^$match_domain$/) &&
+ if (($dbref->{'cdom'} =~ /^$match_domain$/) &&
($dbref->{'cnum'} =~ /^$match_courseid$/)) {
my $db_name;
my $marker = (split(m{/},$url))[4];
@@ -1929,7 +1291,7 @@ sub dbcopy {
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 discussion board [_1].',$url);
+ $errtext = &mt('Failed to acquire a unique timestamp-based suffix when copying a bulletin board [_1].',$url);
}
if ($error) {
$errtext .= ' '.$error;
@@ -1943,12 +1305,12 @@ sub dbcopy {
my $photo = $contents{'uploaded.photourl'};
my ($subdir,$fname) =
($photo =~ m{^/uploaded/$match_domain/$match_courseid/+(bulletin|simplepage)/(?:|\d+/)([^/]+)$});
- my $newphoto;
+ my $newphoto;
if ($fname ne '') {
my $content = &Apache::lonnet::getfile($photo);
unless ($content eq '-1') {
$env{'form.'.$suffix.'.photourl'} = $content;
- $newphoto =
+ $newphoto =
&Apache::lonnet::finishuserfileupload($coursenum,$coursedom,$suffix.'.photourl',"$subdir/$suffix/$fname");
delete($env{'form.'.$suffix.'.photourl'});
}
@@ -1965,18 +1327,16 @@ sub dbcopy {
}
}
if (($freedlock ne 'ok') && (ref($lockerrorsref) eq 'HASH')) {
- $lockerrorsref->{$prefix} =
+ $lockerrorsref->{$prefix} =
'
'.
&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.');
+ $lockerrorsref->{$prefix} .=
+ &mt('This will prevent creation of additional simple pages in this course.');
} else {
- $lockerrorsref->{$prefix} .= ' '.&mt('This will prevent creation of additional discussion boards in this course.');
+ $lockerrorsref->{$prefix} .= &mt('This will prevent creation of additional bulletin boards in this course.');
}
- $lockerrorsref->{$prefix} .= ' '.&mt('Please contact the [_1]helpdesk[_2] for assistance.',
- '','').
- '
';
+ $lockerrorsref->{$prefix} .= &mt('Please contact the domain coordinator for your LON-CAPA domain.').'';
}
}
} elsif ($url =~ m{/syllabus$}) {
@@ -2093,7 +1453,7 @@ sub url_paste_fixups {
}
next if ($token->[2]->{'type'} eq 'external');
if ($token->[2]->{'type'} eq 'zombie') {
- next if ($skip);
+ next if ($skip);
$zombies->{$oldurl}{$id} = $ressrc;
$changed = 1;
} elsif ($ressrc =~ m{^/uploaded/($match_domain)/($match_courseid)/(.+)$}) {
@@ -2384,8 +1744,7 @@ sub apply_fixups {
if (defined($LONCAPA::map::resources[$idx])) {
my $changed;
my ($title,$src,$ext,$type)=split(/\:/,$LONCAPA::map::resources[$idx]);
- if ((exists($toremove{$idx})) &&
- ($toremove{$idx} eq &LONCAPA::map::qtescape($src))) {
+ if ((exists($toremove{$idx})) && ($toremove{$idx} eq $src)) {
splice(@LONCAPA::map::order,$i,1);
if (ref($currparam{$idx}) eq 'ARRAY') {
foreach my $name (@{$currparam{$idx}}) {
@@ -2424,7 +1783,7 @@ sub apply_fixups {
$changed = 1;
}
if ($changed) {
- $LONCAPA::map::resources[$idx] = join(':',($title,&LONCAPA::map::qtunescape($src),$ext,$type));
+ $LONCAPA::map::resources[$idx] = join(':',($title,$src,$ext,$type));
}
}
}
@@ -2530,109 +1889,34 @@ my %parameter_type = ( 'randompick'
my $valid_parameters_re = join('|',keys(%parameter_type));
# set parameters
sub update_parameter {
- if ($env{'form.changeparms'} eq 'all') {
- my (@allidx,@allmapidx,%allchecked,%currchecked);
- %allchecked = (
- 'hiddenresource' => {},
- 'encrypturl' => {},
- 'randompick' => {},
- 'randomorder' => {},
- );
- foreach my $which (keys(%allchecked)) {
- $env{'form.all'.$which} =~ s/,$//;
- if ($which eq 'randompick') {
- foreach my $item (split(/,/,$env{'form.all'.$which})) {
- my ($res,$value) = split(/:/,$item);
- if ($value =~ /^\d+$/) {
- $allchecked{$which}{$res} = $value;
- }
- }
- } else {
- if ($env{'form.all'.$which}) {
- map { $allchecked{$which}{$_} = 1; } split(/,/,$env{'form.all'.$which});
- }
- }
- }
- my $haschanges = 0;
- foreach my $res (@LONCAPA::map::order) {
- my ($name,$url)=split(/\:/,$LONCAPA::map::resources[$res]);
- $name=&LONCAPA::map::qtescape($name);
- $url=&LONCAPA::map::qtescape($url);
- next unless ($name && $url);
- my $is_map;
- if ($url =~ m{/uploaded/.+\.(page|sequence)$}) {
- $is_map = 1;
- }
- foreach my $which (keys(%allchecked)) {
- if (($which eq 'randompick' || $which eq 'randomorder')) {
- next if (!$is_map);
- }
- my $oldvalue = 0;
- my $newvalue = 0;
- if ($allchecked{$which}{$res}) {
- $newvalue = $allchecked{$which}{$res};
- }
- my $current = (&LONCAPA::map::getparameter($res,'parameter_'.$which))[0];
- if ($which eq 'randompick') {
- if ($current =~ /^(\d+)$/) {
- $oldvalue = $1;
- }
- } else {
- if ($current =~ /^yes$/i) {
- $oldvalue = 1;
- }
- }
- if ($oldvalue ne $newvalue) {
- $haschanges = 1;
- if ($newvalue) {
- my $storeval = 'yes';
- if ($which eq 'randompick') {
- $storeval = $newvalue;
- }
- &LONCAPA::map::storeparameter($res,'parameter_'.$which,
- $storeval,
- $parameter_type{$which});
- &remember_parms($res,$which,'set',$storeval);
- } elsif ($oldvalue) {
- &LONCAPA::map::delparameter($res,'parameter_'.$which);
- &remember_parms($res,$which,'del');
- }
- }
- }
- }
- return $haschanges;
- } else {
- return 0 if ($env{'form.changeparms'} !~ /^($valid_parameters_re)$/);
- my $which = $env{'form.changeparms'};
- my $idx = $env{'form.setparms'};
- if ($env{'form.'.$which.'_'.$idx}) {
- my $value = ($which eq 'randompick') ? $env{'form.rpicknum_'.$idx}
- : 'yes';
- &LONCAPA::map::storeparameter($idx, 'parameter_'.$which, $value,
- $parameter_type{$which});
- &remember_parms($idx,$which,'set',$value);
- } else {
- &LONCAPA::map::delparameter($idx,'parameter_'.$which);
+ return 0 if ($env{'form.changeparms'} !~ /^($valid_parameters_re)$/);
- &remember_parms($idx,$which,'del');
- }
- return 1;
+ my $which = $env{'form.changeparms'};
+ my $idx = $env{'form.setparms'};
+ if ($env{'form.'.$which.'_'.$idx}) {
+ my $value = ($which eq 'randompick') ? $env{'form.'.$which.'_'.$idx}
+ : 'yes';
+ &LONCAPA::map::storeparameter($idx, 'parameter_'.$which, $value,
+ $parameter_type{$which});
+ &remember_parms($idx,$which,'set',$value);
+ } else {
+ &LONCAPA::map::delparameter($idx,'parameter_'.$which);
+
+ &remember_parms($idx,$which,'del');
}
+ return 1;
}
sub handle_edit_cmd {
my ($coursenum,$coursedom) =@_;
- if ($env{'form.cmd'} eq '') {
- return 0;
- }
my ($cmd,$idx)=split('_',$env{'form.cmd'});
my $ratstr = $LONCAPA::map::resources[$LONCAPA::map::order[$idx]];
my ($title, $url, @rrest) = split(':', $ratstr);
- if ($cmd eq 'remove') {
+ if ($cmd eq 'del') {
if (($url=~m|/+uploaded/\Q$coursedom\E/\Q$coursenum\E/|) &&
($url!~/$LONCAPA::assess_page_seq_re/)) {
&Apache::lonnet::removeuploadedurl($url);
@@ -2654,6 +1938,7 @@ sub handle_edit_cmd {
@LONCAPA::map::order[$idx+1,$idx] = @LONCAPA::map::order[$idx,$idx+1];
} elsif ($cmd eq 'rename') {
+
my $comment = &LONCAPA::map::qtunescape($env{'form.title'});
if ($comment=~/\S/) {
$LONCAPA::map::resources[$LONCAPA::map::order[$idx]]=
@@ -2662,7 +1947,6 @@ sub handle_edit_cmd {
# Devalidate title cache
my $renamed_url=&LONCAPA::map::qtescape($url);
&Apache::lonnet::devalidate_title_cache($renamed_url);
-
} else {
return 0;
}
@@ -2687,7 +1971,7 @@ sub editor {
my $jumpto;
unless ($supplementalflag) {
- $jumpto = "uploaded/$coursedom/$coursenum/$folder.$container";
+ $jumpto = "'uploaded/$coursedom/$coursenum/$folder.$container'";
}
unless ($allowed) {
@@ -2731,33 +2015,27 @@ sub editor {
my ($paste_res,$save_error,$pastemsgarray,$lockerror) =
&do_paste_from_buffer($coursenum,$coursedom,$folder,$container,
\%paste_errors);
- if (ref($pastemsgarray) eq 'ARRAY') {
- if (@{$pastemsgarray} > 0) {
- $r->print('
'.
- join(' ',@{$pastemsgarray}).
+ if (ref($pastemsgarray) eq 'ARRAY') {
+ if (@{$pastemsgarray} > 0) {
+
+ $r->print('
'.
+ join(' ',@{$pastemsgarray}).
+ '
');
+ }
+ }
+ if ($lockerror) {
+ $r->print('
'.
+ $lockerror.
'
');
}
- }
- if ($lockerror) {
- $r->print('
'.
- $lockerror.
- '
');
- }
- if ($save_error ne '') {
- return $save_error;
- }
- if ($paste_res) {
- my %errortext = &Apache::lonlocal::texthash (
- fail => 'Storage of folder contents failed',
- failread => 'Reading folder contents failed',
- failstore => 'Storage of folder contents failed',
- );
- if ($errortext{$paste_res}) {
- $r->print('
'.$errortext{$paste_res}.'
');
+ if ($save_error ne '') {
+ return $save_error;
}
+ if ($paste_res ne 'ok') {
+ $r->print('
'.$paste_res.'
');
}
if (keys(%paste_errors) > 0) {
- $r->print('
'."\n".
+ $r->print('
'."\n".
&mt('The following files are either dependencies of a web page or references within a folder and/or composite page which could not be copied during the paste operation:')."\n".
'
'."\n");
foreach my $key (sort(keys(%paste_errors))) {
@@ -2765,81 +2043,18 @@ sub editor {
}
$r->print('
'."\n");
}
- } elsif ($env{'form.clearmarked'}) {
- my $output = &do_buffer_empty();
- if ($output) {
- $r->print('
'.$output.'
');
- }
- }
+ }
$r->print($upload_output);
-# Rename, cut, copy or remove a single resource
if (&handle_edit_cmd()) {
my $contentchg;
- if ($env{'form.cmd'} =~ m{^(del|cut)_}) {
+ if ($env{'form.cmd'} =~ /^(del|cut)_/) {
$contentchg = 1;
}
($errtext,$fatal)=&storemap($coursenum,$coursedom,$folder.'.'.$container,$contentchg);
return $errtext if ($fatal);
}
-
-# Cut, copy and/or remove multiple resources
- if ($env{'form.multichange'}) {
- my %allchecked = (
- cut => {},
- remove => {},
- );
- my $needsupdate;
- foreach my $which (keys(%allchecked)) {
- $env{'form.multi'.$which} =~ s/,$//;
- if ($env{'form.multi'.$which}) {
- map { $allchecked{$which}{$_} = 1; } split(/,/,$env{'form.multi'.$which});
- if (ref($allchecked{$which}) eq 'HASH') {
- $needsupdate += scalar(keys(%{$allchecked{$which}}));
- }
- }
- }
- if ($needsupdate) {
- my $haschanges = 0;
- my %curr_groups = &Apache::longroup::coursegroups();
- my $total = scalar(@LONCAPA::map::order) - 1;
- for (my $i=$total; $i>=0; $i--) {
- my $res = $LONCAPA::map::order[$i];
- my ($name,$url)=split(/\:/,$LONCAPA::map::resources[$res]);
- $name=&LONCAPA::map::qtescape($name);
- $url=&LONCAPA::map::qtescape($url);
- next unless ($name && $url);
- my %denied =
- &action_restrictions($coursenum,$coursedom,$url,
- $env{'form.folderpath'},\%curr_groups);
- foreach my $which (keys(%allchecked)) {
- next if ($denied{$which});
- next unless ($allchecked{$which}{$res});
- if ($which eq 'remove') {
- if (($url=~m|/+uploaded/\Q$coursedom\E/\Q$coursenum\E/|) &&
- ($url!~/$LONCAPA::assess_page_seq_re/)) {
- &Apache::lonnet::removeuploadedurl($url);
- } else {
- &LONCAPA::map::makezombie($res);
- }
- splice(@LONCAPA::map::order,$i,1);
- $haschanges ++;
- } elsif ($which eq 'cut') {
- &LONCAPA::map::makezombie($res);
- splice(@LONCAPA::map::order,$i,1);
- $haschanges ++;
- }
- }
- }
- if ($haschanges) {
- ($errtext,$fatal) =
- &storemap($coursenum,$coursedom,$folder.'.'.$container,1);
- return $errtext if ($fatal);
- }
- }
- }
-
# Group import/search
if ($env{'form.importdetail'}) {
my @imports;
@@ -2952,17 +2167,8 @@ sub editor {
$r->print('');
}
- my ($to_show,$output,@allidx,@allmapidx,%filters,%lists,%curr_groups);
- %filters = (
- canremove => [],
- cancut => [],
- cancopy => [],
- hiddenresource => [],
- encrypturl => [],
- randomorder => [],
- randompick => [],
- );
- %curr_groups = &Apache::longroup::coursegroups();
+ my ($to_show,$output);
+
&Apache::loncommon::start_data_table_count(); #setup a row counter
foreach my $res (@LONCAPA::map::order) {
my ($name,$url)=split(/\:/,$LONCAPA::map::resources[$res]);
@@ -2970,24 +2176,16 @@ sub editor {
$url=&LONCAPA::map::qtescape($url);
unless ($name) { $name=(split(/\//,$url))[-1]; }
unless ($name) { $idx++; next; }
- push(@allidx,$res);
- if ($url =~ m{/uploaded/.+\.(page|sequence)$}) {
- push(@allmapidx,$res);
- }
$output .= &entryline($idx,$name,$url,$folder,$allowed,$res,
$coursenum,$coursedom,$crstype,
- $pathitem,$supplementalflag,$container,
- \%filters,\%curr_groups);
+ $pathitem,$supplementalflag,$container);
$idx++;
$shown++;
}
&Apache::loncommon::end_data_table_count();
- my $need_save;
if (($allowed) || ($supplementalflag && $folder eq 'supplemental')) {
- my $toolslink;
- if ($allowed || &Apache::lonnet::allowed('mdc',$env{'request.course.id'})) {
- $toolslink = '
'
- .&mt('Currently empty')
+ .&mt('Currently no documents.')
.'
'
}
}
@@ -3084,8 +2246,8 @@ sub editor {
}
if ($allowed) {
my $readfile="/uploaded/$coursedom/$coursenum/$folder.$container";
- $r->print(&generate_edit_table($tid,$orderhash,$to_show,$iconpath,
- $jumpto,$readfile,$need_save,"$folder.$container"));
+ $r->print(&generate_edit_table($tid,$orderhash,$to_show,$iconpath,$jumpto,
+ $readfile));
&print_paste_buffer($r,$container,$folder,$coursedom,$coursenum);
} else {
$r->print($to_show);
@@ -3093,98 +2255,9 @@ sub editor {
return;
}
-sub multiple_check_form {
- my ($caller,$listsref) = @_;
- return unless (ref($listsref) eq 'HASH');
- my $output =
- ''.
- '
'.
- ''.
- '
';
- return $output;
-}
-
sub process_file_upload {
- my ($upload_output,$coursenum,$coursedom,$allfiles,$codebase,$uploadcmd,$crstype) = @_;
+ my ($upload_output,$coursenum,$coursedom,$allfiles,$codebase,$uploadcmd) = @_;
# upload a file, if present
- my $filesize = length($env{'form.uploaddoc'});
- if (!$filesize) {
- $$upload_output = '
'.
- &mt('Unable to upload [_1]. (size = [_2] bytes)',
- ''.$env{'form.uploaddoc.filename'}.'',
- $filesize).' '.
- &mt('Either the file you attempted to upload was empty, or your web browser was unable to read its contents.').' '.
- '
';
- return;
- }
- my $quotatype = 'unofficial';
- if ($crstype eq 'Community') {
- $quotatype = 'community';
- } elsif ($env{'course.'.$coursedom.'_'.$coursenum.'.internal.instcode'}) {
- $quotatype = 'official';
- } elsif ($env{'course.'.$coursedom.'_'.$coursenum.'.internal.textbook'}) {
- $quotatype = 'textbook';
- }
- if (&Apache::loncommon::get_user_quota($coursenum,$coursedom,'course',$quotatype)) {
- $filesize = int($filesize/1000); #expressed in kb
- $$upload_output = &Apache::loncommon::excess_filesize_warning($coursenum,$coursedom,'course',
- $env{'form.uploaddoc.filename'},$filesize,'upload');
- return if ($$upload_output);
- }
my ($parseaction,$showupload,$nextphase,$mimetype);
if ($env{'form.parserflag'}) {
$parseaction = 'parse';
@@ -3341,7 +2414,7 @@ sub is_supplemental_title {
sub entryline {
my ($index,$title,$url,$folder,$allowed,$residx,$coursenum,$coursedom,
- $crstype,$pathitem,$supplementalflag,$container,$filtersref,$currgroups)=@_;
+ $crstype,$pathitem,$supplementalflag,$container)=@_;
my ($foldertitle,$renametitle);
if (&is_supplemental_title($title)) {
($title,$foldertitle,$renametitle) = &Apache::loncommon::parse_supplemental_title($title);
@@ -3355,10 +2428,9 @@ sub entryline {
$renametitle=~s/\\/\\\\/g;
$renametitle=~s/\"\;/\\\"/g;
- $renametitle=~s/\'\;/\\\'/g;
$renametitle=~s/ /%20/g;
my $line=&Apache::loncommon::start_data_table_row();
- my ($form_start,$form_end,$form_common,$form_param);
+ my ($form_start,$form_end,$form_common);
# Edit commands
my ($esc_path, $path, $symb);
if ($env{'form.folderpath'}) {
@@ -3382,25 +2454,8 @@ sub entryline {
&Apache::lonnet::declutter($currurl));
}
}
- my ($renamelink,%lt,$ishash);
- if (ref($filtersref) eq 'HASH') {
- $ishash = 1;
- }
-
+ my ($renamelink,%lt);
if ($allowed) {
- $form_start = '
- ';
-
my $incindex=$index+1;
my $selectbox='';
if (($#LONCAPA::map::order>0) &&
@@ -3436,9 +2491,66 @@ END
'ul' => 'URL',
'ti' => 'Title',
);
- my %denied = &action_restrictions($coursenum,$coursedom,$url,
- $env{'form.folderpath'},
- $currgroups);
+ my $nocopy=0;
+ my $nocut=0;
+ my $noremove=0;
+ if ($url=~ m{^/res/.+\.(page|sequence)$}) {
+ # no copy for published maps
+ $nocopy=1;
+ }
+ if ($url=~/^\/res\/lib\/templates\//) {
+ $nocopy=1;
+ $nocut=1;
+ }
+ my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
+ my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
+ if ($url eq "/uploaded/$cdom/$cnum/group_allfolders.sequence") {
+ if ($env{'form.folderpath'} =~ /^default&[^\&]+$/) {
+ my %curr_groups = &Apache::longroup::coursegroups();
+ if (keys(%curr_groups) > 0) {
+ $noremove=1;
+ }
+ $nocut=1;
+ $nocopy=1;
+ }
+ } elsif ($url =~ m{^\Q/uploaded/$cdom/$cnum/group_folder_\E(\w+)\.sequence$}) {
+ my $group = $1;
+ if ($env{'form.folderpath'} =~ /^default&[^\&]+\&group_allfolders\&[^\&]+$/) {
+ my %curr_group = &Apache::longroup::coursegroups($cdom,$cnum,$group);
+ if (keys(%curr_group) > 0) {
+ $noremove=1;
+ }
+ }
+ $nocut=1;
+ $nocopy=1;
+ } elsif ($url =~ m{^\Q/adm/$cdom/$cnum/\E(\w+)/smppg$}) {
+ my $group = $1;
+ if ($env{'form.folderpath'} =~ /^default&[^\&]+\&group_allfolders\&[^\&]+\&\Qgroup_folder_$group\E\&[^\&]+$/) {
+ my %curr_group = &Apache::longroup::coursegroups($cdom,$cnum,$group);
+ my %groupsettings = &Apache::longroup::get_group_settings($curr_group{$group});
+ if (keys(%groupsettings) > 0) {
+ $noremove=1;
+ }
+ $nocut=1;
+ $nocopy=1;
+ }
+ } elsif ($env{'form.folderpath'} =~ /^default&[^\&]+\&group_allfolders\&[^\&]+\&group_folder_(\w+)\&/) {
+ my $group = $1;
+ my %curr_group = &Apache::longroup::coursegroups($cdom,$cnum,$group);
+ if ($url =~ /group_boards_\Q$group\E/) {
+ my %curr_group = &Apache::longroup::coursegroups($cdom,$cnum,$group);
+ my %groupsettings = &Apache::longroup::get_group_settings($curr_group{$group});
+ if (keys(%groupsettings) > 0) {
+ if (ref($groupsettings{'functions'}) eq 'HASH') {
+ if ($groupsettings{'functions'}{'discussion'} eq 'on') {
+ $noremove=1;
+ }
+ }
+ }
+ $nocut=1;
+ $nocopy=1;
+ }
+ }
my ($copylink,$cutlink,$removelink);
my $skip_confirm = 0;
if ( $folder =~ /^supplemental/
@@ -3452,62 +2564,48 @@ END
$skip_confirm = 1;
}
- if ($denied{'copy'}) {
- $copylink=(<$lt{'cp'}
ENDCOPY
} else {
- my $formname = 'edit_copy_'.$orderidx;
- my $js = "javascript:checkForSubmit(document.forms.renameform,'copy','actions','$orderidx','$esc_path','$index','$renametitle',$skip_confirm,'$container','$folder');";
$copylink=(<
-$form_common
-$lt{'cp'}
-$form_end
+$lt{'cp'}
ENDCOPY
- if (($ishash) && (ref($filtersref->{'cancopy'}) eq 'ARRAY')) {
- push(@{$filtersref->{'cancopy'}},$orderidx);
- }
}
- if ($denied{'cut'}) {
+ if ($nocut) {
$cutlink=(<$lt{'ct'}
ENDCUT
} else {
- my $formname = 'edit_cut_'.$orderidx;
- my $js = "javascript:checkForSubmit(document.forms.renameform,'cut','actions','$orderidx','$esc_path','$index','$renametitle',$skip_confirm,'$container','$folder');";
$cutlink=(<
-$form_common
-
-$lt{'ct'}
-$form_end
+$lt{'ct'}
ENDCUT
- if (($ishash) && (ref($filtersref->{'cancut'}) eq 'ARRAY')) {
- push(@{$filtersref->{'cancut'}},$orderidx);
- }
}
- if ($denied{'remove'}) {
+ if ($noremove) {
$removelink=(<$lt{'rm'}
ENDREM
} else {
- my $formname = 'edit_remove_'.$orderidx;
- my $js = "javascript:checkForSubmit(document.forms.renameform,'remove','actions','$orderidx','$esc_path','$index','$renametitle',$skip_confirm);";
$removelink=(<
-$form_common
-
-$lt{'rm'}
-$form_end
+$lt{'rm'}
ENDREM
- if (($ishash) && (ref($filtersref->{'canremove'}) eq 'ARRAY')) {
- push(@{$filtersref->{'canremove'}},$orderidx);
- }
}
- $renamelink=(<$lt{'rn'}
ENDREN
+ }
+ $form_start = '
+ ';
$line.=(<