Ejemplo n.º 1
0
 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());
         }
     }
 }