| [ Index ] |
PHP Cross Reference of Drupal 6 (gatewave) |
[Summary view] [Print] [Text view]
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 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated: Thu Mar 24 11:18:33 2011 | Cross-referenced by PHPXref 0.7 |