diff --git a/src/includes/class/class.LSform.php b/src/includes/class/class.LSform.php index 9a04c388..5e96e0b8 100644 --- a/src/includes/class/class.LSform.php +++ b/src/includes/class/class.LSform.php @@ -197,6 +197,7 @@ class LSform extends LSlog_staticLoggerClass { $JSconfig = array ( 'ajaxSubmit' => intval($this -> getConfig('ajaxSubmit', true, 'boolean')), + 'onFailureMessage' => _('Unexpected error occurred submiting this form. Please retry again or contact support.'), ); if (!empty($this -> warnings)) { diff --git a/src/includes/class/class.LSsession.php b/src/includes/class/class.LSsession.php index e6ffda90..8fae33df 100644 --- a/src/includes/class/class.LSsession.php +++ b/src/includes/class/class.LSsession.php @@ -1870,6 +1870,7 @@ class LSsession { */ public static function setApiMode($val=true) { self :: $api_mode = (boolean)$val; + self :: setAjaxDisplay(self :: $api_mode); } /** diff --git a/src/includes/class/class.LStemplate.php b/src/includes/class/class.LStemplate.php index 794ce3a9..311d3870 100644 --- a/src/includes/class/class.LStemplate.php +++ b/src/includes/class/class.LStemplate.php @@ -467,7 +467,7 @@ class LStemplate extends LSlog_staticLoggerClass { **/ public static function fatal_error($error=null) { http_response_code(500); - if (LSsession :: get('api_mode')) { + if (LSsession :: get('api_mode') || LSsession :: getAjaxDisplay()) { header('Content-Type: application/json'); $errors = array(_("A fatal error occured. If problem persist, please contact support.")); if ($error) diff --git a/src/includes/class/class.LSurl.php b/src/includes/class/class.LSurl.php index 0dd06327..cd6e9c0a 100644 --- a/src/includes/class/class.LSurl.php +++ b/src/includes/class/class.LSurl.php @@ -277,10 +277,15 @@ class LSurl extends LSlog_staticLoggerClass { self :: log_fatal(_("This request could not be handled.")); } - if (self :: $request -> api_mode) + if (self :: $request -> api_mode) { LSsession :: setApiMode(); - elseif (class_exists('LStemplate')) - LStemplate :: assign('request', self :: $request); + } + else { + if (self :: $request -> ajax) + LSsession :: setAjaxDisplay(); + if (class_exists('LStemplate')) + LStemplate :: assign('request', self :: $request); + } // Check authentication (if need) if(self :: $request -> authenticated && ! LSsession :: startLSsession()) { diff --git a/src/includes/class/class.LSurlRequest.php b/src/includes/class/class.LSurlRequest.php index 876da4e9..45d4dd5b 100644 --- a/src/includes/class/class.LSurlRequest.php +++ b/src/includes/class/class.LSurlRequest.php @@ -71,6 +71,8 @@ class LSurlRequest extends LSlog_staticLoggerClass { return $this -> get_referer(); if ($key == 'http_method') return $_SERVER['REQUEST_METHOD']; + if ($key == 'ajax') + return isset($_REQUEST['ajax']) && boolval($_REQUEST['ajax']); if (array_key_exists($key, $this->url_params)) { return urldecode($this->url_params[$key]); } diff --git a/src/includes/js/LSform.js b/src/includes/js/LSform.js index d969f45a..541cacd0 100644 --- a/src/includes/js/LSform.js +++ b/src/includes/js/LSform.js @@ -329,7 +329,8 @@ var LSform = new Class({ this.LSform.set('send',{ data: this.LSform, - onSuccess: this.onAjaxSubmitComplete.bind(this), + onSuccess: this.onAjaxSubmitSuccess.bind(this), + onFailure: this.onAjaxSubmitFailure.bind(this), url: this.LSform.get('action'), imgload: varLSdefault.loadingImgDisplay($('LSform_title'),'inside') }); @@ -355,12 +356,18 @@ var LSform = new Class({ }, this); }, - onAjaxSubmitComplete: function(responseText, responseXML) { + onAjaxSubmitComplete: function(data) { + if (!this.submitting) return; this.submitting = false; this.LSform.removeClass('submitting'); - var data = JSON.decode(responseText); // Handle common Ajax return checks varLSdefault.checkAjaxReturn(data); + }, + + onAjaxSubmitSuccess: function(responseText, responseXML) { + if (!this.submitting) return; + var data = JSON.decode(responseText); + this.onAjaxSubmitComplete(data); // Handle LSform errors this.resetErrors(); @@ -370,6 +377,18 @@ var LSform = new Class({ } }, + onAjaxSubmitFailure: function(xhr) { + if (!this.submitting) return; + var data; + if (xhr.response) { + data = JSON.decode(xhr.response); + } + else { + varLSdefault.LSerror.displayOrAdd(this.param.onFailureMessage); + } + this.onAjaxSubmitComplete(data); + }, + resetErrors: function() { $$('dd.LSform-errors').each(function(dd) { dd.destroy(); diff --git a/src/includes/routes.php b/src/includes/routes.php index 78d1d17f..74792d81 100644 --- a/src/includes/routes.php +++ b/src/includes/routes.php @@ -746,7 +746,7 @@ function handle_LSobject_select($request) { LStemplate :: assign('LSobject_list_objectname', $object -> getLabel()); // Set & display template - LSsession :: setTemplate(isset($_REQUEST['ajax'])?'select_table.tpl':'select.tpl'); + LSsession :: setTemplate($request->ajax?'select_table.tpl':'select.tpl'); LSsession :: setAjaxDisplay(); LSsession :: displayTemplate(); $LSsearch->afterUsingResult(); @@ -954,7 +954,7 @@ function handle_LSobject_create($request) { if (!LSerror::errorsDefined()) { LSsession :: addInfo(_("Object has been added.")); } - if (isset($_REQUEST['ajax'])) { + if ($request->ajax) { LSsession :: displayAjaxReturn ( array( 'LSredirect' => "object/$LSobject/".urlencode($object -> getDn()) @@ -968,7 +968,7 @@ function handle_LSobject_create($request) { } } else { - if (isset($_REQUEST['ajax'])) { + if ($request->ajax) { LSsession :: displayAjaxReturn ( array( 'LSformErrors' => $form -> getErrors() @@ -978,7 +978,7 @@ function handle_LSobject_create($request) { } } } - else if (isset($_REQUEST['ajax']) && $form -> definedError()) { + else if ($request->ajax && $form -> definedError()) { LSsession :: displayAjaxReturn ( array( 'LSformErrors' => $form -> getErrors() @@ -1157,7 +1157,7 @@ function handle_LSobject_modify($request) { else { LSsession :: addInfo(_("The object has been modified successfully.")); } - if (isset($_REQUEST['ajax'])) { + if ($request->ajax) { LSsession :: displayAjaxReturn ( array( 'LSredirect' => "object/$LSobject/".urlencode($object -> getDn()) @@ -1172,7 +1172,7 @@ function handle_LSobject_modify($request) { } } else { - if (isset($_REQUEST['ajax'])) { + if ($request->ajax) { LSsession :: displayAjaxReturn ( array( 'LSformErrors' => $form -> getErrors() @@ -1182,7 +1182,7 @@ function handle_LSobject_modify($request) { } } } - else if (isset($_REQUEST['ajax']) && $form -> definedError()) { + else if ($request->ajax && $form -> definedError()) { LSsession :: displayAjaxReturn ( array( 'LSformErrors' => $form -> getErrors() @@ -1557,7 +1557,6 @@ function get_LSobject_from_API_request($request, $instanciate=true, $check_acces * @retval void **/ function handle_api_LSobject_search($request) { - LSsession :: setAjaxDisplay(); $object = get_LSobject_from_API_request($request); if (!$object) return; @@ -1702,7 +1701,6 @@ LSurl :: add_handler('#^api/1.0/object/(?P[^/]+)/?$#', 'handle_api_LSo * @retval void **/ function handle_api_LSobject_create($request) { - LSsession :: setAjaxDisplay(); $object = get_LSobject_from_API_request( $request, true, // instanciate object @@ -1832,7 +1830,6 @@ LSurl :: add_handler('#^api/1.0/object/(?P[^/]+)/export/?$#', 'handle_ * @retval void **/ function handle_api_LSobject_show($request) { - LSsession :: setAjaxDisplay(); $object = get_LSobject_from_API_request($request); if (!$object) return; @@ -1879,7 +1876,6 @@ LSurl :: add_handler('#^api/1.0/object/(?P[^/]+)/?(?P[^/]+)/?$#', * @retval void **/ function handle_api_LSobject_modify($request) { - LSsession :: setAjaxDisplay(); $object = get_LSobject_from_API_request( $request, true, // instanciate object @@ -1928,7 +1924,6 @@ LSurl :: add_handler('#^api/1.0/object/(?P[^/]+)/(?P[^/]+)/modify/ * @retval void **/ function handle_api_LSobject_remove($request) { - LSsession :: setAjaxDisplay(); $object = get_LSobject_from_API_request( $request, true, // instanciate object @@ -1964,7 +1959,6 @@ LSurl :: add_handler('#^api/1.0/object/(?P[^/]+)/(?P[^/]+)/remove/ * @retval void **/ function handle_api_LSobject_relation($request) { - LSsession :: setAjaxDisplay(); $object = get_LSobject_from_API_request( $request, true // instanciate object