[ Index ]

PHP Cross Reference of Drupal 6 (gatewave)

title

Body

[close]

/sites/all/modules/rules/rules_scheduler/ -> rules_scheduler.module (source)

   1  <?php
   2  // $Id: rules_scheduler.module,v 1.1.2.5 2009/07/13 13:34:27 fago Exp $
   3  
   4  
   5  /**
   6   * @file
   7   * Rules scheduler module.
   8   */
   9  
  10  // Path definition for scheduling page
  11  define('RULES_SCHEDULER_PATH', RULES_ADMIN_SET_PATH .'/scheduling');
  12  
  13  /**
  14   * Implementation of hook_cron().
  15   */
  16  function rules_scheduler_cron() {
  17    // Do max 30 rule sets
  18    //TODO: make this configureable
  19    $result = db_query_range("SELECT * FROM {rules_scheduler} WHERE date < '%s'", gmdate('Y-m-d H:i:s'), 0, 30);
  20  
  21    while ($row = db_fetch_object($result)) {
  22      rules_include('rules');
  23      $vars = rules_unpack_variables(unserialize($row->arguments));
  24  
  25      if ($vars) {
  26        // Invoke the rule set
  27        $args = $vars['data'];
  28        array_unshift($args, $row->set_name);
  29        call_user_func_array('rules_invoke_rule_set', $args);
  30      }
  31      db_query("DELETE FROM {rules_scheduler} WHERE tid = %d", $row->tid);
  32    }
  33  }
  34  
  35  /**
  36   * Implementation of hook_menu().
  37   */
  38  function rules_scheduler_menu() {
  39    $items = array();
  40    $items[RULES_SCHEDULER_PATH] = array(
  41      'title' => 'Scheduling',
  42      'type' => MENU_LOCAL_TASK,
  43      'page callback' => 'rules_scheduler_scheduling',
  44      'access arguments' => array('administer rules'),
  45      'file' => 'rules_scheduler.admin.inc',
  46    );
  47    $items[RULES_SCHEDULER_PATH .'/%rules_scheduler_tid/delete'] = array(
  48      'title' => 'Delete a scheduled task',
  49      'type' => MENU_CALLBACK,
  50      'page callback' => 'drupal_get_form',
  51      'page arguments' => array('rules_scheduler_delete_task', 4),
  52      'access arguments' => array('administer rules'),
  53      'load arguments' => array(4),
  54      'file' => 'rules_scheduler.admin.inc',
  55    );
  56    return $items;
  57  }
  58  
  59  /**
  60   * Load a task by a given task ID.
  61   */
  62  function rules_scheduler_tid_load($tid) {
  63    $result = db_query("SELECT * FROM {rules_scheduler} WHERE tid = %d", $tid);
  64    $task = db_fetch_array($result);
  65    return $task;
  66  }
  67  
  68  /**
  69   * Implementation of hook_views_api().
  70   */
  71  function rules_scheduler_views_api() {
  72    return array(
  73      'api' => 2.0,
  74      'path' => drupal_get_path('module', 'rules_scheduler') .'/includes',
  75    );
  76  }
  77  
  78  /**
  79   * Schedule a task by inserting it into the database.
  80   *
  81   * @param $rule_set_name
  82   *   The machine readyble name of the rule set to be scheduled.
  83   * @param $date
  84   *   Timestamp when the rule set should be executed.
  85   * @param $task_identifier
  86   *   User provided string to identify the task within this rule set.
  87   * @param $arg_info
  88   *   Array that contains information and structure of argument variables.
  89   * @param $arguments
  90   *   Array of data for the given variables, in the same order as in $arg_info.
  91   * @param $log
  92   *   Boolean flag to indicate whether the Rules log is available or not.
  93   */
  94  function rules_scheduler_schedule_task($rule_set_name, $date, $task_identifier = "", $arg_info = array(), $arguments = NULL, $log = FALSE) {
  95    $pack = rules_pack_variables($arg_info, $arguments);
  96    if ($pack !== FALSE) {
  97      if (!empty($task_identifier)) {
  98        // If there is a task with the same identifier and rule set,
  99        // we replace it, so we run a delete query first.
 100        db_query("DELETE FROM {rules_scheduler} WHERE set_name = '%s' AND identifier = '%s'", $rule_set_name, $task_identifier);
 101      }
 102      $rules_date = new rules_data_type_date();
 103      $date = $rules_date->check_value(array('label' => 'execution date'), $date);
 104      drupal_write_record('rules_scheduler', $task = array(
 105          'date' => $date,
 106          'set_name' => $rule_set_name,
 107          'arguments' => $pack,
 108          'identifier' => $task_identifier,
 109      ));
 110    }
 111    elseif ($log) {
 112      rules_log(t('Packing arguments for scheduling the rule set %set failed.', array('%set' => $rule_set_name)), TRUE);
 113    }
 114  }


Generated: Thu Mar 24 11:18:33 2011 Cross-referenced by PHPXref 0.7