You are here

rules_scheduler.rules.inc in Rules 6

Same filename and directory in other branches
  1. 7.2 rules_scheduler/rules_scheduler.rules.inc

Rules integration for the rules scheduler module.

File

rules_scheduler/rules_scheduler.rules.inc
View source
<?php

/**
 * @file
 * Rules integration for the rules scheduler module.
 */

/**
 * Implementation of hook_rules_action_info().
 */
function rules_scheduler_rules_action_info() {
  $items = array();

  // Add actions for all rule sets.
  foreach (rules_get_configured_items('rule_sets') as $name => $set_info) {
    $items['rules_action_schedule_set_' . $name] = $set_info + array(
      'module' => 'Rule Scheduler',
      'base' => 'rules_scheduler_action',
      'set' => $name,
    );
    $item =& $items['rules_action_schedule_set_' . $name];
    $item['label'] = t('Schedule "@set"', array(
      '@set' => $set_info['label'],
    ));
    $item += array(
      'arguments' => array(),
    );
    $date_arg = array(
      'task_date' => array(
        'type' => 'date',
        'label' => t('Scheduled evaluation date'),
      ),
    );
    $item['arguments'] = array_merge($date_arg, $item['arguments']);
    $identifier_arg = array(
      'task_identifier' => array(
        'type' => 'string',
        'label' => t('Identifier'),
        'description' => t('User provided string to identify the task. Existing tasks for this rule set with the same identifier will be replaced.'),
      ),
    );
    $item['arguments'] = array_merge($identifier_arg, $item['arguments']);
  }

  // Add action to delete scheduled tasks
  $items['rules_action_delete_scheduled_set'] = array(
    'label' => t('Delete scheduled tasks'),
    'module' => 'Rule Scheduler',
    'base' => 'rules_scheduler_action_delete',
    'arguments' => array(
      'task_identifier' => array(
        'type' => 'string',
        'label' => t('Identifier'),
        'description' => t('All tasks that are annotated with this user provided identifier will be deleted.'),
      ),
      'ruleset' => array(
        'type' => 'string',
        'label' => t('Rule set'),
        'description' => t('All tasks that execute this rule set will be deleted.'),
      ),
    ),
  );
  return $items;
}

/**
 * Base action implementation for scheduling all rule sets
 */
function rules_scheduler_action() {
  $args = func_get_args();

  // Remove additional information from the arguments array
  $state = array_pop($args);
  $element = array_pop($args);
  $settings = array_pop($args);

  // Remove task ID and date arguments
  $task_id = array_shift($args);
  $date = array_shift($args);

  // Remove task ID and date from info entry
  array_shift($element['#info']['arguments']);
  array_shift($element['#info']['arguments']);
  rules_scheduler_schedule_task($element['#info']['set'], $date, $task_id, $element['#info']['arguments'], $args, TRUE);
}

/**
 * Help for the base action implementation.
 */
function rules_scheduler_action_help() {
  return t("The evaluation of the rule set is going to be scheduled by cron. So make sure you have configured cron correctly by checking your site's !status.", array(
    '!status' => l('Status report', 'admin/reports/status'),
  )) . ' ' . t('Also note that the scheduling time accuracy depends on your configured cron interval.');
}

/**
 * Action implementation for deleting already scheduled tasks.
 */
function rules_scheduler_action_delete($task_identifier = NULL, $rule_set_name = NULL) {
  if (!empty($rule_set_name)) {
    if (!empty($task_identifier)) {
      db_query("DELETE FROM {rules_scheduler} WHERE set_name = '%s' AND identifier = '%s'", $rule_set_name, $task_identifier);
    }
    else {
      db_query("DELETE FROM {rules_scheduler} WHERE set_name = '%s'", $rule_set_name);
    }
  }
  else {
    if (!empty($task_identifier)) {
      db_query("DELETE FROM {rules_scheduler} WHERE identifier = '%s'", $task_identifier);
    }
  }
}

/**
 * Help for the delete action.
 */
function rules_scheduler_action_delete_help() {
  return t('This action allows you to cancel scheduled tasks that are waiting for future execution.') . ' ' . t('They can be addressed by an identifier or by the rule set name, if both are specified only tasks fulfilling both requirements will be deleted.');
}

Functions

Namesort descending Description
rules_scheduler_action Base action implementation for scheduling all rule sets
rules_scheduler_action_delete Action implementation for deleting already scheduled tasks.
rules_scheduler_action_delete_help Help for the delete action.
rules_scheduler_action_help Help for the base action implementation.
rules_scheduler_rules_action_info Implementation of hook_rules_action_info().