You are here

abstract class RestfulDataProviderEFQ in RESTful 7

@file Contains \RestfulDataProviderEFQ

Hierarchy

Expanded class hierarchy of RestfulDataProviderEFQ

File

plugins/restful/RestfulDataProviderEFQ.php, line 8
Contains \RestfulDataProviderEFQ

View source
abstract class RestfulDataProviderEFQ extends \RestfulBase implements \RestfulDataProviderEFQInterface, \RestfulDataProviderInterface {

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

  /**
   * The bundle.
   *
   * @var string
   */
  protected $bundle;

  /**
   * The bundle.
   *
   * @var string
   */
  protected $EFQClass = '\\EntityFieldQuery';

  /**
   * Getter for $bundle.
   *
   * @return string
   */
  public function getBundle() {
    return $this->bundle;
  }

  /**
   * Getter for $entityType.
   *
   * @return string
   */
  public function getEntityType() {
    return $this->entityType;
  }

  /**
   * Get the entity info for the current entity the endpoint handling.
   *
   * @param null $type
   *   The entity type. Optional.
   * @return array
   *   The entity info.
   */
  public function getEntityInfo($type = NULL) {
    return entity_get_info($type ? $type : $this
      ->getEntityType());
  }

  /**
   * Constructs a RestfulDataProviderEFQ object.
   *
   * @param array $plugin
   *   Plugin definition.
   * @param RestfulAuthenticationManager $auth_manager
   *   (optional) Injected authentication manager.
   * @param DrupalCacheInterface $cache_controller
   *   (optional) Injected cache backend.
   * @param string $language
   *   (optional) The language to return items in.
   *
   * @throws RestfulServerConfigurationException
   */
  public function __construct(array $plugin, \RestfulAuthenticationManager $auth_manager = NULL, \DrupalCacheInterface $cache_controller = NULL, $language = NULL) {
    parent::__construct($plugin, $auth_manager, $cache_controller, $language);
    $this->entityType = $plugin['entity_type'];
    $this->bundle = $plugin['bundle'];

    // Allow providing an alternative to \EntityFieldQuery.
    $data_provider_options = $this
      ->getPluginKey('data_provider_options');
    if (!empty($data_provider_options['efq_class'])) {
      if (!is_subclass_of($data_provider_options['efq_class'], '\\EntityFieldQuery')) {
        throw new \RestfulServerConfigurationException(format_string('The provided class @class does not extend from \\EntityFieldQuery.', array(
          '@class' => $data_provider_options['efq_class'],
        )));
      }
      $this->EFQClass = $data_provider_options['efq_class'];
    }
  }

  /**
   * Defines default sort fields if none are provided via the request URL.
   *
   * @return array
   *   Array keyed by the public field name, and the order ('ASC' or 'DESC') as value.
   */
  public function defaultSortInfo() {
    return array(
      'id' => 'ASC',
    );
  }

  /**
   * {@inheritdoc}
   */
  public function getQueryForList() {
    $entity_type = $this
      ->getEntityType();
    $query = $this
      ->getEntityFieldQuery();
    if ($path = $this
      ->getPath()) {
      $ids = explode(',', $path);
      if (!empty($ids)) {
        $query
          ->entityCondition('entity_id', $ids, 'IN');
      }
    }
    $this
      ->queryForListSort($query);
    $this
      ->queryForListFilter($query);
    $this
      ->queryForListPagination($query);
    $this
      ->addExtraInfoToQuery($query);
    return $query;
  }

  /**
   * Sort the query for list.
   *
   * @param \EntityFieldQuery $query
   *   The query object.
   *
   * @throws \RestfulBadRequestException
   *
   * @see \RestfulEntityBase::getQueryForList
   */
  protected function queryForListSort(\EntityFieldQuery $query) {
    $public_fields = $this
      ->getPublicFields();

    // Get the sorting options from the request object.
    $sorts = $this
      ->parseRequestForListSort();
    $sorts = $sorts ? $sorts : $this
      ->defaultSortInfo();
    foreach ($sorts as $public_field_name => $direction) {

      // Determine if sorting is by field or property.
      if (!($property_name = $public_fields[$public_field_name]['property'])) {
        throw new \RestfulBadRequestException('The current sort selection does not map to any entity property or Field API field.');
      }
      if (field_info_field($property_name)) {
        $query
          ->fieldOrderBy($public_fields[$public_field_name]['property'], $public_fields[$public_field_name]['column'], $direction);
      }
      else {
        $column = $this
          ->getColumnFromProperty($property_name);
        $query
          ->propertyOrderBy($column, $direction);
      }
    }
  }

  /**
   * Filter the query for list.
   *
   * @param \EntityFieldQuery $query
   *   The query object.
   *
   * @throws \RestfulBadRequestException
   *
   * @see \RestfulEntityBase::getQueryForList
   */
  protected function queryForListFilter(\EntityFieldQuery $query) {
    $public_fields = $this
      ->getPublicFields();
    foreach ($this
      ->parseRequestForListFilter() as $filter) {

      // Determine if filtering is by field or property.
      if (!($property_name = $public_fields[$filter['public_field']]['property'])) {
        throw new \RestfulBadRequestException('The current filter selection does not map to any entity property or Field API field.');
      }
      if (field_info_field($property_name)) {
        if (in_array(strtoupper($filter['operator'][0]), array(
          'IN',
          'NOT IN',
          'BETWEEN',
        ))) {
          if (is_array($filter['value']) && empty($filter['value'])) {
            if (strtoupper($filter['operator'][0]) == 'NOT IN') {

              // Skip filtering by an empty value when operator is 'NOT IN',
              // since it throws an SQL error.
              continue;
            }

            // Since Drupal doesn't know how to handle an empty array within a
            // condition we add the `NULL` as an element to the array.
            $filter['value'] = array(
              NULL,
            );
          }
          $query
            ->fieldCondition($public_fields[$filter['public_field']]['property'], $public_fields[$filter['public_field']]['column'], $filter['value'], $filter['operator'][0]);
          continue;
        }
        for ($index = 0; $index < count($filter['value']); $index++) {
          $query
            ->fieldCondition($public_fields[$filter['public_field']]['property'], $public_fields[$filter['public_field']]['column'], $filter['value'][$index], $filter['operator'][$index]);
        }
      }
      else {
        $column = $this
          ->getColumnFromProperty($property_name);
        if (in_array(strtoupper($filter['operator'][0]), array(
          'IN',
          'NOT IN',
          'BETWEEN',
        ))) {
          if (is_array($filter['value']) && empty($filter['value'])) {
            if (strtoupper($filter['operator'][0]) == 'NOT IN') {

              // Skip filtering by an empty value when operator is 'NOT IN',
              // since it throws an SQL error.
              continue;
            }

            // Since Drupal doesn't know how to handle an empty array within a
            // condition we add the `NULL` as an element to the array.
            $filter['value'] = array(
              NULL,
            );
          }
          $query
            ->propertyCondition($column, $filter['value'], $filter['operator'][0]);
          continue;
        }
        for ($index = 0; $index < count($filter['value']); $index++) {
          $query
            ->propertyCondition($column, $filter['value'][$index], $filter['operator'][$index]);
        }
      }
    }
  }

  /**
   * Get the DB column name from a property.
   *
   * The "property" defined in the public field is actually the property
   * of the entity metadata wrapper. Sometimes that property can be a
   * different name than the column in the DB. For example, for nodes the
   * "uid" property is mapped in entity metadata wrapper as "author", so
   * we make sure to get the real column name.
   *
   * @param string $property_name
   *   The property name.
   *
   * @return string
   *   The column name.
   */
  protected function getColumnFromProperty($property_name) {
    $property_info = entity_get_property_info($this
      ->getEntityType());
    return $property_info['properties'][$property_name]['schema field'];
  }

  /**
   * Overrides \RestfulBase::isValidOperatorsForFilter().
   */
  protected static function isValidOperatorsForFilter(array $operators) {
    $allowed_operators = array(
      '=',
      '>',
      '<',
      '>=',
      '<=',
      '<>',
      '!=',
      'BETWEEN',
      'CONTAINS',
      'IN',
      'LIKE',
      'NOT IN',
      'STARTS_WITH',
    );
    foreach ($operators as $operator) {
      if (!in_array($operator, $allowed_operators)) {
        throw new \RestfulBadRequestException(format_string('Operator "@operator" is not allowed for filtering on this resource. Allowed operators are: !allowed', array(
          '@operator' => $operator,
          '!allowed' => implode(', ', $allowed_operators),
        )));
      }
    }
  }

  /**
   * Overrides \RestfulBase::isValidConjuctionForFilter().
   */
  protected static function isValidConjunctionForFilter($conjunction) {
    $allowed_conjunctions = array(
      'AND',
    );
    if (!in_array(strtoupper($conjunction), $allowed_conjunctions)) {
      throw new \RestfulBadRequestException(format_string('Conjunction "@conjunction" is not allowed for filtering on this resource. Allowed conjunctions are: !allowed', array(
        '@conjunction' => $conjunction,
        '!allowed' => implode(', ', $allowed_conjunctions),
      )));
    }
  }

  /**
   * Set correct page (i.e. range) for the query for list.
   *
   * Determine the page that should be seen. Page 1, is actually offset 0 in the
   * query range.
   *
   * @param \EntityFieldQuery $query
   *   The query object.
   *
   * @throws \RestfulBadRequestException
   *
   * @see \RestfulEntityBase::getQueryForList
   */
  protected function queryForListPagination(\EntityFieldQuery $query) {
    list($offset, $range) = $this
      ->parseRequestForListPagination();
    $query
      ->range($offset, $range);
  }

  /**
   * {@inheritdoc}
   */
  public function getQueryCount() {
    $query = $this
      ->getEntityFieldQuery();
    if ($path = $this
      ->getPath()) {
      $ids = explode(',', $path);
      $query
        ->entityCondition('entity_id', $ids, 'IN');
    }
    $this
      ->queryForListFilter($query);
    $this
      ->addExtraInfoToQuery($query);
    $query
      ->addTag('restful_count');
    return $query
      ->count();
  }

  /**
   * {@inheritdoc}
   */
  public function getTotalCount() {
    return intval($this
      ->getQueryCount()
      ->execute());
  }

  /**
   * Adds query tags and metadata to the EntityFieldQuery.
   *
   * @param \EntityFieldQuery $query
   *   The query to enhance.
   */
  protected function addExtraInfoToQuery($query) {
    parent::addExtraInfoToQuery($query);
    $entity_type = $this
      ->getEntityType();

    // The only time you need to add the access tags to a EFQ is when you don't
    // have fieldConditions.
    if (empty($query->fieldConditions)) {

      // Add a generic entity access tag to the query.
      $query
        ->addTag($entity_type . '_access');
    }
    $query
      ->addMetaData('restful_handler', $this);
  }

  /**
   * {@inheritdoc}
   */
  public function index() {

    // Defer the actual implementation to \RestfulEntityBase.
    return $this
      ->getList();
  }

  /**
   * {@inheritdoc}
   */
  public function viewMultiple(array $ids) {

    // Defer the actual implementation to \RestfulEntityBase.
    return $this
      ->viewEntities(implode(',', $ids));
  }

  /**
   * {@inheritdoc}
   */
  public function view($id) {

    // Defer the actual implementation to \RestfulEntityBase.
    return $this
      ->viewEntity($id);
  }

  /**
   * {@inheritdoc}
   */
  public function update($id, $full_replace = FALSE) {

    // Defer the actual implementation to \RestfulEntityBase.
    return $this
      ->updateEntity($id, $full_replace);
  }

  /**
   * {@inheritdoc}
   */
  public function create() {

    // Defer the actual implementation to \RestfulEntityBase.
    return $this
      ->createEntity();
  }

  /**
   * {@inheritdoc}
   */
  public function remove($id) {

    // Defer the actual implementation to \RestfulEntityBase.
    $this
      ->deleteEntity($id);
  }

  /**
   * Get a list of entities.
   *
   * @return array
   *   Array of entities, as passed to RestfulEntityBase::viewEntity().
   *
   * @throws RestfulBadRequestException
   */
  public abstract function getList();

  /**
   * View an entity.
   *
   * @param $id
   *   The ID to load the entity.
   *
   * @return array
   *   Array with the public fields populated.
   *
   * @throws Exception
   */
  public abstract function viewEntity($id);

  /**
   * Get a list of entities based on a list of IDs.
   *
   * @param string $ids_string
   *   Coma separated list of ids.
   *
   * @return array
   *   Array of entities, as passed to RestfulEntityBase::viewEntity().
   *
   * @throws RestfulBadRequestException
   */
  public abstract function viewEntities($ids_string);

  /**
   * Create a new entity.
   *
   * @return array
   *   Array with the output of the new entity, passed to
   *   RestfulEntityInterface::viewEntity().
   *
   * @throws RestfulForbiddenException
   */
  public abstract function createEntity();

  /**
   * Update an entity.
   *
   * @param $id
   *   The ID to load the entity.
   * @param bool $null_missing_fields
   *   Determine if properties that are missing form the request array should
   *   be treated as NULL, or should be skipped. Defaults to FALSE, which will
   *   skip missing the fields to NULL.
   *
   * @return array
   *   Array with the output of the new entity, passed to
   *   RestfulEntityInterface::viewEntity().
   */
  protected abstract function updateEntity($id, $null_missing_fields = FALSE);

  /**
   * Delete an entity using DELETE.
   *
   * No result is returned, just the HTTP header is set to 204.
   *
   * @param $id
   *   The ID to load the entity.
   */
  public abstract function deleteEntity($id);

  /**
   * Initialize an EntityFieldQuery (or extending class).
   *
   * @return \EntityFieldQuery
   *   The initialized query with the basics filled in.
   */
  protected function getEntityFieldQuery() {
    $query = $this
      ->EFQObject();
    $entity_type = $this
      ->getEntityType();
    $query
      ->entityCondition('entity_type', $entity_type);
    $entity_info = $this
      ->getEntityInfo();
    if ($this
      ->getBundle() && $entity_info['entity keys']['bundle']) {
      $query
        ->entityCondition('bundle', $this
        ->getBundle());
    }
    return $query;
  }

  /**
   * Gets a EFQ object.
   *
   * @return \EntityFieldQuery
   *   The object that inherits from \EntityFieldQuery.
   */
  protected function EFQObject() {
    $efq_class = $this->EFQClass;
    return new $efq_class();
  }

}

Members

Namesort descending Modifiers Type Description Overrides
RestfulBase::$authenticationManager protected property Authentication manager.
RestfulBase::$cacheController protected property Cache controller object.
RestfulBase::$controllers protected property Nested array that provides information about what method to call for each route pattern.
RestfulBase::$httpHeaders protected property Array keyed by the header property, and the value.
RestfulBase::$langcode protected property Determines the language of the items that should be returned.
RestfulBase::$method protected property The HTTP method used for the request.
RestfulBase::$path protected property The path of the request.
RestfulBase::$publicFields protected property The public fields that are exposed to the API. 1
RestfulBase::$range protected property Determines the number of items that should be returned when viewing lists.
RestfulBase::$rateLimitManager protected property Rate limit manager.
RestfulBase::$request protected property The request array.
RestfulBase::$staticCache public property Static cache controller.
RestfulBase::$valueMetadata protected property Holds additional information about the generated values. This information is available to the formatters.
RestfulBase::access public function Determine if user can access the handler. Overrides RestfulInterface::access 4
RestfulBase::accessByAllowOrigin protected function Checks access based on the referer header and the allow_origin setting.
RestfulBase::addCidParams protected static function Get the cache id parameters based on the keys.
RestfulBase::addDefaultValuesToPublicFields protected function Add default values to the public fields array. 2
RestfulBase::addHttpHeaders public function Add the a value to a multi-value HTTP header. Overrides RestfulInterface::addHttpHeaders
RestfulBase::cacheInvalidate public function Invalidates cache for a certain entity.
RestfulBase::cleanRequest public static function Helper function to remove the application generated request data.
RestfulBase::clearRenderedCache protected function Clear an entry from the rendered cache.
RestfulBase::clearResourceRenderedCache public function Clear all caches corresponding to the current resource.
RestfulBase::controllersInfo public static function Returns the default controllers for the entity. 1
RestfulBase::delete public function Call resource using the DELETE http method.
RestfulBase::executeCallback public static function Execute a user callback.
RestfulBase::format public function Call the output format on the given data.
RestfulBase::formatter protected function Get the formatter handler for the current restful formatter.
RestfulBase::formatterNames public function Returns the names of the available formatter plugins.
RestfulBase::generateCacheId protected function Generate a cache identifier for the request and the current context.
RestfulBase::get public function Call resource using the GET http method.
RestfulBase::getAccount public function Proxy method to get the account from the authenticationManager.
RestfulBase::getAuthenticationManager public function Getter for $authenticationManager.
RestfulBase::getCacheController public function Getter for $cacheController.
RestfulBase::getControllerFromPath public function Return the controller from a given path.
RestfulBase::getControllers public function Get the defined controllers
RestfulBase::getHttpHeaders public function Return array keyed by the header property, and the value. Overrides RestfulInterface::getHttpHeaders
RestfulBase::getLangCode public function Get the language code.
RestfulBase::getMenuItem public static function Get the non translated menu item.
RestfulBase::getMethod public function Get the HTTP method used for the request.
RestfulBase::getPageArguments public static function Get the resource name and version from the page arguments in the router.
RestfulBase::getPath public function Return the path of the request.
RestfulBase::getPublicFields public function Return the properties that should be public after processing. Overrides RestfulInterface::getPublicFields
RestfulBase::getRange public function Get the pager range.
RestfulBase::getRateLimitManager public function Getter for rateLimitManager.
RestfulBase::getRenderedCache protected function Get an entry from the rendered cache.
RestfulBase::getRequest public function Get the request array.
RestfulBase::getRequestForSubRequest protected function Gets a request array with the data that should be piped to sub requests.
RestfulBase::getResourceLastVersion public static function Return the last version for a given resource.
RestfulBase::getResourceName public function Return the resource name.
RestfulBase::getUrl public function Helper method; Get the URL of the resource and query strings.
RestfulBase::getValueMetadata public function Get value metadata.
RestfulBase::getVersion public function Return array keyed with the major and minor version of the resource.
RestfulBase::getVersionFromRequest public static function Gets the major and minor version for the current request.
RestfulBase::head public function Call resource using the GET http method.
RestfulBase::isArrayNumeric final public static function Helper method to determine if an array is numeric.
RestfulBase::isListRequest public function Helper method to know if the current request is for a list.
RestfulBase::isReadMethod public static function Determines if the HTTP method represents a read operation.
RestfulBase::isValidMethod public static function Determines if the HTTP method is one of the known methods.
RestfulBase::isWriteMethod public static function Determines if the HTTP method represents a write operation.
RestfulBase::newCacheObject protected function Get the default cache object based on the plugin configuration.
RestfulBase::notImplementedCrudOperation protected static function Helper method with the code to run for non implemented CRUD operations.
RestfulBase::options public function Call resource using the OPTIONS http method.
RestfulBase::overrideRange protected function Overrides the range parameter with the URL value if any.
RestfulBase::parseRequestForListFilter protected function Filter the query for list.
RestfulBase::parseRequestForListPagination protected function Parses the request object to get the pagination options.
RestfulBase::parseRequestForListSort protected function Parses the request to get the sorting options.
RestfulBase::parseVersionString public static function Parses the version string.
RestfulBase::patch public function Call resource using the PATCH http method.
RestfulBase::post public function Call resource using the POST http method.
RestfulBase::process public function Entry point to process a request. Overrides RestfulInterface::process
RestfulBase::processDataProviderOptions protected function Process plugin options by validation keys exists, and set default values.
RestfulBase::put public function Call resource using the PUT http method.
RestfulBase::setAccount public function Proxy method to set the account from the authenticationManager.
RestfulBase::setAuthenticationManager public function Setter for $authenticationManager.
RestfulBase::setHttpHeaders public function Set the HTTP headers. Overrides RestfulInterface::setHttpHeaders
RestfulBase::setLangCode public function Sets the language code.
RestfulBase::setMethod public function Set the HTTP method used for the request.
RestfulBase::setPath public function Set the path of the request.
RestfulBase::setPublicFields public function Set the public fields.
RestfulBase::setRange public function Set the pager range.
RestfulBase::setRateLimitManager public function Setter for rateLimitManager.
RestfulBase::setRenderedCache protected function Store an entry in the rendered cache.
RestfulBase::setRequest public function Set the request array.
RestfulBase::versionedUrl public function Gets a resource URL based on the current version.
RestfulDataProviderEFQ::$bundle protected property The bundle.
RestfulDataProviderEFQ::$EFQClass protected property The bundle.
RestfulDataProviderEFQ::$entityType protected property The entity type.
RestfulDataProviderEFQ::addExtraInfoToQuery protected function Adds query tags and metadata to the EntityFieldQuery. Overrides RestfulBase::addExtraInfoToQuery
RestfulDataProviderEFQ::create public function Create an item from the request object. Overrides RestfulBase::create
RestfulDataProviderEFQ::createEntity abstract public function Create a new entity. 1
RestfulDataProviderEFQ::defaultSortInfo public function Defines default sort fields if none are provided via the request URL. 1
RestfulDataProviderEFQ::deleteEntity abstract public function Delete an entity using DELETE. 1
RestfulDataProviderEFQ::EFQObject protected function Gets a EFQ object.
RestfulDataProviderEFQ::getBundle public function Getter for $bundle.
RestfulDataProviderEFQ::getColumnFromProperty protected function Get the DB column name from a property.
RestfulDataProviderEFQ::getEntityFieldQuery protected function Initialize an EntityFieldQuery (or extending class).
RestfulDataProviderEFQ::getEntityInfo public function Get the entity info for the current entity the endpoint handling. 1
RestfulDataProviderEFQ::getEntityType public function Getter for $entityType.
RestfulDataProviderEFQ::getList abstract public function Get a list of entities. 1
RestfulDataProviderEFQ::getQueryCount public function Prepare a query for RestfulEntityBase::getTotalCount(). Overrides RestfulDataProviderEFQInterface::getQueryCount 1
RestfulDataProviderEFQ::getQueryForList public function Prepare a query for RestfulEntityBase::getList(). Overrides RestfulDataProviderEFQInterface::getQueryForList 4
RestfulDataProviderEFQ::getTotalCount public function Get the total count of entities that match certain request. Overrides RestfulDataProviderEFQInterface::getTotalCount
RestfulDataProviderEFQ::index public function Get a list of entities. Overrides RestfulBase::index
RestfulDataProviderEFQ::isValidConjunctionForFilter protected static function Overrides \RestfulBase::isValidConjuctionForFilter(). Overrides RestfulBase::isValidConjunctionForFilter
RestfulDataProviderEFQ::isValidOperatorsForFilter protected static function Overrides \RestfulBase::isValidOperatorsForFilter(). Overrides RestfulBase::isValidOperatorsForFilter
RestfulDataProviderEFQ::queryForListFilter protected function Filter the query for list.
RestfulDataProviderEFQ::queryForListPagination protected function Set correct page (i.e. range) for the query for list.
RestfulDataProviderEFQ::queryForListSort protected function Sort the query for list.
RestfulDataProviderEFQ::remove public function Remove the item from the data source. Overrides RestfulBase::remove
RestfulDataProviderEFQ::update public function Update an item based on the request object. Overrides RestfulBase::update
RestfulDataProviderEFQ::updateEntity abstract protected function Update an entity. 1
RestfulDataProviderEFQ::view public function View an item from the data source. Overrides RestfulBase::view
RestfulDataProviderEFQ::viewEntities abstract public function Get a list of entities based on a list of IDs. 1
RestfulDataProviderEFQ::viewEntity abstract public function View an entity. 1
RestfulDataProviderEFQ::viewMultiple public function View a collection of items. Overrides RestfulBase::viewMultiple
RestfulDataProviderEFQ::__construct public function Constructs a RestfulDataProviderEFQ object. Overrides RestfulBase::__construct 2
RestfulInterface::ACCESS_ALLOW constant Return this value from public field access callbacks to allow access.
RestfulInterface::ACCESS_DENY constant Return this value from public field access callbacks to deny access.
RestfulInterface::ACCESS_IGNORE constant Return this value from public field access callbacks to not affect access.
RestfulInterface::CONNECT constant
RestfulInterface::DELETE constant
RestfulInterface::GET constant HTTP methods.
RestfulInterface::HEAD constant
RestfulInterface::OPTIONS constant
RestfulInterface::PATCH constant
RestfulInterface::POST constant
RestfulInterface::publicFieldsInfo public function Return the properties that should be public. 7
RestfulInterface::PUT constant
RestfulInterface::TOKEN_VALUE constant Token value for token generation functions.
RestfulInterface::TRACE constant
RestfulPluginBase::$plugin protected property The plugin definition array.
RestfulPluginBase::getPlugin public function Gets information about the restful plugin. Overrides RestfulPluginInterface::getPlugin
RestfulPluginBase::getPluginKey public function Gets information about the restful plugin key. Overrides RestfulPluginInterface::getPluginKey
RestfulPluginBase::setPlugin public function Sets information about the restful plugin. Overrides RestfulPluginInterface::setPlugin
RestfulPluginBase::setPluginKey public function Gets information about the restful plugin key. Overrides RestfulPluginInterface::setPluginKey