Array ('self' => true), ); $this->permMapping = array_merge($this->permMapping, $permissions); } /** * Applies edit picker filters * * @param kEvent $event * @return void * @access protected * @see kDBEventHandler::OnListBuild() */ protected function SetCustomQuery(kEvent $event) { parent::SetCustomQuery($event); /** @var kDBList $object */ $object = $event->getObject(); if ( ($event->Special == 'selected') || ($event->Special == 'available') ) { /** @var EditPickerHelper $edit_picker_helper */ $edit_picker_helper = $this->Application->recallObject('EditPickerHelper'); $edit_picker_helper->applyFilter($event, 'Countries'); // only countries $object->addFilter('type_filter', '%1$s.Type = ' . DESTINATION_TYPE_COUNTRY); } } /** * Makes sure, that state country is always specified * * @param kEvent $event * @return void * @access protected */ protected function OnBeforeItemCreate(kEvent $event) { parent::OnBeforeItemCreate($event); $this->_setRequired($event); } /** * Makes sure, that state country is always specified * * @param kEvent $event * @return void * @access protected */ protected function OnBeforeItemUpdate(kEvent $event) { parent::OnBeforeItemUpdate($event); $this->_setRequired($event); } /** * Makes sure, that state country is always specified * * @param kEvent $event */ function _setRequired($event) { /** @var kDBItem $object */ $object = $event->getObject(); $field_options = $object->GetFieldOptions('IsoCode'); if ($object->GetDBField('Type') == DESTINATION_TYPE_STATE) { $object->setRequired('StateCountryId'); $field_options['unique'] = Array ('Type', 'StateCountryId'); } else { $object->setRequired('StateCountryId', false); $field_options['unique'] = Array ('Type'); } $object->SetFieldOptions('IsoCode', $field_options); } /** * Don't allow to delete countries, that have states * * @param kEvent $event * @return void * @access protected */ protected function OnBeforeItemDelete(kEvent $event) { parent::OnBeforeItemDelete($event); /** @var kDBItem $object */ $object = $event->getObject(); /** @var kCountryStatesHelper $cs_helper */ $cs_helper = $this->Application->recallObject('CountryStatesHelper'); if ( $cs_helper->CountryHasStates($object->GetDBField('IsoCode')) ) { $event->status = kEvent::erFAIL; return; } } /** * Returns given country states in JSON format * * @param kEvent $event * @return void * @access protected */ protected function OnGetStatesJSON(kEvent $event) { $event->status = kEvent::erSTOP; /** @var kCountryStatesHelper $cs_helper */ $cs_helper = $this->Application->recallObject('CountryStatesHelper'); $states = $cs_helper->getStates( (string)$this->Application->GetVar('country_iso') ); echo json_encode($states); } }