Your IP : 216.73.217.79


Current Path : /var/www/v3.cesa.co.za/src/ContentBundle/Admin/
Upload File :
Current File : /var/www/v3.cesa.co.za/src/ContentBundle/Admin/FormItemListAdmin.php

<?php

namespace App\ContentBundle\Admin;

use Knp\Menu\ItemInterface as MenuItemInterface;
use Sonata\AdminBundle\Admin\AbstractAdmin;
use Sonata\AdminBundle\Admin\AdminInterface;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Show\ShowMapper;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Datagrid\ProxyQueryInterface;
use Sonata\AdminBundle\Validator\ErrorElement;
use Sonata\AdminBundle\Form\FormMapper;
use Sonata\AdminBundle\Route\RouteCollectionInterface;
use Symfony\Component\Security\Core\Authentication\Token\Storage\UsageTrackingTokenStorage;
use Knp\Menu\ItemInterface;
use App\ContentBundle\Entity\Form;
use App\ContentBundle\Entity\FormItem;

/**
 * Form Item List Admin
 *
 * @author Otto Saayman <otto@igotafrica.com>
 * @package ContentBundle
 * @subpackage Admin
 * @version 0.0.1
 */
class FormItemListAdmin extends AbstractAdmin {

    /**
     * Security Context
     * @var \Symfony\Component\Security\Core\SecurityContextInterface
     */
    protected $securityContext;

    /**
     * Entity manager
     * @var \Doctrine\ORM\EntityManager
     */
    protected $em;

    /**
     * Container
     * @var $container
     */
    protected $container;
    protected $formObject;
    protected $formItemObject;
    protected function generateBaseRouteName(bool $isChildAdmin = false): string
    {
        return 'form_item_list';
    }

    protected function generateBaseRoutePattern(bool $isChildAdmin = false): string
    {
        return 'form_item_list';
    }

    public function setSecurityContext(UsageTrackingTokenStorage $securityContext) {
        $this->securityContext = $securityContext;
    }

    /**
     * @param \Doctrine\ORM\EntityManager $em
     */
    public function setEntityManager($em) {
        $this->em = $em;
    }

    /**
     * @return null
     */
    public function setContainer($container) {
        $this->container = $container;
    }

    public function getFormObject() {

        if (is_object($this->formObject)) {
            return $this->formObject;
        }

        $formRepository = $this->em->getRepository(Form::class);

        if (strlen($this->getRequest()->get('form_id')) > 0) {
            $this->formObject = $formRepository->find($this->getRequest()->get('form_id'));
        }

        if (!is_object($this->formObject)) {
            $this->formObject = new Form();
        }

        return $this->formObject;
    }

    public function getFormItemObject() {

        if (is_object($this->formItemObject)) {
            return $this->formItemObject;
        }

        $formRepository = $this->em->getRepository(FormItem::class);

        if (strlen($this->getRequest()->get('form_item_id')) > 0) {
            $this->formItemObject = $formRepository->find($this->getRequest()->get('form_item_id'));
        }

        if (!is_object($this->formItemObject)) {
            $this->formItemObject = new FormItem();
        }

        return $this->formItemObject;
    }

    public function configureQuery(ProxyQueryInterface $query): ProxyQueryInterface {

        $this->getFormObject();

        $query = $this->getModelManager()->createQuery($this->getClass(), 'fil');
        $query->join('fil.form_item', 'fi');
        $query->where('fi.id=:formItemId')->setParameter("formItemId", $this->getFormItemObject()->getId());

        $query->orderBy('fil.order_by');

        return $query;
    }

    protected function configureFormFields(FormMapper $formMapper): void {
        $formMapper
                ->add('list_item')
                ->add('order_by')
        ;
    }

    protected function configureDatagridFilters(DatagridMapper $datagridMapper): void {
        $datagridMapper
                ->add('list_item')
        ;
    }

    protected function configureListFields(ListMapper $listMapper): void {
        $listMapper
                ->addIdentifier('list_item')
                ->add('order_by')
                ->add('_action', 'actions', array(
                    'actions' => array(
                        'show' => array(),
                        'edit' => array(),
                        'delete' => array(),
                    )
                ))
        ;
    }

    protected function configureShowFields(ShowMapper $showMapper): void {
        $showMapper
                ->add('list_item')
                ->add('order_by')
        ;
    }

    /**
     * @param App\ContentBundle\Entity\FormItemList $formItemList
     */
    public function preUpdate($formItemList): void {
        $this->preUpdatePersist($formItemList);
    }

    /**
     * @param App\ContentBundle\Entity\Categories $formItemList
     */
    public function prePersist($formItemList): void {
        $this->preUpdatePersist($formItemList);
    }

    /**
     * @param App\ContentBundle\Entity\Categories $formItemList
     */
    public function preUpdatePersist($formItemList) {
        $formItemList->setFormItem($this->getFormItemObject());
    }

    public function configurePersistentParameters(): array {
        if (!$this->getRequest()) {
            return array();
        }

        return array(
            'form_id' => $this->getRequest()->get('form_id', ''),
            'form_item_id' => $this->getRequest()->get('form_item_id', ''),
        );
    }

    protected function configureRoutes(RouteCollectionInterface $collection): void {
        $collection->add('edit_form', 'edit_form', array('_controller' => 'App\ContentBundle\Controller\FormAdminController::editAction', '_sonata_admin' => 'content.admin.form'));
        $collection->add('edit_form_item', 'edit_form_item', array('_controller' => 'App\ContentBundle\Controller\FormItemAdminController::editAction', '_sonata_admin' => 'content.admin.form_item'));
    }

    protected function configureTabMenu(ItemInterface $menu, string $action, ?AdminInterface $childAdmin = null): void {

        $admin = $this->isChild() ? $this->getParent() : $this;

        $form = $this->getFormObject();
        $formItem = $this->getFormItemObject();

        if (is_object($form)) {

            $menu->addChild(
                    'Back to Form', array('uri' => $admin->generateUrl('edit_form', array('id' => $form->getId())))
            );

            $menu->addChild(
                    'Back to Form Item', array('uri' => $admin->generateUrl('edit_form_item', array('form_id' => $form->getId(), 'id' => $formItem->getId())))
            );
        }
    }
}