/** * 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); }
/** * Returns a field language join condition for the given $languageSettings. * * @param \eZ\Publish\Core\Persistence\Database\SelectQuery $query * @param array $languageSettings * * @return string */ 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)); }
/** * Rollback transaction. * * Rollback transaction, or throw exceptions if no transactions has been started. * * @throws \RuntimeException If no transaction has been started */ public function rollback() { try { $this->dbHandler->rollback(); // Clear all caches after rollback if ($this->contentTypeHandler instanceof CachingContentTypeHandler) { $this->contentTypeHandler->clearCache(); } if ($this->languageHandler instanceof CachingLanguageHandler) { $this->languageHandler->clearCache(); } } catch (Exception $e) { throw new RuntimeException($e->getMessage(), 0, $e); } }
/** * 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); }
/** * Inserts keywords for tag with provided tag ID. * * @param mixed $tagId * @param array $keywords * @param string $mainLanguageCode * @param bool $alwaysAvailable */ protected function insertTagKeywords($tagId, array $keywords, $mainLanguageCode, $alwaysAvailable) { foreach ($keywords as $languageCode => $keyword) { $query = $this->handler->createInsertQuery(); $query->insertInto($this->handler->quoteTable('eztags_keyword'))->set($this->handler->quoteColumn('keyword_id'), $query->bindValue($tagId, null, PDO::PARAM_INT))->set($this->handler->quoteColumn('language_id'), $query->bindValue($this->languageHandler->loadByLanguageCode($languageCode)->id + (int) ($languageCode === $mainLanguageCode && $alwaysAvailable), null, PDO::PARAM_INT))->set($this->handler->quoteColumn('keyword'), $query->bindValue($keyword, null, PDO::PARAM_STR))->set($this->handler->quoteColumn('locale'), $query->bindValue($languageCode, null, PDO::PARAM_STR))->set($this->handler->quoteColumn('status'), $query->bindValue(1, null, PDO::PARAM_INT)); $query->prepare()->execute(); } }
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)); }
/** * Generates a language mask from the given $languageSettings. * * @param array $languageSettings * * @return int */ protected function getLanguageMask(array $languageSettings) { $mask = 0; if ($languageSettings['useAlwaysAvailable']) { $mask |= 1; } foreach ($languageSettings['languages'] as $languageCode) { $mask |= $this->languageHandler->loadByLanguageCode($languageCode)->id; } return $mask; }
/** * Validates given translated list $list, which should be an array of strings with language codes as keys. * * @throws \eZ\Publish\API\Repository\Exceptions\InvalidArgumentException * * @param mixed $list * @param string $argumentName */ public function validateTranslatedList($list, $argumentName) { if (!is_array($list)) { throw new InvalidArgumentType($argumentName, 'array', $list); } foreach ($list as $languageCode => $translation) { $this->contentLanguageHandler->loadByLanguageCode($languageCode); if (!is_string($translation)) { throw new InvalidArgumentType($argumentName . "['{$languageCode}']", 'string', $translation); } } }
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; }
/** * Applies joins to the query, required to fetch sort data * * @param \eZ\Publish\Core\Persistence\Database\SelectQuery $query * @param \eZ\Publish\API\Repository\Values\Content\Query\SortClause $sortClause * @param int $number * @param array $fieldMap * * @return void */ public function applyJoin(SelectQuery $query, SortClause $sortClause, $number, array $fieldMap) { /** @var \eZ\Publish\API\Repository\Values\Content\Query\SortClause\Target\FieldTarget $fieldTarget */ $fieldTarget = $sortClause->targetData; $fieldDefinitionId = $fieldMap[$fieldTarget->typeIdentifier][$fieldTarget->fieldIdentifier]; $table = $this->getSortTableName($number); if ($fieldTarget->languageCode === null) { $languageExpression = $query->expr->gt($query->expr->bitAnd($query->expr->bitAnd($this->dbHandler->quoteColumn("language_id", $table), ~1), $this->dbHandler->quoteColumn("initial_language_id", "ezcontentobject")), 0); } else { $languageExpression = $query->expr->gt($query->expr->bitAnd($query->expr->bitAnd($this->dbHandler->quoteColumn("language_id", $table), ~1), $query->bindValue($this->languageHandler->loadByLanguageCode($fieldTarget->languageCode)->id, null, \PDO::PARAM_INT)), 0); } $query->leftJoin($query->alias($this->dbHandler->quoteTable("ezcontentobject_attribute"), $this->dbHandler->quoteIdentifier($table)), $query->expr->lAnd($query->expr->eq($query->bindValue($fieldDefinitionId, null, PDO::PARAM_INT), $this->dbHandler->quoteColumn("contentclassattribute_id", $table)), $query->expr->eq($this->dbHandler->quoteColumn("contentobject_id", $table), $this->dbHandler->quoteColumn("id", "ezcontentobject")), $query->expr->eq($this->dbHandler->quoteColumn("version", $table), $this->dbHandler->quoteColumn("current_version", "ezcontentobject")), $languageExpression)); }
/** * Applies joins to the query, required to fetch sort data * * @param \eZ\Publish\Core\Persistence\Database\SelectQuery $query * @param \eZ\Publish\API\Repository\Values\Content\Query\SortClause $sortClause * @param int $number * * @return void */ public function applyJoin(SelectQuery $query, SortClause $sortClause, $number) { /** @var \eZ\Publish\API\Repository\Values\Content\Query\SortClause\Target\FieldTarget $fieldTarget */ $fieldTarget = $sortClause->targetData; $table = $this->getSortTableName($number); $externalTable = $this->getSortTableName($number, "ezgmaplocation"); if ($fieldTarget->languageCode === null) { $query->innerJoin($query->alias($this->dbHandler->quoteTable("ezcontentobject_attribute"), $this->dbHandler->quoteIdentifier($table)), $query->expr->lAnd($query->expr->eq($this->dbHandler->quoteColumn("contentobject_id", $table), $this->dbHandler->quoteColumn("id", "ezcontentobject")), $query->expr->eq($this->dbHandler->quoteColumn("version", $table), $this->dbHandler->quoteColumn("current_version", "ezcontentobject")), $query->expr->gt($query->expr->bitAnd($query->expr->bitAnd($this->dbHandler->quoteColumn("language_id", $table), ~1), $this->dbHandler->quoteColumn("initial_language_id", "ezcontentobject")), 0))); } else { $query->innerJoin($query->alias($this->dbHandler->quoteTable("ezcontentobject_attribute"), $this->dbHandler->quoteIdentifier($table)), $query->expr->lAnd($query->expr->eq($this->dbHandler->quoteColumn("contentobject_id", $table), $this->dbHandler->quoteColumn("id", "ezcontentobject")), $query->expr->eq($this->dbHandler->quoteColumn("version", $table), $this->dbHandler->quoteColumn("current_version", "ezcontentobject")), $query->expr->gt($query->expr->bitAnd($query->expr->bitAnd($this->dbHandler->quoteColumn("language_id", $table), ~1), $query->bindValue($this->languageHandler->loadByLanguageCode($fieldTarget->languageCode)->id, null, \PDO::PARAM_INT)), 0))); } $query->innerJoin($query->alias($this->dbHandler->quoteTable("ezgmaplocation"), $this->dbHandler->quoteIdentifier($externalTable)), $query->expr->lAnd($query->expr->eq($this->dbHandler->quoteColumn("contentobject_version", $externalTable), $this->dbHandler->quoteColumn("version", $table)), $query->expr->eq($this->dbHandler->quoteColumn("contentobject_attribute_id", $externalTable), $this->dbHandler->quoteColumn("id", $table))))->innerJoin($query->alias($this->dbHandler->quoteTable("ezcontentclass_attribute"), $this->dbHandler->quoteIdentifier("cc_attr_{$number}")), $query->expr->lAnd($query->expr->eq($this->dbHandler->quoteColumn("contentclassattribute_id", $table), $this->dbHandler->quoteColumn("id", "cc_attr_{$number}")), $query->expr->eq($this->dbHandler->quoteColumn("identifier", "cc_attr_{$number}"), $query->bindValue($fieldTarget->fieldIdentifier)), $query->expr->eq($this->dbHandler->quoteColumn("version", "cc_attr_{$number}"), $query->bindValue(Type::STATUS_DEFINED, null, \PDO::PARAM_INT))))->innerJoin($query->alias($this->dbHandler->quoteTable("ezcontentclass"), $this->dbHandler->quoteIdentifier("cc_{$number}")), $query->expr->lAnd($query->expr->eq($this->dbHandler->quoteColumn("contentclass_id", "cc_attr_{$number}"), $this->dbHandler->quoteColumn("id", "cc_{$number}")), $query->expr->eq($this->dbHandler->quoteColumn("identifier", "cc_{$number}"), $query->bindValue($fieldTarget->typeIdentifier)), $query->expr->eq($this->dbHandler->quoteColumn("version", "cc_{$number}"), $query->bindValue(Type::STATUS_DEFINED, null, \PDO::PARAM_INT)))); }
/** * Applies joins to the query, required to fetch sort data. * * @param \eZ\Publish\Core\Persistence\Database\SelectQuery $query * @param \eZ\Publish\API\Repository\Values\Content\Query\SortClause $sortClause * @param int $number */ public function applyJoin(SelectQuery $query, SortClause $sortClause, $number) { /** @var \eZ\Publish\API\Repository\Values\Content\Query\SortClause\Target\FieldTarget $fieldTarget */ $fieldTarget = $sortClause->targetData; $fieldMap = $this->contentTypeHandler->getSearchableFieldMap(); if (!isset($fieldMap[$fieldTarget->typeIdentifier][$fieldTarget->fieldIdentifier]['field_definition_id'])) { throw new InvalidArgumentException('$sortClause->targetData', 'No searchable fields found for the given sort clause target ' . "'{$fieldTarget->fieldIdentifier}' on '{$fieldTarget->typeIdentifier}'."); } $fieldDefinitionId = $fieldMap[$fieldTarget->typeIdentifier][$fieldTarget->fieldIdentifier]['field_definition_id']; $table = $this->getSortTableName($number); if ($fieldTarget->languageCode === null) { $languageExpression = $query->expr->gt($query->expr->bitAnd($query->expr->bitAnd($this->dbHandler->quoteColumn('language_id', $table), ~1), $this->dbHandler->quoteColumn('initial_language_id', 'ezcontentobject')), 0); } else { $languageExpression = $query->expr->gt($query->expr->bitAnd($query->expr->bitAnd($this->dbHandler->quoteColumn('language_id', $table), ~1), $query->bindValue($this->languageHandler->loadByLanguageCode($fieldTarget->languageCode)->id, null, \PDO::PARAM_INT)), 0); } $query->leftJoin($query->alias($this->dbHandler->quoteTable('ezcontentobject_attribute'), $this->dbHandler->quoteIdentifier($table)), $query->expr->lAnd($query->expr->eq($query->bindValue($fieldDefinitionId, null, PDO::PARAM_INT), $this->dbHandler->quoteColumn('contentclassattribute_id', $table)), $query->expr->eq($this->dbHandler->quoteColumn('contentobject_id', $table), $this->dbHandler->quoteColumn('id', 'ezcontentobject')), $query->expr->eq($this->dbHandler->quoteColumn('version', $table), $this->dbHandler->quoteColumn('current_version', 'ezcontentobject')), $languageExpression)); }
/** * Generates a language mask from the given $languageFilter. * * @param array $languageFilter * * @return int */ protected function getLanguageMask(array $languageFilter) { if (!isset($languageFilter['languages'])) { $languageFilter['languages'] = array(); } if (!isset($languageFilter['useAlwaysAvailable'])) { $languageFilter['useAlwaysAvailable'] = true; } $mask = 0; if ($languageFilter['useAlwaysAvailable']) { $mask |= 1; } foreach ($languageFilter['languages'] as $languageCode) { $mask |= $this->languageHandler->loadByLanguageCode($languageCode)->id; } return $mask; }
/** * Deletes a language from content repository * * @throws \eZ\Publish\API\Repository\Exceptions\InvalidArgumentException * if language can not be deleted * because it is still assigned to some content / type / (...). * @throws \eZ\Publish\API\Repository\Exceptions\UnauthorizedException If user does not have access to content translations * * @param \eZ\Publish\API\Repository\Values\Content\Language $language */ public function deleteLanguage(Language $language) { if ($this->repository->hasAccess('content', 'translations') !== true) { throw new UnauthorizedException('content', 'translations'); } $loadedLanguage = $this->loadLanguageById($language->id); $this->repository->beginTransaction(); try { $this->languageHandler->delete($loadedLanguage->id); $this->repository->commit(); } catch (LogicException $e) { $this->repository->rollback(); throw new InvalidArgumentException("language", $e->getMessage(), $e); } catch (Exception $e) { $this->repository->rollback(); throw $e; } }
/** * Builds ContentType update struct for storage layer. * * @param \eZ\Publish\API\Repository\Values\ContentType\ContentTypeDraft $contentTypeDraft * @param \eZ\Publish\API\Repository\Values\ContentType\ContentTypeUpdateStruct $contentTypeUpdateStruct * @param \eZ\Publish\API\Repository\Values\User\UserReference $user * * @return \eZ\Publish\SPI\Persistence\Content\Type\UpdateStruct */ public function buildSPIContentTypeUpdateStruct(APIContentTypeDraft $contentTypeDraft, APIContentTypeUpdateStruct $contentTypeUpdateStruct, APIUserReference $user) { $updateStruct = new SPIContentTypeUpdateStruct(); $updateStruct->identifier = $contentTypeUpdateStruct->identifier !== null ? $contentTypeUpdateStruct->identifier : $contentTypeDraft->identifier; $updateStruct->remoteId = $contentTypeUpdateStruct->remoteId !== null ? $contentTypeUpdateStruct->remoteId : $contentTypeDraft->remoteId; $updateStruct->name = $contentTypeUpdateStruct->names !== null ? $contentTypeUpdateStruct->names : $contentTypeDraft->names; $updateStruct->description = $contentTypeUpdateStruct->descriptions !== null ? $contentTypeUpdateStruct->descriptions : $contentTypeDraft->descriptions; $updateStruct->modified = $contentTypeUpdateStruct->modificationDate !== null ? $contentTypeUpdateStruct->modificationDate->getTimestamp() : time(); $updateStruct->modifierId = $contentTypeUpdateStruct->modifierId !== null ? $contentTypeUpdateStruct->modifierId : $user->getUserId(); $updateStruct->urlAliasSchema = $contentTypeUpdateStruct->urlAliasSchema !== null ? $contentTypeUpdateStruct->urlAliasSchema : $contentTypeDraft->urlAliasSchema; $updateStruct->nameSchema = $contentTypeUpdateStruct->nameSchema !== null ? $contentTypeUpdateStruct->nameSchema : $contentTypeDraft->nameSchema; $updateStruct->isContainer = $contentTypeUpdateStruct->isContainer !== null ? $contentTypeUpdateStruct->isContainer : $contentTypeDraft->isContainer; $updateStruct->sortField = $contentTypeUpdateStruct->defaultSortField !== null ? $contentTypeUpdateStruct->defaultSortField : $contentTypeDraft->defaultSortField; $updateStruct->sortOrder = $contentTypeUpdateStruct->defaultSortOrder !== null ? (int) $contentTypeUpdateStruct->defaultSortOrder : $contentTypeDraft->defaultSortOrder; $updateStruct->defaultAlwaysAvailable = $contentTypeUpdateStruct->defaultAlwaysAvailable !== null ? $contentTypeUpdateStruct->defaultAlwaysAvailable : $contentTypeDraft->defaultAlwaysAvailable; $updateStruct->initialLanguageId = $this->contentLanguageHandler->loadByLanguageCode($contentTypeUpdateStruct->mainLanguageCode !== null ? $contentTypeUpdateStruct->mainLanguageCode : $contentTypeDraft->mainLanguageCode)->id; return $updateStruct; }
/** * Creates CreateStruct from $content. * * @param \eZ\Publish\SPI\Persistence\Content $content * * @return \eZ\Publish\SPI\Persistence\Content\CreateStruct */ public function createCreateStructFromContent(Content $content) { $struct = new CreateStruct(); $struct->name = $content->versionInfo->names; $struct->typeId = $content->versionInfo->contentInfo->contentTypeId; $struct->sectionId = $content->versionInfo->contentInfo->sectionId; $struct->ownerId = $content->versionInfo->contentInfo->ownerId; $struct->locations = array(); $struct->alwaysAvailable = $content->versionInfo->contentInfo->alwaysAvailable; $struct->remoteId = md5(uniqid(get_class($this), true)); $struct->initialLanguageId = $this->languageHandler->loadByLanguageCode($content->versionInfo->initialLanguageCode)->id; $struct->modified = time(); foreach ($content->fields as $field) { $newField = clone $field; $newField->id = null; $struct->fields[] = $newField; } return $struct; }
/** * Test delete function throwing LogicException * * @expectedException \LogicException * @covers eZ\Publish\Core\Persistence\InMemory\LanguageHandler::delete */ public function testDeleteThrowsLogicException() { $language = $this->handler->loadByLanguageCode('eng-GB'); $this->handler->delete($language->id); }