Generates a language mask from the keys of $languages.
public generateLanguageMask ( array $languages ) : integer | ||
$languages | array | |
Результат | integer |
/** * Generate query expression for a Criterion this handler accepts * * accept() must be called before calling this method. * * @param \eZ\Publish\Core\Search\Legacy\Content\Common\Gateway\CriteriaConverter $converter * @param \eZ\Publish\Core\Persistence\Database\SelectQuery $query * @param \eZ\Publish\API\Repository\Values\Content\Query\Criterion $criterion * @param array $fieldFilters * * @return \eZ\Publish\Core\Persistence\Database\Expression */ public function handle(CriteriaConverter $converter, SelectQuery $query, Criterion $criterion, array $fieldFilters) { $languages = array_flip($criterion->value); /** @var $criterion \eZ\Publish\API\Repository\Values\Content\Query\Criterion\LanguageCode */ $languages['always-available'] = $criterion->matchAlwaysAvailable; return $query->expr->gt($query->expr->bitAnd($this->dbHandler->quoteColumn('language_mask', 'ezcontentobject'), $this->maskGenerator->generateLanguageMask($languages)), 0); }
/** * Generates language mask from provided language codes * Also sets always available bit * * @param array $languageCodes * * @return int */ protected function generateLanguageMask(array $languageCodes) { $maskLanguageCodes = array(); foreach ($languageCodes as $languageCode) { $maskLanguageCodes[$languageCode] = 1; } $maskLanguageCodes['always-available'] = 1; return $this->maskGenerator->generateLanguageMask($maskLanguageCodes); }
/** * Generates a language mask for provided keywords. * * @param string[] $keywords * @param bool $alwaysAvailable * * @return int */ protected function generateLanguageMask(array $keywords, $alwaysAvailable = true) { $languages = array(); foreach ($keywords as $languageCode => $keyword) { $languages[$languageCode] = true; } if ($alwaysAvailable) { $languages['always-available'] = true; } return $this->languageMaskGenerator->generateLanguageMask($languages); }
/** * Generates a language mask for $version. * * @param \eZ\Publish\SPI\Persistence\Content\Field[] $fields * @param string $initialLanguageCode * @param bool $alwaysAvailable * * @return int */ protected function generateLanguageMask(array $fields, $initialLanguageCode, $alwaysAvailable) { $languages = array($initialLanguageCode => true); foreach ($fields as $field) { if (isset($languages[$field->languageCode])) { continue; } $languages[$field->languageCode] = true; } if ($alwaysAvailable) { $languages['always-available'] = true; } return $this->languageMaskGenerator->generateLanguageMask($languages); }
/** * Set common columns for insert/update of a Type. * * @param \eZ\Publish\Core\Persistence\Database\InsertQuery|\eZ\Publish\Core\Persistence\Database\UpdateQuery $q * @param \eZ\Publish\SPI\Persistence\ValueObject|\eZ\Publish\SPI\Persistence\Content\Type|\eZ\Publish\SPI\Persistence\Content\Type\UpdateStruct $type * * @return void */ protected function setCommonTypeColumns(Query $q, ValueObject $type) { $q->set($this->dbHandler->quoteColumn('serialized_name_list'), $q->bindValue(serialize($type->name)))->set($this->dbHandler->quoteColumn('serialized_description_list'), $q->bindValue(serialize($type->description)))->set($this->dbHandler->quoteColumn('identifier'), $q->bindValue($type->identifier))->set($this->dbHandler->quoteColumn('modified'), $q->bindValue($type->modified, null, \PDO::PARAM_INT))->set($this->dbHandler->quoteColumn('modifier_id'), $q->bindValue($type->modifierId, null, \PDO::PARAM_INT))->set($this->dbHandler->quoteColumn('remote_id'), $q->bindValue($type->remoteId))->set($this->dbHandler->quoteColumn('url_alias_name'), $q->bindValue($type->urlAliasSchema))->set($this->dbHandler->quoteColumn('contentobject_name'), $q->bindValue($type->nameSchema))->set($this->dbHandler->quoteColumn('is_container'), $q->bindValue($type->isContainer ? 1 : 0, null, \PDO::PARAM_INT))->set($this->dbHandler->quoteColumn('language_mask'), $q->bindValue($this->languageMaskGenerator->generateLanguageMask($type->name), null, \PDO::PARAM_INT))->set($this->dbHandler->quoteColumn('initial_language_id'), $q->bindValue($type->initialLanguageId, null, \PDO::PARAM_INT))->set($this->dbHandler->quoteColumn('sort_field'), $q->bindValue($type->sortField, null, \PDO::PARAM_INT))->set($this->dbHandler->quoteColumn('sort_order'), $q->bindValue($type->sortOrder, null, \PDO::PARAM_INT))->set($this->dbHandler->quoteColumn('always_available'), $q->bindValue((int) $type->defaultAlwaysAvailable, null, \PDO::PARAM_INT)); }
/** * Generate query expression for a Criterion this handler accepts * * accept() must be called before calling this method. * * @param \eZ\Publish\Core\Persistence\Legacy\Content\Search\Gateway\CriteriaConverter $converter * @param \ezcQuerySelect $query * @param \eZ\Publish\API\Repository\Values\Content\Query\Criterion $criterion * * @return \ezcQueryExpression */ public function handle(CriteriaConverter $converter, ezcQuerySelect $query, Criterion $criterion) { $languages = array_flip($criterion->value); $languages['always-available'] = 0; return $query->expr->gt($query->expr->bitAnd($this->dbHandler->quoteColumn('language_mask', 'ezcontentobject'), $this->maskGenerator->generateLanguageMask($languages)), 0); }