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