Skip to content

Commit

Permalink
Added get_option helper in twig when available
Browse files Browse the repository at this point in the history
  • Loading branch information
Xavier Coureau committed Jun 28, 2014
1 parent 2d93923 commit 1b4b8bf
Show file tree
Hide file tree
Showing 5 changed files with 157 additions and 2 deletions.
14 changes: 14 additions & 0 deletions DependencyInjection/EkinoWordpressExtension.php
Expand Up @@ -51,6 +51,8 @@ public function load(array $configs, ContainerBuilder $container)
if (isset($config['entity_manager'])) {
$this->loadEntityManager($container, $config['entity_manager']);
}

$this->loadTwigExtensions($loader);
}

/**
Expand Down Expand Up @@ -102,6 +104,18 @@ protected function loadEntityManager(ContainerBuilder $container, $em)
$container->getDefinition('ekino.wordpress.manager.user_meta')->replaceArgument(0, $reference);
}

/**
* Will load twig extensions if enabled
*
* @param XmlFileLoader $loader
*/
protected function loadTwigExtensions(XmlFileLoader $loader)
{
if (class_exists('\Twig_Extension')) {
$loader->load('twig.xml');
}
}

/**
* Returns bundle alias name
*
Expand Down
2 changes: 0 additions & 2 deletions Manager/OptionManager.php
Expand Up @@ -10,8 +10,6 @@

namespace Ekino\WordpressBundle\Manager;

use Ekino\WordpressBundle\Manager\BaseManager;

/**
* Class OptionManager
*
Expand Down
19 changes: 19 additions & 0 deletions Resources/config/twig.xml
@@ -0,0 +1,19 @@
<?xml version="1.0" ?>

<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">

<parameters>
<parameter key="ekino.wordpress.twig.extension.option.class">Ekino\WordpressBundle\Twig\Extension\OptionExtension</parameter>
</parameters>

<services>
<service id="ekino.wordpress.twig.extension.option" class="%ekino.wordpress.twig.extension.option.class%">
<tag name="twig.extension" />

<argument type="service" id="ekino.wordpress.manager.option" />
</service>

</services>
</container>
72 changes: 72 additions & 0 deletions Tests/Twig/Extension/OptionExtensionTest.php
@@ -0,0 +1,72 @@
<?php

/*
* This file is part of the Ekino Wordpress package.
*
* (c) 2013 Ekino
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

namespace Ekino\WordpressBundle\Tests\Twig\Extension;

use Ekino\WordpressBundle\Twig\Extension\OptionExtension;

/**
* Class OptionExtensionTest
*
* @author Xavier Coureau <xav.is@2cool4school.fr>
*/
class OptionExtensionTest extends \PHPUnit_Framework_TestCase
{
/**
* @var \PHPUnit_Framework_MockObject_MockObject
*/
protected $optionManager;

/**
* @var OptionExtension
*/
protected $extension;

protected function setUp()
{
if (!class_exists('\Twig_Extension')) {
$this->markTestSkipped('Twig is not enabled');
}

$this->optionManager = $this->getMockBuilder('Ekino\WordpressBundle\Manager\OptionManager')->disableOriginalConstructor()->getMock();
$this->extension = new OptionExtension($this->optionManager);
}

/**
* Check the correct result for an existing option
*/
public function testGetOption()
{
$optionMock = $this->getMock('Ekino\WordpressBundle\Entity\Option');

$this->optionManager->expects($this->once())
->method('findOneByOptionName')
->with($this->equalTo('test'))
->will($this->returnValue($optionMock));

$result = $this->extension->getOption('test');
$this->assertEquals($optionMock, $result);
}

/**
* Check the usage of default return value for a non existing option
*/
public function testGetOptionUndefined()
{
$this->optionManager->expects($this->once())
->method('findOneByOptionName')
->with($this->equalTo('test'))
->will($this->returnValue(null));

$result = $this->extension->getOption('test', 'poney');
$this->assertEquals('poney', $result);
}
}
52 changes: 52 additions & 0 deletions Twig/Extension/OptionExtension.php
@@ -0,0 +1,52 @@
<?php

namespace Ekino\WordpressBundle\Twig\Extension;

use Ekino\WordpressBundle\Manager\OptionManager;

class OptionExtension extends \Twig_Extension
{
/**
* @var OptionManager
*/
protected $optionManager;

/**
* @return string
*/
public function getName()
{
return 'ekino_wordpress_option';
}

/**
* @param OptionManager $optionManager
*/
public function __contruct(OptionManager $optionManager)
{
$this->optionManager = $optionManager;
}

/**
* @return array
*/
public function getFunctions()
{
return array(
new \Twig_SimpleFunction('get_option', array($this, 'getOption')),
);
}

/**
* @param string $optionName
* @param mixed $defaultValue
*
* @return mixed
*/
public function getOption($optionName, $defaultValue = null)
{
$option = $this->optionManager->findOneByOptionName($optionName);

return $option ?: $defaultValue;
}
}

0 comments on commit 1b4b8bf

Please sign in to comment.