function addEvent($title = 'Новый заказ', $desc = 'Описание заказа', $where = 'интернет-магазин', $startDate, $endDate, $sms_reminder) { try { set_include_path('.' . PATH_SEPARATOR . $_SERVER['DOCUMENT_ROOT'] . '/modules/gcalendar/' . PATH_SEPARATOR . get_include_path()); include_once 'Zend/Loader.php'; Zend_Loader::loadClass('Zend_Gdata'); Zend_Loader::loadClass('Zend_Gdata_AuthSub'); Zend_Loader::loadClass('Zend_Gdata_ClientLogin'); Zend_Loader::loadClass('Zend_Gdata_HttpClient'); Zend_Loader::loadClass('Zend_Gdata_Calendar'); $client = Zend_Gdata_ClientLogin::getHttpClient($this->_user, $this->_pass, "cl"); $gdataCal = new Zend_Gdata_Calendar($client); $newEvent = $gdataCal->newEventEntry(); $newEvent->title = $gdataCal->newTitle($title); $newEvent->where = array($gdataCal->newWhere($where)); $newEvent->content = $gdataCal->newContent($desc); $when = $gdataCal->newWhen(); $when->startTime = $startDate; $when->endTime = $endDate; if (intval($sms_reminder)) { $reminder = $gdataCal->newReminder(); $reminder->method = "sms"; $reminder->minutes = "0"; $when->reminders = array($reminder); } $newEvent->when = array($when); $createdEvent = $gdataCal->insertEvent($newEvent); return $createdEvent->id->text; } catch (Exception $ex) { // Report the exception to the user } }
public function setPlanning($startDate, $endDate, $title, $content) { // Parameters for ClientAuth authentication ProjectConfiguration::registerZend(); Zend_Loader::loadClass('Zend_Gdata'); Zend_Loader::loadClass('Zend_Gdata_ClientLogin'); Zend_Loader::loadClass('Zend_Gdata_Calendar'); $service = Zend_Gdata_Calendar::AUTH_SERVICE_NAME; $user = sfConfig::get('app_gmail_user'); $pass = sfConfig::get('app_gmail_pwd'); // Create an authenticated HTTP client $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service); // Create an instance of the Calendar service $service = new Zend_Gdata_Calendar($client); // Create a new entry using the calendar service's magic factory method $event = $service->newEventEntry(); // Populate the event with the desired information // Note that each attribute is crated as an instance of a matching class $event->title = $service->newTitle($title); $event->where = array($service->newWhere("Paris, France")); $event->content = $service->newContent($content); // Set the date using RFC 3339 format. $tzOffset = "+02"; $when = $service->newWhen(); //$when->startTime = "{$start_date}.000{$tzOffset}:00"; //$when->endTime = "{$end_date}.000{$tzOffset}:00"; $when->startTime = "{$startDate}:00.000{$tzOffset}:00"; $when->endTime = "{$endDate}:00.000{$tzOffset}:00"; $event->when = array($when); // Upload the event to the calendar server // A copy of the event as it is recorded on the server is returned $newEvent = $service->insertEvent($event); }
function g_cal_createEvent($client, $title = 'Untitled', $desc = '', $where = '', $startDate = '2008-01-01', $startTime = '0', $endDate = '2008-01-01', $endTime = '0', $tzOffset = '-08') { $gdataCal = new Zend_Gdata_Calendar($client); $newEvent = $gdataCal->newEventEntry(); $newEvent->title = $gdataCal->newTitle($title); $newEvent->where = array($gdataCal->newWhere($where)); $newEvent->content = $gdataCal->newContent("{$desc}"); if ($startTime == '0' || $startTime == '') { //Make this an All-Day Event $when = $gdataCal->newWhen(); $when->startTime = "{$startDate}"; $when->endTime = "{$endDate}"; } else { $when = $gdataCal->newWhen(); $when->startTime = "{$startDate}T{$startTime}:00.000{$tzOffset}:00"; $when->endTime = "{$endDate}T{$endTime}:00.000{$tzOffset}:00"; } $newEvent->when = array($when); // Upload the event to the calendar server // A copy of the event as it is recorded on the server is returned $createdEvent = $gdataCal->insertEvent($newEvent); /* //Store the new eventID in the cohelitack database //g_cal_updateEvent($client, $createdEvent->id, "New Title"); echo "\$event->getLink('edit')->href: " . $createdEvent->getLink('edit')->href . "<br>\n"; echo "\$event->getId(): " . $createdEvent->getId() . "<br>\n"; $myEvent = getEvent($client,$createdEvent->getId()); echo "\$myEvent->getId(): " . $myEvent->getId() . "<br>\n"; //g_cal_deleteEventByUrl($client,$createdEvent->getLink('edit')->href); //g_cal_deleteEventById($client,$createdEvent->getId()); */ return $createdEvent->getLink('edit')->href; }
/** * Creates an event on the authenticated user's default calendar with the * specified event details. * * @param Zend_Http_Client $client The authenticated client object * @param string $title The event title * @param string $desc The detailed description of the event * @param string $where * @param string $startDate The start date of the event in YYYY-MM-DD format * @param string $startTime The start time of the event in HH:MM 24hr format * @param string $endDate The end date of the event in YYYY-MM-DD format * @param string $endTime The end time of the event in HH:MM 24hr format * @param string $tzOffset The offset from GMT/UTC in [+-]DD format (eg -08) * @return string The ID URL for the event. */ function createEvent($client, $title = 'Tennis with Beth', $desc = 'Meet for a quick lesson', $where = 'On the courts', $startDate = '2008-01-20', $startTime = '10:00', $endDate = '2008-01-20', $endTime = '11:00', $tzOffset = '-08') { $gc = new Zend_Gdata_Calendar($client); $newEntry = $gc->newEventEntry(); $newEntry->title = $gc->newTitle(trim($title)); $newEntry->where = array($gc->newWhere($where)); $newEntry->content = $gc->newContent($desc); $newEntry->content->type = 'text'; $when = $gc->newWhen(); $when->startTime = "{$startDate}T{$startTime}:00.000{$tzOffset}:00"; $when->endTime = "{$endDate}T{$endTime}:00.000{$tzOffset}:00"; $newEntry->when = array($when); $createdEntry = $gc->insertEvent($newEntry); return $createdEntry->id->text; }
function createEvent($client, $title = 'Tennis with Beth', $desc = 'Meet for a quick lesson', $startDate = '2012-01-20', $endDate = '2012-01-20') { $gdataCal = new Zend_Gdata_Calendar($client); $newEvent = $gdataCal->newEventEntry(); $newEvent->title = $gdataCal->newTitle($title); //$newEvent->where = array($gdataCal->newWhere($where)); $newEvent->content = $gdataCal->newContent("{$desc}"); $when = $gdataCal->newWhen(); $when->startTime = "{$startDate}"; $when->endTime = "{$endDate}"; $newEvent->when = array($when); // Upload the event to the calendar server // A copy of the event as it is recorded on the server is returned $createdEvent = $gdataCal->insertEvent($newEvent); return $createdEvent->id->text; }
static function getEvent($bean, $user) { $client = self::getClient($user); if ($client != false) { $gdataCal = new Zend_Gdata_Calendar($client); $newEvent = null; $gid = self::getGoogleId($bean, $user); if ($gid) { try { $newEvent = $gdataCal->getEntry($gid, 'Zend_Gdata_Calendar_EventEntry'); } catch (Exception $e) { // Not found, creating } } if ($newEvent === null) { $newEvent = $gdataCal->newEventEntry(); } return $newEvent; } }
/** * Get the user notes from Google calendar (Gdata Zend functions are necessary) */ public function gCalendar() { // Security check $this->throwForbiddenUnless(SecurityUtil::checkPermission('IWagendas::', '::', ACCESS_READ)); // get user uid $user = (UserUtil::getVar('uid') == '') ? '-1' : UserUtil::getVar('uid'); $usability = ModUtil::func('IWagendas', 'user', 'getGdataFunctionsUsability'); if ($usability !== true) { throw new Zikula_Exception_Forbidden(); } //Load required classes require_once 'Zend/Loader.php'; Zend_Loader::loadClass('Zend_Gdata'); Zend_Loader::loadClass('Zend_Gdata_AuthSub'); Zend_Loader::loadClass('Zend_Gdata_ClientLogin'); Zend_Loader::loadClass('Zend_Gdata_HttpClient'); Zend_Loader::loadClass('Zend_Gdata_Calendar'); //@var string Location of AuthSub key file. include_path is used to find this $_authSubKeyFile = null; // Example value for secure use: 'mykey.pem' //@var string Passphrase for AuthSub key file. $_authSubKeyFilePassphrase = null; $service = Zend_Gdata_Calendar::AUTH_SERVICE_NAME; $userSettings = ModUtil::func('IWagendas', 'user', 'getUserGCalendarSettings'); if (!isset($_SESSION['sessionToken']) && !isset($_GET['token'])) { try { $client = Zend_Gdata_ClientLogin::getHttpClient($userSettings['gUserName'], base64_decode($userSettings['gUserPass']), $service); } catch (exception $e) { $authSubUrl = ModUtil::func('IWagendas', 'user', 'getAuthSubUrl'); return System::redirect(ModUtil::url('IWwebbox', 'user', 'main', array('url' => str_replace('&', '*', str_replace('?', '**', $authSubUrl))))); } } else $client = ModUtil::func('IWagendas', 'user', 'getAuthSubHttpClient'); try { $gdataCal = new Zend_Gdata_Calendar($client); } catch (exception $e) { LogUtil::registerError($this->__('Connection with Google failed. Imposible to synchronize the agenda')); return false; } //get user calendars try { $calFeed = $gdataCal->getCalendarListFeed(); } catch (exception $e) { LogUtil::registerError($this->__('Connection with Google failed. Imposible to synchronize the agenda')); return false; } $gCalendarsIdsArray = array(); foreach ($calFeed as $calendar) { $gCalendarsIdsArray[] = $calendar->id; } // Get all existing google calendars stored in database. We need them to know if the received google calendars exists or not $gAgendas = ModUtil::apiFunc('IWagendas', 'user', 'getAllAgendas', array('gAgendas' => 1, 'gCalendarsIdsArray' => $gCalendarsIdsArray)); $gCalendarsIdsArray = array(); foreach ($gAgendas as $g) { $gIds[$g['gCalendarId']] = $g; } $existingCalendar = array(); // Create or edit the calendars if it were necessary foreach ($calFeed as $calendar) { //sincronize calendars $id = $calendar->id; $resp = '$' . $user . '$'; $accessLevel = '$' . substr($calendar->accessLevel->value, 0, 4) . '|' . $user . '$'; $color = '$' . $calendar->color->value . '|' . $user . '$'; // Create a calendar array based on the calendar id $existingCalendar["$id"] = 1; if (!array_key_exists("$id", $gIds)) { $sv = ModUtil::func('IWmain', 'user', 'genSecurityValue'); $agenda = ModUtil::apiFunc('IWagendas', 'admin', 'create', array('nom_agenda' => $calendar->title, 'descriu' => $calendar->summary->text, 'c1' => $this->__('What'), 'c2' => $this->__('End'), 'c3' => $this->__('Where'), 'c4' => $this->__('Content'), 'c5' => $this->__('Author'), 'tc1' => 1, 'tc2' => 1, 'tc3' => 1, 'tc4' => 2, 'tc5' => 1, 'activa' => 1, 'adjunts' => 0, 'protegida' => 1, 'gColor' => '$' . $color, 'color' => '', 'gCalendarId' => $id, 'gAccessLevel' => '$' . $accessLevel, 'resp' => '$' . $resp, 'sv' => $sv)); // add new agenda into the array in case the agenda is created recently $gIds["$id"] = $agenda; } else { if ($gIds["$id"]['nom_agenda'] != $calendar->title || $gIds["$id"]['descriu'] != $calendar->summary->text || strpos($gIds["$id"]['gColor'], $color) === false || strpos($gIds["$id"]['resp'], $resp) === false || strpos($gIds["$id"]['gAccessLevel'], $accessLevel) === false) { if (strpos($gIds["$id"]['gAccessLeve l'], $accessLevel) === false) { // Change the gCalendar access level $pos = strpos($gIds["$id"]['gAccessLevel'], '|' . $user . '$'); $userAccessLevel = ($pos > 0) ? substr($gIds["$id"]['gAccessLevel'], $pos - 5, (int) strlen($user) + 7) : ''; $newAccessLevelString = ($pos > 0) ? str_replace($userAccessLevel, $accessLevel, $gIds["$id"]['gAccessLevel']) : $gIds["$id"]['gAccessLevel'] . $accessLevel; } if (strpos($gIds["$id"]['gColor'], $color) === false) { // Change the gCalendar access level $pos = strpos($gIds["$id"]['gColor'], '|' . $user . '$'); $userColor = ($pos > 0) ? substr($gIds["$id"]['gColor'], $pos - 8, (int) strlen($user) + 10) : ''; $newColorString = ($pos > 0) ? str_replace($userColor, $color, $gIds["$id"]['gColor']) : $gIds["$id"]['gColor'] . $color; } $resp = (strpos($gIds["$id"]['resp'], $resp) === false) ? $resp : ''; $items = array('nom_agenda' => $calendar->title, 'descriu' => $calendar->summary->text, 'gColor' => $newColorString, 'resp' => $gIds["$id"]['resp'] . $resp, 'gAccessLevel' => $newAccessLevelString); $sv = ModUtil::func('IWmain', 'user', 'genSecurityValue'); ModUtil::apiFunc('IWagendas', 'admin', 'editAgenda', array('daid' => $gIds["$id"]['daid'], 'items' => $items, 'sv' => $sv)); } } } // Get data from google for 2 months ago and 4 future months more or less $time = time(); $beginDate = $time - 2 * 30 * 24 * 60 * 60; $endDate = $time + 4 * 30 * 24 * 60 * 60; $beginOndate = date('Y-m-d', $beginDate); $endOnDate = date('Y-m-d', $endDate); //get all the google notes $gCalendarNotes = ModUtil::apiFunc('IWagendas', 'user', 'getAllGCalendarNotes', array('beginDate' => $beginDate, 'endDate' => $endDate, 'gIds' => $gIds)); foreach ($calFeed as $calendar) { $id = $calendar->id; $query = $gdataCal->newEventQuery(); $calFeed = $gdataCal->getCalendarListFeed(); $gUser = str_replace(Zend_Gdata_Calendar::CALENDAR_FEED_URI . '/default/', "", $id); // kind of dirty way to get the info, nut it lokks working :) $query->setUser($gUser); $query->setVisibility('private'); $query->setProjection('full'); $query->setOrderby('starttime'); $query->setStartMin($beginOndate); $query->setStartMax($endOnDate); $eventFeed = array(); if ($calendar->accessLevel->value == 'owner' || $calendar->accessLevel->value == 'editor' || $calendar->accessLevel->value == 'read') { $eventFeed = $gdataCal->getCalendarEventFeed($query); } foreach ($eventFeed as $event) { foreach ($event->when as $when) { $startTime = $when->startTime; $day = substr($startTime, 8, 2); $month = substr($startTime, 5, 2); $year = substr($startTime, 0, 4); $hour = substr($startTime, 11, 2); $minute = substr($startTime, 14, 2); $startTime = gmmktime($hour, $minute, 0, $month, $day, $year); $day = date('d', $startTime); $month = date('m', $startTime); $year = date('Y', $startTime); $hour = date('H', $startTime); $minute = date('i', $startTime); $endTime = $when->endTime; $dayEnd = substr($endTime, 8, 2); $monthEnd = substr($endTime, 5, 2); $yearEnd = substr($endTime, 0, 4); $hourEnd = substr($endTime, 11, 2); $minuteEnd = substr($endTime, 14, 2); $endTime = gmmktime($hourEnd, $minuteEnd, 0, $monthEnd, $dayEnd, $yearEnd); $dayEnd = date('d', $endTime); $monthEnd = date('m', $endTime); $yearEnd = date('Y', $endTime); $hourEnd = date('H', $endTime); $minuteEnd = date('i', $endTime); $allDay = (($minute == '' || $minute == '00') && ($hour == '' || $hour == '23') && ($minuteEnd == '' || $minuteEnd == '00') && ($hourEnd == '' || $hourEnd == '00')) ? 1 : 0; $end = ($allDay == 0) ? $this->__('Foreseen time to finish') . ': ' . $hourEnd . ':' . $minuteEnd : $this->__('All day'); if (!array_key_exists("$event->id", $gCalendarNotes)) { //create item $lid = ModUtil::apiFunc('IWagendas', 'user', 'crear', array('dia' => $day, 'mes' => $month, 'any' => $year, 'c1' => $event->title, 'c2' => $end, 'c3' => $event->where[0]->valueString, 'c4' => $event->content, 'c5' => $event->author[0]->email->text, 'c6' => '', 'minut' => $minute, 'hora' => $hour, 'totdia' => $allDay, 'tasca' => 0, 'nivell' => 0, 'rid' => '-1', 'daid' => $gIds["$id"]['daid'], 'nova' => '$$' . $user . '$', 'oculta' => 0, 'fitxer' => '', 'origen' => '', 'gCalendarEventId' => $event->id, 'protegida' => 0)); } else { $existing["$event->id"] = 1; $item = $gCalendarNotes["$event->id"]; if ($allDay) { $hour = 23; $minute = 59; } $data = mktime($hour, $minute, 0, $month, $day, $year); //check if item has changed. If it has changed it is updated if ($item['c1'] != $event->title || $item['data'] != $data || $item['c2'] != $end || $item['c3'] != $event->where[0]->valueString || $item['c4'] != $event->content) { $items = array('c1' => $event->title, 'c2' => $end, 'c3' => $event->where[0]->valueString, 'c4' => $event->content, 'data' => $data, 'totdia' => $allDay, 'origen' => $calendar->title, 'totdia' => $allDay); //modify of a simple entry $lid = ModUtil::apiFunc('IWagendas', 'user', 'editNote', array('aid' => $item['aid'], 'items' => $items, 'daid' => $item['daid'])); } //delete event from gCalendar if it were necessary if ($item['deleted'] == 1) { //delete of a simple entry try { $event->delete(); } catch (Zend_Gdata_App_Exception $e) { return $this->__('You are not allowed to administrate the agendas'); } } } } } } // Delete the calendars where user can't access any more $diff = array_diff_key($gIds, $existingCalendar); foreach ($diff as $d) { if ($resp == '$') { // Nobody else needs the calendar and it is deleted $sv = ModUtil::func('IWmain', 'user', 'genSecurityValue'); ModUtil::apiFunc('IWagendas', 'admin', 'delete', array('daid' => $d['daid'], 'sv' => $sv)); } else { // The user access to the calendar is deleted $items = array('gColor' => $newColorString, 'resp' => $resp, 'gAccessLevel' => $newAccessLevelString); $sv = ModUtil::func('IWmain', 'user', 'genSecurityValue'); ModUtil::apiFunc('IWagendas', 'admin', 'editAgenda', array('daid' => $d['daid'], 'items' => $items, 'sv' => $sv)); } } // set as deleted the not existing gCalendar notes $diff = array_diff_key($gCalendarNotes, $existing); foreach ($diff as $d) { if (strpos($gAgendas[$d['daid']]['gAccessLevel'], '$free|' . $user . '$') === false) { $items = array('deleted' => 1, 'protegida' => 0); $lid = ModUtil::apiFunc('IWagendas', 'user', 'editNote', array('aid' => $d['aid'], 'daid' => $d['daid'], 'items' => $items)); } } //save that the sincronization has been made $sv = ModUtil::func('IWmain', 'user', 'genSecurityValue'); ModUtil::func('IWmain', 'user', 'userSetVar', array('uid' => $user, 'name' => 'sincroGCalendar', 'module' => 'IWagendas', 'sv' => $sv, 'value' => '1', 'lifetime' => $userSettings['gRefreshTime'] * 60)); //get all notes from gCalendar that has been created without connexion and create them $notesNotInGCalendar = ModUtil::apiFunc('IWagendas', 'user', 'getAllGCalendarNotes', array('beginDate' => $beginDate, 'endDate' => $endDate, 'gIds' => $gIds, 'notInGCalendar' => 1)); foreach ($notesNotInGCalendar as $note) { $data = $note['data']; $data1 = $note['data1']; //Protect correct format for dateStart and dataEnd if ($data1 < $data) $data1 = $data; // Create a new entry using the calendar service's magic factory method $event = $gdataCal->newEventEntry(); // Populate the event with the desired information // Note that each attribute is crated as an instance of a matching class $event->title = $gdataCal->newTitle($note['c1']); $event->where = array($gdataCal->newWhere($note['c3'])); $event->content = $gdataCal->newContent($note['c4']); // Set the date using RFC 3339 format. $startDate = date('Y-m-d', $data); $endDate = date('Y-m-d', $data1); $when = $gdataCal->newWhen(); if ($note['totdia'] == 0) { $tzOffset = ($userSettings['tzOffset'] == '') ? '+02' : $userSettings['tzOffset']; //protect correct time format $startTime = date('H:i', $data); $endTime = date('H:i', $data1); $when->startTime = "{$startDate}T{$startTime}:00.000{$tzOffset}:00"; $when->endTime = "{$endDate}T{$endTime}:00.000{$tzOffset}:00"; } else { $when->startTime = "$startDate"; $when->endTime = "$endDate"; } $event->when = array($when); $calendarURL = str_replace(Zend_Gdata_Calendar::CALENDAR_FEED_URI . '/default/', "", $gAgendas[$note['daid']]['gCalendarId']); $calendarURL = 'http://www.google.com/calendar/feeds/' . $calendarURL . '/private/full'; // Upload the event to the calendar server // A copy of the event as it is recorded on the server is returned try { $newEvent = $gdataCal->insertEvent($event, $calendarURL); } catch (Zend_Gdata_App_Exception $e) { return $this->__('Error produced during gCalendar\'s event creation'); } $gCalendarEventId = $newEvent->id; // Edit note gCalendarEventId $items = array('gCalendarEventId' => $gCalendarEventId); //modify of a simple entry $lid = ModUtil::apiFunc('IWagendas', 'user', 'editNote', array('aid' => $note['aid'], 'items' => $items, 'daid' => $note['daid'])); } return true; }
/** * Creates a recurring event on the authenticated user's default calendar with * the specified event details. * * @param Zend_Http_Client $client The authenticated client object * @param string $title The event title * @param string $desc The detailed description of the event * @param string $recurData The iCalendar recurring event syntax (RFC2445) * @return void */ function createRecurringEvent(Zend_Http_Client $client, $title = 'Tennis with Beth', $desc = 'Meet for a quick lesson', $where = 'On the courts', $recurData = null) { $gc = new Zend_Gdata_Calendar($client); $newEntry = $gc->newEventEntry(); $newEntry->title = $gc->newTitle(trim($title)); $newEntry->where = array($gc->newWhere($where)); $newEntry->content = $gc->newContent($desc); $newEntry->content->type = 'text'; /** * Due to the length of this recurrence syntax, we did not specify * it as a default parameter value directly */ if ($recurData == null) { $recurData = "DTSTART;VALUE=DATE:20070501\r\n" . "DTEND;VALUE=DATE:20070502\r\n" . "RRULE:FREQ=WEEKLY;BYDAY=Tu;UNTIL=20070904\r\n"; } $newEntry->recurrence = $gc->newRecurrence($recurData); $gc->post($newEntry->saveXML()); }
function created_event_google_calendar($object, $event) { require_once 'Zend/Loader.php'; Zend_Loader::loadClass('Zend_Gdata'); Zend_Loader::loadClass('Zend_Gdata_AuthSub'); Zend_Loader::loadClass('Zend_Gdata_ClientLogin'); Zend_Loader::loadClass('Zend_Gdata_Calendar'); $users = ExternalCalendarUsers::findByContactId(); $calendar = ExternalCalendars::findById($event->getExtCalId()); $user = $users->getAuthUser(); $pass = $users->getAuthPass(); $service = Zend_Gdata_Calendar::AUTH_SERVICE_NAME; $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service); $calendarUrl = 'http://www.google.com/calendar/feeds/' . $calendar->getCalendarUser() . '/private/full'; $gdataCal = new Zend_Gdata_Calendar($client); $newEvent = $gdataCal->newEventEntry(); $newEvent->title = $gdataCal->newTitle($event->getObjectName()); $newEvent->content = $gdataCal->newContent($event->getDescription()); $star_time = explode(" ", $event->getStart()->format("Y-m-d H:i:s")); $end_time = explode(" ", $event->getDuration()->format("Y-m-d H:i:s")); if ($event->getTypeId() == 2) { $when = $gdataCal->newWhen(); $when->startTime = $star_time[0]; $when->endTime = $end_time[0]; $newEvent->when = array($when); } else { $when = $gdataCal->newWhen(); $when->startTime = $star_time[0] . "T" . $star_time[1] . ".000-00:00"; $when->endTime = $end_time[0] . "T" . $end_time[1] . ".000-00:00"; $newEvent->when = array($when); } // insert event $createdEvent = $gdataCal->insertEvent($newEvent, $calendarUrl); $event_id = explode("/", $createdEvent->id->text); $special_id = end($event_id); $event->setSpecialID($special_id); $event->setExtCalId($calendar->getId()); $event->save(); }
/** * Create a quick event from string input. * * Should include time (am/pm), day of the week. * * Day of the week can be specified as "tomorrow" * * Can specify week as well with "next tuesday" * * A day without a modifier will default to that current week, * even if the day has already past * * @param String $client - Access token * @param String $quickAddText - Event description */ function createQuickEvent($client, $quickAddText) { $gdataCal = new Zend_Gdata_Calendar($client); $event = $gdataCal->newEventEntry(); $event->content = $gdataCal->newContent($quickAddText); $event->quickAdd = $gdataCal->newQuickAdd('true'); $newEvent = $gdataCal->insertEvent($event); }
function export_google_calendar() { ajx_current("empty"); require_once 'Zend/Loader.php'; Zend_Loader::loadClass('Zend_Gdata'); Zend_Loader::loadClass('Zend_Gdata_AuthSub'); Zend_Loader::loadClass('Zend_Gdata_ClientLogin'); Zend_Loader::loadClass('Zend_Gdata_Calendar'); $users = ExternalCalendarUsers::findByContactId(); if($users){ if($users->getSync() == 1){ $sql = "SELECT ec.* FROM `".TABLE_PREFIX."external_calendars` ec,`".TABLE_PREFIX."external_calendar_users` ecu WHERE ec.calendar_feng = 1 AND ecu.contact_id = ".logged_user()->getId(); $calendar_feng = DB::executeOne($sql); $events = ProjectEvents::findNoSync(); $user = $users->getAuthUser(); $pass = $users->getAuthPass(); $service = Zend_Gdata_Calendar::AUTH_SERVICE_NAME; try { $client = Zend_Gdata_ClientLogin::getHttpClient($user,$pass,$service); $gdataCal = new Zend_Gdata_Calendar($client); if ($calendar_feng){ foreach ($events as $event){ $calendarUrl = 'http://www.google.com/calendar/feeds/'.$calendar_feng['calendar_user'].'/private/full'; $newEvent = $gdataCal->newEventEntry(); $newEvent->title = $gdataCal->newTitle($event->getObjectName()); $newEvent->content = $gdataCal->newContent($event->getDescription()); $star_time = explode(" ",$event->getStart()->format("Y-m-d H:i:s")); $end_time = explode(" ",$event->getDuration()->format("Y-m-d H:i:s")); if($event->getTypeId() == 2){ $when = $gdataCal->newWhen(); $when->startTime = $star_time[0]; $when->endTime = $end_time[0]; $newEvent->when = array($when); }else{ $when = $gdataCal->newWhen(); $when->startTime = $star_time[0]."T".$star_time[1].".000-00:00"; $when->endTime = $end_time[0]."T".$end_time[1].".000-00:00"; $newEvent->when = array($when); } // insert event $createdEvent = $gdataCal->insertEvent($newEvent, $calendarUrl); $event_id = explode("/",$createdEvent->id->text); $special_id = end($event_id); $event->setSpecialID($special_id); $event->setUpdateSync(ProjectEvents::date_google_to_sql($createdEvent->updated)); $event->setExtCalId($calendar_feng['id']); $event->save(); } }else{ $appCalUrl = ''; $calFeed = $gdataCal->getCalendarListFeed(); foreach ($calFeed as $calF){ $instalation = explode("/", ROOT_URL); $instalation_name = end($instalation); if($calF->title->text == lang('feng calendar',$instalation_name)){ $appCalUrl = $calF->content->src; $t_calendario = $calF->title->text; } } if($appCalUrl != ""){ $title_cal = $t_calendario; }else{ $instalation = explode("/", ROOT_URL); $instalation_name = end($instalation); $appCal = $gdataCal -> newListEntry(); $appCal -> title = $gdataCal-> newTitle(lang('feng calendar',$instalation_name)); $own_cal = "http://www.google.com/calendar/feeds/default/owncalendars/full"; $new_cal = $gdataCal->insertEvent($appCal, $own_cal); $title_cal = $new_cal->title->text; $appCalUrl = $new_cal->content->src; } $cal_src = explode("/",$appCalUrl); array_pop($cal_src); $calendar_visibility = end($cal_src); array_pop($cal_src); $calendar_user = end($cal_src); $calendar = new ExternalCalendar(); $calendar->setCalendarUser($calendar_user); $calendar->setCalendarVisibility($calendar_visibility); $calendar->setCalendarName($title_cal); $calendar->setExtCalUserId($users->getId()); $calendar->setCalendarFeng(1); $calendar->save(); foreach ($events as $event){ $calendarUrl = 'http://www.google.com/calendar/feeds/'.$calendar->getCalendarUser().'/private/full'; $newEvent = $gdataCal->newEventEntry(); $newEvent->title = $gdataCal->newTitle($event->getObjectName()); $newEvent->content = $gdataCal->newContent($event->getDescription()); $star_time = explode(" ",$event->getStart()->format("Y-m-d H:i:s")); $end_time = explode(" ",$event->getDuration()->format("Y-m-d H:i:s")); if($event->getTypeId() == 2){ $when = $gdataCal->newWhen(); $when->startTime = $star_time[0]; $when->endTime = $end_time[0]; $newEvent->when = array($when); }else{ $when = $gdataCal->newWhen(); $when->startTime = $star_time[0]."T".$star_time[1].".000-00:00"; $when->endTime = $end_time[0]."T".$end_time[1].".000-00:00"; $newEvent->when = array($when); } // insert event $createdEvent = $gdataCal->insertEvent($newEvent, $calendarUrl); $event_id = explode("/",$createdEvent->id->text); $special_id = end($event_id); $event->setSpecialID($special_id); $event->setUpdateSync(ProjectEvents::date_google_to_sql($createdEvent->updated)); $event->setExtCalId($calendar->getId()); $event->save(); } } flash_success(lang('success add sync')); ajx_current("reload"); } catch(Exception $e) { Logger::log($e->getMessage()); flash_error(lang('could not connect to calendar')); ajx_current("empty"); } } } }
/** * Do the plugin action * * @param array &$data selected data * @param object &$listModel list model * * @return number of records updated */ public function process(&$data, &$listModel) { $params = $this->getParams(); $gcal_url = $params->get('gcal_sync_gcal_url'); $matches = array(); /* This matches a standard GCal URL, found under the Google "Calender Details" tab, using the XML button. * It should match any form, for public or private ... * http://www.google.com/calendar/feeds/hugh.messenger%40gmail.com/public/basic * http://www.google.com/calendar/feeds/hugh.messenger%40gmail.com/private-3081eca2b0asdfasdf8f106ea6f63343056/basic */ if (preg_match('#feeds/(.*?)/(\\w+-\\w+|\\w+)/(\\w+)#', $gcal_url, $matches)) { // Grab the bits of the URL we need for the Zend framework call $gcal_user = $matches[1]; $gcal_visibility = $matches[2]; $gcal_projection = $matches[3]; $gcal_email = urldecode($gcal_user); // Grab the table model and find table name and PK $table = $listModel->getTable(); $table_name = $table->db_table_name; /* For now, we have to read the table ourselves. We can't rely on the $data passed to us * because it can be filtered, and we need to see all records to know if the GCal events * already exist in the table */ $mydata = array(); $db = FabrikWorker::getDbo(); $query = $db->getQuery(true); $query->select('*')->from($table_name); $db->setQuery($query); $mydata[0] = $db->loadObjectList(); // Grab all the field names to use $gcal_label_element_long = $params->get('gcal_sync_label_element'); $gcal_label_element = FabrikString::shortColName($gcal_label_element_long); $gcal_desc_element_long = $params->get('gcal_sync_desc_element'); $gcal_desc_element = FabrikString::shortColName($gcal_desc_element_long); $gcal_start_date_element_long = $params->get('gcal_sync_startdate_element'); $gcal_start_date_element = FabrikString::shortColName($gcal_start_date_element_long); $gcal_end_date_element_long = $params->get('gcal_sync_enddate_element'); $gcal_end_date_element = FabrikString::shortColName($gcal_end_date_element_long); $gcal_id_element_long = $params->get('gcal_sync_id_element'); $gcal_id_element = FabrikString::shortColName($gcal_id_element_long); $gcal_userid_element_long = $params->get('gcal_sync_userid_element'); $gcal_userid_element = FabrikString::shortColName($gcal_userid_element_long); // Sanity check, make sure required elements have been specified if (empty($gcal_label_element_long) || empty($gcal_start_date_element_long) || empty($gcal_end_date_element_long) || empty($gcal_id_element_long)) { return; } // If they selected a User ID element to use, see if we can find a J! user with matching email to this feed's owner $our_userid = 0; if ($gcal_userid_element_long) { $query = $db->getQuery(true); $query->select('id')->from('#__users')->whre('email = ' . $db->quote('$gcal_email')); $db->setQuery($query); $our_userid = $db->loadResult(); // Better make sure it's not NULL, in case underlying column is NOT NULL if (empty($our_userid)) { $our_userid = 0; } } // Include the Zend stuff $path = JPATH_SITE . '/libraries'; set_include_path(get_include_path() . PATH_SEPARATOR . $path); $path = get_include_path(); require_once 'Zend/Loader.php'; Zend_Loader::loadClass('Zend_Gdata'); /* Won't need these loaded until we add sync'ing events back to Google * Zend_Loader::loadClass('Zend_Gdata_AuthSub'); * Zend_Loader::loadClass('Zend_Gdata_ClientLogin'); */ Zend_Loader::loadClass('Zend_Gdata_Calendar'); // See if they want to sync to gcal, and provided a login $gcal_sync_upload = $params->get('gcal_sync_upload_events', 'from'); if ($gcal_sync_upload == 'both' || $gcal_sync_upload == 'to') { Zend_Loader::loadClass('Zend_Gdata_ClientLogin'); $email = $params->get('gcal_sync_login', ''); $passwd = $params->get('gcal_sync_passwd', ''); try { $client = Zend_Gdata_ClientLogin::getHttpClient($email, $passwd, 'cl'); } catch (Zend_Gdata_App_CaptchaRequiredException $cre) { echo 'URL of CAPTCHA image: ' . $cre->getCaptchaUrl() . "\n"; echo 'Token ID: ' . $cre->getCaptchaToken() . "\n"; return; } catch (Zend_Gdata_App_AuthException $ae) { echo 'Problem authenticating: ' . $ae->exception() . "\n"; return; } $gdataCal = new Zend_Gdata_Calendar($client); } else { $gdataCal = new Zend_Gdata_Calendar(); } // Set up and execute the call to grab the feed from google $query = $gdataCal->newEventQuery(); $query->setUser($gcal_user); $query->setVisibility($gcal_visibility); $query->setProjection($gcal_projection); $eventFeed = $gdataCal->getCalendarEventFeed($query); // Build an array of the events from the feed, indexed by the Google ID $event_ids = array(); foreach ($eventFeed as $key => $event) { $short_id = $this->_getGcalShortId($event->id->text); $gcal_event_ids[$short_id] = $eventFeed[$key]; } /* Run through our table data, and build an array of our events indexed by the Google ID * (of course not all events may have a Google ID) */ $our_event_ids = array(); $our_upload_ids = array(); foreach ($mydata as $gkey => $group) { if (is_array($group)) { foreach ($group as $rkey => $row) { if ($row->{$gcal_id_element}) { $our_event_ids[$row->{$gcal_id_element}] = $mydata[$gkey][$rkey]; } else { $our_upload_ids[] = $mydata[$gkey][$rkey]; } } } } // Now go through the google events id's, and process the ones which aren't in our table. $our_event_adds = array(); foreach ($gcal_event_ids as $id => $event) { if (!array_key_exists($id, $our_event_ids)) { // we don't have the ID, so add the event to our table $row = array(); $row[$gcal_start_date_element] = strftime('%Y-%m-%d %H:%M:%S', strtotime($event->when[0]->startTime)); $row[$gcal_end_date_element] = strftime('%Y-%m-%d %H:%M:%S', strtotime($event->when[0]->endTime)); $row[$gcal_label_element] = $event->title->text; $row[$gcal_desc_element] = $event->content->text; $row[$gcal_id_element] = $id; if ($gcal_userid_element_long) { $row[$gcal_userid_element] = $our_userid; } $listModel->storeRow($row, 0); } } // If upload syncing (from us to gcal) is enabled ... if ($gcal_sync_upload == 'both' || $gcal_sync_upload == 'to') { // Grab the tzOffset. Note that gcal want +/-XX (like -06) // but J! gives us +/-X (like -6) so we sprintf it to the right format $config = JFactory::getConfig(); $tzOffset = (int) $config->getValue('config.offset'); $tzOffset = sprintf('%+03d', $tzOffset); // Loop thru the array we built earlier of events we have that aren't in gcal foreach ($our_upload_ids as $id => $event) { // Skip if a userid element is specified, and doesn't match the owner of this gcal if ($gcal_userid_element_long) { if ($event->{$gcal_userid_element} != $our_userid) { continue; } } // Now start building the gcal event structure $newEvent = $gdataCal->newEventEntry(); $newEvent->title = $gdataCal->newTitle($event->{$gcal_label_element}); if ($gcal_desc_element_long) { $newEvent->content = $gdataCal->newContent($event->{$gcal_desc_element}); } else { $newEvent->content = $gdataCal->newContent($event->{$gcal_label_element}); } $when = $gdataCal->newWhen(); // Grab the start date, apply the tx offset, and format it for gcal $start_date = JFactory::getDate($event->{$gcal_start_date_element}); $start_date->setOffset($tzOffset); $start_fdate = $start_date->toFormat('%Y-%m-%d %H:%M:%S'); $date_array = explode(' ', $start_fdate); $when->startTime = "{$date_array[0]}T{$date_array[1]}.000{$tzOffset}:00"; /* We have to provide an end date for gcal, so if we don't have one, * default it to start date + 1 hour */ if ($event->{$gcal_end_date_element} == '0000-00-00 00:00:00') { $startstamp = strtotime($event->{$gcal_start_date_element}); $endstamp = $startstamp + 60 * 60; $event->{$gcal_end_date_element} = strftime('%Y-%m-%d %H:%M:%S', $endstamp); } // Grab the end date, apply the tx offset, and format it for gcal $end_date = JFactory::getDate($event->{$gcal_end_date_element}); $end_date->setOffset($tzOffset); $end_fdate = $end_date->toFormat('%Y-%m-%d %H:%M:%S'); $date_array = explode(' ', $end_fdate); $when->endTime = "{$date_array[0]}T{$date_array[1]}.000{$tzOffset}:00"; $newEvent->when = array($when); // Fire off the insertEvent to gcal, catch any errors try { $retEvent = $gdataCal->insertEvent($newEvent); } catch (Zend_Gdata_App_HttpException $he) { $errStr = 'Problem adding event: ' . $he->getRawResponseBody() . "\n"; continue; } /* So, insertEvent worked, grab the gcal ID from the returned event data, * and update our event record with the short version of the ID */ $gcal_id = $this->_getGcalShortId($retEvent->id->text); $our_id = $event->id; $query = $db->getQuery(true); $query->update($table_name)->set($gcal_id_element . ' = ' . $db->quote($gcal_id))->where('id = ' . $db->quote($our_id)); $db->setQuery($query); $db->query(); } } } }
$user = query("SELECT * FROM users WHERE id=?", $member["userID"]); $user = $user[0]; $mail->AddAddress($user["number"]); // Where to send it // send mail if ($mail->Send() == false) { die($mail->ErrInfo); } } } } //$maxPrivacy = query("SELECT MAX(level) FROM privacy")[0]["MAX(level)"]; $maxPrivacy = $_POST["privacy"]; for ($privacy = $_POST["privacy"]; $privacy <= $maxPrivacy; $privacy++) { $gc = new Zend_Gdata_Calendar($_SESSION["client"]); $newEntry = $gc->newEventEntry(); $newEntry->title = $gc->newTitle($_POST["name"]); $newEntry->where = array($gc->newWhere($_POST["location"])); $newEntry->content = $gc->newContent($_POST["info"]); $newEntry->content->type = 'text'; $when = $gc->newWhen(); $calStartDate = date('c', strtotime($startDatetime)); $calEndDate = date('c', strtotime($endDatetime)); $when->startTime = $calStartDate; $when->endTime = $calEndDate; $newEntry->when = array($when); $url = query("SELECT link FROM calendarLinks WHERE id = ?", $_POST["club"] . "." . $privacy); $url = $url[0]["link"]; $createdEntry = $gc->insertEvent($newEntry, $url); } //redirect to home page
function createEvent($client, $title, $desc, $where, $startDate, $startTime, $endDate, $endTime, $tzOffset) { $gdataCal = new Zend_Gdata_Calendar($client); $newEvent = $gdataCal->newEventEntry(); $newEvent->title = $gdataCal->newTitle($title); $newEvent->where = array($gdataCal->newWhere($where)); $newEvent->content = $gdataCal->newContent("{$desc}"); $when = $gdataCal->newWhen(); $when->startTime = "{$startDate}T{$startTime}:00.000{$tzOffset}:00"; $when->endTime = "{$endDate}T{$endTime}:00.000{$tzOffset}:00"; $newEvent->when = array($when); $createdEvent = $gdataCal->insertEvent($newEvent); return $createdEvent->id->text; }
/** * Tarsform Vtiger Records to Google Records * @param <array> $vtEvents * @return <array> tranformed vtiger Records */ public function transformToTargetRecord($vtEvents) { $records = array(); foreach ($vtEvents as $vtEvent) { $gcalendar = new Zend_Gdata_Calendar($this->apiInstance); if ($vtEvent->getMode() == WSAPP_SyncRecordModel::WSAPP_UPDATE_MODE || $vtEvent->getMode() == WSAPP_SyncRecordModel::WSAPP_DELETE_MODE) { try { $newEntry = $gcalendar->getCalendarEventEntry($vtEvent->get('_id')); } catch (Exception $e) { continue; } } else { $newEntry = $gcalendar->newEventEntry(); } $newEntry->title = $gcalendar->newTitle($vtEvent->get('subject')); $newEntry->where = array($gcalendar->newWhere($vtEvent->get('location'))); $newEntry->content = $gcalendar->newContent($vtEvent->get('description')); $newEntry->content->type = 'text'; $oldtz = date_default_timezone_get(); date_default_timezone_set('GMT'); $startDate = $vtEvent->get('date_start'); $startTime = $vtEvent->get('time_start'); $endDate = $vtEvent->get('due_date'); $endTime = $vtEvent->get('time_end'); if (empty($endTime)) { $endTime = "00:00"; } $when = $gcalendar->newWhen(); $when->startTime = date('c', strtotime("{$startDate} {$startTime}")); if (!empty($endDate)) { $when->endTime = date('c', strtotime("{$endDate} {$endTime}")); } date_default_timezone_set($oldtz); $newEntry->when = array($when); $recordModel = Google_Calendar_Model::getInstanceFromValues(array('entity' => $newEntry)); $recordModel->setType($this->getSynchronizeController()->getSourceType())->setMode($vtEvent->getMode())->setSyncIdentificationKey($vtEvent->get('_syncidentificationkey')); $recordModel = $this->performBasicTransformations($vtEvent, $recordModel); $recordModel = $this->performBasicTransformationsToTargetRecords($recordModel, $vtEvent); $records[] = $recordModel; } return $records; }
/** * Creates an event on the authenticated users default calendar with the * specified event details. * * @return string The id URL for the event. */ public function createEvent(TA_Model_Resource_Db_Table_Row_Abstract $values) { $values = $this->_modifyValues($values); $gc = new Zend_Gdata_Calendar($this->_client); $newEntry = $gc->newEventEntry(); // set event properties $newEntry->title = $gc->newTitle(trim($values['title'])); $newEntry->where = array($gc->newWhere($values['location'])); $newEntry->content = $gc->newContent($values['description']); $newEntry->content->type = 'text'; $when = $gc->newWhen(); $start = date_create($values['start']); $end = date_create($values['end']); $when->startTime = date_format($start, 'Y-m-d\\TH:i:s.000P'); $when->endTime = date_format($end, 'Y-m-d\\TH:i:s.000P'); $newEntry->when = array($when); $createdEntry = $gc->insertEvent($newEntry); return $createdEntry->id->text; }
public function addEvent($recordid, $Data, $tzOffset) { set_include_path($this->root_directory . "modules/Calendar4You/"); $startDate = $Data["date_start"]; $endDate = $Data["due_date"]; $startTime = $Data["time_start"]; $endTime = $Data["time_end"]; $GCalClass = new Zend_Gdata_Calendar($this->gClient); $newEntry = $GCalClass->newEventEntry(); $newEntry->title = $GCalClass->newTitle(trim($Data["subject"])); $newEntry->where = array($GCalClass->newWhere(trim($Data["location"]))); $newEntry->content = $GCalClass->newContent($Data["description"]); $newEntry->content->type = 'text'; $when = $GCalClass->newWhen(); $when->startTime = $startDate . 'T' . $this->removeLastColon($startTime) . ':00.000' . $tzOffset; $when->endTime = $endDate . 'T' . $this->removeLastColon($endTime) . ':00.000' . $tzOffset; $newEntry->when = array($when); $SendEventNotifications = new Zend_Gdata_Calendar_Extension_SendEventNotifications(); $SendEventNotifications->setValue(true); $newEntry->SendEventNotifications = $SendEventNotifications; $whos = $this->getInvitedUsersEmails($GCalClass, $recordid); if (count($whos) > 0) { $newEntry->setWho($whos); } $appCallUri = ""; foreach ($this->gListFeed as $calendar) { if ($calendar->id == $this->selected_calendar) { $appCallUri = $calendar->content->src; } } $createdEntry = $GCalClass->insertEvent($newEntry, $appCallUri); set_include_path($this->root_directory); $eventid = urldecode($createdEntry->id->text); return $eventid; }
function send_sms($param_google_username, $param_google_password, $param_title, $param_content) { /** * @Include Zend_Loader */ require_once 'Zend/Loader.php'; /** * @Load Zend_Gdata */ Zend_Loader::loadClass('Zend_Gdata'); /** * @Load Zend_Gdata_AuthSub */ Zend_Loader::loadClass('Zend_Gdata_AuthSub'); /** * @Load Zend_Gdata_ClientLogin */ Zend_Loader::loadClass('Zend_Gdata_ClientLogin'); /** * @Load Zend_Gdata_HttpClient */ Zend_Loader::loadClass('Zend_Gdata_HttpClient'); /** * @Load Zend_Gdata_Calendar */ Zend_Loader::loadClass('Zend_Gdata_Calendar'); // Parameters for ClientAuth authentication $service = Zend_Gdata_Calendar::AUTH_SERVICE_NAME; $user = $param_google_username; $pass = $param_google_password; // Create an authenticated HTTP client $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service); // Create an instance of the Calendar service $service = new Zend_Gdata_Calendar($client); // Create a new entry using the calendar service's magic factory method $event = $service->newEventEntry(); // Populate the event with the desired information // Note that each attribute is crated as an instance of a matching class $event->title = $service->newTitle($param_title); //$event->where = array($service->newWhere("Mountain View, California")); $event->content = $service->newContent($param_content); // Set the date using RFC 3339 format. $startDate = date("Y-m-d"); //"2009-01-15"; $startTime = date("H:i", strtotime("+3 minutes")); $endDate = date("Y-m-d"); $endTime = date("H:i", strtotime("+6 minutes")); $tzOffset = "+08"; $when = $service->newWhen(); $when->startTime = "{$startDate}T{$startTime}:00.000{$tzOffset}:00"; $when->endTime = "{$endDate}T{$endTime}:00.000{$tzOffset}:00"; // Create a new reminder object. It should be set to send an email // to the user 10 minutes beforehand. $reminder = $service->newReminder(); $reminder->method = "sms"; $reminder->minutes = "2"; $when->reminders = array($reminder); $event->when = array($when); // Upload the event to the calendar server // A copy of the event as it is recorded on the server is returned if ($newEvent = $service->insertEvent($event)) { return true; } else { return false; } }