Title * @copyright Tamaranga */ class Title extends FormBlock { /** @var int Минимальня длина */ public $min = 5; /** @var int Максимальная длина */ public $limit = 100; public function init() { parent::init(); $this->setTemplate('form/blocks/title', 'listings'); $this->setTitle(_t('@listings', 'Title')); } public function data() { $data = parent::data(); $data['title'] = $this->form->item['title_edit'] ?? $this->form->item['title'] ?? ''; $data = array_merge($data, $this->autoData()); return $data; } public function autoData() { $auto = []; $auto['enable'] = ! empty($this->form->category['tpl_title_enabled']); if ($auto['enable']) { $auto['rule'] = $this->form->category['tpl_title_view'] ?? ''; $auto['data'] = Listings::dp()->prepareItemTemplateData($this->form->category['id'], $auto['rule']); } return ['auto' => $auto]; } public function reloadBlock($event) { $this->form->respond('title', $this->autoData()['auto']); return false; } public function rules(): array { return [ 'title' => [TYPE_NOTAGS], ]; } public function validateUsingRules(array $data = [], ?array $rules = null) { if ($this->form->isTranslate()) { if (! empty($data['title']) && is_array($data['title'])) { $lng = $data['lang'] ?? $this->form->item['lang'] ?? $this->locale->current(); $title = $data['title']; $data['title'] = $title[$lng] ?? ''; if (empty($data['title'])) { foreach ($title as $k => $v) { if (! empty($v)) { $lng = $k; $data['title'] = $v; break; } } } if (! $this->form->edit()) { $data['lang'] = $lng; } $data['translates']['title'] = $title; } } return parent::validateUsingRules($data, $rules); } public function validateLater(&$data) { do { if (empty($data['title'])) { $this->errors->set(_t('listings', 'Enter listing title'), 'title'); break; } if (mb_strlen($data['title']) < $this->min) { $this->errors->set(_t('listings', 'The title is too short', 'title')); break; } $data['title'] = trim(preg_replace('/\s+/', ' ', $data['title'])); $data['title'] = TextParser::antimat($data['title']); $data['title'] = $this->app->filter('listings.form.title.validate', $data['title']); # антиспам фильтр: минус слова if (! $this->form->validationAdminPanel) { $spamWord = ''; if (Listings::spamMinusWordsSearch(['text' => $data['title'], 'word' => &$spamWord])) { $this->errors->set(_t('listings', 'There is a forbidden word "[word]" in your title', [ 'word' => $spamWord, ]), 'title'); } break; } } while (false); } 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); } }