Skip to content

Commit

Permalink
Merge pull request #171 from kokspflanze/formatter-generate-link
Browse files Browse the repository at this point in the history
added new formatter to generate links from value
  • Loading branch information
ThaDafinser committed Apr 16, 2015
2 parents 5a7c2cb + 219ab58 commit 9c5169f
Show file tree
Hide file tree
Showing 4 changed files with 207 additions and 1 deletion.
2 changes: 2 additions & 0 deletions autoload_classmap.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
'ZfcDatagrid\Column\Formatter\FileSize' => __DIR__ . '/src/ZfcDatagrid/Column/Formatter/FileSize.php',
'ZfcDatagrid\Column\Formatter\Image' => __DIR__ . '/src/ZfcDatagrid/Column/Formatter/Image.php',
'ZfcDatagrid\Column\Formatter\Link' => __DIR__ . '/src/ZfcDatagrid/Column/Formatter/Link.php',
'ZfcDatagrid\Column\Formatter\GenerateLink' => __DIR__ . '/src/ZfcDatagrid/Column/Formatter/GenerateLink.php',
'ZfcDatagrid\Column\Select' => __DIR__ . '/src/ZfcDatagrid/Column/Select.php',
'ZfcDatagrid\Column\Style\AbstractColor' => __DIR__ . '/src/ZfcDatagrid/Column/Style/AbstractColor.php',
'ZfcDatagrid\Column\Style\AbstractStyle' => __DIR__ . '/src/ZfcDatagrid/Column/Style/AbstractStyle.php',
Expand Down Expand Up @@ -77,6 +78,7 @@
'ZfcDatagridTest\Column\Formatter\FileSizeTest' => __DIR__ . '/tests/ZfcDatagridTest/Column/Formatter/FileSizeTest.php',
'ZfcDatagridTest\Column\Formatter\ImageTest' => __DIR__ . '/tests/ZfcDatagridTest/Column/Formatter/ImageTest.php',
'ZfcDatagridTest\Column\Formatter\LinkTest' => __DIR__ . '/tests/ZfcDatagridTest/Column/Formatter/LinkTest.php',
'ZfcDatagridTest\Column\Formatter\GenerateLinkTest' => __DIR__ . '/tests/ZfcDatagridTest/Column/Formatter/GenerateLinkTest.php',
'ZfcDatagridTest\Column\SelectTest' => __DIR__ . '/tests/ZfcDatagridTest/Column/SelectTest.php',
'ZfcDatagridTest\Column\StandardTest' => __DIR__ . '/tests/ZfcDatagridTest/Column/StandardTest.php',
'ZfcDatagridTest\Column\Style\AbstractStyleTest' => __DIR__ . '/tests/ZfcDatagridTest/Column/Style/AbstractStyleTest.php',
Expand Down
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
},

"require-dev": {
"phpunit/PHPUnit": "~3.7",
"phpunit/PHPUnit": "~4.0",
"satooshi/php-coveralls": "dev-master",
"fabpot/php-cs-fixer": "*@dev",

Expand Down
154 changes: 154 additions & 0 deletions src/ZfcDatagrid/Column/Formatter/GenerateLink.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,154 @@
<?php


namespace ZfcDatagrid\Column\Formatter;


use Zend\ServiceManager\ServiceManager;
use Zend\ServiceManager\ServiceManagerAwareInterface;
use ZfcDatagrid\Column\AbstractColumn;

class GenerateLink extends AbstractFormatter implements ServiceManagerAwareInterface
{
protected $validRenderers = [
'jqGrid',
'bootstrapTable',
];

/** @var string */
protected $route;
/** @var array */
protected $routeParams;
/** @var string|null */
protected $routeKey;
/** @var ServiceManager */
protected $serviceManager;
/** @var \Zend\View\Renderer\PhpRenderer */
protected $viewRenderer;

/**
* @param ServiceManager $sm
* @param $route
* @param null $key
* @param array $params
*/
public function __construct( ServiceManager $sm, $route, $key = null, $params = array() )
{
$this->setServiceManager($sm);
$this->setRoute($route);
$this->setRouteParams($params);
$this->setRouteKey($key);
}

/**
* @param AbstractColumn $columnUniqueId
* @return string
*/
public function getFormattedValue( AbstractColumn $column )
{
$row = $this->getRowData();
$value = $row[$column->getUniqueId()];

$routeKey = !is_null($this->getRouteKey())?
$this->getRouteKey()
:
$column->getUniqueId();

$params = $this->getRouteParams();
$params[$routeKey] = $value;

$url = (string) $this->getViewRenderer()->url($this->getRoute(), $params);

return sprintf('<a href="%s">%s</a>', $url, $value);
}

/**
* Set service manager
* @param ServiceManager $serviceManager
*/
public function setServiceManager( ServiceManager $serviceManager )
{
$this->serviceManager = $serviceManager;

return $this;
}

/**
* @return ServiceManager
*/
public function getServiceManager()
{
return $this->serviceManager;
}

/**
* @return \Zend\View\Renderer\PhpRenderer
*/
public function getViewRenderer()
{
if (! $this->viewRenderer) {
$this->viewRenderer = $this->getServiceManager()->get('ViewRenderer');
}

return $this->viewRenderer;
}

/**
* @return string
*/
public function getRoute()
{
return $this->route;
}

/**
* @param string $route
* @return GenerateLink
*/
public function setRoute( $route )
{
$this->route = $route;

return $this;
}

/**
* @return array
*/
public function getRouteParams()
{
return $this->routeParams;
}

/**
* @param array $routeParams
* @return GenerateLink
*/
public function setRouteParams( $routeParams )
{
$this->routeParams = $routeParams;

return $this;
}

/**
* @return null|string
*/
public function getRouteKey()
{
return $this->routeKey;
}

/**
* @param null|string $routeKey
* @return GenerateLink
*/
public function setRouteKey( $routeKey )
{
$this->routeKey = $routeKey;

return $this;
}


}
50 changes: 50 additions & 0 deletions tests/ZfcDatagridTest/Column/Formatter/GenerateLinkTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
<?php


namespace ZfcDatagridTest\Column\Formatter;


use Zend\ServiceManager\ServiceManager;
use ZfcDatagrid\Column\Formatter\GenerateLink;

/**
* @group Column
* @covers ZfcDatagrid\Column\Formatter\GenerateLink
*/
class GenerateLinkTest extends \PHPUnit_Framework_TestCase
{
public function testConstructor()
{
$generateLink = new GenerateLink(new ServiceManager(), 'route');

$this->assertInstanceOf('Zend\ServiceManager\ServiceManager', $generateLink->getServiceManager());
$this->assertEquals('route', $generateLink->getRoute());
$this->assertEmpty($generateLink->getRouteKey());
$this->assertEmpty($generateLink->getRouteParams());
}

public function testGetFormattedValue()
{
$col = $this->getMockForAbstractClass('ZfcDatagrid\Column\AbstractColumn');
$col->setUniqueId('foo');

$phpRenderer = $this->getMockBuilder('Zend\View\Renderer\PhpRenderer')
->disableOriginalConstructor()
->getMock();

$phpRenderer->expects($this->any())
->method('url')
->will($this->returnValue(''));

$serviceManager = new ServiceManager();
$serviceManager->setService('ViewRenderer', $phpRenderer);

$generateLink = new GenerateLink($serviceManager, 'route');
$generateLink->setRowData([
'foo' => 'bar',
]);

$this->assertEquals('<a href="">bar</a>', $generateLink->getFormattedValue($col));
}

}

0 comments on commit 9c5169f

Please sign in to comment.