コード例 #1
0
ファイル: samples.php プロジェクト: quantrocket/planlogiq
$v->setComponent($e);
// add event component to calendar
/* alt. production */
// $v->returnCalendar();                          // generate and redirect output to user browser
/* alt. dev. and test */
$str = $v->createCalendar();
// generate and get output in string, for testing?
echo $str;
echo "<br />\n\n";
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  */
/*                                                define timezone           */
$v = new vcalendar();
// initiate new CALENDAR
$t = new vtimezone();
// initiate TIMEZONE
$t->setProperty('tzid', 'US-Eastern');
$t->setProperty('last-modified', 1987, 1, 1);
$ts = new vtimezone('standard');
$ts->setProperty('dtstart', 1997, 10, 26, 2);
$rdate1 = array('year' => 1997, 'month' => 10, 'day' => 26, 'hour' => 02, 'min' => 0, 'sec' => 0);
$ts->setProperty('rdate', array($rdate1));
$ts->setProperty('tzoffsetfrom', '-0400');
$ts->setProperty('tzoffsetto', '-0500');
$ts->setProperty('tzname', 'EST');
$t->setComponent($ts);
$td = new vtimezone('daylight');
$td->setProperty('dtstart', 1997, 10, 26, 2);
$rdate1 = array('year' => 1997, 'month' => 4, 'day' => 6, 'hour' => 02, 'min' => 0, 'sec' => 0);
$td->setProperty('rdate', array($rdate1));
$td->setProperty('tzoffsetfrom', '-0500');
$td->setProperty('tzoffsetto', '-0400');
コード例 #2
0
ファイル: index.php プロジェクト: Juuro/Dreamapp-Website
$tsm = date('m', $ts);
$tsd = date('d', $ts);
$tsH = date('H', $ts);
$tsi = date('i', $ts);
$tss = date('s', $ts);
require_once 'inc/iCalcreator.class.php';
/* new vcalendar with name of the timezone, name of the calendar */
$v = new vcalendar();
$v->setProperty("method", "PUBLISH");
$v->setProperty('X-WR-TIMEZONE', 'Europe/Berlin');
$v->setProperty("x-wr-calname", "Filmstarts Deutschland");
$v->setProperty("calscale", "GREGORIAN");
//$v->setConfig( "filename", "filmstarts_de.ics" );
/* define timezone */
$timezone = new vtimezone();
$timezone->setProperty("Tzid", "Europe/Berlin");
/*
$timezonedaylight = new vtimezone( "daylight" );
$timezonedaylight->setProperty( "tzoffsetfrom", "+0100" );
$timezonedaylight->setProperty('dtstart', 2006, 8, 11, 7, 30, 1);
$timezonedaylight->setProperty( "tzname", "GMT+02:00" );
$timezonedaylight->setProperty( "tzoffsetto", "+0200" );
$timezonedaylight->setProperty( "rrule", array("freq" => "YEARLY", "bymonth" => 3, "byday" => array( array(-1, "DAY" => "SU" ))) );
*/
$timezonestandard = new vtimezone("standard");
$timezonestandard->setProperty("tzoffsetfrom", "+0200");
$timezonestandard->setProperty('dtstart', 2006, 8, 11, 7, 30, 1);
$timezonestandard->setProperty("tzname", "GMT+01:00");
$timezonestandard->setProperty("tzoffsetto", "+0100");
$timezonestandard->setProperty("rrule", array("freq" => "YEARLY", "bymonth" => 10, "byday" => array(array(-1, "DAY" => "SU"))));
//$timezone->addSubComponent( $timezonedaylight );
コード例 #3
0
ファイル: mod.calendar.php プロジェクト: grimsmath/lavillafdn
 /**
  * Prepare output in icalendar format a la RFC2445
  * http://www.ietf.org/rfc/rfc2445.txt
  *
  * @return	string
  */
 public function icalendar()
 {
     $s = 'EJURI3ia8aj#912IKa';
     $r = '#';
     $e = 'aAEah38a;a33';
     // -------------------------------------
     //  Some dummy tagdata we'll hand off to events()
     // -------------------------------------
     $vars = array('event_title' => 'title', 'event_id' => 'id', 'event_summary' => 'summary', 'event_location' => 'location', 'event_start_date format="%Y"' => 'start_year', 'event_start_date format="%m"' => 'start_month', 'event_start_date format="%d"' => 'start_day', 'event_start_date format="%H"' => 'start_hour', 'event_start_date format="%i"' => 'start_minute', 'event_end_date format="%Y"' => 'end_year', 'event_end_date format="%m"' => 'end_month', 'event_end_date format="%d"' => 'end_day', 'event_end_date format="%H"' => 'end_hour', 'event_end_date format="%i"' => 'end_minute', 'event_calendar_tz_offset' => 'tz_offset', 'event_calendar_timezone' => 'timezone');
     $rvars = array('rule_type', 'rule_start_date', 'rule_repeat_years', 'rule_repeat_months', 'rule_repeat_days', 'rule_repeat_weeks', 'rule_days_of_week', 'rule_relative_dow', 'rule_days_of_month', 'rule_months_of_year', 'rule_stop_by', 'rule_stop_after');
     $evars = array('exception_start_date format="%Y%m%dT%H%i00"');
     $ovars = array('occurrence_start_date format="%Y%m%dT%H%i00"', 'occurrence_end_date format="%Y%m%dT%H%i00"');
     //ee()->TMPL->log_item('Calendar: Preparing tagdata');
     $summary_field = ee()->TMPL->fetch_param('summary_field', 'event_title');
     ee()->TMPL->tagdata = implode($s, array(LD . $summary_field . RD, LD . 'event_id' . RD, LD . 'if event_summary' . RD . LD . 'event_summary' . RD . LD . '/if' . RD, LD . 'if event_location' . RD . LD . 'event_location' . RD . LD . '/if' . RD, LD . 'event_start_date format="%Y"' . RD, LD . 'event_start_date format="%m"' . RD, LD . 'event_start_date format="%d"' . RD, LD . 'event_start_date format="%H"' . RD, LD . 'event_start_date format="%i"' . RD, LD . 'event_end_date format="%Y"' . RD, LD . 'event_end_date format="%m"' . RD, LD . 'event_end_date format="%d"' . RD, LD . 'event_end_date format="%H"' . RD, LD . 'event_end_date format="%i"' . RD, LD . 'event_calendar_tz_offset' . RD, LD . 'event_calendar_timezone' . RD, 'RULES' . LD . 'if event_has_rules' . RD . LD . 'rules' . RD . LD . implode(RD . $r . LD, $rvars) . RD . '|' . LD . T_SLASH . 'rules' . RD . LD . '/if' . RD, 'OCCURRENCES' . LD . 'if event_has_occurrences' . RD . LD . 'occurrences' . RD . LD . implode(RD . $r . LD, $ovars) . RD . '|' . LD . T_SLASH . 'occurrences' . RD . LD . '/if' . RD, 'EXCEPTIONS' . LD . 'if event_has_exceptions' . RD . LD . 'exceptions' . RD . LD . implode(RD . $r . LD, $evars) . RD . '|' . LD . T_SLASH . 'exceptions' . RD . LD . '/if' . RD, $e));
     $tvars = ee()->functions->assign_variables(ee()->TMPL->tagdata);
     ee()->TMPL->var_single = $tvars['var_single'];
     ee()->TMPL->var_pair = $tvars['var_pair'];
     ee()->TMPL->tagdata = ee()->functions->prep_conditionals(ee()->TMPL->tagdata, array_keys($vars));
     // -------------------------------------
     //  Fire up events()
     // -------------------------------------
     //ee()->TMPL->log_item('Calendar: Firing up Events()');
     $tagdata = ee()->TMPL->advanced_conditionals($this->events());
     // -------------------------------------
     //  Collect the events
     // -------------------------------------
     //ee()->TMPL->log_item('Calendar: Collecting events');
     $events = explode($e, $tagdata);
     // -------------------------------------
     //  Fire up iCalCreator
     // -------------------------------------
     //ee()->TMPL->log_item('Calendar: Starting iCalCreator');
     if (!class_exists('vcalendar')) {
         require_once 'libraries/icalcreator/iCalcreator.class.php';
     }
     $ICAL = new vcalendar();
     //we are setting this manually because we need individual ones for each event for this to work
     //$ICAL->setConfig('unique_id', parse_url(ee()->config->item('site_url'), PHP_URL_HOST));
     $host = parse_url(ee()->config->item('site_url'), PHP_URL_HOST);
     $vars = array_values($vars);
     //ee()->TMPL->log_item('Calendar: Iterating through the events');
     foreach ($events as $key => $event) {
         if (trim($event) == '') {
             continue;
         }
         $E = new vevent();
         $event = explode($s, $event);
         $rules = '';
         $occurrences = '';
         $exceptions = '';
         foreach ($event as $k => $v) {
             if (isset($vars[$k])) {
                 //--------------------------------------------
                 //	Makes the local vars from above, if available:
                 // 	$title, $summary, $location,
                 //  $start_year, $start_month, $start_day,
                 //  $start_hour, $start_minute, $end_year,
                 //  $end_month, $end_day, $end_hour,
                 // 	$end_minute, $tz_offset, $timezone
                 //--------------------------------------------
                 ${$vars}[$k] = $v;
             } elseif (substr($v, 0, 5) == 'RULES') {
                 $rules = substr($v, 5);
             } elseif (substr($v, 0, 11) == 'OCCURRENCES') {
                 $occurrences = substr($v, 11);
             } elseif (substr($v, 0, 10) == 'EXCEPTIONS') {
                 $exceptions = substr($v, 10);
             }
         }
         // -------------------------------------
         //  Set the timezone for this calendar based on the first event's info
         // -------------------------------------
         if ($key == 0) {
             // -------------------------------------
             //  Convert calendar_name to calendar_id
             // -------------------------------------
             if ($this->P->value('calendar_id') == '' and $this->P->value('calendar_name') != '') {
                 $ids = $this->data->get_calendar_id_from_name($this->P->value('calendar_name'), NULL, $this->P->params['calendar_name']['details']['not']);
                 $this->P->set('calendar_id', implode('|', $ids));
             }
             //--------------------------------------------
             //	lets try to get the timezone from the
             //	passed calendar ID if there is one
             //--------------------------------------------
             $cal_timezone = FALSE;
             $cal_tz_offset = FALSE;
             if ($this->P->value('calendar_id') != '') {
                 $sql = "SELECT \ttz_offset, timezone\n\t\t\t\t\t\t\tFROM\texp_calendar_calendars\n\t\t\t\t\t\t\tWHERE \tcalendar_id\n\t\t\t\t\t\t\tIN \t\t(" . ee()->db->escape_str(implode(',', explode('|', $this->P->value('calendar_id')))) . ")\n\t\t\t\t\t\t\tLIMIT\t1";
                 $cal_tz_query = ee()->db->query($sql);
                 if ($cal_tz_query->num_rows() > 0) {
                     $cal_timezone = $cal_tz_query->row('timezone');
                     $cal_tz_offset = $cal_tz_query->row('tz_offset');
                 }
             }
             //last resort, we get it from the current event
             $T = new vtimezone();
             $T->setProperty('tzid', $cal_timezone ? $cal_timezone : $timezone);
             $T->setProperty('tzoffsetfrom', '+0000');
             $tzoffsetto = $cal_tz_offset ? $cal_tz_offset : $tz_offset;
             if ($tzoffsetto === '0000') {
                 $tzoffsetto = '+0000';
             }
             $T->setProperty('tzoffsetto', $tzoffsetto);
             $ICAL->setComponent($T);
         }
         $title = strip_tags($title);
         $description = strip_tags(trim($summary));
         $location = strip_tags(trim($location));
         // -------------------------------------
         //  Occurrences?
         // -------------------------------------
         $occurrences = explode('|', rtrim($occurrences, '|'));
         $odata = array();
         foreach ($occurrences as $k => $occ) {
             $occ = trim($occ);
             if ($occ == '') {
                 continue;
             }
             $occ = explode($r, $occ);
             $odata[$k][] = $occ[0];
             $odata[$k][] = $occ[1];
         }
         // -------------------------------------
         //  Exceptions?
         // -------------------------------------
         $exceptions = explode('|', rtrim($exceptions, '|'));
         $exdata = array();
         foreach ($exceptions as $k => $exc) {
             $exc = trim($exc);
             if ($exc == '') {
                 continue;
             }
             $exdata[] = $exc;
         }
         // -------------------------------------
         //  Rules?
         // -------------------------------------
         $add_rules = FALSE;
         $erules = array();
         $rules = explode('|', rtrim($rules, '|'));
         foreach ($rules as $rule) {
             $temp = explode($r, $rule);
             $rule = array();
             foreach ($temp as $k => $v) {
                 if ($v != FALSE) {
                     $add_rules = TRUE;
                 }
                 $rule[substr($rvars[$k], 5)] = $v;
             }
             if ($add_rules === TRUE) {
                 $temp = array();
                 if ($rule['repeat_years'] > 0) {
                     $temp['FREQ'] = 'YEARLY';
                     if ($rule['repeat_years'] > 1) {
                         $temp['INTERVAL'] = $rule['repeat_years'];
                     }
                 } elseif ($rule['repeat_months'] > 0) {
                     $temp['FREQ'] = 'MONTHLY';
                     if ($rule['repeat_months'] > 1) {
                         $temp['INTERVAL'] = $rule['repeat_months'];
                     }
                 } elseif ($rule['repeat_weeks'] > 0) {
                     $temp['FREQ'] = 'WEEKLY';
                     if ($rule['repeat_weeks'] > 1) {
                         $temp['INTERVAL'] = $rule['repeat_weeks'];
                     }
                 } elseif ($rule['repeat_days'] > 0) {
                     $temp['FREQ'] = 'DAILY';
                     if ($rule['repeat_days'] > 1) {
                         $temp['INTERVAL'] = $rule['repeat_days'];
                     }
                 }
                 if ($rule['months_of_year'] > 0) {
                     //this flips keys to make 'c' => 12, etc
                     $m = array_flip(array(1, 2, 3, 4, 5, 6, 7, 8, 9, 'A', 'B', 'C'));
                     if (strlen($rule['months_of_year'] > 1)) {
                         $months = str_split($rule['months_of_year']);
                         foreach ($months as $month) {
                             $temp['BYMONTH'][] = $m[$month] + 1;
                         }
                     } else {
                         $temp['BYMONTH'] = $m[$month] + 1;
                     }
                 }
                 if ($rule['days_of_month'] > '') {
                     //this flips keys to make 'v' => 30, etc
                     $d = array_flip(array(1, 2, 3, 4, 5, 6, 7, 8, 9, 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V'));
                     if (strlen($rule['days_of_month']) > 1) {
                         $days = str_split($rule['days_of_month']);
                         foreach ($days as $day) {
                             $temp['BYMONTHDAY'][] = $d[$day] + 1;
                         }
                     } else {
                         $temp['BYMONTHDAY'] = $d[$rule['days_of_month']] + 1;
                     }
                 }
                 if ($rule['days_of_week'] != '' or $rule['days_of_week'] > 0) {
                     $d = array('SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA');
                     $d_letter = array('U', 'M', 'T', 'W', 'R', 'F', 'S');
                     $dows = str_split($rule['days_of_week']);
                     if ($rule['relative_dow'] > 0) {
                         $rels = str_split($rule['relative_dow']);
                         foreach ($dows as $dow) {
                             foreach ($rels as $rel) {
                                 if ($rel == 6) {
                                     $rel = -1;
                                 }
                                 $temp['BYDAY'][] = $rel . $d[array_search($dow, $d_letter)];
                             }
                         }
                     } else {
                         foreach ($dows as $dow) {
                             $temp['BYDAY'][] = $d[array_search($dow, $d_letter)];
                         }
                     }
                 }
                 if ($rule['stop_after'] > 0) {
                     $temp['COUNT'] = $rule['stop_after'];
                 } elseif ($rule['stop_by'] > 0) {
                     // TODO: Add time
                     // TODO: The "+1" below is because the ical standard treats
                     // 	UNTIL as "less than", not "less than or equal to" (which
                     // 	is how Calendar treats stop_by). Double check that a simple
                     // 	"+1" accurately addresses this difference.
                     $temp['UNTIL'] = $rule['stop_by'] + 1;
                 }
                 $erules[] = $temp;
             }
         }
         // -------------------------------------
         //  Put it together
         // -------------------------------------
         //if this is all day we need to add the dates as params to the dstart and end items
         if ($this->_is_all_day($start_hour, $start_minute, $end_hour, $end_minute)) {
             $E->setProperty("dtstart", array('year' => $start_year, 'month' => $start_month, 'day' => $start_day), array('VALUE' => 'DATE'));
             //--------------------------------------------
             //	we need CDT so we can add a day
             //	gcal, and ical are ok with this being the same day
             //	stupid damned outlook barfs, hence the +1
             //	the +1 doesnt affect g/ical
             //--------------------------------------------
             if (!isset($this->CDT) or !is_object($this->CDT)) {
                 $this->load_calendar_datetime();
             }
             $this->CDT->change_date($end_year, $end_month, $end_day);
             $this->CDT->add_day();
             $E->setProperty("dtend", array('year' => $this->CDT->year, 'month' => $this->CDT->month, 'day' => $this->CDT->day), array('VALUE' => 'DATE'));
         } else {
             $E->setProperty('dtstart', $start_year, $start_month, $start_day, $start_hour, $start_minute, 00);
             $E->setProperty('dtend', $end_year, $end_month, $end_day, $end_hour, $end_minute, 00);
         }
         $E->setProperty('summary', $title);
         if (!empty($erules)) {
             foreach ($erules as $rule) {
                 $E->setProperty('rrule', $rule);
             }
         }
         $extras = array();
         $edits = array();
         if (!empty($odata)) {
             $query = ee()->db->query("SELECT *\n\t\t\t\t\t FROM\texp_calendar_events_occurrences\n\t\t\t\t\t WHERE\tevent_id = " . ee()->db->escape_str($id));
             foreach ($query->result_array() as $row) {
                 //fix blank times
                 $row['start_time'] = $row['start_time'] == 0 ? '0000' : $row['start_time'];
                 $row['end_time'] = $row['end_time'] == 0 ? '2400' : $row['end_time'];
                 //looks like an edited occurrence
                 //edits without rules arent really edits.
                 if ($row['event_id'] != $row['entry_id'] and empty($rules)) {
                     $edits[] = $row;
                 } else {
                     $extras[] = $row;
                 }
             }
         }
         if (!empty($exdata)) {
             $E->setProperty('exdate', $exdata);
         }
         if ($description != '') {
             $E->setProperty('description', $description);
         }
         if ($location != '') {
             $E->setProperty('location', $location);
         }
         $E->setProperty("uid", $this->make_uid() . '@' . $host);
         $ICAL->setComponent($E);
         //--------------------------------------------
         //	remove rules for subsequent items
         //--------------------------------------------
         while ($E->deleteProperty("RRULE")) {
             continue;
         }
         //edits must come right after
         if (!empty($edits)) {
             foreach ($edits as $edit) {
                 $edit_date = array("year" => $edit['start_year'], "month" => $edit['start_month'], "day" => $edit['start_day'], "hour" => substr($edit['start_time'], 0, 2), "min" => substr($edit['start_time'], 2, 2));
                 //if this is all day we need to add the dates as params to the dstart and end items
                 if ($this->_is_all_day(substr($edit['start_time'], 0, 2), substr($edit['start_time'], 2, 2), substr($edit['end_time'], 0, 2), substr($edit['end_time'], 2, 2))) {
                     $E->setProperty("dtstart", array('year' => $edit['start_year'], 'month' => $edit['start_month'], 'day' => $edit['start_day']), array('VALUE' => 'DATE'));
                     //--------------------------------------------
                     //	we need CDT so we can add a day
                     //	gcal, and ical are ok with this being the same day
                     //	stupid damned outlook barfs, hence the +1
                     //	the +1 doesnt affect g/ical
                     //--------------------------------------------
                     if (!isset($this->CDT) or !is_object($this->CDT)) {
                         $this->load_calendar_datetime();
                     }
                     $this->CDT->change_date($edit['end_year'], $edit['end_month'], $edit['end_day']);
                     $this->CDT->add_day();
                     $E->setProperty("dtend", array('year' => $this->CDT->year, 'month' => $this->CDT->month, 'day' => $this->CDT->day), array('VALUE' => 'DATE'));
                 } else {
                     $E->setProperty('dtstart', $edit_date['year'], $edit_date['month'], $edit_date['day'], $edit_date['hour'], $edit_date['min'], 00);
                     $E->setProperty('dtend', $edit['end_year'], $edit['end_month'], $edit['end_day'], substr($edit['end_time'], 0, 2), substr($edit['end_time'], 2, 2), 00);
                 }
                 $E->setProperty("RECURRENCE-ID", $edit_date);
                 $E->setProperty("uid", $this->make_uid() . '@' . $host);
                 $ICAL->setComponent($E);
             }
             //cleanup
             $E->deleteProperty("RECURRENCE-ID");
             $E->setProperty('dtstart', $start_year, $start_month, $start_day, $start_hour, $start_minute, 00);
             $E->setProperty('dtend', $end_year, $end_month, $end_day, $end_hour, $end_minute, 00);
         }
         // these random ass add-in dates are non-standard to most cal creation
         // and need to be treated seperately as lumping don't work, dog
         if (!empty($extras)) {
             foreach ($extras as $extra) {
                 //if this is all day we need to add the dates as params to the dstart and end items
                 if ($this->_is_all_day(substr($extra['start_time'], 0, 2), substr($extra['start_time'], 2, 2), substr($extra['end_time'], 0, 2), substr($extra['end_time'], 2, 2))) {
                     $E->setProperty("dtstart", array('year' => $extra['start_year'], 'month' => $extra['start_month'], 'day' => $extra['start_day']), array('VALUE' => 'DATE'));
                     //--------------------------------------------
                     //	we need CDT so we can add a day
                     //	gcal, and ical are ok with this being the same day
                     //	stupid damned outlook barfs, hence the +1
                     //	the +1 doesnt affect g/ical
                     //--------------------------------------------
                     if (!isset($this->CDT) or !is_object($this->CDT)) {
                         $this->load_calendar_datetime();
                     }
                     $this->CDT->change_date($extra['end_year'], $extra['end_month'], $extra['end_day']);
                     $this->CDT->add_day();
                     $E->setProperty("dtend", array('year' => $this->CDT->year, 'month' => $this->CDT->month, 'day' => $this->CDT->day), array('VALUE' => 'DATE'));
                 } else {
                     $E->setProperty('dtstart', $extra['start_year'], $extra['start_month'], $extra['start_day'], substr($extra['start_time'], 0, 2), substr($extra['start_time'], 2, 2), 00);
                     $E->setProperty('dtend', $extra['end_year'], $extra['end_month'], $extra['end_day'], substr($extra['end_time'], 0, 2), substr($extra['end_time'], 2, 2), 00);
                 }
                 $E->setProperty("uid", $this->make_uid() . '@' . $host);
                 $ICAL->setComponent($E);
             }
             //clean in case we need to add more later
             $E->setProperty('dtstart', $start_year, $start_month, $start_day, $start_hour, $start_minute, 00);
             $E->setProperty('dtend', $end_year, $end_month, $end_day, $end_hour, $end_minute, 00);
         }
     }
     //return $ICAL->createCalendar();
     return $ICAL->returnCalendar();
 }
コード例 #4
0
 /**
  * Save client event
  * @param web request $request
  */
 public function executeUpdateEvent($request)
 {
     $sf_user = $this->getUser();
     $sf_user_id = $sf_user->getGuardUser()->getId();
     $client_id = $request->getParameter('id');
     $client_profile = ProfilePeer::retrieveByPK($client_id);
     $sfguard_user_profile = $sf_user->getProfile();
     $sfguard_fullname = $sfguard_user_profile->getFullname();
     $sfguard_email = $sfguard_user_profile->getEmail();
     $start_hour = $request->getParameter('start_hour');
     $start_min = $request->getParameter('start_min');
     $time_mode = $request->getParameter('start_mn');
     $client_branch_id = BranchUsersPeer::getUserBranchId($client_profile->getUserId());
     $hour = sfConfig::get('mod_client_outlook_shour');
     $sc_hour = sfConfig::get('mod_client_secondhalf_shhour');
     if ($request->isMethod('post')) {
         $event_id = $this->getRequestParameter('event_id');
         $event_details = '';
         if ($event_id) {
             $event_details = pmProjectObjectsPeer::retrieveByPK($event_id);
             $this->form = new ClientEventForm($event_details);
         } else {
             $this->form = new ClientEventForm();
         }
         $event_data = $request->getParameter('pm_project_objects');
         if ($time_mode == 'AM') {
             $start_hour_value = $start_hour == 11 ? '00' : $hour[$start_hour];
             $date_field_1 = $event_data['date_field_1'] . ' ' . $start_hour_value . ':' . $start_min . ':00';
         } elseif ($time_mode == 'PM') {
             $start_hour_value = $start_hour == 11 ? $hour[$start_hour] : $sc_hour[$start_hour];
             $date_field_1 = $event_data['date_field_1'] . ' ' . $start_hour_value . ':' . $start_min . ':00';
         }
         $event_data['module'] = 'client event';
         $event_data['tree_left'] = $client_branch_id;
         $event_data['tree_right'] = $sf_user_id;
         $event_data['integer_field_2'] = $client_id;
         $event_data['date_field_1'] = $date_field_1;
         $event_data['contract_id'] = $request->getParameter('contract_id');
         $event_data['created_by_id'] = $sf_user_id;
         $event_data['updated_by_id'] = $sf_user_id;
         $this->form->bind($event_data);
         if ($this->form->isValid()) {
             $client_event = $this->form->save();
             $client_event->setParentId($client_event->getId());
             $client_event->setUpdatedAt($date_field_1);
             $client_event->save();
             // create instance of event class and add client event in event table
             $event = '';
             $c = new Criteria();
             $c->add(EventPeer::CEVENT_ID, $event_id);
             $event = EventPeer::doSelectOne($c);
             if (!$event) {
                 $event = new Event();
             }
             $event_start_date = $client_event->getDateField1();
             $client_full_name = $client_profile->getFname() . ' ' . $client_profile->getLname();
             $event->setUserId($client_profile->getUserId());
             $event->setSubject($client_full_name . ': ' . $client_event->getName() . ': ' . $client_event->getBody());
             $event->setBody($client_event->getName() . ': ' . $client_event->getBody());
             $event->setEventType('client event');
             $event->setStartTime($date_field_1);
             $event->setEndTime($date_field_1);
             $event->setCeventId($client_event->getId());
             $event->setCalendarId(calendarsPeer::getCalendarIdByUserId($sf_user_id));
             $event->save();
             $ical = $this->getICalData($event);
             $event->setUri($ical->filename);
             $event->setIcsData($ical->createCalendar());
             $event->setCreatedById($sf_user_id);
             $event->save();
             $events = $event;
             if ($time_mode == 'PM') {
                 $hour = sfConfig::get('mod_client_outlook_shour');
             } else {
                 $hour = sfConfig::get('mod_client_outlook_shour');
             }
             $start_time = strtotime($event_start_date);
             $end_time = strtotime($event_start_date);
             $hour_start = $hour[$start_hour];
             //set default 9:00am
             $minute_start = $start_min;
             $end_hr = $start_min;
             // star time
             $start = array('year' => date('Y', $start_time), 'month' => date('m', $start_time), 'day' => date('d', $start_time), 'hour' => $hour_start, 'min' => $minute_start, 'sec' => date('s', $start_time));
             $outlook_start = date('d-m-Y', $start_time);
             $metting_start_time = $hour_start . ':' . $minute_start . ':' . '00';
             $mode = $time_mode == 'PM' ? ' PM' : ' AM';
             $metting_start_time = $metting_start_time . $mode;
             sfConfig::set('sf_web_debug', false);
             $description = get_partial('message_data', array());
             $sender = str_replace('sender', "{$client_full_name}", $description);
             $topic = str_replace('topic', "{$client_event->getName()}", $sender);
             $time = str_replace('start', "{$outlook_start}", $topic);
             $s_t = str_replace('s_t', "{$metting_start_time}", $time);
             $place = str_replace('place', "{$client_event->getVarcharField1()}", $s_t);
             $subject = str_replace('subject', "{$client_event->getBody()}", $place);
             $involved_user = $client_event->getContractId();
             $c = new Criteria();
             $c->add(ProfilePeer::USER_ID, $involved_user);
             $involved_user_profile = ProfilePeer::doSelectOne($c);
             $organizer = $involved_user_profile->getEmail();
             if ($time_mode == 'PM') {
                 $outlook_hour = sfConfig::get('mod_client_soutlook_dhour');
             } else {
                 $outlook_hour = sfConfig::get('mod_client_secoutlook_sechour');
             }
             $time_start = array('year' => date('Y', $start_time), 'month' => date('m', $start_time), 'day' => date('d', $start_time), 'hour' => $outlook_hour[$hour_start], 'min' => $minute_start, 'sec' => date('s', $start_time));
             $v_event = new vevent();
             $v_event->setProperty("organizer", 'MAILTO:' . $organizer);
             //$v_event->setProperty("recurrence-id", $start);
             $v_event->setProperty('uid', md5($events->getId()));
             $v_event->setProperty('dtstamp', $events->getCreatedAt());
             $v_event->setProperty('dtstart', $time_start);
             $v_event->setProperty('location', $client_event->getVarcharField1());
             $v_event->setProperty('dtend', $time_start);
             $v_event->setProperty('summary', $events->getSubject());
             $v_event->setProperty('description', $subject);
             $v_event->setProperty("status", "CONFIRMED");
             $v_timezone = new vtimezone();
             $v_timezone->setProperty("tzid", "Pacific/Auckland");
             $v_event->setComponent($v_timezone);
             $cal_events[] = $v_event;
             $v_alarm = new valarm();
             $v_alarm->setProperty('trigger', 'PT15M');
             $v_alarm->setProperty('action', 'display');
             $v_alarm->setProperty('Description', "Reminder: " . $subject);
             $v_event->setComponent($v_alarm);
             $calendar_events = $cal_events;
             $config = array('unique_id' => 'ravebuild.com');
             $v_calendar = new vcalendar();
             $v_calendar->setProperty("method", "REQUEST");
             $mail_data = $this->setIcalEvents($v_calendar, $calendar_events);
             $all_events = $v_calendar->createCalendar();
             $send_mail = new mailSend();
             $send_mail->sendInvitationToUser($organizer, null, $all_events);
             $event_type = $event_id ? 'updated' : 'added';
             $modification_message = $event_id ? 'Update Client Event' : 'Add Client Event';
             $client_user_id = $client_profile->getUserId();
             $this->saveHistory($modification_message, $client_user_id);
             $sf_user->setFlash('notice', 'The Event "' . $client_event->getBody() . '" has been ' . $event_type . ' successfully.');
             $this->redirect($request->getReferer());
         }
     }
 }