class EntityCacheControllerHelper

  1. cis7 sites/all/modules/ulmus/entitycache/entitycache.module EntityCacheControllerHelper
  2. cle7 sites/all/modules/ulmus/entitycache/entitycache.module EntityCacheControllerHelper
  3. elmsmedia7 sites/all/modules/ulmus/entitycache/entitycache.module EntityCacheControllerHelper
  4. icor7 sites/all/modules/ulmus/entitycache/entitycache.module EntityCacheControllerHelper
  5. meedjum_blog7 sites/all/modules/ulmus/entitycache/entitycache.module EntityCacheControllerHelper
  6. mooc7 sites/all/modules/ulmus/entitycache/entitycache.module EntityCacheControllerHelper

Entity cache helper.

Note: while this class is not a real entity controller it needs to extend DrupalDefaultEntityController to get access to protected properties.

Hierarchy

Expanded class hierarchy of EntityCacheControllerHelper

Members

Contains filters are case sensitive
Namesort descending Modifiers Type Description
DrupalDefaultEntityController::$cache protected property Whether this entity type should use the static cache.
DrupalDefaultEntityController::$entityCache protected property Static cache of entities.
DrupalDefaultEntityController::$entityInfo protected property Array of information about the entity.
DrupalDefaultEntityController::$entityType protected property Entity type for this controller instance.
DrupalDefaultEntityController::$hookLoadArguments protected property Additional arguments to pass to hook_TYPE_load().
DrupalDefaultEntityController::$idKey protected property Name of the entity's ID field in the entity database table.
DrupalDefaultEntityController::$revisionKey protected property Name of entity's revision database table field, if it supports revisions.
DrupalDefaultEntityController::$revisionTable protected property The table that stores revisions, if the entity supports revisions.
DrupalDefaultEntityController::attachLoad protected function Attaches data to entities upon loading.
DrupalDefaultEntityController::buildQuery protected function Builds the query to load the entity.
DrupalDefaultEntityController::cacheGet protected function Gets entities from the static cache.
DrupalDefaultEntityController::cacheSet protected function Stores entities in the static entity cache.
DrupalDefaultEntityController::load public function Implements DrupalEntityControllerInterface::load(). Overrides DrupalEntityControllerInterface::load
DrupalDefaultEntityController::resetCache public function Implements DrupalEntityControllerInterface::resetCache(). Overrides DrupalEntityControllerInterface::resetCache
DrupalDefaultEntityController::__construct public function Constructor: sets basic variables.
EntityCacheControllerHelper::entityCacheAttachLoad public static function Allow modules to implement uncached entity hooks.
EntityCacheControllerHelper::entityCacheGet public static function
EntityCacheControllerHelper::entityCacheLoad public static function
EntityCacheControllerHelper::entityCacheSet public static function
EntityCacheControllerHelper::resetEntityCache public static function

File

sites/all/modules/ulmus/entitycache/entitycache.module, line 25
Allows for caching of core entities.

View source
class EntityCacheControllerHelper extends DrupalDefaultEntityController {

  public static function resetEntityCache($controller, array $ids = NULL) {
    // Reset the persistent cache.
    if (!empty($ids)) {
      cache_clear_all($ids, 'cache_entity_' . $controller->entityType);
    }
    else {
      // Force all cached entries to be deleted.
      cache_clear_all('*', 'cache_entity_' . $controller->entityType, TRUE);
    }

    // Give modules the chance to act on any entity.
    foreach (module_implements('entitycache_reset') as $module) {
      $function = $module . '_entitycache_reset';
      $function($ids, $controller->entityType);
    }
    // Give modules the chance to act on a specific entity type.
    foreach (module_implements('entitycache_' . $controller->entityType . '_reset') as $module) {
      $function = $module . '_entitycache_' . $controller->entityType . '_reset';
      $function($ids);
    }
  }

  public static function entityCacheLoad($controller, $ids = array(), $conditions = array()) {
    $entities = array();
    $cached_entities = array();
    $queried_entities = array();

    // Revisions are not statically cached, and require a different query to
    // other conditions, so separate the revision id into its own variable.
    if ($controller->revisionKey && isset($conditions[$controller->revisionKey])) {
      $revision_id = $conditions[$controller->revisionKey];
      unset($conditions[$controller->revisionKey]);
    }
    else {
      $revision_id = FALSE;
    }

    // Create a new variable which is either a prepared version of the $ids
    // array for later comparison with the entity cache, or FALSE if no $ids
    // were passed. The $ids array is reduced as items are loaded from cache,
    // and we need to know if it's empty for this reason to avoid querying the
    // database when all requested entities are loaded from cache.
    $passed_ids = !empty($ids) ? array_flip($ids) : FALSE;
    // Try to load entities from the static cache, if the entity type supports
    // static caching.
    if ($controller->cache && !$revision_id) {
      $entities += $controller->cacheGet($ids, $conditions);
      // If any entities were loaded, remove them from the ids still to load.
      if ($passed_ids) {
        $ids = array_keys(array_diff_key($passed_ids, $entities));
      }
    }

    if (!empty($controller->entityInfo['entity cache']) && !$revision_id && $ids && !$conditions) {
      $entities += $cached_entities = self::entityCacheGet($controller, $ids, $conditions);
      // If any entities were loaded, remove them from the ids still to load.
      $ids = array_diff($ids, array_keys($cached_entities));

      if ($controller->cache) {
        // Add entities to the cache if we are not loading a revision.
        if (!empty($cached_entities) && !$revision_id) {
          $controller->cacheSet($cached_entities);
        }
      }
    }

    // Load any remaining entities from the database. This is the case if $ids
    // is set to FALSE (so we load all entities), if there are any ids left to
    // load, if loading a revision, or if $conditions was passed without $ids.
    if ($ids === FALSE || $ids || $revision_id || ($conditions && !$passed_ids)) {
      // Build the query.
      $query = $controller->buildQuery($ids, $conditions, $revision_id);
      $queried_entities = $query->execute()->fetchAllAssoc($controller->idKey);
    }

    // Pass all entities loaded from the database through $controller->attachLoad(),
    // which attaches fields (if supported by the entity type) and calls the
    // entity type specific load callback, for example hook_node_load().
    if (!empty($queried_entities)) {
      $controller->attachLoad($queried_entities, $revision_id);
      $entities += $queried_entities;
    }

    if (!empty($controller->entityInfo['entity cache'])) {
      // Add entities to the entity cache if we are not loading a revision.
      if (!empty($queried_entities) && !$revision_id) {
        self::entityCacheSet($controller, $queried_entities);
      }
    }

    if ($controller->cache) {
      // Add entities to the cache if we are not loading a revision.
      if (!empty($queried_entities) && !$revision_id) {
        $controller->cacheSet($queried_entities);
      }
    }

    // Ensure that the returned array is ordered the same as the original
    // $ids array if this was passed in and remove any invalid ids.
    if ($passed_ids) {
      // Remove any invalid ids from the array.
      $passed_ids = array_intersect_key($passed_ids, $entities);
      foreach ($entities as $entity) {
        $passed_ids[$entity->{$controller->idKey}] = $entity;
      }
      $entities = $passed_ids;
    }

    return $entities;
  }

  public static function entityCacheGet($controller, $ids, $conditions = array()) {
    $cached_entities = array();
    if ($ids && !$conditions) {
      $cached = cache_get_multiple($ids, 'cache_entity_' . $controller->entityType);
      if ($cached) {
        foreach ($cached as $item) {
          $cached_entities[$item->cid] = $item->data;
        }
        self::entityCacheAttachLoad($controller, $cached_entities);
      }
    }
    return $cached_entities;
  }

  public static function entityCacheSet($controller, $entities) {
    foreach ($entities as $item) {
      cache_set($item->{$controller->idKey}, $item, 'cache_entity_' . $controller->entityType);
    }
  }

  /**
   * Allow modules to implement uncached entity hooks.
   *
   * Perform two additional hook invocations for modules needing to add
   * uncacheable data to objects while serving the request.
   *
   * @see entitycache_entitycache_node_load()
   */
  public static function entityCacheAttachLoad($controller, $entities) {
    // Give modules the chance to act on any entity.
    foreach (module_implements('entitycache_load') as $module) {
      $function = $module . '_entitycache_load';
      $function($entities, $controller->entityType);
    }
    // Give modules the chance to act on a specific entity type.
    foreach (module_implements('entitycache_' . $controller->entityType . '_load') as $module) {
      $function = $module . '_entitycache_' . $controller->entityType . '_load';
      $function($entities);
    }
  }
}
Error | ELMSLN API

Error

×

Error message

  • Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/elmsln_community/api.elmsln.org/includes/common.inc:2791) in drupal_send_headers() (line 1499 of /var/www/html/elmsln_community/api.elmsln.org/includes/bootstrap.inc).
  • Error: Call to undefined function apc_delete() in DrupalAPCCache->clear() (line 289 of /var/www/html/elmsln_community/api.elmsln.org/sites/all/modules/apc/drupal_apc_cache.inc).
The website encountered an unexpected error. Please try again later.