/**
  * {@inheritdoc}
  */
 public function preSave()
 {
     parent::preSave();
     // Merge field defaults on top of global ones.
     $default_tags = metatag_get_default_tags();
     // Get the value about to be saved.
     $current_value = $this->value;
     $current_tags = unserialize($current_value);
     // Only include values that differ from the default.
     // @TODO: When site defaults are added, account for those.
     $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;
         }
     }
     // Update the value to only save overridden tags.
     $this->value = serialize($tags_to_save);
 }
 /**
  * {@inheritdoc}
  */
 public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state)
 {
     $item = $items[$delta];
     $default_tags = metatag_get_default_tags();
     // Retrieve the values for each metatag from the serialized array.
     $values = array();
     if (!empty($item->value)) {
         $values = unserialize($item->value);
     }
     // Populate fields which have not been overridden in the entity.
     foreach ($default_tags as $tag_id => $tag_value) {
         if (!isset($values[$tag_id]) && !empty($tag_value)) {
             $values[$tag_id] = $tag_value;
         }
     }
     // Create the form element.
     $element = $this->metatagManager->form($values, $element);
     return $element;
 }