--- loncom/interface/loncommon.pm 2009/10/12 18:28:12 1.692.4.19 +++ loncom/interface/loncommon.pm 2017/08/07 20:22:13 1.1287 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # a pile of common routines # -# $Id: loncommon.pm,v 1.692.4.19 2009/10/12 18:28:12 raeburn Exp $ +# $Id: loncommon.pm,v 1.1287 2017/08/07 20:22:13 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -67,9 +67,23 @@ 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 LONCAPA::LWPReq; use DateTime::TimeZone; -use DateTime::Locale::Catalog; +use DateTime::Locale; +use Encode(); +use Text::Aspell; +use Authen::Captcha; +use Captcha::reCAPTCHA; +use JSON::DWIW; +use LWP::UserAgent; +use Crypt::DES; +use DynaLoader; # for Crypt::DES version +use MIME::Lite; +use MIME::Types; # ---------------------------------------------- Designs use vars qw(%defaultdesign); @@ -154,6 +168,9 @@ 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; my %scprtag; my %fe; my %fd; my %fm; @@ -186,11 +203,16 @@ BEGIN { while (my $line = <$fh>) { next if ($line=~/^\#/); chomp($line); - my ($key,$two,$country,$three,$enc,$val,$sup)=(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{$code} = $latex; + } } close($fh); } @@ -246,7 +268,7 @@ BEGIN { next if ($line =~ /^\#/); chomp($line); my ($extension,$category)=(split(/\s+/,$line,2)); - push @{$category_extensions{lc($category)}},$extension; + push(@{$category_extensions{lc($category)}},$extension); } close($fh); } @@ -271,7 +293,7 @@ BEGIN { } } &Apache::lonnet::logthis( - "INFO: Read file types"); + "INFO: Read file types"); $readit=1; } # end of unless($readit) @@ -409,7 +431,7 @@ sub studentbrowser_javascript { +ENDRESBRW +} + sub selectstudent_link { - my ($form,$unameele,$udomele,$courseadvonly)=@_; - my $callargs = "'".$form."','".$unameele."','".$udomele."'"; + my ($form,$unameele,$udomele,$courseadvonly,$clickerid)=@_; + my $callargs = "'".&Apache::lonhtmlcommon::entity_encode($form)."','". + &Apache::lonhtmlcommon::entity_encode($unameele)."','". + &Apache::lonhtmlcommon::entity_encode($udomele)."'"; if ($env{'request.course.id'}) { if (!&Apache::lonnet::allowed('srm',$env{'request.course.id'}) && !&Apache::lonnet::allowed('srm',$env{'request.course.id'}. '/'.$env{'request.course.sec'})) { return ''; } + $callargs.=",'".&Apache::lonhtmlcommon::entity_encode($clickerid)."'"; if ($courseadvonly) { $callargs .= ",'',1,1"; } @@ -452,7 +497,7 @@ sub selectstudent_link { &mt('Select User').''; } if ($env{'request.role'}=~/^(au|dc|su)/) { - $callargs .= ",1"; + $callargs .= ",'',1"; return ''. ''. &mt('Select User').''; @@ -460,9 +505,22 @@ sub selectstudent_link { return ''; } +sub selectresource_link { + my ($form,$reslink,$arg)=@_; + + my $callargs = "'".&Apache::lonhtmlcommon::entity_encode($form)."','". + &Apache::lonhtmlcommon::entity_encode($reslink)."'"; + unless ($env{'request.course.id'}) { return $arg; } + return ''. + ''. + $arg.''; +} + + + sub authorbrowser_javascript { return <<"ENDAUTHORBRW"; - ENDAUTHORBRW } sub coursebrowser_javascript { - my ($domainfilter,$sec_element,$formname)=@_; - my $crs_or_grp_alert = &mt('Please select the type of LON-CAPA entity - Course or Community - for which you wish to add/modify a user role.'); + my ($domainfilter,$sec_element,$formname,$role_element,$crstype, + $credits_element,$instcode) = @_; + my $wintitle = 'Course_Browser'; + if ($crstype eq 'Community') { + $wintitle = 'Community_Browser'; + } my $id_functions = &javascript_index_functions(); my $output = ' + +ENDJS + +} + sub userbrowser_javascript { my $id_functions = &javascript_index_functions(); return <<"ENDUSERBRW"; @@ -655,9 +768,29 @@ $id_functions ENDUSERBRW } - sub setsec_javascript { - my ($sec_element,$formname) = @_; + my ($sec_element,$formname,$role_element,$credits_element) = @_; + my (@courserolenames,@communityrolenames,$rolestr,$courserolestr, + $communityrolestr); + if ($role_element ne '') { + my @allroles = ('st','ta','ep','in','ad'); + foreach my $crstype ('Course','Community') { + if ($crstype eq 'Community') { + foreach my $role (@allroles) { + push(@communityrolenames,&Apache::lonnet::plaintext($role,$crstype)); + } + push(@communityrolenames,&Apache::lonnet::plaintext('co')); + } else { + foreach my $role (@allroles) { + push(@courserolenames,&Apache::lonnet::plaintext($role,$crstype)); + } + push(@courserolenames,&Apache::lonnet::plaintext('cc')); + } + } + $rolestr = '"'.join('","',@allroles).'"'; + $courserolestr = '"'.join('","',@courserolenames).'"'; + $communityrolestr = '"'.join('","',@communityrolenames).'"'; + } my $setsections = qq| function setSect(sectionlist) { var sectionsArray = new Array(); @@ -691,22 +824,78 @@ function setSect(sectionlist) { } } } + +function setRole(crstype) { +|; + if ($role_element eq '') { + $setsections .= ' return; +} +'; + } else { + $setsections .= qq| + var elementLength = document.$formname.$role_element.length; + var allroles = Array($rolestr); + var courserolenames = Array($courserolestr); + var communityrolenames = Array($communityrolestr); + if (elementLength != undefined) { + if (document.$formname.$role_element.options[5].value == 'cc') { + if (crstype == 'Course') { + return; + } else { + allroles[5] = 'co'; + for (var i=0; i<6; i++) { + document.$formname.$role_element.options[i].value = allroles[i]; + document.$formname.$role_element.options[i].text = communityrolenames[i]; + } + } + } else { + if (crstype == 'Community') { + return; + } else { + allroles[5] = 'cc'; + for (var i=0; i<6; i++) { + document.$formname.$role_element.options[i].value = allroles[i]; + document.$formname.$role_element.options[i].text = courserolenames[i]; + } + } + } + } + return; +} +|; + } + if ($credits_element) { + $setsections .= qq| +function setCredits(defaultcredits) { + document.$formname.$credits_element.value = defaultcredits; + return; +} |; + } return $setsections; } - sub selectcourse_link { - my ($form,$unameele,$udomele,$desc,$extra_element,$multflag,$selecttype)=@_; + my ($form,$unameele,$udomele,$desc,$extra_element,$multflag,$selecttype, + $typeelement) = @_; + my $type = $selecttype; my $linktext = &mt('Select Course'); if ($selecttype eq 'Community') { $linktext = &mt('Select Community'); + } elsif ($selecttype eq 'Placement') { + $linktext = &mt('Select Placement Test'); + } elsif ($selecttype eq 'Course/Community') { + $linktext = &mt('Select Course/Community'); + $type = ''; + } elsif ($selecttype eq 'Select') { + $linktext = &mt('Select'); + $type = ''; } return '' ."".$linktext.'' .''; } @@ -730,10 +919,14 @@ sub check_uncheck_jscript { function checkAll(field) { if (field.length > 0) { for (i = 0; i < field.length; i++) { - field[i].checked = true ; + if (!field[i].disabled) { + field[i].checked = true; + } } } else { - field.checked = true + if (!field.disabled) { + field.checked = true; + } } } @@ -751,8 +944,8 @@ ENDSCRT } sub select_timezone { - my ($name,$selected,$onchange,$includeempty)=@_; - my $output=''."\n"; if ($includeempty) { $output .= '