version 1.664, 2008/07/06 05:01:52
|
version 1.679.2.6, 2008/09/29 22:58:41
|
Line 878 sub help_open_topic {
|
Line 878 sub help_open_topic {
|
|
|
# Add the graphic |
# Add the graphic |
my $title = &mt('Online Help'); |
my $title = &mt('Online Help'); |
my $helpicon=&lonhttpdurl("/res/adm/pages/help.png"); |
my $helpicon=&lonhttpdurl("/adm/help/help.png"); |
$template .= <<"ENDTEMPLATE"; |
$template .= <<"ENDTEMPLATE"; |
<a target="_top" href="$link" title="$title"><img src="$helpicon" border="0" alt="(Help: $topic)" /></a> |
<a target="_top" href="$link" title="$title"><img src="$helpicon" border="0" alt="(Help: $topic)" /></a> |
ENDTEMPLATE |
ENDTEMPLATE |
Line 904 sub helpLatexCheatsheet {
|
Line 904 sub helpLatexCheatsheet {
|
.'</td><td>'. |
.'</td><td>'. |
&Apache::loncommon::help_open_topic("Other_Symbols",&mt('Other Symbols'), |
&Apache::loncommon::help_open_topic("Other_Symbols",&mt('Other Symbols'), |
undef,undef,600) |
undef,undef,600) |
|
.'</td><td>'. |
|
&Apache::loncommon::help_open_topic("Authoring_Output_Tags",&mt('Output Tags'), |
|
undef,undef,600) |
.'</td></tr></table>'; |
.'</td></tr></table>'; |
} |
} |
|
|
Line 913 sub general_help {
|
Line 916 sub general_help {
|
$helptopic='Authoring_Intro'; |
$helptopic='Authoring_Intro'; |
} elsif ($env{'request.role'}=~/^cc/) { |
} elsif ($env{'request.role'}=~/^cc/) { |
$helptopic='Course_Coordination_Intro'; |
$helptopic='Course_Coordination_Intro'; |
|
} elsif ($env{'request.role'}=~/^dc/) { |
|
$helptopic='Domain_Coordination_Intro'; |
} |
} |
return $helptopic; |
return $helptopic; |
} |
} |
Line 1502 sub create_text_file {
|
Line 1507 sub create_text_file {
|
$fh = Apache::File->new('>/home/httpd'.$filename); |
$fh = Apache::File->new('>/home/httpd'.$filename); |
if (! defined($fh)) { |
if (! defined($fh)) { |
$r->log_error("Couldn't open $filename for output $!"); |
$r->log_error("Couldn't open $filename for output $!"); |
$r->print("Problems occured in creating the output file. ". |
$r->print(&mt('Problems occurred in creating the output file. ' |
"This error has been logged. ". |
.'This error has been logged. ' |
"Please alert your LON-CAPA administrator."); |
.'Please alert your LON-CAPA administrator.')); |
} |
} |
return ($fh,$filename) |
return ($fh,$filename) |
} |
} |
Line 2982 sub preferred_languages {
|
Line 2987 sub preferred_languages {
|
} |
} |
} |
} |
} |
} |
|
return &get_genlanguages(@languages); |
|
} |
|
|
|
sub get_genlanguages { |
|
my (@languages) = @_; |
# turn "en-ca" into "en-ca,en" |
# turn "en-ca" into "en-ca,en" |
my @genlanguages; |
my @genlanguages; |
foreach my $lang (@languages) { |
foreach my $lang (@languages) { |
unless ($lang=~/\w/) { next; } |
unless ($lang=~/\w/) { next; } |
push(@genlanguages,$lang); |
push(@genlanguages,$lang); |
if ($lang=~/(\-|\_)/) { |
if ($lang=~/(\-|\_)/) { |
push(@genlanguages,(split(/(\-|\_)/,$lang))[0]); |
push(@genlanguages,(split(/(\-|\_)/,$lang))[0]); |
} |
} |
} |
} |
#uniqueify the languages list |
#uniqueify the languages list |
my %count; |
my %count; |
Line 3343 sub pprmlink {
|
Line 3353 sub pprmlink {
|
|
|
|
|
sub timehash { |
sub timehash { |
my @ltime=localtime(shift); |
my ($thistime) = @_; |
return ( 'seconds' => $ltime[0], |
my $timezone = &Apache::lonlocal::gettimezone(); |
'minutes' => $ltime[1], |
my $dt = DateTime->from_epoch(epoch => $thistime) |
'hours' => $ltime[2], |
->set_time_zone($timezone); |
'day' => $ltime[3], |
my $wday = $dt->day_of_week(); |
'month' => $ltime[4]+1, |
if ($wday == 7) { $wday = 0; } |
'year' => $ltime[5]+1900, |
return ( 'second' => $dt->second(), |
'weekday' => $ltime[6], |
'minute' => $dt->minute(), |
'dayyear' => $ltime[7]+1, |
'hour' => $dt->hour(), |
'dlsav' => $ltime[8] ); |
'day' => $dt->day_of_month(), |
|
'month' => $dt->month(), |
|
'year' => $dt->year(), |
|
'weekday' => $wday, |
|
'dayyear' => $dt->day_of_year(), |
|
'dlsav' => $dt->is_dst() ); |
} |
} |
|
|
sub utc_string { |
sub utc_string { |
Line 3362 sub utc_string {
|
Line 3377 sub utc_string {
|
|
|
sub maketime { |
sub maketime { |
my %th=@_; |
my %th=@_; |
|
my ($epoch_time,$timezone,$dt); |
|
$timezone = &Apache::lonlocal::gettimezone(); |
|
eval { |
|
$dt = DateTime->new( year => $th{'year'}, |
|
month => $th{'month'}, |
|
day => $th{'day'}, |
|
hour => $th{'hour'}, |
|
minute => $th{'minute'}, |
|
second => $th{'second'}, |
|
time_zone => $timezone, |
|
); |
|
}; |
|
if (!$@) { |
|
$epoch_time = $dt->epoch; |
|
if ($epoch_time) { |
|
return $epoch_time; |
|
} |
|
} |
return POSIX::mktime( |
return POSIX::mktime( |
($th{'seconds'},$th{'minutes'},$th{'hours'}, |
($th{'seconds'},$th{'minutes'},$th{'hours'}, |
$th{'day'},$th{'month'}-1,$th{'year'}-1900,0,0,-1)); |
$th{'day'},$th{'month'}-1,$th{'year'}-1900,0,0,-1)); |
Line 3742 sub blocking_status {
|
Line 3775 sub blocking_status {
|
|
|
############################################### |
############################################### |
|
|
|
sub check_ip_acc { |
|
my ($acc)=@_; |
|
&Apache::lonxml::debug("acc is $acc"); |
|
if (!defined($acc) || $acc =~ /^\s*$/ || $acc =~/^\s*no\s*$/i) { |
|
return 1; |
|
} |
|
my $allowed=0; |
|
my $ip=$env{'request.host'} || $ENV{'REMOTE_ADDR'}; |
|
|
|
my $name; |
|
foreach my $pattern (split(',',$acc)) { |
|
$pattern =~ s/^\s*//; |
|
$pattern =~ s/\s*$//; |
|
if ($pattern =~ /\*$/) { |
|
#35.8.* |
|
$pattern=~s/\*//; |
|
if ($ip =~ /^\Q$pattern\E/) { $allowed=1; } |
|
} elsif ($pattern =~ /(\d+\.\d+\.\d+)\.\[(\d+)-(\d+)\]$/) { |
|
#35.8.3.[34-56] |
|
my $low=$2; |
|
my $high=$3; |
|
$pattern=$1; |
|
if ($ip =~ /^\Q$pattern\E/) { |
|
my $last=(split(/\./,$ip))[3]; |
|
if ($last <=$high && $last >=$low) { $allowed=1; } |
|
} |
|
} elsif ($pattern =~ /^\*/) { |
|
#*.msu.edu |
|
$pattern=~s/\*//; |
|
if (!defined($name)) { |
|
use Socket; |
|
my $netaddr=inet_aton($ip); |
|
($name)=gethostbyaddr($netaddr,AF_INET); |
|
} |
|
if ($name =~ /\Q$pattern\E$/i) { $allowed=1; } |
|
} elsif ($pattern =~ /\d+\.\d+\.\d+\.\d+/) { |
|
#127.0.0.1 |
|
if ($ip =~ /^\Q$pattern\E/) { $allowed=1; } |
|
} else { |
|
#some.name.com |
|
if (!defined($name)) { |
|
use Socket; |
|
my $netaddr=inet_aton($ip); |
|
($name)=gethostbyaddr($netaddr,AF_INET); |
|
} |
|
if ($name =~ /\Q$pattern\E$/i) { $allowed=1; } |
|
} |
|
if ($allowed) { last; } |
|
} |
|
return $allowed; |
|
} |
|
|
|
############################################### |
|
|
=pod |
=pod |
|
|
=head1 Domain Template Functions |
=head1 Domain Template Functions |
Line 4569 td.LC_menubuttons_img {
|
Line 4656 td.LC_menubuttons_img {
|
text-align: right; |
text-align: right; |
} |
} |
|
|
|
.LC_roleslog_note { |
|
font-size: smaller; |
|
} |
|
|
table.LC_aboutme_port { |
table.LC_aboutme_port { |
border: 0px; |
border: 0px; |
border-collapse: collapse; |
border-collapse: collapse; |
Line 5351 hr.LC_edit_problem_divide {
|
Line 5442 hr.LC_edit_problem_divide {
|
height: 3px; |
height: 3px; |
border: 0px; |
border: 0px; |
} |
} |
|
img.stift{ |
|
border-width:0; |
|
vertical-align:middle; |
|
} |
END |
END |
} |
} |
|
|
Line 6799 sub instrule_disallow_msg {
|
Line 6894 sub instrule_disallow_msg {
|
$text{'action'} = 'IDs'; |
$text{'action'} = 'IDs'; |
} |
} |
} |
} |
$response = &mt("The $text{'item'} you chose $text{'match'} the format of $text{'items'} defined for <span class=\"LC_cusr_emph\">[_1]</span>, but the $text{'item'} $text{'do'} not exist in the institutional directory.",$domdesc).'<br />'; |
$response = &mt("The $text{'item'} you chose $text{'match'} the format of $text{'items'} defined for [_1], but the $text{'item'} $text{'do'} not exist in the institutional directory.",'<span class="LC_cusr_emph">'.$domdesc.'</span>').'<br />'; |
if ($mode eq 'upload') { |
if ($mode eq 'upload') { |
if ($checkitem eq 'username') { |
if ($checkitem eq 'username') { |
$response .= &mt("You will need to modify your upload file so it will include $text{'action'} with a different format -- $text{'one'} that will not conflict with 'official' institutional $text{'items'}."); |
$response .= &mt("You will need to modify your upload file so it will include $text{'action'} with a different format -- $text{'one'} that will not conflict with 'official' institutional $text{'items'}."); |
} elsif ($checkitem eq 'id') { |
} elsif ($checkitem eq 'id') { |
$response .= &mt("Either upload a file which includes $text{'action'} with a different format -- $text{'one'} that will not conflict with 'official' institutional $text{'items'}, or when associating fields with data columns, omit an association for the ID/Student Number field."); |
$response .= &mt("Either upload a file which includes $text{'action'} with a different format -- $text{'one'} that will not conflict with 'official' institutional $text{'items'}, or when associating fields with data columns, omit an association for the Student/Employee ID field."); |
|
} |
|
} elsif ($mode eq 'selfcreate') { |
|
if ($checkitem eq 'id') { |
|
$response .= &mt("You must either choose $text{'action'} with a different format -- $text{'one'} that will not conflict with 'official' institutional $text{'items'}, or leave the ID field blank."); |
} |
} |
} else { |
} else { |
if ($checkitem eq 'username') { |
if ($checkitem eq 'username') { |
Line 6834 sub sorted_inst_types {
|
Line 6933 sub sorted_inst_types {
|
my ($usertypes,$order) = &Apache::lonnet::retrieve_inst_usertypes($dom); |
my ($usertypes,$order) = &Apache::lonnet::retrieve_inst_usertypes($dom); |
my $othertitle = &mt('All users'); |
my $othertitle = &mt('All users'); |
if ($env{'request.course.id'}) { |
if ($env{'request.course.id'}) { |
$othertitle = 'any'; |
$othertitle = &mt('Any users'); |
} |
} |
my @types; |
my @types; |
if (ref($order) eq 'ARRAY') { |
if (ref($order) eq 'ARRAY') { |
Line 6847 sub sorted_inst_types {
|
Line 6946 sub sorted_inst_types {
|
} |
} |
if (keys(%{$usertypes}) > 0) { |
if (keys(%{$usertypes}) > 0) { |
$othertitle = &mt('Other users'); |
$othertitle = &mt('Other users'); |
if ($env{'request.course.id'}) { |
|
$othertitle = 'other'; |
|
} |
|
} |
} |
return ($othertitle,$usertypes,\@types); |
return ($othertitle,$usertypes,\@types); |
} |
} |
Line 7238 sub check_for_upload {
|
Line 7334 sub check_for_upload {
|
} |
} |
} |
} |
} |
} |
my $getpropath = 1; |
|
if (($current_disk_usage + $filesize) > $disk_quota){ |
if (($current_disk_usage + $filesize) > $disk_quota){ |
my $msg = '<span class="LC_error">'. |
my $msg = '<span class="LC_error">'. |
&mt('Unable to upload [_1]. (size = [_2] kilobytes). Disk quota will be exceeded.','<span class="LC_filename">'.$fname.'</span>',$filesize).'</span>'. |
&mt('Unable to upload [_1]. (size = [_2] kilobytes). Disk quota will be exceeded.','<span class="LC_filename">'.$fname.'</span>',$filesize).'</span>'. |
Line 8235 sub build_recipient_list {
|
Line 8330 sub build_recipient_list {
|
} elsif ($origmail ne '') { |
} elsif ($origmail ne '') { |
push(@recipients,$origmail); |
push(@recipients,$origmail); |
} |
} |
if ($defmail ne '') { |
if (defined($defmail)) { |
push(@recipients,$defmail); |
if ($defmail ne '') { |
|
push(@recipients,$defmail); |
|
} |
} |
} |
if ($otheremails) { |
if ($otheremails) { |
my @others; |
my @others; |
Line 8340 idx (reference to hash of counters used
|
Line 8437 idx (reference to hash of counters used
|
jsarray (reference to array of categories used to create Javascript arrays for |
jsarray (reference to array of categories used to create Javascript arrays for |
Domain Coordinator interface for editing Course Categories). |
Domain Coordinator interface for editing Course Categories). |
|
|
|
subcats (reference to hash of arrays containing all subcategories within each |
|
category, -recursive) |
|
|
Returns: nothing |
Returns: nothing |
|
|
Side effects: populates trails and allitems hash references. |
Side effects: populates trails and allitems hash references. |
Line 8347 Side effects: populates trails and allit
|
Line 8447 Side effects: populates trails and allit
|
=cut |
=cut |
|
|
sub extract_categories { |
sub extract_categories { |
my ($categories,$cats,$trails,$allitems,$idx,$jsarray) = @_; |
my ($categories,$cats,$trails,$allitems,$idx,$jsarray,$subcats) = @_; |
if (ref($categories) eq 'HASH') { |
if (ref($categories) eq 'HASH') { |
&gather_categories($categories,$cats,$idx,$jsarray); |
&gather_categories($categories,$cats,$idx,$jsarray); |
if (ref($cats->[0]) eq 'ARRAY') { |
if (ref($cats->[0]) eq 'ARRAY') { |
Line 8368 sub extract_categories {
|
Line 8468 sub extract_categories {
|
if (ref($cats->[1]{$name}) eq 'ARRAY') { |
if (ref($cats->[1]{$name}) eq 'ARRAY') { |
for (my $j=0; $j<@{$cats->[1]{$name}}; $j++) { |
for (my $j=0; $j<@{$cats->[1]{$name}}; $j++) { |
my $category = $cats->[1]{$name}[$j]; |
my $category = $cats->[1]{$name}[$j]; |
&recurse_categories($cats,2,$category,$trails,$allitems,\@parents); |
if (ref($subcats) eq 'HASH') { |
|
push(@{$subcats->{$item}},&escape($category).':'.&escape($name).':1'); |
|
} |
|
&recurse_categories($cats,2,$category,$trails,$allitems,\@parents,$subcats); |
|
} |
|
} else { |
|
if (ref($subcats) eq 'HASH') { |
|
$subcats->{$item} = []; |
} |
} |
} |
} |
} |
} |
Line 8407 Side effects: populates trails and allit
|
Line 8514 Side effects: populates trails and allit
|
=cut |
=cut |
|
|
sub recurse_categories { |
sub recurse_categories { |
my ($cats,$depth,$category,$trails,$allitems,$parents) = @_; |
my ($cats,$depth,$category,$trails,$allitems,$parents,$subcats) = @_; |
my $shallower = $depth - 1; |
my $shallower = $depth - 1; |
if (ref($cats->[$depth]{$category}) eq 'ARRAY') { |
if (ref($cats->[$depth]{$category}) eq 'ARRAY') { |
for (my $k=0; $k<@{$cats->[$depth]{$category}}; $k++) { |
for (my $k=0; $k<@{$cats->[$depth]{$category}}; $k++) { |
Line 8420 sub recurse_categories {
|
Line 8527 sub recurse_categories {
|
} |
} |
my $deeper = $depth+1; |
my $deeper = $depth+1; |
push(@{$parents},$category); |
push(@{$parents},$category); |
&recurse_categories($cats,$deeper,$name,$trails,$allitems,$parents); |
if (ref($subcats) eq 'HASH') { |
|
my $subcat = &escape($name).':'.$category.':'.$depth; |
|
for (my $j=@{$parents}; $j>=0; $j--) { |
|
my $higher; |
|
if ($j > 0) { |
|
$higher = &escape($parents->[$j]).':'. |
|
&escape($parents->[$j-1]).':'.$j; |
|
} else { |
|
$higher = &escape($parents->[$j]).'::'.$j; |
|
} |
|
push(@{$subcats->{$higher}},$subcat); |
|
} |
|
} |
|
&recurse_categories($cats,$deeper,$name,$trails,$allitems,$parents, |
|
$subcats); |
pop(@{$parents}); |
pop(@{$parents}); |
} |
} |
} else { |
} else { |
Line 8478 sub assign_categories_table {
|
Line 8599 sub assign_categories_table {
|
$checked = ' checked="checked" '; |
$checked = ' checked="checked" '; |
} |
} |
} |
} |
$output .= '<tr '.$css_class.'><td><span class="LC_nobreak">' |
$output .= '<tr '.$css_class.'><td><span class="LC_nobreak">'. |
.'<input type="checkbox" name="usecategory" value="'. |
'<input type="checkbox" name="usecategory" value="'. |
$item.'"'.$checked.' />'.&escape($parent).'</span></td>'; |
$item.'"'.$checked.' />'.$parent.'</span>'. |
|
'<input type="hidden" name="catname" value="'.$parent.'" /></td>'; |
my $depth = 1; |
my $depth = 1; |
push(@path,$parent); |
push(@path,$parent); |
$output .= &assign_category_rows($itemcount,\@cats,$depth,$parent,\@path,\@currcategories); |
$output .= &assign_category_rows($itemcount,\@cats,$depth,$parent,\@path,\@currcategories); |
Line 8546 sub assign_category_rows {
|
Line 8668 sub assign_category_rows {
|
} |
} |
$text .= '<tr><td><span class="LC_nobreak"><label>'. |
$text .= '<tr><td><span class="LC_nobreak"><label>'. |
'<input type="checkbox" name="usecategory" value="'. |
'<input type="checkbox" name="usecategory" value="'. |
$item.'"'.$checked.' />'.$name.'</label></span></td><td>'; |
$item.'"'.$checked.' />'.$name.'</label></span>'. |
|
'<input type="hidden" name="catname" value="'.$name.'" />'. |
|
'</td><td>'; |
if (ref($path) eq 'ARRAY') { |
if (ref($path) eq 'ARRAY') { |
push(@{$path},$name); |
push(@{$path},$name); |
$text .= &assign_category_rows($itemcount,$cats,$deeper,$name,$path,$currcategories); |
$text .= &assign_category_rows($itemcount,$cats,$deeper,$name,$path,$currcategories); |
Line 9229 sub init_user_environment {
|
Line 9353 sub init_user_environment {
|
} |
} |
# Give them a new cookie |
# Give them a new cookie |
my $id = ($args->{'robot'} ? 'robot'.$args->{'robot'} |
my $id = ($args->{'robot'} ? 'robot'.$args->{'robot'} |
: $now); |
: $now.$$.int(rand(10000))); |
$cookie="$username\_$id\_$domain\_$authhost"; |
$cookie="$username\_$id\_$domain\_$authhost"; |
|
|
# Initialize roles |
# Initialize roles |
Line 9344 sub init_user_environment {
|
Line 9468 sub init_user_environment {
|
|
|
sub _add_to_env { |
sub _add_to_env { |
my ($idf,$env_data,$prefix) = @_; |
my ($idf,$env_data,$prefix) = @_; |
while (my ($key,$value) = each(%$env_data)) { |
if (ref($env_data) eq 'HASH') { |
$idf->{$prefix.$key} = $value; |
while (my ($key,$value) = each(%$env_data)) { |
$env{$prefix.$key} = $value; |
$idf->{$prefix.$key} = $value; |
|
$env{$prefix.$key} = $value; |
|
} |
} |
} |
} |
} |
|
|