Description * @copyright Tamaranga */ class Description extends FormBlock { /** @var int Минимальня длина */ public $min = 12; /** @var int Максимальная длина */ public $limit = 4000; public function init() { parent::init(); $this->setTemplate('form/blocks/description', 'listings'); $this->setTitle(_t('item-form', 'Description')); $this->setKey('descr'); } public function data() { $data = parent::data(); $data['descr'] = $this->form->item['descr'] ?? ''; $data['title'] = _t('item-form', 'Description'); return $data; } public function rules(): array { return [ 'descr' => [TYPE_TEXT, function (&$descr) { if (empty($descr) || mb_strlen($descr) < $this->min) { return _t('listings', 'Description is too short'); } $descr = trim(preg_replace('/\r\n/', PHP_EOL, $descr)); $descr = trim(preg_replace('/\r/', PHP_EOL, $descr)); $descr = trim(preg_replace('/\s+$/m', PHP_EOL, $descr)); $descr = preg_replace('/ +/', ' ', $descr); $descr = TextParser::antimat($descr); $descr = $this->app->filter('listings.form.descr.validate', $descr); # антиспам фильтр: минус слова if (! $this->form->validationAdminPanel) { $spamWord = ''; if (Listings::spamMinusWordsSearch(['text' => $descr, 'word' => &$spamWord])) { return _t('listings', 'There is a forbidden word "[word]" in your description', [ 'word' => $spamWord, ]); } } return true; },], ]; } public function validateUsingRules(array $data = [], ?array $rules = null) { if ($this->form->isTranslate()) { if (! empty($data['descr']) && is_array($data['descr'])) { $lng = $data['lang'] ?? $this->form->item['lang'] ?? $this->locale->current(); $descr = $data['descr']; $data['descr'] = $descr[$lng] ?? ''; if (empty($data['descr'])) { foreach ($descr as $v) { if (! empty($v)) { $data['descr'] = $v; break; } } } $data['translates']['descr'] = $descr; } } return parent::validateUsingRules($data, $rules); } public function settingsForm($form) { $form ->number('min', _t('@listings', 'Minimum Characters'), 1, 0, 1, $this->min) ->tip(_t('@listings', 'Minimum Required Amount of Characters')) ->width(100); $form ->number('limit', _t('@listings', 'Maximum Characters'), 1, 0, 1, $this->limit) ->tip(_t('@listings', 'Maximum Characters')) ->width(100); } }