Geo > District * @copyright Tamaranga */ class District extends FormBlock { public function init() { parent::init(); $this->setTemplate('form/blocks/district', 'listings'); $this->setKey('district'); $this->setTitle(_t('item-form', 'Area')); $this->prerenderable(true); } public function data() { if (! Geo::districtsEnabled()) { return false; } $data = parent::data(); $data['visible'] = $this->visible(); $data['district_id'] = $this->form->item['district_id'] ?? 0; $data['geo_city'] = $this->form->item['geo_city'] ?? 0; return $data; } public function visible() { $geo = $this->form->category['settings']['geo'] ?? []; $city = $this->form->item['geo_city'] ?? 0; return ($geo['enabled'] ?? false) && $city && Geo::hasDistricts($city); } public function reloadBlock($event) { if (! in_array($event, ['categoryChange', 'cityChange', 'publisherChange'])) { return false; } if ($this->visible()) { return $this->render(); } return ''; } public function rules(): array { return [ 'district_id' => [TYPE_UINT], ]; } public function validateUsingRules(array $data = [], ?array $rules = null) { if (! $this->visible()) { unset($data['district_id']); return $data; } return parent::validateUsingRules($data, $rules); } public function onAfterValidateEvent($p) { if (! empty($p['data']['geo_city']) && ! empty($p['data']['district_id'])) { $districts = Geo::districtList($p['data']['geo_city']); if (empty($districts) || !array_key_exists($p['data']['district_id'], $districts)) { $p['data']['district_id'] = 0; } } } }