public function insert(Event $event, array $optionParams = null) { try { $event->getEventMeta(); } catch (Exception $e) { throw new Exception("Don't exists eventMeta data"); } $attendees = null; //option params filter if ($optionParams) { //attendees $attendeesParam = $optionParams["attendees"]; if ($attendeesParam && is_array($attendeesParam)) { $attendees = []; foreach ($attendeesParam as $attendee) { if (is_string($attendee) && filter_var($attendee, FILTER_VALIDATE_EMAIL)) { if ($attendee !== $event->getUserId()) { $attendees[] = ["email" => $attendee]; } } else { throw new Exception("attendees values should be a string whit valid email value"); } } } } $eventMeta = $event->getEventMeta(); //verify google access $myGoogleClient = get_my_google_client($event->getUserId()); if ($myGoogleClient) { //if exists Google access exits when record a GoogleCalendarEvent $dateStart = new DateTime($eventMeta->getDateStart()); $dateStart->add(new DateInterval("P{$eventMeta->getIntervalValue()}D")); $dateEnd = $dateStart->format("Y-m-d"); $googleCalendarEvent = new Google_Service_Calendar_Event(array("summary" => $event->getTitle(), "location" => $event->getLocation(), "description" => $event->getDescription(), "start" => array("dateTime" => "{$eventMeta->getDateStart()}T{$event->getStartHour()}", "timeZone" => "America/Lima"), "end" => array("dateTime" => "{$dateEnd}T{$event->getFinalHour()}", "timeZone" => "America/Lima"), "recurrence" => array("RRULE:FREQ=DAILY;COUNT=1"), "attendees" => $attendees ? $attendees : null, "reminders" => array("useDefault" => FALSE, "overrides" => array(array("method" => "email", "minutes" => 24 * 60), array("method" => "popup", "minutes" => 10))))); $client = $myGoogleClient->client; $service = new Google_Service_Calendar($client); $calendarId = 'primary'; $googleCalendarEventInserted = $service->events->insert($calendarId, $googleCalendarEvent, ["sendNotifications" => true]); $event->setGoogleCalendarEventId($googleCalendarEventInserted->id); } //record the event $eventDataToInsert = ["title" => $event->getTitle(), "description" => $event->getDescription(), "type" => $event->getType(), "location" => $event->getLocation(), "start_hour" => $event->getStartHour(), "final_hour" => $event->getFinalHour(), "color" => $event->getColor(), "status" => $event->getStatus(), "date_create" => $event->getDateCreate(), "user_id" => $event->getUserId(), "google_calendar_event_id" => $event->getGoogleCalendarEventId(), "notify_status" => $event->getNotifyStatus(), "parent_event_id" => $event->getParentEventId(), "calendar_id" => $event->getCalendarId()]; $eventDataInserted = insert("event", $eventDataToInsert); $event->setEventId($eventDataInserted["lastInsertId"]); //record the eventMeta $eventMeta->setEventId($event->getEventId()); $eventMetaDataToInsert = ["event_id" => $eventMeta->getEventId(), "date_start" => $eventMeta->getDateStart(), "interval_case" => $eventMeta->getIntervalCase(), "interval_value" => $eventMeta->getIntervalValue(), "week" => $eventMeta->getWeek(), "week_day" => $eventMeta->getWeekDay()]; $eventMetaDataInserted = insert("event_meta", $eventMetaDataToInsert); $eventMeta->setEventMetaId($eventMetaDataInserted["lastInsertId"]); //verify attendees if ($attendees) { $eventDataToInsert["google_calendar_event_id"] = null; $eventDataToInsert["notify_status"] = "pending"; $eventDataToInsert["parent_event_id"] = $event->getEventId(); foreach ($attendees as $attendee) { $eventDataToInsert["user_id"] = $attendee["email"]; $eventDataInsertedOfAttendee = insert("event", $eventDataToInsert); $eventMetaDataToInsert["event_id"] = $eventDataInsertedOfAttendee["lastInsertId"]; insert("event_meta", $eventMetaDataToInsert); } } return $event; }