You are here

class EntityTranslationHandlerFactory in Entity Translation 7

Class implementing the entity translation handler factory.

Hierarchy

Expanded class hierarchy of EntityTranslationHandlerFactory

File

includes/translation.handler_factory.inc, line 11
Translation handler factory for the Entity Translation module.

View source
class EntityTranslationHandlerFactory {

  /**
   * A singleton instance of the factory.
   *
   * @var EntityTranslationHandlerFactory
   */
  protected static $instance;

  /**
   * Counter used to generate handler ids for new entities.
   *
   * @var int
   */
  protected static $newId = 1;

  /**
   * Handlers cache.
   *
   * @var array
   */
  protected $handlers = array();

  /**
   * The last translation handler retrieved.
   *
   * @var EntityTranslationHandlerInterface
   */
  protected $last;

  /**
   * An array of translation handler retrieved by type.
   *
   * @var array
   */
  protected $lastByType = array();

  /**
   * Returns the singleton instance of the translation handler factory.
   *
   * @return EntityTranslationHandlerFactory
   */
  public static function getInstance() {
    if (!isset(self::$instance)) {
      self::$instance = new EntityTranslationHandlerFactory();
    }
    return self::$instance;
  }

  /**
   * Prevents the factory from being publicly instantiated.
   */
  protected function __construct() {
  }

  /**
   * Translation handler factory.
   *
   * @param $entity_type
   *   The type of $entity; e.g. 'node' or 'user'.
   * @param $entity
   *   The entity to be translated. A bundle name may be passed to instantiate
   *   an empty entity.
   *
   * @return EntityTranslationHandlerInterface
   *   A class implementing EntityTranslationHandlerInterface.
   */
  public function getHandler($entity_type, $entity) {
    if (is_numeric($entity)) {
      $entities = entity_load($entity_type, array(
        $entity,
      ));
      $entity = reset($entities);
    }
    elseif (is_string($entity)) {
      $entity = entity_create_stub_entity($entity_type, array(
        NULL,
        NULL,
        $entity,
      ));
    }
    $id = $this
      ->getHandlerId($entity_type, $entity);
    if (!isset($this->handlers[$entity_type][$id])) {
      $entity_info = entity_get_info($entity_type);
      $class = $entity_info['translation']['entity_translation']['class'];
      $handler = new $class($entity_type, $entity_info, $entity);
      $handler
        ->setFactory($this);
      $this->handlers[$entity_type][$id] = $handler;
    }
    $this->last = $this->handlers[$entity_type][$id];
    $this->lastByType[$entity_type] = $this->last;
    $this->last
      ->setEntity($entity);
    return $this->last;
  }

  /**
   * Retrieves the translation handler identifier for the given entity.
   *
   * @param $entity_type
   *   The type of the entity the translation handler will wrap.
   * @param $entity
   *   The entity the translation handler will wrap.
   */
  public function getHandlerId($entity_type, $entity) {
    if (!isset($entity->entity_translation_handler_id)) {
      list($id, $revision_id, $bundle) = entity_extract_ids($entity_type, $entity);
      $revision_id = isset($revision_id) ? $revision_id : 0;
      $bundle = isset($bundle) ? $bundle : $entity_type;
      $entity->entity_translation_handler_id = $entity_type . '-' . $bundle . '-' . (!empty($id) ? 'eid-' . $id . '-' . $revision_id : 'new-' . self::$newId++);
    }
    return $entity->entity_translation_handler_id;
  }

  /**
   * Returns the last translation handler retrieved.
   *
   * @param $entity_type
   *   (optional) The entity type of the translation handler. Defaults to the
   *   last one.
   *
   * @return EntityTranslationHandlerInterface
   *   A class implementing EntityTranslationHandlerInterface.
   */
  public function getLastHandler($entity_type = NULL) {
    if (isset($entity_type)) {
      return isset($this->lastByType[$entity_type]) ? $this->lastByType[$entity_type] : NULL;
    }
    return $this->last;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
EntityTranslationHandlerFactory::$handlers protected property Handlers cache.
EntityTranslationHandlerFactory::$instance protected static property A singleton instance of the factory.
EntityTranslationHandlerFactory::$last protected property The last translation handler retrieved.
EntityTranslationHandlerFactory::$lastByType protected property An array of translation handler retrieved by type.
EntityTranslationHandlerFactory::$newId protected static property Counter used to generate handler ids for new entities.
EntityTranslationHandlerFactory::getHandler public function Translation handler factory.
EntityTranslationHandlerFactory::getHandlerId public function Retrieves the translation handler identifier for the given entity.
EntityTranslationHandlerFactory::getInstance public static function Returns the singleton instance of the translation handler factory.
EntityTranslationHandlerFactory::getLastHandler public function Returns the last translation handler retrieved.
EntityTranslationHandlerFactory::__construct protected function Prevents the factory from being publicly instantiated.