--- loncom/interface/lonmenu.pm 2023/09/06 16:05:23 1.369.2.83.2.10 +++ loncom/interface/lonmenu.pm 2024/02/26 00:28:19 1.369.2.83.2.17 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Routines to control the menu # -# $Id: lonmenu.pm,v 1.369.2.83.2.10 2023/09/06 16:05:23 raeburn Exp $ +# $Id: lonmenu.pm,v 1.369.2.83.2.17 2024/02/26 00:28:19 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -370,6 +370,19 @@ sub primary_menu { ($item->[2] eq 'blog')) && (!&Apache::lonnet::usertools_access('','',$item->[2], undef,'tools'))); + if (($item->[2] eq 'browsepub') && ($item->[0] eq '/res/')) { + if ($env{'request.role'} =~ /^au\./) { + $item->[0] .= $env{'request.role.domain'}.'/?launch=1'; + } elsif ($env{'request.role'} =~ m{^ca\./($match_domain)/($match_username)$}) { + $item->[0] .= $1.'/'.$2.'/?launch=1'; + } elsif (&Apache::lonnet::allowed('bre',$env{'user.domain'})) { + $item->[0] .= $env{'user.domain'}.'/?launch=1'; + } elsif (&Apache::lonnet::allowed('bro','/res/')) { + $item->[0] .= '?launch=1'; + } else { + next; + } + } if ($env{'request.course.id'} && $menucoll) { next if ($item->[3]) && (!$menuopts{$item->[3]}); } @@ -1009,6 +1022,18 @@ sub innerregister { $$showncrumbsref = 1; } return $trail; + } elsif (($resurl eq '/public'.$courseurl.'/syllabus') && + ($env{'form.folderpath'})) { + if ($env{'form.title'}) { + $title = $env{'form.title'}; + } else { + $title = 'Syllabus'; + } + &prepare_functions($resurl,$forcereg,$group,undef,undef,1,$hostname); + $title = &HTML::Entities::encode($title,'\'"<>&'); + my ($trail) = + &Apache::lonhtmlcommon::docs_breadcrumbs(undef,$crstype,undef,$title,1,1); + return $trail; } unless ($env{'request.state'} eq 'construct') { &Apache::lonhtmlcommon::clear_breadcrumbs(); @@ -1125,11 +1150,30 @@ sub innerregister { if (($env{'request.symb'} ne '') && ($env{'request.filename'}=~/$LONCAPA::assess_re/) && (($perms{'mgr'}) || ($perms{'vgr'}))) { - my ($viewas,$text,$change,$visibility,$vuname,$vudom,$vid,$leftvis,$defdom,$righticon); + my ($viewas,$text,$change,$visibility,$vuname,$vudom,$vid,$leftvis,$defdom, + $domselector,$righticon); my %lt = &Apache::lonlocal::texthash( view => 'View', upda => 'Update', ); + my $possdomstr = $env{'course.'.$env{'request.course.id'}.'.internal.userdomains'}; + if ($possdomstr =~ /,/) { + my @possdoms = split(/,/,$possdomstr); + if ($env{'request.user_in_effect'} =~ /^$match_username:($match_domain)$/) { + $defdom = $1; + } elsif (grep(/^\Q$cdom\E$/,@possdoms)) { + $defdom = $cdom; + } elsif (&Apache::lonnet::domain($possdoms[0]) ne '') { + $defdom = $possdoms[0]; + } + $domselector = &Apache::loncommon::select_dom_form($defdom,'vudom','','','',\@possdoms); + } elsif (($possdomstr ne '') && (&Apache::lonnet::domain($possdomstr) ne '')) { + if ($env{'request.user_in_effect'} =~ /^$match_username:($match_domain)$/) { + $defdom = $1; + } else { + $defdom = $possdomstr; + } + } if ($env{'request.user_in_effect'} =~ /^($match_username):($match_domain)$/) { ($vuname,$vudom) = ($1,$2); unless (&Apache::lonnet::is_advanced_user($vudom,$vuname)) { @@ -1147,17 +1191,29 @@ sub innerregister { $change = 'on'; $visibility = 'none'; $leftvis = 'inline'; - $defdom = $cdom; + if ($defdom eq '') { + $defdom = $cdom; + } } - my $sellink = &Apache::loncommon::selectstudent_link('userview','vuname','vudom'); + my $sellink = &Apache::loncommon::selectstudent_link('userview','vuname','vudom','','','vuidentifier'); my $selscript=&Apache::loncommon::studentbrowser_javascript(); my $shownsymb = &HTML::Entities::encode(&Apache::lonenc::check_encrypt($env{'request.symb'}),'<>&"'); - my $input = &mt('User: [_1] or ID: [_2] at: [_3]', - '', - '', - &Apache::loncommon::select_dom_form($defdom,'vudom')). - '', - ''; + my $input; + my @items = ( + '', + '' + ); + if ($domselector) { + push(@items,$domselector); + $input = &mt('[_1]User:[_2] or [_3]ID:[_4] at [_5] | ',@items); + } else { + $input = &mt('[_1]Username:[_2] or [_3]ID:[_4] | ',@items). + ''; + } + $input .= '', + ''; my $chooser = < @@ -1178,7 +1234,7 @@ $sellink END &switch('','',7,5,'viewuser.png','View As','user[_1]', 'toggleViewAsUser('."'$change'".')', - 'View As','','',$chooser); + 'View As','','','',$chooser); } # End view as user check @@ -1213,8 +1269,16 @@ s&6&1&list.png&Directory&dir[_1]&golist( s&6&2&rtrv.png&Retrieve&version[_1]&gocstr('/adm/retrieve','/priv/$udom/$uname/$cleandisfn')&Retrieve old version s&6&3&pub.png&Publish&resource[_3]&gocstr('/adm/publish','/priv/$udom/$uname/$cleandisfn')&Publish this resource s&7&1&del.png&Delete&resource[_2]&gocstr('/adm/cfile?action=delete','/priv/$udom/$uname/$cleandisfn')&Delete this resource +ENDMENUITEMS + +# +# Print only makes sense for certain mime types +# + if ($thisdisfn=~/\.(xml|html|htm|xhtml|xhtm|tex)$/ || $thisdisfn=~/$LONCAPA::assess_re/) { + $menuitems .= (<'; $inlineremote[$idx] = ''. - $pic.''.$top.' '.$form; + $pic.''.$top.' '; } # Remote $img=~s/\.png$/\.gif/; @@ -2144,7 +2209,7 @@ sub switch { } else { $inlineremote[$idx] = ''.$pic. - ''.$top.' '; + ''.$top.' '.$form; } } return ''; @@ -2727,23 +2792,28 @@ sub view_as_js { return <<"END"; function toggleViewAsUser(change) { - var seluserid = document.getElementById('LC_selectuser'); - var currstyle = seluserid.style.display; - if (change == 'off') { - document.userview.elements['LC_viewas'].value = ''; - document.userview.elements['vuname'].value = ''; - document.userview.elements['vid'].value = ''; - document.userview.submit(); - return; - } - if (currstyle == 'inline') { - seluserid.style.display = 'none'; - document.getElementById('usexpand').innerHTML='► '; - document.getElementById('uscollapse').innerHTML=''; - } else { - seluserid.style.display = 'inline'; - document.getElementById('usexpand').innerHTML=''; - document.getElementById('uscollapse').innerHTML='◄ '; + if (document.getElementById('LC_selectuser')) { + var seluserid = document.getElementById('LC_selectuser'); + var currstyle = seluserid.style.display; + if (change == 'off') { + document.userview.elements['LC_viewas'].value = ''; + document.userview.elements['vuname'].value = ''; + document.userview.elements['vid'].value = ''; + document.userview.submit(); + return; + } + if ((document.getElementById('usexpand')) && (document.getElementById('uscollapse'))) { + if (currstyle == 'inline') { + seluserid.style.display = 'none'; + document.getElementById('usexpand').innerHTML='► '; + document.getElementById('uscollapse').innerHTML=''; + } else { + seluserid.style.display = 'inline'; + document.getElementById('usexpand').innerHTML=''; + document.getElementById('uscollapse').innerHTML='◄ '; + toggleIdentifier(document.userview); + } + } } return; } @@ -2751,7 +2821,13 @@ function toggleViewAsUser(change) { function validCourseUser(form,change) { var possuname = form.elements['vuname'].value; var possuid = form.elements['vid'].value; - var possudom = form.elements['vudom'].options[form.elements['vudom'].selectedIndex].value; + var domelem = form.elements['vudom']; + var possudom = ''; + if ((domelem.tagName === 'INPUT') && ((domelem.type === 'text') || (domelem.type === 'hidden'))) { + possudom = domelem.value; + } else if (domelem.tagName === 'SELECT') { + possudom = domelem.options[domelem.selectedIndex].value; + } if ((possuname == '') && (possuid == '')) { if (change == 'off') { form.elements['LC_viewas'].value = ''; @@ -2787,6 +2863,30 @@ function validCourseUser(form,change) { return false; } +function toggleIdentifier(form) { + if ((document.getElementById('LC_vuname')) && (document.getElementById('LC_vid'))) { + var radioelem = form.elements['vuidentifier']; + if (radioelem.length > 0) { + var i; + for (i=0; i