version 1.49, 2002/08/07 15:39:58
|
version 1.60, 2002/08/26 14:32:29
|
Line 80 package Apache::loncommon;
|
Line 80 package Apache::loncommon;
|
use strict; |
use strict; |
use Apache::lonnet(); |
use Apache::lonnet(); |
use GDBM_File; |
use GDBM_File; |
use POSIX qw(strftime); |
use POSIX qw(strftime mktime); |
use Apache::Constants qw(:common); |
use Apache::Constants qw(:common); |
use Apache::lonmsg(); |
use Apache::lonmsg(); |
my $readit; |
my $readit; |
Line 242 of the element the selection from the se
|
Line 242 of the element the selection from the se
|
############################################################### |
############################################################### |
sub browser_and_searcher_javascript { |
sub browser_and_searcher_javascript { |
return <<END; |
return <<END; |
var editbrowser; |
var editbrowser = null; |
function openbrowser(formname,elementname,only,omit) { |
function openbrowser(formname,elementname,only,omit) { |
var url = '/res/?'; |
var url = '/res/?'; |
if (editbrowser == null) { |
if (editbrowser == null) { |
Line 480 sub help_open_topic {
|
Line 480 sub help_open_topic {
|
|
|
# Add the graphic |
# Add the graphic |
$template .= <<"ENDTEMPLATE"; |
$template .= <<"ENDTEMPLATE"; |
<a href="$link"><image src="/adm/help/gif/smallHelp.gif" border="0" alt="(Help: $topic)"></a> |
<a href="$link"><image src="/adm/help/gif/smallHelp.gif" border="0" alt="(Help: $topic)" /></a> |
ENDTEMPLATE |
ENDTEMPLATE |
|
|
return $template; |
return $template; |
Line 558 sub select_dom_form {
|
Line 558 sub select_dom_form {
|
|
|
=pod |
=pod |
|
|
=item get_home_servers($domain) |
=item get_library_servers($domain) |
|
|
Returns a hash which contains keys like '103l3' and values like |
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 |
'kirk.lite.msu.edu'. All of the keys will be for machines in the |
Line 567 given $domain.
|
Line 567 given $domain.
|
=cut |
=cut |
|
|
#------------------------------------------- |
#------------------------------------------- |
sub get_home_servers { |
sub get_library_servers { |
my $domain = shift; |
my $domain = shift; |
my %home_servers; |
my %library_servers; |
foreach (keys(%Apache::lonnet::libserv)) { |
foreach (keys(%Apache::lonnet::libserv)) { |
if ($Apache::lonnet::hostdom{$_} eq $domain) { |
if ($Apache::lonnet::hostdom{$_} eq $domain) { |
$home_servers{$_} = $Apache::lonnet::hostname{$_}; |
$library_servers{$_} = $Apache::lonnet::hostname{$_}; |
} |
} |
} |
} |
return %home_servers; |
return %library_servers; |
} |
} |
|
|
#------------------------------------------- |
#------------------------------------------- |
Line 592 returns a string which contains an <opti
|
Line 592 returns a string which contains an <opti
|
#------------------------------------------- |
#------------------------------------------- |
sub home_server_option_list { |
sub home_server_option_list { |
my $domain = shift; |
my $domain = shift; |
my %servers = &get_home_servers($domain); |
my %servers = &get_library_servers($domain); |
my $result = ''; |
my $result = ''; |
foreach (sort keys(%servers)) { |
foreach (sort keys(%servers)) { |
$result.= |
$result.= |
Line 735 sub authform_nochange{
|
Line 735 sub authform_nochange{
|
my $result=''; |
my $result=''; |
$result.=<<"END"; |
$result.=<<"END"; |
<input type="radio" name="login" value="nochange" checked="checked" |
<input type="radio" name="login" value="nochange" checked="checked" |
onclick="javascript:changed_radio('nochange',$in{'formname'});"> |
onclick="javascript:changed_radio('nochange',$in{'formname'});" /> |
Do not change login data |
Do not change login data |
END |
END |
return $result; |
return $result; |
Line 751 sub authform_kerberos{
|
Line 751 sub authform_kerberos{
|
$result.=<<"END"; |
$result.=<<"END"; |
<input type="radio" name="login" value="krb" |
<input type="radio" name="login" value="krb" |
onclick="javascript:changed_radio('krb',$in{'formname'});" |
onclick="javascript:changed_radio('krb',$in{'formname'});" |
onchange="javascript:changed_radio('krb',$in{'formname'});"> |
onchange="javascript:changed_radio('krb',$in{'formname'});" /> |
Kerberos authenticated with domain |
Kerberos authenticated with domain |
<input type="text" size="10" name="krbarg" value="" |
<input type="text" size="10" name="krbarg" value="" |
onchange="javascript:changed_text('krb',$in{'formname'});"> |
onchange="javascript:changed_text('krb',$in{'formname'});" /> |
|
<input type="radio" name="krbver" value="4" checked="on" />Version 4 |
|
<input type="radio" name="krbver" value="5" />Version 5 |
END |
END |
return $result; |
return $result; |
} |
} |
Line 769 sub authform_internal{
|
Line 771 sub authform_internal{
|
$result.=<<"END"; |
$result.=<<"END"; |
<input type="radio" name="login" value="int" |
<input type="radio" name="login" value="int" |
onchange="javascript:changed_radio('int',$args{'formname'});" |
onchange="javascript:changed_radio('int',$args{'formname'});" |
onclick="javascript:changed_radio('int',$args{'formname'});"> |
onclick="javascript:changed_radio('int',$args{'formname'});" /> |
Internally authenticated (with initial password |
Internally authenticated (with initial password |
<input type="text" size="10" name="intarg" value="" |
<input type="text" size="10" name="intarg" value="" |
onchange="javascript:changed_text('int',$args{'formname'});"> |
onchange="javascript:changed_text('int',$args{'formname'});" /> |
END |
END |
return $result; |
return $result; |
} |
} |
Line 787 sub authform_local{
|
Line 789 sub authform_local{
|
$result.=<<"END"; |
$result.=<<"END"; |
<input type="radio" name="login" value="loc" |
<input type="radio" name="login" value="loc" |
onchange="javascript:changed_radio('loc',$in{'formname'});" |
onchange="javascript:changed_radio('loc',$in{'formname'});" |
onclick="javascript:changed_radio('loc',$in{'formname'});"> |
onclick="javascript:changed_radio('loc',$in{'formname'});" /> |
Local Authentication with argument |
Local Authentication with argument |
<input type="text" size="10" name="locarg" value="" |
<input type="text" size="10" name="locarg" value="" |
onchange="javascript:changed_text('loc',$in{'formname'});"> |
onchange="javascript:changed_text('loc',$in{'formname'});" /> |
END |
END |
return $result; |
return $result; |
} |
} |
Line 805 sub authform_filesystem{
|
Line 807 sub authform_filesystem{
|
$result.=<<"END"; |
$result.=<<"END"; |
<input type="radio" name="login" value="fsys" |
<input type="radio" name="login" value="fsys" |
onchange="javascript:changed_radio('fsys',$in{'formname'});" |
onchange="javascript:changed_radio('fsys',$in{'formname'});" |
onclick="javascript:changed_radio('fsys',$in{'formname'});"> |
onclick="javascript:changed_radio('fsys',$in{'formname'});" /> |
Filesystem authenticated (with initial password |
Filesystem authenticated (with initial password |
<input type="text" size="10" name="fsysarg" value="" |
<input type="text" size="10" name="fsysarg" value="" |
onchange="javascript:changed_text('fsys',$in{'formname'});"> |
onchange="javascript:changed_text('fsys',$in{'formname'});"> |
Line 844 sub initialize_keywords {
|
Line 846 sub initialize_keywords {
|
# Set up the hash as a database |
# Set up the hash as a database |
my %thesaurus_db; |
my %thesaurus_db; |
if (! tie(%thesaurus_db,'GDBM_File', |
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 ". |
&Apache::lonnet::logthis("Could not tie \%thesaurus_db to ". |
$thesaurus_db_file); |
$thesaurus_db_file); |
return 0; |
return 0; |
Line 885 sub keyword {
|
Line 887 sub keyword {
|
return exists($Keywords{$word}); |
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 |
=pod |
Line 947 Uses global $thesaurus_db_file.
|
Line 903 Uses global $thesaurus_db_file.
|
=cut |
=cut |
|
|
############################################################### |
############################################################### |
|
|
sub get_related_words { |
sub get_related_words { |
my $keyword = shift; |
my $keyword = shift; |
my %thesaurus_db; |
my %thesaurus_db; |
Line 957 sub get_related_words {
|
Line 912 sub get_related_words {
|
return (); |
return (); |
} |
} |
if (! tie(%thesaurus_db,'GDBM_File', |
if (! tie(%thesaurus_db,'GDBM_File', |
$thesaurus_db_file,&GDBM_READER,0640)){ |
$thesaurus_db_file,&GDBM_READER(),0640)){ |
return (); |
return (); |
} |
} |
my @Words=(); |
my @Words=(); |
Line 1151 sub get_student_answers {
|
Line 1106 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; |
|
} |
|
|
|
############################################### |
|
############################################### |
|
|
|
=pod |
|
|
|
=item &domainlogo() |
|
|
|
Inputs: $domain (usually will be undef) |
|
|
|
Returns: A link to a domain logo, if the domain logo exists. |
|
If the domain logo does not exist, a description of the domain. |
|
|
|
=cut |
|
|
|
############################################### |
|
############################################### |
|
sub domainlogo { |
|
my ($domain) = @_; |
|
if (! $domain) { |
|
# Determine domain if we have not been given one |
|
$domain = $Apache::lonnet::perlvar{'lonDefDomain'}; |
|
if ($ENV{'user.domain'}) { $domain=$ENV{'user.domain'}; } |
|
if ($ENV{'request.role.domain'}) { |
|
$domain=$ENV{'request.role.domain'}; |
|
} |
|
} |
|
# See if there is a logo |
|
if (-e '/home/httpd/html/adm/lonDomLogos/'.$domain.'.gif') { |
|
return '<img src="/adm/lonDomLogos/'.$domain.'.gif" />'; |
|
} elsif(exists($Apache::lonnet::domaindescription{$domain})) { |
|
return $Apache::lonnet::domaindescription{$domain}; |
|
} else { |
|
return ''; |
|
} |
|
} |
|
|
|
############################################### |
|
############################################### |
|
|
|
=pod |
|
|
|
=item &bodytag() |
|
|
|
Returns a uniform header for LON-CAPA web pages. |
|
|
|
Inputs: |
|
|
|
$title, A title to be displayed on the page. |
|
$function, the current role (can be undef). |
|
$addentries, extra parameters for the <body> tag. |
|
$bodyonly, if defined, only return the <body> tag. |
|
$domain, if defined, force a given domain. |
|
|
|
Returns: A uniform header for LON-CAPA web pages. |
|
If $bodyonly is nonzero, a string containing a <body> tag will be returned. |
|
If $bodyonly is undef or zero, an html string containing a <body> tag and |
|
other decorations will be returned. |
|
|
|
=cut |
|
|
|
############################################### |
|
############################################### |
|
sub bodytag { |
|
my ($title,$function,$addentries,$bodyonly,$domain)=@_; |
|
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=&domainlogo($domain); |
|
# Output |
|
my $bodytag = <<END; |
|
<body bgcolor="$pgbg" text="$font" alink="$alink" vlink="$vlink" link="$link" |
|
$addentries> |
|
END |
|
if ($bodyonly) { |
|
return $bodytag; |
|
} else { |
|
return(<<ENDBODY); |
|
$bodytag |
|
<table width="100%" cellspacing="0" border="0" cellpadding="0"> |
|
<tr><td bgcolor="$font"> |
|
<img src="/adm/lonInterFace/$img.jpg" /></td> |
|
<td bgcolor="$font"><font color='$pgbg'>$messages</font></td> |
|
</tr> |
|
<tr> |
|
<td rowspan="3" bgcolor="$tabbg"> |
|
<font size="5"><b>$title</b></font> |
|
<td bgcolor="$tabbg" align="right"> |
|
<font size="2"> |
|
$ENV{'environment.firstname'} |
|
$ENV{'environment.middlename'} |
|
$ENV{'environment.lastname'} |
|
$ENV{'environment.generation'} |
|
</font> |
|
</td> |
|
</tr> |
|
<tr><td bgcolor="$tabbg" align="right"> |
|
<font size="2">$role</font> |
|
</td></tr> |
|
<tr> |
|
<td bgcolor="$tabbg" align="right"><font size="2">$realm</font> </td></tr> |
|
</table><br> |
|
ENDBODY |
|
} |
|
} |
############################################### |
############################################### |
|
|
sub get_unprocessed_cgi { |
sub get_unprocessed_cgi { |
Line 1236 sub upfile_store {
|
Line 1392 sub upfile_store {
|
return $datatoken; |
return $datatoken; |
} |
} |
|
|
|
=pod |
|
|
=item load_tmp_file($r) |
=item load_tmp_file($r) |
|
|
Load uploaded file from tmp, $r should be the HTTP Request object, |
Load uploaded file from tmp, $r should be the HTTP Request object, |
Line 1257 sub load_tmp_file {
|
Line 1415 sub load_tmp_file {
|
$ENV{'form.upfile'}=join('',@studentdata); |
$ENV{'form.upfile'}=join('',@studentdata); |
} |
} |
|
|
|
=pod |
|
|
=item upfile_record_sep() |
=item upfile_record_sep() |
|
|
Separate uploaded file into records |
Separate uploaded file into records |
Line 1272 sub upfile_record_sep {
|
Line 1432 sub upfile_record_sep {
|
} |
} |
} |
} |
|
|
|
=pod |
|
|
=item record_sep($record) |
=item record_sep($record) |
|
|
Separate a record into fields $record should be an item from the upfile_record_sep(), needs $ENV{'form.upfiletype'} |
Separate a record into fields $record should be an item from the upfile_record_sep(), needs $ENV{'form.upfiletype'} |
Line 1322 sub record_sep {
|
Line 1484 sub record_sep {
|
return %components; |
return %components; |
} |
} |
|
|
|
=pod |
|
|
=item upfile_select_html() |
=item upfile_select_html() |
|
|
return HTML code to select file and specify its type |
return HTML code to select file and specify its type |
Line 1330 return HTML code to select file and spec
|
Line 1494 return HTML code to select file and spec
|
|
|
sub upfile_select_html { |
sub upfile_select_html { |
return (<<'ENDUPFORM'); |
return (<<'ENDUPFORM'); |
<input type="file" name="upfile" size="50"> |
<input type="file" name="upfile" size="50" /> |
<br />Type: <select name="upfiletype"> |
<br />Type: <select name="upfiletype"> |
<option value="csv">CSV (comma separated values, spreadsheet)</option> |
<option value="csv">CSV (comma separated values, spreadsheet)</option> |
<option value="space">Space separated</option> |
<option value="space">Space separated</option> |
Line 1340 sub upfile_select_html {
|
Line 1504 sub upfile_select_html {
|
ENDUPFORM |
ENDUPFORM |
} |
} |
|
|
|
=pod |
|
|
=item csv_print_samples($r,$records) |
=item csv_print_samples($r,$records) |
|
|
Prints a table of sample values from each column uploaded $r is an |
Prints a table of sample values from each column uploaded $r is an |
Line 1370 sub csv_print_samples {
|
Line 1536 sub csv_print_samples {
|
$r->print('</tr></table><br />'."\n"); |
$r->print('</tr></table><br />'."\n"); |
} |
} |
|
|
|
=pod |
|
|
=item csv_print_select_table($r,$records,$d) |
=item csv_print_select_table($r,$records,$d) |
|
|
Prints a table to create associations between values and table columns. |
Prints a table to create associations between values and table columns. |
Line 1402 sub csv_print_select_table {
|
Line 1570 sub csv_print_select_table {
|
return $i; |
return $i; |
} |
} |
|
|
|
=pod |
|
|
=item csv_samples_select_table($r,$records,$d) |
=item csv_samples_select_table($r,$records,$d) |
|
|
Prints a table of sample values from the upload and can make associate samples to internal names. |
Prints a table of sample values from the upload and can make associate samples to internal names. |