| Current Path : /var/www/v3.cesa.co.za/src/UserBundle/Controller/ |
| 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;
}
}