Skip to content
This repository was archived by the owner on May 20, 2024. It is now read-only.
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 2 additions & 5 deletions Controller/DefaultController.php
Original file line number Diff line number Diff line change
Expand Up @@ -101,13 +101,10 @@ public function searchAction(Request $request)
*/
public function previewAction(Request $request)
{
$token = $request->query->get('token');
/** @var PrismicContext $ctx */
$ctx = $this->get('prismic.context');
$url = $ctx->getApi()->previewSession($token, $ctx->getLinkResolver(), '/');
$response = new RedirectResponse($url);
$response->headers->setCookie(new Cookie(Prismic\PREVIEW_COOKIE, $token, time() + 1800, '/', null, false, false));
return $response;

return $ctx->previewSession($request->query->get('token'), '/');
}

}
1 change: 1 addition & 0 deletions DependencyInjection/Configuration.php
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ public function getConfigTreeBuilder()
->end()
->end()
->scalarNode('cache')->defaultTrue()->end()
->scalarNode('link_resolver_route')->defaultValue('detail')->end()
->end()
;

Expand Down
4 changes: 3 additions & 1 deletion DependencyInjection/PrismicExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,11 @@ public function load(array $configs, ContainerBuilder $container)
$container->setParameter($this->getAlias() . '.oauth.redirect_route', $config['oauth']['redirect_route']);
$container->setParameter($this->getAlias() . '.oauth.redirect_route_params', $config['oauth']['redirect_route_params']);

$container->setParameter($this->getAlias() . '.link_resolver_route', $config['link_resolver_route']);

$loader = new Loader\XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('services.xml');

$container->setAlias('prismic.cache', 'prismic.cache.' . ($config['cache'] ? 'default' : 'no'));
$container->setAlias($this->getAlias() . '.cache', $this->getAlias() . '.cache.' . ($config['cache'] ? 'default' : 'no'));
}
}
25 changes: 14 additions & 11 deletions Helper/LocalLinkResolver.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,8 @@

namespace Prismic\Bundle\PrismicBundle\Helper;

use Symfony\Component\Routing\Generator\UrlGeneratorInterface;

use Prismic\Api;
use Prismic\Ref;
use Prismic\LinkResolver;
use Prismic\Fragment\Link\DocumentLink;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;

/**
* Class LocalLinkResolver
Expand All @@ -20,29 +16,36 @@ class LocalLinkResolver extends LinkResolver
* @var UrlGeneratorInterface
*/
private $urlGenerator;

/**
* @var Api
* @var string
*/
private $api;
private $routeName;

/**
* @param UrlGeneratorInterface $urlGenerator
* @param Api $api
*/
public function __construct(UrlGeneratorInterface $urlGenerator, Api $api)
public function __construct(UrlGeneratorInterface $urlGenerator, $routeName)
{
$this->urlGenerator = $urlGenerator;
$this->api = $api;
$this->routeName = $routeName;
}

/**
* @param DocumentLink $link
* @param \Prismic\Fragment\Link\DocumentLink $link
*
* @return string
*/
public function resolve($link)
{
return $this->urlGenerator->generate('detail', array('id' => $link->getId(), 'slug' => $link->getSlug()));
return $this->urlGenerator->generate(
$this->routeName,
[
'id' => $link->getId(),
'slug' => $link->getSlug(),
]
);
}

}
47 changes: 32 additions & 15 deletions Helper/PrismicContext.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@

namespace Prismic\Bundle\PrismicBundle\Helper;

use Symfony\Component\Routing\Generator\UrlGeneratorInterface;

use Prismic\api;
use Prismic\Ref;
use Prismic\Api;
use Prismic\Document;
use Prismic\Fragment\Link\DocumentLink;
use Prismic\LinkResolver;
use Prismic\Ref;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;

/**
* Class PrismicContext
Expand All @@ -28,10 +28,11 @@ class PrismicContext
* @param PrismicHelper $prismic
* @param UrlGeneratorInterface $urlGenerator
*/
public function __construct(PrismicHelper $prismic, UrlGeneratorInterface $urlGenerator)
public function __construct(PrismicHelper $prismic, UrlGeneratorInterface $urlGenerator, LinkResolver $linkResolver)
{
$this->prismic = $prismic;
$this->urlGenerator = $urlGenerator;
$this->linkResolver = $linkResolver;
}

/**
Expand All @@ -48,8 +49,6 @@ public function getHelper()
public function setAccessToken($accessToken)
{
$this->accessToken = $accessToken;

$this->api = $this->linkResolver = null;
}

/**
Expand All @@ -58,8 +57,6 @@ public function setAccessToken($accessToken)
public function setRef($ref)
{
$this->ref = $ref;

$this->linkResolver = null;
}

/**
Expand Down Expand Up @@ -111,14 +108,10 @@ public function getUrlGenerator()
}

/**
* @return LocalLinkResolver
* @return LinkResolver
*/
public function getLinkResolver()
{
if (!$this->linkResolver) {
$this->linkResolver = new LocalLinkResolver($this->urlGenerator, $this->getApi());
}

return $this->linkResolver;
}

Expand All @@ -129,7 +122,15 @@ public function getLinkResolver()
*/
public function resolveLink(Document $doc)
{
$link = new DocumentLink($doc->getId(), $doc->getType(), $doc->getTags(), $doc->getSlug(), false);
$link = new DocumentLink(
$doc->getId(),
$doc->getUid(),
$doc->getType(),
$doc->getTags(),
$doc->getSlug(),
$doc->getFragments(),
false
);

return $this->getLinkResolver()->resolve($link);
}
Expand All @@ -156,4 +157,20 @@ public function getDocument($id)
return null;
}

/**
* Get redirect response for preview session
*
* @param string $token
* @param string $defaultUrl
* @return RedirectResponse
*/
public function previewSession($token, $defaultUrl)
{
$url = $this->getApi()->previewSession($token, $this->getLinkResolver(), '/');
$response = new RedirectResponse($url);
$response->headers->setCookie(new Cookie(Prismic\PREVIEW_COOKIE, $token, time() + 1800, '/', null, false, false));

return $response;
}

}
38 changes: 21 additions & 17 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,23 +18,27 @@ Add the following dependencies to your projects ``composer.json`` file:

## Configuration

Add the following configuration to your projects ``app/config/config.yml`` file:

# Default configuration for extension with alias: "prismic"
prismic:
api:
endpoint: ~ # Required
access_token: ~
client_id: ~
client_secret: ~

You can override the redirect route from the bundle configuration:

# Default configuration for extension with alias: "prismic"
prismic:
oauth:
redirect_route: home # Name of the route
redirect_route_params: [] # An array with additional route params
Full default configuration for bundle:

```yaml
prismic:
api:
endpoint: ~ # Required
access_token: ~
client_id: ~
client_secret: ~
oauth:
redirect_route: home # Name of the route
redirect_route_params: [] # An array with additional route params
cache: true # Default apc built-in cache
link_resolver_route: detail # Name of the route
```

## LinkResolver Customization

You can override `prismic.link_resolver_route` parameter with route name to handle link resolver.
This route can have `$id` or `$slug` parameter to find document.
If you want to implement custom logic for your LinkResolver you can override service `prismic.link_resolver`.

## TODOs

Expand Down
7 changes: 7 additions & 0 deletions Resources/config/services.xml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
<parameter key="prismic.context_listener.class">Prismic\Bundle\PrismicBundle\EventListener\ContextListener</parameter>
<parameter key="prismic.controller.oauth.class">Prismic\Bundle\PrismicBundle\Controller\OAuthController</parameter>
<parameter key="prismic.helper.class">Prismic\Bundle\PrismicBundle\Helper\PrismicHelper</parameter>
<parameter key="prismic.helper.link_resolver.class">Prismic\Bundle\PrismicBundle\Helper\LocalLinkResolver</parameter>
</parameters>

<services>
Expand All @@ -21,6 +22,11 @@

<service id="prismic.client" class="%prismic.client.class%" factory-class="%prismic.api.class%" factory-method="defaultHttpAdapter" />

<service id="prismic.link_resolver" class="%prismic.helper.link_resolver.class%">
<argument type="service" id="router"></argument>
<argument>%prismic.link_resolver_route%</argument>
</service>

<service id="prismic.helper" class="%prismic.helper.class%">
<argument>%prismic.api.endpoint%</argument>
<argument>%prismic.api.accessToken%</argument>
Expand All @@ -33,6 +39,7 @@
<service id="prismic.context" class="%prismic.context.class%">
<argument type="service" id="prismic.helper" />
<argument type="service" id="router" />
<argument type="service" id="prismic.link_resolver" />
</service>

<service id="prismic.context_listener" class="%prismic.context_listener.class%">
Expand Down