--- loncom/interface/londocs.pm 2016/11/23 01:28:50 1.612
+++ loncom/interface/londocs.pm 2016/11/26 19:40:44 1.616
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Documents
#
-# $Id: londocs.pm,v 1.612 2016/11/23 01:28:50 raeburn Exp $
+# $Id: londocs.pm,v 1.616 2016/11/26 19:40:44 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -2970,7 +2970,8 @@ sub handle_edit_cmd {
sub editor {
my ($r,$coursenum,$coursedom,$folder,$allowed,$upload_output,$crstype,
- $supplementalflag,$orderhash,$iconpath,$pathitem,$ltitoolsref,$canedit)=@_;
+ $supplementalflag,$orderhash,$iconpath,$pathitem,$ltitoolsref,
+ $canedit,$navmapref,$hiddentop)=@_;
my ($randompick,$ishidden,$isencrypted,$plain,$is_random_order,$container);
if ($allowed) {
(my $breadcrumbtrail,$randompick,$ishidden,$isencrypted,$plain,
@@ -2993,9 +2994,21 @@ sub editor {
$randompick = -1;
}
- my ($errtext,$fatal) = &mapread($coursenum,$coursedom,
- $folder.'.'.$container);
- return $errtext if ($fatal);
+ my ($errtext,$fatal);
+ if (($folder eq '') && (!$supplementalflag)) {
+ if (@LONCAPA::map::order) {
+ undef(@LONCAPA::map::order);
+ undef(@LONCAPA::map::resources);
+ undef(@LONCAPA::map::resparms);
+ undef(@LONCAPA::map::zombies);
+ }
+ $folder = 'default';
+ $container = 'sequence';
+ } else {
+ ($errtext,$fatal) = &mapread($coursenum,$coursedom,
+ $folder.'.'.$container);
+ return $errtext if ($fatal);
+ }
if ($#LONCAPA::map::order<1) {
my $idx=&LONCAPA::map::getresidx();
@@ -3287,7 +3300,7 @@ sub editor {
$output .= &entryline($idx,$name,$url,$folder,$allowed,$res,
$coursenum,$coursedom,$crstype,
$pathitem,$supplementalflag,$container,
- \%filters,\%curr_groups,$ltitoolsref,$canedit,$isencrypted);
+ \%filters,\%curr_groups,$ltitoolsref,$canedit,$isencrypted,$navmapref);
$idx++;
$shown++;
}
@@ -3369,9 +3382,15 @@ sub editor {
if (!$allowed) {
$to_show .= $toolslink;
}
+ my $noresmsg;
+ if ($allowed && $hiddentop && !$supplementalflag) {
+ $noresmsg = &mt('Main Content Hidden');
+ } else {
+ $noresmsg = &mt('Currently empty');
+ }
$to_show .= &Apache::loncommon::start_scrollbox('400px','380px','200px','contentscroll')
.'
'
- .&mt('Currently empty')
+ .$noresmsg
.'
'
.&Apache::loncommon::end_scrollbox();
}
@@ -3662,7 +3681,7 @@ sub is_supplemental_title {
sub entryline {
my ($index,$title,$url,$folder,$allowed,$residx,$coursenum,$coursedom,
$crstype,$pathitem,$supplementalflag,$container,$filtersref,$currgroups,
- $ltitoolsref,$canedit,$isencrypted)=@_;
+ $ltitoolsref,$canedit,$isencrypted,$navmapref)=@_;
my ($foldertitle,$renametitle,$oldtitle);
if (&is_supplemental_title($title)) {
($title,$foldertitle,$renametitle) = &Apache::loncommon::parse_supplemental_title($title);
@@ -3888,6 +3907,7 @@ END
my $isfolder;
my $ispage;
my $containerarg;
+ my $folderurl;
if ($uploaded) {
if (($extension eq 'sequence') || ($extension eq 'page')) {
$url=~/\Q$coursenum\E\/([\/\w]+)\.\Q$extension\E$/;
@@ -3899,6 +3919,7 @@ END
$icon=$iconpath.'page.gif';
$ispage=1;
}
+ $folderurl = &Apache::lonnet::declutter($url);
if ($allowed) {
$url='/adm/coursedocs?';
} else {
@@ -3944,13 +3965,32 @@ END
}
}
$url.=(($url=~/\?/)?'&':'?').'symb='.&HTML::Entities::encode($shownsymb,'"<>&');
- } elsif ((!$env{'request.role.adv'}) &&
- (((&LONCAPA::map::getparameter($orderidx,'parameter_encrypturl'))[0]=~/^yes$/i) ||
- $isencrypted)) {
- my $shownsymb = &Apache::lonenc::encrypted($symb);
- my $shownurl = &Apache::lonenc::encrypted($url);
- if (&Apache::lonnet::symbverify($shownsymb,$shownurl)) {
- $url = $shownurl.(($shownurl=~/\?/)?'&':'?').'symb='.&HTML::Entities::encode($shownsymb,'"<>&');
+ } elsif (!$env{'request.role.adv'}) {
+ my $checkencrypt;
+ if (((&LONCAPA::map::getparameter($orderidx,'parameter_encrypturl'))[0]=~/^yes$/i) ||
+ $isencrypted || (&Apache::lonnet::EXT('resource.0.encrypturl',$symb) =~ /^yes$/i)) {
+ $checkencrypt = 1;
+ } else {
+ unless (ref($$navmapref)) {
+ $$navmapref = Apache::lonnavmaps::navmap->new();
+ }
+ if (ref($$navmapref)) {
+ if (lc($$navmapref->get_mapparam($symb,undef,"0.encrypturl")) eq 'yes') {
+ $checkencrypt = 1;
+ }
+ }
+ }
+ if ($checkencrypt) {
+ my $shownsymb = &Apache::lonenc::encrypted($symb);
+ my $shownurl = &Apache::lonenc::encrypted($url);
+ if (&Apache::lonnet::symbverify($shownsymb,$shownurl)) {
+ $url = $shownurl.(($shownurl=~/\?/)?'&':'?').'symb='.&HTML::Entities::encode($shownsymb,'"<>&');
+ if ($env{'request.enc'} ne '') {
+ delete($env{'request.enc'});
+ }
+ } else {
+ $url='';
+ }
} else {
$url='';
}
@@ -3966,7 +4006,7 @@ END
}
}
}
- my ($rand_pick_text,$rand_order_text);
+ my ($rand_pick_text,$rand_order_text,$hiddenfolder);
if ($isfolder || $ispage || $extension eq 'sequence' || $extension eq 'page') {
my $foldername=&escape($foldertitle);
my $folderpath=$env{'form.folderpath'};
@@ -3987,11 +4027,24 @@ END
.':'.((&LONCAPA::map::getparameter($orderidx,
'parameter_randomorder'))[0]=~/^yes$/i)
.':'.$ispage;
- if ($env{'request.role.adv'} ||
- (&LONCAPA::map::getparameter($orderidx,'parameter_hiddenresource'))[0]!~/^yes$/i) {
+ if (!$env{'request.role.adv'}) {
+ if (lc((&LONCAPA::map::getparameter($orderidx,'parameter_hiddenresource'))[0]) eq 'yes') {
+ $url = '';
+ $hiddenfolder = 1;
+ } else {
+ unless (ref($$navmapref)) {
+ $$navmapref = Apache::lonnavmaps::navmap->new();
+ }
+ if (ref($$navmapref)) {
+ if (lc($$navmapref->get_mapparam(undef,$folderurl,"0.hiddenresource")) eq 'yes') {
+ $url = '';
+ $hiddenfolder = 1;
+ }
+ }
+ }
+ }
+ unless ($url eq '') {
$url.='folderpath='.&escape($folderpath);
- } else {
- $url = '';
}
my $rpicknum = (&LONCAPA::map::getparameter($orderidx,
'parameter_randompick'))[0];
@@ -4101,8 +4154,8 @@ $form_end;
$anchor = '#'.&HTML::Entities::encode($anchor,'"<>&');
}
}
- $line.=&Apache::loncommon::modal_link($url.(($url=~/\?/)?'&':'?').'inhibitmenu=yes'.
- (($anchor ne '')?$anchor:''),
+ $line.=&Apache::loncommon::modal_link(&js_escape($url.(($url=~/\?/)?'&':'?').'inhibitmenu=yes'.
+ (($anchor ne '')?$anchor:'')),
'
',600,500);
} else {
$line.='
';
@@ -4111,9 +4164,11 @@ $form_end;
if (($url=~m{/adm/(coursedocs|supplemental)}) || (!$allowed && $url)) {
$line.=''.$title.'';
} elsif ($url) {
- $line.=&Apache::loncommon::modal_link($url.(($url=~/\?/)?'&':'?').'inhibitmenu=yes'.
- (($anchor ne '')?$anchor:''),
+ $line.=&Apache::loncommon::modal_link(&js_escape($url.(($url=~/\?/)?'&':'?').'inhibitmenu=yes'.
+ (($anchor ne '')?$anchor:'')),
$title,600,500);
+ } elsif ($hiddenfolder) {
+ $line.=$title.' '.&mt('(Hidden)').'';
} else {
$line.=$title.' '.$reinit.'';
}
@@ -5053,6 +5108,8 @@ sub handler {
my $containertag;
my $pathitem;
my %ltitools;
+ my $navmap;
+ my $hiddentop;
# Do we directly jump somewhere?
@@ -5092,7 +5149,14 @@ sub handler {
if ((!$env{'form.folderpath'}) && $allowed) {
&Apache::loncommon::restore_course_settings($stored_folderpath,
{'folderpath' => 'scalar'});
- unless (&unescape($env{'form.folderpath'}) =~ m{^(default|supplemental)&}) {
+
+ if (&unescape($env{'form.folderpath'}) =~ m{^(default|supplemental)&}) {
+ if ($supplementalflag) {
+ undef($env{'form.folderpath'}) if ($1 eq 'default');
+ } else {
+ undef($env{'form.folderpath'}) if ($1 eq 'supplemental');
+ }
+ } else {
undef($env{'form.folderpath'});
}
}
@@ -5109,6 +5173,31 @@ sub handler {
.'&'.
$env{'form.folderpath'};
}
+# If allowed and user's role is not advanced check folderpath is not hidden
+ if (($allowed) && (!$env{'request.role.adv'}) &&
+ ($env{'form.folderpath'} ne '') && (!$supplementalflag)) {
+ my $folderurl;
+ my @pathitems = split(/\&/,$env{'form.folderpath'});
+ my $container = $pathitems[-2];
+ if ($container ne '') {
+ $folderurl = "uploaded/$coursedom/$coursenum/$container";
+ if ((split(/\:/,$pathitems[-1]))[4]) {
+ $folderurl .= '.page';
+ } else {
+ $folderurl .= '.sequence';
+ }
+ $navmap = Apache::lonnavmaps::navmap->new();
+ if (ref($navmap)) {
+ if (lc($navmap->get_mapparam(undef,$folderurl,"0.hiddenresource")) eq 'yes') {
+ undef($env{'form.folderpath'});
+ }
+ }
+ } else {
+ undef($env{'form.folderpath'});
+ }
+ }
+
+
# If after all of this, we still don't have any paths, make them
unless ($env{'form.folderpath'}) {
if ($supplementalflag) {
@@ -5116,12 +5205,29 @@ sub handler {
} else {
$env{'form.folderpath'}='default&'.&escape(&mt('Main Content').
':::::');
+ if (($allowed) && (!$env{'request.role.adv'})) {
+# If allowed and user's role is not advanced check entire course is not hidden
+ unless (ref($navmap)) {
+ $navmap = Apache::lonnavmaps::navmap->new();
+ }
+ if (ref($navmap)) {
+ if (lc($navmap->get_mapparam(undef,"uploaded/$coursedom/$coursenum/default.sequence",
+ "0.hiddenresource")) eq 'yes') {
+ undef($env{'form.folderpath'});
+ $hiddentop = 1;
+ if ($env{'form.folder'}) {
+ undef($env{'form.folder'});
+ }
+ }
+ }
+ }
}
}
+
# Store this
unless ($toolsflag) {
- if ($allowed) {
+ if (($allowed) && ($env{'form.folderpath'} ne '')) {
&Apache::loncommon::store_course_settings($stored_folderpath,
{'folderpath' => 'scalar'});
}
@@ -5559,9 +5665,11 @@ CRSFORM
if ($folder eq '') {
$folder='default';
}
- my $output = &update_paste_buffer($coursenum,$coursedom,$folder);
- if ($output) {
- $r->print($output);
+ if ($canedit) {
+ my $output = &update_paste_buffer($coursenum,$coursedom,$folder);
+ if ($output) {
+ $r->print($output);
+ }
}
$r->print(<
@@ -5598,7 +5706,7 @@ HIDDENFORM
if ($allowed) {
my $folder=$env{'form.folder'};
- if ($folder eq '' || $supplementalflag) {
+ if ((($folder eq '') && (!$hiddentop)) || ($supplementalflag)) {
$folder='default';
$savefolderpath = $env{'form.folderpath'};
$env{'form.folderpath'}='default&'.&escape(&mt('Main Content'));
@@ -6062,7 +6170,8 @@ unless ($container eq 'page') {
$hadchanges=0;
unless (($supplementalflag || $toolsflag)) {
my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype,
- $supplementalflag,\%orderhash,$iconpath,$pathitem,\%ltitools,$canedit);
+ $supplementalflag,\%orderhash,$iconpath,$pathitem,
+ \%ltitools,$canedit,\$navmap,$hiddentop);
if ($error) {
$r->print(''.$error.'
');
}
@@ -6209,7 +6318,8 @@ my %suporderhash = (
);
if ($supplementalflag) {
my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype,
- $supplementalflag,\%suporderhash,$iconpath,$pathitem,\%ltitools,$canedit);
+ $supplementalflag,\%suporderhash,$iconpath,$pathitem,
+ \%ltitools,$canedit,\$navmap);
if ($error) {
$r->print(''.$error.'
');
} else {
@@ -6229,7 +6339,7 @@ my %suporderhash = (
}
} elsif ($supplementalflag) {
my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype,
- $supplementalflag,'',$iconpath,$pathitem,$canedit);
+ $supplementalflag,'',$iconpath,$pathitem);
if ($error) {
$r->print(''.$error.'
');
}
@@ -6676,6 +6786,8 @@ sub editing_js {
if (($caller =~ m{^([^#]+)\Q#$anchor\E$})) {
$caller = $1.&escape('#').$anchor;
}
+ } else {
+ $url = $res;
}
$backtourl = &HTML::Entities::encode(&Apache::lonnet::clutter($url),'<>&"').'?symb='.
&HTML::Entities::encode($caller,'<>&"');