123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- <?php
- /*
- * This file is part of the Sonata Project package.
- *
- * (c) Thomas Rabaix <thomas.rabaix@sonata-project.org>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
- namespace Sonata\AdminBundle\Block;
- use Sonata\AdminBundle\Admin\AdminInterface;
- use Sonata\AdminBundle\Admin\Pool;
- use Sonata\AdminBundle\Search\SearchHandler;
- use Sonata\BlockBundle\Block\BlockContextInterface;
- use Sonata\BlockBundle\Block\Service\AbstractBlockService;
- use Symfony\Bundle\FrameworkBundle\Templating\EngineInterface;
- use Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException;
- use Symfony\Component\HttpFoundation\Response;
- use Symfony\Component\OptionsResolver\OptionsResolver;
- /**
- * @author Thomas Rabaix <thomas.rabaix@sonata-project.org>
- */
- class AdminSearchBlockService extends AbstractBlockService
- {
- /**
- * @var Pool
- */
- protected $pool;
- /**
- * @var SearchHandler
- */
- protected $searchHandler;
- /**
- * @param string $name
- * @param EngineInterface $templating
- * @param Pool $pool
- * @param SearchHandler $searchHandler
- */
- public function __construct($name, EngineInterface $templating, Pool $pool, SearchHandler $searchHandler)
- {
- parent::__construct($name, $templating);
- $this->pool = $pool;
- $this->searchHandler = $searchHandler;
- }
- /**
- * {@inheritdoc}
- */
- public function execute(BlockContextInterface $blockContext, Response $response = null)
- {
- try {
- $admin = $this->pool->getAdminByAdminCode($blockContext->getSetting('admin_code'));
- } catch (ServiceNotFoundException $e) {
- throw new \RuntimeException('Unable to find the Admin instance', $e->getCode(), $e);
- }
- if (!$admin instanceof AdminInterface) {
- throw new \RuntimeException('The requested service is not an Admin instance');
- }
- $admin->checkAccess('list');
- $pager = $this->searchHandler->search(
- $admin,
- $blockContext->getSetting('query'),
- $blockContext->getSetting('page'),
- $blockContext->getSetting('per_page')
- );
- return $this->renderPrivateResponse($admin->getTemplate('search_result_block'), array(
- 'block' => $blockContext->getBlock(),
- 'settings' => $blockContext->getSettings(),
- 'admin_pool' => $this->pool,
- 'pager' => $pager,
- 'admin' => $admin,
- ), $response);
- }
- /**
- * {@inheritdoc}
- */
- public function getName()
- {
- return 'Admin Search Result';
- }
- /**
- * {@inheritdoc}
- */
- public function configureSettings(OptionsResolver $resolver)
- {
- $resolver->setDefaults(array(
- 'admin_code' => false,
- 'query' => '',
- 'page' => 0,
- 'per_page' => 10,
- 'icon' => '<i class="fa fa-list"></i>',
- ));
- }
- }
|