function add() { if (logged_user()->isGuest()) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } $notAllowedMember = ''; if (!ProjectEvent::canAdd(logged_user(), active_context(), $notAllowedMember)) { if (str_starts_with($notAllowedMember, '-- req dim --')) { flash_error(lang('must choose at least one member of', str_replace_first('-- req dim --', '', $notAllowedMember, $in))); } else { trim($notAllowedMember) == "" ? flash_error(lang('you must select where to keep', lang('the event'))) : flash_error(lang('no context permissions to add', lang("events"), $notAllowedMember)); } ajx_current("empty"); return; } $this->setTemplate('event'); $event = new ProjectEvent(); $event_data = array_var($_POST, 'event'); $event_name = array_var($_GET, 'name'); //if sent from pupup //var_dump($event_data) ; $month = isset($_GET['month']) ? $_GET['month'] : date('n', DateTimeValueLib::now()->getTimestamp() + logged_user()->getTimezone() * 3600); $day = isset($_GET['day']) ? $_GET['day'] : date('j', DateTimeValueLib::now()->getTimestamp() + logged_user()->getTimezone() * 3600); $year = isset($_GET['year']) ? $_GET['year'] : date('Y', DateTimeValueLib::now()->getTimestamp() + logged_user()->getTimezone() * 3600); $user_filter = isset($_GET['user_filter']) ? $_GET['user_filter'] : logged_user()->getId(); if (!is_array($event_data)) { // set layout for modal form if (array_var($_REQUEST, 'modal')) { $this->setLayout("json"); tpl_assign('modal', true); } // if data sent from quickadd popup (via get) we se it, else default if (isset($_GET['start_time'])) { $this->parseTime($_GET['start_time'], $hour, $minute); } else { $hour = isset($_GET['hour']) ? $_GET['hour'] : date('G', DateTimeValueLib::now()->getTimestamp() + logged_user()->getTimezone() * 3600); $minute = isset($_GET['minute']) ? $_GET['minute'] : round(date('i') / 15, 0) * 15; //0,15,30 and 45 min } if (!user_config_option('time_format_use_24')) { if ($hour >= 12) { $pm = 1; $hour = $hour - 12; } else { $pm = 0; } } $event_data = array('month' => isset($_GET['month']) ? $_GET['month'] : date('n', DateTimeValueLib::now()->getTimestamp() + logged_user()->getTimezone() * 3600), 'year' => isset($_GET['year']) ? $_GET['year'] : date('Y', DateTimeValueLib::now()->getTimestamp() + logged_user()->getTimezone() * 3600), 'day' => isset($_GET['day']) ? $_GET['day'] : date('j', DateTimeValueLib::now()->getTimestamp() + logged_user()->getTimezone() * 3600), 'hour' => $hour, 'minute' => $minute, 'pm' => isset($pm) ? $pm : "", 'typeofevent' => isset($_GET['type_id']) ? $_GET['type_id'] : 1, 'name' => $event_name, 'durationhour' => isset($_GET['durationhour']) ? $_GET['durationhour'] : 1, 'durationmin' => isset($_GET['durationmin']) ? $_GET['durationmin'] : 0); // array } // if tpl_assign('event', $event); tpl_assign('event_data', $event_data); tpl_assign('event_related', false); if (is_array(array_var($_POST, 'event'))) { try { $data = $this->getData($event_data); $event->setFromAttributes($data); DB::beginWork(); $event->save(); $this->registerInvitations($data, $event); if (isset($data['confirmAttendance'])) { $this->change_invitation_state($data['confirmAttendance'], $event->getId(), $user_filter); } if (array_var($_POST, 'members')) { $member_ids = json_decode(array_var($_POST, 'members')); } else { $member_ids = array(); $context = active_context(); foreach ($context as $selection) { if ($selection instanceof Member) { $member_ids[] = $selection->getId(); } } } $object_controller = new ObjectController(); $object_controller->add_to_members($event, $member_ids); $object_controller->add_subscribers($event); $object_controller->link_to_new_object($event); $object_controller->add_custom_properties($event); $object_controller->add_reminders($event); if (array_var($_POST, 'popup', false)) { // create default reminder $def = explode(",", user_config_option("reminders_events")); $minutes = array_var($def, 2) * array_var($def, 1); $reminder = new ObjectReminder(); $reminder->setMinutesBefore($minutes); $reminder->setType(array_var($def, 0, 'reminder_email')); $reminder->setContext("start"); $reminder->setObject($event); $reminder->setUserId(0); $date = $event->getStart(); if ($date instanceof DateTimeValue) { $rdate = new DateTimeValue($date->getTimestamp() - $minutes * 60); $reminder->setDate($rdate); } $reminder->save(); // subscribe or not the invited users if (user_config_option('event_subscribe_invited')) { $data['subscribe_invited'] = "checked"; } // send or not the inivitations if (user_config_option('event_send_invitations')) { $data['send_notification'] = "checked"; } } $opt_rep_day = array(); if (array_var($event_data, 'repeat_saturdays')) { $opt_rep_day['saturday'] = true; } else { $opt_rep_day['saturday'] = false; } if (array_var($event_data, 'repeat_sundays')) { $opt_rep_day['sunday'] = true; } else { $opt_rep_day['sunday'] = false; } if (array_var($_POST, 'popup', false)) { $event->subscribeUser(logged_user()); ajx_current("reload"); } else { ajx_current("back"); } DB::commit(); //external calendar sync $ext_user = ExternalCalendarUsers::findByContactId(); if ($ext_user instanceof ExternalCalendarUser && $ext_user->getSync() == 1) { $calendar_feng = ExternalCalendars::findFengCalendarByExtCalUserIdValue($ext_user->getId()); $externalCalendarController = new ExternalCalendarController(); $externalCalendarController->sync_event_on_extern_calendar($event, $ext_user, $calendar_feng); } $is_silent = false; if (isset($data['send_notification']) && $data['send_notification']) { $users_to_inv = array(); foreach ($data['users_to_invite'] as $us => $v) { if ($us != logged_user()->getId()) { $users_to_inv[] = Contacts::findById(array('id' => $us)); } } Notifier::notifEvent($event, $users_to_inv, 'new', logged_user()); $is_silent = true; } ApplicationLogs::createLog($event, ApplicationLogs::ACTION_ADD, false, $is_silent); flash_success(lang('success add event', clean($event->getObjectName()))); ajx_add("overview-panel", "reload"); if (array_var($_REQUEST, 'modal')) { evt_add("reload current panel"); } } catch (Exception $e) { DB::rollback(); flash_error($e->getMessage()); ajx_current("empty"); } // try } }
function export_google_calendar_for_user($user) { $service = $this->connect_with_google_calendar($user); if ($user->getSync() == 1) { $calendar_feng = ExternalCalendars::findFengCalendarByExtCalUserIdValue($user->getId()); //get events starting from past 2 weeks $previous_week = strtotime("-2 week"); $time_min = date(DATE_MYSQL, $previous_week); $events = ProjectEvents::findNoSync($user->getContactId(), $time_min, 100); $events_inv = ProjectEvents::findNoSyncInvitations($user->getContactId(), $time_min, 100); try { if ($calendar_feng instanceof ExternalCalendar) { $events_and_inv = array_merge($events, $events_inv); foreach ($events_and_inv as $event) { $this->update_event_on_google_calendar($event, $calendar_feng, $user, $service); } //we ask for events in this calendar in order to prevent checking the uploaded events on the import try { $now = strtotime("now"); $time_min = date(DATE_RFC3339, $now); $optParams['timeMin'] = $time_min; $events = $service->events->listEvents($calendar_feng->getOriginalCalendarId(), $optParams); } catch (Exception $e) { Logger::log("Fail to get events from feng external calendar: " . $calendar->getId()); Logger::log($e->getMessage()); } //update the calendar token $nextSyncToken = $events->getNextSyncToken(); if ($nextSyncToken) { $calendar_feng->setExternalCalendarPropertyValue("syncToken", $nextSyncToken); } } else { //create feng calendar on google if not exists and save it on feng $instalation = explode("/", ROOT_URL); $instalation_name = end($instalation); $calendar_name = lang('feng calendar', $instalation_name); $calendar_exists = false; //check if calendar exists try { $calendarList = $service->calendarList->listCalendarList(); while (true) { foreach ($calendarList->getItems() as $calendarListEntry) { if ($calendarListEntry->getSummary() == $calendar_name) { $calendar_exists = true; $external_calendar = array('original_calendar_id' => $calendarListEntry->getId(), 'title' => $calendarListEntry->getSummary(), 'calendar_status' => 1); break; } } $pageToken = $calendarList->getNextPageToken(); if ($pageToken) { $optParams = array('pageToken' => $pageToken); $calendarList = $service->calendarList->listCalendarList($optParams); } else { break; } } } catch (Exception $e) { Logger::log("Fail to get calendars list from google: " . $user->getContactId()); throw $e; } if (!$calendar_exists) { $new_calendar = new Google_Service_Calendar_Calendar(); $new_calendar->setSummary($calendar_name); //$calendar->setTimeZone('America/Los_Angeles'); $createdCalendar = $service->calendars->insert($new_calendar); $external_calendar = array('original_calendar_id' => $createdCalendar->getId(), 'title' => $createdCalendar->getSummary(), 'calendar_status' => 1); } $calendar = new ExternalCalendar(); $calendar->setOriginalCalendarId($external_calendar['original_calendar_id']); //$calendar->setCalendarVisibility($calendar_visibility); $calendar->setCalendarName($external_calendar['title']); $calendar->setExtCalUserId($user->getId()); $calendar->setCalendarFeng(1); $calendar->setSync(1); $calendar->save(); } flash_success(lang('success add sync')); ajx_current("reload"); } catch (Exception $e) { Logger::log($e->getMessage()); } } }