--- loncom/interface/londocs.pm 2016/11/26 01:28:14 1.614 +++ loncom/interface/londocs.pm 2016/11/26 15:39:52 1.615 @@ -1,7 +1,7 @@ # The LearningOnline Network # Documents # -# $Id: londocs.pm,v 1.614 2016/11/26 01:28:14 raeburn Exp $ +# $Id: londocs.pm,v 1.615 2016/11/26 15:39:52 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,15 +3965,31 @@ 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,'"<>&'); - if ($env{'request.enc'} ne '') { - delete($env{'request.enc'}); + } 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=''; @@ -3969,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'}; @@ -3990,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]; @@ -4117,6 +4167,8 @@ $form_end; $line.=&Apache::loncommon::modal_link($url.(($url=~/\?/)?'&':'?').'inhibitmenu=yes'. (($anchor ne '')?$anchor:''), $title,600,500); + } elsif ($hiddenfolder) { + $line.=$title.' '.&mt('(Hidden)').''; } else { $line.=$title.' '.$reinit.''; } @@ -5056,6 +5108,8 @@ sub handler { my $containertag; my $pathitem; my %ltitools; + my $navmap; + my $hiddentop; # Do we directly jump somewhere? @@ -5095,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'}); } } @@ -5112,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) { @@ -5119,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'}); } @@ -5562,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(< @@ -5601,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')); @@ -6065,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.'

'); } @@ -6212,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 { @@ -6232,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.'

'); }