Your IP : 216.73.217.79


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

<?php

namespace App\UserBundle\Admin;

use Knp\Menu\ItemInterface;
use Sonata\AdminBundle\Admin\AbstractAdmin;
use Sonata\AdminBundle\Admin\AdminInterface;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Datagrid\ProxyQueryInterface;
use Sonata\AdminBundle\Form\FormMapper;
use Sonata\AdminBundle\Route\RouteCollectionInterface;
use Symfony\Component\Security\Core\Authentication\Token\Storage\UsageTrackingTokenStorage;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\FileType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Doctrine\ORM\EntityRepository;
use App\CompanyBundle\Entity\Companies;
use App\CompanyBundle\Form\Type\CompaniesSelectType;
use App\CompanyBundle\Form\Type\CompaniesSelectMultiType;
use App\ContentBundle\Entity\Files;
use App\CoreBundle\Form\Type\DisplayType;
use App\UserBundle\Entity\UserList;

/**
 * User List Admin
 *
 * @author Otto Saayman <otto@igotafrica.com>
 * @package UserBundle
 * @subpackage Admin
 * @version 0.0.1
 */
class UserListAdmin extends AbstractAdmin {

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

    protected function generateBaseRoutePattern(bool $isChildAdmin = false): string
    {
        return 'users';
    }
    private $userManager = null;
    private $userTypesManager = null;
    // setup the default sort column and order
    protected $datagridValues = array(
        '_sort_order' => 'DESC',
        '_sort_by' => 'created_at',
        '_per_page' => 64,
    );
    protected $classnameLabel = 'Users';

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

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

    /**
     * Container
     * @var $container
     */
    protected $container;
    protected $companyObject;
    protected $userObject;
    protected $sellerAccessLevelId;

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

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

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

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

    /**
     * @return object
     */
    public function getContainer() {
        return $this->container;
    }

    public function activesubclasscode() {

    }

    public function getUserListObject() {

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

        if (strlen($this->getRequest()->get('id')) > 0) {

            $this->userObject = $this->em->getRepository(UserList::class)->find($this->getRequest()->get('id'));
        } else {
            $this->userObject = new UserList();
        }

        return $this->userObject;
    }

    protected function configureFormFields(FormMapper $formMapper): void {

        $user = $this->getObject($this->getRequest()->get('id'));

        if (!is_object($user)) {
            $user = new UserList();
        }

        $formMapper
                ->with('Basic Details')
                ->add('first_name_string', null, array('label' => 'Name'))
                ->add('last_name_string', null, array('label' => 'Surname'))
                ->add('username', TextType::class)
                ->add('plainPassword', PasswordType::class, array('required' => false))
                ->add('is_active', null, array('required' => false))
                ->add('is_super_admin', null, array('required' => false))
                ->add('user_level', null, array('required' => false, 'label' => 'Access Levels'))
                ->end()
        ;
    }

    protected function configureDatagridFilters(DatagridMapper $datagridMapper): void {

        $datagridMapper
                ->add('first_name_string', null, array('label' => 'First Name'))
                ->add('last_name_string', null, array('label' => 'Last Name'))
                ->add('username', null, array('label' => 'Username'))
                ->add('user_level', null, array('label' => 'Access Levels'))
        ;
    }

    protected function configureListFields(ListMapper $listMapper): void {

        $listMapper
                ->addIdentifier('first_name_string', null, array('label' => 'First Name'))
                ->add('last_name_string', null, array('label' => 'Last Name'))
                ->add('username', null, array('label' => 'Username'))
                ->add('is_active', null, array('label' => 'Active'))
                ->add('deleted', null, array('label' => 'Deleted'))
                ->add('user_level', null, array('label' => 'Access Levels'))
                ->add('created_at', null, array('label' => 'Date Created'))
                ->add('updated_at', null, array('label' => 'Date Updated'))
                ->add('_action', 'actions', array(
                    'actions' => array(
                        'show' => array(),
                        'edit' => array(),
                        'delete' => array(),
                    )
                ))
        ;
    }

    public function configureBatchActions(array $actions): array {
        // retrieve the default (currently only the delete action) actions
//        $actions = parent::getBatchActions();
        // check user permissions
        if ($this->hasRoute('edit') && $this->isGranted('EDIT') && $this->hasRoute('delete') && $this->isGranted('DELETE')) {
            $actions['disable'] = array(
                'label' => 'Disable',
                'ask_confirmation' => true
            );
            $actions['enable'] = array(
                'label' => 'Enable',
                'ask_confirmation' => true
            );
        }

        return $actions;
    }

    /**
     * @param IGA\UserBundle\Entity\UserList $user
     */
    public function preUpdate($user): void {
        $this->preUpdatePersist($user);
    }

    /**
     * @param IGA\UserBundle\Entity\UserList $user
     */
    public function prePersist($user): void {
        $this->preUpdatePersist($user);

        if (is_object($this->securityContext->getToken()) && is_object($this->securityContext->getToken()->getUser())) {
            $user->setCreatedBy($this->securityContext->getToken()->getUser());
        }
    }

    public function preUpdatePersist($user) {

        $this->container->get('user_list.manager')->checkRequestValues($user);

        $this->container->get('user_list.manager')->updatePassword($user);

        return $user;
    }

    public function setUserManager(UserListManager $userManager) {
        $this->userManager = $userManager;
    }

    /**
     * @return UserManagerInterface
     */
    public function getUserManager() {
        return $this->userManager;
    }
}