Passed
Push — Assets/Image ( bd550f...7a290d )
by Arnaud
09:48 queued 04:01
created

Util::isExternalUrl()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 7
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 2
eloc 3
nc 2
nop 1
dl 0
loc 7
rs 10
c 1
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) {
1 ignored issue
show
introduced by
self::fs is always a sub-type of Symfony\Component\Filesystem\Filesystem.
Loading history...
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