Перекодировка в utf-8
This commit is contained in:
parent
43f501a5e2
commit
df2e65a670
80 changed files with 668 additions and 668 deletions
|
|
@ -299,7 +299,7 @@ class PHPTAL_RepeatController implements Iterator
|
||||||
* Keeps track of variable contents when using grouping in a path (first/ and last/)
|
* Keeps track of variable contents when using grouping in a path (first/ and last/)
|
||||||
*
|
*
|
||||||
* @package phptal
|
* @package phptal
|
||||||
* @author Iván Montes <drslump@pollinimini.net>
|
* @author Ivбn Montes <drslump@pollinimini.net>
|
||||||
*/
|
*/
|
||||||
class PHPTAL_RepeatController_Groups {
|
class PHPTAL_RepeatController_Groups {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Интерфейс к массиву и обьекту как к коллекции
|
* Интерфейс к массиву и обьекту как к коллекции
|
||||||
*/
|
*/
|
||||||
class Adapter
|
class Adapter
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* Коллекция
|
* Коллекция
|
||||||
*
|
*
|
||||||
* package core
|
* package core
|
||||||
*/
|
*/
|
||||||
|
|
@ -14,7 +14,7 @@ class Collection implements ArrayAccess
|
||||||
protected $data = array();
|
protected $data = array();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Преобразование массива в коллекцию
|
* Преобразование массива в коллекцию
|
||||||
*
|
*
|
||||||
* @param array $data
|
* @param array $data
|
||||||
*/
|
*/
|
||||||
|
|
@ -25,7 +25,7 @@ class Collection implements ArrayAccess
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Преобразование коллекции в массив
|
* Преобразование коллекции в массив
|
||||||
*/
|
*/
|
||||||
public function export()
|
public function export()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -6,17 +6,17 @@ class HttpConnection
|
||||||
const POST = "POST";
|
const POST = "POST";
|
||||||
const GET = "GET";
|
const GET = "GET";
|
||||||
|
|
||||||
private $param = array(); // Параметры запроса
|
private $param = array(); // Параметры запроса
|
||||||
public $data = null; // Содержание
|
public $data = null; // Содержание
|
||||||
public $url; // Адресс
|
public $url; // Адресс
|
||||||
public $method = self::GET; // Метод
|
public $method = self::GET; // Метод
|
||||||
public $port = 80;
|
public $port = 80;
|
||||||
public $host = "";
|
public $host = "";
|
||||||
public $proxy_host = false;
|
public $proxy_host = false;
|
||||||
public $proxy_port = false;
|
public $proxy_port = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Возвращает заголовок соединения
|
* Возвращает заголовок соединения
|
||||||
*/
|
*/
|
||||||
public function getHeader()
|
public function getHeader()
|
||||||
{
|
{
|
||||||
|
|
@ -31,7 +31,7 @@ class HttpConnection
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Установка параметров запроса
|
* Установка параметров запроса
|
||||||
* @parma string $name
|
* @parma string $name
|
||||||
* @parma string $value
|
* @parma string $value
|
||||||
*/
|
*/
|
||||||
|
|
@ -41,7 +41,7 @@ class HttpConnection
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Метод запроса GET или POST
|
* Метод запроса GET или POST
|
||||||
*/
|
*/
|
||||||
public function setMethod($method)
|
public function setMethod($method)
|
||||||
{
|
{
|
||||||
|
|
@ -60,7 +60,7 @@ class HttpConnection
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Содержание запроса
|
* Содержание запроса
|
||||||
*/
|
*/
|
||||||
public function setContent($data)
|
public function setContent($data)
|
||||||
{
|
{
|
||||||
|
|
@ -69,7 +69,7 @@ class HttpConnection
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Посылает запрос и возвращает страницу
|
* Посылает запрос и возвращает страницу
|
||||||
*/
|
*/
|
||||||
public function getPage()
|
public function getPage()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Обрабатывает HTTP ответ
|
* Обрабатывает HTTP ответ
|
||||||
*/
|
*/
|
||||||
class HttpConnectionResponse
|
class HttpConnectionResponse
|
||||||
{
|
{
|
||||||
|
|
@ -17,7 +17,7 @@ class HttpConnectionResponse
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Обработка HTTP ответа
|
* Обработка HTTP ответа
|
||||||
*/
|
*/
|
||||||
private function parseMessage()
|
private function parseMessage()
|
||||||
{
|
{
|
||||||
|
|
@ -48,7 +48,7 @@ class HttpConnectionResponse
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Обработка строки HTTP ответа
|
* Обработка строки HTTP ответа
|
||||||
*/
|
*/
|
||||||
private function getLine()
|
private function getLine()
|
||||||
{
|
{
|
||||||
|
|
@ -60,7 +60,7 @@ class HttpConnectionResponse
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Значение параметра HTTP ответа
|
* Значение параметра HTTP ответа
|
||||||
*/
|
*/
|
||||||
public function getParameter($name)
|
public function getParameter($name)
|
||||||
{
|
{
|
||||||
|
|
@ -73,7 +73,7 @@ class HttpConnectionResponse
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Состояние
|
* Состояние
|
||||||
*/
|
*/
|
||||||
public function getCode()
|
public function getCode()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -14,9 +14,9 @@ require_once 'core/widgets/setup.php';
|
||||||
require_once 'core/widgets/listtable.php';
|
require_once 'core/widgets/listtable.php';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Переименовать контроллер !! (StubController, CrudController, PageController, BaseController) ModelController
|
* Переименовать контроллер !! (StubController, CrudController, PageController, BaseController) ModelController
|
||||||
* Возможно нужен еще класс с мета действиями как для actionIndex <= metaActionIndex либо с классам для этих действий
|
* Возможно нужен еще класс с мета действиями как для actionIndex <= metaActionIndex либо с классам для этих действий
|
||||||
* Есть класс для управлениями действиями а есть сами действия в виде классов или функций !!
|
* Есть класс для управлениями действиями а есть сами действия в виде классов или функций !!
|
||||||
*/
|
*/
|
||||||
class Controller_Model extends Controller_Action
|
class Controller_Model extends Controller_Action
|
||||||
{
|
{
|
||||||
|
|
@ -24,7 +24,7 @@ class Controller_Model extends Controller_Action
|
||||||
public $schemaSearch = array();
|
public $schemaSearch = array();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* FIXME: Лучше $this->table->setHeader
|
* FIXME: Лучше $this->table->setHeader
|
||||||
*/
|
*/
|
||||||
public $tableSchema = null;
|
public $tableSchema = null;
|
||||||
public $formSchema = array();
|
public $formSchema = array();
|
||||||
|
|
@ -44,8 +44,8 @@ class Controller_Model extends Controller_Action
|
||||||
*/
|
*/
|
||||||
function setUp()
|
function setUp()
|
||||||
{
|
{
|
||||||
$this->table->addMenuItem($this->aUrl('delete'), 'удалить', false, 'all', 'warning');
|
$this->table->addMenuItem($this->aUrl('delete'), 'удалить', false, 'all', 'warning');
|
||||||
//$this->table->addMenuItem($this->nUrl('form'), 'редактировать', 'edit-24.png');
|
//$this->table->addMenuItem($this->nUrl('form'), 'редактировать', 'edit-24.png');
|
||||||
}
|
}
|
||||||
|
|
||||||
function saveParameters($args, $list)
|
function saveParameters($args, $list)
|
||||||
|
|
@ -66,12 +66,12 @@ class Controller_Model extends Controller_Action
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Удаление сторк из таблицы
|
* Удаление сторк из таблицы
|
||||||
*/
|
*/
|
||||||
public function actionDelete(HttpRequest $request)
|
public function actionDelete(HttpRequest $request)
|
||||||
{
|
{
|
||||||
$model = $this->getModel($this->useModel);
|
$model = $this->getModel($this->useModel);
|
||||||
// Почему table_item ???
|
// Почему table_item ???
|
||||||
$list = ($request->get('table_item')) ? $request->get('table_item'): $request->get('id');
|
$list = ($request->get('table_item')) ? $request->get('table_item'): $request->get('id');
|
||||||
$model->deleteList($list);
|
$model->deleteList($list);
|
||||||
|
|
||||||
|
|
@ -79,7 +79,7 @@ class Controller_Model extends Controller_Action
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Ответ на запрос по поиску
|
* Ответ на запрос по поиску
|
||||||
*/
|
*/
|
||||||
public function actionSearch(HttpRequest $request)
|
public function actionSearch(HttpRequest $request)
|
||||||
{
|
{
|
||||||
|
|
@ -90,7 +90,7 @@ class Controller_Model extends Controller_Action
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Список элементов
|
* Список элементов
|
||||||
*/
|
*/
|
||||||
public function actionList(HttpRequest $request)
|
public function actionList(HttpRequest $request)
|
||||||
{
|
{
|
||||||
|
|
@ -110,47 +110,47 @@ class Controller_Model extends Controller_Action
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Сохранение формы
|
* Сохранение формы
|
||||||
*/
|
*/
|
||||||
function beforeSave(/*Model*/ $item, Collection $request)
|
function beforeSave(/*Model*/ $item, Collection $request)
|
||||||
{
|
{
|
||||||
if (empty($this->formSchema)) {
|
if (empty($this->formSchema)) {
|
||||||
$this->setFormSchema();
|
$this->setFormSchema();
|
||||||
}
|
}
|
||||||
// Сделать отображение Формы в обьект и обратно <-- Убрать в beforeSave
|
// Сделать отображение Формы в обьект и обратно <-- Убрать в beforeSave
|
||||||
foreach ($this->formSchema as $key => $conv) {
|
foreach ($this->formSchema as $key => $conv) {
|
||||||
list($value, $type) = $conv;
|
list($value, $type) = $conv;
|
||||||
$item->$value = call_user_func(array('Cast', 'to_' . $type), $request->get($key)); // Здесть нужно преобразовывать тип значения
|
$item->$value = call_user_func(array('Cast', 'to_' . $type), $request->get($key)); // Здесть нужно преобразовывать тип значения
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Обновление формы
|
* Обновление формы
|
||||||
*/
|
*/
|
||||||
function formUpdate(TForm $form, Collection $request)
|
function formUpdate(TForm $form, Collection $request)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Загрузка формы
|
* Загрузка формы
|
||||||
*/
|
*/
|
||||||
function beforeLoad(/*Model*/ $item, TForm $form)
|
function beforeLoad(/*Model*/ $item, TForm $form)
|
||||||
{
|
{
|
||||||
if (empty($this->formSchema)) {
|
if (empty($this->formSchema)) {
|
||||||
$this->setFormSchema();
|
$this->setFormSchema();
|
||||||
}
|
}
|
||||||
// Вставка значений из данных в форму
|
// Вставка значений из данных в форму
|
||||||
// Отображение обьекта в поля формы
|
// Отображение обьекта в поля формы
|
||||||
$form->fill($item, $this->formSchema);
|
$form->fill($item, $this->formSchema);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Проверка ввода
|
// Проверка ввода
|
||||||
protected function validate($validator, $request)
|
protected function validate($validator, $request)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Действие для проверки формы
|
* Действие для проверки формы
|
||||||
*/
|
*/
|
||||||
public function actionValidate($request)
|
public function actionValidate($request)
|
||||||
{
|
{
|
||||||
|
|
@ -158,10 +158,10 @@ class Controller_Model extends Controller_Action
|
||||||
$validator = new Validator();
|
$validator = new Validator();
|
||||||
$validator->addRuleList($this->schema);
|
$validator->addRuleList($this->schema);
|
||||||
|
|
||||||
// Действия до проверки формы
|
// Действия до проверки формы
|
||||||
$this->validate($validator, $request); // <--|
|
$this->validate($validator, $request); // <--|
|
||||||
$validator->validate($request); // --|
|
$validator->validate($request); // --|
|
||||||
// Проверка формы
|
// Проверка формы
|
||||||
if (!$validator->isValid()) {
|
if (!$validator->isValid()) {
|
||||||
return json::encode($validator->getErrorMsg());
|
return json::encode($validator->getErrorMsg());
|
||||||
}
|
}
|
||||||
|
|
@ -169,7 +169,7 @@ class Controller_Model extends Controller_Action
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Инициализация формы
|
* Инициализация формы
|
||||||
*/
|
*/
|
||||||
protected function formSetup($form, $id = null, $ref = null)
|
protected function formSetup($form, $id = null, $ref = null)
|
||||||
{
|
{
|
||||||
|
|
@ -185,65 +185,65 @@ class Controller_Model extends Controller_Action
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Добавление пользователя
|
* Добавление пользователя
|
||||||
*/
|
*/
|
||||||
public function actionAdd(HttpRequest $request)
|
public function actionAdd(HttpRequest $request)
|
||||||
{
|
{
|
||||||
require_once "core/validator/validator.php";
|
require_once "core/validator/validator.php";
|
||||||
// {{{ тоже может быть один ref или несколько
|
// {{{ тоже может быть один ref или несколько
|
||||||
$ref = $request->get('ref');
|
$ref = $request->get('ref');
|
||||||
$this->addParameter('ref', $ref); // Добавляет параметр в url
|
$this->addParameter('ref', $ref); // Добавляет параметр в url
|
||||||
/// }}}
|
/// }}}
|
||||||
|
|
||||||
if ($this->checkPageId($request, $request->get('page'))) {
|
if ($this->checkPageId($request, $request->get('page'))) {
|
||||||
// Проверка
|
// Проверка
|
||||||
$validator = new Validator();
|
$validator = new Validator();
|
||||||
$validator->addRuleList($this->schema);
|
$validator->addRuleList($this->schema);
|
||||||
|
|
||||||
// Действия до проверки формы
|
// Действия до проверки формы
|
||||||
$this->validate($validator, $request); // <--|
|
$this->validate($validator, $request); // <--|
|
||||||
$validator->validate($request); // --|
|
$validator->validate($request); // --|
|
||||||
// Проверка формы
|
// Проверка формы
|
||||||
if (!$validator->isValid()) {
|
if (!$validator->isValid()) {
|
||||||
$request->setAction('form');
|
$request->setAction('form');
|
||||||
$this->getActionPath($request);
|
$this->getActionPath($request);
|
||||||
|
|
||||||
$form = new TForm();
|
$form = new TForm();
|
||||||
$this->formSetup($form, $request->get('id'), $request->get('ref')); // Инициализация формы
|
$this->formSetup($form, $request->get('id'), $request->get('ref')); // Инициализация формы
|
||||||
|
|
||||||
$form->setValues($request); // <-- Убрать в formUpdate
|
$form->setValues($request); // <-- Убрать в formUpdate
|
||||||
$this->formUpdate($form, $request);
|
$this->formUpdate($form, $request);
|
||||||
|
|
||||||
$form->setError($validator); // Установка ошибок для формы
|
$form->setError($validator); // Установка ошибок для формы
|
||||||
|
|
||||||
$tpl = $this->formPage($form, $request);
|
$tpl = $this->formPage($form, $request);
|
||||||
$id = $request->get('id');
|
$id = $request->get('id');
|
||||||
if ($id) { // Редактирование
|
if ($id) { // Редактирование
|
||||||
$tpl->action = forceUrl($this->nUrl('add', array('id' => $id, 'page' => $this->getPageId($request)))); // action Совйство формы
|
$tpl->action = forceUrl($this->nUrl('add', array('id' => $id, 'page' => $this->getPageId($request)))); // action Совйство формы
|
||||||
}
|
}
|
||||||
return $tpl /*->execute()*/;
|
return $tpl /*->execute()*/;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Нужен тест для формы
|
// Нужен тест для формы
|
||||||
$model = $this->getModel($this->useModel);
|
$model = $this->getModel($this->useModel);
|
||||||
$className = $model->className;
|
$className = $model->className;
|
||||||
$item = new $className();
|
$item = new $className();
|
||||||
|
|
||||||
// Сохраняем значение в базе данных
|
// Сохраняем значение в базе данных
|
||||||
$item->id = $request->get('id');
|
$item->id = $request->get('id');
|
||||||
// Если таблица связана с другой таблицей
|
// Если таблица связана с другой таблицей
|
||||||
if ($request->get('ref') && $model->reference[1]) {
|
if ($request->get('ref') && $model->reference[1]) {
|
||||||
$ref_id = $model->reference[1];
|
$ref_id = $model->reference[1];
|
||||||
$item->$ref_id = $request->get('ref');
|
$item->$ref_id = $request->get('ref');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Подготовка к сохранению
|
// Подготовка к сохранению
|
||||||
$this->beforeSave($item, $request); // Сюдаже и истрия переходов
|
$this->beforeSave($item, $request); // Сюдаже и истрия переходов
|
||||||
// nextId ??? или выход или новая форма для создания новости
|
// nextId ??? или выход или новая форма для создания новости
|
||||||
$model->saveDB($item, $request);
|
$model->saveDB($item, $request);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Для страницы со списком id -> идентефикатор родительской таблицы !!??
|
// Для страницы со списком id -> идентефикатор родительской таблицы !!??
|
||||||
// $request->set('id', $request->get('ref'));
|
// $request->set('id', $request->get('ref'));
|
||||||
if ($request->get('apply')) {
|
if ($request->get('apply')) {
|
||||||
$request->setAction('form');
|
$request->setAction('form');
|
||||||
|
|
@ -253,7 +253,7 @@ class Controller_Model extends Controller_Action
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Заголовок
|
* Заголовок
|
||||||
*/
|
*/
|
||||||
private function setTitlePath($ref)
|
private function setTitlePath($ref)
|
||||||
{
|
{
|
||||||
|
|
@ -263,37 +263,37 @@ class Controller_Model extends Controller_Action
|
||||||
$refmodel = $this->getModel($model->reference[0]);
|
$refmodel = $this->getModel($model->reference[0]);
|
||||||
try {
|
try {
|
||||||
$parent = $refmodel->findById($ref);
|
$parent = $refmodel->findById($ref);
|
||||||
$this->path->addTitle($parent->getTitle()); // Заголовок к подписям путей
|
$this->path->addTitle($parent->getTitle()); // Заголовок к подписям путей
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
// Не найден заголовок потому что неправильно определен родительский элемент
|
// Не найден заголовок потому что неправильно определен родительский элемент
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Форма для редактирования
|
* Форма для редактирования
|
||||||
*/
|
*/
|
||||||
public function actionForm(HttpRequest $request)
|
public function actionForm(HttpRequest $request)
|
||||||
{
|
{
|
||||||
$this->getActionPath($request);
|
$this->getActionPath($request);
|
||||||
$ref = $request->get('ref');
|
$ref = $request->get('ref');
|
||||||
$this->addParameter('ref', $ref); // Добавляет параметр в url
|
$this->addParameter('ref', $ref); // Добавляет параметр в url
|
||||||
$this->setTitlePath($ref);
|
$this->setTitlePath($ref);
|
||||||
|
|
||||||
$model = $this->getModel($this->useModel);
|
$model = $this->getModel($this->useModel);
|
||||||
$form = new TForm(); // Показываем форму
|
$form = new TForm(); // Показываем форму
|
||||||
$form->header = 'Редактирование записи';
|
$form->header = 'Редактирование записи';
|
||||||
$this->formSetup($form, $request->get('id'), $request->get('ref')); // Инициализация формы
|
$this->formSetup($form, $request->get('id'), $request->get('ref')); // Инициализация формы
|
||||||
|
|
||||||
$list = $request->get('table_item');
|
$list = $request->get('table_item');
|
||||||
$id = ($list[0]) ? $list[0] : $request->get('id');
|
$id = ($list[0]) ? $list[0] : $request->get('id');
|
||||||
|
|
||||||
$tpl = $this->formPage ($form, $request);
|
$tpl = $this->formPage ($form, $request);
|
||||||
if ($id) { // Редактирование
|
if ($id) { // Редактирование
|
||||||
$form->action = forceUrl($this->nUrl('add', array('id' => $id, 'page' => $this->getPageId($request)))); // action Свойство формы
|
$form->action = forceUrl($this->nUrl('add', array('id' => $id, 'page' => $this->getPageId($request)))); // action Свойство формы
|
||||||
$item = $model->findById($id);
|
$item = $model->findById($id);
|
||||||
// Загрузка формы
|
// Загрузка формы
|
||||||
$this->beforeLoad($item, $form);
|
$this->beforeLoad($item, $form);
|
||||||
///
|
///
|
||||||
}
|
}
|
||||||
|
|
@ -304,11 +304,11 @@ class Controller_Model extends Controller_Action
|
||||||
*/
|
*/
|
||||||
function tableSetup($table, $id = null, $ref = null)
|
function tableSetup($table, $id = null, $ref = null)
|
||||||
{
|
{
|
||||||
// FIXME: После замены везде $tableSchema -> table->setHeader удалить!
|
// FIXME: После замены везде $tableSchema -> table->setHeader удалить!
|
||||||
if ($this->tableSchema) {
|
if ($this->tableSchema) {
|
||||||
$table->setHeader($this->tableSchema);
|
$table->setHeader($this->tableSchema);
|
||||||
} else {
|
} else {
|
||||||
// Настройка таблицы отображения по схеме данных
|
// Настройка таблицы отображения по схеме данных
|
||||||
require_once 'core/mapper/uimapper.php';
|
require_once 'core/mapper/uimapper.php';
|
||||||
$model = $this->getModel($this->useModel);
|
$model = $this->getModel($this->useModel);
|
||||||
$ui = new UIMapper($model);
|
$ui = new UIMapper($model);
|
||||||
|
|
@ -324,17 +324,17 @@ class Controller_Model extends Controller_Action
|
||||||
public function actionIndex(HttpRequest $request)
|
public function actionIndex(HttpRequest $request)
|
||||||
{
|
{
|
||||||
$this->getActionPath($request, 'index');
|
$this->getActionPath($request, 'index');
|
||||||
// Такое мета действие наверное можно вынести в отдельный класс
|
// Такое мета действие наверное можно вынести в отдельный класс
|
||||||
return $this->metaActionIndex($request, array($this, 'tableSetup'), $this->aUrl('list'));
|
return $this->metaActionIndex($request, array($this, 'tableSetup'), $this->aUrl('list'));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Страница по умолчанию
|
* Страница по умолчанию
|
||||||
*/
|
*/
|
||||||
public function metaActionIndex(HttpRequest $request, $setup, $list)
|
public function metaActionIndex(HttpRequest $request, $setup, $list)
|
||||||
{
|
{
|
||||||
// может быть одно ref или несколько
|
// может быть одно ref или несколько
|
||||||
// {{{ история переходов
|
// {{{ история переходов
|
||||||
$ref = null;
|
$ref = null;
|
||||||
if ($request->get('ref')) {
|
if ($request->get('ref')) {
|
||||||
$ref = $request->get('ref');
|
$ref = $request->get('ref');
|
||||||
|
|
@ -349,9 +349,9 @@ class Controller_Model extends Controller_Action
|
||||||
|
|
||||||
$tpl = $this->getView('list');
|
$tpl = $this->getView('list');
|
||||||
|
|
||||||
// Помошники действий
|
// Помошники действий
|
||||||
$this->callHelpers($request);
|
$this->callHelpers($request);
|
||||||
// Таблица
|
// Таблица
|
||||||
if ($request->session()->get(strtolower(get_class($this)))) {
|
if ($request->session()->get(strtolower(get_class($this)))) {
|
||||||
$session = $request->session()->get(strtolower(get_class($this)));
|
$session = $request->session()->get(strtolower(get_class($this)));
|
||||||
if (isset($session['view'])) {
|
if (isset($session['view'])) {
|
||||||
|
|
@ -368,28 +368,28 @@ class Controller_Model extends Controller_Action
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
call_user_func($setup, $this->table, $request->get('id'), $ref);// --> Эквивалент formSetup
|
call_user_func($setup, $this->table, $request->get('id'), $ref);// --> Эквивалент formSetup
|
||||||
$this->table->setAction($list);
|
$this->table->setAction($list);
|
||||||
//
|
//
|
||||||
$tpl->menu_path = $this->path->getItems();
|
$tpl->menu_path = $this->path->getItems();
|
||||||
|
|
||||||
// Поиск
|
// Поиск
|
||||||
$search = new SearchDialog();
|
$search = new SearchDialog();
|
||||||
$search->setTitle('Поиск');
|
$search->setTitle('Поиск');
|
||||||
$search->setAction($this->aUrl('search'));
|
$search->setAction($this->aUrl('search'));
|
||||||
$search->setFriend($this->table);
|
$search->setFriend($this->table);
|
||||||
$search->addFields($this->schemaSearch);
|
$search->addFields($this->schemaSearch);
|
||||||
|
|
||||||
// Настройки
|
// Настройки
|
||||||
$setup = new SetupDialog();
|
$setup = new SetupDialog();
|
||||||
$setup->setTitle('Настройки');
|
$setup->setTitle('Настройки');
|
||||||
$setup->setAction($this->nUrl('setup'));
|
$setup->setAction($this->nUrl('setup'));
|
||||||
$setup->setFriend($this->table);
|
$setup->setFriend($this->table);
|
||||||
|
|
||||||
// Меню
|
// Меню
|
||||||
$this->menu->addMenuItem('?menu=toggle&id=' . $search->getName(), 'поиск', 'actions/system-search'); // Стандартный размер для иконок 22-24px
|
$this->menu->addMenuItem('?menu=toggle&id=' . $search->getName(), 'поиск', 'actions/system-search'); // Стандартный размер для иконок 22-24px
|
||||||
$this->menu->addMenuItem('?menu=toggle&id=' . $setup->getName(), 'настройки', 'categories/applications-system');
|
$this->menu->addMenuItem('?menu=toggle&id=' . $setup->getName(), 'настройки', 'categories/applications-system');
|
||||||
// Добавление компонентов
|
// Добавление компонентов
|
||||||
$this->addChild('menu', $this->menu);
|
$this->addChild('menu', $this->menu);
|
||||||
$this->addChild('search', $search);
|
$this->addChild('search', $search);
|
||||||
$this->addChild('setup', $setup);
|
$this->addChild('setup', $setup);
|
||||||
|
|
@ -417,14 +417,14 @@ class Controller_Model extends Controller_Action
|
||||||
{
|
{
|
||||||
$view = $this->getView('form');
|
$view = $this->getView('form');
|
||||||
$view->setView('form', $form);
|
$view->setView('form', $form);
|
||||||
$view->action = forceUrl($this->nUrl('add', array('page' => $this->getPageId($request)))); // Действие для формы
|
$view->action = forceUrl($this->nUrl('add', array('page' => $this->getPageId($request)))); // Действие для формы
|
||||||
|
|
||||||
$view->menu_path = $this->path->getItems();
|
$view->menu_path = $this->path->getItems();
|
||||||
$view->back = $this->path->getPrev();
|
$view->back = $this->path->getPrev();
|
||||||
return $view;
|
return $view;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Тоже убрать в метод Controller_Model
|
// Тоже убрать в метод Controller_Model
|
||||||
function getActionPath(HttpRequest $request/*, $action = false*/)
|
function getActionPath(HttpRequest $request/*, $action = false*/)
|
||||||
{
|
{
|
||||||
require_once 'state.php';
|
require_once 'state.php';
|
||||||
|
|
|
||||||
|
|
@ -7,12 +7,12 @@ class FileNotFountException extends Exception
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Класс компонента
|
* Класс компонента
|
||||||
*/
|
*/
|
||||||
class Component
|
class Component
|
||||||
{
|
{
|
||||||
static $_uid = 1;
|
static $_uid = 1;
|
||||||
public $uid; // UID компонента создается при создании страницы, вставки компонента, или это статическое свойство
|
public $uid; // UID компонента создается при создании страницы, вставки компонента, или это статическое свойство
|
||||||
public $viewPath;
|
public $viewPath;
|
||||||
public $registry; // Registry->getInstance
|
public $registry; // Registry->getInstance
|
||||||
public $template;
|
public $template;
|
||||||
|
|
@ -33,7 +33,7 @@ class Component
|
||||||
require_once "core/view/compositeview.php";
|
require_once "core/view/compositeview.php";
|
||||||
//
|
//
|
||||||
$template = ($this->template) ? $this->template : $this->_registry->readKey(array('system', 'template'));
|
$template = ($this->template) ? $this->template : $this->_registry->readKey(array('system', 'template'));
|
||||||
// Загружать шаблон по умолчанию если не найден текущий
|
// Загружать шаблон по умолчанию если не найден текущий
|
||||||
if (is_dir(Path::join($this->viewPath, 'templates', $template))) {
|
if (is_dir(Path::join($this->viewPath, 'templates', $template))) {
|
||||||
$template_file = Path::join($this->viewPath, 'templates', $template, $name);
|
$template_file = Path::join($this->viewPath, 'templates', $template, $name);
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -59,7 +59,7 @@ class Component
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param $name Имя модели
|
* @param $name Имя модели
|
||||||
*/
|
*/
|
||||||
private function getModelPath($name)
|
private function getModelPath($name)
|
||||||
{
|
{
|
||||||
|
|
@ -67,7 +67,7 @@ class Component
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Создает модель
|
* Создает модель
|
||||||
* @param string $name
|
* @param string $name
|
||||||
* @return model
|
* @return model
|
||||||
*/
|
*/
|
||||||
|
|
@ -98,8 +98,8 @@ class Component
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* В дальнейшем нужно зменить на методы
|
/* В дальнейшем нужно зменить на методы
|
||||||
+ Методы могут быть и javascript
|
+ Методы могут быть и javascript
|
||||||
*/
|
*/
|
||||||
protected $editUrl;
|
protected $editUrl;
|
||||||
|
|
||||||
|
|
@ -115,7 +115,7 @@ class Component
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TALES для подключения компонентов
|
* TALES для подключения компонентов
|
||||||
* component:name?param1=value1¶m2=value2
|
* component:name?param1=value1¶m2=value2
|
||||||
*/
|
*/
|
||||||
class Component_Tales implements PHPTAL_Tales
|
class Component_Tales implements PHPTAL_Tales
|
||||||
|
|
@ -143,13 +143,13 @@ function loadComponent($name, $db, $registry)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Функция подключения компонента
|
* Функция подключения компонента
|
||||||
*/
|
*/
|
||||||
global $componentList;
|
global $componentList;
|
||||||
$componentList = array();
|
$componentList = array();
|
||||||
|
|
||||||
function phptal_component ($real_expression, $offset = 0) {
|
function phptal_component ($real_expression, $offset = 0) {
|
||||||
global $db, $registry, $componentList; // Нужно както передавать параметры
|
global $db, $registry, $componentList; // Нужно както передавать параметры
|
||||||
|
|
||||||
$expression = htmlspecialchars_decode($real_expression);
|
$expression = htmlspecialchars_decode($real_expression);
|
||||||
$url = parse_url($expression);
|
$url = parse_url($expression);
|
||||||
|
|
@ -165,9 +165,9 @@ function phptal_component ($real_expression, $offset = 0) {
|
||||||
$componentList [] = array(
|
$componentList [] = array(
|
||||||
'uid' => $component->getUID(), 'params' => $expression, 'name' => $name, 'offset' => $offset,
|
'uid' => $component->getUID(), 'params' => $expression, 'name' => $name, 'offset' => $offset,
|
||||||
'size' => strlen($real_expression),
|
'size' => strlen($real_expression),
|
||||||
/* Вместо ссылки на редактирование нужно передавать список методов для работы с компонентом
|
/* Вместо ссылки на редактирование нужно передавать список методов для работы с компонентом
|
||||||
edit (редактирование содержание), new (новое содержание), шаблон коменнента ... вместе с иконками этих методов
|
edit (редактирование содержание), new (новое содержание), шаблон коменнента ... вместе с иконками этих методов
|
||||||
! Компоненты могут содержать другие компоненты
|
! Компоненты могут содержать другие компоненты
|
||||||
*/
|
*/
|
||||||
'editurl' => $component->getEditUrl(),
|
'editurl' => $component->getEditUrl(),
|
||||||
'newurl' => ''
|
'newurl' => ''
|
||||||
|
|
@ -179,7 +179,7 @@ function phptal_component ($real_expression, $offset = 0) {
|
||||||
return $component->execute($params, $req);
|
return $component->execute($params, $req);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Регистрация нового префикса для подключения компонента */
|
/* Регистрация нового префикса для подключения компонента */
|
||||||
$registry = PHPTAL_TalesRegistry::getInstance();
|
$registry = PHPTAL_TalesRegistry::getInstance();
|
||||||
$registry->registerPrefix('component', array('Component_Tales', 'component'));
|
$registry->registerPrefix('component', array('Component_Tales', 'component'));
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,32 +14,32 @@ function forceUrl($name)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Контроллер страниц
|
* Контроллер страниц
|
||||||
* @package core
|
* @package core
|
||||||
*/
|
*/
|
||||||
class Controller
|
class Controller
|
||||||
{
|
{
|
||||||
|
|
||||||
const TEMPLATE_EXTENSION = ".html"; // Расширение для шаблонов
|
const TEMPLATE_EXTENSION = ".html"; // Расширение для шаблонов
|
||||||
const ACTION_PREFIX = "action"; // Префикс для функций действий
|
const ACTION_PREFIX = "action"; // Префикс для функций действий
|
||||||
|
|
||||||
public $jsPath; // Глобальный путь к скриптам
|
public $jsPath; // Глобальный путь к скриптам
|
||||||
public $themePath; // Глобальный путь к текущей теме
|
public $themePath; // Глобальный путь к текущей теме
|
||||||
|
|
||||||
// Параметры устанавливаются при создании контроллера
|
// Параметры устанавливаются при создании контроллера
|
||||||
public $name; // Имя модуля
|
public $name; // Имя модуля
|
||||||
public $viewPath = null; // Путь к шаблонам контроллера
|
public $viewPath = null; // Путь к шаблонам контроллера
|
||||||
public $db; // Соединение с базой данных
|
public $db; // Соединение с базой данных
|
||||||
|
|
||||||
// Фильтры
|
// Фильтры
|
||||||
public $access; // Обьект хранит параметры доступа
|
public $access; // Обьект хранит параметры доступа
|
||||||
public $logger; // Обьект для ведения лога
|
public $logger; // Обьект для ведения лога
|
||||||
|
|
||||||
private $factory; // Ссылка на обьект создания модели
|
private $factory; // Ссылка на обьект создания модели
|
||||||
private $helpers = array(); // Помошники для действий
|
private $helpers = array(); // Помошники для действий
|
||||||
public $param = array(); // Параметры для ссылки
|
public $param = array(); // Параметры для ссылки
|
||||||
|
|
||||||
public $_registry; // Ссылка на реестр
|
public $_registry; // Ссылка на реестр
|
||||||
public $_shortcut;
|
public $_shortcut;
|
||||||
|
|
||||||
public function __construct ()
|
public function __construct ()
|
||||||
|
|
@ -83,7 +83,7 @@ class Controller
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Создает представление
|
* Создает представление
|
||||||
* @param string $file
|
* @param string $file
|
||||||
* @return template
|
* @return template
|
||||||
*/
|
*/
|
||||||
|
|
@ -92,7 +92,7 @@ class Controller
|
||||||
require_once "core/view/compositeview.php";
|
require_once "core/view/compositeview.php";
|
||||||
|
|
||||||
$file = $name . self::TEMPLATE_EXTENSION;
|
$file = $name . self::TEMPLATE_EXTENSION;
|
||||||
// Список возможных директорий для поиска файла шаблона
|
// Список возможных директорий для поиска файла шаблона
|
||||||
$theme = $this->_registry->readKey(array('system', 'theme'));
|
$theme = $this->_registry->readKey(array('system', 'theme'));
|
||||||
$icon_theme = $this->_registry->readKey(array('system', 'icon_theme'));
|
$icon_theme = $this->_registry->readKey(array('system', 'icon_theme'));
|
||||||
$list = array(
|
$list = array(
|
||||||
|
|
@ -100,17 +100,17 @@ class Controller
|
||||||
PHPTAL_TEMPLATE_REPOSITORY => "");
|
PHPTAL_TEMPLATE_REPOSITORY => "");
|
||||||
|
|
||||||
|
|
||||||
// Поиск файла для шаблона
|
// Поиск файла для шаблона
|
||||||
foreach($list as $ospath => $path) {
|
foreach($list as $ospath => $path) {
|
||||||
$template = Path::join($ospath, $file);
|
$template = Path::join($ospath, $file);
|
||||||
if(file_exists($template)) { break; }
|
if(file_exists($template)) { break; }
|
||||||
}
|
}
|
||||||
|
|
||||||
$tpl = new View_Composite($template);
|
$tpl = new View_Composite($template);
|
||||||
$tpl->icons = $this->iconPath; // Путь к файлам текущей темы
|
$tpl->icons = $this->iconPath; // Путь к файлам текущей темы
|
||||||
$tpl->media = $this->themePath; // Путь к файлам текущей темы
|
$tpl->media = $this->themePath; // Путь к файлам текущей темы
|
||||||
$tpl->script = $this->jsPath; // Путь к файлам скриптов
|
$tpl->script = $this->jsPath; // Путь к файлам скриптов
|
||||||
$tpl->template = $path; // Путь к файлам текущего шаблона
|
$tpl->template = $path; // Путь к файлам текущего шаблона
|
||||||
$tpl->setAlias(array(
|
$tpl->setAlias(array(
|
||||||
'${icons}' => $this->iconPath,
|
'${icons}' => $this->iconPath,
|
||||||
'${media}' => $this->themePath,
|
'${media}' => $this->themePath,
|
||||||
|
|
@ -132,11 +132,11 @@ class Controller
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Выбор действия
|
* Выбор действия
|
||||||
* Т.к действия являются методами класса то
|
* Т.к действия являются методами класса то
|
||||||
* 1. Можно переопределить действия
|
* 1. Можно переопределить действия
|
||||||
* 2. Использовать наследование чтобы добавить к старому обработчику новое поведение
|
* 2. Использовать наследование чтобы добавить к старому обработчику новое поведение
|
||||||
* @param $request Обьект запроса
|
* @param $request Обьект запроса
|
||||||
*/
|
*/
|
||||||
public function execute1(HTTPRequest $request)
|
public function execute1(HTTPRequest $request)
|
||||||
{
|
{
|
||||||
|
|
@ -159,7 +159,7 @@ class Controller
|
||||||
|
|
||||||
public function forward($action, HTTPRequest $args)
|
public function forward($action, HTTPRequest $args)
|
||||||
{
|
{
|
||||||
// Действия до вызова основного обработчика
|
// Действия до вызова основного обработчика
|
||||||
/*foreach($this->_aspect as $aspect) {
|
/*foreach($this->_aspect as $aspect) {
|
||||||
if (isset($aspect->before[$action])) {
|
if (isset($aspect->before[$action])) {
|
||||||
call_user_func ($aspect->before[$action], $action, $args);
|
call_user_func ($aspect->before[$action], $action, $args);
|
||||||
|
|
@ -169,7 +169,7 @@ class Controller
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Страница по умолчанию
|
* Страница по умолчанию
|
||||||
*/
|
*/
|
||||||
public function actionIndex(HttpRequest $request)
|
public function actionIndex(HttpRequest $request)
|
||||||
{
|
{
|
||||||
|
|
@ -184,10 +184,10 @@ class Controller
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Генерация ссылки c учетом прав пользователя на ссылки
|
* Генерация ссылки c учетом прав пользователя на ссылки
|
||||||
*
|
*
|
||||||
* @parma string $name Действие
|
* @parma string $name Действие
|
||||||
* @parma string $param Дополнительные параметры
|
* @parma string $param Дополнительные параметры
|
||||||
*/
|
*/
|
||||||
public function nUrl($name, array $param = array())
|
public function nUrl($name, array $param = array())
|
||||||
{
|
{
|
||||||
|
|
@ -203,7 +203,7 @@ class Controller
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Добавляет параметр для всех ссылок создаваемых функцией nUrl, aUrl
|
* Добавляет параметр для всех ссылок создаваемых функцией nUrl, aUrl
|
||||||
*/
|
*/
|
||||||
public function addParameter($name, $value)
|
public function addParameter($name, $value)
|
||||||
{
|
{
|
||||||
|
|
@ -213,8 +213,8 @@ class Controller
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Генерация ссылки на действие контроллера
|
* Генерация ссылки на действие контроллера
|
||||||
* Ajax определяется автоматически mode = ajax используется для смены layout
|
* Ajax определяется автоматически mode = ajax используется для смены layout
|
||||||
*/
|
*/
|
||||||
public function aUrl($name, array $param = array())
|
public function aUrl($name, array $param = array())
|
||||||
{
|
{
|
||||||
|
|
@ -222,7 +222,7 @@ class Controller
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Добавление помошника контроллера
|
* Добавление помошника контроллера
|
||||||
*/
|
*/
|
||||||
public function addHelper($class)
|
public function addHelper($class)
|
||||||
{
|
{
|
||||||
|
|
@ -230,7 +230,7 @@ class Controller
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Вызов помошников контроллера
|
* Вызов помошников контроллера
|
||||||
*/
|
*/
|
||||||
public function callHelpers(HttpRequest $request)
|
public function callHelpers(HttpRequest $request)
|
||||||
{
|
{
|
||||||
|
|
@ -239,13 +239,13 @@ class Controller
|
||||||
if (method_exists($helper, $action)) {
|
if (method_exists($helper, $action)) {
|
||||||
return call_user_func(array($helper, $action), $request, $this);
|
return call_user_func(array($helper, $action), $request, $this);
|
||||||
} else {
|
} else {
|
||||||
return $helper->actionIndex($request, $this); // Вместо return response ???
|
return $helper->actionIndex($request, $this); // Вместо return response ???
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Загрузка файла класса
|
* Загрузка файла класса
|
||||||
*/
|
*/
|
||||||
public function loadClass($path, $setup = null)
|
public function loadClass($path, $setup = null)
|
||||||
{
|
{
|
||||||
|
|
@ -264,7 +264,7 @@ class Controller
|
||||||
return $result->export();
|
return $result->export();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Для Widgets
|
// Для Widgets
|
||||||
public $view = null;
|
public $view = null;
|
||||||
public $childNodes = array();
|
public $childNodes = array();
|
||||||
public $childViews = array();
|
public $childViews = array();
|
||||||
|
|
@ -275,7 +275,7 @@ class Controller
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Установка заголовка для отображения
|
* Установка заголовка для отображения
|
||||||
*/
|
*/
|
||||||
public function setTitle($title)
|
public function setTitle($title)
|
||||||
{
|
{
|
||||||
|
|
@ -283,7 +283,7 @@ class Controller
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Добавление widget к отображению
|
* Добавление widget к отображению
|
||||||
*/
|
*/
|
||||||
public function addChild(/*Widget*/ $section, $node)
|
public function addChild(/*Widget*/ $section, $node)
|
||||||
{
|
{
|
||||||
|
|
@ -291,7 +291,7 @@ class Controller
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Добавление дочернего отображения к текущему отображению
|
* Добавление дочернего отображения к текущему отображению
|
||||||
*/
|
*/
|
||||||
public function addView(/*CompositeView*/ $section, $node)
|
public function addView(/*CompositeView*/ $section, $node)
|
||||||
{
|
{
|
||||||
|
|
@ -299,8 +299,8 @@ class Controller
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Генерация содержания
|
* Генерация содержания
|
||||||
* Путаница c execute и render
|
* Путаница c execute и render
|
||||||
*/
|
*/
|
||||||
public function render()
|
public function render()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -4,15 +4,15 @@ require_once 'core/controller/controller.php';
|
||||||
require_once 'core/controller/installer.php';
|
require_once 'core/controller/installer.php';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Первичный контроллер контроллер страниц
|
* Первичный контроллер контроллер страниц
|
||||||
* @package core
|
* @package core
|
||||||
*/
|
*/
|
||||||
class Controller_Front extends Controller
|
class Controller_Front extends Controller
|
||||||
{
|
{
|
||||||
|
|
||||||
protected $shortcut; // Ярлык к модулю
|
protected $shortcut; // Ярлык к модулю
|
||||||
protected $_param; // Параметр по которому выбирается модуль
|
protected $_param; // Параметр по которому выбирается модуль
|
||||||
protected $default; // Значение параметра по умолчанию
|
protected $default; // Значение параметра по умолчанию
|
||||||
protected $installer;
|
protected $installer;
|
||||||
|
|
||||||
public function __construct(Settings $_registry, $_shortcut)
|
public function __construct(Settings $_registry, $_shortcut)
|
||||||
|
|
@ -29,9 +29,9 @@ class Controller_Front extends Controller
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Создает экземпляр модуля и выполняет действия для него
|
* Создает экземпляр модуля и выполняет действия для него
|
||||||
* @param string $name Имя модуля
|
* @param string $name Имя модуля
|
||||||
* @param request $request Имя модуля
|
* @param request $request Имя модуля
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function loadModule($name, Collection $request)
|
public function loadModule($name, Collection $request)
|
||||||
|
|
@ -43,7 +43,7 @@ class Controller_Front extends Controller
|
||||||
$module = $this->loadClass($moduleFile);
|
$module = $this->loadClass($moduleFile);
|
||||||
|
|
||||||
if ($module) {
|
if ($module) {
|
||||||
// Инициализация модуля
|
// Инициализация модуля
|
||||||
// $module->viewPath = dirname($moduleFile);
|
// $module->viewPath = dirname($moduleFile);
|
||||||
$module->viewPath = Shortcut::getUrl('modulepath', $name);
|
$module->viewPath = Shortcut::getUrl('modulepath', $name);
|
||||||
$module->name = $name;
|
$module->name = $name;
|
||||||
|
|
@ -57,11 +57,11 @@ class Controller_Front extends Controller
|
||||||
$module->themePath = $this->themePath; // -> Registry
|
$module->themePath = $this->themePath; // -> Registry
|
||||||
$module->jsPath = $this->jsPath; // -> Registry
|
$module->jsPath = $this->jsPath; // -> Registry
|
||||||
$module->db = $this->db;
|
$module->db = $this->db;
|
||||||
// Не для всех приложений нужно вести лог действий
|
// Не для всех приложений нужно вести лог действий
|
||||||
// Ведение лога
|
// Ведение лога
|
||||||
$logger = $this->loadClass(FRAMEWORK_PATH . '/core/filter/actionlogger.php', $module);
|
$logger = $this->loadClass(FRAMEWORK_PATH . '/core/filter/actionlogger.php', $module);
|
||||||
$logger->before = $this->loadSettings(Shortcut::getUrl('logger', $name));
|
$logger->before = $this->loadSettings(Shortcut::getUrl('logger', $name));
|
||||||
// Управление доступом
|
// Управление доступом
|
||||||
$module->access = $this->loadClass(FRAMEWORK_PATH . '/core/filter/actionaccess.php', $logger);
|
$module->access = $this->loadClass(FRAMEWORK_PATH . '/core/filter/actionaccess.php', $logger);
|
||||||
$module->access->access = $this->loadSettings(Shortcut::getUrl('access', $name));
|
$module->access->access = $this->loadSettings(Shortcut::getUrl('access', $name));
|
||||||
|
|
||||||
|
|
@ -75,7 +75,7 @@ class Controller_Front extends Controller
|
||||||
public function setParameter($shortcut, $param, $name)
|
public function setParameter($shortcut, $param, $name)
|
||||||
{
|
{
|
||||||
$this->shortcut = $shortcut;
|
$this->shortcut = $shortcut;
|
||||||
// Параметр
|
// Параметр
|
||||||
$this->_param = $param;
|
$this->_param = $param;
|
||||||
$this->default = $name;
|
$this->default = $name;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -24,8 +24,8 @@ class Installer
|
||||||
return Path::join(call_user_func($this->installPath, $name), "setup.php");
|
return Path::join(call_user_func($this->installPath, $name), "setup.php");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Проверка версии обновления
|
// Проверка версии обновления
|
||||||
function isChanged($name) // Информация о модулях
|
function isChanged($name) // Информация о модулях
|
||||||
{
|
{
|
||||||
$item = $this->_registry->readKey(array($name));
|
$item = $this->_registry->readKey(array($name));
|
||||||
if ($item) {
|
if ($item) {
|
||||||
|
|
@ -50,8 +50,8 @@ class Installer
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Устанавливает обновления если есть
|
// Устанавливает обновления если есть
|
||||||
function doUpdates($name, $force = false) // Установка модуля
|
function doUpdates($name, $force = false) // Установка модуля
|
||||||
{
|
{
|
||||||
$setup = $this->getSetupFile($name);
|
$setup = $this->getSetupFile($name);
|
||||||
if (file_exists($setup) && ($this->isChanged($name) || $force)) {
|
if (file_exists($setup) && ($this->isChanged($name) || $force)) {
|
||||||
|
|
@ -77,7 +77,7 @@ class Installer
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Обновление версии меню
|
// Обновление версии меню
|
||||||
$registry->writeKey(array($name), $settings->get('settings'));
|
$registry->writeKey(array($name), $settings->get('settings'));
|
||||||
$registry->writeKey(array($name),
|
$registry->writeKey(array($name),
|
||||||
array('version' => $version_new,
|
array('version' => $version_new,
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Простой класс(Factory) для работы с базами данных
|
* Простой класс(Factory) для работы с базами данных
|
||||||
*/
|
*/
|
||||||
class Database
|
class Database
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
require_once 'core/drivers/db.php';
|
require_once 'core/drivers/db.php';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Простой класс для работы с базами данных
|
* Простой класс для работы с базами данных
|
||||||
*/
|
*/
|
||||||
class Database_MYSQL extends DB implements IDatabase
|
class Database_MYSQL extends DB implements IDatabase
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
require_once 'core/drivers/db.php';
|
require_once 'core/drivers/db.php';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Простой класс для работы с базами данных
|
* Простой класс для работы с базами данных
|
||||||
*/
|
*/
|
||||||
class Database_ODBC extends DB implements IDatabase
|
class Database_ODBC extends DB implements IDatabase
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
require_once 'core/drivers/db.php';
|
require_once 'core/drivers/db.php';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Простой класс для работы с базами данных
|
* Простой класс для работы с базами данных
|
||||||
*/
|
*/
|
||||||
class Database_PGSQL extends DB implements IDatabase
|
class Database_PGSQL extends DB implements IDatabase
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <EFBFBD>םעונפויס הנאיגונא ךכאססא באח האםם<EFBFBD>ץ
|
* Интерфейс драйвера класса баз данных
|
||||||
*/
|
*/
|
||||||
interface IDatabase
|
interface IDatabase
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
require_once 'core/sort.php';
|
require_once 'core/sort.php';
|
||||||
|
|
||||||
//Становиться похоже на работу файлов через SPL возможно стоит реализовать на базе его
|
//Становиться похоже на работу файлов через SPL возможно стоит реализовать на базе его
|
||||||
class FileRecord
|
class FileRecord
|
||||||
{
|
{
|
||||||
public $file;
|
public $file;
|
||||||
|
|
@ -49,7 +49,7 @@ class FileRecord
|
||||||
function getSizeString()
|
function getSizeString()
|
||||||
{
|
{
|
||||||
$size = $this->getSize();
|
$size = $this->getSize();
|
||||||
foreach (array('б ', 'Kб', 'Mб') as $suffix) {
|
foreach (array('б ', 'Kб', 'Mб') as $suffix) {
|
||||||
if (($size / 1024) <= 1) {
|
if (($size / 1024) <= 1) {
|
||||||
return round($size, 0) . ' ' . $suffix;
|
return round($size, 0) . ' ' . $suffix;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ require_once 'core/file.php';
|
||||||
|
|
||||||
interface IFileSystem
|
interface IFileSystem
|
||||||
{
|
{
|
||||||
// Операции над файлами
|
// Операции над файлами
|
||||||
public function makeDirectory($name);
|
public function makeDirectory($name);
|
||||||
public function deleteDirectory($name);
|
public function deleteDirectory($name);
|
||||||
|
|
||||||
|
|
@ -18,7 +18,7 @@ interface IFileSystem
|
||||||
|
|
||||||
public function readFile($source);
|
public function readFile($source);
|
||||||
public function writeFile($source, $content);
|
public function writeFile($source, $content);
|
||||||
// Содержание директории
|
// Содержание директории
|
||||||
public function directoryFiles($name);
|
public function directoryFiles($name);
|
||||||
public function directoryFilesRecursive($name);
|
public function directoryFilesRecursive($name);
|
||||||
}
|
}
|
||||||
|
|
@ -27,12 +27,12 @@ interface IFileControl
|
||||||
{
|
{
|
||||||
public function commitFile($name, $who, $message);
|
public function commitFile($name, $who, $message);
|
||||||
public function readFileVersion($name, $version = false);
|
public function readFileVersion($name, $version = false);
|
||||||
// Информация о файле
|
// Информация о файле
|
||||||
public function getFileLog($name);
|
public function getFileLog($name);
|
||||||
public function getFileInfo($name);
|
public function getFileInfo($name);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Реальная файловая система
|
// Реальная файловая система
|
||||||
class FileSystem implements IFileSystem
|
class FileSystem implements IFileSystem
|
||||||
{
|
{
|
||||||
protected $hidden = array('.', '..');
|
protected $hidden = array('.', '..');
|
||||||
|
|
@ -111,7 +111,7 @@ class FileSystem implements IFileSystem
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// При перемещении или все файлы если есть совпадения переписываются
|
// При перемещении или все файлы если есть совпадения переписываются
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
@ -211,7 +211,7 @@ class FileSystem implements IFileSystem
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// То что хранится в базе данных
|
// То что хранится в базе данных
|
||||||
class EFileSystem implements IFileSystem, IFileControl
|
class EFileSystem implements IFileSystem, IFileControl
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
@ -280,7 +280,7 @@ class EFileSystem implements IFileSystem, IFileControl
|
||||||
$index = $result->getInt('idfile');
|
$index = $result->getInt('idfile');
|
||||||
return $index;
|
return $index;
|
||||||
}
|
}
|
||||||
return false; // Может лучше кидать исключение ??
|
return false; // Может лучше кидать исключение ??
|
||||||
}
|
}
|
||||||
|
|
||||||
function getIdFromPath($name)
|
function getIdFromPath($name)
|
||||||
|
|
@ -288,7 +288,7 @@ class EFileSystem implements IFileSystem, IFileControl
|
||||||
return $this->getRecordId(basename($name), self::getPathName($name));
|
return $this->getRecordId(basename($name), self::getPathName($name));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Создание новой директории
|
// Создание новой директории
|
||||||
public function makeDirectory($name)
|
public function makeDirectory($name)
|
||||||
{
|
{
|
||||||
$path = new Path($name);
|
$path = new Path($name);
|
||||||
|
|
@ -311,10 +311,10 @@ class EFileSystem implements IFileSystem, IFileControl
|
||||||
return $this->fs->isDir($this->getFullPath($name));
|
return $this->fs->isDir($this->getFullPath($name));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Переименование файла или директории все изменения должны записываться в базу чтобы можно было сделать отмену !!!
|
// Переименование файла или директории все изменения должны записываться в базу чтобы можно было сделать отмену !!!
|
||||||
public function renameFile($source, $destination)
|
public function renameFile($source, $destination)
|
||||||
{
|
{
|
||||||
// При перемещении файлы могут совпадать
|
// При перемещении файлы могут совпадать
|
||||||
$stmt = $this->db->prepareStatement('UPDATE files SET filepath = ?, filename = ? WHERE filepath = ? AND filename = ?');
|
$stmt = $this->db->prepareStatement('UPDATE files SET filepath = ?, filename = ? WHERE filepath = ? AND filename = ?');
|
||||||
$stmt->setString(1, self::getPathName($destination));
|
$stmt->setString(1, self::getPathName($destination));
|
||||||
$stmt->setString(2, basename($destination));
|
$stmt->setString(2, basename($destination));
|
||||||
|
|
@ -335,10 +335,10 @@ class EFileSystem implements IFileSystem, IFileControl
|
||||||
$this->fs->renameFile($this->getFullPath($source), $this->getFullPath($destination));
|
$this->fs->renameFile($this->getFullPath($source), $this->getFullPath($destination));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Копирование файла или директории
|
// Копирование файла или директории
|
||||||
public function copyFile($source, $destination)
|
public function copyFile($source, $destination)
|
||||||
{
|
{
|
||||||
// При копировании файлы могут совпадать
|
// При копировании файлы могут совпадать
|
||||||
$stmt = $this->db->prepareStatement('INSERT INTO files (filepath, filename, lastrevdate) VALUES (?, ?, ?)');
|
$stmt = $this->db->prepareStatement('INSERT INTO files (filepath, filename, lastrevdate) VALUES (?, ?, ?)');
|
||||||
$stmt->setString(1, self::getPathName($destination));
|
$stmt->setString(1, self::getPathName($destination));
|
||||||
$stmt->setString(2, basename($destination));
|
$stmt->setString(2, basename($destination));
|
||||||
|
|
@ -466,7 +466,7 @@ class EFileSystem implements IFileSystem, IFileControl
|
||||||
{
|
{
|
||||||
$result = $this->fs->directoryFiles($this->getFullPath($name));
|
$result = $this->fs->directoryFiles($this->getFullPath($name));
|
||||||
|
|
||||||
/* Список файлов из базы данных */
|
/* Список файлов из базы данных */
|
||||||
$query = $this->db->prepareStatement("SELECT * FROM files WHERE filepath = ?");
|
$query = $this->db->prepareStatement("SELECT * FROM files WHERE filepath = ?");
|
||||||
$query->setString(1, $name);
|
$query->setString(1, $name);
|
||||||
$list = $query->executeQuery();
|
$list = $query->executeQuery();
|
||||||
|
|
@ -530,7 +530,7 @@ class EFileSystem implements IFileSystem, IFileControl
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Удаляем директорию если она не пустая
|
* Удаляем директорию если она не пустая
|
||||||
*/
|
*/
|
||||||
function deleteDirectory($name)
|
function deleteDirectory($name)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Фильтр действий
|
* Фильтр действий
|
||||||
*/
|
*/
|
||||||
class ActionAccess
|
class ActionAccess
|
||||||
{
|
{
|
||||||
|
|
@ -13,13 +13,13 @@ class ActionAccess
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Проверка доступных действий для пользователя
|
* Проверка доступных действий для пользователя
|
||||||
* !! Реализация класса проверки действий не должна быть внутри Контроллера!!!
|
* !! Реализация класса проверки действий не должна быть внутри Контроллера!!!
|
||||||
* Информация о доступе может быть в файле, базе данных и т.д.
|
* Информация о доступе может быть в файле, базе данных и т.д.
|
||||||
*/
|
*/
|
||||||
function checkAction($action)
|
function checkAction($action)
|
||||||
{
|
{
|
||||||
// Импликация !! http://ru.wikipedia.org/wiki/Импликация
|
// Импликация !! http://ru.wikipedia.org/wiki/Импликация
|
||||||
return (!isset($this->access[$action]) || in_array(UserAccess::$access, $this->access[$action]));
|
return (!isset($this->access[$action]) || in_array(UserAccess::$access, $this->access[$action]));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
require_once 'filterbase.php';
|
require_once 'filterbase.php';
|
||||||
require_once 'filterlogin.php';
|
require_once 'filterlogin.php';
|
||||||
|
|
||||||
// Êëàññ äîëæåí áûòü â áèáëèîòåêå ïðèëîæåíèÿ
|
// Класс должен быть в библиотеке приложения
|
||||||
class UserAccess
|
class UserAccess
|
||||||
{
|
{
|
||||||
const LIFE_TIME = 1800; // = 30min * 60sec;
|
const LIFE_TIME = 1800; // = 30min * 60sec;
|
||||||
|
|
@ -50,7 +50,7 @@ class UserAccess
|
||||||
if ($result) {
|
if ($result) {
|
||||||
$time = time();
|
$time = time();
|
||||||
$id = self::$id;
|
$id = self::$id;
|
||||||
self::$db->executeQuery("UPDATE users SET lasttime = $time WHERE id_user = $id"); // Âðåìÿ âõîäà
|
self::$db->executeQuery("UPDATE users SET lasttime = $time WHERE id_user = $id"); // Время входа
|
||||||
}
|
}
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
@ -63,9 +63,9 @@ class UserAccess
|
||||||
if ($result) {
|
if ($result) {
|
||||||
$lasttime = $result->getInt('lasttime');
|
$lasttime = $result->getInt('lasttime');
|
||||||
$time = time();
|
$time = time();
|
||||||
if ($time - $lasttime > self::LIFE_TIME) return null; // Âûøëî âðåìÿ ñåññèè
|
if ($time - $lasttime > self::LIFE_TIME) return null; // Вышло время сессии
|
||||||
$id = self::$id;
|
$id = self::$id;
|
||||||
$stmt = self::$db->executeQuery("UPDATE users SET lasttime = $time WHERE id_user = $id"); // Âðåìÿ ïîñëåäíåãî îáðàùåíèÿ âõîäà
|
$stmt = self::$db->executeQuery("UPDATE users SET lasttime = $time WHERE id_user = $id"); // Время последнего обращения входа
|
||||||
}
|
}
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Попытка реализовать фильтр для запросов
|
* Попытка реализовать фильтр для запросов
|
||||||
*/
|
*/
|
||||||
class Filter
|
class Filter
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,35 +1,35 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Фильтр для проверки авторизации
|
* Фильтр для проверки авторизации
|
||||||
*
|
*
|
||||||
* action: login(password, login)
|
* action: login(password, login)
|
||||||
* action: logout()
|
* action: logout()
|
||||||
*/
|
*/
|
||||||
// В класс авторизации передавать обьект для управления пользователем
|
// В класс авторизации передавать обьект для управления пользователем
|
||||||
// Вынести в отдельный файл
|
// Вынести в отдельный файл
|
||||||
class LoginFilter extends Filter
|
class LoginFilter extends Filter
|
||||||
{
|
{
|
||||||
const SESSION_BROWSER_SIGN_SECRET = '@w3dsju45Msk#';
|
const SESSION_BROWSER_SIGN_SECRET = '@w3dsju45Msk#';
|
||||||
const SESSION_BROWSER_SIGN_KEYNAME = 'session.app.browser.sign';
|
const SESSION_BROWSER_SIGN_KEYNAME = 'session.app.browser.sign';
|
||||||
public $mode = 'ajax';
|
public $mode = 'ajax';
|
||||||
/**
|
/**
|
||||||
* Проверка авторизации
|
* Проверка авторизации
|
||||||
* @return Boolean Авторизовани пользователь или нет
|
* @return Boolean Авторизовани пользователь или нет
|
||||||
*/
|
*/
|
||||||
public function isLoggin(Collection $request)
|
public function isLoggin(Collection $request)
|
||||||
{
|
{
|
||||||
// Авторизация
|
// Авторизация
|
||||||
session_start();
|
session_start();
|
||||||
$db = $this->getConnection();
|
$db = $this->getConnection();
|
||||||
UserAccess::setUp($db); // Соединение
|
UserAccess::setUp($db); // Соединение
|
||||||
switch ($request->getAction()) {
|
switch ($request->getAction()) {
|
||||||
// Авторизация по постоянному паролю
|
// Авторизация по постоянному паролю
|
||||||
case 'login':
|
case 'login':
|
||||||
$login = $request->get('login');
|
$login = $request->get('login');
|
||||||
$password = $request->get('password');
|
$password = $request->get('password');
|
||||||
|
|
||||||
$result = UserAccess::getUserByLogin($login); // Поиск по логину
|
$result = UserAccess::getUserByLogin($login); // Поиск по логину
|
||||||
if ($result) {
|
if ($result) {
|
||||||
if (md5($password) == $result->getString('password')) { // password
|
if (md5($password) == $result->getString('password')) { // password
|
||||||
$this->enter($db, $result);
|
$this->enter($db, $result);
|
||||||
|
|
@ -38,14 +38,14 @@ class LoginFilter extends Filter
|
||||||
}
|
}
|
||||||
$request->set('error', true);
|
$request->set('error', true);
|
||||||
break;
|
break;
|
||||||
case 'logout': // Выход
|
case 'logout': // Выход
|
||||||
session_destroy();
|
session_destroy();
|
||||||
break;
|
break;
|
||||||
// Вход по временному паролю
|
// Вход по временному паролю
|
||||||
case 'enter':
|
case 'enter':
|
||||||
$login = $request->get('login');
|
$login = $request->get('login');
|
||||||
$password = $request->get('sid');
|
$password = $request->get('sid');
|
||||||
$result = UserAccess::getUserByLogin($login); // Поиск по логину
|
$result = UserAccess::getUserByLogin($login); // Поиск по логину
|
||||||
if ($result) {
|
if ($result) {
|
||||||
$temp = md5($result->getString('password') . $result->getString('login') . $result->getString('sid'));
|
$temp = md5($result->getString('password') . $result->getString('login') . $result->getString('sid'));
|
||||||
if ($password == $temp) {
|
if ($password == $temp) {
|
||||||
|
|
@ -56,10 +56,10 @@ class LoginFilter extends Filter
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
$hash = $this->getBrowserSign();
|
$hash = $this->getBrowserSign();
|
||||||
// Если $hash не совпадает $_SESSION['hash'] то удаляем сессию
|
// Если $hash не совпадает $_SESSION['hash'] то удаляем сессию
|
||||||
if (isset($_SESSION ['access']) && isset($_SESSION[self::SESSION_BROWSER_SIGN_SECRET])) {
|
if (isset($_SESSION ['access']) && isset($_SESSION[self::SESSION_BROWSER_SIGN_SECRET])) {
|
||||||
if ($hash == $_SESSION[self::SESSION_BROWSER_SIGN_SECRET]) {
|
if ($hash == $_SESSION[self::SESSION_BROWSER_SIGN_SECRET]) {
|
||||||
UserAccess::getUserById($_SESSION ['access']); // Поиск по идентификатору
|
UserAccess::getUserById($_SESSION ['access']); // Поиск по идентификатору
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
session_destroy();
|
session_destroy();
|
||||||
|
|
@ -94,8 +94,8 @@ class LoginFilter extends Filter
|
||||||
public function execute(Collection $request)
|
public function execute(Collection $request)
|
||||||
{
|
{
|
||||||
if (!$this->isLoggin($request)) {
|
if (!$this->isLoggin($request)) {
|
||||||
// Параметры при неправильной авторизации
|
// Параметры при неправильной авторизации
|
||||||
// Действия по умолчанию !! Возможно переход на форму регистрации
|
// Действия по умолчанию !! Возможно переход на форму регистрации
|
||||||
$request->set('module', 'login');
|
$request->set('module', 'login');
|
||||||
$request->set('mode', $this->mode);
|
$request->set('mode', $this->mode);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
require_once 'core/adapter.php';
|
require_once 'core/adapter.php';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Новое API для Форм
|
* Новое API для Форм
|
||||||
* $form = new Form ();
|
* $form = new Form ();
|
||||||
* $form->render () -> html,
|
* $form->render () -> html,
|
||||||
* $form->adjust ($scheme);
|
* $form->adjust ($scheme);
|
||||||
|
|
@ -20,24 +20,24 @@ require_once 'core/adapter.php';
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Элемент формы
|
* Элемент формы
|
||||||
* @package core
|
* @package core
|
||||||
*/
|
*/
|
||||||
class TField {
|
class TField {
|
||||||
protected $_value; // Форматированное значение поля
|
protected $_value; // Форматированное значение поля
|
||||||
|
|
||||||
var $label; // Метка поля
|
var $label; // Метка поля
|
||||||
var $rule = array ();// Правила для проверки поля
|
var $rule = array ();// Правила для проверки поля
|
||||||
var $value; // Форматированное Значение поля
|
var $value; // Форматированное Значение поля
|
||||||
// var $default; // Значение по умолчанию
|
// var $default; // Значение по умолчанию
|
||||||
var $error = false; // в XRule Правила для проверки значений
|
var $error = false; // в XRule Правила для проверки значений
|
||||||
var $error_msg = "Поле не может быть пустым";
|
var $error_msg = "Поле не может быть пустым";
|
||||||
var $type; // Каждому типу элемента соответствует макрос TAL
|
var $type; // Каждому типу элемента соответствует макрос TAL
|
||||||
|
|
||||||
public function __construct ($input) {
|
public function __construct ($input) {
|
||||||
// $this->deafult = null;
|
// $this->deafult = null;
|
||||||
$this->require = false;
|
$this->require = false;
|
||||||
// Инициализация свойст обьетка
|
// Инициализация свойст обьетка
|
||||||
foreach ($input as $key => $value) {
|
foreach ($input as $key => $value) {
|
||||||
$this->$key = $value;
|
$this->$key = $value;
|
||||||
}
|
}
|
||||||
|
|
@ -56,7 +56,7 @@ class TField {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Добавить методы getString, setString ??
|
// Добавить методы getString, setString ??
|
||||||
|
|
||||||
function setValue ($value) {
|
function setValue ($value) {
|
||||||
$this->_value = $value;
|
$this->_value = $value;
|
||||||
|
|
@ -69,7 +69,7 @@ class TField {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Поле ввода Input
|
* Поле ввода Input
|
||||||
* @package core
|
* @package core
|
||||||
*/
|
*/
|
||||||
class TInput extends TField {
|
class TInput extends TField {
|
||||||
|
|
@ -95,7 +95,7 @@ class TCheckbox extends TField {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Выбор из одного элемента
|
* Выбор из одного элемента
|
||||||
*/
|
*/
|
||||||
class TSelect1 extends TField {
|
class TSelect1 extends TField {
|
||||||
var $options = array ();
|
var $options = array ();
|
||||||
|
|
@ -134,11 +134,11 @@ class TSelectGroup extends TField {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Поле с датой
|
* Поле с датой
|
||||||
* @package core
|
* @package core
|
||||||
*/
|
*/
|
||||||
class TDate extends TField {
|
class TDate extends TField {
|
||||||
var $error_msg = "Неверный формат даты";
|
var $error_msg = "Неверный формат даты";
|
||||||
var $separator = ".";
|
var $separator = ".";
|
||||||
|
|
||||||
public function __construct ($input) {
|
public function __construct ($input) {
|
||||||
|
|
@ -167,7 +167,7 @@ class TDate extends TField {
|
||||||
}
|
}
|
||||||
|
|
||||||
class TTime extends TField {
|
class TTime extends TField {
|
||||||
var $error_msg = "Неверный формат времени";
|
var $error_msg = "Неверный формат времени";
|
||||||
|
|
||||||
public function __construct ($input) {
|
public function __construct ($input) {
|
||||||
parent::__construct ($input);
|
parent::__construct ($input);
|
||||||
|
|
@ -200,7 +200,7 @@ class TTime extends TField {
|
||||||
|
|
||||||
|
|
||||||
/* *
|
/* *
|
||||||
* Текстовое поле
|
* Текстовое поле
|
||||||
* @package core
|
* @package core
|
||||||
*/
|
*/
|
||||||
class TTextArea extends TField {
|
class TTextArea extends TField {
|
||||||
|
|
@ -211,7 +211,7 @@ class TTextArea extends TField {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Поле для ввода пароля
|
* Поле для ввода пароля
|
||||||
* @package core
|
* @package core
|
||||||
*/
|
*/
|
||||||
class TSecret extends TField {
|
class TSecret extends TField {
|
||||||
|
|
@ -235,7 +235,7 @@ class TUpload extends TField {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Форма для ввода
|
* Форма для ввода
|
||||||
* @package core
|
* @package core
|
||||||
*/
|
*/
|
||||||
class TForm {
|
class TForm {
|
||||||
|
|
@ -271,12 +271,12 @@ class TForm {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Метод должен проверять значения полей формы полсле заполнения
|
* Метод должен проверять значения полей формы полсле заполнения
|
||||||
* Проверка правильности заполнения формы и установка значений
|
* Проверка правильности заполнения формы и установка значений
|
||||||
*/
|
*/
|
||||||
function isValid () {
|
function isValid () {
|
||||||
$haveErrors = false;
|
$haveErrors = false;
|
||||||
foreach ($this->field as $name => $el) { // ссылка
|
foreach ($this->field as $name => $el) { // ссылка
|
||||||
if ($this->field [$name] instanceof TUpload) {
|
if ($this->field [$name] instanceof TUpload) {
|
||||||
// print_r ($_POST);
|
// print_r ($_POST);
|
||||||
$filename = $this->request->getRawData ('files', $name);
|
$filename = $this->request->getRawData ('files', $name);
|
||||||
|
|
@ -296,7 +296,7 @@ class TForm {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Добавляет одно поле ввода на форму
|
* Добавляет одно поле ввода на форму
|
||||||
*/
|
*/
|
||||||
public function addField ($init) {
|
public function addField ($init) {
|
||||||
assert ($init['type']);
|
assert ($init['type']);
|
||||||
|
|
@ -310,7 +310,7 @@ class TForm {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Добавляет спсок полей для формы
|
* Добавляет спсок полей для формы
|
||||||
* @param array $list
|
* @param array $list
|
||||||
*/
|
*/
|
||||||
public function addFieldList ($list) {
|
public function addFieldList ($list) {
|
||||||
|
|
@ -320,10 +320,10 @@ class TForm {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Заполняет форму данными из коллекции
|
* Заполняет форму данными из коллекции
|
||||||
* Для обьектов и массивов можно использовать Adapter pattern
|
* Для обьектов и массивов можно использовать Adapter pattern
|
||||||
* @param object $data
|
* @param object $data
|
||||||
* @param array $schema Связь между элементами формы и свойствами обьекта
|
* @param array $schema Связь между элементами формы и свойствами обьекта
|
||||||
*/
|
*/
|
||||||
public function fill ($data) {
|
public function fill ($data) {
|
||||||
foreach ($this->field as $name => $el) {
|
foreach ($this->field as $name => $el) {
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,15 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Элемент формы
|
* Элемент формы
|
||||||
* @package core
|
* @package core
|
||||||
*/
|
*/
|
||||||
class TField
|
class TField
|
||||||
{
|
{
|
||||||
public $name;
|
public $name;
|
||||||
public $label; // Метка поля
|
public $label; // Метка поля
|
||||||
public $value; // Значение поля
|
public $value; // Значение поля
|
||||||
public $type; // Каждому типу элемента соответствует макрос TAL
|
public $type; // Каждому типу элемента соответствует макрос TAL
|
||||||
public $error_msg = null;
|
public $error_msg = null;
|
||||||
public $error = false;
|
public $error = false;
|
||||||
public $require = false;
|
public $require = false;
|
||||||
|
|
@ -20,7 +20,7 @@ class TField
|
||||||
if (isset($input['validate'])) {
|
if (isset($input['validate'])) {
|
||||||
$this->require = strpos($input['validate'], 'require') !== false;
|
$this->require = strpos($input['validate'], 'require') !== false;
|
||||||
}
|
}
|
||||||
// Инициализация свойст обьетка
|
// Инициализация свойст обьетка
|
||||||
foreach (array('label', 'name', 'type') as $name) {
|
foreach (array('label', 'name', 'type') as $name) {
|
||||||
$this->$name = $input[$name];
|
$this->$name = $input[$name];
|
||||||
}
|
}
|
||||||
|
|
@ -33,14 +33,14 @@ class TField
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Поле ввода Input
|
* Поле ввода Input
|
||||||
* @package core
|
* @package core
|
||||||
*/
|
*/
|
||||||
class TInput extends TField {
|
class TInput extends TField {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Выбор из одного элемента
|
* Выбор из одного элемента
|
||||||
*/
|
*/
|
||||||
class TSelect1 extends TField
|
class TSelect1 extends TField
|
||||||
{
|
{
|
||||||
|
|
@ -52,13 +52,13 @@ class TSelect1 extends TField
|
||||||
|
|
||||||
function setValue($value)
|
function setValue($value)
|
||||||
{
|
{
|
||||||
// Установить selected у options
|
// Установить selected у options
|
||||||
$this->value = $value;
|
$this->value = $value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Поле с датой
|
* Поле с датой
|
||||||
* @package core
|
* @package core
|
||||||
*/
|
*/
|
||||||
class TDate extends TField
|
class TDate extends TField
|
||||||
|
|
@ -66,7 +66,7 @@ class TDate extends TField
|
||||||
}
|
}
|
||||||
|
|
||||||
/* *
|
/* *
|
||||||
* Текстовое поле
|
* Текстовое поле
|
||||||
* @package core
|
* @package core
|
||||||
*/
|
*/
|
||||||
class TTextArea extends TField
|
class TTextArea extends TField
|
||||||
|
|
@ -74,7 +74,7 @@ class TTextArea extends TField
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Поле для ввода пароля
|
* Поле для ввода пароля
|
||||||
* @package core
|
* @package core
|
||||||
*/
|
*/
|
||||||
class TSecret extends TField
|
class TSecret extends TField
|
||||||
|
|
@ -86,7 +86,7 @@ class TUpload extends TField
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Форма для ввода
|
* Форма для ввода
|
||||||
* @package core
|
* @package core
|
||||||
*/
|
*/
|
||||||
class TForm
|
class TForm
|
||||||
|
|
@ -111,7 +111,7 @@ class TForm
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Добавляет одно поле ввода на форму
|
* Добавляет одно поле ввода на форму
|
||||||
*/
|
*/
|
||||||
public function addField (array $init)
|
public function addField (array $init)
|
||||||
{
|
{
|
||||||
|
|
@ -127,7 +127,7 @@ class TForm
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Добавляет спсок полей для формы
|
* Добавляет спсок полей для формы
|
||||||
* @param array $list
|
* @param array $list
|
||||||
*/
|
*/
|
||||||
public function addFieldList (array $list)
|
public function addFieldList (array $list)
|
||||||
|
|
@ -138,7 +138,7 @@ class TForm
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Устанавливает ошибки после проверки
|
* Устанавливает ошибки после проверки
|
||||||
*/
|
*/
|
||||||
function setError (Validator $validator)
|
function setError (Validator $validator)
|
||||||
{
|
{
|
||||||
|
|
@ -150,7 +150,7 @@ class TForm
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Устанавливает значения из масива
|
* Устанавливает значения из масива
|
||||||
*/
|
*/
|
||||||
function setValues (Collection $request) {
|
function setValues (Collection $request) {
|
||||||
foreach ($this->field as $key => $el) {
|
foreach ($this->field as $key => $el) {
|
||||||
|
|
@ -160,9 +160,9 @@ class TForm
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Заполняет форму данными из обьекта
|
* Заполняет форму данными из обьекта
|
||||||
* @param object $data
|
* @param object $data
|
||||||
* @param array $schema Связь между элементами формы и свойствами обьекта
|
* @param array $schema Связь между элементами формы и свойствами обьекта
|
||||||
*/
|
*/
|
||||||
public function fill ($data, array $schema)
|
public function fill ($data, array $schema)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* http://www.alternateinterior.com/2006/09/a-viewstate-for-php.html
|
* http://www.alternateinterior.com/2006/09/a-viewstate-for-php.html
|
||||||
* Управление состоянием между страницами
|
* Управление состоянием между страницами
|
||||||
*/
|
*/
|
||||||
class ViewState // extends Collection
|
class ViewState // extends Collection
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Генерация файлов Grpahviz dot
|
* Генерация файлов Grpahviz dot
|
||||||
*/
|
*/
|
||||||
class Dot
|
class Dot
|
||||||
{
|
{
|
||||||
|
|
@ -34,11 +34,11 @@ class Dot
|
||||||
function assocToDot (array $array, array $label)
|
function assocToDot (array $array, array $label)
|
||||||
{
|
{
|
||||||
$result = array (self::getHeader());
|
$result = array (self::getHeader());
|
||||||
// Метки
|
// Метки
|
||||||
foreach ($label as $value) {
|
foreach ($label as $value) {
|
||||||
$result [] = "\t\"{$value[0]}\" [ label = \"{$value[1]}\" ] \n";
|
$result [] = "\t\"{$value[0]}\" [ label = \"{$value[1]}\" ] \n";
|
||||||
}
|
}
|
||||||
// Ассоциации
|
// Ассоциации
|
||||||
foreach ($array as $key => $value) {
|
foreach ($array as $key => $value) {
|
||||||
foreach ($value as $n) {
|
foreach ($value as $n) {
|
||||||
$result [] = "\t\"$key\" -> \"$n\"\n";
|
$result [] = "\t\"$key\" -> \"$n\"\n";
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,12 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Функциональное программирование в PHP
|
* Функциональное программирование в PHP
|
||||||
* package functional
|
* package functional
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Эмуляция каррированой функции
|
* Эмуляция каррированой функции
|
||||||
*/
|
*/
|
||||||
class __right {
|
class __right {
|
||||||
protected $params;
|
protected $params;
|
||||||
|
|
@ -72,7 +72,7 @@ function partial() {
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Композиция функций
|
* Композиция функций
|
||||||
*/
|
*/
|
||||||
class __compose {
|
class __compose {
|
||||||
protected $fns;
|
protected $fns;
|
||||||
|
|
@ -91,7 +91,7 @@ class __compose {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Композиция функций
|
* Композиция функций
|
||||||
* @param mixed $a
|
* @param mixed $a
|
||||||
* @param mixed $b
|
* @param mixed $b
|
||||||
*
|
*
|
||||||
|
|
@ -103,7 +103,7 @@ function compose() {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Карирование справа
|
* Карирование справа
|
||||||
*
|
*
|
||||||
* @return array[int]mixed
|
* @return array[int]mixed
|
||||||
*/
|
*/
|
||||||
|
|
@ -113,7 +113,7 @@ function rcurry() {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Карирование слева
|
* Карирование слева
|
||||||
*
|
*
|
||||||
* @return array[int]mixed
|
* @return array[int]mixed
|
||||||
*/
|
*/
|
||||||
|
|
@ -123,8 +123,8 @@ function lcurry() {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Разделение массива на два по условию
|
* Разделение массива на два по условию
|
||||||
* @param mixed $pred Условие по которому разделяется массив
|
* @param mixed $pred Условие по которому разделяется массив
|
||||||
* @param array $lst
|
* @param array $lst
|
||||||
*
|
*
|
||||||
* @return array[int]mixed
|
* @return array[int]mixed
|
||||||
|
|
@ -177,7 +177,7 @@ function __cmp_less($a, $b, $key) {
|
||||||
return ($a[$key] < $b[$key]) ? -1 : 1;
|
return ($a[$key] < $b[$key]) ? -1 : 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Сравнение по ключу массиве
|
// Сравнение по ключу массиве
|
||||||
function __index($n, $key, $row) {
|
function __index($n, $key, $row) {
|
||||||
return ($row[$key] == $n);
|
return ($row[$key] == $n);
|
||||||
}
|
}
|
||||||
|
|
@ -199,23 +199,23 @@ function __empty($x) {
|
||||||
return empty($x);
|
return empty($x);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Отрицание
|
// Отрицание
|
||||||
function __not($x) {
|
function __not($x) {
|
||||||
return !$x;
|
return !$x;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Не равно
|
// Не равно
|
||||||
function __neq($x, $y) {
|
function __neq($x, $y) {
|
||||||
return $x != $y;
|
return $x != $y;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Равно
|
// Равно
|
||||||
function __eq($x, $y) {
|
function __eq($x, $y) {
|
||||||
return $x == $y;
|
return $x == $y;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Извлекает из многомерого массива значения с определенным ключом
|
* Извлекает из многомерого массива значения с определенным ключом
|
||||||
* @example key_values('a', array(1 => array('a' => 1, 'b' => 2))) => array(1)
|
* @example key_values('a', array(1 => array('a' => 1, 'b' => 2))) => array(1)
|
||||||
*
|
*
|
||||||
* @return mixed
|
* @return mixed
|
||||||
|
|
@ -261,7 +261,7 @@ function _get_key($key, $value, $array) {
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Логическа операция && ко всем элементам массива
|
* Логическа операция && ко всем элементам массива
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
function every(array $array, $callback) {
|
function every(array $array, $callback) {
|
||||||
|
|
@ -274,7 +274,7 @@ function every(array $array, $callback) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Логическа операция || ко всем элементам массива
|
* Логическа операция || ко всем элементам массива
|
||||||
* @param array $array
|
* @param array $array
|
||||||
* @param mixed $callback
|
* @param mixed $callback
|
||||||
*
|
*
|
||||||
|
|
@ -312,11 +312,11 @@ function call() {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Поиск элемента в массиве
|
* Поиск элемента в массиве
|
||||||
* @param function $cb сравнение с элементом массива
|
* @param function $cb сравнение с элементом массива
|
||||||
* @param array $hs массив в котором ищется значение
|
* @param array $hs массив в котором ищется значение
|
||||||
*
|
*
|
||||||
* @return int|string ключ найденого элемента в массиве
|
* @return int|string ключ найденого элемента в массиве
|
||||||
*/
|
*/
|
||||||
function array_usearch($cb, array $hs, $strict = false) {
|
function array_usearch($cb, array $hs, $strict = false) {
|
||||||
foreach($hs as $key => $value) if (call_user_func_array($cb, array($value, $key, $strict))) return $key;
|
foreach($hs as $key => $value) if (call_user_func_array($cb, array($value, $key, $strict))) return $key;
|
||||||
|
|
@ -324,7 +324,7 @@ function array_usearch($cb, array $hs, $strict = false) {
|
||||||
|
|
||||||
if (!function_exists('hash_key')) {
|
if (!function_exists('hash_key')) {
|
||||||
/**
|
/**
|
||||||
* Преобразует ключи элементов для многомерного массива
|
* Преобразует ключи элементов для многомерного массива
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
function hash_key ($key_name,/*. array .*/ $array) {
|
function hash_key ($key_name,/*. array .*/ $array) {
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ class Rectangle
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Смещает прямоугольник на заданное положение
|
* Смещает прямоугольник на заданное положение
|
||||||
*/
|
*/
|
||||||
function addPoint(Point $point)
|
function addPoint(Point $point)
|
||||||
{
|
{
|
||||||
|
|
@ -42,7 +42,7 @@ class Rectangle
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Координаты точки при выравнивании прямоугольника относительно текущего
|
* Координаты точки при выравнивании прямоугольника относительно текущего
|
||||||
*/
|
*/
|
||||||
function alignment(Rectangle $base)
|
function alignment(Rectangle $base)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ require_once 'core/json.php';
|
||||||
require_once 'core/session.php';
|
require_once 'core/session.php';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Неверный запрос
|
* Неверный запрос
|
||||||
*/
|
*/
|
||||||
class WrongRequestException extends Exception
|
class WrongRequestException extends Exception
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ class json
|
||||||
return php2js($var); //json_encode(self::prepare($var, array('self', 'unicode_encode')));
|
return php2js($var); //json_encode(self::prepare($var, array('self', 'unicode_encode')));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Преобразование json в массив
|
// Преобразование json в массив
|
||||||
static function decode($var, $encoding = 'utf-8', $is_array = false)
|
static function decode($var, $encoding = 'utf-8', $is_array = false)
|
||||||
{
|
{
|
||||||
if ($encoding != 'utf-8') $var = iconv($encoding, self::$INTERNAL_ENCODING, $var);
|
if ($encoding != 'utf-8') $var = iconv($encoding, self::$INTERNAL_ENCODING, $var);
|
||||||
|
|
@ -46,7 +46,7 @@ class json
|
||||||
}
|
}
|
||||||
$var = $new;
|
$var = $new;
|
||||||
} elseif (is_object($var)) {
|
} elseif (is_object($var)) {
|
||||||
// Было преобразование типа для отображения !!
|
// Было преобразование типа для отображения !!
|
||||||
$vars = get_object_vars($var);
|
$vars = get_object_vars($var);
|
||||||
foreach ($vars as $m => $v) {
|
foreach ($vars as $m => $v) {
|
||||||
$var->$m = self::prepare($var->$m, $encode);
|
$var->$m = self::prepare($var->$m, $encode);
|
||||||
|
|
|
||||||
|
|
@ -1,20 +1,20 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
require_once 'core/functions.php';
|
require_once 'core/functions.php';
|
||||||
// Переместить в фильтры!!
|
// Переместить в фильтры!!
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Выбор макета страницы.
|
* Выбор макета страницы.
|
||||||
* Выбор оформления страницы осуществляется если было совпадение с каким либо условием
|
* Выбор оформления страницы осуществляется если было совпадение с каким либо условием
|
||||||
*/
|
*/
|
||||||
class LayoutManager extends Filter
|
class LayoutManager extends Filter
|
||||||
{
|
{
|
||||||
// Массив условий с их макетами
|
// Массив условий с их макетами
|
||||||
protected $condition = array();
|
protected $condition = array();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Функция которая добавляет условие для проверки параметров $_GET
|
* Функция которая добавляет условие для проверки параметров $_GET
|
||||||
* @param $get array() | true Ассоциативный массив ключей и значений для $_GET
|
* @param $get array() | true Ассоциативный массив ключей и значений для $_GET
|
||||||
*
|
*
|
||||||
* @example
|
* @example
|
||||||
* addConditionGet(array('module' => 'personal'), 'personal')
|
* addConditionGet(array('module' => 'personal'), 'personal')
|
||||||
|
|
@ -26,7 +26,7 @@ class LayoutManager extends Filter
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Условие для аякс запросов. Тоже самое что и addConditionGet но еще проверяется является ли запрос ajax
|
* Условие для аякс запросов. Тоже самое что и addConditionGet но еще проверяется является ли запрос ajax
|
||||||
*/
|
*/
|
||||||
public function addConditionXHR($get, Filter $layout)
|
public function addConditionXHR($get, Filter $layout)
|
||||||
{
|
{
|
||||||
|
|
@ -51,9 +51,9 @@ class LayoutManager extends Filter
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Добавляет есловие в общем виде
|
* Добавляет есловие в общем виде
|
||||||
* @parma $get function(HttpRequest) Функция
|
* @parma $get function(HttpRequest) Функция
|
||||||
* @parma $layout Layout Макет
|
* @parma $layout Layout Макет
|
||||||
*/
|
*/
|
||||||
public function addCondition($get, Filter $layout)
|
public function addCondition($get, Filter $layout)
|
||||||
{
|
{
|
||||||
|
|
@ -61,7 +61,7 @@ class LayoutManager extends Filter
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Выбирает и применяет макет для страницы
|
* Выбирает и применяет макет для страницы
|
||||||
*/
|
*/
|
||||||
public function execute(Collection $request)
|
public function execute(Collection $request)
|
||||||
{
|
{
|
||||||
|
|
@ -82,7 +82,7 @@ class LayoutManager extends Filter
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Самый простой макет
|
* Самый простой макет
|
||||||
*/
|
*/
|
||||||
class LayoutNone extends Filter
|
class LayoutNone extends Filter
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Класс для работы с почтой
|
* Класс для работы с почтой
|
||||||
* http://en.wikipedia.org/wiki/MIME
|
* http://en.wikipedia.org/wiki/MIME
|
||||||
*/
|
*/
|
||||||
class Mail
|
class Mail
|
||||||
|
|
@ -20,13 +20,13 @@ class Mail
|
||||||
|
|
||||||
function __construct() {
|
function __construct() {
|
||||||
$this->setEncoding("windows-1251");
|
$this->setEncoding("windows-1251");
|
||||||
$this->uniqid = strtoupper(uniqid(time())); // Идентефикатор разделителя
|
$this->uniqid = strtoupper(uniqid(time())); // Идентефикатор разделителя
|
||||||
|
|
||||||
// $this->mime
|
// $this->mime
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Установка отправителя
|
* Установка отправителя
|
||||||
*/
|
*/
|
||||||
function from($name)
|
function from($name)
|
||||||
{
|
{
|
||||||
|
|
@ -34,7 +34,7 @@ class Mail
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Установка получателя
|
* Установка получателя
|
||||||
*/
|
*/
|
||||||
function to($name) // recipient
|
function to($name) // recipient
|
||||||
{
|
{
|
||||||
|
|
@ -42,7 +42,7 @@ class Mail
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Установка получателей копии
|
* Установка получателей копии
|
||||||
*/
|
*/
|
||||||
function copy($name) // recipient cc
|
function copy($name) // recipient cc
|
||||||
{
|
{
|
||||||
|
|
@ -55,7 +55,7 @@ class Mail
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Тема письма
|
* Тема письма
|
||||||
*/
|
*/
|
||||||
function subject($subject)
|
function subject($subject)
|
||||||
{
|
{
|
||||||
|
|
@ -63,7 +63,7 @@ class Mail
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Текст письма
|
* Текст письма
|
||||||
*/
|
*/
|
||||||
function setContent($text)
|
function setContent($text)
|
||||||
{
|
{
|
||||||
|
|
@ -71,7 +71,7 @@ class Mail
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Кодировка текста в письме
|
* Кодировка текста в письме
|
||||||
*/
|
*/
|
||||||
function setEncoding($encoding)
|
function setEncoding($encoding)
|
||||||
{
|
{
|
||||||
|
|
@ -79,7 +79,7 @@ class Mail
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Добавление вложения из файла
|
* Добавление вложения из файла
|
||||||
*/
|
*/
|
||||||
function addAttachment($filename, $name = false)
|
function addAttachment($filename, $name = false)
|
||||||
{
|
{
|
||||||
|
|
@ -93,7 +93,7 @@ class Mail
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Добавление вложения из строки с указанием имени файла
|
* Добавление вложения из строки с указанием имени файла
|
||||||
*/
|
*/
|
||||||
function addAttachmentRaw($data, $name)
|
function addAttachmentRaw($data, $name)
|
||||||
{
|
{
|
||||||
|
|
@ -108,7 +108,7 @@ class Mail
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Общий формат тегов MIME
|
* Общий формат тегов MIME
|
||||||
* http://tools.ietf.org/html/rfc2045
|
* http://tools.ietf.org/html/rfc2045
|
||||||
*/
|
*/
|
||||||
function mimeTag($name, $value, array $args = array())
|
function mimeTag($name, $value, array $args = array())
|
||||||
|
|
@ -129,7 +129,7 @@ class Mail
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Тело сообщения
|
* Тело сообщения
|
||||||
*/
|
*/
|
||||||
function getMessage()
|
function getMessage()
|
||||||
{
|
{
|
||||||
|
|
@ -139,7 +139,7 @@ class Mail
|
||||||
$message .= PHP_EOL . $this->content . PHP_EOL . PHP_EOL;
|
$message .= PHP_EOL . $this->content . PHP_EOL . PHP_EOL;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Вложения
|
* Вложения
|
||||||
* http://tools.ietf.org/html/rfc2046#section-5.1.3
|
* http://tools.ietf.org/html/rfc2046#section-5.1.3
|
||||||
*/
|
*/
|
||||||
foreach ($this->attachment as $value) {
|
foreach ($this->attachment as $value) {
|
||||||
|
|
@ -155,7 +155,7 @@ class Mail
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Заголовок сообщения
|
* Заголовок сообщения
|
||||||
*/
|
*/
|
||||||
function getHeader()
|
function getHeader()
|
||||||
{
|
{
|
||||||
|
|
@ -180,7 +180,7 @@ class Mail
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Вывод строки для сохранения в формате .eml
|
* Вывод строки для сохранения в формате .eml
|
||||||
*/
|
*/
|
||||||
function eml()
|
function eml()
|
||||||
{
|
{
|
||||||
|
|
@ -188,7 +188,7 @@ class Mail
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Отправка почты
|
* Отправка почты
|
||||||
*/
|
*/
|
||||||
function send()
|
function send()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ class ModelFactory
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Создает модель
|
* Создает модель
|
||||||
* @param string $name
|
* @param string $name
|
||||||
* @return model
|
* @return model
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -3,10 +3,10 @@
|
||||||
require_once 'core/primitive.php';
|
require_once 'core/primitive.php';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Использовать интерфейсы чтобы определить какие действия можно совершать с обьектом и таким образом
|
* Использовать интерфейсы чтобы определить какие действия можно совершать с обьектом и таким образом
|
||||||
* Строить набор действий Action и отображений View для обьекта
|
* Строить набор действий Action и отображений View для обьекта
|
||||||
* Т.к отображение данных может быть не только на таблицу баз данных
|
* Т.к отображение данных может быть не только на таблицу баз данных
|
||||||
* И возможно реализованны все интерфейсы
|
* И возможно реализованны все интерфейсы
|
||||||
*/
|
*/
|
||||||
interface IDataList
|
interface IDataList
|
||||||
{
|
{
|
||||||
|
|
@ -22,22 +22,22 @@ interface IDataSave
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Отображение таблицы базы данных в обьекты
|
* Отображение таблицы базы данных в обьекты
|
||||||
* Mapper -> DataMapper implements IDataList, IDataSave, IDataSort, IDataDelete ...
|
* Mapper -> DataMapper implements IDataList, IDataSave, IDataSort, IDataDelete ...
|
||||||
*
|
*
|
||||||
* @package core
|
* @package core
|
||||||
*/
|
*/
|
||||||
class DataMapper implements IDataList
|
class DataMapper implements IDataList
|
||||||
{
|
{
|
||||||
/* Хранить метаданные в статическом свойстве класса для ототбражения ?!, + Скрипт для генерации метаданных!!
|
/* Хранить метаданные в статическом свойстве класса для ототбражения ?!, + Скрипт для генерации метаданных!!
|
||||||
*/
|
*/
|
||||||
public $factory;
|
public $factory;
|
||||||
public $className; /* Класс на который будет отображаться строчка таблицы */
|
public $className; /* Класс на который будет отображаться строчка таблицы */
|
||||||
public $filter = ""; /* */
|
public $filter = ""; /* */
|
||||||
public $schema = array (); /* Соответствие между свойством обьекта и столбцом, добавить тип для записей !! */
|
public $schema = array (); /* Соответствие между свойством обьекта и столбцом, добавить тип для записей !! */
|
||||||
public $database; /* Таблица */
|
public $database; /* Таблица */
|
||||||
public $index; /* Индексный столбец */
|
public $index; /* Индексный столбец */
|
||||||
public $db; /* Соединение с базой данных */
|
public $db; /* Соединение с базой данных */
|
||||||
public $reference = array (null, null);
|
public $reference = array (null, null);
|
||||||
|
|
||||||
public function __construct ()
|
public function __construct ()
|
||||||
|
|
@ -56,13 +56,13 @@ class DataMapper implements IDataList
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Поиск строки в таблице по идентификатору
|
* Поиск строки в таблице по идентификатору
|
||||||
* @param $id Значение идентификатора
|
* @param $id Значение идентификатора
|
||||||
* @return Обьект класса $className
|
* @return Обьект класса $className
|
||||||
*/
|
*/
|
||||||
public function findById ($id)
|
public function findById ($id)
|
||||||
{
|
{
|
||||||
// Строки запроса преобразовать в методы (getSQLSelect ...)
|
// Строки запроса преобразовать в методы (getSQLSelect ...)
|
||||||
// Query::from($this->database)->where ($this->index, "=", $id)->select();
|
// Query::from($this->database)->where ($this->index, "=", $id)->select();
|
||||||
$stmt = $this->db->prepareStatement ("SELECT * FROM ".$this->database." WHERE ".$this->index." = ?");
|
$stmt = $this->db->prepareStatement ("SELECT * FROM ".$this->database." WHERE ".$this->index." = ?");
|
||||||
$stmt->setInt (1, $id);
|
$stmt->setInt (1, $id);
|
||||||
|
|
@ -72,7 +72,7 @@ class DataMapper implements IDataList
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Преобразует parseResult в обьект
|
* Преобразует parseResult в обьект
|
||||||
*/
|
*/
|
||||||
public /* private */ function mapOne ($rs)
|
public /* private */ function mapOne ($rs)
|
||||||
{
|
{
|
||||||
|
|
@ -87,7 +87,7 @@ class DataMapper implements IDataList
|
||||||
public /* private */ function mapAll ($rs)
|
public /* private */ function mapAll ($rs)
|
||||||
{
|
{
|
||||||
$result = array ();
|
$result = array ();
|
||||||
// Преобразование SQL в обьект
|
// Преобразование SQL в обьект
|
||||||
while ($rs->next ()) {
|
while ($rs->next ()) {
|
||||||
$result[] = $this->mapOne ($rs);
|
$result[] = $this->mapOne ($rs);
|
||||||
}
|
}
|
||||||
|
|
@ -99,7 +99,7 @@ class DataMapper implements IDataList
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Преобразует параметры формы в SQL запрос WHERE
|
* Преобразует параметры формы в SQL запрос WHERE
|
||||||
* @param array $params
|
* @param array $params
|
||||||
* @param array $schema
|
* @param array $schema
|
||||||
* @return string
|
* @return string
|
||||||
|
|
@ -118,8 +118,8 @@ class DataMapper implements IDataList
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Удаление строк из таблицы с заданными индексами
|
* Удаление строк из таблицы с заданными индексами
|
||||||
* @param $list array Массив идентефикаторов
|
* @param $list array Массив идентефикаторов
|
||||||
*/
|
*/
|
||||||
public function deleteList (array $list)
|
public function deleteList (array $list)
|
||||||
{
|
{
|
||||||
|
|
@ -152,13 +152,13 @@ class DataMapper implements IDataList
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Извлекает список записей из базы данных
|
* Извлекает список записей из базы данных
|
||||||
*/
|
*/
|
||||||
public function findAll (Collection $request, $id = null)
|
public function findAll (Collection $request, $id = null)
|
||||||
{
|
{
|
||||||
$name0 = $this->database;
|
$name0 = $this->database;
|
||||||
$foreign = $this->reference[1];
|
$foreign = $this->reference[1];
|
||||||
// Переписать используя Query !!!
|
// Переписать используя Query !!!
|
||||||
if ($foreign && $id) {
|
if ($foreign && $id) {
|
||||||
$filter = ($this->filter)?$filter = " AND ".$this->filter: "";
|
$filter = ($this->filter)?$filter = " AND ".$this->filter: "";
|
||||||
$sql = "SELECT t1.* FROM $name0 as t1 WHERE t1.$foreign = $id " . $filter.self::getOrder($request);
|
$sql = "SELECT t1.* FROM $name0 as t1 WHERE t1.$foreign = $id " . $filter.self::getOrder($request);
|
||||||
|
|
@ -181,7 +181,7 @@ class DataMapper implements IDataList
|
||||||
{
|
{
|
||||||
$name0 = $this->database;
|
$name0 = $this->database;
|
||||||
$foreign = $this->reference[1];
|
$foreign = $this->reference[1];
|
||||||
// Переписать используя Query !!!
|
// Переписать используя Query !!!
|
||||||
if ($foreign && $id) {
|
if ($foreign && $id) {
|
||||||
$filter = ($this->filter)?$filter = " AND " . $this->filter: "";
|
$filter = ($this->filter)?$filter = " AND " . $this->filter: "";
|
||||||
$sql = "SELECT count(t1.*) as length FROM $name0 as t1 WHERE t1.$foreign = $id " . $filter;
|
$sql = "SELECT count(t1.*) as length FROM $name0 as t1 WHERE t1.$foreign = $id " . $filter;
|
||||||
|
|
@ -195,8 +195,8 @@ class DataMapper implements IDataList
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Добавление записи в базу данных
|
* Добавление записи в базу данных
|
||||||
* @param $o Обьект для записи в базу данных
|
* @param $o Обьект для записи в базу данных
|
||||||
*/
|
*/
|
||||||
public function saveTo (Model $o)
|
public function saveTo (Model $o)
|
||||||
{
|
{
|
||||||
|
|
@ -214,8 +214,8 @@ class DataMapper implements IDataList
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Обновляет запись в базе данных
|
* Обновляет запись в базе данных
|
||||||
* @param $o Обьект для обновления
|
* @param $o Обьект для обновления
|
||||||
*/
|
*/
|
||||||
public function updateTo (Model $o)
|
public function updateTo (Model $o)
|
||||||
{
|
{
|
||||||
|
|
@ -226,7 +226,7 @@ class DataMapper implements IDataList
|
||||||
$keys_values[] = $key." = '".$o->$value."'";
|
$keys_values[] = $key." = '".$o->$value."'";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Для всех должен быть идентефикатор id
|
// Для всех должен быть идентефикатор id
|
||||||
$stmt = $this->db->prepareStatement ("UPDATE ".$this->database." SET ".implode($keys_values, ",")." WHERE ".$this->index." = ".$o->id);
|
$stmt = $this->db->prepareStatement ("UPDATE ".$this->database." SET ".implode($keys_values, ",")." WHERE ".$this->index." = ".$o->id);
|
||||||
$stmt->executeQuery ();
|
$stmt->executeQuery ();
|
||||||
}
|
}
|
||||||
|
|
@ -261,7 +261,7 @@ class Model
|
||||||
$this->$key = new Primitive ();
|
$this->$key = new Primitive ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// __get, __set методы. В метаданных хранится тип свойств, проверять при присваивании!!
|
// __get, __set методы. В метаданных хранится тип свойств, проверять при присваивании!!
|
||||||
}
|
}
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Отображение списка папок с настройками на обьект
|
* Отображение списка папок с настройками на обьект
|
||||||
*/
|
*/
|
||||||
class PathMapper
|
class PathMapper
|
||||||
{
|
{
|
||||||
|
|
@ -58,7 +58,7 @@ class PathMapper
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Число папок
|
* Число папок
|
||||||
*/
|
*/
|
||||||
function getCount ()
|
function getCount ()
|
||||||
{
|
{
|
||||||
|
|
@ -66,7 +66,7 @@ class PathMapper
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Удаление списка папок
|
* Удаление списка папок
|
||||||
*/
|
*/
|
||||||
function deleteList(array $list)
|
function deleteList(array $list)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,8 @@
|
||||||
.*/
|
.*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Класс для работы с папками и путями
|
* Класс для работы с папками и путями
|
||||||
* Для итерации над файлами возможно лучше использовать SPL
|
* Для итерации над файлами возможно лучше использовать SPL
|
||||||
*
|
*
|
||||||
* @package utils
|
* @package utils
|
||||||
*/
|
*/
|
||||||
|
|
@ -29,9 +29,9 @@ class Path
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Возвращает расширение файла
|
* Возвращает расширение файла
|
||||||
*
|
*
|
||||||
* @param string $fileName Полное имя файла
|
* @param string $fileName Полное имя файла
|
||||||
*
|
*
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
|
|
@ -43,9 +43,9 @@ class Path
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Полное имя файла без расширения
|
* Полное имя файла без расширения
|
||||||
*
|
*
|
||||||
* @param string $fileName Имя файла
|
* @param string $fileName Имя файла
|
||||||
*
|
*
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
|
|
@ -62,9 +62,9 @@ class Path
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Возвращает имя файла без расширения
|
* Возвращает имя файла без расширения
|
||||||
*
|
*
|
||||||
* @param string $fileName Полное имя файла
|
* @param string $fileName Полное имя файла
|
||||||
*
|
*
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
|
|
@ -76,10 +76,10 @@ class Path
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Список файлов в директории
|
* Список файлов в директории
|
||||||
*
|
*
|
||||||
* @param array $allow массив расширений для файлов
|
* @param array $allow массив расширений для файлов
|
||||||
* @param array $ignore массив имен пааок которые не нужно обрабатывать
|
* @param array $ignore массив имен пааок которые не нужно обрабатывать
|
||||||
*
|
*
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
|
|
@ -89,7 +89,7 @@ class Path
|
||||||
return self::fileList($this->__toString(), $allow, $ignore);
|
return self::fileList($this->__toString(), $allow, $ignore);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Использовать SPL ???
|
// Использовать SPL ???
|
||||||
protected function fileList ($base, &$allow, &$ignore)
|
protected function fileList ($base, &$allow, &$ignore)
|
||||||
{
|
{
|
||||||
$result = array ();
|
$result = array ();
|
||||||
|
|
@ -121,10 +121,10 @@ class Path
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Список файлов в директориии и ее поддиректорий
|
* Список файлов в директориии и ее поддиректорий
|
||||||
*
|
*
|
||||||
* @param array $allow массив расширений разрешеных для файлов
|
* @param array $allow массив расширений разрешеных для файлов
|
||||||
* @param array $ignore массив имен пааок которые не нужно обрабатывать
|
* @param array $ignore массив имен пааок которые не нужно обрабатывать
|
||||||
*
|
*
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
|
|
@ -138,10 +138,10 @@ class Path
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Рекурсивно копирует директорию
|
* Рекурсивно копирует директорию
|
||||||
*
|
*
|
||||||
* @param string $source Папка из которой копируется
|
* @param string $source Папка из которой копируется
|
||||||
* @param string $target Папка в которую копируется
|
* @param string $target Папка в которую копируется
|
||||||
*/
|
*/
|
||||||
public static function copy ($source, $target)
|
public static function copy ($source, $target)
|
||||||
{
|
{
|
||||||
|
|
@ -161,9 +161,9 @@ class Path
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Рекурсивно удаляет директорию
|
* Рекурсивно удаляет директорию
|
||||||
*
|
*
|
||||||
* @param string $path Папка
|
* @param string $path Папка
|
||||||
*/
|
*/
|
||||||
public static function delete ($path)
|
public static function delete ($path)
|
||||||
{
|
{
|
||||||
|
|
@ -182,9 +182,9 @@ class Path
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Преобразует строку путя в массив
|
* Преобразует строку путя в массив
|
||||||
*
|
*
|
||||||
* @param string $path Путь
|
* @param string $path Путь
|
||||||
*
|
*
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
|
|
@ -197,7 +197,7 @@ class Path
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Преобразует относительный путь в абсолютный
|
* Преобразует относительный путь в абсолютный
|
||||||
*/
|
*/
|
||||||
public function optimize ()
|
public function optimize ()
|
||||||
{
|
{
|
||||||
|
|
@ -217,7 +217,7 @@ class Path
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Преобразует путь в строку
|
* Преобразует путь в строку
|
||||||
*
|
*
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
|
|
@ -228,7 +228,7 @@ class Path
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Проверяет является ли папка родительской для другой папки
|
* Проверяет является ли папка родительской для другой папки
|
||||||
*
|
*
|
||||||
* @parma Path $path
|
* @parma Path $path
|
||||||
*
|
*
|
||||||
|
|
@ -248,11 +248,11 @@ class Path
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Находит путь относительно текущего путя
|
* Находит путь относительно текущего путя
|
||||||
*
|
*
|
||||||
* @param string $name Полный путь к файлу
|
* @param string $name Полный путь к файлу
|
||||||
*
|
*
|
||||||
* @return string Относительный путь к файлу
|
* @return string Относительный путь к файлу
|
||||||
*/
|
*/
|
||||||
public function relPath ($name)
|
public function relPath ($name)
|
||||||
{
|
{
|
||||||
|
|
@ -270,9 +270,9 @@ class Path
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Создает недастающие папки для записи файла
|
* Создает недастающие папки для записи файла
|
||||||
*
|
*
|
||||||
* @param string $dst Полное имя файла
|
* @param string $dst Полное имя файла
|
||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
|
|
@ -285,11 +285,11 @@ class Path
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Подбирает новое временное имя для файла
|
* Подбирает новое временное имя для файла
|
||||||
*
|
*
|
||||||
* @param string $dst Предпологаемое имя файла
|
* @param string $dst Предпологаемое имя файла
|
||||||
*
|
*
|
||||||
* @return string Новое имя файла
|
* @return string Новое имя файла
|
||||||
*/
|
*/
|
||||||
static function resolveFile ($dst)
|
static function resolveFile ($dst)
|
||||||
{
|
{
|
||||||
|
|
@ -305,7 +305,7 @@ class Path
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Обьединяет строки в путь соединяя необходимым разделителем
|
* Обьединяет строки в путь соединяя необходимым разделителем
|
||||||
*
|
*
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* Класс преобразования типа значения поля класса в тип поля таблицы
|
* Класс преобразования типа значения поля класса в тип поля таблицы
|
||||||
* @package core
|
* @package core
|
||||||
*/
|
*/
|
||||||
class Primitive
|
class Primitive
|
||||||
|
|
@ -12,13 +12,13 @@ class Primitive
|
||||||
$this->name = $name;
|
$this->name = $name;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Преобразование из внешнего вормата
|
// Преобразование из внешнего вормата
|
||||||
public function setString ($value)
|
public function setString ($value)
|
||||||
{
|
{
|
||||||
$this->value = $value;
|
$this->value = $value;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Преобразование из формата базы данных
|
// Преобразование из формата базы данных
|
||||||
public function setRes ($res, $key)
|
public function setRes ($res, $key)
|
||||||
{
|
{
|
||||||
$this->value = $res->getString ($key);
|
$this->value = $res->getString ($key);
|
||||||
|
|
@ -29,7 +29,7 @@ class Primitive
|
||||||
return ((string) $this->value);
|
return ((string) $this->value);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Преобразование во внешний формат
|
// Преобразование во внешний формат
|
||||||
public function getString ()
|
public function getString ()
|
||||||
{
|
{
|
||||||
return $this->__toString ();
|
return $this->__toString ();
|
||||||
|
|
@ -37,7 +37,7 @@ class Primitive
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Отображение поля таблицы в целое число
|
* Отображение поля таблицы в целое число
|
||||||
* @package core
|
* @package core
|
||||||
*/
|
*/
|
||||||
class Int4 extends Primitive {
|
class Int4 extends Primitive {
|
||||||
|
|
@ -54,7 +54,7 @@ class Int4 extends Primitive {
|
||||||
class FKey extends Int4 {}
|
class FKey extends Int4 {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Отображение поля таблицы в дату - время
|
* Отображение поля таблицы в дату - время
|
||||||
*/
|
*/
|
||||||
class Date extends Primitive
|
class Date extends Primitive
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Κλΰρρ μεςΰδΰννϋυ ςΰαλθφϋ
|
* Класс метаданных таблицы
|
||||||
*/
|
*/
|
||||||
class Meta
|
class Meta
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ require_once 'table.php';
|
||||||
require_once 'meta.php';
|
require_once 'meta.php';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Класс для составления запроса
|
* Класс для составления запроса
|
||||||
*/
|
*/
|
||||||
class Query
|
class Query
|
||||||
{
|
{
|
||||||
|
|
@ -16,7 +16,7 @@ class Query
|
||||||
public $order = array ();
|
public $order = array ();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Создает пустой зарос
|
* Создает пустой зарос
|
||||||
*/
|
*/
|
||||||
static function create()
|
static function create()
|
||||||
{
|
{
|
||||||
|
|
@ -24,16 +24,16 @@ class Query
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Метаданные таблицы
|
* Метаданные таблицы
|
||||||
* @param string $name Имя таблицы
|
* @param string $name Имя таблицы
|
||||||
*/
|
*/
|
||||||
function getTableMeta($name)
|
function getTableMeta($name)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Создает новый запрос
|
* Создает новый запрос
|
||||||
* @param string $name Имя таблицы
|
* @param string $name Имя таблицы
|
||||||
*
|
*
|
||||||
* @return Query
|
* @return Query
|
||||||
*/
|
*/
|
||||||
|
|
@ -52,10 +52,10 @@ class Query
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Добавляет к запросу условие
|
* Добавляет к запросу условие
|
||||||
* @param string $field Имя поля таблицы
|
* @param string $field Имя поля таблицы
|
||||||
* @param string $op Имя оператора
|
* @param string $op Имя оператора
|
||||||
* @param $value Значение поля
|
* @param $value Значение поля
|
||||||
*
|
*
|
||||||
* @return Query
|
* @return Query
|
||||||
*/
|
*/
|
||||||
|
|
@ -67,7 +67,7 @@ class Query
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string $e Выражение
|
* @param string $e Выражение
|
||||||
*/
|
*/
|
||||||
public function calc($e)
|
public function calc($e)
|
||||||
{
|
{
|
||||||
|
|
@ -96,9 +96,9 @@ class Query
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Обьединяет параметры двух заросов
|
* Обьединяет параметры двух заросов
|
||||||
* @param Query $first
|
* @param Query $first
|
||||||
* @pram array $list Список параметров
|
* @pram array $list Список параметров
|
||||||
*
|
*
|
||||||
* @return Query
|
* @return Query
|
||||||
*/
|
*/
|
||||||
|
|
@ -112,7 +112,7 @@ class Query
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Заковычивает значение
|
* Заковычивает значение
|
||||||
*/
|
*/
|
||||||
public function quote ($value)
|
public function quote ($value)
|
||||||
{
|
{
|
||||||
|
|
@ -120,10 +120,10 @@ class Query
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Компиляция таблицы
|
* Компиляция таблицы
|
||||||
* @param Table $table
|
* @param Table $table
|
||||||
*
|
*
|
||||||
* @return string Часть строки SQL
|
* @return string Часть строки SQL
|
||||||
*/
|
*/
|
||||||
private function table(Table $table)
|
private function table(Table $table)
|
||||||
{
|
{
|
||||||
|
|
@ -137,9 +137,9 @@ class Query
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Компиляция WHERE
|
* Компиляция WHERE
|
||||||
*
|
*
|
||||||
* @return string Часть строки SQL
|
* @return string Часть строки SQL
|
||||||
*/
|
*/
|
||||||
private function where ()
|
private function where ()
|
||||||
{
|
{
|
||||||
|
|
@ -147,9 +147,9 @@ class Query
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Компиляция запроса в SELECT SQL
|
* Компиляция запроса в SELECT SQL
|
||||||
*
|
*
|
||||||
* @return string SQL выражение
|
* @return string SQL выражение
|
||||||
*/
|
*/
|
||||||
public function select()
|
public function select()
|
||||||
{
|
{
|
||||||
|
|
@ -160,7 +160,7 @@ class Query
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Компиляция в DELETE
|
* Компиляция в DELETE
|
||||||
*/
|
*/
|
||||||
public function delete()
|
public function delete()
|
||||||
{
|
{
|
||||||
|
|
@ -177,9 +177,9 @@ class Query
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Компиляция в UPDATE
|
* Компиляция в UPDATE
|
||||||
* TODO: Разные типы запросов Query->update(); Query->select(), Query->insert();!!
|
* TODO: Разные типы запросов Query->update(); Query->select(), Query->insert();!!
|
||||||
* Возвраащают statement
|
* Возвраащают statement
|
||||||
*/
|
*/
|
||||||
public function update($values)
|
public function update($values)
|
||||||
{
|
{
|
||||||
|
|
@ -193,7 +193,7 @@ class Query
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Компиляция в INSERT
|
* Компиляция в INSERT
|
||||||
*/
|
*/
|
||||||
public function insert($values)
|
public function insert($values)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
* Класс таблицы
|
||||||
*/
|
*/
|
||||||
class Table
|
class Table
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Извлекает текст из HTML документа
|
* Извлекает текст из HTML документа
|
||||||
*/
|
*/
|
||||||
function stripText($document)
|
function stripText($document)
|
||||||
{
|
{
|
||||||
|
|
@ -24,7 +24,7 @@ function stripText($document)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Разделение текста на массив слов
|
* Разделение текста на массив слов
|
||||||
*/
|
*/
|
||||||
function tokenize ($document)
|
function tokenize ($document)
|
||||||
{
|
{
|
||||||
|
|
@ -34,13 +34,13 @@ function tokenize ($document)
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Ищет один из символов с конца строки
|
* Ищет один из символов с конца строки
|
||||||
*
|
*
|
||||||
* @param string $haystack
|
* @param string $haystack
|
||||||
* @param array $needle Массив символов для поиска
|
* @param array $needle Массив символов для поиска
|
||||||
* @param int $offset Смещение от начала строки
|
* @param int $offset Смещение от начала строки
|
||||||
*
|
*
|
||||||
* @return int Позицию первого совпадения
|
* @return int Позицию первого совпадения
|
||||||
*/
|
*/
|
||||||
function indexRight ($haystack, $needle, $offset = 0)
|
function indexRight ($haystack, $needle, $offset = 0)
|
||||||
{
|
{
|
||||||
|
|
@ -55,13 +55,13 @@ function indexRight ($haystack, $needle, $offset = 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Ищет один из символов с начала строки
|
* Ищет один из символов с начала строки
|
||||||
*
|
*
|
||||||
* @param string $haystack
|
* @param string $haystack
|
||||||
* @param array $needle Массив символов для поиска
|
* @param array $needle Массив символов для поиска
|
||||||
* @param int $offset Смещение от начала строки
|
* @param int $offset Смещение от начала строки
|
||||||
*
|
*
|
||||||
* @return int Позицию первого совпадения
|
* @return int Позицию первого совпадения
|
||||||
*/
|
*/
|
||||||
function indexLeft ($haystack, $needle, $offset = 0)
|
function indexLeft ($haystack, $needle, $offset = 0)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ require_once 'core/search/stemmer.php';
|
||||||
require_once 'core/path.php';
|
require_once 'core/path.php';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Индексирование файлов
|
* Индексирование файлов
|
||||||
*/
|
*/
|
||||||
class Index
|
class Index
|
||||||
{
|
{
|
||||||
|
|
@ -25,7 +25,7 @@ class Index
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
// Выбираем основу слова
|
// Выбираем основу слова
|
||||||
function clean ($word)
|
function clean ($word)
|
||||||
{
|
{
|
||||||
return Stemmer::russian(strtolower($word));
|
return Stemmer::russian(strtolower($word));
|
||||||
|
|
@ -34,14 +34,14 @@ class Index
|
||||||
function process ($base, $files)
|
function process ($base, $files)
|
||||||
{
|
{
|
||||||
$path = new Path($base);
|
$path = new Path($base);
|
||||||
// Список документов
|
// Список документов
|
||||||
foreach ($path->getContentRec($files) as $file) {
|
foreach ($path->getContentRec($files) as $file) {
|
||||||
$content = file_get_contents ($file);
|
$content = file_get_contents ($file);
|
||||||
$text = stripText($content);
|
$text = stripText($content);
|
||||||
// $title = self::getTitle ($content);
|
// $title = self::getTitle ($content);
|
||||||
$title = pathinfo($file, PATHINFO_BASENAME);
|
$title = pathinfo($file, PATHINFO_BASENAME);
|
||||||
// echo $file, "\n";
|
// echo $file, "\n";
|
||||||
// Список слов в документе
|
// Список слов в документе
|
||||||
$list = tokenize($text);
|
$list = tokenize($text);
|
||||||
foreach ($list as $word) {
|
foreach ($list as $word) {
|
||||||
$preword = self::clean($word);
|
$preword = self::clean($word);
|
||||||
|
|
@ -49,7 +49,7 @@ class Index
|
||||||
$index = $this->index[$preword];
|
$index = $this->index[$preword];
|
||||||
if ( ! in_array ($this->count, $index)) $this->index[$preword] [] = $this->count;
|
if ( ! in_array ($this->count, $index)) $this->index[$preword] [] = $this->count;
|
||||||
} else {
|
} else {
|
||||||
// Не записываем слова длинна которых меньше 2
|
// Не записываем слова длинна которых меньше 2
|
||||||
if (strlen($preword) > 1) {
|
if (strlen($preword) > 1) {
|
||||||
$this->index[$preword] = array ($this->count);
|
$this->index[$preword] = array ($this->count);
|
||||||
}
|
}
|
||||||
|
|
@ -62,12 +62,12 @@ class Index
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Сохранение результата поиска
|
* Сохранение результата поиска
|
||||||
*/
|
*/
|
||||||
function saveData ($file)
|
function saveData ($file)
|
||||||
{
|
{
|
||||||
$file = fopen($file, "w");
|
$file = fopen($file, "w");
|
||||||
// Количество слов и текстов
|
// Количество слов и текстов
|
||||||
fwrite ($file, pack("SS", count($this->index), count($this->text)));
|
fwrite ($file, pack("SS", count($this->index), count($this->text)));
|
||||||
foreach ($this->index as $word => $value) {
|
foreach ($this->index as $word => $value) {
|
||||||
$length = strlen($word);
|
$length = strlen($word);
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Разбирвет строку запроса на токены
|
* Разбирвет строку запроса на токены
|
||||||
*/
|
*/
|
||||||
class Lexer
|
class Lexer
|
||||||
{
|
{
|
||||||
|
|
@ -40,14 +40,14 @@ class Lexer
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Проверяет на конец строки
|
* Проверяет на конец строки
|
||||||
*/
|
*/
|
||||||
private function isEOL () {
|
private function isEOL () {
|
||||||
return $this->offset >= strlen($this->src);
|
return $this->offset >= strlen($this->src);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Односимвольный токен
|
* Односимвольный токен
|
||||||
*/
|
*/
|
||||||
private function easyToken () {
|
private function easyToken () {
|
||||||
$ch = $this->getChar ();
|
$ch = $this->getChar ();
|
||||||
|
|
@ -66,7 +66,7 @@ class Lexer
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Возвращает следующий токен
|
* Возвращает следующий токен
|
||||||
*/
|
*/
|
||||||
public function getToken ()
|
public function getToken ()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ require_once 'core/search/lexer.php';
|
||||||
require_once 'core/functions.php';
|
require_once 'core/functions.php';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Поиск в индексе
|
* Поиск в индексе
|
||||||
*/
|
*/
|
||||||
class Search
|
class Search
|
||||||
{
|
{
|
||||||
|
|
@ -80,9 +80,9 @@ class Search
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param int $type Тип лексемы
|
* @param int $type Тип лексемы
|
||||||
* @param function $op Функция при совпадении типа лексемы при запросе
|
* @param function $op Функция при совпадении типа лексемы при запросе
|
||||||
* @param function $next Следующий обработчик запроса
|
* @param function $next Следующий обработчик запроса
|
||||||
*/
|
*/
|
||||||
function binaryOp ($type, $op, $next)
|
function binaryOp ($type, $op, $next)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -10,14 +10,14 @@ class Searcher {
|
||||||
protected $search;
|
protected $search;
|
||||||
public function __construct ()
|
public function __construct ()
|
||||||
{
|
{
|
||||||
// Может передавать обьект метод по умлочанию getWordStat??
|
// Может передавать обьект метод по умлочанию getWordStat??
|
||||||
$this->search = new Search (array ($this, 'getWord'));
|
$this->search = new Search (array ($this, 'getWord'));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Читает содержимое индексного файла
|
* Читает содержимое индексного файла
|
||||||
*
|
*
|
||||||
* @param string $file Имя файла
|
* @param string $file Имя файла
|
||||||
*/
|
*/
|
||||||
function setSource ($fileName)
|
function setSource ($fileName)
|
||||||
{
|
{
|
||||||
|
|
@ -44,7 +44,7 @@ class Searcher {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// По слову возвращаем список файлов и слово
|
// По слову возвращаем список файлов и слово
|
||||||
public function getWord ($word)
|
public function getWord ($word)
|
||||||
{
|
{
|
||||||
$preword = Stemmer::russian($word); // Index?? -> clean
|
$preword = Stemmer::russian($word); // Index?? -> clean
|
||||||
|
|
@ -55,7 +55,7 @@ class Searcher {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Список документов в которых встечается слово
|
* Список документов в которых встечается слово
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
function getResult (&$query)
|
function getResult (&$query)
|
||||||
|
|
@ -74,10 +74,10 @@ class Searcher {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Часть документа в котором встречается слово
|
* Часть документа в котором встречается слово
|
||||||
*
|
*
|
||||||
* @param $word Слово
|
* @param $word Слово
|
||||||
* @param $text Текст содержащий слово
|
* @param $text Текст содержащий слово
|
||||||
*/
|
*/
|
||||||
function getSlice ($word, $text)
|
function getSlice ($word, $text)
|
||||||
{
|
{
|
||||||
|
|
@ -89,7 +89,7 @@ class Searcher {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Поиск по запросу
|
* Поиск по запросу
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
function search ($query)
|
function search ($query)
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ class Stemmer {
|
||||||
|
|
||||||
static private function rv($word)
|
static private function rv($word)
|
||||||
{
|
{
|
||||||
$vowels = array('à','å','è','î','ó','û','ý','þ','ÿ');
|
$vowels = array('а','е','и','о','у','ы','э','ю','я');
|
||||||
$flag = 0;
|
$flag = 0;
|
||||||
$rv = '';
|
$rv = '';
|
||||||
$start = '';
|
$start = '';
|
||||||
|
|
@ -59,7 +59,7 @@ class Stemmer {
|
||||||
|
|
||||||
static function has_aya ($word, $suffix)
|
static function has_aya ($word, $suffix)
|
||||||
{
|
{
|
||||||
return (substr($word,-strlen($suffix)-CHAR_LENGTH,CHAR_LENGTH)=='à' || substr($word,-strlen($suffix)-CHAR_LENGTH,CHAR_LENGTH)=='ÿ');
|
return (substr($word,-strlen($suffix)-CHAR_LENGTH,CHAR_LENGTH)=='а' || substr($word,-strlen($suffix)-CHAR_LENGTH,CHAR_LENGTH)=='я');
|
||||||
}
|
}
|
||||||
|
|
||||||
static function cut_suffix ($word, $suffix)
|
static function cut_suffix ($word, $suffix)
|
||||||
|
|
@ -69,26 +69,26 @@ class Stemmer {
|
||||||
|
|
||||||
static private function step1($word)
|
static private function step1($word)
|
||||||
{
|
{
|
||||||
$perfective1 = array('â', 'âøè', 'âøèñü');
|
$perfective1 = array('в', 'вши', 'вшись');
|
||||||
foreach ($perfective1 as $suffix) {
|
foreach ($perfective1 as $suffix) {
|
||||||
if (self::has_suffix($word, $suffix) && self::has_aya ($word, $suffix)) {
|
if (self::has_suffix($word, $suffix) && self::has_aya ($word, $suffix)) {
|
||||||
return self::cut_suffix($word, $suffix);
|
return self::cut_suffix($word, $suffix);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$perfective2 = array('èâ','èâøè','èâøèñü','ûâøè','ûâøèñü');
|
$perfective2 = array('ив','ивши','ившись','ывши','ывшись');
|
||||||
foreach ($perfective2 as $suffix) {
|
foreach ($perfective2 as $suffix) {
|
||||||
if (self::has_suffix($word, $suffix)) {
|
if (self::has_suffix($word, $suffix)) {
|
||||||
return self::cut_suffix($word, $suffix);
|
return self::cut_suffix($word, $suffix);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$reflexive = array('ñÿ', 'ñü');
|
$reflexive = array('ся', 'сь');
|
||||||
$word = self::substitute($word, $reflexive);
|
$word = self::substitute($word, $reflexive);
|
||||||
|
|
||||||
$adjective = array('åå','èå','ûå','îå','èìè','ûìè','åé','èé','ûé','îé','åì','èì','ûì','îì','åãî','îãî','åìó','îìó','èõ','ûõ','óþ','þþ','àÿ','ÿÿ','îþ','åþ');
|
$adjective = array('ее','ие','ые','ое','ими','ыми','ей','ий','ый','ой','ем','им','ым','ом','его','ого','ему','ому','их','ых','ую','юю','ая','яя','ою','ею');
|
||||||
$participle2 = array('åì','íí','âø','þù','ù');
|
$participle2 = array('ем','нн','вш','ющ','щ');
|
||||||
$participle1 = array('èâø','ûâø','óþù');
|
$participle1 = array('ивш','ывш','ующ');
|
||||||
foreach ($adjective as $suffix) {
|
foreach ($adjective as $suffix) {
|
||||||
if (self::has_suffix($word, $suffix)) {
|
if (self::has_suffix($word, $suffix)) {
|
||||||
$word = self::cut_suffix($word, $suffix);
|
$word = self::cut_suffix($word, $suffix);
|
||||||
|
|
@ -101,17 +101,17 @@ class Stemmer {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$verb1 = array('ëà','íà','åòå','éòå','ëè','é','ë','åì','í','ëî','íî','åò','þò','íû','òü','åøü','ííî');
|
$verb1 = array('ла','на','ете','йте','ли','й','л','ем','н','ло','но','ет','ют','ны','ть','ешь','нно');
|
||||||
foreach ($verb1 as $suffix)
|
foreach ($verb1 as $suffix)
|
||||||
if (self::has_suffix($word, $suffix) && self::has_aya ($word, $suffix))
|
if (self::has_suffix($word, $suffix) && self::has_aya ($word, $suffix))
|
||||||
return self::cut_suffix($word, $suffix);
|
return self::cut_suffix($word, $suffix);
|
||||||
|
|
||||||
$verb2 = array('èëà','ûëà','åíà','åéòå','óéòå','èòå','èëè','ûëè','åé','óé','èë','ûë','èì','ûì','åí','èëî','ûëî','åíî','ÿò','óåò','óþò','èò','ûò','åíû','èòü','ûòü','èøü','óþ','þ');
|
$verb2 = array('ила','ыла','ена','ейте','уйте','ите','или','ыли','ей','уй','ил','ыл','им','ым','ен','ило','ыло','ено','ят','ует','уют','ит','ыт','ены','ить','ыть','ишь','ую','ю');
|
||||||
foreach ($verb2 as $suffix)
|
foreach ($verb2 as $suffix)
|
||||||
if (self::has_suffix($word, $suffix))
|
if (self::has_suffix($word, $suffix))
|
||||||
return self::cut_suffix($word, $suffix);
|
return self::cut_suffix($word, $suffix);
|
||||||
|
|
||||||
$noun = array('à','åâ','îâ','èå','üå','å','èÿìè','ÿìè','àìè','åè','èè','è','èåé','åé','îé','èé','é','èÿì','ÿì','èåì','åì','àì','îì','î','ó','àõ','èÿõ','ÿõ','û','ü','èþ','üþ','þ','èÿ','üÿ','ÿ');
|
$noun = array('а','ев','ов','ие','ье','е','иями','ями','ами','еи','ии','и','ией','ей','ой','ий','й','иям','ям','ием','ем','ам','ом','о','у','ах','иях','ях','ы','ь','ию','ью','ю','ия','ья','я');
|
||||||
foreach ($noun as $suffix) {
|
foreach ($noun as $suffix) {
|
||||||
if (self::has_suffix($word, $suffix))
|
if (self::has_suffix($word, $suffix))
|
||||||
return self::cut_suffix($word, $suffix);
|
return self::cut_suffix($word, $suffix);
|
||||||
|
|
@ -122,14 +122,14 @@ class Stemmer {
|
||||||
|
|
||||||
static private function step2($word)
|
static private function step2($word)
|
||||||
{
|
{
|
||||||
if (substr($word,-CHAR_LENGTH,CHAR_LENGTH) == 'è')
|
if (substr($word,-CHAR_LENGTH,CHAR_LENGTH) == 'и')
|
||||||
$word = substr($word, 0, strlen($word)-CHAR_LENGTH);
|
$word = substr($word, 0, strlen($word)-CHAR_LENGTH);
|
||||||
return $word;
|
return $word;
|
||||||
}
|
}
|
||||||
|
|
||||||
static private function step3($word)
|
static private function step3($word)
|
||||||
{
|
{
|
||||||
$vowels = array('à','å','è','î','ó','û','ý','þ','ÿ');
|
$vowels = array('а','е','и','о','у','ы','э','ю','я');
|
||||||
$flag = 0;
|
$flag = 0;
|
||||||
$r1 = '';
|
$r1 = '';
|
||||||
$r2 = '';
|
$r2 = '';
|
||||||
|
|
@ -152,7 +152,7 @@ class Stemmer {
|
||||||
if ($flag=1 && array_search(substr($r1,$i,CHAR_LENGTH), $vowels) === false)
|
if ($flag=1 && array_search(substr($r1,$i,CHAR_LENGTH), $vowels) === false)
|
||||||
$flag=2;
|
$flag=2;
|
||||||
}
|
}
|
||||||
$derivational=array('îñò', 'îñòü');
|
$derivational=array('ост', 'ость');
|
||||||
foreach ($derivational as $suffix)
|
foreach ($derivational as $suffix)
|
||||||
if (substr($r2,-(strlen($suffix))) == $suffix)
|
if (substr($r2,-(strlen($suffix))) == $suffix)
|
||||||
$word=substr($word, 0, strlen($r2)-strlen($suffix));
|
$word=substr($word, 0, strlen($r2)-strlen($suffix));
|
||||||
|
|
@ -161,19 +161,19 @@ class Stemmer {
|
||||||
|
|
||||||
static private function step4($word)
|
static private function step4($word)
|
||||||
{
|
{
|
||||||
if (substr($word,-CHAR_LENGTH*2)=='íí')
|
if (substr($word,-CHAR_LENGTH*2)=='нн')
|
||||||
$word=substr($word, 0, strlen($word)-CHAR_LENGTH);
|
$word=substr($word, 0, strlen($word)-CHAR_LENGTH);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$superlative=array('åéø', 'åéøå');
|
$superlative=array('ейш', 'ейше');
|
||||||
foreach ($superlative as $suffix)
|
foreach ($superlative as $suffix)
|
||||||
if (substr($word,-(strlen($suffix))) == $suffix)
|
if (substr($word,-(strlen($suffix))) == $suffix)
|
||||||
$word = substr($word, 0, strlen($word) - strlen($suffix));
|
$word = substr($word, 0, strlen($word) - strlen($suffix));
|
||||||
if (substr($word,-CHAR_LENGTH*2) == 'íí')
|
if (substr($word,-CHAR_LENGTH*2) == 'нн')
|
||||||
$word = substr($word, 0, strlen($word) - CHAR_LENGTH);
|
$word = substr($word, 0, strlen($word) - CHAR_LENGTH);
|
||||||
}
|
}
|
||||||
// should there be a guard flag? can't think of a russian word that ends with åéøü or ííü anyways, though the algorithm states this is an "otherwise" case
|
// should there be a guard flag? can't think of a russian word that ends with ейшь or ннь anyways, though the algorithm states this is an "otherwise" case
|
||||||
if (substr($word,-CHAR_LENGTH,CHAR_LENGTH) == 'ü')
|
if (substr($word,-CHAR_LENGTH,CHAR_LENGTH) == 'ь')
|
||||||
$word=substr($word, 0, strlen($word)-CHAR_LENGTH);
|
$word=substr($word, 0, strlen($word)-CHAR_LENGTH);
|
||||||
return $word;
|
return $word;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,13 +3,13 @@
|
||||||
require_once 'core/collection.php';
|
require_once 'core/collection.php';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Класс реестра
|
* Класс реестра
|
||||||
* Реестр организован как ассоциативный многомерный массив
|
* Реестр организован как ассоциативный многомерный массив
|
||||||
* array( 'name1' => parameters1, 'name2' => parameters1, ... )
|
* array( 'name1' => parameters1, 'name2' => parameters1, ... )
|
||||||
*
|
*
|
||||||
* name1, name2 ... - Имена модулей
|
* name1, name2 ... - Имена модулей
|
||||||
* parameters1, parameters1 - Массивы с параметрами модуля
|
* parameters1, parameters1 - Массивы с параметрами модуля
|
||||||
* Имя необходимо чтобы потом легко было удалить ненужные ветки дерева
|
* Имя необходимо чтобы потом легко было удалить ненужные ветки дерева
|
||||||
*/
|
*/
|
||||||
class Settings extends Collection
|
class Settings extends Collection
|
||||||
{
|
{
|
||||||
|
|
@ -20,7 +20,7 @@ class Settings extends Collection
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Чтение настроек из файла
|
* Чтение настроек из файла
|
||||||
*
|
*
|
||||||
* @param File $file
|
* @param File $file
|
||||||
*
|
*
|
||||||
|
|
@ -29,7 +29,7 @@ class Settings extends Collection
|
||||||
public function read()
|
public function read()
|
||||||
{
|
{
|
||||||
if ( !file_exists ($this->file)) return false;
|
if ( !file_exists ($this->file)) return false;
|
||||||
// Не include_once т.к читать настройки можно несколько раз
|
// Не include_once т.к читать настройки можно несколько раз
|
||||||
include($this->file);
|
include($this->file);
|
||||||
if (!is_array($settings)) {
|
if (!is_array($settings)) {
|
||||||
throw new Exception($this->file);
|
throw new Exception($this->file);
|
||||||
|
|
@ -38,7 +38,7 @@ class Settings extends Collection
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Запись ключа в реестр (Реестр это могомерный массив)
|
* Запись ключа в реестр (Реестр это могомерный массив)
|
||||||
*/
|
*/
|
||||||
public function writeKey(array $key, $value)
|
public function writeKey(array $key, $value)
|
||||||
{
|
{
|
||||||
|
|
@ -61,7 +61,7 @@ class Settings extends Collection
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Обновляет массив в соответствии со значением
|
* Обновляет массив в соответствии со значением
|
||||||
*/
|
*/
|
||||||
protected function merge(array &$data, $value)
|
protected function merge(array &$data, $value)
|
||||||
{
|
{
|
||||||
|
|
@ -76,8 +76,8 @@ class Settings extends Collection
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Чтение ключа из реестра
|
* Чтение ключа из реестра
|
||||||
* @param $args Путь к значению ключа
|
* @param $args Путь к значению ключа
|
||||||
*/
|
*/
|
||||||
public function readKey(array $key)
|
public function readKey(array $key)
|
||||||
{
|
{
|
||||||
|
|
@ -106,8 +106,8 @@ class Settings extends Collection
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Чтение ключа из реестра (Собирает все ключи с определенным значением во всех модулях)
|
* Чтение ключа из реестра (Собирает все ключи с определенным значением во всех модулях)
|
||||||
* @param $key Путь к значению ключа внутри модуля
|
* @param $key Путь к значению ключа внутри модуля
|
||||||
*/
|
*/
|
||||||
public function readKeyList()
|
public function readKeyList()
|
||||||
{
|
{
|
||||||
|
|
@ -145,7 +145,7 @@ class Settings extends Collection
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Запись настроек в файл (Может переименовать в store)
|
* Запись настроек в файл (Может переименовать в store)
|
||||||
*
|
*
|
||||||
* @param File $file
|
* @param File $file
|
||||||
*
|
*
|
||||||
|
|
@ -158,7 +158,7 @@ class Settings extends Collection
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Список модулей
|
* Список модулей
|
||||||
*/
|
*/
|
||||||
public function getModules()
|
public function getModules()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -4,12 +4,12 @@ require_once 'core/path.php';
|
||||||
require_once 'creole/util/sql/SQLStatementExtractor.php';
|
require_once 'creole/util/sql/SQLStatementExtractor.php';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Обработка файлов для установки
|
* Обработка файлов для установки
|
||||||
*/
|
*/
|
||||||
class Setup
|
class Setup
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Содержимое PHP файла
|
* Содержимое PHP файла
|
||||||
*/
|
*/
|
||||||
static function fileContent($file, array $tpl)
|
static function fileContent($file, array $tpl)
|
||||||
{
|
{
|
||||||
|
|
@ -21,7 +21,7 @@ class Setup
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Копирует файлы шаблонной директории
|
* Копирует файлы шаблонной директории
|
||||||
*/
|
*/
|
||||||
static function copyTemplatePath($srcPath, $dstPath, array $tpl, $tplFile = 'tpl')
|
static function copyTemplatePath($srcPath, $dstPath, array $tpl, $tplFile = 'tpl')
|
||||||
{
|
{
|
||||||
|
|
@ -31,12 +31,12 @@ class Setup
|
||||||
|
|
||||||
foreach ($files as $file) {
|
foreach ($files as $file) {
|
||||||
if (Path::getExtension($file) == $tplFile) {
|
if (Path::getExtension($file) == $tplFile) {
|
||||||
// Шаблон
|
// Шаблон
|
||||||
$dst = $out->append($path->relPath (Path::skipExtension($file)));
|
$dst = $out->append($path->relPath (Path::skipExtension($file)));
|
||||||
Path::prepare($dst);
|
Path::prepare($dst);
|
||||||
file_put_contents($dst, self::fileContent($file, $tpl));
|
file_put_contents($dst, self::fileContent($file, $tpl));
|
||||||
} else {
|
} else {
|
||||||
// Обычный файл
|
// Обычный файл
|
||||||
$dst = $out->append($path->relPath ($file));
|
$dst = $out->append($path->relPath ($file));
|
||||||
Path::prepare($dst);
|
Path::prepare($dst);
|
||||||
copy($file, $dst);
|
copy($file, $dst);
|
||||||
|
|
@ -45,7 +45,7 @@ class Setup
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Выполнение Списка SQL команд
|
* Выполнение Списка SQL команд
|
||||||
*/
|
*/
|
||||||
static function batchSQL(Connection $conn, $file)
|
static function batchSQL(Connection $conn, $file)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Класс для короткого доступа к файлам / папкам
|
* Класс для короткого доступа к файлам / папкам
|
||||||
*/
|
*/
|
||||||
class Shortcut
|
class Shortcut
|
||||||
{
|
{
|
||||||
|
|
@ -19,8 +19,8 @@ class Shortcut
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Добавляет ярлык с именем $prefix
|
* Добавляет ярлык с именем $prefix
|
||||||
* Путь может содержать переменные
|
* Путь может содержать переменные
|
||||||
*/
|
*/
|
||||||
public function addUrl($prefix, $path)
|
public function addUrl($prefix, $path)
|
||||||
{
|
{
|
||||||
|
|
@ -36,7 +36,7 @@ class Shortcut
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Возвращает путь по имени ярлыка
|
* Возвращает путь по имени ярлыка
|
||||||
*/
|
*/
|
||||||
static function getUrl ($prefix, $name = null, $name1 = false)
|
static function getUrl ($prefix, $name = null, $name1 = false)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
require_once 'core/search/htmlhelper.php';
|
require_once 'core/search/htmlhelper.php';
|
||||||
/**
|
/**
|
||||||
* Функции для проверки орфографии
|
* Функции для проверки орфографии
|
||||||
* rename Spell -> SpellHelper ??
|
* rename Spell -> SpellHelper ??
|
||||||
*/
|
*/
|
||||||
class Spell
|
class Spell
|
||||||
|
|
@ -52,7 +52,7 @@ class Spell
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Вызывает функцию для каждого найденного слова
|
* Вызывает функцию для каждого найденного слова
|
||||||
*/
|
*/
|
||||||
function eachWord ($call, $string)
|
function eachWord ($call, $string)
|
||||||
{
|
{
|
||||||
|
|
@ -66,7 +66,7 @@ class Spell
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Проверяет слово на соответствие со словарем
|
* Проверяет слово на соответствие со словарем
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
function doWord (&$string, $begin, $end)
|
function doWord (&$string, $begin, $end)
|
||||||
|
|
@ -84,7 +84,7 @@ class Spell
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Часть текста содержащий неправильное слово
|
* Часть текста содержащий неправильное слово
|
||||||
*/
|
*/
|
||||||
function getError ($string)
|
function getError ($string)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Преобразование дерева из модели Plain в массив массивов (Adjacency List)
|
* Преобразование дерева из модели Plain в массив массивов (Adjacency List)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
require_once 'core/functions.php';
|
require_once 'core/functions.php';
|
||||||
|
|
@ -10,16 +10,16 @@ define (SORT_DESC, 0); // descending
|
||||||
define (SORT_ASC, 1); // ascending
|
define (SORT_ASC, 1); // ascending
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Выбирает все сроки из таблицы с уникальными значениями ключа
|
* Выбирает все сроки из таблицы с уникальными значениями ключа
|
||||||
* @param $name Имя ключа
|
* @param $name Имя ключа
|
||||||
* @param $table Двухмерный массив
|
* @param $table Двухмерный массив
|
||||||
* @example
|
* @example
|
||||||
* key_unique_values ('name', array (array ('name' => 1), array ('name' => 2), array ('name' => 1)))
|
* key_unique_values ('name', array (array ('name' => 1), array ('name' => 2), array ('name' => 1)))
|
||||||
=> array (1, 2)
|
=> array (1, 2)
|
||||||
* @end example
|
* @end example
|
||||||
*/
|
*/
|
||||||
function key_unique_values ($name, $table) {
|
function key_unique_values ($name, $table) {
|
||||||
// Ищем уникальные значения для заданного ключа
|
// Ищем уникальные значения для заданного ключа
|
||||||
$keys = array ();
|
$keys = array ();
|
||||||
foreach ($table as $row) {
|
foreach ($table as $row) {
|
||||||
if (!in_array ($row[$name], $keys))
|
if (!in_array ($row[$name], $keys))
|
||||||
|
|
@ -29,10 +29,10 @@ function key_unique_values ($name, $table) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Сортировка двумерного массива по заданному ключу
|
* Сортировка двумерного массива по заданному ключу
|
||||||
* @param $array Массив
|
* @param $array Массив
|
||||||
* @param $key Имя ключа по значению которого будет идти сравнение
|
* @param $key Имя ключа по значению которого будет идти сравнение
|
||||||
* @return Отсортированный массив
|
* @return Отсортированный массив
|
||||||
*/
|
*/
|
||||||
function sortOn($array, $key, $fn = '__cmp') {
|
function sortOn($array, $key, $fn = '__cmp') {
|
||||||
usort ($array, rcurry($fn, $key));
|
usort ($array, rcurry($fn, $key));
|
||||||
|
|
@ -42,15 +42,15 @@ function sortOn($array, $key, $fn = '__cmp') {
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Обходит таблицу как дерево
|
* Обходит таблицу как дерево
|
||||||
* @param $level Array Уровни вложенности
|
* @param $level Array Уровни вложенности
|
||||||
* @param $table Таблица
|
* @param $table Таблица
|
||||||
* @param $fn Функция которая применяется к каждой ветке дерева
|
* @param $fn Функция которая применяется к каждой ветке дерева
|
||||||
* $fn ($name, $index, $rows, $cc)
|
* $fn ($name, $index, $rows, $cc)
|
||||||
* @param $name Ключ уровня
|
* @param $name Ключ уровня
|
||||||
* @param $index Значение ключа уровня
|
* @param $index Значение ключа уровня
|
||||||
* @param $rows Все столбцы текущго уровня
|
* @param $rows Все столбцы текущго уровня
|
||||||
* @parma $cc Столбцы более низкого уровня
|
* @parma $cc Столбцы более низкого уровня
|
||||||
*/
|
*/
|
||||||
function tableTreeWalk($level, $table, $fn) {
|
function tableTreeWalk($level, $table, $fn) {
|
||||||
if (empty ($level)) return $table;
|
if (empty ($level)) return $table;
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Расширения для PHPTAL для отображения времени и даты
|
* Расширения для PHPTAL для отображения времени и даты
|
||||||
* package utils
|
* package utils
|
||||||
*/
|
*/
|
||||||
class DateTime_Tales implements PHPTAL_Tales
|
class DateTime_Tales implements PHPTAL_Tales
|
||||||
|
|
@ -17,7 +17,7 @@ class DateTime_Tales implements PHPTAL_Tales
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Регистрация нового префикса для подключения компонента */
|
/* Регистрация нового префикса для подключения компонента */
|
||||||
$registry = PHPTAL_TalesRegistry::getInstance();
|
$registry = PHPTAL_TalesRegistry::getInstance();
|
||||||
$registry->registerPrefix('date', array('DateTime_Tales', 'date'));
|
$registry->registerPrefix('date', array('DateTime_Tales', 'date'));
|
||||||
$registry->registerPrefix('time', array('DateTime_Tales', 'time'));
|
$registry->registerPrefix('time', array('DateTime_Tales', 'time'));
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ class Excel_DateTime
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Клетка таблицы
|
* Клетка таблицы
|
||||||
*/
|
*/
|
||||||
class TableCell
|
class TableCell
|
||||||
{
|
{
|
||||||
|
|
@ -46,7 +46,7 @@ class TableCell
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Ряд таблицы
|
* Ряд таблицы
|
||||||
*/
|
*/
|
||||||
class TableRow
|
class TableRow
|
||||||
{
|
{
|
||||||
|
|
@ -66,7 +66,7 @@ class TableRow
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Таблица
|
* Таблица
|
||||||
*/
|
*/
|
||||||
class ExcelTable
|
class ExcelTable
|
||||||
{
|
{
|
||||||
|
|
@ -84,7 +84,7 @@ class ExcelTable
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Записать значение в клетку с заданными координатами
|
* Записать значение в клетку с заданными координатами
|
||||||
*/
|
*/
|
||||||
function setCell($x, $y, $value)
|
function setCell($x, $y, $value)
|
||||||
{
|
{
|
||||||
|
|
@ -98,7 +98,7 @@ class ExcelTable
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Заполняет ряд начиная с указанного столбца значениями из массива
|
* Заполняет ряд начиная с указанного столбца значениями из массива
|
||||||
*/
|
*/
|
||||||
function setRow($row, $index, array $data)
|
function setRow($row, $index, array $data)
|
||||||
{
|
{
|
||||||
|
|
@ -113,9 +113,9 @@ class ExcelTable
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Устанавливает высоту ряда
|
* Устанавливает высоту ряда
|
||||||
* @param $row integer Номер ряда
|
* @param $row integer Номер ряда
|
||||||
* @parma $value real Высота ряда
|
* @parma $value real Высота ряда
|
||||||
*/
|
*/
|
||||||
function setRowHeight ($row, $value)
|
function setRowHeight ($row, $value)
|
||||||
{
|
{
|
||||||
|
|
@ -125,9 +125,9 @@ class ExcelTable
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Устанавливает стиль ряда
|
* Устанавливает стиль ряда
|
||||||
* @param $row integer Номер ряда
|
* @param $row integer Номер ряда
|
||||||
* @parma $name string Имя стиля
|
* @parma $name string Имя стиля
|
||||||
*/
|
*/
|
||||||
function setRowStyle ($row, $name)
|
function setRowStyle ($row, $name)
|
||||||
{
|
{
|
||||||
|
|
@ -137,10 +137,10 @@ class ExcelTable
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Обьединяет клетки в строке
|
* Обьединяет клетки в строке
|
||||||
* @param $row Номер ряда
|
* @param $row Номер ряда
|
||||||
* @param $cell Номер столбца
|
* @param $cell Номер столбца
|
||||||
* @param $merge Количество клеток для обьединения
|
* @param $merge Количество клеток для обьединения
|
||||||
*/
|
*/
|
||||||
function setCellMerge ($row, $cell, $merge)
|
function setCellMerge ($row, $cell, $merge)
|
||||||
{
|
{
|
||||||
|
|
@ -151,10 +151,10 @@ class ExcelTable
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Устанавливает стиль для клеток ряда
|
* Устанавливает стиль для клеток ряда
|
||||||
* @param $row integer Номер ряда
|
* @param $row integer Номер ряда
|
||||||
* @param $y integer Номер столбца
|
* @param $y integer Номер столбца
|
||||||
* @parma $name string Имя стиля
|
* @parma $name string Имя стиля
|
||||||
*/
|
*/
|
||||||
function setCellStyle ($row, $y, $name)
|
function setCellStyle ($row, $y, $name)
|
||||||
{
|
{
|
||||||
|
|
@ -163,7 +163,7 @@ class ExcelTable
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Добавляет строку к таблице
|
* Добавляет строку к таблице
|
||||||
*/
|
*/
|
||||||
function addRow($index = 1, array $data = array(""))
|
function addRow($index = 1, array $data = array(""))
|
||||||
{
|
{
|
||||||
|
|
@ -175,7 +175,7 @@ class ExcelTable
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Количество строк в таблице
|
* Количество строк в таблице
|
||||||
*
|
*
|
||||||
* @return int
|
* @return int
|
||||||
*/
|
*/
|
||||||
|
|
@ -185,7 +185,7 @@ class ExcelTable
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Количество столбцов в строке
|
* Количество столбцов в строке
|
||||||
*
|
*
|
||||||
* @return int
|
* @return int
|
||||||
*/
|
*/
|
||||||
|
|
@ -195,8 +195,8 @@ class ExcelTable
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Разделяет таблицу на две части по вертикали
|
* Разделяет таблицу на две части по вертикали
|
||||||
* @param $n integer Количество столбцов слева
|
* @param $n integer Количество столбцов слева
|
||||||
*/
|
*/
|
||||||
function splitVertical($n)
|
function splitVertical($n)
|
||||||
{
|
{
|
||||||
|
|
@ -204,8 +204,8 @@ class ExcelTable
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Разделяет таблицу на две части по горизонтали
|
* Разделяет таблицу на две части по горизонтали
|
||||||
* @param $n integer Количество столбцов сверху
|
* @param $n integer Количество столбцов сверху
|
||||||
*/
|
*/
|
||||||
function splitHorizontal($n)
|
function splitHorizontal($n)
|
||||||
{
|
{
|
||||||
|
|
@ -214,7 +214,7 @@ class ExcelTable
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Количество столбцов в таблице
|
* Количество столбцов в таблице
|
||||||
*
|
*
|
||||||
* @return int
|
* @return int
|
||||||
*/
|
*/
|
||||||
|
|
@ -229,7 +229,7 @@ class ExcelTable
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Генерация клетки таблицы (Переработать)
|
* Генерация клетки таблицы (Переработать)
|
||||||
*/
|
*/
|
||||||
function createCell ($ncell, XMLWriter $doc, $j, $value, $setIndex) {
|
function createCell ($ncell, XMLWriter $doc, $j, $value, $setIndex) {
|
||||||
$doc->startElement("Cell");
|
$doc->startElement("Cell");
|
||||||
|
|
@ -266,7 +266,7 @@ class ExcelTable
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Генерация таблицы
|
* Генерация таблицы
|
||||||
*/
|
*/
|
||||||
public function createTable (XMLWriter $doc) {
|
public function createTable (XMLWriter $doc) {
|
||||||
$doc->startElement('Worksheet');
|
$doc->startElement('Worksheet');
|
||||||
|
|
@ -279,7 +279,7 @@ class ExcelTable
|
||||||
$doc->writeAttribute('ss:ExpandedColumnCount', $columns);
|
$doc->writeAttribute('ss:ExpandedColumnCount', $columns);
|
||||||
$doc->writeAttribute('ss:ExpandedRowCount', $rows);
|
$doc->writeAttribute('ss:ExpandedRowCount', $rows);
|
||||||
|
|
||||||
// Переписать цыкл !!!!!!!
|
// Переписать цыкл !!!!!!!
|
||||||
for ($i = 1; $i <= $rows; $i++) {
|
for ($i = 1; $i <= $rows; $i++) {
|
||||||
$doc->startElement('Row');
|
$doc->startElement('Row');
|
||||||
if (isset($this->rows[$i])) {
|
if (isset($this->rows[$i])) {
|
||||||
|
|
@ -292,7 +292,7 @@ class ExcelTable
|
||||||
}
|
}
|
||||||
|
|
||||||
$nrow = $this->rows[$i];
|
$nrow = $this->rows[$i];
|
||||||
// Флаг индикатор подстановки номера столбца
|
// Флаг индикатор подстановки номера столбца
|
||||||
$setIndex = false;
|
$setIndex = false;
|
||||||
for ($j = 1; $j <= $columns; $j++) {
|
for ($j = 1; $j <= $columns; $j++) {
|
||||||
|
|
||||||
|
|
@ -339,7 +339,7 @@ class ExcelTable
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Документ
|
* Документ
|
||||||
*/
|
*/
|
||||||
class ExcelDocument {
|
class ExcelDocument {
|
||||||
static $ns = "urn:schemas-microsoft-com:office:spreadsheet";
|
static $ns = "urn:schemas-microsoft-com:office:spreadsheet";
|
||||||
|
|
@ -351,10 +351,10 @@ class ExcelDocument {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Добавление стиля к документу
|
* Добавление стиля к документу
|
||||||
* @param $name string Имя стиля
|
* @param $name string Имя стиля
|
||||||
* @param $values array Параметры стиля
|
* @param $values array Параметры стиля
|
||||||
* @param $type Тип стиля
|
* @param $type Тип стиля
|
||||||
*/
|
*/
|
||||||
function setStyle ($name, array $values, $type = 'Interior')
|
function setStyle ($name, array $values, $type = 'Interior')
|
||||||
{
|
{
|
||||||
|
|
@ -365,7 +365,7 @@ class ExcelDocument {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Генерация стилей
|
* Генерация стилей
|
||||||
*/
|
*/
|
||||||
private function createStyles (XMLWriter $doc) {
|
private function createStyles (XMLWriter $doc) {
|
||||||
$doc->startElement('Styles');
|
$doc->startElement('Styles');
|
||||||
|
|
@ -373,7 +373,7 @@ class ExcelDocument {
|
||||||
$doc->startElement('Style');
|
$doc->startElement('Style');
|
||||||
$doc->writeAttribute('ss:ID', $name);
|
$doc->writeAttribute('ss:ID', $name);
|
||||||
foreach ($sn as $type => $s) {
|
foreach ($sn as $type => $s) {
|
||||||
// Стиль Borders - составной
|
// Стиль Borders - составной
|
||||||
if ($type == 'Borders') {
|
if ($type == 'Borders') {
|
||||||
$doc->startElement('Borders');
|
$doc->startElement('Borders');
|
||||||
foreach ($s as $border) {
|
foreach ($s as $border) {
|
||||||
|
|
@ -398,7 +398,7 @@ class ExcelDocument {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Преобразует переводы строки в спец символы
|
* Преобразует переводы строки в спец символы
|
||||||
*/
|
*/
|
||||||
function clean ($s) {
|
function clean ($s) {
|
||||||
assert(is_string($s));
|
assert(is_string($s));
|
||||||
|
|
@ -407,7 +407,7 @@ class ExcelDocument {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Сохраняет таблицу в формате Office 2003 XML
|
* Сохраняет таблицу в формате Office 2003 XML
|
||||||
* http://en.wikipedia.org/wiki/Microsoft_Office_XML_formats
|
* http://en.wikipedia.org/wiki/Microsoft_Office_XML_formats
|
||||||
*/
|
*/
|
||||||
function save($filename)
|
function save($filename)
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
require_once 'core/tools/drawing.php';
|
require_once 'core/tools/drawing.php';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Формат для композиции изображений
|
* Формат для композиции изображений
|
||||||
*/
|
*/
|
||||||
class TemplateImage
|
class TemplateImage
|
||||||
{
|
{
|
||||||
|
|
@ -47,7 +47,7 @@ class TemplateImage
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Путь к изображению
|
* Путь к изображению
|
||||||
*/
|
*/
|
||||||
function resourcePath($path)
|
function resourcePath($path)
|
||||||
{
|
{
|
||||||
|
|
@ -57,7 +57,7 @@ class TemplateImage
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Путь у шрифтам
|
* Путь у шрифтам
|
||||||
*/
|
*/
|
||||||
function fontPath($path)
|
function fontPath($path)
|
||||||
{
|
{
|
||||||
|
|
@ -85,7 +85,7 @@ class TemplateImage
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Создает изображение из файла
|
* Создает изображение из файла
|
||||||
*/
|
*/
|
||||||
function imagefromfile($file)
|
function imagefromfile($file)
|
||||||
{
|
{
|
||||||
|
|
@ -151,7 +151,7 @@ class TemplateImage
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Перекодировка текста
|
* Перекодировка текста
|
||||||
*/
|
*/
|
||||||
function encode($text)
|
function encode($text)
|
||||||
{
|
{
|
||||||
|
|
@ -184,7 +184,7 @@ class TemplateImage
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Генерирует изображение из шаблона
|
* Генерирует изображение из шаблона
|
||||||
*/
|
*/
|
||||||
function render($file = null)
|
function render($file = null)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,14 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
function translit($st) {
|
function translit($st) {
|
||||||
$st = strtr($st,"àáâãäå¸çèéêëìíîïðñòóôõúûý !¹", "abvgdeeziyklmnoprstufh_ie__#");
|
$st = strtr($st,"абвгдеёзийклмнопрстуфхъыэ !№", "abvgdeeziyklmnoprstufh_ie__#");
|
||||||
$st = strtr($st,"ÀÁÂÃÄŨÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÚÛÝ", "ABVGDEEZIYKLMNOPRSTUFH_IE");
|
$st = strtr($st,"АБВГДЕЁЗИЙКЛМНОПРСТУФХЪЫЭ", "ABVGDEEZIYKLMNOPRSTUFH_IE");
|
||||||
$st = strtr($st, array(
|
$st = strtr($st, array(
|
||||||
"æ"=>"zh", "ö"=>"ts", "÷"=>"ch", "ø"=>"sh",
|
"ж"=>"zh", "ц"=>"ts", "ч"=>"ch", "ш"=>"sh",
|
||||||
"ù"=>"shch","ü"=>"", "þ"=>"yu", "ÿ"=>"ya",
|
"щ"=>"shch","ь"=>"", "ю"=>"yu", "я"=>"ya",
|
||||||
"Æ"=>"ZH", "Ö"=>"TS", "×"=>"CH", "Ø"=>"SH",
|
"Ж"=>"ZH", "Ц"=>"TS", "Ч"=>"CH", "Ш"=>"SH",
|
||||||
"Ù"=>"SHCH","Ü"=>"", "Þ"=>"YU", "ß"=>"YA",
|
"Щ"=>"SHCH","Ь"=>"", "Ю"=>"YU", "Я"=>"YA",
|
||||||
"¿"=>"i", "¯"=>"Yi", "º"=>"ie", "ª"=>"Ye"
|
"ї"=>"i", "Ї"=>"Yi", "є"=>"ie", "Є"=>"Ye"
|
||||||
));
|
));
|
||||||
return $st;
|
return $st;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -296,7 +296,7 @@ class CDBTree
|
||||||
return $this->db->query($this->sql) or trigger_error("phpDbTree error: " . $this->db->error() , E_USER_ERROR);
|
return $this->db->query($this->sql) or trigger_error("phpDbTree error: " . $this->db->error() , E_USER_ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Οεπεμεωενθε βρευ δεςει βεςκθ β δπσγσώ βεςκσ
|
// Перемещение всех детей ветки в другую ветку
|
||||||
function moveChildren($ID, $newParentId)
|
function moveChildren($ID, $newParentId)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
@ -310,11 +310,11 @@ class CDBTree
|
||||||
if ($leftIdP < $leftId && $rightIdP > $rightId && $levelP < $level-1) {
|
if ($leftIdP < $leftId && $rightIdP > $rightId && $levelP < $level-1) {
|
||||||
// _update($this->table, array(), )
|
// _update($this->table, array(), )
|
||||||
$this->sql = 'UPDATE ' . $this->table . ' SET '
|
$this->sql = 'UPDATE ' . $this->table . ' SET '
|
||||||
// Μεν<EFBFBD>εμ σπξβενό
|
// Меняем уровень
|
||||||
. $this->level . '=' .
|
. $this->level . '=' .
|
||||||
_case(_between($this->left, $leftId, $rightId),
|
_case(_between($this->left, $leftId, $rightId),
|
||||||
$this->level . sprintf('%+d', -($level-1) +$levelP) , $this->level)
|
$this->level . sprintf('%+d', -($level-1) +$levelP) , $this->level)
|
||||||
// Μεν<EFBFBD>εμ γπΰνθφϋ
|
// Меняем границы
|
||||||
. $this->left . '=' .
|
. $this->left . '=' .
|
||||||
_case(_beetween($this->left, $rightId+1, $rightIdP-1), $this->left . '-' . $rightId-$leftId+1 ,
|
_case(_beetween($this->left, $rightId+1, $rightIdP-1), $this->left . '-' . $rightId-$leftId+1 ,
|
||||||
_case(_between($this->left, $leftId, $rightId), $this->left . '+' . ((($rightIdP-$rightId-$level+$levelP) /2) *2+$level-$levelP-1) , $this->left))
|
_case(_between($this->left, $leftId, $rightId), $this->left . '+' . ((($rightIdP-$rightId-$level+$levelP) /2) *2+$level-$levelP-1) , $this->left))
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,11 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Сортировка дерева в представлении Nested Set
|
* Сортировка дерева в представлении Nested Set
|
||||||
* Для дерева которое хранится в базе данных используя представление Nested Set нет возможности отсортировать элементы дерева по
|
* Для дерева которое хранится в базе данных используя представление Nested Set нет возможности отсортировать элементы дерева по
|
||||||
* произвольному полю. Поэтому после извлечения дерева из базы данных оно преобразуется в обычное представление сортируется и обратно
|
* произвольному полю. Поэтому после извлечения дерева из базы данных оно преобразуется в обычное представление сортируется и обратно
|
||||||
*
|
*
|
||||||
* Пример:
|
* Пример:
|
||||||
* $sort = new NestedSetSort();
|
* $sort = new NestedSetSort();
|
||||||
* $data = $sort->sortBy($data, 'name');
|
* $data = $sort->sortBy($data, 'name');
|
||||||
*/
|
*/
|
||||||
|
|
@ -17,7 +17,7 @@ class NestedSetSort {
|
||||||
public function __construct() {
|
public function __construct() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Преобразуем Nested Set в дерево и сортируем
|
// Преобразуем Nested Set в дерево и сортируем
|
||||||
private function listTree(array $tree, $offset, $level) {
|
private function listTree(array $tree, $offset, $level) {
|
||||||
$result = array();
|
$result = array();
|
||||||
for ($i = $offset; $i < sizeof($tree); $i++) {
|
for ($i = $offset; $i < sizeof($tree); $i++) {
|
||||||
|
|
@ -38,19 +38,19 @@ class NestedSetSort {
|
||||||
return array($result, $i);
|
return array($result, $i);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Сравнение двух элементов
|
// Сравнение двух элементов
|
||||||
private function compare($a, $b) {
|
private function compare($a, $b) {
|
||||||
$a1 = $this->data[$a[0]][$this->sortBy];
|
$a1 = $this->data[$a[0]][$this->sortBy];
|
||||||
$b1 = $this->data[$b[0]][$this->sortBy];
|
$b1 = $this->data[$b[0]][$this->sortBy];
|
||||||
return strcmp($a1, $b1);
|
return strcmp($a1, $b1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Сортировка списка
|
// Сортировка списка
|
||||||
private function sortList(array &$list, $data) {
|
private function sortList(array &$list, $data) {
|
||||||
usort($list, array($this, 'compare'));
|
usort($list, array($this, 'compare'));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Создает дерево в виде списка
|
// Создает дерево в виде списка
|
||||||
private function reorder(array $tree) {
|
private function reorder(array $tree) {
|
||||||
foreach($tree as $node) {
|
foreach($tree as $node) {
|
||||||
$this->result[] = $this->data[$node[0]];
|
$this->result[] = $this->data[$node[0]];
|
||||||
|
|
@ -68,7 +68,7 @@ class NestedSetSort {
|
||||||
return $order[0];
|
return $order[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Сортировка по заданному полю
|
// Сортировка по заданному полю
|
||||||
public function sortBy(array $data, $sortBy) {
|
public function sortBy(array $data, $sortBy) {
|
||||||
$this->data = $data;
|
$this->data = $data;
|
||||||
$this->sortBy = $sortBy;
|
$this->sortBy = $sortBy;
|
||||||
|
|
|
||||||
|
|
@ -3,13 +3,13 @@
|
||||||
require_once 'abstract.php';
|
require_once 'abstract.php';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Проверка на число
|
* Проверка на число
|
||||||
*/
|
*/
|
||||||
class Rule_Alpha extends Rule_Abstract
|
class Rule_Alpha extends Rule_Abstract
|
||||||
{
|
{
|
||||||
public function getErrorMsg()
|
public function getErrorMsg()
|
||||||
{
|
{
|
||||||
return "Поле должно содержать только буквы";
|
return "Поле должно содержать только буквы";
|
||||||
}
|
}
|
||||||
|
|
||||||
public function isValid(Collection $container, $status = null)
|
public function isValid(Collection $container, $status = null)
|
||||||
|
|
|
||||||
|
|
@ -3,13 +3,13 @@
|
||||||
require_once 'abstract.php';
|
require_once 'abstract.php';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Проверка формата электронной почты
|
* Проверка формата электронной почты
|
||||||
*/
|
*/
|
||||||
class Rule_Code extends Rule_Abstract
|
class Rule_Code extends Rule_Abstract
|
||||||
{
|
{
|
||||||
public function getErrorMsg()
|
public function getErrorMsg()
|
||||||
{
|
{
|
||||||
return "Неправильно указан персональный код";
|
return "Неправильно указан персональный код";
|
||||||
}
|
}
|
||||||
|
|
||||||
function checkCode($code) {
|
function checkCode($code) {
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
require_once 'abstract.php';
|
require_once 'abstract.php';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Проверка формата даты
|
* Проверка формата даты
|
||||||
*/
|
*/
|
||||||
class Rule_Count extends Rule_Abstract
|
class Rule_Count extends Rule_Abstract
|
||||||
{
|
{
|
||||||
|
|
@ -12,7 +12,7 @@ class Rule_Count extends Rule_Abstract
|
||||||
|
|
||||||
public function getErrorMsg()
|
public function getErrorMsg()
|
||||||
{
|
{
|
||||||
return "Количество записей должно быть не менне {$this->size} и не более {$this->max}";
|
return "Количество записей должно быть не менне {$this->size} и не более {$this->max}";
|
||||||
}
|
}
|
||||||
|
|
||||||
function not_empty($s) {
|
function not_empty($s) {
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
require_once 'abstract.php';
|
require_once 'abstract.php';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Проверка формата даты
|
* Проверка формата даты
|
||||||
*/
|
*/
|
||||||
class Rule_Date extends Rule_Abstract
|
class Rule_Date extends Rule_Abstract
|
||||||
{
|
{
|
||||||
|
|
@ -11,7 +11,7 @@ class Rule_Date extends Rule_Abstract
|
||||||
|
|
||||||
public function getErrorMsg()
|
public function getErrorMsg()
|
||||||
{
|
{
|
||||||
return "Неверный формат даты";
|
return "Неверный формат даты";
|
||||||
}
|
}
|
||||||
|
|
||||||
public function isValid(Collection $container, $status = null)
|
public function isValid(Collection $container, $status = null)
|
||||||
|
|
|
||||||
|
|
@ -3,13 +3,13 @@
|
||||||
require_once 'abstract.php';
|
require_once 'abstract.php';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Проверка формата электронной почты
|
* Проверка формата электронной почты
|
||||||
*/
|
*/
|
||||||
class Rule_Email extends Rule_Abstract
|
class Rule_Email extends Rule_Abstract
|
||||||
{
|
{
|
||||||
public function getErrorMsg()
|
public function getErrorMsg()
|
||||||
{
|
{
|
||||||
return "Неверный формат электронной почты";
|
return "Неверный формат электронной почты";
|
||||||
}
|
}
|
||||||
|
|
||||||
public function isValid(Collection $container, $status = null)
|
public function isValid(Collection $container, $status = null)
|
||||||
|
|
|
||||||
|
|
@ -3,13 +3,13 @@
|
||||||
require_once 'abstract.php';
|
require_once 'abstract.php';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Проверка формата электронной почты
|
* Проверка формата электронной почты
|
||||||
*/
|
*/
|
||||||
class Rule_EmailList extends Rule_Abstract
|
class Rule_EmailList extends Rule_Abstract
|
||||||
{
|
{
|
||||||
public function getErrorMsg()
|
public function getErrorMsg()
|
||||||
{
|
{
|
||||||
return "Неверный формат электронной почты";
|
return "Неверный формат электронной почты";
|
||||||
}
|
}
|
||||||
|
|
||||||
public function isValid(Collection $container, $status = null) {
|
public function isValid(Collection $container, $status = null) {
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
require_once 'abstract.php';
|
require_once 'abstract.php';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Проверка на равентство двух полей
|
* Проверка на равентство двух полей
|
||||||
*/
|
*/
|
||||||
class Rule_Match extends Rule_Abstract
|
class Rule_Match extends Rule_Abstract
|
||||||
{
|
{
|
||||||
|
|
@ -11,7 +11,7 @@ class Rule_Match extends Rule_Abstract
|
||||||
|
|
||||||
public function getErrorMsg()
|
public function getErrorMsg()
|
||||||
{
|
{
|
||||||
return "Поля не совпадают";
|
return "Поля не совпадают";
|
||||||
}
|
}
|
||||||
|
|
||||||
/* public function __construct($field, $refField, $errorMsg)
|
/* public function __construct($field, $refField, $errorMsg)
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ class Rule_Notnull extends Rule_Abstract
|
||||||
{
|
{
|
||||||
public function getErrorMsg()
|
public function getErrorMsg()
|
||||||
{
|
{
|
||||||
return "Поле не должно быть пустым";
|
return "Поле не должно быть пустым";
|
||||||
}
|
}
|
||||||
|
|
||||||
public function isValid(Collection $container, $status = null)
|
public function isValid(Collection $container, $status = null)
|
||||||
|
|
|
||||||
|
|
@ -3,13 +3,13 @@
|
||||||
require_once 'abstract.php';
|
require_once 'abstract.php';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Проверка на число
|
* Проверка на число
|
||||||
*/
|
*/
|
||||||
class Rule_Numeric extends Rule_Abstract
|
class Rule_Numeric extends Rule_Abstract
|
||||||
{
|
{
|
||||||
public function getErrorMsg()
|
public function getErrorMsg()
|
||||||
{
|
{
|
||||||
return "Значение поля должно быть числом";
|
return "Значение поля должно быть числом";
|
||||||
}
|
}
|
||||||
|
|
||||||
public function isValid(Collection $container, $status = null)
|
public function isValid(Collection $container, $status = null)
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
require_once 'abstract.php';
|
require_once 'abstract.php';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Проверка формата времени
|
* Проверка формата времени
|
||||||
*/
|
*/
|
||||||
class Rule_Time extends Rule_Abstract
|
class Rule_Time extends Rule_Abstract
|
||||||
{
|
{
|
||||||
|
|
@ -11,7 +11,7 @@ class Rule_Time extends Rule_Abstract
|
||||||
|
|
||||||
public function getErrorMsg()
|
public function getErrorMsg()
|
||||||
{
|
{
|
||||||
return "Неверный формат времени";
|
return "Неверный формат времени";
|
||||||
}
|
}
|
||||||
|
|
||||||
static function checktime($hour, $minute)
|
static function checktime($hour, $minute)
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
require_once 'abstract.php';
|
require_once 'abstract.php';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Проверка формата времени
|
* Проверка формата времени
|
||||||
*/
|
*/
|
||||||
class Rule_Unique extends Rule_Abstract
|
class Rule_Unique extends Rule_Abstract
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,17 +1,17 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* Проверка коллекции
|
* Проверка коллекции
|
||||||
*/
|
*/
|
||||||
class Validator
|
class Validator
|
||||||
{
|
{
|
||||||
protected $chain = array(); // Массив правил
|
protected $chain = array(); // Массив правил
|
||||||
protected $errorMsg = array(); // Массив ошибок
|
protected $errorMsg = array(); // Массив ошибок
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Добавление списка правил в специальном формате
|
* Добавление списка правил в специальном формате
|
||||||
* array(array('name' => fieldname, 'validate' => ruletext), ...)
|
* array(array('name' => fieldname, 'validate' => ruletext), ...)
|
||||||
* fieldname - Имя переменой для проверки
|
* fieldname - Имя переменой для проверки
|
||||||
* ruletext - Описание правила см. формат правила ниже
|
* ruletext - Описание правила см. формат правила ниже
|
||||||
*/
|
*/
|
||||||
public function addRuleList(array $input)
|
public function addRuleList(array $input)
|
||||||
{
|
{
|
||||||
|
|
@ -31,25 +31,25 @@ class Validator
|
||||||
'code' => 'Rule_Code'
|
'code' => 'Rule_Code'
|
||||||
);
|
);
|
||||||
|
|
||||||
// Разбор правила проверки
|
// Разбор правила проверки
|
||||||
// Формат правила 'rule1|rule2,param1=value1|rule3,param1=value1,param2=value2'
|
// Формат правила 'rule1|rule2,param1=value1|rule3,param1=value1,param2=value2'
|
||||||
foreach ($input as $value) {
|
foreach ($input as $value) {
|
||||||
// Список правил
|
// Список правил
|
||||||
if (! isset($value['validate'])) continue;
|
if (! isset($value['validate'])) continue;
|
||||||
$rules = explode("|", $value['validate']);
|
$rules = explode("|", $value['validate']);
|
||||||
foreach ($rules as $rule) {
|
foreach ($rules as $rule) {
|
||||||
// Список параметров правила
|
// Список параметров правила
|
||||||
$rule_param = explode(",", $rule);
|
$rule_param = explode(",", $rule);
|
||||||
$name = array_shift($rule_param);
|
$name = array_shift($rule_param);
|
||||||
|
|
||||||
if (isset($type[$name])) {
|
if (isset($type[$name])) {
|
||||||
$constructor = $type[$name]; // "Rule_" . ucfirst($name)
|
$constructor = $type[$name]; // "Rule_" . ucfirst($name)
|
||||||
$rule = new $constructor($value['name'], false); // Нужны шаблонные сообщения для правил
|
$rule = new $constructor($value['name'], false); // Нужны шаблонные сообщения для правил
|
||||||
if (isset($value['context'])) {
|
if (isset($value['context'])) {
|
||||||
$rule->setContext($value['context']);
|
$rule->setContext($value['context']);
|
||||||
}
|
}
|
||||||
foreach ($rule_param as $param) {
|
foreach ($rule_param as $param) {
|
||||||
// Имя и значение параметра
|
// Имя и значение параметра
|
||||||
list($name, $value) = explode("=", $param);
|
list($name, $value) = explode("=", $param);
|
||||||
$rule->$name = $value;
|
$rule->$name = $value;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,14 +2,14 @@
|
||||||
|
|
||||||
class _View_Composite // AbstractCompositeView
|
class _View_Composite // AbstractCompositeView
|
||||||
{
|
{
|
||||||
protected $_section = array(); // Вложенные шаблоны
|
protected $_section = array(); // Вложенные шаблоны
|
||||||
// Блоки
|
// Блоки
|
||||||
protected $_stylesheet = array(); // Массив стилей текущего шаблона
|
protected $_stylesheet = array(); // Массив стилей текущего шаблона
|
||||||
protected $_script = array(); // Массив скриптов текущего шаблона
|
protected $_script = array(); // Массив скриптов текущего шаблона
|
||||||
protected $_scriptstring = array();
|
protected $_scriptstring = array();
|
||||||
protected $_startup = array();
|
protected $_startup = array();
|
||||||
|
|
||||||
protected $_title = null; // Заголовок текущего шаблона
|
protected $_title = null; // Заголовок текущего шаблона
|
||||||
public $alias = array();
|
public $alias = array();
|
||||||
|
|
||||||
function __construct()
|
function __construct()
|
||||||
|
|
@ -17,10 +17,10 @@ class _View_Composite // AbstractCompositeView
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Связывет переменную с вложенным шаблоном
|
* Связывет переменную с вложенным шаблоном
|
||||||
*
|
*
|
||||||
* @param string $section переменная шаблона
|
* @param string $section переменная шаблона
|
||||||
* @param CompositeView $view вложенный шаблон
|
* @param CompositeView $view вложенный шаблон
|
||||||
*/
|
*/
|
||||||
public function setView($section, /*CompositeView*/ $view)
|
public function setView($section, /*CompositeView*/ $view)
|
||||||
{
|
{
|
||||||
|
|
@ -38,9 +38,9 @@ class _View_Composite // AbstractCompositeView
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Добавляет скипт к текущему шаблону
|
* Добавляет скипт к текущему шаблону
|
||||||
*
|
*
|
||||||
* @param string $name путь к скрипту
|
* @param string $name путь к скрипту
|
||||||
*/
|
*/
|
||||||
public function addScript($name)
|
public function addScript($name)
|
||||||
{
|
{
|
||||||
|
|
@ -48,9 +48,9 @@ class _View_Composite // AbstractCompositeView
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Добавляет код скипта к текущему шаблону
|
* Добавляет код скипта к текущему шаблону
|
||||||
*
|
*
|
||||||
* @param string $name строка javascript кода
|
* @param string $name строка javascript кода
|
||||||
*/
|
*/
|
||||||
public function addScriptRaw($name, $startup = false)
|
public function addScriptRaw($name, $startup = false)
|
||||||
{
|
{
|
||||||
|
|
@ -62,9 +62,9 @@ class _View_Composite // AbstractCompositeView
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Добавляет стили к текущему шаблону
|
* Добавляет стили к текущему шаблону
|
||||||
*
|
*
|
||||||
* @param string $name путь к стилю
|
* @param string $name путь к стилю
|
||||||
*/
|
*/
|
||||||
public function addStyleSheet($name)
|
public function addStyleSheet($name)
|
||||||
{
|
{
|
||||||
|
|
@ -72,9 +72,9 @@ class _View_Composite // AbstractCompositeView
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Рекурсивно извлекает из значение свойства обьекта
|
* Рекурсивно извлекает из значение свойства обьекта
|
||||||
*
|
*
|
||||||
* @param string $list Имя свойства
|
* @param string $list Имя свойства
|
||||||
* @param boolean $flatten
|
* @param boolean $flatten
|
||||||
*/
|
*/
|
||||||
private function doTree($list, $flatten = true) {
|
private function doTree($list, $flatten = true) {
|
||||||
|
|
@ -86,7 +86,7 @@ class _View_Composite // AbstractCompositeView
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Массив имен файлов скриптов
|
* Массив имен файлов скриптов
|
||||||
*
|
*
|
||||||
* return array
|
* return array
|
||||||
*/
|
*/
|
||||||
|
|
@ -105,7 +105,7 @@ class _View_Composite // AbstractCompositeView
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Строка со скриптом
|
* Строка со скриптом
|
||||||
*
|
*
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
|
|
@ -124,7 +124,7 @@ class _View_Composite // AbstractCompositeView
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Массив имен файлов стилей
|
* Массив имен файлов стилей
|
||||||
*
|
*
|
||||||
* return array
|
* return array
|
||||||
*/
|
*/
|
||||||
|
|
@ -134,7 +134,7 @@ class _View_Composite // AbstractCompositeView
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Обработка всех вложенных шаблонов
|
* Обработка всех вложенных шаблонов
|
||||||
*
|
*
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
|
|
@ -146,7 +146,7 @@ class _View_Composite // AbstractCompositeView
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Установка заголовка шаблона
|
* Установка заголовка шаблона
|
||||||
*
|
*
|
||||||
* @param string $title
|
* @param string $title
|
||||||
*/
|
*/
|
||||||
|
|
@ -161,7 +161,7 @@ class _View_Composite // AbstractCompositeView
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Общая строка заголовка
|
* Общая строка заголовка
|
||||||
*/
|
*/
|
||||||
public function getTitle()
|
public function getTitle()
|
||||||
{
|
{
|
||||||
|
|
@ -183,7 +183,7 @@ class _View_Composite // AbstractCompositeView
|
||||||
$debug = ($debug) ? 'debug=1' : '';
|
$debug = ($debug) ? 'debug=1' : '';
|
||||||
$path = parse_url(WWW_PATH, PHP_URL_PATH);
|
$path = parse_url(WWW_PATH, PHP_URL_PATH);
|
||||||
$list = array_reverse($list);
|
$list = array_reverse($list);
|
||||||
// Группы нужно передвавать как параметр !!!
|
// Группы нужно передвавать как параметр !!!
|
||||||
$groups = array(
|
$groups = array(
|
||||||
'table' => array($path . '/js/table.js', $path . '/js/listtable.js',
|
'table' => array($path . '/js/table.js', $path . '/js/listtable.js',
|
||||||
$path . '/js/page.js', $path . '/js/pagemenu.js'),
|
$path . '/js/page.js', $path . '/js/pagemenu.js'),
|
||||||
|
|
@ -208,7 +208,7 @@ class _View_Composite // AbstractCompositeView
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Обработка шаблона
|
* Обработка шаблона
|
||||||
*
|
*
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
|
|
@ -218,7 +218,7 @@ class _View_Composite // AbstractCompositeView
|
||||||
$alias = $this->doTree('alias');
|
$alias = $this->doTree('alias');
|
||||||
|
|
||||||
// require_once 'minify.php';
|
// require_once 'minify.php';
|
||||||
// Скрипты и стили
|
// Скрипты и стили
|
||||||
$this->set('scripts', array_unique($this->groupFiles($this->resolveAlias($alias, $this->getScripts()), false)));
|
$this->set('scripts', array_unique($this->groupFiles($this->resolveAlias($alias, $this->getScripts()), false)));
|
||||||
$this->set('stylesheet', array_unique($this->groupFiles($this->resolveAlias($alias, $this->getStyleSheet()), false)));
|
$this->set('stylesheet', array_unique($this->groupFiles($this->resolveAlias($alias, $this->getStyleSheet()), false)));
|
||||||
|
|
||||||
|
|
@ -242,7 +242,7 @@ class _View_Composite // AbstractCompositeView
|
||||||
|
|
||||||
function loadImports($importFile)
|
function loadImports($importFile)
|
||||||
{
|
{
|
||||||
// Подключение стилей и скриптов
|
// Подключение стилей и скриптов
|
||||||
if (file_exists($importFile)) {
|
if (file_exists($importFile)) {
|
||||||
$import = file_get_contents($importFile);
|
$import = file_get_contents($importFile);
|
||||||
$files = explode("\n", $import);
|
$files = explode("\n", $import);
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
// Класс отображения
|
// Класс отображения
|
||||||
// CompositeView !! Composite pattern
|
// CompositeView !! Composite pattern
|
||||||
|
|
||||||
class View
|
class View
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
require_once 'core/widgets/widget.php';
|
require_once 'core/widgets/widget.php';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Класс для создания диалоговых окон, типа поиска и настройки таблицы
|
* Класс для создания диалоговых окон, типа поиска и настройки таблицы
|
||||||
*/
|
*/
|
||||||
class Dialog extends Widget
|
class Dialog extends Widget
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
require_once 'core/widgets/listtable.php';
|
require_once 'core/widgets/listtable.php';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Класс для генерации таблицы
|
* Класс для генерации таблицы
|
||||||
*/
|
*/
|
||||||
class FileBrowser extends ListTable
|
class FileBrowser extends ListTable
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ require_once 'core/widgets/widget.php';
|
||||||
require_once 'core/functions.php';
|
require_once 'core/functions.php';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Класс для генерации таблицы
|
* Класс для генерации таблицы
|
||||||
*/
|
*/
|
||||||
class ListTable extends Widget // MenuTable
|
class ListTable extends Widget // MenuTable
|
||||||
{
|
{
|
||||||
|
|
@ -18,7 +18,7 @@ class ListTable extends Widget // MenuTable
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Устанавливает формат таблицы, структуру $header см. table.js
|
* Устанавливает формат таблицы, структуру $header см. table.js
|
||||||
*/
|
*/
|
||||||
function setHeader($header)
|
function setHeader($header)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,28 +1,28 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Список ссылок
|
* Список ссылок
|
||||||
*/
|
*/
|
||||||
class SimpleMenu
|
class SimpleMenu
|
||||||
{
|
{
|
||||||
private $items = array();
|
private $items = array();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Добавление элемента меню
|
* Добавление элемента меню
|
||||||
* @param $href Обьект ссылки или строка, ссылка должна быть сгенерирована при генерации страницы, т.к может зависеть от параметров
|
* @param $href Обьект ссылки или строка, ссылка должна быть сгенерирована при генерации страницы, т.к может зависеть от параметров
|
||||||
* которые могут измениться при создании страницы, поэтому передается ссылка на функцию (отложенная/ленивая ссылка)
|
* которые могут измениться при создании страницы, поэтому передается ссылка на функцию (отложенная/ленивая ссылка)
|
||||||
* @param $name Подпись к ссылке
|
* @param $name Подпись к ссылке
|
||||||
*/
|
*/
|
||||||
function addMenuItem(/*. url .*/ $href,/*. string .*/ $name)
|
function addMenuItem(/*. url .*/ $href,/*. string .*/ $name)
|
||||||
{
|
{
|
||||||
if($href) { // если ссылка пустая то элемент не добовляется
|
if($href) { // если ссылка пустая то элемент не добовляется
|
||||||
$this->items[] = array('href' => $href, 'name' => ucfirst($name)); // menu_item
|
$this->items[] = array('href' => $href, 'name' => ucfirst($name)); // menu_item
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Массив ссылок
|
* Массив ссылок
|
||||||
* @return Массив
|
* @return Массив
|
||||||
*/
|
*/
|
||||||
function getItems()
|
function getItems()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ require_once 'core/widgets/widget.php';
|
||||||
require_once 'core/widgets/menu.php';
|
require_once 'core/widgets/menu.php';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <EFBFBD>מלןמםוםע הכ<EFBFBD> דוםונאצטט לום
|
* Компонент для генерации меню
|
||||||
*/
|
*/
|
||||||
class PageMenu extends Widget
|
class PageMenu extends Widget
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
require_once 'core/widgets/widget.php';
|
require_once 'core/widgets/widget.php';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Отображение постраничности
|
* Отображение постраничности
|
||||||
*/
|
*/
|
||||||
class Pages extends Widget // Selector
|
class Pages extends Widget // Selector
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -18,8 +18,8 @@ class SearchDialog extends Dialog
|
||||||
|
|
||||||
function postMake()
|
function postMake()
|
||||||
{
|
{
|
||||||
$form = new TForm (); // Показывем форму
|
$form = new TForm (); // Показывем форму
|
||||||
$form->addFieldList ($this->fields); // Разделить форму поиска и редактирования
|
$form->addFieldList ($this->fields); // Разделить форму поиска и редактирования
|
||||||
$this->view->form = $form;
|
$this->view->form = $form;
|
||||||
|
|
||||||
$this->view->action = $this->action;
|
$this->view->action = $this->action;
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
require_once 'core/widgets/widget.php';
|
require_once 'core/widgets/widget.php';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Компонент для генерации Дерева
|
* Компонент для генерации Дерева
|
||||||
*/
|
*/
|
||||||
class Tree extends Widget
|
class Tree extends Widget
|
||||||
{
|
{
|
||||||
|
|
@ -11,7 +11,7 @@ class Tree extends Widget
|
||||||
{
|
{
|
||||||
$this->template = "tree";
|
$this->template = "tree";
|
||||||
}
|
}
|
||||||
// Добавление ветки дерева
|
// Добавление ветки дерева
|
||||||
}
|
}
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|
@ -11,12 +11,12 @@ function forceUrl($name)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Класс для генерации и управления активными компонентами страницы
|
* Класс для генерации и управления активными компонентами страницы
|
||||||
* Компонент состоит из следующих частей
|
* Компонент состоит из следующих частей
|
||||||
* PHP - Управление компонентом (Генерация, Инициализация, Обработка событий)
|
* PHP - Управление компонентом (Генерация, Инициализация, Обработка событий)
|
||||||
* HTML - Необходимые шаблоны
|
* HTML - Необходимые шаблоны
|
||||||
* CSS - Стили
|
* CSS - Стили
|
||||||
* Javascript - Клиентская часть управления компонентом
|
* Javascript - Клиентская часть управления компонентом
|
||||||
*/
|
*/
|
||||||
class Widget
|
class Widget
|
||||||
{
|
{
|
||||||
|
|
@ -43,7 +43,7 @@ class Widget
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Генерация кода инициализации компонента на стороне клиента
|
* Генерация кода инициализации компонента на стороне клиента
|
||||||
*/
|
*/
|
||||||
public function getCodeBefore()
|
public function getCodeBefore()
|
||||||
{
|
{
|
||||||
|
|
@ -69,7 +69,7 @@ class Widget
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Генерация компонента
|
* Генерация компонента
|
||||||
*/
|
*/
|
||||||
function make(Controller $parent)
|
function make(Controller $parent)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
.*/
|
.*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Расширение класса ZipArchive с возможность архивирования директории
|
* Расширение класса ZipArchive с возможность архивирования директории
|
||||||
*/
|
*/
|
||||||
class ZipFile extends ZipArchive
|
class ZipFile extends ZipArchive
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue