PanelizerFieldType.php in Panelizer 8.3
File
src/Plugin/Field/FieldType/PanelizerFieldType.php
View source
<?php
namespace Drupal\panelizer\Plugin\Field\FieldType;
use Drupal\Core\Entity\RevisionableInterface;
use Drupal\Core\Field\FieldDefinitionInterface;
use Drupal\Core\Field\FieldItemBase;
use Drupal\Core\Field\FieldStorageDefinitionInterface;
use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\Core\TypedData\DataDefinition;
use Drupal\Core\TypedData\MapDataDefinition;
class PanelizerFieldType extends FieldItemBase {
public static function propertyDefinitions(FieldStorageDefinitionInterface $field_definition) {
$properties['view_mode'] = DataDefinition::create('string')
->setLabel(new TranslatableMarkup('View mode'))
->setSetting('case_sensitive', FALSE)
->setRequired(TRUE);
$properties['default'] = DataDefinition::create('string')
->setLabel(new TranslatableMarkup('Default name'))
->setSetting('case_sensitive', FALSE)
->setRequired(FALSE);
$properties['panels_display'] = MapDataDefinition::create('map')
->setLabel(new TranslatableMarkup('Panels display'))
->setRequired(FALSE);
return $properties;
}
public static function mainPropertyName() {
return 'panels_display';
}
public static function schema(FieldStorageDefinitionInterface $field_definition) {
$schema = [
'columns' => [
'view_mode' => [
'type' => 'varchar',
'length' => '255',
'binary' => FALSE,
],
'default' => [
'type' => 'varchar',
'length' => '255',
'binary' => FALSE,
],
'panels_display' => [
'type' => 'blob',
'size' => 'normal',
'serialize' => TRUE,
],
],
'indexes' => [
'default' => [
'default',
],
],
];
return $schema;
}
protected static function getPanelsDisplayManager() {
return \Drupal::service('panels.display_manager');
}
public static function generateSampleValue(FieldDefinitionInterface $field_definition) {
$panels_manager = static::getPanelsDisplayManager();
$sample_display = $panels_manager
->createDisplay();
$values['view_mode'] = 'default';
$values['default'] = NULL;
$values['panels_display'] = $panels_manager
->exportDisplay($sample_display);
return $values;
}
public function isEmpty() {
$panels_display = $this
->get('panels_display')
->getValue();
$default = $this
->get('default')
->getValue();
return empty($panels_display) && empty($default);
}
public function postSave($update) {
$panels_manager = $this
->getPanelsDisplayManager();
$panels_display_config = $this
->get('panels_display')
->getValue();
if (!empty($panels_display_config) && is_array($panels_display_config)) {
$panels_display = $panels_manager
->importDisplay($panels_display_config, FALSE);
}
if (!empty($panels_display)) {
$entity = $this
->getEntity();
$storage_id_parts = [
$entity
->getEntityTypeId(),
$entity
->id(),
$this
->get('view_mode')
->getValue(),
];
if ($entity instanceof RevisionableInterface && $entity
->getEntityType()
->isRevisionable()) {
$storage_id_parts[] = $entity
->getRevisionId();
}
$panels_display
->setStorage('panelizer_field', implode(':', $storage_id_parts));
$this
->set('panels_display', $panels_manager
->exportDisplay($panels_display));
return TRUE;
}
}
}