Passed
Pull Request — fix-path (#664)
by Arnaud
08:45 queued 05:47
created

Util::joinFile()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 4
nc 1
nop 1
dl 0
loc 8
rs 10
c 0
b 0
f 0
1
<?php
2
/*
3
 * Copyright (c) Arnaud Ligny <[email protected]>
4
 *
5
 * For the full copyright and license information, please view the LICENSE
6
 * file that was distributed with this source code.
7
 */
8
9
namespace Cecil;
10
11
use Symfony\Component\Filesystem\Filesystem;
12
13
class Util
14
{
15
    /**
16
     * Symfony\Component\Filesystem.
17
     *
18
     * @var Filesystem
19
     */
20
    protected static $fs;
21
22
    /**
23
     * Return Symfony\Component\Filesystem instance.
24
     *
25
     * @return Filesystem
26
     */
27
    public static function getFS(): Filesystem
28
    {
29
        if (!self::$fs instanceof Filesystem) {
30
            self::$fs = new Filesystem();
31
        }
32
33
        return self::$fs;
34
    }
35
36
    /**
37
     * Checks if a date is valid.
38
     *
39
     * @param string|null $date
40
     * @param string      $format
41
     *
42
     * @return bool
43
     */
44
    public static function isDateValid($date, string $format = 'Y-m-d'): bool
45
    {
46
        if ($date === null) {
47
            return false;
48
        }
49
        $d = \DateTime::createFromFormat($format, $date);
50
51
        return $d && $d->format($format) === $date;
52
    }
53
54
    /**
55
     * Date to DateTime.
56
     *
57
     * @param mixed $date
58
     *
59
     * @return \DateTime
60
     */
61
    public static function dateToDatetime($date): \DateTime
62
    {
63
        // DateTime
64
        if ($date instanceof \DateTime) {
65
            return $date;
66
        }
67
        // timestamp or AAAA-MM-DD
68
        if (is_numeric($date)) {
69
            return (new \DateTime())->setTimestamp($date);
70
        }
71
        // string (ie: '01/01/2019', 'today')
72
        if (is_string($date)) {
73
            return new \DateTime($date);
74
        }
75
    }
76
77
    /**
78
     * Format class name.
79
     *
80
     * @param \object $class
81
     * @param array   $options
82
     *
83
     * @return string
84
     */
85
    public static function formatClassName($class, array $options = []): string
86
    {
87
        $lowercase = false;
88
        extract($options);
89
90
        $className = substr(strrchr(get_class($class), '\\'), 1);
91
        if ($lowercase) {
1 ignored issue
show
introduced by
The condition $lowercase is always false.
Loading history...
92
            $className = strtolower($className);
93
        }
94
95
        return $className;
96
    }
97
98
    /**
99
     * Test if a string is an external URL or not.
100
     *
101
     * @param string|null $url
102
     *
103
     * @return bool
104
     */
105
    public static function isExternalUrl($url): bool
106
    {
107
        if ($url === null) {
108
            return false;
109
        }
110
111
        return (bool) preg_match('~^(?:f|ht)tps?://~i', $url);
112
    }
113
114
    /**
115
     * Test if a remote file exists or not.
116
     *
117
     * @param string $remoteFile
118
     *
119
     * @return bool
120
     */
121
    public static function isUrlFileExists(string $remoteFile): bool
122
    {
123
        $handle = @fopen($remoteFile, 'r');
124
        if (is_resource($handle)) {
125
            return true;
126
        }
127
128
        return false;
129
    }
130
131
    /**
132
     * Convert an array of strings into a path.
133
     *
134
     * @param array $strings
135
     *
136
     * @return string
137
     */
138
    public static function joinPath(array $strings): string
139
    {
140
        array_walk($strings, function (&$value) {
141
            $value = str_replace('\\', '/', $value);
142
            $value = trim($value, '/');
143
        });
144
145
        return trim(implode('/', $strings), '/');
146
    }
147
148
    /**
149
     * Convert an array of strings into a system path.
150
     *
151
     * @param array $strings
152
     *
153
     * @return string
154
     */
155
    public static function joinFile(array $strings): string
156
    {
157
        array_walk($strings, function (&$value) {
158
            $value = str_replace(['\\', '/'], DIRECTORY_SEPARATOR, $value);
159
            $value = trim($value, DIRECTORY_SEPARATOR);
160
        });
161
162
        return trim(implode(DIRECTORY_SEPARATOR, $strings), DIRECTORY_SEPARATOR);
163
    }
164
165
    /**
166
     * Convert array to string.
167
     *
168
     * @param array $array
169
     *
170
     * @return string
171
     */
172
    public static function arrayToString(array $array): string
173
    {
174
        $string = '';
175
176
        foreach ($array as $key => $value) {
177
            $string .= sprintf('%s:%s, ', $key, $value);
178
        }
179
180
        return substr($string, 0, -2);
181
    }
182
}
183