<?php
/**
* СодеÑÐ¶Ð¸Ñ ÐºÐ»Ð°ÑÑ Uploads
*
* @package energine
* @subpackage core
* @author dr.Pavka
* @copyright ColoCall 2006
* @version $Id: DirectoryObject.class.php,v 1.6 2007/12/17 14:16:03 pavka Exp $
*/
//require_once('core/framework/FileSystemObject.class.php');
//require_once('core/framework/FileObject.class.php');
/**
* ÐлаÑÑ Ð¿ÑедназнаÑеннÑй Ð´Ð»Ñ Ð¾Ð±ÑабоÑки набоÑа FileObject
*
* @package energine
* @subpackage core
*/
class DirectoryObject extends FileSystemObject {
/**
* Directory handle
*
* @var resource
* @access private
*/
private $dirHandle = null;
/**
* ÐаÑÑив Ñайлов
*
* @var array
* @access private
*/
private $files = array();
/**
* ТекÑÑий клÑÑ
*
* @var int
* @access private
*/
private $iterator = 0;
/**
* ÐонÑÑÑÑкÑÐ¾Ñ ÐºÐ»Ð°ÑÑа
*
* @return void
*/
public function __construct() {
parent::__construct();
}
/**
* СÑаÑиÑеÑкий меÑод загÑÑзки возвÑаÑаÑÑий self
*
* @param string пÑÑÑ Ðº ÑайлÑ
* @return DirectoryObject
* @access public
* @static
*/
public static function loadFrom($path) {
if (!file_exists($path) || !is_dir($path)) {
throw new SystemException('ERR_DEV_NO_FILE', SystemException::ERR_DEVELOPER, $path);
}
if (!is_writeable($path)) {
throw new SystemException('ERR_DEV_DIR_NOT_WRITABLE', SystemException::ERR_DEVELOPER, $path);
}
$result = new DirectoryObject();
$result->loadData($path);
return $result;
}
/**
* ÐеÑÑÑÑкÑÐ¾Ñ Ð·Ð°ÐºÑÑÐ²Ð°ÐµÑ Ð¾ÑкÑÑÑÑй ÑеÑÑÑÑ
*
* @return void
* @access public
*/
public function __destruct() {
if (!empty($this->dirHandle)) {
closedir($this->dirHandle);
}
}
/**
* ÐÑкÑÑÐ²Ð°ÐµÑ Ð´Ð¸ÑекÑоÑиÑ
*
* @return void
* @access public
*/
public function open() {
if (!($this->dirHandle = opendir($this->getPath()))) {
throw new SystemException('ERR_DEV_UNABLE_OPEN_DIR', SystemException::ERR_DEVELOPER, $this->path);
}
while (false !== ($fileName = readdir($this->dirHandle))) {
if (substr($fileName, 0, 1) != '.' && $fileName != 'CVS') {
$fullPath = $this->getPath().'/'.$fileName;
if (isset($_POST['imageonly']) && !in_array(self::getTypeInfo($fullPath), array(self::IS_IMAGE, self::IS_FOLDER ))) {
//dummy
}
else {
$this->files[] = (is_dir($fullPath))?DirectoryObject::loadFrom($fullPath):FileObject::loadFrom($fullPath);
}
}
}
}
/**
* Создание папки
*
* @param array даннÑе папки
* @return boolean
* @access public
*/
public function create($data) {
$result = false;
if (!isset($data[self::TABLE_NAME])) {
throw new SystemException('ERR_DEV_INSUFFICIENT_DATA', SystemException::ERR_DEVELOPER);
}
$data[self::TABLE_NAME]['upl_path'] = $data['path'].'/'.$data[self::TABLE_NAME]['upl_path'];
unset($data['path']);
$data = $data[self::TABLE_NAME];
if (!file_exists($data['upl_path'])) {
$result = @mkdir($data['upl_path']);
}
if ($result) {
$this->dbh->modify(QAL::INSERT, self::TABLE_NAME, $data);
}
return $result;
}
/**
* Удаление папки
*
* @return boolean
* @access public
*/
public function delete() {
if (@rmdir($this->getPath())) {
parent::delete();
}
}
/**
* ÐеÑеÑ
Ð¾Ð´Ð¸Ñ Ðº ÑледÑÑÑÐµÐ¼Ñ Ð¾Ð±ÑекÑÑ
*
* @return type
* @access public
*/
public function next() {
$this->iterator++;
}
/**
* ÐеÑемеÑаеÑÑÑ Ð½Ð° пеÑвÑй ÑлеменÑ
*
* @return void
* @access public
*/
public function rewind() {
$this->iterator = 0;
}
/**
* ÐозвÑаÑÐ°ÐµÑ ÑекÑÑий обÑекÑ
*
* @return mixed
* @access public
*/
public function current() {
return $this->files[$this->iterator];
}
/**
* ÐозвоÑаÑÐ°ÐµÑ ÐºÐ»ÑÑ ÑекÑÑего обÑекÑа
*
* @return int
* @access public
*/
public function key() {
return $this->iterator;
}
/**
* ÐÑовеÑÑÐµÑ ÑÑÑеÑÑвÑÐµÑ Ð»Ð¸ ÑекÑÑий елеменÑ
*
* @return boolean
* @access public
*/
public function valid() {
return !empty($this->dirHandle) && $this->iterator<sizeof($this->files);
}
/**
* ÐозвÑаÑÐ°ÐµÑ Ð¾Ð±ÑÐµÐºÑ Ð² виде маÑÑива
* ÐÑли он не оÑкÑÑÑ, возвÑаÑаеÑÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ Ñамом обÑекÑÑе - инаÑе, о вÑеÑ
вложеннÑÑ
обÑекÑаÑ
*
* @return array
* @access public
*/
public function asArray() {
$result = array();
if (empty($this->dirHandle)) {
$result = parent::asArray();
}
else {
foreach ($this->files as $file) {
$data = $file->asArray();
$result[] = $data;
}
usort($result, array($this, 'sortFileNames'));
}
return $result;
}
/**
* СоÑÑиÑовка ÑодеÑжимого папки по алÑавиÑÑ
*
* @return int
* @access private
*/
private function sortFileNames($current, $next) {
return strcasecmp($current['upl_name'], $next['upl_name']);
}
}