--- loncom/interface/loncommon.pm 2015/04/07 15:13:35 1.1075.2.92 +++ loncom/interface/loncommon.pm 2012/12/04 18:50:33 1.1100 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # a pile of common routines # -# $Id: loncommon.pm,v 1.1075.2.92 2015/04/07 15:13:35 raeburn Exp $ +# $Id: loncommon.pm,v 1.1100 2012/12/04 18:50:33 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -67,16 +67,12 @@ use Apache::lonhtmlcommon(); use Apache::loncoursedata(); use Apache::lontexconvert(); use Apache::lonclonecourse(); -use Apache::lonuserutils(); -use Apache::lonuserstate(); -use Apache::courseclassifier(); use LONCAPA qw(:DEFAULT :match); use DateTime::TimeZone; use DateTime::Locale::Catalog; +use Text::Aspell; use Authen::Captcha; use Captcha::reCAPTCHA; -use Crypt::DES; -use DynaLoader; # for Crypt::DES version # ---------------------------------------------- Designs use vars qw(%defaultdesign); @@ -161,6 +157,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; @@ -195,14 +192,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); @@ -531,8 +529,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'; @@ -595,9 +592,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 .= ' // ]]> @@ -666,7 +662,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)); @@ -754,7 +750,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 '') { @@ -849,14 +845,6 @@ function setRole(crstype) { } |; } - if ($credits_element) { - $setsections .= qq| -function setCredits(defaultcredits) { - document.$formname.$credits_element.value = defaultcredits; - return; -} -|; - } return $setsections; } @@ -902,12 +890,12 @@ sub check_uncheck_jscript { function checkAll(field) { if (field.length > 0) { for (i = 0; i < field.length; i++) { - if (!field[i].disabled) { + if (!field[i].disabled) { field[i].checked = true; } } } else { - if (!field.disabled) { + if (!field.disabled) { field.checked = true; } } @@ -1011,12 +999,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 @@ -1043,12 +1057,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 - =back Below is an example of such a hash. Only the 'text', 'default', and @@ -1102,8 +1110,6 @@ sub linked_select_forms { $secondselectname, $hashref, $menuorder, - $onchangefirst, - $onchangesecond ) = @_; my $second = "document.$formname.$secondselectname"; my $first = "document.$formname.$firstselectname"; @@ -1160,7 +1166,7 @@ function select1_changed() { END # output the initial values for the selection lists - $result .= "\n"; my @order = sort(keys(%{$hashref})); if (ref($menuorder) eq 'ARRAY') { @order = @{$menuorder}; @@ -1173,11 +1179,7 @@ END $result .= "\n"; my %select2 = %{$hashref->{$firstdefault}->{'select2'}}; $result .= $middletext; - $result .= " form to allow a user to select the domain to preform an operation in. @@ -2192,31 +2179,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 = "'; } 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] '. @@ -2691,14 +2649,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'}) { @@ -2727,7 +2685,7 @@ sub authform_internal { if (defined($in{'mode'})) { if ($in{'mode'} eq 'modifycourse') { if ($authnum == 1) { - $authtype = ''; + $authtype = ''; } } } @@ -2746,14 +2704,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'}) { @@ -2782,7 +2740,7 @@ sub authform_local { if (defined($in{'mode'})) { if ($in{'mode'} eq 'modifycourse') { if ($authnum == 1) { - $authtype = ''; + $authtype = ''; } } } @@ -2800,14 +2758,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'}) { @@ -2833,7 +2791,7 @@ sub authform_filesystem { if (defined($in{'mode'})) { if ($in{'mode'} eq 'modifycourse') { if ($authnum == 1) { - $authtype = ''; + $authtype = ''; } } } @@ -3064,13 +3022,77 @@ 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 + +=back + +=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 @@ -3261,7 +3283,7 @@ sub screenname { # ------------------------------------------------------------- Confirm Wrapper =pod -=item * &confirmwrapper($message) +=item confirmwrapper Wrap messages about completion of operation in box @@ -3677,7 +3699,7 @@ sub user_lang { =over 4 =item * &get_previous_attempt($symb, $username, $domain, $course, - $getattempt, $regexp, $gradesub, $usec, $identifier) + $getattempt, $regexp, $gradesub) Return string with previous attempt on problem. Arguments: @@ -3699,11 +3721,6 @@ Return string with previous attempt on p =item * $gradesub: routine that processes the string if it matches $regexp -=item * $usec: section of the desired student - -=item * $identifier: counter for student (multiple students one problem) or - problem (one student; whole sequence). - =back The output string is a table containing all desired attempts, if any. @@ -3711,7 +3728,7 @@ The output string is a table containing =cut sub get_previous_attempt { - my ($symb,$username,$domain,$course,$getattempt,$regexp,$gradesub,$usec,$identifier)=@_; + my ($symb,$username,$domain,$course,$getattempt,$regexp,$gradesub)=@_; my $prevattempts=''; no strict 'refs'; if ($symb) { @@ -3721,18 +3738,13 @@ sub get_previous_attempt { my %lasthash=(); my $version; for ($version=1;$version<=$returnhash{'version'};$version++) { - foreach my $key (reverse(sort(split(/\:/,$returnhash{$version.':keys'})))) { - if ($key =~ /\.rawrndseed$/) { - my ($id) = ($key =~ /^(.+)\.rawrndseed$/); - $lasthash{$id.'.rndseed'} = $returnhash{$version.':'.$key}; - } else { - $lasthash{$key}=$returnhash{$version.':'.$key}; - } + foreach my $key (sort(split(/\:/,$returnhash{$version.':keys'}))) { + $lasthash{$key}=$returnhash{$version.':'.$key}; } } $prevattempts=&start_data_table().&start_data_table_header_row(); $prevattempts.=''.&mt('History').''; - my (%typeparts,%lasthidden,%regraded,%hidestatus); + my (%typeparts,%lasthidden); my $showsurv=&Apache::lonnet::allowed('vas',$env{'request.course.id'}); foreach my $key (sort(keys(%lasthash))) { my ($ign,@parts) = split(/\./,$key); @@ -3749,18 +3761,6 @@ sub get_previous_attempt { $lasthidden{$ign.'.'.$id} = 1; } } - if ($identifier ne '') { - my $id = join(',',@parts); - if (&Apache::lonnet::EXT("resource.$id.problemstatus",$symb, - $domain,$username,$usec,undef,$course) =~ /^no/) { - $hidestatus{$ign.'.'.$id} = 1; - } - } - } elsif ($data eq 'regrader') { - if (($identifier ne '') && (@parts)) { - my $id = join(',',@parts); - $regraded{$ign.'.'.$id} = 1; - } } } else { if ($#parts == 0) { @@ -3772,60 +3772,17 @@ sub get_previous_attempt { } $prevattempts.=&end_data_table_header_row(); if ($getattempt eq '') { - my (%solved,%resets,%probstatus); - if (($identifier ne '') && (keys(%regraded) > 0)) { - for ($version=1;$version<=$returnhash{'version'};$version++) { - foreach my $id (keys(%regraded)) { - if (($returnhash{$version.':'.$id.'.regrader'}) && - ($returnhash{$version.':'.$id.'.tries'} eq '') && - ($returnhash{$version.':'.$id.'.award'} eq '')) { - push(@{$resets{$id}},$version); - } - } - } - } for ($version=1;$version<=$returnhash{'version'};$version++) { - my (@hidden,@unsolved); + my @hidden; if (%typeparts) { foreach my $id (keys(%typeparts)) { - if (($returnhash{$version.':'.$id.'.type'} eq 'anonsurvey') || - ($returnhash{$version.':'.$id.'.type'} eq 'anonsurveycred')) { + if (($returnhash{$version.':'.$id.'.type'} eq 'anonsurvey') || ($returnhash{$version.':'.$id.'.type'} eq 'anonsurveycred')) { push(@hidden,$id); - } elsif ($identifier ne '') { - unless (($returnhash{$version.':'.$id.'.type'} eq 'survey') || - ($returnhash{$version.':'.$id.'.type'} eq 'surveycred') || - ($hidestatus{$id})) { - next if ((ref($resets{$id}) eq 'ARRAY') && grep(/^\Q$version\E$/,@{$resets{$id}})); - if ($returnhash{$version.':'.$id.'.solved'} eq 'correct_by_student') { - push(@{$solved{$id}},$version); - } elsif (($returnhash{$version.':'.$id.'.solved'} ne '') && - (ref($solved{$id}) eq 'ARRAY')) { - my $skip; - if (ref($resets{$id}) eq 'ARRAY') { - foreach my $reset (@{$resets{$id}}) { - if ($reset > $solved{$id}[-1]) { - $skip=1; - last; - } - } - } - unless ($skip) { - my ($ign,$partslist) = split(/\./,$id,2); - push(@unsolved,$partslist); - } - } - } } } } $prevattempts.=&start_data_table_row(). - ''.&mt('Transaction [_1]',$version); - if (@unsolved) { - $prevattempts .= ''; - } - $prevattempts .= ''; + ''.&mt('Transaction [_1]',$version).''; if (@hidden) { foreach my $key (sort(keys(%lasthash))) { next if ($key =~ /\.foilorder$/); @@ -3847,15 +3804,9 @@ sub get_previous_attempt { } } else { if ($key =~ /\./) { - my $value = $returnhash{$version.':'.$key}; - if ($key =~ /\.rndseed$/) { - my ($id) = ($key =~ /^(.+)\.rndseed$/); - if (exists($returnhash{$version.':'.$id.'.rawrndseed'})) { - $value = $returnhash{$version.':'.$id.'.rawrndseed'}; - } - } - $prevattempts.=''.&format_previous_attempt_value($key,$value). - ' '; + my $value = &format_previous_attempt_value($key, + $returnhash{$version.':'.$key}); + $prevattempts.=''.$value.' '; } else { $prevattempts.=' '; } @@ -3864,15 +3815,9 @@ sub get_previous_attempt { } else { foreach my $key (sort(keys(%lasthash))) { next if ($key =~ /\.foilorder$/); - my $value = $returnhash{$version.':'.$key}; - if ($key =~ /\.rndseed$/) { - my ($id) = ($key =~ /^(.+)\.rndseed$/); - if (exists($returnhash{$version.':'.$id.'.rawrndseed'})) { - $value = $returnhash{$version.':'.$id.'.rawrndseed'}; - } - } - $prevattempts.=''.&format_previous_attempt_value($key,$value). - ' '; + my $value = &format_previous_attempt_value($key, + $returnhash{$version.':'.$key}); + $prevattempts.=''.$value.' '; } } $prevattempts.=&end_data_table_row(); @@ -4322,20 +4267,23 @@ sub findallcourses { ############################################### sub blockcheck { - my ($setters,$activity,$uname,$udom,$url,$is_course) = @_; + my ($setters,$activity,$uname,$udom,$url) = @_; - if (defined($udom) && defined($uname)) { - # If uname and udom are for a course, check for blocks in the course. - if (($is_course) || (&Apache::lonnet::is_course($udom,$uname))) { - my ($startblock,$endblock,$triggerblock) = - &get_blocks($setters,$activity,$udom,$uname,$url); - return ($startblock,$endblock,$triggerblock); - } - } else { + if (!defined($udom)) { $udom = $env{'user.domain'}; + } + if (!defined($uname)) { $uname = $env{'user.name'}; } + # If uname and udom are for a course, check for blocks in the course. + + if (&Apache::lonnet::is_course($udom,$uname)) { + my ($startblock,$endblock,$triggerblock) = + &get_blocks($setters,$activity,$udom,$uname,$url); + return ($startblock,$endblock,$triggerblock); + } + my $startblock = 0; my $endblock = 0; my $triggerblock = ''; @@ -4345,8 +4293,7 @@ sub blockcheck { # boards, chat or groups, check for blocking in current course only. if (($activity eq 'boards' || $activity eq 'chat' || - $activity eq 'groups' || $activity eq 'printout') && - ($env{'request.course.id'})) { + $activity eq 'groups') && ($env{'request.course.id'})) { foreach my $key (keys(%live_courses)) { if ($key ne $env{'request.course.id'}) { delete($live_courses{$key}); @@ -4610,12 +4557,12 @@ sub parse_block_record { } sub blocking_status { - my ($activity,$uname,$udom,$url,$is_course) = @_; + my ($activity,$uname,$udom,$url) = @_; my %setters; # check for active blocking my ($startblock,$endblock,$triggerblock) = - &blockcheck(\%setters,$activity,$uname,$udom,$url,$is_course); + &blockcheck(\%setters,$activity,$uname,$udom,$url); my $blocked = 0; if ($startblock && $endblock) { $blocked = 1; @@ -4772,28 +4719,23 @@ sub get_domainconf { if (keys(%{$domconfig{'login'}})) { foreach my $key (keys(%{$domconfig{'login'}})) { if (ref($domconfig{'login'}{$key}) eq 'HASH') { - if (($key eq 'loginvia') || ($key eq 'headtag')) { - if (ref($domconfig{'login'}{$key}) eq 'HASH') { - foreach my $hostname (keys(%{$domconfig{'login'}{$key}})) { - if (ref($domconfig{'login'}{$key}{$hostname}) eq 'HASH') { - if ($key eq 'loginvia') { - if ($domconfig{'login'}{'loginvia'}{$hostname}{'server'}) { - my $server = $domconfig{'login'}{'loginvia'}{$hostname}{'server'}; - $designhash{$udom.'.login.loginvia'} = $server; - if ($domconfig{'login'}{'loginvia'}{$hostname}{'serverpath'} eq 'custom') { - $designhash{$udom.'.login.loginvia_'.$hostname} = $server.':'.$domconfig{'login'}{'loginvia'}{$hostname}{'custompath'}; - } else { - $designhash{$udom.'.login.loginvia_'.$hostname} = $server.':'.$domconfig{'login'}{'loginvia'}{$hostname}{'serverpath'}; - } + if ($key eq 'loginvia') { + if (ref($domconfig{'login'}{'loginvia'}) eq 'HASH') { + foreach my $hostname (keys(%{$domconfig{'login'}{'loginvia'}})) { + if (ref($domconfig{'login'}{'loginvia'}{$hostname}) eq 'HASH') { + if ($domconfig{'login'}{'loginvia'}{$hostname}{'server'}) { + my $server = $domconfig{'login'}{'loginvia'}{$hostname}{'server'}; + $designhash{$udom.'.login.loginvia'} = $server; + if ($domconfig{'login'}{'loginvia'}{$hostname}{'serverpath'} eq 'custom') { + + $designhash{$udom.'.login.loginvia_'.$hostname} = $server.':'.$domconfig{'login'}{'loginvia'}{$hostname}{'custompath'}; + } else { + $designhash{$udom.'.login.loginvia_'.$hostname} = $server.':'.$domconfig{'login'}{'loginvia'}{$hostname}{'serverpath'}; } - } elsif ($key eq 'headtag') { - if ($domconfig{'login'}{'headtag'}{$hostname}{'url'}) { - $designhash{$udom.'.login.headtag_'.$hostname} = $domconfig{'login'}{'headtag'}{$hostname}{'url'}; + if ($domconfig{'login'}{'loginvia'}{$hostname}{'exempt'}) { + $designhash{$udom.'.login.loginvia_exempt_'.$hostname} = $domconfig{'login'}{'loginvia'}{$hostname}{'exempt'}; } } - if ($domconfig{'login'}{$key}{$hostname}{'exempt'}) { - $designhash{$udom.'.login.'.$key.'_exempt_'.$hostname} = $domconfig{'login'}{$key}{$hostname}{'exempt'}; - } } } } @@ -4959,7 +4901,7 @@ sub designparm { Inputs: $url (usually will be undef). -Returns: Path to Authoring Space containing the resource or +Returns: Path to Construction Space containing the resource or directory being viewed (or for which action is being taken). If $url is provided, and begins /priv// the path will be that portion of the $context argument. @@ -5022,7 +4964,7 @@ Input: (optional) filename from which br is appropriate for use in building the breadcrumb trail. Returns: HTML div with CSTR path and recent box - To be included on Authoring Space pages + To be included on Construction Space pages =cut @@ -5037,7 +4979,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; @@ -5053,7 +4995,7 @@ sub CSTR_pageheader { my $output = '
' .&Apache::loncommon::help_open_menu('','',3,'Authoring') #FIXME: Broken? Where is it? - .''.&mt('Authoring Space:').' ' + .''.&mt('Construction Space:').' ' .'
' #FIXME lonpubdir: target="_parent" .&Apache::lonhtmlcommon::crumbs($uname.'/'.$parentpath,'_top','/priv/'.$udom,undef,undef); @@ -5112,9 +5054,6 @@ 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, @@ -5136,7 +5075,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,$advtoolsref)=@_; my $public; if ((($env{'user.name'} eq 'public') && ($env{'user.domain'} eq 'public')) @@ -5144,7 +5083,6 @@ sub bodytag { $public = 1; } if (!$args->{'no_auto_mt_title'}) { $title = &mt($title); } - my $httphost = $args->{'use_absolute'}; $function = &get_users_function() if (!$function); my $img = &designparm($function.'.img',$domain); @@ -5160,10 +5098,7 @@ sub bodytag { @design{keys(%$addentries)} = @$addentries{keys(%$addentries)}; # role and realm - my ($role,$realm) = split(m{\./},$env{'request.role'},2); - if ($realm) { - $realm = '/'.$realm; - } + my ($role,$realm) = split(/\./,$env{'request.role'},2); if ($role eq 'ca') { my ($rdom,$rname) = ($realm =~ m{^/($match_domain)/($match_username)$}); $realm = &plainname($rname,$rdom); @@ -5189,14 +5124,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.'

'; @@ -5212,78 +5149,60 @@ 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($httphost), '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($httphost), '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); } $bodytag .= qq|
$realm $dc_info
|; - #if directed to not display the secondary menu, don't. - if ($args->{'no_secondary_menu'}) { - return $bodytag; - } #don't show menus for public users if (!$public){ - $bodytag .= Apache::lonmenu::secondary_menu($httphost); + $bodytag .= Apache::lonmenu::secondary_menu(); $bodytag .= Apache::lonmenu::serverform(); $bodytag .= Apache::lonhtmlcommon::scripttag('', 'end'); if ($env{'request.state'} eq 'construct') { $bodytag .= &Apache::lonmenu::innerregister($forcereg, $args->{'bread_crumbs'}); - } elsif ($forcereg) { + } 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::prepare_functions($env{'request.noversionuri'}, + $forcereg,$args->{'group'}, + $args->{'bread_crumbs'}, + $advtoolsref); } }else{ # this is to seperate menu from content when there's no secondary @@ -5293,54 +5212,6 @@ sub bodytag { } return $bodytag; - } - -# -# Top frame rendering, Remote is up -# - - my $imgsrc = $img; - if ($img =~ /^\/adm/) { - $imgsrc = &lonhttpdurl($img); - } - my $upperleft=''.$function.''; - - my $help=($no_inline_link?'' - :&Apache::loncommon::top_nav_help('Help')); - - # 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
-
    -
  1. $help
  2. -
  3. $menu
  4. -
$realm $dc_info
|; - } - if ($env{'request.state'} eq 'construct') { - if (!$public){ - if ($env{'request.state'} eq 'construct') { - $funclist = &Apache::lonhtmlcommon::scripttag( - &Apache::lonmenu::utilityfunctions($httphost), 'start'). - &Apache::lonhtmlcommon::scripttag('','end'). - &Apache::lonmenu::innerregister($forcereg, - $args->{'bread_crumbs'}); - } - } - } - return $bodytag."\n".$funclist; } sub dc_courseid_toggle { @@ -5372,19 +5243,12 @@ 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; - foreach my $attr (sort(keys(%$attr_ref))) { + foreach my $attr (keys(%$attr_ref)) { $attr_string .= " $attr=\"".$attr_ref->{$attr}.'" '; } return $attr_string; @@ -5515,14 +5379,6 @@ form, .inline { vertical-align:middle; } -.LC_floatleft { - float: left; -} - -.LC_floatright { - float: right; -} - .LC_400Box { width:400px; } @@ -5866,8 +5722,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; } @@ -6593,19 +6448,6 @@ div.LC_edit_problem_saves { padding-bottom: 5px; } -.LC_edit_opt { - padding-left: 1em; - white-space: nowrap; -} - -.LC_edit_problem_latexhelper{ - text-align: right; -} - -#LC_edit_problem_colorful div{ - margin-left: 40px; -} - img.stift { border-width: 0; vertical-align: middle; @@ -6620,7 +6462,6 @@ div.LC_createcourse { } .LC_dccid { - float: right; margin: 0.2em 0 0 0; padding: 0; font-size: 90%; @@ -6693,10 +6534,6 @@ fieldset { /* overflow: hidden; */ } -article.geogebraweb div { - margin: 0; -} - fieldset > legend { font-weight: bold; padding: 0 5px 0 5px; @@ -6722,6 +6559,7 @@ fieldset > legend { } ol.LC_primary_menu { + float: right; margin: 0; padding: 0; background-color: $pgbg_or_bgcolor; @@ -6818,7 +6656,7 @@ ol.LC_docs_parameters li.LC_docs_paramet } ul#LC_secondary_menu { - clear: right; + clear: both; color: $fontmenu; background: $tabbg; list-style: none; @@ -6826,53 +6664,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 { @@ -7376,7 +7176,6 @@ sub headtag { my $function = $args->{'function'} || &get_users_function(); my $domain = $args->{'domain'} || &determinedomain(); my $bgcolor = $args->{'bgcolor'} || &designparm($function.'.pgbg',$domain); - my $httphost = $args->{'use_absolute'}; my $url = join(':',$env{'user.name'},$env{'user.domain'}, $Apache::lonnet::perlvar{'lonVersion'}, #time(), @@ -7387,23 +7186,20 @@ sub headtag { my $result = ''. - &font_settings($args); + &font_settings(); - my $inhibitprint; - if ($args->{'print_suppress'}) { - $inhibitprint = &print_suppression(); - } + my $inhibitprint = &print_suppression(); 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'} && !$args->{'frameset'}) { - $result .= &help_menu_js($httphost); + $result .= &help_menu_js(); $result.=&modal_window(); $result.=&togglebox_script(); $result.=&wishlist_window(); @@ -7432,99 +7228,15 @@ sub headtag { ADDMETA - } else { - unless (($args->{'frameset'}) || ($args->{'js_ready'}) || ($args->{'only_body'}) || ($args->{'no_nav_bar'})) { - my $requrl = $env{'request.uri'}; - if ($requrl eq '') { - $requrl = $ENV{'REQUEST_URI'}; - $requrl =~ s/\?.+$//; - } - unless (($requrl =~ m{^/adm/(?:switchserver|login|authenticate|logout|groupsort|cleanup|helper|slotrequest|grades)(\?|$)}) || - (($requrl =~ m{^/res/}) && (($env{'form.submitted'} eq 'scantron') || - ($env{'form.grade_symb'}) || ($Apache::lonhomework::scantronmode)))) { - my $dom_in_use = $Apache::lonnet::perlvar{'lonDefDomain'}; - unless (&Apache::lonnet::allowed('mau',$dom_in_use)) { - my %domdefs = &Apache::lonnet::get_domain_defaults($dom_in_use); - if (ref($domdefs{'offloadnow'}) eq 'HASH') { - my $lonhost = $Apache::lonnet::perlvar{'lonHostID'}; - if ($domdefs{'offloadnow'}{$lonhost}) { - my $newserver = &Apache::lonnet::spareserver(30000,undef,1,$dom_in_use); - if (($newserver) && ($newserver ne $lonhost)) { - my $numsec = 5; - my $timeout = $numsec * 1000; - my ($newurl,$locknum,%locks,$msg); - if ($env{'request.role.adv'}) { - ($locknum,%locks) = &Apache::lonnet::get_locks(); - } - my $disable_submit = 0; - if ($requrl =~ /$LONCAPA::assess_re/) { - $disable_submit = 1; - } - if ($locknum) { - my @lockinfo = sort(values(%locks)); - $msg = &mt('Once the following tasks are complete: ')."\\n". - join(", ",sort(values(%locks)))."\\n". - &mt('your session will be transferred to a different server, after you click "Roles".'); - } else { - if (($requrl =~ m{^/res/}) && ($env{'form.submitted'} =~ /^part_/)) { - $msg = &mt('Your LON-CAPA submission has been recorded')."\\n"; - } - $msg .= &mt('Your current LON-CAPA session will be transferred to a different server in [quant,_1,second].',$numsec); - $newurl = '/adm/switchserver?otherserver='.$newserver; - if (($env{'request.role'}) && ($env{'request.role'} ne 'cm')) { - $newurl .= '&role='.$env{'request.role'}; - } - if ($env{'request.symb'}) { - $newurl .= '&symb='.$env{'request.symb'}; - } else { - $newurl .= '&origurl='.$requrl; - } - } - $result.=< - -OFFLOAD - } - } - } - } - } - } } if (!defined($title)) { $title = 'The LearningOnline Network with CAPA'; } if (!$args->{'no_auto_mt_title'}) { $title = &mt($title); } $result .= ' LON-CAPA '.$title.'' - .'{'frameset'}) { - $result .= ' /'; - } - $result .= '>' + .'' .$inhibitprint .$head_extra; - if ($env{'browser.mobile'}) { - $result .= ' - -'; - } return $result.''; } @@ -7534,21 +7246,15 @@ OFFLOAD Returns neccessary to set the proper encoding -Inputs: optional reference to HASH -- $args passed to &headtag() +Inputs: none =cut sub font_settings { - my ($args) = @_; my $headerstring=''; - if ((!$env{'browser.mathml'} && $env{'browser.unicode'}) || - ((ref($args) eq 'HASH') && ($args->{'browser.unicode'}))) { + if (!$env{'browser.mathml'} && $env{'browser.unicode'}) { $headerstring.= - '{'frameset'}) { - $headerstring.= ' /'; - } - $headerstring .= '>'."\n"; + ''; } return $headerstring; } @@ -7593,7 +7299,7 @@ sub print_suppression { } my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; - my $blocked = &blocking_status('printout',$cnum,$cdom,undef,1); + my $blocked = &blocking_status('printout',$cnum,$cdom); if ($blocked) { my $checkrole = "cm./$cdom/$cnum"; if ($env{'request.course.sec'} ne '') { @@ -7640,7 +7346,6 @@ Inputs: none =cut sub xml_begin { - my ($is_frameset) = @_; my $output=''; if ($env{'browser.mathml'}) { @@ -7652,12 +7357,9 @@ sub xml_begin { .'' .''; - } elsif ($is_frameset) { - $output=''."\n". - ''."\n"; } else { - $output=''."\n". - ''."\n"; + $output='' + .''; } return $output; } @@ -7701,16 +7403,14 @@ $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 + group -> includes the current group, if page is for a + specific group =back @@ -7726,7 +7426,7 @@ sub start_page { my ($result,@advtools); if (! exists($args->{'skip_phases'}{'head'}) ) { - $result .= &xml_begin($args->{'frameset'}) . &headtag($title, $head_extra, $args); + $result .= &xml_begin() . &headtag($title, $head_extra, $args); } if (! exists($args->{'skip_phases'}{'body'}) ) { @@ -7740,8 +7440,8 @@ 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, + \@advtools); } } @@ -7781,11 +7481,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; } @@ -7832,13 +7527,9 @@ function set_wishlistlink(title, path) { title = document.title; title = title.replace(/^LON-CAPA /,''); } - title = encodeURIComponent(title); - title = title.replace("'","\\\'"); if (!path) { path = location.pathname; } - path = encodeURIComponent(path); - path = path.replace("'","\\\'"); Win = window.open('/adm/wishlist?mode=newLink&setTitle='+title+'&setPath='+path, 'wishlistNewLink','width=560,height=350,scrollbars=0'); } @@ -7879,15 +7570,14 @@ var modalWindow = { $(".LCmodal-overlay").click(function(){modalWindow.close();}); } }; - var openMyModal = function(source,width,height,scrolling,transparency,style) + var openMyModal = function(source,width,height,scrolling) { - source = source.replace("'","'"); modalWindow.windowId = "myModal"; modalWindow.width = width; modalWindow.height = height; - modalWindow.content = ""; + modalWindow.content = "