Your IP : 216.73.217.79


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

<?php

namespace App\ContactBundle\Admin;

use Sonata\AdminBundle\Admin\AbstractAdmin;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Datagrid\DatagridInterface;
use Sonata\AdminBundle\Form\FormMapper;
use Sonata\DoctrineORMAdminBundle\Filter\ChoiceFilter;
use Symfony\Component\Security\Core\Authentication\Token\Storage\UsageTrackingTokenStorage;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use App\ContactBundle\Entity\MessageCredit;
use App\UserBundle\Form\DataTransformer\UserListToStringTransformer;
use App\UserBundle\Form\Type\UserSelectType;

/**
 * Message Credit Admin
 *
 * @author Otto Saayman <otto@igotafrica.com>
 * @package ContactBundle
 * @subpackage Admin
 * @version 0.0.1
 */
class MessageCreditAdmin 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 function generateBaseRouteName(bool $isChildAdmin = false): string
    {
        return 'message_credit';
    }

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

    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;
    }

    protected function configureDefaultSortValues(array &$sortValues): void {
        // display the first page (default = 1)
        $sortValues[DatagridInterface::PAGE] = 1;

        // reverse order (default = 'ASC')
        $sortValues[DatagridInterface::SORT_ORDER] = 'DESC';

        // name of the ordered field (default = the model's id field, if any)
        $sortValues[DatagridInterface::SORT_BY] = 'created_at';
    }

    protected function configureFormFields(FormMapper $formMapper): void {

        $userTransFormer = new UserListToStringTransformer();
        $userTransFormer->setContainer($this->container);

        $messageCredit = $this->getObject($this->getRequest()->get($this->getIdParameter()));

        if (!is_object($messageCredit)) {
            $messageCredit = new MessageCredit();
        }

        $formMapper
                ->add('credit_number', null, array('label' => 'Number of Credits'))
                ->add('description', null, array('label' => 'Description', 'required' => true))
                ->add('credit_used', null, array('label' => 'Credits Used'))
                ->add('credit_remaining', null, array('label' => 'Credits Remaining'))
                ->add('owner', UserSelectType::class, array('required' => false, 'label' => ' ', 'user_list' => $messageCredit->getOwner()))
                ->add('message_type', null, array('label' => 'Message Type'))
        ;

        $formMapper->get('owner')->addModelTransformer($userTransFormer);
    }

    protected function configureDatagridFilters(DatagridMapper $datagridMapper): void {

        $users = $this->container->get('user_list.manager')->getSelectArray();

        $datagridMapper
                ->add('owner', ChoiceFilter::class, array('label' => 'Owner', 'field_type' => ChoiceType::class, 'field_options' => array('choices' => $users)))
                ->add('description', null, array('label' => 'Description'))
                ->add('message_type')
        ;
    }

    protected function configureListFields(ListMapper $listMapper): void {

        $listMapper
                ->addIdentifier('owner', null, array('label' => 'Owner'))
                ->add('message_type', null, array('label' => 'Type'))
                ->add('credit_number', null, array('label' => 'Number'))
                ->add('description', null, array('label' => 'Description'))
                ->add('credit_used', null, array('label' => 'Used'))
                ->add('credit_remaining', null, array('label' => 'Remaining'))
                ->add('updated_at')
                ->add('created_at')
                ->add('_action', 'actions', array(
                    'actions' => array(
                        'show' => array(),
                        'edit' => array(),
                        'delete' => array(),
                    )
                ))
        ;
    }

    /**
     * @param App\ContactBundle\Entity\MessageCredit $messageCredit
     */
    public function preUpdate($messageCredit): void {
        $this->preUpdatePersist($messageCredit);
    }

    /**
     * @param App\ContactBundle\Entity\MessageCredit $messageCredit
     */
    public function prePersist($messageCredit): void {
        $this->preUpdatePersist($messageCredit);
    }

    /**
     * @param App\ContactBundle\Entity\MessageCredit $messageCredit
     */
    public function preUpdatePersist($messageCredit) {

        $values = $this->getRequest()->get($this->getUniqid());

        if (is_array($values) && isset($values['owner']) && $values['owner']['owner']) {
            $userList = $this->container->get('user_list.manager')->find($values['owner']['owner']);

            if (is_object($userList)) {
                $messageCredit->setOwner($userList);
            }
        }

        if (is_null($messageCredit->getCreatedBy()) || strlen($messageCredit->getCreatedBy()) <= 0) {
            $messageCredit->setCreatedBy($this->securityContext->getToken()->getUser()->getId());
        }
    }
}