version 1.381, 2012/05/29 19:40:44
|
version 1.389, 2012/10/31 12:54:13
|
Line 247 sub primary_menu {
|
Line 247 sub primary_menu {
|
my @primsub; |
my @primsub; |
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') && |
next if (($item->[2] eq 'wishlist') && (!$env{'user.adv'})); |
((!&Apache::lonnet::allowed('bre',"/res/$env{'user.domain'}/")) && |
|
(!&Apache::lonnet::allowed('bro',"/res/$env{'user.domain'}/")))); |
|
next if (($item->[2] eq 'reqcrs') && (!&check_for_rcrs())); |
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')) && |
Line 395 sub secondary_menu {
|
Line 393 sub secondary_menu {
|
} |
} |
$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 ($menu) { |
return "<ul id=\"LC_secondary_menu\">$menu</ul>"; |
$menu = "<ul id=\"LC_secondary_menu\">$menu</ul>"; |
|
} |
|
return $menu; |
} |
} |
|
|
sub create_submenu { |
sub create_submenu { |
Line 523 sub innerregister {
|
Line 523 sub innerregister {
|
### |
### |
my $editbutton = ''; |
my $editbutton = ''; |
my $noeditbutton = 1; |
my $noeditbutton = 1; |
my ($cnum,$cdom); |
my ($cnum,$cdom,$cfile,$switchserver,$home,$uploaded); |
if ($env{'request.course.id'}) { |
if ($env{'request.course.id'}) { |
$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'}; |
Line 555 sub innerregister {
|
Line 555 sub innerregister {
|
my $home = &Apache::lonnet::homeserver($caname,$cadom); |
my $home = &Apache::lonnet::homeserver($caname,$cadom); |
my $allowed=0; |
my $allowed=0; |
my @ids=&Apache::lonnet::current_machine_ids(); |
my @ids=&Apache::lonnet::current_machine_ids(); |
foreach my $id (@ids) { if ($id eq $home) { $allowed=1; } } |
if (($home ne 'no_host') && (grep(/^\Q$home\E$/,@ids))) { |
if (!$allowed) { |
|
$editbutton=&switch('','',6,1,$top,,$bottom,$action,$desc); |
$editbutton=&switch('','',6,1,$top,,$bottom,$action,$desc); |
$noeditbutton = 0; |
|
} |
} |
} |
} else { |
# |
# |
# We are an author for some stuff, but currently do not have the role of author. |
# We are an author for some stuff, but currently do not have the role of author. |
# Figure out if we have authoring privileges for the resource we are looking at. |
# Figure out if we have authoring privileges for the resource we are looking at. |
# This should maybe become a privilege check in lonnet |
|
# |
# |
## |
my ($cfile,$switchserver,$home,$uploaded); |
## Determine if user can edit url. |
if ($env{'request.filename'}) { |
## |
my $file=&Apache::lonnet::declutter($env{'request.filename'}); |
my $cfile=''; |
## |
my $cfuname=''; |
## Determine if user can edit url. |
my $cfudom=''; |
## |
my $uploaded; |
($cfile,$home,$switchserver,$uploaded) = |
my $switchserver=''; |
&Apache::lonnet::can_edit_resource($file,$cnum,$cdom); |
my $home; |
} |
if ($env{'request.filename'}) { |
# Turn the button on or off |
my $file=&Apache::lonnet::declutter($env{'request.filename'}); |
if (($cfile) && ($home ne '') && ($home ne 'no_host')) { |
if (defined($cnum) && defined($cdom)) { |
my $nocrsedit; |
$uploaded = &is_course_upload($file,$cnum,$cdom); |
# Suppress display where CC has switched to student role. |
} |
if ($env{'request.course.id'}) { |
if (!$uploaded) { |
unless(&Apache::lonnet::allowed('mdc', |
|
$env{'request.course.id'})) { |
$file=~s{^(priv/$match_domain/$match_username)}{/$1}; |
$nocrsedit = 1; |
$file=~s{^($match_domain/$match_username)}{/priv/$1}; |
|
|
|
# Check that the user has permission to edit this resource |
|
my $setpriv = 1; |
|
($cfuname,$cfudom)=&Apache::loncacc::constructaccess($file,$setpriv); |
|
if (defined($cfudom)) { |
|
$home=&Apache::lonnet::homeserver($cfuname,$cfudom); |
|
my $allowed=0; |
|
my @ids=&Apache::lonnet::current_machine_ids(); |
|
foreach my $id (@ids) { if ($id eq $home) { $allowed=1; } } |
|
if ($allowed) { |
|
$cfile=$file; |
|
} else { |
|
$switchserver=$file; |
|
} |
} |
} |
} |
} |
if ($nocrsedit) { |
} |
$editbutton=&clear(6,1); |
# Finally, turn the button on or off |
} else { |
if (($cfile || $switchserver) && !$const_space) { |
$editbutton = &get_editbutton($cfile,$home,$switchserver,$uploaded); |
my $nocrsedit; |
|
# Suppress display where CC has switched to student role. |
|
if ($env{'request.course.id'}) { |
|
unless(&Apache::lonnet::allowed('mdc', |
|
$env{'request.course.id'})) { |
|
$nocrsedit = 1; |
|
} |
} |
} |
} elsif ($editbutton eq '') { |
if ($nocrsedit) { |
|
$editbutton=&clear(6,1); |
$editbutton=&clear(6,1); |
} else { |
|
my $bot = "go('$cfile')"; |
|
if ($switchserver) { |
|
if ( $env{'request.symb'} && $env{'request.course.id'} ) { |
|
$cfile = '/adm/switchserver?otherserver='.$home.'&role='. |
|
&HTML::Entities::encode($env{'request.role'},'"<>&').'&symb='. |
|
&HTML::Entities::encode($env{'request.symb'},'"<>&'); |
|
$bot = "need_switchserver('$cfile');"; |
|
} |
|
} |
|
$editbutton=&switch |
|
('','',6,1,'pcstr.png','Edit','resource[_2]', |
|
$bot,"Edit this resource"); |
|
$noeditbutton = 0; |
|
} |
} |
} elsif ($editbutton eq '') { |
|
$editbutton=&clear(6,1); |
|
} |
} |
} |
} elsif (($env{'request.filename'}) && $env{'request.course.id'}) { |
if (($noeditbutton) && ($env{'request.filename'})) { |
|
if (&Apache::lonnet::allowed('mdc',$env{'request.course.id'})) { |
if (&Apache::lonnet::allowed('mdc',$env{'request.course.id'})) { |
my $file=&Apache::lonnet::declutter($env{'request.filename'}); |
my $file=&Apache::lonnet::declutter($env{'request.filename'}); |
if (defined($cnum) && defined($cdom)) { |
if (($cnum =~ /$match_courseid/) && ($cdom =~ /$match_domain/)) { |
if (&is_course_upload($file,$cnum,$cdom)) { |
my ($cfile,$home,$switchserver,$uploaded) = |
my $cfile = &edit_course_upload($file,$cnum,$cdom); |
&Apache::lonnet::can_edit_resource($file,$cnum,$cdom); |
if ($cfile) { |
if (($uploaded) && ($cfile ne '')) { |
$editbutton=&switch |
$editbutton = &get_editbutton($cfile,$home,$switchserver,$uploaded); |
('','',6,1,'pcstr.png','Edit', |
|
'resource[_2]',"go('".$cfile."');", |
|
'Edit this resource'); |
|
} |
|
} |
} |
} |
} |
} |
} |
Line 663 sub innerregister {
|
Line 618 sub innerregister {
|
### |
### |
### |
### |
# Prepare the rest of the buttons |
# Prepare the rest of the buttons |
my $menuitems; |
my ($menuitems,$got_prt,$got_wishlist); |
if ($const_space) { |
if ($const_space) { |
# |
# |
# We are in construction space |
# We are in construction space |
Line 699 ENDMENUITEMS
|
Line 654 ENDMENUITEMS
|
} elsif ( defined($env{'request.course.id'}) && |
} elsif ( defined($env{'request.course.id'}) && |
$env{'request.symb'} ne '' ) { |
$env{'request.symb'} ne '' ) { |
# |
# |
# We are in a course and looking at a registred URL |
# We are in a course and looking at a registered URL |
# Should probably be in mydesk.tab |
# Should probably be in mydesk.tab |
# |
# |
$menuitems=(<<ENDMENUITEMS); |
$menuitems=(<<ENDMENUITEMS); |
Line 711 c&8&1
|
Line 666 c&8&1
|
c&8&2 |
c&8&2 |
s&8&3&prt.png&Print&printout[_1]&gopost('/adm/printout',currentURL)&Prepare a printable document |
s&8&3&prt.png&Print&printout[_1]&gopost('/adm/printout',currentURL)&Prepare a printable document |
ENDMENUITEMS |
ENDMENUITEMS |
if (&Apache::lonnet::allowed('bre', $env{'request.course.id'}) eq 'F' && $env{'request.uri'} =~ /^\/res/) { |
$got_prt = 1; |
|
if (($env{'user.adv'}) && ($env{'request.uri'} =~ /^\/res/) |
|
&& (!$env{'request.enc'})) { |
# wishlist is only available for users with access to resource-pool |
# wishlist is only available for users with access to resource-pool |
# and links can only be set for resources within the resource-pool |
# and links can only be set for resources within the resource-pool |
$menuitems .= (<<ENDMENUITEMS); |
$menuitems .= (<<ENDMENUITEMS); |
s&9&1&wishlist-link.png&Stored Links&wishlistlink[_2]&set_wishlistlink()&Save a link for this resource in your personal Stored Links repository&&1 |
s&9&1&wishlist-link.png&Stored Links&wishlistlink[_2]&set_wishlistlink()&Save a link for this resource in your personal Stored Links repository&&1 |
ENDMENUITEMS |
ENDMENUITEMS |
|
$got_wishlist = 1; |
} |
} |
|
|
my $currentURL = &Apache::loncommon::get_symb(); |
my $currentURL = &Apache::loncommon::get_symb(); |
Line 732 $menuitems.="&Notes&&annotate()&";
|
Line 690 $menuitems.="&Notes&&annotate()&";
|
$menuitems.="Make notes and annotations about this resource&&1\n"; |
$menuitems.="Make notes and annotations about this resource&&1\n"; |
|
|
unless ($env{'request.noversionuri'}=~/\/(bulletinboard|smppg|navmaps|syllabus|aboutme|viewclasslist|portfolio)(\?|$)/) { |
unless ($env{'request.noversionuri'}=~/\/(bulletinboard|smppg|navmaps|syllabus|aboutme|viewclasslist|portfolio)(\?|$)/) { |
if ((!$env{'request.enc'}) && ($env{'request.noversionuri'} !~ m{^/adm/wrapper/ext/})) { |
if ((!$env{'request.enc'}) && ($env{'request.noversionuri'} !~ m{^/adm/wrapper/ext/}) && ($env{'request.noversionuri'} !~ m{^/uploaded/$match_domain/$match_courseid/docs/})) { |
$menuitems.=(<<ENDREALRES); |
$menuitems.=(<<ENDREALRES); |
s&6&3&catalog.png&Info&info[_1]&catalog_info()&Show Metadata |
s&6&3&catalog.png&Info&info[_1]&catalog_info()&Show Metadata |
ENDREALRES |
ENDREALRES |
} |
} |
$menuitems.=(<<ENDREALRES); |
unless ($env{'request.noversionuri'} =~ m{^/uploaded/$match_domain/$match_courseid/docs/}) { |
|
$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 |
|
} |
|
$menuitems.=(<<ENDREALRES); |
s&8&2&fdbk.png&Communicate&discuss[_1]&gopost('/adm/feedback',currentURL,1)&Provide feedback messages or contribute to the course discussion about this resource |
s&8&2&fdbk.png&Communicate&discuss[_1]&gopost('/adm/feedback',currentURL,1)&Provide feedback messages or contribute to the course discussion about this resource |
ENDREALRES |
ENDREALRES |
} |
} |
} |
} |
if ($env{'request.uri'} =~ /^\/res/) { |
if ($env{'request.uri'} =~ /^\/res/) { |
$menuitems .= (<<ENDMENUITEMS); |
unless ($got_prt) { |
|
$menuitems .= (<<ENDMENUITEMS); |
s&8&3&prt.png&Print&printout[_1]&gopost('/adm/printout',currentURL)&Prepare a printable document |
s&8&3&prt.png&Print&printout[_1]&gopost('/adm/printout',currentURL)&Prepare a printable document |
ENDMENUITEMS |
ENDMENUITEMS |
if (&Apache::lonnet::allowed('bre', $env{'request.course.id'}) eq 'F') { |
$got_prt = 1; |
# wishlist is only available for users with access to resource-pool |
} |
$menuitems .= (<<ENDMENUITEMS); |
unless ($got_wishlist) { |
|
if (($env{'user.adv'}) && (!$env{'request.enc'})) { |
|
# wishlist is only available for users with access to resource-pool |
|
$menuitems .= (<<ENDMENUITEMS); |
s&9&1&wishlist-link.png&Stored Links&wishlistlink[_2]&set_wishlistlink()&Save a link for this resource in your personal Stored Links repository&&1 |
s&9&1&wishlist-link.png&Stored Links&wishlistlink[_2]&set_wishlistlink()&Save a link for this resource in your personal Stored Links repository&&1 |
ENDMENUITEMS |
ENDMENUITEMS |
} |
$got_wishlist = 1; |
} |
} |
|
} |
|
} |
my $buttons=''; |
my $buttons=''; |
foreach (split(/\n/,$menuitems)) { |
foreach (split(/\n/,$menuitems)) { |
my ($command,@rest)=split(/\&/,$_); |
my ($command,@rest)=split(/\&/,$_); |
Line 816 ENDMENUITEMS
|
Line 784 ENDMENUITEMS
|
. &Apache::lonhtmlcommon::scripttag('', 'end'); |
. &Apache::lonhtmlcommon::scripttag('', 'end'); |
} |
} |
|
|
sub is_course_upload { |
sub get_editbutton { |
my ($file,$cnum,$cdom) = @_; |
my ($cfile,$home,$switchserver,$uploaded) = @_; |
my $uploadpath = &LONCAPA::propath($cdom,$cnum); |
my $jscall = &Apache::lonhtmlcommon::jump_to_editres($cfile,$home,$switchserver, |
$uploadpath =~ s{^\/}{}; |
$uploaded,$env{'request.symb'}); |
if (($file =~ m{^\Q$uploadpath\E/userfiles/docs/}) || |
if ($jscall) { |
($file =~ m{^userfiles/\Q$cdom\E/\Q$cnum\E/docs/})) { |
return &switch('','',6,1,'pcstr.png','Edit','resource[_2]', |
return 1; |
$jscall,"Edit this resource"); |
} |
|
return; |
|
} |
|
|
|
sub edit_course_upload { |
|
my ($file,$cnum,$cdom) = @_; |
|
my $cfile; |
|
if ($file =~/\.(htm|html|css|js|txt)$/) { |
|
my $ext = $1; |
|
my $url = &Apache::lonnet::hreflocation('',$file); |
|
my $home = &Apache::lonnet::homeserver($cnum,$cdom); |
|
my @ids=&Apache::lonnet::current_machine_ids(); |
|
my $dest; |
|
if ($home && grep(/^\Q$home\E$/,@ids)) { |
|
$dest = $url.'?forceedit=1'; |
|
} else { |
|
unless (&Apache::lonnet::get_locks()) { |
|
$dest = '/adm/switchserver?otherserver='. |
|
$home.'&role='.$env{'request.role'}. |
|
'&url='.$url.'&forceedit=1'; |
|
} |
|
} |
|
if ($dest) { |
|
$cfile = &HTML::Entities::encode($dest,'"<>&'); |
|
} |
|
} |
} |
return $cfile; |
|
} |
} |
|
|
# ================================================================== Raw Config |
# ================================================================== Raw Config |
Line 1251 sub utilityfunctions {
|
Line 1193 sub utilityfunctions {
|
my $end_page_annotate = |
my $end_page_annotate = |
&Apache::loncommon::end_page({'js_ready' => 1}); |
&Apache::loncommon::end_page({'js_ready' => 1}); |
|
|
my $confirm_switch = &mt("Editing requires switching to the resource's home server.").'\n'. |
my $jumptores = &Apache::lonhtmlcommon::javascript_jumpto_resource(); |
&mt('Switch server?'); |
|
|
|
my $esc_url=&escape($currenturl); |
my $esc_url=&escape($currenturl); |
my $esc_symb=&escape($currentsymb); |
my $esc_symb=&escape($currentsymb); |
Line 1267 return (<<ENDUTILITY)
|
Line 1208 return (<<ENDUTILITY)
|
|
|
$dc_popup_cid |
$dc_popup_cid |
|
|
function go(url) { |
$jumptores |
if (url!='' && url!= null) { |
|
currentURL = null; |
|
currentSymb= null; |
|
window.location.href=url; |
|
} |
|
} |
|
|
|
function need_switchserver(url) { |
|
if (url!='' && url!= null) { |
|
if (confirm("$confirm_switch")) { |
|
go(url); |
|
} |
|
} |
|
return; |
|
} |
|
|
|
function gopost(url,postdata) { |
function gopost(url,postdata) { |
if (url!='') { |
if (url!='') { |
Line 1466 sub roles_selector {
|
Line 1392 sub roles_selector {
|
} else { |
} else { |
$ccrole = 'cc'; |
$ccrole = 'cc'; |
} |
} |
my $priv; |
my ($priv,$gotsymb,$destsymb); |
my $destinationurl = $ENV{'REQUEST_URI'}; |
my $destinationurl = $ENV{'REQUEST_URI'}; |
|
if ($destinationurl =~ /\?symb=/) { |
|
$gotsymb = 1; |
|
} elsif ($destinationurl =~ m{^/enc/}) { |
|
my $plainurl = &Apache::lonenc::unencrypted($destinationurl); |
|
if ($plainurl =~ /\?symb=/) { |
|
$gotsymb = 1; |
|
} |
|
} |
|
unless ($gotsymb) { |
|
$destsymb = &Apache::lonnet::symbread(); |
|
if ($destsymb ne '') { |
|
$destsymb = &Apache::lonenc::check_encrypt($destsymb); |
|
} |
|
} |
my $reqprivs = &required_privs(); |
my $reqprivs = &required_privs(); |
if (ref($reqprivs) eq 'HASH') { |
if (ref($reqprivs) eq 'HASH') { |
my $destination = $destinationurl; |
my $destination = $destinationurl; |
Line 1555 sub roles_selector {
|
Line 1495 sub roles_selector {
|
$role_selector .= "\n".'<option value="'.$role.'">'.&Apache::lonnet::plaintext($role).'</option>'; |
$role_selector .= "\n".'<option value="'.$role.'">'.&Apache::lonnet::plaintext($role).'</option>'; |
} |
} |
} |
} |
$role_selector .= '</select>'."\n". |
$role_selector .= '</select>'."\n"; |
|
if ($destsymb ne '') { |
|
$role_selector .= '<input type="hidden" name="destsymb" value="'. |
|
&HTML::Entities::encode($destsymb).'" />'."\n"; |
|
} |
|
$role_selector .= |
'<input type="hidden" name="destinationurl" value="'. |
'<input type="hidden" name="destinationurl" value="'. |
&HTML::Entities::encode($destinationurl).'" />'."\n". |
&HTML::Entities::encode($destinationurl).'" />'."\n". |
'<input type="hidden" name="gotorole" value="1" />'."\n". |
'<input type="hidden" name="gotorole" value="1" />'."\n". |
Line 1811 sub required_privs {
|
Line 1756 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/)) { |
($Apache::inputtags::status[-1] eq 'CAN_ANSWER')) { |
my ($type,$hastimeleft,$slothastime); |
|
my $now = time; |
|
if ($env{'request.filename'} =~ /\.task$/) { |
|
$type = 'Task'; |
|
} else { |
|
$type = 'problem'; |
|
} |
|
my ($status,$accessmsg,$slot_name,$slot) = |
|
&Apache::lonhomework::check_slot_access('0',$type); |
|
if ($slot_name ne '') { |
|
if (ref($slot) eq 'HASH') { |
|
if (($slot->{'starttime'} < $now) && |
|
($slot->{'endtime'} > $now)) { |
|
$slothastime = 1; |
|
} |
|
} |
|
} |
|
if ($status ne 'CAN_ANSWER') { |
|
return; |
|
} |
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; |
my $hastimeleft; |
Line 1825 sub countdown_timer {
|
Line 1789 sub countdown_timer {
|
} |
} |
} |
} |
if (($duedate && $duedate > time) || |
if (($duedate && $duedate > time) || |
(!$duedate && $hastimeleft)) { |
(!$duedate && $hastimeleft) || |
|
($slot_name ne '' && $slothastime)) { |
my ($collapse,$expand,$alttxt,$title,$currdisp); |
my ($collapse,$expand,$alttxt,$title,$currdisp); |
if (@interval > 1 && $hastimeleft) { |
if ((@interval > 1 && $hastimeleft) || |
|
($type eq 'Task' && $slothastime)) { |
$currdisp = 'inline'; |
$currdisp = 'inline'; |
$collapse = '► '; |
$collapse = '► '; |
} else { |
} else { |