Example #1
0
    /**
     * Return stat for given path.
     * Stat contains following fields:
     * - (int)    size    file size in b. required
     * - (int)    ts      file modification time in unix time. required
     * - (string) mime    mimetype. required for folders, others - optionally
     * - (bool)   read    read permissions. required
     * - (bool)   write   write permissions. required
     * - (bool)   locked  is object locked. optionally
     * - (bool)   hidden  is object hidden. optionally
     * - (string) alias   for symlinks - link target path relative to root path. optionally
     * - (string) target  for symlinks - link target path. optionally
     *
     * If file does not exists - returns empty array or false.
     *
     * @param  string  $path    file path
     * @return array|false
     * @author Dmitry (dio) Levashov
     **/
    protected function _stat($path)
    {
        if ($path === '_') {
            $cid = $lid = 0;
        } else {
            list($cid, $lid) = explode('_', substr($path, 1), 2);
            list($lid) = explode('.', $lid);
        }
        $stat_def = array('size' => 0, 'ts' => 0, 'mime' => '', 'dirs' => 0, 'read' => true, 'write' => false, 'locked' => true, 'hidden' => false, 'url' => null);
        if (!$cid) {
            $stat['name'] = !empty($this->options['alias']) ? $this->options['alias'] : 'untitle';
            $stat['mime'] = 'directory';
            $stat['dirs'] = true;
            $stat = array_merge($stat_def, $stat);
            return $stat;
        } elseif (!$lid) {
            // cat (dirctory)
            $sql = 'SELECT c.pid, c.cid, c.title as name , s.pid as dirs ' . 'FROM ' . $this->tbc . ' AS c ' . 'LEFT JOIN ' . $this->tbc . ' AS s ON c.cid=s.pid ' . 'WHERE c.cid="' . $cid . '" LIMIT 1';
            $res = $this->query($sql);
            if ($res) {
                $stat = $this->db->fetchArray($res);
                $stat = array_merge($stat_def, $stat);
                $stat['mime'] = 'directory';
                $stat['dirs'] = $stat['dirs'] ? 1 : 0;
                if (!$stat['pid']) {
                    $stat['phash'] = $this->encode('_');
                } else {
                    $stat['phash'] = $this->encode('_' . $stat['pid'] . '_');
                }
                unset($stat['cid'], $stat['pid']);
                return $stat;
            }
        } elseif ($cid) {
            // photos
            $sql = 'SELECT submitter as uid, lid, cid, concat( lid, ".", ext ) AS id, res_x AS width, res_y AS height, `date` AS ts, concat( title, ".", ext ) AS name
					FROM ' . $this->tbf . '
					WHERE lid="' . $lid . '" AND status>0 LIMIT 1';
            $res = $this->query($sql);
            if ($res) {
                $stat = $this->db->fetchArray($res);
                $stat = array_merge($stat_def, $stat);
                $stat['phash'] = $this->encode('_' . $cid . '_');
                $stat['url'] = $this->options['URL'] . $stat['id'];
                $realpath = realpath($this->options['filePath'] . $stat['id']);
                $stat['size'] = filesize($realpath);
                $stat['mime'] = $this->mimetypeInternalDetect($stat['id']);
                $stat['simg'] = trim($this->options['smallImg'], '/');
                $stat['owner'] = xoops_elFinder::getUnameByUid($stat['uid']);
                $stat['tooltip'] = 'Owner: ' . $stat['owner'];
                unset($stat['uid'], $stat['lid'], $stat['cid'], $stat['id']);
                return $stat;
            }
        }
        return array();
    }
Example #2
0
	/**
	 * Return stat for given path.
	 * Stat contains following fields:
	 * - (int)    size    file size in b. required
	 * - (int)    ts      file modification time in unix time. required
	 * - (string) mime    mimetype. required for folders, others - optionally
	 * - (bool)   read    read permissions. required
	 * - (bool)   write   write permissions. required
	 * - (bool)   locked  is object locked. optionally
	 * - (bool)   hidden  is object hidden. optionally
	 * - (string) alias   for symlinks - link target path relative to root path. optionally
	 * - (string) target  for symlinks - link target path. optionally
	 *
	 * If file does not exists - returns empty array or false.
	 *
	 * @param  string  $path    file path
	 * @return array|false
	 * @author Dmitry (dio) Levashov
	 **/
	protected function _stat($path, $rootCheck = true) {
		$sql = 'SELECT f.file_id, f.parent_id, f.name, f.size, f.mtime AS ts, f.mime,
				f.perm, f.umask, f.uid, f.gid, f.home_of, f.width, f.height, f.gids, f.mime_filter as filter, f.local_path,
				IF(ch.file_id, 1, 0) AS dirs
				FROM '.$this->tbf.' AS f
				LEFT JOIN '.$this->tbf.' AS p ON p.file_id=f.parent_id
				LEFT JOIN '.$this->tbf.' AS ch ON ch.parent_id=f.file_id AND ch.mime="directory"
				WHERE f.file_id="'.$path.'"
				GROUP BY f.file_id';

		$res = $this->query($sql);

		if ($res && $stat = $this->db->fetchArray($res)) {
			return $this->makeStat($stat);
		} else if ($rootCheck && $path == $this->root) {
			$this->_mkdir(0, 'VolumeRoot');
			return $this->_stat($path, false);
		}
		return array();
	}