repositório com os arquivos utilizados para integração entre o sistema SimplesIP e diversos sistemas.
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

<?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);
}
}