1 actions.inc actions_execute($action_name, Entity $entity = NULL, &$context)

Executes a single action.

Parameters

string $action_name: The machine name of the action to be executed.

Entity $entity: The entity object that the action will act upon, such as a node, user, or comment object.

Return value

The result of the executed action callback.

Related topics

File

core/includes/actions.inc, line 86
This is the actions engine for executing stored actions.

Code

function actions_execute($action_name, Entity $entity = NULL, &$context) {
  // $stack tracks the number of recursive calls.
  static $stack;
  $stack++;
  $recursion_limit = config_get('system.core', 'action_recursion_limit');
  if (empty($recursion_limit)) {
    $recursion_limit = 35;
  }
  if ($stack > $recursion_limit) {
    watchdog('actions', 'Stack overflow: recursion limit for actions_execute() has been reached. Stack is limited by %limit calls.', array('%limit' => $recursion_limit), WATCHDOG_ERROR);
    return NULL;
  }

  $action_info = actions_get_info($action_name);
  $callback = $action_info['callback'];
  if (isset($action_info['file'])) {
    include_once BACKDROP_ROOT . '/' . backdrop_get_path('module', $action_info['module']) . '/' . $action_info['file'];
  }
  $context['action_name'] = $action_name;
  $context['action_info'] = $action_info;
  if (function_exists($callback)) {
    $result = $callback($entity, $context);
  }
  else {
    $result = NULL;
    trigger_error(t('The action "@action" could not be executed because the function "@callback" could not be found.', array('@action' => $action_name, '@callback' => $callback)), E_USER_ERROR);
  }

  $stack--;
  return $result;
}