%PDF- %PDF-
Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/modules/scrollup/models/ |
Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/modules/scrollup/models/ConfigureForm.php |
<?php namespace gm\humhub\modules\scrollup\models; use humhub\modules\ui\icon\widgets\Icon; use Yii; use yii\base\Model; /** * ConfigureForm defines the configurable fields. */ class ConfigureForm extends Model { const REGEX_COLOR = '/(#([0-9a-f]{3}){1,2}|(rgba|hsla)\(\d{1,3}%?(,\s?\d{1,3}%?){2},\s?(1|0?\.\d+)\)|(rgb|hsl)\(\d{1,3}%?(,\s?\d{1,3}%?\)){2})/'; const REGEX_POSITION = '/(left|right|top|bottom) *: *([0-9]+) *(px|em|ex|%|in|cn|mm|pt|pc)/'; public $position; public $color; /** * @inheritdoc */ public function rules() { return [ ['position', 'string'], ['position', 'validatePosition'], ['color', 'string'], ['color', 'validateColor'], ]; } public function validateColor() { if(empty($this->color)) { return; } preg_match_all(static::REGEX_COLOR, $this->color, $matches, PREG_SET_ORDER); if(!isset($matches[0][0])) { $this->addError('color', Yii::t('ScrollupModule.config', 'Invalid color!')); } else { $this->color = $matches[0][0]; } } public function validatePosition() { if(empty($this->position)) { return; } preg_match_all(static::REGEX_POSITION, $this->position, $matches, PREG_SET_ORDER); $result = ''; $position = []; foreach ($matches as $match) { if(in_array($match[1], $position, true)) { continue; } $position[] = $match[1]; $result .= $match[1].':'.$match[2].$match[3].';'; } $this->position = $result; } public function getConfig() { $this->loadSettings(); return [ 'buttonStyle' => $this->getStyle(), 'isCustomPosition' => !empty($this->position), 'icon' => Icon::get('chevron-up'), 'scrollTop' => 300 ]; } public function getStyle() { $result = ['background-color' => $this->color]; if(!empty($this->position)) { preg_match_all(static::REGEX_POSITION, $this->position, $matches, PREG_SET_ORDER); foreach ($matches as $match) { $result[$match[1]] = $match[2].$match[3]; } } return $result; } /** * @inheritdoc */ public function attributeLabels() { return [ 'position' => Yii::t('ScrollupModule.config','Position:'), 'color' => Yii::t('ScrollupModule.config','Color:') ]; } /** * @inheritdoc */ public function attributeHints() { return [ 'position' => Yii::t('ScrollupModule.config','e.g: <code>left: 30px;</code> or <code>right: 30px;</code> (default: calculated center of stream sidebar)'), 'color' => Yii::t('ScrollupModule.config', 'e.g. <code>#000000</code> (default: your themes @default color variable).') ]; } public function loadSettings() { $this->position = Yii::$app->getModule('scrollup')->settings->get('position'); $this->color = Yii::$app->getModule('scrollup')->settings->get('color', Yii::$app->getView()->theme->variable('default')); return true; } public function save() { if(!$this->validate()) { return false; } if(empty($this->color)) { $this->color = Yii::$app->getView()->theme->variable('default'); } Yii::$app->getModule('scrollup')->settings->set('position', $this->position); Yii::$app->getModule('scrollup')->settings->set('color', $this->color); return true; } }