Source for file DirectoryObject.class.php

Documentation is available at DirectoryObject.class.php

  1. /**
  2.  * Содержит класс Uploads
  3.  *
  4.  * @package energine
  5.  * @subpackage core
  6.  * @author dr.Pavka
  7.  * @copyright ColoCall 2006
  8.  * @version $Id: fsource_energine_core_frameworkDirectoryObject.class.php.html,v 1.1 2007/09/17 14:32:33 pavka Exp $
  9.  */
  10.  
  11. require_once('core/framework/FileSystemObject.class.php');
  12. require_once('core/framework/FileObject.class.php');
  13.  
  14. /**
  15.  * Класс предназначенный для обработки набора FileObject
  16.  *
  17.  * @package energine
  18.  * @subpackage core
  19.  */
  20.  
  21. class DirectoryObject extends FileSystemObject {
  22.     /**
  23.      * Directory handle
  24.      *
  25.      * @var resource 
  26.      * @access private
  27.      */
  28.     private $dirHandle = null;
  29.  
  30.     /**
  31.      * Массив файлов
  32.      *
  33.      * @var array 
  34.      * @access private
  35.      */
  36.     private $files = array();
  37.  
  38.     /**
  39.      * Текущий ключ
  40.      *
  41.      * @var int 
  42.      * @access private
  43.      */
  44.     private $iterator = 0;
  45.  
  46.     /**
  47.      * Конструктор класса
  48.      *
  49.      * @return void 
  50.      */
  51.     public function __construct({
  52.         parent::__construct();
  53.     }
  54.  
  55.     /**
  56.      * Статический метод загрузки возвращающий self
  57.      *
  58.      * @param string путь к файлу
  59.      * @return DirectoryObject 
  60.      * @access public
  61.      * @static
  62.      */
  63.  
  64.     public static function loadFrom($path{
  65.         if (!file_exists($path|| !is_dir($path)) {
  66.             throw new SystemException('ERR_DEV_NO_FILE'SystemException::ERR_DEVELOPER$path);
  67.         }
  68.         if (!is_writeable($path)) {
  69.             throw new SystemException('ERR_DEV_DIR_NOT_WRITABLE'SystemException::ERR_DEVELOPER$path);
  70.         }
  71.         $result new DirectoryObject();
  72.         $result->loadData($path);
  73.         return $result;
  74.     }
  75.  
  76.     /**
  77.      * Деструктор закрывает открытый ресурс
  78.      *
  79.      * @return void 
  80.      * @access public
  81.      */
  82.  
  83.     public function __destruct({
  84.         if (!empty($this->dirHandle)) {
  85.             closedir($this->dirHandle);
  86.         }
  87.     }
  88.  
  89.     /**
  90.      * Открывает директорию
  91.      *
  92.      * @return void 
  93.      * @access public
  94.      */
  95.  
  96.     public function open({
  97.         if (!($this->dirHandle = opendir($this->getPath()))) {
  98.             throw new SystemException('ERR_DEV_UNABLE_OPEN_DIR'SystemException::ERR_DEVELOPER$this->path);
  99.         }
  100.         while (false !== ($fileName = readdir($this->dirHandle))) {
  101.             if (substr($fileName01!= '.' && $fileName != 'CVS'{
  102.                 $fullPath $this->getPath().'/'.$fileName;
  103.  
  104.                 if (isset($_POST['imageonly']&& !in_array(self::getTypeInfo($fullPathtrue)array(self::IMAGE_TYPE_FAMILYself::FOLDER_TYPE_FAMILY ))) {
  105.                     //dummy
  106.                 }
  107.                 else {
  108.                     $this->files[(is_dir($fullPath))?DirectoryObject::loadFrom($fullPath):FileObject::loadFrom($fullPath);
  109.                 }
  110.             }
  111.         }
  112.     }
  113.  
  114.     /**
  115.      * Создание папки
  116.      *
  117.      * @param array данные папки
  118.      * @return boolean 
  119.      * @access public
  120.      */
  121.  
  122.     public function create($data{
  123.         $result false;
  124.         if (!isset($data[self::TABLE_NAME])) {
  125.             throw new SystemException('ERR_DEV_INSUFFICIENT_DATA'SystemException::ERR_DEVELOPER);
  126.         }
  127.  
  128.         $data[self::TABLE_NAME]['upl_path'$data['path'].'/'.$data[self::TABLE_NAME]['upl_path'];
  129.         unset($data['path']);
  130.         $data $data[self::TABLE_NAME];
  131.  
  132.         if (!file_exists($data['upl_path'])) {
  133.             $result @mkdir($data['upl_path']);
  134.         }
  135.  
  136.         if ($result{
  137.             $this->dbh->modify(QAL::INSERTself::TABLE_NAME$data);
  138.         }
  139.         return $result;
  140.     }
  141.  
  142.     /**
  143.      * Удаление папки
  144.      *
  145.      * @return boolean 
  146.      * @access public
  147.      */
  148.  
  149.     public function delete({
  150.         if (@rmdir($this->getPath())) {
  151.             parent::delete();
  152.         }
  153.     }
  154.  
  155.     /**
  156.      * Переходит к следующему объекту
  157.      *
  158.      * @return type 
  159.      * @access public
  160.      */
  161.  
  162.     public function next({
  163.         $this->iterator++;
  164.     }
  165.  
  166.     /**
  167.      * Перемещается на первый єлемент
  168.      *
  169.      * @return void 
  170.      * @access public
  171.      */
  172.  
  173.     public function rewind({
  174.         $this->iterator = 0;
  175.     }
  176.  
  177.     /**
  178.      * Возвращает текущий объект
  179.      *
  180.      * @return mixed 
  181.      * @access public
  182.      */
  183.  
  184.     public function current({
  185.         return $this->files[$this->iterator];
  186.     }
  187.  
  188.     /**
  189.      * Возворащает ключ текущего объекта
  190.      *
  191.      * @return int 
  192.      * @access public
  193.      */
  194.  
  195.     public function key({
  196.         return $this->iterator;
  197.     }
  198.  
  199.     /**
  200.      * Проверяет существует ли текущий елемент
  201.      *
  202.      * @return boolean 
  203.      * @access public
  204.      */
  205.  
  206.     public function valid({
  207.         return !empty($this->dirHandle&& $this->iterator($this->files);
  208.     }
  209.  
  210.     /**
  211.      * Возвращает объект в виде массива
  212.      * Если он не открыт, возвращается информация о самом объексте - иначе, о всех вложенных объектах
  213.      *
  214.      * @return array 
  215.      * @access public
  216.      */
  217.  
  218.     public function asArray({
  219.         $result array();
  220.         if (empty($this->dirHandle)) {
  221.             $result parent::asArray();
  222.         }
  223.         else {
  224.             foreach ($this->files as $file{
  225.                 $data $file->asArray();
  226.                 $result[$data;
  227.             }
  228.  
  229.         }
  230.         return $result;
  231.     }
  232. }

Documentation generated on Mon, 17 Sep 2007 13:27:28 +0300 by phpDocumentor 1.4.0a2