getObject(); /* @var $object kDBItem */ $response['status'] = 'FAILED'; $response['field_errors'] = $this->getErrorMessages($object); } /** * Returns object errors * * @param kDBItem $object * @return Array */ public function getErrorMessages(&$object) { $error_msgs = Array (); $field_errors = array_keys( $object->GetFieldErrors() ); foreach ($field_errors as $field) { if ( !$object->GetErrorPseudo($field) ) { continue; } if ( $object->GetFieldOption($field, 'formatter') == 'kMultiLanguage') { $field = 'l' . $this->Application->GetVar('m_lang') . '_' . $field; } $error_field = $object->GetFieldOption($field, 'error_field', false, $field); $error_msgs[$field] = $object->GetErrorMsg($error_field); } return $error_msgs; } /** * Sends JSON-encoded response as event result to the browser * * @param kEvent $event * @param Array $response */ public function sendResponse($event, $response = Array ()) { if ( !isset($response['status']) ) { $response['status'] = 'OK'; } $json_helper = $this->Application->recallObject('JSONHelper'); /* @var $json_helper JSONHelper */ echo $json_helper->encode($response); $event->status = kEvent::erSTOP; } /** * Calls given event and returns nice JSON output * * @param kEvent $event * @param string $call_event * @param Array $params * @param Closure $callback * @return bool * @access public */ public function transitEvent($event, $call_event, $params = Array (), $callback = null) { $params['status'] = 'OK'; $event->CallSubEvent($call_event); if ( is_callable($callback) ) { call_user_func($callback, $event); } if ( $event->status != kEvent::erSUCCESS ) { $this->prepareJSONErrors($event, $params); } else { if ( !isset($params['redirect_to']) && ($event->redirect === true || strlen($event->redirect) > 0) ) { $redirect_to = $this->Application->HREF($event->redirect, '', $event->getRedirectParams(), $event->redirectScript); // is used from JavaScript / redirecting, so any "&" could break it $params['redirect_to'] = str_replace(Array ('&', '%5C'), Array ('&', '\\'), $redirect_to); } $params = array_merge($params, $event->getRedirectParams()); } $this->sendResponse($event, $params); return $params['status'] == 'OK'; } }