ctrl-f5/ctrl-rad-bundle

View on GitHub
Controller/UserController.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

namespace Ctrl\RadBundle\Controller;

use Ctrl\RadBundle\Crud\Action\DeleteAction;
use Ctrl\RadBundle\Crud\Action\EditAction;
use Ctrl\RadBundle\Crud\Action\IndexAction;
use Ctrl\RadBundle\EntityService\UserService;
use Ctrl\RadBundle\TableView\TableBuilder;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Ctrl\Common\EntityService\ServiceProviderInterface;
use Ctrl\Common\EntityService\ServiceInterface;
use Ctrl\Common\Traits\SymfonyPaginationRequestReader;
use Ctrl\RadBundle\Crud\ConfigBuilder;
use Ctrl\RadBundle\Crud\Crud;
use Ctrl\RadBundle\Form\UserEditType;

/**
 * @package Ctrl\RadBundle\Controller
 * @Route("/admin/user")
 */
class UserController extends Controller implements ServiceProviderInterface
{
    use SymfonyPaginationRequestReader;
    use Crud;

    /**
     * @return ServiceInterface|UserService
     */
    public function getEntityService()
    {
        return $this->get('ctrl_rad.entity.user');
    }

    public function configureCrudBuilder(ConfigBuilder $builder)
    {
        $builder
            ->setEntityService($this->getEntityService())
            ->setEntityLabel('User')
            ->setRoutePrefix('ctrl_rad_')
            ->setRoute('create', 'ctrl_rad_user_edit')
            ->setRoute('delete', 'ctrl_rad_user_delete')
        ;
        return $builder;
    }

    /**
     * @Route("", name="ctrl_rad_user_index")
     * @param Request $request
     * @return Response
     */
    public function indexAction(Request $request)
    {
        $builder = $this->getCrudConfigBuilder(IndexAction::class);

        $table = new TableBuilder();
        $table
            ->columns([
                'id'        => '#',
                'username'  => 'Username',
                'email'     => 'Email',
                'enabled'   => 'Enabled',
                'locked'    => 'Locked',
            ])
            ->addActionColumn([
                $table->createEditAction([
                    'route' => 'ctrl_rad_user_edit',
                ])
            ]);

        $builder
            ->setFilterForm($this->createFormBuilder(null, array('csrf_protection' => false))
                ->add('username')
                ->add('email')
                ->add('enabled', CheckboxType::class)
                ->add('locked', CheckboxType::class)
                ->getForm()
            )
            ->setTable($table);

        return $this->buildCrud($builder)->execute($request);
    }

    /**
     * @Route("/edit/{id}", name="ctrl_rad_user_edit")
     * @param Request $request
     * @param int|null $id
     * @return Response
     */
    public function editAction(Request $request, $id = null)
    {
        $builder = $this->getCrudConfigBuilder(EditAction::class);

        $builder
            ->setEntityId($id)
            ->setForm($this->createForm(UserEditType::class, $builder->getEntity(), [
                'role_choices' => array_merge([
                    'ROLE_USER'             => 'USER',
                    'ROLE_ADMIN'            => 'ADMIN',
                    'ROLE_SUPER_ADMIN'      => 'SUPER_ADMIN',
                ], $this->get('doctrine')->getRepository('CtrlRadBundle:User')->getKnownRoles(true))
            ]))
        ;

        return $this->buildCrud($builder)->execute($request);
    }

    /**
     * @Route("/delete/{id}", name="ctrl_rad_user_delete")
     * @param Request $request
     * @param int|null $id
     * @return Response
     */
    public function deleteAction(Request $request, $id = null)
    {
        $builder = $this->getCrudConfigBuilder(DeleteAction::class);

        $builder
            ->setEntityId($id)
        ;

        return $this->buildCrud($builder)->execute($request);
    }
}