Index: branches/5.3.x/core/units/helpers/ajax_form_helper.php =================================================================== diff -u -N -r15677 -r15902 --- branches/5.3.x/core/units/helpers/ajax_form_helper.php (.../ajax_form_helper.php) (revision 15677) +++ branches/5.3.x/core/units/helpers/ajax_form_helper.php (.../ajax_form_helper.php) (revision 15902) @@ -39,13 +39,49 @@ } $error_field = $object->GetFieldOption($field, 'error_field', false, $field); - $error_msgs[$field] = $object->GetErrorMsg($error_field); + $error_msgs[$field] = $object->GetErrorMsg($error_field, false); } return $error_msgs; } /** + * Returns information about all uploader fields. + * + * @param kDBItem $object Object to process + * @param array|null $fields Fields filter. + * + * @return array + * @access public + */ + public function getUploaderInfo(kDBItem $object, $fields = null) + { + $ret = array(); + + if ( !isset($fields) ) { + $fields = array_keys($object->getFields()); + } + + foreach ($fields as $field) { + $formatter = $object->GetFieldOption($field, 'formatter'); + + if ( !$formatter ) { + continue; + } + + if ( $formatter == 'kUploadFormatter' || in_array('kUploadFormatter', class_parents($formatter)) ) { + $ret[$field] = array( + 'urls' => $object->GetField($field, 'file_urls'), + 'names' => $object->GetField($field, 'file_names'), + 'sizes' => $object->GetField($field, 'file_sizes'), + ); + } + } + + return $ret; + } + + /** * Sends JSON-encoded response as event result to the browser * * @param kEvent $event @@ -71,12 +107,28 @@ * @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); + $form_data = $event->getEventParam('form_data'); + + if ( $form_data !== false ) { + $object = $event->getObject(); + /* @var $object kDBItem */ + + $params['uploader_info'] = $this->getUploaderInfo($object, array_keys($form_data)); + } + + if ( is_callable($callback) ) { + call_user_func($callback, $event); + } + if ( $event->status != kEvent::erSUCCESS ) { $this->prepareJSONErrors($event, $params); } @@ -92,5 +144,7 @@ } $this->sendResponse($event, $params); + + return $params['status'] == 'OK'; } } \ No newline at end of file