meraproject/module/ms/portal/section/model.php

321 lines
12 KiB
PHP
Raw Normal View History

<?
namespace ms\portal;
use common\Page;
use core\core\structure\eRowClick;
use core\db\structure\Column as C;
use core\db\structure\eColumnType;
use core\site\Theme;
use core\site\theme\structure\eThemes;
use ms\ms\structure\eTab;
use ms\ms\structure\eTabType;
use ms\ms\structure\msTo;
use ui\form\structure\eInputType;
use ui\Form;
use ui\form\structure\eInputValidation;
use ui\input\Input;
use core\lang\structure\LangVariable as V;
use ms\ms\structure\msModuleTable;
use ms\portal\section\structure\msPortalSectionLang as Vars;
class Section extends msModuleTable {
static $self;
static $table_name = 'msPortalSection';
static $controller = 'ms.portal.section';
static $ID = 'id';
static $NAME = 'name';
static $PORTAL = 'portal';
static $THEME = 'theme';
static $PATH = 'path';
static $DATA = 'data';
static $ACCOUNT = 'account';
static $CREATED = 'created';
static $UPDATED = 'updated';
static function getTitle(){return V::get(Vars::$MODULE_NAME);}
static function getSystemLangValues():array{ return Vars::getArray(); }
public function _update(\Where $w, array $values) {
$values[self::$UPDATED] = time();
return parent::_update($w, $values);
}
public static function installUniques() {
\DB::addIndex(self::$table_name,self::$PORTAL);
\DB::addIndex(self::$table_name,self::$PATH);
\DB::addIndexManyColumns(self::$table_name,[self::$PORTAL,self::$PATH]);
}
public static function add($values){
self::insert($values);
}
public static function afterUadd($values, $id, $result) {
$res = parent::afterUadd($values, $id, $result);
if($c = $values[self::$THEME]){
if ($C = Theme::init($c)) {
$section = self::getByID($id);
$options = $C::getOptions();
$keys = array_keys($options);
$data = json_decode($section[self::$DATA],true);
foreach ($keys as $k) {
if(isset($values[$k])) {
$data[$k] = $values[$k];
}
}
if($data) {
self::updateById($id, [self::$DATA => je($data)]);
}
}
}
return $res;
}
public static function checkUserAddAccess(array $values = [], int $id = 0, bool $isEdit = false): bool {
//return parent::checkUserAddAccess($values, $id, $isEdit); // TODO: Change the autogenerated stub
return true;
}
public static function getEditTabs($values=[]) {
$id = $values[self::$ID];
return
[
[
eTab::NAME=>'Редактировать',
eTab::TYPE=>eTabType::FORM,
eTab::CONTENT=>function($values=[]){
return self::_getForm($values, static::getFormOptions($values));
},
],
[
eTab::NAME=>'Статичные страницы',
eTab::TYPE=>eTabType::TABLE,
eTab::CONTENT=>function($values=[]){
$justData = boolval($values['justData']);
$id = $values[self::$ID];
$o = [
\Query::WHERE=>new \Where(\Where::_and([
\Where::_operator(Page::$TO,'=',msTo::SECTION),
\Where::_operator(Page::$OID,'=',$id),
])),
\ModuleTable::ROW_CLICK => $justData ? eRowClick::CARD : eRowClick::OPEN_UADD,
\ModuleTable::FORM_INIT_DATA=>[
Page::$TO => msTo::SECTION,
Page::$OID => $id,
],
\ModuleTable::TABLE_ID => self::$table_name.'_'.Page::$table_name.'_'.$id
];
return $justData ? Page::getTableData( $o ) : Page::drawTable( $o );
},
],
[
eTab::NAME=>'Код в тег HEAD',
eTab::TYPE=>eTabType::TABLE,
eTab::CONTENT=>function($values=[]){
$justData = boolval($values['justData']);
$id = $values[self::$ID];
$o = [
\Query::WHERE=>new \Where(\Where::_and([
\Where::_operator(Script::$TO,'=',msTo::SECTION),
\Where::_operator(Script::$OID,'=',$id),
])),
\ModuleTable::ROW_CLICK => $justData ? eRowClick::CARD : eRowClick::OPEN_UADD,
\Query::SORT=>Script::$POS,
\ModuleTable::FORM_INIT_DATA=>[
Script::$TO => msTo::SECTION,
Script::$OID => $id,
],
\ModuleTable::TABLE_ID => self::$table_name.'_'.Script::$table_name.'_'.$id
];
return $justData ? Script::getTableData( $o ) : Script::drawTable( $o );
},
],
];
}
static function getByPath($path,$portal_id){
$portal_id = intval($portal_id);
$res = null;
if($portal_id) {
$r = self::select([
\Query::WHERE => new \Where(\Where::_and([
\Where::_operator(self::$PATH, '=', $path),
\Where::_operator(self::$PORTAL, '=', $portal_id),
])),
\Query::COUNT => 1,
],true);
if(count($r)==1) {
$res = array_pop($r);
}
}
return $res;
}
public static function afterInstall() {
\DB::addUnique(self::$table_name,self::$table_name.'_unique',[self::$PORTAL,self::$PATH]);
parent::afterInstall(); // TODO: Change the autogenerated stub
}
static function getForm($values = [], $options = []) :array {
return [
self::getCommonFormInputs(),
[
Form::VIEW=>FORM::INPUT,
Form::TYPE=>eInputType::HIDDEN,
Form::KEY_VALUE=>self::$PORTAL,
],
[
Form::VIEW=>Form::ROW,
Form::COLS => [
[
Form::VIEW =>Form::INPUT,
Form::COL_CLASSES =>'c c-1-3',
Form::KEY_VALUE =>self::$NAME,
Form::TYPE =>eInputType::TEXT,
Form::INPUT_OPT => [
Input::PLACEHOLDER => $c = V::get(Vars::$NAME),
Input::LABEL => $c,
],
],
[
Form::VIEW =>Form::INPUT,
Form::COL_CLASSES =>'c c-1-3',
Form::KEY_VALUE =>self::$PATH,
Form::TYPE =>eInputType::TEXT,
Form::INPUT_OPT => [
Input::PLACEHOLDER => $c = V::get(Vars::$PATH),
Input::LABEL => $c,
Input::VALIDATION=>[
//eInputValidation::NOT_EMPTY,
//eInputValidation::REQUIRED,
],
],
],
[
Form::VIEW =>Form::INPUT,
Form::COL_CLASSES =>'c c-1-3',
Form::KEY_VALUE =>self::$THEME,
Form::TYPE =>eInputType::SELECT,
Form::INPUT_OPT => [
Input::PLACEHOLDER => $c = V::get(Vars::$THEME),
Input::LABEL => $c,
Input::OPTIONS => eThemes::getMyArray(),
],
],
]
],
[
Form::VIEW=>FORM::INPUT,
Form::TYPE=>eInputType::SCRIPT,
Form::INPUT_OPT=>[
Input::VALUE=>'$.fn.SECTION(\'initChangingTheme\','.je(($c = $values[self::$DATA])?$c:[]).')',
],
],
[
Form::VIEW=>FORM::INPUT,
Form::TYPE=>eInputType::HTML,
Form::INPUT_OPT=>[
Input::VALUE=>'<div class="loaded_form"></div>',
],
],
self::getCommonFormSubmits($values),
];
}
static function columnInfo() : array {
return [
new C([
C::VAR_NAME =>&self::$ID,
C::TYPE =>eColumnType::INT,
C::AUTO_INCREMENT =>true,
C::PRIMARY =>true,
C::DEFAULT =>0,
C::HIDDEN =>true,
C::TH =>V::get(Vars::$ID),
]),
new C([
C::VAR_NAME => &self::$NAME,
C::TYPE => eColumnType::VARCHAR,
C::LENGTH => 1023,
C::TH => V::get(Vars::$NAME),
]),
new C([
C::VAR_NAME => &self::$PATH,
C::TYPE => eColumnType::VARCHAR,
C::LENGTH => 63,
C::TH => V::get(Vars::$PATH),
]),
new C([
C::VAR_NAME => &self::$PORTAL,
C::TYPE => eColumnType::INT,
C::LENGTH => 11,
C::TH => V::get(Vars::$PORTAL),
C::HIDDEN => true,
]),
new C([
C::VAR_NAME => &self::$THEME,
C::TYPE => eColumnType::INT,
C::LENGTH => 11,
C::TH => V::get(Vars::$THEME),
C::FUNC_VALUE => function($v){
return eThemes::getName($v[self::$THEME]);
}
]),
new C([
C::VAR_NAME => &self::$DATA,
C::TYPE => eColumnType::TEXT,
//C::HIDDEN => true,
C::TH => V::get(Vars::$DATA),
c::FUNC_VALUE_DATA => function($v){
return 'Настройки';
},
c::FUNC_VALUE => function($v){
return 'Настройки';
},
]),
new C([
C::VAR_NAME => &self::$ACCOUNT,
C::TYPE => eColumnType::INT,
C::LENGTH => 11,
C::TH => V::get(Vars::$ACCOUNT),
C::DEFAULT => intval(UID),
c::HIDDEN=>true,
c::FUNC_VALUE => function($v){
if($id = $v[self::$ACCOUNT]) {
return \Account::getName( \Account::getByID($id) );
} else return '-';
},
]),
new C([
C::VAR_NAME => &self::$CREATED,
C::TYPE => eColumnType::INT,
C::LENGTH => 11,
C::TH => V::get(Vars::$CREATED),
C::DEFAULT => time(),
c::FUNC_VALUE => function($v){return self::formatDate($v[self::$CREATED]);},
c::HIDDEN=>true,
]),
new C([
C::VAR_NAME => &self::$UPDATED,
C::TYPE => eColumnType::INT,
C::DEFAULT => time(),
C::TH => V::get(Vars::$UPDATED),
c::FUNC_VALUE => function($v){return self::formatDate($v[self::$UPDATED]);},
c::HIDDEN=>true,
]),
];
}
}
new Section();
///