version 1.397, 2012/12/06 21:43:27
|
version 1.411, 2013/04/24 02:43:59
|
Line 248 sub primary_menu {
|
Line 248 sub primary_menu {
|
if (ref($primary_submenu{$title}) eq 'ARRAY') { |
if (ref($primary_submenu{$title}) eq 'ARRAY') { |
foreach my $item (@{$primary_submenu{$title}}) { |
foreach my $item (@{$primary_submenu{$title}}) { |
next if (($item->[2] eq 'wishlist') && (!$env{'user.adv'})); |
next if (($item->[2] eq 'wishlist') && (!$env{'user.adv'})); |
next if (($item->[2] eq 'reqcrs') && (!&check_for_rcrs())); |
|
next if ((($item->[2] eq 'portfolio') || |
next if ((($item->[2] eq 'portfolio') || |
($item->[2] eq 'blog')) && |
($item->[2] eq 'blog')) && |
(!&Apache::lonnet::usertools_access('','',$item->[2], |
(!&Apache::lonnet::usertools_access('','',$item->[2], |
Line 326 sub secondary_menu {
|
Line 325 sub secondary_menu {
|
my $canmgr = &Apache::lonnet::allowed('mgr', $crs_sec); |
my $canmgr = &Apache::lonnet::allowed('mgr', $crs_sec); |
my $author = &getauthor(); |
my $author = &getauthor(); |
|
|
|
my ($canmodifycoauthor); |
|
if ($env{'request.role'} eq "au./$env{'user.domain'}/") { |
|
my $extent = "$env{'user.domain'}/$env{'user.name'}"; |
|
if ((&Apache::lonnet::allowed('cca',$extent)) || |
|
(&Apache::lonnet::allowed('caa',$extent))) { |
|
$canmodifycoauthor = 1; |
|
} |
|
} |
|
|
my %groups = &Apache::lonnet::get_active_groups( |
my %groups = &Apache::lonnet::get_active_groups( |
$env{'user.domain'}, $env{'user.name'}, |
$env{'user.domain'}, $env{'user.name'}, |
$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'}); |
|
|
|
my ($roleswitcher_js,$roleswitcher_form); |
|
|
foreach my $menuitem (@secondary_menu) { |
foreach my $menuitem (@secondary_menu) { |
# evaluate conditions |
# evaluate conditions |
next if ref($menuitem) ne 'ARRAY'; |
next if ref($menuitem) ne 'ARRAY'; |
next if $$menuitem[4] ne 'always' |
next if $$menuitem[4] ne 'always' |
&& $$menuitem[4] ne 'author' |
&& ($$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] =~ /^mdc/ |
&& !$canedit; |
&& !$canedit; |
Line 360 sub secondary_menu {
|
Line 370 sub secondary_menu {
|
&& !%groups; |
&& !%groups; |
next if $$menuitem[4] eq 'author' |
next if $$menuitem[4] eq 'author' |
&& !$author; |
&& !$author; |
|
next if $$menuitem[4] eq 'cca' |
|
&& !$canmodifycoauthor; |
|
|
if ($$menuitem[3] eq 'Roles' && $env{'request.course.id'}) { |
if ($$menuitem[3] eq 'Roles' && $env{'request.course.id'}) { |
# special treatment for role selector |
# special treatment for role selector |
my $roles_selector = &roles_selector( |
($roleswitcher_js,$roleswitcher_form,my $switcher) = |
|
&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'} |
|
); |
$menu .= $roles_selector ? "<li>$roles_selector</li>" |
$menu .= $switcher; |
: ''; |
|
} else { |
} else { |
$menu .= &prep_menuitem(\@$menuitem); |
$menu .= &prep_menuitem(\@$menuitem); |
} |
} |
Line 396 sub secondary_menu {
|
Line 408 sub secondary_menu {
|
if ($menu) { |
if ($menu) { |
$menu = "<ul id=\"LC_secondary_menu\">$menu</ul>"; |
$menu = "<ul id=\"LC_secondary_menu\">$menu</ul>"; |
} |
} |
|
if ($roleswitcher_form) { |
|
$menu .= "\n$roleswitcher_js\n$roleswitcher_form"; |
|
} |
return $menu; |
return $menu; |
} |
} |
|
|
Line 487 sub innerregister {
|
Line 502 sub innerregister {
|
} |
} |
my $trail; |
my $trail; |
if ($env{'form.folderpath'}) { |
if ($env{'form.folderpath'}) { |
my $editbutton = |
&prepare_functions($resurl,$forcereg,$group,undef,undef,1); |
&prepare_functions($resurl,$forcereg,$group,undef,undef,1); |
|
($trail) = |
($trail) = |
&Apache::lonhtmlcommon::docs_breadcrumbs(undef,$crstype,undef,$title,1); |
&Apache::lonhtmlcommon::docs_breadcrumbs(undef,$crstype,undef,$title,1); |
} else { |
} else { |
Line 525 sub innerregister {
|
Line 539 sub innerregister {
|
$editbutton = &prepare_functions($resurl,$forcereg,$group); |
$editbutton = &prepare_functions($resurl,$forcereg,$group); |
} |
} |
if ($editbutton eq '') { |
if ($editbutton eq '') { |
&clear(6,1); |
$editbutton = &clear(6,1); |
} |
} |
|
|
# |
# |
Line 754 ENDMENUITEMS
|
Line 768 ENDMENUITEMS
|
|
|
sub get_editbutton { |
sub get_editbutton { |
my ($cfile,$home,$switchserver,$forceedit,$forceview,$forcereg) = @_; |
my ($cfile,$home,$switchserver,$forceedit,$forceview,$forcereg) = @_; |
my $jscall = |
my $jscall; |
&Apache::lonhtmlcommon::jump_to_editres($cfile,$home,$switchserver, |
if (($forceview) && ($env{'form.todocs'})) { |
|
my ($folderpath,$command); |
|
if ($env{'request.symb'}) { |
|
$folderpath = &Apache::loncommon::symb_to_docspath($env{'request.symb'}); |
|
} elsif ($env{'form.folderpath'} =~ /^supplemental/) { |
|
$folderpath = $env{'form.folderpath'}; |
|
$command = '&forcesupplement=1'; |
|
} |
|
$folderpath = &escape(&HTML::Entities::encode(&escape($folderpath),'<>&"')); |
|
$jscall = "go('/adm/coursedocs?folderpath=$folderpath$command')"; |
|
} else { |
|
$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'}),$env{'form.idx'}, |
&escape($env{'form.suppurl'})); |
&escape($env{'form.suppurl'},$env{'form.todocs'})); |
|
} |
if ($jscall) { |
if ($jscall) { |
my $icon = 'pcstr.png'; |
my $icon = 'pcstr.png'; |
my $label = 'Edit'; |
my $label = 'Edit'; |
Line 821 sub prepare_functions {
|
Line 847 sub prepare_functions {
|
# This applies in course context |
# This applies in course context |
# |
# |
if (($resurl eq "/public/$cdom/$cnum/syllabus") && ($perms{'mdc'})) { |
if (($resurl eq "/public/$cdom/$cnum/syllabus") && ($perms{'mdc'})) { |
if ($env{'course.'.$env{'request.course.id'}.'.externalsyllabus'} =~ /\w/) { |
$cfile = $resurl; |
&switch('','',6,1,'pcstr.png','Edit', |
$home = &Apache::lonnet::homeserver($cnum,$cdom); |
'resource[_2]', |
if ($env{'form.forceedit'}) { |
"go('/adm/courseprefs?phase=display&actions=courseinfo')", |
$forceview = 1; |
'Edit this resource'); |
|
$editbutton = 1; |
|
} else { |
} else { |
$cfile = $resurl; |
$forceedit = 1; |
$home = &Apache::lonnet::homeserver($cnum,$cdom); |
|
if ($env{'form.forceedit'}) { |
|
$forceview = 1; |
|
} else { |
|
$forceedit = 1; |
|
} |
|
$editbutton = &get_editbutton($cfile,$home,$switchserver, |
|
$forceedit,$forceview,$forcereg); |
|
} |
} |
|
$editbutton = &get_editbutton($cfile,$home,$switchserver, |
|
$forceedit,$forceview,$forcereg); |
} 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 848 sub prepare_functions {
|
Line 866 sub prepare_functions {
|
$forceedit,$forceview,$forcereg, |
$forceedit,$forceview,$forcereg, |
$env{'form.title'},$env{'form.suppurl'}); |
$env{'form.title'},$env{'form.suppurl'}); |
} |
} |
} elsif ($resurl !~ m{^adm/($match_domain)/($match_username)/aboutme$}) { |
} elsif (($resurl =~ m{^/?adm/viewclasslist$}) && |
|
(&Apache::lonnet::allowed('opa',$env{'request.course.id'}))) { |
|
($cfile,$home,$switchserver,$forceedit,$forceview) = |
|
&Apache::lonnet::can_edit_resource($resurl,$cnum,$cdom,$resurl, |
|
$env{'form.symb'}); |
|
$editbutton = &get_editbutton($cfile,$home,$switchserver, |
|
$forceedit,$forceview,$forcereg); |
|
} elsif (($resurl !~ m{^/?adm/($match_domain)/($match_username)/aboutme$}) && |
|
($resurl ne '/cgi-bin/printout.pl')) { |
if ($env{'request.filename'}) { |
if ($env{'request.filename'}) { |
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) = |
Line 902 sub prepare_functions {
|
Line 928 sub prepare_functions {
|
'Add records'); |
'Add records'); |
} |
} |
} |
} |
} elsif ($resurl =~ m{^/?adm/viewclasslist}) { |
|
# This applies to viewclasslist page for users in a course |
|
if (&Apache::lonnet::allowed('opa',$env{'request.course.id'})) { |
|
&switch('','',6,4,'pparm.png','Settings', |
|
'', |
|
"go('/adm/courseprefs?actions=classlists&phase=display')", |
|
'Student-viewable classlist options'); |
|
} |
|
} |
} |
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'})) && |
Line 963 sub advtools_crumbs {
|
Line 981 sub advtools_crumbs {
|
'advtools', @funcs[61,71,72,73,74,92]); |
'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[64]); |
'advtools', $funcs[61]); |
} |
} |
} |
} |
|
|
Line 1558 sub roles_selector {
|
Line 1576 sub roles_selector {
|
my $now = time; |
my $now = time; |
my (%courseroles,%seccount,%courseprivs); |
my (%courseroles,%seccount,%courseprivs); |
my $is_cc; |
my $is_cc; |
my $role_selector; |
my ($js,$form,$switcher,$switchtext); |
my $ccrole; |
my $ccrole; |
if ($crstype eq 'Community') { |
if ($crstype eq 'Community') { |
$ccrole = 'co'; |
$ccrole = 'co'; |
Line 1646 sub roles_selector {
|
Line 1664 sub roles_selector {
|
} |
} |
} |
} |
} |
} |
my $switchtext; |
$switchtext = &mt('Switch role'); |
if ($crstype eq 'Community') { |
|
$switchtext = &mt('Switch community role to...') |
|
} else { |
|
$switchtext = &mt('Switch course role to...') |
|
} |
|
my @roles_order = ($ccrole,'in','ta','ep','ad','st'); |
my @roles_order = ($ccrole,'in','ta','ep','ad','st'); |
if (keys(%courseroles) > 1) { |
my $numdiffsec; |
$role_selector = &jump_to_role($cdom,$cnum,\%seccount,\%courseroles,\%courseprivs,$priv); |
if (keys(%seccount) == 1) { |
$role_selector .= '<form name="rolechooser" method="post" action="/adm/roles"> |
foreach my $key (keys(%seccount)) { |
<select name="switchrole" onchange="javascript:adhocRole('."'switchrole'".')">'; |
$numdiffsec = $seccount{$key}; |
$role_selector .= '<option value="">'.$switchtext.'</option>'; |
} |
|
} |
|
if ((keys(%seccount) > 1) || ($numdiffsec > 1)) { |
|
my @submenu; |
|
$js = &jump_to_role($cdom,$cnum,\%seccount,\%courseroles,\%courseprivs,$priv); |
|
$form = |
|
'<form name="rolechooser" method="post" action="/adm/roles">'."\n". |
|
' <input type="hidden" name="destinationurl" value="'. |
|
&HTML::Entities::encode($destinationurl).'" />'."\n". |
|
' <input type="hidden" name="gotorole" value="1" />'."\n". |
|
' <input type="hidden" name="selectrole" value="" />'."\n". |
|
' <input type="hidden" name="switchrole" value="" />'."\n"; |
|
if ($destsymb ne '') { |
|
$form .= ' <input type="hidden" name="destsymb" value="'. |
|
&HTML::Entities::encode($destsymb).'" />'."\n"; |
|
} |
|
$form .= '</form>'."\n"; |
foreach my $role (@roles_order) { |
foreach my $role (@roles_order) { |
|
my $include; |
if (defined($courseroles{$role})) { |
if (defined($courseroles{$role})) { |
$role_selector .= "\n".'<option value="'.$role.'">'.&Apache::lonnet::plaintext($role,$crstype).'</option>'; |
if ($env{'request.role'} =~ m{^\Q$role\E}) { |
|
if ($seccount{$role} > 1) { |
|
$include = 1; |
|
} |
|
} else { |
|
$include = 1; |
|
} |
|
} |
|
if ($include) { |
|
push(@submenu,['javascript:adhocRole('."'$role'".')', |
|
&Apache::lonnet::plaintext($role,$crstype)]); |
} |
} |
} |
} |
foreach my $role (sort(keys(%courseroles))) { |
foreach my $role (sort(keys(%courseroles))) { |
if ($role =~ /^cr/) { |
if ($role =~ /^cr/) { |
$role_selector .= "\n".'<option value="'.$role.'">'.&Apache::lonnet::plaintext($role).'</option>'; |
my $include; |
|
if ($env{'request.role'} =~ m{^\Q$role\E}) { |
|
if ($seccount{$role} > 1) { |
|
$include = 1; |
|
} |
|
} else { |
|
$include = 1; |
|
} |
|
if ($include) { |
|
push(@submenu,['javascript:adhocRole('."'$role'".')', |
|
&Apache::lonnet::plaintext($role)]); |
|
} |
} |
} |
} |
} |
$role_selector .= '</select>'."\n"; |
if (@submenu > 0) { |
if ($destsymb ne '') { |
$switcher = &create_submenu('','',$switchtext,\@submenu); |
$role_selector .= '<input type="hidden" name="destsymb" value="'. |
|
&HTML::Entities::encode($destsymb).'" />'."\n"; |
|
} |
} |
$role_selector .= |
|
'<input type="hidden" name="destinationurl" value="'. |
|
&HTML::Entities::encode($destinationurl).'" />'."\n". |
|
'<input type="hidden" name="gotorole" value="1" />'."\n". |
|
'<input type="hidden" name="selectrole" value="" />'."\n". |
|
'<input type="hidden" name="switch" value="1" />'."\n". |
|
'</form>'; |
|
} |
} |
return $role_selector; |
return ($js,$form,$switcher); |
} |
} |
|
|
sub get_all_courseroles { |
sub get_all_courseroles { |
Line 1744 sub get_all_courseroles {
|
Line 1786 sub get_all_courseroles {
|
push(@{$courseroles->{'st'}},keys(%sections_count)); |
push(@{$courseroles->{'st'}},keys(%sections_count)); |
$seccount->{'st'} = scalar(keys(%sections_count)); |
$seccount->{'st'} = scalar(keys(%sections_count)); |
} |
} |
|
$seccount->{'st'} ++; # Increment for a section-less student role. |
my $rolehash = { |
my $rolehash = { |
'roles' => $courseroles, |
'roles' => $courseroles, |
'seccount' => $seccount, |
'seccount' => $seccount, |
Line 1820 sub jump_to_role {
|
Line 1863 sub jump_to_role {
|
return <<"END"; |
return <<"END"; |
<script type="text/javascript"> |
<script type="text/javascript"> |
//<![CDATA[ |
//<![CDATA[ |
function adhocRole(roleitem) { |
function adhocRole(newrole) { |
$js |
$js |
var newrole = document.rolechooser.elements[roleitem].options[document.rolechooser.elements[roleitem].selectedIndex].value; |
|
if (newrole == '') { |
if (newrole == '') { |
return; |
return; |
} |
} |
Line 1839 function adhocRole(roleitem) {
|
Line 1881 function adhocRole(roleitem) {
|
if (confirm("$lt{'role'}\\n$lt{'swit'}")) { |
if (confirm("$lt{'role'}\\n$lt{'swit'}")) { |
document.rolechooser.destinationurl.value = '/adm/menu'; |
document.rolechooser.destinationurl.value = '/adm/menu'; |
} else { |
} else { |
document.rolechooser.elements[roleitem].selectedIndex = 0; |
|
return; |
return; |
} |
} |
} |
} |
Line 1875 function adhocRole(roleitem) {
|
Line 1916 function adhocRole(roleitem) {
|
fullrole += '/'+secchoice; |
fullrole += '/'+secchoice; |
} |
} |
} else { |
} else { |
document.rolechooser.elements[roleitem].selectedIndex = 0; |
|
if (secchoice != null) { |
if (secchoice != null) { |
alert("$lt{'youe'} \\""+secchoice+"\\".\\n $lt{'plst'}"); |
alert("$lt{'youe'} \\""+secchoice+"\\".\\n $lt{'plst'}"); |
} |
} |
return; |
return; |
} |
} |
if (fullrole == "$env{'request.role'}") { |
if (fullrole == "$env{'request.role'}") { |
document.rolechooser.elements[roleitem].selectedIndex = 0; |
|
return; |
return; |
} |
} |
itemid = retrieveIndex('gotorole'); |
itemid = retrieveIndex('gotorole'); |
if (itemid != -1) { |
if (itemid != -1) { |
document.rolechooser.elements[itemid].name = fullrole; |
document.rolechooser.elements[itemid].name = fullrole; |
} |
} |
document.rolechooser.elements[roleitem].options[document.rolechooser.elements[roleitem].selectedIndex].value = fullrole; |
document.rolechooser.switchrole.value = fullrole; |
document.rolechooser.selectrole.value = '1'; |
document.rolechooser.selectrole.value = '1'; |
document.rolechooser.submit(); |
document.rolechooser.submit(); |
return; |
return; |
Line 1952 sub countdown_timer {
|
Line 1991 sub countdown_timer {
|
} |
} |
my $duedate = &Apache::lonnet::EXT("resource.0.duedate"); |
my $duedate = &Apache::lonnet::EXT("resource.0.duedate"); |
my @interval=&Apache::lonnet::EXT("resource.0.interval"); |
my @interval=&Apache::lonnet::EXT("resource.0.interval"); |
my $hastimeleft; |
|
if (@interval > 1) { |
if (@interval > 1) { |
my $first_access=&Apache::lonnet::get_first_access($interval[1]); |
my $first_access=&Apache::lonnet::get_first_access($interval[1]); |
if ($first_access > 0) { |
if ($first_access > 0) { |
Line 2011 BEGIN {
|
Line 2049 BEGIN {
|
$category_names{$entries[2]}=$entries[3]; |
$category_names{$entries[2]}=$entries[3]; |
} elsif ($configline=~/^prim\:/) { |
} elsif ($configline=~/^prim\:/) { |
my @entries = (split(/\:/, $configline))[1..5]; |
my @entries = (split(/\:/, $configline))[1..5]; |
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..4]; |
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..5]; |
push @secondary_menu, \@entries; |
push(@secondary_menu,\@entries); |
} elsif ($configline) { |
} elsif ($configline) { |
push(@desklines,$configline); |
push(@desklines,$configline); |
} |
} |