$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');
$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 );
/** * 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(); }
/** * 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()); } } }