SetPublishingDate.php in Scheduler 8
File
scheduler_rules_integration/src/Plugin/RulesAction/SetPublishingDate.php
View source
<?php
namespace Drupal\scheduler_rules_integration\Plugin\RulesAction;
use Drupal\Core\Link;
use Drupal\Core\Url;
use Drupal\rules\Core\RulesActionBase;
class SetPublishingDate extends RulesActionBase {
public function doExecute() {
$node = $this
->getContextValue('node');
$date = $this
->getContextValue('date');
$config = \Drupal::config('scheduler.settings');
if ($node->type->entity
->getThirdPartySetting('scheduler', 'publish_enable', $config
->get('default_publish_enable'))) {
$node
->set('publish_on', $date);
scheduler_node_presave($node);
scheduler_node_update($node);
}
else {
$action_label = $this
->summary();
$condition = $this
->t('Node type is enabled for scheduled publishing');
$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 publishing is not enabled for %type content. Add the condition "%condition" to your Reaction Rule, or enable scheduled publishing via the %type settings.', $arguments + [
'link' => $link,
]);
\Drupal::messenger()
->addMessage($this
->t('Action "%action_label" is not valid because scheduled publishing is not enabled for %type content. Add the condition "%condition" to your Reaction Rule, or enable scheduled publishing via the <a href="@url">%type</a> settings.', $arguments), 'warning', FALSE);
}
}
}