Location: PHPKode > projects > Energine > energine-2.2/core2a/framework/FileSystemObject.class.php
<?php

/**
 * Содержит класс FileSystemObject
 *
 * @package energine
 * @subpackage core
 * @author dr.Pavka
 * @copyright ColoCall 2006
 * @version $Id: FileSystemObject.class.php,v 1.9 2007/12/17 14:16:03 pavka Exp $
 */

//require_once('core/framework/DBWorker.class.php');

/**
 * Абстрактный класс  - модель объекта файловой системы
 *
 * @package energine
 * @subpackage core
 * @abstract
 */
abstract class FileSystemObject extends DBWorker {
    /**
     * Файл является папкой
     *
     */
    const IS_FOLDER = 0;
    /**
     * Файл - изображение
     *
     */
    const IS_IMAGE = 1;
    /**
     * Файл
     *
     */
    const IS_FILE = 2;

    /**
     * Имя таблицы в которой хранится мета описания папки
     *
     */
    const TABLE_NAME = 'share_uploads';
    /**
     * Полный путь к файлу
     *
     * @var string
     * @access private
     */
    private $path;
    /**
     * Имя папки
     * Если существует описание в БД - берется из нее, если нет. то из $this->path
     *
     * @var string
     * @access private
     */
    private $name;

    /**
     * Данные присоединенные к файлу
     *
     * @var mixed
     * @access private
     */
    private $data = null;

    /**
     * Идентификатор записи, хранящей данные о папке в БД
     * Может быть  пустым
     *
     * @var mixed
     * @access private
     */
    private $id = false;

    /**
     * Конструктор класса
     *
     * @return void
     */
    public function __construct() {
        parent::__construct();
    }

    /**
     * Возвращает объект в виде массива
     * Если он не открыт, возвращается информация о самом объекте - иначе, о всех вложенных объектах
     *
     * @return array
     * @access public
     */

    public function asArray() {
        $result = array(
        'upl_id'=>$this->id,
        'upl_mime_type' => self::getTypeInfo($this->path),
        'upl_name' => $this->name,
        'upl_path' => $this->path,
        'upl_data'=>$this->data
        );
        return $result;
    }

    /**
     * Загружает мета описание данных о объекте из БД
     *
     * @return void
     * @access protected
     */

    protected function loadData($path) {
        $this->path = $path;
        $this->name = basename($this->path);
        $res = $this->dbh->select(self::TABLE_NAME, true, array('upl_path'=>$this->path));
        if (is_array($res)) {
            list($res) = $res;
            $this->id = $res['upl_id'];
            $this->name = $res['upl_name'];
            $this->data = ($res['upl_data'])?unserialize($res['upl_data']):null;
        }
    }

    /**
     * Возвращает данные присоединенные к файлу
     *
     * @return mixed
     * @access public
     */

    public function getData() {
        return $this->data;
    }
    /**
     * Устанавливает данные
     *
     * @return void
     * @access public
     */

    public function setData($data) {
        $this->data = $data;
    }

    /**
     * Возвращает путь
     *
     * @return string
     * @access public
     */

    public function getPath() {
        return $this->path;
    }

    /**
     * Статический метод возвращающий тип файла
     *
     * @param string path путь к файлу
     * @return string
     * @access public
     */

    public static function getTypeInfo($path) {
        $result = self::IS_FILE;
        if (!file_exists($path)) {
        	throw new SystemException('ERR_NO_FILE', SystemException::ERR_WARNING, $path);
        }

        if (is_dir($path)) {
            $result = self::IS_FOLDER;
        }
        else {
            if(getimagesize($path))$result = self::IS_IMAGE;
        }

        return $result;
    }

    /**
     * Удаление из БД записи о файле
     *
     * @return void
     * @access public
     */

    public function delete() {
        $this->dbh->modify(QAL::DELETE, self::TABLE_NAME, null, array('upl_path'=>$this->getPath()));
    }

    /**
     * Переименование файла/папки
     *
     * @return bool
     * @access public
     */

    public function rename($name) {
        if($this->dbh->select(self::TABLE_NAME, array('upl_name'), array('upl_path'=>$this->getPath())) === true) {
            $this->dbh->modify(QAL::INSERT, self::TABLE_NAME, array('upl_name'=>$name,'upl_path'=>$this->getPath()));
        }
        else {
            $this->dbh->modify(QAL::UPDATE, self::TABLE_NAME, array('upl_name'=>$name), array('upl_path'=>$this->getPath()));
        }

    }
}
Return current item: Energine