forked from Claudio/integracao
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
172 lines
6.2 KiB
172 lines
6.2 KiB
<?php |
|
|
|
require __DIR__ . '/vendor/autoload.php'; |
|
|
|
/** |
|
* DESCRICAO DO DESENVOLVEDOR |
|
* |
|
* @author Lucas Awade |
|
* @function developer |
|
* @company SimplesIP |
|
* @version 1.0.0 |
|
*/ |
|
class GoogleCalendar { |
|
|
|
private $client; |
|
private $calendar; |
|
|
|
const CONF_ID_CALENDAR = 'primary'; |
|
const CONF_PATH_CREDENTIALS = 'credentials.json'; |
|
const CONF_PATH_TOKEN = 'token.json'; |
|
|
|
/** |
|
* Cria um novo evento na agenda retornando informacoes do link do Google Meet. |
|
* @param string $sumary |
|
* @param string $description |
|
* @param timestamp $dataIni |
|
* @param timestamp $dataFim |
|
* @param array $mails -> array('email' => 'simples@simplesip.com.br') |
|
*/ |
|
public function createEventCalendar($sumary, $description, $dataIni, $dataFim, $mails) { |
|
$calendar = new Google_Service_Calendar($this->client); |
|
$event = new Google_Service_Calendar_Event(array( |
|
'summary' => $sumary, |
|
'location' => 'Av. Isaac Povoas, 901 - 102 - Centro', |
|
'description' => $description, |
|
'start' => array( |
|
'dateTime' => $dataIni, |
|
'timeZone' => 'America/Sao_Paulo', |
|
), |
|
'end' => array( |
|
'dateTime' => $dataFim, |
|
'timeZone' => 'America/Sao_Paulo', |
|
), |
|
"conferenceData" => array( |
|
"createRequest" => array( |
|
"conferenceId" => array( |
|
"type" => "Meet com a Simples IP" |
|
), |
|
"requestId" => "123" |
|
) |
|
), |
|
'recurrence' => array( |
|
'RRULE:FREQ=DAILY;COUNT=1' |
|
), |
|
'attendees' => $mails, |
|
'reminders' => array( |
|
'useDefault' => FALSE, |
|
'overrides' => array( |
|
array('method' => 'email', 'minutes' => 24 * 60), |
|
array('method' => 'popup', 'minutes' => 10), |
|
), |
|
), |
|
)); |
|
|
|
$ev = $calendar->events->insert(self::CONF_ID_CALENDAR, $event, array('conferenceDataVersion' => 1, "sendNotifications" => true)); |
|
return $ev->getHangoutLink(); |
|
} |
|
|
|
public function getEventList() { |
|
$calendar = new Google_Service_Calendar($this->client); |
|
$optParams = array( |
|
'maxResults' => 10, |
|
'orderBy' => 'startTime', |
|
'singleEvents' => true, |
|
'timeMin' => date('c'), |
|
); |
|
|
|
$results = $this->calendar->events->listEvents(self::CONF_ID_CALENDAR, $optParams); |
|
return $results->getItems(); |
|
} |
|
|
|
/** |
|
* Cria o arquivo JSON com as credenciais de acesso passadas no parametro. |
|
* @param type $jsonToken |
|
* @return boolean |
|
*/ |
|
public function setFileCredentials($jsonToken) { |
|
if (!file_exists(__DIR__ . "/" . self::CONF_PATH_CREDENTIALS)) { |
|
return file_put_contents(__DIR__ . "/" . self::CONF_PATH_CREDENTIALS, $jsonToken); |
|
} else if (file_exists(__DIR__ . "/" . self::CONF_PATH_CREDENTIALS)) { |
|
return true; |
|
} |
|
return false; |
|
} |
|
|
|
/** |
|
* Gera a URL para buscar o token de acesso. Apos a chamada deve ser chamado o setUrlToken. |
|
* @return type |
|
*/ |
|
public function getUrlToken() { |
|
$authUrl = $this->client->createAuthUrl(); |
|
return $authUrl; |
|
} |
|
|
|
/** |
|
* Verifica se a credentials esta com arquivo criado. |
|
* @return boolean |
|
*/ |
|
public function verifyFileCredentials() { |
|
if (file_exists(__DIR__ . '/' . self::CONF_PATH_CREDENTIALS)) { |
|
return true; |
|
} |
|
return false; |
|
} |
|
|
|
/** |
|
* Recebe o token recebido na URL. |
|
* @param type $token |
|
* @throws Exception |
|
*/ |
|
public function setUrlToken($token) { |
|
$accessToken = $this->client->fetchAccessTokenWithAuthCode($token); |
|
$this->client->setAccessToken($accessToken); |
|
|
|
if (array_key_exists('error', $accessToken)) { |
|
throw new Exception(join(', ', $accessToken)); |
|
} |
|
|
|
if (!file_exists(dirname(__DIR__ . "/" . self::CONF_PATH_TOKEN))) { |
|
mkdir(dirname(__DIR__ . "/" . self::CONF_PATH_TOKEN), 0700, true); |
|
} |
|
file_put_contents(__DIR__ . "/" . self::CONF_PATH_TOKEN, json_encode($this->client->getAccessToken())); |
|
return true; |
|
} |
|
|
|
/** |
|
* Instancia a classe GoogleClient |
|
*/ |
|
public function getClient() { |
|
$this->client = new Google_Client(); |
|
$this->client->setApplicationName('Google Calendar API PHP Quickstart'); |
|
$this->client->setScopes(array( |
|
Google_Service_Calendar::CALENDAR, |
|
Google_Service_Calendar::CALENDAR_EVENTS, |
|
Google_Service_Calendar::CALENDAR_EVENTS_READONLY, |
|
Google_Service_Calendar::CALENDAR_SETTINGS_READONLY |
|
)); |
|
$this->client->setAuthConfig(__DIR__ . "/" . self::CONF_PATH_CREDENTIALS); |
|
$this->client->setAccessType('offline'); |
|
$this->client->setPrompt('select_account consent'); |
|
|
|
if (file_exists(__DIR__ . "/" . self::CONF_PATH_TOKEN)) { |
|
$accessToken = json_decode(file_get_contents(__DIR__ . "/" . self::CONF_PATH_TOKEN), true); |
|
$this->client->setAccessToken($accessToken); |
|
} |
|
|
|
if ($this->client->isAccessTokenExpired()) { |
|
if ($this->client->getRefreshToken()) { |
|
$this->client->fetchAccessTokenWithRefreshToken($this->client->getRefreshToken()); |
|
} else { |
|
return false; |
|
} |
|
} |
|
return true; |
|
} |
|
|
|
public function getCalendar() { |
|
$this->calendar = new Google_Service_Calendar($this->client); |
|
} |
|
|
|
} |
|
|