File indexing completed on 2024-11-24 05:19:04

0001 <?php
0002 /**
0003  * file server - part of Opendesktop.org platform project <https://www.opendesktop.org>.
0004  *
0005  * Copyright (c) 2016 pling GmbH.
0006  *
0007  * This program is free software: you can redistribute it and/or modify
0008  * it under the terms of the GNU Affero General Public License as
0009  * published by the Free Software Foundation, either version 3 of the
0010  * License, or (at your option) any later version.
0011  *
0012  * This program is distributed in the hope that it will be useful,
0013  * but WITHOUT ANY WARRANTY; without even the implied warranty of
0014  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0015  * GNU Affero General Public License for more details.
0016  *
0017  * You should have received a copy of the GNU Affero General Public License
0018  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
0019  */
0020 
0021 namespace Ocs\Storage;
0022 
0023 class FilesystemAdapter implements AdapterInterface
0024 {
0025 
0026     private object $appConfig;
0027 
0028     public function __construct(object $appConfig)
0029     {
0030         $this->appConfig = $appConfig;
0031     }
0032 
0033     /**
0034      * @inheritDoc
0035      */
0036     public function moveUploadedFile(string $from, string $to): bool
0037     {
0038         return move_uploaded_file($from, $to);
0039     }
0040 
0041     public function fixFilename(string $name, string $collectionPath): string
0042     {
0043         if (is_file($collectionPath . DIRECTORY_SEPARATOR . $name)) {
0044             $fix = date('YmdHis');
0045             if (preg_match("/^([^.]+)(\..+)/", $name, $matches)) {
0046                 $name = $matches[1] . '-' . $fix . $matches[2];
0047             } else {
0048                 $name = $name . '-' . $fix;
0049             }
0050         }
0051 
0052         return $name;
0053     }
0054 
0055     public function prepareCollectionPath(string $collectionName, string $filePath): bool
0056     {
0057         return !is_dir($filePath . DIRECTORY_SEPARATOR . $collectionName) && mkdir($filePath . DIRECTORY_SEPARATOR . $collectionName);
0058     }
0059 
0060     /** Return true if dir exists and is writeable, otherwise it tries to create the path
0061      *
0062      * @param string $dir
0063      * @return bool
0064      */
0065     public function testAndCreate(string $dir): bool
0066     {
0067         if (is_dir($dir)) {
0068             if (!is_writable($dir)) {
0069                 return chmod($dir, 0755);
0070             }
0071 
0072             return true;
0073         }
0074 
0075         return mkdir($dir, 0755, true);
0076     }
0077 
0078     public function moveFile($from, $to): bool
0079     {
0080         return is_file($from) && $this->testAndCreate(dirname($to)) && copy($from, $to) && unlink($from);
0081     }
0082 
0083     public function copyFile($from, $to): bool
0084     {
0085         return is_file($from) && $this->testAndCreate(dirname($to)) && copy($from, $to);
0086     }
0087 
0088     public function isFile($from): bool
0089     {
0090         return is_file($from);
0091     }
0092 
0093     public function isDir($from) {
0094         return is_dir($from);
0095     }
0096 
0097     public function renameDir($from, $to) {
0098         return is_dir($from) && is_dir(dirname($to)) && rename($from, $to);
0099     }
0100 
0101 }