/** * 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; } }