5 * Contains \Drupal\video\Plugin\Field\FieldType\VideoItem.
8 namespace Drupal\video\Plugin\Field\FieldType;
10 use Drupal\Core\Field\FieldDefinitionInterface;
11 use Drupal\Core\Field\FieldStorageDefinitionInterface;
12 use Drupal\Core\Form\FormStateInterface;
13 use Drupal\Core\StreamWrapper\StreamWrapperInterface;
14 use Drupal\Core\TypedData\DataDefinition;
15 use Drupal\file\Entity\File;
16 use Drupal\file\Plugin\Field\FieldType\FileItem;
19 * Plugin implementation of the 'video' field type.
23 * label = @Translation("Video"),
24 * description = @Translation("This field stores the ID of an video file or embedded video as an integer value."),
25 * category = @Translation("Reference"),
26 * default_widget = "video_embed",
27 * default_formatter = "video_embed_player",
30 * "label" = @Translation("File"),
36 * list_class = "\Drupal\file\Plugin\Field\FieldType\FileFieldItemList",
37 * constraints = {"ReferenceAccess" = {}, "FileValidation" = {}}
40 class VideoItem extends FileItem {
45 * @var \Drupal\Core\Entity\EntityManagerInterface
47 protected $entityManager;
52 public static function defaultStorageSettings() {
54 'default_video' => array(
58 ) + parent::defaultStorageSettings();
64 public static function defaultFieldSettings() {
66 'file_extensions' => '',
67 'file_directory' => 'videos/[date:custom:Y]-[date:custom:m]',
68 ) + parent::defaultFieldSettings();
69 // Remove field option.
70 unset($settings['description_field']);
77 public static function schema(FieldStorageDefinitionInterface $field_definition) {
81 'description' => 'The ID of the file entity.',
86 'description' => "Additional video metadata.",
92 'target_id' => array('target_id'),
94 'foreign keys' => array(
96 'table' => 'file_managed',
97 'columns' => array('target_id' => 'fid'),
106 public static function propertyDefinitions(FieldStorageDefinitionInterface $field_definition) {
107 $properties = parent::propertyDefinitions($field_definition);
109 // unset the default values from the file module
110 unset($properties['display']);
111 unset($properties['description']);
113 $properties['data'] = DataDefinition::create('string')
114 ->setLabel(t('Additional video metadata'))
115 ->setDescription(t("Additional metadata for the uploadded or embedded video."));
123 public function storageSettingsForm(array &$form, FormStateInterface $form_state, $has_data) {
131 public function fieldSettingsForm(array $form, FormStateInterface $form_state) {
132 // Get base form from FileItem.
133 $element = parent::fieldSettingsForm($form, $form_state);
135 // Remove the description option.
136 unset($element['description_field']);
137 unset($element['file_directory']);
138 unset($element['file_extensions']);
139 unset($element['max_filesize']);
146 public function preSave() {
153 public static function generateSampleValue(FieldDefinitionInterface $field_definition) {
154 $random = new Random();
155 $settings = $field_definition->getSettings();
157 // Prepare destination.
158 $dirname = static::doGetUploadLocation($settings);
159 file_prepare_directory($dirname, FILE_CREATE_DIRECTORY);
161 // Generate a file entity.
162 $destination = $dirname . '/' . $random->name(10, TRUE) . '.mp4';
163 $data = $random->paragraphs(3);
164 $file = file_save_data($data, $destination, FILE_EXISTS_ERROR);
166 'target_id' => $file->id(),
174 public function isDisplayed() {
175 // Video items do not have per-item visibility settings.
180 * Gets the entity manager.
182 * @return \Drupal\Core\Entity\EntityManagerInterface.
184 protected function getEntityManager() {
185 if (!isset($this->entityManager)) {
186 $this->entityManager = \Drupal::entityManager();
188 return $this->entityManager;