Your IP : 216.73.217.79


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

<?php

namespace App\SessionsBundle\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\Validator\ErrorElement;
use Sonata\AdminBundle\Form\FormMapper;
use Sonata\AdminBundle\Route\RouteCollectionInterface;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Security\Core\Authentication\Token\Storage\UsageTrackingTokenStorage;
use App\CoreBundle\Form\DataTransformer\ArrayToJsonTransformer;
use App\SessionsBundle\Entity\Sites;

/**
 * Sites Admin
 *
 * @author Otto Saayman <otto@igotafrica.com>
 * @package SessionsBundle
 * @subpackage Admin
 * @version 0.0.1
 */
class SitesAdmin extends AbstractAdmin {

    /**
     * Security Context
     * @var Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage
     */
    protected $securityContext;

    /**
     * Container
     * @var $container
     */
    protected $container;

    /**
     * Entity manager
     * @var \Doctrine\ORM\EntityManager
     */
    protected $em;
    protected function generateBaseRouteName(bool $isChildAdmin = false): string
    {
        return 'sites';
    }

    protected function generateBaseRoutePattern(bool $isChildAdmin = false): string
    {
        return 'sites';
    }
    protected $datagridValues = array(
        '_sort_order' => 'DESC',
        '_sort_by' => 'updated_at',
    );

    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 configureDatagridFilters(DatagridMapper $datagridMapper): void {
        $datagridMapper
                ->add('site_host_name', null, array('label' => 'Site Host Name'))
                ->add('server_ip', null, array('label' => 'Server IP Address'))
                ->add('site_port', null, array('label' => 'Port'))
                ->add('template_id', null, array('label' => 'Template ID'))
                ->add('build_site_map', null, array('label' => 'Build Site Map'))
        //->add('created_at', null, array('label' => 'Created'))
        //->add('updated_at', null, array('label' => 'Updated'))
        ;
    }

    protected function configureListFields(ListMapper $listMapper): void {
        $listMapper
                ->addIdentifier('site_host_name', null, array('label' => 'Site Host Name'))
                ->add('server_ip', null, array('label' => 'Server IP Address'))
                ->add('site_port', null, array('label' => 'Port'))
                ->add('template_id', null, array('label' => 'Template ID'))
                ->add('session_count', null, array('label' => 'Sessions'))
                ->add('build_site_map', null, array('label' => 'Build Site Map'))
                ->add('created_at', null, array('label' => 'Created'))
                ->add('updated_at', null, array('label' => 'Updated'))
                ->add('_action', 'actions', array(
                    'actions' => array(
                        'show' => array(),
                        'edit' => array(),
                        'delete' => array(),
                    )
                ))
        ;
    }

    protected function configureFormFields(FormMapper $formMapper): void {

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

        $arrayJsonTransformer = new ArrayToJsonTransformer();

        if (is_object($site)) {
            $sitesList = $this->container->get('sites.manager')->getOtherSitesArray($this->getObject($this->getRequest()->get($this->getIdParameter())));
            $categoriesArray = $this->container->get('categories.manager')->getAllCategoriesSelectArray(
                    $this->container->get('system_setting.manager')->getSetting('travel_category_type')
            );
            $businessCategoriesArray = $this->container->get('categories.manager')->getAllCategoriesSelectArray(
                    $this->container->get('system_setting.manager')->getSetting('business_category_type')
            );
            $travelCitiesArray = $this->container->get('cities.manager')->getAllSelectArray(
                    $this->container->get('system_setting.manager')->getSetting('travel_geography_type')
            );
            $businessCitiesArray = $this->container->get('cities.manager')->getAllSelectArray(
                    $this->container->get('system_setting.manager')->getSetting('business_geography_type')
            );
        } else {
            $sitesList = array();
            $categoriesArray = array();
            $businessCategoriesArray = array();
            $travelCitiesArray = array();
            $businessCitiesArray = array();
        }

        $formMapper
                ->add('site_host_name', null, array('label' => 'Site Host Name'))
                ->add('site_name', null, array('label' => 'Site Name'))
                ->add('site_e_mail', null, array('label' => 'Site E-Mail'))
                ->add('server_ip', null, array('label' => 'Server IP Address'))
                ->add('site_port', null, array('label' => 'Port'))
                ->add('template_id', null, array('label' => 'Template ID'))
                ->add('build_site_map', null, array('label' => 'Build Site Map'))
                ->add(
                        'limit_travel_categories', ChoiceType::class, array(
                    'required' => false,
                    'label' => 'Limit Travel Categories',
                    'multiple' => true,
                    'choices' => $categoriesArray,
                        )
                )
                ->add(
                        'limit_travel_cities', ChoiceType::class, array(
                    'required' => false,
                    'label' => 'Limit Travel Cities',
                    'multiple' => true,
                    'choices' => $travelCitiesArray,
                        )
                )
                ->add(
                        'limit_business_categories', ChoiceType::class, array(
                    'required' => false,
                    'label' => 'Limit Business Categories',
                    'multiple' => true,
                    'choices' => $businessCategoriesArray,
                        )
                )
                ->add(
                        'limit_business_cities', ChoiceType::class, array(
                    'required' => false,
                    'label' => 'Limit Business Cities',
                    'multiple' => true,
                    'choices' => $businessCitiesArray,
                        )
                )
                ->add(
                        'move_site_id', ChoiceType::class, array(
                    'label' => 'Delete and move data to',
                    'choices' => $sitesList,
                    'mapped' => false,
                    'required' => false,
                        )
                )
        ;

        $formMapper->get('limit_travel_categories')->addModelTransformer($arrayJsonTransformer);
        $formMapper->get('limit_travel_cities')->addModelTransformer($arrayJsonTransformer);
        $formMapper->get('limit_business_categories')->addModelTransformer($arrayJsonTransformer);
        $formMapper->get('limit_business_cities')->addModelTransformer($arrayJsonTransformer);
    }

    protected function configureShowFields(ShowMapper $showMapper): void {
        $showMapper
                ->add('site_host_name', null, array('label' => 'Site Host Name'))
                ->add('server_ip', null, array('label' => 'Server IP Address'))
                ->add('site_port', null, array('label' => 'Port'))
                ->add('template_id', null, array('label' => 'Template ID'))
                ->add('build_site_map', null, array('label' => 'Build Site Map'))
                ->add('created_at', null, array('label' => 'Created'))
                ->add('updated_at', null, array('label' => 'Updated'))
        ;
    }

    /**
     * @param SessionsBundle\Entity\Sites $site
     */
    public function postUpdate($site): void {
        $this->postUpdatePersist($site);
    }

    /**
     * @param SessionsBundle\Entity\Sites $site
     */
    public function postPersist($site): void {
        $this->postUpdatePersist($site);
    }

    /**
     * @param SessionsBundle\Entity\Sites $site
     */
    public function postUpdatePersist($site) {

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

        if (isset($arrValues['move_site_id']) && strlen($arrValues['move_site_id']) > 0) {
            $this->container->get('sites.manager')->startDeleteMove($site, $arrValues['move_site_id']);
        }

        $this->container->get('batch_job.manager')->save("\$site = \$this->getContainer()->get('sites.manager')->find('" . $site->getId() . "'); "
                . "\$this->getContainer()->get('sites.manager')->recalculate(\$site); ", true, true, 100);
    }

    protected function configureBatchActions(array $actions): array {

        // check user permissions
        if ($this->hasRoute('delete') && $this->isGranted('DELETE')) {
            $actions['delete_move'] = [
                'label' => "Delete and Move",
                'ask_confirmation' => true, // If true, a confirmation will be asked before performing the action
                'controller' => 'App/IGA/SessionsBundle/Controller/SitesAdminController::batchActionDeleteMove',
            ];
        }

        return $actions;
    }
}