DefaultNodeHandler.php in CMS Content Sync 2.1.x
File
src/Plugin/cms_content_sync/entity_handler/DefaultNodeHandler.php
View source
<?php
namespace Drupal\cms_content_sync\Plugin\cms_content_sync\entity_handler;
use Drupal\cms_content_sync\Plugin\EntityHandlerBase;
use Drupal\cms_content_sync\PullIntent;
use Drupal\cms_content_sync\PushIntent;
use Drupal\cms_content_sync\SyncIntent;
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Entity\FieldableEntityInterface;
class DefaultNodeHandler extends EntityHandlerBase {
public const USER_PROPERTY = 'uid';
public const USER_REVISION_PROPERTY = 'revision_uid';
public const REVISION_TRANSLATION_AFFECTED_PROPERTY = 'revision_translation_affected';
public static function supports($entity_type, $bundle) {
return 'node' == $entity_type;
}
public function getAllowedPushOptions() {
return [
PushIntent::PUSH_DISABLED,
PushIntent::PUSH_AUTOMATICALLY,
PushIntent::PUSH_AS_DEPENDENCY,
PushIntent::PUSH_MANUALLY,
];
}
public function push(PushIntent $intent, EntityInterface $entity = null) {
if (!parent::push($intent, $entity)) {
return false;
}
if (!$entity) {
$entity = $intent
->getEntity();
}
$this
->setDateProperty($intent, 'created', intval($entity
->getCreatedTime()));
return true;
}
public function setEntityValues(PullIntent $intent, FieldableEntityInterface $entity = null) {
if (!$entity) {
$entity = $intent
->getEntity();
}
$entity
->setRevisionCreationTime(time());
if ($intent
->getProperty('revision_log')) {
$entity
->setRevisionLogMessage(reset($intent
->getProperty('revision_log')[0]));
}
return parent::setEntityValues($intent, $entity);
}
public function getAllowedPreviewOptions() {
return [
'table' => 'Table',
'preview_mode' => 'Preview mode',
];
}
public function getHandlerSettings($current_values, $type = 'both') {
$options = parent::getHandlerSettings($current_values, $type);
$options['ignore_unpublished'] = [
'#type' => 'checkbox',
'#title' => 'Ignore unpublished content',
'#default_value' => isset($current_values['ignore_unpublished']) && 0 === $current_values['ignore_unpublished'] ? 0 : 1,
];
$options['allow_explicit_unpublishing'] = [
'#type' => 'checkbox',
'#title' => 'Allow explicit unpublishing',
'#default_value' => isset($current_values['allow_explicit_unpublishing']) && 0 === $current_values['allow_explicit_unpublishing'] ? 0 : 1,
];
return $options;
}
public function ignorePull(PullIntent $intent) {
if (empty($intent
->getProperty('status')[0]['value']) && $this->settings['handler_settings']['ignore_unpublished']) {
if (!$this->settings['handler_settings']['allow_explicit_unpublishing'] || SyncIntent::ACTION_CREATE === $intent
->getAction()) {
if (SyncIntent::ACTION_DELETE != $intent
->getAction()) {
return true;
}
}
}
return parent::ignorePull($intent);
}
public function ignorePush(PushIntent $intent) {
$entity = $intent
->getEntity();
$node_storage = \Drupal::entityTypeManager()
->getStorage('node');
$node = $node_storage
->load($entity
->id());
if (!$entity
->isPublished() && $this->settings['handler_settings']['ignore_unpublished']) {
if (!$this->settings['handler_settings']['allow_explicit_unpublishing'] || $node
->isPublished() || $entity
->getRevisionId() == $node
->getRevisionId() && !$intent
->getEntityStatus()
->getLastPush()) {
return true;
}
}
return parent::ignorePush($intent);
}
}
Classes
Name |
Description |
DefaultNodeHandler |
Class DefaultNodeHandler, providing proper handling for published/unpublished
content. |