version 1.51, 2004/02/16 23:27:03
|
version 1.72, 2004/06/03 14:28:39
|
Line 60 use Time::HiRes;
|
Line 60 use Time::HiRes;
|
use Apache::lonlocal; |
use Apache::lonlocal; |
use strict; |
use strict; |
|
|
|
|
############################################## |
############################################## |
############################################## |
############################################## |
|
|
Line 164 sub textbox {
|
Line 163 sub textbox {
|
############################################## |
############################################## |
############################################## |
############################################## |
sub checkbox { |
sub checkbox { |
my ($name,$value) = @_; |
my ($name,$checked,$value) = @_; |
my $Str = '<input type="checkbox" name="'.$name.'"'. |
my $Str = '<input type="checkbox" name="'.$name.'" '; |
($value?' checked="1"':'').' />'; |
if (defined($value)) { |
|
$Str .= 'value="'.$value.'"'; |
|
} |
|
if ($checked) { |
|
$Str .= ' checked="1"'; |
|
} |
|
$Str .= ' />'; |
return $Str; |
return $Str; |
} |
} |
|
|
Line 202 Also, to be explicit, a value of 'now' a
|
Line 207 Also, to be explicit, a value of 'now' a
|
Additional html/javascript to be associated with each element in |
Additional html/javascript to be associated with each element in |
the date_setter. See lonparmset for example usage. |
the date_setter. See lonparmset for example usage. |
|
|
|
=item $includeempty |
|
|
|
=item $state |
|
|
|
Specifies the initial state of the form elements. Either 'disabled' or empty. |
|
Defaults to empty, which indiciates the form elements are not disabled. |
|
|
=back |
=back |
|
|
Bugs |
Bugs |
Line 213 The method used to restrict user input w
|
Line 225 The method used to restrict user input w
|
############################################## |
############################################## |
############################################## |
############################################## |
sub date_setter { |
sub date_setter { |
my ($formname,$dname,$currentvalue,$special,$includeempty) = @_; |
my ($formname,$dname,$currentvalue,$special,$includeempty,$state, |
|
$no_hh_mm_ss) = @_; |
|
if (! defined($state) || $state ne 'disabled') { |
|
$state = ''; |
|
} |
|
if (! defined($no_hh_mm_ss)) { |
|
$no_hh_mm_ss = 0; |
|
} |
if (! defined($currentvalue) || $currentvalue eq 'now') { |
if (! defined($currentvalue) || $currentvalue eq 'now') { |
unless ($includeempty) { |
unless ($includeempty) { |
$currentvalue = time; |
$currentvalue = time; |
Line 222 sub date_setter {
|
Line 241 sub date_setter {
|
} |
} |
} |
} |
# other potentially useful values: wkday,yrday,is_daylight_savings |
# other potentially useful values: wkday,yrday,is_daylight_savings |
my ($sec,$min,$hour,$mday,$month,$year)=('','','','','',''); |
my ($sec,$min,$hour,$mday,$month,$year)=('','',undef,'','',''); |
if ($currentvalue) { |
if ($currentvalue) { |
($sec,$min,$hour,$mday,$month,$year,undef,undef,undef) = |
($sec,$min,$hour,$mday,$month,$year,undef,undef,undef) = |
localtime($currentvalue); |
localtime($currentvalue); |
Line 262 sub date_setter {
|
Line 281 sub date_setter {
|
} |
} |
} |
} |
|
|
|
function $dname\_disable() { |
|
document.$formname.$dname\_month.disabled=true; |
|
document.$formname.$dname\_day.disabled=true; |
|
document.$formname.$dname\_year.disabled=true; |
|
document.$formname.$dname\_hour.disabled=true; |
|
document.$formname.$dname\_minute.disabled=true; |
|
document.$formname.$dname\_second.disabled=true; |
|
} |
|
|
|
function $dname\_enable() { |
|
document.$formname.$dname\_month.disabled=false; |
|
document.$formname.$dname\_day.disabled=false; |
|
document.$formname.$dname\_year.disabled=false; |
|
document.$formname.$dname\_hour.disabled=false; |
|
document.$formname.$dname\_minute.disabled=false; |
|
document.$formname.$dname\_second.disabled=false; |
|
} |
|
|
function $dname\_opencalendar() { |
function $dname\_opencalendar() { |
var calwin=window.open( |
if (! document.$formname.$dname\_month.disabled) { |
|
var calwin=window.open( |
"/adm/announcements?pickdate=yes&formname=$formname&element=$dname&month="+ |
"/adm/announcements?pickdate=yes&formname=$formname&element=$dname&month="+ |
document.$formname.$dname\_month.value+"&year="+ |
document.$formname.$dname\_month.value+"&year="+ |
document.$formname.$dname\_year.value, |
document.$formname.$dname\_year.value, |
"LONCAPAcal", |
"LONCAPAcal", |
"height=350,width=350,scrollbars=yes,resizable=yes,menubar=no"); |
"height=350,width=350,scrollbars=yes,resizable=yes,menubar=no"); |
|
} |
|
|
} |
} |
</script> |
</script> |
ENDJS |
ENDJS |
$result .= " <nobr><select name=\"$dname\_month\" ".$special.' '. |
$result .= " <nobr><select name=\"$dname\_month\" ".$special.' '. |
|
$state.' '. |
"onChange=\"javascript:$dname\_checkday()\" >\n"; |
"onChange=\"javascript:$dname\_checkday()\" >\n"; |
|
# Month |
my @Months = qw/January February March April May June |
my @Months = qw/January February March April May June |
July August September October November December/; |
July August September October November December/; |
# Pad @Months with a bogus value to make indexing easier |
# Pad @Months with a bogus value to make indexing easier |
Line 286 ENDJS
|
Line 327 ENDJS
|
$result .= "> ".&mt($Months[$m])." </option>\n"; |
$result .= "> ".&mt($Months[$m])." </option>\n"; |
} |
} |
$result .= " </select>\n"; |
$result .= " </select>\n"; |
$result .= " <input type=\"text\" name=\"$dname\_day\" ". |
# Day |
|
$result .= " <input type=\"text\" name=\"$dname\_day\" ".$state.' '. |
"value=\"$mday\" size=\"3\" ".$special.' '. |
"value=\"$mday\" size=\"3\" ".$special.' '. |
"onChange=\"javascript:$dname\_checkday()\" />\n"; |
"onChange=\"javascript:$dname\_checkday()\" />\n"; |
$result .= " <input type=\"year\" name=\"$dname\_year\" ". |
# Year |
|
$result .= " <input type=\"year\" name=\"$dname\_year\" ".$state.' '. |
"value=\"$year\" size=\"5\" ".$special.' '. |
"value=\"$year\" size=\"5\" ".$special.' '. |
"onChange=\"javascript:$dname\_checkday()\" />\n"; |
"onChange=\"javascript:$dname\_checkday()\" />\n"; |
$result .= " "; |
$result .= " "; |
$result .= " <select name=\"$dname\_hour\" ".$special." >\n"; |
if (! $no_hh_mm_ss) { |
if ($includeempty) { $result.="<option value=''></option>"; } |
# Hours |
for (my $h = 0;$h<24;$h++) { |
$result .= " <select name=\"$dname\_hour\" ".$special." ".$state.' '. |
$result .= " <option value=\"$h\" "; |
">\n"; |
$result .= "selected " if ($hour == $h); |
if ($includeempty) { $result.="<option value=''></option>"; } |
$result .= "> "; |
for (my $h = 0;$h<24;$h++) { |
my $timest=''; |
$result .= " <option value=\"$h\" "; |
if ($h == 0) { |
$result .= "selected " if (defined($hour) && $hour == $h); |
$timest .= "12 am"; |
$result .= "> "; |
} elsif($h == 12) { |
my $timest=''; |
$timest .= "12 noon"; |
if ($h == 0) { |
} elsif($h < 12) { |
$timest .= "12 am"; |
$timest .= "$h am"; |
} elsif($h == 12) { |
} else { |
$timest .= "12 noon"; |
$timest .= $h-12 ." pm"; |
} elsif($h < 12) { |
} |
$timest .= "$h am"; |
$timest=&mt($timest); |
} else { |
$result .= $timest." </option>\n"; |
$timest .= $h-12 ." pm"; |
} |
} |
$result .= " </select>\n"; |
$timest=&mt($timest); |
$result .= " <input type=\"text\" name=\"$dname\_minute\" ".$special.' '. |
$result .= $timest." </option>\n"; |
"value=\"$min\" size=\"3\" /> m\n"; |
} |
$result .= " <input type=\"text\" name=\"$dname\_second\" ".$special.' '. |
$result .= " </select>\n"; |
"value=\"$sec\" size=\"3\" /> s\n"; |
$result .= " <input type=\"text\" name=\"$dname\_minute\" ". |
|
$special.' '. |
|
$state.' '. |
|
"value=\"$min\" size=\"3\" /> m\n"; |
|
$result .= " <input type=\"text\" name=\"$dname\_second\" ". |
|
$special.' '. |
|
$state.' '. |
|
"value=\"$sec\" size=\"3\" /> s\n"; |
|
} |
$result .= "<a href=\"javascript:$dname\_opencalendar()\">". |
$result .= "<a href=\"javascript:$dname\_opencalendar()\">". |
&mt('Select Date')."</a></nobr>\n<!-- end $dname date setting form -->\n"; |
&mt('Select Date')."</a></nobr>\n<!-- end $dname date setting form -->\n"; |
return $result; |
return $result; |
Line 360 sub get_date_from_form {
|
Line 411 sub get_date_from_form {
|
if (($tmpsec =~ /^\d+$/) && ($tmpsec >= 0) && ($tmpsec < 60)) { |
if (($tmpsec =~ /^\d+$/) && ($tmpsec >= 0) && ($tmpsec < 60)) { |
$sec = $tmpsec; |
$sec = $tmpsec; |
} |
} |
|
if (!defined($tmpsec) || $tmpsec eq '') { $sec = 0; } |
|
} else { |
|
$sec = 0; |
} |
} |
if (defined($ENV{'form.'.$dname.'_minute'})) { |
if (defined($ENV{'form.'.$dname.'_minute'})) { |
my $tmpmin = $ENV{'form.'.$dname.'_minute'}; |
my $tmpmin = $ENV{'form.'.$dname.'_minute'}; |
if (($tmpmin =~ /^\d+$/) && ($tmpmin >= 0) && ($tmpmin < 60)) { |
if (($tmpmin =~ /^\d+$/) && ($tmpmin >= 0) && ($tmpmin < 60)) { |
$min = $tmpmin; |
$min = $tmpmin; |
} |
} |
|
if (!defined($tmpmin) || $tmpmin eq '') { $min = 0; } |
|
} else { |
|
$min = 0; |
} |
} |
if (defined($ENV{'form.'.$dname.'_hour'})) { |
if (defined($ENV{'form.'.$dname.'_hour'})) { |
my $tmphour = $ENV{'form.'.$dname.'_hour'}; |
my $tmphour = $ENV{'form.'.$dname.'_hour'}; |
if (($tmphour =~ /^\d+$/) && ($tmphour >= 0) && ($tmphour < 24)) { |
if (($tmphour =~ /^\d+$/) && ($tmphour >= 0) && ($tmphour < 24)) { |
$hour = $tmphour; |
$hour = $tmphour; |
} |
} |
|
} else { |
|
$hour = 0; |
} |
} |
if (defined($ENV{'form.'.$dname.'_day'})) { |
if (defined($ENV{'form.'.$dname.'_day'})) { |
my $tmpday = $ENV{'form.'.$dname.'_day'}; |
my $tmpday = $ENV{'form.'.$dname.'_day'}; |
Line 677 sub Create_PrgWin {
|
Line 736 sub Create_PrgWin {
|
} |
} |
if (!$inputname) { |
if (!$inputname) { |
$prog_state{'inputname'}=&get_uniq_name(); |
$prog_state{'inputname'}=&get_uniq_name(); |
&r_print($r,'<input type="text" name="'.$prog_state{'inputname'}. |
&r_print($r,$heading.' <input type="text" name="'.$prog_state{'inputname'}. |
'" size="'.$width.'" />'); |
'" size="'.$width.'" />'); |
} else { |
} else { |
$prog_state{'inputname'}=$inputname; |
$prog_state{'inputname'}=$inputname; |
Line 782 sub r_print {
|
Line 841 sub r_print {
|
# ------------------------------------------------------- Puts directory header |
# ------------------------------------------------------- Puts directory header |
|
|
sub crumbs { |
sub crumbs { |
my ($uri,$target,$prefix,$form)=@_; |
my ($uri,$target,$prefix,$form,$size)=@_; |
my $output='<br /><tt><b><font size="+2">'.$prefix.'/'; |
if (! defined($size)) { |
|
$size = '+2'; |
|
} |
|
my $output='<br /><tt><b><font size="'.$size.'">'.$prefix.'/'; |
if ($ENV{'user.adv'}) { |
if ($ENV{'user.adv'}) { |
my $path=$prefix.'/'; |
my $path=$prefix.'/'; |
foreach (split('/',$uri)) { |
foreach (split('/',$uri)) { |
Line 803 sub crumbs {
|
Line 865 sub crumbs {
|
return $output.'</font></b></tt><br />'; |
return $output.'</font></b></tt><br />'; |
} |
} |
|
|
|
# ------------------------------------------------- Output headers for HTMLArea |
|
|
|
sub htmlareaheaders { |
|
if (&htmlareablocked()) { return ''; } |
|
my $lang='en'; |
|
if (&mt('htmlarea_lang') ne 'htmlarea_lang') { |
|
$lang=&mt('htmlarea_lang'); |
|
} |
|
return (<<ENDHEADERS); |
|
<script type="text/javascript"> |
|
_editor_url="/htmlarea/"; |
|
</script> |
|
<script type="text/javascript" src="/htmlarea/htmlarea.js"></script> |
|
<style type="text/javascript"> |
|
_editor_url='/htmlarea/'; |
|
_editor_lang='$lang'; |
|
</style> |
|
ENDHEADERS |
|
} |
|
|
|
# ---------------------------------------------------------- Script to activate |
|
|
|
sub htmlareaactive { |
|
if (&htmlareablocked()) { return ''; } |
|
return (<<ENDSCRIPT); |
|
<script type="text/javascript" defer="1"> |
|
HTMLArea.replaceAll(); |
|
</script> |
|
ENDSCRIPT |
|
} |
|
|
|
# ----------------------------------------- Script to activate only some fields |
|
|
|
sub htmlareaselectactive { |
|
if (&htmlareablocked()) { return ''; } |
|
my $output='<script type="text/javascript" defer="1">'; |
|
foreach(@_) { |
|
$output.="\nHTMLArea.replace('$_');"; |
|
} |
|
$output.="\n</script>"; |
|
return $output; |
|
} |
|
|
|
# --------------------------------------------------------------------- Blocked |
|
|
|
sub htmlareablocked { |
|
unless (&htmlareabrowser()) { return 1; } |
|
return 0; |
|
} |
|
|
|
# ---------------------------------------- Browser capable of running HTMLArea? |
|
|
|
sub htmlareabrowser { |
|
return 1; |
|
} |
|
|
|
############################################################ |
|
############################################################ |
|
|
|
=pod |
|
|
|
=item breadcrumbs |
|
|
|
Compiles the previously registered breadcrumbs into an series of links. |
|
FAQ and BUG links will be placed on the left side of the table if they |
|
are defined for the last registered breadcrumb. |
|
Additionally supports a 'component', which will be displayed on the |
|
right side of the table (without a link). |
|
A link to help for the component will be included if one is specified. |
|
|
|
All inputs can be undef without problems. |
|
|
|
Inputs: $color (the background color of the table returned), |
|
$component (the large text on the right side of the table), |
|
$component_help |
|
$function (role to get colors from) |
|
$domain (domian of role) |
|
$menulink (boolean, controls whether to include a link to /adm/menu) |
|
|
|
Returns a string containing breadcrumbs for the current page. |
|
|
|
=item clear_breadcrumbs |
|
|
|
Clears the previously stored breadcrumbs. |
|
|
|
=item add_breadcrumb |
|
|
|
Pushes a breadcrumb on the stack of crumbs. |
|
|
|
input: $breadcrumb, a hash reference. The keys 'href','title', and 'text' |
|
are required. If present the keys 'faq' and 'bug' will be used to provide |
|
links to the FAQ and bug sites. |
|
|
|
returns: nothing |
|
|
|
=cut |
|
|
|
############################################################ |
|
############################################################ |
|
{ |
|
my @Crumbs; |
|
|
|
sub breadcrumbs { |
|
my ($color,$component,$component_help,$function,$domain,$menulink) = |
|
@_; |
|
if (! defined($color)) { |
|
if (! defined($function)) { |
|
$function = &Apache::loncommon::get_users_function(); |
|
} |
|
$color = &Apache::loncommon::designparm($function.'.tabbg', |
|
$domain); |
|
} |
|
# |
|
my $Str = "\n". |
|
'<table width="100%" border="0" cellpadding="0" cellspacing="0">'. |
|
'<tr><td bgcolor="'.$color.'">'. |
|
'<font size="-1">'; |
|
# |
|
# Make the faq and bug data cascade |
|
my $faq = ''; |
|
my $bug = ''; |
|
# The last breadcrumb does not have a link, so handle it separately. |
|
my $last = pop(@Crumbs); |
|
# |
|
# The first one should be the course or a menu link |
|
if (!defined($menulink)) { $menulink=1; } |
|
if ($menulink) { |
|
my $description = 'Menu'; |
|
if (exists($ENV{'request.course.id'}) && |
|
$ENV{'request.course.id'} ne '') { |
|
$description = |
|
$ENV{'course.'.$ENV{'request.course.id'}.'.description'}; |
|
} |
|
unshift(@Crumbs,{ |
|
href =>'/adm/menu', |
|
title =>'Go to main menu', |
|
target =>'_top', |
|
text =>$description, |
|
}); |
|
} |
|
my $links .= |
|
join('->', |
|
map { |
|
$faq = $_->{'faq'} if (exists($_->{'faq'})); |
|
$bug = $_->{'bug'} if (exists($_->{'bug'})); |
|
my $result = '<a href="'.$_->{'href'}.'" '; |
|
if (defined($_->{'target'}) && $_->{'target'} ne '') { |
|
$result .= 'target="'.$_->{'target'}.'" '; |
|
} |
|
$result .='title="'.&mt($_->{'title'}).'">'. |
|
&mt($_->{'text'}).'</a>'; |
|
$result; |
|
} @Crumbs |
|
); |
|
$links .= '->' if ($links ne ''); |
|
$links .= '<b>'.$last->{'text'}.'</b>'; |
|
# |
|
my $icons = ''; |
|
$faq = $last->{'faq'} if (exists($last->{'faq'})); |
|
$bug = $last->{'bug'} if (exists($last->{'bug'})); |
|
if ($faq ne '') { |
|
$icons .= &Apache::loncommon::help_open_faq($faq); |
|
} |
|
if ($bug ne '') { |
|
$icons .= &Apache::loncommon::help_open_bug($bug); |
|
} |
|
if ($icons ne '') { |
|
$Str .= $icons.' '; |
|
} |
|
# |
|
$Str .= $links.'</font></td>'; |
|
# |
|
if (defined($component)) { |
|
$Str .= '<td align="right" bgcolor="'.$color.'">'. |
|
'<font size="+1">'.&mt($component).'</font>'; |
|
if (defined($component_help)) { |
|
$Str .= |
|
&Apache::loncommon::help_open_topic($component_help); |
|
} |
|
$Str.= '</td>'; |
|
} |
|
$Str .= '</tr></table>'."\n"; |
|
# |
|
# Return the @Crumbs stack to what we started with |
|
push(@Crumbs,$last); |
|
shift(@Crumbs); |
|
# |
|
return $Str; |
|
} |
|
|
|
sub clear_breadcrumbs { |
|
undef(@Crumbs); |
|
} |
|
|
|
sub add_breadcrumb { |
|
push (@Crumbs,@_); |
|
} |
|
|
|
} # End of scope for @Crumbs |
|
|
|
############################################################ |
|
############################################################ |
|
|
|
|
1; |
1; |
|
|