/**
  * 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);
 }
Example #2
0
 /**
  * Extracts a Tag object from $row.
  *
  * @param array $rows
  *
  * @return \Netgen\TagsBundle\SPI\Persistence\Tags\Tag[]
  */
 public function extractTagListFromRows(array $rows)
 {
     $tagList = array();
     foreach ($rows as $row) {
         $tagId = (int) $row['eztags_id'];
         if (!isset($tagList[$tagId])) {
             $tag = new Tag();
             $tag->id = (int) $row['eztags_id'];
             $tag->parentTagId = (int) $row['eztags_parent_id'];
             $tag->mainTagId = (int) $row['eztags_main_tag_id'];
             $tag->keywords = array();
             $tag->depth = (int) $row['eztags_depth'];
             $tag->pathString = $row['eztags_path_string'];
             $tag->modificationDate = (int) $row['eztags_modified'];
             $tag->remoteId = $row['eztags_remote_id'];
             $tag->alwaysAvailable = (int) $row['eztags_language_mask'] & 1 ? true : false;
             $tag->mainLanguageCode = $this->languageHandler->load($row['eztags_main_language_id'])->languageCode;
             $tag->languageIds = $this->languageMaskGenerator->extractLanguageIdsFromMask((int) $row['eztags_language_mask']);
             $tagList[$tagId] = $tag;
         }
         if (!isset($tagList[$tagId]->keywords[$row['eztags_keyword_locale']])) {
             $tagList[$tagId]->keywords[$row['eztags_keyword_locale']] = $row['eztags_keyword_keyword'];
         }
     }
     return array_values($tagList);
 }
 /**
  * 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);
 }
Example #4
0
 /**
  * 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);
 }
 /**
  * Loads paged list of global aliases.
  *
  * @param string|null $languageCode
  * @param int $offset
  * @param int $limit
  *
  * @return array
  */
 public function listGlobalEntries($languageCode = null, $offset = 0, $limit = -1)
 {
     $limit = $limit === -1 ? self::MAX_LIMIT : $limit;
     /** @var $query \eZ\Publish\Core\Persistence\Database\SelectQuery */
     $query = $this->dbHandler->createSelectQuery();
     $query->select($this->dbHandler->quoteColumn("action"), $this->dbHandler->quoteColumn("id"), $this->dbHandler->quoteColumn("link"), $this->dbHandler->quoteColumn("is_alias"), $this->dbHandler->quoteColumn("alias_redirects"), $this->dbHandler->quoteColumn("lang_mask"), $this->dbHandler->quoteColumn("is_original"), $this->dbHandler->quoteColumn("parent"), $this->dbHandler->quoteColumn("text_md5"))->from($this->dbHandler->quoteTable("ezurlalias_ml"))->where($query->expr->lAnd($query->expr->eq($this->dbHandler->quoteColumn("action_type"), $query->bindValue("module", null, \PDO::PARAM_STR)), $query->expr->eq($this->dbHandler->quoteColumn("is_original"), $query->bindValue(1, null, \PDO::PARAM_INT)), $query->expr->eq($this->dbHandler->quoteColumn("is_alias"), $query->bindValue(1, null, \PDO::PARAM_INT))))->limit($limit, $offset);
     if (isset($languageCode)) {
         $query->where($query->expr->gt($query->expr->bitAnd($this->dbHandler->quoteColumn("lang_mask"), $query->bindValue($this->languageMaskGenerator->generateLanguageIndicator($languageCode, false), null, \PDO::PARAM_INT)), 0));
     }
     $statement = $query->prepare();
     $statement->execute();
     return $statement->fetchAll(\PDO::FETCH_ASSOC);
 }
Example #6
0
 /**
  * @param array $pathElementData
  * @param array $row
  */
 protected function normalizePathDataRow(array &$pathElementData, array $row)
 {
     $languageCodes = $this->languageMaskGenerator->extractLanguageCodesFromMask($row['lang_mask']);
     $pathElementData['always-available'] = $this->languageMaskGenerator->isAlwaysAvailable($row['lang_mask']);
     if (!empty($languageCodes)) {
         foreach ($languageCodes as $languageCode) {
             $pathElementData['translations'][$languageCode] = $row['text'];
         }
     } elseif ($pathElementData['always-available']) {
         // NOP entry, lang_mask == 1
         $pathElementData['translations']['always-available'] = $row['text'];
     }
 }
 /**
  * Loads the actual content based on the provided IDs
  *
  * @param array $contentIds
  * @param mixed $translations
  *
  * @return mixed[]
  */
 protected function loadContent(array $contentIds, $translations)
 {
     $loadQuery = $this->queryBuilder->createFindQuery($translations);
     $loadQuery->where($loadQuery->expr->eq('ezcontentobject_version.status', VersionInfo::STATUS_PUBLISHED), $loadQuery->expr->in($this->handler->quoteColumn('id', 'ezcontentobject'), $contentIds));
     $statement = $loadQuery->prepare();
     $statement->execute();
     $rows = $statement->fetchAll(\PDO::FETCH_ASSOC);
     // Sort array, as defined in the $contentIds array
     $contentIdOrder = array_flip($contentIds);
     usort($rows, function ($current, $next) use($contentIdOrder) {
         return $contentIdOrder[$current['ezcontentobject_id']] - $contentIdOrder[$next['ezcontentobject_id']];
     });
     foreach ($rows as &$row) {
         $row['ezcontentobject_always_available'] = $this->languageMaskGenerator->isAlwaysAvailable($row['ezcontentobject_language_mask']);
         $row['ezcontentobject_main_language_code'] = $this->languageHandler->load($row['ezcontentobject_initial_language_id'])->languageCode;
         $row['ezcontentobject_version_languages'] = $this->languageMaskGenerator->extractLanguageIdsFromMask($row['ezcontentobject_version_language_mask']);
         $row['ezcontentobject_version_initial_language_code'] = $this->languageHandler->load($row['ezcontentobject_version_initial_language_id'])->languageCode;
     }
     return $rows;
 }
 /**
  * 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));
 }
 /**
  * Sets field (ezcontentobject_attribute) values to the given query.
  *
  * @param \eZ\Publish\Core\Persistence\Database\InsertQuery $q
  * @param Content $content
  * @param Field $field
  * @param StorageFieldValue $value
  */
 protected function setInsertFieldValues(InsertQuery $q, Content $content, Field $field, StorageFieldValue $value)
 {
     $q->insertInto($this->dbHandler->quoteTable('ezcontentobject_attribute'))->set($this->dbHandler->quoteColumn('contentobject_id'), $q->bindValue($content->versionInfo->contentInfo->id, null, \PDO::PARAM_INT))->set($this->dbHandler->quoteColumn('contentclassattribute_id'), $q->bindValue($field->fieldDefinitionId, null, \PDO::PARAM_INT))->set($this->dbHandler->quoteColumn('data_type_string'), $q->bindValue($field->type))->set($this->dbHandler->quoteColumn('language_code'), $q->bindValue($field->languageCode))->set($this->dbHandler->quoteColumn('version'), $q->bindValue($field->versionNo, null, \PDO::PARAM_INT))->set($this->dbHandler->quoteColumn('data_float'), $q->bindValue($value->dataFloat))->set($this->dbHandler->quoteColumn('data_int'), $q->bindValue($value->dataInt, null, \PDO::PARAM_INT))->set($this->dbHandler->quoteColumn('data_text'), $q->bindValue($value->dataText))->set($this->dbHandler->quoteColumn('sort_key_int'), $q->bindValue($value->sortKeyInt, null, \PDO::PARAM_INT))->set($this->dbHandler->quoteColumn('sort_key_string'), $q->bindValue(mb_substr($value->sortKeyString, 0, 255)))->set($this->dbHandler->quoteColumn('language_id'), $q->bindValue($this->languageMaskGenerator->generateLanguageIndicator($field->languageCode, $this->isLanguageAlwaysAvailable($content, $field->languageCode)), 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);
 }