xref: /template/strap/ComboStrap/File.php (revision 1fa8c418ed5809db58049141be41b7738471dd32)
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