energine
[ class tree: energine ] [ index: energine ] [ all elements ]

Source for file FileSystemObject.class.php

Documentation is available at FileSystemObject.class.php

  1. <?php
  2.  
  3. /**
  4.  * Содержит класс FileSystemObject
  5.  *
  6.  * @package energine
  7.  * @subpackage core
  8.  * @author dr.Pavka
  9.  * @copyright Energine 2006
  10.  * @version $Id$
  11.  */
  12.  
  13. //require_once('core/framework/DBWorker.class.php');
  14.  
  15. /**
  16.  * Абстрактный класс  - модель объекта файловой системы
  17.  *
  18.  * @package energine
  19.  * @subpackage core
  20.  * @author dr.Pavka
  21.  * @abstract
  22.  */
  23. abstract class FileSystemObject extends DBWorker {
  24.     /**
  25.      * Файл является папкой
  26.      *
  27.      */
  28.     const IS_FOLDER = 0;
  29.     /**
  30.      * Файл - изображение
  31.      *
  32.      */
  33.     const IS_IMAGE = 1;
  34.     /**
  35.      * Файл
  36.      *
  37.      */
  38.     const IS_FILE = 2;
  39.     /**
  40.      * Zip файл
  41.      */
  42.     const IS_ZIP = 3;
  43.  
  44.     /**
  45.      * Имя таблицы в которой хранится мета описания папки
  46.      *
  47.      */
  48.     const TABLE_NAME = 'share_uploads';
  49.     /**
  50.      * Полный путь к файлу
  51.      *
  52.      * @var string 
  53.      * @access private
  54.      */
  55.     private $path;
  56.     /**
  57.      * Имя папки
  58.      * Если существует описание в БД - берется из нее, если нет. то из $this->path
  59.      *
  60.      * @var string 
  61.      * @access private
  62.      */
  63.     private $name;
  64.  
  65.     /**
  66.      * Данные присоединенные к файлу
  67.      *
  68.      * @var mixed 
  69.      * @access private
  70.      */
  71.     private $data = null;
  72.  
  73.     /**
  74.      * Идентификатор записи, хранящей данные о папке в БД
  75.      * Может быть  пустым
  76.      *
  77.      * @var mixed 
  78.      * @access private
  79.      */
  80.     private $id = false;
  81.  
  82.     /**
  83.      * Конструктор класса
  84.      *
  85.      * @return void 
  86.      */
  87.     public function __construct({
  88.         parent::__construct();
  89.     }
  90.  
  91.     /**
  92.      * Возвращает объект в виде массива
  93.      * Если он не открыт, возвращается информация о самом объекте - иначе, о всех вложенных объектах
  94.      *
  95.      * @return array 
  96.      * @access public
  97.      */
  98.  
  99.     public function asArray({
  100.         $result array(
  101.         'upl_id'=>$this->id,
  102.         'upl_mime_type' => self::getTypeInfo($this->path),
  103.         'upl_name' => $this->name,
  104.         'upl_path' => $this->path,
  105.         'upl_data'=>$this->data
  106.         );
  107.         return $result;
  108.     }
  109.  
  110.     /**
  111.      * Загружает мета описание данных о объекте из БД
  112.      *
  113.      * @return void 
  114.      * @access protected
  115.      */
  116.  
  117.     protected function loadData($path{
  118.         $this->path = $path;
  119.         $this->name = basename($this->path);
  120.         $res $this->dbh->select(self::TABLE_NAMEtruearray('upl_path'=>$this->path));
  121.         if (is_array($res)) {
  122.             list($res$res;
  123.             $this->id = $res['upl_id'];
  124.             $this->name = $res['upl_name'];
  125.             $this->data = ($res['upl_data'])?unserialize($res['upl_data']):null;
  126.         }
  127.     }
  128.  
  129.     /**
  130.      * Возвращает данные присоединенные к файлу
  131.      *
  132.      * @return mixed 
  133.      * @access public
  134.      */
  135.  
  136.     public function getData({
  137.         return $this->data;
  138.     }
  139.     /**
  140.      * Устанавливает данные
  141.      *
  142.      * @return void 
  143.      * @access public
  144.      */
  145.  
  146.     public function setData($data{
  147.         $this->data = $data;
  148.     }
  149.  
  150.     /**
  151.      * Возвращает путь
  152.      *
  153.      * @return string 
  154.      * @access public
  155.      */
  156.  
  157.     public function getPath({
  158.         return $this->path;
  159.     }
  160.  
  161.     /**
  162.      * Статический метод возвращающий тип файла
  163.      *
  164.      * @param string path путь к файлу
  165.      * @return string 
  166.      * @access public
  167.      */
  168.  
  169.     public static function getTypeInfo($path{
  170.         $result self::IS_FILE;
  171.         if (!file_exists($path)) {
  172.             throw new SystemException('ERR_NO_FILE'SystemException::ERR_WARNING$path);
  173.         }
  174.  
  175.         if (is_dir($path)) {
  176.             $result self::IS_FOLDER;
  177.         }
  178.         elseif(pathinfo($pathPATHINFO_EXTENSION== 'zip'){
  179.             $zip new ZipArchive();
  180.             if($zip->open($pathZIPARCHIVE::CHECKCONS)){
  181.                 $zip->close();
  182.                 $result self::IS_ZIP;
  183.             }
  184.         }
  185.         elseif(@getimagesize($path)) {
  186.             $result self::IS_IMAGE;
  187.         }
  188.  
  189.         return $result;
  190.     }
  191.  
  192.     /**
  193.      * Удаление из БД записи о файле
  194.      *
  195.      * @return void 
  196.      * @access public
  197.      */
  198.  
  199.     public function delete({
  200.         $this->dbh->modify(QAL::DELETEself::TABLE_NAMEnullarray('upl_path'=>$this->getPath()));
  201.     }
  202.  
  203.     /**
  204.      * Переименование файла/папки
  205.      *
  206.      * @return bool 
  207.      * @access public
  208.      */
  209.  
  210.     public function rename($name{
  211.         if($this->dbh->select(self::TABLE_NAMEarray('upl_name')array('upl_path'=>$this->getPath())) === true{
  212.             $this->dbh->modify(QAL::INSERTself::TABLE_NAMEarray('upl_name'=>$name,'upl_path'=>$this->getPath()));
  213.         }
  214.         else {
  215.             $this->dbh->modify(QAL::UPDATEself::TABLE_NAMEarray('upl_name'=>$name)array('upl_path'=>$this->getPath()));
  216.         }
  217.  
  218.     }
  219. }
В создании документации нам помог: phpDocumentor