Solved

Strange error message when generating dynamic iCalendar events

Posted on 2008-06-11
2
305 Views
Last Modified: 2011-10-19
I am using PHP to generate iCalendar events using data from a MySQL DB.  To my eye, the .ics file it generates is well formed, but I keep getting an import error that says "This error can appear if you have attempted to save a recurring Lunar appointment in iCalendar format. To avoid this error, set the appointment option to Gregorian instead of Lunar."  I can not figure out what's wrong.  Below is the code, attached is a sample .ics file that this code generates (in txt format due to upload restrictions).  Any help would be appreciated, thanks!
<?php

    header("Content-Type: text/Calendar");

    header("Content-Disposition: inline; filename=sample.ics");

	

	include_once("config.inc");

	include_once("display-functions.inc");
 

	$intTrainingID=$_REQUEST['id'];
 

	$qr="SELECT * FROM tblTrainingClasses WHERE intTrainingID='$intTrainingID'";

	$result=odbc_exec($dbconn, $qr) or die ("Could not execute query...".obdc_errormsg($dbconn));

  	$intUserID=odbc_result($result,"intUserID");

  	

  	$datClassEnd=odbc_result($result,"datClassEnd");

  	$datRequest=odbc_result($result,"datRequest");
 

	$vCalStart = date("Ymd", strtotime($datClassStart))."T090000";

	$vCalEnd = date("Ymd", strtotime($datClassEnd))."T180000";

?>

BEGIN:VCALENDAR<?="\r\n"?>

PRODID:-//Microsoft Corporation//Outlook 10.0 MIMEDIR//EN<?="\r\n"?>

VERSION:2.0<?="\r\n"?>

METHOD:REQUEST<?="\r\n"?>

BEGIN:VEVENT<?="\r\n"?>

DTSTAMP:<?php echo $vCalStart . "Z\r\n"; ?>

DTSTART:<?php echo $vCalStart . "Z\r\n"; ?>

DTEND:<?php echo $vCalEnd . "Z\r\n"; ?>

SUMMARY:<?php echo "sample summary\r\n"; ?>

DESCRIPTION:<?php echo "sample description will be filled in later\r\n"; ?>

UID:123<?="\r\n"?>

X-MICROSOFT-CDO-IMPORTANCE:1<?="\r\n"?>

PRIORITY:3<?="\r\n"?>

CLASS:PUBLIC<?="\r\n"?>

END:VEVENT<?="\r\n"?>

END:VCALENDAR

Open in new window

sample.txt
0
Comment
Question by:lghaman123
2 Comments
 
LVL 108

Accepted Solution

by:
Ray Paseur earned 500 total points
ID: 21773165
You might want to lose that VERSION statement.  See the post here:
http://calendarswamp.blogspot.com/2005/08/outlook-2003-for-ical-import-use.html

I've attached my own iCal code below that seems to be working OK.  There are some function calls that may look kind of "pidgin" but I'm sure you will be able to see the patterns OK.

HTH, ~Ray
<?php // LAPRBass vcal_generator.php

$config_page= getcwd() . '/_config.php'; require_once($config_page);
 

$t_key	= get_clean_numeric_string($_GET[t]);

if (!is_numeric($t_key)) { die("Error T"); }
 

$tsql	= "SELECT * FROM {$my_dbt_prefix}_TOURNAMENTS WHERE _key = $t_key LIMIT 1";

if (!$t	= mysql_query("$tsql", $db_connection)) { non_fatal_query_error($tsql); die(); }

if (!$t_rows= mysql_num_rows($t)) { die("Error T=$t_key"); }

$trow	= mysql_fetch_assoc($t);

foreach ($trow as $k => $v) { $$k = stripslashes($v); } 
 

$csql	= "SELECT * FROM {$my_dbt_prefix}_SERIES WHERE _key = $c_key LIMIT 1";

if (!$c	= mysql_query("$csql", $db_connection)) { non_fatal_query_error($csql); die(); }

if (!$c_rows= mysql_num_rows($c)) { die('Error C=$c_key'); }

$crow	= mysql_fetch_assoc($c);

foreach ($crow as $k => $v) { $$k = stripslashes($v); }
 

$p_date		= date('l, F j, Y', strtotime($date));

$p_start	= date('g:ia', strtotime($start));

$p_finish	= date('g:ia', strtotime($finish));

$my_start	= date('D, M j, Y g:ia', strtotime($p_date .' '. $p_start));
 

$vcalstart	= date("Ymd", strtotime($date)) .'T'. date("His", strtotime($start));

$vcalend	= date("Ymd", strtotime($date)) .'T'. date("His", strtotime($finish));
 

$summary	 = "LAPRBASS Tournament: $p_date";
 

$dump		 = "";

$dump		.= "$year $name" . "=0D=0A";

$dump		.= "Mark your calendar for $my_start" . "=0D=0A";

if ($launch != "") { $dump .= "Launch: $launch" . " =0D=0A"; }

if ($title  != "") { $dump .= "$title" . " =0D=0A"; }

$dump		.= "http://www.LAPRBASS.com" . "=0D=0A";
 

$filename = "LAPRBASS" . $t_key . ".vcs";
 

header("Content-Type: text/x-vCalendar");

header("Content-Disposition: inline; filename=$filename");
 

?>

BEGIN:VCALENDAR

VERSION:1.0

PRODID:LAPRBASS Web Calendar

BEGIN:VEVENT

SUMMARY:<?php echo "$summary\n"; ?>

DESCRIPTION;ENCODING=QUOTED-PRINTABLE: <?php echo "$dump\n"; ?>

DTSTART:<?php echo "$vcalstart\n"; ?>

DTEND:<?php echo "$vcalend\n"; ?>

END:VEVENT

END:VCALENDAR

Open in new window

0
 

Author Comment

by:lghaman123
ID: 21823943
Hi Ray, sorry for the delayed response, I got temporarily moved to a different project.  I tried a very similar variation of this code at one point.  After more testing I actually determined that the error was an error being output by my config file which I had included.  This code is definitely working for me now that I fixed my other situation.  Thanks!
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Build an array called $myWeek which will hold the array elements Today, Yesterday and then builds up the rest of the week by the name of the day going back 1 week.   (CODE) (CODE) Then you just need to pass your date to the function. If i…
Follow this checklist to learn more about the 15 things you should never include in an email signature from personal quotes, animated gifs and out-of-date marketing content.
The viewer will learn how to count occurrences of each item in an array.
The viewer will learn how to create and use a small PHP class to apply a watermark to an image. This video shows the viewer the setup for the PHP watermark as well as important coding language. Continue to Part 2 to learn the core code used in creat…

947 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

24 Experts available now in Live!

Get 1:1 Help Now