Publisher (User, Company) * @copyright Tamaranga * @property \modules\listings\views\ItemForm $form */ class Publisher extends FormBlock { public function init() { parent::init(); $this->setTemplate('form/blocks/publisher', 'listings'); $this->setKey('publisher'); $this->setTitle(_t('item-form', 'Place as')); } public function data() { if (! $this->enable()) { return false; } $data = parent::data(); $companyId = User::companyID(); $data['publisher'] = $publisher = Listings::publisher(); $data['company'] = $companyId && $publisher != Listings::PUBLISHER_USER && bff::moduleExists('business'); $data['company_id'] = $this->form->item['company_id'] ?? 0; $data['company_data'] = $this->form->loadCompanyData(); if (empty($data['company_data']) || $data['company_data']['status'] != Business::STATUS_ACTIVE) { $data['company_data'] = []; } return $data; } public function enable() { $publisher = Listings::publisher(); return bff::moduleExists('business') && User::companyID() && $publisher != Listings::PUBLISHER_USER; } public function rules(): array { return [ 'company_id' => [TYPE_UINT], 'company' => [TYPE_BOOL], ]; } public function validateUsingRules(array $data = [], ?array $rules = null) { if (! bff::moduleExists('business')) { unset($data['company']); unset($data['company_id']); return $data; } $user = $this->form->loadUser($data['user_id'] ?? 0)->toArray(); if ($this->form->validationAdminPanel) { $data['company_id'] = Listings::publisherCheck($user['company_id'] ?? 0, (bool)($data['company'] ?? 0)); } else { if ($this->enable()) { $isset = isset($data['company_id']); $data = parent::validateUsingRules($data, $rules); if (! $isset && ! $data['company_id']) { $data['company_id'] = User::companyID(); } $data['company_id'] = Listings::publisherCheck($data['company_id'], (bool)$data['company']); } else { unset($data['company_id']); } } unset($data['company']); if (empty($data['company_id'])) { if (Listings::publisher(Listings::PUBLISHER_COMPANY)) { $this->errors->set(_t('item-form', 'Only companies can publish listings'), 'company'); } if (Listings::publisher(Listings::PUBLISHER_USER_TO_COMPANY) && ! empty($user['company_id'])) { $this->errors->set(_t('item-form', 'Only companies can publish listings'), 'company'); } } else { if (! Business::model()->companyActive($data['company_id'])) { $this->errors->set(_t('@listings', 'Listing placement is available only from the activated company')); } } return $data; } public function onReloadBlocksBeforeEvent($p) { if (empty($p['event']) || $p['event'] != 'publisherChange') { return; } if (bff::moduleExists('business') && User::companyID() && ! empty($p['data']['company_id'])) { $company = $this->form->loadCompanyData(); if (! empty($company['geo_city'])) { $p['data']['geo_city'] = $company['geo_city']; } $p['data']['phones'] = $company['phones'] ?? []; $p['data']['contacts'] = $company['contacts'] ?? []; } else { if (! empty($this->form->user['geo_city'])) { $p['data']['geo_city'] = $this->form->user['geo_city']; } $p['data']['phones'] = $this->form->user['phones'] ?? []; $p['data']['contacts'] = $this->form->user['contacts'] ?? []; } } public function onLoad($data = []) { if (! $this->form->validationAdminPanel) { if (! $this->form->edit()) { if (bff::moduleExists('business') && User::companyID() && Listings::publisher([Listings::PUBLISHER_COMPANY, Listings::PUBLISHER_USER_TO_COMPANY])) { if (empty($this->form->item['company_id'])) { $this->form->item->fill(['company_id' => User::companyID()]); } } } } } }