/** * @param Document $doc * @return \stdClass */ private function getNodeData(Document $doc) { $node = new \stdClass(); $node->{'jcr:primaryType'} = 'prismic:' . $doc->getType(); $node->{':jcr:primaryType'} = PropertyType::STRING; $node->{'jcr:mixinTypes'} = array('mix:referenceable'); $node->{':jcr:mixinTypes'} = PropertyType::STRING; $node->{'jcr:uuid'} = $doc->getId(); $node->{':jcr:uuid'} = PropertyType::NAME; $node->slug = $doc->getSlug(); $node->{':slug'} = PropertyType::STRING; $node->slugs = (array) $doc->getSlugs(); $node->{':slugs'} = PropertyType::STRING; $node->tags = (array) $doc->getTags(); $node->{':tags'} = PropertyType::STRING; foreach ($doc->getFragments() as $name => $fragment) { // TODO model StructuredText/ImageView/Embed/Group etc. as children switch (get_class($fragment)) { case 'Prismic\\Fragment\\Date': $node->{$name} = $fragment->asText(); $node->{":{$name}"} = PropertyType::DATE; break; case 'Prismic\\Fragment\\Number': $node->{$name} = $fragment->asText(); $node->{":{$name}"} = PropertyType::LONG; break; case 'Prismic\\Fragment\\Image': $node->{$name} = $fragment->asText(); $node->{":{$name}"} = PropertyType::BINARY; break; case 'Prismic\\Fragment\\ImageView': $node->{":{$name}"} = PropertyType::URI; $node->{$name} = $fragment->getUrl(); break; default: $node->{$name} = $fragment->asText(); $node->{":{$name}"} = PropertyType::STRING; } } return $node; }
/** * @param Document $doc * * @return string */ public function resolveLink(Document $doc) { $link = new DocumentLink($doc->getId(), $doc->getType(), $doc->getTags(), $doc->getSlug(), false); return $this->getLinkResolver()->resolve($link); }
/** * This method convert a document into document link * * @param Document $document The document * * @return DocumentLink The document link */ private function asLink($document) { return new DocumentLink($document->getId(), $document->getUid(), $document->getType(), $document->getTags(), $document->getSlug(), $document->getFragments(), false); }
/** * Given a Prismic document, return an array suitable for generating a sitemap entry or null * @param Document $document * @return array|null */ protected function documentToArray(Document $document) { $type = $document->getType(); $data = array(); /** * If we can't work out the href from the link resolver, we're screwed */ $link = $this->linkGenerator->generate($document); $url = null; try { $url = $this->linkResolver->resolve($link); } catch (RoutingException $e) { // Likely, this URL needs additional parameters to be assembled } if (!$url) { return null; } $data['uri'] = $url; foreach ($this->propertyMap as $property => $fragment) { if (empty($fragment)) { continue; } $fragment = sprintf('%s.%s', $type, $fragment); $frag = $document->get($fragment); if ($frag) { $data[$property] = $frag->asText(); } } return $data; }
/** * Return a new link instance to the given Document * @param Document $doc * @return DocumentLink */ public function getDocumentLink(Document $doc) { return new DocumentLink($doc->getId(), $doc->getUid(), $doc->getType(), $doc->getTags(), $doc->getSlug(), array(), false); }