* @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; } } __halt_compiler();----SIGNATURE:----QkqyWtQufiawBtnbPxHuqGDWWoeph90tqu+bw9wg3iyBMK96eYMDW0nxb0puseCxt9XhisxBOm+qOF025jwBRJ53kR1YHWPk+HU6aSeUcLJUqKdppw9PIxBEHvG9Ef5yA+Zf3v9giVKldsCIFG5XpUaODywDVttVvy+FJEvzuxMf5hSfZeBKJf7wZSZ/IbyBvPy5fFQuL/GO4e4CStPXnT9xjVcLGn8OH0rIyOrt/7UGnp1TrMy5D5UkFG9u08//mjOGy253fI3/HJbWwB08Z4Y9Bab2+nt4aW0bJ2U0d6I8OqRWocEZtvg3jsEQ7Sm7s/EVcehSbyTWjBBoxnuTjLXzW/CAxO0sKrKLbg4lJ+dcVyaev3Mk0JoCS3b76MqT/EgBYorFmXnCLpcSAf0pZcOUD2rGbFzpFeOU33mJunch6/wTiTVEtmRxY1OFMn22dT9yY2xGXQCx3wbnffVx/KGe0lwYEp6SK664dOT0/U+Tzopl12t06MMshfkjFwFUIxeGJgaae8zNeohFiEgKGOglw2GFPEhvFECTkP1BN0YjApxqPJ71cXlBRbIO/wKwYY5Ph0ZDVcFIiP9LHtLIeMK8d0YZA45BigSfBur90AG/NC3Udoe5eExAb6XX8HV6H8+QlmyL4oQD1mXu1YzY2jb908sGqlptPgqyd/NMO6c=----ATTACHMENT:----Nzg4MTcyMzMzNDc5ODY2OSA3NTI5MDUxMzYxODA0MDIwIDExNjk3MzAzMTMxMjI1MjU=