Example #1
0
 /**
  * Gets all related translations for the current object,
  * excluding itself. See {@link getTranslation()} to retrieve
  * a single translated object.
  * 
  * Getter with $stage parameter is specific to {@link Versioned} extension,
  * mostly used for {@link SiteTree} subclasses.
  * 
  * @param string $locale
  * @param string $stage 
  * @return DataObjectSet
  */
 function getTranslations($locale = null, $stage = null)
 {
     if ($this->owner->exists()) {
         // HACK need to disable language filtering in augmentSQL(),
         // as we purposely want to get different language
         self::$enable_lang_filter = false;
         $translationGroupID = $this->getTranslationGroup();
         $baseDataClass = ClassInfo::baseDataClass($this->owner->class);
         $filter = sprintf('`%s_translationgroups`.`TranslationGroupID` = %d', $baseDataClass, $translationGroupID);
         if ($locale) {
             $filter .= sprintf(' AND `%s`.`Locale` = \'%s\'', $baseDataClass, Convert::raw2sql($locale));
         } else {
             // exclude the language of the current owner
             $filter .= sprintf(' AND `%s`.`Locale` != \'%s\'', $baseDataClass, $this->owner->Locale);
         }
         $join = sprintf('LEFT JOIN `%s_translationgroups` ON `%s_translationgroups`.`OriginalID` = `%s`.`ID`', $baseDataClass, $baseDataClass, $baseDataClass);
         $currentStage = Versioned::current_stage();
         if ($this->owner->hasExtension("Versioned")) {
             if ($stage) {
                 Versioned::reading_stage($stage);
             }
             $translations = Versioned::get_by_stage($this->owner->class, Versioned::current_stage(), $filter, null, $join);
             if ($stage) {
                 Versioned::reading_stage($currentStage);
             }
         } else {
             $translations = DataObject::get($this->owner->class, $filter, null, $join);
         }
         self::$enable_lang_filter = true;
         return $translations;
     }
 }