Page MenuHomeIn-Portal Phabricator

in-portal
No OneTemporary

File Metadata

Created
Tue, Feb 25, 5:14 AM

in-portal

Index: branches/5.2.x/core/units/helpers/ajax_form_helper.php
===================================================================
--- branches/5.2.x/core/units/helpers/ajax_form_helper.php (revision 15702)
+++ branches/5.2.x/core/units/helpers/ajax_form_helper.php (revision 15703)
@@ -1,96 +1,105 @@
<?php
class AjaxFormHelper extends kHelper {
/**
* Sets error info as parameters in response object
* Expects that event status is not erSUCCESS
*
* @param kEvent $event
* @param Array $response
*/
public function prepareJSONErrors($event, &$response)
{
$object = $event->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 ())
+ 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 "&amp;" could break it
$params['redirect_to'] = str_replace(Array ('&amp;', '%5C'), Array ('&', '\\'), $redirect_to);
}
$params = array_merge($params, $event->getRedirectParams());
}
$this->sendResponse($event, $params);
+
+ return $params['status'] == 'OK';
}
}
\ No newline at end of file

Event Timeline