/** * Test the Meta Method * * @param string $name * @param string $content * * @dataProvider metasSampleProvider */ public function testMetaObject($name, $content) { $meta = new Meta($name, $content); $this->assertEquals($name, $meta->getName()); $this->assertEquals($content, $meta->getContent()); $this->assertEquals($name, $meta->attribute('name')); $this->assertEquals($content, $meta->attribute('content')); $this->assertTrue($meta->hasAttribute('name')); $this->assertTrue($meta->hasAttribute('content')); $this->assertTrue($content == '' ? $meta->isEmpty() : !$meta->isEmpty()); }
/** * Converts an $hash to the Value defined by the field type * * @param mixed $hash * * @return Value */ public function fromHash($hash) { if (!is_array($hash)) { return new Value([]); } $metas = []; foreach ($hash as $hashItem) { if (!is_array($hashItem)) { continue; } $meta = new Meta(); $meta->setName($hashItem["meta_name"]); $meta->setContent($hashItem["meta_content"]); $metas[] = $meta; } return new Value($metas); }
/** * Compute Meta by reference * * @param Content $content * @param string|Field $fieldDefIdentifier * @param ContentType $contentType * @param bool $needFallback * * @return Meta[] */ protected function innerComputeMetas(Content $content, $fieldDefIdentifier, ContentType $contentType, &$needFallback = false) { if ($fieldDefIdentifier instanceof Field) { $metasFieldValue = $fieldDefIdentifier->value; $fieldDefIdentifier = $fieldDefIdentifier->fieldDefIdentifier; } else { $metasFieldValue = $content->getFieldValue($fieldDefIdentifier); } if ($metasFieldValue instanceof MetasFieldValue) { $metasConfig = $this->configResolver->getParameter('fieldtype_metas', 'novae_zseo'); // as the configuration is the last fallback we need to loop on it. foreach ($metasConfig as $metaName => $metasSettings) { if ($metasFieldValue->nameExists($metaName)) { $meta = $metasFieldValue->metas[$metaName]; } else { $meta = new Meta($metaName); $metasFieldValue->metas[$metaName] = $meta; } /** @var Meta $meta */ if ($meta->isEmpty()) { $meta->setContent($metasConfig[$meta->getName()]['default_pattern']); $fieldDefinition = $contentType->getFieldDefinition($fieldDefIdentifier); $configuration = $fieldDefinition->getFieldSettings()['configuration']; // but if we need something is the configuration we take it if ($configuration[$meta->getName()]) { $meta->setContent($configuration[$meta->getName()]); } } if (!$this->metaNameSchema->resolveMeta($meta, $content, $contentType)) { $needFallback = true; } } return $metasFieldValue->metas; } return []; }
/** * Return content (xxx object), either stored one or a new empty one based on * if attribute has data or not * * @param eZContentObjectAttribute $contentObjectAttribute * * @return array */ function objectAttributeContent($contentObjectAttribute) { if ($contentObjectAttribute->attribute('id')) { $db = eZDB::instance(); $metasArray = $db->arrayQuery("SELECT * FROM " . $db->escapeString(self::TABLE) . " WHERE\n objectattribute_id = {$contentObjectAttribute->attribute('id')} AND\n objectattribute_version= {$contentObjectAttribute->attribute('version')}\n "); $metas = []; foreach ($metasArray as $row) { $meta = new Meta(); $meta->setName($row['meta_name'])->setContent($row['meta_content']); $metas[] = $meta; } return new FieldValue($metas); } return new FieldValue([]); }
/** * Resolve a Meta Value * * @param Meta $meta * @param Content $content * @param ContentType $contentType * * @return boolean */ public function resolveMeta(Meta $meta, Content $content, ContentType $contentType = null) { $this->settings = array('limit' => $this->fieldContentMaxLength, 'sequence' => '...'); if ($contentType === null) { $contentType = $this->repository->getContentTypeService()->loadContentType($content->contentInfo->contentTypeId); } $resolveMultilingue = $this->resolve($meta->getContent(), $contentType, $content->fields, $content->versionInfo->languageCodes); // we don't fallback on the other languages... it would be very bad for SEO to mix the languages if (array_key_exists($this->languages[0], $resolveMultilingue) && $resolveMultilingue[$this->languages[0]] != '') { $meta->setContent($resolveMultilingue[$this->languages[0]]); return true; } $meta->setContent(""); return false; }