mini.test.ru/ 0000751 0001750 0001750 00000000000 12564172645 012765 5 ustar alexey alexey mini.test.ru/index.php 0000644 0001750 0001750 00000002571 12552664430 014611 0 ustar alexey alexey 'localhost', 'user' => 'root', 'pass' => '123456', 'name' => 'rs_mini' ); // настройки базы } /* * метод получае настройку базы данных * * @access - public * @return - настройка * * @param string param - ключ в массиве настроек */ public static function getDB($param) { return (isset(self::$db[$param])) ? self::$db[$param] : FALSE; } } mini.test.ru/project/js/ 0000751 0001750 0001750 00000000000 12536057267 015050 5 ustar alexey alexey mini.test.ru/project/view/ 0000751 0001750 0001750 00000000000 12543470125 015374 5 ustar alexey alexey mini.test.ru/project/view/pub/ 0000751 0001750 0001750 00000000000 12550731732 016164 5 ustar alexey alexey mini.test.ru/project/css/ 0000751 0001750 0001750 00000000000 12536057263 015220 5 ustar alexey alexey mini.test.ru/project/content/ 0000751 0001750 0001750 00000000000 12536057336 016103 5 ustar alexey alexey mini.test.ru/project/modules/ 0000751 0001750 0001750 00000000000 12543467767 016114 5 ustar alexey alexey mini.test.ru/project/modules/pub/ 0000751 0001750 0001750 00000000000 12550731714 016662 5 ustar alexey alexey mini.test.ru/rs_mini.sql 0000664 0001750 0001750 00000007212 12564172645 015156 0 ustar alexey alexey -- MySQL dump 10.13 Distrib 5.5.44, for debian-linux-gnu (x86_64) -- -- Host: localhost Database: rs_mini -- ------------------------------------------------------ -- Server version 5.5.44-0ubuntu0.14.04.1 /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */; /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; /*!40103 SET TIME_ZONE='+00:00' */; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; -- -- Table structure for table `rs_connect` -- DROP TABLE IF EXISTS `rs_connect`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `rs_connect` ( `connect_id` int(11) NOT NULL AUTO_INCREMENT, `map_id` int(11) NOT NULL, `connect_value` varchar(255) DEFAULT NULL, `controller_id` int(11) NOT NULL, `connect_block` enum('top','center','bottom') NOT NULL, `connect_inherit` enum('true','false') NOT NULL, `connect_position` int(11) NOT NULL, PRIMARY KEY (`connect_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `rs_connect` -- LOCK TABLES `rs_connect` WRITE; /*!40000 ALTER TABLE `rs_connect` DISABLE KEYS */; /*!40000 ALTER TABLE `rs_connect` ENABLE KEYS */; UNLOCK TABLES; -- -- Table structure for table `rs_controller` -- DROP TABLE IF EXISTS `rs_controller`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `rs_controller` ( `controller_id` int(11) NOT NULL AUTO_INCREMENT, `controller_name` varchar(255) NOT NULL, PRIMARY KEY (`controller_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `rs_controller` -- LOCK TABLES `rs_controller` WRITE; /*!40000 ALTER TABLE `rs_controller` DISABLE KEYS */; /*!40000 ALTER TABLE `rs_controller` ENABLE KEYS */; UNLOCK TABLES; -- -- Table structure for table `rs_map` -- DROP TABLE IF EXISTS `rs_map`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `rs_map` ( `map_id` int(11) NOT NULL AUTO_INCREMENT, `map_parent` int(11) DEFAULT NULL, `map_alias` varchar(255) DEFAULT NULL, `map_name` varchar(255) NOT NULL, `map_view` varchar(255) NOT NULL, `map_system` enum('true','false') NOT NULL, `map_type` enum('static','dynamic') NOT NULL, PRIMARY KEY (`map_id`) ) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `rs_map` -- LOCK TABLES `rs_map` WRITE; /*!40000 ALTER TABLE `rs_map` DISABLE KEYS */; INSERT INTO `rs_map` VALUES (1,NULL,NULL,'Главная','','true','static'),(2,1,'test_alias','Тест','','true','dynamic'); /*!40000 ALTER TABLE `rs_map` ENABLE KEYS */; UNLOCK TABLES; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; -- Dump completed on 2015-08-16 23:42:13 mini.test.ru/rs-mini/ 0000751 0001750 0001750 00000000000 12561733721 014336 5 ustar alexey alexey mini.test.ru/rs-mini/img/ 0000751 0001750 0001750 00000000000 12536057274 015116 5 ustar alexey alexey mini.test.ru/rs-mini/lib/ 0000751 0001750 0001750 00000000000 12536057233 015103 5 ustar alexey alexey mini.test.ru/rs-mini/js/ 0000751 0001750 0001750 00000000000 12536057267 014760 5 ustar alexey alexey mini.test.ru/rs-mini/view/ 0000751 0001750 0001750 00000000000 12536057314 015307 5 ustar alexey alexey mini.test.ru/rs-mini/view/configurator/ 0000751 0001750 0001750 00000000000 12536057314 020011 5 ustar alexey alexey mini.test.ru/rs-mini/view/admin/ 0000751 0001750 0001750 00000000000 12536057307 016401 5 ustar alexey alexey mini.test.ru/rs-mini/css/ 0000751 0001750 0001750 00000000000 12536057263 015130 5 ustar alexey alexey mini.test.ru/rs-mini/core/ 0000751 0001750 0001750 00000000000 12564075711 015267 5 ustar alexey alexey mini.test.ru/rs-mini/core/sql.class.php 0000644 0001750 0001750 00000014640 12562427152 017712 0 ustar alexey alexey 0 все ОК. == -1 ошибка, или значение по умолчанию. == 0 запрос UPDATE ничего не обновил * * @var - integer * @access - public */ public $affectedRows = -1; /* * автоматически генерируемый ID, последнего запроса * * @var - integer * @access - public */ public $insertID = 0; /* * указатель на выборку * * @var - integer * @access - private */ private $resourceQuery = FALSE; /* * кол-во сделанных селект запросов * * @var - integer * @access - public */ public static $selectCount = 0; /* * указатель на соединение с MySQL * * @var - resource * @access - private */ private static $resource = FALSE; /* * подключаемся к БД * * @access - public * */ public static function setConnect() { // подключаемся к БД self::$resource = @mysqli_connect( config::getDB('server'), // сервер config::getDB('user'), // юзер config::getDB('pass'), // пароль юзера config::getDB('name') // база данных ); // если подключение прошло с ошибкой if (!self::$resource) die('Ошибка ' . CMS . ' v' . VERSION . ': При подключение к базе данных произошла ошибка'); // устанавливаем кодировку базы mysqli_set_charset(self::$resource, "utf8"); } /* * создание объекта и исполнение sql запроса * \core\sql::query('запрос') * * @access - public * @return - объект sql класса * * @param sql - SQL запрос */ public static function query($sql) { // поднимаем объект класса sql $obj = new sql(); // исполняем запрос $obj->resourceQuery = mysqli_query(self::$resource, $sql); // наполняем данные // кол-во выбранных строк с помощью SELECT $obj->numRows = @mysqli_num_rows($obj->resourceQuery); // кол-во затронутых строк последним INSERT, UPDATE, REPLACE или DELETE запросом $obj->affectedRows = @mysqli_affected_rows(self::$resource); // автоматически генерируемый ID, последнего запроса $obj->insertID = @mysqli_insert_id(self::$resource); // вертаем объект (для того что бы можно было // исполнить метод fetch(), или достучаться // до свойств с информацией) return $obj; } /* * метод получает выборку запроса * \core\sql::query('запрос')->fetch() * * @access - public * @return - ассоциативный массив с выбранными строками * из БД или FALSE если ничего небыло выбранно * */ public function fetch() { // массив для хранения строк выборки $resultList = array(); // ключ для формирование строки $i = 0; // если ресурс запроса пуст if ($this->resourceQuery === FALSE) // выводим false return FALSE; // +1 к кол-ву select запросов сделанных системой RS-MINI self::$selectCount++; // листаем строки выбокри while ($row = mysqli_fetch_assoc($this->resourceQuery)) { // листаем поля строки foreach ($row as $key => $value) // заполняем массив $resultList[$i][$key] = $value; // переключаем строку $i++; } // если выборка пустая if (empty($resultList)) { // пытаемся получить ошибку $error = mysqli_error(self::$resource); // если нет ошибок, то селект запрос просто вернул 0 строк if (empty($error)) // вертаем false return FALSE; // если ошибка есть, то показываем ее на экран echo $error; // закрываем подключение self::close(); // убиваем скрипт die(); } // возвращаем выборку return $resultList; } /* * метод закрывает подключение к БД * * @access - public * @return - true или false * */ public static function close() { return mysqli_close(self::$resource); } } mini.test.ru/rs-mini/core/abstractmodel.class.php 0000644 0001750 0001750 00000016773 12562427444 021754 0 ustar alexey alexey setName('имя')->insert(); * * В методе insert() модели "a" имя можно будет получить вот так: * * $name = $this->getName(); * * * * @access - public * @return - сам себя или сохраненное значение (все зависит от * того set или get метод был вызван) * * @param string name - имя вызываемого метода * @param array arguments - присланные аргументы в вызываемый метод */ public function __call($name, $arguments) { // ниже в комментариях приведен конкретный пример с методами getName() и setName(). // предаваемое значение - "Алексей" // приводим имя вызываемого метода к нижнему регистру // в случае если вызван метод setName(), то получим setname // в случае если вызван метод getName(), то получим getname $name = mb_strtolower($name); // делим имя вызываемого метода на части // в случае если вызван метод setName(), то получим set и name // в случае если вызван метод getName(), то получим get и name // в $action помещаем set или get $action = mb_substr($name, 0, 3); // в $argument помещаем часть имени метода (при вызове // getName() или setName() частью будет - name) $argument = mb_substr($name, 3, mb_strlen($name)-1); // в зависимости от того что в $action switch($action) { case 'get': // возвращаем из свойства call значение (в нашем примере из ключа name // получим значение "Алексей", если это значение записали путем вызова // метода setName() с значением "Алексей") return (isset($this->call[$argument])) ? $this->call[$argument] : NULL; break; case 'set': // сохраняем в свойстве call значение (в нашем примере в ключ name // свойства call будет передано значение "Алексей") $this->call[$argument] = $arguments[0]; // возвращаем объект модели return $this; break; } } /* * метод поднимает объект базы данных и исполняет запрос * * @access - protected * @return - объект класса sql * * @param string sql - скуль запрос */ protected function query($sql) { // исполняем запрос, и помещаем объект в свойство $obj = sql::query($sql); // запоминаем результат запроса $this->setNumRows($obj->numRows) ->setAffectedRows($obj->affectedRows) ->setInsertID($obj->insertID) ; // возвращаем объект return $obj; } } mini.test.ru/rs-mini/core/abstractview.class.php 0000644 0001750 0001750 00000005443 12556740776 021627 0 ustar alexey alexey dom = $dom; } /* * метод объявляет массив с объектами шаблонов * вызывается один раз из view.class.php * * @access - public * * @param array tplList - массив с шаблонами */ public function setTplList(&$tplList) { self::$tplList = $tplList; } /* * метод получает шаблон по имени * * @access - public * @return - сам себя * * @param string name - имя шаблона */ public function getTpl($name) { // сбрасываем свойства выбора шаблона $this->currentTpl = FALSE; // если вызываемый шаблон существует if (isset(self::$tplList[$name])) // перенесим его объект в свойство выбора $this->currentTpl = self::$tplList[$name]; return $this; } /* * запуск шаблона (!!!вызов производить только через этот метод) * * @access - public * */ public function run() { // если выбор был сделан if ($this->currentTpl) // получаем ответ шаблона $this->currentTpl->getResponse(); // в противном случае ничего не произойдет } /* * получить ответ шаблона * * @access - public * */ public function getResponse() { } } mini.test.ru/rs-mini/core/dom.class.php 0000644 0001750 0001750 00000016264 12551722357 017701 0 ustar alexey alexey node запишится этот объект. если в качестве параемтера передено строка (т.е. имя нового узла) * то на основе этого имени поднимется новая копия объекта класса dom * * @access - public * @return - возвращает созданный узел * * @param string/object $data - данные содержащие имя нового узла или объект дома */ public function addNode($data) { $node = (!is_object($data)) ? new dom() : $data; $this->node[] = (!is_object($data)) ? $node->setName($data) : $node; return $node; } /* * прописываем новый атрибут в текущий объект класса dom * * @access - public * @return - сам себя * * @param string name - имя атрибута * @param string value - значение атрибута */ public function addAttr($name, $value) { $this->attr[$name] = $value; return $this; } /* * получаем узел (объект) по имени из массива $this->node. * * @access - public * @return - узел или FALSE * * @param string name - имя узла */ public function getNode($name) { // листаем дочернии узлы foreach ($this->node as $node) // если имя из объекта совпадает с искомым именем if ($node->name == $name) return $node; // по умолчанию метод возвращает фалс return FALSE; } /* * получаем значение атрибута. Узел выберается с помощью метода getNode() или getChildren() * * @access - public * @return - значение атрибута или FALSE в случае неудачи * * @param string name - имя атрибута */ public function getAttr($name) { return (isset($this->attr[$name])) ? $this->attr[$name] : FALSE; } /* * получаем весь дом целиком в виде массива * * @access - public * @return - массив с всеми узлами и их атрибутами * */ public function getDom() { return $this->collectNode($this->node); } /* * рекурсивно собираем узлы (вспомогательный метод метода getDom()) вертая массив вот такой структуры * [0] * [name] => имя, * [attr] => массив атрибутов, * [node] => * [0] * [name] => имя, * [attr] => массив атрибутов, * [node] => array() * [1] * [name] => имя, * [attr] => массив атрибутов, * [node] => * [0] * [name] => имя, * [attr] => массив атрибутов, * [node] => array() * * @access - private * @return - массив с узлом * * @param array nodeList - список узлов (объектов dom) */ private function collectNode($nodeList) { $nodes = array(); foreach ($nodeList as $key => $node) $nodes[] = array( 'name' => $node->name, 'attr' => $node->attr, 'node' => (count($node->node) > 0) ? $this->collectNode($node->node) : array() ); return $nodes; } /* * получаем массив с вложенными узлами (объекты) из текущего узла * * @access - public * @return - массив с узлами или FALSE * * @param string name - имя узла */ public function getChildren($name) { // массив с выбранными узлами $nodeList = array(); // листаем дочернии узлы foreach ($this->node as $node) // если имя из объекта совпадает с искомым именем if ($node->name == $name) // заполняем выборку узлом $nodeList[] = $node; // если небыло выбрано ни одного узла, то фалсе. в противном случае список узлов return (empty($nodeList)) ? FALSE : $nodeList; } /* * проверяем есть ли узлы в выбранном узле * * @access - public * @return - число узлов если они есть, или FALSE если нет * * @param string name - имя узла */ public function count($name) { // массив с выбранными узлами $nodeList = array(); // листаем дочернии узлы foreach ($this->node as $node) // если имя из объекта совпадает с искомым именем if ($node->name == $name) // заполняем выборку узлом $nodeList[] = $node; // если небыло выбрано ни одного узла, то фалсе. в противном случае кол-во узлов return (empty($nodeList)) ? FALSE : count($nodeList); } /* * метод устанавливает имя узла * * @access - private * @return - сам себя * * @param string name - имя узла */ private function setName($name) { $this->name = $name; return $this; } } mini.test.ru/rs-mini/core/page.class.php 0000644 0001750 0001750 00000003455 12553507764 020041 0 ustar alexey alexey call[$argument])) ? $this->call[$argument] : null; break; case 'set': $this->call[$argument] = $arguments[0]; return $this; break; } } /* * получаем шаблон, все контроллеры и их параметры открываемой страницы * * @access - public * @return - массив с данными или false если ничего не найдено */ public function getPage() { // получаем адрес страницы $uri = request::getHttpServer('REQUEST_URI')->toUri(); // если адрес равен null выкидываем false if (is_null($uri)) return FALSE; // просто бьем строку на массив $uri = explode('/', $uri); // удаляем последний элемент массива, так как он всегда пустой unset($uri[(count($uri) - 1)]); // получаем все открываемые узлы // родитель по умолчанию NULL (главная страница) $parent = NULL; foreach ($uri as $key => $alias) { // получаем страницу if (!$page = $this->setAlias($alias)->setParent($parent)->getNode()) return FALSE; // запоминаем ID страницы, это наш родитель в следующей итерации $parent = $page['map_id']; // создаем объект страницы $this->pageList[] = new page($page); } return TRUE; } /* * метод получения узла определенной ветки * * @access - private * @return - массив с структурой сайта или false если ничего не найдено * * @param integer getParent() - родитель предшествующего узла * @param string getAlias() - алиас узла */ private function getNode() { // с начало пытаемся получить страницу как статичную $sql = '' . 'SELECT' . ' m.map_id AS map_id,' . ' m.map_parent AS map_parent,' . ' m.map_alias AS map_alias,' . ' m.map_name AS map_name,' . ' m.map_view AS map_view,' . ' m.map_system AS map_system,' . ' m.map_type AS map_type' . ' FROM' . ' rs_map AS m' . ' WHERE' . ' m.map_parent ' . ( (is_null($this->getParent())) ? 'IS NULL' : '= \'' . $this->getParent() . '\'' ) . ' AND m.map_alias ' . ( ($this->getAlias() == '') ? 'IS NULL' : '= \'' . $this->getAlias() . '\'' ) . ' AND m.map_type = \'static\'' ; // если выборка дала результат if ($resultList = sql::query($sql)->fetch()) { // запоминаем алиас динамичного узла. // так как узел статичный, то мы записываем туда NULL $resultList[0]['dynamic_alias'] = NULL; // возвращаем результат return $resultList[0]; } // если статичный узел был не найден, пытаемся найти динамичный $sql = '' . 'SELECT' . ' m.map_id AS map_id,' . ' m.map_parent AS map_parent,' . ' m.map_alias AS map_alias,' . ' m.map_name AS map_name,' . ' m.map_view AS map_view,' . ' m.map_system AS map_system,' . ' m.map_type AS map_type' . ' FROM' . ' rs_map AS m' . ' WHERE' . ' m.map_parent ' . ( (is_null($this->getParent())) ? 'IS NULL' : '= \'' . $this->getParent() . '\'' ) . ' AND m.map_type = \'dynamic\'' ; // если выборка не дала результата if (!$resultList = sql::query($sql)->fetch()) // вертаем false return FALSE; // запоминаем динамичный алиас (реально записанный в БД) $resultList[0]['dynamic_alias'] = $resultList[0]['map_alias']; // перезаписываем псевдоним на тот что в адресной строке $resultList[0]['map_alias'] = $this->getAlias(); // возвращаем результат return $resultList[0]; } } mini.test.ru/rs-mini/core/abstractcontroller.class.php 0000644 0001750 0001750 00000011332 12555162215 023013 0 ustar alexey alexey dom = $dom; $this->paramList = $paramList; } /* * метод возвращает заголовок страницы * * @access - public * * @param string caption - системный заголовок */ public function getCaption($caption) { return $caption; } /* * метод позволит проверить некоторые данные на валидацию. * запускается для каждого контроллера (за исключением отключенных) * * @access - public * @return - true или false (404 ошибка) * */ public function validate() { return TRUE; } /* * запуск контроллера. основной метод контроллера. * если не создать подобный метод (полиморфизм) в дочернем классе * контроллер выдаст 404-ую ошибку * * @access - public * @return - true или false (404 ошибка) * */ public function run() { return FALSE; } /* * метод запоминает значение динамичной страницы. * отрабатывает при сборке контроллеров в приложении * системы. необходим, что бы псевдоним динамической страницы * можно было получить из любого подключенного контроллера * * @access - public * @return - значение дин страницы * * @param string name - имя параметра */ public function setDynamicValue($name, $value) { self::$dynamicValue[$name] = $value; } /* * метод получает значение динамичной страницы по имени * * @access - protected * @return - значение дин страницы * * @param string name - имя параметра */ protected function getDynamicValue($name) { return (isset(self::$dynamicValue[$name])) ? self::$dynamicValue[$name] : NULL; } /* * метод получает значение параметра по имени. * если значение содержит запятые, то оно (значение) вернется не * в виде строки, а в виде массива * * @access - protected * @return - значение параметра * * @param string name - имя параметра */ protected function getParam($name) { if (!isset($this->paramList[$name])) return NULL; if (!preg_match('/[\,]+/', $this->paramList[$name])) return $this->paramList[$name]; $params = explode(',', $this->paramList[$name]); foreach ($params as $key => $param) $params[$key] = trim($param); return $params; } } mini.test.ru/rs-mini/core/controller.class.php 0000644 0001750 0001750 00000003576 12553507725 021311 0 ustar alexey alexey getPage()) self::notFound(); // тест работы роутинга // просматриваем массив объектов страниц ?>