Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
20 / 20
CRAP
100.00% covered (success)
100.00%
38 / 38
Node
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
21 / 21
24
100.00% covered (success)
100.00%
38 / 38
 __construct($basename)
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
3 / 3
 chmod($mode)
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
2 / 2
 mode()
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 chown($userid)
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
2 / 2
 user()
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 chgrp($groupid)
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
2 / 2
 group()
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 size()
100.00% covered (success)
100.00%
1 / 1
1  
 
 setParent(Directory $parent)
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
2 / 2
 basename()
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 setBasename($basename)
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
2 / 2
 path()
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
4 / 4
 url()
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
4 / 4
 __toString()
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 dirname()
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
3 / 3
 setAccessTime($time)
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
2 / 2
 setModificationTime($time)
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
2 / 2
 setChangeTime($time)
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
2 / 2
 atime()
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 mtime()
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 ctime()
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
<?php
/*
 * This file is part of the php-vfs package.
 *
 * (c) Michael Donat <michael.donat@me.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */
namespace VirtualFileSystem\Structure;
/**
 * Abstract class to represent filesystem Node.
 *
 * @author Michael Donat <michael.donat@me.com>
 * @package php-vfs
 */
abstract class Node
{
    const S_IFMT    = 0160000;
    const DEF_MODE  = 0755;
    protected $basename;
    protected $parent;
    protected $userid;
    protected $groupid;
    protected $atime;
    protected $mtime;
    protected $ctime;
    protected $mode;
    /**
     * Class constructor.
     *
     * @param string $basename
     */
    public function __construct($basename)
    {
        $this->basename = $basename;
        $this->chmod(self::DEF_MODE);
    }
    /**
     * Changes access to file.
     *
     * This will apply the DIR/FILE type mask for use by stat to distinguish between file and directory.
     * @see http://man7.org/linux/man-pages/man2/lstat.2.html for explanation.
     *
     * @param int $mode
     */
    public function chmod($mode)
    {
        $this->mode = $mode | static::S_IFTYPE;
    }
    /**
     * Returns file mode
     *
     * @return int
     */
    public function mode()
    {
        return $this->mode;
    }
    /**
     * Changes ownership.
     *
     * @param $userid
     */
    public function chown($userid)
    {
        $this->userid = $userid;
    }
    /**
     * Returns ownership.
     *
     * @return mixed
     */
    public function user()
    {
        return $this->userid;
    }
    /**
     * Changes group ownership.
     *
     * @param $groupid
     */
    public function chgrp($groupid)
    {
        $this->groupid = $groupid;
    }
    /**
     * Returns group ownership.
     *
     * @return mixed
     */
    public function group()
    {
        return $this->groupid;
    }
    /**
     * Returns Node size.
     *
     * @return mixed
     */
    abstract public function size();
    /**
     * Sets parent Node.
     *
     * @param Directory $parent
     */
    protected function setParent(Directory $parent)
    {
        $this->parent = $parent;
    }
    /**
     * Returns Node basename.
     *
     * @return string
     */
    public function basename()
    {
        return $this->basename;
    }
    /**
     * Sets new basename
     *
     * @param string $basename
     */
    public function setBasename($basename)
    {
        $this->basename = $basename;
    }
    /**
     * Returns node path.
     *
     * @return string
     */
    public function path()
    {
        $dirname = $this->dirname();
        if ($this->parent instanceof Root) { //at root
            return $dirname.$this->basename();
        }
        return sprintf('%s/%s', $dirname, $this->basename());
    }
    /**
     * Returns node URL.
     *
     * @return string
     */
    public function url()
    {
        $dirname = $this->parent->url();
        if ($this->parent instanceof Root) { //at root
            return $dirname.$this->basename();
        }
        return sprintf('%s/%s', $dirname, $this->basename());
    }
    /**
     * Returns node absolute path (without scheme).
     *
     * @return string
     */
    public function __toString()
    {
        return $this->path();
    }
    /**
     * Returns Node parent absolute path.
     *
     * @return string|null
     */
    public function dirname()
    {
        if ($this->parent) {
            return $this->parent->path();
        }
    }
    /**
     * Sets last access time
     *
     * @param int $time
     */
    public function setAccessTime($time)
    {
        $this->atime = $time;
    }
    /**
     * Sets last modification time
     *
     * @param int $time
     */
    public function setModificationTime($time)
    {
        $this->mtime = $time;
    }
    /**
     * Sets last inode change time
     *
     * @param int $time
     */
    public function setChangeTime($time)
    {
        $this->ctime = $time;
    }
    /**
     * Returns last access time
     *
     * @return int
     */
    public function atime()
    {
        return $this->atime;
    }
    /**
     * Returns last modification time
     *
     * @return int
     */
    public function mtime()
    {
        return $this->mtime;
    }
    /**
     * Returns last inode change time (chown etc.)
     *
     * @return int
     */
    public function ctime()
    {
        return $this->ctime;
    }
}