/** * Manipulates the SQL query * * @param SQLQuery &$query Query to manipulate * * @return void * * @author Sebastian Diel <*****@*****.**> * @since 04.05.2012 */ public function augmentSQL(SQLQuery &$query) { if (!$query->isJoinedTo($this->getLanguageClassName()) && !$query->getDelete()) { $silvercartDefaultLocale = SilvercartConfig::Locale(); $query->addLeftJoin($this->getLanguageClassName(), sprintf("(\"%s\".\"ID\" = \"%s\".\"%s\")", $this->getBaseClassName(), $this->getLanguageClassName(), $this->getRelationFieldName())); $addToWhere = ''; if ($this->getBaseLanguageClassName() != $this->getLanguageClassName()) { $query->addLeftJoin($this->getBaseLanguageClassName(), sprintf("(\"%s\".\"ID\" = \"%s\".\"ID\")", $this->getLanguageClassName(), $this->getBaseLanguageClassName())); $addToWhere = sprintf("AND \"%s\".\"ID\" = \"%s\".\"ID\"", $this->getBaseLanguageClassName(), $this->getLanguageClassName()); } if (SilvercartConfig::useDefaultLanguageAsFallback() && Translatable::get_current_locale() != $silvercartDefaultLocale && !empty($silvercartDefaultLocale)) { $query->addWhere(sprintf("\"%s\".\"Locale\" = IFNULL((%s), (%s)) %s", $this->getBaseLanguageClassName(), $this->getLocaleDependantSelect(Translatable::get_current_locale()), $this->getLocaleDependantSelect($silvercartDefaultLocale), $addToWhere)); } elseif (!empty($silvercartDefaultLocale)) { $query->addWhere(sprintf("\"%s\".\"Locale\" = '%s' %s", $this->getBaseLanguageClassName(), Translatable::get_current_locale(), $addToWhere)); } } }