xref: /template/strap/ComboStrap/File.php (revision 37748cd8654635afbeca80942126742f0f4cc346)
1*37748cd8SNickeau<?php
2*37748cd8SNickeau/**
3*37748cd8SNickeau * Copyright (c) 2021. ComboStrap, Inc. and its affiliates. All Rights Reserved.
4*37748cd8SNickeau *
5*37748cd8SNickeau * This source code is licensed under the GPL license found in the
6*37748cd8SNickeau * COPYING  file in the root directory of this source tree.
7*37748cd8SNickeau *
8*37748cd8SNickeau * @license  GPL 3 (https://www.gnu.org/licenses/gpl-3.0.en.html)
9*37748cd8SNickeau * @author   ComboStrap <support@combostrap.com>
10*37748cd8SNickeau *
11*37748cd8SNickeau */
12*37748cd8SNickeau
13*37748cd8SNickeaunamespace ComboStrap;
14*37748cd8SNickeau
15*37748cd8SNickeau
16*37748cd8SNickeauclass File
17*37748cd8SNickeau{
18*37748cd8SNickeau
19*37748cd8SNickeau    private $path;
20*37748cd8SNickeau
21*37748cd8SNickeau
22*37748cd8SNickeau    /**
23*37748cd8SNickeau     * File constructor.
24*37748cd8SNickeau     * @param $absolutePath
25*37748cd8SNickeau     */
26*37748cd8SNickeau    protected function __construct($absolutePath)
27*37748cd8SNickeau    {
28*37748cd8SNickeau        $this->path = $absolutePath;
29*37748cd8SNickeau    }
30*37748cd8SNickeau
31*37748cd8SNickeau    /**
32*37748cd8SNickeau     * @return mixed
33*37748cd8SNickeau     */
34*37748cd8SNickeau    public function getFileSystemPath()
35*37748cd8SNickeau    {
36*37748cd8SNickeau        return $this->path;
37*37748cd8SNickeau    }
38*37748cd8SNickeau
39*37748cd8SNickeau    /**
40*37748cd8SNickeau     * @return false|int
41*37748cd8SNickeau     */
42*37748cd8SNickeau    public function getSize()
43*37748cd8SNickeau    {
44*37748cd8SNickeau        return filesize($this->path);
45*37748cd8SNickeau    }
46*37748cd8SNickeau
47*37748cd8SNickeau    public function exists()
48*37748cd8SNickeau    {
49*37748cd8SNickeau        return file_exists($this->path);
50*37748cd8SNickeau    }
51*37748cd8SNickeau
52*37748cd8SNickeau    public function __toString()
53*37748cd8SNickeau    {
54*37748cd8SNickeau        return $this->path;
55*37748cd8SNickeau    }
56*37748cd8SNickeau
57*37748cd8SNickeau    /**
58*37748cd8SNickeau     * @return false|int - unix time stamp
59*37748cd8SNickeau     */
60*37748cd8SNickeau    public function getModifiedTime()
61*37748cd8SNickeau    {
62*37748cd8SNickeau        return filemtime($this->path);
63*37748cd8SNickeau    }
64*37748cd8SNickeau
65*37748cd8SNickeau    /**
66*37748cd8SNickeau     * @return string the last part of the path without the extension
67*37748cd8SNickeau     */
68*37748cd8SNickeau    public function getBaseNameWithoutExtension()
69*37748cd8SNickeau    {
70*37748cd8SNickeau
71*37748cd8SNickeau        return pathinfo($this->path, PATHINFO_FILENAME);
72*37748cd8SNickeau    }
73*37748cd8SNickeau
74*37748cd8SNickeau    public function getExtension()
75*37748cd8SNickeau    {
76*37748cd8SNickeau        return pathinfo($this->path, PATHINFO_EXTENSION);
77*37748cd8SNickeau    }
78*37748cd8SNickeau
79*37748cd8SNickeau
80*37748cd8SNickeau    /**
81*37748cd8SNickeau     * @return array|string|string[] the last part of the path (ie name + extension)
82*37748cd8SNickeau     */
83*37748cd8SNickeau    public function getBaseName()
84*37748cd8SNickeau    {
85*37748cd8SNickeau        return pathinfo($this->path, PATHINFO_BASENAME);
86*37748cd8SNickeau    }
87*37748cd8SNickeau
88*37748cd8SNickeau    public function isImage()
89*37748cd8SNickeau    {
90*37748cd8SNickeau        return substr($this->getMime(), 0, 5) == 'image';
91*37748cd8SNickeau    }
92*37748cd8SNickeau
93*37748cd8SNickeau    public function getMime()
94*37748cd8SNickeau    {
95*37748cd8SNickeau        return mimetype($this->getBaseName(), false)[1];
96*37748cd8SNickeau    }
97*37748cd8SNickeau
98*37748cd8SNickeau    public function getKnownMime()
99*37748cd8SNickeau    {
100*37748cd8SNickeau        return mimetype($this->getBaseName(), true)[1];
101*37748cd8SNickeau    }
102*37748cd8SNickeau
103*37748cd8SNickeau    public function getContent()
104*37748cd8SNickeau    {
105*37748cd8SNickeau        return file_get_contents($this->getFileSystemPath());
106*37748cd8SNickeau    }
107*37748cd8SNickeau
108*37748cd8SNickeau    public function remove()
109*37748cd8SNickeau    {
110*37748cd8SNickeau        unlink($this->getFileSystemPath());
111*37748cd8SNickeau    }
112*37748cd8SNickeau
113*37748cd8SNickeau    public function getParent()
114*37748cd8SNickeau    {
115*37748cd8SNickeau        return new File(pathinfo($this->path, PATHINFO_DIRNAME));
116*37748cd8SNickeau    }
117*37748cd8SNickeau
118*37748cd8SNickeau    public function createAsDirectory()
119*37748cd8SNickeau    {
120*37748cd8SNickeau
121*37748cd8SNickeau        return mkdir($this->getFileSystemPath(), $mode = 0770, $recursive = true);
122*37748cd8SNickeau    }
123*37748cd8SNickeau
124*37748cd8SNickeau    public static function createFromPath($path)
125*37748cd8SNickeau    {
126*37748cd8SNickeau        return new File($path);
127*37748cd8SNickeau
128*37748cd8SNickeau    }
129*37748cd8SNickeau
130*37748cd8SNickeau
131*37748cd8SNickeau
132*37748cd8SNickeau
133*37748cd8SNickeau
134*37748cd8SNickeau}
135