552 lines
24 KiB
PHP
552 lines
24 KiB
PHP
<?
|
||
namespace vcard;
|
||
|
||
use common\Image;
|
||
use core\db\structure\Column as C;
|
||
use core\db\structure\eColumnType;
|
||
use ms\MS;
|
||
use themes\Mstome;
|
||
use ui\form\structure\eInputType;
|
||
use ui\Form;
|
||
use ui\input\Input;
|
||
use core\lang\structure\LangVariable as V;
|
||
use ms\ms\structure\msModuleTable;
|
||
use vcard\card\structure\eBackgroundClass;
|
||
use vcard\card\structure\eTemplate;
|
||
use vcard\card\structure\eVcardPayType;
|
||
use vcard\card\structure\vcardCardLang as Vars;
|
||
use vcard\profile as CardProfile;
|
||
|
||
|
||
class Card extends msModuleTable {
|
||
static $self;
|
||
static $table_name = 'vcardCard';
|
||
static $controller = 'vcard.card';
|
||
|
||
static $ID = 'id';
|
||
static $NAME = 'name';
|
||
|
||
static $TEXT_ID = 'text_id';
|
||
static $HELLO = 'hello';
|
||
static $TEXT = 'text';
|
||
static $PAGE_BACKGROUND = 'page_background';
|
||
static $PAGE_CLASS = 'page_class';
|
||
static $CARD_BACKGROUND = 'card_background';
|
||
static $CARD_CLASS = 'card_class';
|
||
static $AVATAR = 'avatar';
|
||
static $ICON = 'icon';
|
||
static $TEMPLATE = 'template';
|
||
static $IS_LOGO_FOOTER = 'is_logo_footer';
|
||
static $PROFILE = 'profile';
|
||
static $PORTAL = 'portal';
|
||
static $FB_PIXEL = 'fb_pixel';
|
||
static $VK_PIXEL = 'vk_pixel';
|
||
static $YA_METRIC = 'ya_metric';
|
||
static $GA_METRIC = 'ga_metric';
|
||
|
||
static $BAN = 'ban';
|
||
static $ADULT = 'adult';
|
||
static $MODERATE = 'moderate';
|
||
static $ACCEPT = 'accept';
|
||
|
||
static $PAY_TYPE = 'pay_type';
|
||
static $EXPIRE = 'expire';
|
||
static $VIEWS = 'views';
|
||
|
||
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();
|
||
$values[self::$MODERATE] = isset($values[self::$MODERATE]) ? $values[self::$MODERATE] : 0;
|
||
return parent::_update($w, $values);
|
||
}
|
||
static function setNeedModerate($card_id){
|
||
self::updateById($card_id,[self::$MODERATE=>0]);
|
||
}
|
||
|
||
static function check_bg_class($x){
|
||
return in_array($x,array_keys(eBackgroundClass::getArray())) ? $x : 0;
|
||
}
|
||
|
||
static function setBan($card_id,$is_ban){
|
||
self::updateById($card_id,[self::$BAN=>$is_ban?1:0]);
|
||
}
|
||
static function setAdult($card_id,$is_adult){
|
||
self::updateById($card_id,[self::$ADULT=>$is_adult?1:0]);
|
||
}
|
||
|
||
static function getAllByProfile($pid,$isAssoc = true){
|
||
$pid = intval($pid);
|
||
$res = [];
|
||
if($pid) {
|
||
$res = self::select([
|
||
\Query::WHERE => new \Where(\Where::_and([
|
||
\Where::_operator(self::$PROFILE,'=',$pid),
|
||
]))
|
||
],$isAssoc);
|
||
}
|
||
return $res;
|
||
}
|
||
|
||
static function getByTextIDAndPortal($text_id,$portal){
|
||
$res = null;
|
||
$r = self::select([
|
||
\Query::COUNT => 1,
|
||
\Query::WHERE => new \Where(\Where::_and([
|
||
\Where::_operator(self::$TEXT_ID,'=',$text_id),
|
||
\Where::_operator(self::$PORTAL,'=',$portal),
|
||
]))
|
||
],false);
|
||
if(\DB::numRows($r)){
|
||
$res = \DB::fetch($r);
|
||
}
|
||
return $res;
|
||
}
|
||
|
||
public static function installUniques() {
|
||
\DB::addIndex(self::$table_name,self::$TEXT_ID);
|
||
\DB::addIndex(self::$table_name,self::$PORTAL);
|
||
\DB::addIndex(self::$table_name,self::$PROFILE);
|
||
\DB::addIndex(self::$table_name,self::$ACCOUNT);
|
||
}
|
||
|
||
static function getBlocks($card_id,$options=[]){
|
||
$r = Block::getByCard($card_id);
|
||
$res = [];
|
||
foreach ($r as $k=>$v){
|
||
$res[] = Block::format($v,$options);
|
||
}
|
||
return $res;
|
||
}
|
||
|
||
static function view($id){
|
||
$id = intval($id);
|
||
$CARD = self::getByID($id);
|
||
$newViews = $CARD[self::$VIEWS]+1;
|
||
Card::updateById($id,[
|
||
self::$VIEWS => $newViews
|
||
]);
|
||
}
|
||
|
||
static function getCardLink($v){
|
||
return \Site::sectionUrl($v[self::$TEXT_ID],true);
|
||
}
|
||
|
||
static function format($v,$options=[]){
|
||
$images_ids = [];
|
||
$images = [];
|
||
$cloud = $options['cloud'];
|
||
|
||
$profile = CardProfile::getByID($v[self::$PROFILE]);
|
||
$isProfileExpire = CardProfile::isExpire($profile);
|
||
|
||
if($c = intval($v[self::$AVATAR])) $images_ids[] = $c;
|
||
if($c = intval($v[self::$PAGE_BACKGROUND])) $images_ids[] = $c;
|
||
if($c = intval($v[self::$CARD_BACKGROUND])) $images_ids[] = $c;
|
||
if($c = intval($v[self::$ICON])) $images_ids[] = $c;
|
||
if($images_ids){
|
||
$images = Image::getByIDS($images_ids);
|
||
//*
|
||
if($images[$v[self::$PAGE_BACKGROUND]]) {
|
||
$images[$v[self::$PAGE_BACKGROUND]] = Image::imageResize($images[$v[self::$PAGE_BACKGROUND]],1920,0,90,['cloud'=>$cloud]);
|
||
}
|
||
if($images[$v[self::$CARD_BACKGROUND]]) {
|
||
//$images[$v[self::$CARD_BACKGROUND]] = Image::imageResize($images[$v[self::$CARD_BACKGROUND]],600,0,100,['crop'=>'center','cloud'=>$cloud]);
|
||
$images[$v[self::$CARD_BACKGROUND]] = Image::imageResize($images[$v[self::$CARD_BACKGROUND]],0,0,90,['cloud'=>$cloud]);;
|
||
}
|
||
if($images[$v[self::$AVATAR]]) {
|
||
$images[$v[self::$AVATAR]] = Image::imageResize($images[$v[self::$AVATAR]],82,82,100,['crop'=>'center','cloud'=>$cloud]);
|
||
}
|
||
if($images[$v[self::$ICON]]) {
|
||
$images[$v[self::$ICON]] = Image::imageResize($images[$v[self::$ICON]],34,34,100,['crop'=>'center','cloud'=>$cloud]);
|
||
}
|
||
/**/
|
||
}
|
||
|
||
|
||
|
||
$footer = '';
|
||
$isAdult = boolval($v[self::$ADULT]);
|
||
$isBan = boolval($v[self::$BAN]);
|
||
|
||
|
||
$ad = '';
|
||
if($isAdult) {
|
||
if($isProfileExpire) {
|
||
$ad = '';
|
||
}
|
||
$footer = '<div id="adult">🔞 <small>На данной странице размещён контент для взрослых или ссылается на таковой. Пожалуйста, покиньте страницу, если по закону вам нельзя наблюдать такой контент.</small> </div>';
|
||
}
|
||
|
||
|
||
return [
|
||
'id' => intval($v[self::$ID]), // number
|
||
'title' => $v[self::$NAME], // string
|
||
'account' => intval($v[self::$ACCOUNT]), // number
|
||
'text_id' => $v[self::$TEXT_ID], // string
|
||
'link' => self::getCardLink($v), // string
|
||
'hello' => $v[self::$HELLO], // string
|
||
'text' => $v[self::$TEXT], // string
|
||
'page_bg' => ($c = $images[$v[self::$PAGE_BACKGROUND]]) ? $c : '', // string
|
||
'page_class' => intval($v[self::$PAGE_CLASS]), // number
|
||
'card_bg' => ($c = $images[$v[self::$CARD_BACKGROUND]]) ? $c : '', // string
|
||
'card_class' => intval($v[self::$CARD_CLASS]), // number
|
||
'avatar' => ($c = $images[$v[self::$AVATAR]]) ? $c : '', // string
|
||
'icon' => ($c = $images[$v[self::$ICON]]) ? $c : \Site::themeUrl('pics/logo.svg',true), // string
|
||
'template' => intval($v[self::$TEMPLATE]), // ETemplate
|
||
'is_logo_footer' => boolval($v[self::$IS_LOGO_FOOTER]), // boolean
|
||
'fb_pixel' => $v[self::$FB_PIXEL], // string
|
||
'vk_pixel' => $v[self::$VK_PIXEL], // string
|
||
'ya_metric' => $v[self::$YA_METRIC], // string
|
||
'ga_metric' => $v[self::$GA_METRIC], // string
|
||
'blocks' => self::getBlocks($v[self::$ID],$options), // string
|
||
'pay_type' => intval($v[self::$PAY_TYPE]),
|
||
'expire' => $v[self::$EXPIRE]!='0000-00-00' ? date('d.m.Y',strtotime($v[self::$EXPIRE])) : '0000-00-00',
|
||
'views' => intval($v[self::$VIEWS]),
|
||
'is_adult' => boolval($v[self::$ADULT]),
|
||
'is_ban' => boolval($v[self::$BAN]),
|
||
'ad' => $ad,
|
||
'footer' => $footer,
|
||
];
|
||
}
|
||
|
||
static function getForm($values = [], $options = []) :array {
|
||
return [
|
||
self::getCommonFormInputs(),
|
||
[
|
||
Form::VIEW=>Form::ROW,
|
||
Form::COLS => [
|
||
[
|
||
Form::VIEW =>Form::INPUT,
|
||
Form::COL_CLASSES =>'col-12',
|
||
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::ROW,
|
||
Form::COLS => [
|
||
[
|
||
Form::VIEW =>Form::INPUT,
|
||
Form::COL_CLASSES =>'c-100 ',
|
||
Form::KEY_VALUE =>self::$BAN,
|
||
Form::TYPE =>eInputType::SWITCH_IOS,
|
||
Form::INPUT_OPT => [
|
||
Input::PLACEHOLDER => $c = V::get(Vars::$BAN),
|
||
Input::LABEL => '',
|
||
Input::VALUE => 1,
|
||
Input::CHECKED => boolval($values[self::$BAN]),
|
||
],
|
||
],
|
||
[
|
||
Form::VIEW =>Form::INPUT,
|
||
Form::COL_CLASSES =>'c-100 ',
|
||
Form::KEY_VALUE =>self::$ADULT,
|
||
Form::TYPE =>eInputType::SWITCH_IOS,
|
||
Form::INPUT_OPT => [
|
||
Input::PLACEHOLDER => $c = V::get(Vars::$ADULT),
|
||
Input::LABEL => '',
|
||
Input::VALUE => 1,
|
||
Input::CHECKED => boolval($values[self::$ADULT]),
|
||
],
|
||
],
|
||
[
|
||
Form::VIEW =>Form::INPUT,
|
||
Form::COL_CLASSES =>'c-100 ',
|
||
Form::KEY_VALUE =>self::$MODERATE,
|
||
Form::TYPE =>eInputType::SWITCH_IOS,
|
||
Form::INPUT_OPT => [
|
||
Input::PLACEHOLDER => $c = V::get(Vars::$MODERATE),
|
||
Input::LABEL => '',
|
||
Input::VALUE => 1,
|
||
Input::CHECKED => boolval($values[self::$MODERATE]),
|
||
],
|
||
],
|
||
[
|
||
Form::VIEW =>Form::INPUT,
|
||
Form::COL_CLASSES =>'c-100 ',
|
||
Form::KEY_VALUE =>self::$ACCEPT,
|
||
Form::TYPE =>eInputType::SWITCH_IOS,
|
||
Form::INPUT_OPT => [
|
||
Input::PLACEHOLDER => $c = V::get(Vars::$ACCEPT),
|
||
Input::LABEL => '',
|
||
Input::VALUE => 1,
|
||
Input::CHECKED => boolval($values[self::$ACCEPT]),
|
||
],
|
||
],
|
||
],
|
||
],
|
||
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::DEFAULT => 'Моё имя',
|
||
C::TH => V::get(Vars::$NAME),
|
||
C::FUNC_VALUE_DATA => function($v){
|
||
$profile = \Profile::getByID($v[self::$PROFILE]);
|
||
return $v[self::$NAME].
|
||
('<br/>'.$profile[\Profile::$LOGIN])
|
||
;
|
||
}
|
||
]),
|
||
|
||
|
||
new C([
|
||
C::VAR_NAME => &self::$PAY_TYPE,
|
||
C::TYPE => eColumnType::TINYINT,
|
||
C::LENGTH => 1,
|
||
C::DEFAULT => eVcardPayType::FREE,
|
||
C::HIDDEN => true,
|
||
]),
|
||
new C([
|
||
C::VAR_NAME => &self::$EXPIRE,
|
||
C::TYPE => eColumnType::DATE,
|
||
C::HIDDEN => true,
|
||
]),
|
||
new C([
|
||
C::VAR_NAME => &self::$VIEWS,
|
||
C::TYPE => eColumnType::INT,
|
||
C::DEFAULT => 0,
|
||
C::HIDDEN => true,
|
||
]),
|
||
|
||
|
||
|
||
new C([
|
||
C::VAR_NAME => &self::$TEXT_ID,
|
||
C::TYPE => eColumnType::VARCHAR,
|
||
C::LENGTH => 127,
|
||
C::DEFAULT => 'card'.time(),
|
||
C::TH => V::get(Vars::$TEXT_ID),
|
||
C::FUNC_VALUE_DATA => function($v){
|
||
//$img = Image::getByID($v[self::$AVATAR]);
|
||
return '<a class="link" href="/'.h($v[self::$TEXT_ID]).'/" target="_blank">'.h($v[self::$TEXT_ID]).'</a>';// Image::imageResize($img,100,100,90,['crop'=>'center','cloud'=>Mstome::$CLOUD]);
|
||
}
|
||
]),
|
||
new C([
|
||
C::VAR_NAME => &self::$HELLO,
|
||
C::TYPE => eColumnType::TEXT,
|
||
C::DEFAULT => 'Всем привет!😉',
|
||
C::TH => V::get(Vars::$HELLO),
|
||
C::TD_CLASS => 'text_wrap',
|
||
]),
|
||
new C([
|
||
C::VAR_NAME => &self::$TEXT,
|
||
C::TYPE => eColumnType::TEXT,
|
||
C::DEFAULT => 'Мы на связи и отвечаем в течение 5 минут',
|
||
C::TH => V::get(Vars::$TEXT),
|
||
C::TD_CLASS => 'text_wrap',
|
||
]),
|
||
new C([
|
||
C::VAR_NAME => &self::$PAGE_BACKGROUND,
|
||
C::TYPE => eColumnType::INT,
|
||
C::DEFAULT => 0,
|
||
C::TH => V::get(Vars::$PAGE_BACKGROUND),
|
||
C::HIDDEN => true,
|
||
]),
|
||
new C([
|
||
C::VAR_NAME => &self::$PAGE_CLASS,
|
||
C::TYPE => eColumnType::INT,
|
||
C::DEFAULT => eBackgroundClass::PAPAYA,
|
||
C::TH => V::get(Vars::$PAGE_CLASS),
|
||
C::HIDDEN => true,
|
||
]),
|
||
new C([
|
||
C::VAR_NAME => &self::$CARD_BACKGROUND,
|
||
C::TYPE => eColumnType::INT,
|
||
C::DEFAULT => 0,
|
||
C::TH => V::get(Vars::$CARD_BACKGROUND),
|
||
C::HIDDEN => true,
|
||
]),
|
||
new C([
|
||
C::VAR_NAME => &self::$CARD_CLASS,
|
||
C::TYPE => eColumnType::INT,
|
||
C::DEFAULT => eBackgroundClass::PAPAYA,
|
||
C::TH => V::get(Vars::$CARD_CLASS),
|
||
C::HIDDEN => true,
|
||
]),
|
||
new C([
|
||
C::VAR_NAME => &self::$AVATAR,
|
||
C::TYPE => eColumnType::INT,
|
||
C::DEFAULT => 0,
|
||
C::TH => V::get(Vars::$AVATAR),
|
||
C::FUNC_VALUE_DATA => function($v){
|
||
$img = Image::getByID($v[self::$AVATAR]);
|
||
return Image::imageResize($img,100,100,90,['crop'=>'center','cloud'=>Mstome::$CLOUD]);
|
||
}
|
||
]),
|
||
new C([
|
||
C::VAR_NAME => &self::$ICON,
|
||
C::TYPE => eColumnType::INT,
|
||
C::DEFAULT => 0,
|
||
C::TH => V::get(Vars::$ICON),
|
||
C::HIDDEN => true,
|
||
]),
|
||
new C([
|
||
C::VAR_NAME => &self::$TEMPLATE,
|
||
C::TYPE => eColumnType::TINYINT,
|
||
C::DEFAULT => eTemplate::CLASSIC,
|
||
C::TH => V::get(Vars::$TEMPLATE),
|
||
C::HIDDEN => true,
|
||
]),
|
||
new C([
|
||
C::VAR_NAME => &self::$IS_LOGO_FOOTER,
|
||
C::TYPE => eColumnType::TINYINT,
|
||
C::LENGTH => 1,
|
||
C::DEFAULT => 0,
|
||
C::TH => V::get(Vars::$IS_LOGO_FOOTER),
|
||
C::HIDDEN => true,
|
||
]),
|
||
new C([
|
||
C::VAR_NAME => &self::$PROFILE,
|
||
C::TYPE => eColumnType::INT,
|
||
C::LENGTH => 11,
|
||
C::DEFAULT => intval(PID),
|
||
C::TH => V::get(Vars::$PROFILE),
|
||
]),
|
||
new C([
|
||
C::VAR_NAME => &self::$PORTAL,
|
||
C::TYPE => eColumnType::INT,
|
||
C::LENGTH => 11,
|
||
C::DEFAULT => intval(\Site::$portal_id),
|
||
C::TH => V::get(Vars::$PORTAL),
|
||
C::HIDDEN => true,
|
||
]),
|
||
|
||
new C([
|
||
C::VAR_NAME => &self::$FB_PIXEL,
|
||
C::TYPE => eColumnType::VARCHAR,
|
||
C::LENGTH => 127,
|
||
C::TH => V::get(Vars::$FB_PIXEL),
|
||
C::HIDDEN => true,
|
||
]),
|
||
new C([
|
||
C::VAR_NAME => &self::$VK_PIXEL,
|
||
C::TYPE => eColumnType::VARCHAR,
|
||
C::LENGTH => 127,
|
||
C::TH => V::get(Vars::$VK_PIXEL),
|
||
C::HIDDEN => true,
|
||
]),
|
||
new C([
|
||
C::VAR_NAME => &self::$YA_METRIC,
|
||
C::TYPE => eColumnType::VARCHAR,
|
||
C::LENGTH => 127,
|
||
C::TH => V::get(Vars::$YA_METRIC),
|
||
C::HIDDEN => true,
|
||
]),
|
||
new C([
|
||
C::VAR_NAME => &self::$GA_METRIC,
|
||
C::TYPE => eColumnType::VARCHAR,
|
||
C::LENGTH => 127,
|
||
C::TH => V::get(Vars::$GA_METRIC),
|
||
C::HIDDEN => true,
|
||
]),
|
||
new C([
|
||
C::VAR_NAME => &self::$BAN,
|
||
C::TYPE => eColumnType::TINYINT,
|
||
C::DEFAULT => 0,
|
||
C::LENGTH => 1,
|
||
C::TH => V::get(Vars::$BAN),
|
||
C::FUNC_VALUE_DATA => function($v){
|
||
return MS::getBoolValText($v[self::$BAN]);
|
||
}
|
||
]),
|
||
new C([
|
||
C::VAR_NAME => &self::$ADULT,
|
||
C::TYPE => eColumnType::TINYINT,
|
||
C::DEFAULT => 0,
|
||
C::LENGTH => 1,
|
||
C::TH => V::get(Vars::$ADULT),
|
||
C::FUNC_VALUE_DATA => function($v){
|
||
return MS::getBoolValText($v[self::$ADULT]);
|
||
}
|
||
]),
|
||
new C([
|
||
C::VAR_NAME => &self::$MODERATE,
|
||
C::TYPE => eColumnType::TINYINT,
|
||
C::DEFAULT => 0,
|
||
C::LENGTH => 1,
|
||
C::TH => V::get(Vars::$MODERATE),
|
||
C::FUNC_VALUE_DATA => function($v){
|
||
return MS::getBoolValText($v[self::$MODERATE]);
|
||
}
|
||
]),
|
||
new C([
|
||
C::VAR_NAME => &self::$ACCEPT,
|
||
C::TYPE => eColumnType::TINYINT,
|
||
C::DEFAULT => 0,
|
||
C::LENGTH => 1,
|
||
C::TH => V::get(Vars::$ACCEPT),
|
||
C::FUNC_VALUE_DATA => function($v){
|
||
return MS::getBoolValText($v[self::$ACCEPT]);
|
||
}
|
||
]),
|
||
|
||
|
||
|
||
|
||
new C([
|
||
C::VAR_NAME => &self::$ACCOUNT,
|
||
C::TYPE => eColumnType::INT,
|
||
C::LENGTH => 11,
|
||
C::TH => V::get(Vars::$ACCOUNT),
|
||
C::DEFAULT => intval(\Site::$owner_id),
|
||
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 Card();
|
||
|
||
|
||
///
|