Version 1
[yaffs-website] / web / modules / contrib / fontyourface / src / Entity / Font.php
diff --git a/web/modules/contrib/fontyourface/src/Entity/Font.php b/web/modules/contrib/fontyourface/src/Entity/Font.php
new file mode 100644 (file)
index 0000000..fb71efe
--- /dev/null
@@ -0,0 +1,461 @@
+<?php
+
+namespace Drupal\fontyourface\Entity;
+
+use Drupal\Core\Field\BaseFieldDefinition;
+use Drupal\Core\Entity\ContentEntityBase;
+use Drupal\Core\Entity\EntityChangedTrait;
+use Drupal\Core\Entity\EntityTypeInterface;
+use Drupal\fontyourface\FontInterface;
+
+/**
+ * Defines the Font entity.
+ *
+ * @ingroup fontyourface
+ *
+ * @ContentEntityType(
+ *   id = "font",
+ *   label = @Translation("Font"),
+ *   handlers = {
+ *     "storage_schema" = "Drupal\fontyourface\FontStorageSchema",
+ *     "view_builder" = "Drupal\Core\Entity\EntityViewBuilder",
+ *     "list_builder" = "Drupal\fontyourface\FontListBuilder",
+ *     "views_data" = "Drupal\fontyourface\Entity\FontViewsData",
+ *
+ *     "form" = {
+ *       "default" = "Drupal\fontyourface\Form\FontForm",
+ *       "edit" = "Drupal\fontyourface\Form\FontForm",
+ *     },
+ *     "access" = "Drupal\fontyourface\FontAccessControlHandler",
+ *     "route_provider" = {
+ *       "html" = "Drupal\fontyourface\FontHtmlRouteProvider",
+ *     },
+ *   },
+ *   base_table = "fontyourface_font",
+ *   admin_permission = "administer font entities",
+ *   entity_keys = {
+ *     "id" = "fid",
+ *     "label" = "name",
+ *     "uuid" = "uuid",
+ *     "pid" = "pid",
+ *     "url" = "url",
+ *   },
+ *   links = {
+ *     "canonical" = "/admin/appearance/font/{font}",
+ *     "enable" = "/admin/appearance/font/{font}/{js}/enable",
+ *     "disable" = "/admin/appearance/font/{font}/{js}/disable",
+ *     "collection" = "/admin/appearance/font",
+ *   },
+ *   field_ui_base_route = "font.settings",
+ *   render_cache = FALSE
+ * )
+ */
+class Font extends ContentEntityBase implements FontInterface {
+  use EntityChangedTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getProvider() {
+    return $this->get('pid')->value;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setProvider($provider) {
+    $this->set('pid', $provider);
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getMetadata() {
+    return unserialize($this->get('metadata')->value);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setMetadata($metadata) {
+    $this->set('metadata', serialize($metadata));
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getCreatedTime() {
+    return $this->get('created')->value;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setCreatedTime($timestamp) {
+    $this->set('created', $timestamp);
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getChangedTime() {
+    return $this->get('changed')->value;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setChangedTime($timestamp) {
+    $this->set('changed', $timestamp);
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function isEnabled() {
+    $config = \Drupal::config('fontyourface.settings');
+    $enabled_fonts = $config->get('enabled_fonts');
+    return in_array($this->url->value, $enabled_fonts);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function isDisabled() {
+    return !$this->isEnabled();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function enable() {
+    $config = \Drupal::configFactory()->getEditable('fontyourface.settings');
+    if (!$this->isEnabled()) {
+      $enabled_fonts = $config->get('enabled_fonts');
+      $enabled_fonts[] = $this->url->value;
+      $config->set('enabled_fonts', $enabled_fonts)
+        ->save();
+    }
+    $this->status->value = TRUE;
+    $this->save();
+    return $this->isEnabled();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function disable() {
+    $config = \Drupal::configFactory()->getEditable('fontyourface.settings');
+    $enabled_fonts = $config->get('enabled_fonts');
+    $enabled_fonts = array_diff($enabled_fonts, [$this->url->value]);
+    $config->set('enabled_fonts', $enabled_fonts)
+      ->save();
+    $this->status->value = FALSE;
+    $this->save();
+    return $this->isDisabled();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function loadEnabledFonts() {
+    $config = \Drupal::config('fontyourface.settings');
+    $enabled_fonts = $config->get('enabled_fonts');
+    $fonts = [];
+    foreach ($enabled_fonts as $enabled_font_url) {
+      $font = self::loadByUrl($enabled_font_url);
+      if (!empty($font)) {
+        $fonts[$font->url->value] = $font;
+      }
+    }
+    return $fonts;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function loadByUrl($font_url) {
+    $fonts = \Drupal::entityManager()->getStorage('font')->loadByProperties(['url' => $font_url]);
+    return reset($fonts);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
+    $fields['fid'] = BaseFieldDefinition::create('integer')
+      ->setLabel(t('ID'))
+      ->setDescription(t('The ID of the Font entity.'))
+      ->setReadOnly(TRUE);
+    $fields['uuid'] = BaseFieldDefinition::create('uuid')
+      ->setLabel(t('UUID'))
+      ->setDescription(t('The UUID of the Font entity.'))
+      ->setReadOnly(TRUE);
+    $fields['pid'] = BaseFieldDefinition::create('string')
+      ->setLabel(t('Provider ID'))
+      ->setDescription(t('The font provider ID.'))
+      ->setSettings([
+        'max_length' => 50,
+        'text_processing' => 0,
+      ])
+      ->setDefaultValue('')
+      ->setDisplayOptions('view', [
+        'label' => 'hidden',
+        'type' => 'string',
+        'weight' => -4,
+      ])
+      ->setDisplayOptions('form', [
+        'type' => 'string_textfield',
+        'weight' => -4,
+      ])
+      ->setDisplayConfigurable('form', TRUE)
+      ->setDisplayConfigurable('view', TRUE);
+
+    $fields['url'] = BaseFieldDefinition::create('string')
+      ->setLabel(t('Font URL'))
+      ->setDescription(t('A URL for the font.'))
+      ->setSettings([
+        'max_length' => 191,
+        'text_processing' => 0,
+      ])
+      ->setDefaultValue('')
+      ->setDisplayOptions('view', [
+        'label' => 'above',
+        'type' => 'string',
+        'weight' => -4,
+      ])
+      ->setDisplayOptions('form', [
+        'type' => 'string_textfield',
+        'weight' => -4,
+      ])
+      ->setDisplayConfigurable('form', TRUE)
+      ->setDisplayConfigurable('view', TRUE);
+
+    $fields['name'] = BaseFieldDefinition::create('string')
+      ->setLabel(t('Name'))
+      ->setDescription(t('The name of the Font entity.'))
+      ->setSettings([
+        'max_length' => 255,
+        'text_processing' => 0,
+      ])
+      ->setDefaultValue('')
+      ->setDisplayOptions('view', [
+        'label' => 'above',
+        'type' => 'string',
+        'weight' => -4,
+      ])
+      ->setDisplayOptions('form', [
+        'type' => 'string_textfield',
+        'weight' => -4,
+      ])
+      ->setDisplayConfigurable('form', TRUE)
+      ->setDisplayConfigurable('view', TRUE);
+
+    $fields['css_family'] = BaseFieldDefinition::create('string')
+      ->setLabel(t('CSS Family'))
+      ->setDescription(t('CSS family for the font.'))
+      ->setSettings([
+        'max_length' => 255,
+        'text_processing' => 0,
+      ])
+      ->setDefaultValue('')
+      ->setDisplayOptions('view', [
+        'label' => 'above',
+        'type' => 'string',
+        'weight' => -4,
+      ])
+      ->setDisplayOptions('form', [
+        'type' => 'string_textfield',
+        'weight' => -4,
+      ])
+      ->setDisplayConfigurable('form', TRUE)
+      ->setDisplayConfigurable('view', TRUE);
+
+    $fields['css_style'] = BaseFieldDefinition::create('string')
+      ->setLabel(t('CSS Style'))
+      ->setDescription(t('CSS style for the font.'))
+      ->setSettings([
+        'max_length' => 255,
+        'text_processing' => 0,
+      ])
+      ->setDefaultValue('')
+      ->setDisplayOptions('view', [
+        'label' => 'above',
+        'type' => 'string',
+        'weight' => -4,
+      ])
+      ->setDisplayOptions('form', [
+        'type' => 'string_textfield',
+        'weight' => -4,
+      ])
+      ->setDisplayConfigurable('form', TRUE)
+      ->setDisplayConfigurable('view', TRUE);
+
+    $fields['css_weight'] = BaseFieldDefinition::create('string')
+      ->setLabel(t('CSS Weight'))
+      ->setDescription(t('CSS weight for the font.'))
+      ->setSettings([
+        'max_length' => 255,
+        'text_processing' => 0,
+      ])
+      ->setDefaultValue('')
+      ->setDisplayOptions('view', [
+        'label' => 'above',
+        'type' => 'string',
+        'weight' => -4,
+      ])
+      ->setDisplayOptions('form', [
+        'type' => 'string_textfield',
+        'weight' => -4,
+      ])
+      ->setDisplayConfigurable('form', TRUE)
+      ->setDisplayConfigurable('view', TRUE);
+
+    $fields['foundry'] = BaseFieldDefinition::create('string')
+      ->setLabel(t('Foundry'))
+      ->setDescription(t('Foundry for the font.'))
+      ->setSettings([
+        'max_length' => 255,
+        'text_processing' => 0,
+      ])
+      ->setDefaultValue('')
+      ->setDisplayOptions('view', [
+        'label' => 'above',
+        'type' => 'string',
+        'weight' => -4,
+      ])
+      ->setDisplayOptions('form', [
+        'type' => 'string_textfield',
+        'weight' => -4,
+      ])
+      ->setDisplayConfigurable('form', TRUE)
+      ->setDisplayConfigurable('view', TRUE);
+
+    $fields['foundry_url'] = BaseFieldDefinition::create('string')
+      ->setLabel(t('Foundry URL'))
+      ->setDescription(t('Foundry URL.'))
+      ->setSettings([
+        'max_length' => 255,
+        'text_processing' => 0,
+      ])
+      ->setDefaultValue('')
+      ->setDisplayOptions('view', [
+        'label' => 'above',
+        'type' => 'string',
+        'weight' => -4,
+      ])
+      ->setDisplayOptions('form', [
+        'type' => 'string_textfield',
+        'weight' => -4,
+      ])
+      ->setDisplayConfigurable('form', TRUE)
+      ->setDisplayConfigurable('view', TRUE);
+
+    $fields['license'] = BaseFieldDefinition::create('string')
+      ->setLabel(t('License'))
+      ->setDescription(t('Font License.'))
+      ->setSettings([
+        'max_length' => 255,
+        'text_processing' => 0,
+      ])
+      ->setDefaultValue('')
+      ->setDisplayOptions('view', [
+        'label' => 'above',
+        'type' => 'string',
+        'weight' => -4,
+      ])
+      ->setDisplayOptions('form', [
+        'type' => 'string_textfield',
+        'weight' => -4,
+      ])
+      ->setDisplayConfigurable('form', TRUE)
+      ->setDisplayConfigurable('view', TRUE);
+
+    $fields['license_url'] = BaseFieldDefinition::create('string')
+      ->setLabel(t('License URL'))
+      ->setDescription(t('License URL.'))
+      ->setSettings([
+        'max_length' => 255,
+        'text_processing' => 0,
+      ])
+      ->setDefaultValue('')
+      ->setDisplayOptions('view', [
+        'label' => 'above',
+        'type' => 'string',
+        'weight' => -4,
+      ])
+      ->setDisplayOptions('form', [
+        'type' => 'string_textfield',
+        'weight' => -4,
+      ])
+      ->setDisplayConfigurable('form', TRUE)
+      ->setDisplayConfigurable('view', TRUE);
+
+    $fields['designer'] = BaseFieldDefinition::create('string')
+      ->setLabel(t('Designer'))
+      ->setDescription(t('Font Designer'))
+      ->setSettings([
+        'max_length' => 255,
+        'text_processing' => 0,
+      ])
+      ->setDefaultValue('')
+      ->setDisplayOptions('view', [
+        'label' => 'above',
+        'type' => 'string',
+        'weight' => -4,
+      ])
+      ->setDisplayOptions('form', [
+        'type' => 'string_textfield',
+        'weight' => -4,
+      ])
+      ->setDisplayConfigurable('form', TRUE)
+      ->setDisplayConfigurable('view', TRUE);
+
+    $fields['designer_url'] = BaseFieldDefinition::create('string')
+      ->setLabel(t('Designer URL'))
+      ->setDescription(t('Designer URL.'))
+      ->setSettings([
+        'max_length' => 255,
+        'text_processing' => 0,
+      ])
+      ->setDefaultValue('')
+      ->setDisplayOptions('view', [
+        'label' => 'above',
+        'type' => 'string',
+        'weight' => -4,
+      ])
+      ->setDisplayOptions('form', [
+        'type' => 'string_textfield',
+        'weight' => -4,
+      ])
+      ->setDisplayConfigurable('form', TRUE)
+      ->setDisplayConfigurable('view', TRUE);
+
+    $fields['metadata'] = BaseFieldDefinition::create('string_long')
+      ->setLabel(t('Font Metadata'))
+      ->setDescription(t('Additional Font Metadata'))
+      ->setDisplayConfigurable('form', TRUE)
+      ->setDisplayConfigurable('view', TRUE);
+
+    $fields['created'] = BaseFieldDefinition::create('created')
+      ->setLabel(t('Created'))
+      ->setDescription(t('The time that the entity was created.'));
+
+    $fields['changed'] = BaseFieldDefinition::create('changed')
+      ->setLabel(t('Changed'))
+      ->setDescription(t('The time that the entity was last edited.'));
+
+    $fields['status'] = BaseFieldDefinition::create('boolean')
+      ->setLabel(t('Font status'))
+      ->setDescription(t('A boolean indicating whether the font is enabled. Mostly used for views.'))
+      ->setTranslatable(TRUE)
+      ->setDefaultValue(FALSE);
+
+    return $fields;
+  }
+
+}