Перекодировка в 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/)
|
||||
*
|
||||
* @package phptal
|
||||
* @author Iván Montes <drslump@pollinimini.net>
|
||||
* @author Ivбn Montes <drslump@pollinimini.net>
|
||||
*/
|
||||
class PHPTAL_RepeatController_Groups {
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Интерфейс к массиву и обьекту как к коллекции
|
||||
* Интерфейс к массиву и обьекту как к коллекции
|
||||
*/
|
||||
class Adapter
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<?php
|
||||
/**
|
||||
* Коллекция
|
||||
* Коллекция
|
||||
*
|
||||
* package core
|
||||
*/
|
||||
|
|
@ -14,7 +14,7 @@ class Collection implements ArrayAccess
|
|||
protected $data = array();
|
||||
|
||||
/**
|
||||
* Преобразование массива в коллекцию
|
||||
* Преобразование массива в коллекцию
|
||||
*
|
||||
* @param array $data
|
||||
*/
|
||||
|
|
@ -25,7 +25,7 @@ class Collection implements ArrayAccess
|
|||
}
|
||||
|
||||
/**
|
||||
* Преобразование коллекции в массив
|
||||
* Преобразование коллекции в массив
|
||||
*/
|
||||
public function export()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -6,17 +6,17 @@ class HttpConnection
|
|||
const POST = "POST";
|
||||
const GET = "GET";
|
||||
|
||||
private $param = array(); // Параметры запроса
|
||||
public $data = null; // Содержание
|
||||
public $url; // Адресс
|
||||
public $method = self::GET; // Метод
|
||||
private $param = array(); // Параметры запроса
|
||||
public $data = null; // Содержание
|
||||
public $url; // Адресс
|
||||
public $method = self::GET; // Метод
|
||||
public $port = 80;
|
||||
public $host = "";
|
||||
public $proxy_host = false;
|
||||
public $proxy_port = false;
|
||||
|
||||
/**
|
||||
* Возвращает заголовок соединения
|
||||
* Возвращает заголовок соединения
|
||||
*/
|
||||
public function getHeader()
|
||||
{
|
||||
|
|
@ -31,7 +31,7 @@ class HttpConnection
|
|||
}
|
||||
|
||||
/**
|
||||
* Установка параметров запроса
|
||||
* Установка параметров запроса
|
||||
* @parma string $name
|
||||
* @parma string $value
|
||||
*/
|
||||
|
|
@ -41,7 +41,7 @@ class HttpConnection
|
|||
}
|
||||
|
||||
/**
|
||||
* Метод запроса GET или POST
|
||||
* Метод запроса GET или POST
|
||||
*/
|
||||
public function setMethod($method)
|
||||
{
|
||||
|
|
@ -60,7 +60,7 @@ class HttpConnection
|
|||
}
|
||||
|
||||
/**
|
||||
* Содержание запроса
|
||||
* Содержание запроса
|
||||
*/
|
||||
public function setContent($data)
|
||||
{
|
||||
|
|
@ -69,7 +69,7 @@ class HttpConnection
|
|||
}
|
||||
|
||||
/**
|
||||
* Посылает запрос и возвращает страницу
|
||||
* Посылает запрос и возвращает страницу
|
||||
*/
|
||||
public function getPage()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Обрабатывает HTTP ответ
|
||||
* Обрабатывает HTTP ответ
|
||||
*/
|
||||
class HttpConnectionResponse
|
||||
{
|
||||
|
|
@ -17,7 +17,7 @@ class HttpConnectionResponse
|
|||
}
|
||||
|
||||
/**
|
||||
* Обработка HTTP ответа
|
||||
* Обработка HTTP ответа
|
||||
*/
|
||||
private function parseMessage()
|
||||
{
|
||||
|
|
@ -48,7 +48,7 @@ class HttpConnectionResponse
|
|||
}
|
||||
|
||||
/**
|
||||
* Обработка строки HTTP ответа
|
||||
* Обработка строки HTTP ответа
|
||||
*/
|
||||
private function getLine()
|
||||
{
|
||||
|
|
@ -60,7 +60,7 @@ class HttpConnectionResponse
|
|||
}
|
||||
|
||||
/**
|
||||
* Значение параметра HTTP ответа
|
||||
* Значение параметра HTTP ответа
|
||||
*/
|
||||
public function getParameter($name)
|
||||
{
|
||||
|
|
@ -73,7 +73,7 @@ class HttpConnectionResponse
|
|||
}
|
||||
|
||||
/**
|
||||
* Состояние
|
||||
* Состояние
|
||||
*/
|
||||
public function getCode()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -14,9 +14,9 @@ require_once 'core/widgets/setup.php';
|
|||
require_once 'core/widgets/listtable.php';
|
||||
|
||||
/**
|
||||
* Переименовать контроллер !! (StubController, CrudController, PageController, BaseController) ModelController
|
||||
* Возможно нужен еще класс с мета действиями как для actionIndex <= metaActionIndex либо с классам для этих действий
|
||||
* Есть класс для управлениями действиями а есть сами действия в виде классов или функций !!
|
||||
* Переименовать контроллер !! (StubController, CrudController, PageController, BaseController) ModelController
|
||||
* Возможно нужен еще класс с мета действиями как для actionIndex <= metaActionIndex либо с классам для этих действий
|
||||
* Есть класс для управлениями действиями а есть сами действия в виде классов или функций !!
|
||||
*/
|
||||
class Controller_Model extends Controller_Action
|
||||
{
|
||||
|
|
@ -24,7 +24,7 @@ class Controller_Model extends Controller_Action
|
|||
public $schemaSearch = array();
|
||||
|
||||
/**
|
||||
* FIXME: Лучше $this->table->setHeader
|
||||
* FIXME: Лучше $this->table->setHeader
|
||||
*/
|
||||
public $tableSchema = null;
|
||||
public $formSchema = array();
|
||||
|
|
@ -44,8 +44,8 @@ class Controller_Model extends Controller_Action
|
|||
*/
|
||||
function setUp()
|
||||
{
|
||||
$this->table->addMenuItem($this->aUrl('delete'), 'удалить', false, 'all', 'warning');
|
||||
//$this->table->addMenuItem($this->nUrl('form'), 'редактировать', 'edit-24.png');
|
||||
$this->table->addMenuItem($this->aUrl('delete'), 'удалить', false, 'all', 'warning');
|
||||
//$this->table->addMenuItem($this->nUrl('form'), 'редактировать', 'edit-24.png');
|
||||
}
|
||||
|
||||
function saveParameters($args, $list)
|
||||
|
|
@ -66,12 +66,12 @@ class Controller_Model extends Controller_Action
|
|||
}
|
||||
|
||||
/**
|
||||
* Удаление сторк из таблицы
|
||||
* Удаление сторк из таблицы
|
||||
*/
|
||||
public function actionDelete(HttpRequest $request)
|
||||
{
|
||||
$model = $this->getModel($this->useModel);
|
||||
// Почему table_item ???
|
||||
// Почему table_item ???
|
||||
$list = ($request->get('table_item')) ? $request->get('table_item'): $request->get('id');
|
||||
$model->deleteList($list);
|
||||
|
||||
|
|
@ -79,7 +79,7 @@ class Controller_Model extends Controller_Action
|
|||
}
|
||||
|
||||
/**
|
||||
* Ответ на запрос по поиску
|
||||
* Ответ на запрос по поиску
|
||||
*/
|
||||
public function actionSearch(HttpRequest $request)
|
||||
{
|
||||
|
|
@ -90,7 +90,7 @@ class Controller_Model extends Controller_Action
|
|||
}
|
||||
|
||||
/**
|
||||
* Список элементов
|
||||
* Список элементов
|
||||
*/
|
||||
public function actionList(HttpRequest $request)
|
||||
{
|
||||
|
|
@ -110,47 +110,47 @@ class Controller_Model extends Controller_Action
|
|||
}
|
||||
|
||||
/**
|
||||
* Сохранение формы
|
||||
* Сохранение формы
|
||||
*/
|
||||
function beforeSave(/*Model*/ $item, Collection $request)
|
||||
{
|
||||
if (empty($this->formSchema)) {
|
||||
$this->setFormSchema();
|
||||
}
|
||||
// Сделать отображение Формы в обьект и обратно <-- Убрать в beforeSave
|
||||
// Сделать отображение Формы в обьект и обратно <-- Убрать в beforeSave
|
||||
foreach ($this->formSchema as $key => $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 beforeLoad(/*Model*/ $item, TForm $form)
|
||||
{
|
||||
if (empty($this->formSchema)) {
|
||||
$this->setFormSchema();
|
||||
}
|
||||
// Вставка значений из данных в форму
|
||||
// Отображение обьекта в поля формы
|
||||
// Вставка значений из данных в форму
|
||||
// Отображение обьекта в поля формы
|
||||
$form->fill($item, $this->formSchema);
|
||||
}
|
||||
|
||||
// Проверка ввода
|
||||
// Проверка ввода
|
||||
protected function validate($validator, $request)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Действие для проверки формы
|
||||
* Действие для проверки формы
|
||||
*/
|
||||
public function actionValidate($request)
|
||||
{
|
||||
|
|
@ -158,10 +158,10 @@ class Controller_Model extends Controller_Action
|
|||
$validator = new Validator();
|
||||
$validator->addRuleList($this->schema);
|
||||
|
||||
// Действия до проверки формы
|
||||
// Действия до проверки формы
|
||||
$this->validate($validator, $request); // <--|
|
||||
$validator->validate($request); // --|
|
||||
// Проверка формы
|
||||
// Проверка формы
|
||||
if (!$validator->isValid()) {
|
||||
return json::encode($validator->getErrorMsg());
|
||||
}
|
||||
|
|
@ -169,7 +169,7 @@ class Controller_Model extends Controller_Action
|
|||
}
|
||||
|
||||
/**
|
||||
* Инициализация формы
|
||||
* Инициализация формы
|
||||
*/
|
||||
protected function formSetup($form, $id = null, $ref = null)
|
||||
{
|
||||
|
|
@ -185,65 +185,65 @@ class Controller_Model extends Controller_Action
|
|||
}
|
||||
|
||||
/**
|
||||
* Добавление пользователя
|
||||
* Добавление пользователя
|
||||
*/
|
||||
public function actionAdd(HttpRequest $request)
|
||||
{
|
||||
require_once "core/validator/validator.php";
|
||||
// {{{ тоже может быть один ref или несколько
|
||||
// {{{ тоже может быть один ref или несколько
|
||||
$ref = $request->get('ref');
|
||||
$this->addParameter('ref', $ref); // Добавляет параметр в url
|
||||
$this->addParameter('ref', $ref); // Добавляет параметр в url
|
||||
/// }}}
|
||||
|
||||
if ($this->checkPageId($request, $request->get('page'))) {
|
||||
// Проверка
|
||||
// Проверка
|
||||
$validator = new Validator();
|
||||
$validator->addRuleList($this->schema);
|
||||
|
||||
// Действия до проверки формы
|
||||
// Действия до проверки формы
|
||||
$this->validate($validator, $request); // <--|
|
||||
$validator->validate($request); // --|
|
||||
// Проверка формы
|
||||
// Проверка формы
|
||||
if (!$validator->isValid()) {
|
||||
$request->setAction('form');
|
||||
$this->getActionPath($request);
|
||||
|
||||
$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);
|
||||
|
||||
$form->setError($validator); // Установка ошибок для формы
|
||||
$form->setError($validator); // Установка ошибок для формы
|
||||
|
||||
$tpl = $this->formPage($form, $request);
|
||||
$id = $request->get('id');
|
||||
if ($id) { // Редактирование
|
||||
$tpl->action = forceUrl($this->nUrl('add', array('id' => $id, 'page' => $this->getPageId($request)))); // action Совйство формы
|
||||
if ($id) { // Редактирование
|
||||
$tpl->action = forceUrl($this->nUrl('add', array('id' => $id, 'page' => $this->getPageId($request)))); // action Совйство формы
|
||||
}
|
||||
return $tpl /*->execute()*/;
|
||||
}
|
||||
|
||||
// Нужен тест для формы
|
||||
// Нужен тест для формы
|
||||
$model = $this->getModel($this->useModel);
|
||||
$className = $model->className;
|
||||
$item = new $className();
|
||||
|
||||
// Сохраняем значение в базе данных
|
||||
// Сохраняем значение в базе данных
|
||||
$item->id = $request->get('id');
|
||||
// Если таблица связана с другой таблицей
|
||||
// Если таблица связана с другой таблицей
|
||||
if ($request->get('ref') && $model->reference[1]) {
|
||||
$ref_id = $model->reference[1];
|
||||
$item->$ref_id = $request->get('ref');
|
||||
}
|
||||
|
||||
// Подготовка к сохранению
|
||||
$this->beforeSave($item, $request); // Сюдаже и истрия переходов
|
||||
// nextId ??? или выход или новая форма для создания новости
|
||||
// Подготовка к сохранению
|
||||
$this->beforeSave($item, $request); // Сюдаже и истрия переходов
|
||||
// nextId ??? или выход или новая форма для создания новости
|
||||
$model->saveDB($item, $request);
|
||||
}
|
||||
|
||||
// Для страницы со списком id -> идентефикатор родительской таблицы !!??
|
||||
// Для страницы со списком id -> идентефикатор родительской таблицы !!??
|
||||
// $request->set('id', $request->get('ref'));
|
||||
if ($request->get('apply')) {
|
||||
$request->setAction('form');
|
||||
|
|
@ -253,7 +253,7 @@ class Controller_Model extends Controller_Action
|
|||
}
|
||||
|
||||
/**
|
||||
* Заголовок
|
||||
* Заголовок
|
||||
*/
|
||||
private function setTitlePath($ref)
|
||||
{
|
||||
|
|
@ -263,37 +263,37 @@ class Controller_Model extends Controller_Action
|
|||
$refmodel = $this->getModel($model->reference[0]);
|
||||
try {
|
||||
$parent = $refmodel->findById($ref);
|
||||
$this->path->addTitle($parent->getTitle()); // Заголовок к подписям путей
|
||||
$this->path->addTitle($parent->getTitle()); // Заголовок к подписям путей
|
||||
} catch (Exception $e) {
|
||||
// Не найден заголовок потому что неправильно определен родительский элемент
|
||||
// Не найден заголовок потому что неправильно определен родительский элемент
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Форма для редактирования
|
||||
* Форма для редактирования
|
||||
*/
|
||||
public function actionForm(HttpRequest $request)
|
||||
{
|
||||
$this->getActionPath($request);
|
||||
$ref = $request->get('ref');
|
||||
$this->addParameter('ref', $ref); // Добавляет параметр в url
|
||||
$this->addParameter('ref', $ref); // Добавляет параметр в url
|
||||
$this->setTitlePath($ref);
|
||||
|
||||
$model = $this->getModel($this->useModel);
|
||||
$form = new TForm(); // Показываем форму
|
||||
$form->header = 'Редактирование записи';
|
||||
$this->formSetup($form, $request->get('id'), $request->get('ref')); // Инициализация формы
|
||||
$form = new TForm(); // Показываем форму
|
||||
$form->header = 'Редактирование записи';
|
||||
$this->formSetup($form, $request->get('id'), $request->get('ref')); // Инициализация формы
|
||||
|
||||
$list = $request->get('table_item');
|
||||
$id = ($list[0]) ? $list[0] : $request->get('id');
|
||||
|
||||
$tpl = $this->formPage ($form, $request);
|
||||
if ($id) { // Редактирование
|
||||
$form->action = forceUrl($this->nUrl('add', array('id' => $id, 'page' => $this->getPageId($request)))); // action Свойство формы
|
||||
if ($id) { // Редактирование
|
||||
$form->action = forceUrl($this->nUrl('add', array('id' => $id, 'page' => $this->getPageId($request)))); // action Свойство формы
|
||||
$item = $model->findById($id);
|
||||
// Загрузка формы
|
||||
// Загрузка формы
|
||||
$this->beforeLoad($item, $form);
|
||||
///
|
||||
}
|
||||
|
|
@ -304,11 +304,11 @@ class Controller_Model extends Controller_Action
|
|||
*/
|
||||
function tableSetup($table, $id = null, $ref = null)
|
||||
{
|
||||
// FIXME: После замены везде $tableSchema -> table->setHeader удалить!
|
||||
// FIXME: После замены везде $tableSchema -> table->setHeader удалить!
|
||||
if ($this->tableSchema) {
|
||||
$table->setHeader($this->tableSchema);
|
||||
} else {
|
||||
// Настройка таблицы отображения по схеме данных
|
||||
// Настройка таблицы отображения по схеме данных
|
||||
require_once 'core/mapper/uimapper.php';
|
||||
$model = $this->getModel($this->useModel);
|
||||
$ui = new UIMapper($model);
|
||||
|
|
@ -324,17 +324,17 @@ class Controller_Model extends Controller_Action
|
|||
public function actionIndex(HttpRequest $request)
|
||||
{
|
||||
$this->getActionPath($request, 'index');
|
||||
// Такое мета действие наверное можно вынести в отдельный класс
|
||||
// Такое мета действие наверное можно вынести в отдельный класс
|
||||
return $this->metaActionIndex($request, array($this, 'tableSetup'), $this->aUrl('list'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Страница по умолчанию
|
||||
* Страница по умолчанию
|
||||
*/
|
||||
public function metaActionIndex(HttpRequest $request, $setup, $list)
|
||||
{
|
||||
// может быть одно ref или несколько
|
||||
// {{{ история переходов
|
||||
// может быть одно ref или несколько
|
||||
// {{{ история переходов
|
||||
$ref = null;
|
||||
if ($request->get('ref')) {
|
||||
$ref = $request->get('ref');
|
||||
|
|
@ -349,9 +349,9 @@ class Controller_Model extends Controller_Action
|
|||
|
||||
$tpl = $this->getView('list');
|
||||
|
||||
// Помошники действий
|
||||
// Помошники действий
|
||||
$this->callHelpers($request);
|
||||
// Таблица
|
||||
// Таблица
|
||||
if ($request->session()->get(strtolower(get_class($this)))) {
|
||||
$session = $request->session()->get(strtolower(get_class($this)));
|
||||
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);
|
||||
//
|
||||
$tpl->menu_path = $this->path->getItems();
|
||||
|
||||
// Поиск
|
||||
// Поиск
|
||||
$search = new SearchDialog();
|
||||
$search->setTitle('Поиск');
|
||||
$search->setTitle('Поиск');
|
||||
$search->setAction($this->aUrl('search'));
|
||||
$search->setFriend($this->table);
|
||||
$search->addFields($this->schemaSearch);
|
||||
|
||||
// Настройки
|
||||
// Настройки
|
||||
$setup = new SetupDialog();
|
||||
$setup->setTitle('Настройки');
|
||||
$setup->setTitle('Настройки');
|
||||
$setup->setAction($this->nUrl('setup'));
|
||||
$setup->setFriend($this->table);
|
||||
|
||||
// Меню
|
||||
$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=' . $search->getName(), 'поиск', 'actions/system-search'); // Стандартный размер для иконок 22-24px
|
||||
$this->menu->addMenuItem('?menu=toggle&id=' . $setup->getName(), 'настройки', 'categories/applications-system');
|
||||
// Добавление компонентов
|
||||
$this->addChild('menu', $this->menu);
|
||||
$this->addChild('search', $search);
|
||||
$this->addChild('setup', $setup);
|
||||
|
|
@ -417,14 +417,14 @@ class Controller_Model extends Controller_Action
|
|||
{
|
||||
$view = $this->getView('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->back = $this->path->getPrev();
|
||||
return $view;
|
||||
}
|
||||
|
||||
// Тоже убрать в метод Controller_Model
|
||||
// Тоже убрать в метод Controller_Model
|
||||
function getActionPath(HttpRequest $request/*, $action = false*/)
|
||||
{
|
||||
require_once 'state.php';
|
||||
|
|
|
|||
|
|
@ -7,12 +7,12 @@ class FileNotFountException extends Exception
|
|||
}
|
||||
|
||||
/**
|
||||
* Класс компонента
|
||||
* Класс компонента
|
||||
*/
|
||||
class Component
|
||||
{
|
||||
static $_uid = 1;
|
||||
public $uid; // UID компонента создается при создании страницы, вставки компонента, или это статическое свойство
|
||||
public $uid; // UID компонента создается при создании страницы, вставки компонента, или это статическое свойство
|
||||
public $viewPath;
|
||||
public $registry; // Registry->getInstance
|
||||
public $template;
|
||||
|
|
@ -33,7 +33,7 @@ class Component
|
|||
require_once "core/view/compositeview.php";
|
||||
//
|
||||
$template = ($this->template) ? $this->template : $this->_registry->readKey(array('system', 'template'));
|
||||
// Загружать шаблон по умолчанию если не найден текущий
|
||||
// Загружать шаблон по умолчанию если не найден текущий
|
||||
if (is_dir(Path::join($this->viewPath, 'templates', $template))) {
|
||||
$template_file = Path::join($this->viewPath, 'templates', $template, $name);
|
||||
} else {
|
||||
|
|
@ -59,7 +59,7 @@ class Component
|
|||
}
|
||||
|
||||
/**
|
||||
* @param $name Имя модели
|
||||
* @param $name Имя модели
|
||||
*/
|
||||
private function getModelPath($name)
|
||||
{
|
||||
|
|
@ -67,7 +67,7 @@ class Component
|
|||
}
|
||||
|
||||
/**
|
||||
* Создает модель
|
||||
* Создает модель
|
||||
* @param string $name
|
||||
* @return model
|
||||
*/
|
||||
|
|
@ -98,8 +98,8 @@ class Component
|
|||
return $result;
|
||||
}
|
||||
|
||||
/* В дальнейшем нужно зменить на методы
|
||||
+ Методы могут быть и javascript
|
||||
/* В дальнейшем нужно зменить на методы
|
||||
+ Методы могут быть и javascript
|
||||
*/
|
||||
protected $editUrl;
|
||||
|
||||
|
|
@ -115,7 +115,7 @@ class Component
|
|||
}
|
||||
|
||||
/**
|
||||
* TALES для подключения компонентов
|
||||
* TALES для подключения компонентов
|
||||
* component:name?param1=value1¶m2=value2
|
||||
*/
|
||||
class Component_Tales implements PHPTAL_Tales
|
||||
|
|
@ -143,13 +143,13 @@ function loadComponent($name, $db, $registry)
|
|||
}
|
||||
|
||||
/**
|
||||
* Функция подключения компонента
|
||||
* Функция подключения компонента
|
||||
*/
|
||||
global $componentList;
|
||||
$componentList = array();
|
||||
|
||||
function phptal_component ($real_expression, $offset = 0) {
|
||||
global $db, $registry, $componentList; // Нужно както передавать параметры
|
||||
global $db, $registry, $componentList; // Нужно както передавать параметры
|
||||
|
||||
$expression = htmlspecialchars_decode($real_expression);
|
||||
$url = parse_url($expression);
|
||||
|
|
@ -165,9 +165,9 @@ function phptal_component ($real_expression, $offset = 0) {
|
|||
$componentList [] = array(
|
||||
'uid' => $component->getUID(), 'params' => $expression, 'name' => $name, 'offset' => $offset,
|
||||
'size' => strlen($real_expression),
|
||||
/* Вместо ссылки на редактирование нужно передавать список методов для работы с компонентом
|
||||
edit (редактирование содержание), new (новое содержание), шаблон коменнента ... вместе с иконками этих методов
|
||||
! Компоненты могут содержать другие компоненты
|
||||
/* Вместо ссылки на редактирование нужно передавать список методов для работы с компонентом
|
||||
edit (редактирование содержание), new (новое содержание), шаблон коменнента ... вместе с иконками этих методов
|
||||
! Компоненты могут содержать другие компоненты
|
||||
*/
|
||||
'editurl' => $component->getEditUrl(),
|
||||
'newurl' => ''
|
||||
|
|
@ -179,7 +179,7 @@ function phptal_component ($real_expression, $offset = 0) {
|
|||
return $component->execute($params, $req);
|
||||
}
|
||||
|
||||
/* Регистрация нового префикса для подключения компонента */
|
||||
/* Регистрация нового префикса для подключения компонента */
|
||||
$registry = PHPTAL_TalesRegistry::getInstance();
|
||||
$registry->registerPrefix('component', array('Component_Tales', 'component'));
|
||||
|
||||
|
|
|
|||
|
|
@ -14,32 +14,32 @@ function forceUrl($name)
|
|||
}
|
||||
|
||||
/**
|
||||
* Контроллер страниц
|
||||
* Контроллер страниц
|
||||
* @package core
|
||||
*/
|
||||
class Controller
|
||||
{
|
||||
|
||||
const TEMPLATE_EXTENSION = ".html"; // Расширение для шаблонов
|
||||
const ACTION_PREFIX = "action"; // Префикс для функций действий
|
||||
const TEMPLATE_EXTENSION = ".html"; // Расширение для шаблонов
|
||||
const ACTION_PREFIX = "action"; // Префикс для функций действий
|
||||
|
||||
public $jsPath; // Глобальный путь к скриптам
|
||||
public $themePath; // Глобальный путь к текущей теме
|
||||
public $jsPath; // Глобальный путь к скриптам
|
||||
public $themePath; // Глобальный путь к текущей теме
|
||||
|
||||
// Параметры устанавливаются при создании контроллера
|
||||
public $name; // Имя модуля
|
||||
public $viewPath = null; // Путь к шаблонам контроллера
|
||||
public $db; // Соединение с базой данных
|
||||
// Параметры устанавливаются при создании контроллера
|
||||
public $name; // Имя модуля
|
||||
public $viewPath = null; // Путь к шаблонам контроллера
|
||||
public $db; // Соединение с базой данных
|
||||
|
||||
// Фильтры
|
||||
public $access; // Обьект хранит параметры доступа
|
||||
public $logger; // Обьект для ведения лога
|
||||
// Фильтры
|
||||
public $access; // Обьект хранит параметры доступа
|
||||
public $logger; // Обьект для ведения лога
|
||||
|
||||
private $factory; // Ссылка на обьект создания модели
|
||||
private $helpers = array(); // Помошники для действий
|
||||
public $param = array(); // Параметры для ссылки
|
||||
private $factory; // Ссылка на обьект создания модели
|
||||
private $helpers = array(); // Помошники для действий
|
||||
public $param = array(); // Параметры для ссылки
|
||||
|
||||
public $_registry; // Ссылка на реестр
|
||||
public $_registry; // Ссылка на реестр
|
||||
public $_shortcut;
|
||||
|
||||
public function __construct ()
|
||||
|
|
@ -83,7 +83,7 @@ class Controller
|
|||
}
|
||||
|
||||
/**
|
||||
* Создает представление
|
||||
* Создает представление
|
||||
* @param string $file
|
||||
* @return template
|
||||
*/
|
||||
|
|
@ -92,7 +92,7 @@ class Controller
|
|||
require_once "core/view/compositeview.php";
|
||||
|
||||
$file = $name . self::TEMPLATE_EXTENSION;
|
||||
// Список возможных директорий для поиска файла шаблона
|
||||
// Список возможных директорий для поиска файла шаблона
|
||||
$theme = $this->_registry->readKey(array('system', 'theme'));
|
||||
$icon_theme = $this->_registry->readKey(array('system', 'icon_theme'));
|
||||
$list = array(
|
||||
|
|
@ -100,17 +100,17 @@ class Controller
|
|||
PHPTAL_TEMPLATE_REPOSITORY => "");
|
||||
|
||||
|
||||
// Поиск файла для шаблона
|
||||
// Поиск файла для шаблона
|
||||
foreach($list as $ospath => $path) {
|
||||
$template = Path::join($ospath, $file);
|
||||
if(file_exists($template)) { break; }
|
||||
}
|
||||
|
||||
$tpl = new View_Composite($template);
|
||||
$tpl->icons = $this->iconPath; // Путь к файлам текущей темы
|
||||
$tpl->media = $this->themePath; // Путь к файлам текущей темы
|
||||
$tpl->script = $this->jsPath; // Путь к файлам скриптов
|
||||
$tpl->template = $path; // Путь к файлам текущего шаблона
|
||||
$tpl->icons = $this->iconPath; // Путь к файлам текущей темы
|
||||
$tpl->media = $this->themePath; // Путь к файлам текущей темы
|
||||
$tpl->script = $this->jsPath; // Путь к файлам скриптов
|
||||
$tpl->template = $path; // Путь к файлам текущего шаблона
|
||||
$tpl->setAlias(array(
|
||||
'${icons}' => $this->iconPath,
|
||||
'${media}' => $this->themePath,
|
||||
|
|
@ -132,11 +132,11 @@ class Controller
|
|||
}
|
||||
|
||||
/**
|
||||
* Выбор действия
|
||||
* Т.к действия являются методами класса то
|
||||
* 1. Можно переопределить действия
|
||||
* 2. Использовать наследование чтобы добавить к старому обработчику новое поведение
|
||||
* @param $request Обьект запроса
|
||||
* Выбор действия
|
||||
* Т.к действия являются методами класса то
|
||||
* 1. Можно переопределить действия
|
||||
* 2. Использовать наследование чтобы добавить к старому обработчику новое поведение
|
||||
* @param $request Обьект запроса
|
||||
*/
|
||||
public function execute1(HTTPRequest $request)
|
||||
{
|
||||
|
|
@ -159,7 +159,7 @@ class Controller
|
|||
|
||||
public function forward($action, HTTPRequest $args)
|
||||
{
|
||||
// Действия до вызова основного обработчика
|
||||
// Действия до вызова основного обработчика
|
||||
/*foreach($this->_aspect as $aspect) {
|
||||
if (isset($aspect->before[$action])) {
|
||||
call_user_func ($aspect->before[$action], $action, $args);
|
||||
|
|
@ -169,7 +169,7 @@ class Controller
|
|||
}
|
||||
|
||||
/**
|
||||
* Страница по умолчанию
|
||||
* Страница по умолчанию
|
||||
*/
|
||||
public function actionIndex(HttpRequest $request)
|
||||
{
|
||||
|
|
@ -184,10 +184,10 @@ class Controller
|
|||
}
|
||||
|
||||
/**
|
||||
* Генерация ссылки c учетом прав пользователя на ссылки
|
||||
* Генерация ссылки c учетом прав пользователя на ссылки
|
||||
*
|
||||
* @parma string $name Действие
|
||||
* @parma string $param Дополнительные параметры
|
||||
* @parma string $name Действие
|
||||
* @parma string $param Дополнительные параметры
|
||||
*/
|
||||
public function nUrl($name, array $param = array())
|
||||
{
|
||||
|
|
@ -203,7 +203,7 @@ class Controller
|
|||
}
|
||||
|
||||
/**
|
||||
* Добавляет параметр для всех ссылок создаваемых функцией nUrl, aUrl
|
||||
* Добавляет параметр для всех ссылок создаваемых функцией nUrl, aUrl
|
||||
*/
|
||||
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())
|
||||
{
|
||||
|
|
@ -222,7 +222,7 @@ class Controller
|
|||
}
|
||||
|
||||
/**
|
||||
* Добавление помошника контроллера
|
||||
* Добавление помошника контроллера
|
||||
*/
|
||||
public function addHelper($class)
|
||||
{
|
||||
|
|
@ -230,7 +230,7 @@ class Controller
|
|||
}
|
||||
|
||||
/**
|
||||
* Вызов помошников контроллера
|
||||
* Вызов помошников контроллера
|
||||
*/
|
||||
public function callHelpers(HttpRequest $request)
|
||||
{
|
||||
|
|
@ -239,13 +239,13 @@ class Controller
|
|||
if (method_exists($helper, $action)) {
|
||||
return call_user_func(array($helper, $action), $request, $this);
|
||||
} else {
|
||||
return $helper->actionIndex($request, $this); // Вместо return response ???
|
||||
return $helper->actionIndex($request, $this); // Вместо return response ???
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Загрузка файла класса
|
||||
* Загрузка файла класса
|
||||
*/
|
||||
public function loadClass($path, $setup = null)
|
||||
{
|
||||
|
|
@ -264,7 +264,7 @@ class Controller
|
|||
return $result->export();
|
||||
}
|
||||
|
||||
// Для Widgets
|
||||
// Для Widgets
|
||||
public $view = null;
|
||||
public $childNodes = array();
|
||||
public $childViews = array();
|
||||
|
|
@ -275,7 +275,7 @@ class Controller
|
|||
}
|
||||
|
||||
/**
|
||||
* Установка заголовка для отображения
|
||||
* Установка заголовка для отображения
|
||||
*/
|
||||
public function setTitle($title)
|
||||
{
|
||||
|
|
@ -283,7 +283,7 @@ class Controller
|
|||
}
|
||||
|
||||
/**
|
||||
* Добавление widget к отображению
|
||||
* Добавление widget к отображению
|
||||
*/
|
||||
public function addChild(/*Widget*/ $section, $node)
|
||||
{
|
||||
|
|
@ -291,7 +291,7 @@ class Controller
|
|||
}
|
||||
|
||||
/**
|
||||
* Добавление дочернего отображения к текущему отображению
|
||||
* Добавление дочернего отображения к текущему отображению
|
||||
*/
|
||||
public function addView(/*CompositeView*/ $section, $node)
|
||||
{
|
||||
|
|
@ -299,8 +299,8 @@ class Controller
|
|||
}
|
||||
|
||||
/**
|
||||
* Генерация содержания
|
||||
* Путаница c execute и render
|
||||
* Генерация содержания
|
||||
* Путаница c execute и render
|
||||
*/
|
||||
public function render()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -4,15 +4,15 @@ require_once 'core/controller/controller.php';
|
|||
require_once 'core/controller/installer.php';
|
||||
|
||||
/**
|
||||
* Первичный контроллер контроллер страниц
|
||||
* Первичный контроллер контроллер страниц
|
||||
* @package core
|
||||
*/
|
||||
class Controller_Front extends Controller
|
||||
{
|
||||
|
||||
protected $shortcut; // Ярлык к модулю
|
||||
protected $_param; // Параметр по которому выбирается модуль
|
||||
protected $default; // Значение параметра по умолчанию
|
||||
protected $shortcut; // Ярлык к модулю
|
||||
protected $_param; // Параметр по которому выбирается модуль
|
||||
protected $default; // Значение параметра по умолчанию
|
||||
protected $installer;
|
||||
|
||||
public function __construct(Settings $_registry, $_shortcut)
|
||||
|
|
@ -29,9 +29,9 @@ class Controller_Front extends Controller
|
|||
|
||||
|
||||
/**
|
||||
* Создает экземпляр модуля и выполняет действия для него
|
||||
* @param string $name Имя модуля
|
||||
* @param request $request Имя модуля
|
||||
* Создает экземпляр модуля и выполняет действия для него
|
||||
* @param string $name Имя модуля
|
||||
* @param request $request Имя модуля
|
||||
* @return string
|
||||
*/
|
||||
public function loadModule($name, Collection $request)
|
||||
|
|
@ -43,7 +43,7 @@ class Controller_Front extends Controller
|
|||
$module = $this->loadClass($moduleFile);
|
||||
|
||||
if ($module) {
|
||||
// Инициализация модуля
|
||||
// Инициализация модуля
|
||||
// $module->viewPath = dirname($moduleFile);
|
||||
$module->viewPath = Shortcut::getUrl('modulepath', $name);
|
||||
$module->name = $name;
|
||||
|
|
@ -57,11 +57,11 @@ class Controller_Front extends Controller
|
|||
$module->themePath = $this->themePath; // -> Registry
|
||||
$module->jsPath = $this->jsPath; // -> Registry
|
||||
$module->db = $this->db;
|
||||
// Не для всех приложений нужно вести лог действий
|
||||
// Ведение лога
|
||||
// Не для всех приложений нужно вести лог действий
|
||||
// Ведение лога
|
||||
$logger = $this->loadClass(FRAMEWORK_PATH . '/core/filter/actionlogger.php', $module);
|
||||
$logger->before = $this->loadSettings(Shortcut::getUrl('logger', $name));
|
||||
// Управление доступом
|
||||
// Управление доступом
|
||||
$module->access = $this->loadClass(FRAMEWORK_PATH . '/core/filter/actionaccess.php', $logger);
|
||||
$module->access->access = $this->loadSettings(Shortcut::getUrl('access', $name));
|
||||
|
||||
|
|
@ -75,7 +75,7 @@ class Controller_Front extends Controller
|
|||
public function setParameter($shortcut, $param, $name)
|
||||
{
|
||||
$this->shortcut = $shortcut;
|
||||
// Параметр
|
||||
// Параметр
|
||||
$this->_param = $param;
|
||||
$this->default = $name;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,8 +24,8 @@ class Installer
|
|||
return Path::join(call_user_func($this->installPath, $name), "setup.php");
|
||||
}
|
||||
|
||||
// Проверка версии обновления
|
||||
function isChanged($name) // Информация о модулях
|
||||
// Проверка версии обновления
|
||||
function isChanged($name) // Информация о модулях
|
||||
{
|
||||
$item = $this->_registry->readKey(array($name));
|
||||
if ($item) {
|
||||
|
|
@ -50,8 +50,8 @@ class Installer
|
|||
}
|
||||
}
|
||||
|
||||
// Устанавливает обновления если есть
|
||||
function doUpdates($name, $force = false) // Установка модуля
|
||||
// Устанавливает обновления если есть
|
||||
function doUpdates($name, $force = false) // Установка модуля
|
||||
{
|
||||
$setup = $this->getSetupFile($name);
|
||||
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),
|
||||
array('version' => $version_new,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Простой класс(Factory) для работы с базами данных
|
||||
* Простой класс(Factory) для работы с базами данных
|
||||
*/
|
||||
class Database
|
||||
{
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
require_once 'core/drivers/db.php';
|
||||
|
||||
/**
|
||||
* Простой класс для работы с базами данных
|
||||
* Простой класс для работы с базами данных
|
||||
*/
|
||||
class Database_MYSQL extends DB implements IDatabase
|
||||
{
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
require_once 'core/drivers/db.php';
|
||||
|
||||
/**
|
||||
* Простой класс для работы с базами данных
|
||||
* Простой класс для работы с базами данных
|
||||
*/
|
||||
class Database_ODBC extends DB implements IDatabase
|
||||
{
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
require_once 'core/drivers/db.php';
|
||||
|
||||
/**
|
||||
* Простой класс для работы с базами данных
|
||||
* Простой класс для работы с базами данных
|
||||
*/
|
||||
class Database_PGSQL extends DB implements IDatabase
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* <EFBFBD>םעונפויס הנאיגונא ךכאססא באח האםם<EFBFBD>ץ
|
||||
* Интерфейс драйвера класса баз данных
|
||||
*/
|
||||
interface IDatabase
|
||||
{
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
require_once 'core/sort.php';
|
||||
|
||||
//Становиться похоже на работу файлов через SPL возможно стоит реализовать на базе его
|
||||
//Становиться похоже на работу файлов через SPL возможно стоит реализовать на базе его
|
||||
class FileRecord
|
||||
{
|
||||
public $file;
|
||||
|
|
@ -49,7 +49,7 @@ class FileRecord
|
|||
function getSizeString()
|
||||
{
|
||||
$size = $this->getSize();
|
||||
foreach (array('б ', 'Kб', 'Mб') as $suffix) {
|
||||
foreach (array('б ', 'Kб', 'Mб') as $suffix) {
|
||||
if (($size / 1024) <= 1) {
|
||||
return round($size, 0) . ' ' . $suffix;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ require_once 'core/file.php';
|
|||
|
||||
interface IFileSystem
|
||||
{
|
||||
// Операции над файлами
|
||||
// Операции над файлами
|
||||
public function makeDirectory($name);
|
||||
public function deleteDirectory($name);
|
||||
|
||||
|
|
@ -18,7 +18,7 @@ interface IFileSystem
|
|||
|
||||
public function readFile($source);
|
||||
public function writeFile($source, $content);
|
||||
// Содержание директории
|
||||
// Содержание директории
|
||||
public function directoryFiles($name);
|
||||
public function directoryFilesRecursive($name);
|
||||
}
|
||||
|
|
@ -27,12 +27,12 @@ interface IFileControl
|
|||
{
|
||||
public function commitFile($name, $who, $message);
|
||||
public function readFileVersion($name, $version = false);
|
||||
// Информация о файле
|
||||
// Информация о файле
|
||||
public function getFileLog($name);
|
||||
public function getFileInfo($name);
|
||||
}
|
||||
|
||||
// Реальная файловая система
|
||||
// Реальная файловая система
|
||||
class FileSystem implements IFileSystem
|
||||
{
|
||||
protected $hidden = array('.', '..');
|
||||
|
|
@ -111,7 +111,7 @@ class FileSystem implements IFileSystem
|
|||
}
|
||||
}
|
||||
|
||||
// При перемещении или все файлы если есть совпадения переписываются
|
||||
// При перемещении или все файлы если есть совпадения переписываются
|
||||
/**
|
||||
*
|
||||
*/
|
||||
|
|
@ -211,7 +211,7 @@ class FileSystem implements IFileSystem
|
|||
}
|
||||
}
|
||||
|
||||
// То что хранится в базе данных
|
||||
// То что хранится в базе данных
|
||||
class EFileSystem implements IFileSystem, IFileControl
|
||||
{
|
||||
|
||||
|
|
@ -280,7 +280,7 @@ class EFileSystem implements IFileSystem, IFileControl
|
|||
$index = $result->getInt('idfile');
|
||||
return $index;
|
||||
}
|
||||
return false; // Может лучше кидать исключение ??
|
||||
return false; // Может лучше кидать исключение ??
|
||||
}
|
||||
|
||||
function getIdFromPath($name)
|
||||
|
|
@ -288,7 +288,7 @@ class EFileSystem implements IFileSystem, IFileControl
|
|||
return $this->getRecordId(basename($name), self::getPathName($name));
|
||||
}
|
||||
|
||||
// Создание новой директории
|
||||
// Создание новой директории
|
||||
public function makeDirectory($name)
|
||||
{
|
||||
$path = new Path($name);
|
||||
|
|
@ -311,10 +311,10 @@ class EFileSystem implements IFileSystem, IFileControl
|
|||
return $this->fs->isDir($this->getFullPath($name));
|
||||
}
|
||||
|
||||
// Переименование файла или директории все изменения должны записываться в базу чтобы можно было сделать отмену !!!
|
||||
// Переименование файла или директории все изменения должны записываться в базу чтобы можно было сделать отмену !!!
|
||||
public function renameFile($source, $destination)
|
||||
{
|
||||
// При перемещении файлы могут совпадать
|
||||
// При перемещении файлы могут совпадать
|
||||
$stmt = $this->db->prepareStatement('UPDATE files SET filepath = ?, filename = ? WHERE filepath = ? AND filename = ?');
|
||||
$stmt->setString(1, self::getPathName($destination));
|
||||
$stmt->setString(2, basename($destination));
|
||||
|
|
@ -335,10 +335,10 @@ class EFileSystem implements IFileSystem, IFileControl
|
|||
$this->fs->renameFile($this->getFullPath($source), $this->getFullPath($destination));
|
||||
}
|
||||
|
||||
// Копирование файла или директории
|
||||
// Копирование файла или директории
|
||||
public function copyFile($source, $destination)
|
||||
{
|
||||
// При копировании файлы могут совпадать
|
||||
// При копировании файлы могут совпадать
|
||||
$stmt = $this->db->prepareStatement('INSERT INTO files (filepath, filename, lastrevdate) VALUES (?, ?, ?)');
|
||||
$stmt->setString(1, self::getPathName($destination));
|
||||
$stmt->setString(2, basename($destination));
|
||||
|
|
@ -466,7 +466,7 @@ class EFileSystem implements IFileSystem, IFileControl
|
|||
{
|
||||
$result = $this->fs->directoryFiles($this->getFullPath($name));
|
||||
|
||||
/* Список файлов из базы данных */
|
||||
/* Список файлов из базы данных */
|
||||
$query = $this->db->prepareStatement("SELECT * FROM files WHERE filepath = ?");
|
||||
$query->setString(1, $name);
|
||||
$list = $query->executeQuery();
|
||||
|
|
@ -530,7 +530,7 @@ class EFileSystem implements IFileSystem, IFileControl
|
|||
}
|
||||
|
||||
/**
|
||||
* Удаляем директорию если она не пустая
|
||||
* Удаляем директорию если она не пустая
|
||||
*/
|
||||
function deleteDirectory($name)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Фильтр действий
|
||||
* Фильтр действий
|
||||
*/
|
||||
class ActionAccess
|
||||
{
|
||||
|
|
@ -13,13 +13,13 @@ class ActionAccess
|
|||
}
|
||||
|
||||
/**
|
||||
* Проверка доступных действий для пользователя
|
||||
* !! Реализация класса проверки действий не должна быть внутри Контроллера!!!
|
||||
* Информация о доступе может быть в файле, базе данных и т.д.
|
||||
* Проверка доступных действий для пользователя
|
||||
* !! Реализация класса проверки действий не должна быть внутри Контроллера!!!
|
||||
* Информация о доступе может быть в файле, базе данных и т.д.
|
||||
*/
|
||||
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]));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
require_once 'filterbase.php';
|
||||
require_once 'filterlogin.php';
|
||||
|
||||
// Êëàññ äîëæåí áûòü â áèáëèîòåêå ïðèëîæåíèÿ
|
||||
// Класс должен быть в библиотеке приложения
|
||||
class UserAccess
|
||||
{
|
||||
const LIFE_TIME = 1800; // = 30min * 60sec;
|
||||
|
|
@ -50,7 +50,7 @@ class UserAccess
|
|||
if ($result) {
|
||||
$time = time();
|
||||
$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;
|
||||
}
|
||||
|
|
@ -63,9 +63,9 @@ class UserAccess
|
|||
if ($result) {
|
||||
$lasttime = $result->getInt('lasttime');
|
||||
$time = time();
|
||||
if ($time - $lasttime > self::LIFE_TIME) return null; // Âûøëî âðåìÿ ñåññèè
|
||||
if ($time - $lasttime > self::LIFE_TIME) return null; // Вышло время сессии
|
||||
$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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Попытка реализовать фильтр для запросов
|
||||
* Попытка реализовать фильтр для запросов
|
||||
*/
|
||||
class Filter
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,35 +1,35 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Фильтр для проверки авторизации
|
||||
* Фильтр для проверки авторизации
|
||||
*
|
||||
* action: login(password, login)
|
||||
* action: logout()
|
||||
*/
|
||||
// В класс авторизации передавать обьект для управления пользователем
|
||||
// Вынести в отдельный файл
|
||||
// В класс авторизации передавать обьект для управления пользователем
|
||||
// Вынести в отдельный файл
|
||||
class LoginFilter extends Filter
|
||||
{
|
||||
const SESSION_BROWSER_SIGN_SECRET = '@w3dsju45Msk#';
|
||||
const SESSION_BROWSER_SIGN_KEYNAME = 'session.app.browser.sign';
|
||||
public $mode = 'ajax';
|
||||
/**
|
||||
* Проверка авторизации
|
||||
* @return Boolean Авторизовани пользователь или нет
|
||||
* Проверка авторизации
|
||||
* @return Boolean Авторизовани пользователь или нет
|
||||
*/
|
||||
public function isLoggin(Collection $request)
|
||||
{
|
||||
// Авторизация
|
||||
// Авторизация
|
||||
session_start();
|
||||
$db = $this->getConnection();
|
||||
UserAccess::setUp($db); // Соединение
|
||||
UserAccess::setUp($db); // Соединение
|
||||
switch ($request->getAction()) {
|
||||
// Авторизация по постоянному паролю
|
||||
// Авторизация по постоянному паролю
|
||||
case 'login':
|
||||
$login = $request->get('login');
|
||||
$password = $request->get('password');
|
||||
|
||||
$result = UserAccess::getUserByLogin($login); // Поиск по логину
|
||||
$result = UserAccess::getUserByLogin($login); // Поиск по логину
|
||||
if ($result) {
|
||||
if (md5($password) == $result->getString('password')) { // password
|
||||
$this->enter($db, $result);
|
||||
|
|
@ -38,14 +38,14 @@ class LoginFilter extends Filter
|
|||
}
|
||||
$request->set('error', true);
|
||||
break;
|
||||
case 'logout': // Выход
|
||||
case 'logout': // Выход
|
||||
session_destroy();
|
||||
break;
|
||||
// Вход по временному паролю
|
||||
// Вход по временному паролю
|
||||
case 'enter':
|
||||
$login = $request->get('login');
|
||||
$password = $request->get('sid');
|
||||
$result = UserAccess::getUserByLogin($login); // Поиск по логину
|
||||
$result = UserAccess::getUserByLogin($login); // Поиск по логину
|
||||
if ($result) {
|
||||
$temp = md5($result->getString('password') . $result->getString('login') . $result->getString('sid'));
|
||||
if ($password == $temp) {
|
||||
|
|
@ -56,10 +56,10 @@ class LoginFilter extends Filter
|
|||
break;
|
||||
default:
|
||||
$hash = $this->getBrowserSign();
|
||||
// Если $hash не совпадает $_SESSION['hash'] то удаляем сессию
|
||||
// Если $hash не совпадает $_SESSION['hash'] то удаляем сессию
|
||||
if (isset($_SESSION ['access']) && isset($_SESSION[self::SESSION_BROWSER_SIGN_SECRET])) {
|
||||
if ($hash == $_SESSION[self::SESSION_BROWSER_SIGN_SECRET]) {
|
||||
UserAccess::getUserById($_SESSION ['access']); // Поиск по идентификатору
|
||||
UserAccess::getUserById($_SESSION ['access']); // Поиск по идентификатору
|
||||
return true;
|
||||
} else {
|
||||
session_destroy();
|
||||
|
|
@ -94,8 +94,8 @@ class LoginFilter extends Filter
|
|||
public function execute(Collection $request)
|
||||
{
|
||||
if (!$this->isLoggin($request)) {
|
||||
// Параметры при неправильной авторизации
|
||||
// Действия по умолчанию !! Возможно переход на форму регистрации
|
||||
// Параметры при неправильной авторизации
|
||||
// Действия по умолчанию !! Возможно переход на форму регистрации
|
||||
$request->set('module', 'login');
|
||||
$request->set('mode', $this->mode);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
require_once 'core/adapter.php';
|
||||
|
||||
/**
|
||||
* Новое API для Форм
|
||||
* Новое API для Форм
|
||||
* $form = new Form ();
|
||||
* $form->render () -> html,
|
||||
* $form->adjust ($scheme);
|
||||
|
|
@ -20,24 +20,24 @@ require_once 'core/adapter.php';
|
|||
*/
|
||||
|
||||
/**
|
||||
* Элемент формы
|
||||
* Элемент формы
|
||||
* @package core
|
||||
*/
|
||||
class TField {
|
||||
protected $_value; // Форматированное значение поля
|
||||
protected $_value; // Форматированное значение поля
|
||||
|
||||
var $label; // Метка поля
|
||||
var $rule = array ();// Правила для проверки поля
|
||||
var $value; // Форматированное Значение поля
|
||||
// var $default; // Значение по умолчанию
|
||||
var $error = false; // в XRule Правила для проверки значений
|
||||
var $error_msg = "Поле не может быть пустым";
|
||||
var $type; // Каждому типу элемента соответствует макрос TAL
|
||||
var $label; // Метка поля
|
||||
var $rule = array ();// Правила для проверки поля
|
||||
var $value; // Форматированное Значение поля
|
||||
// var $default; // Значение по умолчанию
|
||||
var $error = false; // в XRule Правила для проверки значений
|
||||
var $error_msg = "Поле не может быть пустым";
|
||||
var $type; // Каждому типу элемента соответствует макрос TAL
|
||||
|
||||
public function __construct ($input) {
|
||||
// $this->deafult = null;
|
||||
$this->require = false;
|
||||
// Инициализация свойст обьетка
|
||||
// Инициализация свойст обьетка
|
||||
foreach ($input as $key => $value) {
|
||||
$this->$key = $value;
|
||||
}
|
||||
|
|
@ -56,7 +56,7 @@ class TField {
|
|||
return true;
|
||||
}
|
||||
|
||||
// Добавить методы getString, setString ??
|
||||
// Добавить методы getString, setString ??
|
||||
|
||||
function setValue ($value) {
|
||||
$this->_value = $value;
|
||||
|
|
@ -69,7 +69,7 @@ class TField {
|
|||
}
|
||||
|
||||
/**
|
||||
* Поле ввода Input
|
||||
* Поле ввода Input
|
||||
* @package core
|
||||
*/
|
||||
class TInput extends TField {
|
||||
|
|
@ -95,7 +95,7 @@ class TCheckbox extends TField {
|
|||
}
|
||||
|
||||
/**
|
||||
* Выбор из одного элемента
|
||||
* Выбор из одного элемента
|
||||
*/
|
||||
class TSelect1 extends TField {
|
||||
var $options = array ();
|
||||
|
|
@ -134,11 +134,11 @@ class TSelectGroup extends TField {
|
|||
}
|
||||
|
||||
/**
|
||||
* Поле с датой
|
||||
* Поле с датой
|
||||
* @package core
|
||||
*/
|
||||
class TDate extends TField {
|
||||
var $error_msg = "Неверный формат даты";
|
||||
var $error_msg = "Неверный формат даты";
|
||||
var $separator = ".";
|
||||
|
||||
public function __construct ($input) {
|
||||
|
|
@ -167,7 +167,7 @@ class TDate extends TField {
|
|||
}
|
||||
|
||||
class TTime extends TField {
|
||||
var $error_msg = "Неверный формат времени";
|
||||
var $error_msg = "Неверный формат времени";
|
||||
|
||||
public function __construct ($input) {
|
||||
parent::__construct ($input);
|
||||
|
|
@ -200,7 +200,7 @@ class TTime extends TField {
|
|||
|
||||
|
||||
/* *
|
||||
* Текстовое поле
|
||||
* Текстовое поле
|
||||
* @package core
|
||||
*/
|
||||
class TTextArea extends TField {
|
||||
|
|
@ -211,7 +211,7 @@ class TTextArea extends TField {
|
|||
}
|
||||
|
||||
/**
|
||||
* Поле для ввода пароля
|
||||
* Поле для ввода пароля
|
||||
* @package core
|
||||
*/
|
||||
class TSecret extends TField {
|
||||
|
|
@ -235,7 +235,7 @@ class TUpload extends TField {
|
|||
}
|
||||
|
||||
/**
|
||||
* Форма для ввода
|
||||
* Форма для ввода
|
||||
* @package core
|
||||
*/
|
||||
class TForm {
|
||||
|
|
@ -271,12 +271,12 @@ class TForm {
|
|||
}
|
||||
|
||||
/**
|
||||
* Метод должен проверять значения полей формы полсле заполнения
|
||||
* Проверка правильности заполнения формы и установка значений
|
||||
* Метод должен проверять значения полей формы полсле заполнения
|
||||
* Проверка правильности заполнения формы и установка значений
|
||||
*/
|
||||
function isValid () {
|
||||
$haveErrors = false;
|
||||
foreach ($this->field as $name => $el) { // ссылка
|
||||
foreach ($this->field as $name => $el) { // ссылка
|
||||
if ($this->field [$name] instanceof TUpload) {
|
||||
// print_r ($_POST);
|
||||
$filename = $this->request->getRawData ('files', $name);
|
||||
|
|
@ -296,7 +296,7 @@ class TForm {
|
|||
}
|
||||
|
||||
/**
|
||||
* Добавляет одно поле ввода на форму
|
||||
* Добавляет одно поле ввода на форму
|
||||
*/
|
||||
public function addField ($init) {
|
||||
assert ($init['type']);
|
||||
|
|
@ -310,7 +310,7 @@ class TForm {
|
|||
}
|
||||
|
||||
/**
|
||||
* Добавляет спсок полей для формы
|
||||
* Добавляет спсок полей для формы
|
||||
* @param array $list
|
||||
*/
|
||||
public function addFieldList ($list) {
|
||||
|
|
@ -320,10 +320,10 @@ class TForm {
|
|||
}
|
||||
|
||||
/**
|
||||
* Заполняет форму данными из коллекции
|
||||
* Для обьектов и массивов можно использовать Adapter pattern
|
||||
* Заполняет форму данными из коллекции
|
||||
* Для обьектов и массивов можно использовать Adapter pattern
|
||||
* @param object $data
|
||||
* @param array $schema Связь между элементами формы и свойствами обьекта
|
||||
* @param array $schema Связь между элементами формы и свойствами обьекта
|
||||
*/
|
||||
public function fill ($data) {
|
||||
foreach ($this->field as $name => $el) {
|
||||
|
|
|
|||
|
|
@ -1,15 +1,15 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Элемент формы
|
||||
* Элемент формы
|
||||
* @package core
|
||||
*/
|
||||
class TField
|
||||
{
|
||||
public $name;
|
||||
public $label; // Метка поля
|
||||
public $value; // Значение поля
|
||||
public $type; // Каждому типу элемента соответствует макрос TAL
|
||||
public $label; // Метка поля
|
||||
public $value; // Значение поля
|
||||
public $type; // Каждому типу элемента соответствует макрос TAL
|
||||
public $error_msg = null;
|
||||
public $error = false;
|
||||
public $require = false;
|
||||
|
|
@ -20,7 +20,7 @@ class TField
|
|||
if (isset($input['validate'])) {
|
||||
$this->require = strpos($input['validate'], 'require') !== false;
|
||||
}
|
||||
// Инициализация свойст обьетка
|
||||
// Инициализация свойст обьетка
|
||||
foreach (array('label', 'name', 'type') as $name) {
|
||||
$this->$name = $input[$name];
|
||||
}
|
||||
|
|
@ -33,14 +33,14 @@ class TField
|
|||
}
|
||||
|
||||
/**
|
||||
* Поле ввода Input
|
||||
* Поле ввода Input
|
||||
* @package core
|
||||
*/
|
||||
class TInput extends TField {
|
||||
}
|
||||
|
||||
/**
|
||||
* Выбор из одного элемента
|
||||
* Выбор из одного элемента
|
||||
*/
|
||||
class TSelect1 extends TField
|
||||
{
|
||||
|
|
@ -52,13 +52,13 @@ class TSelect1 extends TField
|
|||
|
||||
function setValue($value)
|
||||
{
|
||||
// Установить selected у options
|
||||
// Установить selected у options
|
||||
$this->value = $value;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Поле с датой
|
||||
* Поле с датой
|
||||
* @package core
|
||||
*/
|
||||
class TDate extends TField
|
||||
|
|
@ -66,7 +66,7 @@ class TDate extends TField
|
|||
}
|
||||
|
||||
/* *
|
||||
* Текстовое поле
|
||||
* Текстовое поле
|
||||
* @package core
|
||||
*/
|
||||
class TTextArea extends TField
|
||||
|
|
@ -74,7 +74,7 @@ class TTextArea extends TField
|
|||
}
|
||||
|
||||
/**
|
||||
* Поле для ввода пароля
|
||||
* Поле для ввода пароля
|
||||
* @package core
|
||||
*/
|
||||
class TSecret extends TField
|
||||
|
|
@ -86,7 +86,7 @@ class TUpload extends TField
|
|||
}
|
||||
|
||||
/**
|
||||
* Форма для ввода
|
||||
* Форма для ввода
|
||||
* @package core
|
||||
*/
|
||||
class TForm
|
||||
|
|
@ -111,7 +111,7 @@ class TForm
|
|||
}
|
||||
|
||||
/**
|
||||
* Добавляет одно поле ввода на форму
|
||||
* Добавляет одно поле ввода на форму
|
||||
*/
|
||||
public function addField (array $init)
|
||||
{
|
||||
|
|
@ -127,7 +127,7 @@ class TForm
|
|||
}
|
||||
|
||||
/**
|
||||
* Добавляет спсок полей для формы
|
||||
* Добавляет спсок полей для формы
|
||||
* @param array $list
|
||||
*/
|
||||
public function addFieldList (array $list)
|
||||
|
|
@ -138,7 +138,7 @@ class TForm
|
|||
}
|
||||
|
||||
/**
|
||||
* Устанавливает ошибки после проверки
|
||||
* Устанавливает ошибки после проверки
|
||||
*/
|
||||
function setError (Validator $validator)
|
||||
{
|
||||
|
|
@ -150,7 +150,7 @@ class TForm
|
|||
}
|
||||
|
||||
/**
|
||||
* Устанавливает значения из масива
|
||||
* Устанавливает значения из масива
|
||||
*/
|
||||
function setValues (Collection $request) {
|
||||
foreach ($this->field as $key => $el) {
|
||||
|
|
@ -160,9 +160,9 @@ class TForm
|
|||
}
|
||||
|
||||
/**
|
||||
* Заполняет форму данными из обьекта
|
||||
* Заполняет форму данными из обьекта
|
||||
* @param object $data
|
||||
* @param array $schema Связь между элементами формы и свойствами обьекта
|
||||
* @param array $schema Связь между элементами формы и свойствами обьекта
|
||||
*/
|
||||
public function fill ($data, array $schema)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
/**
|
||||
* http://www.alternateinterior.com/2006/09/a-viewstate-for-php.html
|
||||
* Управление состоянием между страницами
|
||||
* Управление состоянием между страницами
|
||||
*/
|
||||
class ViewState // extends Collection
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Генерация файлов Grpahviz dot
|
||||
* Генерация файлов Grpahviz dot
|
||||
*/
|
||||
class Dot
|
||||
{
|
||||
|
|
@ -34,11 +34,11 @@ class Dot
|
|||
function assocToDot (array $array, array $label)
|
||||
{
|
||||
$result = array (self::getHeader());
|
||||
// Метки
|
||||
// Метки
|
||||
foreach ($label as $value) {
|
||||
$result [] = "\t\"{$value[0]}\" [ label = \"{$value[1]}\" ] \n";
|
||||
}
|
||||
// Ассоциации
|
||||
// Ассоциации
|
||||
foreach ($array as $key => $value) {
|
||||
foreach ($value as $n) {
|
||||
$result [] = "\t\"$key\" -> \"$n\"\n";
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Функциональное программирование в PHP
|
||||
* Функциональное программирование в PHP
|
||||
* package functional
|
||||
*/
|
||||
|
||||
/**
|
||||
* Эмуляция каррированой функции
|
||||
* Эмуляция каррированой функции
|
||||
*/
|
||||
class __right {
|
||||
protected $params;
|
||||
|
|
@ -72,7 +72,7 @@ function partial() {
|
|||
|
||||
|
||||
/**
|
||||
* Композиция функций
|
||||
* Композиция функций
|
||||
*/
|
||||
class __compose {
|
||||
protected $fns;
|
||||
|
|
@ -91,7 +91,7 @@ class __compose {
|
|||
}
|
||||
|
||||
/**
|
||||
* Композиция функций
|
||||
* Композиция функций
|
||||
* @param mixed $a
|
||||
* @param mixed $b
|
||||
*
|
||||
|
|
@ -103,7 +103,7 @@ function compose() {
|
|||
}
|
||||
|
||||
/**
|
||||
* Карирование справа
|
||||
* Карирование справа
|
||||
*
|
||||
* @return array[int]mixed
|
||||
*/
|
||||
|
|
@ -113,7 +113,7 @@ function rcurry() {
|
|||
}
|
||||
|
||||
/**
|
||||
* Карирование слева
|
||||
* Карирование слева
|
||||
*
|
||||
* @return array[int]mixed
|
||||
*/
|
||||
|
|
@ -123,8 +123,8 @@ function lcurry() {
|
|||
}
|
||||
|
||||
/**
|
||||
* Разделение массива на два по условию
|
||||
* @param mixed $pred Условие по которому разделяется массив
|
||||
* Разделение массива на два по условию
|
||||
* @param mixed $pred Условие по которому разделяется массив
|
||||
* @param array $lst
|
||||
*
|
||||
* @return array[int]mixed
|
||||
|
|
@ -177,7 +177,7 @@ function __cmp_less($a, $b, $key) {
|
|||
return ($a[$key] < $b[$key]) ? -1 : 1;
|
||||
}
|
||||
|
||||
// Сравнение по ключу массиве
|
||||
// Сравнение по ключу массиве
|
||||
function __index($n, $key, $row) {
|
||||
return ($row[$key] == $n);
|
||||
}
|
||||
|
|
@ -199,23 +199,23 @@ function __empty($x) {
|
|||
return empty($x);
|
||||
}
|
||||
|
||||
// Отрицание
|
||||
// Отрицание
|
||||
function __not($x) {
|
||||
return !$x;
|
||||
}
|
||||
|
||||
// Не равно
|
||||
// Не равно
|
||||
function __neq($x, $y) {
|
||||
return $x != $y;
|
||||
}
|
||||
|
||||
// Равно
|
||||
// Равно
|
||||
function __eq($x, $y) {
|
||||
return $x == $y;
|
||||
}
|
||||
|
||||
/**
|
||||
* Извлекает из многомерого массива значения с определенным ключом
|
||||
* Извлекает из многомерого массива значения с определенным ключом
|
||||
* @example key_values('a', array(1 => array('a' => 1, 'b' => 2))) => array(1)
|
||||
*
|
||||
* @return mixed
|
||||
|
|
@ -261,7 +261,7 @@ function _get_key($key, $value, $array) {
|
|||
|
||||
|
||||
/**
|
||||
* Логическа операция && ко всем элементам массива
|
||||
* Логическа операция && ко всем элементам массива
|
||||
* @return bool
|
||||
*/
|
||||
function every(array $array, $callback) {
|
||||
|
|
@ -274,7 +274,7 @@ function every(array $array, $callback) {
|
|||
}
|
||||
|
||||
/**
|
||||
* Логическа операция || ко всем элементам массива
|
||||
* Логическа операция || ко всем элементам массива
|
||||
* @param array $array
|
||||
* @param mixed $callback
|
||||
*
|
||||
|
|
@ -312,11 +312,11 @@ function call() {
|
|||
}
|
||||
|
||||
/**
|
||||
* Поиск элемента в массиве
|
||||
* @param function $cb сравнение с элементом массива
|
||||
* @param array $hs массив в котором ищется значение
|
||||
* Поиск элемента в массиве
|
||||
* @param function $cb сравнение с элементом массива
|
||||
* @param array $hs массив в котором ищется значение
|
||||
*
|
||||
* @return int|string ключ найденого элемента в массиве
|
||||
* @return int|string ключ найденого элемента в массиве
|
||||
*/
|
||||
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;
|
||||
|
|
@ -324,7 +324,7 @@ function array_usearch($cb, array $hs, $strict = false) {
|
|||
|
||||
if (!function_exists('hash_key')) {
|
||||
/**
|
||||
* Преобразует ключи элементов для многомерного массива
|
||||
* Преобразует ключи элементов для многомерного массива
|
||||
* @return mixed
|
||||
*/
|
||||
function hash_key ($key_name,/*. array .*/ $array) {
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ class Rectangle
|
|||
}
|
||||
|
||||
/**
|
||||
* Смещает прямоугольник на заданное положение
|
||||
* Смещает прямоугольник на заданное положение
|
||||
*/
|
||||
function addPoint(Point $point)
|
||||
{
|
||||
|
|
@ -42,7 +42,7 @@ class Rectangle
|
|||
}
|
||||
|
||||
/**
|
||||
* Координаты точки при выравнивании прямоугольника относительно текущего
|
||||
* Координаты точки при выравнивании прямоугольника относительно текущего
|
||||
*/
|
||||
function alignment(Rectangle $base)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ require_once 'core/json.php';
|
|||
require_once 'core/session.php';
|
||||
|
||||
/**
|
||||
* Неверный запрос
|
||||
* Неверный запрос
|
||||
*/
|
||||
class WrongRequestException extends Exception
|
||||
{
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ class json
|
|||
return php2js($var); //json_encode(self::prepare($var, array('self', 'unicode_encode')));
|
||||
}
|
||||
|
||||
// Преобразование json в массив
|
||||
// Преобразование json в массив
|
||||
static function decode($var, $encoding = 'utf-8', $is_array = false)
|
||||
{
|
||||
if ($encoding != 'utf-8') $var = iconv($encoding, self::$INTERNAL_ENCODING, $var);
|
||||
|
|
@ -46,7 +46,7 @@ class json
|
|||
}
|
||||
$var = $new;
|
||||
} elseif (is_object($var)) {
|
||||
// Было преобразование типа для отображения !!
|
||||
// Было преобразование типа для отображения !!
|
||||
$vars = get_object_vars($var);
|
||||
foreach ($vars as $m => $v) {
|
||||
$var->$m = self::prepare($var->$m, $encode);
|
||||
|
|
|
|||
|
|
@ -1,20 +1,20 @@
|
|||
<?php
|
||||
|
||||
require_once 'core/functions.php';
|
||||
// Переместить в фильтры!!
|
||||
// Переместить в фильтры!!
|
||||
|
||||
/**
|
||||
* Выбор макета страницы.
|
||||
* Выбор оформления страницы осуществляется если было совпадение с каким либо условием
|
||||
* Выбор макета страницы.
|
||||
* Выбор оформления страницы осуществляется если было совпадение с каким либо условием
|
||||
*/
|
||||
class LayoutManager extends Filter
|
||||
{
|
||||
// Массив условий с их макетами
|
||||
// Массив условий с их макетами
|
||||
protected $condition = array();
|
||||
|
||||
/**
|
||||
* Функция которая добавляет условие для проверки параметров $_GET
|
||||
* @param $get array() | true Ассоциативный массив ключей и значений для $_GET
|
||||
* Функция которая добавляет условие для проверки параметров $_GET
|
||||
* @param $get array() | true Ассоциативный массив ключей и значений для $_GET
|
||||
*
|
||||
* @example
|
||||
* addConditionGet(array('module' => 'personal'), 'personal')
|
||||
|
|
@ -26,7 +26,7 @@ class LayoutManager extends Filter
|
|||
}
|
||||
|
||||
/**
|
||||
* Условие для аякс запросов. Тоже самое что и addConditionGet но еще проверяется является ли запрос ajax
|
||||
* Условие для аякс запросов. Тоже самое что и addConditionGet но еще проверяется является ли запрос ajax
|
||||
*/
|
||||
public function addConditionXHR($get, Filter $layout)
|
||||
{
|
||||
|
|
@ -51,9 +51,9 @@ class LayoutManager extends Filter
|
|||
}
|
||||
|
||||
/**
|
||||
* Добавляет есловие в общем виде
|
||||
* @parma $get function(HttpRequest) Функция
|
||||
* @parma $layout Layout Макет
|
||||
* Добавляет есловие в общем виде
|
||||
* @parma $get function(HttpRequest) Функция
|
||||
* @parma $layout Layout Макет
|
||||
*/
|
||||
public function addCondition($get, Filter $layout)
|
||||
{
|
||||
|
|
@ -61,7 +61,7 @@ class LayoutManager extends Filter
|
|||
}
|
||||
|
||||
/**
|
||||
* Выбирает и применяет макет для страницы
|
||||
* Выбирает и применяет макет для страницы
|
||||
*/
|
||||
public function execute(Collection $request)
|
||||
{
|
||||
|
|
@ -82,7 +82,7 @@ class LayoutManager extends Filter
|
|||
}
|
||||
|
||||
/**
|
||||
* Самый простой макет
|
||||
* Самый простой макет
|
||||
*/
|
||||
class LayoutNone extends Filter
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Класс для работы с почтой
|
||||
* Класс для работы с почтой
|
||||
* http://en.wikipedia.org/wiki/MIME
|
||||
*/
|
||||
class Mail
|
||||
|
|
@ -20,13 +20,13 @@ class Mail
|
|||
|
||||
function __construct() {
|
||||
$this->setEncoding("windows-1251");
|
||||
$this->uniqid = strtoupper(uniqid(time())); // Идентефикатор разделителя
|
||||
$this->uniqid = strtoupper(uniqid(time())); // Идентефикатор разделителя
|
||||
|
||||
// $this->mime
|
||||
}
|
||||
|
||||
/**
|
||||
* Установка отправителя
|
||||
* Установка отправителя
|
||||
*/
|
||||
function from($name)
|
||||
{
|
||||
|
|
@ -34,7 +34,7 @@ class Mail
|
|||
}
|
||||
|
||||
/**
|
||||
* Установка получателя
|
||||
* Установка получателя
|
||||
*/
|
||||
function to($name) // recipient
|
||||
{
|
||||
|
|
@ -42,7 +42,7 @@ class Mail
|
|||
}
|
||||
|
||||
/**
|
||||
* Установка получателей копии
|
||||
* Установка получателей копии
|
||||
*/
|
||||
function copy($name) // recipient cc
|
||||
{
|
||||
|
|
@ -55,7 +55,7 @@ class Mail
|
|||
}
|
||||
|
||||
/**
|
||||
* Тема письма
|
||||
* Тема письма
|
||||
*/
|
||||
function subject($subject)
|
||||
{
|
||||
|
|
@ -63,7 +63,7 @@ class Mail
|
|||
}
|
||||
|
||||
/**
|
||||
* Текст письма
|
||||
* Текст письма
|
||||
*/
|
||||
function setContent($text)
|
||||
{
|
||||
|
|
@ -71,7 +71,7 @@ class Mail
|
|||
}
|
||||
|
||||
/**
|
||||
* Кодировка текста в письме
|
||||
* Кодировка текста в письме
|
||||
*/
|
||||
function setEncoding($encoding)
|
||||
{
|
||||
|
|
@ -79,7 +79,7 @@ class Mail
|
|||
}
|
||||
|
||||
/**
|
||||
* Добавление вложения из файла
|
||||
* Добавление вложения из файла
|
||||
*/
|
||||
function addAttachment($filename, $name = false)
|
||||
{
|
||||
|
|
@ -93,7 +93,7 @@ class Mail
|
|||
}
|
||||
|
||||
/**
|
||||
* Добавление вложения из строки с указанием имени файла
|
||||
* Добавление вложения из строки с указанием имени файла
|
||||
*/
|
||||
function addAttachmentRaw($data, $name)
|
||||
{
|
||||
|
|
@ -108,7 +108,7 @@ class Mail
|
|||
}
|
||||
|
||||
/**
|
||||
* Общий формат тегов MIME
|
||||
* Общий формат тегов MIME
|
||||
* http://tools.ietf.org/html/rfc2045
|
||||
*/
|
||||
function mimeTag($name, $value, array $args = array())
|
||||
|
|
@ -129,7 +129,7 @@ class Mail
|
|||
}
|
||||
|
||||
/**
|
||||
* Тело сообщения
|
||||
* Тело сообщения
|
||||
*/
|
||||
function getMessage()
|
||||
{
|
||||
|
|
@ -139,7 +139,7 @@ class Mail
|
|||
$message .= PHP_EOL . $this->content . PHP_EOL . PHP_EOL;
|
||||
|
||||
/**
|
||||
* Вложения
|
||||
* Вложения
|
||||
* http://tools.ietf.org/html/rfc2046#section-5.1.3
|
||||
*/
|
||||
foreach ($this->attachment as $value) {
|
||||
|
|
@ -155,7 +155,7 @@ class Mail
|
|||
}
|
||||
|
||||
/**
|
||||
* Заголовок сообщения
|
||||
* Заголовок сообщения
|
||||
*/
|
||||
function getHeader()
|
||||
{
|
||||
|
|
@ -180,7 +180,7 @@ class Mail
|
|||
}
|
||||
|
||||
/**
|
||||
* Вывод строки для сохранения в формате .eml
|
||||
* Вывод строки для сохранения в формате .eml
|
||||
*/
|
||||
function eml()
|
||||
{
|
||||
|
|
@ -188,7 +188,7 @@ class Mail
|
|||
}
|
||||
|
||||
/**
|
||||
* Отправка почты
|
||||
* Отправка почты
|
||||
*/
|
||||
function send()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ class ModelFactory
|
|||
}
|
||||
|
||||
/**
|
||||
* Создает модель
|
||||
* Создает модель
|
||||
* @param string $name
|
||||
* @return model
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -3,10 +3,10 @@
|
|||
require_once 'core/primitive.php';
|
||||
|
||||
/**
|
||||
* Использовать интерфейсы чтобы определить какие действия можно совершать с обьектом и таким образом
|
||||
* Строить набор действий Action и отображений View для обьекта
|
||||
* Т.к отображение данных может быть не только на таблицу баз данных
|
||||
* И возможно реализованны все интерфейсы
|
||||
* Использовать интерфейсы чтобы определить какие действия можно совершать с обьектом и таким образом
|
||||
* Строить набор действий Action и отображений View для обьекта
|
||||
* Т.к отображение данных может быть не только на таблицу баз данных
|
||||
* И возможно реализованны все интерфейсы
|
||||
*/
|
||||
interface IDataList
|
||||
{
|
||||
|
|
@ -22,22 +22,22 @@ interface IDataSave
|
|||
}
|
||||
|
||||
/**
|
||||
* Отображение таблицы базы данных в обьекты
|
||||
* Отображение таблицы базы данных в обьекты
|
||||
* Mapper -> DataMapper implements IDataList, IDataSave, IDataSort, IDataDelete ...
|
||||
*
|
||||
* @package core
|
||||
*/
|
||||
class DataMapper implements IDataList
|
||||
{
|
||||
/* Хранить метаданные в статическом свойстве класса для ототбражения ?!, + Скрипт для генерации метаданных!!
|
||||
/* Хранить метаданные в статическом свойстве класса для ототбражения ?!, + Скрипт для генерации метаданных!!
|
||||
*/
|
||||
public $factory;
|
||||
public $className; /* Класс на который будет отображаться строчка таблицы */
|
||||
public $className; /* Класс на который будет отображаться строчка таблицы */
|
||||
public $filter = ""; /* */
|
||||
public $schema = array (); /* Соответствие между свойством обьекта и столбцом, добавить тип для записей !! */
|
||||
public $database; /* Таблица */
|
||||
public $index; /* Индексный столбец */
|
||||
public $db; /* Соединение с базой данных */
|
||||
public $schema = array (); /* Соответствие между свойством обьекта и столбцом, добавить тип для записей !! */
|
||||
public $database; /* Таблица */
|
||||
public $index; /* Индексный столбец */
|
||||
public $db; /* Соединение с базой данных */
|
||||
public $reference = array (null, null);
|
||||
|
||||
public function __construct ()
|
||||
|
|
@ -56,13 +56,13 @@ class DataMapper implements IDataList
|
|||
}
|
||||
|
||||
/**
|
||||
* Поиск строки в таблице по идентификатору
|
||||
* @param $id Значение идентификатора
|
||||
* @return Обьект класса $className
|
||||
* Поиск строки в таблице по идентификатору
|
||||
* @param $id Значение идентификатора
|
||||
* @return Обьект класса $className
|
||||
*/
|
||||
public function findById ($id)
|
||||
{
|
||||
// Строки запроса преобразовать в методы (getSQLSelect ...)
|
||||
// Строки запроса преобразовать в методы (getSQLSelect ...)
|
||||
// Query::from($this->database)->where ($this->index, "=", $id)->select();
|
||||
$stmt = $this->db->prepareStatement ("SELECT * FROM ".$this->database." WHERE ".$this->index." = ?");
|
||||
$stmt->setInt (1, $id);
|
||||
|
|
@ -72,7 +72,7 @@ class DataMapper implements IDataList
|
|||
}
|
||||
|
||||
/**
|
||||
* Преобразует parseResult в обьект
|
||||
* Преобразует parseResult в обьект
|
||||
*/
|
||||
public /* private */ function mapOne ($rs)
|
||||
{
|
||||
|
|
@ -87,7 +87,7 @@ class DataMapper implements IDataList
|
|||
public /* private */ function mapAll ($rs)
|
||||
{
|
||||
$result = array ();
|
||||
// Преобразование SQL в обьект
|
||||
// Преобразование SQL в обьект
|
||||
while ($rs->next ()) {
|
||||
$result[] = $this->mapOne ($rs);
|
||||
}
|
||||
|
|
@ -99,7 +99,7 @@ class DataMapper implements IDataList
|
|||
}
|
||||
|
||||
/**
|
||||
* Преобразует параметры формы в SQL запрос WHERE
|
||||
* Преобразует параметры формы в SQL запрос WHERE
|
||||
* @param array $params
|
||||
* @param array $schema
|
||||
* @return string
|
||||
|
|
@ -118,8 +118,8 @@ class DataMapper implements IDataList
|
|||
}
|
||||
|
||||
/**
|
||||
* Удаление строк из таблицы с заданными индексами
|
||||
* @param $list array Массив идентефикаторов
|
||||
* Удаление строк из таблицы с заданными индексами
|
||||
* @param $list array Массив идентефикаторов
|
||||
*/
|
||||
public function deleteList (array $list)
|
||||
{
|
||||
|
|
@ -152,13 +152,13 @@ class DataMapper implements IDataList
|
|||
}
|
||||
|
||||
/**
|
||||
* Извлекает список записей из базы данных
|
||||
* Извлекает список записей из базы данных
|
||||
*/
|
||||
public function findAll (Collection $request, $id = null)
|
||||
{
|
||||
$name0 = $this->database;
|
||||
$foreign = $this->reference[1];
|
||||
// Переписать используя Query !!!
|
||||
// Переписать используя Query !!!
|
||||
if ($foreign && $id) {
|
||||
$filter = ($this->filter)?$filter = " AND ".$this->filter: "";
|
||||
$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;
|
||||
$foreign = $this->reference[1];
|
||||
// Переписать используя Query !!!
|
||||
// Переписать используя Query !!!
|
||||
if ($foreign && $id) {
|
||||
$filter = ($this->filter)?$filter = " AND " . $this->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)
|
||||
{
|
||||
|
|
@ -214,8 +214,8 @@ class DataMapper implements IDataList
|
|||
}
|
||||
|
||||
/**
|
||||
* Обновляет запись в базе данных
|
||||
* @param $o Обьект для обновления
|
||||
* Обновляет запись в базе данных
|
||||
* @param $o Обьект для обновления
|
||||
*/
|
||||
public function updateTo (Model $o)
|
||||
{
|
||||
|
|
@ -226,7 +226,7 @@ class DataMapper implements IDataList
|
|||
$keys_values[] = $key." = '".$o->$value."'";
|
||||
}
|
||||
}
|
||||
// Для всех должен быть идентефикатор id
|
||||
// Для всех должен быть идентефикатор id
|
||||
$stmt = $this->db->prepareStatement ("UPDATE ".$this->database." SET ".implode($keys_values, ",")." WHERE ".$this->index." = ".$o->id);
|
||||
$stmt->executeQuery ();
|
||||
}
|
||||
|
|
@ -261,7 +261,7 @@ class Model
|
|||
$this->$key = new Primitive ();
|
||||
}
|
||||
}
|
||||
// __get, __set методы. В метаданных хранится тип свойств, проверять при присваивании!!
|
||||
// __get, __set методы. В метаданных хранится тип свойств, проверять при присваивании!!
|
||||
}
|
||||
|
||||
?>
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Отображение списка папок с настройками на обьект
|
||||
* Отображение списка папок с настройками на обьект
|
||||
*/
|
||||
class PathMapper
|
||||
{
|
||||
|
|
@ -58,7 +58,7 @@ class PathMapper
|
|||
}
|
||||
|
||||
/**
|
||||
* Число папок
|
||||
* Число папок
|
||||
*/
|
||||
function getCount ()
|
||||
{
|
||||
|
|
@ -66,7 +66,7 @@ class PathMapper
|
|||
}
|
||||
|
||||
/**
|
||||
* Удаление списка папок
|
||||
* Удаление списка папок
|
||||
*/
|
||||
function deleteList(array $list)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -5,8 +5,8 @@
|
|||
.*/
|
||||
|
||||
/**
|
||||
* Класс для работы с папками и путями
|
||||
* Для итерации над файлами возможно лучше использовать SPL
|
||||
* Класс для работы с папками и путями
|
||||
* Для итерации над файлами возможно лучше использовать SPL
|
||||
*
|
||||
* @package utils
|
||||
*/
|
||||
|
|
@ -29,9 +29,9 @@ class Path
|
|||
}
|
||||
|
||||
/**
|
||||
* Возвращает расширение файла
|
||||
* Возвращает расширение файла
|
||||
*
|
||||
* @param string $fileName Полное имя файла
|
||||
* @param string $fileName Полное имя файла
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
|
|
@ -43,9 +43,9 @@ class Path
|
|||
}
|
||||
|
||||
/**
|
||||
* Полное имя файла без расширения
|
||||
* Полное имя файла без расширения
|
||||
*
|
||||
* @param string $fileName Имя файла
|
||||
* @param string $fileName Имя файла
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
|
|
@ -62,9 +62,9 @@ class Path
|
|||
}
|
||||
|
||||
/**
|
||||
* Возвращает имя файла без расширения
|
||||
* Возвращает имя файла без расширения
|
||||
*
|
||||
* @param string $fileName Полное имя файла
|
||||
* @param string $fileName Полное имя файла
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
|
|
@ -76,10 +76,10 @@ class Path
|
|||
}
|
||||
|
||||
/**
|
||||
* Список файлов в директории
|
||||
* Список файлов в директории
|
||||
*
|
||||
* @param array $allow массив расширений для файлов
|
||||
* @param array $ignore массив имен пааок которые не нужно обрабатывать
|
||||
* @param array $allow массив расширений для файлов
|
||||
* @param array $ignore массив имен пааок которые не нужно обрабатывать
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
|
|
@ -89,7 +89,7 @@ class Path
|
|||
return self::fileList($this->__toString(), $allow, $ignore);
|
||||
}
|
||||
|
||||
// Использовать SPL ???
|
||||
// Использовать SPL ???
|
||||
protected function fileList ($base, &$allow, &$ignore)
|
||||
{
|
||||
$result = array ();
|
||||
|
|
@ -121,10 +121,10 @@ class Path
|
|||
}
|
||||
|
||||
/**
|
||||
* Список файлов в директориии и ее поддиректорий
|
||||
* Список файлов в директориии и ее поддиректорий
|
||||
*
|
||||
* @param array $allow массив расширений разрешеных для файлов
|
||||
* @param array $ignore массив имен пааок которые не нужно обрабатывать
|
||||
* @param array $allow массив расширений разрешеных для файлов
|
||||
* @param array $ignore массив имен пааок которые не нужно обрабатывать
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
|
|
@ -138,10 +138,10 @@ class Path
|
|||
|
||||
|
||||
/**
|
||||
* Рекурсивно копирует директорию
|
||||
* Рекурсивно копирует директорию
|
||||
*
|
||||
* @param string $source Папка из которой копируется
|
||||
* @param string $target Папка в которую копируется
|
||||
* @param string $source Папка из которой копируется
|
||||
* @param string $target Папка в которую копируется
|
||||
*/
|
||||
public static function copy ($source, $target)
|
||||
{
|
||||
|
|
@ -161,9 +161,9 @@ class Path
|
|||
}
|
||||
|
||||
/**
|
||||
* Рекурсивно удаляет директорию
|
||||
* Рекурсивно удаляет директорию
|
||||
*
|
||||
* @param string $path Папка
|
||||
* @param string $path Папка
|
||||
*/
|
||||
public static function delete ($path)
|
||||
{
|
||||
|
|
@ -182,9 +182,9 @@ class Path
|
|||
}
|
||||
|
||||
/**
|
||||
* Преобразует строку путя в массив
|
||||
* Преобразует строку путя в массив
|
||||
*
|
||||
* @param string $path Путь
|
||||
* @param string $path Путь
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
|
|
@ -197,7 +197,7 @@ class Path
|
|||
}
|
||||
|
||||
/**
|
||||
* Преобразует относительный путь в абсолютный
|
||||
* Преобразует относительный путь в абсолютный
|
||||
*/
|
||||
public function optimize ()
|
||||
{
|
||||
|
|
@ -217,7 +217,7 @@ class Path
|
|||
}
|
||||
|
||||
/**
|
||||
* Преобразует путь в строку
|
||||
* Преобразует путь в строку
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
|
|
@ -228,7 +228,7 @@ class Path
|
|||
}
|
||||
|
||||
/**
|
||||
* Проверяет является ли папка родительской для другой папки
|
||||
* Проверяет является ли папка родительской для другой папки
|
||||
*
|
||||
* @parma Path $path
|
||||
*
|
||||
|
|
@ -248,11 +248,11 @@ class Path
|
|||
}
|
||||
|
||||
/**
|
||||
* Находит путь относительно текущего путя
|
||||
* Находит путь относительно текущего путя
|
||||
*
|
||||
* @param string $name Полный путь к файлу
|
||||
* @param string $name Полный путь к файлу
|
||||
*
|
||||
* @return string Относительный путь к файлу
|
||||
* @return string Относительный путь к файлу
|
||||
*/
|
||||
public function relPath ($name)
|
||||
{
|
||||
|
|
@ -270,9 +270,9 @@ class Path
|
|||
}
|
||||
|
||||
/**
|
||||
* Создает недастающие папки для записи файла
|
||||
* Создает недастающие папки для записи файла
|
||||
*
|
||||
* @param string $dst Полное имя файла
|
||||
* @param string $dst Полное имя файла
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
|
@ -285,11 +285,11 @@ class Path
|
|||
}
|
||||
|
||||
/**
|
||||
* Подбирает новое временное имя для файла
|
||||
* Подбирает новое временное имя для файла
|
||||
*
|
||||
* @param string $dst Предпологаемое имя файла
|
||||
* @param string $dst Предпологаемое имя файла
|
||||
*
|
||||
* @return string Новое имя файла
|
||||
* @return string Новое имя файла
|
||||
*/
|
||||
static function resolveFile ($dst)
|
||||
{
|
||||
|
|
@ -305,7 +305,7 @@ class Path
|
|||
}
|
||||
|
||||
/**
|
||||
* Обьединяет строки в путь соединяя необходимым разделителем
|
||||
* Обьединяет строки в путь соединяя необходимым разделителем
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<?php
|
||||
/**
|
||||
* Класс преобразования типа значения поля класса в тип поля таблицы
|
||||
* Класс преобразования типа значения поля класса в тип поля таблицы
|
||||
* @package core
|
||||
*/
|
||||
class Primitive
|
||||
|
|
@ -12,13 +12,13 @@ class Primitive
|
|||
$this->name = $name;
|
||||
}
|
||||
|
||||
// Преобразование из внешнего вормата
|
||||
// Преобразование из внешнего вормата
|
||||
public function setString ($value)
|
||||
{
|
||||
$this->value = $value;
|
||||
}
|
||||
|
||||
// Преобразование из формата базы данных
|
||||
// Преобразование из формата базы данных
|
||||
public function setRes ($res, $key)
|
||||
{
|
||||
$this->value = $res->getString ($key);
|
||||
|
|
@ -29,7 +29,7 @@ class Primitive
|
|||
return ((string) $this->value);
|
||||
}
|
||||
|
||||
// Преобразование во внешний формат
|
||||
// Преобразование во внешний формат
|
||||
public function getString ()
|
||||
{
|
||||
return $this->__toString ();
|
||||
|
|
@ -37,7 +37,7 @@ class Primitive
|
|||
}
|
||||
|
||||
/**
|
||||
* Отображение поля таблицы в целое число
|
||||
* Отображение поля таблицы в целое число
|
||||
* @package core
|
||||
*/
|
||||
class Int4 extends Primitive {
|
||||
|
|
@ -54,7 +54,7 @@ class Int4 extends Primitive {
|
|||
class FKey extends Int4 {}
|
||||
|
||||
/**
|
||||
* Отображение поля таблицы в дату - время
|
||||
* Отображение поля таблицы в дату - время
|
||||
*/
|
||||
class Date extends Primitive
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Κλΰρρ μεςΰδΰννϋυ ςΰαλθφϋ
|
||||
* Класс метаданных таблицы
|
||||
*/
|
||||
class Meta
|
||||
{
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ require_once 'table.php';
|
|||
require_once 'meta.php';
|
||||
|
||||
/**
|
||||
* Класс для составления запроса
|
||||
* Класс для составления запроса
|
||||
*/
|
||||
class Query
|
||||
{
|
||||
|
|
@ -16,7 +16,7 @@ class Query
|
|||
public $order = array ();
|
||||
|
||||
/**
|
||||
* Создает пустой зарос
|
||||
* Создает пустой зарос
|
||||
*/
|
||||
static function create()
|
||||
{
|
||||
|
|
@ -24,16 +24,16 @@ class Query
|
|||
}
|
||||
|
||||
/**
|
||||
* Метаданные таблицы
|
||||
* @param string $name Имя таблицы
|
||||
* Метаданные таблицы
|
||||
* @param string $name Имя таблицы
|
||||
*/
|
||||
function getTableMeta($name)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Создает новый запрос
|
||||
* @param string $name Имя таблицы
|
||||
* Создает новый запрос
|
||||
* @param string $name Имя таблицы
|
||||
*
|
||||
* @return Query
|
||||
*/
|
||||
|
|
@ -52,10 +52,10 @@ class Query
|
|||
}
|
||||
|
||||
/**
|
||||
* Добавляет к запросу условие
|
||||
* @param string $field Имя поля таблицы
|
||||
* @param string $op Имя оператора
|
||||
* @param $value Значение поля
|
||||
* Добавляет к запросу условие
|
||||
* @param string $field Имя поля таблицы
|
||||
* @param string $op Имя оператора
|
||||
* @param $value Значение поля
|
||||
*
|
||||
* @return Query
|
||||
*/
|
||||
|
|
@ -67,7 +67,7 @@ class Query
|
|||
}
|
||||
|
||||
/**
|
||||
* @param string $e Выражение
|
||||
* @param string $e Выражение
|
||||
*/
|
||||
public function calc($e)
|
||||
{
|
||||
|
|
@ -96,9 +96,9 @@ class Query
|
|||
}
|
||||
|
||||
/**
|
||||
* Обьединяет параметры двух заросов
|
||||
* Обьединяет параметры двух заросов
|
||||
* @param Query $first
|
||||
* @pram array $list Список параметров
|
||||
* @pram array $list Список параметров
|
||||
*
|
||||
* @return Query
|
||||
*/
|
||||
|
|
@ -112,7 +112,7 @@ class Query
|
|||
}
|
||||
|
||||
/**
|
||||
* Заковычивает значение
|
||||
* Заковычивает значение
|
||||
*/
|
||||
public function quote ($value)
|
||||
{
|
||||
|
|
@ -120,10 +120,10 @@ class Query
|
|||
}
|
||||
|
||||
/**
|
||||
* Компиляция таблицы
|
||||
* Компиляция таблицы
|
||||
* @param Table $table
|
||||
*
|
||||
* @return string Часть строки SQL
|
||||
* @return string Часть строки SQL
|
||||
*/
|
||||
private function table(Table $table)
|
||||
{
|
||||
|
|
@ -137,9 +137,9 @@ class Query
|
|||
}
|
||||
|
||||
/**
|
||||
* Компиляция WHERE
|
||||
* Компиляция WHERE
|
||||
*
|
||||
* @return string Часть строки SQL
|
||||
* @return string Часть строки SQL
|
||||
*/
|
||||
private function where ()
|
||||
{
|
||||
|
|
@ -147,9 +147,9 @@ class Query
|
|||
}
|
||||
|
||||
/**
|
||||
* Компиляция запроса в SELECT SQL
|
||||
* Компиляция запроса в SELECT SQL
|
||||
*
|
||||
* @return string SQL выражение
|
||||
* @return string SQL выражение
|
||||
*/
|
||||
public function select()
|
||||
{
|
||||
|
|
@ -160,7 +160,7 @@ class Query
|
|||
}
|
||||
|
||||
/**
|
||||
* Компиляция в DELETE
|
||||
* Компиляция в DELETE
|
||||
*/
|
||||
public function delete()
|
||||
{
|
||||
|
|
@ -177,9 +177,9 @@ class Query
|
|||
}
|
||||
|
||||
/**
|
||||
* Компиляция в UPDATE
|
||||
* TODO: Разные типы запросов Query->update(); Query->select(), Query->insert();!!
|
||||
* Возвраащают statement
|
||||
* Компиляция в UPDATE
|
||||
* TODO: Разные типы запросов Query->update(); Query->select(), Query->insert();!!
|
||||
* Возвраащают statement
|
||||
*/
|
||||
public function update($values)
|
||||
{
|
||||
|
|
@ -193,7 +193,7 @@ class Query
|
|||
}
|
||||
|
||||
/**
|
||||
* Компиляция в INSERT
|
||||
* Компиляция в INSERT
|
||||
*/
|
||||
public function insert($values)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* Класс таблицы
|
||||
*/
|
||||
class Table
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Извлекает текст из HTML документа
|
||||
* Извлекает текст из HTML документа
|
||||
*/
|
||||
function stripText($document)
|
||||
{
|
||||
|
|
@ -24,7 +24,7 @@ function stripText($document)
|
|||
}
|
||||
|
||||
/**
|
||||
* Разделение текста на массив слов
|
||||
* Разделение текста на массив слов
|
||||
*/
|
||||
function tokenize ($document)
|
||||
{
|
||||
|
|
@ -34,13 +34,13 @@ function tokenize ($document)
|
|||
|
||||
|
||||
/**
|
||||
* Ищет один из символов с конца строки
|
||||
* Ищет один из символов с конца строки
|
||||
*
|
||||
* @param string $haystack
|
||||
* @param array $needle Массив символов для поиска
|
||||
* @param int $offset Смещение от начала строки
|
||||
* @param array $needle Массив символов для поиска
|
||||
* @param int $offset Смещение от начала строки
|
||||
*
|
||||
* @return int Позицию первого совпадения
|
||||
* @return int Позицию первого совпадения
|
||||
*/
|
||||
function indexRight ($haystack, $needle, $offset = 0)
|
||||
{
|
||||
|
|
@ -55,13 +55,13 @@ function indexRight ($haystack, $needle, $offset = 0)
|
|||
}
|
||||
|
||||
/**
|
||||
* Ищет один из символов с начала строки
|
||||
* Ищет один из символов с начала строки
|
||||
*
|
||||
* @param string $haystack
|
||||
* @param array $needle Массив символов для поиска
|
||||
* @param int $offset Смещение от начала строки
|
||||
* @param array $needle Массив символов для поиска
|
||||
* @param int $offset Смещение от начала строки
|
||||
*
|
||||
* @return int Позицию первого совпадения
|
||||
* @return int Позицию первого совпадения
|
||||
*/
|
||||
function indexLeft ($haystack, $needle, $offset = 0)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ require_once 'core/search/stemmer.php';
|
|||
require_once 'core/path.php';
|
||||
|
||||
/**
|
||||
* Индексирование файлов
|
||||
* Индексирование файлов
|
||||
*/
|
||||
class Index
|
||||
{
|
||||
|
|
@ -25,7 +25,7 @@ class Index
|
|||
return "";
|
||||
}
|
||||
|
||||
// Выбираем основу слова
|
||||
// Выбираем основу слова
|
||||
function clean ($word)
|
||||
{
|
||||
return Stemmer::russian(strtolower($word));
|
||||
|
|
@ -34,14 +34,14 @@ class Index
|
|||
function process ($base, $files)
|
||||
{
|
||||
$path = new Path($base);
|
||||
// Список документов
|
||||
// Список документов
|
||||
foreach ($path->getContentRec($files) as $file) {
|
||||
$content = file_get_contents ($file);
|
||||
$text = stripText($content);
|
||||
// $title = self::getTitle ($content);
|
||||
$title = pathinfo($file, PATHINFO_BASENAME);
|
||||
// echo $file, "\n";
|
||||
// Список слов в документе
|
||||
// Список слов в документе
|
||||
$list = tokenize($text);
|
||||
foreach ($list as $word) {
|
||||
$preword = self::clean($word);
|
||||
|
|
@ -49,7 +49,7 @@ class Index
|
|||
$index = $this->index[$preword];
|
||||
if ( ! in_array ($this->count, $index)) $this->index[$preword] [] = $this->count;
|
||||
} else {
|
||||
// Не записываем слова длинна которых меньше 2
|
||||
// Не записываем слова длинна которых меньше 2
|
||||
if (strlen($preword) > 1) {
|
||||
$this->index[$preword] = array ($this->count);
|
||||
}
|
||||
|
|
@ -62,12 +62,12 @@ class Index
|
|||
}
|
||||
|
||||
/**
|
||||
* Сохранение результата поиска
|
||||
* Сохранение результата поиска
|
||||
*/
|
||||
function saveData ($file)
|
||||
{
|
||||
$file = fopen($file, "w");
|
||||
// Количество слов и текстов
|
||||
// Количество слов и текстов
|
||||
fwrite ($file, pack("SS", count($this->index), count($this->text)));
|
||||
foreach ($this->index as $word => $value) {
|
||||
$length = strlen($word);
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Разбирвет строку запроса на токены
|
||||
* Разбирвет строку запроса на токены
|
||||
*/
|
||||
class Lexer
|
||||
{
|
||||
|
|
@ -40,14 +40,14 @@ class Lexer
|
|||
}
|
||||
|
||||
/**
|
||||
* Проверяет на конец строки
|
||||
* Проверяет на конец строки
|
||||
*/
|
||||
private function isEOL () {
|
||||
return $this->offset >= strlen($this->src);
|
||||
}
|
||||
|
||||
/**
|
||||
* Односимвольный токен
|
||||
* Односимвольный токен
|
||||
*/
|
||||
private function easyToken () {
|
||||
$ch = $this->getChar ();
|
||||
|
|
@ -66,7 +66,7 @@ class Lexer
|
|||
}
|
||||
|
||||
/**
|
||||
* Возвращает следующий токен
|
||||
* Возвращает следующий токен
|
||||
*/
|
||||
public function getToken ()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ require_once 'core/search/lexer.php';
|
|||
require_once 'core/functions.php';
|
||||
|
||||
/**
|
||||
* Поиск в индексе
|
||||
* Поиск в индексе
|
||||
*/
|
||||
class Search
|
||||
{
|
||||
|
|
@ -80,9 +80,9 @@ class Search
|
|||
}
|
||||
|
||||
/**
|
||||
* @param int $type Тип лексемы
|
||||
* @param function $op Функция при совпадении типа лексемы при запросе
|
||||
* @param function $next Следующий обработчик запроса
|
||||
* @param int $type Тип лексемы
|
||||
* @param function $op Функция при совпадении типа лексемы при запросе
|
||||
* @param function $next Следующий обработчик запроса
|
||||
*/
|
||||
function binaryOp ($type, $op, $next)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -10,14 +10,14 @@ class Searcher {
|
|||
protected $search;
|
||||
public function __construct ()
|
||||
{
|
||||
// Может передавать обьект метод по умлочанию getWordStat??
|
||||
// Может передавать обьект метод по умлочанию getWordStat??
|
||||
$this->search = new Search (array ($this, 'getWord'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Читает содержимое индексного файла
|
||||
* Читает содержимое индексного файла
|
||||
*
|
||||
* @param string $file Имя файла
|
||||
* @param string $file Имя файла
|
||||
*/
|
||||
function setSource ($fileName)
|
||||
{
|
||||
|
|
@ -44,7 +44,7 @@ class Searcher {
|
|||
}
|
||||
}
|
||||
|
||||
// По слову возвращаем список файлов и слово
|
||||
// По слову возвращаем список файлов и слово
|
||||
public function getWord ($word)
|
||||
{
|
||||
$preword = Stemmer::russian($word); // Index?? -> clean
|
||||
|
|
@ -55,7 +55,7 @@ class Searcher {
|
|||
}
|
||||
|
||||
/**
|
||||
* Список документов в которых встечается слово
|
||||
* Список документов в которых встечается слово
|
||||
*
|
||||
*/
|
||||
function getResult (&$query)
|
||||
|
|
@ -74,10 +74,10 @@ class Searcher {
|
|||
}
|
||||
|
||||
/**
|
||||
* Часть документа в котором встречается слово
|
||||
* Часть документа в котором встречается слово
|
||||
*
|
||||
* @param $word Слово
|
||||
* @param $text Текст содержащий слово
|
||||
* @param $word Слово
|
||||
* @param $text Текст содержащий слово
|
||||
*/
|
||||
function getSlice ($word, $text)
|
||||
{
|
||||
|
|
@ -89,7 +89,7 @@ class Searcher {
|
|||
}
|
||||
|
||||
/**
|
||||
* Поиск по запросу
|
||||
* Поиск по запросу
|
||||
*
|
||||
*/
|
||||
function search ($query)
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ class Stemmer {
|
|||
|
||||
static private function rv($word)
|
||||
{
|
||||
$vowels = array('à','å','è','î','ó','û','ý','þ','ÿ');
|
||||
$vowels = array('а','е','и','о','у','ы','э','ю','я');
|
||||
$flag = 0;
|
||||
$rv = '';
|
||||
$start = '';
|
||||
|
|
@ -59,7 +59,7 @@ class Stemmer {
|
|||
|
||||
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)
|
||||
|
|
@ -69,26 +69,26 @@ class Stemmer {
|
|||
|
||||
static private function step1($word)
|
||||
{
|
||||
$perfective1 = array('â', 'âøè', 'âøèñü');
|
||||
$perfective1 = array('в', 'вши', 'вшись');
|
||||
foreach ($perfective1 as $suffix) {
|
||||
if (self::has_suffix($word, $suffix) && self::has_aya ($word, $suffix)) {
|
||||
return self::cut_suffix($word, $suffix);
|
||||
}
|
||||
}
|
||||
|
||||
$perfective2 = array('èâ','èâøè','èâøèñü','ûâøè','ûâøèñü');
|
||||
$perfective2 = array('ив','ивши','ившись','ывши','ывшись');
|
||||
foreach ($perfective2 as $suffix) {
|
||||
if (self::has_suffix($word, $suffix)) {
|
||||
return self::cut_suffix($word, $suffix);
|
||||
}
|
||||
}
|
||||
|
||||
$reflexive = array('ñÿ', 'ñü');
|
||||
$reflexive = array('ся', 'сь');
|
||||
$word = self::substitute($word, $reflexive);
|
||||
|
||||
$adjective = array('åå','èå','ûå','îå','èìè','ûìè','åé','èé','ûé','îé','åì','èì','ûì','îì','åãî','îãî','åìó','îìó','èõ','ûõ','óþ','þþ','àÿ','ÿÿ','îþ','åþ');
|
||||
$participle2 = array('åì','íí','âø','þù','ù');
|
||||
$participle1 = array('èâø','ûâø','óþù');
|
||||
$adjective = array('ее','ие','ые','ое','ими','ыми','ей','ий','ый','ой','ем','им','ым','ом','его','ого','ему','ому','их','ых','ую','юю','ая','яя','ою','ею');
|
||||
$participle2 = array('ем','нн','вш','ющ','щ');
|
||||
$participle1 = array('ивш','ывш','ующ');
|
||||
foreach ($adjective as $suffix) {
|
||||
if (self::has_suffix($word, $suffix)) {
|
||||
$word = self::cut_suffix($word, $suffix);
|
||||
|
|
@ -101,17 +101,17 @@ class Stemmer {
|
|||
}
|
||||
}
|
||||
|
||||
$verb1 = array('ëà','íà','åòå','éòå','ëè','é','ë','åì','í','ëî','íî','åò','þò','íû','òü','åøü','ííî');
|
||||
$verb1 = array('ла','на','ете','йте','ли','й','л','ем','н','ло','но','ет','ют','ны','ть','ешь','нно');
|
||||
foreach ($verb1 as $suffix)
|
||||
if (self::has_suffix($word, $suffix) && self::has_aya ($word, $suffix))
|
||||
return self::cut_suffix($word, $suffix);
|
||||
|
||||
$verb2 = array('èëà','ûëà','åíà','åéòå','óéòå','èòå','èëè','ûëè','åé','óé','èë','ûë','èì','ûì','åí','èëî','ûëî','åíî','ÿò','óåò','óþò','èò','ûò','åíû','èòü','ûòü','èøü','óþ','þ');
|
||||
$verb2 = array('ила','ыла','ена','ейте','уйте','ите','или','ыли','ей','уй','ил','ыл','им','ым','ен','ило','ыло','ено','ят','ует','уют','ит','ыт','ены','ить','ыть','ишь','ую','ю');
|
||||
foreach ($verb2 as $suffix)
|
||||
if (self::has_suffix($word, $suffix))
|
||||
return self::cut_suffix($word, $suffix);
|
||||
|
||||
$noun = array('à','åâ','îâ','èå','üå','å','èÿìè','ÿìè','àìè','åè','èè','è','èåé','åé','îé','èé','é','èÿì','ÿì','èåì','åì','àì','îì','î','ó','àõ','èÿõ','ÿõ','û','ü','èþ','üþ','þ','èÿ','üÿ','ÿ');
|
||||
$noun = array('а','ев','ов','ие','ье','е','иями','ями','ами','еи','ии','и','ией','ей','ой','ий','й','иям','ям','ием','ем','ам','ом','о','у','ах','иях','ях','ы','ь','ию','ью','ю','ия','ья','я');
|
||||
foreach ($noun as $suffix) {
|
||||
if (self::has_suffix($word, $suffix))
|
||||
return self::cut_suffix($word, $suffix);
|
||||
|
|
@ -122,14 +122,14 @@ class Stemmer {
|
|||
|
||||
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);
|
||||
return $word;
|
||||
}
|
||||
|
||||
static private function step3($word)
|
||||
{
|
||||
$vowels = array('à','å','è','î','ó','û','ý','þ','ÿ');
|
||||
$vowels = array('а','е','и','о','у','ы','э','ю','я');
|
||||
$flag = 0;
|
||||
$r1 = '';
|
||||
$r2 = '';
|
||||
|
|
@ -152,7 +152,7 @@ class Stemmer {
|
|||
if ($flag=1 && array_search(substr($r1,$i,CHAR_LENGTH), $vowels) === false)
|
||||
$flag=2;
|
||||
}
|
||||
$derivational=array('îñò', 'îñòü');
|
||||
$derivational=array('ост', 'ость');
|
||||
foreach ($derivational as $suffix)
|
||||
if (substr($r2,-(strlen($suffix))) == $suffix)
|
||||
$word=substr($word, 0, strlen($r2)-strlen($suffix));
|
||||
|
|
@ -161,19 +161,19 @@ class Stemmer {
|
|||
|
||||
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);
|
||||
else
|
||||
{
|
||||
$superlative=array('åéø', 'åéøå');
|
||||
$superlative=array('ейш', 'ейше');
|
||||
foreach ($superlative as $suffix)
|
||||
if (substr($word,-(strlen($suffix))) == $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);
|
||||
}
|
||||
// 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) == 'ü')
|
||||
// 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) == 'ь')
|
||||
$word=substr($word, 0, strlen($word)-CHAR_LENGTH);
|
||||
return $word;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,13 +3,13 @@
|
|||
require_once 'core/collection.php';
|
||||
|
||||
/**
|
||||
* Класс реестра
|
||||
* Реестр организован как ассоциативный многомерный массив
|
||||
* Класс реестра
|
||||
* Реестр организован как ассоциативный многомерный массив
|
||||
* array( 'name1' => parameters1, 'name2' => parameters1, ... )
|
||||
*
|
||||
* name1, name2 ... - Имена модулей
|
||||
* parameters1, parameters1 - Массивы с параметрами модуля
|
||||
* Имя необходимо чтобы потом легко было удалить ненужные ветки дерева
|
||||
* name1, name2 ... - Имена модулей
|
||||
* parameters1, parameters1 - Массивы с параметрами модуля
|
||||
* Имя необходимо чтобы потом легко было удалить ненужные ветки дерева
|
||||
*/
|
||||
class Settings extends Collection
|
||||
{
|
||||
|
|
@ -20,7 +20,7 @@ class Settings extends Collection
|
|||
}
|
||||
|
||||
/**
|
||||
* Чтение настроек из файла
|
||||
* Чтение настроек из файла
|
||||
*
|
||||
* @param File $file
|
||||
*
|
||||
|
|
@ -29,7 +29,7 @@ class Settings extends Collection
|
|||
public function read()
|
||||
{
|
||||
if ( !file_exists ($this->file)) return false;
|
||||
// Не include_once т.к читать настройки можно несколько раз
|
||||
// Не include_once т.к читать настройки можно несколько раз
|
||||
include($this->file);
|
||||
if (!is_array($settings)) {
|
||||
throw new Exception($this->file);
|
||||
|
|
@ -38,7 +38,7 @@ class Settings extends Collection
|
|||
}
|
||||
|
||||
/**
|
||||
* Запись ключа в реестр (Реестр это могомерный массив)
|
||||
* Запись ключа в реестр (Реестр это могомерный массив)
|
||||
*/
|
||||
public function writeKey(array $key, $value)
|
||||
{
|
||||
|
|
@ -61,7 +61,7 @@ class Settings extends Collection
|
|||
}
|
||||
|
||||
/**
|
||||
* Обновляет массив в соответствии со значением
|
||||
* Обновляет массив в соответствии со значением
|
||||
*/
|
||||
protected function merge(array &$data, $value)
|
||||
{
|
||||
|
|
@ -76,8 +76,8 @@ class Settings extends Collection
|
|||
}
|
||||
|
||||
/**
|
||||
* Чтение ключа из реестра
|
||||
* @param $args Путь к значению ключа
|
||||
* Чтение ключа из реестра
|
||||
* @param $args Путь к значению ключа
|
||||
*/
|
||||
public function readKey(array $key)
|
||||
{
|
||||
|
|
@ -106,8 +106,8 @@ class Settings extends Collection
|
|||
}
|
||||
|
||||
/**
|
||||
* Чтение ключа из реестра (Собирает все ключи с определенным значением во всех модулях)
|
||||
* @param $key Путь к значению ключа внутри модуля
|
||||
* Чтение ключа из реестра (Собирает все ключи с определенным значением во всех модулях)
|
||||
* @param $key Путь к значению ключа внутри модуля
|
||||
*/
|
||||
public function readKeyList()
|
||||
{
|
||||
|
|
@ -145,7 +145,7 @@ class Settings extends Collection
|
|||
}
|
||||
|
||||
/**
|
||||
* Запись настроек в файл (Может переименовать в store)
|
||||
* Запись настроек в файл (Может переименовать в store)
|
||||
*
|
||||
* @param File $file
|
||||
*
|
||||
|
|
@ -158,7 +158,7 @@ class Settings extends Collection
|
|||
}
|
||||
|
||||
/**
|
||||
* Список модулей
|
||||
* Список модулей
|
||||
*/
|
||||
public function getModules()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -4,12 +4,12 @@ require_once 'core/path.php';
|
|||
require_once 'creole/util/sql/SQLStatementExtractor.php';
|
||||
|
||||
/**
|
||||
* Обработка файлов для установки
|
||||
* Обработка файлов для установки
|
||||
*/
|
||||
class Setup
|
||||
{
|
||||
/**
|
||||
* Содержимое PHP файла
|
||||
* Содержимое PHP файла
|
||||
*/
|
||||
static function fileContent($file, array $tpl)
|
||||
{
|
||||
|
|
@ -21,7 +21,7 @@ class Setup
|
|||
}
|
||||
|
||||
/**
|
||||
* Копирует файлы шаблонной директории
|
||||
* Копирует файлы шаблонной директории
|
||||
*/
|
||||
static function copyTemplatePath($srcPath, $dstPath, array $tpl, $tplFile = 'tpl')
|
||||
{
|
||||
|
|
@ -31,12 +31,12 @@ class Setup
|
|||
|
||||
foreach ($files as $file) {
|
||||
if (Path::getExtension($file) == $tplFile) {
|
||||
// Шаблон
|
||||
// Шаблон
|
||||
$dst = $out->append($path->relPath (Path::skipExtension($file)));
|
||||
Path::prepare($dst);
|
||||
file_put_contents($dst, self::fileContent($file, $tpl));
|
||||
} else {
|
||||
// Обычный файл
|
||||
// Обычный файл
|
||||
$dst = $out->append($path->relPath ($file));
|
||||
Path::prepare($dst);
|
||||
copy($file, $dst);
|
||||
|
|
@ -45,7 +45,7 @@ class Setup
|
|||
}
|
||||
|
||||
/**
|
||||
* Выполнение Списка SQL команд
|
||||
* Выполнение Списка SQL команд
|
||||
*/
|
||||
static function batchSQL(Connection $conn, $file)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Класс для короткого доступа к файлам / папкам
|
||||
* Класс для короткого доступа к файлам / папкам
|
||||
*/
|
||||
class Shortcut
|
||||
{
|
||||
|
|
@ -19,8 +19,8 @@ class Shortcut
|
|||
}
|
||||
|
||||
/**
|
||||
* Добавляет ярлык с именем $prefix
|
||||
* Путь может содержать переменные
|
||||
* Добавляет ярлык с именем $prefix
|
||||
* Путь может содержать переменные
|
||||
*/
|
||||
public function addUrl($prefix, $path)
|
||||
{
|
||||
|
|
@ -36,7 +36,7 @@ class Shortcut
|
|||
}
|
||||
|
||||
/**
|
||||
* Возвращает путь по имени ярлыка
|
||||
* Возвращает путь по имени ярлыка
|
||||
*/
|
||||
static function getUrl ($prefix, $name = null, $name1 = false)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
require_once 'core/search/htmlhelper.php';
|
||||
/**
|
||||
* Функции для проверки орфографии
|
||||
* Функции для проверки орфографии
|
||||
* rename Spell -> SpellHelper ??
|
||||
*/
|
||||
class Spell
|
||||
|
|
@ -52,7 +52,7 @@ class Spell
|
|||
}
|
||||
|
||||
/**
|
||||
* Вызывает функцию для каждого найденного слова
|
||||
* Вызывает функцию для каждого найденного слова
|
||||
*/
|
||||
function eachWord ($call, $string)
|
||||
{
|
||||
|
|
@ -66,7 +66,7 @@ class Spell
|
|||
}
|
||||
|
||||
/**
|
||||
* Проверяет слово на соответствие со словарем
|
||||
* Проверяет слово на соответствие со словарем
|
||||
*
|
||||
*/
|
||||
function doWord (&$string, $begin, $end)
|
||||
|
|
@ -84,7 +84,7 @@ class Spell
|
|||
}
|
||||
|
||||
/**
|
||||
* Часть текста содержащий неправильное слово
|
||||
* Часть текста содержащий неправильное слово
|
||||
*/
|
||||
function getError ($string)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Преобразование дерева из модели Plain в массив массивов (Adjacency List)
|
||||
* Преобразование дерева из модели Plain в массив массивов (Adjacency List)
|
||||
*/
|
||||
|
||||
require_once 'core/functions.php';
|
||||
|
|
@ -10,16 +10,16 @@ define (SORT_DESC, 0); // descending
|
|||
define (SORT_ASC, 1); // ascending
|
||||
|
||||
/**
|
||||
* Выбирает все сроки из таблицы с уникальными значениями ключа
|
||||
* @param $name Имя ключа
|
||||
* @param $table Двухмерный массив
|
||||
* Выбирает все сроки из таблицы с уникальными значениями ключа
|
||||
* @param $name Имя ключа
|
||||
* @param $table Двухмерный массив
|
||||
* @example
|
||||
* key_unique_values ('name', array (array ('name' => 1), array ('name' => 2), array ('name' => 1)))
|
||||
=> array (1, 2)
|
||||
* @end example
|
||||
*/
|
||||
function key_unique_values ($name, $table) {
|
||||
// Ищем уникальные значения для заданного ключа
|
||||
// Ищем уникальные значения для заданного ключа
|
||||
$keys = array ();
|
||||
foreach ($table as $row) {
|
||||
if (!in_array ($row[$name], $keys))
|
||||
|
|
@ -29,10 +29,10 @@ function key_unique_values ($name, $table) {
|
|||
}
|
||||
|
||||
/**
|
||||
* Сортировка двумерного массива по заданному ключу
|
||||
* @param $array Массив
|
||||
* @param $key Имя ключа по значению которого будет идти сравнение
|
||||
* @return Отсортированный массив
|
||||
* Сортировка двумерного массива по заданному ключу
|
||||
* @param $array Массив
|
||||
* @param $key Имя ключа по значению которого будет идти сравнение
|
||||
* @return Отсортированный массив
|
||||
*/
|
||||
function sortOn($array, $key, $fn = '__cmp') {
|
||||
usort ($array, rcurry($fn, $key));
|
||||
|
|
@ -42,15 +42,15 @@ function sortOn($array, $key, $fn = '__cmp') {
|
|||
|
||||
|
||||
/**
|
||||
* Обходит таблицу как дерево
|
||||
* @param $level Array Уровни вложенности
|
||||
* @param $table Таблица
|
||||
* @param $fn Функция которая применяется к каждой ветке дерева
|
||||
* Обходит таблицу как дерево
|
||||
* @param $level Array Уровни вложенности
|
||||
* @param $table Таблица
|
||||
* @param $fn Функция которая применяется к каждой ветке дерева
|
||||
* $fn ($name, $index, $rows, $cc)
|
||||
* @param $name Ключ уровня
|
||||
* @param $index Значение ключа уровня
|
||||
* @param $rows Все столбцы текущго уровня
|
||||
* @parma $cc Столбцы более низкого уровня
|
||||
* @param $name Ключ уровня
|
||||
* @param $index Значение ключа уровня
|
||||
* @param $rows Все столбцы текущго уровня
|
||||
* @parma $cc Столбцы более низкого уровня
|
||||
*/
|
||||
function tableTreeWalk($level, $table, $fn) {
|
||||
if (empty ($level)) return $table;
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Расширения для PHPTAL для отображения времени и даты
|
||||
* Расширения для PHPTAL для отображения времени и даты
|
||||
* package utils
|
||||
*/
|
||||
class DateTime_Tales implements PHPTAL_Tales
|
||||
|
|
@ -17,7 +17,7 @@ class DateTime_Tales implements PHPTAL_Tales
|
|||
}
|
||||
}
|
||||
|
||||
/* Регистрация нового префикса для подключения компонента */
|
||||
/* Регистрация нового префикса для подключения компонента */
|
||||
$registry = PHPTAL_TalesRegistry::getInstance();
|
||||
$registry->registerPrefix('date', array('DateTime_Tales', 'date'));
|
||||
$registry->registerPrefix('time', array('DateTime_Tales', 'time'));
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ class Excel_DateTime
|
|||
}
|
||||
|
||||
/**
|
||||
* Клетка таблицы
|
||||
* Клетка таблицы
|
||||
*/
|
||||
class TableCell
|
||||
{
|
||||
|
|
@ -46,7 +46,7 @@ class TableCell
|
|||
}
|
||||
|
||||
/**
|
||||
* Ряд таблицы
|
||||
* Ряд таблицы
|
||||
*/
|
||||
class TableRow
|
||||
{
|
||||
|
|
@ -66,7 +66,7 @@ class TableRow
|
|||
}
|
||||
|
||||
/**
|
||||
* Таблица
|
||||
* Таблица
|
||||
*/
|
||||
class ExcelTable
|
||||
{
|
||||
|
|
@ -84,7 +84,7 @@ class ExcelTable
|
|||
}
|
||||
|
||||
/**
|
||||
* Записать значение в клетку с заданными координатами
|
||||
* Записать значение в клетку с заданными координатами
|
||||
*/
|
||||
function setCell($x, $y, $value)
|
||||
{
|
||||
|
|
@ -98,7 +98,7 @@ class ExcelTable
|
|||
}
|
||||
|
||||
/**
|
||||
* Заполняет ряд начиная с указанного столбца значениями из массива
|
||||
* Заполняет ряд начиная с указанного столбца значениями из массива
|
||||
*/
|
||||
function setRow($row, $index, array $data)
|
||||
{
|
||||
|
|
@ -113,9 +113,9 @@ class ExcelTable
|
|||
}
|
||||
|
||||
/**
|
||||
* Устанавливает высоту ряда
|
||||
* @param $row integer Номер ряда
|
||||
* @parma $value real Высота ряда
|
||||
* Устанавливает высоту ряда
|
||||
* @param $row integer Номер ряда
|
||||
* @parma $value real Высота ряда
|
||||
*/
|
||||
function setRowHeight ($row, $value)
|
||||
{
|
||||
|
|
@ -125,9 +125,9 @@ class ExcelTable
|
|||
}
|
||||
|
||||
/**
|
||||
* Устанавливает стиль ряда
|
||||
* @param $row integer Номер ряда
|
||||
* @parma $name string Имя стиля
|
||||
* Устанавливает стиль ряда
|
||||
* @param $row integer Номер ряда
|
||||
* @parma $name string Имя стиля
|
||||
*/
|
||||
function setRowStyle ($row, $name)
|
||||
{
|
||||
|
|
@ -137,10 +137,10 @@ class ExcelTable
|
|||
}
|
||||
|
||||
/**
|
||||
* Обьединяет клетки в строке
|
||||
* @param $row Номер ряда
|
||||
* @param $cell Номер столбца
|
||||
* @param $merge Количество клеток для обьединения
|
||||
* Обьединяет клетки в строке
|
||||
* @param $row Номер ряда
|
||||
* @param $cell Номер столбца
|
||||
* @param $merge Количество клеток для обьединения
|
||||
*/
|
||||
function setCellMerge ($row, $cell, $merge)
|
||||
{
|
||||
|
|
@ -151,10 +151,10 @@ class ExcelTable
|
|||
}
|
||||
|
||||
/**
|
||||
* Устанавливает стиль для клеток ряда
|
||||
* @param $row integer Номер ряда
|
||||
* @param $y integer Номер столбца
|
||||
* @parma $name string Имя стиля
|
||||
* Устанавливает стиль для клеток ряда
|
||||
* @param $row integer Номер ряда
|
||||
* @param $y integer Номер столбца
|
||||
* @parma $name string Имя стиля
|
||||
*/
|
||||
function setCellStyle ($row, $y, $name)
|
||||
{
|
||||
|
|
@ -163,7 +163,7 @@ class ExcelTable
|
|||
}
|
||||
|
||||
/**
|
||||
* Добавляет строку к таблице
|
||||
* Добавляет строку к таблице
|
||||
*/
|
||||
function addRow($index = 1, array $data = array(""))
|
||||
{
|
||||
|
|
@ -175,7 +175,7 @@ class ExcelTable
|
|||
}
|
||||
|
||||
/**
|
||||
* Количество строк в таблице
|
||||
* Количество строк в таблице
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
|
|
@ -185,7 +185,7 @@ class ExcelTable
|
|||
}
|
||||
|
||||
/**
|
||||
* Количество столбцов в строке
|
||||
* Количество столбцов в строке
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
|
|
@ -195,8 +195,8 @@ class ExcelTable
|
|||
}
|
||||
|
||||
/**
|
||||
* Разделяет таблицу на две части по вертикали
|
||||
* @param $n integer Количество столбцов слева
|
||||
* Разделяет таблицу на две части по вертикали
|
||||
* @param $n integer Количество столбцов слева
|
||||
*/
|
||||
function splitVertical($n)
|
||||
{
|
||||
|
|
@ -204,8 +204,8 @@ class ExcelTable
|
|||
}
|
||||
|
||||
/**
|
||||
* Разделяет таблицу на две части по горизонтали
|
||||
* @param $n integer Количество столбцов сверху
|
||||
* Разделяет таблицу на две части по горизонтали
|
||||
* @param $n integer Количество столбцов сверху
|
||||
*/
|
||||
function splitHorizontal($n)
|
||||
{
|
||||
|
|
@ -214,7 +214,7 @@ class ExcelTable
|
|||
|
||||
|
||||
/**
|
||||
* Количество столбцов в таблице
|
||||
* Количество столбцов в таблице
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
|
|
@ -229,7 +229,7 @@ class ExcelTable
|
|||
}
|
||||
|
||||
/**
|
||||
* Генерация клетки таблицы (Переработать)
|
||||
* Генерация клетки таблицы (Переработать)
|
||||
*/
|
||||
function createCell ($ncell, XMLWriter $doc, $j, $value, $setIndex) {
|
||||
$doc->startElement("Cell");
|
||||
|
|
@ -266,7 +266,7 @@ class ExcelTable
|
|||
}
|
||||
|
||||
/**
|
||||
* Генерация таблицы
|
||||
* Генерация таблицы
|
||||
*/
|
||||
public function createTable (XMLWriter $doc) {
|
||||
$doc->startElement('Worksheet');
|
||||
|
|
@ -279,7 +279,7 @@ class ExcelTable
|
|||
$doc->writeAttribute('ss:ExpandedColumnCount', $columns);
|
||||
$doc->writeAttribute('ss:ExpandedRowCount', $rows);
|
||||
|
||||
// Переписать цыкл !!!!!!!
|
||||
// Переписать цыкл !!!!!!!
|
||||
for ($i = 1; $i <= $rows; $i++) {
|
||||
$doc->startElement('Row');
|
||||
if (isset($this->rows[$i])) {
|
||||
|
|
@ -292,7 +292,7 @@ class ExcelTable
|
|||
}
|
||||
|
||||
$nrow = $this->rows[$i];
|
||||
// Флаг индикатор подстановки номера столбца
|
||||
// Флаг индикатор подстановки номера столбца
|
||||
$setIndex = false;
|
||||
for ($j = 1; $j <= $columns; $j++) {
|
||||
|
||||
|
|
@ -339,7 +339,7 @@ class ExcelTable
|
|||
}
|
||||
|
||||
/**
|
||||
* Документ
|
||||
* Документ
|
||||
*/
|
||||
class ExcelDocument {
|
||||
static $ns = "urn:schemas-microsoft-com:office:spreadsheet";
|
||||
|
|
@ -351,10 +351,10 @@ class ExcelDocument {
|
|||
}
|
||||
|
||||
/**
|
||||
* Добавление стиля к документу
|
||||
* @param $name string Имя стиля
|
||||
* @param $values array Параметры стиля
|
||||
* @param $type Тип стиля
|
||||
* Добавление стиля к документу
|
||||
* @param $name string Имя стиля
|
||||
* @param $values array Параметры стиля
|
||||
* @param $type Тип стиля
|
||||
*/
|
||||
function setStyle ($name, array $values, $type = 'Interior')
|
||||
{
|
||||
|
|
@ -365,7 +365,7 @@ class ExcelDocument {
|
|||
}
|
||||
|
||||
/**
|
||||
* Генерация стилей
|
||||
* Генерация стилей
|
||||
*/
|
||||
private function createStyles (XMLWriter $doc) {
|
||||
$doc->startElement('Styles');
|
||||
|
|
@ -373,7 +373,7 @@ class ExcelDocument {
|
|||
$doc->startElement('Style');
|
||||
$doc->writeAttribute('ss:ID', $name);
|
||||
foreach ($sn as $type => $s) {
|
||||
// Стиль Borders - составной
|
||||
// Стиль Borders - составной
|
||||
if ($type == 'Borders') {
|
||||
$doc->startElement('Borders');
|
||||
foreach ($s as $border) {
|
||||
|
|
@ -398,7 +398,7 @@ class ExcelDocument {
|
|||
}
|
||||
|
||||
/**
|
||||
* Преобразует переводы строки в спец символы
|
||||
* Преобразует переводы строки в спец символы
|
||||
*/
|
||||
function clean ($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
|
||||
*/
|
||||
function save($filename)
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
require_once 'core/tools/drawing.php';
|
||||
|
||||
/**
|
||||
* Формат для композиции изображений
|
||||
* Формат для композиции изображений
|
||||
*/
|
||||
class TemplateImage
|
||||
{
|
||||
|
|
@ -47,7 +47,7 @@ class TemplateImage
|
|||
}
|
||||
|
||||
/**
|
||||
* Путь к изображению
|
||||
* Путь к изображению
|
||||
*/
|
||||
function resourcePath($path)
|
||||
{
|
||||
|
|
@ -57,7 +57,7 @@ class TemplateImage
|
|||
}
|
||||
|
||||
/**
|
||||
* Путь у шрифтам
|
||||
* Путь у шрифтам
|
||||
*/
|
||||
function fontPath($path)
|
||||
{
|
||||
|
|
@ -85,7 +85,7 @@ class TemplateImage
|
|||
}
|
||||
|
||||
/**
|
||||
* Создает изображение из файла
|
||||
* Создает изображение из файла
|
||||
*/
|
||||
function imagefromfile($file)
|
||||
{
|
||||
|
|
@ -151,7 +151,7 @@ class TemplateImage
|
|||
}
|
||||
|
||||
/**
|
||||
* Перекодировка текста
|
||||
* Перекодировка текста
|
||||
*/
|
||||
function encode($text)
|
||||
{
|
||||
|
|
@ -184,7 +184,7 @@ class TemplateImage
|
|||
}
|
||||
|
||||
/**
|
||||
* Генерирует изображение из шаблона
|
||||
* Генерирует изображение из шаблона
|
||||
*/
|
||||
function render($file = null)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,14 +1,14 @@
|
|||
<?php
|
||||
|
||||
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(
|
||||
"æ"=>"zh", "ö"=>"ts", "÷"=>"ch", "ø"=>"sh",
|
||||
"ù"=>"shch","ü"=>"", "þ"=>"yu", "ÿ"=>"ya",
|
||||
"Æ"=>"ZH", "Ö"=>"TS", "×"=>"CH", "Ø"=>"SH",
|
||||
"Ù"=>"SHCH","Ü"=>"", "Þ"=>"YU", "ß"=>"YA",
|
||||
"¿"=>"i", "¯"=>"Yi", "º"=>"ie", "ª"=>"Ye"
|
||||
"ж"=>"zh", "ц"=>"ts", "ч"=>"ch", "ш"=>"sh",
|
||||
"щ"=>"shch","ь"=>"", "ю"=>"yu", "я"=>"ya",
|
||||
"Ж"=>"ZH", "Ц"=>"TS", "Ч"=>"CH", "Ш"=>"SH",
|
||||
"Щ"=>"SHCH","Ь"=>"", "Ю"=>"YU", "Я"=>"YA",
|
||||
"ї"=>"i", "Ї"=>"Yi", "є"=>"ie", "Є"=>"Ye"
|
||||
));
|
||||
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);
|
||||
}
|
||||
|
||||
// Οεπεμεωενθε βρευ δεςει βεςκθ β δπσγσώ βεςκσ
|
||||
// Перемещение всех детей ветки в другую ветку
|
||||
function moveChildren($ID, $newParentId)
|
||||
{
|
||||
|
||||
|
|
@ -310,11 +310,11 @@ class CDBTree
|
|||
if ($leftIdP < $leftId && $rightIdP > $rightId && $levelP < $level-1) {
|
||||
// _update($this->table, array(), )
|
||||
$this->sql = 'UPDATE ' . $this->table . ' SET '
|
||||
// Μεν<EFBFBD>εμ σπξβενό
|
||||
// Меняем уровень
|
||||
. $this->level . '=' .
|
||||
_case(_between($this->left, $leftId, $rightId),
|
||||
$this->level . sprintf('%+d', -($level-1) +$levelP) , $this->level)
|
||||
// Μεν<EFBFBD>εμ γπΰνθφϋ
|
||||
// Меняем границы
|
||||
. $this->left . '=' .
|
||||
_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))
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Сортировка дерева в представлении Nested Set
|
||||
* Для дерева которое хранится в базе данных используя представление Nested Set нет возможности отсортировать элементы дерева по
|
||||
* произвольному полю. Поэтому после извлечения дерева из базы данных оно преобразуется в обычное представление сортируется и обратно
|
||||
* Сортировка дерева в представлении Nested Set
|
||||
* Для дерева которое хранится в базе данных используя представление Nested Set нет возможности отсортировать элементы дерева по
|
||||
* произвольному полю. Поэтому после извлечения дерева из базы данных оно преобразуется в обычное представление сортируется и обратно
|
||||
*
|
||||
* Пример:
|
||||
* Пример:
|
||||
* $sort = new NestedSetSort();
|
||||
* $data = $sort->sortBy($data, 'name');
|
||||
*/
|
||||
|
|
@ -17,7 +17,7 @@ class NestedSetSort {
|
|||
public function __construct() {
|
||||
}
|
||||
|
||||
// Преобразуем Nested Set в дерево и сортируем
|
||||
// Преобразуем Nested Set в дерево и сортируем
|
||||
private function listTree(array $tree, $offset, $level) {
|
||||
$result = array();
|
||||
for ($i = $offset; $i < sizeof($tree); $i++) {
|
||||
|
|
@ -38,19 +38,19 @@ class NestedSetSort {
|
|||
return array($result, $i);
|
||||
}
|
||||
|
||||
// Сравнение двух элементов
|
||||
// Сравнение двух элементов
|
||||
private function compare($a, $b) {
|
||||
$a1 = $this->data[$a[0]][$this->sortBy];
|
||||
$b1 = $this->data[$b[0]][$this->sortBy];
|
||||
return strcmp($a1, $b1);
|
||||
}
|
||||
|
||||
// Сортировка списка
|
||||
// Сортировка списка
|
||||
private function sortList(array &$list, $data) {
|
||||
usort($list, array($this, 'compare'));
|
||||
}
|
||||
|
||||
// Создает дерево в виде списка
|
||||
// Создает дерево в виде списка
|
||||
private function reorder(array $tree) {
|
||||
foreach($tree as $node) {
|
||||
$this->result[] = $this->data[$node[0]];
|
||||
|
|
@ -68,7 +68,7 @@ class NestedSetSort {
|
|||
return $order[0];
|
||||
}
|
||||
|
||||
// Сортировка по заданному полю
|
||||
// Сортировка по заданному полю
|
||||
public function sortBy(array $data, $sortBy) {
|
||||
$this->data = $data;
|
||||
$this->sortBy = $sortBy;
|
||||
|
|
|
|||
|
|
@ -3,13 +3,13 @@
|
|||
require_once 'abstract.php';
|
||||
|
||||
/**
|
||||
* Проверка на число
|
||||
* Проверка на число
|
||||
*/
|
||||
class Rule_Alpha extends Rule_Abstract
|
||||
{
|
||||
public function getErrorMsg()
|
||||
{
|
||||
return "Поле должно содержать только буквы";
|
||||
return "Поле должно содержать только буквы";
|
||||
}
|
||||
|
||||
public function isValid(Collection $container, $status = null)
|
||||
|
|
|
|||
|
|
@ -3,13 +3,13 @@
|
|||
require_once 'abstract.php';
|
||||
|
||||
/**
|
||||
* Проверка формата электронной почты
|
||||
* Проверка формата электронной почты
|
||||
*/
|
||||
class Rule_Code extends Rule_Abstract
|
||||
{
|
||||
public function getErrorMsg()
|
||||
{
|
||||
return "Неправильно указан персональный код";
|
||||
return "Неправильно указан персональный код";
|
||||
}
|
||||
|
||||
function checkCode($code) {
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
require_once 'abstract.php';
|
||||
|
||||
/**
|
||||
* Проверка формата даты
|
||||
* Проверка формата даты
|
||||
*/
|
||||
class Rule_Count extends Rule_Abstract
|
||||
{
|
||||
|
|
@ -12,7 +12,7 @@ class Rule_Count extends Rule_Abstract
|
|||
|
||||
public function getErrorMsg()
|
||||
{
|
||||
return "Количество записей должно быть не менне {$this->size} и не более {$this->max}";
|
||||
return "Количество записей должно быть не менне {$this->size} и не более {$this->max}";
|
||||
}
|
||||
|
||||
function not_empty($s) {
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
require_once 'abstract.php';
|
||||
|
||||
/**
|
||||
* Проверка формата даты
|
||||
* Проверка формата даты
|
||||
*/
|
||||
class Rule_Date extends Rule_Abstract
|
||||
{
|
||||
|
|
@ -11,7 +11,7 @@ class Rule_Date extends Rule_Abstract
|
|||
|
||||
public function getErrorMsg()
|
||||
{
|
||||
return "Неверный формат даты";
|
||||
return "Неверный формат даты";
|
||||
}
|
||||
|
||||
public function isValid(Collection $container, $status = null)
|
||||
|
|
|
|||
|
|
@ -3,13 +3,13 @@
|
|||
require_once 'abstract.php';
|
||||
|
||||
/**
|
||||
* Проверка формата электронной почты
|
||||
* Проверка формата электронной почты
|
||||
*/
|
||||
class Rule_Email extends Rule_Abstract
|
||||
{
|
||||
public function getErrorMsg()
|
||||
{
|
||||
return "Неверный формат электронной почты";
|
||||
return "Неверный формат электронной почты";
|
||||
}
|
||||
|
||||
public function isValid(Collection $container, $status = null)
|
||||
|
|
|
|||
|
|
@ -3,13 +3,13 @@
|
|||
require_once 'abstract.php';
|
||||
|
||||
/**
|
||||
* Проверка формата электронной почты
|
||||
* Проверка формата электронной почты
|
||||
*/
|
||||
class Rule_EmailList extends Rule_Abstract
|
||||
{
|
||||
public function getErrorMsg()
|
||||
{
|
||||
return "Неверный формат электронной почты";
|
||||
return "Неверный формат электронной почты";
|
||||
}
|
||||
|
||||
public function isValid(Collection $container, $status = null) {
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
require_once 'abstract.php';
|
||||
|
||||
/**
|
||||
* Проверка на равентство двух полей
|
||||
* Проверка на равентство двух полей
|
||||
*/
|
||||
class Rule_Match extends Rule_Abstract
|
||||
{
|
||||
|
|
@ -11,7 +11,7 @@ class Rule_Match extends Rule_Abstract
|
|||
|
||||
public function getErrorMsg()
|
||||
{
|
||||
return "Поля не совпадают";
|
||||
return "Поля не совпадают";
|
||||
}
|
||||
|
||||
/* public function __construct($field, $refField, $errorMsg)
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ class Rule_Notnull extends Rule_Abstract
|
|||
{
|
||||
public function getErrorMsg()
|
||||
{
|
||||
return "Поле не должно быть пустым";
|
||||
return "Поле не должно быть пустым";
|
||||
}
|
||||
|
||||
public function isValid(Collection $container, $status = null)
|
||||
|
|
|
|||
|
|
@ -3,13 +3,13 @@
|
|||
require_once 'abstract.php';
|
||||
|
||||
/**
|
||||
* Проверка на число
|
||||
* Проверка на число
|
||||
*/
|
||||
class Rule_Numeric extends Rule_Abstract
|
||||
{
|
||||
public function getErrorMsg()
|
||||
{
|
||||
return "Значение поля должно быть числом";
|
||||
return "Значение поля должно быть числом";
|
||||
}
|
||||
|
||||
public function isValid(Collection $container, $status = null)
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
require_once 'abstract.php';
|
||||
|
||||
/**
|
||||
* Проверка формата времени
|
||||
* Проверка формата времени
|
||||
*/
|
||||
class Rule_Time extends Rule_Abstract
|
||||
{
|
||||
|
|
@ -11,7 +11,7 @@ class Rule_Time extends Rule_Abstract
|
|||
|
||||
public function getErrorMsg()
|
||||
{
|
||||
return "Неверный формат времени";
|
||||
return "Неверный формат времени";
|
||||
}
|
||||
|
||||
static function checktime($hour, $minute)
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
require_once 'abstract.php';
|
||||
|
||||
/**
|
||||
* Проверка формата времени
|
||||
* Проверка формата времени
|
||||
*/
|
||||
class Rule_Unique extends Rule_Abstract
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,17 +1,17 @@
|
|||
<?php
|
||||
/**
|
||||
* Проверка коллекции
|
||||
* Проверка коллекции
|
||||
*/
|
||||
class Validator
|
||||
{
|
||||
protected $chain = array(); // Массив правил
|
||||
protected $errorMsg = array(); // Массив ошибок
|
||||
protected $chain = array(); // Массив правил
|
||||
protected $errorMsg = array(); // Массив ошибок
|
||||
|
||||
/**
|
||||
* Добавление списка правил в специальном формате
|
||||
* Добавление списка правил в специальном формате
|
||||
* array(array('name' => fieldname, 'validate' => ruletext), ...)
|
||||
* fieldname - Имя переменой для проверки
|
||||
* ruletext - Описание правила см. формат правила ниже
|
||||
* fieldname - Имя переменой для проверки
|
||||
* ruletext - Описание правила см. формат правила ниже
|
||||
*/
|
||||
public function addRuleList(array $input)
|
||||
{
|
||||
|
|
@ -31,25 +31,25 @@ class Validator
|
|||
'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) {
|
||||
// Список правил
|
||||
// Список правил
|
||||
if (! isset($value['validate'])) continue;
|
||||
$rules = explode("|", $value['validate']);
|
||||
foreach ($rules as $rule) {
|
||||
// Список параметров правила
|
||||
// Список параметров правила
|
||||
$rule_param = explode(",", $rule);
|
||||
$name = array_shift($rule_param);
|
||||
|
||||
if (isset($type[$name])) {
|
||||
$constructor = $type[$name]; // "Rule_" . ucfirst($name)
|
||||
$rule = new $constructor($value['name'], false); // Нужны шаблонные сообщения для правил
|
||||
$rule = new $constructor($value['name'], false); // Нужны шаблонные сообщения для правил
|
||||
if (isset($value['context'])) {
|
||||
$rule->setContext($value['context']);
|
||||
}
|
||||
foreach ($rule_param as $param) {
|
||||
// Имя и значение параметра
|
||||
// Имя и значение параметра
|
||||
list($name, $value) = explode("=", $param);
|
||||
$rule->$name = $value;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,14 +2,14 @@
|
|||
|
||||
class _View_Composite // AbstractCompositeView
|
||||
{
|
||||
protected $_section = array(); // Вложенные шаблоны
|
||||
// Блоки
|
||||
protected $_stylesheet = array(); // Массив стилей текущего шаблона
|
||||
protected $_script = array(); // Массив скриптов текущего шаблона
|
||||
protected $_section = array(); // Вложенные шаблоны
|
||||
// Блоки
|
||||
protected $_stylesheet = array(); // Массив стилей текущего шаблона
|
||||
protected $_script = array(); // Массив скриптов текущего шаблона
|
||||
protected $_scriptstring = array();
|
||||
protected $_startup = array();
|
||||
|
||||
protected $_title = null; // Заголовок текущего шаблона
|
||||
protected $_title = null; // Заголовок текущего шаблона
|
||||
public $alias = array();
|
||||
|
||||
function __construct()
|
||||
|
|
@ -17,10 +17,10 @@ class _View_Composite // AbstractCompositeView
|
|||
}
|
||||
|
||||
/**
|
||||
* Связывет переменную с вложенным шаблоном
|
||||
* Связывет переменную с вложенным шаблоном
|
||||
*
|
||||
* @param string $section переменная шаблона
|
||||
* @param CompositeView $view вложенный шаблон
|
||||
* @param string $section переменная шаблона
|
||||
* @param 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)
|
||||
{
|
||||
|
|
@ -48,9 +48,9 @@ class _View_Composite // AbstractCompositeView
|
|||
}
|
||||
|
||||
/**
|
||||
* Добавляет код скипта к текущему шаблону
|
||||
* Добавляет код скипта к текущему шаблону
|
||||
*
|
||||
* @param string $name строка javascript кода
|
||||
* @param string $name строка javascript кода
|
||||
*/
|
||||
public function addScriptRaw($name, $startup = false)
|
||||
{
|
||||
|
|
@ -62,9 +62,9 @@ class _View_Composite // AbstractCompositeView
|
|||
}
|
||||
|
||||
/**
|
||||
* Добавляет стили к текущему шаблону
|
||||
* Добавляет стили к текущему шаблону
|
||||
*
|
||||
* @param string $name путь к стилю
|
||||
* @param string $name путь к стилю
|
||||
*/
|
||||
public function addStyleSheet($name)
|
||||
{
|
||||
|
|
@ -72,9 +72,9 @@ class _View_Composite // AbstractCompositeView
|
|||
}
|
||||
|
||||
/**
|
||||
* Рекурсивно извлекает из значение свойства обьекта
|
||||
* Рекурсивно извлекает из значение свойства обьекта
|
||||
*
|
||||
* @param string $list Имя свойства
|
||||
* @param string $list Имя свойства
|
||||
* @param boolean $flatten
|
||||
*/
|
||||
private function doTree($list, $flatten = true) {
|
||||
|
|
@ -86,7 +86,7 @@ class _View_Composite // AbstractCompositeView
|
|||
}
|
||||
|
||||
/**
|
||||
* Массив имен файлов скриптов
|
||||
* Массив имен файлов скриптов
|
||||
*
|
||||
* return array
|
||||
*/
|
||||
|
|
@ -105,7 +105,7 @@ class _View_Composite // AbstractCompositeView
|
|||
}
|
||||
|
||||
/**
|
||||
* Строка со скриптом
|
||||
* Строка со скриптом
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
|
|
@ -124,7 +124,7 @@ class _View_Composite // AbstractCompositeView
|
|||
}
|
||||
|
||||
/**
|
||||
* Массив имен файлов стилей
|
||||
* Массив имен файлов стилей
|
||||
*
|
||||
* return array
|
||||
*/
|
||||
|
|
@ -134,7 +134,7 @@ class _View_Composite // AbstractCompositeView
|
|||
}
|
||||
|
||||
/**
|
||||
* Обработка всех вложенных шаблонов
|
||||
* Обработка всех вложенных шаблонов
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
|
|
@ -146,7 +146,7 @@ class _View_Composite // AbstractCompositeView
|
|||
}
|
||||
|
||||
/**
|
||||
* Установка заголовка шаблона
|
||||
* Установка заголовка шаблона
|
||||
*
|
||||
* @param string $title
|
||||
*/
|
||||
|
|
@ -161,7 +161,7 @@ class _View_Composite // AbstractCompositeView
|
|||
}
|
||||
|
||||
/**
|
||||
* Общая строка заголовка
|
||||
* Общая строка заголовка
|
||||
*/
|
||||
public function getTitle()
|
||||
{
|
||||
|
|
@ -183,7 +183,7 @@ class _View_Composite // AbstractCompositeView
|
|||
$debug = ($debug) ? 'debug=1' : '';
|
||||
$path = parse_url(WWW_PATH, PHP_URL_PATH);
|
||||
$list = array_reverse($list);
|
||||
// Группы нужно передвавать как параметр !!!
|
||||
// Группы нужно передвавать как параметр !!!
|
||||
$groups = array(
|
||||
'table' => array($path . '/js/table.js', $path . '/js/listtable.js',
|
||||
$path . '/js/page.js', $path . '/js/pagemenu.js'),
|
||||
|
|
@ -208,7 +208,7 @@ class _View_Composite // AbstractCompositeView
|
|||
}
|
||||
|
||||
/**
|
||||
* Обработка шаблона
|
||||
* Обработка шаблона
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
|
|
@ -218,7 +218,7 @@ class _View_Composite // AbstractCompositeView
|
|||
$alias = $this->doTree('alias');
|
||||
|
||||
// require_once 'minify.php';
|
||||
// Скрипты и стили
|
||||
// Скрипты и стили
|
||||
$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)));
|
||||
|
||||
|
|
@ -242,7 +242,7 @@ class _View_Composite // AbstractCompositeView
|
|||
|
||||
function loadImports($importFile)
|
||||
{
|
||||
// Подключение стилей и скриптов
|
||||
// Подключение стилей и скриптов
|
||||
if (file_exists($importFile)) {
|
||||
$import = file_get_contents($importFile);
|
||||
$files = explode("\n", $import);
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<?php
|
||||
|
||||
// Класс отображения
|
||||
// Класс отображения
|
||||
// CompositeView !! Composite pattern
|
||||
|
||||
class View
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
require_once 'core/widgets/widget.php';
|
||||
|
||||
/**
|
||||
* Класс для создания диалоговых окон, типа поиска и настройки таблицы
|
||||
* Класс для создания диалоговых окон, типа поиска и настройки таблицы
|
||||
*/
|
||||
class Dialog extends Widget
|
||||
{
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
require_once 'core/widgets/listtable.php';
|
||||
|
||||
/**
|
||||
* Класс для генерации таблицы
|
||||
* Класс для генерации таблицы
|
||||
*/
|
||||
class FileBrowser extends ListTable
|
||||
{
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ require_once 'core/widgets/widget.php';
|
|||
require_once 'core/functions.php';
|
||||
|
||||
/**
|
||||
* Класс для генерации таблицы
|
||||
* Класс для генерации таблицы
|
||||
*/
|
||||
class ListTable extends Widget // MenuTable
|
||||
{
|
||||
|
|
@ -18,7 +18,7 @@ class ListTable extends Widget // MenuTable
|
|||
}
|
||||
|
||||
/**
|
||||
* Устанавливает формат таблицы, структуру $header см. table.js
|
||||
* Устанавливает формат таблицы, структуру $header см. table.js
|
||||
*/
|
||||
function setHeader($header)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,28 +1,28 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Список ссылок
|
||||
* Список ссылок
|
||||
*/
|
||||
class SimpleMenu
|
||||
{
|
||||
private $items = array();
|
||||
|
||||
/**
|
||||
* Добавление элемента меню
|
||||
* @param $href Обьект ссылки или строка, ссылка должна быть сгенерирована при генерации страницы, т.к может зависеть от параметров
|
||||
* которые могут измениться при создании страницы, поэтому передается ссылка на функцию (отложенная/ленивая ссылка)
|
||||
* @param $name Подпись к ссылке
|
||||
* Добавление элемента меню
|
||||
* @param $href Обьект ссылки или строка, ссылка должна быть сгенерирована при генерации страницы, т.к может зависеть от параметров
|
||||
* которые могут измениться при создании страницы, поэтому передается ссылка на функцию (отложенная/ленивая ссылка)
|
||||
* @param $name Подпись к ссылке
|
||||
*/
|
||||
function addMenuItem(/*. url .*/ $href,/*. string .*/ $name)
|
||||
{
|
||||
if($href) { // если ссылка пустая то элемент не добовляется
|
||||
if($href) { // если ссылка пустая то элемент не добовляется
|
||||
$this->items[] = array('href' => $href, 'name' => ucfirst($name)); // menu_item
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Массив ссылок
|
||||
* @return Массив
|
||||
* Массив ссылок
|
||||
* @return Массив
|
||||
*/
|
||||
function getItems()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ require_once 'core/widgets/widget.php';
|
|||
require_once 'core/widgets/menu.php';
|
||||
|
||||
/**
|
||||
* <EFBFBD>מלןמםוםע הכ<EFBFBD> דוםונאצטט לום
|
||||
* Компонент для генерации меню
|
||||
*/
|
||||
class PageMenu extends Widget
|
||||
{
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
require_once 'core/widgets/widget.php';
|
||||
|
||||
/**
|
||||
* Отображение постраничности
|
||||
* Отображение постраничности
|
||||
*/
|
||||
class Pages extends Widget // Selector
|
||||
{
|
||||
|
|
|
|||
|
|
@ -18,8 +18,8 @@ class SearchDialog extends Dialog
|
|||
|
||||
function postMake()
|
||||
{
|
||||
$form = new TForm (); // Показывем форму
|
||||
$form->addFieldList ($this->fields); // Разделить форму поиска и редактирования
|
||||
$form = new TForm (); // Показывем форму
|
||||
$form->addFieldList ($this->fields); // Разделить форму поиска и редактирования
|
||||
$this->view->form = $form;
|
||||
|
||||
$this->view->action = $this->action;
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
require_once 'core/widgets/widget.php';
|
||||
|
||||
/**
|
||||
* Компонент для генерации Дерева
|
||||
* Компонент для генерации Дерева
|
||||
*/
|
||||
class Tree extends Widget
|
||||
{
|
||||
|
|
@ -11,7 +11,7 @@ class Tree extends Widget
|
|||
{
|
||||
$this->template = "tree";
|
||||
}
|
||||
// Добавление ветки дерева
|
||||
// Добавление ветки дерева
|
||||
}
|
||||
|
||||
?>
|
||||
|
|
@ -11,12 +11,12 @@ function forceUrl($name)
|
|||
}
|
||||
|
||||
/**
|
||||
* Класс для генерации и управления активными компонентами страницы
|
||||
* Компонент состоит из следующих частей
|
||||
* PHP - Управление компонентом (Генерация, Инициализация, Обработка событий)
|
||||
* HTML - Необходимые шаблоны
|
||||
* CSS - Стили
|
||||
* Javascript - Клиентская часть управления компонентом
|
||||
* Класс для генерации и управления активными компонентами страницы
|
||||
* Компонент состоит из следующих частей
|
||||
* PHP - Управление компонентом (Генерация, Инициализация, Обработка событий)
|
||||
* HTML - Необходимые шаблоны
|
||||
* CSS - Стили
|
||||
* Javascript - Клиентская часть управления компонентом
|
||||
*/
|
||||
class Widget
|
||||
{
|
||||
|
|
@ -43,7 +43,7 @@ class Widget
|
|||
}
|
||||
|
||||
/**
|
||||
* Генерация кода инициализации компонента на стороне клиента
|
||||
* Генерация кода инициализации компонента на стороне клиента
|
||||
*/
|
||||
public function getCodeBefore()
|
||||
{
|
||||
|
|
@ -69,7 +69,7 @@ class Widget
|
|||
}
|
||||
|
||||
/**
|
||||
* Генерация компонента
|
||||
* Генерация компонента
|
||||
*/
|
||||
function make(Controller $parent)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
.*/
|
||||
|
||||
/**
|
||||
* Расширение класса ZipArchive с возможность архивирования директории
|
||||
* Расширение класса ZipArchive с возможность архивирования директории
|
||||
*/
|
||||
class ZipFile extends ZipArchive
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue