From dcb6cbb4af2454e4256395826c4738e92bf21f8e Mon Sep 17 00:00:00 2001
From: Damien <damien.burel@maarch.org>
Date: Thu, 17 May 2018 10:57:07 +0200
Subject: [PATCH] FEAT #7730 Update version back

---
 composer.json                                 |  1 +
 package-lock.json                             | 10 ++-
 rest/index.php                                | 19 +++--
 .../controllers/VersionUpdateController.php   | 75 +++++++++++++++++++
 vendor/composer/autoload_psr4.php             |  1 +
 vendor/composer/autoload_static.php           |  8 ++
 6 files changed, 103 insertions(+), 11 deletions(-)
 create mode 100644 src/app/versionUpdate/controllers/VersionUpdateController.php

diff --git a/composer.json b/composer.json
index 744ae5f846e..2f73819e5e4 100755
--- a/composer.json
+++ b/composer.json
@@ -23,6 +23,7 @@
             "Status\\"        : "src/app/status/",
             "Template\\"      : "src/app/template/",
             "User\\"          : "src/app/user/",
+            "VersionUpdate\\" : "src/app/versionUpdate/",
 
             "Core\\"          : "core/",
             "Convert\\"       : "modules/convert/",
diff --git a/package-lock.json b/package-lock.json
index 414318bc79b..9c96ff244e3 100755
--- a/package-lock.json
+++ b/package-lock.json
@@ -2035,7 +2035,8 @@
     "deep-extend": {
       "version": "0.5.1",
       "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz",
-      "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w=="
+      "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==",
+      "dev": true
     },
     "deep-is": {
       "version": "0.1.3",
@@ -4616,7 +4617,8 @@
     "ini": {
       "version": "1.3.5",
       "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
-      "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw=="
+      "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
+      "dev": true
     },
     "internal-ip": {
       "version": "1.2.0",
@@ -7388,6 +7390,7 @@
       "version": "1.2.7",
       "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.7.tgz",
       "integrity": "sha512-LdLD8xD4zzLsAT5xyushXDNscEjB7+2ulnl8+r1pnESlYtlJtVSoCMBGr30eDRJ3+2Gq89jK9P9e4tCEH1+ywA==",
+      "dev": true,
       "requires": {
         "deep-extend": "^0.5.1",
         "ini": "~1.3.0",
@@ -8536,7 +8539,8 @@
     "strip-json-comments": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
-      "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo="
+      "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+      "dev": true
     },
     "style-loader": {
       "version": "0.21.0",
diff --git a/rest/index.php b/rest/index.php
index 3fd3a24edd6..383fb93163a 100755
--- a/rest/index.php
+++ b/rest/index.php
@@ -201,6 +201,15 @@ $app->get('/res/{resId}/lock', \Resource\controllers\ResController::class . ':is
 $app->get('/res/{resId}/notes/count', \Resource\controllers\ResController::class . ':getNotesCountForCurrentUserById');
 $app->put('/res/externalInfos', \Resource\controllers\ResController::class . ':updateExternalInfos');
 
+//SignatureBook
+$app->get('/{basketId}/signatureBook/resList', \SignatureBook\controllers\SignatureBookController::class . ':getResList');
+$app->get('/{basketId}/signatureBook/resList/details', \SignatureBook\controllers\SignatureBookController::class . ':getDetailledResList');
+$app->get('/groups/{groupId}/baskets/{basketId}/signatureBook/{resId}', \SignatureBook\controllers\SignatureBookController::class . ':getSignatureBook');
+$app->get('/signatureBook/{resId}/attachments', \SignatureBook\controllers\SignatureBookController::class . ':getAttachmentsById');
+$app->get('/signatureBook/{resId}/incomingMailAttachments', \SignatureBook\controllers\SignatureBookController::class . ':getIncomingMailAndAttachmentsById');
+$app->put('/signatureBook/{resId}/unsign', \SignatureBook\controllers\SignatureBookController::class . ':unsignFile');
+$app->put('/attachments/{id}/inSignatureBook', \SignatureBook\controllers\SignatureBookController::class . ':setInSignatureBook');
+
 //statuses
 $app->get('/statuses', \Status\controllers\StatusController::class . ':get');
 $app->post('/statuses', \Status\controllers\StatusController::class . ':create');
@@ -238,14 +247,8 @@ $app->post('/users/{id}/redirectedBaskets', \User\controllers\UserController::cl
 $app->delete('/users/{id}/redirectedBaskets/{basketId}', \User\controllers\UserController::class . ':deleteRedirectedBaskets');
 $app->put('/users/{id}/baskets', \User\controllers\UserController::class . ':updateBasketsDisplay');
 
-//Visa
-$app->get('/{basketId}/signatureBook/resList', \SignatureBook\controllers\SignatureBookController::class . ':getResList');
-$app->get('/{basketId}/signatureBook/resList/details', \SignatureBook\controllers\SignatureBookController::class . ':getDetailledResList');
-$app->get('/groups/{groupId}/baskets/{basketId}/signatureBook/{resId}', \SignatureBook\controllers\SignatureBookController::class . ':getSignatureBook');
-$app->get('/signatureBook/{resId}/attachments', \SignatureBook\controllers\SignatureBookController::class . ':getAttachmentsById');
-$app->get('/signatureBook/{resId}/incomingMailAttachments', \SignatureBook\controllers\SignatureBookController::class . ':getIncomingMailAndAttachmentsById');
-$app->put('/signatureBook/{resId}/unsign', \SignatureBook\controllers\SignatureBookController::class . ':unsignFile');
-$app->put('/attachments/{id}/inSignatureBook', \SignatureBook\controllers\SignatureBookController::class . ':setInSignatureBook');
+//VersionsUpdate
+$app->get('/versionsUpdate', \VersionUpdate\controllers\VersionUpdateController::class . ':get');
 
 //CurrentUser
 $app->get('/currentUser/profile', \User\controllers\UserController::class . ':getProfile');
diff --git a/src/app/versionUpdate/controllers/VersionUpdateController.php b/src/app/versionUpdate/controllers/VersionUpdateController.php
new file mode 100644
index 00000000000..aabe892c5bd
--- /dev/null
+++ b/src/app/versionUpdate/controllers/VersionUpdateController.php
@@ -0,0 +1,75 @@
+<?php
+
+/**
+ * Copyright Maarch since 2008 under licence GPLv3.
+ * See LICENCE.txt file at the root folder for more details.
+ * This file is part of Maarch software.
+ *
+ */
+
+/**
+ * @brief Version Update Controller
+ * @author dev@maarch.org
+ */
+
+namespace VersionUpdate\controllers;
+
+use Gitlab\Client;
+use Group\models\ServiceModel;
+use Parameter\models\ParameterModel;
+use Slim\Http\Request;
+use Slim\Http\Response;
+
+class VersionUpdateController
+{
+    public function get(Request $request, Response $response)
+    {
+        if (!ServiceModel::hasService(['id' => 'admin_update_control', 'userId' => $GLOBALS['userId'], 'location' => 'apps', 'type' => 'admin'])) {
+            return $response->withStatus(403)->withJson(['errors' => 'Service forbidden']);
+        }
+
+        $client = new Client('https://labs.maarch.org/api/v4/');
+        $tags = $client->api('tags')->all('12');
+
+        $parameter = ParameterModel::getById(['select' => ['param_value_string'], 'id' => 'database_version']);
+
+        $currentVersionBranch = substr($parameter['param_value_string'], 0, 5);
+        $currentVersionBranchYear = substr($parameter['param_value_string'], 0, 2);
+        $currentVersionBranchMonth = substr($parameter['param_value_string'], 3, 2);
+        $currentVersionTag = substr($parameter['param_value_string'], 6);
+
+        $currentMinorVersions = [];
+        $availableMajorVersions = [];
+        $cptCurrentTags = 0;
+
+        foreach ($tags as $value) {
+            if (!preg_match("/^\d{2}\.\d{2}\.\d+$/", $value['name'])) {
+                continue;
+            }
+            $tag = substr($value['name'], 6);
+            $pos = strpos($value['name'], $currentVersionBranch);
+            if ($pos === false) {
+                $year = substr($value['name'], 0, 2);
+                $month = substr($value['name'], 3, 2);
+                if (($year == $currentVersionBranchYear && $month > $currentVersionBranchMonth) || $year > $currentVersionBranchYear) {
+                    $availableMajorVersions[] = $value['name'];
+                }
+            } else {
+                $currentMinorVersions[$cptCurrentTags] = [];
+                $currentMinorVersions[$cptCurrentTags]['name'] = $value['name'];
+                if ($tag > $currentVersionTag) {
+                    $currentMinorVersions[$cptCurrentTags]['enabled'] = true;
+                } else {
+                    $currentMinorVersions[$cptCurrentTags]['enabled'] = false;
+                }
+                ++$cptCurrentTags;
+            }
+        }
+
+        return $response->withJson([
+            'currentMinorVersions'      => $currentMinorVersions,
+            'availableMajorVersions'    => $availableMajorVersions,
+            'currentVersion'            => $parameter['param_value_string']
+        ]);
+    }
+}
diff --git a/vendor/composer/autoload_psr4.php b/vendor/composer/autoload_psr4.php
index bcbaba490ba..5f2da2cc16a 100644
--- a/vendor/composer/autoload_psr4.php
+++ b/vendor/composer/autoload_psr4.php
@@ -7,6 +7,7 @@ $baseDir = dirname($vendorDir);
 
 return array(
     'phpseclib\\' => array($vendorDir . '/phpseclib/phpseclib/phpseclib'),
+    'VersionUpdate\\' => array($baseDir . '/src/app/versionUpdate'),
     'User\\' => array($baseDir . '/src/app/user'),
     'Template\\' => array($baseDir . '/src/app/template'),
     'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'),
diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php
index 6da988e67cf..3d842a236d7 100644
--- a/vendor/composer/autoload_static.php
+++ b/vendor/composer/autoload_static.php
@@ -19,6 +19,10 @@ class ComposerStaticInit3cf41326f2ce1ccc88c4676c4e39ea47
         array (
             'phpseclib\\' => 10,
         ),
+        'V' => 
+        array (
+            'VersionUpdate\\' => 14,
+        ),
         'U' => 
         array (
             'User\\' => 5,
@@ -114,6 +118,10 @@ class ComposerStaticInit3cf41326f2ce1ccc88c4676c4e39ea47
         array (
             0 => __DIR__ . '/..' . '/phpseclib/phpseclib/phpseclib',
         ),
+        'VersionUpdate\\' => 
+        array (
+            0 => __DIR__ . '/../..' . '/src/app/versionUpdate',
+        ),
         'User\\' => 
         array (
             0 => __DIR__ . '/../..' . '/src/app/user',
-- 
GitLab