You are here

abstract class ResourceEntity in RESTful 7.2

Hierarchy

Expanded class hierarchy of ResourceEntity

11 files declare their use of ResourceEntity
Articles__1_0.php in modules/restful_example/src/Plugin/resource/node/article/v1/Articles__1_0.php
Contains \Drupal\restful_example\Plugin\resource\node\article\v1\Articles__1_0.
Articles__1_1.php in modules/restful_example/src/Plugin/resource/node/article/v1/Articles__1_1.php
Contains \Drupal\restful_example\Plugin\resource\node\article\v1\Articles__1_1.
Comments__1_0.php in modules/restful_example/src/Plugin/resource/comment/Comments__1_0.php
Contains \Drupal\restful_example\Plugin\resource\comment\Comments__1_0.
DataProviderEntity.php in src/Plugin/resource/DataProvider/DataProviderEntity.php
Contains \Drupal\restful\Plugin\resource\DataProvider\DataProviderEntity.
EntityTests__1_0.php in tests/modules/restful_test/src/Plugin/resource/entity_test/EntityTests__1_0.php
Contains \Drupal\restful_test\Plugin\resource\entity_test\EntityTests__1_0.

... See full list

File

src/Plugin/resource/ResourceEntity.php, line 18
Contains \Drupal\restful\Plugin\resource\ResourceEntity.

Namespace

Drupal\restful\Plugin\resource
View source
abstract class ResourceEntity extends Resource {

  /**
   * The entity type.
   *
   * @var string
   */
  protected $entityType;

  /**
   * The entity bundles.
   *
   * @var array
   */
  protected $bundles = array();

  /**
   * {@inheritdoc}
   */
  public function __construct(array $configuration, $plugin_id, $plugin_definition) {
    if (empty($plugin_definition['dataProvider']['entityType'])) {
      throw new InternalServerErrorException('The entity type was not provided.');
    }
    $this->entityType = $plugin_definition['dataProvider']['entityType'];
    if (isset($plugin_definition['dataProvider']['bundles'])) {
      $this->bundles = $plugin_definition['dataProvider']['bundles'];
    }
    parent::__construct($configuration, $plugin_id, $plugin_definition);
  }

  /**
   * Data provider factory.
   *
   * @return DataProviderEntityInterface
   *   The data provider for this resource.
   *
   * @throws ServerConfigurationException
   */
  public function dataProviderFactory() {
    $plugin_definition = $this
      ->getPluginDefinition();
    $field_definitions = $this
      ->getFieldDefinitions();
    if (!empty($plugin_definition['dataProvider']['viewMode'])) {
      $field_definitions_array = $this
        ->viewModeFields($plugin_definition['dataProvider']['viewMode']);
      $field_definitions = ResourceFieldCollection::factory($field_definitions_array, $this
        ->getRequest());
    }
    $class_name = $this
      ->dataProviderClassName();
    if (!class_exists($class_name)) {
      throw new ServerConfigurationException(sprintf('The DataProvider could not be found for this resource: %s.', $this
        ->getResourceMachineName()));
    }
    return new $class_name($this
      ->getRequest(), $field_definitions, $this
      ->getAccount(), $this
      ->getPluginId(), $this
      ->getPath(), $plugin_definition['dataProvider']);
  }

  /**
   * Data provider class.
   *
   * @return string
   *   The name of the class of the provider factory.
   */
  protected function dataProviderClassName() {

    // This helper function allows to map a resource to a different data
    // provider class.
    if ($this
      ->getEntityType() == 'node') {
      return '\\Drupal\\restful\\Plugin\\resource\\DataProvider\\DataProviderNode';
    }
    elseif ($this
      ->getEntityType() == 'taxonomy_term') {
      return '\\Drupal\\restful\\Plugin\\resource\\DataProvider\\DataProviderTaxonomyTerm';
    }
    elseif ($this
      ->getEntityType() == 'file') {
      return '\\Drupal\\restful\\Plugin\\resource\\DataProvider\\DataProviderFile';
    }
    return '\\Drupal\\restful\\Plugin\\resource\\DataProvider\\DataProviderEntity';
  }

  /**
   * {@inheritdoc}
   */
  protected function publicFields() {
    $public_fields = array();
    $public_fields['id'] = array(
      'wrapper_method' => 'getIdentifier',
      'wrapper_method_on_entity' => TRUE,
      'methods' => array(
        RequestInterface::METHOD_GET,
        RequestInterface::METHOD_OPTIONS,
      ),
      'discovery' => array(
        // Information about the field for human consumption.
        'info' => array(
          'label' => t('ID'),
          'description' => t('Base ID for the entity.'),
        ),
        // Describe the data.
        'data' => array(
          'cardinality' => 1,
          'read_only' => TRUE,
          'type' => 'integer',
          'required' => TRUE,
        ),
      ),
    );
    $public_fields['label'] = array(
      'wrapper_method' => 'label',
      'wrapper_method_on_entity' => TRUE,
      'discovery' => array(
        // Information about the field for human consumption.
        'info' => array(
          'label' => t('Label'),
          'description' => t('The label of the resource.'),
        ),
        // Describe the data.
        'data' => array(
          'type' => 'string',
        ),
        // Information about the form element.
        'form_element' => array(
          'type' => 'textfield',
          'size' => 255,
        ),
      ),
    );
    $public_fields['self'] = array(
      'callback' => array(
        $this,
        'getEntitySelf',
      ),
    );
    return $public_fields;
  }

  /**
   * Gets the entity type.
   *
   * @return string
   *   The entity type.
   */
  public function getEntityType() {
    return $this->entityType;
  }

  /**
   * Gets the entity bundle.
   *
   * @return array
   *   The bundles.
   */
  public function getBundles() {
    return $this->bundles;
  }

  /**
   * Get the "self" url.
   *
   * @param DataInterpreterInterface $interpreter
   *   The wrapped entity.
   *
   * @return string
   *   The self URL.
   */
  public function getEntitySelf(DataInterpreterInterface $interpreter) {
    return $this
      ->versionedUrl($interpreter
      ->getWrapper()
      ->getIdentifier());
  }

  /**
   * Get the public fields with the default values applied to them.
   *
   * @param array $field_definitions
   *   The field definitions to process.
   *
   * @throws \Drupal\restful\Exception\ServerConfigurationException
   *   For resources without ID field.
   *
   * @return array
   *   The field definition array.
   */
  protected function processPublicFields(array $field_definitions) {

    // The fields that only contain a property need to be set to be
    // ResourceFieldEntity. Otherwise they will be considered regular
    // ResourceField.
    return array_map(function ($field_definition) {
      $field_entity_class = '\\Drupal\\restful\\Plugin\\resource\\Field\\ResourceFieldEntity';
      $class_name = ResourceFieldEntity::fieldClassName($field_definition);
      if (!$class_name || is_subclass_of($class_name, $field_entity_class)) {
        $class_name = $field_entity_class;
      }
      return $field_definition + array(
        'class' => $class_name,
        'entityType' => $this
          ->getEntityType(),
      );
    }, $field_definitions);
  }

  /**
   * Get the public fields with default values based on view mode information.
   *
   * @param array $view_mode_info
   *   View mode configuration array.
   *
   * @return array
   *   The public fields.
   *
   * @throws ServerConfigurationException
   */
  protected function viewModeFields(array $view_mode_info) {
    $field_definitions = array();
    $entity_type = $this
      ->getEntityType();
    $bundles = $this
      ->getBundles();
    $view_mode = $view_mode_info['name'];
    if (count($bundles) != 1) {
      throw new ServerConfigurationException('View modes can only be used in resources with a single bundle.');
    }
    $bundle = reset($bundles);
    foreach ($view_mode_info['fieldMap'] as $field_name => $public_field_name) {
      $field_instance = field_info_instance($entity_type, $field_name, $bundle);
      $formatter_info = $field_instance['display'][$view_mode];
      unset($formatter_info['module']);
      unset($formatter_info['weight']);
      unset($formatter_info['label']);
      $field_definitions[$public_field_name] = array(
        'property' => $field_name,
        'formatter' => $formatter_info,
        'entityType' => $this
          ->getEntityType(),
      );
    }
    return $field_definitions;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
ConfigurablePluginTrait::$instanceConfiguration protected property Plugin instance configuration.
ConfigurablePluginTrait::calculateDependencies public function
ConfigurablePluginTrait::getConfiguration public function
ConfigurablePluginTrait::setConfiguration public function
Resource::$authenticationManager protected property The authentication manager.
Resource::$dataProvider protected property The data provider.
Resource::$enabled protected property Indicates if the resource is enabled.
Resource::$fieldDefinitions protected property The field definition object.
Resource::$path protected property The requested path.
Resource::$request protected property The current request.
Resource::access public function Determine if user can access the handler. Overrides ResourceInterface::access 1
Resource::accessByAllowOrigin protected function Checks access based on the referer header and the allowOrigin setting.
Resource::controllersInfo public function Gets the controllers. Overrides ResourceInterface::controllersInfo 6
Resource::create public function Basic implementation for create. Overrides ResourceInterface::create
Resource::defaultConfiguration public function Overrides ConfigurablePluginTrait::defaultConfiguration
Resource::disable public function Disable the resource. Overrides ResourceInterface::disable
Resource::discover public function Discovery controller callback. Overrides ResourceInterface::discover
Resource::doDelete public function Shorthand method to perform a quick DELETE request. Overrides ResourceInterface::doDelete
Resource::doGet public function Shorthand method to perform a quick GET request. Overrides ResourceInterface::doGet
Resource::doPatch public function Shorthand method to perform a quick PATCH request. Overrides ResourceInterface::doPatch
Resource::doPost public function Shorthand method to perform a quick POST request. Overrides ResourceInterface::doPost
Resource::doPut public function Shorthand method to perform a quick PUT request. Overrides ResourceInterface::doPut
Resource::doWrite private function
Resource::enable public function Enable the resource. Overrides ResourceInterface::enable
Resource::getAccount public function Get the user from for request. Overrides ResourceInterface::getAccount
Resource::getControllerFromPath public function Return the controller for a given path. Overrides ResourceInterface::getControllerFromPath
Resource::getControllers public function Gets the controllers for this resource. Overrides ResourceInterface::getControllers
Resource::getDataProvider public function Gets the data provider. Overrides ResourceInterface::getDataProvider
Resource::getFieldDefinitions public function Gets the field definitions. Overrides ResourceInterface::getFieldDefinitions
Resource::getPath public function Gets the path of the resource. Overrides ResourceInterface::getPath
Resource::getRequest public function Get the request object. Overrides ResourceInterface::getRequest
Resource::getResourceMachineName public function Gets the resource machine name. Overrides ResourceInterface::getResourceMachineName
Resource::getResourceName public function Gets the resource name. Overrides ResourceInterface::getResourceName
Resource::getUrl public function Helper method; Get the URL of the resource and query strings. Overrides ResourceInterface::getUrl
Resource::getVersion public function Return array keyed with the major and minor version of the resource. Overrides ResourceInterface::getVersion
Resource::index public function Basic implementation for listing. Overrides ResourceInterface::index 1
Resource::initAuthenticationManager protected function Initializes the authentication manager and adds the appropriate providers.
Resource::isEnabled public function Checks if the resource is enabled. Overrides ResourceInterface::isEnabled
Resource::preflight protected function Adds the Allowed-Origin headers.
Resource::process public function Controller function that passes the data along and executes right action. Overrides ResourceInterface::process
Resource::remove public function Basic implementation for update. Overrides ResourceInterface::remove
Resource::replace public function Basic implementation for update. Overrides ResourceInterface::replace
Resource::setAccount public function Overrides ResourceInterface::setAccount
Resource::setDataProvider public function Sets the data provider. Overrides ResourceInterface::setDataProvider
Resource::setFieldDefinitions public function Sets the field definitions. Overrides ResourceInterface::setFieldDefinitions
Resource::setPath public function Sets the path of the resource. Overrides ResourceInterface::setPath
Resource::setPluginDefinition public function Sets the plugin definition to the provided array. Overrides ResourceInterface::setPluginDefinition
Resource::setRequest public function Sets the request object. Overrides ResourceInterface::setRequest
Resource::switchUserBack public function Switches the user back from the original user for the session. Overrides ResourceInterface::switchUserBack 1
Resource::update public function Basic implementation for update. Overrides ResourceInterface::update
Resource::versionedUrl public function Gets a resource URL based on the current version. Overrides ResourceInterface::versionedUrl
Resource::view public function Basic implementation for view. Overrides ResourceInterface::view
ResourceEntity::$bundles protected property The entity bundles.
ResourceEntity::$entityType protected property The entity type.
ResourceEntity::dataProviderClassName protected function Data provider class. Overrides Resource::dataProviderClassName 3
ResourceEntity::dataProviderFactory public function Data provider factory. Overrides Resource::dataProviderFactory
ResourceEntity::getBundles public function Gets the entity bundle.
ResourceEntity::getEntitySelf public function Get the "self" url.
ResourceEntity::getEntityType public function Gets the entity type.
ResourceEntity::processPublicFields protected function Get the public fields with the default values applied to them. Overrides Resource::processPublicFields 2
ResourceEntity::publicFields protected function Public fields. Overrides Resource::publicFields 20
ResourceEntity::viewModeFields protected function Get the public fields with default values based on view mode information.
ResourceEntity::__construct public function Constructs a Drupal\Component\Plugin\PluginBase object. Overrides Resource::__construct 2
ResourceInterface::IDS_SEPARATOR constant The string that separates multiple ids.