package FES::Util::Calendar; #PerlHandler #################################################################### #=================================================================== # $Id: Calendar.pm,v 1.4 2002/05/31 13:54:19 jrobison Exp $ #------------------------------------------------------------------- # Tag: $Name: $ # Revision: $Revision: 1.4 $ # Date: $Date: 2002/05/31 13:54:19 $ # Author: $Author: jrobison $ # Description: Calendar.pm is a wrapper around the calendar # which accepts input in order to determine what # data to present in the calendar. # Inputs: act=calendar # field=name of field in main form to populate # string=year,$year,month,$month,begin,$earliest,end,$latest # Call: # <a href="javascript: void(0); # window.open('your_controller?act=calendar&field=date&strin +g=','cal', # 'width=220,height=270,screenX=200,screenY=300,titlebar=no,t +itle=no');" # Required Edits: # You will need to edit the $cal->header javascript to point # to the correct controller for your application. i.e. everyw +here # I have /fes? you will need to put in your url. For mod_perl +, obviously # this will be your dispatching module. For CGI, just the url + of this # script (After you've fixed the input parsing to use CGI, no +t # Apache::Request. # # CGI use: # This module is obviously made to use mod_perl, probably in +an # MCV environment. Conversion to regular CGI should be relati +vely # simple and is left as an exercise for the reader. <-- heheh +eheh # Dates: # I work dates in a YYYYMMDD format, no - or / # This makes date comparison easier, etc. # If you need another format, I suggest you edit sub padZero. + That # would be the easiest place to add -'s or /'s. # If you want to totally re-arrange the date, you'll have to +do more. ##################################################################### use strict; use Apache::Request; use Apache::Constants qw/ :common /; use Date::Calc qw/ Days_in_Month /; use HTML::CalendarMonthSimple; sub handler { my $r = Apache::Request->new(shift); ## BEGIN parse input arguments my $input = {}; my @params = $r->param; foreach (@params) { $input->{$_} = $r->param($_); } ## Currently, $input->{'string'} holds an comma delimited string, +if anything. ## it needs to be a hash built from that array. ## BEGIN AWFUL HACK ############################################## +#### my @stringy = split(/\,/,$input->{'string'}); # This is an awful h +ack. delete $input->{'string'}; # Just something to +work, # since my in-house +mod_perl for (my $i = 0;$i < scalar(@stringy);$i++) { # parses input diffe +rently my $v = $i + 1; $input->{'string'}{$stringy[$i]} = $stringy[$v]; $i++; } ## Now, $input->{'string'} will hold {month}=6, {year}=2003, etc. ## END AWFUL HACK ################################################ +#### unless($input) { _error($r,"Maiking input failed"); return DONE; } ## END parse input arguments ## Most of this is needed to keep the calendar small. ## CalendarMonthSimple does have other ways to pass in CSS class dat +a, ## but for now this works. my $head = <<EOH; <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <style type="text/css"> <!-- //hide from older browsers body { font-family: Arial,Helvetica,Sans-serif; font-size: 8px; color: #0000ff; text-decoration: none; } td { font-family : Arial,Helvetica,Sans-serif; font-size : 9px; color : #000000; max-height: 10px; } *.head { font-family: Arial,Helvetica,Sans-serif; font-size: 12px; text-decoration: none; color: #000000; background-color: #d3d3d3; } td.head { font-family: Arial,Helvetica,Sans-serif; font-size: 12px; text-decoration: none; color: #000000; background-color: #9cc2cd; } th { font-family: Arial,Helvetica,Sans-serif; font-size: 10px; text-decoration: none; color: #000000; background-color: #d3d3d3; } A:link { font-family : Arial,Helvetica,Sans-serif; font-size : 8px; color : #0000ff; text-decoration : none; } --> </style> <title>Calendar Window</title> </head> EOH $head .= "<body background=\"/images/backgrounds/blend4.gif\" onBlur +=\"javascript: focus();\">"; my $footer .= "</body>\n</html>"; my $year = $input->{'string'}{'year'} || ((localtime(time))[5] + 1 +900); my $current_month = (localtime(time))[4]; my $display_month; my $month; if ($input->{'string'}{'month'}) { $month = $input->{'string'}{'month'} - 1; } else { $month = $current_month; } my $days_in_month = Days_in_Month($year,$month+1); # Create the calendar object my $cal = new HTML::CalendarMonthSimple ( month => $month+1, year => $year, + ); # Set up some calendar view parameters $cal->border(0); $cal->cellalignment('center'); $cal->vcellalignment('bottom'); $cal->sharpborders('1'); $cal->bgcolor('#badee6'); $cal->todaycolor('yellow'); $cal->weekendcolor('#ffbbbb'); $cal->cellheight('10'); # ugly broken out like this, but easier to follow. my $last_month = $month; my $this_month = $month + 1; my $next_month = $month + 2; my $last_year = $year - 1; my $next_year = $year + 1; my $earliest = defined $input->{'string'}{'begin'} ? $input->{'str +ing'}{'begin'} : '00000000'; my $latest = defined $input->{'string'}{'end'} ? $input->{'str +ing'}{'end'} : '21000101'; ## BEGIN set the header my ($y,$m) = ( $cal->year, $cal->monthname() ); $cal->header("<table border=0 width=\"100%\">" . "<tr>\n" . "<td align=\"center\" class=\"head\"><a + href=\"javascript: document.location='/fes?act=calendar" . "&field=$input->{field}&string=year,$ye +ar,month,$last_month,begin,$earliest,end,$latest';\">\n" . "<img src=\"/images/down.gif\" border=0 +></a>" . " $m " . " <a href=\"javascript: document.locati +on='/fes?act=calendar" . "&field=$input->{field}&string=year,$ye +ar,month,$next_month,begin,$earliest,end,$latest';\">\n" . "<img src=\"/images/up.gif\" border=0>< +/a>" . "</td>\n" . "<td align=\"center\" class=\"head\"><a + href=\"javascript: document.location='/fes?act=calendar" . "&field=$input->{field}&string=year,$la +st_year,month,$this_month,begin,$earliest,end,$latest';\">\n" . "<img src=\"/images/down.gif\" border=0 +></a>" . " $y " . " <a href=\"javascript: document.locati +on='/fes?act=calendar" . "&field=$input->{field}&string=year,$ne +xt_year,month,$this_month,begin,$earliest,end,$latest';\">\n" . "<img src=\"/images/up.gif\" border=0>< +/a>" . "</td>\n" . "</tr></table>\n" ); ## END set the header unless ($cal) { _error($r,"Failed to make a calendar object!: $!"); return DONE; } my $field = $input->{'field'}; for (my $i=1;$i<=$days_in_month;$i++) { my $date = $year . padZero($month+1) . padZero($i); if (($date >= $earliest) && ($date <= $latest)) { $cal->setdatehref($i,"\"javascript: opener.document.forms[ +0].$field.value='$date'; self.close();\""); } } print $r->send_http_header('text/html'); print $head; print $cal->as_HTML; print $footer; return DONE; } sub padZero { my $in = shift; if ($in < 10) { $in = "0" . $in; } return $in; } sub _error { my $r = shift; my $error = shift; print $r->sent_http_header('text/html'); print "<html><head><title>Error!</title></head>" . "<body bgcolor=\"white\"><h2 align='center'>$error</h2>\n"; print "</body></html>\n"; } 1;

In reply to Calendar.pm by tame1

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.