| Current Path : /var/www/v3.cesa.co.za/src/ContactBundle/Controller/ |
| Current File : /var/www/v3.cesa.co.za/src/ContactBundle/Controller/MessageController.php |
<?php
namespace App\ContactBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\FormError;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use App\ContactBundle\Form\Type\MessageEMailType;
use App\ContactBundle\Form\Type\MessageSmsType;
use App\CoreBundle\Services\ServiceGetterManager;
class MessageController extends AbstractController {
/**
* @IsGranted({"ROLE_USER"})
*/
public function indexAction(Request $request, ServiceGetterManager $sg) {
try {
$companyManager = $sg->get('companies.manager');
$messageManager = $sg->get('contact_message.manager');
$settingManager = $sg->get('system_setting.manager');
$tempValueManager = $sg->get('temp_value.manager');
$companyId = $request->get('companyId');
$removeFileId = $request->get('removeFileId');
$sendAgainMessageId = $request->get('sendAgainMessageId');
$userList = $this->getUser();
if (strlen($companyId) <= 0 || $companyId == '0') {
$companyId = $userList->getCompanyId();
}
$company = $companyManager->find($companyId);
$companyName = '';
if ((!is_object($company) || !$company->hasAgent($userList) || !$userList->getGranted('ROLE_COMPANY_ADMINISTRATOR')) &&
!$userList->getGranted('ROLE_SUPER_ADMINISTRATOR')) {
throw new \Exception('You do not have access to this company', '4003');
}
$protocol = 'http:';
if (is_object($company)) {
$companyName = $company->getName();
}
if ($request->isSecure()) {
$protocol = 'https:';
}
$sendEMailData = $request->get('message_e_mail', json_decode($sg->get('session_values.manager')->getValue(array('value_name' => 'messageDraft')), true));
if (!isset($sendEMailData['text'])) {
$sendEMailData['text'] = '';
}
if (!isset($sendEMailData['message_id'])) {
$sendEMailData['message_id'] = '';
}
$messageId = $request->get('messageId', $sendEMailData['message_id']);
$message = $messageManager->find($messageId);
if (strlen($removeFileId) > 0 && is_object($message)) {
$sg->get('contact_message_attachment.manager')->removeByFileId($message, $removeFileId);
$sg->get('contact_message_embedded_image.manager')->removeByFileId($message, $removeFileId);
$messageManager->getEm()->refresh($message);
}
if (strlen($sendAgainMessageId) > 0 && is_object($messageManager->find($sendAgainMessageId))) {
$messageManager->populateSendAgainMessage($messageManager->find($sendAgainMessageId), $message);
}
$sendEMailData['site_path'] = str_replace('/app_dev.php', '', $protocol . $this->generateUrl('iga_core_home', array(), UrlGeneratorInterface::NETWORK_PATH));
$sendEMailData['company_id'] = $companyId;
$sendEMailData['company_name'] = $companyName;
$sendEMailData['unsub_link'] = str_replace(
'/app_dev.php', '', $protocol . $this->generateUrl('iga_contact_message_unsubscribe', array('cultureString' => $cultureString), UrlGeneratorInterface::NETWORK_PATH)
);
$sendEMailData['stats_link'] = str_replace(
'/app_dev.php', '', $protocol . $this->generateUrl('iga_contact_message_stats', array(), UrlGeneratorInterface::NETWORK_PATH)
);
$sendEMailData['system_name'] = $sg->get('sites.manager')->getSiteName($companyName);
$sendEMailData['text'] = str_replace("'", "``", $sendEMailData['text']);
$sendEMailData['owner_id'] = $userList->getId();
$sendEMailData['sender'] = $userList;
$form = $this->createForm(MessageEMailType::class, $message, $sendEMailData);
if ($form->isSubmitted() && $form->isValid()) {
$form->handleRequest($request);
if ($request->get('submitBtn') == 'save') {
$sendEMailData['draft'] = true;
$sendEMailData['contactMethod'] = $sg->get('contact_method.manager')->find($settingManager->getSetting('contact_method_e_mail'));
$sendEMailData['contactReason'] = $sg->get('contact_reason.manager')->find($settingManager->getSetting('contact_reason_mass_comms'));
$sendEMailData['messageType'] = $sg->get('contact_message_type.manager')->find($settingManager->getSetting('contact_reason_mass_comms'));
$sendEMailData['uploadedFiles'] = json_decode($tempValueManager->getTempValue('uploaded_files_' . $this->getUser()->getId()), true);
$sendEMailData['uploadedImages'] = json_decode($tempValueManager->getTempValue('embedded_files_' . $this->getUser()->getId()), true);
$saveMessageError = $messageManager->saveMessage($userList, array(), $sendEMailData, $message);
if (strlen($saveMessageError) <= 0) {
$sendEMailData['message_id'] = $message->getId();
unset($sendEMailData['contactMethod']);
unset($sendEMailData['contactReason']);
unset($sendEMailData['messageType']);
unset($sendEMailData['draft']);
$sg->get('session_values.manager')->setValue(array('value_name' => 'messageDraft', 'value' => json_encode($sendEMailData)));
$tempValue = $tempValueManager->findOneBy(array('temp_value_name' => 'uploaded_files_' . $this->getUser()->getId()));
if (is_object($tempValue)) {
$tempValueManager->remove($tempValue);
}
$tempValue = $tempValueManager->findOneBy(array('temp_value_name' => 'embedded_files_' . $this->getUser()->getId()));
if (is_object($tempValue)) {
$tempValueManager->remove($tempValue);
}
$this->get('session')->getFlashBag()->add('success', 'Message saved as draft');
return $this->redirect($this->generateUrl('iga_contact_message', array('messageId' => $message->getId())));
} else {
$form->get('subject')->addError(new FormError($saveMessageError));
}
} else {
$sendEMailData['message_id'] = $message->getId();
$sendEMailData['draft'] = false;
$sendEMailData['uploadedFiles'] = json_decode($tempValueManager->getTempValue('uploaded_files_' . $this->getUser()->getId()), true);
$command = "\$userList = \$sg->get('user_list.manager')->find('" . $userList->getId() . "'); "
. "\$sendEMailData = json_decode('" . json_encode($sendEMailData) . "', true); "
. "\$sg->get('contact_message.manager')->sendBulkMails(\$userList, \$sendEMailData);";
$sg->get('batch_job.manager')->save($command, true, true, 50);
$tempValue = $tempValueManager->findOneBy(array('temp_value_name' => 'uploaded_files_' . $this->getUser()->getId()));
if (is_object($tempValue)) {
$tempValueManager->remove($tempValue);
}
$this->get('session')->getFlashBag()->add('success', 'Message scheduled to be sent');
return $this->redirect($this->generateUrl('iga_user_list', array('userTypeId' => $settingManager->getSetting('crm_user_type'))));
}
}
$uploadedFiles = json_decode($tempValueManager->getTempValue('uploaded_files_' . $this->getUser()->getId()), true);
$uploadedImgs = json_decode($tempValueManager->getTempValue('embedded_files_' . $this->getUser()->getId()), true);
$fileManager = $sg->get('files.manager');
$attachments = array();
$uploaded = array();
$uploadedImg = array();
$images = array();
if (is_array($uploadedFiles)) {
foreach ($uploadedFiles as $name => $id) {
$oneFile = $fileManager->find($id);
if (is_object($oneFile)) {
$uploaded[] = $oneFile;
}
}
}
if (is_array($uploadedImgs)) {
foreach ($uploadedImgs as $name => $id) {
$uploadedImg[] = $fileManager->find($id);
}
}
if (is_object($message)) {
if (is_countable($message->getMessageAttachment())) {
foreach ($message->getMessageAttachment() as $attachment) {
$attachments[] = $attachment->getFiles();
}
}
if (is_countable($message->getMessageEmbeddedImage())) {
foreach ($message->getMessageEmbeddedImage() as $img) {
$images[] = $img->getFiles();
}
}
}
} catch (\Exception $ex) {
$logger = $sg->get('error_log.manager');
$logger->error('Error on message send: ' . $ex->getMessage());
return $this->redirect($this->generateUrl('iga_core_500', array('message' => $ex->getMessage() . ' - ' . $ex->getTraceAsString())));
}
return $this->render(
'@ContactBundle/Message/index.html.twig', array(
'form' => $form->createView(),
'companyId' => $companyId,
'messageId' => $messageId,
'attachments' => $attachments,
'images' => $images,
'uploaded' => $uploaded,
'uploadedImg' => $uploadedImg,
'fields' => $sg->get('user_field.manager')->getSiteListQuery(array('user_list' => $userList))->execute(),
)
);
}
/**
* @IsGranted({"ROLE_USER"})
*/
public function indexSmsAction(Request $request, ServiceGetterManager $sg) {
try {
$companyManager = $sg->get('companies.manager');
$companyId = $request->get('companyId');
$userList = $this->getUser();
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('You do not have access to this company', '4003');
}
$form = $this->createForm(MessageSmsType::class, null, array('company_id' => $companyId));
// $form = $this->createForm(MessageSmsType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$sendEMailData = $request->get('message_sms');
$sendEMailData['company_id'] = $companyId;
$sendEMailData['company_name'] = '';
if (is_object($company)) {
$sendEMailData['company_name'] = $company->getName();
}
$sendEMailData['text'] = str_replace("'", "``", $sendEMailData['text']);
$sendEMailData['owner_id'] = $userList->getId();
$command = "\$userList = \$sg->get('user_list.manager')->find('" . $userList->getId() . "'); "
. "\$sendEMailData = json_decode('" . json_encode($sendEMailData) . "', true); "
. "\$sg->get('contact_message.manager')->sendBulkSMSs(\$userList, \$sendEMailData);";
$sg->get('batch_job.manager')->save($command, true, true, 50);
$this->get('session')->getFlashBag()->add('success', 'Message scheduled to be sent');
}
} catch (\Exception $ex) {
$logger = $sg->get('error_log.manager');
$logger->error('Error on message send: ' . $ex->getMessage());
return $this->redirect($this->generateUrl('iga_core_500', array('message' => $ex->getMessage() . ' - ' . $ex->getTraceAsString())));
}
return $this->render(
'@ContactBundle/Message/sms.html.twig', array(
'form' => $form->createView(),
'companyId' => $companyId,
'fields' => $sg->get('user_field.manager')->getSiteListQuery(array('user_list' => $userList))->execute(),
)
);
}
/**
* @IsGranted({"ROLE_USER"})
*/
public function draftsAction(Request $request, ServiceGetterManager $sg) {
// try {
$companyManager = $sg->get('companies.manager');
$messageManager = $sg->get('contact_message.manager');
$companyId = $request->get('companyId');
$userList = $this->getUser();
if (strlen($companyId) <= 0 || $companyId == '0') {
$companyId = $userList->getCompanyId();
}
$company = $companyManager->find($companyId);
if ((!is_object($company) || !$userList->hasCompany($company) || !$userList->getGranted('ROLE_COMPANY_ADMINISTRATOR')) &&
!$userList->getGranted('ROLE_SUPER_ADMINISTRATOR')) {
throw new \Exception('You do not have access to this company', '4003');
}
$messagesQuery = $messageManager->getSiteListQuery(array('user_list' => $userList, 'drafts' => true));
$paginator = $sg->get('knp_paginator');
$pagination = $paginator->paginate($messagesQuery, $request->get('page', 1), 10, array('distinct' => false));
// } catch (\Exception $ex) {
// $logger = $this->get('error_log.manager');
// $logger->error('Error on message send: ' . $ex->getMessage());
// return $this->redirect($this->generateUrl('iga_core_500', array('message' => $ex->getMessage() . ' - ' . $ex->getTraceAsString())));
// }
return $this->render(
'@ContactBundle/Message/drafts.html.twig', array(
'pagination' => $pagination,
'companyId' => $companyId,
)
);
}
public function unsubscribeAction(Request $request, ServiceGetterManager $sg) {
try {
$messageRecipientManager = $sg->get('contact_message_recipient.manager');
$messageStatManager = $sg->get('contact_message_stat.manager');
$languagePhrasesManager = $sg->get('language_phrases.manager');
$messageRecipientId = $request->get('messageRecipientId');
$messageRecipient = $messageRecipientManager->find($messageRecipientId);
if (!is_object($messageRecipient)) {
throw new \Exception('Invalid unsubscribe link: ' . $messageRecipientId);
}
$messageStatManager->updateMessageRecipientUnsubscribe($messageRecipientId);
} catch (\Exception $ex) {
$logger = $sg->get('error_log.manager');
$logger->error('Error on unsubscribe: ' . $ex->getMessage());
return $this->redirect($this->generateUrl('iga_core_500', array('message' => $ex->getMessage() . ' - ' . $ex->getTraceAsString())));
}
return $this->render(
'@ContactBundle/Message/unsubscribe.html.twig', array(
'messageRecipient' => $messageRecipient,
)
);
}
public function recipientStatsAction(Request $request, ServiceGetterManager $sg) {
try {
$messageStatManager = $sg->get('contact_message_stat.manager');
$statsFileManager = $sg->get('stats_file.manager');
$messageRecipientId = $request->get('messageRecipientId');
$messageStatManager->updateMessageRecipientRead($messageRecipientId);
$response = new Response($statsFileManager->getStatsImage());
$response->headers->set('Content-Type', 'image/png');
} catch (\Exception $ex) {
$logger = $sg->get('error_log.manager');
$logger->error('Error logging message stats: ' . $ex->getMessage());
$response = new Response('');
}
$response->headers->set('X-robots-tag', 'noindex');
$response->headers->set('Content-Type', 'image/png');
return $response;
}
public function statsUpdateAction(Request $request, ServiceGetterManager $sg) {
$messageStatManager = $sg->get('contact_message_stat.manager');
$trackData = $request->get('sMessageId');
$status = $request->get('sStatus');
$messageStat = $messageStatManager->findOneBy(array('track_data' => $trackData));
if (is_object($messageStat)) {
$messageRecipientId = $messageStat->getMessageRecipient()->getId();
if (in_array($status, array('DELIVRD', 'ACCEPTED'))) {
$messageStatManager->updateMessageRecipientDelivered($messageRecipientId);
} else {
$messageErrorManager = $sg->get('contact_message_error.manager');
$messageErrorManager->logError($messageStat->getMessageRecipient(), 'Error delivering SMS: ' . $request->getRequestUri());
}
}
return $this->render('@ContactBundle/Message/stats_update.html.twig');
}
/**
* @IsGranted({"ROLE_USER"})
*/
public function emailStatAction(Request $request, ServiceGetterManager $sg) {
$pagination = array();
try {
$userList = $this->getUser();
$settingManager = $sg->get('system_setting.manager');
$messageType = $sg->get('contact_message_type.manager')->find($settingManager->getSetting('contact_message_type_mass_e_mail'));
$paginationQuery = $sg->get('contact_message.manager')->getSiteListQuery(array(
'user_list' => $userList, 'message_type' => $messageType,
)
);
$paginator = $sg->get('knp_paginator');
$pagination = $paginator->paginate($paginationQuery, $request->get('page', 1), 10, array('distinct' => false));
} catch (\Exception $ex) {
$logger = $sg->get('error_log.manager');
$logger->error('Error viewing e-mail stats: ' . $ex->getMessage());
}
return $this->render('@ContactBundle/Message/e-mail.stats.html.twig', array('pagination' => $pagination));
}
/**
* @IsGranted({"ROLE_USER"})
*/
public function smsStatAction(Request $request, ServiceGetterManager $sg) {
$pagination = array();
try {
$userList = $this->getUser();
$settingManager = $sg->get('system_setting.manager');
$messageType = $sg->get('contact_message_type.manager')->find($settingManager->getSetting('contact_message_type_mass_sms'));
$paginationQuery = $sg->get('contact_message.manager')->getSiteListQuery(array(
'user_list' => $userList, 'message_type' => $messageType,
)
);
$paginator = $sg->get('knp_paginator');
$pagination = $paginator->paginate($paginationQuery, $request->get('page', 1), 10, array('distinct' => false));
} catch (\Exception $ex) {
$logger = $sg->get('error_log.manager');
$logger->error('Error viewing sms stats: ' . $ex->getMessage());
}
return $this->render('@ContactBundle/Message/sms.stats.html.twig', array('pagination' => $pagination));
}
/**
* @IsGranted({"ROLE_USER"})
*/
public function showEMailAction(Request $request, ServiceGetterManager $sg, $messageId) {
$pagination = array();
try {
$userList = $this->getUser();
$message = $sg->get('contact_message.manager')->find($messageId);
$createdByUser = $sg->get('user_list.manager')->find($message->getCreatedBy());
if (!is_object($message) || $message->getCreatedBy() != $userList->getId()) {
return $this->redirect(
$this->generateUrl('iga_core_500', array('message' => 'You do not have access to this message'))
);
}
$messageType = $message->getMessageType();
$paginationQuery = $sg->get('contact_message_recipient.manager')->getSiteListQuery(array('message' => $message,));
$paginator = $sg->get('knp_paginator');
$pagination = $paginator->paginate($paginationQuery, $request->get('page', 1), 10, array('distinct' => false));
} catch (\Exception $ex) {
$logger = $sg->get('error_log.manager');
$logger->error('Error viewing e-mail message: ' . $ex->getMessage());
}
return $this->render('@ContactBundle/Message/e-mail.show.html.twig', array('pagination' => $pagination, 'message' => $message, 'createdByUser' => $createdByUser));
}
/**
* @IsGranted({"ROLE_USER"})
*/
public function showSmsAction(Request $request, ServiceGetterManager $sg, $cultureString, $messageId) {
$pagination = array();
try {
$userList = $this->getUser();
$message = $sg->get('contact_message.manager')->find($messageId);
$createdByUser = $sg->get('user_list.manager')->find($message->getCreatedBy());
if (!is_object($message) || $message->getCreatedBy() != $userList->getId()) {
return $this->redirect(
$this->generateUrl('iga_core_500', array('message' => 'You do not have access to this SMS'))
);
}
$paginationQuery = $sg->get('contact_message_recipient.manager')->getSiteListQuery(array('message' => $message,));
$paginator = $sg->get('knp_paginator');
$pagination = $paginator->paginate($paginationQuery, $request->get('page', 1), 10, array('distinct' => false));
} catch (\Exception $ex) {
$logger = $sg->get('error_log.manager');
$logger->error('Error viewing e-mail message: ' . $ex->getMessage());
}
return $this->render('@ContactBundle/Message/sms.show.html.twig', array('pagination' => $pagination, 'message' => $message, 'createdByUser' => $createdByUser));
}
}