rules for php 7.4 which is on ubuntu 20. May also need this version of rules for php7.2. Base off of Development version: 7.x-2.x-dev updated 15 Mar 2020 at 21:52 UTC
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

82 lines
2.7 KiB

3 years ago
<?php
/**
* @file
* Rules Scheduler Drush integration.
*/
/**
* Implements hook_drush_command().
*/
function rules_scheduler_drush_command() {
$items = array();
$items['rules-scheduler-tasks'] = array(
'description' => 'Check for scheduled tasks to be added to the queue.',
'options' => array(
'claim' => 'Optionally claim tasks from the queue to work on. Any value set will override the default time spent on this queue.',
),
'drupal dependencies' => array('rules', 'rules_scheduler'),
'aliases' => array('rusch'),
'examples' => array(
'drush rusch' => 'Add scheduled tasks to the queue.',
'drush rusch --claim' => 'Add scheduled tasks to the queue and claim items for the default amount of time.',
'drush rusch --claim=30' => 'Add scheduled tasks to the queue and claim items for 30 seconds.',
),
);
return $items;
}
/**
* Implements hook_drush_help().
*/
function rules_scheduler_drush_help($section) {
switch ($section) {
case 'drush:rules-scheduler-tasks':
return dt('Checks for scheduled tasks to be added the queue. Can optionally claim tasks from the queue to work on.');
}
}
/**
* Command callback for processing the rules_scheduler_tasks queue.
*
* @see rules_scheduler_cron_queue_info()
* @see rules_scheduler_cron()
*/
function drush_rules_scheduler_tasks() {
if (rules_scheduler_queue_tasks()) {
// hook_exit() is not invoked for drush runs, so register it as shutdown
// callback for logging the rules log to the watchdog.
drupal_register_shutdown_function('rules_exit');
// Clear the log before running tasks via the queue to avoid logging
// unrelated logs from previous operations.
RulesLog::logger()->clear();
drush_log(dt('Added scheduled tasks to the queue.'), 'success');
}
$claim = drush_get_option('claim', FALSE);
if ($claim) {
// Fetch the queue information and let other modules alter it.
$queue_name = 'rules_scheduler_tasks';
$info = module_invoke('rules_scheduler', 'cron_queue_info');
drupal_alter('cron_queue_info', $info);
$function = $info[$queue_name]['worker callback'];
// The drush option can override the default process time.
$time = is_numeric($claim) ? (int) $claim : $info[$queue_name]['time'];
$end = time() + $time;
// Claim items and process the queue.
$queue = DrupalQueue::get($queue_name);
$claimed = 0;
while (time() < $end && ($item = $queue->claimItem())) {
$function($item->data);
$queue->deleteItem($item);
$claimed++;
}
if ($claimed) {
drush_log(dt('Claimed and worked on !claimed scheduled tasks for up to !time seconds.', array('!claimed' => $claimed, '!time' => $time)), 'success');
}
}
}