| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299 | <?php/* * @file * Contains translator entity class. *//** * Entity class for the tmgmt_translator entity. * * @ingroup tmgmt_translator */class TMGMTTranslator extends Entity {  /**   * The ID of the translator.   *   * @var integer   */  public $tid;  /**   * Machine readable name of the translator.   *   * @var string   */  public $name;  /**   * Label of the translator.   *   * @var string   */  public $label;  /**   * Description of the translator.   *   * @var string   */  public $description;  /**   * Weight of the translator.   *   * @var int   */  public $weight;  /**   * Plugin name of the translator.   *   * @type string   */  public $plugin;  /**   * Translator type specific settings.   *   * @var array   */  public $settings;  /**   * The supported target languages caches.   *   * @var array   */  protected $languageCache;  /**   * The supported language pairs caches.   *   * @var array   */  protected $languagePairsCache;  /**   * Whether the language cache in the database is outdated.   *   * @var boolean   */  protected $languageCacheOutdated;  /**   * {@inheritdoc}   */  public function __construct(array $values = array()) {    parent::__construct($values, 'tmgmt_translator');  }  /**   * Returns the translator plugin controller of this translator.   *   * @return TMGMTTranslatorPluginControllerInterface   */  public function getController() {    if (!empty($this->plugin)) {      return tmgmt_translator_plugin_controller($this->plugin);    }    return FALSE;  }  /**   * Returns the supported target languages for this translator.   *   * @return array   *   An array of supported target languages in ISO format.   */  public function getSupportedTargetLanguages($source_language) {    if ($controller = $this->getController()) {      if (isset($this->pluginInfo['cache languages']) && empty($this->pluginInfo['cache languages'])) {        // This plugin doesn't support language caching.        return $controller->getSupportedTargetLanguages($this, $source_language);      }      else {        // Retrieve the supported languages from the cache.        if (empty($this->languageCache) && $cache = cache_get('languages:' . $this->name, 'cache_tmgmt')) {          $this->languageCache = $cache->data;        }        // Even if we successfully queried the cache it might not have an entry        // for our source language yet.        if (!isset($this->languageCache[$source_language])) {          $this->languageCache[$source_language] = $controller->getSupportedTargetLanguages($this, $source_language);          $this->languageCacheOutdated = TRUE;        }      }      return $this->languageCache[$source_language];    }  }  /**   * Gets the supported language pairs for this translator.   *   * @return array   *   List of language pairs where a pair is an associative array of   *   source_language and target_language.   *   Example:   *   array(   *     array('source_language' => 'en-US', 'target_language' => 'de-DE'),   *     array('source_language' => 'en-US', 'target_language' => 'de-CH'),   *   )   */  public function getSupportedLanguagePairs() {    if ($controller = $this->getController()) {      if (isset($this->pluginInfo['cache languages']) && empty($this->pluginInfo['cache languages'])) {        // This plugin doesn't support language caching.        return $controller->getSupportedLanguagePairs($this);      }      else {        // Retrieve the supported languages from the cache.        if (empty($this->languagePairsCache) && $cache = cache_get('language_pairs:' . $this->name, 'cache_tmgmt')) {          $this->languagePairsCache = $cache->data;        }        // Even if we successfully queried the cache data might not be yet        // available.        if (empty($this->languagePairsCache)) {          $this->languagePairsCache = $controller->getSupportedLanguagePairs($this);          $this->languageCacheOutdated = TRUE;        }      }      return $this->languagePairsCache;    }  }  /**   * Clears the language cache for this translator.   */  public function clearLanguageCache() {    cache_clear_all('languages:' . $this->name, 'cache_tmgmt');    cache_clear_all('language_pairs:' . $this->name, 'cache_tmgmt');  }  /**   * Check whether this translator can handle a particular translation job.   *   * @param $job   *   The TMGMTJob entity that should be translated.   *   * @return boolean   *   TRUE if the job can be processed and translated, FALSE otherwise.   */  public function canTranslate(TMGMTJob $job) {    if ($controller = $this->getController()) {      return $controller->canTranslate($this, $job);    }    return FALSE;  }  /**   * Checks whether a translator is available.   *   * @return boolean   *   TRUE if the translator plugin is available, FALSE otherwise.   */  public function isAvailable() {    if ($controller = $this->getController()) {      return $controller->isAvailable($this);    }    return FALSE;  }  /**   * Returns if the plugin has any settings for this job.   */  public function hasCheckoutSettings(TMGMTJob $job) {    if ($controller = $this->getController()) {      return $controller->hasCheckoutSettings($job);    }    return FALSE;  }  /**   * @todo Remove this once http://drupal.org/node/1420364 is done.   */  public function getNotAvailableReason() {    if ($controller = $this->getController()) {      return $controller->getNotAvailableReason($this);    }    return FALSE;  }  /**   * @todo Remove this once http://drupal.org/node/1420364 is done.   */  public function getNotCanTranslateReason(TMGMTJob $job) {    if ($controller = $this->getController()) {      return $controller->getNotCanTranslateReason($job);    }    return FALSE;  }  /**   * Retrieves a setting value from the translator settings. Pulls the default   * values (if defined) from the plugin controller.   *   * @param $name   *   The name of the setting.   *   * @return   *   The setting value or $default if the setting value is not set. Returns   *   NULL if the setting does not exist at all.   */  public function getSetting($name) {    if (isset($this->settings[$name])) {      return $this->settings[$name];    }    elseif ($controller = $this->getController()) {      $defaults = $controller->defaultSettings();      if (isset($defaults[$name])) {        return $defaults[$name];      }    }  }  /**   * Maps local language to remote language.   *   * @param $language   *   Local language code.   *   * @return string   *   Remote language code.   *   * @ingroup tmgmt_remote_languages_mapping   */  public function mapToRemoteLanguage($language) {    return $this->getController()->mapToRemoteLanguage($this, $language);  }  /**   * Maps remote language to local language.   *   * @param $language   *   Remote language code.   *   * @return string   *   Local language code.   *   * @ingroup tmgmt_remote_languages_mapping   */  public function mapToLocalLanguage($language) {    return $this->getController()->mapToLocalLanguage($this, $language);  }  /**   * Updates the language cache if it has changed.   */  public function __destruct() {    if ($controller = $this->getController()) {      $info = $controller->pluginInfo();      if (!isset($info['language cache']) || !empty($info['language cache']) && !empty($this->languageCacheOutdated)) {        cache_set('languages:' . $this->name, $this->languageCache, 'cache_tmgmt');        cache_set('language_pairs:' . $this->name, $this->languagePairsCache, 'cache_tmgmt');      }    }  }}
 |