version 1.1378, 2022/05/24 16:23:03
|
version 1.1392, 2022/10/21 21:18:56
|
Line 61 use POSIX qw(strftime mktime);
|
Line 61 use POSIX qw(strftime mktime);
|
use Apache::lonmenu(); |
use Apache::lonmenu(); |
use Apache::lonenc(); |
use Apache::lonenc(); |
use Apache::lonlocal; |
use Apache::lonlocal; |
use Apache::lonnet(); |
use Apache::lonnavmaps(); |
use HTML::Entities; |
use HTML::Entities; |
use Apache::lonhtmlcommon(); |
use Apache::lonhtmlcommon(); |
use Apache::loncoursedata(); |
use Apache::loncoursedata(); |
Line 957 ENDSCRT
|
Line 957 ENDSCRT
|
} |
} |
|
|
sub select_timezone { |
sub select_timezone { |
my ($name,$selected,$onchange,$includeempty,$disabled)=@_; |
my ($name,$selected,$onchange,$includeempty,$id,$disabled)=@_; |
my $output='<select name="'.$name.'" '.$onchange.$disabled.'>'."\n"; |
my $output='<select name="'.$name.'" '.$id.$onchange.$disabled.'>'."\n"; |
if ($includeempty) { |
if ($includeempty) { |
$output .= '<option value=""'; |
$output .= '<option value=""'; |
if (($selected eq '') || ($selected eq 'local')) { |
if (($selected eq '') || ($selected eq 'local')) { |
Line 1257 END
|
Line 1257 END
|
|
|
=pod |
=pod |
|
|
=item * &help_open_topic($topic,$text,$stayOnPage,$width,$height,$imgid) |
=item * &help_open_topic($topic,$text,$stayOnPage,$width,$height,$imgid,$links_target) |
|
|
Returns a string corresponding to an HTML link to the given help |
Returns a string corresponding to an HTML link to the given help |
$topic, where $topic corresponds to the name of a .tex file in |
$topic, where $topic corresponds to the name of a .tex file in |
Line 1281 $imgid is the id of the img tag used for
|
Line 1281 $imgid is the id of the img tag used for
|
used in a javascript call to switch the image src. See |
used in a javascript call to switch the image src. See |
lonhtmlcommon::htmlareaselectactive() for an example. |
lonhtmlcommon::htmlareaselectactive() for an example. |
|
|
|
$links_target will optionally be set to a target (_top, _parent or _self). |
|
|
=cut |
=cut |
|
|
sub help_open_topic { |
sub help_open_topic { |
my ($topic, $text, $stayOnPage, $width, $height, $imgid) = @_; |
my ($topic, $text, $stayOnPage, $width, $height, $imgid, $links_target) = @_; |
$text = "" if (not defined $text); |
$text = "" if (not defined $text); |
$stayOnPage = 0 if (not defined $stayOnPage); |
$stayOnPage = 0 if (not defined $stayOnPage); |
$width = 500 if (not defined $width); |
$width = 500 if (not defined $width); |
Line 1307 sub help_open_topic {
|
Line 1309 sub help_open_topic {
|
|
|
# Add the text |
# Add the text |
my $target = ' target="_top"'; |
my $target = ' target="_top"'; |
if (($env{'request.lti.login'}) && ($env{'request.lti.target'} eq 'iframe')) { |
if ($links_target) { |
|
$target = ' target="'.$links_target.'"'; |
|
} elsif ((($env{'request.lti.login'}) && ($env{'request.lti.target'} eq 'iframe')) || |
|
(($env{'request.deeplink.login'}) && ($env{'request.deeplink.target'} eq '_self'))) { |
$target = ''; |
$target = ''; |
} |
} |
if (($env{'request.deeplink.login'}) && ($env{'request.deeplink.target'})) { |
if ($text ne "") { |
$target = ' target="'.$env{'request.deeplink.target'}.'"'; |
|
} |
|
if ($text ne "") { |
|
$template.='<span class="LC_help_open_topic">' |
$template.='<span class="LC_help_open_topic">' |
.'<a'.$target.' href="'.$link.'">' |
.'<a'.$target.' href="'.$link.'">' |
.$text.'</a>'; |
.$text.'</a>'; |
Line 1398 ENDOUTPUT
|
Line 1400 ENDOUTPUT
|
|
|
# now just updates the help link and generates a blue icon |
# now just updates the help link and generates a blue icon |
sub help_open_menu { |
sub help_open_menu { |
my ($topic,$component_help,$faq,$bug,$stayOnPage,$width,$height,$text) |
my ($topic,$component_help,$faq,$bug,$stayOnPage,$width,$height,$text,$links_target) |
= @_; |
= @_; |
$stayOnPage = 1; |
$stayOnPage = 1; |
my $output; |
my $output; |
if ($component_help) { |
if ($component_help) { |
if (!$text) { |
if (!$text) { |
$output=&help_open_topic($component_help,undef,$stayOnPage, |
$output=&help_open_topic($component_help,undef,$stayOnPage, |
$width,$height); |
$width,$height,'',$links_target); |
} else { |
} else { |
my $help_text; |
my $help_text; |
$help_text=&unescape($topic); |
$help_text=&unescape($topic); |
$output='<table><tr><td>'. |
$output='<table><tr><td>'. |
&help_open_topic($component_help,$help_text,$stayOnPage, |
&help_open_topic($component_help,$help_text,$stayOnPage, |
$width,$height).'</td></tr></table>'; |
$width,$height,'',$links_target).'</td></tr></table>'; |
} |
} |
} |
} |
my $banner_link = &update_help_link($topic,$component_help,$faq,$bug,$stayOnPage); |
my $banner_link = &update_help_link($topic,$component_help,$faq,$bug,$stayOnPage); |
Line 1519 sub help_open_bug {
|
Line 1521 sub help_open_bug {
|
$link = $url; |
$link = $url; |
} |
} |
|
|
my $target = ' target="_top"'; |
my $target = '_top'; |
if (($env{'request.lti.login'}) && ($env{'request.lti.target'} eq 'iframe')) { |
if ((($env{'request.lti.login'}) && ($env{'request.lti.target'} eq 'iframe')) || |
$target = ''; |
(($env{'request.deeplink.login'}) && ($env{'request.deeplink.target'} eq '_self'))) { |
} |
$target = '_blank'; |
if (($env{'request.deeplink.login'}) && ($env{'request.deeplink.target'})) { |
|
$target = ' target="'.$env{'request.deeplink.target'}.'"'; |
|
} |
} |
|
|
# Add the text |
# Add the text |
if ($text ne "") |
if ($text ne "") |
{ |
{ |
$template .= |
$template .= |
"<table bgcolor='#AA3333' cellspacing='1' cellpadding='1' border='0'><tr>". |
"<table bgcolor='#AA3333' cellspacing='1' cellpadding='1' border='0'><tr>". |
"<td bgcolor='#FF5555'><a".$target." href=\"$link\"><span style=\"color:#FFFFFF;font-size:10pt;\">$text</span></a>"; |
"<td bgcolor='#FF5555'><a target=\"$target\" href=\"$link\"><span style=\"color:#FFFFFF;font-size:10pt;\">$text</span></a>"; |
} |
} |
|
|
# Add the graphic |
# Add the graphic |
my $title = &mt('Report a Bug'); |
my $title = &mt('Report a Bug'); |
my $bugicon=&lonhttpdurl("/adm/lonMisc/smallBug.gif"); |
my $bugicon=&lonhttpdurl("/adm/lonMisc/smallBug.gif"); |
$template .= <<"ENDTEMPLATE"; |
$template .= <<"ENDTEMPLATE"; |
<a$target href="$link" title="$title"><img src="$bugicon" border="0" alt="(Bug: $topic)" /></a> |
<a target="$target" href="$link" title="$title"><img src="$bugicon" border="0" alt="(Bug: $topic)" /></a> |
ENDTEMPLATE |
ENDTEMPLATE |
if ($text ne '') { $template.='</td></tr></table>' }; |
if ($text ne '') { $template.='</td></tr></table>' }; |
return $template; |
return $template; |
Line 5997 sub get_domainconf {
|
Line 5998 sub get_domainconf {
|
foreach my $host (keys(%{$domconfig{'login'}{$key}})) { |
foreach my $host (keys(%{$domconfig{'login'}{$key}})) { |
if (ref($domconfig{'login'}{$key}{$host}) eq 'HASH') { |
if (ref($domconfig{'login'}{$key}{$host}) eq 'HASH') { |
$designhash{$udom.'.login.'.$key.'_'.$host} = 1; |
$designhash{$udom.'.login.'.$key.'_'.$host} = 1; |
foreach my $item ('text','img','alt','url','title','notsso') { |
foreach my $item ('text','img','alt','url','title','window','notsso') { |
$designhash{$udom.'.login.'.$key.'_'.$item.'_'.$host} = $domconfig{'login'}{$key}{$host}{$item}; |
$designhash{$udom.'.login.'.$key.'_'.$item.'_'.$host} = $domconfig{'login'}{$key}{$host}{$item}; |
} |
} |
} |
} |
Line 6230 sub head_subbox {
|
Line 6231 sub head_subbox {
|
Input: (optional) filename from which breadcrumb trail is built. |
Input: (optional) filename from which breadcrumb trail is built. |
In most cases no input as needed, as $env{'request.filename'} |
In most cases no input as needed, as $env{'request.filename'} |
is appropriate for use in building the breadcrumb trail. |
is appropriate for use in building the breadcrumb trail. |
|
frameset flag |
|
If page header is being requested for use in a frameset, then |
|
the second (option) argument -- frameset will be true, and |
|
the target attribute set for links should be target="_parent". |
|
|
Returns: HTML div with CSTR path and recent box |
Returns: HTML div with CSTR path and recent box |
To be included on Authoring Space pages |
To be included on Authoring Space pages |
Line 6237 Returns: HTML div with CSTR path and rec
|
Line 6242 Returns: HTML div with CSTR path and rec
|
=cut |
=cut |
|
|
sub CSTR_pageheader { |
sub CSTR_pageheader { |
my ($trailfile) = @_; |
my ($trailfile,$frameset) = @_; |
if ($trailfile eq '') { |
if ($trailfile eq '') { |
$trailfile = $env{'request.filename'}; |
$trailfile = $env{'request.filename'}; |
} |
} |
Line 6270 sub CSTR_pageheader {
|
Line 6275 sub CSTR_pageheader {
|
$title = &mt('Authoring Space'); |
$title = &mt('Authoring Space'); |
} |
} |
|
|
my ($target,$crumbtarget) = (' target="_top"','_top'); #FIXME lonpubdir: target="_parent" |
my ($target,$crumbtarget) = (' target="_top"','_top'); |
if (($env{'request.lti.login'}) && ($env{'request.lti.target'} eq 'iframe')) { |
if ($frameset) { |
|
$target = ' target="_parent"'; |
|
$crumbtarget = '_parent'; |
|
} elsif (($env{'request.lti.login'}) && ($env{'request.lti.target'} eq 'iframe')) { |
$target = ''; |
$target = ''; |
$crumbtarget = ''; |
$crumbtarget = ''; |
} |
} elsif (($env{'request.deeplink.login'}) && ($env{'request.deeplink.target'})) { |
if (($env{'request.deeplink.login'}) && ($env{'request.deeplink.target'})) { |
|
$target = ' target="'.$env{'request.deeplink.target'}.'"'; |
$target = ' target="'.$env{'request.deeplink.target'}.'"'; |
$crumbtarget = $env{'request.deeplink.target'}; |
$crumbtarget = $env{'request.deeplink.target'}; |
} |
} |
Line 6295 sub CSTR_pageheader {
|
Line 6302 sub CSTR_pageheader {
|
} |
} |
|
|
if ($crsauthor) { |
if ($crsauthor) { |
$output .= '</form>'.&Apache::lonmenu::constspaceform(); |
$output .= '</form>'.&Apache::lonmenu::constspaceform($frameset); |
} else { |
} else { |
$output .= |
$output .= |
'<br />' |
'<br />' |
#FIXME lonpubdir: &Apache::lonhtmlcommon::crumbs($uname.$thisdisfn.'/',$crumbtarget,'/priv','','+1',1)."</b></tt><br />" |
#FIXME lonpubdir: &Apache::lonhtmlcommon::crumbs($uname.$thisdisfn.'/',$crumbtarget,'/priv','','+1',1)."</b></tt><br />" |
.&Apache::lonhtmlcommon::select_recent('construct','recent','this.form.action=this.form.recent.value;this.form.submit()') |
.&Apache::lonhtmlcommon::select_recent('construct','recent','this.form.action=this.form.recent.value;this.form.submit()') |
.'</form>' |
.'</form>' |
.&Apache::lonmenu::constspaceform(); |
.&Apache::lonmenu::constspaceform($frameset); |
} |
} |
$output .= '</div>'; |
$output .= '</div>'; |
|
|
Line 6370 Inputs:
|
Line 6377 Inputs:
|
context, this will contain a reference to hash of items |
context, this will contain a reference to hash of items |
to be included in the page header and/or inline menu. |
to be included in the page header and/or inline menu. |
|
|
|
=item * $menucoll, optional argument, if specific menu collection is in |
|
effect, either set as the default for the course, or set for |
|
the deeplink paramater for $env{'request.deeplink.login'} |
|
then $menucoll will be the number of that collection. |
|
|
|
=item * $menuref, optional argument, reference to a hash, containing the |
|
menu options included for the menu in effect, based on the |
|
configuration for the numbered menu collection in use. |
|
|
|
=item * $showncrumbsref, reference to a scalar. Calls to lonmenu::innerregister |
|
within &bodytag() can result in calls to lonhtmlcommon::breadcrumbs(), |
|
if so, $showncrumbsref is set there to 1, and will propagate back |
|
via &bodytag() to &start_page(), to prevent lonhtmlcommon::breadcrumbs() |
|
being called a second time. |
|
|
=back |
=back |
|
|
Returns: A uniform header for LON-CAPA web pages. |
Returns: A uniform header for LON-CAPA web pages. |
Line 6382 other decorations will be returned.
|
Line 6404 other decorations will be returned.
|
sub bodytag { |
sub bodytag { |
my ($title,$function,$addentries,$bodyonly,$domain,$forcereg, |
my ($title,$function,$addentries,$bodyonly,$domain,$forcereg, |
$no_nav_bar,$bgcolor,$args,$advtoolsref,$ltiscope,$ltiuri, |
$no_nav_bar,$bgcolor,$args,$advtoolsref,$ltiscope,$ltiuri, |
$ltimenu,$menucoll,$menuref)=@_; |
$ltimenu,$menucoll,$menuref,$showncrumbsref)=@_; |
|
|
my $public; |
my $public; |
if ((($env{'user.name'} eq 'public') && ($env{'user.domain'} eq 'public')) |
if ((($env{'user.name'} eq 'public') && ($env{'user.domain'} eq 'public')) |
Line 6522 sub bodytag {
|
Line 6544 sub bodytag {
|
|
|
unless ($args->{'no_primary_menu'}) { |
unless ($args->{'no_primary_menu'}) { |
my ($left,$right) = Apache::lonmenu::primary_menu($crstype,$ltimenu,$menucoll,$menuref, |
my ($left,$right) = Apache::lonmenu::primary_menu($crstype,$ltimenu,$menucoll,$menuref, |
$args->{'links_disabled'}); |
$args->{'links_disabled'}, |
|
$args->{'links_target'}); |
|
|
if ($env{'request.noversionuri'} =~ m{^/res/adm/pages/}) { |
if ($env{'request.noversionuri'} =~ m{^/res/adm/pages/}) { |
if ($dc_info) { |
if ($dc_info) { |
Line 6555 sub bodytag {
|
Line 6578 sub bodytag {
|
$bodytag .= Apache::lonmenu::secondary_menu($httphost,$ltiscope,$ltimenu, |
$bodytag .= Apache::lonmenu::secondary_menu($httphost,$ltiscope,$ltimenu, |
$args->{'no_primary_menu'}, |
$args->{'no_primary_menu'}, |
$menucoll,$menuref, |
$menucoll,$menuref, |
$args->{'links_disabled'}); |
$args->{'links_disabled'}, |
|
$args->{'links_target'}); |
} |
} |
$bodytag .= Apache::lonmenu::serverform(); |
$bodytag .= Apache::lonmenu::serverform(); |
$bodytag .= Apache::lonhtmlcommon::scripttag('', 'end'); |
$bodytag .= Apache::lonhtmlcommon::scripttag('', 'end'); |
if ($env{'request.state'} eq 'construct') { |
if ($env{'request.state'} eq 'construct') { |
$bodytag .= &Apache::lonmenu::innerregister($forcereg, |
$bodytag .= &Apache::lonmenu::innerregister($forcereg, |
$args->{'bread_crumbs'},'','',$hostname,$ltiscope,$ltiuri); |
$args->{'bread_crumbs'},'','',$hostname, |
|
$ltiscope,$ltiuri,$showncrumbsref); |
} elsif ($forcereg) { |
} elsif ($forcereg) { |
$bodytag .= &Apache::lonmenu::innerregister($forcereg,undef, |
$bodytag .= &Apache::lonmenu::innerregister($forcereg,undef, |
$args->{'group'}, |
$args->{'group'},$args->{'hide_buttons'}, |
$args->{'hide_buttons'}, |
$hostname,$ltiscope,$ltiuri,$showncrumbsref); |
$hostname,$ltiscope,$ltiuri); |
|
} else { |
} else { |
$bodytag .= |
$bodytag .= |
&Apache::lonmenu::prepare_functions($env{'request.noversionuri'}, |
&Apache::lonmenu::prepare_functions($env{'request.noversionuri'}, |
Line 6650 sub endbodytag {
|
Line 6674 sub endbodytag {
|
} |
} |
if ( exists( $env{'internal.head.redirect'} ) ) { |
if ( exists( $env{'internal.head.redirect'} ) ) { |
if (!(ref($args) eq 'HASH' && $args->{'noredirectlink'})) { |
if (!(ref($args) eq 'HASH' && $args->{'noredirectlink'})) { |
|
my ($endbodyjs,$idattr); |
|
if ($env{'internal.head.to_opener'}) { |
|
my $linkid = 'LC_continue_link'; |
|
$idattr = ' id="'.$linkid.'"'; |
|
my $redirect_for_js = &js_escape($env{'internal.head.redirect'}); |
|
$endbodyjs=<<ENDJS; |
|
<script type="text/javascript"> |
|
// <![CDATA[ |
|
function ebFunction(evt) { |
|
evt.preventDefault(); |
|
var dest = '$redirect_for_js'; |
|
if (window.opener != null && !window.opener.closed) { |
|
window.opener.location.href=dest; |
|
window.close(); |
|
} else { |
|
window.location.href=dest; |
|
} |
|
return false; |
|
} |
|
|
|
\$(document).ready(function () { |
|
if (document.getElementById('$linkid')) { |
|
var clickelem = document.getElementById('$linkid'); |
|
clickelem.addEventListener('click',ebFunction,false); |
|
} |
|
}); |
|
// ]]> |
|
</script> |
|
ENDJS |
|
} |
$endbodytag= |
$endbodytag= |
"<br /><a href=\"$env{'internal.head.redirect'}\">". |
"$endbodyjs<br /><a href=\"$env{'internal.head.redirect'}\"$idattr>". |
&mt('Continue').'</a>'. |
&mt('Continue').'</a>'. |
$endbodytag; |
$endbodytag; |
} |
} |
Line 8515 a#LC_content_toolbar_edittoplevel {
|
Line 8569 a#LC_content_toolbar_edittoplevel {
|
background-image:url(/res/adm/pages/edittoplevel.gif); |
background-image:url(/res/adm/pages/edittoplevel.gif); |
} |
} |
|
|
|
a#LC_content_toolbar_printout { |
|
background-image:url(/res/adm/pages/printout.gif); |
|
} |
|
|
ul#LC_toolbar li a:hover { |
ul#LC_toolbar li a:hover { |
background-position: bottom center; |
background-position: bottom center; |
} |
} |
Line 8817 Inputs: $title - optional title for the
|
Line 8875 Inputs: $title - optional title for the
|
3- whether the side effect should occur |
3- whether the side effect should occur |
(side effect of setting |
(side effect of setting |
$env{'internal.head.redirect'} to the url |
$env{'internal.head.redirect'} to the url |
redirected too) |
redirected to) |
|
4- whether the redirect target should be |
|
the opener of the current (pop-up) |
|
window (side effect of setting |
|
$env{'internal.head.to_opener'} to |
|
1, if true. |
|
5- whether encrypt check should be skipped |
domain -> force to color decorate a page for a specific |
domain -> force to color decorate a page for a specific |
domain |
domain |
function -> force usage of a specific rolish color scheme |
function -> force usage of a specific rolish color scheme |
Line 8880 sub headtag {
|
Line 8944 sub headtag {
|
} |
} |
} |
} |
if (ref($args->{'redirect'})) { |
if (ref($args->{'redirect'})) { |
my ($time,$url,$inhibit_continue) = @{$args->{'redirect'}}; |
my ($time,$url,$inhibit_continue,$to_opener,$skip_enc_check) = @{$args->{'redirect'}}; |
$url = &Apache::lonenc::check_encrypt($url); |
if (!$skip_enc_check) { |
|
$url = &Apache::lonenc::check_encrypt($url); |
|
} |
if (!$inhibit_continue) { |
if (!$inhibit_continue) { |
$env{'internal.head.redirect'} = $url; |
$env{'internal.head.redirect'} = $url; |
} |
} |
$result.=<<ADDMETA |
$result.=<<"ADDMETA"; |
<meta http-equiv="pragma" content="no-cache" /> |
<meta http-equiv="pragma" content="no-cache" /> |
|
ADDMETA |
|
if ($to_opener) { |
|
$env{'internal.head.to_opener'} = 1; |
|
my $dest = &js_escape($url); |
|
my $timeout = int($time * 1000); |
|
$result .=<<"ENDJS"; |
|
<script type="text/javascript"> |
|
// <![CDATA[ |
|
function LC_To_Opener() { |
|
var dest = '$dest'; |
|
if (dest != '') { |
|
if (window.opener != null && !window.opener.closed) { |
|
window.opener.location.href=dest; |
|
window.close(); |
|
} else { |
|
window.location.href=dest; |
|
} |
|
} |
|
} |
|
\$(document).ready(function () { |
|
setTimeout('LC_To_Opener()',$timeout); |
|
}); |
|
// ]]> |
|
</script> |
|
ENDJS |
|
} else { |
|
$result.=<<"ADDMETA"; |
<meta http-equiv="Refresh" content="$time; url=$url" /> |
<meta http-equiv="Refresh" content="$time; url=$url" /> |
ADDMETA |
ADDMETA |
|
} |
} else { |
} else { |
unless (($args->{'frameset'}) || ($args->{'js_ready'}) || ($args->{'only_body'}) || ($args->{'no_nav_bar'})) { |
unless (($args->{'frameset'}) || ($args->{'js_ready'}) || ($args->{'only_body'}) || ($args->{'no_nav_bar'})) { |
my $requrl = $env{'request.uri'}; |
my $requrl = $env{'request.uri'}; |
Line 9236 $args - additional optional args support
|
Line 9330 $args - additional optional args support
|
links_disabled -> Links in primary and secondary menus are disabled |
links_disabled -> Links in primary and secondary menus are disabled |
(Can enable them once page has loaded - see lonroles.pm |
(Can enable them once page has loaded - see lonroles.pm |
for an example). |
for an example). |
|
links_target -> Target for links, e.g., _parent (optional). |
|
|
=back |
=back |
|
|
Line 9324 sub start_page {
|
Line 9419 sub start_page {
|
} |
} |
} |
} |
|
|
|
my $showncrumbs; |
if (! exists($args->{'skip_phases'}{'body'}) ) { |
if (! exists($args->{'skip_phases'}{'body'}) ) { |
if ($args->{'frameset'}) { |
if ($args->{'frameset'}) { |
my $attr_string = &make_attr_string($args->{'force_register'}, |
my $attr_string = &make_attr_string($args->{'force_register'}, |
Line 9336 sub start_page {
|
Line 9432 sub start_page {
|
$args->{'only_body'}, $args->{'domain'}, |
$args->{'only_body'}, $args->{'domain'}, |
$args->{'force_register'}, $args->{'no_nav_bar'}, |
$args->{'force_register'}, $args->{'no_nav_bar'}, |
$args->{'bgcolor'}, $args, |
$args->{'bgcolor'}, $args, |
\@advtools,$ltiscope,$ltiuri,\%ltimenu,$menucoll,\%menu); |
\@advtools,$ltiscope,$ltiuri,\%ltimenu,$menucoll, |
|
\%menu,\$showncrumbs); |
} |
} |
} |
} |
|
|
Line 9358 sub start_page {
|
Line 9455 sub start_page {
|
|
|
#Breadcrumbs |
#Breadcrumbs |
if (exists($args->{'bread_crumbs'}) or exists($args->{'bread_crumbs_component'})) { |
if (exists($args->{'bread_crumbs'}) or exists($args->{'bread_crumbs_component'})) { |
|
unless ($showncrumbs) { |
&Apache::lonhtmlcommon::clear_breadcrumbs(); |
&Apache::lonhtmlcommon::clear_breadcrumbs(); |
#if any br links exists, add them to the breadcrumbs |
#if any br links exists, add them to the breadcrumbs |
if (exists($args->{'bread_crumbs'}) and ref($args->{'bread_crumbs'}) eq 'ARRAY') { |
if (exists($args->{'bread_crumbs'}) and ref($args->{'bread_crumbs'}) eq 'ARRAY') { |
Line 9380 sub start_page {
|
Line 9478 sub start_page {
|
} else { |
} else { |
undef($menulink); |
undef($menulink); |
} |
} |
|
my $linkprotout; |
|
if ($env{'request.deeplink.login'}) { |
|
my $linkprotout = &Apache::lonmenu::linkprot_exit(); |
|
if ($linkprotout) { |
|
&Apache::lonhtmlcommon::add_breadcrumb_tool('tools',$linkprotout); |
|
} |
|
} |
#if bread_crumbs_component exists show it as headline else show only the breadcrumbs |
#if bread_crumbs_component exists show it as headline else show only the breadcrumbs |
if(exists($args->{'bread_crumbs_component'})){ |
if(exists($args->{'bread_crumbs_component'})){ |
$result .= &Apache::lonhtmlcommon::breadcrumbs($args->{'bread_crumbs_component'},'',$menulink); |
$result .= &Apache::lonhtmlcommon::breadcrumbs($args->{'bread_crumbs_component'},'',$menulink); |
} else { |
} else { |
$result .= &Apache::lonhtmlcommon::breadcrumbs('','',$menulink); |
$result .= &Apache::lonhtmlcommon::breadcrumbs('','',$menulink); |
} |
} |
|
} |
} |
} |
return $result; |
return $result; |
} |
} |
Line 14181 sub process_extracted_files {
|
Line 14287 sub process_extracted_files {
|
my $url = '/uploaded/'.$docudom.'/'.$docuname.'/'. |
my $url = '/uploaded/'.$docudom.'/'.$docuname.'/'. |
$docstype.'/'.$mapinner{$outer}.'/'.$newidx.'/'. |
$docstype.'/'.$mapinner{$outer}.'/'.$newidx.'/'. |
$title; |
$title; |
if (($outer !~ /\D/) && ($mapinner{$outer} !~ /\D/) && ($newidx !~ /\D/)) { |
if (($outer !~ /\D/) && |
|
(($mapinner{$outer} eq 'default') || ($mapinner{$outer} !~ /\D/)) && |
|
($newidx !~ /\D/)) { |
if (!-e "$prefix$dir/$docstype/$mapinner{$outer}") { |
if (!-e "$prefix$dir/$docstype/$mapinner{$outer}") { |
mkdir("$prefix$dir/$docstype/$mapinner{$outer}",0755); |
mkdir("$prefix$dir/$docstype/$mapinner{$outer}",0755); |
} |
} |
Line 17341 sub init_user_environment {
|
Line 17449 sub init_user_environment {
|
my %is_adv = ( is_adv => $env{'user.adv'} ); |
my %is_adv = ( is_adv => $env{'user.adv'} ); |
my %domdef = &Apache::lonnet::get_domain_defaults($domain); |
my %domdef = &Apache::lonnet::get_domain_defaults($domain); |
|
|
foreach my $tool ('aboutme','blog','webdav','portfolio') { |
foreach my $tool ('aboutme','blog','webdav','portfolio','timezone') { |
$userenv{'availabletools.'.$tool} = |
$userenv{'availabletools.'.$tool} = |
&Apache::lonnet::usertools_access($username,$domain,$tool,'reload', |
&Apache::lonnet::usertools_access($username,$domain,$tool,'reload', |
undef,\%userenv,\%domdef,\%is_adv); |
undef,\%userenv,\%domdef,\%is_adv); |
Line 18214 sub needs_coursereinit {
|
Line 18322 sub needs_coursereinit {
|
if ($blocked) { |
if ($blocked) { |
return (); |
return (); |
} |
} |
my $lastchange = &Apache::lonnet::get_coursechange($cdom,$cnum); |
my $update; |
if ($lastchange > $env{'request.course.tied'}) { |
my $lastmainchange = &Apache::lonnet::get_coursechange($cdom,$cnum); |
my %curr_reqd_hash = &Apache::lonnet::userenvironment($cdom,$cnum,'internal.releaserequired'); |
my $lastsuppchange = &Apache::lonnet::get_suppchange($cdom,$cnum); |
if ($curr_reqd_hash{'internal.releaserequired'} ne '') { |
if ($lastmainchange > $env{'request.course.tied'}) { |
my $required = $env{'course.'.$cdom.'_'.$cnum.'.internal.releaserequired'}; |
my ($needswitch,$switchwarning,$switchserver) = &switch_for_update($loncaparev,$cdom,$cnum); |
if ($curr_reqd_hash{'internal.releaserequired'} ne $required) { |
if ($needswitch) { |
&Apache::lonnet::appenv({'course.'.$cdom.'_'.$cnum.'.internal.releaserequired' => |
return ('switch',$switchwarning,$switchserver); |
$curr_reqd_hash{'internal.releaserequired'}}); |
} |
my ($switchserver,$switchwarning) = |
$update = 'main'; |
&check_release_required($loncaparev,$cdom.'_'.$cnum,$env{'request.role'}, |
} |
$curr_reqd_hash{'internal.releaserequired'}); |
if ($lastsuppchange > $env{'request.course.suppupdated'}) { |
if ($switchwarning ne '' || $switchserver ne '') { |
if ($update) { |
return ('switch',$switchwarning,$switchserver); |
$update = 'both'; |
} |
} else { |
|
my ($needswitch,$switchwarning,$switchserver) = &switch_for_update($loncaparev,$cdom,$cnum); |
|
if ($needswitch) { |
|
return ('switch',$switchwarning,$switchserver); |
|
} else { |
|
$update = 'supp'; |
} |
} |
} |
} |
return ('update'); |
return ($update); |
|
} |
|
} |
|
return (); |
|
} |
|
|
|
sub switch_for_update { |
|
my ($loncaparev,$cdom,$cnum) = @_; |
|
my %curr_reqd_hash = &Apache::lonnet::userenvironment($cdom,$cnum,'internal.releaserequired'); |
|
if ($curr_reqd_hash{'internal.releaserequired'} ne '') { |
|
my $required = $env{'course.'.$cdom.'_'.$cnum.'.internal.releaserequired'}; |
|
if ($curr_reqd_hash{'internal.releaserequired'} ne $required) { |
|
&Apache::lonnet::appenv({'course.'.$cdom.'_'.$cnum.'.internal.releaserequired' => |
|
$curr_reqd_hash{'internal.releaserequired'}}); |
|
my ($switchserver,$switchwarning) = |
|
&check_release_required($loncaparev,$cdom.'_'.$cnum,$env{'request.role'}, |
|
$curr_reqd_hash{'internal.releaserequired'}); |
|
if ($switchwarning ne '' || $switchserver ne '') { |
|
return ('switch',$switchwarning,$switchserver); |
|
} |
} |
} |
} |
} |
return (); |
return (); |
Line 18293 sub update_content_constraints {
|
Line 18425 sub update_content_constraints {
|
@resparms = @LONCAPA::map::resparms; |
@resparms = @LONCAPA::map::resparms; |
@zombies = @LONCAPA::map::zombies; |
@zombies = @LONCAPA::map::zombies; |
} |
} |
my $suppmap = 'supplemental.sequence'; |
|
my ($suppcount,$supptools,$errors) = (0,0,0); |
|
($suppcount,$supptools,$errors) = &recurse_supplemental($cnum,$cdom,$suppmap, |
|
$suppcount,$supptools,$errors); |
|
if ($keeporder) { |
if ($keeporder) { |
@LONCAPA::map::resources = @resources; |
@LONCAPA::map::resources = @resources; |
@LONCAPA::map::order = @order; |
@LONCAPA::map::order = @order; |
@LONCAPA::map::resparms = @resparms; |
@LONCAPA::map::resparms = @resparms; |
@LONCAPA::map::zombies = @zombies; |
@LONCAPA::map::zombies = @zombies; |
} |
} |
if ($supptools) { |
if (&Apache::lonnet::count_supptools($cnum,$cdom,1)) { |
my ($major,$minor) = split(/\./,$checkcrsrestypes{'exttool'}); |
my ($major,$minor) = split(/\./,$checkcrsrestypes{'exttool'}); |
if (($major > $reqdmajor) || ($major == $reqdmajor && $minor > $reqdminor)) { |
if (($major > $reqdmajor) || ($major == $reqdmajor && $minor > $reqdminor)) { |
($reqdmajor,$reqdminor) = ($major,$minor); |
($reqdmajor,$reqdminor) = ($major,$minor); |
Line 18365 sub parse_supplemental_title {
|
Line 18493 sub parse_supplemental_title {
|
} |
} |
|
|
sub recurse_supplemental { |
sub recurse_supplemental { |
my ($cnum,$cdom,$suppmap,$numfiles,$numexttools,$errors) = @_; |
my ($cnum,$cdom,$suppmap,$errors,$possdel,$suppids,$hiddensupp,$hidden) = @_; |
if ($suppmap) { |
if (($suppmap) && (ref($suppids) eq 'HASH') && (ref($hiddensupp) eq 'HASH')) { |
|
my $mapnum; |
|
if ($suppmap eq 'supplemental.sequence') { |
|
$mapnum = 0; |
|
} else { |
|
($mapnum) = ($suppmap =~ /^supplemental_(\d+)\.sequence$/); |
|
} |
my ($errtext,$fatal) = &LONCAPA::map::mapread('/uploaded/'.$cdom.'/'.$cnum.'/'.$suppmap); |
my ($errtext,$fatal) = &LONCAPA::map::mapread('/uploaded/'.$cdom.'/'.$cnum.'/'.$suppmap); |
if ($fatal) { |
if ($fatal) { |
$errors ++; |
$errors ++; |
} else { |
} else { |
if ($#LONCAPA::map::resources > 0) { |
my @order = @LONCAPA::map::order; |
foreach my $res (@LONCAPA::map::resources) { |
if (@order > 0) { |
my ($title,$src,$ext,$type,$status)=split(/\:/,$res); |
my @resources = @LONCAPA::map::resources; |
|
my @resparms = @LONCAPA::map::resparms; |
|
foreach my $idx (@order) { |
|
my ($title,$src,$ext,$type,$status)=split(/\:/,$resources[$idx]); |
if (($src ne '') && ($status eq 'res')) { |
if (($src ne '') && ($status eq 'res')) { |
|
my $id = $mapnum.':'.$idx; |
|
push(@{$suppids->{$src}},$id); |
|
if (($hidden) || (&get_supp_parameter($resparms[$idx],'parameter_hiddenresource') =~ /^yes/i)) { |
|
$hiddensupp->{$id} = 1; |
|
} |
if ($src =~ m{^\Q/uploaded/$cdom/$cnum/\E(supplemental_\d+\.sequence)$}) { |
if ($src =~ m{^\Q/uploaded/$cdom/$cnum/\E(supplemental_\d+\.sequence)$}) { |
($numfiles,$numexttools,$errors) = &recurse_supplemental($cnum,$cdom,$1, |
$errors = &recurse_supplemental($cnum,$cdom,$1,$errors,$possdel,$suppids, |
$numfiles,$numexttools,$errors); |
$hiddensupp,$hiddensupp->{$id}); |
} else { |
} else { |
if ($src =~ m{^/adm/$cdom/$cnum/\d+/ext\.tool$}) { |
my $allowed; |
$numexttools ++; |
if (($env{'request.role.adv'}) || (!$hiddensupp->{$id})) { |
|
$allowed = 1; |
|
} elsif ($possdel) { |
|
foreach my $item (@{$suppids->{$src}}) { |
|
next if ($item eq $id); |
|
unless ($hiddensupp->{$item}) { |
|
$allowed = 1; |
|
last; |
|
} |
|
} |
|
if ((!$allowed) && (exists($env{'httpref.'.$src}))) { |
|
&Apache::lonnet::delenv('httpref.'.$src); |
|
} |
|
} |
|
if ($allowed && (!exists($env{'httpref.'.$src}))) { |
|
&Apache::lonnet::allowuploaded('/adm/coursedoc',$src); |
} |
} |
$numfiles ++; |
|
} |
} |
} |
} |
} |
} |
} |
} |
} |
} |
} |
} |
return ($numfiles,$numexttools,$errors); |
return $errors; |
|
} |
|
|
|
sub set_supp_httprefs { |
|
my ($cnum,$cdom,$supplemental,$possdel) = @_; |
|
if (ref($supplemental) eq 'HASH') { |
|
if ((ref($supplemental->{'ids'}) eq 'HASH') && (ref($supplemental->{'hidden'}) eq 'HASH')) { |
|
foreach my $src (keys(%{$supplemental->{'ids'}})) { |
|
next if ($src =~ /\.sequence$/); |
|
if (ref($supplemental->{'ids'}->{$src}) eq 'ARRAY') { |
|
my $allowed; |
|
if ($env{'request.role.adv'}) { |
|
$allowed = 1; |
|
} else { |
|
foreach my $id (@{$supplemental->{'ids'}->{$src}}) { |
|
unless ($supplemental->{'hidden'}->{$id}) { |
|
$allowed = 1; |
|
last; |
|
} |
|
} |
|
} |
|
if (exists($env{'httpref.'.$src})) { |
|
if ($possdel) { |
|
unless ($allowed) { |
|
&Apache::lonnet::delenv('httpref.'.$src); |
|
} |
|
} |
|
} elsif ($allowed) { |
|
&Apache::lonnet::allowuploaded('/adm/coursedoc',$src); |
|
} |
|
} |
|
} |
|
if ($env{'request.course.id'} eq $cdom.'_'.$cnum) { |
|
&Apache::lonnet::appenv({'request.course.suppupdated' => time}); |
|
} |
|
} |
|
} |
|
} |
|
|
|
sub get_supp_parameter { |
|
my ($resparm,$name)=@_; |
|
return if ($resparm eq ''); |
|
my $value=undef; |
|
my $ptype=undef; |
|
foreach (split('&&&',$resparm)) { |
|
my ($thistype,$thisname,$thisvalue)=split('___',$_); |
|
if ($thisname eq $name) { |
|
$value=$thisvalue; |
|
$ptype=$thistype; |
|
} |
|
} |
|
return $value; |
} |
} |
|
|
sub symb_to_docspath { |
sub symb_to_docspath { |
Line 18584 sub create_captcha {
|
Line 18791 sub create_captcha {
|
$output = '<input type="hidden" name="crypt" value="'.$md5sum.'" />'."\n". |
$output = '<input type="hidden" name="crypt" value="'.$md5sum.'" />'."\n". |
'<span class="LC_nobreak">'. |
'<span class="LC_nobreak">'. |
&mt('Type in the letters/numbers shown below').' '. |
&mt('Type in the letters/numbers shown below').' '. |
'<input type="text" size="5" name="code" value="" autocomplete="off" />'. |
'<input type="text" size="5" name="code" value="" autocomplete="new-password" />'. |
'</span><br />'. |
'</span><br />'. |
'<img src="'.$captcha_params{'www_output_dir'}.'/'.$md5sum.'.png" alt="captcha" />'; |
'<img src="'.$captcha_params{'www_output_dir'}.'/'.$md5sum.'.png" alt="captcha" />'; |
last; |
last; |