Your IP : 216.73.217.79


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

<?php

namespace App\UserBundle\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\FormError;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use App\ContentBundle\Entity\Files;
use App\CoreBundle\Services\ServiceGetterManager;
use App\UserBundle\Form\Type\UserImportFieldsType;
use App\UserBundle\Form\Type\UserImportType;
use App\UserBundle\Form\Type\UserMyDetailsType;
use App\UserBundle\Entity\UserList;

class UserListController extends AbstractController {

    /**
     * @IsGranted({"ROLE_USER"})
     */
    public function listAction(Request $request, ServiceGetterManager $sg, $cultureString) {

        try {

            $companyManager = $sg->get('companies.manager');

            $companyId = $request->get('companyId');
            $searchText = $request->get('search_text');

            $userList = $this->getUser();

            if (!is_object($userList)) {
                throw new \Exception($languagePhrasesManager->translate('You do not have access to this page'), '4003');
            }

            $company = $companyManager->find($companyId);

            if (!is_object($company)) {
                $company = $sg->get('companies.manager')->getCurrentCompany();
            }

            if (!is_object($company)) {
                $company = $userList->getCompany();
            }

            if (!is_object($company) &&
                    !$userList->getGranted('ROLE_SUPER_ADMINISTRATOR')) {
                throw new \Exception($languagePhrasesManager->translate('Please contact us to allow your account access to manage users') . ' - ' . $userList->getUsername(), '4003');
            }

            if ((!is_object($company) || !$userList->hasCompany($company) || !$userList->getGranted('ROLE_COMPANY_ADMINISTRATOR')) &&
                    !$userList->getGranted('ROLE_SUPER_ADMINISTRATOR')) {
                throw new \Exception($languagePhrasesManager->translate('You do not have access to this company'), '4003');
            }

            if (is_object($company)) {
                $companyId = $company->getId();
            }

            if (strlen($companyId) <= 0) {
                $companyId = '-';
            }

            $userTypeId = $request->get('userTypeId', '-');

            if ($userTypeId == '-') {
                $userTypeId = $sg->get('system_setting.manager')->getSetting('fe_user_type');
            }

            $deleteUserListId = $request->get('deleteUserListId');

            if (strlen($deleteUserListId) > 0) {
                $sg->get('user_list.manager')->removeById($deleteUserListId, $this->getUser(), $company);
                $this->get('session')->getFlashBag()->add('success', $languagePhrasesManager->translate('User deleted'));
            }

            $listName = $languagePhrasesManager->translate('Users');
            $params = array('companyId' => $companyId, 'userTypeId' => $userTypeId, 'refer' => false, 'contacts' => false, 'searchText' => $searchText);

            if ($userTypeId == $sg->get('system_setting.manager')->getSetting('crm_user_type') || strpos(' ' . $userTypeId, $sg->get('system_setting.manager')->getSetting('crm_user_type')) > 0) {
                $listName = $languagePhrasesManager->translate('Contacts');
                $params['contacts'] = true;
            }

            $userListQuery = $sg->get('user_list.manager')->getAllQuery($params);
//            echo $userListQuery->getSQL();
//            exit;

            $userLanguage = $sg->get('languages.manager')->getUserLanguage($cultureString);

            $paginator = $sg->get('knp_paginator');
            $pagination = $paginator->paginate($userListQuery, $request->get('page', 1), 10, array('distinct' => false));

            $route = $sg->get('system_setting.manager')->getSetting('user_list_template', '@UserBundle/UserList/list.html.twig');

            if ($request->get('ajax') > 0) {
                $route = $sg->get('system_setting.manager')->getSetting('user_list_template_ajax', '@UserBundle/UserList/list.render.html.twig');
            }

            return $this->render(
                            $route, array(
                        'pageTitleString' => $listName,
                        'userLanguage' => $userLanguage,
                        'pagination' => $pagination,
                        'companyId' => $companyId,
                        'userTypeId' => $userTypeId,
                        'listName' => $listName,
                        'owner' => $userList,
                        'contacts' => $params['contacts'],
                        'feUserTypeId' => $sg->get('system_setting.manager')->getSetting('fe_user_type'),
                            )
            );
        } catch (\Exception $ex) {
            $logger = $sg->get('error_log.manager');
            $logger->error('Error on user list frontend: ' . $ex->getMessage() . ' - ' . $ex->getTraceAsString());
            return $this->redirect($this->generateUrl('iga_core_500', array('message' => $ex->getMessage())));
        }
    }

    /**
     * @IsGranted({"ROLE_USER"})
     */
    public function editAction(Request $request, ServiceGetterManager $sg, $cultureString) {

        try {

            $userListManager = $sg->get('user_list.manager');
            $companyManager = $sg->get('companies.manager');

            $companyId = $request->get('companyId');
            $userListId = $request->get('userListId');

            $userList = $this->getUser();

            if (strlen($companyId) <= 0 || $companyId == '0') {
                $companyId = $userList->getCompanyId();
            }

            if (!is_object($userList)) {
                throw new \Exception($languagePhrasesManager->translate('You do not have access to this page'), '4003');
            }

            $company = $companyManager->find($companyId);
            $userListEdit = $userListManager->find($userListId);

            if ((!is_object($company) || !$company->hasAgent($userList) || !$userList->getGranted('ROLE_COMPANY_ADMINISTRATOR')) &&
                    !$userList->getGranted('ROLE_SUPER_ADMINISTRATOR')) {
                throw new \Exception($languagePhrasesManager->translate('You do not have access to this company'), '4003');
            }

            $userTypeId = $request->get('userTypeId', '-');

            if ($userTypeId == '-') {
                $userTypeId = $sg->get('system_setting.manager')->getSetting('fe_user_type');
            }

            $listName = 'User';

            if ($userTypeId == $sg->get('system_setting.manager')->getSetting('crm_user_type')) {
                $listName = 'Contact';
            }

            if (is_object($userListEdit)) {
                $titleString = ucwords(strtolower($languagePhrasesManager->translate('Edit ' . $listName) . ' - ' . $userListEdit->getFullNameString()));
                $userListId = $userListEdit->getId();
                $formRoute = 'iga_user_edit';
            } else {
                $titleString = ucwords(strtolower($languagePhrasesManager->translate('Add ' . $listName)));
                $userListId = '0';
                $formRoute = 'iga_user_edit';
                $userListEdit = new UserList();
            }

            $pageTitleString = $titleString;
            $descriptionString = $languagePhrasesManager->translate('Edit ' . $listName . ' Details');
            $keyWordString = $languagePhrasesManager->translate('manage ' . strtolower($listName));

            $userListForm = $this->createForm(
                    UserMyDetailsType::class, $userListEdit, array('user_list' => $userListEdit, 'user_list_edit' => true, 'user_type_id' => $userTypeId, 'is_new' => true, 'owner' => $userList)
            );
            $moreFields = $sg->get('user_field.manager')->getAdditionalFields($userList, $userListEdit);

            if ($request->getMethod() == 'POST') {

                $userListForm->handleRequest($request);

                if ($userListForm->isValid()) {

                    $canEdit = $userListManager->canEdit($userListEdit, $userList);
                    $error = '';

                    $userListArr = $request->get('user_my_details');

                    if (!isset($userListArr['password']) || count($userListArr['password']) <= 0 || strlen($userListArr['password']['password']) <= 0) {
                        $userListArr['update_password'] = false;
                    }

                    $userListArr['user_type_id'] = $userTypeId;

                    if ($canEdit) {
                        $error = $userListManager->saveFromRequest($userListArr, $userListEdit, $userList);
                    }

                    if (strlen($error) <= 0) {

                        $sg->get('user_field_user.manager')->saveFromRequest($userList, $userListEdit, $request->get('user_field'));

                        if ($canEdit && is_object($company)) {
                            $sg->get('companies.manager')->linkUser($company, $userListEdit);

                            if ($userTypeId == $sg->get('system_setting.manager')->getSetting('crm_user_type')) {
                                $sg->get('user_contact.manager')->linkUser($userList, $userListEdit, $company);
                            }
                        }

                        if (!isset($userListArr['user_group'])) {
                            $userListArr['user_group'] = array();
                        }

                        $sg->get('user_group.manager')->linkFromIds($userListArr['user_group'], $userListEdit, $userList);

                        $this->get('session')->getFlashBag()->add('success', $languagePhrasesManager->translate($listName . ' details saved'));
                        return $this->redirect(
                                        $this->generateUrl(
                                                $formRoute, array(
                                            'cultureString' => $userLanguage->getCultureString(), 'userListId' => $userListEdit->getId(), 'companyId' => $companyId, 'userTypeId' => $userTypeId
                                                )
                                        )
                        );
                    } else {
                        $this->get('session')->getFlashBag()->add('error', $error);
                        $userListForm->addError(new FormError($error));
                    }
                }
            }

            return $this->render(
                            '@UserBundle/UserList/edit.html.twig', array(
                        'titleString' => $titleString,
                        'pageTitleString' => $pageTitleString,
                        'descriptionString' => $descriptionString,
                        'keyWordString' => $keyWordString,
                        'userLanguage' => $userLanguage,
                        'company' => $company,
                        'userList' => $userListEdit,
                        'companyId' => $companyId,
                        'userListId' => $userListId,
                        'formRoute' => $formRoute,
                        'form' => $userListForm->createView(),
                        'userTypeId' => $userTypeId,
                        'listName' => $listName,
                        'feUserTypeId' => $sg->get('system_setting.manager')->getSetting('fe_user_type'),
                        'crmUserTypeId' => $sg->get('system_setting.manager')->getSetting('crm_user_type'),
                        'moreFields' => $moreFields,
                            )
            );
        } catch (\Exception $ex) {
            $logger = $sg->get('error_log.manager');
            $logger->error('Error on user list edit: ' . $ex->getMessage() . ' - ' . $ex->getTraceAsString());
            return $this->redirect($this->generateUrl('iga_core_500', array('message' => $ex->getMessage())));
        }
    }

    /**
     * @IsGranted({"ROLE_USER"})
     */
    public function importAction(Request $request, ServiceGetterManager $sg, $cultureString, $companyId, $userTypeId) {

        try {

            $companyManager = $sg->get('companies.manager');
            $languagePhrasesManager = $sg->get('language_phrases.manager');

            $userList = $this->getUser();

            if (!is_object($userList)) {
                throw new \Exception($languagePhrasesManager->translate('You do not have access to this page'), '4003');
            }

            if (strlen($companyId) <= 0 || $companyId == '0') {
                $companyId = $userList->getCompanyId();
            }

            $company = $companyManager->find($companyId);

            if ((!is_object($company) || !$company->hasAgent($userList) || !$userList->getGranted('ROLE_COMPANY_ADMINISTRATOR')) &&
                    !$userList->getGranted('ROLE_SUPER_ADMINISTRATOR')) {
                throw new \Exception($languagePhrasesManager->translate('You do not have access to this company'), '4003');
            }

            if ($userTypeId == '-') {
                $userTypeId = $sg->get('system_setting.manager')->getSetting('fe_user_type');
            }

            $listName = 'Users';

            if ($userTypeId == $sg->get('system_setting.manager')->getSetting('crm_user_type')) {
                $listName = 'Contacts';
            }

            $importForm = $this->createForm(UserImportType::class);

            $importForm->handleRequest($request);

            if ($importForm->isSubmitted() && $importForm->isValid()) {

                $importFile = $importForm['import_file']->getData();

                if ($importFile) {

                    $file = new Files();
                    $uploadedFile = $request->files->get('user_import');

                    $sg->get('files.manager')->saveFromUpload(
                            $uploadedFile['import_file']
                            , $sg->get('languages.manager')->getUserLanguage($cultureString)
                            , $file
                            , 'application'
                            , array('file_type_id' => $sg->get('system_setting.manager')->getSetting('normal_file_type'))
                    );

                    return $this->redirect(
                                    $this->generateUrl(
                                            'iga_user_import_fields', array('cultureString' => $cultureString, 'companyId' => $companyId, 'userTypeId' => $userTypeId, 'fileId' => $file->getId())
                                    )
                    );
                } else {
                    $this->get('session')->getFlashBag()->add('warning', $languagePhrasesManager->translate('Upload file is empty'));
                }
            }

            $userLanguage = $sg->get('languages.manager')->getUserLanguage($cultureString);

            $pageTitleString = ucwords(strtolower($languagePhrasesManager->translate('Import ' . $listName)));
            $descriptionString = $languagePhrasesManager->translate('Import ' . $listName);
            $keyWordString = $languagePhrasesManager->translate('manage ' . strtolower($listName));

            return $this->render(
                            '@UserBundle/UserList/import.html.twig', array(
                        'pageTitleString' => $pageTitleString,
                        'titleString' => $pageTitleString,
                        'descriptionString' => $descriptionString,
                        'keyWordString' => $keyWordString,
                        'userLanguage' => $userLanguage,
                        'form' => $importForm->createView(),
                        'companyId' => $companyId,
                        'userTypeId' => $userTypeId,
                        'feUserTypeId' => $sg->get('system_setting.manager')->getSetting('fe_user_type'),
                            )
            );
        } catch (\Exception $ex) {
            $logger = $sg->get('error_log.manager');
            $logger->error('Error on user list import: ' . $ex->getMessage() . ' - ' . $ex->getTraceAsString());
            return $this->redirect($this->generateUrl('iga_core_500', array('message' => $ex->getMessage())));
        }
    }

    /**
     * @IsGranted({"ROLE_USER"})
     */
    public function importFieldsAction(Request $request, ServiceGetterManager $sg, $cultureString, $companyId, $userTypeId, $fileId) {

        try {

            $companyManager = $sg->get('companies.manager');
            $languagePhrasesManager = $sg->get('language_phrases.manager');

            if (strlen($fileId) <= 0) {
                throw new \Exception($languagePhrasesManager->translate('No import file ID specified'), '500');
            }

            $userList = $this->getUser();

            if (!is_object($userList)) {
                throw new \Exception($languagePhrasesManager->translate('You do not have access to this page'), '4003');
            }

            if (strlen($companyId) <= 0 || $companyId == '0') {
                $companyId = $userList->getCompanyId();
            }

            $company = $companyManager->find($companyId);

            if ((!is_object($company) || !$company->hasAgent($userList) || !$userList->getGranted('ROLE_COMPANY_ADMINISTRATOR')) &&
                    !$userList->getGranted('ROLE_SUPER_ADMINISTRATOR')) {
                throw new \Exception($languagePhrasesManager->translate('You do not have access to this company'), '4003');
            }

            if ($userTypeId == '-') {
                $userTypeId = $sg->get('system_setting.manager')->getSetting('fe_user_type');
            }

            $listName = 'Users';

            if ($userTypeId == $sg->get('system_setting.manager')->getSetting('crm_user_type')) {
                $listName = 'Contacts';
            }

            $columnsInFile = $sg->get('files.manager')->getColumnsFromExcelFile($fileId);

            $importForm = $this->createForm(UserImportFieldsType::class, null, array('import_file_id' => $fileId, 'columns' => $columnsInFile));

            $importForm->handleRequest($request);

            if ($importForm->isSubmitted() && $importForm->isValid()) {

                $jobCommand = "\$fieldsToColumns = json_decode('" . json_encode($importForm->getData()) . "', true); "
                        . "\$fileId = '" . $fileId . "'; "
                        . "\$ownerId = '" . $userList->getId() . "'; "
                        . "\$companyId = '" . $companyId . "'; "
                        . "\$userTypeId = '" . $userTypeId . "'; "
                        . "\$this->getContainer()->get('user_list.manager')->importUsers(
                        array('fieldsToColumns' => \$fieldsToColumns, 'fileId' => \$fileId, 'ownerId' => \$ownerId, 'companyId' => \$companyId, 'userTypeId' => \$userTypeId)
                            );";

                $sg->get('batch_job.manager')->save($jobCommand, true, false, 50);

                $this->get('session')->getFlashBag()->add('success', $languagePhrasesManager->translate('Import started. You will receive an e-mail when it is done.'));
            }

            $userLanguage = $sg->get('languages.manager')->getUserLanguage($cultureString);

            $pageTitleString = ucwords(strtolower($languagePhrasesManager->translate('Match Fields')));
            $descriptionString = $languagePhrasesManager->translate('Match fields');
            $keyWordString = $languagePhrasesManager->translate('manage ' . strtolower($listName));

            return $this->render(
                            '@UserBundle/UserList/import.fields.html.twig', array(
                        'pageTitleString' => $pageTitleString,
                        'titleString' => $pageTitleString,
                        'descriptionString' => $descriptionString,
                        'keyWordString' => $keyWordString,
                        'userLanguage' => $userLanguage,
                        'form' => $importForm->createView(),
                        'companyId' => $companyId,
                        'userTypeId' => $userTypeId,
                        'fileId' => $fileId,
                        'feUserTypeId' => $sg->get('system_setting.manager')->getSetting('fe_user_type'),
                            )
            );
        } catch (\Exception $ex) {
            $logger = $sg->get('error_log.manager');
            $logger->error('Error on user list import fields: ' . $ex->getMessage() . ' - ' . $ex->getTraceAsString());
            return $this->redirect($this->generateUrl('iga_core_500', array('message' => $ex->getMessage())));
        }
    }

    /**
     * @IsGranted({"ROLE_USER"})
     */
    public function referredAction(Request $request, ServiceGetterManager $sg, $cultureString) {

        $languagePhrasesManager = $sg->get('language_phrases.manager');

        $userList = $this->getUser();

        if (!is_object($userList)) {
            throw new \Exception($languagePhrasesManager->translate('You do not have access to this page'), '4003');
        }

        $userListQuery = $sg->get('user_list.manager')->getAllQuery(
                array('referredByUser' => $userList)
        );
        $userLanguage = $sg->get('languages.manager')->getUserLanguage($cultureString);

        $paginator = $sg->get('knp_paginator');
        $pagination = $paginator->paginate($userListQuery, $request->get('page', 1), 10, array('distinct' => false));

        return $this->render(
                        '@UserBundle/UserList/referred.html.twig', array('userLanguage' => $userLanguage, 'pagination' => $pagination, 'loggedInUser' => $userList)
        );
    }

    /**
     * @IsGranted({"ROLE_USER"})
     */
    public function creditsEarnedAction(Request $request, ServiceGetterManager $sg, UserList $userList, UserList $referredUser) {

        $userNetwork = $sg->get('user_network.manager')->findOneBy(array('user_list_id' => $userList->getId(), 'user_referred_id' => $referredUser->getId()));

        $credits = 0;

        if (is_object($userNetwork)) {
            $credits = $userNetwork->getCreditsEarned();
        }

        return $this->render('@UserBundle/UserList/credits_earned.html.twig', array('credits' => $credits));
    }

    /**
     * Display user's credits
     */
    public function creditsAction(Request $request, ServiceGetterManager $sg, $cultureString) {

        $userList = $this->getUser();
        $credits = -1;

        if (is_object($userList)) {
            $credits = $sg->get('credits.manager')->getUserCredits($userList);
        }

        return $this->render('@UserBundle/UserList/credits.html.twig', array('credits' => $credits));
    }

    /**
     * @IsGranted({"ROLE_USER"})
     * @param Request $request
     *
     * @return Response
     */
    public function quickCreateAction(Request $request, ServiceGetterManager $sg) {

        $responseData = array('success' => true, 'error_message' => '', 'user' => array());

        try {

            $userData = array(
                'user_type_id' => $sg->get('system_setting.manager')->getSetting('fe_user_type'),
                'first_name_string' => $request->get('first_name_string'),
                'last_name_string' => $request->get('last_name_string'),
                'e_mail_address_string' => $request->get('e_mail_address'),
                'bank_id' => $request->get('bank'),
                'account_name' => $request->get('account_name'),
                'account_number' => $request->get('account_number'),
            );
            $userList = null;

            $responseData['error_message'] = $sg->get('user_list.manager')->saveFromRequest($userData, $userList, $this->getUser());

            if (strlen($responseData['error_message']) <= 0 && is_object($userList)) {
                $responseData['user']['id'] = $userList->getId();
                $responseData['user']['text'] = $userList->getFullNameString() . ' (' . $userList->getUsername() . ')';
            }
        } catch (\Exception $ex) {
            $logger = $sg->get('error_log.manager');
            $logger->error('Error on auction get banks json: ' . $ex->getMessage() . ' - ' . $ex->getTraceAsString());
            $responseData['error_message'] = $ex->getMessage();
            $responseData['success'] = false;
        }

        $response = new Response(json_encode($responseData));
        $response->headers->set('X-robots-tag', 'noindex');
        $response->headers->set('Content-Type', 'application/json');
        return $response;
    }
}