/** * 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); }
/** * Builds a ContentType domain object from value object returned by persistence. * * @param \eZ\Publish\SPI\Persistence\Content\Type $spiContentType * @param \eZ\Publish\SPI\Persistence\Content\Type\Group[] $spiContentTypeGroups * * @return \eZ\Publish\API\Repository\Values\ContentType\ContentType */ public function buildContentTypeDomainObject(SPIContentType $spiContentType, array $spiContentTypeGroups) { $mainLanguageCode = $this->contentLanguageHandler->load($spiContentType->initialLanguageId)->languageCode; $contentTypeGroups = array(); foreach ($spiContentTypeGroups as $spiContentTypeGroup) { $contentTypeGroups[] = $this->buildContentTypeGroupDomainObject($spiContentTypeGroup); } $fieldDefinitions = array(); foreach ($spiContentType->fieldDefinitions as $spiFieldDefinition) { $fieldDefinitions[] = $this->buildFieldDefinitionDomainObject($spiFieldDefinition); } return new ContentType(array('names' => $spiContentType->name, 'descriptions' => $spiContentType->description, 'contentTypeGroups' => $contentTypeGroups, 'fieldDefinitions' => $fieldDefinitions, 'id' => $spiContentType->id, 'status' => $spiContentType->status, 'identifier' => $spiContentType->identifier, 'creationDate' => $this->getDateTime($spiContentType->created), 'modificationDate' => $this->getDateTime($spiContentType->modified), 'creatorId' => $spiContentType->creatorId, 'modifierId' => $spiContentType->modifierId, 'remoteId' => $spiContentType->remoteId, 'urlAliasSchema' => $spiContentType->urlAliasSchema, 'nameSchema' => $spiContentType->nameSchema, 'isContainer' => $spiContentType->isContainer, 'mainLanguageCode' => $mainLanguageCode, 'defaultAlwaysAvailable' => $spiContentType->defaultAlwaysAvailable, 'defaultSortField' => $spiContentType->sortField, 'defaultSortOrder' => $spiContentType->sortOrder)); }
/** * Extracts a VersionInfo object from $row. * * @param array $rows * @param array $nameRows * * @return \eZ\Publish\SPI\Persistence\Content\VersionInfo[] */ public function extractVersionInfoListFromRows(array $rows, array $nameRows) { $nameData = array(); foreach ($nameRows as $row) { $versionId = $row['ezcontentobject_name_contentobject_id'] . '_' . $row['ezcontentobject_name_content_version']; $nameData[$versionId][$row['ezcontentobject_name_content_translation']] = $row['ezcontentobject_name_name']; } $versionInfoList = array(); foreach ($rows as $row) { $versionId = $row['ezcontentobject_id'] . '_' . $row['ezcontentobject_version_version']; if (!isset($versionInfoList[$versionId])) { $versionInfo = new VersionInfo(); $versionInfo->id = (int) $row['ezcontentobject_version_id']; $versionInfo->contentInfo = $this->extractContentInfoFromRow($row, 'ezcontentobject_'); $versionInfo->versionNo = (int) $row['ezcontentobject_version_version']; $versionInfo->creatorId = (int) $row['ezcontentobject_version_creator_id']; $versionInfo->creationDate = (int) $row['ezcontentobject_version_created']; $versionInfo->modificationDate = (int) $row['ezcontentobject_version_modified']; $versionInfo->initialLanguageCode = $this->languageHandler->load($row['ezcontentobject_version_initial_language_id'])->languageCode; $versionInfo->languageIds = $this->extractLanguageIdsFromMask((int) $row['ezcontentobject_version_language_mask']); $versionInfo->status = (int) $row['ezcontentobject_version_status']; $versionInfo->names = $nameData[$versionId]; $versionInfoList[$versionId] = $versionInfo; } } return array_values($versionInfoList); }
/** * Returns the data for the given $fieldId and $versionNo. * * @param mixed $fieldId * @param mixed $versionNo * * @return array */ protected function loadFieldData($fieldId, $versionNo) { $connection = $this->getConnection(); $query = $connection->createSelectQuery(); $query->selectDistinct($connection->aliasedColumn($query, 'id', 'eztags'), $connection->aliasedColumn($query, 'parent_id', 'eztags'), $connection->aliasedColumn($query, 'main_tag_id', 'eztags'), $connection->aliasedColumn($query, 'keyword', 'eztags'), $connection->aliasedColumn($query, 'depth', 'eztags'), $connection->aliasedColumn($query, 'path_string', 'eztags'), $connection->aliasedColumn($query, 'modified', 'eztags'), $connection->aliasedColumn($query, 'remote_id', 'eztags'), $connection->aliasedColumn($query, 'main_language_id', 'eztags'), $connection->aliasedColumn($query, 'language_mask', 'eztags'), $connection->aliasedColumn($query, 'keyword', 'eztags_keyword'), $connection->aliasedColumn($query, 'locale', 'eztags_keyword'), $connection->aliasedColumn($query, 'priority', 'eztags_attribute_link'))->from($connection->quoteTable('eztags'))->innerJoin($connection->quoteTable('eztags_attribute_link'), $query->expr->eq($connection->quoteColumn('id', 'eztags'), $connection->quoteColumn('keyword_id', 'eztags_attribute_link')))->innerJoin($connection->quoteTable('eztags_keyword'), $query->expr->eq($connection->quoteColumn('id', 'eztags'), $connection->quoteColumn('keyword_id', 'eztags_keyword')))->where($query->expr->lAnd($query->expr->eq($connection->quoteColumn('objectattribute_id', 'eztags_attribute_link'), $query->bindValue($fieldId, null, PDO::PARAM_INT)), $query->expr->eq($connection->quoteColumn('objectattribute_version', 'eztags_attribute_link'), $query->bindValue($versionNo, null, PDO::PARAM_INT))))->orderBy($connection->quoteColumn('priority', 'eztags_attribute_link')); $statement = $query->prepare(); $statement->execute(); $rows = $statement->fetchAll(PDO::FETCH_ASSOC); $tagList = array(); foreach ($rows as $row) { $tagId = (int) $row['eztags_id']; if (!isset($tagList[$tagId])) { $tagList[$tagId] = array(); $tagList[$tagId]['id'] = (int) $row['eztags_id']; $tagList[$tagId]['parent_id'] = (int) $row['eztags_parent_id']; $tagList[$tagId]['main_tag_id'] = (int) $row['eztags_main_tag_id']; $tagList[$tagId]['keywords'] = array(); $tagList[$tagId]['depth'] = (int) $row['eztags_depth']; $tagList[$tagId]['path_string'] = $row['eztags_path_string']; $tagList[$tagId]['modified'] = (int) $row['eztags_modified']; $tagList[$tagId]['remote_id'] = $row['eztags_remote_id']; $tagList[$tagId]['always_available'] = (int) $row['eztags_language_mask'] & 1 ? true : false; $tagList[$tagId]['main_language_code'] = $this->languageHandler->load($row['eztags_main_language_id'])->languageCode; $tagList[$tagId]['language_codes'] = array(); } if (!isset($tagList[$tagId]['keywords'][$row['eztags_keyword_locale']])) { $tagList[$tagId]['keywords'][$row['eztags_keyword_locale']] = $row['eztags_keyword_keyword']; } if (!in_array([$row['eztags_keyword_locale']], $tagList[$tagId]['language_codes'])) { $tagList[$tagId]['language_codes'][] = $row['eztags_keyword_locale']; } } return array_values($tagList); }
/** * Test delete function * * @covers eZ\Publish\Core\Persistence\InMemory\LanguageHandler::delete */ public function testDelete() { $this->handler->delete(4); try { $this->handler->load(4); $this->fail("Language has not been deleted"); } catch (NotFound $e) { } }
protected function buildTagDomainObject(SPITag $spiTag) { $languageCodes = array(); foreach ($spiTag->languageIds as $languageId) { $languageCodes[] = $this->languageHandler->load($languageId)->languageCode; } $modificationDate = new DateTime(); $modificationDate->setTimestamp($spiTag->modificationDate); return new Tag(array('id' => $spiTag->id, 'parentTagId' => $spiTag->parentTagId, 'mainTagId' => $spiTag->mainTagId, 'keywords' => $spiTag->keywords, 'depth' => $spiTag->depth, 'pathString' => $spiTag->pathString, 'modificationDate' => $modificationDate, 'remoteId' => $spiTag->remoteId, 'alwaysAvailable' => $spiTag->alwaysAvailable, 'mainLanguageCode' => $spiTag->mainLanguageCode, 'languageCodes' => $languageCodes)); }
protected function extractMatchedLanguage($languageMask, $mainLanguageId, $languageSettings) { foreach ($languageSettings['languages'] as $languageCode) { if ($languageMask & $this->languageHandler->loadByLanguageCode($languageCode)->id) { return $languageCode; } } if ($languageMask & 1 || empty($languageSettings['languages'])) { return $this->languageHandler->load($mainLanguageId)->languageCode; } return null; }
/** * Builds a VersionInfo domain object from value object returned from persistence. * * @param \eZ\Publish\SPI\Persistence\Content\VersionInfo $spiVersionInfo * * @return \eZ\Publish\Core\Repository\Values\Content\VersionInfo */ public function buildVersionInfoDomainObject(SPIVersionInfo $spiVersionInfo) { $languageCodes = array(); foreach ($spiVersionInfo->languageIds as $languageId) { $languageCodes[] = $this->contentLanguageHandler->load($languageId)->languageCode; } // Map SPI statuses to API switch ($spiVersionInfo->status) { case SPIVersionInfo::STATUS_ARCHIVED: $status = APIVersionInfo::STATUS_ARCHIVED; break; case SPIVersionInfo::STATUS_PUBLISHED: $status = APIVersionInfo::STATUS_PUBLISHED; break; case SPIVersionInfo::STATUS_DRAFT: default: $status = APIVersionInfo::STATUS_DRAFT; } return new VersionInfo(array('id' => $spiVersionInfo->id, 'versionNo' => $spiVersionInfo->versionNo, 'modificationDate' => $this->getDateTime($spiVersionInfo->modificationDate), 'creatorId' => $spiVersionInfo->creatorId, 'creationDate' => $this->getDateTime($spiVersionInfo->creationDate), 'status' => $status, 'initialLanguageCode' => $spiVersionInfo->initialLanguageCode, 'languageCodes' => $languageCodes, 'names' => $spiVersionInfo->names, 'contentInfo' => $this->buildContentInfoDomainObject($spiVersionInfo->contentInfo))); }
/** * Loads a Language by its id ($languageId) * * @throws \eZ\Publish\API\Repository\Exceptions\NotFoundException if language could not be found * * @param mixed $languageId * * @return \eZ\Publish\API\Repository\Values\Content\Language */ public function loadLanguageById($languageId) { $language = $this->languageHandler->load($languageId); return $this->buildDomainObject($language); }