--- loncom/interface/loncommon.pm 2002/08/28 19:42:49 1.63 +++ loncom/interface/loncommon.pm 2003/03/20 19:20:31 1.89 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # a pile of common routines # -# $Id: loncommon.pm,v 1.63 2002/08/28 19:42:49 www Exp $ +# $Id: loncommon.pm,v 1.89 2003/03/20 19:20:31 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -27,9 +27,7 @@ # # YEAR=2001 # 2/13-12/7 Guy Albertelli -# 12/11,12/12,12/17 Scott Harrison # 12/21 Gerd Kortemeyer -# 12/21 Scott Harrison # 12/25,12/28 Gerd Kortemeyer # YEAR=2002 # 1/4 Gerd Kortemeyer @@ -83,6 +81,7 @@ use GDBM_File; use POSIX qw(strftime mktime); use Apache::Constants qw(:common); use Apache::lonmsg(); +use Apache::lonmenu(); my $readit; =pod @@ -311,7 +310,44 @@ sub browser_and_searcher_javascript { END } +sub studentbrowser_javascript { + unless ($ENV{'request.course.id'}) { return ''; } + unless (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'})) { + return ''; + } + return (<<'ENDSTDBRW'); + +ENDSTDBRW +} +sub selectstudent_link { + my ($form,$unameele,$udomele)=@_; + unless ($ENV{'request.course.id'}) { return ''; } + unless (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'})) { + return ''; + } + return "Select"; +} ############################################################### @@ -483,6 +519,9 @@ sub help_open_topic { my ($topic, $text, $stayOnPage, $width, $height) = @_; $text = "" if (not defined $text); $stayOnPage = 0 if (not defined $stayOnPage); + if ($ENV{'browser.interface'} eq 'textual') { + $stayOnPage=1; + } $width = 350 if (not defined $width); $height = 400 if (not defined $height); my $filename = $topic; @@ -493,7 +532,7 @@ sub help_open_topic { if (!$stayOnPage) { - $link = "javascript:void(open('/adm/help/${filename}.hlp', 'Help_for_$topic', 'menubar=0,toolbar=1,scrollbars=1,width=$width,height=$height'))"; + $link = "javascript:void(open('/adm/help/${filename}.hlp', 'Help_for_$topic', 'menubar=0,toolbar=1,scrollbars=1,width=$width,height=$height,resizable=yes'))"; } else { @@ -503,14 +542,16 @@ sub help_open_topic { # Add the text if ($text ne "") { - $template .= "$text "; + $template .= + "". + "
$text"; } # Add the graphic $template .= <<"ENDTEMPLATE"; -(Help: $topic) + (Help: $topic) ENDTEMPLATE - + if ($text ne '') { $template.='
' }; return $template; } @@ -560,6 +601,32 @@ sub get_domains { =pod +=item select_form($defdom,$name,%hash) + +Returns a string containing a \n"; + foreach (sort keys %hash) { + $selectform.="\n"; + } + $selectform.=""; + return $selectform; +} + + +#------------------------------------------- + +=pod + =item select_dom_form($defdom,$name) Returns a string containing a Kerberos authenticated with domain - -Version 4 -Version 5 +Version 4 +Version 5 END return $result; } @@ -802,7 +957,7 @@ sub authform_internal{ onclick="javascript:changed_radio('int',$args{'formname'});" /> Internally authenticated (with initial password + onchange="javascript:changed_text('int',$args{'formname'});" />) END return $result; } @@ -838,7 +993,7 @@ sub authform_filesystem{ onclick="javascript:changed_radio('fsys',$in{'formname'});" /> Filesystem authenticated (with initial password + onchange="javascript:changed_text('fsys',$in{'formname'});">) END return $result; } @@ -848,6 +1003,89 @@ END ############################################################### ############################################################### +## Get Authentication Defaults for Domain ## +############################################################### +## +## Returns default authentication type and an associated argument +## as listed in file domain.tab +## +#------------------------------------------- + +=pod + +=item get_auth_defaults + +get_auth_defaults($target_domain) returns the default authentication +type and an associated argument (initial password or a kerberos domain). +These values are stored in lonTabs/domain.tab + +($def_auth, $def_arg) = &get_auth_defaults($target_domain); + +If target_domain is not found in domain.tab, returns nothing (''). + +=over 4 + +=item get_auth_defaults + +=back + +=cut + +#------------------------------------------- +sub get_auth_defaults { + my $domain=shift; + return ($Apache::lonnet::domain_auth_def{$domain},$Apache::lonnet::domain_auth_arg_def{$domain}); +} +############################################################### +## End Get Authentication Defaults for Domain ## +############################################################### + +############################################################### +## Get Kerberos Defaults for Domain ## +############################################################### +## +## Returns default kerberos version and an associated argument +## as listed in file domain.tab. If not listed, provides +## appropriate default domain and kerberos version. +## +#------------------------------------------- + +=pod + +=item get_kerberos_defaults + +get_kerberos_defaults($target_domain) returns the default kerberos +version and domain. If not found in domain.tabs, it defaults to +version 4 and the domain of the server. + +($def_version, $def_krb_domain) = &get_kerberos_defaults($target_domain); + +=over 4 + +=item get_kerberos_defaults + +=back + +=cut + +#------------------------------------------- +sub get_kerberos_defaults { + my $domain=shift; + my ($krbdef,$krbdefdom) = + &Apache::loncommon::get_auth_defaults($domain); + unless ($krbdef =~/^krb/ && $krbdefdom) { + $ENV{'SERVER_NAME'}=~/(\w+\.\w+)$/; + my $krbdefdom=$1; + $krbdefdom=~tr/a-z/A-Z/; + $krbdef = "krb4"; + } + return ($krbdef,$krbdefdom); +} +############################################################### +## End Get Kerberos Defaults for Domain ## +############################################################### + +############################################################### ## Thesaurus Functions ## ############################################################### @@ -961,7 +1199,17 @@ sub get_related_words { ############################################################### # -------------------------------------------------------------- Plaintext name +=pod + +=item plainname($uname,$udom) + +Gets a users name and returns it as a string in +"first middle last generation" +form + +=cut +############################################################### sub plainname { my ($uname,$udom)=@_; my %names=&Apache::lonnet::get('environment', @@ -974,8 +1222,50 @@ sub plainname { return $name; } +# -------------------------------------------------------------------- Nickname +=pod + +=item nickname($uname,$udom) + +Gets a users name and returns it as a string as + +""nickname"" + +if the user has a nickname or + +"first middle last generation" + +if the user does not + +=cut + +sub nickname { + my ($uname,$udom)=@_; + my %names=&Apache::lonnet::get('environment', + ['nickname','firstname','middlename','lastname','generation'],$udom,$uname); + my $name=$names{'nickname'}; + if ($name) { + $name='"'.$name.'"'; + } else { + $name=$names{'firstname'}.' '.$names{'middlename'}.' '. + $names{'lastname'}.' '.$names{'generation'}; + $name=~s/\s+$//; + $name=~s/\s+/ /g; + } + return $name; +} + + # ------------------------------------------------------------------ Screenname +=pod + +=item screenname($uname,$udom) + +Gets a users screenname and returns it as a string + +=cut + sub screenname { my ($uname,$udom)=@_; my %names= @@ -990,18 +1280,26 @@ sub messagewrapper { return "$link"; } +# --------------------------------------------------------------- Notes Wrapper + +sub noteswrapper { + my ($link,$un,$do)=@_; + return +"$link"; +} # ------------------------------------------------------------- Aboutme Wrapper sub aboutmewrapper { - my ($link,$un,$do)=@_; - return "$link"; + my ($link,$username,$domain)=@_; + return "$link"; } # ------------------------------------------------------------ Syllabus Wrapper sub syllabuswrapper { - my ($link,$un,$do)=@_; + my ($link,$un,$do,$tf)=@_; + if ($tf) { $link=''.$link.''; } return "$link"; } @@ -1134,7 +1432,7 @@ sub get_previous_attempt { } sub get_student_view { - my ($symb,$username,$domain,$courseid) = @_; + my ($symb,$username,$domain,$courseid,$target) = @_; my ($map,$id,$feedurl) = split(/___/,$symb); my (%old,%moreenv); my @elements=('symb','courseid','domain','username'); @@ -1142,6 +1440,7 @@ sub get_student_view { $old{$element}=$ENV{'form.grade_'.$element}; $moreenv{'form.grade_'.$element}=eval '$'.$element #' } + if ($target eq 'tex') {$moreenv{'form.grade_target'} = 'tex';} &Apache::lonnet::appenv(%moreenv); my $userview=&Apache::lonnet::ssi('/res/'.$feedurl); &Apache::lonnet::delenv('form.grade_'); @@ -1201,6 +1500,22 @@ sub maketime { } +######################################### +# +# Retro-fixing of un-backward-compatible time format + +sub unsqltime { + my $timestamp=shift; + if ($timestamp=~/^(\d+)\-(\d+)\-(\d+)\s+(\d+)\:(\d+)\:(\d+)$/) { + $timestamp=&maketime( + 'year'=>$1,'month'=>$2,'day'=>$3, + 'hours'=>$4,'minutes'=>$5,'seconds'=>$6); + } + return $timestamp; +} + +######################################### + sub findallcourses { my %courses=(); my $now=time; @@ -1262,7 +1577,10 @@ sub domainlogo { my $domain = &determinedomain(shift); # See if there is a logo if (-e '/home/httpd/html/adm/lonDomLogos/'.$domain.'.gif') { - return ''; + my $lonhttpdPort=$Apache::lonnet::perlvar{'lonhttpdPort'}; + if (!defined($lonhttpdPort)) { $lonhttpdPort='8080'; } + return ''; } elsif(exists($Apache::lonnet::domaindescription{$domain})) { return $Apache::lonnet::domaindescription{$domain}; } else { @@ -1307,6 +1625,8 @@ Inputs: $addentries, extra parameters for the tag. $bodyonly, if defined, only return the tag. $domain, if defined, force a given domain. + $forcereg, if page should register as content page (relevant for + text interface only) Returns: A uniform header for LON-CAPA web pages. If $bodyonly is nonzero, a string containing a tag will be returned. @@ -1320,7 +1640,7 @@ other decorations will be returned. ############################################### sub bodytag { - my ($title,$function,$addentries,$bodyonly,$domain)=@_; + my ($title,$function,$addentries,$bodyonly,$domain,$forcereg)=@_; unless ($function) { $function='student'; if ($ENV{'request.role'}=~/^(cc|in|ta|ep)/) { @@ -1355,18 +1675,24 @@ sub bodytag { # Set messages my $messages=&domainlogo($domain); # Output + my $lonhttpdPort=$Apache::lonnet::perlvar{'lonhttpdPort'}; + if (!defined($lonhttpdPort)) { $lonhttpdPort='8080'; } my $bodytag = < END if ($bodyonly) { return $bodytag; + } elsif ($ENV{'browser.interface'} eq 'textual') { + return $bodytag.&Apache::lonmenu::menubuttons($forcereg,'web', + $forcereg). + '

LON-CAPA: '.$title.'

'; } else { return(< - + $messages @@ -1692,6 +2018,37 @@ sub csv_samples_select_table { $i--; return($i); } + +=pod + +=item check_if_partid_hidden($id,$symb,$udom,$uname) + +Returns either 1 or undef + +1 if the part is to be hidden, undef if it is to be shown + +Arguments are: + +$id the id of the part to be checked +$symb, optional the symb of the resource to check +$udom, optional the domain of the user to check for +$uname, optional the username of the user to check for + +=cut + +sub check_if_partid_hidden { + my ($id,$symb,$udom,$uname) = @_; + my $hiddenparts=&Apache::lonnet::EXT('resource.0.parameter_hiddenparts', + $symb,$udom,$uname); + my @hiddenlist=split(/,/,$hiddenparts); + foreach my $checkid (@hiddenlist) { + if ($checkid =~ /^\s*\Q$id\E\s*$/) { return 1; } + } + return undef; +} + + + 1; __END__; @@ -1780,7 +2137,7 @@ will result in $ENV{'form.uname'} and $E returns cache-controlling header code -=item nocache() +=item no_cache($r) specifies header code to not have cache