Subversion-Projekte lars-tiefland.laravel_shop

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
148 lars 1
<?php
2
 
3
/**
4
 * Hoa
5
 *
6
 *
7
 * @license
8
 *
9
 * New BSD License
10
 *
11
 * Copyright © 2007-2017, Hoa community. All rights reserved.
12
 *
13
 * Redistribution and use in source and binary forms, with or without
14
 * modification, are permitted provided that the following conditions are met:
15
 *     * Redistributions of source code must retain the above copyright
16
 *       notice, this list of conditions and the following disclaimer.
17
 *     * Redistributions in binary form must reproduce the above copyright
18
 *       notice, this list of conditions and the following disclaimer in the
19
 *       documentation and/or other materials provided with the distribution.
20
 *     * Neither the name of the Hoa nor the names of its contributors may be
21
 *       used to endorse or promote products derived from this software without
22
 *       specific prior written permission.
23
 *
24
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
25
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE
28
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
29
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
30
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
31
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
32
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
33
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34
 * POSSIBILITY OF SUCH DAMAGE.
35
 */
36
 
37
namespace Psy\Readline\Hoa;
38
 
39
/**
40
 * Class \Hoa\Iterator\SplFileInfo.
41
 *
42
 * Enhance SplFileInfo implementation.
43
 */
44
class IteratorSplFileInfo extends \SplFileInfo
45
{
46
    /**
47
     * Hash.
48
     */
49
    protected $_hash = null;
50
 
51
    /**
52
     * Relative path.
53
     */
54
    protected $_relativePath = null;
55
 
56
    /**
57
     * Construct.
58
     */
59
    public function __construct(string $filename, string $relativePath = null)
60
    {
61
        parent::__construct($filename);
62
 
63
        if (-1 !== $mtime = $this->getMTime()) {
64
            $this->_hash = \md5($this->getPathname().$mtime);
65
        }
66
 
67
        $this->_relativePath = $relativePath;
68
 
69
        return;
70
    }
71
 
72
    /**
73
     * Get the hash.
74
     */
75
    public function getHash(): string
76
    {
77
        return $this->_hash;
78
    }
79
 
80
    /**
81
     * Get the MTime.
82
     */
83
    public function getMTime(): int
84
    {
85
        try {
86
            return parent::getMTime();
87
        } catch (\RuntimeException $e) {
88
            return -1;
89
        }
90
    }
91
 
92
    /**
93
     * Set relative path.
94
     */
95
    public function setRelativePath(string $relativePath)
96
    {
97
        $old = $this->_relativePath;
98
        $this->_relativePath = $relativePath;
99
 
100
        return $old;
101
    }
102
 
103
    /**
104
     * Get relative path (if given).
105
     */
106
    public function getRelativePath()
107
    {
108
        return $this->_relativePath;
109
    }
110
 
111
    /**
112
     * Get relative pathname (if possible).
113
     */
114
    public function getRelativePathname(): string
115
    {
116
        if (null === $relative = $this->getRelativePath()) {
117
            return $this->getPathname();
118
        }
119
 
120
        return \substr($this->getPathname(), \strlen($relative));
121
    }
122
}