rocketship_core-8.x-2.0-alpha11/src/Plugin/Field/FieldType/TabbedItem.php
src/Plugin/Field/FieldType/TabbedItem.php
<?php namespace Drupal\rocketship_core\Plugin\Field\FieldType; use Drupal\Component\Utility\Random; use Drupal\Core\Field\FieldDefinitionInterface; use Drupal\Core\Field\FieldItemBase; use Drupal\Core\Field\FieldStorageDefinitionInterface; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\TypedData\DataDefinition; /** * Plugin implementation of the 'tabbed_field_type' field type. * * @FieldType( * id = "tabbed_item", * label = @Translation("Tabbed field"), * default_widget = "tabbed_widget", * default_formatter = "tabbed_formatter", * description = @Translation("A field containing a title and body") * ) */ class TabbedItem extends FieldItemBase { /** * {@inheritdoc} */ public static function defaultStorageSettings() { return [ 'max_length' => 255, 'title' => '', 'value' => '', 'format' => NULL, ] + parent::defaultStorageSettings(); } /** * {@inheritdoc} */ public static function propertyDefinitions(FieldStorageDefinitionInterface $field_definition) { $properties['title'] = DataDefinition::create('string') ->setLabel(t('Title')) ->setRequired(TRUE); $properties['value'] = DataDefinition::create('string') ->setLabel('Body value') ->setRequired(TRUE); $properties['format'] = DataDefinition::create('filter_format') ->setLabel(t('Text format')); $properties['processed'] = DataDefinition::create('string') ->setLabel(t('Processed text')) ->setDescription(t('The text with the text format applied')) ->setComputed(TRUE) ->setClass('\Drupal\text\TextProcessed') ->setSetting('text source', 'body'); return $properties; } /** * {@inheritdoc} */ public static function schema(FieldStorageDefinitionInterface $field_definition) { $schema = [ 'columns' => [ 'title' => [ 'description' => 'The link text.', 'type' => 'varchar', 'length' => 255, ], 'value' => [ 'type' => 'text', 'size' => 'big', ], 'format' => [ 'type' => 'varchar_ascii', 'length' => 255, ], ], 'indexes' => [ 'format' => ['format'], ], ]; return $schema; } /** * {@inheritdoc} */ public static function generateSampleValue(FieldDefinitionInterface $field_definition) { $random = new Random(); $body = $random->paragraphs(); $title = $random->word(mt_rand(1, $field_definition->getSetting('max_length'))); $values = [ 'title' => $title, 'value' => $body, 'format' => filter_fallback_format(), ]; return $values; } /** * {@inheritdoc} */ public function storageSettingsForm(array &$form, FormStateInterface $form_state, $has_data) { $elements = []; $elements['max_length'] = [ '#type' => 'number', '#title' => t('Maximum length'), '#default_value' => $this->getSetting('max_length'), '#required' => TRUE, '#description' => t('The maximum length of the title field in characters.'), '#min' => 1, '#disabled' => $has_data, ]; return $elements; } /** * {@inheritdoc} */ public function isEmpty() { $title = $this->get('title')->getValue(); $body = $this->get('value')->getValue(); if (($title === NULL || $title === '') && ($body === NULL || $body === '')) { return TRUE; } else { return FALSE; } } /** * {@inheritdoc} */ public function preSave() { // Let the editor handle the images that may be uploaded in a tabbed field. if (\Drupal::moduleHandler()->moduleExists('editor')) { $text = $this->get('value')->getValue(); $uuids = _editor_parse_file_uuids($text); _editor_record_file_usage($uuids, $this->getEntity()); } parent::preSave(); } }