diff --git a/README.md b/README.md
index 3bb2f70..a1081b1 100644
--- a/README.md
+++ b/README.md
@@ -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)
diff --git a/composer.json b/composer.json
index 590d36e..848cc4e 100644
--- a/composer.json
+++ b/composer.json
@@ -11,8 +11,8 @@
],
"require": {
"tchenu/myges": "dev-master",
- "google/apiclient": "^2.7",
"ext-json": "*",
- "ext-ctype": "*"
+ "ext-ctype": "*",
+ "google/apiclient": "^v2.8.3"
}
}
diff --git a/env.php.example b/env.php.example
index 2ac5a16..7c06f0e 100644
--- a/env.php.example
+++ b/env.php.example
@@ -18,4 +18,8 @@ define("calendar_api_auth_config_file", "");
/**
* Google calendar id (ex : vf2kq9ary690m8iee8ahv3e3d0@group.calendar.google.com)
*/
-define("calendar_id", "");
\ No newline at end of file
+define("calendar_id", "");
+/**
+ * Max batch request (don't set above 50)
+ */
+define('max_batch_request', 45);
\ No newline at end of file
diff --git a/functions.php b/functions.php
index 02fe337..40a03f9 100644
--- a/functions.php
+++ b/functions.php
@@ -8,6 +8,7 @@
require_once __DIR__ . '/models/Course.php';
require_once __DIR__ . '/models/Room.php';
+
function getMe(): Me
{
return new Me(getClient());
@@ -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);
}
@@ -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;
}
@@ -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)) {
@@ -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);
@@ -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)
@@ -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
@@ -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 .= "Intervenant : " . $course->teacher . "
";
+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 .= "Salle(s) :";
+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 .= "- " . $room->campus . " - " . $room->name . "
";
- }
- $description .= "
";
+ 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 .= "Intervenant : " . $course->teacher . "
";
+ }
+
+ if (!empty($course->rooms)) {
+ $description .= "Salle(s) :";
+
+ foreach ($course->rooms as $room) {
+ $description .= "- " . $room->campus . " - " . $room->name . "
";
+ }
+ $description .= "
";
}
+
+ $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()
diff --git a/index.php b/run.php
similarity index 74%
rename from index.php
rename to run.php
index 5b7b3e7..065d355 100644
--- a/index.php
+++ b/run.php
@@ -1,51 +1,52 @@
-= 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;
\ No newline at end of file