Skip to content
This repository has been archived by the owner on Oct 30, 2021. It is now read-only.

Commit

Permalink
Merge branch 'release/planning_sync_CLI_1.0' into main
Browse files Browse the repository at this point in the history
  • Loading branch information
Nouuu committed Dec 12, 2020
2 parents a783bef + 5d49324 commit 1018194
Show file tree
Hide file tree
Showing 5 changed files with 145 additions and 104 deletions.
8 changes: 5 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,13 @@ Version php utilisé : 7.4
* `calendar_api_application_name` [Nom de l'API google calendar](#api-google)
* `calendar_api_auth_config_file` [Nom du fichiers d'authentification à l'API google calendar.](#api-google)
* `calendar_id`[ Id du calendrier google](#calendrier-google) (ex: vf2kq9ary690m8iee8ahv3e3d0@group.calendar.google.com)
* `max_batch_request` Nombre maximum d'évènement dans une seule requête pour l'api (ne pas depasser 50 !)
## Lancement
Une fois le fichier `env.php` rempli, lancez (avec linux ou phpstorm de préférence, **evitez git bash !**) la commande : `php index.php`.
Une fois le fichier `env.php` rempli, lancez (avec linux ou phpstorm de préférence, **evitez git bash !**) la commande : `php run.php`.
Le programme vous demandera le nombre de jours à synchroniser à partir d'aujourd'hui.
Le programme vous demandera le nombre de jours à synchroniser à partir d'aujourd'hui.
Vous pouvez également indiquer le nombre de jours voulu directement depuis la ligne de commande de cette manière : `php run.php 7`
![image](https://i.imgur.com/qojtmG6.png)
Expand Down
4 changes: 2 additions & 2 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@
],
"require": {
"tchenu/myges": "dev-master",
"google/apiclient": "^2.7",
"ext-json": "*",
"ext-ctype": "*"
"ext-ctype": "*",
"google/apiclient": "^v2.8.3"
}
}
6 changes: 5 additions & 1 deletion env.php.example
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,8 @@ define("calendar_api_auth_config_file", "");
/**
* Google calendar id (ex : vf2kq9ary690m8iee8ahv3e3d0@group.calendar.google.com)
*/
define("calendar_id", "");
define("calendar_id", "");
/**
* Max batch request (don't set above 50)
*/
define('max_batch_request', 45);
130 changes: 82 additions & 48 deletions functions.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
require_once __DIR__ . '/models/Course.php';
require_once __DIR__ . '/models/Room.php';


function getMe(): Me
{
return new Me(getClient());
Expand All @@ -22,7 +23,7 @@ function getClient(): Client
}
}

function getAgenda(int $days = 7, Me $me): array
function getAgenda(Me $me, int $days = 7): array
{
return $me->getAgenda(getDateStart()->getTimestamp() * 1000, getDateEnd($days)->getTimestamp() * 1000);
}
Expand All @@ -37,7 +38,7 @@ function getDateStart(): DateTime
function getDateEnd(int $days): DateTime
{
$end = new DateTime();
date_add($end, date_interval_create_from_date_string($days . ' days'));
$end->add(date_interval_create_from_date_string($days . ' days'));
$end->setTime(23, 59, 59);
return $end;
}
Expand Down Expand Up @@ -104,12 +105,12 @@ function getCourseResume(Course $course): string

$start = new DateTime();
$start->setTimestamp($course->start_date / 1000);
$start->add(date_interval_create_from_date_string("2 hours"));
$start->add(date_interval_create_from_date_string("1 hours"));
$str .= ", Debut : " . $start->format("d-m-Y à H:i");

$end = new DateTime();
$end->setTimestamp($course->end_date / 1000);
$end->add(date_interval_create_from_date_string("2 hours"));
$end->add(date_interval_create_from_date_string("1 hours"));
$str .= ", Fin : " . $end->format("d-m-Y à H:i");

if (!empty($course->rooms)) {
Expand Down Expand Up @@ -173,7 +174,7 @@ function getCalendarClient(): Google_Client
return $client;
}

function getEvent(Google_Client $client, $days = 7)
function getEvent(Google_Client $client, $days = 7): Google_Service_Calendar_Events
{
$service = new Google_Service_Calendar($client);

Expand All @@ -186,19 +187,6 @@ function getEvent(Google_Client $client, $days = 7)
);

return $service->events->listEvents(calendar_id, $optParams);

/*if (empty($events)) {
print "No upcoming events found.\n";
} else {
print "Upcoming events:\n";
foreach ($events as $event) {
$start = $event->start->dateTime;
if (empty($start)) {
$start = $event->start->date;
}
printf("%s - %s - (%s)\n", $event->getSummary(), $event->getDescription(), $start);
}
}*/
}

function removeEvents(Google_Client $client, $events)
Expand All @@ -208,14 +196,6 @@ function removeEvents(Google_Client $client, $events)
foreach ($events as $event) {
$service->events->delete(calendar_id, $event->getId());
}

/* foreach ($events as $event) {
$start = $event->start->dateTime;
if (empty($start)) {
$start = $event->start->date;
}
printf("%s - %s - (%s)\n", $event->getSummary(), $event->getLocation(), $start);
}*/
}

function getDateTimeForEvent($msTimestamp): string
Expand All @@ -233,39 +213,93 @@ function addEvents(Google_Client $client, array $agenda)
foreach ($agenda as $course) {
$course = Course::fromObject($course);
printf("Ajout du cours :%s%s" . PHP_EOL, PHP_EOL, getCourseResume($course));
$event = createGoogleEvent($course);

$event = new Google_Service_Calendar_Event();
$event->setSummary($course->name);
//TODO set location and color
// $event->setLocation()

$description = "";
$service->events->insert($calendarId, $event);
}
}

if (!empty($course->teacher) && strlen($course->teacher) > 1) {
$description .= "<span>Intervenant : " . $course->teacher . "</span><br>";
function batchAddEvents(Google_Client $client, array $agenda)
{
$client->setUseBatch(true);
$service = new Google_Service_Calendar($client);
$batch_client = $service->createBatch();
$count = 0;
foreach ($agenda as $course) {
$course = Course::fromObject($course);
printf("Ajout du cours :%s%s" . PHP_EOL, PHP_EOL, getCourseResume($course));
$event = createGoogleEvent($course);

$request = $service->events->insert(calendar_id, $event);
$count++;
$batch_client->add($request);
if ($count >= max_batch_request) {
//don't set more than 50
$batch_client->execute();
$batch_client = $service->createBatch();
$count = 0;
}
}
$batch_client->execute();
$client->setUseBatch(false);
}

if (!empty($course->rooms)) {
$description .= "<span>Salle(s) :<ul>";
function batchRemoveEvents(Google_Client $client, Google_Service_Calendar_Events $events)
{
$client->setUseBatch(true);
$service = new Google_Service_Calendar($client);
$batch_client = $service->createBatch();
$count = 0;

foreach ($course->rooms as $room) {
$description .= "<li>" . $room->campus . " - " . $room->name . "</li>";
}
$description .= "</ul></span>";
foreach ($events as $event) {
$count++;
$request = $service->events->delete(calendar_id, $event->getId());
$batch_client->add($request);

if ($count >= max_batch_request) {
//don't set more than 50
$batch_client->execute();
$batch_client = $service->createBatch();
$count = 0;
}

$event->setDescription($description);
}
$batch_client->execute();
$client->setUseBatch(false);
}

$start = new Google_Service_Calendar_EventDateTime();
$start->setDateTime(getDateTimeForEvent($course->start_date));
$event->setStart($start);
function createGoogleEvent(Course $course): Google_Service_Calendar_Event
{
$event = new Google_Service_Calendar_Event();
$event->setSummary($course->name);
//TODO set location and color
// $event->setLocation()

$end = new Google_Service_Calendar_EventDateTime();
$end->setDateTime(getDateTimeForEvent($course->end_date));
$event->setEnd($end);
$description = "";

$service->events->insert($calendarId, $event);
if (!empty($course->teacher) && strlen($course->teacher) > 1) {
$description .= "<span>Intervenant : " . $course->teacher . "</span><br>";
}

if (!empty($course->rooms)) {
$description .= "<span>Salle(s) :<ul>";

foreach ($course->rooms as $room) {
$description .= "<li>" . $room->campus . " - " . $room->name . "</li>";
}
$description .= "</ul></span>";
}

$event->setDescription($description);

$start = new Google_Service_Calendar_EventDateTime();
$start->setDateTime(getDateTimeForEvent($course->start_date));
$event->setStart($start);

$end = new Google_Service_Calendar_EventDateTime();
$end->setDateTime(getDateTimeForEvent($course->end_date));
$event->setEnd($end);
return $event;
}

function printDivider()
Expand Down
101 changes: 51 additions & 50 deletions index.php → run.php
Original file line number Diff line number Diff line change
@@ -1,51 +1,52 @@
<?php

require_once __DIR__ . '/vendor/autoload.php';
require_once __DIR__ . '/env.php';
require_once __DIR__ . '/functions.php';

print("MYGES CALENDAR SYNC (by Nospy)" . PHP_EOL);
printDivider();

print "Entrez le nombre de jours que vous souhaitez synchroniser à partir d'aujourd'hui : ";
$days = trim(fgets(STDIN));
if (!ctype_digit($days)) {
die;
}

printDivider();
print "Connexion à myges..." . PHP_EOL;
$me = getMe();
print "Connecté !" . PHP_EOL;

printDivider();
printf("Récupération des cours sur %d jours..." . PHP_EOL, $days);
$agenda = getAgenda($days, $me);
printf("Réussi ! %d cours trouvés" . PHP_EOL, sizeof($agenda));

print "Traitement des doublons..." . PHP_EOL;
$agenda = removeDuplicate($agenda);
printf("Réussi : %d cours uniques" . PHP_EOL, sizeof($agenda));

printDivider();
print "Connexion à l'API google..." . PHP_EOL;
$client = getCalendarClient();
print "Connecté !" . PHP_EOL;

printDivider();
printf("Récupération de la liste des cours présent sur le calendrier google sur %d jours..." . PHP_EOL, $days);
$events = getEvent($client, $days);
printf("Réussi ! %d cours trouvés" . PHP_EOL, sizeof($events));

printDivider();
print "Nettoyage des cours sur le calendrier google..." . PHP_EOL;
removeEvents($client, $events);
print "Les cours ont été supprimés de l'agenda google!" . PHP_EOL;

printDivider();
print "Ajout des cours sur le calendrier google..." . PHP_EOL;
addEvents($client, $agenda);
printDivider();
print "Les cours ont été ajoutés!" . PHP_EOL;

<?php

require_once __DIR__ . '/vendor/autoload.php';
require_once __DIR__ . '/env.php';
require_once __DIR__ . '/functions.php';

print("MYGES CALENDAR SYNC (by Nospy)" . PHP_EOL);
printDivider();

$days = $argv[1];

while (!ctype_digit($days) && $days >= 0) {
print "Entrez le nombre de jours que vous souhaitez synchroniser à partir d'aujourd'hui : ";
$days = trim(fgets(STDIN));
}

printDivider();
print "Connexion à MyGES..." . PHP_EOL;
$me = getMe();
print "Connecté !" . PHP_EOL;

printDivider();
printf("Récupération des cours sur %d jours..." . PHP_EOL, $days);
$agenda = getAgenda($me, $days);
printf("Réussi ! %d cours trouvés" . PHP_EOL, sizeof($agenda));

print "Traitement des doublons..." . PHP_EOL;
$agenda = removeDuplicate($agenda);
printf("Réussi ! %d cours uniques" . PHP_EOL, sizeof($agenda));

printDivider();
print "Connexion à l'API google..." . PHP_EOL;
$client = getCalendarClient();
print "Connecté !" . PHP_EOL;

printDivider();
printf("Récupération de la liste des cours présent sur le calendrier google sur %d jours..." . PHP_EOL, $days);
$events = getEvent($client, $days);
printf("Réussi ! %d cours trouvés" . PHP_EOL, sizeof($events));

printDivider();
print "Nettoyage des cours sur le calendrier google..." . PHP_EOL;
batchRemoveEvents($client, $events);
print "Les cours ont été supprimés de l'agenda google!" . PHP_EOL;

printDivider();
print "Ajout des cours sur le calendrier google..." . PHP_EOL;
batchAddEvents($client, $agenda);
printDivider();
print "Les cours ont été ajoutés!" . PHP_EOL;

print "Finit." . PHP_EOL;

0 comments on commit 1018194

Please sign in to comment.