protected function getFieldCondition(SelectQuery $query, array $languageSettings)
{
// 1. Use main language(s) by default
if (empty($languageSettings['languages'])) {
return $query->expr->gt($query->expr->bitAnd($this->dbHandler->quoteColumn('initial_language_id', 'ezcontentobject'), $this->dbHandler->quoteColumn('language_id', 'ezcontentobject_attribute')), $query->bindValue(0, null, PDO::PARAM_INT));
}
// 2. Otherwise use prioritized languages
$leftSide = $query->expr->bitAnd($query->expr->sub($this->dbHandler->quoteColumn('language_mask', 'ezcontentobject'), $query->expr->bitAnd($this->dbHandler->quoteColumn('language_mask', 'ezcontentobject'), $this->dbHandler->quoteColumn('language_id', 'ezcontentobject_attribute'))), $query->bindValue(1, null, PDO::PARAM_INT));
$rightSide = $query->expr->bitAnd($this->dbHandler->quoteColumn('language_id', 'ezcontentobject_attribute'), $query->bindValue(1, null, PDO::PARAM_INT));
for ($index = count($languageSettings['languages']) - 1, $multiplier = 2; $index >= 0; $index--, $multiplier *= 2) {
$languageId = $this->languageHandler->loadByLanguageCode($languageSettings['languages'][$index])->id;
$addToLeftSide = $query->expr->bitAnd($query->expr->sub($this->dbHandler->quoteColumn('language_mask', 'ezcontentobject'), $query->expr->bitAnd($this->dbHandler->quoteColumn('language_mask', 'ezcontentobject'), $this->dbHandler->quoteColumn('language_id', 'ezcontentobject_attribute'))), $languageId);
$addToRightSide = $query->expr->bitAnd($this->dbHandler->quoteColumn('language_id', 'ezcontentobject_attribute'), $languageId);
if ($multiplier > $languageId) {
$factor = $multiplier / $languageId;
for ($shift = 0; $factor > 1; $factor = $factor / 2, $shift++) {
}
$factorTerm = ' << ' . $shift;
$addToLeftSide .= $factorTerm;
$addToRightSide .= $factorTerm;
} elseif ($multiplier < $languageId) {
$factor = $languageId / $multiplier;
for ($shift = 0; $factor > 1; $factor = $factor / 2, $shift++) {
}
$factorTerm = ' >> ' . $shift;
$addToLeftSide .= $factorTerm;
$addToRightSide .= $factorTerm;
}
$leftSide = $query->expr->add($leftSide, "({$addToLeftSide})");
$rightSide = $query->expr->add($rightSide, "({$addToRightSide})");
}
return $query->expr->lAnd($query->expr->gt($query->expr->bitAnd($this->dbHandler->quoteColumn('language_mask', 'ezcontentobject'), $this->dbHandler->quoteColumn('language_id', 'ezcontentobject_attribute')), $query->bindValue(0, null, PDO::PARAM_INT)), $query->expr->lt($leftSide, $rightSide));
}