137748cd8SNickeau<?php 237748cd8SNickeau/** 337748cd8SNickeau * Copyright (c) 2021. ComboStrap, Inc. and its affiliates. All Rights Reserved. 437748cd8SNickeau * 537748cd8SNickeau * This source code is licensed under the GPL license found in the 637748cd8SNickeau * COPYING file in the root directory of this source tree. 737748cd8SNickeau * 837748cd8SNickeau * @license GPL 3 (https://www.gnu.org/licenses/gpl-3.0.en.html) 937748cd8SNickeau * @author ComboStrap <support@combostrap.com> 1037748cd8SNickeau * 1137748cd8SNickeau */ 1237748cd8SNickeau 1337748cd8SNickeaunamespace ComboStrap; 1437748cd8SNickeau 1537748cd8SNickeau 1637748cd8SNickeauclass File 1737748cd8SNickeau{ 1837748cd8SNickeau 19*1fa8c418SNickeau protected $path; 2037748cd8SNickeau 2137748cd8SNickeau 2237748cd8SNickeau /** 2337748cd8SNickeau * File constructor. 2437748cd8SNickeau * @param $absolutePath 2537748cd8SNickeau */ 2637748cd8SNickeau protected function __construct($absolutePath) 2737748cd8SNickeau { 2837748cd8SNickeau $this->path = $absolutePath; 2937748cd8SNickeau } 3037748cd8SNickeau 3137748cd8SNickeau /** 3237748cd8SNickeau * @return mixed 3337748cd8SNickeau */ 3437748cd8SNickeau public function getFileSystemPath() 3537748cd8SNickeau { 3637748cd8SNickeau return $this->path; 3737748cd8SNickeau } 3837748cd8SNickeau 3937748cd8SNickeau /** 4037748cd8SNickeau * @return false|int 4137748cd8SNickeau */ 4237748cd8SNickeau public function getSize() 4337748cd8SNickeau { 4437748cd8SNickeau return filesize($this->path); 4537748cd8SNickeau } 4637748cd8SNickeau 4737748cd8SNickeau public function exists() 4837748cd8SNickeau { 4937748cd8SNickeau return file_exists($this->path); 5037748cd8SNickeau } 5137748cd8SNickeau 5237748cd8SNickeau public function __toString() 5337748cd8SNickeau { 5437748cd8SNickeau return $this->path; 5537748cd8SNickeau } 5637748cd8SNickeau 5737748cd8SNickeau /** 58*1fa8c418SNickeau * @return \DateTime - The date time 5937748cd8SNickeau */ 60*1fa8c418SNickeau public function getModifiedTime(): \DateTime 6137748cd8SNickeau { 62*1fa8c418SNickeau return Iso8601Date::createFromTimestamp(filemtime($this->path))->getDateTime(); 6337748cd8SNickeau } 6437748cd8SNickeau 6537748cd8SNickeau /** 6637748cd8SNickeau * @return string the last part of the path without the extension 6737748cd8SNickeau */ 6837748cd8SNickeau public function getBaseNameWithoutExtension() 6937748cd8SNickeau { 7037748cd8SNickeau 7137748cd8SNickeau return pathinfo($this->path, PATHINFO_FILENAME); 7237748cd8SNickeau } 7337748cd8SNickeau 7437748cd8SNickeau public function getExtension() 7537748cd8SNickeau { 7637748cd8SNickeau return pathinfo($this->path, PATHINFO_EXTENSION); 7737748cd8SNickeau } 7837748cd8SNickeau 7937748cd8SNickeau 8037748cd8SNickeau /** 8137748cd8SNickeau * @return array|string|string[] the last part of the path (ie name + extension) 8237748cd8SNickeau */ 8337748cd8SNickeau public function getBaseName() 8437748cd8SNickeau { 8537748cd8SNickeau return pathinfo($this->path, PATHINFO_BASENAME); 8637748cd8SNickeau } 8737748cd8SNickeau 88*1fa8c418SNickeau public function isImage(): bool 8937748cd8SNickeau { 9037748cd8SNickeau return substr($this->getMime(), 0, 5) == 'image'; 9137748cd8SNickeau } 9237748cd8SNickeau 9337748cd8SNickeau public function getMime() 9437748cd8SNickeau { 95*1fa8c418SNickeau if ($this->getExtension() == ImageSvg::EXTENSION) { 96*1fa8c418SNickeau /** 97*1fa8c418SNickeau * Svg is authorized when viewing but is not part 98*1fa8c418SNickeau * of the {@link File::getKnownMime()} 99*1fa8c418SNickeau */ 100*1fa8c418SNickeau return ImageSvg::MIME; 101*1fa8c418SNickeau } else { 10237748cd8SNickeau return mimetype($this->getBaseName(), false)[1]; 10337748cd8SNickeau } 104*1fa8c418SNickeau } 10537748cd8SNickeau 10637748cd8SNickeau public function getKnownMime() 10737748cd8SNickeau { 10837748cd8SNickeau return mimetype($this->getBaseName(), true)[1]; 10937748cd8SNickeau } 11037748cd8SNickeau 11137748cd8SNickeau public function getContent() 11237748cd8SNickeau { 11337748cd8SNickeau return file_get_contents($this->getFileSystemPath()); 11437748cd8SNickeau } 11537748cd8SNickeau 11637748cd8SNickeau public function remove() 11737748cd8SNickeau { 11837748cd8SNickeau unlink($this->getFileSystemPath()); 11937748cd8SNickeau } 12037748cd8SNickeau 12137748cd8SNickeau public function getParent() 12237748cd8SNickeau { 12337748cd8SNickeau return new File(pathinfo($this->path, PATHINFO_DIRNAME)); 12437748cd8SNickeau } 12537748cd8SNickeau 12637748cd8SNickeau public function createAsDirectory() 12737748cd8SNickeau { 12837748cd8SNickeau 12937748cd8SNickeau return mkdir($this->getFileSystemPath(), $mode = 0770, $recursive = true); 13037748cd8SNickeau } 13137748cd8SNickeau 13237748cd8SNickeau public static function createFromPath($path) 13337748cd8SNickeau { 13437748cd8SNickeau return new File($path); 13537748cd8SNickeau 13637748cd8SNickeau } 13737748cd8SNickeau 13837748cd8SNickeau 13937748cd8SNickeau 14037748cd8SNickeau 14137748cd8SNickeau 14237748cd8SNickeau} 143