public function SetUnpublishingDate::doExecute in Scheduler 8
Same name and namespace in other branches
- 2.x scheduler_rules_integration/src/Plugin/RulesAction/SetUnpublishingDate.php \Drupal\scheduler_rules_integration\Plugin\RulesAction\SetUnpublishingDate::doExecute()
Set the unpublish_on date for the node.
File
- scheduler_rules_integration/
src/ Plugin/ RulesAction/ SetUnpublishingDate.php, line 33
Class
- SetUnpublishingDate
- Provides a 'Set date for scheduled unpublishing' action.
Namespace
Drupal\scheduler_rules_integration\Plugin\RulesActionCode
public function doExecute() {
$node = $this
->getContextValue('node');
$date = $this
->getContextValue('date');
$config = \Drupal::config('scheduler.settings');
if ($node->type->entity
->getThirdPartySetting('scheduler', 'unpublish_enable', $config
->get('default_unpublish_enable'))) {
$node
->set('unpublish_on', $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
// automatically. But if this action is being used to schedule a different
// node then we need to call the functions directly here.
scheduler_node_presave($node);
scheduler_node_update($node);
}
else {
// The action cannot be executed because the content type is not enabled
// for scheduled unpublishing.
$action_label = $this
->summary();
// @todo Can we get the condition description from the actual condition
// object instead of hard-coding it here?
$condition = $this
->t('Node type is enabled for scheduled unpublishing');
$type_name = node_get_type_label($node);
$url = new Url('entity.node_type.edit_form', [
'node_type' => $node
->getType(),
]);
$arguments = [
'%type' => $type_name,
'%action_label' => $action_label,
'%condition' => $condition,
'@url' => $url
->toString(),
];
$link = Link::fromTextAndUrl($this
->t('@type settings', [
'@type' => $type_name,
]), $url)
->toString();
\Drupal::logger('scheduler')
->warning('Action "%action_label" is not valid because scheduled unpublishing is not enabled for %type content. Add the condition "%condition" to your Reaction Rule, or enable scheduled unpublishing via the %type settings.', $arguments + [
'link' => $link,
]);
\Drupal::messenger()
->addMessage($this
->t('Action "%action_label" is not valid because scheduled unpublishing is not enabled for %type content. Add the condition "%condition" to your Reaction Rule, or enable scheduled unpublishing via the <a href="@url">%type</a> settings.', $arguments), 'warning', FALSE);
}
}