From df29cd044be3660dd8e8622a6a1deca9b8c42d39 Mon Sep 17 00:00:00 2001
From: Damien <damien.burel@maarch.org>
Date: Fri, 1 Jun 2018 11:31:30 +0200
Subject: [PATCH] FEAT #7731 Docservers percentage + checks

---
 .../controllers/DocserverController.php       | 45 +++++++++++++------
 .../models/DocserverModelAbstract.php         |  3 +-
 2 files changed, 33 insertions(+), 15 deletions(-)

diff --git a/src/app/docserver/controllers/DocserverController.php b/src/app/docserver/controllers/DocserverController.php
index 07accf01cbe..e8c0b750c1f 100644
--- a/src/app/docserver/controllers/DocserverController.php
+++ b/src/app/docserver/controllers/DocserverController.php
@@ -34,8 +34,9 @@ class DocserverController
 
         $sortedDocservers = [];
         $docservers = DocserverModel::get();
-        foreach ($docservers as $key => $docserver) {
+        foreach ($docservers as $docserver) {
             $docserver['actual_size_number'] = DocserverController::getDocserverSize(['path' => $docserver['path_template']]);
+            $docserver['percentage'] = round($docserver['actual_size_number'] / $docserver['size_limit_number'] * 100, 2);
             $sortedDocservers[$docserver['docserver_type_id']][] = $docserver;
         }
 
@@ -125,10 +126,17 @@ class DocserverController
             return $response->withStatus(400)->withJson(['errors' => _PATH_OF_DOCSERVER_UNAPPROACHABLE]);
         }
 
-        $data['is_readonly'] = empty($data['is_readonly']) ? 'N' : 'Y';
-        $data['docserver_id'] = $aArgs['id'];
+        $updateData = [
+            'docserver_id'          => $aArgs['id'],
+            'device_label'          => $data['device_label'],
+            'size_limit_number'     => $data['size_limit_number'],
+            'path_template'         => $data['path_template'],
+            'priority_number'       => $data['priority_number'],
+            'adr_priority_number'   => $data['adr_priority_number'],
+            'is_readonly'           => empty($data['is_readonly']) ? 'N' : 'Y'
+        ];
 
-        DocserverModel::update($data);
+        DocserverModel::update($updateData);
         HistoryController::add([
             'tableName' => 'docservers',
             'recordId'  => $aArgs['id'],
@@ -436,16 +444,22 @@ class DocserverController
             $firstLayerDirectories = scandir($aArgs['path']);
             foreach ($firstLayerDirectories as $firstLayerDirectory) {
                 if ($firstLayerDirectory != '.' && $firstLayerDirectory != '..') {
-                    $secondLayerDirectories = scandir("{$aArgs['path']}{$firstLayerDirectory}");
-                    foreach ($secondLayerDirectories as $secondLayerDirectory) {
-                        if ($secondLayerDirectory != '.' && $secondLayerDirectory != '..') {
-                            $thirdLayerDirectories = scandir("{$aArgs['path']}{$firstLayerDirectory}/{$secondLayerDirectory}");
-                            foreach ($thirdLayerDirectories as $thirdLayerDirectory) {
-                                if ($thirdLayerDirectory != '.' && $thirdLayerDirectory != '..') {
-                                    $files = scandir("{$aArgs['path']}{$firstLayerDirectory}/{$secondLayerDirectory}/{$thirdLayerDirectory}");
-                                    foreach ($files as $file) {
-                                        if ($file != '.' && $file != '..') {
-                                            $size += filesize("{$aArgs['path']}{$firstLayerDirectory}/{$secondLayerDirectory}/{$thirdLayerDirectory}/{$file}");
+                    if (DocserverController::isPathAvailable(['path' => "{$aArgs['path']}{$firstLayerDirectory}"])) {
+                        $secondLayerDirectories = scandir("{$aArgs['path']}{$firstLayerDirectory}");
+                        foreach ($secondLayerDirectories as $secondLayerDirectory) {
+                            if ($secondLayerDirectory != '.' && $secondLayerDirectory != '..') {
+                                if (DocserverController::isPathAvailable(['path' => "{$aArgs['path']}{$firstLayerDirectory}/{$secondLayerDirectory}"])) {
+                                    $thirdLayerDirectories = scandir("{$aArgs['path']}{$firstLayerDirectory}/{$secondLayerDirectory}");
+                                    foreach ($thirdLayerDirectories as $thirdLayerDirectory) {
+                                        if ($thirdLayerDirectory != '.' && $thirdLayerDirectory != '..') {
+                                            if (DocserverController::isPathAvailable(['path' => "{$aArgs['path']}{$firstLayerDirectory}/{$secondLayerDirectory}/{$thirdLayerDirectory}"])) {
+                                                $files = scandir("{$aArgs['path']}{$firstLayerDirectory}/{$secondLayerDirectory}/{$thirdLayerDirectory}");
+                                                foreach ($files as $file) {
+                                                    if ($file != '.' && $file != '..') {
+                                                        $size += filesize("{$aArgs['path']}{$firstLayerDirectory}/{$secondLayerDirectory}/{$thirdLayerDirectory}/{$file}");
+                                                    }
+                                                }
+                                            }
                                         }
                                     }
                                 }
@@ -467,6 +481,9 @@ class DocserverController
         if (!is_dir($aArgs['path'])) {
             return false;
         }
+        if (!is_readable($aArgs['path'])) {
+            return false;
+        }
         if (!is_writable($aArgs['path'])) {
             return false;
         }
diff --git a/src/app/docserver/models/DocserverModelAbstract.php b/src/app/docserver/models/DocserverModelAbstract.php
index 0977b348de0..33daf7f191a 100644
--- a/src/app/docserver/models/DocserverModelAbstract.php
+++ b/src/app/docserver/models/DocserverModelAbstract.php
@@ -107,7 +107,8 @@ class DocserverModelAbstract
                 'size_limit_number'     => $aArgs['size_limit_number'],
                 'priority_number'       => $aArgs['priority_number'],
                 'adr_priority_number'   => $aArgs['adr_priority_number'],
-                'is_readonly'           => $aArgs['is_readonly']
+                'is_readonly'           => $aArgs['is_readonly'],
+                'creation_date'         => 'CURRENT_TIMESTAMP'
             ]
         ]);
 
-- 
GitLab