You are here

abstract class RestfulDataProviderVariable in RESTful 7

@file Contains \RestfulDataProviderDbQuery

Hierarchy

Expanded class hierarchy of RestfulDataProviderVariable

File

plugins/restful/RestfulDataProviderVariable.php, line 8
Contains \RestfulDataProviderDbQuery

View source
abstract class RestfulDataProviderVariable extends \RestfulBase implements \RestfulDataProviderInterface {

  /**
   * Defines default sort for variable names.
   *
   * By default, the array of variables returned by Drupal is already sorted
   * by variable name in ascending order, so we are returning a default sort
   * here just for clarity.
   *
   * @return array
   *   Array keyed by the sort field, with the order ('ASC' or 'DESC') as value.
   */
  public function defaultSortInfo() {
    return array(
      'name' => 'ASC',
    );
  }

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

    // Map name and value to an indexed array structure.
    foreach ($GLOBALS['conf'] as $variable_name => $variable_value) {
      $variables[] = array(
        'name' => $variable_name,
        'value' => $variable_value,
      );
    }

    // Apply pagination and sorting.
    $this
      ->applyListSort($variables);
    $this
      ->applyListPagination($variables);
    return $variables;
  }

  /**
   * Sort the list of variables.
   *
   * This data provider does not handle compound sorts; the last sort defined
   * will be the one to take effect.
   *
   * @param array $variables
   *   An indexed array containing elements that represent each variable, each
   *   containing a name and a value.
   */
  protected function applyListSort(array &$variables) {
    $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) {
      if (isset($public_fields[$public_field_name]['property'])) {
        $property_name = $public_fields[$public_field_name]['property'];

        // Only sort by name if it's different than Drupal's default.
        if ($property_name == 'name' && $direction == 'DESC') {
          $variables = array_reverse($variables);
        }
      }
    }
    return $variables;
  }

  /**
   * Set correct page for the index within the array of variables.
   *
   * Determine the page that should be seen. Page 1 is actually index 0.
   *
   * @param array $variables
   *   An array keyed by variable name, valued by unserialized variable value.
   *
   * @throws \RestfulBadRequestException
   */
  protected function applyListPagination(array &$variables) {
    list($offset, $range) = $this
      ->parseRequestForListPagination();
    $variables = array_slice($variables, $offset, $range);
  }

  /**
   * Returns the total count of all variables.
   */
  public function getTotalCount() {
    return count($GLOBALS['conf']);
  }

  /**
   * {@inheritdoc}
   */
  public function index() {
    $variables = $this
      ->getVariablesForList();
    $return = array();
    foreach ($variables as $variable) {
      $return[] = $this
        ->mapVariableToPublicFields($variable);
    }
    return $return;
  }

  /**
   * View a variable or multiple variables.
   *
   * @param string $name_string
   *  A string of variable names, separated by commas.
   */
  public function view($name_string) {
    $names = array_unique(array_filter(explode(',', $name_string)));
    $output = array();
    foreach ($names as $name) {
      $output[] = $this
        ->viewVariable($name);
    }
    return $output;
  }

  /**
   * View a single variable.
   *
   * @param string $name_string
   *  A string of variable names, separated by commas.
   */
  public function viewVariable($name) {

    // Caching is done on the individual variables.
    $cache_id = array(
      'tb' => 'variable',
      'id' => $name,
    );
    $cached_data = $this
      ->getRenderedCache($cache_id);
    if (!empty($cached_data->data)) {
      return $cached_data->data;
    }
    $variable['name'] = $name;
    $variable['value'] = variable_get($name);
    $return = $this
      ->mapVariableToPublicFields($variable);
    $this
      ->setRenderedCache($return, $cache_id);
    return $return;
  }

  /**
   * Alias for $this->variableSet().
   *
   * @param string $name
   *  The name of the variable to set a value for.
   */
  public function replace($name) {
    return $this
      ->variableSet($name, TRUE);
  }

  /**
   * Alias for $this->variableSet().
   *
   * The data structures of variable values are all different, therefore it's
   * impossible to do a partial update in a generic way.
   *
   * @param string $name
   *  The name of the variable to set a value for.
   * @param boolean $full_replace
   *  Completely replace variable values with supplied values.
   */
  public function update($name, $full_replace = FALSE) {
    return $this
      ->variableSet($name, FALSE);
  }

  /**
   * Alias for $this->variableSet().
   */
  public function create() {
    return $this
      ->variableSet();
  }

  /**
   * Sets a variable value.
   *
   * If no variable name is provided in the function call, such as for POST
   * requests, then this method will get the name from the request body.
   *
   * @param string $name
   *  The name of the variable to set a value for.
   * @param boolean $full_replace
   *  Completely replace variable values with supplied values.
   */
  public function variableSet($name = NULL, $full_replace = TRUE) {
    $request = $this
      ->getRequest();
    static::cleanRequest($request);

    // Retrieve the name and value from the request, if present.
    $public_fields = $this
      ->getPublicFields();

    // Set initial empty value for replace and create contexts.
    if ($full_replace) {
      $value = '';
    }
    foreach ($public_fields as $public_property => $info) {

      // Set the name from the request if it wasn't provided.
      if ($info['property'] == 'name' && isset($request[$public_property]) && empty($name)) {
        $name = $request[$public_property];
      }

      // Overwrite empty $value with value from the request, if given.
      if ($info['property'] == 'value' && isset($request[$public_property])) {
        $value = $request[$public_property];
      }
    }
    if (isset($name)) {
      if (isset($value)) {
        variable_set($name, $value);

        // Clear the rendered cache before calling the view method.
        $this
          ->clearRenderedCache(array(
          'tb' => 'variable',
          'id' => $name,
        ));
      }

      // Update contexts could have no value set; if so, do nothing.
      return $this
        ->view($name);
    }
    else {

      // We are in a create context with no name supplied.
      throw new RestfulBadRequestException('No name property supplied');
    }
  }

  /**
   * {@inheritdoc}
   */
  public function remove($name) {
    variable_del($name);
    $this
      ->setHttpHeaders('Status', 204);
  }

  /**
   * Maps variable names and values to public fields.
   *
   * @param array $variable
   *   An array containing the name and value of the variable.
   */
  public function mapVariableToPublicFields($variable) {
    foreach ($this
      ->getPublicFields() as $public_field_name => $info) {
      if (!empty($info['property'])) {
        if (isset($info['property']) && $info['property'] == 'name') {
          $public_field_value = $variable['name'];
        }
        elseif (isset($info['property']) && $info['property'] == 'value') {
          $public_field_value = $variable['value'];
        }
        else {
          throw new RestfulBadRequestException("The only possible properties for the variable resource are 'name' and 'value'.");
        }
      }
      elseif ($info['callback']) {
        $public_field_value = static::executeCallback($info['callback'], array(
          $name,
        ));
      }

      // Modify the public field value using a process callback, if supplied.
      if ($public_field_value && $info['process_callbacks']) {
        foreach ($info['process_callbacks'] as $process_callback) {
          $public_field_value = static::executeCallback($process_callback, array(
            $public_field_value,
          ));
        }
      }
      $return[$public_field_name] = $public_field_value;
    }
    return $return;
  }

}

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::addExtraInfoToQuery protected function Adds query tags and metadata to the EntityFieldQuery. 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::isValidConjunctionForFilter protected static function Check if a conjunction is valid for filtering. 2
RestfulBase::isValidMethod public static function Determines if the HTTP method is one of the known methods.
RestfulBase::isValidOperatorsForFilter protected static function Check if an operator is valid for filtering. 1
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.
RestfulBase::viewMultiple public function 2
RestfulBase::__construct public function Constructs a RestfulEntityBase object. Overrides RestfulPluginBase::__construct 3
RestfulDataProviderVariable::applyListPagination protected function Set correct page for the index within the array of variables.
RestfulDataProviderVariable::applyListSort protected function Sort the list of variables.
RestfulDataProviderVariable::create public function Alias for $this->variableSet(). Overrides RestfulBase::create
RestfulDataProviderVariable::defaultSortInfo public function Defines default sort for variable names.
RestfulDataProviderVariable::getTotalCount public function Returns the total count of all variables.
RestfulDataProviderVariable::getVariablesForList public function
RestfulDataProviderVariable::index public function Get a list of entities. Overrides RestfulBase::index
RestfulDataProviderVariable::mapVariableToPublicFields public function Maps variable names and values to public fields.
RestfulDataProviderVariable::remove public function Remove the item from the data source. Overrides RestfulBase::remove
RestfulDataProviderVariable::replace public function Alias for $this->variableSet().
RestfulDataProviderVariable::update public function Alias for $this->variableSet(). Overrides RestfulBase::update
RestfulDataProviderVariable::variableSet public function Sets a variable value.
RestfulDataProviderVariable::view public function View a variable or multiple variables. Overrides RestfulBase::view
RestfulDataProviderVariable::viewVariable public function View a single variable.
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