--- loncom/interface/loncommon.pm 2002/07/12 14:36:16 1.46 +++ loncom/interface/loncommon.pm 2002/08/22 21:02:49 1.57 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # a pile of common routines # -# $Id: loncommon.pm,v 1.46 2002/07/12 14:36:16 matthew Exp $ +# $Id: loncommon.pm,v 1.57 2002/08/22 21:02:49 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -80,7 +80,7 @@ package Apache::loncommon; use strict; use Apache::lonnet(); use GDBM_File; -use POSIX qw(strftime); +use POSIX qw(strftime mktime); use Apache::Constants qw(:common); use Apache::lonmsg(); my $readit; @@ -242,7 +242,7 @@ of the element the selection from the se ############################################################### sub browser_and_searcher_javascript { return <(Help: $topic) -ENDTEMPLATE + $link = "javascript:void(open('/adm/help/${filename}.hlp', 'Help_for_$topic', 'menubar=0,toolbar=1,scrollbars=1,width=$width,height=$height'))"; } else { - $template = <<"ENDTEMPLATE"; -(Help: $topic) -ENDTEMPLATE + $link = "/adm/help/${filename}.hlp"; + } + + # Add the text + if ($text ne "") + { + $template .= "$text "; } + # Add the graphic + $template .= <<"ENDTEMPLATE"; +(Help: $topic) +ENDTEMPLATE + return $template; } @@ -552,7 +558,7 @@ sub select_dom_form { =pod -=item get_home_servers($domain) +=item get_library_servers($domain) Returns a hash which contains keys like '103l3' and values like 'kirk.lite.msu.edu'. All of the keys will be for machines in the @@ -561,15 +567,15 @@ given $domain. =cut #------------------------------------------- -sub get_home_servers { +sub get_library_servers { my $domain = shift; - my %home_servers; + my %library_servers; foreach (keys(%Apache::lonnet::libserv)) { if ($Apache::lonnet::hostdom{$_} eq $domain) { - $home_servers{$_} = $Apache::lonnet::hostname{$_}; + $library_servers{$_} = $Apache::lonnet::hostname{$_}; } } - return %home_servers; + return %library_servers; } #------------------------------------------- @@ -586,7 +592,7 @@ returns a string which contains an + onclick="javascript:changed_radio('nochange',$in{'formname'});" /> Do not change login data END return $result; @@ -745,10 +751,10 @@ sub authform_kerberos{ $result.=<<"END"; + onchange="javascript:changed_radio('krb',$in{'formname'});" /> Kerberos authenticated with domain + onchange="javascript:changed_text('krb',$in{'formname'});" /> END return $result; } @@ -763,10 +769,10 @@ sub authform_internal{ $result.=<<"END"; + onclick="javascript:changed_radio('int',$args{'formname'});" /> Internally authenticated (with initial password + onchange="javascript:changed_text('int',$args{'formname'});" /> END return $result; } @@ -781,10 +787,10 @@ sub authform_local{ $result.=<<"END"; + onclick="javascript:changed_radio('loc',$in{'formname'});" /> Local Authentication with argument + onchange="javascript:changed_text('loc',$in{'formname'});" /> END return $result; } @@ -799,7 +805,7 @@ sub authform_filesystem{ $result.=<<"END"; + onclick="javascript:changed_radio('fsys',$in{'formname'});" /> Filesystem authenticated (with initial password @@ -838,7 +844,7 @@ sub initialize_keywords { # Set up the hash as a database my %thesaurus_db; if (! tie(%thesaurus_db,'GDBM_File', - $thesaurus_db_file,&GDBM_READER,0640)){ + $thesaurus_db_file,&GDBM_READER(),0640)){ &Apache::lonnet::logthis("Could not tie \%thesaurus_db to ". $thesaurus_db_file); return 0; @@ -879,52 +885,6 @@ sub keyword { return exists($Keywords{$word}); } -################################################### -# Old code, to be removed soon # -################################################### -# -------------------------------------------------------- Return related words -#sub related { -# my $newword=shift; -# $newword=~s/\W//g; -# $newword=~tr/A-Z/a-z/; -# my $tindex=$theindex{$newword}; -# if ($tindex) { -# my %found=(); -# foreach (split(/\,/,$therelated[$tindex])) { -## - Related word found -# my ($ridx,$rcount)=split(/\:/,$_); -## - Direct relation index -# my $directrel=$rcount/$thecount[$tindex]; -# if ($directrel>$thethreshold) { -# foreach (split(/\,/,$therelated[$ridx])) { -# my ($rridx,$rrcount)=split(/\:/,$_); -# if ($rridx==$tindex) { -## - Determine reverse relation index -# my $revrel=$rrcount/$thecount[$ridx]; -## - Calculate full index -# $found{$ridx}=$directrel*$revrel; -# if ($found{$ridx}>$thethreshold) { -# foreach (split(/\,/,$therelated[$ridx])) { -# my ($rrridx,$rrrcount)=split(/\:/,$_); -# unless ($found{$rrridx}) { -# my $revrevrel=$rrrcount/$thecount[$ridx]; -# if ( -# $directrel*$revrel*$revrevrel>$thethreshold -# ) { -# $found{$rrridx}= -# $directrel*$revrel*$revrevrel; -# } -# } -# } -# } -# } -# } -# } -# } -# } -# return (); -#} - ############################################################### =pod @@ -941,7 +901,6 @@ Uses global $thesaurus_db_file. =cut ############################################################### - sub get_related_words { my $keyword = shift; my %thesaurus_db; @@ -951,7 +910,7 @@ sub get_related_words { return (); } if (! tie(%thesaurus_db,'GDBM_File', - $thesaurus_db_file,&GDBM_READER,0640)){ + $thesaurus_db_file,&GDBM_READER(),0640)){ return (); } my @Words=(); @@ -1087,7 +1046,7 @@ sub get_previous_attempt { } else { $value=$lasthash{$_}; } - if ($_ =~/$regexp$/) {$value = &$gradesub($value)} + if ($_ =~/$regexp$/ && (defined &$gradesub)) {$value = &$gradesub($value)} $prevattempts.=''.$value.' '; } $prevattempts.=''; @@ -1145,6 +1104,140 @@ sub get_student_answers { ############################################### + +sub timehash { + my @ltime=localtime(shift); + return ( 'seconds' => $ltime[0], + 'minutes' => $ltime[1], + 'hours' => $ltime[2], + 'day' => $ltime[3], + 'month' => $ltime[4]+1, + 'year' => $ltime[5]+1900, + 'weekday' => $ltime[6], + 'dayyear' => $ltime[7]+1, + 'dlsav' => $ltime[8] ); +} + +sub maketime { + my %th=@_; + return POSIX::mktime( + ($th{'seconds'},$th{'minutes'},$th{'hours'}, + $th{'day'},$th{'month'}-1,$th{'year'}-1900,0,0,$th{'dlsav'})); +} + + +sub findallcourses { + my %courses=(); + my $now=time; + foreach (keys %ENV) { + if ($_=~/^user\.role\.\w+\.\/(\w+)\/(\w+)/) { + my ($starttime,$endtime)=$ENV{$_}; + my $active=1; + if ($starttime) { + if ($now<$starttime) { $active=0; } + } + if ($endtime) { + if ($now>$endtime) { $active=0; } + } + if ($active) { $courses{$1.'_'.$2}=1; } + } + } + return keys %courses; +} + +############################################### + +sub bodytag { + my ($title,$function,$addentries)=@_; + unless ($function) { + $function='student'; + if ($ENV{'request.role'}=~/^(cc|in|ta|ep)/) { + $function='coordinator'; + } + if ($ENV{'request.role'}=~/^(su|dc|ad|li)/) { + $function='admin'; + } + if (($ENV{'request.role'}=~/^(au|ca)/) || + ($ENV{'REQUEST_URI'}=~/^(\/priv|\~)/)) { + $function='author'; + } + } + my $img=''; + my $pgbg=''; + my $tabbg=''; + my $font=''; + my $link=''; + my $alink='#CC0000'; + my $vlink=''; + if ($function eq 'admin') { + $img='admin'; + $pgbg='#FFFFCC'; + $tabbg='#CCCC99'; + $font='#772200'; + $link='#663300'; + $vlink='#666600'; + } elsif ($function eq 'coordinator') { + $img='coordinator'; + $pgbg='#CCFFFF'; + $tabbg='#CCCCFF'; + $font='#000044'; + $link='#003333'; + $vlink='#006633'; + } elsif ($function eq 'author') { + $img='author'; + $pgbg='#CCFFFF'; + $tabbg='#CCFFCC'; + $font='#004400'; + $link='#003333'; + $vlink='#006666'; + } else { + $img='student'; + $pgbg='#FFFFAA'; + $tabbg='#FF9900'; + $font='#991100'; + $link='#993300'; + $vlink='#996600'; + } +# role and realm + my ($role,$realm) + =&Apache::lonnet::plaintext((split(/\./,$ENV{'request.role'}))[0]); +# realm + if ($ENV{'request.course.id'}) { + $realm= + $ENV{'course.'.$ENV{'request.course.id'}.'.description'}; + } + unless ($realm) { $realm=' '; } +# Set messages + my $messages=localtime(); +# Output + return(< + + + + + + + + + + +
+$messages
$title + + + $ENV{'environment.firstname'} + $ENV{'environment.middlename'} + $ENV{'environment.lastname'} + $ENV{'environment.generation'} +   +
+$role  +
$realm 

+ENDBODY +} ############################################### sub get_unprocessed_cgi { @@ -1230,6 +1323,8 @@ sub upfile_store { return $datatoken; } +=pod + =item load_tmp_file($r) Load uploaded file from tmp, $r should be the HTTP Request object, @@ -1251,6 +1346,8 @@ sub load_tmp_file { $ENV{'form.upfile'}=join('',@studentdata); } +=pod + =item upfile_record_sep() Separate uploaded file into records @@ -1266,6 +1363,8 @@ sub upfile_record_sep { } } +=pod + =item record_sep($record) Separate a record into fields $record should be an item from the upfile_record_sep(), needs $ENV{'form.upfiletype'} @@ -1316,6 +1415,8 @@ sub record_sep { return %components; } +=pod + =item upfile_select_html() return HTML code to select file and specify its type @@ -1324,7 +1425,7 @@ return HTML code to select file and spec sub upfile_select_html { return (<<'ENDUPFORM'); - +
Type: