--- loncom/interface/lonmenu.pm 2020/04/07 18:34:26 1.369.2.71.2.2 +++ loncom/interface/lonmenu.pm 2018/09/03 14:30:16 1.369.2.72 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Routines to control the menu # -# $Id: lonmenu.pm,v 1.369.2.71.2.2 2020/04/07 18:34:26 raeburn Exp $ +# $Id: lonmenu.pm,v 1.369.2.72 2018/09/03 14:30:16 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -499,6 +499,8 @@ sub secondary_menu { next if ($item->[2] eq 'mgr' && !$canmgr); next if ($item->[2] eq 'vcg' && !$canviewgrps); next if ($item->[2] eq 'crsedit' && !$canedit && !$canvieweditor); + next if ($item->[2] eq 'author' && !$author); + next if ($item->[2] eq 'cca' && !$canmodifycoauthor); push(@scndsub,$item); } } @@ -528,6 +530,7 @@ sub secondary_menu { } else { $$menuitem[0] =~ s{\?register=1}{}; } + $$menuitem[0] = &HTML::Entities::encode($$menuitem[0],'&<>"'); } $menu .= &prep_menuitem(\@$menuitem); } @@ -635,6 +638,20 @@ sub build_submenu { next unless (($env{'user.name'} ne '') && ($env{'user.domain'} ne '')); $href =~ s/\[domain\]/$env{'user.domain'}/g; $href =~ s/\[user\]/$env{'user.name'}/g; + } elsif (($href =~ m{^/adm/preferences\?}) && ($href =~ /\[returnurl\]/)) { + my $returnurl = $ENV{'REQUEST_URI'}; + if ($ENV{'REQUEST_URI'} =~ m{/adm/preferences\?action=(?:changedomcoord|authorsettings)\&returnurl=([^\&]+)$}) { + $returnurl = $1; + } + if (($returnurl =~ m{^/adm/createuser($|\?action=)}) || + ($returnurl =~ m{^/priv/$match_domain/$match_username}) || + ($returnurl =~ m{^/res(/?$|/$match_domain/$match_username)})) { + $returnurl =~ s{\?.*$}{}; + $returnurl = '&returnurl='.&HTML::Entities::encode($returnurl,'"<>&\''); + } else { + undef($returnurl); + } + $href =~ s/\[returnurl\]/$returnurl/; } unless (($href eq '') || ($href =~ /^\#/)) { $target = ' target="_top"'; @@ -965,7 +982,7 @@ if ($env{'browser.mobile'}) { $is_mobile = 1; } - unless ($env{'request.noversionuri'}=~/\/(bulletinboard|smppg|navmaps|syllabus|aboutme|viewclasslist|portfolio|ext\.tool)(\?|$)/) { + unless ($env{'request.noversionuri'}=~/\/(bulletinboard|smppg|navmaps|syllabus|aboutme|viewclasslist|portfolio)(\?|$)/) { if ((!$env{'request.enc'}) && ($env{'request.noversionuri'} !~ m{^/adm/wrapper/ext/}) && ($env{'request.noversionuri'} !~ m{^/uploaded/$match_domain/$match_courseid/docs/})) { $menuitems.=(< 'WARNING!', - preamble => 'You are trying to end this timed event early.', - map => 'Confirming that you are done will cause the time to expire and prevent you from changing any answers in the current folder.', - resource => 'Confirming that you are done will cause the time to expire for this question, and prevent you from changing your answer(s).', - okdone => 'Click "OK" if you are completely finished.', - cancel => 'Click "Cancel" to continue working.', - proctor => 'Ask a proctor to enter the key, then click "OK" if you are completely finished.', - ok => 'OK', - exit => 'Cancel', - key => 'Key:', - nokey => 'A proctor key is required', - ); - my $navmap = Apache::lonnavmaps::navmap->new(); - my ($missing,$tried) = (0,0); - if (ref($navmap)) { - my @resources=(); - if ($type eq 'map') { - my ($mapurl,$rid,$resurl)=&Apache::lonnet::decode_symb($env{'request.symb'}); - if ($env{'request.symb'} =~ /\.page$/) { - @resources=$navmap->retrieveResources($resurl,sub { $_[0]->is_problem() }); - } else { - @resources=$navmap->retrieveResources($mapurl,sub { $_[0]->is_problem() }); - } - } else { - my $res = $navmap->getBySymb($env{'request.symb'}); - if (ref($res)) { - if ($res->is_problem()) { - push(@resources,$res); - } - } - } - foreach my $res (@resources) { - if (ref($res->parts()) eq 'ARRAY') { - foreach my $part (@{$res->parts()}) { - if (!$res->tries($part)) { - $missing++; - } else { - $tried++; - } - } - } - } - } - if ($missing) { - $lt{'miss'} .= '

'; - if ($type eq 'map') { - $lt{'miss'} .= &mt('Submissions are missing for [quant,_1,question part,question parts] in this folder.',$missing); - } else { - $lt{'miss'} .= &mt('Submissions are missing for [quant,_1,part] in this question.',$missing); - } - if ($missing > 1) { - $lt{'miss'} .= ' '.&mt('If you confirm you are done you will be unable to submit answers for them.').''; - } else { - $lt{'miss'} .= ' '.&mt('If you confirm you are done you will be unable to submit an answer for it.').'

'; - } - } - $donebuttontext = &HTML::Entities::encode($donebuttontext,'<>&"'); - if ($proctor) { - if ($height !~ /^\d+$/) { - $height = 400; - if ($missing) { - $height += 60; - } - } - if ($width !~ /^\d+$/) { - $width = 400; - if ($missing) { - $width += 60; - } - } - return < - - - - - -
-

$lt{'preamble'} $lt{$type}

- $lt{'miss'} -

$lt{'proctor'}

-
- - -
-

$lt{'cancel'}

-
- - - -END - } else { - if ($height !~ /^\d+$/) { - $height = 320; - if ($missing) { - $height += 60; - } - } - if ($width !~ /^\d+$/) { - $width = 320; - if ($missing) { - $width += 60; - } - } - if ($missing) { - $lt{'miss'} = '

'.$lt{'miss'}.'

'; - } - return < - - - - -

-

$lt{'preamble'} $lt{$type} $lt{'miss'} $lt{'okdone'} $lt{'cancel'}

-
- - - -END - } -} - sub utilityfunctions { my ($httphost) = @_; my $currenturl=&Apache::lonnet::clutter(&Apache::lonnet::fixversion((split(/\?/,$env{'request.noversionuri'}))[0])); @@ -3088,20 +2893,10 @@ sub countdown_timer { } my $duedate = &Apache::lonnet::EXT("resource.0.duedate"); my @interval=&Apache::lonnet::EXT("resource.0.interval"); - my ($timelimit,$usesdone,$donebuttontext,$proctor,$secret); if (@interval > 1) { - ($timelimit,my $donesuffix) = split(/_/,$interval[0],2); - if ($donesuffix =~ /^done\:([^\:]+)\:(.*)$/) { - $usesdone = 'done'; - $donebuttontext = $1; - (undef,$proctor,$secret) = split(/_/,$2); - } elsif ($donesuffix =~ /^done(|_.+)$/) { - $donebuttontext = &mt('Done'); - ($usesdone,$proctor,$secret) = split(/_/,$donesuffix); - } my $first_access=&Apache::lonnet::get_first_access($interval[1]); if ($first_access > 0) { - if ($first_access+$timelimit > time) { + if ($first_access+$interval[0] > time) { $hastimeleft = 1; } } @@ -3109,16 +2904,11 @@ sub countdown_timer { if (($duedate && $duedate > time) || (!$duedate && $hastimeleft) || ($slot_name ne '' && $slothastime)) { - my ($collapse,$expand,$alttxt,$title,$currdisp,$donebutton); + my ($collapse,$expand,$alttxt,$title,$currdisp); if ((@interval > 1 && $hastimeleft) || ($type eq 'Task' && $slothastime)) { $currdisp = 'inline'; $collapse = '► '; - if ((@interval > 1) && ($hastimeleft)) { - if ($usesdone eq 'done') { - $donebutton = &done_button_js($interval[1],'','',$proctor,$donebuttontext); - } - } } else { $currdisp = 'none'; $expand = '◄ '; @@ -3129,7 +2919,7 @@ sub countdown_timer { } my $desc = &mt('Countdown to due date/time'); return < $collapse