This commit is contained in:
Anatoly 2018-01-15 16:22:12 +03:00
commit f33afc2861
18 changed files with 240 additions and 48 deletions

View file

@ -81,7 +81,7 @@ class Connection_HttpRequest
$port = ($this->proxy_port) ? $this->proxy_port : $this->port; $port = ($this->proxy_port) ? $this->proxy_port : $this->port;
$errno = 0; $errno = 0;
$errstr = ''; $errstr = '';
$socket = fsockopen($host, $port, $errno, $errstr, 30); $socket = @fsockopen($host, $port, $errno, $errstr, 30);
if (is_resource($socket)) { if (is_resource($socket)) {
$header = $this->getHeader(); $header = $this->getHeader();
fwrite($socket, $header); fwrite($socket, $header);

View file

@ -62,6 +62,7 @@ class Controller_Action
public function loadConfig($name) { public function loadConfig($name) {
$filename = Shortcut::getUrl('config', $name); $filename = Shortcut::getUrl('config', $name);
$settings = [];
if (file_exists($filename)) { if (file_exists($filename)) {
include($filename); include($filename);
} else { } else {
@ -210,7 +211,8 @@ class Controller_Action
public function nUrl($name, array $param = array()) public function nUrl($name, array $param = array())
{ {
/*.Filter_ActionAccess.*/$access = $this->access; /*.Filter_ActionAccess.*/$access = $this->access;
if ($access != null || $access->checkAction($name)) {
if ($access == null || $access->checkAction($name)) {
return lcurry(array($this, 'postUrl'), $name, $param); return lcurry(array($this, 'postUrl'), $name, $param);
} }
return null; return null;
@ -372,4 +374,9 @@ class Controller_Action
{ {
$this->_getActionPath()->getPath($this, ($action) ? $action : $request->getAction()); $this->_getActionPath()->getPath($this, ($action) ? $action : $request->getAction());
} }
function redirect($action) {
header('location: ' . $this->fUrl($action));
exit();
}
} }

View file

@ -66,7 +66,13 @@ class Controller_Component
function execute(HttpRequest $request, $has_id = true) { function execute(HttpRequest $request, $has_id = true) {
$crequest = new ComponentRequest($this->component_id, $request); $crequest = new ComponentRequest($this->component_id, $request);
$action = 'action' . ucfirst($request->get('action', 'index'));
$_action = $request->get('action', 'index');
if (is_array($_action)) {
$action = 'action' . ucfirst(Arr::get($_action, $this->component_id, 'index'));
} else {
$action = 'action' . ucfirst($_action);
}
$this->before(); $this->before();
if (method_exists($this, $action)) { if (method_exists($this, $action)) {
@ -106,7 +112,9 @@ class Controller_Component
$tpl->set('common', Path::join(WWW_PATH, '../', 'common')); $tpl->set('common', Path::join(WWW_PATH, '../', 'common'));
$tpl->set('script', Path::join(WWW_PATH, 'js')); $tpl->set('script', Path::join(WWW_PATH, 'js'));
$tpl->set('media', Path::join(TEMPLATE_WEB, $template)); $tpl->set('media', Path::join(TEMPLATE_WEB, $template));
if ($registry) {
$tpl->set('site_template', SITE_WWW_PATH . '/templates' . $registry->readKey(array('system', 'template'))); $tpl->set('site_template', SITE_WWW_PATH . '/templates' . $registry->readKey(array('system', 'template')));
}
$tpl->set('base', SITE_WWW_PATH); $tpl->set('base', SITE_WWW_PATH);
$tpl->set('component_base', $this->webPath[$selected]); $tpl->set('component_base', $this->webPath[$selected]);
@ -125,14 +133,6 @@ class Controller_Component
return Path::join($this->webPath[0], 'templates', 'modern'); return Path::join($this->webPath[0], 'templates', 'modern');
} }
/**
* @param $name Имя модели
*/
private function getModelPath($name)
{
return Path::join (CMS_PATH, "model", $name . ".php");
}
/** /**
* Создает модель * Создает модель
* @param string $name * @param string $name
@ -140,8 +140,7 @@ class Controller_Component
*/ */
public function getModel($name) public function getModel($name)
{ {
require_once ($this->getModelPath ($name)); $modelName = "Mapper_" . $name;
$modelName = $name . "Mapper";
$model = new $modelName(); $model = new $modelName();
$model->db = $this->db; $model->db = $this->db;
return $model; return $model;
@ -188,7 +187,7 @@ class Controller_Component
$view->component_title = $settings['title']; $view->component_title = $settings['title'];
} }
static function loadComponent($expression, Database $db, Settings $registry) static function loadComponent($expression, Database $db, /*.Settings.*/ $registry)
{ {
$expression = htmlspecialchars_decode($expression); $expression = htmlspecialchars_decode($expression);
@ -322,11 +321,7 @@ class Controller_Component
*/ */
function addRequireJsPath($name, $path, $shim = null) { function addRequireJsPath($name, $path, $shim = null) {
global $requireJsConfig; Controller_Site::addRequireJsPath($name, $path, $shim);
$requireJsConfig['paths'][$name] = $path;
if ($shim) {
$requireJsConfig['shim'][$name] = $shim;
}
} }
function actionIndex(/*.ComponentRequest.*/ $request) { function actionIndex(/*.ComponentRequest.*/ $request) {

View file

@ -64,11 +64,13 @@ class Controller_Installer
$this->_registry->removeKey($name); $this->_registry->removeKey($name);
$this->_registry->write(); $this->_registry->write();
} }
// Устанавливает обновления если есть // Устанавливает обновления если есть
function doUpdates($name, $force = false) // Установка модуля function doUpdates($name, $force = false) // Установка модуля
{ {
$result = array(); $result = array();
$setup = $this->getSetupFile($name); $setup = $this->getSetupFile($name);
if (file_exists($setup) && ($this->isChanged($name) || $force)) { if (file_exists($setup) && ($this->isChanged($name) || $force)) {
$registry = $this->_registry; $registry = $this->_registry;
$settings = new Settings($setup); $settings = new Settings($setup);
@ -91,7 +93,6 @@ class Controller_Installer
$result[]=$res; $result[]=$res;
} }
} }
}
// Обновление версии меню // Обновление версии меню
$registry->removeKey($name); $registry->removeKey($name);
@ -99,6 +100,8 @@ class Controller_Installer
$registry->writeKey(array($name), $registry->writeKey(array($name),
array('version' => $version_new, array('version' => $version_new,
'time' => filemtime($setup))); 'time' => filemtime($setup)));
}
$registry->write(); $registry->write();
} }
return $result; return $result;

View file

@ -14,11 +14,11 @@ class Database_JsonInstall {
if (is_string($dbinit_file)) { if (is_string($dbinit_file)) {
$initActions = json_decode($dbinit_file, true); $initActions = json_decode($dbinit_file, true);
if (!$initActions) { if (!$initActions) {
echo "Invalid dbinit.json ".$dbinit_file; echo "Invalid ".$dbinit_path;
return 0; return 0;
} }
} else { } else {
echo "No dbinit.json"; echo "No ".$dbinit_path;
return 0; return 0;
} }

View file

@ -76,7 +76,9 @@ class Excel_Document {
function save($filename) function save($filename)
{ {
$doc = new XMLWriter(); $doc = new XMLWriter();
$doc->openURI($filename); if (!$doc->openURI($filename)) {
throw new Exception("unknown file " . $filename);
}
$doc->setIndent(false); $doc->setIndent(false);
$doc->startDocument('1.0','utf-8'); $doc->startDocument('1.0','utf-8');
$doc->startElement('Workbook'); $doc->startElement('Workbook');

View file

@ -4,14 +4,14 @@ class Filter_Authorization {
const SESSION_BROWSER_SIGN_SECRET = '@w3dsju45Msk#'; const SESSION_BROWSER_SIGN_SECRET = '@w3dsju45Msk#';
const SESSION_BROWSER_SIGN_KEYNAME = 'session.app.browser.sign'; const SESSION_BROWSER_SIGN_KEYNAME = 'session.app.browser.sign';
static function isLogged() { static function isLogged($group = 'access') {
// echo session_status();
if (session_status() == PHP_SESSION_NONE) { if (session_status() == PHP_SESSION_NONE) {
session_start(); session_start();
} }
$hash = self::getBrowserSign(); $hash = self::getBrowserSign();
// Если $hash не совпадает $_SESSION['hash'] то удаляем сессию // Если $hash не совпадает $_SESSION['hash'] то удаляем сессию
if (isset($_SESSION ['access']) && isset($_SESSION[self::SESSION_BROWSER_SIGN_KEYNAME])) { if (isset($_SESSION[$group]) && isset($_SESSION[self::SESSION_BROWSER_SIGN_KEYNAME])) {
if ($hash == $_SESSION[self::SESSION_BROWSER_SIGN_KEYNAME]) { if ($hash == $_SESSION[self::SESSION_BROWSER_SIGN_KEYNAME]) {
// UserAccess::getUserById($_SESSION ['access']); // Поиск по идентификатору // UserAccess::getUserById($_SESSION ['access']); // Поиск по идентификатору
return true; return true;
@ -22,14 +22,14 @@ class Filter_Authorization {
return false; return false;
} }
static function enter($id) static function enter($id, $group = 'access')
{ {
// $db->executeQuery("UPDATE visitor SET sid = '' WHERE id_visitor = " . $result->getInt('id_user')); // $db->executeQuery("UPDATE visitor SET sid = '' WHERE id_visitor = " . $result->getInt('id_user'));
session_register("access"); // session_register("access");
session_register("time"); // session_register("time");
// $_SESSION ["group"] = $result->getInt('access'); // $_SESSION ["group"] = $result->getInt('access');
$_SESSION ["access"] = $id; // id_user $_SESSION [$group] = $id; // id_user
$_SESSION [self::SESSION_BROWSER_SIGN_KEYNAME] = self::getBrowserSign(); $_SESSION [self::SESSION_BROWSER_SIGN_KEYNAME] = self::getBrowserSign();
$_SESSION ["time"] = time(); $_SESSION ["time"] = time();
} }

View file

@ -302,6 +302,7 @@ class Form_Form extends View_View {
'hidden' => 'THidden', 'hidden' => 'THidden',
'radio' => 'TSelectOne', 'radio' => 'TSelectOne',
'filebrowser' => 'TComponentBrowserInput', 'filebrowser' => 'TComponentBrowserInput',
'documents' => 'TComponentBrowserInput',
); );
} }

View file

@ -40,6 +40,10 @@ class Mail
$this->_to = $name; $this->_to = $name;
} }
function replyTo($name) // recipient
{
}
/** /**
* Установка получателей копии * Установка получателей копии
*/ */

90
src/MailAlt.php Normal file
View file

@ -0,0 +1,90 @@
<?php
class MailAlt
{
public $mailer;
function __construct() {
$this->mailer = new PHPMailer();
$this->mailer->CharSet = 'UTF-8';
}
/**
* Установка отправителя
*/
function from($name)
{
$this->mailer->setFrom($name);
}
/**
* Установка получателя
*/
function to($name) // recipient
{
$this->mailer->addAddress($name);
}
function replyTo($name) // recipient
{
$this->mailer->AddReplyTo($name);
}
/**
* Установка получателей копии
*/
function copy($name) // recipient cc
{
$this->addCC($name);
}
function notify($notify)
{
$this->_notify = $notify;
}
/**
* Тема письма
*/
function subject($subject)
{
$this->mailer->Subject = $subject;
}
/**
* Текст письма
*/
function setContent($text)
{
$this->mailer->Body = $text;
}
function setType($text)
{
$this->mailer->isHTML($text == 'text/html');
}
/**
* Кодировка текста в письме
*/
function setEncoding($encoding)
{
$this->encoding = $encoding;
}
/**
* Добавление вложения из файла
*/
function addAttachment($filename, $name = false)
{
$this->mailer->addAttachment($filename, $name);
}
/**
* Отправка почты
*/
function send()
{
return $this->mailer->send();
}
}

32
src/Model/Factory.php Normal file
View file

@ -0,0 +1,32 @@
<?php
class Model_Factory
{
static $shortcut = "model";
public $db;
public $_registry;
public $_shortcut;
public function __construct (/*.Database.*/ $db, Settings $_registry = null)
{
$this->db = $db;
$this->_registry = $_registry;
}
/**
* Создает модель
* @param string $name
* @return model
*/
public function getModel ($name)
{
$modelName = "Mapper_" . $name;
$model = new $modelName();
$model->db = $this->db;
$model->factory = $this;
$model->_registry = $this->_registry;
$model->setUp();
//
return $model;
}
}

View file

@ -3,7 +3,7 @@
/** /**
* Проверка формата электронной почты * Проверка формата электронной почты
*/ */
class Validator_Rule_Code extends Rule_Abstract class Validator_Rule_Code extends Validator_Rule_Abstract
{ {
public function getErrorMsg() public function getErrorMsg()
{ {

View file

@ -3,7 +3,7 @@
/** /**
* Проверка формата даты * Проверка формата даты
*/ */
class Validator_Rule_Count extends Rule_Abstract class Validator_Rule_Count extends Validator_Rule_Abstract
{ {
public $size = 1; public $size = 1;
public $max = false; public $max = false;

View file

@ -3,7 +3,7 @@
/** /**
* Проверка формата времени * Проверка формата времени
*/ */
class Validator_Rule_IsFile extends Rule_Abstract class Validator_Rule_IsFile extends Validator_Rule_Abstract
{ {
private $type = array(); private $type = array();
private $maxsize = 1024; private $maxsize = 1024;

View file

@ -44,6 +44,7 @@ class Validator_Validator
// Список правил // Список правил
if (! isset($value['validate'])) continue; if (! isset($value['validate'])) continue;
$rules = explode("|", $value['validate']); $rules = explode("|", $value['validate']);
foreach ($rules as $rule) { foreach ($rules as $rule) {
// Список параметров правила // Список параметров правила
$rule_param = explode(",", $rule); $rule_param = explode(",", $rule);
@ -61,14 +62,14 @@ class Validator_Validator
$ruleObj->$p_name = $p_value; $ruleObj->$p_name = $p_value;
} }
$this->addRule($ruleObj); $this->addRule($ruleObj);
} else { } else if (!empty($rule)) {
throw new Exception('Unknown validation rule "' . $rule . "'"); throw new Exception('Unknown validation rule "' . $rule . "'");
} }
} }
} }
} }
public function addRule(/*.any.*/&$rule) { public function addRule(/*.any.*/$rule) {
if (is_array($rule)) { if (is_array($rule)) {
$this->chain = array_merge($this->chain, $rule); $this->chain = array_merge($this->chain, $rule);
} else { } else {

57
src/View/Pages.php Normal file
View file

@ -0,0 +1,57 @@
<?php
/**
* @package system.widgets
*/
class View_Pages
{
static $range = 5;
static function getPages($page, $onpage, $count, $prefix = '?')
{
$n = ceil($count / $onpage);
if ($page > $n) $page = $n;
if ($page < 1) $page = 1;
$url = 'page=';
$result = array();
for ($i = max($page - self::$range, 1); $i <= min($n, $page + self::$range); $i++) {
$result [] = array('page' => $i, 'href' => ($i != $page) ? self::href($prefix, $url . $i) : false);
}
return array(
'all' => ($n > 1),
'list' => $result,
'first' => self::href($prefix, $url . 1),
'last' => self::href($prefix, $url . $n),
'next' => ($page == $n)? false : self::href($prefix, $url . ($page + 1)) ,
'prev' => ($page == 1)? false : self::href($prefix, $url . ($page - 1)));
}
/**
* @deprecated
* @param $page int номер страницы
* @param $onpage int количество элем на странице
* @return string
*/
static function getLimit(/*.number.*/$page, /*.number.*/$onpage) {
if ($page <= 0) { $page = 1; }
return "LIMIT $onpage OFFSET " . ($page - 1) * $onpage;
}
/**
* @param $page int номер страницы
* @param $onpage int количество элем на странице
* @return array
*/
static function _getLimit($page, $onpage) {
if ($page <= 0) { $page = 1; }
return array(
'count' => $onpage,
'start' => ($page - 1) * $onpage,
);
}
static function href($prefix, $x) {
return $prefix . $x;
}
}