CT_Cal/ 0000755 0000765 0000024 00000000000 10260057114 012060 5 ustar waw staff 0000000 0000000 CT_Cal/._CT_Cal.pl 0000400 0000765 0000000 00000000122 10260057003 013670 0 ustar waw wheel 0000000 0000000 Mac OS X 2 R TEXTMcPL CT_Cal/CT_Cal.pl 0000644 0000765 0000024 00000017524 10260057003 013510 0 ustar waw staff 0000000 0000000 #! /usr/bin/perl
#
# Local definitions
#
my $login_family_name='Pat';
my $login_given_name='Smith';
my $login_password="xxxx";
my $server="calendar.xxx.edu"
use FindBin qw($Bin);
use strict;
use Capi;
use POSIX;
use CGI;
require 'CT_Cal_functions.pl';
our %params;
our $q;
$q=new CGI;
%params=$q->Vars;
my $asical=defined($params{"asical"});
my $debug=$params{debug};
$| = 1;
if (!$asical) {
print $q->header;
print "\n";
print "\n\n";
}
my $Output_Dir = "$Bin/PrePublished/";
#Get list of names from input. Input parameters take form fn1=,gn1=,fn2=,gn2=, etc.
my $names=1; my @fn; my @gn;
while (exists($params{"fn".$names})) {
$fn[$names-1]=$params{"fn".$names};
$gn[$names-1]=$params{"gn".$names};
# print "Family name $names=".$fn[$names-1]." Given name $names=".$gn[$names-1]."
\n"; print "Live Calendar Data for $gn[$names-1] $fn[$names-1] " if (!$asical) ; $names++; } print " \n\n\n" if (!$asical) ;
# if none specified, Provide a default family_name and given_name for Campus Calendar
if (!exists($params{"fn1"})) {
$fn[0]="Calendar";
$gn[0]="Campus";
$names=2;
}
my $nowtime=time();
my ($sec,$min,$hour,$day,$monthnum,$fyear,$wday,$yday,$isdst) = localtime($nowtime);
$day=$params{day} if (exists($params{day}));
$monthnum=($params{mon}-1) if (exists($params{mon}));
$fyear=($params{year}-1900) if (exists($params{year}));
my $period_start=POSIX::mktime(0, 0, 0, $day, $monthnum, $fyear,0,0,0);
$period_start=POSIX::mktime(0, 0, 0, 1, $monthnum, $fyear,0,0,0) if ($params{ascal} eq 1);
print "\n\n" if ($debug) ;
# Here process period specification
my $p = $params{period};
my $period_end;
if ($p eq "day") {
$period_end=$period_start+(24*60*60);
} elsif ($p eq "week" || !exists($params{period})) {
$period_end=$period_start+(7*24*60*60);
} elsif ($p eq "month") {
$period_end=$period_start+(31*24*60*60);
} elsif ($p eq "nextmonth") {
$period_start=$period_start+(30*24*60*60);
$period_end=$period_start+(31*24*60*60);
} elsif ($p eq "twomonth") {
$period_end=$period_start+(2*31*24*60*60);
} elsif ($p =~ /days/) {
# here in the format of 30days, 60days, 90days
$p =~ s/days//;
$p +=0;
$period_end=$period_start+($p*24*60*60);
} else {
$period_end=$period_start+(365*24*60*60);
}
my $start=&Unix2UTC($period_start);
my $finish=&Unix2UTC($period_end);
$start=$params{'s'} if (exists($params{'s'})) ;
$finish=$params{'f'} if (exists($params{'f'})) ;
print "\n" if ($debug) ;
my $session;
my $status=Capi::Logon($login_family_name, $login_given_name, $login_password, $server, "0", $session);
print "logon Status=$status\n" if ($params{debug} ge 2);;
if ($status != Capi::CAPI_STAT_OK) {
print "Error - could not log in. Status=$status ".Capi::CAPI_GetStatusString($status)."\n";
exit;
}
print "Session=$session\n" if ($params{debug} ge 2);;
# get "handle" for an agenda
my $eventcounter=0;
my $stream="";
my @proplist;
if (defined($params{"ascal"}) || defined($params{"aslist"}) || defined($params{"asical"})) {
@proplist=("DTSTART","DURATION","CLASS","STATUS","LOCATION","SUMMARY","DESCRIPTION");
} else {
@proplist=("DTSTART","DURATION","CLASS","SUMMARY","DESCRIPTION");
}
my $psize=scalar(@proplist);
my $agendacount=0;
my @handles;
for (my $name=0;$name<$names-1;$name++) {
my $family_name=$fn[$name];
my $given_name=$gn[$name];
# mlm - 09-26-2002 Added Class="cheader" to the tag
print "
\n" if ($params{debug} ge 2); } } if ($agendacount>0){ # now get the agenda if there are any not already read from file my $time_1=time(); # print "\n"; $stream.=Capi::FetchEventsByRange($session, $start,$finish,$status,$psize,$agendacount,@proplist,@handles); my $time_2=time(); my $time_3=$time_2-$time_1; if (($status != Capi::CAPI_STAT_OK) && ($status != Capi::CAPI_STAT_SECUR_READ_PROPS)) { print "\n"; } # print "\n" ; } #parse the stream for display our ($eventlist_stime, $eventlist_etime, $eventlist_details, $eventlist_summary, $eventlist_location, $eventlist_attendee, $eventlist_class); &process($stream); #display the stream my $simple_time =(defined($params{"simple"}))? 1 : 0; if (defined($params{"ascal"})) { &displayCalendar($simple_time); } elsif (defined($params{"aslist"})) { &displayList($simple_time); } elsif (defined($params{"asshort"})) { &displayShortList($simple_time); } elsif (defined($params{"asical"})) { # print "Content-Type: text/plain; charset=UTF-8\n\n"; print "Content-Type: text/calendar; charset=UTF-8\n"; print "Content-Disposition: attachment; filename=\"calendar.ics\"\n"; print "Content-Transfer-Encoding: quoted-printable\n\n"; # strip off Oracle headers my @lines=split(/\n/,$stream); my $line; while ($line=shift(@lines)){ chop $line; last if ($line eq "BEGIN:VCALENDAR"); # print "bad $line\n"; } print "$line\r\n"; foreach my $line (@lines) { chop $line; print "$line\r\n"; } } else { &displayEvents($simple_time); } # Now logoff $status=Capi::Logoff($session); if ($status != Capi::CAPI_STAT_OK) { print "Error - could not log out. Status=$status ".Capi::CAPI_GetStatusString($status)."\n"; exit; } ###### SubRoutines ############ sub makeCalFileName($$){ my $gnm = @_[0]; my $fnm = @_[1]; my $filename = $fnm; $filename .= ",". $gnm if $gnm; $filename =~ s/ //g; return $filename; } sub Cal_FetchFromFile($$$){ my ($fnm,$start,$finish)=@_; my $stream=""; open(INFILE,"<$fnm") || die "cannot create $fnm: $!"; # Read file (ignoring events prior to $start & after $finish # Assumes the agenda is ordered by start time. my $e="";my $estarttime; while () {
#print "$_
\n"; if (/^BEGIN:VEVENT/) { $e=$_; undef $estarttime; } if (/^END:VEVENT/) { if (defined($estarttime)){ $stream .= $e.$_ if ($estarttime>=$start); } } if (/^DTSTART:/) { $e.=$_; s/^DTSTART://; $estarttime=$_; #&UTC2Unix($_); # if this event starts after the finish time we are done reading. last if ($estarttime>=$finish); } else { $e.=$_; } } close(INFILE) || die "can't close $fnm: $!"; print "Event Stream from $fnm
\n", join("
\n"; print "Live Calendar Data for $gn[$names-1] $fn[$names-1] " if (!$asical) ; $names++; } print "
Calendar for $given_name $family_name
\n" if (exists($params{ascal})); my $filenm=$Output_Dir.&makeCalFileName($given_name,$family_name); if (-e $filenm && !$asical) { # Here read the agenda from the OS file $stream .= Cal_FetchFromFile($filenm,$start,$finish); # print "\n" ; } else { # Here fetch agenda from the calendar my $handle; if ($given_name eq "resource") { # print "\n"; $status=Capi::GetRHandle($session,$family_name,$handle); } else { # print "\n"; $status=Capi::GetHandle($session,$family_name,$given_name,$handle); } if ($status != Capi::CAPI_STAT_OK) { print "Error - could not get handle:$family_name,$given_name\n"; print "Status=$status ".Capi::CAPI_GetStatusString($status)."\n"; } #$handles[$name]=$handle; //mlm 05-31-01 fixed so handles are in sequence $handles[$agendacount]=$handle; $agendacount++; print "Got Handle=$handles[$name]\n" if ($params{debug} ge 2); } } if ($agendacount>0){ # now get the agenda if there are any not already read from file my $time_1=time(); # print "\n"; $stream.=Capi::FetchEventsByRange($session, $start,$finish,$status,$psize,$agendacount,@proplist,@handles); my $time_2=time(); my $time_3=$time_2-$time_1; if (($status != Capi::CAPI_STAT_OK) && ($status != Capi::CAPI_STAT_SECUR_READ_PROPS)) { print "\n"; } # print "\n" ; } #parse the stream for display our ($eventlist_stime, $eventlist_etime, $eventlist_details, $eventlist_summary, $eventlist_location, $eventlist_attendee, $eventlist_class); &process($stream); #display the stream my $simple_time =(defined($params{"simple"}))? 1 : 0; if (defined($params{"ascal"})) { &displayCalendar($simple_time); } elsif (defined($params{"aslist"})) { &displayList($simple_time); } elsif (defined($params{"asshort"})) { &displayShortList($simple_time); } elsif (defined($params{"asical"})) { # print "Content-Type: text/plain; charset=UTF-8\n\n"; print "Content-Type: text/calendar; charset=UTF-8\n"; print "Content-Disposition: attachment; filename=\"calendar.ics\"\n"; print "Content-Transfer-Encoding: quoted-printable\n\n"; # strip off Oracle headers my @lines=split(/\n/,$stream); my $line; while ($line=shift(@lines)){ chop $line; last if ($line eq "BEGIN:VCALENDAR"); # print "bad $line\n"; } print "$line\r\n"; foreach my $line (@lines) { chop $line; print "$line\r\n"; } } else { &displayEvents($simple_time); } # Now logoff $status=Capi::Logoff($session); if ($status != Capi::CAPI_STAT_OK) { print "Error - could not log out. Status=$status ".Capi::CAPI_GetStatusString($status)."\n"; exit; } ###### SubRoutines ############ sub makeCalFileName($$){ my $gnm = @_[0]; my $fnm = @_[1]; my $filename = $fnm; $filename .= ",". $gnm if $gnm; $filename =~ s/ //g; return $filename; } sub Cal_FetchFromFile($$$){ my ($fnm,$start,$finish)=@_; my $stream=""; open(INFILE,"<$fnm") || die "cannot create $fnm: $!"; # Read file (ignoring events prior to $start & after $finish # Assumes the agenda is ordered by start time. my $e="";my $estarttime; while (
\n"; if (/^BEGIN:VEVENT/) { $e=$_; undef $estarttime; } if (/^END:VEVENT/) { if (defined($estarttime)){ $stream .= $e.$_ if ($estarttime>=$start); } } if (/^DTSTART:/) { $e.=$_; s/^DTSTART://; $estarttime=$_; #&UTC2Unix($_); # if this event starts after the finish time we are done reading. last if ($estarttime>=$finish); } else { $e.=$_; } } close(INFILE) || die "can't close $fnm: $!"; print "Event Stream from $fnm
\n", join("
