505 lines
20 KiB
PHP
505 lines
20 KiB
PHP
<?
|
|
|
|
namespace themes;
|
|
|
|
use blog\Blog;
|
|
use blog\News;
|
|
use common\Image;
|
|
use common\Menu;
|
|
use core\site\Theme;
|
|
use core\lang\structure\LangVariable as V;
|
|
use core\site\theme\structure\eThemeOption;
|
|
use core\site\theme\structure\themeLang as Vars;
|
|
use core\Token;
|
|
use ui\Form;
|
|
use ui\form\structure\eInputType;
|
|
use ui\input\Input;
|
|
use core\site\structure\HTMLPage;
|
|
|
|
class Modulebz extends Theme {
|
|
|
|
static $name = 'Modulebz';
|
|
static $themeUrl = 'modulebz';
|
|
|
|
|
|
const BG_CARD_ALPHA = 0.03;
|
|
|
|
static $_BLOG = 'blog';
|
|
static $_PORTFOLIO = 'portfolio';
|
|
static $_SERVICES = 'services';
|
|
static $_UPDATES = 'updates';
|
|
static $_ANNOUNCEMENT = 'announcement';
|
|
static $_TURNKEY = 'turnkey';
|
|
static $_SERVICES_MENU = 'services_menu';
|
|
static $_SOCIALS = 'socials';
|
|
|
|
const PAGE_NEWS = 'news';
|
|
const PAGE_DOMAINS = 'domains';
|
|
const PAGE_DOMAINS_GROUPS = 'domains_groups';
|
|
const PAGE_VCARD_CARD = 'card';
|
|
const PAGE_VCARD_CARD_MODERATE = 'card_moderate';
|
|
const PAGE_PORTFOLIO = 'portfolio';
|
|
const PAGE_SERVICES = 'services';
|
|
const PAGE_MONEY = 'money';
|
|
const PAGE_MODERATION = 'moderation';
|
|
const PAGE_ACADEMY = 'academy';
|
|
const PAGE_STUDENTS = 'students';
|
|
const PAGE_TEACHERS = 'teachers';
|
|
const PAGE_COURSE = 'course';
|
|
const PAGE_TEST = 'test';
|
|
const PAGE_REVIEWS = 'reviews';
|
|
const PAGE_TIME = 'time';
|
|
const PAGE_BASE = 'base';
|
|
const PAGE_PROJECT = 'project';
|
|
const PAGE_COMPANY = 'company';
|
|
const PAGE_POST = 'post';
|
|
const PAGE_TASK = 'task';
|
|
const PAGE_ITEMS = 'items';
|
|
const PAGE_REPORT = 'reports';
|
|
const PAGE_SHOP = 'shop';
|
|
const PAGE_SHOP_REPORT_SALES = 'sales';
|
|
const PAGE_SHOP_REPORT_ITEMS = 'items';
|
|
const PAGE_SHOP_REPORT_MANAGERS = 'managers';
|
|
const PAGE_CATEGORIES = 'categories';
|
|
const PAGE_PROPERTIES = 'properties';
|
|
const PAGE_COMPONENTS = 'components';
|
|
const PAGE_WAREHOUSE = 'warehouse';
|
|
const PAGE_MINUS = 'minus';
|
|
const PAGE_PLUS = 'plus';
|
|
const PAGE_FORECAST = 'forecast';
|
|
const PAGE_ORDERS = 'orders';
|
|
const PAGE_CLIENTS = 'clients';
|
|
const PAGE_CLIENT_TASK = 'client_task';
|
|
const PAGE_DOCS = 'docs';
|
|
const PAGE_UPDATES = 'updates';
|
|
const PAGE_CONTENT = 'content';
|
|
const PAGE_MENU = 'menu';
|
|
const PAGE_PAGE = 'page';
|
|
const PAGE_GALLERY = 'gallery';
|
|
const PAGE_BLOG = 'blog';
|
|
const PAGE_ANNOUNCEMENT = 'announcement';
|
|
const PAGE_FAQ = 'faq';
|
|
const PAGE_KBASE = 'know_base';
|
|
const PAGE_TURNKEY = 'turnkey';
|
|
const PAGE_PIPELINE = 'pipeline';
|
|
const PAGE_GROUP = 'group';
|
|
const PAGE_SITE = 'site';
|
|
const PAGE_SECTION = 'section';
|
|
const PAGE_SECTION_DATA = 'section_data';
|
|
const PAGE_SUPERADMIN = 'superadmin';
|
|
const PAGE_PURCHASES = 'purchases';
|
|
const PAGE_BLOCK = 'block';
|
|
const PAGE_ORDER_BLANK = 'order_blank';
|
|
const PAGE_TARGETS = 'targets';
|
|
const PAGE_EMAIL_TEMPLATE = 'email_template';
|
|
const PAGE_EMAIL_HISTORY = 'email_history';
|
|
const PAGE_ACCUMULATE_GROUP = 'accumulate_group';
|
|
const PAGE_CASHBACK_GROUP = 'cashback_group';
|
|
|
|
const PAGE_AZBUKA_PERIL = 'azbukaperil';
|
|
const PAGE_AZBUKA_PERIL_CATALOG = 'catalog';
|
|
const PAGE_AZBUKA_PERIL_REVIEWS = 'reviews';
|
|
const PAGE_AZBUKA_PERIL_ALSO = 'also';
|
|
const PAGE_AZBUKA_PERIL_ITEM = 'item';
|
|
|
|
/** @var Blog */
|
|
static $BLOG;
|
|
/** @var Blog */
|
|
static $PORTFOLIO;
|
|
/** @var Blog */
|
|
static $SERVICES;
|
|
/** @var Blog */
|
|
static $ANNOUNCEMENT;
|
|
/** @var Blog */
|
|
static $TURNKEY;
|
|
/** @var Blog */
|
|
static $UPDATES;
|
|
/** @var Menu */
|
|
static $SERVICES_MENU;
|
|
/** @var Menu */
|
|
static $SOCIALS;
|
|
|
|
|
|
|
|
static function getUploadToken(){
|
|
$res = 'modulebz_'.\Site::$owner_id.'_'.time();
|
|
$token = Token::getOneEqualByColumn(Token::$ACCOUNT,\Site::$owner_id);
|
|
if(!$token){
|
|
$r = Token::insert([
|
|
Token::$ACCOUNT=>\Site::$owner_id,
|
|
Token::$HASH => $res,
|
|
]);
|
|
} else {
|
|
$res = $token[Token::$HASH];
|
|
}
|
|
return $res;
|
|
}
|
|
|
|
|
|
static function prepare() {
|
|
$data = static::$data;
|
|
$a = self::getOptions();
|
|
foreach ($a as $k=>$v){
|
|
if($v[eThemeOption::CONTROLLER]) {
|
|
if( $id = intval( $data[$k] ) ) {
|
|
$x = strtoupper($k);
|
|
self::$$x = new $v[eThemeOption::CONTROLLER];
|
|
self::$$x->id_for_theme = $id;
|
|
self::$$x->owner_id = self::$owner_id;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
static function echoCrumbs(){
|
|
$res = '';
|
|
if($a = HTMLPage::$head_crumbs){
|
|
$links = '';
|
|
foreach ($a as $k=>$v) $links .= '<span itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a itemprop="item" typeof="WebPage" href="'.$v[1].'"><span itemprop="name">'.$v[0].'</span></a><meta itemprop="position" content="'.($k+1).'" /></span>';
|
|
$res .= '<div class="crumbs" itemscope itemtype="http://schema.org/BreadcrumbList">'.$links.'</div>';
|
|
}
|
|
echo $res;
|
|
}
|
|
|
|
static function getSocialLinksBlock(){
|
|
$res = '<div class="soc"><span>Следите за новостями: </span>';
|
|
$a = self::getSocialLinksData();
|
|
foreach ($a as $v){
|
|
$res .= '<a target="_blank" href="'.$v['link'].'" title="'.$v['title'].'"><div class="soc icon " style="background-image:url('.$v['icon'].')"></div></a>';
|
|
}
|
|
$res .= '</div>';
|
|
return $res;
|
|
}
|
|
static function getSocialLinksData(){
|
|
$res = [];
|
|
$s = self::$SOCIALS->_getStructure();
|
|
foreach ($s[self::$SOCIALS->id_for_theme] as $id){
|
|
$v = $s['base'][$id];
|
|
if($v[Menu::$VIS]) {
|
|
$res[] = [
|
|
'link' => $v[Menu::$LINK],
|
|
'icon' => Image::imageResize($v[Image::$URL], 64, 64, 100, ['crop' => 'center']),
|
|
'title' => $v[Menu::$NAME],
|
|
];
|
|
}
|
|
}
|
|
//foreach ($r as $v) $res[] = self::formatService($v);
|
|
return $res;
|
|
}
|
|
|
|
|
|
static function getServiceLink($v){
|
|
return \Site::portalUrl($v[News::$TEXT_ID]);
|
|
}
|
|
static function formatService($v){
|
|
return [
|
|
'title' => News::getName($v),
|
|
'link' => self::getServiceLink($v),
|
|
//'image' => Image::imageResize($v[Image::$URL],640,480,100,['crop'=>'center']),
|
|
'image' => Image::imageResize($v[Image::$URL],480,320,100,['crop'=>'center']),
|
|
'annotation' => nl2br($v[News::$ANNOTATION]),
|
|
];
|
|
}
|
|
static function getServicesData(){
|
|
$res = [];
|
|
$r = self::$SERVICES->_getNews();
|
|
foreach ($r as $v) $res[] = self::formatService($v);
|
|
return $res;
|
|
}
|
|
static function getServicesFastMenuData(){
|
|
$res = [];
|
|
$s = self::$SERVICES_MENU->_getStructure();
|
|
foreach ($s[self::$SERVICES_MENU->id_for_theme] as $id){
|
|
$v = $s['base'][$id];
|
|
if($v[Menu::$VIS]) {
|
|
$res[] = [
|
|
'link' => \Site::sectionUrl($v[Menu::$LINK]),
|
|
'icon' => Image::imageResize($v[Image::$URL], 64, 64, 100, ['crop' => 'center']),
|
|
'title' => $v[Menu::$NAME],
|
|
];
|
|
}
|
|
}
|
|
//foreach ($r as $v) $res[] = self::formatService($v);
|
|
return $res;
|
|
}
|
|
|
|
|
|
|
|
|
|
static function getPortfolioLink($v){
|
|
return \Site::portalUrl(self::PAGE_PORTFOLIO.'/'.$v[News::$TEXT_ID]);
|
|
}
|
|
static function formatPortfolio($v){
|
|
return [
|
|
'title' => News::getName($v),
|
|
'link' => self::getPortfolioLink($v),
|
|
//'image' => Image::imageResize($v[Image::$URL],640,480,100,['crop'=>'center']),
|
|
'image' => Image::imageResize($v[Image::$URL],1200,580,100,['crop'=>'center']),
|
|
'annotation' => nl2br($v[News::$ANNOTATION]),
|
|
];
|
|
}
|
|
static function getPortfolioAnnotationData(){
|
|
$res = [];
|
|
$r = self::$PORTFOLIO->_getNews();
|
|
foreach ($r as $v) $res[] = self::formatPortfolio($v);
|
|
return $res;
|
|
}
|
|
|
|
static function getNewsLink($v){
|
|
return \Site::portalUrl(self::PAGE_NEWS.'/'.$v[News::$TEXT_ID]);
|
|
}
|
|
static function formatNews($v){
|
|
return [
|
|
'title' => News::getName($v),
|
|
'link' => self::getNewsLink($v),
|
|
//'image' => Image::imageResize($v[Image::$URL],320,215,100,['crop'=>'center']),
|
|
'image' => Image::imageResize($v[Image::$URL],640,480,100,['crop'=>'center']),
|
|
'annotation' => $v[News::$ANNOTATION],
|
|
];
|
|
}
|
|
static function getNewsAnnotationData(){
|
|
$res = [];
|
|
$r = self::$BLOG->_getNews(8);
|
|
foreach ($r as $v) $res[] = self::formatNews($v);
|
|
return $res;
|
|
}
|
|
|
|
|
|
static function getUpdatesLink($v){
|
|
return \Site::portalUrl(self::PAGE_UPDATES.'/'.$v[News::$TEXT_ID]);
|
|
}
|
|
static function formatUpdates($v){
|
|
return [
|
|
'title' => News::getName($v),
|
|
'link' => self::getUpdatesLink($v),
|
|
//'image' => Image::imageResize($v[Image::$URL],320,215,100,['crop'=>'center']),
|
|
'image' => Image::imageResize($v[Image::$URL],480,320,100,['crop'=>'center']),
|
|
'annotation' => $v[News::$ANNOTATION],
|
|
];
|
|
}
|
|
static function getUpdatesAnnotationData(){
|
|
$res = [];
|
|
$r = self::$UPDATES->_getNews(28);
|
|
foreach ($r as $v) $res[] = self::formatUpdates($v);
|
|
return $res;
|
|
}
|
|
static function getAnnouncementLink($v){
|
|
return \Site::portalUrl(self::PAGE_ANNOUNCEMENT.'/'.$v[News::$TEXT_ID]);
|
|
}
|
|
static function formatAnnouncement($v){
|
|
return [
|
|
'title' => News::getName($v),
|
|
'link' => self::getAnnouncementLink($v),
|
|
//'image' => Image::imageResize($v[Image::$URL],320,215,100,['crop'=>'center']),
|
|
'image' => Image::imageResize($v[Image::$URL],640,480,100,['crop'=>'center']),
|
|
'annotation' => $v[News::$ANNOTATION],
|
|
];
|
|
}
|
|
static function getUpdatesAnnouncementData(){
|
|
$res = [];
|
|
$r = self::$ANNOUNCEMENT->_getNews(6);
|
|
foreach ($r as $v) $res[] = self::formatAnnouncement($v);
|
|
return $res;
|
|
}
|
|
|
|
|
|
static function getTurnkeyLink($v){
|
|
return \Site::portalUrl(self::PAGE_TURNKEY.'/'.$v[News::$TEXT_ID]);
|
|
}
|
|
static function formatTurnkey($v){
|
|
return [
|
|
'title' => News::getName($v),
|
|
'link' => self::getTurnkeyLink($v),
|
|
//'image' => Image::imageResize($v[Image::$URL],320,215,100,['crop'=>'center']),
|
|
'image' => Image::imageResize($v[Image::$URL],640,480,100,['crop'=>'center']),
|
|
'annotation' => $v[News::$ANNOTATION],
|
|
];
|
|
}
|
|
static function getTurnkeyAnnotationData(){
|
|
$res = [];
|
|
$r = self::$TURNKEY->_getNews(6);
|
|
foreach ($r as $v) $res[] = self::formatTurnkey($v);
|
|
return $res;
|
|
}
|
|
|
|
|
|
|
|
|
|
public static function getForm(){
|
|
$data = self::$data;
|
|
|
|
$blog = Blog::getNameList([
|
|
\Query::WHERE => new \Where(\Where::_and([
|
|
\Where::_operator(Blog::$ACCOUNT, '=', UID),
|
|
]))
|
|
]);
|
|
|
|
$menu = Menu::getNameList([
|
|
\Query::WHERE => new \Where(\Where::_and([
|
|
\Where::_operator(Menu::$ACCOUNT, '=', UID),
|
|
\Where::_operator(Menu::$PARENT, '=', 0),
|
|
]))
|
|
]);
|
|
|
|
return [
|
|
[
|
|
Form::VIEW=>Form::ROW,
|
|
Form::COLS => [
|
|
[
|
|
Form::VIEW => Form::INPUT,
|
|
Form::COL_CLASSES => 'c c-1-3',
|
|
Form::TYPE => eInputType::SELECT,
|
|
Form::INPUT_OPT => [
|
|
Input::NAME => self::$_BLOG,
|
|
Input::PLACEHOLDER => $c = V::get(Vars::$MODULEBZ_BLOG),
|
|
Input::LABEL => $c,
|
|
Input::OPTIONS => $blog,
|
|
Input::VALUE => $data[self::$_BLOG],
|
|
],
|
|
],
|
|
[
|
|
Form::VIEW => Form::INPUT,
|
|
Form::COL_CLASSES => 'c c-1-3',
|
|
Form::TYPE => eInputType::SELECT,
|
|
Form::INPUT_OPT => [
|
|
Input::NAME => self::$_PORTFOLIO,
|
|
Input::PLACEHOLDER => $c = V::get(Vars::$MODULEBZ_PORTFOLIO),
|
|
Input::LABEL => $c,
|
|
Input::OPTIONS => $blog,
|
|
Input::VALUE => $data[self::$_PORTFOLIO],
|
|
],
|
|
],
|
|
[
|
|
Form::VIEW => Form::INPUT,
|
|
Form::COL_CLASSES => 'c c-1-3',
|
|
Form::TYPE => eInputType::SELECT,
|
|
Form::INPUT_OPT => [
|
|
Input::NAME => self::$_SERVICES,
|
|
Input::PLACEHOLDER => $c = V::get(Vars::$MODULEBZ_SERVICES),
|
|
Input::LABEL => $c,
|
|
Input::OPTIONS => $blog,
|
|
Input::VALUE => $data[self::$_SERVICES],
|
|
],
|
|
],
|
|
[
|
|
Form::VIEW => Form::INPUT,
|
|
Form::COL_CLASSES => 'c c-1-3',
|
|
Form::TYPE => eInputType::SELECT,
|
|
Form::INPUT_OPT => [
|
|
Input::NAME => self::$_UPDATES,
|
|
Input::PLACEHOLDER => $c = V::get(Vars::$MODULEBZ_UPDATES),
|
|
Input::LABEL => $c,
|
|
Input::OPTIONS => $blog,
|
|
Input::VALUE => $data[self::$_UPDATES],
|
|
],
|
|
],
|
|
[
|
|
Form::VIEW => Form::INPUT,
|
|
Form::COL_CLASSES => 'c c-1-3',
|
|
Form::TYPE => eInputType::SELECT,
|
|
Form::INPUT_OPT => [
|
|
Input::NAME => self::$_ANNOUNCEMENT,
|
|
Input::PLACEHOLDER => $c = V::get(Vars::$MODULEBZ_ANNOUNCEMENT),
|
|
Input::LABEL => $c,
|
|
Input::OPTIONS => $blog,
|
|
Input::VALUE => $data[self::$_ANNOUNCEMENT],
|
|
],
|
|
],
|
|
[
|
|
Form::VIEW => Form::INPUT,
|
|
Form::COL_CLASSES => 'c c-1-3',
|
|
Form::TYPE => eInputType::SELECT,
|
|
Form::INPUT_OPT => [
|
|
Input::NAME => self::$_TURNKEY,
|
|
Input::PLACEHOLDER => $c = V::get(Vars::$MODULEBZ_TURNKEY),
|
|
Input::LABEL => $c,
|
|
Input::OPTIONS => $blog,
|
|
Input::VALUE => $data[self::$_TURNKEY],
|
|
],
|
|
],
|
|
[
|
|
Form::VIEW => Form::INPUT,
|
|
Form::COL_CLASSES => 'c c-1-3',
|
|
Form::TYPE => eInputType::SELECT,
|
|
Form::INPUT_OPT => [
|
|
Input::NAME => self::$_SERVICES_MENU,
|
|
Input::PLACEHOLDER => $c = V::get(Vars::$MODULEBZ_SERVICES_MENU),
|
|
Input::LABEL => $c,
|
|
Input::OPTIONS => $menu,
|
|
Input::VALUE => $data[self::$_SERVICES_MENU],
|
|
],
|
|
],
|
|
[
|
|
Form::VIEW => Form::INPUT,
|
|
Form::COL_CLASSES => 'c c-1-3',
|
|
Form::TYPE => eInputType::SELECT,
|
|
Form::INPUT_OPT => [
|
|
Input::NAME => self::$_SOCIALS,
|
|
Input::PLACEHOLDER => $c = V::get(Vars::$MODULEBZ_SOCIALS),
|
|
Input::LABEL => $c,
|
|
Input::OPTIONS => $menu,
|
|
Input::VALUE => $data[self::$_SOCIALS],
|
|
],
|
|
],
|
|
],
|
|
],
|
|
|
|
];
|
|
|
|
}
|
|
|
|
public static function getOptions(): array {
|
|
if (static::$options) return static::$options;
|
|
else {
|
|
$data = static::$data;
|
|
return static::$options = [
|
|
self::$_BLOG => [
|
|
eThemeOption::NAME => V::get(Vars::$MODULEBZ_BLOG),
|
|
eThemeOption::ID => $data[self::$_BLOG],
|
|
eThemeOption::CONTROLLER => 'blog\blog',
|
|
],
|
|
self::$_PORTFOLIO => [
|
|
eThemeOption::NAME => V::get(Vars::$MODULEBZ_PORTFOLIO),
|
|
eThemeOption::ID => $data[self::$_PORTFOLIO],
|
|
eThemeOption::CONTROLLER => 'blog\blog',
|
|
],
|
|
self::$_SERVICES => [
|
|
eThemeOption::NAME => V::get(Vars::$MODULEBZ_SERVICES),
|
|
eThemeOption::ID => $data[self::$_SERVICES],
|
|
eThemeOption::CONTROLLER => 'blog\blog',
|
|
],
|
|
//*
|
|
self::$_UPDATES=> [
|
|
eThemeOption::NAME => V::get(Vars::$MODULEBZ_UPDATES),
|
|
eThemeOption::ID => $data[self::$_UPDATES],
|
|
eThemeOption::CONTROLLER => 'blog\blog',
|
|
],
|
|
self::$_ANNOUNCEMENT=> [
|
|
eThemeOption::NAME => V::get(Vars::$MODULEBZ_ANNOUNCEMENT),
|
|
eThemeOption::ID => $data[self::$_ANNOUNCEMENT],
|
|
eThemeOption::CONTROLLER => 'blog\blog',
|
|
],
|
|
self::$_TURNKEY => [
|
|
eThemeOption::NAME => V::get(Vars::$MODULEBZ_TURNKEY),
|
|
eThemeOption::ID => $data[self::$_TURNKEY],
|
|
eThemeOption::CONTROLLER => 'blog\blog',
|
|
],
|
|
/**/
|
|
self::$_SERVICES_MENU => [
|
|
eThemeOption::NAME => V::get(Vars::$MODULEBZ_SERVICES_MENU),
|
|
eThemeOption::ID => $data[self::$_SERVICES_MENU],
|
|
eThemeOption::CONTROLLER => 'common\menu',
|
|
],
|
|
self::$_SOCIALS => [
|
|
eThemeOption::NAME => V::get(Vars::$MODULEBZ_SOCIALS),
|
|
eThemeOption::ID => $data[self::$_SOCIALS],
|
|
eThemeOption::CONTROLLER => 'common\menu',
|
|
],
|
|
];
|
|
}
|
|
}
|
|
|
|
|
|
|
|
}
|