version 1.461, 2016/11/09 14:23:36
|
version 1.518, 2022/05/27 04:35:36
|
Line 99 It gets filled in the BEGIN block of thi
|
Line 99 It gets filled in the BEGIN block of thi
|
|
|
=over |
=over |
|
|
=item prep_menuitems(\@menuitem) |
=item prep_menuitems(\@menuitem,$ltitarget,$deeplinktarget,$listclass,$linkattr) |
|
|
This routine wraps a menuitem in proper HTML. It is used by primary_menu() and |
This routine wraps a menuitem in proper HTML. It is used by primary_menu() and |
secondary_menu(). |
secondary_menu(). |
Line 210 use Apache::lonenc();
|
Line 210 use Apache::lonenc();
|
use Apache::lonlocal; |
use Apache::lonlocal; |
use Apache::lonmsg(); |
use Apache::lonmsg(); |
use LONCAPA qw(:DEFAULT :match); |
use LONCAPA qw(:DEFAULT :match); |
|
use LONCAPA::ltiutils; |
use HTML::Entities(); |
use HTML::Entities(); |
use Apache::lonwishlist(); |
use Apache::lonwishlist(); |
|
|
use vars qw(@desklines %category_names %category_members %category_positions |
use vars qw(@desklines %category_names %category_members %category_positions |
$readdesk @primary_menu %primary_submenu @secondary_menu); |
$readdesk @primary_menu %primary_submenu @secondary_menu %secondary_submenu); |
|
|
my @inlineremote; |
my @inlineremote; |
|
|
sub prep_menuitem { |
sub prep_menuitem { |
my ($menuitem) = @_; |
my ($menuitem,$ltitarget,$deeplinktarget,$listclass,$linkattr) = @_; |
return '' unless(ref($menuitem) eq 'ARRAY'); |
return '' unless(ref($menuitem) eq 'ARRAY'); |
my $link; |
my $link; |
if ($$menuitem[1]) { # graphical Link |
if ($$menuitem[1]) { # graphical Link |
Line 229 sub prep_menuitem {
|
Line 230 sub prep_menuitem {
|
} else { # textual Link |
} else { # textual Link |
$link = &mt($$menuitem[3]); |
$link = &mt($$menuitem[3]); |
} |
} |
return '<li><a' |
my $target = ' target="_top"'; |
|
if ($ltitarget eq 'iframe') { |
|
$target =''; |
|
} elsif ($deeplinktarget eq '_self') { |
|
$target = ' target="'.$deeplinktarget.'"'; |
|
} |
|
return ($listclass?'<li class="'.$listclass.'">':'<li>').'<a' |
# highlighting for new messages |
# highlighting for new messages |
. ( $$menuitem[4] eq 'newmsg' ? ' class="LC_new_message"' : '') |
. ( $$menuitem[4] eq 'newmsg' ? ' class="LC_new_message"' : '') |
. qq| href="$$menuitem[0]" target="_top">$link</a></li>|; |
. qq| href="$$menuitem[0]"$target $linkattr>$link</a></li>|; |
} |
} |
|
|
# primary_menu() evaluates @primary_menu and returns a two item array, |
# primary_menu() evaluates @primary_menu and returns a two item array, |
Line 242 sub prep_menuitem {
|
Line 249 sub prep_menuitem {
|
# @primary_menu is filled within the BEGIN block of this module with |
# @primary_menu is filled within the BEGIN block of this module with |
# entries from mydesk.tab |
# entries from mydesk.tab |
sub primary_menu { |
sub primary_menu { |
my ($crstype) = @_; |
my ($crstype,$ltimenu,$menucoll,$menuref,$links_disabled) = @_; |
my (%menu); |
my (%menu,%ltiexc,%menuopts); |
# each element of @primary contains following array: |
# each element of @primary contains following array: |
# (link url, icon path, alt text, link text, condition, position) |
# (link url, icon path, alt text, link text, condition, position) |
my $public; |
my $public; |
Line 260 sub primary_menu {
|
Line 267 sub primary_menu {
|
my %roles_in_env; |
my %roles_in_env; |
$rolecount = &Apache::lonroles::roles_from_env(\%roles_in_env,$update); |
$rolecount = &Apache::lonroles::roles_from_env(\%roles_in_env,$update); |
} |
} |
|
my ($lti,$ltitarget,$deeplinktarget); |
|
if ($env{'request.lti.login'}) { |
|
$lti = 1; |
|
$ltitarget = $env{'request.lti.target'}; |
|
if (ref($ltimenu) eq 'HASH') { |
|
foreach my $item ('fullname','logout') { |
|
unless ($ltimenu->{$item}) { |
|
$ltiexc{$item} = 1; |
|
} |
|
} |
|
} |
|
} |
|
if ($env{'request.deeplink.login'}) { |
|
$deeplinktarget = $env{'request.deeplink.target'}; |
|
} |
|
if (($menucoll) && (ref($menuref) eq 'HASH')) { |
|
%menuopts = %{$menuref}; |
|
} |
foreach my $menuitem (@primary_menu) { |
foreach my $menuitem (@primary_menu) { |
# evaluate conditions |
# evaluate conditions |
next if ref($menuitem) ne 'ARRAY'; # |
next if ref($menuitem) ne 'ARRAY'; # |
Line 274 sub primary_menu {
|
Line 299 sub primary_menu {
|
&& !$public; # only visible to public |
&& !$public; # only visible to public |
# users |
# users |
next if $$menuitem[4] eq 'roles' ##show links depending on |
next if $$menuitem[4] eq 'roles' ##show links depending on |
&& &Apache::loncommon::show_course(); ##term 'Courses' or |
&& (&Apache::loncommon::show_course() ##term 'Courses' or |
next if $$menuitem[4] eq 'courses' ##'Roles' wanted |
|| $lti); ##'Roles' wanted |
&& !&Apache::loncommon::show_course(); ## |
next if $$menuitem[4] eq 'courses' ##and not LTI access |
|
&& (!&Apache::loncommon::show_course() |
|
|| $lti); |
|
next if $$menuitem[4] eq 'notlti' |
|
&& $lti; |
|
next if $$menuitem[4] eq 'ltiexc' |
|
&& exists($ltiexc{lc($menuitem->[3])}); |
my $title = $menuitem->[3]; |
my $title = $menuitem->[3]; |
if (($crstype eq 'Placement') && (!$env{'request.role.adv'})) { |
if (($crstype eq 'Placement') && (!$env{'request.role.adv'})) { |
if ($menuitem->[4] eq 'courses') { |
if ($menuitem->[4] eq 'courses') { |
Line 289 sub primary_menu {
|
Line 320 sub primary_menu {
|
if ($position eq '') { |
if ($position eq '') { |
$position = 'right'; |
$position = 'right'; |
} |
} |
|
if ($env{'request.course.id'} && $menucoll) { |
|
if (($menuitem->[6]) && (!$menuopts{$menuitem->[6]})) { |
|
if ($menuitem->[6] eq 'pers') { |
|
if ($menuopts{'name'} && !$ltiexc{'fullname'} && |
|
$env{'user.name'} && $env{'user.domain'}) { |
|
$menu{$position} .= '<li><a href="#">'. |
|
&Apache::loncommon::plainname($env{'user.name'}, |
|
$env{'user.domain'}).'</a></li>'; |
|
next; |
|
} else { |
|
next; |
|
} |
|
} else { |
|
next; |
|
} |
|
} |
|
} |
|
my ($listclass,$linkattr); |
|
if ($links_disabled) { |
|
$listclass = 'LCisDisabled'; |
|
$linkattr = 'aria-disabled="true"'; |
|
} |
if (defined($primary_submenu{$title})) { |
if (defined($primary_submenu{$title})) { |
my ($link,$target); |
my ($link,$target); |
if ($menuitem->[0] ne '') { |
if ($menuitem->[0] ne '') { |
$link = $menuitem->[0]; |
$link = $menuitem->[0]; |
$target = '_top'; |
unless (($ltitarget eq 'iframe') || ($deeplinktarget eq '_self')) { |
|
$target = '_top'; |
|
} |
} else { |
} else { |
$link = '#'; |
$link = '#'; |
} |
} |
Line 306 sub primary_menu {
|
Line 361 sub primary_menu {
|
($item->[2] eq 'blog')) && |
($item->[2] eq 'blog')) && |
(!&Apache::lonnet::usertools_access('','',$item->[2], |
(!&Apache::lonnet::usertools_access('','',$item->[2], |
undef,'tools'))); |
undef,'tools'))); |
|
if ($env{'request.course.id'} && $menucoll) { |
|
next if ($item->[3]) && (!$menuopts{$item->[3]}); |
|
} |
push(@primsub,$item); |
push(@primsub,$item); |
} |
} |
if ($title eq 'Personal' && $env{'user.name'} && $env{'user.domain'} ) { |
if ($title eq 'Personal') { |
$title = &Apache::loncommon::plainname($env{'user.name'},$env{'user.domain'}); |
if ($env{'user.name'} && $env{'user.domain'} && !$ltiexc{'fullname'}) { |
|
unless (($env{'request.course.id'}) && ($menucoll) && (!$menuopts{'name'})) { |
|
$title = &Apache::loncommon::plainname($env{'user.name'},$env{'user.domain'}); |
|
} |
|
} |
|
next if (($env{'request.course.id'}) && ($menucoll) && ($title eq 'Personal') && |
|
(!@primsub)); |
|
if ($title eq 'Personal') { |
|
$title = &mt($title); |
|
} |
} else { |
} else { |
$title = &mt($title); |
$title = &mt($title); |
} |
} |
if (@primsub > 0) { |
if (@primsub > 0) { |
$menu{$position} .= &create_submenu($link,$target,$title,\@primsub,1); |
$menu{$position} .= &create_submenu($link,$target,$title,\@primsub,1,undef,$listclass,$linkattr); |
} elsif ($link) { |
} elsif ($link) { |
$menu{$position} .= '<li><a href="'.$link.'" target="'.$target.'">'.$title.'</a></li>'; |
$menu{$position} .= ($listclass?'<li class="'.$listclass.'">':'<li>'). |
|
'<a href="'.$link.'" target="'.$target.'" '.$linkattr.'>'.$title.'</a></li>'; |
} |
} |
} |
} |
} elsif ($$menuitem[3] eq 'Help') { # special treatment for helplink |
} elsif ($$menuitem[3] eq 'Help') { # special treatment for helplink |
Line 328 sub primary_menu {
|
Line 396 sub primary_menu {
|
'helpdeskmail', |
'helpdeskmail', |
$defdom,$origmail); |
$defdom,$origmail); |
if ($to ne '') { |
if ($to ne '') { |
$menu{$position} .= &prep_menuitem($menuitem); |
$menu{$position} .= &prep_menuitem($menuitem,$ltitarget,$deeplinktarget,$listclass,$linkattr); |
} |
} |
} else { |
} else { |
$menu{$position} .= '<li>'.&Apache::loncommon::top_nav_help('Help').'</li>'; |
$menu{$position} .= ($listclass?'<li class="'.$listclass.'">':'<li>'). |
|
&Apache::loncommon::top_nav_help('Help',$linkattr). |
|
'</li>'; |
|
} |
|
} elsif ($$menuitem[3] eq 'Log In') { |
|
if ($public) { |
|
if (&Apache::lonnet::get_saml_landing()) { |
|
$$menuitem[0] = '/adm/login'; |
|
} |
} |
} |
|
$menu{$position} .= prep_menuitem($menuitem,$ltitarget,$deeplinktarget,$listclass,$linkattr); |
} else { |
} else { |
$menu{$position} .= prep_menuitem($menuitem); |
$menu{$position} .= prep_menuitem($menuitem,$ltitarget,$deeplinktarget,$listclass,$linkattr); |
} |
} |
} |
} |
my @output = ('',''); |
my @output = ('',''); |
Line 373 sub getauthor{
|
Line 450 sub getauthor{
|
} |
} |
|
|
sub secondary_menu { |
sub secondary_menu { |
my ($httphost) = @_; |
my ($httphost,$ltiscope,$ltimenu,$noprimary,$menucoll,$menuref,$links_disabled) = @_; |
my $menu; |
my $menu; |
|
|
my $crstype = &Apache::loncommon::course_type(); |
my $crstype = &Apache::loncommon::course_type(); |
Line 381 sub secondary_menu {
|
Line 458 sub secondary_menu {
|
? "/$env{'request.course.sec'}" |
? "/$env{'request.course.sec'}" |
: ''); |
: ''); |
my $canedit = &Apache::lonnet::allowed('mdc', $env{'request.course.id'}); |
my $canedit = &Apache::lonnet::allowed('mdc', $env{'request.course.id'}); |
|
my $canvieweditor = &Apache::lonnet::allowed('cev', $env{'request.course.id'}); |
my $canviewroster = $env{'course.'.$env{'request.course.id'}.'.student_classlist_view'}; |
my $canviewroster = $env{'course.'.$env{'request.course.id'}.'.student_classlist_view'}; |
if ($canviewroster eq 'disabled') { |
if ($canviewroster eq 'disabled') { |
undef($canviewroster); |
undef($canviewroster); |
Line 393 sub secondary_menu {
|
Line 471 sub secondary_menu {
|
my $canmodpara = &Apache::lonnet::allowed('opa', $crs_sec); |
my $canmodpara = &Apache::lonnet::allowed('opa', $crs_sec); |
my $canvgr = &Apache::lonnet::allowed('vgr', $crs_sec); |
my $canvgr = &Apache::lonnet::allowed('vgr', $crs_sec); |
my $canmgr = &Apache::lonnet::allowed('mgr', $crs_sec); |
my $canmgr = &Apache::lonnet::allowed('mgr', $crs_sec); |
|
my $canplc = &Apache::lonnet::allowed('plc', $crs_sec); |
my $author = &getauthor(); |
my $author = &getauthor(); |
|
|
my ($cdom,$cnum,$showsyllabus,$showfeeds,$showresv,$grouptools); |
my ($cdom,$cnum,$showsyllabus,$showfeeds,$showresv,$grouptools, |
|
$lti,$ltimapres,%ltiexc,%menuopts); |
$grouptools = 0; |
$grouptools = 0; |
if ($env{'request.course.id'}) { |
if ($env{'request.course.id'}) { |
$cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
$cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
$cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
$cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
if ($canedit) { |
unless ($canedit || $canvieweditor) { |
$showsyllabus = 1; |
|
$showfeeds = 1; |
|
} else { |
|
unless (&Apache::lonnet::is_on_map("public/$cdom/$cnum/syllabus")) { |
unless (&Apache::lonnet::is_on_map("public/$cdom/$cnum/syllabus")) { |
if (($env{'course.'.$env{'request.course.id'}.'.externalsyllabus'}) || |
if (($env{'course.'.$env{'request.course.id'}.'.externalsyllabus'}) || |
($env{'course.'.$env{'request.course.id'}.'.uploadedsyllabus'}) || |
($env{'course.'.$env{'request.course.id'}.'.uploadedsyllabus'}) || |
Line 416 sub secondary_menu {
|
Line 493 sub secondary_menu {
|
$showfeeds = 1; |
$showfeeds = 1; |
} |
} |
} |
} |
unless (($canmgr || $canvgr)) { |
unless ($canmgr || $canvgr) { |
my %slots = &Apache::lonnet::get_course_slots($cnum,$cdom); |
my %slots = &Apache::lonnet::get_course_slots($cnum,$cdom); |
if (keys(%slots) > 0) { |
if (keys(%slots) > 0) { |
$showresv = 1; |
$showresv = 1; |
} |
} |
} |
} |
my %groups = &Apache::lonnet::get_active_groups( |
if ($env{'request.course.groups'} ne '') { |
$env{'user.domain'}, $env{'user.name'},$cdom,$cnum); |
foreach my $group (split(/:/,$env{'request.course.groups'})) { |
if (%groups) { |
next unless ($group =~ /^\w+$/); |
foreach my $group (keys(%groups)) { |
|
my @privs = split(/:/,$env{"user.priv.$env{'request.role'}./$cdom/$cnum/$group"}); |
my @privs = split(/:/,$env{"user.priv.$env{'request.role'}./$cdom/$cnum/$group"}); |
shift(@privs); |
shift(@privs); |
if (@privs) { |
if (@privs) { |
Line 433 sub secondary_menu {
|
Line 509 sub secondary_menu {
|
} |
} |
} |
} |
} |
} |
|
if ($env{'request.lti.login'}) { |
|
$lti = 1; |
|
if (ref($ltimenu) eq 'HASH') { |
|
foreach my $item ('fullname','coursetitle','role','logout','grades') { |
|
unless ($ltimenu->{$item}) { |
|
$ltiexc{$item} = 1; |
|
} |
|
} |
|
} |
|
if (($ltiscope eq 'map') || ($ltiscope eq 'resource')) { |
|
$ltimapres = 1; |
|
} |
|
} |
|
} |
|
if (($menucoll) && (ref($menuref) eq 'HASH')) { |
|
%menuopts = %{$menuref}; |
|
} |
|
|
|
my ($listclass,$linkattr); |
|
if ($links_disabled) { |
|
$listclass = 'LCisDisabled'; |
|
$linkattr = 'aria-disabled="true"'; |
} |
} |
|
|
my ($canmodifycoauthor); |
my ($canmodifycoauthor); |
Line 443 sub secondary_menu {
|
Line 541 sub secondary_menu {
|
$canmodifycoauthor = 1; |
$canmodifycoauthor = 1; |
} |
} |
} |
} |
my ($roleswitcher_js,$roleswitcher_form); |
|
|
my ($roleswitcher_js,$roleswitcher_form,$ltitarget,$deeplinktarget); |
|
if ($env{'request.lti.login'}) { |
|
$ltitarget = $env{'request.lti.target'}; |
|
} |
|
if ($env{'request.deeplink.login'}) { |
|
$deeplinktarget = $env{'request.deeplink.target'}; |
|
} |
|
|
foreach my $menuitem (@secondary_menu) { |
foreach my $menuitem (@secondary_menu) { |
# evaluate conditions |
# evaluate conditions |
Line 452 sub secondary_menu {
|
Line 557 sub secondary_menu {
|
next if $$menuitem[4] ne 'always' |
next if $$menuitem[4] ne 'always' |
&& ($$menuitem[4] ne 'author' && $$menuitem[4] ne 'cca') |
&& ($$menuitem[4] ne 'author' && $$menuitem[4] ne 'cca') |
&& !$env{'request.course.id'}; |
&& !$env{'request.course.id'}; |
next if $$menuitem[4] =~ /^mdc/ |
next if $$menuitem[4] =~ /^crsedit/ |
&& !$canedit; |
&& (!$canedit && !$canvieweditor); |
next if $$menuitem[4] eq 'nvgr' |
next if $$menuitem[4] eq 'nvgr' |
&& $canvgr; |
&& ($canvgr || $ltiexc{'grades'}); |
next if $$menuitem[4] eq 'vgr' |
next if $$menuitem[4] eq 'vgr' |
&& !$canvgr; |
&& !$canvgr; |
next if $$menuitem[4] eq 'viewusers' |
next if $$menuitem[4] eq 'viewusers' |
Line 470 sub secondary_menu {
|
Line 575 sub secondary_menu {
|
&& !$canviewwnew; |
&& !$canviewwnew; |
next if $$menuitem[4] eq 'params' |
next if $$menuitem[4] eq 'params' |
&& (!$canmodpara && !$canviewpara); |
&& (!$canmodpara && !$canviewpara); |
next if $$menuitem[4] =~ /showgroups$/ |
next if $$menuitem[4] eq 'showgroups' |
&& !$canviewgrps |
&& ($canviewgrps || !$grouptools); |
&& !$grouptools; |
|
next if $$menuitem[4] eq 'showsyllabus' |
next if $$menuitem[4] eq 'showsyllabus' |
&& !$showsyllabus; |
&& !$showsyllabus; |
next if $$menuitem[4] eq 'showfeeds' |
next if $$menuitem[4] eq 'showfeeds' |
&& !$showfeeds; |
&& !$showfeeds; |
|
next if $$menuitem[4] eq 'plc' |
|
&& !$canplc; |
next if $$menuitem[4] eq 'author' |
next if $$menuitem[4] eq 'author' |
&& !$author; |
&& !$author; |
next if $$menuitem[4] eq 'cca' |
next if $$menuitem[4] eq 'cca' |
&& !$canmodifycoauthor; |
&& !$canmodifycoauthor; |
|
next if $$menuitem[4] eq 'notltimapres' |
|
&& $ltimapres; |
|
next if $$menuitem[4] eq 'notlti' |
|
&& $lti; |
|
next if $$menuitem[4] eq 'lti' |
|
&& (!$lti || !$noprimary); |
|
next if $$menuitem[3] eq 'Logout' |
|
&& $ltiexc{'logout'}; |
|
|
if ($$menuitem[3] eq 'Roles' && $env{'request.course.id'}) { |
my $title = $menuitem->[3]; |
|
if ($env{'request.course.id'} && $menucoll) { |
|
unless ($$menuitem[5] eq 'roles') { |
|
next if (($$menuitem[5]) && (!$menuopts{$$menuitem[5]})); |
|
} |
|
} |
|
if (defined($secondary_submenu{$title})) { |
|
my ($link,$target); |
|
if ($menuitem->[0] ne '') { |
|
$link = $menuitem->[0]; |
|
unless (($ltitarget eq 'iframe') || ($deeplinktarget eq '_self')) { |
|
$target = '_top'; |
|
} |
|
} else { |
|
$link = '#'; |
|
} |
|
my @scndsub; |
|
if (ref($secondary_submenu{$title}) eq 'ARRAY') { |
|
foreach my $item (@{$secondary_submenu{$title}}) { |
|
if (ref($item) eq 'ARRAY') { |
|
next if ($item->[2] eq 'vgr' && !$canvgr); |
|
next if ($item->[2] eq 'opa' && !$canmodpara); |
|
next if ($item->[2] eq 'vpa' && !$canviewpara); |
|
next if ($item->[2] eq 'viewusers' && !($canmodifyuser || $canviewusers)); |
|
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 'params' && !$canmodpara && !$canviewpara); |
|
next if ($item->[2] eq 'author' && !$author); |
|
next if ($item->[2] eq 'cca' && !$canmodifycoauthor); |
|
next if ($item->[2] eq 'lti' && !$lti); |
|
if ($item->[2] =~ /^lti(portfolio|wishlist|blog)$/) { |
|
my $tool = $1; |
|
next if !$lti; |
|
next if (!&Apache::lonnet::usertools_access('','',$tool, |
|
undef,'tools')); |
|
} |
|
push(@scndsub,$item); |
|
} |
|
} |
|
if ($title eq 'Personal' && $env{'user.name'} && $env{'user.domain'}) { |
|
unless ($ltiexc{'fullname'}) { |
|
$title = &Apache::loncommon::plainname($env{'user.name'},$env{'user.domain'}); |
|
} |
|
} |
|
if (@scndsub > 0) { |
|
$menu .= &create_submenu($link,$target,&mt($title),\@scndsub,1,undef, |
|
$listclass,$linkattr); |
|
} elsif ($link ne '#') { |
|
$menu .= ($listclass?'<li class="'.$listclass.'">':'<li>'). |
|
'<a href="'.$link.'" target="'.$target.'" '.$linkattr.'>'. |
|
&mt($title).'</a></li>'; |
|
} |
|
} |
|
} elsif ($$menuitem[3] eq 'Roles' && $env{'request.course.id'}) { |
# special treatment for role selector |
# special treatment for role selector |
($roleswitcher_js,$roleswitcher_form,my $switcher) = |
my ($switcher,$has_opa_priv); |
|
($roleswitcher_js,$roleswitcher_form,$switcher,$has_opa_priv) = |
&roles_selector( |
&roles_selector( |
$env{'course.' . $env{'request.course.id'} . '.domain'}, |
$env{'course.' . $env{'request.course.id'} . '.domain'}, |
$env{'course.' . $env{'request.course.id'} . '.num'}, |
$env{'course.' . $env{'request.course.id'} . '.num'}, |
$httphost |
$httphost |
); |
); |
|
if (($$menuitem[5]) && (!$menuopts{$$menuitem[5]})) { |
|
next unless ($has_opa_priv); |
|
} |
$menu .= $switcher; |
$menu .= $switcher; |
|
} elsif ($$menuitem[3] eq 'Help') { # special treatment for helplink |
|
next if ($crstype eq 'Placement'); |
|
$menu .= '<li>'.&Apache::loncommon::top_nav_help('Help').'</li>'; |
} else { |
} else { |
if ($$menuitem[3] eq 'Syllabus' && $env{'request.course.id'}) { |
if ($$menuitem[3] eq 'Syllabus' && $env{'request.course.id'}) { |
my $url = $$menuitem[0]; |
my $url = $$menuitem[0]; |
$url =~ s{\[cdom\]/\[cnum\]}{$cdom/$cnum}; |
$url =~ s{\[cdom\]/\[cnum\]}{$cdom/$cnum}; |
if (&Apache::lonnet::is_on_map($url)) { |
if (&Apache::lonnet::is_on_map($url)) { |
unless ($$menuitem[0] =~ /\?register=1/) { |
unless ($$menuitem[0] =~ /(\?|\&)register=1/) { |
$$menuitem[0] .= '?register=1'; |
$$menuitem[0] .= (($$menuitem[0]=~/\?/)? '&' : '?').'register=1'; |
} |
} |
} else { |
} else { |
$$menuitem[0] =~ s{\?register=1}{}; |
$$menuitem[0] =~ s{\&?register=1}{}; |
} |
} |
|
if ($env{'course.'.$env{'request.course.id'}.'.externalsyllabus'} =~ m{^http://}) { |
|
if (($ENV{'SERVER_PORT'} == 443) || ($env{'request.use_absolute'} =~ m{^https://})) { |
|
unless ((&Apache::lonnet::uses_sts()) || (&Apache::lonnet::waf_allssl())) { |
|
unless ($$menuitem[0] =~ m{^https?://}) { |
|
$$menuitem[0] = 'http://'.$ENV{'SERVER_NAME'}.$$menuitem[0]; |
|
} |
|
unless ($$menuitem[0] =~ /(\&|\?)usehttp=1/) { |
|
$$menuitem[0] .= (($$menuitem[0]=~/\?/) ? '&' : '?').'usehttp=1'; |
|
} |
|
} |
|
} |
|
} |
|
$$menuitem[0] = &HTML::Entities::encode($$menuitem[0],'&<>"'); |
} |
} |
$menu .= &prep_menuitem(\@$menuitem); |
$menu .= &prep_menuitem(\@$menuitem,$ltitarget,$deeplinktarget,$listclass,$linkattr); |
} |
} |
} |
} |
if ($menu =~ /\[url\].*\[symb\]/) { |
if ($menu =~ /\[url\].*\[symb\]/) { |
Line 520 sub secondary_menu {
|
Line 708 sub secondary_menu {
|
my $londocroot = $Apache::lonnet::perlvar{'lonDocRoot'}; |
my $londocroot = $Apache::lonnet::perlvar{'lonDocRoot'}; |
($escurl = $env{'request.filename'}) =~ s{^\Q$londocroot\E}{}; |
($escurl = $env{'request.filename'}) =~ s{^\Q$londocroot\E}{}; |
$escurl = &escape($escurl); |
$escurl = &escape($escurl); |
} |
} |
$menu =~ s/\[url\]/$escurl/g; |
$menu =~ s/\[url\]/$escurl/g; |
$menu =~ s/\[symb\]/$escsymb/g; |
$menu =~ s/\[symb\]/$escsymb/g; |
} |
} |
$menu =~ s/\[uname\]/$$author{user}/g; |
$menu =~ s/\[uname\]/$$author{user}/g; |
$menu =~ s/\[udom\]/$$author{dom}/g; |
$menu =~ s/\[udom\]/$$author{dom}/g; |
if ($showsyllabus || $showfeeds) { |
$menu =~ s/\[javascript\]/javascript:/g; |
|
if ($env{'request.course.id'}) { |
$menu =~ s/\[cnum\]/$cnum/g; |
$menu =~ s/\[cnum\]/$cnum/g; |
$menu =~ s/\[cdom\]/$cdom/g; |
$menu =~ s/\[cdom\]/$cdom/g; |
} |
} |
Line 540 sub secondary_menu {
|
Line 729 sub secondary_menu {
|
} |
} |
|
|
sub create_submenu { |
sub create_submenu { |
my ($link,$target,$title,$submenu,$translate,$addclass) = @_; |
my ($link,$target,$title,$submenu,$translate,$addclass,$listclass,$linkattr) = @_; |
return unless (ref($submenu) eq 'ARRAY'); |
return unless (ref($submenu) eq 'ARRAY'); |
my $disptarget; |
my $disptarget; |
if ($target ne '') { |
if ($target ne '') { |
Line 555 sub create_submenu {
|
Line 744 sub create_submenu {
|
|
|
# $link and $title are only used in the initial string written in $menu |
# $link and $title are only used in the initial string written in $menu |
# as seen above, not needed for nested submenus |
# as seen above, not needed for nested submenus |
$menu .= &build_submenu($target, $submenu, $translate, '1'); |
$menu .= &build_submenu($target, $submenu, $translate, '1', $listclass, $linkattr); |
$menu .= '</ul></li>'; |
$menu .= '</ul></li>'; |
|
|
return $menu; |
return $menu; |
Line 565 sub create_submenu {
|
Line 754 sub create_submenu {
|
# build the dropdown (and nested submenus) recursively |
# build the dropdown (and nested submenus) recursively |
# see perldoc create_submenu documentation for further information |
# see perldoc create_submenu documentation for further information |
sub build_submenu { |
sub build_submenu { |
my ($target, $submenu, $translate, $first_level) = @_; |
my ($target, $submenu, $translate, $first_level, $listclass, $linkattr) = @_; |
unless (@{$submenu}) { |
unless (@{$submenu}) { |
return ''; |
return ''; |
} |
} |
Line 609 sub build_submenu {
|
Line 798 sub build_submenu {
|
next unless (($env{'user.name'} ne '') && ($env{'user.domain'} ne '')); |
next unless (($env{'user.name'} ne '') && ($env{'user.domain'} ne '')); |
$href =~ s/\[domain\]/$env{'user.domain'}/g; |
$href =~ s/\[domain\]/$env{'user.domain'}/g; |
$href =~ s/\[user\]/$env{'user.name'}/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 =~ /^\#/)) { |
unless (($href eq '') || ($href =~ /^\#/)) { |
$target = ' target="_top"'; |
if ($target eq '_top') { |
|
$target = ' target="_top"'; |
|
} |
} |
} |
|
|
$menu .= '<li style="margin:0;padding:0;'. $bordertop . $borderbot .'">'; |
$menu .= '<li '; |
$menu .= '<a href="'.$href.'"'.$target.'>' . $title . '</a>'; |
$menu .= ($listclass?'class="'.$listclass.'" ':''); |
|
$menu .= 'style="margin:0;padding:0;'. $bordertop . $borderbot .'">'; |
|
$menu .= '<a href="'.$href.'"'.$target.' '.$linkattr.'>' . $title . '</a>'; |
$menu .= '</li>'; |
$menu .= '</li>'; |
} |
} |
} |
} |
Line 624 sub build_submenu {
|
Line 831 sub build_submenu {
|
} |
} |
|
|
sub innerregister { |
sub innerregister { |
my ($forcereg,$bread_crumbs,$group,$pagebuttonshide) = @_; |
my ($forcereg,$bread_crumbs,$group,$pagebuttonshide,$hostname,$ltiscope,$ltiuri) = @_; |
my $const_space = ($env{'request.state'} eq 'construct'); |
my $const_space = ($env{'request.state'} eq 'construct'); |
my $is_const_dir = 0; |
my $is_const_dir = 0; |
|
|
Line 634 sub innerregister {
|
Line 841 sub innerregister {
|
|
|
undef(@inlineremote); |
undef(@inlineremote); |
|
|
my ($mapurl,$resurl,$crstype); |
my ($mapurl,$resurl,$crstype,$navmap); |
|
|
if ($env{'request.course.id'}) { |
if ($env{'request.course.id'}) { |
# |
# |
Line 642 sub innerregister {
|
Line 849 sub innerregister {
|
# |
# |
$crstype = &Apache::loncommon::course_type(); |
$crstype = &Apache::loncommon::course_type(); |
if ($env{'request.symb'}) { |
if ($env{'request.symb'}) { |
($mapurl, my $rid, $resurl) = &Apache::lonnet::decode_symb(&Apache::lonnet::symbread()); |
my $ignorenull; |
|
unless ($env{'request.noversionuri'} eq '/adm/navmaps') { |
|
$ignorenull = 1; |
|
} |
|
my $symb = &Apache::lonnet::symbread('','',$ignorenull); |
|
($mapurl, my $rid, $resurl) = &Apache::lonnet::decode_symb($symb); |
my $coursetitle = $env{'course.'.$env{'request.course.id'}.'.description'}; |
my $coursetitle = $env{'course.'.$env{'request.course.id'}.'.description'}; |
|
|
my $maptitle = &Apache::lonnet::gettitle($mapurl); |
my $maptitle = &Apache::lonnet::gettitle($mapurl); |
my $restitle = &Apache::lonnet::gettitle(&Apache::lonnet::symbread()); |
my $restitle = &Apache::lonnet::gettitle($symb); |
my @crumbs; |
my (@crumbs,@mapcrumbs); |
|
if (($env{'request.noversionuri'} ne '/adm/navmaps') && ($mapurl ne '') && |
|
(!(($crstype eq 'Placement') && !$env{'request.role.adv'}))) { |
|
unless ($ltiscope eq 'resource') { |
|
if (($mapurl ne $env{'course.'.$env{'request.course.id'}.'.url'}) && |
|
!(($ltiscope eq 'map') && (&Apache::lonnet::clutter($resurl) eq $ltiuri))) { |
|
$navmap = Apache::lonnavmaps::navmap->new(); |
|
if (ref($navmap)) { |
|
@mapcrumbs = $navmap->recursed_crumbs($mapurl,$restitle); |
|
} |
|
} |
|
} |
|
} |
unless (($forcereg) && |
unless (($forcereg) && |
($env{'request.noversionuri'} eq '/adm/navmaps') && |
($env{'request.noversionuri'} eq '/adm/navmaps') && |
($mapurl eq $env{'course.'.$env{'request.course.id'}.'.url'}) || |
($mapurl eq $env{'course.'.$env{'request.course.id'}.'.url'}) || |
(($crstype eq 'Placement') && (!$env{'request.role.adv'}))) { |
(($crstype eq 'Placement') && (!$env{'request.role.adv'})) || |
|
($ltiscope eq 'map') || ($ltiscope eq 'resource')) { |
@crumbs = ({text => $crstype.' Contents', |
@crumbs = ({text => $crstype.' Contents', |
href => "Javascript:gopost('/adm/navmaps','')"}); |
href => "Javascript:gopost('/adm/navmaps','')"}); |
} |
} |
if ($mapurl ne $env{'course.'.$env{'request.course.id'}.'.url'}) { |
if ($mapurl ne $env{'course.'.$env{'request.course.id'}.'.url'}) { |
push(@crumbs, {text => '...', |
if (@mapcrumbs) { |
no_mt => 1}); |
push(@crumbs,@mapcrumbs); |
|
} elsif (!(($crstype eq 'Placement') && (!$env{'request.role.adv'})) && |
|
($ltiscope ne 'map') && ($ltiscope ne 'resource')) { |
|
push(@crumbs, {text => '...', |
|
no_mt => 1}); |
|
} |
} |
} |
|
|
unless (($crstype eq 'Placement') || (!$env{'request.role.adv'})) { |
unless ((($crstype eq 'Placement') && (!$env{'request.role.adv'})) || (@mapcrumbs) || |
push @crumbs, {text => $maptitle, no_mt => 1} if ($maptitle |
(!$maptitle) || ($maptitle eq 'default.sequence') || |
&& $maptitle ne 'default.sequence' |
($mapurl eq $env{'course.'.$env{'request.course.id'}.'.url'}) || |
&& $maptitle ne $coursetitle); |
($ltiscope eq 'resource')) { |
|
push @crumbs, {text => $maptitle, no_mt => 1, |
|
href => &Apache::lonnet::clutter($mapurl).'?navmap=1'}; |
|
} |
|
if ($restitle && !@mapcrumbs) { |
|
push(@crumbs,{text => $restitle, no_mt => 1}); |
} |
} |
|
|
push @crumbs, {text => $restitle, no_mt => 1} if $restitle; |
|
my @tools; |
my @tools; |
if ($env{'request.filename'} =~ /\.page$/) { |
if ($env{'request.filename'} =~ /\.page$/) { |
my %breadcrumb_tools = &Apache::lonhtmlcommon::current_breadcrumb_tools(); |
my %breadcrumb_tools = &Apache::lonhtmlcommon::current_breadcrumb_tools(); |
Line 691 sub innerregister {
|
Line 924 sub innerregister {
|
} |
} |
my $trail; |
my $trail; |
if ($env{'form.folderpath'}) { |
if ($env{'form.folderpath'}) { |
&prepare_functions($resurl,$forcereg,$group,undef,undef,1); |
&prepare_functions($resurl,$forcereg,$group,undef,undef,1,$hostname); |
($trail) = |
($trail) = |
&Apache::lonhtmlcommon::docs_breadcrumbs(undef,$crstype,undef,$title,1); |
&Apache::lonhtmlcommon::docs_breadcrumbs(undef,$crstype,undef,$title,1); |
} else { |
} else { |
Line 706 sub innerregister {
|
Line 939 sub innerregister {
|
} elsif ($resurl =~ m{^\Q/uploaded$courseurl/portfolio/syllabus/}) { |
} elsif ($resurl =~ m{^\Q/uploaded$courseurl/portfolio/syllabus/}) { |
&Apache::lonhtmlcommon::clear_breadcrumbs(); |
&Apache::lonhtmlcommon::clear_breadcrumbs(); |
&prepare_functions('/public'.$courseurl."/syllabus", |
&prepare_functions('/public'.$courseurl."/syllabus", |
$forcereg,$group,undef,undef,1); |
$forcereg,$group,undef,undef,1,$hostname); |
$title = &mt('Syllabus File'); |
$title = &mt('Syllabus File'); |
my ($trail) = |
my ($trail) = |
&Apache::lonhtmlcommon::docs_breadcrumbs(undef,$crstype,undef,$title,1); |
&Apache::lonhtmlcommon::docs_breadcrumbs(undef,$crstype,undef,$title,1,$hostname); |
return $trail; |
return $trail; |
} |
} |
unless ($env{'request.state'} eq 'construct') { |
unless ($env{'request.state'} eq 'construct') { |
Line 733 sub innerregister {
|
Line 966 sub innerregister {
|
$forceview,$editbutton); |
$forceview,$editbutton); |
if (($resurl =~ m{^/?adm/($match_domain)/($match_username)/aboutme$}) || |
if (($resurl =~ m{^/?adm/($match_domain)/($match_username)/aboutme$}) || |
($env{'request.role'} !~/^(aa|ca|au)/)) { |
($env{'request.role'} !~/^(aa|ca|au)/)) { |
$editbutton = &prepare_functions($resurl,$forcereg,$group); |
$editbutton = &prepare_functions($resurl,$forcereg,$group,'','','',$hostname); |
} |
} |
if ($editbutton eq '') { |
if ($editbutton eq '') { |
$editbutton = &clear(6,1); |
$editbutton = &clear(6,1); |
Line 746 sub innerregister {
|
Line 979 sub innerregister {
|
$cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
$cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
$cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
$cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
$perms{'mdc'} = &Apache::lonnet::allowed('mdc',$env{'request.course.id'}); |
$perms{'mdc'} = &Apache::lonnet::allowed('mdc',$env{'request.course.id'}); |
|
$perms{'cev'} = &Apache::lonnet::allowed('cev',$env{'request.course.id'}); |
my @privs; |
my @privs; |
|
my $gradable_exttool; |
if ($env{'request.symb'} ne '') { |
if ($env{'request.symb'} ne '') { |
if ($env{'request.filename'}=~/$LONCAPA::assess_re/) { |
if ($env{'request.noversionuri'} =~ m{^/adm/$cdom/$cnum/(\d+)/ext\.tool$}) { |
|
if (&Apache::lonnet::EXT('resource.0.gradable') =~ /^yes$/i) { |
|
$gradable_exttool = 1; |
|
push(@privs,('mgr','vgr')); |
|
} |
|
} elsif ($env{'request.filename'}=~/$LONCAPA::assess_re/) { |
push(@privs,('mgr','vgr')); |
push(@privs,('mgr','vgr')); |
} |
} |
push(@privs,('opa','vpa')); |
push(@privs,('opa','vpa')); |
Line 763 sub innerregister {
|
Line 1003 sub innerregister {
|
# |
# |
# Determine whether or not to show Grades and Submissions buttons |
# Determine whether or not to show Grades and Submissions buttons |
# |
# |
if ($env{'request.symb'} ne '' && |
if (($env{'request.symb'} ne '') && |
$env{'request.filename'}=~/$LONCAPA::assess_re/) { |
(($env{'request.filename'}=~/$LONCAPA::assess_re/) || ($gradable_exttool))) { |
if ($perms{'mgr'}) { |
if ($perms{'mgr'}) { |
&switch('','',7,2,'pgrd.png','Content Grades','grades[_4]', |
&switch('','',7,2,'pgrd.png','Content Grades','grades[_4]', |
"gocmd('/adm/grades','gradingmenu')", |
"gocmd('/adm/grades','gradingmenu')", |
Line 785 sub innerregister {
|
Line 1025 sub innerregister {
|
# |
# |
# This applies to items inside a folder/page modifiable in the course. |
# This applies to items inside a folder/page modifiable in the course. |
# |
# |
if (($env{'request.symb'}=~/^uploaded/) && ($perms{'mdc'})) { |
if (($env{'request.symb'}=~/^uploaded/) && (($perms{'mdc'}) || ($perms{'cev'}))) { |
my $text = 'Edit Folder'; |
my $text = 'Edit Folder'; |
if (($mapurl =~ /\.page$/) || |
if (($mapurl =~ /\.page$/) || |
($env{'request.symb'}=~ |
($env{'request.symb'}=~ |
Line 824 sub innerregister {
|
Line 1064 sub innerregister {
|
$currdir =~ s|[^/]+$||; |
$currdir =~ s|[^/]+$||; |
my $cleandisfn = &Apache::loncommon::escape_single($thisdisfn); |
my $cleandisfn = &Apache::loncommon::escape_single($thisdisfn); |
my $esc_currdir = &Apache::loncommon::escape_single($currdir); |
my $esc_currdir = &Apache::loncommon::escape_single($currdir); |
|
my $pubfile = "/res/$udom/$uname/$thisdisfn"; |
|
my $candelete = 1; |
|
if (-e $londocroot.$pubfile) { |
|
unless (&Apache::lonnet::metadata($pubfile,'obsolete')) { |
|
undef($candelete); |
|
} |
|
} |
# |
# |
# Probably should be in mydesk.tab |
# Probably should be in mydesk.tab |
# |
# |
Line 831 sub innerregister {
|
Line 1078 sub innerregister {
|
s&6&1&list.png&Directory&dir[_1]&golist('$esc_currdir')&List current directory |
s&6&1&list.png&Directory&dir[_1]&golist('$esc_currdir')&List current directory |
s&6&2&rtrv.png&Retrieve&version[_1]&gocstr('/adm/retrieve','/priv/$udom/$uname/$cleandisfn')&Retrieve old version |
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&6&3&pub.png&Publish&resource[_3]&gocstr('/adm/publish','/priv/$udom/$uname/$cleandisfn')&Publish this resource |
|
s&7&3©.png&Copy&resource[_4]&gocstr('/adm/cfile?action=copy','/priv/$udom/$uname/$cleandisfn')&Copy this resource |
|
ENDMENUITEMS |
|
# |
|
# Rename and Delete only available if obsolete or unpublished |
|
# |
|
if ($candelete) { |
|
$menuitems .= (<<ENDMENUITEMS); |
|
s&7&4&rename.png&Rename&resource[_5]&gocstr('/adm/cfile?action=rename','/priv/$udom/$uname/$cleandisfn')&Rename this resource |
s&7&1&del.png&Delete&resource[_2]&gocstr('/adm/cfile?action=delete','/priv/$udom/$uname/$cleandisfn')&Delete this resource |
s&7&1&del.png&Delete&resource[_2]&gocstr('/adm/cfile?action=delete','/priv/$udom/$uname/$cleandisfn')&Delete this resource |
|
ENDMENUITEMS |
|
} |
|
$menuitems .= (<<ENDMENUITEMS); |
s&7&2&prt.png&Print&printout[_1]&gocstr('/adm/printout','/priv/$udom/$uname/$cleandisfn')&Prepare a printable document |
s&7&2&prt.png&Print&printout[_1]&gocstr('/adm/printout','/priv/$udom/$uname/$cleandisfn')&Prepare a printable document |
ENDMENUITEMS |
ENDMENUITEMS |
} |
} |
Line 848 ENDMENUITEMS
|
Line 1106 ENDMENUITEMS
|
# Should probably be in mydesk.tab |
# Should probably be in mydesk.tab |
# |
# |
$menuitems = "c&3&1"; |
$menuitems = "c&3&1"; |
if (($crstype ne 'Placement') || ($env{'request.role.adv'})) { |
if ($ltiscope eq 'resource') { |
|
# Suppress display of backward arrow for LTI Provider if scope is resource. |
|
# Suppress display of forward arrow for LTI Provider if scope is resource. |
|
} elsif ($ltiscope eq 'map') { |
|
# Suppress display of backward arrow for LTI Provider if scope is map and this is first resource. |
|
# Suppress display of forward arrow for LTI Provider if scope is map and this is the last resource. |
|
my $showforw = 1; |
|
my $showback = 1; |
|
my $navmap = Apache::lonnavmaps::navmap->new(); |
|
if (ref($navmap)) { |
|
my $mapres = $navmap->getResourceByUrl($ltiuri); |
|
if (ref($mapres)) { |
|
if ($navmap->isLastResource($mapres,$env{'request.symb'})) { |
|
$showforw = 0; |
|
} |
|
if ($navmap->isFirstResource($mapres,$env{'request.symb'})) { |
|
$showback = 0; |
|
} |
|
} |
|
} |
|
if ($showback) { |
|
$menuitems.=" |
|
s&2&1&back.png&&&gopost('/adm/flip','back:'+currentURL)&Previous content resource&&1"; |
|
} |
|
if ($showforw) { |
|
$menuitems.=" |
|
s&2&3&forw.png&&&gopost('/adm/flip','forward:'+currentURL)&Next content resource&&3"; |
|
} |
|
} elsif (($crstype ne 'Placement') || ($env{'request.role.adv'})) { |
$menuitems.=" |
$menuitems.=" |
s&2&1&back.png&&&gopost('/adm/flip','back:'+currentURL)&Previous content resource&&1 |
s&2&1&back.png&&&gopost('/adm/flip','back:'+currentURL)&Previous content resource&&1 |
s&2&3&forw.png&&&gopost('/adm/flip','forward:'+currentURL)&Next content resource&&3"; |
s&2&3&forw.png&&&gopost('/adm/flip','forward:'+currentURL)&Next content resource&&3"; |
Line 906 if ($env{'browser.mobile'}) {
|
Line 1192 if ($env{'browser.mobile'}) {
|
$is_mobile = 1; |
$is_mobile = 1; |
} |
} |
|
|
unless ($env{'request.noversionuri'}=~/\/(bulletinboard|smppg|navmaps|syllabus|aboutme|viewclasslist|portfolio|exttools?)(\?|$)/) { |
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/})) { |
if ((!$env{'request.enc'}) && ($env{'request.noversionuri'} !~ m{^/adm/wrapper/ext/}) && |
|
($env{'request.noversionuri'} !~ m{^/uploaded/$match_domain/$match_courseid/(docs/|default_\d+\.page$)}) && |
|
($env{'request.noversionuri'} !~ m{^/adm/.+/ext\.tool$})) { |
$menuitems.=(<<ENDREALRES); |
$menuitems.=(<<ENDREALRES); |
s&6&3&catalog.png&Info&info[_1]&catalog_info('$is_mobile')&Show Metadata |
s&6&3&catalog.png&Info&info[_1]&catalog_info(currentURL,'$is_mobile')&Show Metadata |
ENDREALRES |
ENDREALRES |
} |
} |
unless (($env{'request.noversionuri'} =~ m{^/uploaded/$match_domain/$match_courseid/docs/}) || |
unless (($env{'request.noversionuri'} =~ m{^/uploaded/$match_domain/$match_courseid/(docs/|default_\d+\.page$)}) || |
($env{'request.noversionuri'} =~ m{^\Q/adm/wrapper/\E(ext|uploaded)/})) { |
($env{'request.noversionuri'} =~ m{^\Q/adm/wrapper/\E(ext|uploaded)/}) || |
|
($env{'request.noversionuri'} =~ m{^/adm/.+/ext\.tool$})) { |
$menuitems.=(<<ENDREALRES); |
$menuitems.=(<<ENDREALRES); |
s&8&1&eval.png&Evaluate&this[_1]&gopost('/adm/evaluate',currentURL,1)&Provide my evaluation of this resource |
s&8&1&eval.png&Evaluate&this[_1]&gopost('/adm/evaluate',currentURL,1)&Provide my evaluation of this resource |
ENDREALRES |
ENDREALRES |
Line 1031 ENDMENUITEMS
|
Line 1320 ENDMENUITEMS
|
} |
} |
|
|
sub get_editbutton { |
sub get_editbutton { |
my ($cfile,$home,$switchserver,$forceedit,$forceview,$forcereg) = @_; |
my ($cfile,$home,$switchserver,$forceedit,$forceview,$forcereg,$hostname) = @_; |
my $jscall; |
my $jscall; |
if (($forceview) && ($env{'form.todocs'})) { |
if (($forceview) && ($env{'form.todocs'})) { |
my ($folderpath,$command); |
my ($folderpath,$command,$navmap); |
if ($env{'request.symb'}) { |
if ($env{'request.symb'}) { |
$folderpath = &Apache::loncommon::symb_to_docspath($env{'request.symb'}); |
$folderpath = &Apache::loncommon::symb_to_docspath($env{'request.symb'},\$navmap); |
} elsif ($env{'form.folderpath'} =~ /^supplemental/) { |
} elsif ($env{'form.folderpath'} =~ /^supplemental/) { |
$folderpath = $env{'form.folderpath'}; |
$folderpath = $env{'form.folderpath'}; |
$command = '&forcesupplement=1'; |
$command = '&forcesupplement=1'; |
Line 1051 sub get_editbutton {
|
Line 1340 sub get_editbutton {
|
$jscall = &Apache::lonhtmlcommon::jump_to_editres($cfile,$home,$switchserver, |
$jscall = &Apache::lonhtmlcommon::jump_to_editres($cfile,$home,$switchserver, |
$forceedit,$forcereg,$env{'request.symb'}, |
$forceedit,$forcereg,$env{'request.symb'}, |
&escape($env{'form.folderpath'}), |
&escape($env{'form.folderpath'}), |
&escape($env{'form.title'}),$env{'form.idx'}, |
&escape($env{'form.title'}),$hostname, |
&escape($env{'form.suppurl'}),$env{'form.todocs'}, |
$env{'form.idx'},&escape($env{'form.suppurl'}), |
$suppanchor); |
$env{'form.todocs'},$suppanchor); |
} |
} |
if ($jscall) { |
if ($jscall) { |
my $icon = 'pcstr.png'; |
my $icon = 'pcstr.png'; |
Line 1070 sub get_editbutton {
|
Line 1359 sub get_editbutton {
|
} |
} |
|
|
sub prepare_functions { |
sub prepare_functions { |
my ($resurl,$forcereg,$group,$bread_crumbs,$advtools,$docscrumbs) = @_; |
my ($resurl,$forcereg,$group,$bread_crumbs,$advtools,$docscrumbs,$hostname) = @_; |
unless ($env{'request.registered'}) { |
unless ($env{'request.registered'}) { |
undef(@inlineremote); |
undef(@inlineremote); |
} |
} |
Line 1084 sub prepare_functions {
|
Line 1373 sub prepare_functions {
|
} |
} |
|
|
my $editbutton = ''; |
my $editbutton = ''; |
|
my $viewsrcbutton = ''; |
|
my $clientip = &Apache::lonnet::get_requestor_ip(); |
# |
# |
# Determine whether or not to display 'Edit' icon/button |
# Determine whether or not to display 'Edit' or 'View Source' icon/button |
# |
# |
if ($resurl =~ m{^/?adm/($match_domain)/($match_username)/aboutme$}) { |
if ($resurl =~ m{^/?adm/($match_domain)/($match_username)/aboutme$}) { |
|
my $blocked = &Apache::loncommon::blocking_status('about',$clientip,$2,$1); |
my $file=&Apache::lonnet::declutter($env{'request.filename'}); |
my $file=&Apache::lonnet::declutter($env{'request.filename'}); |
($cfile,$home,$switchserver,$forceedit,$forceview) = |
($cfile,$home,$switchserver,$forceedit,$forceview) = |
&Apache::lonnet::can_edit_resource($file,$cnum,$cdom, |
&Apache::lonnet::can_edit_resource($file,$cnum,$cdom, |
&Apache::lonnet::clutter($resurl),$env{'request.symb'},$group); |
&Apache::lonnet::clutter($resurl),$env{'request.symb'},$group); |
if (($cfile) && ($home ne '') && ($home ne 'no_host')) { |
if (($cfile) && ($home ne '') && ($home ne 'no_host') && (!$blocked)) { |
$editbutton = &get_editbutton($cfile,$home,$switchserver, |
$editbutton = &get_editbutton($cfile,$home,$switchserver, |
$forceedit,$forceview,$forcereg); |
$forceedit,$forceview,$forcereg); |
} |
} |
Line 1116 sub prepare_functions {
|
Line 1408 sub prepare_functions {
|
# This applies in course context |
# This applies in course context |
# |
# |
if (($perms{'mdc'}) && |
if (($perms{'mdc'}) && |
(($resurl eq "/public/$cdom/$cnum/syllabus") || |
(($resurl =~ m{^/?public/$cdom/$cnum/syllabus}) || |
($resurl =~ m{^/uploaded/$cdom/$cnum/portfolio/syllabus/}))) { |
($resurl =~ m{^/?uploaded/$cdom/$cnum/portfolio/syllabus/}) || |
$cfile = $resurl; |
(($resurl =~ m{^/?uploaded/$cdom/$cnum/default_\d+\.sequence$}) && ($env{'form.navmap'})))) { |
|
if ($resurl =~ m{^/}) { |
|
$cfile = $resurl; |
|
} else { |
|
$cfile = "/$resurl"; |
|
} |
$home = &Apache::lonnet::homeserver($cnum,$cdom); |
$home = &Apache::lonnet::homeserver($cnum,$cdom); |
if ($env{'form.forceedit'}) { |
if ($env{'form.forceedit'}) { |
$forceview = 1; |
$forceview = 1; |
} else { |
} else { |
$forceedit = 1; |
$forceedit = 1; |
} |
} |
$editbutton = &get_editbutton($cfile,$home,$switchserver, |
if ($cfile =~ m{^/uploaded/$cdom/$cnum/default_\d+\.sequence$}) { |
$forceedit,$forceview,$forcereg); |
my $text = 'Edit Folder'; |
|
&switch('','',7,4,'docs-22x22.png','Edit Folder','parms[_2]', |
|
"gocmd('/adm/coursedocs','direct')", |
|
'Folder/Page Content'); |
|
$editbutton = 1; |
|
} else { |
|
$editbutton = &get_editbutton($cfile,$home,$switchserver, |
|
$forceedit,$forceview,$forcereg, |
|
$hostname); |
|
} |
} elsif (($resurl eq '/adm/extresedit') && |
} elsif (($resurl eq '/adm/extresedit') && |
(($env{'form.symb'}) || ($env{'form.folderpath'}))) { |
(($env{'form.symb'}) || ($env{'form.folderpath'}))) { |
($cfile,$home,$switchserver,$forceedit,$forceview) = |
($cfile,$home,$switchserver,$forceedit,$forceview) = |
Line 1134 sub prepare_functions {
|
Line 1440 sub prepare_functions {
|
$env{'form.symb'}); |
$env{'form.symb'}); |
if ($cfile ne '') { |
if ($cfile ne '') { |
$editbutton = &get_editbutton($cfile,$home,$switchserver, |
$editbutton = &get_editbutton($cfile,$home,$switchserver, |
$forceedit,$forceview,$forcereg, |
$forceedit,$forceview,$forcereg); |
$env{'form.title'},$env{'form.suppurl'}); |
|
} |
} |
} elsif (($resurl =~ m{^/?adm/viewclasslist$}) && |
} elsif (($resurl =~ m{^/?adm/viewclasslist$}) && |
(&Apache::lonnet::allowed('opa',$env{'request.course.id'}))) { |
(&Apache::lonnet::allowed('opa',$env{'request.course.id'}))) { |
Line 1153 sub prepare_functions {
|
Line 1458 sub prepare_functions {
|
&Apache::lonnet::clutter($resurl),$env{'request.symb'},$group); |
&Apache::lonnet::clutter($resurl),$env{'request.symb'},$group); |
if ($cfile ne '') { |
if ($cfile ne '') { |
$editbutton = &get_editbutton($cfile,$home,$switchserver, |
$editbutton = &get_editbutton($cfile,$home,$switchserver, |
$forceedit,$forceview,$forcereg); |
$forceedit,$forceview,$forcereg, |
|
$hostname); |
|
} |
|
if ((($cfile eq '') || (!$editbutton)) && |
|
($resurl =~ /$LONCAPA::assess_re/)) { |
|
my $showurl = &Apache::lonnet::clutter($resurl); |
|
my $crs_sec = $env{'request.course.id'} . (($env{'request.course.sec'} ne '') |
|
? "/$env{'request.course.sec'}" |
|
: ''); |
|
if ((&Apache::lonnet::allowed('cre','/')) && |
|
(&Apache::lonnet::metadata($resurl,'sourceavail') eq 'open')) { |
|
$viewsrcbutton = 1; |
|
} elsif (&Apache::lonnet::allowed('vxc',$crs_sec)) { |
|
if ($showurl =~ m{^\Q/res/$cdom/\E($match_username)/}) { |
|
my $auname = $1; |
|
if (($env{'request.course.adhocsrcaccess'} ne '') && |
|
(grep(/^\Q$auname\E$/,split(/,/,$env{'request.course.adhocsrcaccess'})))) { |
|
$viewsrcbutton = 1; |
|
} elsif ((&Apache::lonnet::metadata($resurl,'sourceavail') eq 'open') && |
|
(&Apache::lonnet::allowed('bre',$crs_sec))) { |
|
$viewsrcbutton = 1; |
|
} |
|
} |
|
} |
|
if ($viewsrcbutton) { |
|
&switch('','',6,1,'pcstr.png','View Source','resource[_2]','open_source()', |
|
'View source code'); |
|
} |
} |
} |
} |
} |
} |
} |
Line 1165 sub prepare_functions {
|
Line 1497 sub prepare_functions {
|
if ($resurl =~ m{^/?adm/($match_domain)/($match_username)/aboutme$}) { |
if ($resurl =~ m{^/?adm/($match_domain)/($match_username)/aboutme$}) { |
my ($sdom,$sname) = ($1,$2); |
my ($sdom,$sname) = ($1,$2); |
unless (&Apache::lonnet::is_course($sdom,$sname)) { |
unless (&Apache::lonnet::is_course($sdom,$sname)) { |
&switch('','',6,4,'mail-message-new-22x22.png','Message to user', |
my $blocked = &Apache::loncommon::blocking_status('about',$clientip,$sname,$sdom); |
'', |
unless ($blocked) { |
"go('/adm/email?compose=individual&recname=$sname&recdom=$sdom')", |
&switch('','',6,4,'mail-message-new-22x22.png','Message to user', |
'Send message to specific user'); |
'', |
|
"go('/adm/email?compose=individual&recname=$sname&recdom=$sdom')", |
|
'Send message to specific user'); |
|
} |
} |
} |
my $hideprivileged = 1; |
my $hideprivileged = 1; |
if (&Apache::lonnet::in_course($sdom,$sname,$cdom,$cnum,undef, |
if (&Apache::lonnet::in_course($sdom,$sname,$cdom,$cnum,undef, |
Line 1203 sub prepare_functions {
|
Line 1538 sub prepare_functions {
|
if (($env{'form.folderpath'} =~ /^supplemental/) && |
if (($env{'form.folderpath'} =~ /^supplemental/) && |
(&Apache::lonnet::allowed('mdc',$env{'request.course.id'})) && |
(&Apache::lonnet::allowed('mdc',$env{'request.course.id'})) && |
(($resurl =~ m{^/adm/wrapper/ext/}) || |
(($resurl =~ m{^/adm/wrapper/ext/}) || |
($resurl =~ m{^/adm/$cdom/$cnum/\d+/exttools?$}) || |
($resurl =~ m{^/adm/$cdom/$cnum/\d+/ext\.tool$}) || |
($resurl =~ m{^/uploaded/$cdom/$cnum/supplemental/}) || |
($resurl =~ m{^/uploaded/$cdom/$cnum/supplemental/}) || |
($resurl eq '/adm/supplemental') || |
($resurl eq '/adm/supplemental') || |
($resurl =~ m{^/public/$cdom/$cnum/syllabus$}) || |
($resurl =~ m{^/public/$cdom/$cnum/syllabus$}) || |
Line 1215 sub prepare_functions {
|
Line 1550 sub prepare_functions {
|
$suppanchor = $env{'form.anchor'}; |
$suppanchor = $env{'form.anchor'}; |
} |
} |
my $esc_path=&escape(&HTML::Entities::encode(&escape($env{'form.folderpath'}),'<>&"')); |
my $esc_path=&escape(&HTML::Entities::encode(&escape($env{'form.folderpath'}),'<>&"')); |
|
my $link = '/adm/coursedocs?command=direct&forcesupplement=1&supppath='. |
|
"$esc_path&anchor=$suppanchor"; |
|
if ($env{'request.use_absolute'} ne '') { |
|
$link = $env{'request.use_absolute'}.$link; |
|
} |
&switch('','',7,4,'docs-22x22.png','Edit Folder','parms[_2]', |
&switch('','',7,4,'docs-22x22.png','Edit Folder','parms[_2]', |
"location.href='/adm/coursedocs?command=direct&forcesupplement=1&supppath=$esc_path&anchor=$suppanchor'", |
"location.href='$link'",'Folder/Page Content'); |
'Folder/Page Content'); |
|
} |
} |
} |
} |
} |
} |
Line 1228 sub prepare_functions {
|
Line 1567 sub prepare_functions {
|
&advtools_crumbs(@inlineremote); |
&advtools_crumbs(@inlineremote); |
return $editbutton; |
return $editbutton; |
} elsif ($env{'request.registered'}) { |
} elsif ($env{'request.registered'}) { |
return $editbutton; |
return $editbutton || $viewsrcbutton; |
} else { |
} else { |
if (ref($bread_crumbs) eq 'ARRAY') { |
if (ref($bread_crumbs) eq 'ARRAY') { |
if (@inlineremote > 0) { |
if (@inlineremote > 0) { |
Line 1253 sub advtools_crumbs {
|
Line 1592 sub advtools_crumbs {
|
&Apache::lonhtmlcommon::add_breadcrumb_tool( |
&Apache::lonhtmlcommon::add_breadcrumb_tool( |
'advtools', @funcs[61,64,65,66,67,74]); |
'advtools', @funcs[61,64,65,66,67,74]); |
} elsif ($env{'request.noversionuri'} !~ m{^/adm/(navmaps|viewclasslist)(\?|$)}) { |
} elsif ($env{'request.noversionuri'} !~ m{^/adm/(navmaps|viewclasslist)(\?|$)}) { |
&Apache::lonhtmlcommon::add_breadcrumb_tool( |
if ($env{'request.state'} eq 'construct') { |
'advtools', @funcs[61,71,72,73,74,92]); |
&Apache::lonhtmlcommon::add_breadcrumb_tool( |
|
'advtools', @funcs[61,73,74,71,72]); |
|
} else { |
|
&Apache::lonhtmlcommon::add_breadcrumb_tool( |
|
'advtools', @funcs[61,71,72,73,74,92]); |
|
} |
} elsif ($env{'request.noversionuri'} eq '/adm/viewclasslist') { |
} elsif ($env{'request.noversionuri'} eq '/adm/viewclasslist') { |
&Apache::lonhtmlcommon::add_breadcrumb_tool( |
&Apache::lonhtmlcommon::add_breadcrumb_tool( |
'advtools', $funcs[61]); |
'advtools', $funcs[61]); |
Line 1318 sub switch {
|
Line 1662 sub switch {
|
unless ($env{'request.state'} eq 'construct') { |
unless ($env{'request.state'} eq 'construct') { |
push(@tools,63); |
push(@tools,63); |
} |
} |
if (($env{'environment.icons'} eq 'iconsonly') && |
if ((($env{'environment.icons'} eq 'iconsonly') || |
|
($env{'environment.icons'} eq '') && ($env{'request.lti.login'})) && |
(grep(/^$idx$/,@tools))) { |
(grep(/^$idx$/,@tools))) { |
$inlineremote[$idx] = |
$inlineremote[$idx] = |
'<a title="'.$desc.'" class="LC_menubuttons_link" href="javascript:'.$act.';">'.$pic.'</a>'; |
'<a title="'.$desc.'" class="LC_menubuttons_link" href="javascript:'.$act.';">'.$pic.'</a>'; |
Line 1669 sub done_button_js {
|
Line 2014 sub done_button_js {
|
key => 'Key:', |
key => 'Key:', |
nokey => 'A proctor key is required', |
nokey => 'A proctor key is required', |
); |
); |
|
my $shownsymb = &HTML::Entities::encode(&Apache::lonenc::check_encrypt($env{'request.symb'})); |
my $navmap = Apache::lonnavmaps::navmap->new(); |
my $navmap = Apache::lonnavmaps::navmap->new(); |
my ($missing,$tried) = (0,0); |
my ($missing,$tried) = (0,0); |
if (ref($navmap)) { |
if (ref($navmap)) { |
my @resources=(); |
my @resources=(); |
if ($type eq 'map') { |
if ($type eq 'map') { |
my ($mapurl,$rid,$resurl)=&Apache::lonnet::decode_symb($env{'request.symb'}); |
my ($mapurl,$rid,$resurl)=&Apache::lonnet::decode_symb($env{'request.symb'}); |
@resources=$navmap->retrieveResources($mapurl,sub { $_[0]->is_problem() }); |
if ($env{'request.symb'} =~ /\.page$/) { |
|
@resources=$navmap->retrieveResources($resurl,sub { $_[0]->is_problem() }); |
|
} else { |
|
@resources=$navmap->retrieveResources($mapurl,sub { $_[0]->is_problem() }); |
|
} |
} else { |
} else { |
my $res = $navmap->getBySymb($env{'request.symb'}); |
my $res = $navmap->getBySymb($env{'request.symb'}); |
if (ref($res)) { |
if (ref($res)) { |
Line 1727 sub done_button_js {
|
Line 2077 sub done_button_js {
|
<form method="post" name="LCdoneButton" action=""> |
<form method="post" name="LCdoneButton" action=""> |
<input type="hidden" name="LC_interval_done" value="" /> |
<input type="hidden" name="LC_interval_done" value="" /> |
<input type="hidden" name="LC_interval_done_proctorpass" value="" /> |
<input type="hidden" name="LC_interval_done_proctorpass" value="" /> |
|
<input type="hidden" name="symb" value="$shownsymb" /> |
<button id="LC_done-confirm-opener" type="button">$donebuttontext</button> |
<button id="LC_done-confirm-opener" type="button">$donebuttontext</button> |
</form> |
</form> |
|
|
Line 1808 END
|
Line 2159 END
|
|
|
<form method="post" name="LCdoneButton" action=""> |
<form method="post" name="LCdoneButton" action=""> |
<input type="hidden" name="LC_interval_done" value="" /> |
<input type="hidden" name="LC_interval_done" value="" /> |
|
<input type="hidden" name="symb" value="$shownsymb" /> |
<button id="LC_done-confirm-opener" type="button">$donebuttontext</button> |
<button id="LC_done-confirm-opener" type="button">$donebuttontext</button> |
</form> |
</form> |
|
|
Line 1853 END
|
Line 2205 END
|
sub utilityfunctions { |
sub utilityfunctions { |
my ($httphost) = @_; |
my ($httphost) = @_; |
my $currenturl=&Apache::lonnet::clutter(&Apache::lonnet::fixversion((split(/\?/,$env{'request.noversionuri'}))[0])); |
my $currenturl=&Apache::lonnet::clutter(&Apache::lonnet::fixversion((split(/\?/,$env{'request.noversionuri'}))[0])); |
if ($currenturl =~ m{^/adm/wrapper/ext/} |
my $currentsymb=&Apache::lonenc::check_encrypt($env{'request.symb'}); |
&& $env{'request.external.querystring'} ) { |
if ($currenturl =~ m{^/adm/wrapper/ext/}) { |
|
if ($env{'request.external.querystring'}) { |
$currenturl .= ($currenturl=~/\?/)?'&':'?'.$env{'request.external.querystring'}; |
$currenturl .= ($currenturl=~/\?/)?'&':'?'.$env{'request.external.querystring'}; |
|
} |
|
my ($anchor) = ($env{'request.symb'} =~ /(\#[^\#]+)$/); |
|
if (($anchor) && ($currenturl !~ /\Q$anchor\E$/)) { |
|
$currenturl .= $1; |
|
} |
} |
} |
$currenturl=&Apache::lonenc::check_encrypt(&unescape($currenturl)); |
$currenturl=&Apache::lonenc::check_encrypt(&unescape($currenturl)); |
|
|
my $currentsymb=&Apache::lonenc::check_encrypt($env{'request.symb'}); |
|
|
|
my $dc_popup_cid; |
my $dc_popup_cid; |
if ($env{'user.adv'} && exists($env{'user.role.dc./'. |
if ($env{'user.adv'} && exists($env{'user.role.dc./'. |
Line 1883 sub utilityfunctions {
|
Line 2239 sub utilityfunctions {
|
|
|
my $esc_url=&escape($currenturl); |
my $esc_url=&escape($currenturl); |
my $esc_symb=&escape($currentsymb); |
my $esc_symb=&escape($currentsymb); |
|
my $newname = &mt('New Name'); |
|
|
my $countdown = &countdown_toggle_js(); |
my $countdown = &countdown_toggle_js(); |
|
|
|
my ($ltitarget,$deeplinktarget); |
|
if ($env{'request.lti.login'}) { |
|
$ltitarget = $env{'request.lti.target'}; |
|
} |
|
if ($env{'request.deeplink.login'}) { |
|
$deeplinktarget = $env{'request.deeplink.target'}; |
|
} |
|
|
|
my $annotateurl = '/adm/annotation'; |
|
if ($httphost) { |
|
$annotateurl = '/adm/annotations'; |
|
} |
my $hostvar = ' |
my $hostvar = ' |
function setLCHost() { |
function setLCHost() { |
var lcHostname=""; |
var lcHostname=""; |
Line 1944 function gocstr(url,filename) {
|
Line 2313 function gocstr(url,filename) {
|
this.document.cstrdelete.submit(); |
this.document.cstrdelete.submit(); |
return; |
return; |
} |
} |
|
if ((url == '/adm/cfile?action=copy') || (url == '/adm/cfile?action=rename')) { |
|
this.document.cstrcopy.filename.value = filename; |
|
var oldname = filename.substring(filename.lastIndexOf("/") + 1); |
|
var newname=prompt('$newname',oldname); |
|
if (newname == "" || !newname || newname == oldname) { |
|
return; |
|
} |
|
if (url == '/adm/cfile?action=rename') { |
|
this.document.cstrcopy.action.value = 'rename'; |
|
} else { |
|
this.document.cstrcopy.action.value = 'copy'; |
|
} |
|
this.document.cstrcopy.newfilename.value = newname; |
|
this.document.cstrcopy.submit(); |
|
return; |
|
} |
if (url == '/adm/printout') { |
if (url == '/adm/printout') { |
this.document.cstrprint.postdata.value = filename |
this.document.cstrprint.postdata.value = filename |
this.document.cstrprint.curseed.value = 0; |
this.document.cstrprint.curseed.value = 0; |
Line 1982 function golist(url) {
|
Line 2367 function golist(url) {
|
currentURL = null; |
currentURL = null; |
currentSymb= null; |
currentSymb= null; |
var lcHostname = setLCHost(); |
var lcHostname = setLCHost(); |
top.location.href=lcHostname+url; |
var ltitarget = '$ltitarget'; |
|
var deeplinktarget = '$deeplinktarget'; |
|
if ((ltitarget == 'iframe') || (deeplinktarget == '_self')) { |
|
document.location.href=lcHostname+url; |
|
} else { |
|
top.location.href=lcHostname+url; |
|
} |
} |
} |
} |
} |
|
|
|
|
|
|
function catalog_info(isMobile) { |
function catalog_info(url,isMobile) { |
if (isMobile == 1) { |
if (isMobile == 1) { |
openMyModal(window.location.pathname+'.meta?modal=1',500,400,'yes'); |
openMyModal(url+'.meta?modal=1',500,400,'yes'); |
} else { |
} else { |
loncatinfo=window.open(window.location.pathname+'.meta',"LONcatInfo",'height=500,width=400,resizable=yes,scrollbars=yes,location=no,menubar=no,toolbar=no'); |
loncatinfo=window.open(url+'.meta',"LONcatInfo",'height=500,width=400,resizable=yes,scrollbars=yes,location=no,menubar=no,toolbar=no'); |
} |
} |
} |
} |
|
|
Line 2014 function annotate() {
|
Line 2405 function annotate() {
|
annotator.document.write( |
annotator.document.write( |
'$start_page_annotate' |
'$start_page_annotate' |
+"<form name='goannotate' target='Annotator' method='post' " |
+"<form name='goannotate' target='Annotator' method='post' " |
+"action='/adm/annotations'>" |
+"action='$annotateurl'>" |
+"<input type='hidden' name='symbnew' value='"+currentSymb+"' />" |
+"<input type='hidden' name='symbnew' value='"+currentSymb+"' />" |
+"<\\/form>" |
+"<\\/form>" |
+'$end_page_annotate'); |
+'$end_page_annotate'); |
Line 2035 function open_StoredLinks_Import(rat) {
|
Line 2426 function open_StoredLinks_Import(rat) {
|
newWin.focus(); |
newWin.focus(); |
} |
} |
|
|
|
function open_source() { |
|
sourcewin=window.open('/adm/source?inhibitmenu=yes&viewonly=1&filename='+currentURL,'LONsource', |
|
'height=500,width=600,resizable=yes,location=no,menubar=no,toolbar=no,scrollbars=yes'); |
|
} |
|
|
|
function open_aboutLC() { |
|
var isMobile = "$env{'browser.mobile'}"; |
|
var url = '/adm/about.html'; |
|
if (isMobile == 1) { |
|
openMyModal(url,600,400,'yes'); |
|
} else { |
|
window.open(url,"aboutLONCAPA","height=400,width=600,scrollbars=1,resizable=1,menubar=0,location=1"); |
|
} |
|
return; |
|
} |
|
|
|
|
(function (\$) { |
(function (\$) { |
\$(document).ready(function () { |
\$(document).ready(function () { |
\$.single=function(a){return function(b){a[0]=b;return a}}(\$([1])); |
\$.single=function(a){return function(b){a[0]=b;return a}}(\$([1])); |
Line 2055 ENDUTILITY
|
Line 2463 ENDUTILITY
|
} |
} |
|
|
sub serverform { |
sub serverform { |
|
my $target; |
|
unless (($env{'request.lti.login'}) && ($env{'request.lti.target'} eq 'iframe')) { |
|
$target = ' target="_top"'; |
|
} |
|
if (($env{'request.deeplink.login'}) && ($env{'request.deeplink.target'} eq '_self')) { |
|
$target = ' target="_self"'; |
|
} |
return(<<ENDSERVERFORM); |
return(<<ENDSERVERFORM); |
<form name="server" action="/adm/logout" method="post" target="_top"> |
<form name="server" action="/adm/logout" method="post"$target> |
<input type="hidden" name="postdata" value="none" /> |
<input type="hidden" name="postdata" value="none" /> |
<input type="hidden" name="command" value="none" /> |
<input type="hidden" name="command" value="none" /> |
<input type="hidden" name="url" value="none" /> |
<input type="hidden" name="url" value="none" /> |
Line 2066 ENDSERVERFORM
|
Line 2481 ENDSERVERFORM
|
} |
} |
|
|
sub constspaceform { |
sub constspaceform { |
|
my ($frameset) = @_; |
|
my ($target,$printtarget); |
|
if ($frameset) { |
|
$target = ' target="_parent"'; |
|
$printtarget = ' target="_parent"'; |
|
} else { |
|
unless ((($env{'request.lti.login'}) && ($env{'request.lti.target'} eq 'iframe')) || |
|
(($env{'request.deeplink.login'}) && ($env{'request.deeplink.target'} eq '_self'))) { |
|
$target = ' target="_top"'; |
|
$printtarget = ' target="_parent"'; |
|
} |
|
} |
return(<<ENDCONSTSPACEFORM); |
return(<<ENDCONSTSPACEFORM); |
<form name="constspace" action="/adm/logout" method="post" target="_top"> |
<form name="constspace" action="/adm/logout" method="post"$target> |
<input type="hidden" name="filename" value="" /> |
<input type="hidden" name="filename" value="" /> |
</form> |
</form> |
<form name="cstrdelete" action="/adm/cfile" method="post" target="_top"> |
<form name="cstrdelete" action="/adm/cfile" method="post"$target> |
<input type="hidden" name="action" value="delete" /> |
<input type="hidden" name="action" value="delete" /> |
<input type="hidden" name="filename" value="" /> |
<input type="hidden" name="filename" value="" /> |
</form> |
</form> |
<form name="cstrprint" action="/adm/printout" target="_parent" method="post"> |
<form name="cstrprint" action="/adm/printout" method="post"$printtarget> |
<input type="hidden" name="postdata" value="" /> |
<input type="hidden" name="postdata" value="" /> |
<input type="hidden" name="curseed" value="" /> |
<input type="hidden" name="curseed" value="" /> |
<input type="hidden" name="problemtype" value="" /> |
<input type="hidden" name="problemtype" value="" /> |
</form> |
</form> |
|
<form name="cstrcopy" action="/adm/cfile" method="post"$target> |
|
<input type="hidden" name="action" value="copy" /> |
|
<input type="hidden" name="filename" value="" /> |
|
<input type="hidden" name="newfilename" value="" /> |
|
</form> |
|
|
ENDCONSTSPACEFORM |
ENDCONSTSPACEFORM |
} |
} |
Line 2097 sub roles_selector {
|
Line 2529 sub roles_selector {
|
my ($cdom,$cnum,$httphost) = @_; |
my ($cdom,$cnum,$httphost) = @_; |
my $crstype = &Apache::loncommon::course_type(); |
my $crstype = &Apache::loncommon::course_type(); |
my $now = time; |
my $now = time; |
my (%courseroles,%seccount,%courseprivs); |
my (%courseroles,%seccount,%courseprivs,%roledesc); |
my $is_cc; |
my $is_cc; |
my ($js,$form,$switcher); |
my ($js,$form,$switcher,$has_opa_priv); |
my $ccrole; |
my $ccrole; |
if ($crstype eq 'Community') { |
if ($crstype eq 'Community') { |
$ccrole = 'co'; |
$ccrole = 'co'; |
Line 2108 sub roles_selector {
|
Line 2540 sub roles_selector {
|
} |
} |
my ($privref,$gotsymb,$destsymb); |
my ($privref,$gotsymb,$destsymb); |
my $destinationurl = $ENV{'REQUEST_URI'}; |
my $destinationurl = $ENV{'REQUEST_URI'}; |
if ($destinationurl =~ /\?symb=/) { |
if ($destinationurl =~ /(\?|\&)symb=/) { |
$gotsymb = 1; |
$gotsymb = 1; |
} elsif ($destinationurl =~ m{^/enc/}) { |
} elsif ($destinationurl =~ m{^/enc/}) { |
my $plainurl = &Apache::lonenc::unencrypted($destinationurl); |
my $plainurl = &Apache::lonenc::unencrypted($destinationurl); |
if ($plainurl =~ /\?symb=/) { |
if ($plainurl =~ /(\?|\&)symb=/) { |
$gotsymb = 1; |
$gotsymb = 1; |
} |
} |
} |
} |
Line 2147 sub roles_selector {
|
Line 2579 sub roles_selector {
|
if ($is_cc) { |
if ($is_cc) { |
&get_all_courseroles($cdom,$cnum,\%courseroles,\%seccount,\%courseprivs); |
&get_all_courseroles($cdom,$cnum,\%courseroles,\%seccount,\%courseprivs); |
} elsif ($env{'request.role'} =~ m{^\Qcr/$cdom/$cdom-domainconfig/\E(\w+)\.\Q/$cdom/$cnum\E}) { |
} elsif ($env{'request.role'} =~ m{^\Qcr/$cdom/$cdom-domainconfig/\E(\w+)\.\Q/$cdom/$cnum\E}) { |
&get_customadhoc_roles($cdom,$cnum,\%courseroles,\%seccount,\%courseprivs,$privref); |
&get_customadhoc_roles($cdom,$cnum,\%courseroles,\%seccount,\%courseprivs,\%roledesc,$privref); |
} else { |
} else { |
my %gotnosection; |
my %gotnosection; |
foreach my $item (keys(%env)) { |
foreach my $item (keys(%env)) { |
Line 2201 sub roles_selector {
|
Line 2633 sub roles_selector {
|
} |
} |
if ((keys(%seccount) > 1) || ($numdiffsec > 1)) { |
if ((keys(%seccount) > 1) || ($numdiffsec > 1)) { |
my @submenu; |
my @submenu; |
$js = &jump_to_role($cdom,$cnum,\%seccount,\%courseroles,\%courseprivs,$privref); |
$js = &jump_to_role($cdom,$cnum,\%seccount,\%courseroles,\%courseprivs,\%roledesc,$privref); |
$form = |
$form = |
'<form name="rolechooser" method="post" action="'.$httphost.'/adm/roles">'."\n". |
'<form name="rolechooser" method="post" action="'.$httphost.'/adm/roles">'."\n". |
' <input type="hidden" name="destinationurl" value="'. |
' <input type="hidden" name="destinationurl" value="'. |
Line 2220 sub roles_selector {
|
Line 2652 sub roles_selector {
|
if ($env{'request.role'} =~ m{^\Q$role\E}) { |
if ($env{'request.role'} =~ m{^\Q$role\E}) { |
if ($seccount{$role} > 1) { |
if ($seccount{$role} > 1) { |
$include = 1; |
$include = 1; |
|
} else { |
|
if ($env{'user.priv.'.$env{'request.role'}."./$cdom/$cnum"} =~/opa\&([^\:]*)/) { |
|
$has_opa_priv = 1; |
|
} |
} |
} |
} else { |
} else { |
$include = 1; |
$include = 1; |
} |
} |
} |
} |
if ($include) { |
if ($include) { |
|
if ($env{"user.priv.$role./$cdom/$cnum./$cdom/$cnum"} =~/opa\&([^\:]*)/) { |
|
$has_opa_priv = 1; |
|
} |
push(@submenu,['javascript:adhocRole('."'$role'".')', |
push(@submenu,['javascript:adhocRole('."'$role'".')', |
&Apache::lonnet::plaintext($role,$crstype)]); |
&Apache::lonnet::plaintext($role,$crstype)]); |
} |
} |
Line 2243 sub roles_selector {
|
Line 2682 sub roles_selector {
|
if ($include) { |
if ($include) { |
my $rolename; |
my $rolename; |
if ($role =~ m{^cr/$cdom/$cdom\-domainconfig/(\w+)(?:/\w+|$)}) { |
if ($role =~ m{^cr/$cdom/$cdom\-domainconfig/(\w+)(?:/\w+|$)}) { |
$rolename = &mt('Helpdesk [_1]',$1); |
$rolename = $roledesc{$role}; |
|
if ($rolename eq '') { |
|
$rolename = &mt('Helpdesk [_1]',$1); |
|
} |
} else { |
} else { |
$rolename = &Apache::lonnet::plaintext($role); |
$rolename = &Apache::lonnet::plaintext($role); |
} |
} |
|
if ($env{"user.priv.$role./$cdom/$cnum./$cdom/$cnum"} =~/opa\&([^\:]*)/) { |
|
$has_opa_priv = 1; |
|
} |
push(@submenu,['javascript:adhocRole('."'$role'".')', |
push(@submenu,['javascript:adhocRole('."'$role'".')', |
$rolename]); |
$rolename]); |
} |
} |
Line 2256 sub roles_selector {
|
Line 2701 sub roles_selector {
|
$switcher = &create_submenu('','',&mt('Switch role'),\@submenu); |
$switcher = &create_submenu('','',&mt('Switch role'),\@submenu); |
} |
} |
} |
} |
return ($js,$form,$switcher); |
return ($js,$form,$switcher,$has_opa_priv); |
} |
} |
|
|
sub get_all_courseroles { |
sub get_all_courseroles { |
Line 2330 sub get_all_courseroles {
|
Line 2775 sub get_all_courseroles {
|
} |
} |
|
|
sub get_customadhoc_roles { |
sub get_customadhoc_roles { |
my ($cdom,$cnum,$courseroles,$seccount,$courseprivs,$privref) = @_; |
my ($cdom,$cnum,$courseroles,$seccount,$courseprivs,$roledesc,$privref) = @_; |
unless ((ref($courseroles) eq 'HASH') && (ref($seccount) eq 'HASH') && |
unless ((ref($courseroles) eq 'HASH') && (ref($seccount) eq 'HASH') && |
(ref($courseprivs) eq 'HASH')) { |
(ref($courseprivs) eq 'HASH') && (ref($roledesc) eq 'HASH')) { |
return; |
return; |
} |
} |
if ($env{'environment.adhocroles.'.$cdom} ne '') { |
my $is_helpdesk = 0; |
my @customroles = split(/,/,$env{'environment.adhocroles.'.$cdom}); |
my $now = time; |
if (@customroles > 1) { |
foreach my $role ('dh','da') { |
if ($env{"user.role.dh./$cdom/"}) { |
if ($env{"user.role.$role./$cdom/"}) { |
my ($start,$end)=split(/\./,$env{"user.role.dh./$cdom/"}); |
my ($start,$end)=split(/\./,$env{"user.role.$role./$cdom/"}); |
my $now = time; |
if (!($start && ($now<$start)) && !($end && ($now>$end))) { |
if (!($start && ($now<$start)) & !($end && ($now>$end))) { |
$is_helpdesk = 1; |
my $numsec = 1; |
last; |
my @sections; |
} |
my ($allseclist,$cached) = |
} |
&Apache::lonnet::is_cached_new('courseseclist',$cdom.'_'.$cnum); |
} |
if (defined($cached)) { |
if ($is_helpdesk) { |
if ($allseclist ne '') { |
my ($possroles,$description) = &Apache::lonnet::get_my_adhocroles($cdom.'_'.$cnum); |
@sections = split(/,/,$allseclist); |
my %available; |
$numsec += scalar(@sections); |
if (ref($possroles) eq 'ARRAY') { |
} |
map { $available{$_} = 1; } @{$possroles}; |
} else { |
} |
my %sections_count = &Apache::loncommon::get_sections($cdom,$cnum); |
my %domdefaults = &Apache::lonnet::get_domain_defaults($cdom); |
$numsec += scalar(keys(%sections_count)); |
if (ref($domdefaults{'adhocroles'}) eq 'HASH') { |
$allseclist = join(',',sort(keys(%sections_count))); |
if (keys(%{$domdefaults{'adhocroles'}})) { |
&Apache::lonnet::do_cache_new('courseseclist',$cdom.'_'.$cnum,$allseclist); |
my $numsec = 1; |
} |
my @sections; |
my (%adhoc,$gotprivs); |
my ($allseclist,$cached) = |
my $prefix = "cr/$cdom/$cdom".'-domainconfig'; |
&Apache::lonnet::is_cached_new('courseseclist',$cdom.'_'.$cnum); |
foreach my $role (@customroles) { |
if (defined($cached)) { |
next if (($role eq '') || ($role =~ /\W/)); |
if ($allseclist ne '') { |
$seccount->{"$prefix/$role"} = $numsec; |
@sections = split(/,/,$allseclist); |
$courseroles->{"$prefix/$role"} = \@sections; |
$numsec += scalar(@sections); |
if ((ref($privref) eq 'ARRAY') && (@{$privref} > 0)) { |
} |
if (exists($env{"user.priv.$prefix/$role./$cdom/$cnum./"})) { |
} else { |
$courseprivs->{"$prefix/$role./$cdom/$cnum./"} = |
my %sections_count = &Apache::loncommon::get_sections($cdom,$cnum); |
$env{"user.priv.$prefix/$role./$cdom/$cnum./"}; |
@sections = sort(keys(%sections_count)); |
$courseprivs->{"$prefix/$role./$cdom/$cnum./$cdom/"} = |
$numsec += scalar(@sections); |
$env{"user.priv.$prefix/$role./$cdom/$cnum./$cdom/"}; |
$allseclist = join(',',@sections); |
$courseprivs->{"$prefix/$role./$cdom/$cnum./$cdom/$cnum"} = |
&Apache::lonnet::do_cache_new('courseseclist',$cdom.'_'.$cnum,$allseclist); |
$env{"user.priv.$prefix/$role./$cdom/$cnum./$cdom/$cnum"}; |
} |
} else { |
my (%adhoc,$gotprivs); |
unless ($gotprivs) { |
my $prefix = "cr/$cdom/$cdom".'-domainconfig'; |
my ($adhocroles,$privscached) = |
foreach my $role (keys(%{$domdefaults{'adhocroles'}})) { |
&Apache::lonnet::is_cached_new('adhocroles',$cdom); |
next if (($role eq '') || ($role =~ /\W/)); |
if ((defined($privscached)) && (ref($adhocroles) eq 'HASH')) { |
$seccount->{"$prefix/$role"} = $numsec; |
%adhoc = %{$adhocroles}; |
$roledesc->{"$prefix/$role"} = $description->{$role}; |
} else { |
if ((ref($privref) eq 'ARRAY') && (@{$privref} > 0)) { |
my $confname = &Apache::lonnet::get_domainconfiguser($cdom); |
if (exists($env{"user.priv.$prefix/$role./$cdom/$cnum./"})) { |
my %roledefs = &Apache::lonnet::dump('roles',$cdom,$confname,'rolesdef_'); |
$courseprivs->{"$prefix/$role./$cdom/$cnum./"} = |
foreach my $key (keys(%roledefs)) { |
$env{"user.priv.$prefix/$role./$cdom/$cnum./"}; |
(undef,my $rolename) = split(/_/,$key); |
$courseprivs->{"$prefix/$role./$cdom/$cnum./$cdom/"} = |
if ($rolename ne '') { |
$env{"user.priv.$prefix/$role./$cdom/$cnum./$cdom/"}; |
$adhoc{$rolename} = $roledefs{$key}; |
$courseprivs->{"$prefix/$role./$cdom/$cnum./$cdom/$cnum"} = |
} |
$env{"user.priv.$prefix/$role./$cdom/$cnum./$cdom/$cnum"}; |
|
} else { |
|
unless ($gotprivs) { |
|
my ($adhocroles,$privscached) = |
|
&Apache::lonnet::is_cached_new('adhocroles',$cdom); |
|
if ((defined($privscached)) && (ref($adhocroles) eq 'HASH')) { |
|
%adhoc = %{$adhocroles}; |
|
} else { |
|
my $confname = &Apache::lonnet::get_domainconfiguser($cdom); |
|
my %roledefs = &Apache::lonnet::dump('roles',$cdom,$confname,'rolesdef_'); |
|
foreach my $key (keys(%roledefs)) { |
|
(undef,my $rolename) = split(/_/,$key); |
|
if ($rolename ne '') { |
|
my ($systempriv,$domainpriv,$coursepriv) = split(/\_/,$roledefs{$key}); |
|
$coursepriv = &Apache::lonnet::course_adhocrole_privs($rolename,$cdom,$cnum,$coursepriv); |
|
$adhoc{$rolename} = join('_',($systempriv,$domainpriv,$coursepriv)); |
} |
} |
&Apache::lonnet::do_cache_new('adhocroles',$cdom,\%adhoc); |
|
} |
} |
$gotprivs = 1; |
&Apache::lonnet::do_cache_new('adhocroles',$cdom,\%adhoc); |
} |
} |
($courseprivs->{"$prefix/$role./$cdom/$cnum./"}, |
$gotprivs = 1; |
$courseprivs->{"$prefix/$role./$cdom/$cnum./$cdom/"}, |
|
$courseprivs->{"$prefix/$role./$cdom/$cnum./$cdom/$cnum"}) = |
|
split(/\_/,$adhoc{$role}); |
|
} |
} |
|
($courseprivs->{"$prefix/$role./$cdom/$cnum./"}, |
|
$courseprivs->{"$prefix/$role./$cdom/$cnum./$cdom/"}, |
|
$courseprivs->{"$prefix/$role./$cdom/$cnum./$cdom/$cnum"}) = |
|
split(/\_/,$adhoc{$role}); |
} |
} |
} |
} |
|
if ($available{$role}) { |
|
$courseroles->{"$prefix/$role"} = \@sections; |
|
} |
} |
} |
} |
} |
} |
} |
Line 2405 sub get_customadhoc_roles {
|
Line 2868 sub get_customadhoc_roles {
|
} |
} |
|
|
sub jump_to_role { |
sub jump_to_role { |
my ($cdom,$cnum,$seccount,$courseroles,$courseprivs,$privref) = @_; |
my ($cdom,$cnum,$seccount,$courseroles,$courseprivs,$roledesc,$privref) = @_; |
my %lt = &Apache::lonlocal::texthash( |
my %lt = &Apache::lonlocal::texthash( |
this => 'This role has section(s) associated with it.', |
this => 'This role has section(s) associated with it.', |
ente => 'Enter a specific section.', |
ente => 'Enter a specific section.', |
Line 2573 sub required_privs {
|
Line 3036 sub required_privs {
|
|
|
sub countdown_timer { |
sub countdown_timer { |
if (($env{'request.course.id'}) && ($env{'request.symb'} ne '') && |
if (($env{'request.course.id'}) && ($env{'request.symb'} ne '') && |
($env{'request.filename'}=~/$LONCAPA::assess_re/)) { |
(($env{'request.filename'}=~/$LONCAPA::assess_re/) || |
|
(($env{'request.symb'} =~ /ext\.tool$/) && |
|
(&Apache::lonnet::EXT('resource.0.gradable',$env{'request.symb'}) =~ /^yes$/i)))) { |
my ($type,$hastimeleft,$slothastime); |
my ($type,$hastimeleft,$slothastime); |
my $now = time; |
my $now = time; |
if ($env{'request.filename'} =~ /\.task$/) { |
if ($env{'request.filename'} =~ /\.task$/) { |
$type = 'Task'; |
$type = 'Task'; |
|
} elsif ($env{'request.symb'} =~ /ext\.tool$/) { |
|
$type = 'tool'; |
} else { |
} else { |
$type = 'problem'; |
$type = 'problem'; |
} |
} |
my ($status,$accessmsg,$slot_name,$slot) = |
my ($status,$accessmsg,$slot_name,$slot); |
&Apache::lonhomework::check_slot_access('0',$type); |
if ($type eq 'tool') { |
|
($status,$accessmsg,$slot_name,$slot) = |
|
&Apache::lonhomework::check_slot_access('0',$type,$env{'request.symb'},['0']); |
|
} else { |
|
($status,$accessmsg,$slot_name,$slot) = |
|
&Apache::lonhomework::check_slot_access('0',$type); |
|
} |
if ($slot_name ne '') { |
if ($slot_name ne '') { |
if (ref($slot) eq 'HASH') { |
if (ref($slot) eq 'HASH') { |
if (($slot->{'starttime'} < $now) && |
if (($slot->{'starttime'} < $now) && |
Line 2676 BEGIN {
|
Line 3149 BEGIN {
|
$category_positions{$entries[2]}=$entries[1]; |
$category_positions{$entries[2]}=$entries[1]; |
$category_names{$entries[2]}=$entries[3]; |
$category_names{$entries[2]}=$entries[3]; |
} elsif ($configline=~/^prim\:/) { |
} elsif ($configline=~/^prim\:/) { |
my @entries = (split(/\:/, $configline))[1..6]; |
my @entries = (split(/\:/, $configline))[1..7]; |
push(@primary_menu,\@entries); |
push(@primary_menu,\@entries); |
} elsif ($configline=~/^primsub\:/) { |
} elsif ($configline=~/^primsub\:/) { |
my ($parent,@entries) = (split(/\:/, $configline))[1..4]; |
my ($parent,@entries) = (split(/\:/, $configline))[1..5]; |
push(@{$primary_submenu{$parent}},\@entries); |
push(@{$primary_submenu{$parent}},\@entries); |
} elsif ($configline=~/^scnd\:/) { |
} elsif ($configline=~/^scnd\:/) { |
my @entries = (split(/\:/, $configline))[1..5]; |
my @entries = (split(/\:/, $configline))[1..6]; |
push(@secondary_menu,\@entries); |
push(@secondary_menu,\@entries); |
|
} elsif ($configline=~/^scndsub\:/) { |
|
my ($parent,@entries) = (split(/\:/, $configline))[1..4]; |
|
push(@{$secondary_submenu{$parent}},\@entries); |
} elsif ($configline) { |
} elsif ($configline) { |
push(@desklines,$configline); |
push(@desklines,$configline); |
} |
} |