--- loncom/interface/loncommon.pm 2013/06/05 13:25:41 1.1075.2.39
+++ loncom/interface/loncommon.pm 2012/08/14 10:22:25 1.1091
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# a pile of common routines
#
-# $Id: loncommon.pm,v 1.1075.2.39 2013/06/05 13:25:41 raeburn Exp $
+# $Id: loncommon.pm,v 1.1091 2012/08/14 10:22:25 foxr Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -67,13 +67,10 @@ use Apache::lonhtmlcommon();
use Apache::loncoursedata();
use Apache::lontexconvert();
use Apache::lonclonecourse();
-use Apache::lonuserutils();
-use Apache::lonuserstate();
use LONCAPA qw(:DEFAULT :match);
use DateTime::TimeZone;
use DateTime::Locale::Catalog;
-use Authen::Captcha;
-use Captcha::reCAPTCHA;
+use Text::Aspell;
# ---------------------------------------------- Designs
use vars qw(%defaultdesign);
@@ -158,6 +155,7 @@ sub ssi_with_retries {
# ----------------------------------------------- Filetypes/Languages/Copyright
my %language;
my %supported_language;
+my %supported_codes;
my %latex_language; # For choosing hyphenation in
my %latex_language_bykey; # for choosing hyphenation from metadata
my %cprtag;
@@ -192,14 +190,15 @@ BEGIN {
while (my $line = <$fh>) {
next if ($line=~/^\#/);
chomp($line);
- my ($key,$two,$country,$three,$enc,$val,$sup,$latex)=(split(/\t/,$line));
+ my ($key,$code,$country,$three,$enc,$val,$sup,$latex)=(split(/\t/,$line));
$language{$key}=$val.' - '.$enc;
if ($sup) {
$supported_language{$key}=$sup;
+ $supported_codes{$key} = $code;
}
if ($latex) {
$latex_language_bykey{$key} = $latex;
- $latex_language{$two} = $latex;
+ $latex_language{$code} = $latex;
}
}
close($fh);
@@ -528,8 +527,7 @@ ENDAUTHORBRW
}
sub coursebrowser_javascript {
- my ($domainfilter,$sec_element,$formname,$role_element,$crstype,
- $credits_element) = @_;
+ my ($domainfilter,$sec_element,$formname,$role_element,$crstype) = @_;
my $wintitle = 'Course_Browser';
if ($crstype eq 'Community') {
$wintitle = 'Community_Browser';
@@ -592,9 +590,8 @@ sub coursebrowser_javascript {
}
$id_functions
ENDSTDBRW
- if (($sec_element ne '') || ($role_element ne '') || ($credits_element ne '')) {
- $output .= &setsec_javascript($sec_element,$formname,$role_element,
- $credits_element);
+ if (($sec_element ne '') || ($role_element ne '')) {
+ $output .= &setsec_javascript($sec_element,$formname,$role_element);
}
$output .= '
// ]]>
@@ -663,7 +660,7 @@ if (!Array.prototype.indexOf) {
var n = 0;
if (arguments.length > 0) {
n = Number(arguments[1]);
- if (n !== n) { // shortcut for verifying if it's NaN
+ if (n !== n) { // shortcut for verifying if it is NaN
n = 0;
} else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0)) {
n = (n > 0 || -1) * Math.floor(Math.abs(n));
@@ -751,7 +748,7 @@ ENDUSERBRW
}
sub setsec_javascript {
- my ($sec_element,$formname,$role_element,$credits_element) = @_;
+ my ($sec_element,$formname,$role_element) = @_;
my (@courserolenames,@communityrolenames,$rolestr,$courserolestr,
$communityrolestr);
if ($role_element ne '') {
@@ -846,14 +843,6 @@ function setRole(crstype) {
}
|;
}
- if ($credits_element) {
- $setsections .= qq|
-function setCredits(defaultcredits) {
- document.$formname.$credits_element.value = defaultcredits;
- return;
-}
-|;
- }
return $setsections;
}
@@ -899,14 +888,10 @@ sub check_uncheck_jscript {
function checkAll(field) {
if (field.length > 0) {
for (i = 0; i < field.length; i++) {
- if (!field[i].disabled) {
- field[i].checked = true;
- }
+ field[i].checked = true ;
}
} else {
- if (!field.disabled) {
- field.checked = true;
- }
+ field.checked = true
}
}
@@ -1008,12 +993,38 @@ sub select_language {
$langchoices{$code} = &plainlanguagedescription($id);
}
}
- %langchoices = &Apache::lonlocal::texthash(%langchoices);
return &select_form($selected,$name,\%langchoices);
}
=pod
+
+=item * &list_languages()
+
+Returns an array reference that is suitable for use in language prompters.
+Each array element is itself a two element array. The first element
+is the language code. The second element a descsriptiuon of the
+language itself. This is suitable for use in e.g.
+&Apache::edit::select_arg (once dereferenced that is).
+
+=cut
+
+sub list_languages {
+ my @lang_choices;
+
+ foreach my $id (&languageids()) {
+ my $code = &supportedlanguagecode($id);
+ if ($code) {
+ my $selector = $supported_codes{$id};
+ my $description = &plainlanguagedescription($id);
+ push (@lang_choices, [$selector, $description]);
+ }
+ }
+ return \@lang_choices;
+}
+
+=pod
+
=item * &linked_select_forms(...)
linked_select_forms returns a string containing a block
@@ -1040,12 +1051,6 @@ linked_select_forms takes the following
=item * $menuorder, the order of values in the first menu
-=item * $onchangefirst, additional javascript call to execute for an onchange
- event for the first tag
-
-=item * $onchangesecond, additional javascript call to execute for an onchange
- event for the second tag
-
=back
Below is an example of such a hash. Only the 'text', 'default', and
@@ -1099,8 +1104,6 @@ sub linked_select_forms {
$secondselectname,
$hashref,
$menuorder,
- $onchangefirst,
- $onchangesecond
) = @_;
my $second = "document.$formname.$secondselectname";
my $first = "document.$formname.$firstselectname";
@@ -1157,7 +1160,7 @@ function select1_changed() {
END
# output the initial values for the selection lists
- $result .= "\n";
+ $result .= "\n";
my @order = sort(keys(%{$hashref}));
if (ref($menuorder) eq 'ARRAY') {
@order = @{$menuorder};
@@ -1170,11 +1173,7 @@ END
$result .= " \n";
my %select2 = %{$hashref->{$firstdefault}->{'select2'}};
$result .= $middletext;
- $result .= "\n";
my $seconddefault = $hashref->{$firstdefault}->{'default'};
my @secondorder = sort(keys(%select2));
@@ -2161,7 +2160,7 @@ sub select_level_form {
=pod
-=item * &select_dom_form($defdom,$name,$includeempty,$showdomdesc,$onchange,$incdoma,$excdoms)
+=item * &select_dom_form($defdom,$name,$includeempty,$showdomdesc,$onchange,$incdoms)
Returns a string containing a form to
allow a user to select the domain to preform an operation in.
@@ -2174,31 +2173,25 @@ If the $showdomdesc flag is set, the dom
The optional $onchange argument specifies what should occur if the domain selector is changed, e.g., 'this.form.submit()' if the form is to be automatically submitted.
-The optional $incdoms is a reference to an array of domains which will be the only available options.
-
-The optional $excdoms is a reference to an array of domains which will be excluded from the available options.
+The optional $incdoms is a reference to an array of domains which will be the only available options.
=cut
#-------------------------------------------
sub select_dom_form {
- my ($defdom,$name,$includeempty,$showdomdesc,$onchange,$incdoms,$excdoms) = @_;
+ my ($defdom,$name,$includeempty,$showdomdesc,$onchange,$incdoms) = @_;
if ($onchange) {
$onchange = ' onchange="'.$onchange.'"';
}
- my (@domains,%exclude);
+ my @domains;
if (ref($incdoms) eq 'ARRAY') {
@domains = sort {lc($a) cmp lc($b)} (@{$incdoms});
} else {
@domains = sort {lc($a) cmp lc($b)} (&Apache::lonnet::all_domains());
}
if ($includeempty) { @domains=('',@domains); }
- if (ref($excdoms) eq 'ARRAY') {
- map { $exclude{$_} = 1; } @{$excdoms};
- }
my $selectdomain = "\n";
foreach my $dom (@domains) {
- next if ($exclude{$dom});
$selectdomain.="'.$dom;
if ($showdomdesc) {
@@ -2512,7 +2505,7 @@ END
return $result;
}
-sub authform_authorwarning {
+sub authform_authorwarning{
my $result='';
$result=''.
&mt('As a general rule, only authors or co-authors should be '.
@@ -2521,16 +2514,16 @@ sub authform_authorwarning {
return $result;
}
-sub authform_nochange {
+sub authform_nochange{
my %in = (
formname => 'document.cu',
kerb_def_dom => 'MSU.EDU',
@_,
);
- my ($authnum,%can_assign) = &get_assignable_auth($in{'domain'});
+ my ($authnum,%can_assign) = &get_assignable_auth($in{'domain'});
my $result;
- if (!$authnum) {
- $result = &mt('Under your current role you are not permitted to change login settings for this user');
+ if (keys(%can_assign) == 0) {
+ $result = &mt('Under you current role you are not permitted to change login settings for this user');
} else {
$result = ''.&mt('[_1] Do not change login data',
' ';
+ $authtype = ' ';
}
}
}
@@ -2612,9 +2605,9 @@ sub authform_kerberos {
$krbcheck.' />';
}
if (($can_assign{'krb4'} && $can_assign{'krb5'}) ||
- ($can_assign{'krb4'} && !$can_assign{'krb5'} &&
+ ($can_assign{'krb4'} && !$can_assign{'krb5'} &&
$in{'curr_authtype'} eq 'krb5') ||
- (!$can_assign{'krb4'} && $can_assign{'krb5'} &&
+ (!$can_assign{'krb4'} && $can_assign{'krb5'} &&
$in{'curr_authtype'} eq 'krb4')) {
$result .= &mt
('[_1] Kerberos authenticated with domain [_2] '.
@@ -2650,14 +2643,14 @@ sub authform_kerberos {
return $result;
}
-sub authform_internal {
+sub authform_internal{
my %in = (
formname => 'document.cu',
kerb_def_dom => 'MSU.EDU',
@_,
);
my ($intcheck,$intarg,$result,$authtype,$autharg,$jscall);
- my ($authnum,%can_assign) = &get_assignable_auth($in{'domain'});
+ my ($authnum,%can_assign) = &get_assignable_auth($in{'domain'});
if (defined($in{'curr_authtype'})) {
if ($in{'curr_authtype'} eq 'int') {
if ($can_assign{'int'}) {
@@ -2686,7 +2679,7 @@ sub authform_internal {
if (defined($in{'mode'})) {
if ($in{'mode'} eq 'modifycourse') {
if ($authnum == 1) {
- $authtype = ' ';
+ $authtype = ' ';
}
}
}
@@ -2705,14 +2698,14 @@ sub authform_internal {
return $result;
}
-sub authform_local {
+sub authform_local{
my %in = (
formname => 'document.cu',
kerb_def_dom => 'MSU.EDU',
@_,
);
my ($loccheck,$locarg,$result,$authtype,$autharg,$jscall);
- my ($authnum,%can_assign) = &get_assignable_auth($in{'domain'});
+ my ($authnum,%can_assign) = &get_assignable_auth($in{'domain'});
if (defined($in{'curr_authtype'})) {
if ($in{'curr_authtype'} eq 'loc') {
if ($can_assign{'loc'}) {
@@ -2741,7 +2734,7 @@ sub authform_local {
if (defined($in{'mode'})) {
if ($in{'mode'} eq 'modifycourse') {
if ($authnum == 1) {
- $authtype = ' ';
+ $authtype = ' ';
}
}
}
@@ -2759,14 +2752,14 @@ sub authform_local {
return $result;
}
-sub authform_filesystem {
+sub authform_filesystem{
my %in = (
formname => 'document.cu',
kerb_def_dom => 'MSU.EDU',
@_,
);
my ($fsyscheck,$result,$authtype,$autharg,$jscall);
- my ($authnum,%can_assign) = &get_assignable_auth($in{'domain'});
+ my ($authnum,%can_assign) = &get_assignable_auth($in{'domain'});
if (defined($in{'curr_authtype'})) {
if ($in{'curr_authtype'} eq 'fsys') {
if ($can_assign{'fsys'}) {
@@ -2792,7 +2785,7 @@ sub authform_filesystem {
if (defined($in{'mode'})) {
if ($in{'mode'} eq 'modifycourse') {
if ($authnum == 1) {
- $authtype = ' ';
+ $authtype = ' ';
}
}
}
@@ -3023,6 +3016,45 @@ sub get_related_words {
untie %thesaurus_db;
return @Words;
}
+###############################################################
+#
+# Spell checking
+#
+
+=pod
+
+=head1 Spell checking
+
+=over 4
+
+=item * &check_spelling($wordlist $language)
+
+Takes a string containing words and feeds it to an external
+spellcheck program via a pipeline. Returns a string containing
+them mis-spelled words.
+
+Parameters:
+
+=over 4
+
+=item - $wordlist
+
+String that will be fed into the spellcheck program.
+
+=item - $language
+
+Language string that specifies the language for which the spell
+check will be performed.
+
+=back
+
+=back
+
+Note: This sub assumes that aspell is installed.
+
+
+=cut
+
=pod
@@ -3030,6 +3062,31 @@ sub get_related_words {
=cut
+sub check_spelling {
+ my ($wordlist, $language) = @_;
+ my @misspellings;
+
+ # Generate the speller and set the langauge.
+ # if explicitly selected:
+
+ my $speller = Text::Aspell->new;
+ if ($language) {
+ $speller->set_option('lang', $language);
+ }
+
+ # Turn the word list into an array of words by splittingon whitespace
+
+ my @words = split(/\s+/, $wordlist);
+
+ foreach my $word (@words) {
+ if(! $speller->check($word)) {
+ push(@misspellings, $word);
+ }
+ }
+ return join(' ', @misspellings);
+
+}
+
# -------------------------------------------------------------- Plaintext name
=pod
@@ -3263,7 +3320,7 @@ sub aboutmewrapper {
if (!defined($username) && !defined($domain)) {
return;
}
- return ''.$link.' ';
}
@@ -4916,7 +4973,7 @@ sub CSTR_pageheader {
my $londocroot = $Apache::lonnet::perlvar{'lonDocRoot'};
my ($udom,$uname,$thisdisfn)=
- ($trailfile =~ m{^\Q$londocroot\E/priv/([^/]+)/([^/]+)(?:|/(.*))$});
+ ($trailfile =~ m{^\Q$londocroot\E/priv/([^/]+)/([^/]+)/(.*)$});
my $formaction = "/priv/$udom/$uname/$thisdisfn";
$formaction =~ s{/+}{/}g;
@@ -4991,19 +5048,12 @@ Inputs:
=item * $bgcolor, used to override the bgcolor on a webpage to a specific value
-=item * $no_inline_link, if true and in remote mode, don't show the
- 'Switch To Inline Menu' link
-
=item * $args, optional argument valid values are
no_auto_mt_title -> prevents &mt()ing the title arg
inherit_jsmath -> when creating popup window in a page,
should it have jsmath forced on by the
current page
-=item * $advtoolsref, optional argument, ref to an array containing
- inlineremote items to be added in "Functions" menu below
- breadcrumbs.
-
=back
Returns: A uniform header for LON-CAPA web pages.
@@ -5015,7 +5065,7 @@ other decorations will be returned.
sub bodytag {
my ($title,$function,$addentries,$bodyonly,$domain,$forcereg,
- $no_nav_bar,$bgcolor,$no_inline_link,$args,$advtoolsref)=@_;
+ $no_nav_bar,$bgcolor,$args)=@_;
my $public;
if ((($env{'user.name'} eq 'public') && ($env{'user.domain'} eq 'public'))
@@ -5064,14 +5114,16 @@ sub bodytag {
my $bodytag = "".
&Apache::lontexconvert::init_math_support($args->{'inherit_jsmath'});
- &get_unprocessed_cgi($ENV{'QUERY_STRING'}, ['inhibitmenu']);
-
- if (($bodyonly) || ($no_nav_bar) || ($env{'form.inhibitmenu'} eq 'yes')) {
+ if ($bodyonly) {
return $bodytag;
- }
+ }
+ my $name = &plainname($env{'user.name'},$env{'user.domain'});
if ($public) {
undef($role);
+ } else {
+ $name = &aboutmewrapper($name,$env{'user.name'},$env{'user.domain'},
+ undef,'LC_menubuttons_link');
}
my $titleinfo = ''.$title.' ';
@@ -5087,48 +5139,37 @@ sub bodytag {
}
$role = '('.$role.') ' if $role;
+ &get_unprocessed_cgi($ENV{'QUERY_STRING'}, ['inhibitmenu']);
- if ($env{'request.state'} eq 'construct') { $forcereg=1; }
-
+ if ($no_nav_bar || $env{'form.inhibitmenu'} eq 'yes') {
+ return $bodytag;
+ }
-
- my $funclist;
- if (($env{'environment.remote'} eq 'on') && ($env{'request.state'} ne 'construct')) {
- $bodytag .= Apache::lonhtmlcommon::scripttag(Apache::lonmenu::utilityfunctions(), 'start')."\n".
- Apache::lonmenu::serverform();
- my $forbodytag;
- &Apache::lonmenu::prepare_functions($env{'request.noversionuri'},
- $forcereg,$args->{'group'},
- $args->{'bread_crumbs'},
- $advtoolsref,'',\$forbodytag);
- unless (ref($args->{'bread_crumbs'}) eq 'ARRAY') {
- $funclist = $forbodytag;
- }
- } else {
+ if ($env{'request.state'} eq 'construct') { $forcereg=1; }
# if ($env{'request.state'} eq 'construct') {
# $titleinfo = &CSTR_pageheader(); #FIXME: Will be removed once all scripts have their own calls
# }
- $bodytag .= Apache::lonhtmlcommon::scripttag(
- Apache::lonmenu::utilityfunctions(), 'start');
- my ($left,$right) = Apache::lonmenu::primary_menu();
if ($env{'request.noversionuri'} =~ m{^/res/adm/pages/}) {
- if ($dc_info) {
+ if ($dc_info) {
$dc_info = qq|$dc_info |;
- }
- $bodytag .= qq|$left $role
- $realm $dc_info
|;
+ }
+ $bodytag .= qq|$name $role
+ $realm $dc_info
|;
return $bodytag;
}
unless ($env{'request.symb'} =~ m/\.page___\d+___/) {
- $bodytag .= qq|$left $role
|;
+ $bodytag .= qq|$name $role
|;
}
- $bodytag .= $right;
+ $bodytag .= Apache::lonhtmlcommon::scripttag(
+ Apache::lonmenu::utilityfunctions(), 'start');
+
+ $bodytag .= Apache::lonmenu::primary_menu();
if ($dc_info) {
$dc_info = &dc_courseid_toggle($dc_info);
@@ -5144,17 +5185,7 @@ sub bodytag {
$bodytag .= &Apache::lonmenu::innerregister($forcereg,
$args->{'bread_crumbs'});
} elsif ($forcereg) {
- $bodytag .= &Apache::lonmenu::innerregister($forcereg,undef,
- $args->{'group'});
- } else {
- my $forbodytag;
- &Apache::lonmenu::prepare_functions($env{'request.noversionuri'},
- $forcereg,$args->{'group'},
- $args->{'bread_crumbs'},
- $advtoolsref,'',\$forbodytag);
- unless (ref($args->{'bread_crumbs'}) eq 'ARRAY') {
- $bodytag .= $forbodytag;
- }
+ $bodytag .= &Apache::lonmenu::innerregister($forcereg);
}
}else{
# this is to seperate menu from content when there's no secondary
@@ -5164,50 +5195,6 @@ sub bodytag {
}
return $bodytag;
- }
-
-#
-# Top frame rendering, Remote is up
-#
-
- my $imgsrc = $img;
- if ($img =~ /^\/adm/) {
- $imgsrc = &lonhttpdurl($img);
- }
- my $upperleft=' ';
-
- # Explicit link to get inline menu
- my $menu= ($no_inline_link?''
- :''.&mt('Switch to Inline Menu Mode').' ');
-
- if ($dc_info) {
- $dc_info = qq|($dc_info) |;
- }
-
- my $name = &plainname($env{'user.name'},$env{'user.domain'});
- unless ($public) {
- $name = &aboutmewrapper($name,$env{'user.name'},$env{'user.domain'},
- undef,'LC_menubuttons_link');
- }
-
- unless ($env{'form.inhibitmenu'}) {
- $bodytag .= qq|$name $role
- $realm $dc_info
|;
- }
- if ($env{'request.state'} eq 'construct') {
- if (!$public){
- if ($env{'request.state'} eq 'construct') {
- $funclist = &Apache::lonhtmlcommon::scripttag(
- &Apache::lonmenu::utilityfunctions(), 'start').
- &Apache::lonhtmlcommon::scripttag('','end').
- &Apache::lonmenu::innerregister($forcereg,
- $args->{'bread_crumbs'});
- }
- }
- }
- return $bodytag."\n".$funclist;
}
sub dc_courseid_toggle {
@@ -5239,15 +5226,8 @@ sub make_attr_string {
delete($attr_ref->{$key});
}
}
- if ($env{'environment.remote'} eq 'on') {
- $attr_ref->{'onload'} =
- &Apache::lonmenu::loadevents(). $on_load;
- $attr_ref->{'onunload'}=
- &Apache::lonmenu::unloadevents().$on_unload;
- } else {
- $attr_ref->{'onload'} = $on_load;
- $attr_ref->{'onunload'}= $on_unload;
- }
+ $attr_ref->{'onload'} = $on_load;
+ $attr_ref->{'onunload'}= $on_unload;
}
my $attr_string;
@@ -5382,14 +5362,6 @@ form, .inline {
vertical-align:middle;
}
-.LC_floatleft {
- float: left;
-}
-
-.LC_floatright {
- float: right;
-}
-
.LC_400Box {
width:400px;
}
@@ -5428,12 +5400,10 @@ form, .inline {
.LC_error {
color: red;
+ font-size: larger;
}
-.LC_warning {
- color: darkorange;
-}
-
+.LC_warning,
.LC_diff_removed {
color: red;
}
@@ -5596,11 +5566,11 @@ td.LC_table_cell_checkbox {
text-align: left;
}
-.LC_head_subbox, .LC_actionbox {
+.LC_head_subbox {
clear:both;
background: #F8F8F8; /* $sidebg; */
border: 1px solid $sidebg;
- margin: 0 0 10px 0;
+ margin: 0 0 10px 0;
padding: 3px;
text-align: left;
}
@@ -5733,8 +5703,7 @@ table.LC_nested tr.LC_empty_row td {
padding: 8px;
}
-table.LC_data_table tr.LC_empty_row td,
-table.LC_data_table tr.LC_footer_row td {
+table.LC_data_table tr.LC_empty_row td {
background-color: $sidebg;
}
@@ -6296,6 +6265,7 @@ div.LC_docs_entry_move {
table.LC_data_table tr > td.LC_docs_entry_commands,
table.LC_data_table tr > td.LC_docs_entry_parameter {
+ background: #DDDDDD;
font-size: x-small;
}
@@ -6460,11 +6430,6 @@ div.LC_edit_problem_saves {
padding-bottom: 5px;
}
-.LC_edit_opt {
- padding-left: 1em;
- white-space: nowrap;
-}
-
img.stift {
border-width: 0;
vertical-align: middle;
@@ -6479,7 +6444,6 @@ div.LC_createcourse {
}
.LC_dccid {
- float: right;
margin: 0.2em 0 0 0;
padding: 0;
font-size: 90%;
@@ -6577,6 +6541,7 @@ fieldset > legend {
}
ol.LC_primary_menu {
+ float: right;
margin: 0;
padding: 0;
background-color: $pgbg_or_bgcolor;
@@ -6673,7 +6638,7 @@ ol.LC_docs_parameters li.LC_docs_paramet
}
ul#LC_secondary_menu {
- clear: right;
+ clear: both;
color: $fontmenu;
background: $tabbg;
list-style: none;
@@ -6681,53 +6646,15 @@ ul#LC_secondary_menu {
margin: 0;
width: 100%;
text-align: left;
- float: left;
}
ul#LC_secondary_menu li {
font-weight: bold;
line-height: 1.8em;
- border-right: 1px solid black;
- vertical-align: middle;
- float: left;
-}
-
-ul#LC_secondary_menu li.LC_hoverable:hover, ul#LC_secondary_menu li.hover {
- background-color: $data_table_light;
-}
-
-ul#LC_secondary_menu li a {
padding: 0 0.8em;
-}
-
-ul#LC_secondary_menu li ul {
- display: none;
-}
-
-ul#LC_secondary_menu li:hover ul, ul#LC_secondary_menu li.hover ul {
- display: block;
- position: absolute;
- margin: 0;
- padding: 0;
- list-style:none;
- float: none;
- background-color: $data_table_light;
- z-index: 2;
- margin-left: -1px;
-}
-
-ul#LC_secondary_menu li ul li {
- font-size: 90%;
- vertical-align: top;
- border-left: 1px solid black;
border-right: 1px solid black;
- background-color: $data_table_light;
- list-style:none;
- float: none;
-}
-
-ul#LC_secondary_menu li ul li:hover, ul#LC_secondary_menu li ul li.hover {
- background-color: $data_table_dark;
+ display: inline;
+ vertical-align: middle;
}
ul.LC_TabContent {
@@ -7174,27 +7101,6 @@ ul.LC_funclist li {
cursor:pointer;
}
-/*
- styles used by TTH when "Default set of options to pass to tth/m
- when converting TeX" in course settings has been set
-
- option passed: -t
-
-*/
-
-td div.comp { margin-top: -0.6ex; margin-bottom: -1ex;}
-td div.comb { margin-top: -0.6ex; margin-bottom: -.6ex;}
-td div.hrcomp { line-height: 0.9; margin-top: -0.8ex; margin-bottom: -1ex;}
-td div.norm {line-height:normal;}
-
-/*
- option passed -y3
-*/
-
-span.roman {font-family: serif; font-style: normal; font-weight: normal;}
-span.overacc2 {position: relative; left: .8em; top: -1.2ex;}
-span.overacc1 {position: relative; left: .6em; top: -1.2ex;}
-
END
}
@@ -7248,8 +7154,8 @@ sub headtag {
if (!$args->{'frameset'}) {
$result .= &Apache::lonhtmlcommon::htmlareaheaders();
}
- if ($args->{'force_register'}) {
- $result .= &Apache::lonmenu::registerurl(1);
+ if ($args->{'force_register'} && $env{'request.noversionuri'} !~ m{^/res/adm/pages/}) {
+ $result .= Apache::lonxml::display_title();
}
if (!$args->{'no_nav_bar'}
&& !$args->{'only_body'}
@@ -7458,16 +7364,12 @@ $args - additional optional args support
skip_phases -> hash ref of
head -> skip the generation
body -> skip all generation
- no_inline_link -> if true and in remote mode, don't show the
- 'Switch To Inline Menu' link
no_auto_mt_title -> prevent &mt()ing the title arg
inherit_jsmath -> when creating popup window in a page,
should it have jsmath forced on by the
current page
bread_crumbs -> Array containing breadcrumbs
bread_crumbs_component -> if exists show it as headline else show only the breadcrumbs
- group -> includes the current group, if page is for a
- specific group
=back
@@ -7480,7 +7382,7 @@ sub start_page {
#&Apache::lonnet::logthis("start_page ".join(':',caller(0)));
$env{'internal.start_page'}++;
- my ($result,@advtools);
+ my $result;
if (! exists($args->{'skip_phases'}{'head'}) ) {
$result .= &xml_begin() . &headtag($title, $head_extra, $args);
@@ -7497,8 +7399,7 @@ sub start_page {
$args->{'function'}, $args->{'add_entries'},
$args->{'only_body'}, $args->{'domain'},
$args->{'force_register'}, $args->{'no_nav_bar'},
- $args->{'bgcolor'}, $args->{'no_inline_link'},
- $args, \@advtools);
+ $args->{'bgcolor'}, $args);
}
}
@@ -7527,10 +7428,6 @@ sub start_page {
&Apache::lonhtmlcommon::add_breadcrumb($crumb);
}
}
- # if @advtools array contains items add then to the breadcrumbs
- if (@advtools > 0) {
- &Apache::lonmenu::advtools_crumbs(@advtools);
- }
#if bread_crumbs_component exists show it as headline else show only the breadcrumbs
if(exists($args->{'bread_crumbs_component'})){
@@ -7538,11 +7435,6 @@ sub start_page {
}else{
$result .= &Apache::lonhtmlcommon::breadcrumbs();
}
- } elsif (($env{'environment.remote'} eq 'on') &&
- ($env{'form.inhibitmenu'} ne 'yes') &&
- ($env{'request.noversionuri'} =~ m{^/res/}) &&
- ($env{'request.noversionuri'} !~ m{^/res/adm/pages/})) {
- $result .= '
';
}
return $result;
}
@@ -7806,9 +7698,11 @@ sub LCprogressbar {
$LCcurrentid=$$.'_'.$LCidcnt;
my $starting=&mt('Starting');
my $content=(<
$starting
+
ENDPROGBAR
&r_print($r,$content.&LCprogressbar_script($LCcurrentid));
}
@@ -7929,7 +7823,7 @@ sub simple_error_page {
my ($r,$title,$msg) = @_;
my $page =
&Apache::loncommon::start_page($title).
- ''.&mt($msg).'
'.
+ &mt($msg).
&Apache::loncommon::end_page();
if (ref($r)) {
$r->print($page);
@@ -8222,19 +8116,7 @@ sub get_sections {
my %sectioncount;
my $now = time;
- my $check_students = 1;
- my $only_students = 0;
- if (ref($possible_roles) eq 'ARRAY') {
- if (grep(/^st$/,@{$possible_roles})) {
- if (@{$possible_roles} == 1) {
- $only_students = 1;
- }
- } else {
- $check_students = 0;
- }
- }
-
- if ($check_students) {
+ if (!defined($possible_roles) || (grep(/^st$/,@$possible_roles))) {
my ($classlist) = &Apache::loncoursedata::get_classlist($cdom,$cnum);
my $sec_index = &Apache::loncoursedata::CL_SECTION();
my $status_index = &Apache::loncoursedata::CL_STATUS();
@@ -8261,9 +8143,6 @@ sub get_sections {
}
}
}
- if ($only_students) {
- return %sectioncount;
- }
my %courseroles = &Apache::lonnet::dump('nohist_userroles',$cdom,$cnum);
foreach my $user (sort(keys(%courseroles))) {
if ($user !~ /^(\w{2})/) { next; }
@@ -8411,7 +8290,7 @@ sub get_course_users {
active => 'Active',
future => 'Future',
);
- my (%nothide,@possdoms);
+ my %nothide;
if ($hidepriv) {
my %coursehash=&Apache::lonnet::coursedescription($cdom.'_'.$cnum);
foreach my $user (split(/\s*\,\s*/,$coursehash{'nothideprivileged'})) {
@@ -8421,10 +8300,6 @@ sub get_course_users {
$nothide{$user} = 1;
}
}
- my @possdoms = ($cdom);
- if ($coursehash{'checkforpriv'}) {
- push(@possdoms,split(/,/,$coursehash{'checkforpriv'}));
- }
}
foreach my $person (sort(keys(%coursepersonnel))) {
my $match = 0;
@@ -8460,7 +8335,7 @@ sub get_course_users {
}
if ($uname ne '' && $udom ne '') {
if ($hidepriv) {
- if ((&Apache::lonnet::privileged($uname,$udom,\@possdoms)) &&
+ if ((&Apache::lonnet::privileged($uname,$udom)) &&
(!$nothide{$uname.':'.$udom})) {
next;
}
@@ -9065,10 +8940,7 @@ sub user_rule_formats {
my ($rules,$ruleorder) = &Apache::lonnet::inst_userrules($domain,$check);
if ((ref($rules) eq 'HASH') && (ref($ruleorder) eq 'ARRAY')) {
if (@{$ruleorder} > 0) {
- $output = ' '.
- &mt($text{$check}.' with the following format(s) may [_1]only[_2] be used for verified users at [_3]:',
- '',' ',$domdesc).
- ' ';
+ $output = ' '.&mt("$text{$check} with the following format(s) may only be used for verified users at [_1]:",$domdesc).' ';
foreach my $rule (@{$ruleorder}) {
if (ref($curr_rules) eq 'ARRAY') {
if (grep(/^\Q$rule\E$/,@{$curr_rules})) {
@@ -9551,23 +9423,18 @@ sub ask_for_embedded_content {
my $heading = &mt('Upload embedded files');
my $buttontext = &mt('Upload');
- my ($navmap,$cdom,$cnum);
+ my $navmap;
if ($env{'request.course.id'}) {
- if ($actionurl eq '/adm/dependencies') {
- $navmap = Apache::lonnavmaps::navmap->new();
- }
- $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
- $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
+ $navmap = Apache::lonnavmaps::navmap->new();
}
- if (($actionurl eq '/adm/portfolio') ||
- ($actionurl eq '/adm/coursegrp_portfolio')) {
+ if (($actionurl eq '/adm/portfolio') || ($actionurl eq '/adm/coursegrp_portfolio')) {
my $current_path='/';
if ($env{'form.currentpath'}) {
$current_path = $env{'form.currentpath'};
}
if ($actionurl eq '/adm/coursegrp_portfolio') {
- $udom = $cdom;
- $uname = $cnum;
+ $udom = $env{'course.'.$env{'request.course.id'}.'.domain'};
+ $uname = $env{'course.'.$env{'request.course.id'}.'.num'};
$url = '/userfiles/groups/'.$env{'form.group'}.'/portfolio';
} else {
$udom = $env{'user.domain'};
@@ -9591,50 +9458,32 @@ sub ask_for_embedded_content {
$toplevel = $url;
if ($args->{'context'} eq 'paste') {
($cdom,$cnum) = ($url =~ m{^\Q/uploaded/\E($match_domain)/($match_courseid)/});
- ($path) =
+ ($path) =
($toplevel =~ m{^(\Q/uploaded/$cdom/$cnum/\E(?:docs|supplemental)/(?:default|\d+)/\d+)/});
$fileloc = &Apache::lonnet::filelocation('',$toplevel);
$fileloc =~ s{^/}{};
}
}
- } elsif ($actionurl eq '/adm/dependencies') {
+ } elsif ($actionurl eq '/adm/dependencies') {
if ($env{'request.course.id'} ne '') {
+ $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
+ $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
if (ref($args) eq 'HASH') {
$url = $args->{'docs_url'};
$title = $args->{'docs_title'};
- $toplevel = $url;
- unless ($toplevel =~ m{^/}) {
- $toplevel = "/$url";
- }
+ $toplevel = "/$url";
($rem) = ($toplevel =~ m{^(.+/)[^/]+$});
- if ($toplevel =~ m{^(\Q/uploaded/$cdom/$cnum/portfolio/syllabus\E)}) {
- $path = $1;
- } else {
- ($path) =
- ($toplevel =~ m{^(\Q/uploaded/$cdom/$cnum/\E(?:docs|supplemental)/(?:default|\d+)/\d+)/});
- }
+ ($path) =
+ ($toplevel =~ m{^(\Q/uploaded/$cdom/$cnum/\E(?:docs|supplemental)/(?:default|\d+)/\d+)/});
$fileloc = &Apache::lonnet::filelocation('',$toplevel);
$fileloc =~ s{^/}{};
($filename) = ($fileloc =~ m{.+/([^/]+)$});
$heading = &mt('Status of dependencies in [_1]',"$title ($filename)");
}
}
- } elsif ($actionurl eq "/public/$cdom/$cnum/syllabus") {
- $udom = $cdom;
- $uname = $cnum;
- $url = "/uploaded/$cdom/$cnum/portfolio/syllabus";
- $toplevel = $url;
- $path = $url;
- $fileloc = &Apache::lonnet::filelocation('',$toplevel).'/';
- $fileloc =~ s{^/}{};
- }
- foreach my $file (keys(%{$allfiles})) {
- my $embed_file;
- if (($path eq "/uploaded/$cdom/$cnum/portfolio/syllabus") && ($file =~ m{^\Q$path/\E(.+)$})) {
- $embed_file = $1;
- } else {
- $embed_file = $file;
- }
+ }
+ my $now = time();
+ foreach my $embed_file (keys(%{$allfiles})) {
my $absolutepath;
if ($embed_file =~ m{^\w+://}) {
$newfiles{$embed_file} = 1;
@@ -9672,8 +9521,7 @@ sub ask_for_embedded_content {
my $dirptr = 16384;
foreach my $path (keys(%subdependencies)) {
$currsubfile{$path} = {};
- if (($actionurl eq '/adm/portfolio') ||
- ($actionurl eq '/adm/coursegrp_portfolio')) {
+ if (($actionurl eq '/adm/portfolio') || ($actionurl eq '/adm/coursegrp_portfolio')) {
my ($sublistref,$listerror) =
&Apache::lonnet::dirlist($url.$path,$udom,$uname,$getpropath);
if (ref($sublistref) eq 'ARRAY') {
@@ -9689,15 +9537,9 @@ sub ask_for_embedded_content {
}
} elsif (($actionurl eq '/adm/dependencies') ||
(($actionurl eq '/adm/coursedocs') && (ref($args) eq 'HASH') &&
- ($args->{'context'} eq 'paste')) ||
- ($actionurl eq "/public/$cdom/$cnum/syllabus")) {
+ ($args->{'context'} eq 'paste'))) {
if ($env{'request.course.id'} ne '') {
- my $dir;
- if ($actionurl eq "/public/$cdom/$cnum/syllabus") {
- $dir = $fileloc;
- } else {
- ($dir) = ($fileloc =~ m{^(.+/)[^/]+$});
- }
+ my ($dir) = ($fileloc =~ m{^(.+/)[^/]+$});
if ($dir ne '') {
my ($sublistref,$listerror) =
&Apache::lonnet::dirlist($dir.$path,$cdom,$cnum,$getpropath,undef,'/');
@@ -9745,8 +9587,7 @@ sub ask_for_embedded_content {
}
}
my %currfile;
- if (($actionurl eq '/adm/portfolio') ||
- ($actionurl eq '/adm/coursegrp_portfolio')) {
+ if (($actionurl eq '/adm/portfolio') || ($actionurl eq '/adm/coursegrp_portfolio')) {
my ($dirlistref,$listerror) =
&Apache::lonnet::dirlist($url,$udom,$uname,$getpropath);
if (ref($dirlistref) eq 'ARRAY') {
@@ -9762,8 +9603,7 @@ sub ask_for_embedded_content {
}
} elsif (($actionurl eq '/adm/dependencies') ||
(($actionurl eq '/adm/coursedocs') && (ref($args) eq 'HASH') &&
- ($args->{'context'} eq 'paste')) ||
- ($actionurl eq "/public/$cdom/$cnum/syllabus")) {
+ ($args->{'context'} eq 'paste'))) {
if ($env{'request.course.id'} ne '') {
my ($dir) = ($fileloc =~ m{^(.+/)[^/]+$});
if ($dir ne '') {
@@ -9798,14 +9638,12 @@ sub ask_for_embedded_content {
($file eq $filename.'.bak') ||
($dependencies{$file})) {
if ($actionurl eq '/adm/dependencies') {
- unless ($toplevel =~ m{^\Q/uploaded/$cdom/$cnum/portfolio/syllabus\E}) {
- next if (($rem ne '') &&
- (($env{"httpref.$rem".$file} ne '') ||
- (ref($navmap) &&
- (($navmap->getResourceByUrl($rem.$file) ne '') ||
- (($file =~ /^(.*\.s?html?)\.bak$/i) &&
- ($navmap->getResourceByUrl($rem.$1)))))));
- }
+ next if (($rem ne '') &&
+ (($env{"httpref.$rem".$file} ne '') ||
+ (ref($navmap) &&
+ (($navmap->getResourceByUrl($rem.$file) ne '') ||
+ (($file =~ /^(.*\.s?html?)\.bak$/i) &&
+ ($navmap->getResourceByUrl($rem.$1)))))));
}
$unused{$file} = 1;
}
@@ -9814,38 +9652,28 @@ sub ask_for_embedded_content {
($args->{'context'} eq 'paste')) {
$counter = scalar(keys(%existing));
$numpathchg = scalar(keys(%pathchanges));
- return ($output,$counter,$numpathchg,\%existing);
- } elsif (($actionurl eq "/public/$cdom/$cnum/syllabus") &&
- (ref($args) eq 'HASH') && ($args->{'context'} eq 'rewrites')) {
- $counter = scalar(keys(%existing));
- $numpathchg = scalar(keys(%pathchanges));
- return ($output,$counter,$numpathchg,\%existing,\%mapping);
+ return ($output,$counter,$numpathchg,\%existing);
}
foreach my $embed_file (sort {lc($a) cmp lc($b)} keys(%newfiles)) {
if ($actionurl eq '/adm/dependencies') {
next if ($embed_file =~ m{^\w+://});
}
$upload_output .= &start_data_table_row().
- ' '.
+ ' '.
''.$embed_file.' ';
unless ($mapping{$embed_file} eq $embed_file) {
- $upload_output .= ''.
- &mt('changed from: [_1]',$mapping{$embed_file}).' ';
+ $upload_output .= ''.&mt('changed from: [_1]',$mapping{$embed_file}).' ';
}
- $upload_output .= ' ';
+ $upload_output .= '';
if ($args->{'ignore_remote_references'} && $embed_file =~ m{^\w+://}) {
- $upload_output.=' '.
- ''.
- &mt("URL points to web address").' ';
+ $upload_output.=''.&mt("URL points to other server.").' ';
$numremref++;
} elsif ($args->{'error_on_invalid_names'}
&& $embed_file ne &Apache::lonnet::clean_filename($embed_file,{'keep_path' => 1,})) {
- $upload_output.=' '.
- &mt('Invalid characters').' ';
+ $upload_output.=''.&mt('Invalid characters').' ';
$numinvalid++;
} else {
- $upload_output .= ''.
- &embedded_file_element('upload_embedded',$counter,
+ $upload_output .= &embedded_file_element('upload_embedded',$counter,
$embed_file,\%mapping,
$allfiles,$codebase,'upload');
$counter ++;
@@ -9874,9 +9702,8 @@ sub ask_for_embedded_content {
$counter ++;
} else {
$upload_output .= &start_data_table_row().
- ' '.
- ''.$embed_file.' '.
- ''.&mt('Already exists').' '.
+ ''.$embed_file.' ';
+ ''.&mt('Already exists').' '.
&Apache::loncommon::end_data_table_row()."\n";
}
}
@@ -9971,7 +9798,7 @@ sub ask_for_embedded_content {
$output = ''.&mt('Referenced files').' : ';
if ($applies > 1) {
$output .=
- &mt('No dependencies need to be uploaded, as one of the following applies to each reference:').'';
+ &mt('No files need to be uploaded, as one of the following applies to each reference:').'';
if ($numremref) {
$output .= ''.&mt('reference is to a URL which points to another server').' '."\n";
}
@@ -10014,7 +9841,7 @@ sub ask_for_embedded_content {
$chgcount ++;
}
}
- if (($counter) || ($numunused)) {
+ if ($counter) {
if ($numpathchg) {
$output .= ' '."\n";
@@ -10027,13 +9854,13 @@ sub ask_for_embedded_content {
} elsif ($actionurl eq '/adm/dependencies') {
$output .= ' ';
}
- $output .= ' '."\n".''."\n";
+ $output .= ' '."\n".''."\n";
} elsif ($numpathchg) {
my %pathchange = ();
$output .= &modify_html_form('pathchange',$actionurl,$state,\%pathchange,$pathchange_output);
if (($actionurl eq '/adm/portfolio') || ($actionurl eq '/adm/coursegrp_portfolio')) {
$output .= ''.&mt('or').'
';
- }
+ }
}
return ($output,$counter,$numpathchg);
}
@@ -10169,23 +9996,21 @@ sub upload_embedded {
$output .= &mt('Unrecognized file extension ([_1]) - rename the file with a proper extension and re-upload.',$1).' ';
next;
} elsif ($fname=~/\.(\d+)\.(\w+)$/) {
- $output .= &mt('Filename not allowed - rename the file to remove the number immediately before the file extension([_1]) and re-upload.',$2).' ';
+ $output .= &mt('File name not allowed - rename the file to remove the number immediately before the file extension([_1]) and re-upload.',$2).' ';
next;
}
$env{'form.embedded_item_'.$i.'.filename'}=$fname;
- my $subdir = $path;
- $subdir =~ s{/+$}{};
if ($context eq 'portfolio') {
my $result;
if ($state eq 'existingfile') {
$result=
&Apache::lonnet::userfileupload('embedded_item_'.$i,'existingfile',
- $dirpath.$env{'form.currentpath'}.$subdir);
+ $dirpath.$env{'form.currentpath'}.$path);
} else {
$result=
&Apache::lonnet::userfileupload('embedded_item_'.$i,'',
$dirpath.
- $env{'form.currentpath'}.$subdir);
+ $env{'form.currentpath'}.$path);
if ($result !~ m|^/uploaded/|) {
$output .= ''
.&mt('An error occurred ([_1]) while trying to upload [_2] for embedded element [_3].'
@@ -10197,11 +10022,10 @@ sub upload_embedded {
$path.$fname.' ').' ';
}
}
- } elsif (($context eq 'coursedoc') || ($context eq 'syllabus')) {
- my $extendedsubdir = $dirpath.'/'.$subdir;
- $extendedsubdir =~ s{/+$}{};
+ } elsif ($context eq 'coursedoc') {
my $result =
- &Apache::lonnet::userfileupload('embedded_item_'.$i,$context,$extendedsubdir);
+ &Apache::lonnet::userfileupload('embedded_item_'.$i,'coursedoc',
+ $dirpath.'/'.$path);
if ($result !~ m|^/uploaded/|) {
$output .= ''
.&mt('An error occurred ([_1]) while trying to upload [_2] for embedded element [_3].'
@@ -10211,9 +10035,6 @@ sub upload_embedded {
} else {
$output .= &mt('Uploaded [_1]',''.
$path.$fname.' ').' ';
- if ($context eq 'syllabus') {
- &Apache::lonnet::make_public_indefinitely($result);
- }
}
} else {
# Save the file
@@ -10345,7 +10166,7 @@ sub modify_html_form {
}
sub modify_html_refs {
- my ($context,$dirpath,$uname,$udom,$dir_root,$url) = @_;
+ my ($context,$dirpath,$uname,$udom,$dir_root) = @_;
my $container;
if ($context eq 'portfolio') {
$container = $env{'form.container'};
@@ -10354,14 +10175,12 @@ sub modify_html_refs {
} elsif ($context eq 'manage_dependencies') {
(undef,undef,$container) = &Apache::lonnet::decode_symb($env{'form.symb'});
$container = "/$container";
- } elsif ($context eq 'syllabus') {
- $container = $url;
} else {
$container = $Apache::lonnet::perlvar{'lonDocRoot'}.$env{'form.filename'};
}
my (%allfiles,%codebase,$output,$content);
my @changes = &get_env_multiple('form.namechange');
- unless ((@changes > 0) || ($context eq 'syllabus')) {
+ unless (@changes > 0) {
if (wantarray) {
return ('',0,0);
} else {
@@ -10369,7 +10188,7 @@ sub modify_html_refs {
}
}
if (($context eq 'portfolio') || ($context eq 'coursedoc') ||
- ($context eq 'manage_dependencies') || ($context eq 'syllabus')) {
+ ($context eq 'manage_dependencies')) {
unless ($container =~ m{^/uploaded/\Q$udom\E/\Q$uname\E/}) {
if (wantarray) {
return ('',0,0);
@@ -10425,7 +10244,6 @@ sub modify_html_refs {
if ($content =~ m{($attrib_regexp\s*=\s*['"]?)\Q$ref\E(['"]?)}) {
my $numchg = ($content =~ s{($attrib_regexp\s*=\s*['"]?)\Q$ref\E(['"]?)}{$1$newname$2}gi);
$count += $numchg;
- $allfiles{$newname} = $allfiles{$ref};
}
if ($env{'form.embedded_codebase_'.$i} ne '') {
$codebase = &unescape($env{'form.embedded_codebase_'.$i});
@@ -10434,11 +10252,10 @@ sub modify_html_refs {
}
}
}
- my $skiprewrites;
if ($count || $codebasecount) {
my $saveresult;
if (($context eq 'portfolio') || ($context eq 'coursedoc') ||
- ($context eq 'manage_dependencies') || ($context eq 'syllabus')) {
+ ($context eq 'manage_dependencies')) {
my $url = &Apache::lonnet::store_edited_file($container,$content,$udom,$uname,\$saveresult);
if ($url eq $container) {
my ($fname) = ($container =~ m{/([^/]+)$});
@@ -10451,11 +10268,6 @@ sub modify_html_refs {
''.
$container.' ').'';
}
- if ($context eq 'syllabus') {
- unless ($saveresult eq 'ok') {
- $skiprewrites = 1;
- }
- }
} else {
if (open(my $fh,">$container")) {
print $fh $content;
@@ -10471,47 +10283,6 @@ sub modify_html_refs {
}
}
}
- if (($context eq 'syllabus') && (!$skiprewrites)) {
- my ($actionurl,$state);
- $actionurl = "/public/$udom/$uname/syllabus";
- my ($ignore,$num,$numpathchanges,$existing,$mapping) =
- &ask_for_embedded_content($actionurl,$state,\%allfiles,
- \%codebase,
- {'context' => 'rewrites',
- 'ignore_remote_references' => 1,});
- if (ref($mapping) eq 'HASH') {
- my $rewrites = 0;
- foreach my $key (keys(%{$mapping})) {
- next if ($key =~ m{^https?://});
- my $ref = $mapping->{$key};
- my $newname = "/uploaded/$udom/$uname/portfolio/syllabus/$key";
- my $attrib;
- if (ref($allfiles{$mapping->{$key}}) eq 'ARRAY') {
- $attrib = join('|',@{$allfiles{$mapping->{$key}}});
- }
- if ($content =~ m{($attrib\s*=\s*['"]?)\Q$ref\E(['"]?)}) {
- my $numchg = ($content =~ s{($attrib\s*=\s*['"]?)\Q$ref\E(['"]?)}{$1$newname$2}gi);
- $rewrites += $numchg;
- }
- }
- if ($rewrites) {
- my $saveresult;
- my $url = &Apache::lonnet::store_edited_file($container,$content,$udom,$uname,\$saveresult);
- if ($url eq $container) {
- my ($fname) = ($container =~ m{/([^/]+)$});
- $output .= ''.&mt('Rewrote [quant,_1,link] as [quant,_1,absolute link] in [_2].',
- $count,''.
- $fname.' ').'
';
- } else {
- $output .= ''.
- &mt('Error: could not update links in [_1].',
- ''.
- $container.' ').'
';
-
- }
- }
- }
- }
} else {
&logthis('Failed to parse '.$container.
' to modify references: '.$parse_result);
@@ -10927,8 +10698,8 @@ sub process_decompression {
my ($docudom,$docuname,$file,$destination,$dir_root,$hiddenelem) = @_;
my ($dir,$error,$warning,$output);
if ($file !~ /\.(zip|tar|bz2|gz|tar.gz|tar.bz2|tgz)$/) {
- $error = &mt('Filename not a supported archive file type.').
- ' '.&mt('Filename should end with one of: [_1].',
+ $error = &mt('File name not a supported archive file type.').
+ ' '.&mt('File name should end with one of: [_1].',
'.zip, .tar, .bz2, .gz, .tar.gz, .tar.bz2, .tgz');
} else {
my $docuhome = &Apache::lonnet::homeserver($docuname,$docudom);
@@ -11502,11 +11273,11 @@ sub process_extracted_files {
if ($env{'form.folderpath'}) {
my @items = split('&',$env{'form.folderpath'});
$folders{'0'} = $items[-2];
- if ($env{'form.folderpath'} =~ /\:1$/) {
- $containers{'0'}='page';
- } else {
- $containers{'0'}='sequence';
- }
+ $containers{'0'}='sequence';
+ } elsif ($env{'form.pagepath'}) {
+ my @items = split('&',$env{'form.pagepath'});
+ $folders{'0'} = $items[-2];
+ $containers{'0'}='page';
}
my @archdirs = &get_env_multiple('form.archive_directory');
if ($numitems) {
@@ -11624,7 +11395,7 @@ sub process_extracted_files {
}
}
} else {
- $warning .= &mt('Item extracted from archive: [_1] has unexpected path.',$path).' ';
+ $warning .= &mt('Item extracted from archive: [_1] has unexpected path.',$path).' ';
}
}
for (my $i=1; $i<=$numitems; $i++) {
@@ -11646,7 +11417,7 @@ sub process_extracted_files {
}
if ($itemidx eq '') {
$itemidx = 0;
- }
+ }
if (grep(/^\Q$referrer{$i}\E$/,@archdirs)) {
if ($mapinner{$referrer{$i}}) {
$fullpath = "$prefix$dir/$docstype/$mapinner{$referrer{$i}}";
@@ -11693,12 +11464,12 @@ sub process_extracted_files {
$showpath = "$relpath/$title";
} else {
$showpath = "/$title";
- }
+ }
$result .= ''.&mt('[_1] included as a dependency',$showpath).' '."\n";
- }
+ }
unless ($ishome) {
my $fetch = "$fullpath/$title";
- $fetch =~ s/^\Q$prefix$dir\E//;
+ $fetch =~ s/^\Q$prefix$dir\E//;
$prompttofetch{$fetch} = 1;
}
}
@@ -11708,7 +11479,7 @@ sub process_extracted_files {
$path,$env{'form.archive_content_'.$referrer{$i}}).' ';
}
} else {
- $warning .= &mt('Item extracted from archive: [_1] has unexpected path.',$path).' ';
+ $warning .= &mt('Item extracted from archive: [_1] has unexpected path.',$path).' ';
}
}
if (keys(%todelete)) {
@@ -11767,7 +11538,7 @@ sub cleanup_empty_dirs {
my $numitems = 0;
foreach my $item (@dircontents) {
if (-d "$path/$item") {
- &cleanup_empty_dirs("$path/$item");
+ &recurse_dirs("$path/$item");
if (-e "$path/$item") {
$numitems ++;
}
@@ -11814,7 +11585,7 @@ sub get_folder_hierarchy {
my @pcs = split(/,/,$pcslist);
foreach my $pc (@pcs) {
if ($pc == 1) {
- push(@pathitems,&mt('Main Content'));
+ push(@pathitems,&mt('Main Course Documents'));
} else {
my $res = $navmap->getByMapPc($pc);
if (ref($res)) {
@@ -11829,7 +11600,7 @@ sub get_folder_hierarchy {
}
if ($showitem) {
if ($mapres->{ID} eq '0.0') {
- push(@pathitems,&mt('Main Content'));
+ push(@pathitems,&mt('Main Course Documents'));
} else {
my $maptitle = $mapres->compTitle();
$maptitle =~ s/\W+/_/g;
@@ -13316,7 +13087,7 @@ sub commit_customrole {
}
sub commit_standardrole {
- my ($udom,$uname,$url,$three,$start,$end,$one,$two,$sec,$context,$credits) = @_;
+ my ($udom,$uname,$url,$three,$start,$end,$one,$two,$sec,$context) = @_;
my ($output,$logmsg,$linefeed);
if ($context eq 'auto') {
$linefeed = "\n";
@@ -13325,7 +13096,7 @@ sub commit_standardrole {
}
if ($three eq 'st') {
my $result = &commit_studentrole(\$logmsg,$udom,$uname,$url,$three,$start,$end,
- $one,$two,$sec,$context,$credits);
+ $one,$two,$sec,$context);
if (($result =~ /^error/) || ($result eq 'not_in_class') ||
($result eq 'unknown_course') || ($result eq 'refused')) {
$output = $logmsg.' '.&mt('Error: ').$result."\n";
@@ -13356,8 +13127,7 @@ sub commit_standardrole {
}
sub commit_studentrole {
- my ($logmsg,$udom,$uname,$url,$three,$start,$end,$one,$two,$sec,$context,
- $credits) = @_;
+ my ($logmsg,$udom,$uname,$url,$three,$start,$end,$one,$two,$sec,$context) = @_;
my ($result,$linefeed,$oldsecurl,$newsecurl);
if ($context eq 'auto') {
$linefeed = "\n";
@@ -13404,11 +13174,7 @@ sub commit_studentrole {
}
}
if (($expire_role_result eq 'ok') || ($secchange == 0)) {
- $modify_section_result =
- &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,
- undef,undef,undef,$sec,
- $end,$start,'','',$cid,
- '',$context,$credits);
+ $modify_section_result = &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,$sec,$end,$start,'','',$cid,'',$context);
if ($modify_section_result =~ /^ok/) {
if ($secchange == 1) {
if ($sec eq '') {
@@ -13439,7 +13205,7 @@ sub commit_studentrole {
$result = $modify_section_result;
} elsif ($secchange == 1) {
if ($oldsec eq '') {
- $$logmsg .= &mt('Error when attempting to expire existing role without a section for [_1] in course [_2] -error: ',$uname,$cid).' '.$expire_role_result.$linefeed;
+ $$logmsg .= &mt('Error when attempting to expire existing role without a section for [_1] in course [_3] -error: ',$uname,$cid).' '.$expire_role_result.$linefeed;
} else {
$$logmsg .= &mt('Error when attempting to expire existing role for [_1] in section [_2] in course [_3] -error: ',$uname,$oldsec,$cid).' '.$expire_role_result.$linefeed;
}
@@ -13465,26 +13231,6 @@ sub commit_studentrole {
return $result;
}
-sub show_role_extent {
- my ($scope,$context,$role) = @_;
- $scope =~ s{^/}{};
- my @courseroles = &Apache::lonuserutils::roles_by_context('course',1);
- push(@courseroles,'co');
- my @authorroles = &Apache::lonuserutils::roles_by_context('author');
- if (($context eq 'course') || (grep(/^\Q$role\E/,@courseroles))) {
- $scope =~ s{/}{_};
- return ''.$env{'course.'.$scope.'.description'}.' ';
- } elsif (($context eq 'author') || (grep(/^\Q$role\E/,@authorroles))) {
- my ($audom,$auname) = split(/\//,$scope);
- return &mt('[_1] Author Space',''.
- &Apache::loncommon::plainname($auname,$audom).' ');
- } else {
- $scope =~ s{/$}{};
- return &mt('Domain: [_1]',''.
- &Apache::lonnet::domain($scope,'description').' ');
- }
-}
-
############################################################
############################################################
@@ -13648,7 +13394,6 @@ sub construct_course {
'pch.users.denied',
'plc.users.denied',
'hidefromcat',
- 'checkforpriv',
'categories'],
$$crsudom,$$crsunum);
}
@@ -13678,9 +13423,6 @@ sub construct_course {
} else {
$cenv{'internal.courseowner'} = $args->{'curruser'};
}
- if ($args->{'defaultcredits'}) {
- $cenv{'internal.defaultcredits'} = $args->{'defaultcredits'};
- }
my @badclasses = (); # Used to accumulate sections/crosslistings that did not pass classlist access check for course owner.
if ($args->{'crssections'}) {
$cenv{'internal.sectionnums'} = '';
@@ -13705,11 +13447,6 @@ sub construct_course {
# do not hide course coordinator from staff listing,
# even if privileged
$cenv{'nothideprivileged'}=$args->{'ccuname'}.':'.$args->{'ccdomain'};
-# add course coordinator's domain to domains to check for privileged users
-# if different to course domain
- if ($$crsudom ne $args->{'ccdomain'}) {
- $cenv{'checkforpriv'} = $args->{'ccdomain'};
- }
# add crosslistings
if ($args->{'crsxlist'}) {
$cenv{'internal.crosslistings'}='';
@@ -14135,20 +13872,6 @@ sub init_user_environment {
\%userenv,\%domdef,\%is_adv);
}
- $userenv{'canrequest.author'} =
- &Apache::lonnet::usertools_access($username,$domain,'requestauthor',
- 'reload','requestauthor',
- \%userenv,\%domdef,\%is_adv);
- my %reqauthor = &Apache::lonnet::get('requestauthor',['author_status','author'],
- $domain,$username);
- my $reqstatus = $reqauthor{'author_status'};
- if ($reqstatus eq 'approval' || $reqstatus eq 'approved') {
- if (ref($reqauthor{'author'}) eq 'HASH') {
- $userenv{'requestauthorqueued'} = $reqstatus.':'.
- $reqauthor{'author'}{'timestamp'};
- }
- }
-
$env{'user.environment'} = "$lonids/$cookie.id";
if (tie(my %disk_env,'GDBM_File',"$lonids/$cookie.id",
@@ -14300,32 +14023,6 @@ sub update_content_constraints {
return;
}
-sub allmaps_incourse {
- my ($cdom,$cnum,$chome,$cid) = @_;
- if ($cdom eq '' || $cnum eq '' || $chome eq '' || $cid eq '') {
- $cid = $env{'request.course.id'};
- $cdom = $env{'course.'.$cid.'.domain'};
- $cnum = $env{'course.'.$cid.'.num'};
- $chome = $env{'course.'.$cid.'.home'};
- }
- my %allmaps = ();
- my $lastchange =
- &Apache::lonnet::get_coursechange($cdom,$cnum);
- if ($lastchange > $env{'request.course.tied'}) {
- my ($furl,$ferr) = &Apache::lonuserstate::readmap("$cdom/$cnum");
- unless ($ferr) {
- &update_content_constraints($cdom,$cnum,$chome,$cid);
- }
- }
- my $navmap = Apache::lonnavmaps::navmap->new();
- if (defined($navmap)) {
- foreach my $res ($navmap->retrieveResources(undef,sub { $_[0]->is_map() },1,0,1)) {
- $allmaps{$res->src()} = 1;
- }
- }
- return \%allmaps;
-}
-
sub parse_supplemental_title {
my ($title) = @_;
@@ -14349,232 +14046,6 @@ sub parse_supplemental_title {
return $title;
}
-sub symb_to_docspath {
- my ($symb) = @_;
- return unless ($symb);
- my ($mapurl,$id,$resurl) = &Apache::lonnet::decode_symb($symb);
- if ($resurl=~/\.(sequence|page)$/) {
- $mapurl=$resurl;
- } elsif ($resurl eq 'adm/navmaps') {
- $mapurl=$env{'course.'.$env{'request.course.id'}.'.url'};
- }
- my $mapresobj;
- my $navmap = Apache::lonnavmaps::navmap->new();
- if (ref($navmap)) {
- $mapresobj = $navmap->getResourceByUrl($mapurl);
- }
- $mapurl=~s{^.*/([^/]+)\.(\w+)$}{$1};
- my $type=$2;
- my $path;
- if (ref($mapresobj)) {
- my $pcslist = $mapresobj->map_hierarchy();
- if ($pcslist ne '') {
- foreach my $pc (split(/,/,$pcslist)) {
- next if ($pc <= 1);
- my $res = $navmap->getByMapPc($pc);
- if (ref($res)) {
- my $thisurl = $res->src();
- $thisurl=~s{^.*/([^/]+)\.\w+$}{$1};
- my $thistitle = $res->title();
- $path .= '&'.
- &Apache::lonhtmlcommon::entity_encode($thisurl).'&'.
- &Apache::lonhtmlcommon::entity_encode($thistitle).
- ':'.$res->randompick().
- ':'.$res->randomout().
- ':'.$res->encrypted().
- ':'.$res->randomorder().
- ':'.$res->is_page();
- }
- }
- }
- $path =~ s/^\&//;
- my $maptitle = $mapresobj->title();
- if ($mapurl eq 'default') {
- $maptitle = 'Main Content';
- }
- $path .= (($path ne '')? '&' : '').
- &Apache::lonhtmlcommon::entity_encode($mapurl).'&'.
- &Apache::lonhtmlcommon::entity_encode($maptitle).
- ':'.$mapresobj->randompick().
- ':'.$mapresobj->randomout().
- ':'.$mapresobj->encrypted().
- ':'.$mapresobj->randomorder().
- ':'.$mapresobj->is_page();
- } else {
- my $maptitle = &Apache::lonnet::gettitle($mapurl);
- my $ispage = (($type eq 'page')? 1 : '');
- if ($mapurl eq 'default') {
- $maptitle = 'Main Content';
- }
- $path = &Apache::lonhtmlcommon::entity_encode($mapurl).'&'.
- &Apache::lonhtmlcommon::entity_encode($maptitle).':::::'.$ispage;
- }
- unless ($mapurl eq 'default') {
- $path = 'default&'.
- &Apache::lonhtmlcommon::entity_encode('Main Content').
- ':::::&'.$path;
- }
- return $path;
-}
-
-sub captcha_display {
- my ($context,$lonhost) = @_;
- my ($output,$error);
- my ($captcha,$pubkey,$privkey) = &get_captcha_config($context,$lonhost);
- if ($captcha eq 'original') {
- $output = &create_captcha();
- unless ($output) {
- $error = 'captcha';
- }
- } elsif ($captcha eq 'recaptcha') {
- $output = &create_recaptcha($pubkey);
- unless ($output) {
- $error = 'recaptcha';
- }
- }
- return ($output,$error);
-}
-
-sub captcha_response {
- my ($context,$lonhost) = @_;
- my ($captcha_chk,$captcha_error);
- my ($captcha,$pubkey,$privkey) = &get_captcha_config($context,$lonhost);
- if ($captcha eq 'original') {
- ($captcha_chk,$captcha_error) = &check_captcha();
- } elsif ($captcha eq 'recaptcha') {
- $captcha_chk = &check_recaptcha($privkey);
- } else {
- $captcha_chk = 1;
- }
- return ($captcha_chk,$captcha_error);
-}
-
-sub get_captcha_config {
- my ($context,$lonhost) = @_;
- my ($captcha,$pubkey,$privkey,$hashtocheck);
- my $hostname = &Apache::lonnet::hostname($lonhost);
- my $serverhomeID = &Apache::lonnet::get_server_homeID($hostname);
- my $serverhomedom = &Apache::lonnet::host_domain($serverhomeID);
- if ($context eq 'usercreation') {
- my %domconfig = &Apache::lonnet::get_dom('configuration',[$context],$serverhomedom);
- if (ref($domconfig{$context}) eq 'HASH') {
- $hashtocheck = $domconfig{$context}{'cancreate'};
- if (ref($hashtocheck) eq 'HASH') {
- if ($hashtocheck->{'captcha'} eq 'recaptcha') {
- if (ref($hashtocheck->{'recaptchakeys'}) eq 'HASH') {
- $pubkey = $hashtocheck->{'recaptchakeys'}{'public'};
- $privkey = $hashtocheck->{'recaptchakeys'}{'private'};
- }
- if ($privkey && $pubkey) {
- $captcha = 'recaptcha';
- } else {
- $captcha = 'original';
- }
- } elsif ($hashtocheck->{'captcha'} ne 'notused') {
- $captcha = 'original';
- }
- }
- } else {
- $captcha = 'captcha';
- }
- } elsif ($context eq 'login') {
- my %domconfhash = &Apache::loncommon::get_domainconf($serverhomedom);
- if ($domconfhash{$serverhomedom.'.login.captcha'} eq 'recaptcha') {
- $pubkey = $domconfhash{$serverhomedom.'.login.recaptchakeys_public'};
- $privkey = $domconfhash{$serverhomedom.'.login.recaptchakeys_private'};
- if ($privkey && $pubkey) {
- $captcha = 'recaptcha';
- } else {
- $captcha = 'original';
- }
- } elsif ($domconfhash{$serverhomedom.'.login.captcha'} eq 'original') {
- $captcha = 'original';
- }
- }
- return ($captcha,$pubkey,$privkey);
-}
-
-sub create_captcha {
- my %captcha_params = &captcha_settings();
- my ($output,$maxtries,$tries) = ('',10,0);
- while ($tries < $maxtries) {
- $tries ++;
- my $captcha = Authen::Captcha->new (
- output_folder => $captcha_params{'output_dir'},
- data_folder => $captcha_params{'db_dir'},
- );
- my $md5sum = $captcha->generate_code($captcha_params{'numchars'});
-
- if (-e $Apache::lonnet::perlvar{'lonCaptchaDir'}.'/'.$md5sum.'.png') {
- $output = ' '."\n".
- &mt('Type in the letters/numbers shown below').' '.
- ' '.
- ' ';
- last;
- }
- }
- return $output;
-}
-
-sub captcha_settings {
- my %captcha_params = (
- output_dir => $Apache::lonnet::perlvar{'lonCaptchaDir'},
- www_output_dir => "/captchaspool",
- db_dir => $Apache::lonnet::perlvar{'lonCaptchaDb'},
- numchars => '5',
- );
- return %captcha_params;
-}
-
-sub check_captcha {
- my ($captcha_chk,$captcha_error);
- my $code = $env{'form.code'};
- my $md5sum = $env{'form.crypt'};
- my %captcha_params = &captcha_settings();
- my $captcha = Authen::Captcha->new(
- output_folder => $captcha_params{'output_dir'},
- data_folder => $captcha_params{'db_dir'},
- );
- $captcha_chk = $captcha->check_code($code,$md5sum);
- my %captcha_hash = (
- 0 => 'Code not checked (file error)',
- -1 => 'Failed: code expired',
- -2 => 'Failed: invalid code (not in database)',
- -3 => 'Failed: invalid code (code does not match crypt)',
- );
- if ($captcha_chk != 1) {
- $captcha_error = $captcha_hash{$captcha_chk}
- }
- return ($captcha_chk,$captcha_error);
-}
-
-sub create_recaptcha {
- my ($pubkey) = @_;
- my $captcha = Captcha::reCAPTCHA->new;
- return $captcha->get_options_setter({theme => 'white'})."\n".
- $captcha->get_html($pubkey).
- &mt('If either word is hard to read, [_1] will replace them.',
- ' ').
- ' ';
-}
-
-sub check_recaptcha {
- my ($privkey) = @_;
- my $captcha_chk;
- my $captcha = Captcha::reCAPTCHA->new;
- my $captcha_result =
- $captcha->check_answer(
- $privkey,
- $ENV{'REMOTE_ADDR'},
- $env{'form.recaptcha_challenge_field'},
- $env{'form.recaptcha_response_field'},
- );
- if ($captcha_result->{is_valid}) {
- $captcha_chk = 1;
- }
- return $captcha_chk;
-}
-
=pod
=back