288 lines
11 KiB
PHP
Raw Normal View History

2020-08-14 13:36:36 +02:00
<?php
/**
* @file
* Scheduler rules functions.
*/
/**
* Implements hook_rules_event_info().
2020-09-18 15:12:26 +02:00
*
* This hook function defines four Scheduler events which can be used by Rules
* to trigger other actions.
2020-08-14 13:36:36 +02:00
*/
function scheduler_rules_event_info() {
// Create an array of variables, as these are the same for each of the events.
$variables = array(
'node' => array(
'type' => 'node',
'label' => t('Scheduled Content Node'),
'description' => t('The node object representing the scheduled content'),
),
// Use both dates in all rules to give maximum flexibility for use within a
// single event. The two dates do exist in the $node object, but will be 0
// if no date is entered. Including the specific date variables gives more
// flexibility because any non-entered date will be blank here not zero.
'publish_on' => array(
'type' => 'date',
'label' => t('Scheduler Publish On date'),
'description' => t('Date and time that the node will be published by Scheduler'),
),
'unpublish_on' => array(
'type' => 'date',
'label' => t('Scheduler Unpublish On date'),
'description' => t('Date and time that the node will be unpublished by Scheduler'),
),
);
// Define the events.
$items = array(
'scheduler_new_node_is_scheduled_for_publishing_event' => array(
'label' => t('After saving new content that is scheduled for publishing'),
'group' => t('Scheduler'),
'variables' => $variables,
),
'scheduler_existing_node_is_scheduled_for_publishing_event' => array(
'label' => t('After updating existing content that is scheduled for publishing'),
'group' => t('Scheduler'),
'variables' => $variables,
),
'scheduler_new_node_is_scheduled_for_unpublishing_event' => array(
'label' => t('After saving new content that is scheduled for unpublishing'),
'group' => t('Scheduler'),
'variables' => $variables,
),
'scheduler_existing_node_is_scheduled_for_unpublishing_event' => array(
'label' => t('After updating existing content that is scheduled for unpublishing'),
'group' => t('Scheduler'),
'variables' => $variables,
),
'scheduler_node_has_been_published_event' => array(
'label' => t('After a node has been published by Scheduler'),
'group' => t('Scheduler'),
'variables' => $variables,
),
'scheduler_node_has_been_unpublished_event' => array(
'label' => t('After a node has been unpublished by Scheduler'),
'group' => t('Scheduler'),
'variables' => $variables,
),
);
return $items;
}
/**
* Implements hook_rules_action_info().
*/
function scheduler_rules_action_info() {
// These actions can be added when building a reaction rule. Use a $defaults
// array to avoid duplication.
$defaults = array(
'parameter' => array(
'node' => array(
'type' => 'node',
// 'label' is shown as fieldset title after adding action.
'label' => t('The node to be processed by Scheduler'),
// 'description' is shown beneath the label during add/edit.
'description' => t('This can be a node object or node id'),
),
),
'group' => t('Scheduler'),
);
// 1. Action to set the publishing date.
$actions['scheduler_set_publish_date_action'] = array('label' => t('Set publishing date')) + $defaults;
$actions['scheduler_set_publish_date_action']['parameter']['date'] = array(
'type' => 'date',
'label' => t('The date for publishing'),
'description' => t('The date when Scheduler will publish the node'),
);
// 2. Action to set the unpublishing date.
$actions['scheduler_set_unpublish_date_action'] = array('label' => t('Set unpublishing date')) + $defaults;
$actions['scheduler_set_unpublish_date_action']['parameter']['date'] = array(
'type' => 'date',
'label' => t('The date for unpublishing'),
'description' => t('The date when Scheduler will unpublish the node'),
);
// 3. Action to remove the publishing date.
$actions['scheduler_remove_publish_date_action'] = array('label' => t('Remove publishing date')) + $defaults;
// 4. Action to remove the unpublishing date.
$actions['scheduler_remove_unpublish_date_action'] = array('label' => t('Remove unpublishing date')) + $defaults;
return $actions;
}
/**
* Set the publish_on date for the node.
*
2020-09-18 15:12:26 +02:00
* @param object $node
2020-08-14 13:36:36 +02:00
* The node object to be scheduled for publishing.
2020-09-18 15:12:26 +02:00
* @param int $date
2020-08-14 13:36:36 +02:00
* The date for publishing, a unix timestamp integer.
*/
function scheduler_set_publish_date_action($node, $date) {
// When this action is invoked and it operates on the node being editted then
// hook_node_presave() and hook_node_update() will be executed anyway. But if
// this action is being used to schedule a different node then we need to call
// the functions directly here.
if (variable_get('scheduler_publish_enable_' . $node->type, 0)) {
$node->publish_on = $date;
scheduler_node_presave($node);
scheduler_node_update($node);
}
else {
$type_name = node_type_get_name($node->type);
watchdog('scheduler', 'Scheduled publishing is not enabled for %type content. To prevent this message add the condition "Scheduled publishing is enabled" to your Rule, or enable the Scheduler options via the %type content type settings.', array('%type' => $type_name), WATCHDOG_WARNING, l(t('@type settings', array('@type' => $type_name)), 'admin/structure/types/manage/' . $node->type));
}
}
/**
* Set the unpublish_on date for the node.
*
2020-09-18 15:12:26 +02:00
* @param object $node
2020-08-14 13:36:36 +02:00
* The node object to be scheduled for unpublishing.
2020-09-18 15:12:26 +02:00
* @param int $date
2020-08-14 13:36:36 +02:00
* The date for unpublishing, a unix timestamp integer.
*/
function scheduler_set_unpublish_date_action($node, $date) {
if (variable_get('scheduler_unpublish_enable_' . $node->type, 0)) {
$node->unpublish_on = $date;
scheduler_node_presave($node);
scheduler_node_update($node);
}
else {
$type_name = node_type_get_name($node->type);
watchdog('scheduler', 'Scheduled unpublishing is not enabled for %type content. To prevent this message add the condition "Scheduled unpublishing is enabled" to your Rule, or enable the Scheduler options via the %type content type settings.', array('%type' => $type_name), WATCHDOG_WARNING, l(t('@type settings', array('@type' => $type_name)), 'admin/structure/types/manage/' . $node->type));
}
}
/**
* Remove the publish_on date for the node.
*
2020-09-18 15:12:26 +02:00
* @param object $node
2020-08-14 13:36:36 +02:00
* The node object from which to remove the publish_on date.
*/
function scheduler_remove_publish_date_action($node) {
if (variable_get('scheduler_publish_enable_' . $node->type, 0)) {
$node->publish_on = 0;
scheduler_node_presave($node);
scheduler_node_update($node);
}
else {
$type_name = node_type_get_name($node->type);
watchdog('scheduler', 'Scheduled publishing is not enabled for %type content. To prevent this message add the condition "Scheduled publishing is enabled" to your Rule, or enable the Scheduler options via the %type content type settings.', array('%type' => $type_name), WATCHDOG_WARNING, l(t('@type settings', array('@type' => $type_name)), 'admin/structure/types/manage/' . $node->type));
}
}
/**
* Remove the unpublish_on date for the node.
*
2020-09-18 15:12:26 +02:00
* @param object $node
2020-08-14 13:36:36 +02:00
* The node object from which to remove the unpublish_on date.
*/
function scheduler_remove_unpublish_date_action($node) {
if (variable_get('scheduler_unpublish_enable_' . $node->type, 0)) {
$node->unpublish_on = 0;
scheduler_node_presave($node);
scheduler_node_update($node);
}
else {
$type_name = node_type_get_name($node->type);
watchdog('scheduler', 'Scheduled unpublishing is not enabled for %type content. To prevent this message add the condition "Scheduled unpublishing is enabled" to your Rule, or enable the Scheduler options via the %type content type settings.', array('%type' => $type_name), WATCHDOG_WARNING, l(t('@type settings', array('@type' => $type_name)), 'admin/structure/types/manage/' . $node->type));
}
}
/**
* Implements hook_rules_condition_info().
*/
function scheduler_rules_condition_info() {
// Create a default, as most of the values are identical for all conditions.
$default = array(
'group' => t('Scheduler'),
'parameter' => array(
'node' => array(
'type' => 'node',
'label' => t('The node to test for scheduling properties'),
'description' => t('This can be a node object or node id'),
),
),
);
// 1. Condition to check if publishing is enabled for the content type.
$conditions['scheduler_condition_publishing_is_enabled'] = array(
2020-09-18 15:12:26 +02:00
'label' => t('Scheduled publishing is enabled for this content type'),
) + $default;
2020-08-14 13:36:36 +02:00
// 2. Condition to check if unpublishing is enabled for the content type.
$conditions['scheduler_condition_unpublishing_is_enabled'] = array(
2020-09-18 15:12:26 +02:00
'label' => t('Scheduled unpublishing is enabled for this content type'),
) + $default;
2020-08-14 13:36:36 +02:00
// 3. Condition to check if the node is scheduled for publishing.
$conditions['scheduler_condition_node_is_scheduled_for_publishing'] = array(
2020-09-18 15:12:26 +02:00
'label' => t('The node is scheduled for publishing'),
) + $default;
2020-08-14 13:36:36 +02:00
// 4. Condition to check if the node is scheduled for unpublishing.
$conditions['scheduler_condition_node_is_scheduled_for_unpublishing'] = array(
2020-09-18 15:12:26 +02:00
'label' => t('The node is scheduled for unpublishing'),
) + $default;
2020-08-14 13:36:36 +02:00
return $conditions;
}
/**
* Determines whether scheduled publishing is enabled for this node type.
*
2020-09-18 15:12:26 +02:00
* @param object $node
* The node to check.
*
* @return bool
2020-08-14 13:36:36 +02:00
* TRUE if scheduled publishing is enabled for the node type, FALSE if not.
*/
function scheduler_condition_publishing_is_enabled($node) {
return (variable_get('scheduler_publish_enable_' . $node->type, 0) == 1);
}
/**
* Determines whether scheduled unpublishing is enabled for this node type.
*
2020-09-18 15:12:26 +02:00
* @param object $node
* The node to check.
*
* @return bool
2020-08-14 13:36:36 +02:00
* TRUE if scheduled unpublishing is enabled for the node type, FALSE if not.
*/
function scheduler_condition_unpublishing_is_enabled($node) {
return (variable_get('scheduler_unpublish_enable_' . $node->type, 0) == 1);
}
/**
* Determines whether a node is scheduled for publishing.
*
2020-09-18 15:12:26 +02:00
* @param object $node
* The node to check.
*
* @return bool
2020-08-14 13:36:36 +02:00
* TRUE if the node is scheduled for publishing, FALSE if not.
*/
function scheduler_condition_node_is_scheduled_for_publishing($node) {
return !empty($node->publish_on);
}
/**
* Determines whether a node is scheduled for unpublishing.
*
2020-09-18 15:12:26 +02:00
* @param object $node
* The node to check.
*
* @return bool
2020-08-14 13:36:36 +02:00
* TRUE if the node is scheduled for unpublishing, FALSE if not.
*/
function scheduler_condition_node_is_scheduled_for_unpublishing($node) {
return !empty($node->unpublish_on);
}