Commit 2de28246 authored by mikeytown2's avatar mikeytown2

Issue #1878454 by mikeytown2: Have setting to turn off background callbacks.

parent 5defa1f9
......@@ -15,6 +15,12 @@ function httprl_admin_settings_form() {
'#default_value' => variable_get('httprl_server_addr', FALSE),
'#description' => t('If left blank it will use the same server as the request. If set to -1 it will use the host name instead of an IP address. This controls the output of httprl_build_url_self()'),
);
$form['httprl_background_callback'] = array(
'#type' => 'checkbox',
'#title' => t('Enable background callbacks'),
'#default_value' => variable_get('httprl_background_callback', HTTPRL_BACKGROUND_CALLBACK),
'#description' => t('If disabled all background_callback keys will be turned into callback & httprl_queue_background_callback will return NULL and not queue up the request. Note that background callbacks will automatically be disabled if the site is in maintenance mode.'),
);
$form['timeouts'] = array(
'#type' => 'fieldset',
'#title' => t('Default timeouts'),
......@@ -104,7 +110,7 @@ function httprl_admin_settings_form_validate($form, &$form_state) {
continue;
}
if ($values[$name] <= 0) {
form_set_error($name, t('Must be a postive number.'));
form_set_error($name, t('Must be a positive number.'));
continue;
}
}
......
......@@ -4,6 +4,11 @@
* HTTP Parallel Request Library module.
*/
/**
* Default value
*/
define('HTTPRL_BACKGROUND_CALLBACK', TRUE);
/**
* Default maximum number of seconds a single request call may take.
*/
......@@ -1758,7 +1763,14 @@ function httprl_post_processing($id, &$responses, &$output, $time_left = NULL) {
&& is_array($result->options['background_callback'][0])
&& !empty($result->options['background_callback'][0]['function'])
) {
httprl_queue_background_callback($result->options['background_callback'], $result);
$call_is_queued = httprl_queue_background_callback($result->options['background_callback'], $result);
if (is_null($call_is_queued)) {
watchdog('httprl', 'Background callback attempted but it is disabled. Going to use a normal callback');
unset($result->options['callback']);
$result->options['callback'] = $result->options['background_callback'];
unset($result->options['background_callback']);
httprl_run_callback($result);
}
}
// Copy the result to the output array.
......@@ -1877,6 +1889,18 @@ function httprl_queue_background_callback(&$args, &$result = NULL) {
}
$counter++;
if (!httprl_is_background_callback_capable()) {
return NULL;
}
// Get URL to call function in background.
if (empty($callback_options['url'])) {
$url = httprl_build_url_self('httprl_async_function_callback?count=' . $counter);
}
else {
$url = $callback_options['url'];
}
// Get options.
$callback_options = $args[0];
......@@ -1943,13 +1967,6 @@ function httprl_queue_background_callback(&$args, &$result = NULL) {
}
}
// Get URL to call function in background.
if (empty($callback_options['url'])) {
$url = httprl_build_url_self('httprl_async_function_callback?count=' . $counter);
}
else {
$url = $callback_options['url'];
}
// Create data array and options for request.
$options = array(
'data' => array(
......@@ -2344,7 +2361,8 @@ function _httprl_use_proxy($host) {
/**
* Returns a persistent variable.
*
* This version ignores the $conf global and reads directly from the database.
* This version will read directly from the database if value is not in global
* $conf variable.
*
* Case-sensitivity of the variable_* functions depends on the database
* collation used. To avoid problems, always use lower case for persistent
......@@ -2710,6 +2728,31 @@ function httprl_drupal_full_bootstrap() {
return $full_bootstrap;
}
/**
* Sees if httprl can run a background callback.
*
* @return Bool
* TRUE or FALSE.
*/
function httprl_is_background_callback_capable() {
// Check if site is offline.
if ((defined('VERSION') && substr(VERSION, 0, 1) >= 7 && httprl_variable_get('maintenance_mode', 0)) || httprl_variable_get('site_offline', 0)) {
return FALSE;
}
// Check that the httprl_background_callback variable is enabled.
if (!httprl_variable_get('httprl_background_callback', HTTPRL_BACKGROUND_CALLBACK)) {
return FALSE;
}
// Check that the callback in menu works.
if (!menu_get_item('httprl_async_function_callback')) {
return FALSE;
}
// All checks passed.
return TRUE;
}
/**
* Sets the global user to the given user ID.
*
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment