--- loncom/interface/londocs.pm 2020/07/17 20:55:10 1.484.2.72.2.8
+++ loncom/interface/londocs.pm 2020/04/07 18:21:04 1.484.2.72.4.1
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Documents
#
-# $Id: londocs.pm,v 1.484.2.72.2.8 2020/07/17 20:55:10 raeburn Exp $
+# $Id: londocs.pm,v 1.484.2.72.4.1 2020/04/07 18:21:04 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -43,7 +43,6 @@ use Apache::lonnavdisplay();
use Apache::lonextresedit();
use Apache::lontemplate();
use Apache::lonsimplepage();
-use Apache::loncourserespicker();
use HTML::Entities;
use HTML::TokeParser;
use GDBM_File;
@@ -657,7 +656,7 @@ sub group_import {
my $marker = $2;
my $info = $3;
my ($toolid,%toolhash,%toolsettings);
- my @extras = ('linktext','explanation','crslabel','crstitle');
+ my @extras = ('linktext','explanation','crslabel','crstitle');
my @toolinfo = split(/:/,$info);
if ($residx) {
%toolsettings=&Apache::lonnet::dump('exttool_'.$marker,$coursedom,$coursenum);
@@ -1326,8 +1325,7 @@ sub print_paste_buffer {
}
$is_uploaded_map = 1;
}
- } elsif (($url =~ m{^/res/lib/templates/\w+\.problem$}) ||
- ($url =~ m{^/adm/($match_domain)/($match_username)/\d+/(bulletinboard|smppg|ext\.tool)$})) {
+ } elsif ($url =~ m{^/adm/($match_domain)/($match_username)/\d+/(bulletinboard|smppg|ext\.tool)$}) {
if ($cid ne $env{'request.course.id'}) {
my ($srcdom,$srcnum) = split(/_/,$cid);
if ($env{"user.priv.cm./$srcdom/$srcnum"} =~ /\Q:mdc&F\E/) {
@@ -1348,7 +1346,7 @@ sub print_paste_buffer {
push(@pasteable,$suffix);
}
my $buffer;
- if ($is_external) {
+ if ($is_external) {
$buffer = &mt('External Resource').': '.
&LONCAPA::map::qtescape($env{'docs.markedcopy_title_'.$suffix}).' ('.
&LONCAPA::map::qtescape($url).')';
@@ -1661,7 +1659,8 @@ sub do_paste_from_buffer {
}
$srcdom{$suffix} = $srcd;
$srcnum{$suffix} = $srcn;
- } elsif ($url =~ m{^/adm/$match_domain/$match_courseid/\d+/ext\.tool$}) {
+ } elsif (($url =~ m{^/adm/$match_domain/$match_username/\d+/(bulletinboard|smppg)$}) ||
+ ($url =~ m{^/adm/$match_domain/$match_courseid/\d+/ext\.tool$})) {
my ($srcd,$srcn) = split(/_/,$cid);
# 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
@@ -1838,7 +1837,7 @@ sub do_paste_from_buffer {
}
}
}
- if ($url=~ m{/(ext\.tool)$}) {
+ if ($url=~ m{/(bulletinboard|smppg|ext\.tool)$}) {
my $prefix = $1;
my $fromothercrs;
#need to copy the db contents to a new one, unless this is a move.
@@ -1862,7 +1861,11 @@ sub do_paste_from_buffer {
$url = $newurl;
$title=&mt('Copy of').' '.$title;
} else {
- if ($prefix eq 'ext.tool') {
+ 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;
+ } elsif ($prefix eq 'ext.tool') {
$msg = &mt('Paste failed: An error occurred when copying the external tool.').' '.$errtext;
}
$results{$suffix} = $result;
@@ -2599,8 +2602,7 @@ sub apply_fixups {
}
}
}
- my $total = scalar(@LONCAPA::map::order) - 1;
- for (my $i=$total; $i>=0; $i--) {
+ for (my $i=0; $i<@LONCAPA::map::order; $i++) {
my $idx = $LONCAPA::map::order[$i];
if (defined($LONCAPA::map::resources[$idx])) {
my $changed;
@@ -2610,7 +2612,7 @@ sub apply_fixups {
splice(@LONCAPA::map::order,$i,1);
if (ref($currparam{$idx}) eq 'ARRAY') {
foreach my $name (@{$currparam{$idx}}) {
- &LONCAPA::map::delparameter($idx,$name);
+ &LONCAPA::map::delparameter($idx,'parameter_'.$name);
}
}
next;
@@ -2652,7 +2654,7 @@ sub apply_fixups {
foreach my $idx (keys(%remparam)) {
if (ref($remparam{$idx}) eq 'ARRAY') {
foreach my $name (@{$remparam{$idx}}) {
- &LONCAPA::map::delparameter($idx,$name);
+ &LONCAPA::map::delparameter($idx,'parameter_'.$name);
}
}
}
@@ -3927,7 +3929,7 @@ END
}
}
if ($url ne '') {
- $url.=(($url=~/\?/)?'&':'?').'symb='.&escape($shownsymb);
+ $url.=(($url=~/\?/)?'&':'?').'symb='.&HTML::Entities::encode($shownsymb,'"<>&');
}
} elsif (!$env{'request.role.adv'}) {
my $checkencrypt;
@@ -3948,7 +3950,7 @@ END
my $shownsymb = &Apache::lonenc::encrypted($symb);
my $shownurl = &Apache::lonenc::encrypted($url);
if (&Apache::lonnet::symbverify($shownsymb,$shownurl)) {
- $url = $shownurl.(($shownurl=~/\?/)?'&':'?').'symb='.&escape($shownsymb);
+ $url = $shownurl.(($shownurl=~/\?/)?'&':'?').'symb='.&HTML::Entities::encode($shownsymb,'"<>&');
if ($env{'request.enc'} ne '') {
delete($env{'request.enc'});
}
@@ -4498,47 +4500,6 @@ sub list_symbs {
$r->print(&endContentScreen());
}
-sub short_urls {
- my ($r,$canedit) = @_;
- my $crstype = &Apache::loncommon::course_type();
- my $formname = 'shortenurl';
- $r->print(&Apache::loncommon::start_page('Display/Set Shortened URLs'));
- $r->print(&Apache::lonhtmlcommon::breadcrumbs('Shortened URLs'));
- $r->print(&startContentScreen('tools'));
- my ($navmap,$errormsg) =
- &Apache::loncourserespicker::get_navmap_object($crstype,'shorturls');
- my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
- my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
- my (%maps,%resources,%titles);
- if (!ref($navmap)) {
- $r->print($errormsg.
- &endContentScreen());
- return '';
- } else {
- $r->print('
'.&mt('Tiny URLs for deep-linking into course').'
'."\n");
- $r->rflush();
- my $readonly;
- if ($canedit) {
- my ($numnew,$errors) = &Apache::loncommon::get_requested_shorturls($cdom,$cnum,$navmap);
- if ($numnew) {
- $r->print(''.&mt('Created [quant,_1,URL]',$numnew).'
');
- }
- if ((ref($errors) eq 'ARRAY') && (@{$errors} > 0)) {
- $r->print(&mt('The following errors occurred when processing your request to create shortened URLs:').'
');
- foreach my $error (@{$errors}) {
- $r->print('- '.$error.'
');
- }
- $r->print('
');
- }
- } else {
- $readonly = 1;
- }
- my %currtiny = &Apache::lonnet::dump('tiny',$cdom,$cnum);
- $r->print(&Apache::loncourserespicker::create_picker($navmap,'shorturls',$formname,$crstype,undef,
- undef,undef,undef,undef,undef,\%currtiny,$readonly));
- }
- $r->print(&endContentScreen());
-}
sub verifycontent {
my ($r) = @_;
@@ -4995,8 +4956,8 @@ sub handler {
'Adding_External_Resource','Adding_External_Tool',
'Navigate_Content','Adding_Folders','Docs_Overview',
'Load_Map','Supplemental','Score_Upload_Form',
- 'Adding_Pages','Importing_LON-CAPA_Resource',
- 'Importing_IMS_Course','Uploading_From_Harddrive',
+ 'Adding_Pages','Importing_LON-CAPA_Resource',
+ 'Importing_IMS_Course','Uploading_From_Harddrive',
'Course_Roster','Web_Page','Dropbox','Simple_Problem') {
$help{$topic}=&Apache::loncommon::help_open_topic('Docs_'.$topic);
}
@@ -5029,20 +4990,12 @@ sub handler {
$disabled = ' disabled="disabled"';
}
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['inhibitmenu']);
- if ($env{'form.inhibitmenu'}) {
- unless ($env{'form.inhibitmenu'} eq 'yes') {
- delete($env{'form.inhibitmenu'});
- }
- }
if ($allowed && $env{'form.verify'}) {
&init_breadcrumbs('verify','Verify Content','Docs_Verify_Content');
&verifycontent($r);
} elsif ($allowed && $env{'form.listsymbs'}) {
&init_breadcrumbs('listsymbs','List Content IDs');
&list_symbs($r);
- } elsif ($allowed && $env{'form.shorturls'}) {
- &init_breadcrumbs('shorturls','Set/Display Shortened URLs','Docs_Short_URLs');
- &short_urls($r,$canedit);
} elsif ($allowed && $env{'form.docslog'}) {
&init_breadcrumbs('docslog','Show Log');
my $folder = $env{'form.folder'};
@@ -5070,25 +5023,6 @@ sub handler {
'forcesupplement','forcestandard',
'tools','symb','command','supppath']);
- foreach my $item ('forcesupplement','forcestandard','tools') {
- next if ($env{'form.'.$item} eq '');
- unless ($env{'form.'.$item} eq '1') {
- delete($env{'form.'.$item});
- }
- }
-
- if ($env{'form.command'}) {
- unless ($env{'form.command'} =~ /^(direct|directnav|editdocs|editsupp|contents|home)$/) {
- delete($env{'form.command'});
- }
- }
-
- if ($env{'form.symb'}) {
- my ($mapurl,$id,$resurl) = &Apache::lonnet::decode_symb($env{'form.symb'});
- unless (($id =~ /^\d+$/) && (&Apache::lonnet::is_on_map($resurl))) {
- delete($env{'form.symb'});
- }
- }
# standard=1: this is a "new-style" course with an uploaded map as top level
# standard=2: this is a "old-style" course, and there is nothing we can do
@@ -5111,38 +5045,6 @@ sub handler {
my $toolsflag=0;
if ($env{'form.tools'}) { $toolsflag=1; }
- if ($env{'form.folderpath'} ne '') {
- my @items = split(/\&/,$env{'form.folderpath'});
- my $badpath;
- for (my $i=0; $i<@items; $i++) {
- my $odd = $i%2;
- if (($odd) && (!$supplementalflag) && ($items[$i] !~ /^[^:]*:(|\d+):(|1):(|1):(|1):(|1)$/)) {
- $badpath = 1;
- } elsif ((!$odd) && ($items[$i] !~ /^(default|supplemental)(|_\d+)$/)) {
- $badpath = 1;
- }
- last if ($badpath);
- }
- if ($badpath) {
- delete($env{'form.folderpath'});
- }
- }
-
- if ($env{'form.supppath'} ne '') {
- my @items = split(/\&/,$env{'form.supppath'});
- my $badpath;
- for (my $i=0; $i<@items; $i++) {
- my $odd = $i%2;
- if ((!$odd) && ($items[$i] !~ /^supplemental(|_\d+)$/)) {
- $badpath = 1;
- }
- last if ($badpath);
- }
- if ($badpath) {
- delete($env{'form.supppath'});
- }
- }
-
my $script='';
my $showdoc=0;
my $addentries = {};
@@ -5412,7 +5314,6 @@ sub handler {
undef($hadchanges);
$uploadphase = &process_file_upload(\$upload_output,$coursenum,$coursedom,
\%allfiles,\%codebase,$context,$crstype);
- undef($navmap);
if ($hadchanges) {
&mark_hash_old();
}
@@ -5946,10 +5847,9 @@ unless ($container eq 'page') {
$r->print(''.$error.'
');
}
if ($hadchanges) {
- unless (&is_hash_old()) {
- &mark_hash_old();
- }
+ &mark_hash_old();
}
+
&changewarning($r,'');
}
}
@@ -6010,6 +5910,7 @@ SNFFORM
$help{'Adding_External_Resource'},
undef,undef,undef,undef,undef,undef,
$disabled);
+
my $supexttoolform =
&Apache::lonextresedit::extedit_form(1,0,undef,undef,$pathitem,
$help{'Adding_External_Tool'},
@@ -6142,7 +6043,6 @@ my %suporderhash = (
sub embedded_form_elems {
my ($phase,$primaryurl,$newidx) = @_;
my $folderpath = &HTML::Entities::encode($env{'form.folderpath'},'<>&"');
- $newidx =~s /\D+//g;
return <
@@ -6163,11 +6063,7 @@ sub embedded_destination {
} elsif ($folder =~ /^(default|supplemental)_(\d+)$/) {
$destination .= $2.'/';
}
- my $newidx = $env{'form.newidx'};
- $newidx =~s /\D+//g;
- if ($newidx) {
- $destination .= $newidx;
- }
+ $destination .= $env{'form.newidx'};
my $dir_root = '/userfiles';
return ($destination,$dir_root);
}
@@ -6193,9 +6089,6 @@ sub decompression_info {
}
unshift(@hiddens,$pathitem);
foreach my $item (@hiddens) {
- if ($item eq 'newidx') {
- next if ($env{'form.'.$item} =~ /\D/);
- }
if ($env{'form.'.$item}) {
$hiddenelem .= ''."\n";
@@ -6308,7 +6201,6 @@ sub generate_admin_menu {
'vc' => 'Verify Content',
'cv' => 'Check/Set Resource Versions',
'ls' => 'List Resource Identifiers',
- 'ct' => 'Display/Set Shortened URLs for Deep-linking',
'imse' => 'Export contents to IMS Archive',
'dcd' => "Copy $crstype Content to Authoring Space",
);
@@ -6359,13 +6251,6 @@ sub generate_admin_menu {
icon => 'symbs.png',
linktitle => "List the unique identifier used for each resource instance in your $lc_crstype"
},
- { linktext => $lt{'ct'},
- url => "javascript:injectData(document.courseverify,'dummy','shorturls','$lt{'ct'}')",
- permission => 'F',
- help => 'Docs_Short_URLs',
- icon => 'shorturls.png',
- linktitle => "Set shortened URLs for a resource or folder in your $lc_crstype for use in deep-linking"
- },
]
});
if ($canedit) {
@@ -6568,13 +6453,8 @@ sub editing_js {
} else {
$url = $res;
}
- $backtourl = &HTML::Entities::encode(&Apache::lonnet::clutter($url),'<>&"');
- if ($backtourl =~ m{^\Q/uploaded/$coursedom/$coursenum/\Edefault_\d+\.sequence$}) {
- $backtourl .= '?navmap=1';
- } else {
- $backtourl .= '?symb='.
- &HTML::Entities::encode($caller,'<>&"');
- }
+ $backtourl = &HTML::Entities::encode(&Apache::lonnet::clutter($url),'<>&"').'?symb='.
+ &HTML::Entities::encode($caller,'<>&"');
if ($anchor ne '') {
$backtourl .= '#'.&HTML::Entities::encode($anchor,'<>&"');
}
@@ -7789,9 +7669,7 @@ check on this
Verify Content
-=item devalidateversioncache()
-
-=item checkversions()
+=item devalidateversioncache() & checkversions()
Check Versions