diff options
Diffstat (limited to 'codebase/db_filesystem.php')
-rw-r--r-- | codebase/db_filesystem.php | 345 |
1 files changed, 0 insertions, 345 deletions
diff --git a/codebase/db_filesystem.php b/codebase/db_filesystem.php deleted file mode 100644 index b3d16d2..0000000 --- a/codebase/db_filesystem.php +++ /dev/null @@ -1,345 +0,0 @@ -<?php -/* - @author dhtmlx.com - @license GPL, see license.txt -*/ -require_once('db_common.php'); -require_once('tree_connector.php'); - -/* -Most execution time is a standart functions for workin with FileSystem: is_dir(), dir(), readdir(), stat() -*/ - -class FileSystemDBDataWrapper extends DBDataWrapper { - - - // returns list of files and directories - public function select($source) { - $relation = $this->getFileName($source->get_relation()); - // for tree checks relation id and forms absolute path - if ($relation == '0') { - $relation = ''; - } else { - $path = $source->get_source(); - } - $path = $source->get_source(); - $path = $this->getFileName($path); - $path = realpath($path); - if ($path == false) { - return new FileSystemResult(); - } - - if (strpos(realpath($path.'/'.$relation), $path) !== 0) { - return new FileSystemResult(); - } - // gets files and directories list - $res = $this->getFilesList($path, $relation); - // sorts list - $res = $res->sort($source->get_sort_by(), $this->config->data); - return $res; - } - - - // gets files and directory list - private function getFilesList($path, $relation) { - $fileSystemTypes = FileSystemTypes::getInstance(); - LogMaster::log("Query filesystem: ".$path); - $dir = opendir($path.'/'.$relation); - $result = new FileSystemResult(); - // forms fields list - for ($i = 0; $i < count($this->config->data); $i++) { - $fields[] = $this->config->data[$i]['db_name']; - } - // for every file and directory of folder - while ($file = readdir($dir)) { - // . and .. should not be in output list - if (($file == '.')||($file == '..')) { - continue; - } - $newFile = array(); - // parse file name as Array('name', 'ext', 'is_dir') - $fileNameExt = $this->parseFileName($path.'/'.$relation, $file); - // checks if file should be in output array - if (!$fileSystemTypes->checkFile($file, $fileNameExt)) { - continue; - } - // takes file stat if it's need - if ((in_array('size', $fields))||(in_array('date', $fields))) { - $fileInfo = stat($path.'/'.$file); - } - - // for every field forms list of fields - for ($i = 0; $i < count($fields); $i++) { - $field = $fields[$i]; - switch ($field) { - case 'filename': - $newFile['filename'] = $file; - break; - case 'full_filename': - $newFile['full_filename'] = $path."/".$file; - break; - case 'size': - $newFile['size'] = $fileInfo['size']; - break; - case 'extention': - $newFile['extention'] = $fileNameExt['ext']; - break; - case 'name': - $newFile['name'] = $fileNameExt['name']; - break; - case 'date': - $newFile['date'] = date("Y-m-d H:i:s", $fileInfo['ctime']); - break; - } - $newFile['relation_id'] = $relation.'/'.$file; - $newFile['safe_name'] = $this->setFileName($relation.'/'.$file); - $newFile['is_folder'] = $fileNameExt['is_dir']; - } - // add file in output list - $result->addFile($newFile); - } - return $result; - } - - - // replaces '.' and '_' in id - private function setFileName($filename) { - $filename = str_replace(".", "{-dot-}", $filename); - $filename = str_replace("_", "{-nizh-}", $filename); - return $filename; - } - - - // replaces '{-dot-}' and '{-nizh-}' in id - private function getFileName($filename) { - $filename = str_replace("{-dot-}", ".", $filename); - $filename = str_replace("{-nizh-}", "_", $filename); - return $filename; - } - - - // parses file name and checks if is directory - private function parseFileName($path, $file) { - $result = Array(); - if (is_dir($path.'/'.$file)) { - $result['name'] = $file; - $result['ext'] = 'dir'; - $result['is_dir'] = 1; - } else { - $pos = strrpos($file, '.'); - $result['name'] = substr($file, 0, $pos); - $result['ext'] = substr($file, $pos + 1); - $result['is_dir'] = 0; - } - return $result; - } - - public function query($sql) { - } - - public function get_new_id() { - } - - public function escape($data) { - } - - public function get_next($res) { - return $res->next(); - } - -} - - -class FileSystemResult { - private $files; - private $currentRecord = 0; - - - // add record to output list - public function addFile($file) { - $this->files[] = $file; - } - - - // return next record - public function next() { - if ($this->currentRecord < count($this->files)) { - $file = $this->files[$this->currentRecord]; - $this->currentRecord++; - return $file; - } else { - return false; - } - } - - - // sorts records under $sort array - public function sort($sort, $data) { - if (count($this->files) == 0) { - return $this; - } - // defines fields list if it's need - for ($i = 0; $i < count($sort); $i++) { - $fieldname = $sort[$i]['name']; - if (!isset($this->files[0][$fieldname])) { - if (isset($data[$fieldname])) { - $fieldname = $data[$fieldname]['db_name']; - $sort[$i]['name'] = $fieldname; - } else { - $fieldname = false; - } - } - } - - // for every sorting field will sort - for ($i = 0; $i < count($sort); $i++) { - // if field, setted in sort parameter doesn't exist, continue - if ($sort[$i]['name'] == false) { - continue; - } - // sorting by current field - $flag = true; - while ($flag == true) { - $flag = false; - // checks if previous sorting fields are equal - for ($j = 0; $j < count($this->files) - 1; $j++) { - $equal = true; - for ($k = 0; $k < $i; $k++) { - if ($this->files[$j][$sort[$k]['name']] != $this->files[$j + 1][$sort[$k]['name']]) { - $equal = false; - } - } - // compares two records in list under current sorting field and sorting direction - if (((($this->files[$j][$sort[$i]['name']] > $this->files[$j + 1][$sort[$i]['name']])&&($sort[$i]['direction'] == 'ASC'))||(($this->files[$j][$sort[$i]['name']] < $this->files[$j + 1][$sort[$i]['name']])&&($sort[$i]['direction'] == 'DESC')))&&($equal == true)) { - $c = $this->files[$j]; - $this->files[$j] = $this->files[$j+1]; - $this->files[$j+1] = $c; - $flag = true; - } - } - } - } - return $this; - } - -} - - -// singleton class for setting file types filter -class FileSystemTypes { - - static private $instance = NULL; - private $extentions = Array(); - private $extentions_not = Array(); - private $all = true; - private $patterns = Array(); - // predefined types - private $types = Array( - 'image' => Array('jpg', 'jpeg', 'gif', 'png', 'tiff', 'bmp', 'psd', 'dir'), - 'document' => Array('txt', 'doc', 'docx', 'xls', 'xlsx', 'rtf', 'dir'), - 'web' => Array('php', 'html', 'htm', 'js', 'css', 'dir'), - 'audio' => Array('mp3', 'wav', 'ogg', 'dir'), - 'video' => Array('avi', 'mpg', 'mpeg', 'mp4', 'dir'), - 'only_dir' => Array('dir') - ); - - - static function getInstance() { - if (self::$instance == NULL) { - self::$instance = new FileSystemTypes(); - } - return self::$instance; - } - - // sets array of extentions - public function setExtentions($ext) { - $this->all = false; - $this->extentions = $ext; - } - - // adds one extention in array - public function addExtention($ext) { - $this->all = false; - $this->extentions[] = $ext; - } - - - // adds one extention which will not ouputed in array - public function addExtentionNot($ext) { - $this->extentions_not[] = $ext; - } - - - // returns array of extentions - public function getExtentions() { - return $this->extentions; - } - - // adds regexp pattern - public function addPattern($pattern) { - $this->all = false; - $this->patterns[] = $pattern; - } - - // clear extentions array - public function clearExtentions() { - $this->all = true; - $this->extentions = Array(); - } - - // clear regexp patterns array - public function clearPatterns() { - $this->all = true; - $this->patterns = Array(); - } - - // clear all filters - public function clearAll() { - $this->clearExtentions(); - $this->clearPatterns(); - } - - // sets predefined type - public function setType($type, $clear = false) { - $this->all = false; - if ($type == 'all') { - $this->all = true; - return true; - } - if (isset($this->types[$type])) { - if ($clear) { - $this->clearExtentions(); - } - for ($i = 0; $i < count($this->types[$type]); $i++) { - $this->extentions[] = $this->types[$type][$i]; - } - return true; - } else { - return false; - } - } - - - // check file under setted filter - public function checkFile($filename, $fileNameExt) { - if (in_array($fileNameExt['ext'], $this->extentions_not)) { - return false; - } - if ($this->all) { - return true; - } - - if ((count($this->extentions) > 0)&&(!in_array($fileNameExt['ext'], $this->extentions))) { - return false; - } - - for ($i = 0; $i < count($this->patterns); $i++) { - if (!preg_match($this->patterns[$i], $filename)) { - return false; - } - } - return true; - } -} - -?>
\ No newline at end of file |