MetatagFieldItem.php in Metatag 8
File
src/Plugin/Field/FieldType/MetatagFieldItem.php
View source
<?php
namespace Drupal\metatag\Plugin\Field\FieldType;
use Drupal\Core\Field\FieldItemBase;
use Drupal\Core\Field\FieldStorageDefinitionInterface;
use Drupal\Core\TypedData\DataDefinition;
class MetatagFieldItem extends FieldItemBase {
public static function schema(FieldStorageDefinitionInterface $field_definition) {
return [
'columns' => [
'value' => [
'type' => 'text',
'size' => 'big',
'not null' => FALSE,
],
],
];
}
public static function propertyDefinitions(FieldStorageDefinitionInterface $field_definition) {
$properties['value'] = DataDefinition::create('metatag')
->setLabel(t('Metatag'))
->setRequired(TRUE);
return $properties;
}
public function isEmpty() {
$value = $this
->get('value')
->getValue();
return $value === NULL || $value === '' || $value === serialize([]);
}
public function preSave() {
parent::preSave();
$default_tags = metatag_get_default_tags($this
->getEntity());
$current_value = $this->value;
if (is_string($current_value)) {
$current_tags = unserialize($current_value);
}
else {
$current_tags = $current_value;
}
$tags_to_save = [];
foreach ($current_tags as $tag_id => $tag_value) {
if (!isset($default_tags[$tag_id]) || $tag_value != $default_tags[$tag_id]) {
$tags_to_save[$tag_id] = $tag_value;
}
}
$this->value = serialize($tags_to_save);
}
}