version 1.345, 2011/01/18 22:59:06
|
version 1.369.2.2, 2012/05/14 13:58:04
|
Line 153 use Apache::lonhtmlcommon();
|
Line 153 use Apache::lonhtmlcommon();
|
use Apache::loncommon(); |
use Apache::loncommon(); |
use Apache::lonenc(); |
use Apache::lonenc(); |
use Apache::lonlocal; |
use Apache::lonlocal; |
|
use Apache::lonmsg(); |
use LONCAPA qw(:DEFAULT :match); |
use LONCAPA qw(:DEFAULT :match); |
use HTML::Entities(); |
use HTML::Entities(); |
|
|
Line 333 sub secondary_menu {
|
Line 334 sub secondary_menu {
|
and ( $env{'request.noversionuri'} eq '' |
and ( $env{'request.noversionuri'} eq '' |
|| !defined($env{'request.noversionuri'}))) |
|| !defined($env{'request.noversionuri'}))) |
{ |
{ |
($escurl = $env{'request.filename'}) =~ |
my $londocroot = $Apache::lonnet::perlvar{'lonDocRoot'}; |
s{^/home/([^/]+)/public_html/(.*)$}{/priv/$1/$2}; |
($escurl = $env{'request.filename'}) =~ s{^\Q$londocroot\E}{}; |
|
|
$escurl = &escape($escurl); |
$escurl = &escape($escurl); |
} |
} |
$menu =~ s/\[url\]/$escurl/g; |
$menu =~ s/\[url\]/$escurl/g; |
Line 358 sub innerregister {
|
Line 358 sub innerregister {
|
|
|
undef(@inlineremote); |
undef(@inlineremote); |
|
|
|
my $resurl; |
if ( $env{'request.symb'} && $env{'request.course.id'} ) { |
if ( $env{'request.symb'} && $env{'request.course.id'} ) { |
|
|
my ($mapurl,$rid,$resurl) = &Apache::lonnet::decode_symb(&Apache::lonnet::symbread()); |
(my $mapurl, my $rid, $resurl) = &Apache::lonnet::decode_symb(&Apache::lonnet::symbread()); |
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); |
Line 409 sub innerregister {
|
Line 410 sub innerregister {
|
|
|
my $hwkadd=''; |
my $hwkadd=''; |
if ($env{'request.symb'} ne '' && |
if ($env{'request.symb'} ne '' && |
$env{'request.filename'}=~/\.(problem|exam|quiz|assess|survey|form|task)$/) { |
$env{'request.filename'}=~/$LONCAPA::assess_re/) { |
if (&Apache::lonnet::allowed('mgr',$crs)) { |
if (&Apache::lonnet::allowed('mgr',$crs)) { |
$hwkadd.=&switch('','',7,2,'pgrd.png','Content Grades','grades[_4]', |
$hwkadd.=&switch('','',7,2,'pgrd.png','Content Grades','grades[_4]', |
"gocmd('/adm/grades','gradingmenu')", |
"gocmd('/adm/grades','gradingmenu')", |
Line 426 sub innerregister {
|
Line 427 sub innerregister {
|
"gocmd('/adm/parmset','set')", |
"gocmd('/adm/parmset','set')", |
'Content Settings'); |
'Content Settings'); |
} |
} |
|
if ($env{'request.symb'}=~/^uploaded/ && |
|
&Apache::lonnet::allowed('mdc',$crs)) { |
|
$hwkadd.=&switch('','',7,4,'docs.png','Folder/Page Content','parms[_2]', |
|
"gocmd('/adm/coursedocs','direct')", |
|
'Folder/Page Content'); |
|
} |
# -- End Homework |
# -- End Homework |
### |
### |
### Determine whether or not to display the 'cstr' button for this |
### Determine whether or not to display the 'cstr' button for this |
Line 445 sub innerregister {
|
Line 452 sub innerregister {
|
# |
# |
# Set defaults for authors |
# Set defaults for authors |
my ($top,$bottom) = ('con-','struct'); |
my ($top,$bottom) = ('con-','struct'); |
my $action = "go('/priv/".$env{'user.name'}."');"; |
my $action = "go('/priv/".$env{'user.domain'}.'/'.$env{'user.name'}."');"; |
my $cadom = $env{'request.role.domain'}; |
my $cadom = $env{'request.role.domain'}; |
my $caname = $env{'user.name'}; |
my $caname = $env{'user.name'}; |
my $desc = "Enter my construction space"; |
my $desc = "Enter my construction space"; |
Line 453 sub innerregister {
|
Line 460 sub innerregister {
|
if ($env{'request.role'} =~ /^ca/) { |
if ($env{'request.role'} =~ /^ca/) { |
($cadom,$caname)=($env{'request.role'}=~/($match_domain)\/($match_username)$/); |
($cadom,$caname)=($env{'request.role'}=~/($match_domain)\/($match_username)$/); |
($top,$bottom) = ('co con-','struct'); |
($top,$bottom) = ('co con-','struct'); |
$action = "go('/priv/".$caname."');"; |
$action = "go('/priv/".$cadom.'/'.$caname."');"; |
$desc = "Enter construction space as co-author"; |
$desc = "Enter construction space as co-author"; |
} elsif ($env{'request.role'} =~ /^aa/) { |
} elsif ($env{'request.role'} =~ /^aa/) { |
($cadom,$caname)=($env{'request.role'}=~/($match_domain)\/($match_username)$/); |
($cadom,$caname)=($env{'request.role'}=~/($match_domain)\/($match_username)$/); |
($top,$bottom) = ('co con-','struct'); |
($top,$bottom) = ('co con-','struct'); |
$action = "go('/priv/".$caname."');"; |
$action = "go('/priv/".$cadom.'/'.$caname."');"; |
$desc = "Enter construction space as assistant co-author"; |
$desc = "Enter construction space as assistant co-author"; |
} |
} |
# Check that we are on the correct machine |
# Check that we are on the correct machine |
Line 491 sub innerregister {
|
Line 498 sub innerregister {
|
$uploaded = &is_course_upload($file,$cnum,$cdom); |
$uploaded = &is_course_upload($file,$cnum,$cdom); |
} |
} |
if (!$uploaded) { |
if (!$uploaded) { |
$file=~s/^($match_domain)\/($match_username)/\/priv\/$2/; |
|
|
$file=~s{^(priv/$match_domain/$match_username)}{/$1}; |
|
$file=~s{^($match_domain/$match_username)}{/priv/$1}; |
|
|
# Check that the user has permission to edit this resource |
# Check that the user has permission to edit this resource |
($cfuname,$cfudom)=&Apache::loncacc::constructaccess($file,$1); |
my $setpriv = 1; |
|
($cfuname,$cfudom)=&Apache::loncacc::constructaccess($file,$setpriv); |
if (defined($cfudom)) { |
if (defined($cfudom)) { |
$home=&Apache::lonnet::homeserver($cfuname,$cfudom); |
$home=&Apache::lonnet::homeserver($cfuname,$cfudom); |
my $allowed=0; |
my $allowed=0; |
Line 554 sub innerregister {
|
Line 565 sub innerregister {
|
} |
} |
} |
} |
} |
} |
|
if ($env{'request.course.id'}) { |
|
if ($resurl eq "public/$cdom/$cnum/syllabus") { |
|
if ($env{'course.'.$env{'request.course.id'}.'.externalsyllabus'} =~ /\w/) { |
|
if (&Apache::lonnet::allowed('mdc',$env{'request.course.id'})) { |
|
$editbutton=&switch('','',6,1,'pcstr.png','Edit', |
|
'resource[_2]', |
|
"go('/adm/courseprefs?phase=display&actions=courseinfo')", |
|
'Edit this resource'); |
|
} |
|
} |
|
} |
|
} |
### |
### |
### |
### |
# Prepare the rest of the buttons |
# Prepare the rest of the buttons |
Line 562 sub innerregister {
|
Line 585 sub innerregister {
|
# |
# |
# We are in construction space |
# We are in construction space |
# |
# |
my ($uname,$thisdisfn) = |
|
($env{'request.filename'}=~m|^/home/([^/]+)/public_html/(.*)|); |
my $londocroot = $Apache::lonnet::perlvar{'lonDocRoot'}; |
my $currdir = '/priv/'.$uname.'/'.$thisdisfn; |
my ($udom,$uname,$thisdisfn) = |
|
($env{'request.filename'}=~m{^\Q$londocroot/priv/\E([^/]+)/([^/]+)/(.*)$}); |
|
my $currdir = '/priv/'.$udom.'/'.$uname.'/'.$thisdisfn; |
if ($currdir =~ m-/$-) { |
if ($currdir =~ m-/$-) { |
$is_const_dir = 1; |
$is_const_dir = 1; |
} else { |
} else { |
Line 576 sub innerregister {
|
Line 601 sub innerregister {
|
# |
# |
$menuitems=(<<ENDMENUITEMS); |
$menuitems=(<<ENDMENUITEMS); |
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','/~$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','/~$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&1&del.png&Delete&resource[_2]&gocstr('/adm/cfile?action=delete','/~$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 |
s&7&2&prt.png&Print&printout[_1]&gocstr('/adm/printout','/~$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 |
} |
} |
if (ref($bread_crumbs) eq 'ARRAY') { |
if (ref($bread_crumbs) eq 'ARRAY') { |
Line 602 c&6&3
|
Line 627 c&6&3
|
c&8&1 |
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 |
|
s&9&1&sbkm.png&Bookmark&set[_1]bookmark[_2]&set_bookmark()&Set a bookmark for this resource&&1 |
|
|
ENDMENUITEMS |
ENDMENUITEMS |
if (&Apache::lonnet::allowed('bre', $env{'request.course.id'}) eq 'F' && $env{'request.uri'} =~ /^\/res/) { |
|
# wishlist is only available for users with access to resource-pool |
|
# and links can only be set for resources within the resource-pool |
|
$menuitems .= (<<ENDMENUITEMS); |
|
s&9&1&wishlist-link.png&Wishlist&wishlistlink[_2]&set_wishlistlink()&Set a link for this resource to wishlist&&1 |
|
ENDMENUITEMS |
|
} |
|
|
|
my $currentURL = &Apache::loncommon::get_symb(); |
my $currentURL = &Apache::loncommon::get_symb(); |
my ($symb_old,$symb_old_enc) = &Apache::loncommon::clean_symb($currentURL); |
my ($symb_old,$symb_old_enc) = &Apache::loncommon::clean_symb($currentURL); |
Line 639 ENDREALRES
|
Line 659 ENDREALRES
|
$menuitems .= (<<ENDMENUITEMS); |
$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') { |
|
# wishlist is only available for users with access to resource-pool |
|
$menuitems .= (<<ENDMENUITEMS); |
|
s&9&1&wishlist-link.png&Wishlist&wishlistlink[_2]&set_wishlistlink()&Set a link for this resource to wishlist&&1 |
|
ENDMENUITEMS |
|
} |
|
} |
} |
my $buttons=''; |
my $buttons=''; |
foreach (split(/\n/,$menuitems)) { |
foreach (split(/\n/,$menuitems)) { |
Line 681 ENDMENUITEMS
|
Line 695 ENDMENUITEMS
|
#publish button in construction space |
#publish button in construction space |
if ($env{'request.state'} eq 'construct'){ |
if ($env{'request.state'} eq 'construct'){ |
&Apache::lonhtmlcommon::add_breadcrumb_tool( |
&Apache::lonhtmlcommon::add_breadcrumb_tool( |
'advtools', @inlineremote[63]); |
'advtools', $inlineremote[63]); |
} else { |
} else { |
&Apache::lonhtmlcommon::add_breadcrumb_tool( |
&Apache::lonhtmlcommon::add_breadcrumb_tool( |
'tools', @inlineremote[63]); |
'tools', $inlineremote[63]); |
} |
} |
|
|
unless ($env{'request.noversionuri'}=~ m{^/adm/(navmaps|viewclasslist)(\?|$)}) { |
unless ($env{'request.noversionuri'}=~ m{^/adm/(navmaps|viewclasslist)(\?|$)}) { |
&Apache::lonhtmlcommon::add_breadcrumb_tool( |
&Apache::lonhtmlcommon::add_breadcrumb_tool( |
'advtools', @inlineremote[61,71,72,73,92]); |
'advtools', @inlineremote[61,71,72,73,74,92]); |
} |
} |
} |
} |
} |
} |
Line 735 sub edit_course_upload {
|
Line 749 sub edit_course_upload {
|
return $cfile; |
return $cfile; |
} |
} |
|
|
|
sub startupremote { |
|
my ($lowerurl)=@_; |
|
if ($env{'environment.remote'} eq 'off') { |
|
return ('<meta HTTP-EQUIV="Refresh" CONTENT="0.5; url='.$lowerurl.'" />'); |
|
} |
|
# |
|
# The Remote actually gets launched! |
|
# |
|
my $configmenu=&rawconfig(); |
|
my $esclowerurl=&escape($lowerurl); |
|
my $message=&mt('"Waiting for Remote Control window to load: "+[_1]','waited'); |
|
return(<<ENDREMOTESTARTUP); |
|
<script type="text/javascript"> |
|
// <![CDATA[ |
|
var timestart; |
|
function wheelswitch() { |
|
if (typeof(document.wheel) != 'undefined') { |
|
if (typeof(document.wheel.spin) != 'undefined') { |
|
var date=new Date(); |
|
var waited=Math.round(30-((date.getTime()-timestart)/1000)); |
|
document.wheel.spin.value=$message; |
|
} |
|
} |
|
if (window.status=='|') { |
|
window.status='/'; |
|
} else { |
|
if (window.status=='/') { |
|
window.status='-'; |
|
} else { |
|
if (window.status=='-') { |
|
window.status='\\\\'; |
|
} else { |
|
if (window.status=='\\\\') { window.status='|'; } |
|
} |
|
} |
|
} |
|
} |
|
|
|
// ---------------------------------------------------------- The wait function |
|
var canceltim; |
|
function wait() { |
|
if ((menuloaded==1) || (tim==1)) { |
|
window.status='Done.'; |
|
if (tim==0) { |
|
clearTimeout(canceltim); |
|
$configmenu |
|
window.location='$lowerurl'; |
|
} else { |
|
window.location='/adm/remote?action=collapse&url=$esclowerurl'; |
|
} |
|
} else { |
|
wheelswitch(); |
|
setTimeout('wait();',200); |
|
} |
|
} |
|
|
|
function main() { |
|
canceltim=setTimeout('tim=1;',30000); |
|
window.status='-'; |
|
var date=new Date(); |
|
timestart=date.getTime(); |
|
wait(); |
|
} |
|
|
|
// ]]> |
|
</script> |
|
ENDREMOTESTARTUP |
|
} |
|
|
|
sub setflags() { |
|
return(<<ENDSETFLAGS); |
|
<script type="text/javascript"> |
|
// <![CDATA[ |
|
menuloaded=0; |
|
tim=0; |
|
// ]]> |
|
</script> |
|
ENDSETFLAGS |
|
} |
|
|
|
sub maincall() { |
|
if ($env{'environment.remote'} eq 'off') { return ''; } |
|
return(<<ENDMAINCALL); |
|
<script type="text/javascript"> |
|
// <![CDATA[ |
|
main(); |
|
// ]]> |
|
</script> |
|
ENDMAINCALL |
|
} |
|
|
|
sub load_remote_msg { |
|
my ($lowerurl)=@_; |
|
|
|
if ($env{'environment.remote'} eq 'off') { return ''; } |
|
|
|
my $esclowerurl=&escape($lowerurl); |
|
my $link=&mt('[_1]Continue[_2] on in Inline Menu mode' |
|
,'<a href="/adm/remote?action=collapse&url='.$esclowerurl.'">' |
|
,'</a>'); |
|
return(<<ENDREMOTEFORM); |
|
<p> |
|
<form name="wheel"> |
|
<input name="spin" type="text" size="60" /> |
|
</form> |
|
</p> |
|
<p>$link</p> |
|
ENDREMOTEFORM |
|
} |
|
|
|
sub get_menu_name { |
|
my $hostid = $Apache::lonnet::perlvar{'lonHostID'}; |
|
$hostid =~ s/\W//g; |
|
return 'LCmenu'.$hostid; |
|
} |
|
|
|
|
|
sub reopenmenu { |
|
if ($env{'environment.remote'} eq 'off') { return ''; } |
|
my $menuname = &get_menu_name(); |
|
my $nothing = &Apache::lonhtmlcommon::javascript_nothing(); |
|
return('window.open('.$nothing.',"'.$menuname.'","",false);'); |
|
} |
|
|
|
|
|
sub open { |
|
my $returnval=''; |
|
if ($env{'environment.remote'} eq 'off') { |
|
return |
|
'<script type="text/javascript">'."\n" |
|
.'// <![CDATA['."\n" |
|
.'self.name="loncapaclient";'."\n" |
|
.'// ]]>'."\n" |
|
.'</script>'; |
|
} |
|
my $menuname = &get_menu_name(); |
|
|
|
# unless (shift eq 'unix') { |
|
# resizing does not work on linux because of virtual desktop sizes |
|
# $returnval.=(<<ENDRESIZE); |
|
#if (window.screen) { |
|
# self.resizeTo(screen.availWidth-215,screen.availHeight-55); |
|
# self.moveTo(190,15); |
|
#} |
|
#ENDRESIZE |
|
# } |
|
$returnval=(<<ENDOPEN); |
|
// <![CDATA[ |
|
window.status='Opening LON-CAPA Remote Control'; |
|
var menu=window.open("/res/adm/pages/menu.html?inhibitmenu=yes","$menuname", |
|
"height=375,width=150,scrollbars=no,menubar=no,top=5,left=5,screenX=5,screenY=5"); |
|
self.name='loncapaclient'; |
|
// ]]> |
|
ENDOPEN |
|
return '<script type="text/javascript">'.$returnval.'</script>'; |
|
} |
|
|
|
|
# ================================================================== Raw Config |
# ================================================================== Raw Config |
|
|
sub clear { |
sub clear { |
Line 987 sub rawconfig {
|
Line 1159 sub rawconfig {
|
($env{'request.role'}=~/($match_domain)\/($match_username)$/); |
($env{'request.role'}=~/($match_domain)\/($match_username)$/); |
} |
} |
$act =~ s/\$caname/$caname/g; |
$act =~ s/\$caname/$caname/g; |
|
$act =~ s/\$cadom/$cadom/g; |
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(); |
Line 1049 sub check_for_rcrs {
|
Line 1222 sub check_for_rcrs {
|
return $showreqcrs; |
return $showreqcrs; |
} |
} |
|
|
|
# ======================================================================= Close |
|
|
|
sub close { |
|
if ($env{'environment.remote'} eq 'off') { return ''; } |
|
my $menuname = &get_menu_name(); |
|
return(<<ENDCLOSE); |
|
<script type="text/javascript"> |
|
// <![CDATA[ |
|
window.status='Accessing Remote Control'; |
|
menu=window.open("/adm/rat/empty.html","$menuname", |
|
"height=350,width=150,scrollbars=no,menubar=no"); |
|
window.status='Disabling Remote Control'; |
|
menu.active=0; |
|
menu.autologout=0; |
|
window.status='Closing Remote Control'; |
|
menu.close(); |
|
window.status='Done.'; |
|
// ]]> |
|
</script> |
|
ENDCLOSE |
|
} |
|
|
sub dc_popup_js { |
sub dc_popup_js { |
my %lt = &Apache::lonlocal::texthash( |
my %lt = &Apache::lonlocal::texthash( |
more => '(More ...)', |
more => '(More ...)', |
Line 1060 function showCourseID() {
|
Line 1255 function showCourseID() {
|
document.getElementById('dccid').style.display='block'; |
document.getElementById('dccid').style.display='block'; |
document.getElementById('dccid').style.textAlign='left'; |
document.getElementById('dccid').style.textAlign='left'; |
document.getElementById('dccid').style.textFace='normal'; |
document.getElementById('dccid').style.textFace='normal'; |
document.getElementById('dccidtext').innerHTML ='<a href="javascript:hideCourseID();">$lt{'less'}</a>'; |
document.getElementById('dccidtext').innerHTML ='<a href="javascript:hideCourseID();" class="LC_menubuttons_link">$lt{'less'}</a>'; |
return; |
return; |
} |
} |
|
|
function hideCourseID() { |
function hideCourseID() { |
document.getElementById('dccid').style.display='none'; |
document.getElementById('dccid').style.display='none'; |
document.getElementById('dccidtext').innerHTML ='<a href="javascript:showCourseID()">$lt{'more'}</a>'; |
document.getElementById('dccidtext').innerHTML ='<a href="javascript:showCourseID()" class="LC_menubuttons_link">$lt{'more'}</a>'; |
return; |
return; |
} |
} |
|
|
Line 1102 sub utilityfunctions {
|
Line 1297 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 $start_page_bookmark = |
&mt('Switch server?'); |
&Apache::loncommon::start_page('Bookmarks',undef, |
|
{'only_body' => 1, |
my $start_page_wishlistlink = |
'js_ready' => 1, |
&Apache::loncommon::start_page('Set link to wishlist',undef, |
'bgcolor' => '#BBBBBB',}); |
{'only_body' => 1, |
|
'js_ready' => 1, |
|
'bgcolor' => '#FFFFFF',}); |
|
|
|
my $warningLink = &mt('You must insert a title!'); |
my $end_page_bookmark = |
|
&Apache::loncommon::end_page({'js_ready' => 1}); |
|
|
# HTML-Markup for 'Set a link for this resource to wishlist' |
my $confirm_switch = &mt("Editing requires switching to the resource's home server.").'\n'. |
# this is written via JavaScript document.write (function set_wishlistlink) |
&mt('Switch server?'); |
# it is split into 3 parts and the inputfields for title and path are left out |
|
# these fields are inserted later to set the values for title and path |
|
# automatically via JavaScript (document.title and location.pathname) |
|
my %folders = &Apache::lonnet::get('wishlist',['folders']); |
|
if ($folders{'folders'} eq '') { |
|
$folders{'folders'} = '<option value="" selected="selected">('.&mt('Top level').')</option>'; |
|
} |
|
my $in_page_wishlistlink1 = '<h1>'.&mt('Set a link to wishlist').'</h1>'. |
|
'<form method="post" name="newlink" action="/adm/wishlist?mode=set" '. |
|
'onsubmit="return newlinksubmit();" >'. |
|
&Apache::lonhtmlcommon::start_pick_box(). |
|
&Apache::lonhtmlcommon::row_title(&mt('Link Title')); |
|
|
|
my $in_page_wishlistlink2 = &Apache::lonhtmlcommon::row_closure(). |
|
&Apache::lonhtmlcommon::row_title(&mt('Path')); |
|
|
|
my $in_page_wishlistlink3 = &Apache::lonhtmlcommon::row_closure(). |
|
&Apache::lonhtmlcommon::row_title(&mt('Note')). |
|
'<textarea name="note" rows="3" cols="35" style="width:100%"></textarea>'. |
|
&Apache::lonhtmlcommon::row_closure(1). |
|
&Apache::lonhtmlcommon::end_pick_box(). |
|
'<br/><br/>'. |
|
'<input type="submit" value="'.&mt('Save in').'" />'. |
|
'<select name="folders">'. |
|
$folders{'folders'}. |
|
'</select>'. |
|
'<input type="button" value="'.&mt('cancel').'" onclick="javascript:window.close();" />'. |
|
'</form>'; |
|
|
|
# remove all \n for inserting on javascript document.write |
|
$in_page_wishlistlink1 =~ s/\n//g; |
|
$in_page_wishlistlink2 =~ s/\n//g; |
|
$in_page_wishlistlink3 =~ s/\n//g; |
|
|
|
my $end_page_wishlistlink = |
my $esc_url=&escape($currenturl); |
&Apache::loncommon::end_page({'js_ready' => 1}); |
my $esc_symb=&escape($currentsymb); |
|
|
return (<<ENDUTILITY) |
return (<<ENDUTILITY) |
|
|
var currentURL="$currenturl"; |
var currentURL=unescape("$esc_url"); |
var reloadURL="$currenturl"; |
var reloadURL=unescape("$esc_url"); |
var currentSymb="$currentsymb"; |
var currentSymb=unescape("$esc_symb"); |
|
|
$dc_popup_cid |
$dc_popup_cid |
|
|
Line 1249 function golist(url) {
|
Line 1409 function golist(url) {
|
|
|
|
|
function catalog_info() { |
function catalog_info() { |
loncatinfo=window.open(window.location.pathname+'.meta',"LONcatInfo",'height=320,width=280,resizable=yes,scrollbars=yes,location=no,menubar=no,toolbar=no'); |
openMyModal(window.location.pathname+'.meta',500,400,'yes'); |
} |
} |
|
|
function chat_win() { |
function chat_win() { |
Line 1262 function group_chat(group) {
|
Line 1422 function group_chat(group) {
|
grpchat=window.open(url,winName,'height=320,width=280,resizable=yes,location=no,menubar=no,toolbar=no'); |
grpchat=window.open(url,winName,'height=320,width=280,resizable=yes,location=no,menubar=no,toolbar=no'); |
} |
} |
|
|
|
function edit_bookmarks() { |
|
go(''); |
|
w_BookmarkPal_flag=1; |
|
bookmarkpal=window.open("/adm/bookmarks", |
|
"BookmarkPal", "width=500,height=505,scrollbars=0"); |
|
} |
|
|
function annotate() { |
function annotate() { |
w_Annotator_flag=1; |
w_Annotator_flag=1; |
annotator=window.open('','Annotator','width=365,height=265,scrollbars=0'); |
annotator=window.open('','Annotator','width=365,height=265,scrollbars=0'); |
Line 1275 function annotate() {
|
Line 1442 function annotate() {
|
annotator.document.close(); |
annotator.document.close(); |
} |
} |
|
|
function set_wishlistlink(title, path) { |
function set_bookmark() { |
if (!title) { |
go(''); |
title=document.title; |
clienttitle=document.title; |
} |
clienthref=location.pathname; |
if (!path) { |
w_bmquery_flag=1; |
path=location.pathname; |
bmquery=window.open('','bmquery','width=365,height=165,scrollbars=0'); |
} |
bmquery.document.write( |
title = title.replace(/^LON-CAPA /,''); |
'$start_page_bookmark' |
wishlistlink=window.open('','wishlistNewLink','width=560,height=350,scrollbars=0'); |
+'<center><form method="post"' |
wishlistlink.document.write( |
+' name="newlink" action="/adm/bookmarks" target="bmquery" ' |
'$start_page_wishlistlink' |
+'> <table width="340" height="150" ' |
+'<script type="text\/javascript">' |
+'bgcolor="#FFFFFF" align="center"><tr><td>Link Name:<br /><input ' |
+'function newlinksubmit(){' |
+'type="text" name="title" size="45" value="'+clienttitle+'" />' |
+'var title = document.getElementsByName("title")[0].value;' |
+'<br />Address:<br /><input type="text" name="address" size="45" ' |
+'if (!title) {' |
+'value="'+clienthref+'" /><br /><center><input type="submit" ' |
+'alert("$warningLink");' |
+'value="Save" /> <input type="button" value="Close" ' |
+'return false;}' |
+'onclick="javascript:window.close();" /></center></td>' |
+'return true;}' |
+'</tr></table></form></center>' |
+'<\/scr'+'ipt>' |
+'$end_page_bookmark' ); |
+'$in_page_wishlistlink1' |
bmquery.document.close(); |
+'<input type="text" name="title" size="45" value="'+title+'"/>' |
|
+'$in_page_wishlistlink2' |
|
+'<input type="text" name="path" size="45" value="'+path+'" ' |
|
+'readonly="readonly" style="background-color: #DDDDDD"/>' |
|
+'$in_page_wishlistlink3' |
|
+'$end_page_wishlistlink' ); |
|
wishlistlink.document.close(); |
|
} |
|
|
|
function open_Wishlist_Import(rat) { |
|
var newWin; |
|
if (rat) { |
|
newWin = window.open('/adm/wishlist?inhibitmenu=yes&mode=import&rat='+rat, |
|
'wishlistImport','scrollbars=1,resizable=1,menubar=0'); |
|
} |
|
else { |
|
newWin = window.open('/adm/wishlist?inhibitmenu=yes&mode=import', |
|
'wishlistImport','scrollbars=1,resizable=1,menubar=0'); |
|
} |
|
newWin.focus(); |
|
} |
} |
|
|
ENDUTILITY |
ENDUTILITY |
Line 1363 sub roles_selector {
|
Line 1510 sub roles_selector {
|
my ($cdom,$cnum) = @_; |
my ($cdom,$cnum) = @_; |
my $crstype = &Apache::loncommon::course_type(); |
my $crstype = &Apache::loncommon::course_type(); |
my $now = time; |
my $now = time; |
my (%courseroles,%seccount); |
my (%courseroles,%seccount,%courseprivs); |
my $is_cc; |
my $is_cc; |
my $role_selector; |
my $role_selector; |
my $ccrole; |
my $ccrole; |
Line 1371 sub roles_selector {
|
Line 1518 sub roles_selector {
|
$ccrole = 'co'; |
$ccrole = 'co'; |
} else { |
} else { |
$ccrole = 'cc'; |
$ccrole = 'cc'; |
} |
} |
|
my $priv; |
|
my $destinationurl = $ENV{'REQUEST_URI'}; |
|
my $reqprivs = &required_privs(); |
|
if (ref($reqprivs) eq 'HASH') { |
|
my $destination = $destinationurl; |
|
$destination =~ s/(\?.*)$//; |
|
if (exists($reqprivs->{$destination})) { |
|
$priv = $reqprivs->{$destination}; |
|
} |
|
} |
if ($env{'user.role.'.$ccrole.'./'.$cdom.'/'.$cnum}) { |
if ($env{'user.role.'.$ccrole.'./'.$cdom.'/'.$cnum}) { |
my ($start,$end) = split(/\./,$env{'user.role.'.$ccrole.'./'.$cdom.'/'.$cnum}); |
my ($start,$end) = split(/\./,$env{'user.role.'.$ccrole.'./'.$cdom.'/'.$cnum}); |
|
|
Line 1384 sub roles_selector {
|
Line 1541 sub roles_selector {
|
} |
} |
} |
} |
if ($is_cc) { |
if ($is_cc) { |
&get_all_courseroles($cdom,$cnum,\%courseroles,\%seccount); |
&get_all_courseroles($cdom,$cnum,\%courseroles,\%seccount,\%courseprivs,$priv); |
} else { |
} else { |
my %gotnosection; |
my %gotnosection; |
foreach my $item (keys(%env)) { |
foreach my $item (keys(%env)) { |
Line 1400 sub roles_selector {
|
Line 1557 sub roles_selector {
|
$gotnosection{$role} = 1; |
$gotnosection{$role} = 1; |
} |
} |
} |
} |
|
if ($priv ne '') { |
|
my $cnumsec = $cnum; |
|
if ($sec ne '') { |
|
$cnumsec .= "/$sec"; |
|
} |
|
$courseprivs{"$role./$cdom/$cnumsec./"} = |
|
$env{"user.priv.$role./$cdom/$cnumsec./"}; |
|
$courseprivs{"$role./$cdom/$cnumsec./$cdom/"} = |
|
$env{"user.priv.$role./$cdom/$cnumsec./$cdom/"}; |
|
$courseprivs{"$role./$cdom/$cnumsec./$cdom/$cnumsec"} = |
|
$env{"user.priv.$role./$cdom/$cnumsec./$cdom/$cnumsec"}; |
|
} |
if (ref($courseroles{$role}) eq 'ARRAY') { |
if (ref($courseroles{$role}) eq 'ARRAY') { |
if ($sec ne '') { |
if ($sec ne '') { |
if (!grep(/^\Q$sec\E$/,@{$courseroles{$role}})) { |
if (!grep(/^\Q$sec\E$/,@{$courseroles{$role}})) { |
Line 1425 sub roles_selector {
|
Line 1594 sub roles_selector {
|
} |
} |
my @roles_order = ($ccrole,'in','ta','ep','ad','st'); |
my @roles_order = ($ccrole,'in','ta','ep','ad','st'); |
if (keys(%courseroles) > 1) { |
if (keys(%courseroles) > 1) { |
$role_selector = &jump_to_role($cdom,$cnum,\%seccount,\%courseroles); |
$role_selector = &jump_to_role($cdom,$cnum,\%seccount,\%courseroles,\%courseprivs,$priv); |
$role_selector .= '<form name="rolechooser" method="post" action="/adm/roles"> |
$role_selector .= '<form name="rolechooser" method="post" action="/adm/roles"> |
<select name="switchrole" onchange="javascript:adhocRole('."'switchrole'".')">'; |
<select name="switchrole" onchange="javascript:adhocRole('."'switchrole'".')">'; |
$role_selector .= '<option value="">'.$switchtext.'</option>'; |
$role_selector .= '<option value="">'.$switchtext.'</option>'; |
Line 1441 sub roles_selector {
|
Line 1610 sub roles_selector {
|
} |
} |
$role_selector .= '</select>'."\n". |
$role_selector .= '</select>'."\n". |
'<input type="hidden" name="destinationurl" value="'. |
'<input type="hidden" name="destinationurl" value="'. |
&HTML::Entities::encode($ENV{'REQUEST_URI'}).'" />'."\n". |
&HTML::Entities::encode($destinationurl).'" />'."\n". |
'<input type="hidden" name="gotorole" value="1" />'."\n". |
'<input type="hidden" name="gotorole" value="1" />'."\n". |
'<input type="hidden" name="selectrole" value="" />'."\n". |
'<input type="hidden" name="selectrole" value="" />'."\n". |
'<input type="hidden" name="switch" value="1" />'."\n". |
'<input type="hidden" name="switch" value="1" />'."\n". |
Line 1451 sub roles_selector {
|
Line 1620 sub roles_selector {
|
} |
} |
|
|
sub get_all_courseroles { |
sub get_all_courseroles { |
my ($cdom,$cnum,$courseroles,$seccount) = @_; |
my ($cdom,$cnum,$courseroles,$seccount,$courseprivs) = @_; |
unless ((ref($courseroles) eq 'HASH') && (ref($seccount) eq 'HASH')) { |
unless ((ref($courseroles) eq 'HASH') && (ref($seccount) eq 'HASH') && |
|
(ref($courseprivs) eq 'HASH')) { |
return; |
return; |
} |
} |
my ($result,$cached) = |
my ($result,$cached) = |
Line 1460 sub get_all_courseroles {
|
Line 1630 sub get_all_courseroles {
|
if (defined($cached)) { |
if (defined($cached)) { |
if (ref($result) eq 'HASH') { |
if (ref($result) eq 'HASH') { |
if ((ref($result->{'roles'}) eq 'HASH') && |
if ((ref($result->{'roles'}) eq 'HASH') && |
(ref($result->{'seccount'}) eq 'HASH')) { |
(ref($result->{'seccount'}) eq 'HASH') && |
|
(ref($result->{'privs'}) eq 'HASH')) { |
%{$courseroles} = %{$result->{'roles'}}; |
%{$courseroles} = %{$result->{'roles'}}; |
%{$seccount} = %{$result->{'seccount'}}; |
%{$seccount} = %{$result->{'seccount'}}; |
|
%{$courseprivs} = %{$result->{'privs'}}; |
return; |
return; |
} |
} |
} |
} |
Line 1490 sub get_all_courseroles {
|
Line 1662 sub get_all_courseroles {
|
push(@{$courseroles->{$urole}},$usec); |
push(@{$courseroles->{$urole}},$usec); |
} |
} |
} |
} |
|
my $area = '/'.$cdom.'/'.$cnum; |
|
if ($usec ne '') { |
|
$area .= '/'.$usec; |
|
} |
|
if ($role =~ /^cr\//) { |
|
&Apache::lonnet::custom_roleprivs($courseprivs,$urole,$cdom,$cnum,$urole.'.'.$area,$area); |
|
} else { |
|
&Apache::lonnet::standard_roleprivs($courseprivs,$urole,$cdom,$urole.'.'.$area,$cnum,$area); |
|
} |
} |
} |
my %sections_count = &Apache::loncommon::get_sections($cdom,$cnum,['st']); |
my %sections_count = &Apache::loncommon::get_sections($cdom,$cnum,['st']); |
@{$courseroles->{'st'}} = (); |
@{$courseroles->{'st'}} = (); |
|
&Apache::lonnet::standard_roleprivs($courseprivs,'st',$cdom,"st./$cdom/$cnum",$cnum,"/$cdom/$cnum"); |
if (keys(%sections_count) > 0) { |
if (keys(%sections_count) > 0) { |
push(@{$courseroles->{'st'}},keys(%sections_count)); |
push(@{$courseroles->{'st'}},keys(%sections_count)); |
$seccount->{'st'} = scalar(keys(%sections_count)); |
$seccount->{'st'} = scalar(keys(%sections_count)); |
} |
} |
my $rolehash = { |
my $rolehash = { |
'roles' => $courseroles, |
'roles' => $courseroles, |
'seccount' => $seccount, |
'seccount' => $seccount, |
|
'privs' => $courseprivs, |
}; |
}; |
&Apache::lonnet::do_cache_new('getcourseroles',$cdom.'_'.$cnum,$rolehash); |
&Apache::lonnet::do_cache_new('getcourseroles',$cdom.'_'.$cnum,$rolehash); |
return; |
return; |
} |
} |
|
|
sub jump_to_role { |
sub jump_to_role { |
my ($cdom,$cnum,$seccount,$courseroles) = @_; |
my ($cdom,$cnum,$seccount,$courseroles,$courseprivs,$priv) = @_; |
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.', |
orlb => 'Enter a specific section, or leave blank for no section.', |
orlb => 'Enter a specific section, or leave blank for no section.', |
avai => 'Available sections are:', |
avai => 'Available sections are:', |
youe => 'You entered an invalid section choice:', |
youe => 'You entered an invalid section choice:', |
plst => 'Please try again', |
plst => 'Please try again.', |
|
role => 'The role you selected is not permitted to view the current page.', |
|
swit => 'Switch role, but display Main Menu page instead?', |
); |
); |
my $js; |
my $js; |
if (ref($courseroles) eq 'HASH') { |
if (ref($courseroles) eq 'HASH') { |
Line 1536 sub jump_to_role {
|
Line 1721 sub jump_to_role {
|
' numsec['.$i.'] = "'.$seccount->{$items[$i]}.'";'."\n"; |
' numsec['.$i.'] = "'.$seccount->{$items[$i]}.'";'."\n"; |
} |
} |
} |
} |
|
my $checkroles = 0; |
|
if ($priv && ref($courseprivs) eq 'HASH') { |
|
my (%disallowed,%allowed,@disallow); |
|
foreach my $role (sort(keys(%{$courseprivs}))) { |
|
my $trole; |
|
if ($role =~ m{^(.+?)\Q./$cdom/$cnum\E}) { |
|
$trole = $1; |
|
} |
|
if (($trole ne '') && ($trole ne 'cm')) { |
|
if ($courseprivs->{$role} =~ /\Q:$priv\E($|:|\&\w+)/) { |
|
$allowed{$trole} = 1; |
|
} else { |
|
$disallowed{$trole} = 1; |
|
} |
|
} |
|
} |
|
foreach my $trole (keys(%disallowed)) { |
|
unless ($allowed{$trole}) { |
|
push(@disallow,$trole); |
|
} |
|
} |
|
if (@disallow > 0) { |
|
$checkroles = 1; |
|
$js .= " var disallow = new Array('".join("','",@disallow)."');\n". |
|
" var rolecheck = 1;\n"; |
|
} |
|
} |
|
if (!$checkroles) { |
|
$js .= " var disallow = new Array();\n". |
|
" rolecheck = 0;\n"; |
|
} |
return <<"END"; |
return <<"END"; |
<script type="text/javascript"> |
<script type="text/javascript"> |
//<![CDATA[ |
//<![CDATA[ |
Line 1543 function adhocRole(roleitem) {
|
Line 1759 function adhocRole(roleitem) {
|
$js |
$js |
var newrole = document.rolechooser.elements[roleitem].options[document.rolechooser.elements[roleitem].selectedIndex].value; |
var newrole = document.rolechooser.elements[roleitem].options[document.rolechooser.elements[roleitem].selectedIndex].value; |
if (newrole == '') { |
if (newrole == '') { |
return; |
return; |
} |
} |
var fullrole = newrole+'./$cdom/$cnum'; |
var fullrole = newrole+'./$cdom/$cnum'; |
var selidx = ''; |
var selidx = ''; |
Line 1552 function adhocRole(roleitem) {
|
Line 1768 function adhocRole(roleitem) {
|
selidx = i; |
selidx = i; |
} |
} |
} |
} |
|
if (rolecheck > 0) { |
|
for (var i=0; i<disallow.length; i++) { |
|
if (disallow[i] == newrole) { |
|
if (confirm("$lt{'role'}\\n$lt{'swit'}")) { |
|
document.rolechooser.destinationurl.value = '/adm/menu'; |
|
} else { |
|
document.rolechooser.elements[roleitem].selectedIndex = 0; |
|
return; |
|
} |
|
} |
|
} |
|
} |
var secok = 1; |
var secok = 1; |
var secchoice = ''; |
var secchoice = ''; |
if (selidx >= 0) { |
if (selidx >= 0) { |
Line 1589 function adhocRole(roleitem) {
|
Line 1817 function adhocRole(roleitem) {
|
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'); |
Line 1614 function retrieveIndex(item) {
|
Line 1843 function retrieveIndex(item) {
|
END |
END |
} |
} |
|
|
|
sub required_privs { |
|
my $privs = { |
|
'/adm/parmset' => 'opa', |
|
'/adm/courseprefs' => 'opa', |
|
'/adm/whatsnew' => 'whn', |
|
'/adm/populate' => 'cst', |
|
'/adm/trackstudent' => 'vsa', |
|
'/adm/statistics' => 'vgr', |
|
'/adm/setblock' => 'dcm', |
|
'/adm/coursedocs' => 'mdc', |
|
}; |
|
unless ($env{'course.'.$env{'request.course.id'}.'.grading'} eq 'spreadsheet') { |
|
$privs->{'/adm/classcalc'} = 'vgr', |
|
$privs->{'/adm/assesscalc'} = 'vgr', |
|
$privs->{'/adm/studentcalc'} = 'vgr'; |
|
} |
|
return $privs; |
|
} |
|
|
# ================================================================ Main Program |
# ================================================================ Main Program |
|
|