You are here

class WebformOptionsCustom in Webform 6.x

Same name in this branch
  1. 6.x modules/webform_options_custom/src/Element/WebformOptionsCustom.php \Drupal\webform_options_custom\Element\WebformOptionsCustom
  2. 6.x modules/webform_options_custom/src/Entity/WebformOptionsCustom.php \Drupal\webform_options_custom\Entity\WebformOptionsCustom
  3. 6.x modules/webform_options_custom/src/Plugin/WebformElement/WebformOptionsCustom.php \Drupal\webform_options_custom\Plugin\WebformElement\WebformOptionsCustom
Same name and namespace in other branches
  1. 8.5 modules/webform_options_custom/src/Entity/WebformOptionsCustom.php \Drupal\webform_options_custom\Entity\WebformOptionsCustom

Defines the webform options custom entity.

Plugin annotation


@ConfigEntityType(
  id = "webform_options_custom",
  label = @Translation("Webform options custom"),
  label_collection = @Translation("Custom options"),
  label_singular = @Translation("custom options"),
  label_plural = @Translation("custom options"),
  label_count = @PluralTranslation(
    singular = "@count custom options",
    plural = "@count custom options",
  ),
  handlers = {
    "storage" = "\Drupal\webform_options_custom\WebformOptionsCustomStorage",
    "access" = "Drupal\webform_options_custom\WebformOptionsCustomAccessControlHandler",
    "list_builder" = "Drupal\webform_options_custom\WebformOptionsCustomListBuilder",
    "form" = {
      "add" = "Drupal\webform_options_custom\WebformOptionsCustomForm",
      "edit" = "Drupal\webform_options_custom\WebformOptionsCustomForm",
      "source" = "Drupal\webform_options_custom\WebformOptionsCustomForm",
      "preview" = "Drupal\webform_options_custom\WebformOptionsCustomForm",
      "duplicate" = "Drupal\webform_options_custom\WebformOptionsCustomForm",
      "delete" = "Drupal\webform_options_custom\WebformOptionsCustomDeleteForm",
    }
  },
  admin_permission = "administer webform",
  entity_keys = {
    "id" = "id",
    "label" = "label",
  },
  links = {
    "add-form" = "/admin/structure/webform/options/custom/manage/add",
    "edit-form" = "/admin/structure/webform/options/custom/manage/{webform_options_custom}/edit",
    "source-form" = "/admin/structure/webform/options/custom/manage/{webform_options_custom}/source",
    "duplicate-form" = "/admin/structure/webform/options/custom/manage/{webform_options_custom}/duplicate",
    "delete-form" = "/admin/structure/webform/options/custom/manage/{webform_options_custom}/delete",
    "collection" = "/admin/structure/webform/options/custom/manage",
  },
  config_export = {
    "id",
    "uuid",
    "label",
    "description",
    "help",
    "category",
    "type",
    "template",
    "url",
    "css",
    "javascript",
    "options",
    "value_attributes",
    "text_attributes",
    "fill",
    "zoom",
    "tooltip",
    "show_select",
    "element",
    "entity_reference",
  }
)

Hierarchy

Expanded class hierarchy of WebformOptionsCustom

2 files declare their use of WebformOptionsCustom
WebformOptionsCustom.php in modules/webform_options_custom/src/Element/WebformOptionsCustom.php
WebformOptionsCustomTest.php in modules/webform_options_custom/tests/src/Functional/WebformOptionsCustomTest.php

File

modules/webform_options_custom/src/Entity/WebformOptionsCustom.php, line 78

Namespace

Drupal\webform_options_custom\Entity
View source
class WebformOptionsCustom extends ConfigEntityBase implements WebformOptionsCustomInterface {
  use StringTranslationTrait;

  /**
   * The custom options ID.
   *
   * @var string
   */
  protected $id;

  /**
   * The custom options UUID.
   *
   * @var string
   */
  protected $uuid;

  /**
   * The custom options label.
   *
   * @var string
   */
  protected $label;

  /**
   * The custom options description.
   *
   * @var string
   */
  protected $description;

  /**
   * The custom options help.
   *
   * @var string
   */
  protected $help;

  /**
   * The custom options category.
   *
   * @var string
   */
  protected $category;

  /**
   * The type of custom options.
   *
   * @var string
   */
  protected $type = WebformOptionsCustomInterface::TYPE_URL;

  /**
   * The custom HTML/SVG markup.
   *
   * @var string
   */
  protected $template;

  /**
   * The custom HTML/SVG URL.
   *
   * @var string
   */
  protected $url;

  /**
   * The option value attribute names.
   *
   * @var string
   */
  protected $value_attributes = 'data-option-value,data-value,data-id,id';

  /**
   * The option text attribute names.
   *
   * @var string
   */
  protected $text_attributes = 'data-option-text,data-text,data-name,name,title';

  /**
   * Allow SVG to be filled using CSS.
   *
   * @var bool
   */
  protected $fill = TRUE;

  /**
   * Enable SVG pan and zoom.
   *
   * @var bool
   */
  protected $zoom = TRUE;

  /**
   * Display text and description in a tooltip.
   *
   * @var bool
   */
  protected $tooltip = TRUE;

  /**
   * Hide select menu.
   *
   * @var bool
   */
  protected $show_select = TRUE;

  /**
   * Use custom options as a webform select element.
   *
   * @var bool
   */
  protected $element = TRUE;

  /**
   * Use custom options as a webform entity reference element.
   *
   * @var bool
   */
  protected $entity_reference = FALSE;

  /**
   * The CSS style sheet.
   *
   * @var string
   */
  protected $css = '';

  /**
   * The JavaScript.
   *
   * @var string
   */
  protected $javascript = '';

  /**
   * The custom options.
   *
   * @var string
   */
  protected $options;

  /**
   * The custom options decoded.
   *
   * @var string
   */
  protected $optionsDecoded;

  /**
   * {@inheritdoc}
   */
  public function getOptions() {
    if (!isset($this->optionsDecoded)) {
      try {
        $options = $this->options ? Yaml::decode($this->options) : [];

        // Since YAML supports simple values.
        $options = is_array($options) ? $options : [];
      } catch (\Exception $exception) {
        $link = $this
          ->toLink($this
          ->t('Edit'), 'edit-form')
          ->toString();
        \Drupal::logger('webform_options_custom')
          ->notice('%title custom options are not valid. @message', [
          '%title' => $this
            ->label(),
          '@message' => $exception
            ->getMessage(),
          'link' => $link,
        ]);
        $options = [];
      }
      $this->optionsDecoded = $options;
    }
    return $this->optionsDecoded;
  }

  /**
   * {@inheritdoc}
   */
  public function setOptions(array $options) {
    $this->options = Yaml::encode($options);
    $this->optionsDecoded = NULL;
  }

  /**
   * Set a custom options element HTML/SVG template.
   *
   * @return string
   *   A custom options element HTML/SVG template.
   */
  public function getTemplate() {
    switch ($this->type) {
      case WebformOptionsCustomInterface::TYPE_URL:
        $url = $this
          ->getUrl();
        return $url ? file_get_contents($url) : '';
      default:
      case WebformOptionsCustomInterface::TYPE_TEMPLATE:
        return $this->template;
    }
  }

  /**
   * Set a custom options element template URL.
   *
   * @return string
   *   A custom options element template URL.
   */
  public function getUrl() {
    global $base_url;
    $url = $this->url;
    if (empty($url)) {
      return NULL;
    }
    if (strpos($url, '/') === 0) {

      // Map root-relative path.
      $url = $base_url . preg_replace('/^' . preg_quote(base_path(), '/') . '/', '/', $url);
    }
    elseif (strpos($url, 'http') !== 0) {

      // Map webform_option_custom/images path.
      $path = drupal_get_path('module', 'webform_options_custom') . '/images/' . $url;
      if (file_exists($path)) {
        $url = $base_url . '/' . $path;
      }
    }
    if (strpos($url, 'http') === 0) {
      return $url;
    }
    return NULL;
  }

  /**
   * {@inheritdoc}
   */
  public function getElement() {
    return [
      '#type' => 'webform_options_custom',
      '#options_custom' => $this
        ->id(),
      '#template' => $this
        ->getTemplate(),
      '#options' => $this
        ->getOptions(),
      '#fill' => $this
        ->get('fill'),
      '#zoom' => $this
        ->get('zoom'),
      '#tooltip' => $this
        ->get('tooltip'),
      '#show_select' => $this
        ->get('show_select'),
      '#value_attributes' => $this
        ->get('value_attributes'),
      '#text_attributes' => $this
        ->get('text_attributes'),
    ];
  }

  /**
   * {@inheritdoc}
   */
  public function getPreview() {
    $element = [
      '#title' => $this
        ->label(),
    ] + $this
      ->getElement();

    // Set default #options.
    if (empty($element['#options'])) {
      $element['#options'] = [
        'one' => t('One -- This is the number 1.'),
        'two' => t('Two -- This is the number 2.'),
        'three' => t('Three -- This is the number 3.'),
      ];
    }

    // Set assets (CSS and JavaScript).
    $assets = '';
    if ($this->css) {
      $assets .= '<style>' . $this->css . '</style>';
    }
    if ($this->javascript) {
      $assets .= '<script>' . $this->javascript . '</script>';
    }
    if ($assets) {
      $element['#prefix'] = Markup::create($assets);
    }
    return $element;
  }

  /**
   * Get template custom options.
   *
   * @return array
   *   A templates custom options.
   */
  public function getTemplateOptions() {
    $element = $this
      ->getElement();
    WebformOptionsCustomElement::setTemplateOptions($element);
    return $element['#options'];
  }

  /**
   * {@inheritdoc}
   */
  public function postSave(EntityStorageInterface $storage, $update = TRUE) {
    parent::postSave($storage, $update);

    /** @var \Drupal\webform\Plugin\WebformElementManagerInterface $element_manager */
    $element_manager = \Drupal::service('plugin.manager.webform.element');
    $element_manager
      ->clearCachedDefinitions();

    // Clear cached properties.
    $this->optionsDecoded = NULL;

    // Invalidate library_info cache tag if any element
    // declares CSS or JavaScript.
    // @see webform_library_info_build()
    if ($this->css || $this->javascript) {
      Cache::invalidateTags([
        'library_info',
      ]);
    }
  }

  /**
   * {@inheritdoc}
   */
  public static function sort(ConfigEntityInterface $a, ConfigEntityInterface $b) {
    $a_label = $a
      ->get('category') . $a
      ->label();
    $b_label = $b
      ->get('category') . $b
      ->label();
    return strnatcasecmp($a_label, $b_label);
  }

}

Members

Namesort descending Modifiers Type Description Overrides
CacheableDependencyTrait::$cacheContexts protected property Cache contexts.
CacheableDependencyTrait::$cacheMaxAge protected property Cache max-age.
CacheableDependencyTrait::$cacheTags protected property Cache tags.
CacheableDependencyTrait::setCacheability protected function Sets cacheability; useful for value object constructors.
ConfigEntityBase::$isUninstalling private property Whether the config is being deleted by the uninstall process.
ConfigEntityBase::$langcode protected property The language code of the entity's default language.
ConfigEntityBase::$originalId protected property The original ID of the configuration entity.
ConfigEntityBase::$status protected property The enabled/disabled status of the configuration entity. 4
ConfigEntityBase::$third_party_settings protected property Third party entity settings.
ConfigEntityBase::$trustedData protected property Trust supplied data and not use configuration schema on save.
ConfigEntityBase::$_core protected property
ConfigEntityBase::addDependency protected function Overrides \Drupal\Core\Entity\DependencyTrait:addDependency().
ConfigEntityBase::calculateDependencies public function Calculates dependencies and stores them in the dependency property. Overrides ConfigEntityInterface::calculateDependencies 14
ConfigEntityBase::createDuplicate public function Creates a duplicate of the entity. Overrides EntityBase::createDuplicate 1
ConfigEntityBase::disable public function Disables the configuration entity. Overrides ConfigEntityInterface::disable 1
ConfigEntityBase::enable public function Enables the configuration entity. Overrides ConfigEntityInterface::enable
ConfigEntityBase::get public function Returns the value of a property. Overrides ConfigEntityInterface::get
ConfigEntityBase::getCacheTagsToInvalidate public function Returns the cache tags that should be used to invalidate caches. Overrides EntityBase::getCacheTagsToInvalidate 1
ConfigEntityBase::getConfigDependencyName public function Gets the configuration dependency name. Overrides EntityBase::getConfigDependencyName
ConfigEntityBase::getConfigManager protected static function Gets the configuration manager.
ConfigEntityBase::getConfigTarget public function Gets the configuration target identifier for the entity. Overrides EntityBase::getConfigTarget
ConfigEntityBase::getDependencies public function Gets the configuration dependencies. Overrides ConfigEntityInterface::getDependencies
ConfigEntityBase::getOriginalId public function Gets the original ID. Overrides EntityBase::getOriginalId
ConfigEntityBase::getThirdPartyProviders public function Gets the list of third parties that store information. Overrides ThirdPartySettingsInterface::getThirdPartyProviders
ConfigEntityBase::getThirdPartySetting public function Gets the value of a third-party setting. Overrides ThirdPartySettingsInterface::getThirdPartySetting
ConfigEntityBase::getThirdPartySettings public function Gets all third-party settings of a given module. Overrides ThirdPartySettingsInterface::getThirdPartySettings
ConfigEntityBase::getTypedConfig protected function Gets the typed config manager.
ConfigEntityBase::hasTrustedData public function Gets whether on not the data is trusted. Overrides ConfigEntityInterface::hasTrustedData
ConfigEntityBase::invalidateTagsOnDelete protected static function Override to never invalidate the individual entities' cache tags; the config system already invalidates them. Overrides EntityBase::invalidateTagsOnDelete
ConfigEntityBase::invalidateTagsOnSave protected function Override to never invalidate the entity's cache tag; the config system already invalidates it. Overrides EntityBase::invalidateTagsOnSave
ConfigEntityBase::isInstallable public function Checks whether this entity is installable. Overrides ConfigEntityInterface::isInstallable 2
ConfigEntityBase::isNew public function Overrides Entity::isNew(). Overrides EntityBase::isNew
ConfigEntityBase::isUninstalling public function Returns whether this entity is being changed during the uninstall process. Overrides ConfigEntityInterface::isUninstalling
ConfigEntityBase::onDependencyRemoval public function Informs the entity that entities it depends on will be deleted. Overrides ConfigEntityInterface::onDependencyRemoval 8
ConfigEntityBase::preDelete public static function Acts on entities before they are deleted and before hooks are invoked. Overrides EntityBase::preDelete 8
ConfigEntityBase::preSave public function Acts on an entity before the presave hook is invoked. Overrides EntityBase::preSave 13
ConfigEntityBase::save public function Saves an entity permanently. Overrides EntityBase::save 1
ConfigEntityBase::set public function Sets the value of a property. Overrides ConfigEntityInterface::set
ConfigEntityBase::setOriginalId public function Sets the original ID. Overrides EntityBase::setOriginalId
ConfigEntityBase::setStatus public function Sets the status of the configuration entity. Overrides ConfigEntityInterface::setStatus
ConfigEntityBase::setThirdPartySetting public function Sets the value of a third-party setting. Overrides ThirdPartySettingsInterface::setThirdPartySetting
ConfigEntityBase::setUninstalling public function
ConfigEntityBase::status public function Returns whether the configuration entity is enabled. Overrides ConfigEntityInterface::status 4
ConfigEntityBase::toArray public function Gets an array of all property values. Overrides EntityBase::toArray 2
ConfigEntityBase::toUrl public function Gets the URL object for the entity. Overrides EntityBase::toUrl
ConfigEntityBase::trustData public function Sets that the data should be trusted. Overrides ConfigEntityInterface::trustData
ConfigEntityBase::unsetThirdPartySetting public function Unsets a third-party setting. Overrides ThirdPartySettingsInterface::unsetThirdPartySetting
ConfigEntityBase::__construct public function Constructs an Entity object. Overrides EntityBase::__construct 10
ConfigEntityBase::__sleep public function Overrides EntityBase::__sleep 4
DependencySerializationTrait::$_entityStorages protected property
DependencySerializationTrait::$_serviceIds protected property
DependencySerializationTrait::__sleep public function Aliased as: traitSleep 2
DependencySerializationTrait::__wakeup public function 2
DependencyTrait::$dependencies protected property The object's dependencies.
DependencyTrait::addDependencies protected function Adds multiple dependencies.
DependencyTrait::addDependency protected function Adds a dependency. Aliased as: addDependencyTrait
EntityBase::$enforceIsNew protected property Boolean indicating whether the entity should be forced to be new.
EntityBase::$entityTypeId protected property The entity type.
EntityBase::$typedData protected property A typed data object wrapping this entity.
EntityBase::access public function Checks data value access. Overrides AccessibleInterface::access 1
EntityBase::bundle public function Gets the bundle of the entity. Overrides EntityInterface::bundle 1
EntityBase::create public static function Constructs a new entity object, without permanently saving it. Overrides EntityInterface::create
EntityBase::delete public function Deletes an entity permanently. Overrides EntityInterface::delete 2
EntityBase::enforceIsNew public function Enforces an entity to be new. Overrides EntityInterface::enforceIsNew
EntityBase::entityTypeBundleInfo protected function Gets the entity type bundle info service.
EntityBase::entityTypeManager protected function Gets the entity type manager.
EntityBase::getCacheContexts public function The cache contexts associated with this object. Overrides CacheableDependencyTrait::getCacheContexts
EntityBase::getCacheMaxAge public function The maximum age for which this object may be cached. Overrides CacheableDependencyTrait::getCacheMaxAge
EntityBase::getCacheTags public function The cache tags associated with this object. Overrides CacheableDependencyTrait::getCacheTags
EntityBase::getConfigDependencyKey public function Gets the key that is used to store configuration dependencies. Overrides EntityInterface::getConfigDependencyKey
EntityBase::getEntityType public function Gets the entity type definition. Overrides EntityInterface::getEntityType
EntityBase::getEntityTypeId public function Gets the ID of the type of the entity. Overrides EntityInterface::getEntityTypeId
EntityBase::getListCacheTagsToInvalidate protected function The list cache tags to invalidate for this entity.
EntityBase::getTypedData public function Gets a typed data object for this entity object. Overrides EntityInterface::getTypedData
EntityBase::hasLinkTemplate public function Indicates if a link template exists for a given key. Overrides EntityInterface::hasLinkTemplate
EntityBase::id public function Gets the identifier. Overrides EntityInterface::id 11
EntityBase::label public function Gets the label of the entity. Overrides EntityInterface::label 6
EntityBase::language public function Gets the language of the entity. Overrides EntityInterface::language 1
EntityBase::languageManager protected function Gets the language manager.
EntityBase::linkTemplates protected function Gets an array link templates. 1
EntityBase::load public static function Loads an entity. Overrides EntityInterface::load
EntityBase::loadMultiple public static function Loads one or more entities. Overrides EntityInterface::loadMultiple
EntityBase::postCreate public function Acts on a created entity before hooks are invoked. Overrides EntityInterface::postCreate 4
EntityBase::postDelete public static function Acts on deleted entities before the delete hook is invoked. Overrides EntityInterface::postDelete 18
EntityBase::postLoad public static function Acts on loaded entities. Overrides EntityInterface::postLoad 2
EntityBase::preCreate public static function Changes the values of an entity before it is created. Overrides EntityInterface::preCreate 7
EntityBase::referencedEntities public function Gets a list of entities referenced by this entity. Overrides EntityInterface::referencedEntities 1
EntityBase::toLink public function Generates the HTML for a link to this entity. Overrides EntityInterface::toLink
EntityBase::uriRelationships public function Gets a list of URI relationships supported by this entity. Overrides EntityInterface::uriRelationships
EntityBase::urlRouteParameters protected function Gets an array of placeholders for this entity. 2
EntityBase::uuid public function Gets the entity UUID (Universally Unique Identifier). Overrides EntityInterface::uuid 1
EntityBase::uuidGenerator protected function Gets the UUID generator.
PluginDependencyTrait::calculatePluginDependencies protected function Calculates and adds dependencies of a specific plugin instance. 1
PluginDependencyTrait::getPluginDependencies protected function Calculates and returns dependencies of a specific plugin instance.
PluginDependencyTrait::moduleHandler protected function Wraps the module handler. 1
PluginDependencyTrait::themeHandler protected function Wraps the theme handler. 1
RefinableCacheableDependencyTrait::addCacheableDependency public function 1
RefinableCacheableDependencyTrait::addCacheContexts public function
RefinableCacheableDependencyTrait::addCacheTags public function
RefinableCacheableDependencyTrait::mergeCacheMaxAge public function
StringTranslationTrait::$stringTranslation protected property The string translation service. 4
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.
SynchronizableEntityTrait::$isSyncing protected property Whether this entity is being created, updated or deleted through a synchronization process.
SynchronizableEntityTrait::isSyncing public function
SynchronizableEntityTrait::setSyncing public function
WebformOptionsCustom::$category protected property The custom options category.
WebformOptionsCustom::$css protected property The CSS style sheet.
WebformOptionsCustom::$description protected property The custom options description.
WebformOptionsCustom::$element protected property Use custom options as a webform select element.
WebformOptionsCustom::$entity_reference protected property Use custom options as a webform entity reference element.
WebformOptionsCustom::$fill protected property Allow SVG to be filled using CSS.
WebformOptionsCustom::$help protected property The custom options help.
WebformOptionsCustom::$id protected property The custom options ID.
WebformOptionsCustom::$javascript protected property The JavaScript.
WebformOptionsCustom::$label protected property The custom options label.
WebformOptionsCustom::$options protected property The custom options.
WebformOptionsCustom::$optionsDecoded protected property The custom options decoded.
WebformOptionsCustom::$show_select protected property Hide select menu.
WebformOptionsCustom::$template protected property The custom HTML/SVG markup.
WebformOptionsCustom::$text_attributes protected property The option text attribute names.
WebformOptionsCustom::$tooltip protected property Display text and description in a tooltip.
WebformOptionsCustom::$type protected property The type of custom options.
WebformOptionsCustom::$url protected property The custom HTML/SVG URL.
WebformOptionsCustom::$uuid protected property The custom options UUID. Overrides ConfigEntityBase::$uuid
WebformOptionsCustom::$value_attributes protected property The option value attribute names.
WebformOptionsCustom::$zoom protected property Enable SVG pan and zoom.
WebformOptionsCustom::getElement public function Get the custom options element. Overrides WebformOptionsCustomInterface::getElement
WebformOptionsCustom::getOptions public function Get options (YAML) as an associative array. Overrides WebformOptionsCustomInterface::getOptions
WebformOptionsCustom::getPreview public function Get the custom options element preview. Overrides WebformOptionsCustomInterface::getPreview
WebformOptionsCustom::getTemplate public function Set a custom options element HTML/SVG template. Overrides WebformOptionsCustomInterface::getTemplate
WebformOptionsCustom::getTemplateOptions public function Get template custom options. Overrides WebformOptionsCustomInterface::getTemplateOptions
WebformOptionsCustom::getUrl public function Set a custom options element template URL. Overrides WebformOptionsCustomInterface::getUrl
WebformOptionsCustom::postSave public function Acts on a saved entity before the insert or update hook is invoked. Overrides EntityBase::postSave
WebformOptionsCustom::setOptions public function Set options (YAML) value. Overrides WebformOptionsCustomInterface::setOptions
WebformOptionsCustom::sort public static function Helper callback for uasort() to sort configuration entities by weight and label. Overrides ConfigEntityBase::sort
WebformOptionsCustomInterface::TYPE_TEMPLATE constant Custom options from HTML/SVG template.
WebformOptionsCustomInterface::TYPE_URL constant Custom options from URL.