--- loncom/interface/lonhtmlcommon.pm 2003/09/03 01:53:46 1.29 +++ loncom/interface/lonhtmlcommon.pm 2004/02/12 22:23:30 1.46 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # a pile of common html routines # -# $Id: lonhtmlcommon.pm,v 1.29 2003/09/03 01:53:46 www Exp $ +# $Id: lonhtmlcommon.pm,v 1.46 2004/02/12 22:23:30 matthew Exp $ # # Copyright Michigan State University Board of Trustees # @@ -56,6 +56,7 @@ html. package Apache::lonhtmlcommon; use Time::Local; +use Apache::lonlocal; use strict; @@ -64,6 +65,78 @@ use strict; =pod +=item authorbombs + +=cut + +############################################## +############################################## + +sub authorbombs { + my $url=shift; + $url=&Apache::lonnet::declutter($url); + my ($udom,$uname)=($url=~/^(\w+)\/(\w+)\//); + my %bombs=&Apache::lonmsg::all_url_author_res_msg($uname,$udom); + foreach (keys %bombs) { + if ($_=~/^$udom\/$uname\//) { + return ''. + &Apache::loncommon::help_open_topic('About_Bombs'); + } + } + return ''; +} + +############################################## +############################################## + +sub recent_filename { + my $area=shift; + return 'nohist_recent_'.&Apache::lonnet::escape($area); +} + +sub store_recent { + my ($area,$name,$value)=@_; + my $file=&recent_filename($area); + my %recent=&Apache::lonnet::dump($file); + if (scalar(keys(%recent))>10) { +# remove oldest value + my $oldest=time; + my $delkey=''; + foreach (keys %recent) { + my $thistime=(split(/\&/,$recent{$_}))[0]; + if ($thistime<$oldest) { + $oldest=$thistime; + $delkey=$_; + } + } + &Apache::lonnet::del($file,[$delkey]); + } +# store new value + &Apache::lonnet::put($file,{ $name => + time.'&'.&Apache::lonnet::escape($value) }); +} + +sub select_recent { + my ($area,$fieldname,$event)=@_; + my %recent=&Apache::lonnet::dump(&recent_filename($area)); + my $return="\n\n"; + return $return; +} + + +=pod + =item textbox =cut @@ -90,13 +163,12 @@ sub textbox { ############################################## ############################################## sub checkbox { - my ($name) = @_; - my $Str = ''; + my ($name,$value) = @_; + my $Str = ''; return $Str; } - - ############################################## ############################################## @@ -140,14 +212,21 @@ The method used to restrict user input w ############################################## ############################################## sub date_setter { - my ($formname,$dname,$currentvalue,$special) = @_; + my ($formname,$dname,$currentvalue,$special,$includeempty) = @_; if (! defined($currentvalue) || $currentvalue eq 'now') { - $currentvalue = time; + unless ($includeempty) { + $currentvalue = time; + } else { + $currentvalue = 0; + } } # other potentially useful values: wkday,yrday,is_daylight_savings - my ($sec,$min,$hour,$mday,$month,$year,undef,undef,undef) = - localtime($currentvalue); - $year += 1900; + my ($sec,$min,$hour,$mday,$month,$year)=('','','','','',''); + if ($currentvalue) { + ($sec,$min,$hour,$mday,$month,$year,undef,undef,undef) = + localtime($currentvalue); + $year += 1900; + } my $result = "\n\n"; $result .= < @@ -199,10 +278,11 @@ ENDJS July August September October November December/; # Pad @Months with a bogus value to make indexing easier unshift(@Months,'If you can read this an error occurred'); + if ($includeempty) { $result.=""; } for(my $m = 1;$m <=$#Months;$m++) { $result .= " '."\n"; + &mt('Currently Enrolled').''."\n"; $Str .= ''."\n"; + &mt('Previously Enrolled').''."\n"; $Str .= ''."\n"; + &mt('Any Enrollment Status').''."\n"; $Str .= ''."\n"; } - -######################################################## -######################################################## - -=pod - -=item &MultipleSectionSelect() - -Inputs: - -=over 4 - -=item $sections A references to an array containing the names of all the -sections used in a class. - -=item $selectedSections A reference to an array containing the names of the -currently selected sections. - -=back - -Returns: a string containing HTML for a multiple select box for -selecting sections of a course. - -The form element name is 'Section'. @$sections is sorted prior to output. - -=cut - -######################################################## -######################################################## -sub MultipleSectionSelect { - my ($sections,$selectedSections)=@_; - - my $Str = ''; - $Str .= ''."\n"; - - return $Str; -} - -######################################################## -######################################################## - -=pod - -=item &Title() - -Inputs: $pageName a string containing the name of the page to be sent -to &Apache::loncommon::bodytag. - -Returns: string containing being and complete and -as well as a <script> to focus the current window and change its width -and height to 500. Why? I do not know. If you find out, please update -this documentation. - -=cut - -######################################################## -######################################################## -sub Title { - my ($pageName)=@_; - - my $Str = ''; - - $Str .= '<html><head><title>'.$pageName.''."\n"; - $Str .= &Apache::loncommon::bodytag($pageName)."\n"; - $Str .= ''."\n"; - - return $Str; -} - -######################################################## -######################################################## - -=pod - -=item &CreateHeadings() - -This function generates the column headings for the chart. - -=over 4 - -Inputs: $CacheData, $keyID, $headings, $spacePadding - -$CacheData: pointer to a hash tied to the cached data database - -$keyID: a pointer to an array containing the names of the data -held in a column and is used as part of a key into $CacheData - -$headings: The names of the headings for the student information - -$spacePadding: The spaces to go between columns - -Output: $Str - -$Str: A formatted string of the table column headings. - -=back - -=cut - -######################################################## -######################################################## -sub CreateHeadings { - my ($data,$keyID,$headings,$displayString,$format)=@_; - my $Str=''; - my $formatting = ''; - - for(my $index=0; $index<(scalar @$headings); $index++) { - my $currentHeading=$headings->[$index]; - if($format eq 'preformatted') { - my @dataLength=split(//,$currentHeading); - my $length=scalar @dataLength; - $formatting = (' 'x - ($data->{$keyID->[$index].':columnWidth'}-$length)); - } - my $linkdata=$keyID->[$index]; - - my $tempString = $displayString; - $tempString =~ s/LINKDATA/$linkdata/; - $tempString =~ s/DISPLAYDATA/$currentHeading/; - $tempString =~ s/FORMATTING/$formatting/; - - $Str .= $tempString; - } - - return $Str; -} - -######################################################## -######################################################## - -=pod - -=item &FormatStudentInformation() - -This function produces a formatted string of the student\'s information: -username, domain, section, full name, and PID. - -=over 4 - -Input: $cache, $name, $keyID, $spacePadding - -$cache: This is a pointer to a hash that is tied to the cached data - -$name: The name and domain of the current student in name:domain format - -$keyID: A pointer to an array holding the names used to - -remove data from the hash. They represent the name of the data to be removed. - -$spacePadding: Extra spaces that represent the space between columns - -Output: $Str - -$Str: Formatted string. - -=back - -=cut - -######################################################## -######################################################## -sub FormatStudentInformation { - my ($data,$name,$keyID,$displayString,$format)=@_; - my $Str=''; - my $currentColumn; - - for(my $index=0; $index<(scalar @$keyID); $index++) { - $currentColumn=$data->{$name.':'.$keyID->[$index]}; - - if($format eq 'preformatted') { - my @dataLength=split(//,$currentColumn); - my $length=scalar @dataLength; - $currentColumn.= (' 'x - ($data->{$keyID->[$index].':columnWidth'}-$length)); - } - - my $tempString = $displayString; - $tempString =~ s/DISPLAYDATA/$currentColumn/; - - $Str .= $tempString; - } - - return $Str; -} - ######################################################## ######################################################## @@ -738,16 +627,21 @@ Returns: none # Create progress sub Create_PrgWin { my ($r, $title, $heading, $number_to_do)=@_; + #the whole function called through timeout is due to issues + #in mozilla Read BUG #2665 if you want to know the whole story $r->print('"); + "popwin.document.close();}". + "\nwindow.setTimeout(openpopwin,0)"); my %prog_state; $prog_state{'done'}=0; @@ -779,16 +673,16 @@ sub Increment_PrgWin { if (int ($time_est/60) > 0) { my $min = int($time_est/60); my $sec = $time_est % 60; - $time_est = $min.' minutes'; + $time_est = $min.' '.&mt('minutes'); if ($min < 10) { if ($sec > 1) { - $time_est.= ', '.$sec.' seconds'; + $time_est.= ', '.$sec.' '.&mt('seconds'); } elsif ($sec > 0) { - $time_est.= ', '.$sec.' second'; + $time_est.= ', '.$sec.' '.&mt('second'); } } } else { - $time_est .= ' seconds'; + $time_est .= ' '.&mt('seconds'); } my $lasttime = &Time::HiRes::time()-$$prog_state{'laststart'}; if ($lasttime > 9) { @@ -799,9 +693,9 @@ sub Increment_PrgWin { $lasttime = sprintf("%3.2f",$lasttime); } if ($lasttime == 1) { - $lasttime = '('.$lasttime.' second for '.$extraInfo.')'; + $lasttime = '('.$lasttime.' '.&mt('second for').' '.$extraInfo.')'; } else { - $lasttime = '('.$lasttime.' seconds for '.$extraInfo.')'; + $lasttime = '('.$lasttime.' '.&mt('seconds for').' '.$extraInfo.')'; } # my $user_browser = $ENV{'browser.type'} if (exists($ENV{'browser.type'})); @@ -815,7 +709,7 @@ sub Increment_PrgWin { } $r->print(''); + ': '.$time_est.' '.&mt('remaining').' '.$lasttime.'";'.''); $$prog_state{'laststart'}=&Time::HiRes::time(); $r->rflush(); } @@ -828,6 +722,32 @@ sub Close_PrgWin { $r->rflush(); } + +# ------------------------------------------------------- Puts directory header + +sub crumbs { + my ($uri,$target,$prefix,$form)=@_; + my $output='
'.$prefix.'/'; + if ($ENV{'user.adv'}) { + my $path=$prefix.'/'; + foreach (split('/',$uri)) { + unless ($_) { next; } + $path.=$_; + unless ($path eq $uri) { $path.='/'; } + my $linkpath=$path; + if ($form) { + $linkpath="javascript:$form.action='$path';$form.submit();"; + } + $output.=''.$_.'/'; + } + } else { + $output.=$uri; + } + unless ($uri=~/\/$/) { $output=~s/\/$//; } + return $output.'
'; +} + + 1; __END__