/** * @param Request $request * * @return \Symfony\Component\HttpFoundation\JsonResponse */ protected function updateStatsChartAction(Request $request) { $emailId = InputHelper::int($request->request->get('emailId')); $emailType = InputHelper::clean($request->request->get('emailType')); $includeVariants = InputHelper::boolean($request->request->get('includeVariants', false)); $amount = InputHelper::int($request->request->get('amount')); $unit = InputHelper::clean($request->request->get('unit')); $dataArray = array('success' => 0); /** @var \Mautic\EmailBundle\Model\EmailModel $model */ $model = $this->factory->getModel('email'); $dataArray['stats'] = $emailType == 'template' ? $model->getEmailGeneralStats($emailId, $includeVariants, $amount, $unit) : $model->getEmailListStats($emailId, $includeVariants); $dataArray['success'] = 1; return $this->sendJsonResponse($dataArray); }
/** * @param $type * @param $userId */ protected function toggleChatSettingAction(Request $request) { $chatType = $request->request->get('chatType'); $setting = $request->request->get('setting'); $enabled = InputHelper::boolean($request->request->get('enabled')); $id = InputHelper::int($request->request->get('id')); $success = 0; $updateSettings = array(); /** @var \MauticAddon\MauticChatBundle\Model\ChatModel $model */ $model = $this->factory->getModel('addon.mauticChat.chat'); $settings = $model->getSettings($chatType); /** @var \MauticAddon\MauticChatBundle\Model\ChannelModel $channelModel */ $channelModel = $this->factory->getModel('addon.mauticChat.channel'); if ($chatType == 'channels' && $setting == 'archived') { $channel = $channelModel->getEntity($id); if ($channel != null) { if ($this->factory->getSecurity()->hasEntityAccess(true, false, $channel->getCreatedBy())) { $success = 1; if ($enabled) { $channelModel->archiveChannel($id); $updateSettings['visible'] = false; } else { $channelModel->unarchiveChannel($id); } } } } elseif ($chatType == 'channels' && $setting == 'subscribed') { $channel = $channelModel->getEntity($id); if ($channel != null) { $success = 1; if ($enabled) { $channelModel->subscribeToChannel($channel); $updateSettings['visible'] = true; } else { $channelModel->unsubscribeFromChannel($channel); $updateSettings['visible'] = false; } } } else { $updateSettings[$setting] = $enabled; } foreach ($updateSettings as $setting => $enabled) { if (isset($settings[$setting])) { $success = 1; if (!$enabled && in_array($id, $settings[$setting])) { $key = array_search($id, $settings[$setting]); if ($key !== false) { unset($settings[$setting][$key]); } } elseif ($enabled && !in_array($id, $settings[$setting])) { $settings[$setting][] = $id; } } } if (!empty($updateSettings)) { $model->setSettings($settings, $chatType); } return $this->sendJsonResponse(array('success' => $success, 'settings' => $updateSettings)); }
/** * Generate channel list * * @param int $page * * @return \Symfony\Component\HttpFoundation\JsonResponse|\Symfony\Component\HttpFoundation\Response */ public function listAction($page = 1) { $session = $this->factory->getSession(); $attrFilters = $session->get('mautic.chat.channel.attr.filters', array()); if ($this->request->getMethod() == 'POST') { $this->setListFilters(); if ($this->request->query->has('filter')) { $attrFilters = $session->get('mautic.chat.channel.attr.filters', array()); $attr = $this->request->query->get('filter'); $enabled = InputHelper::boolean($this->request->query->get('enabled')); if ($enabled && !in_array($attr, $attrFilters)) { $attrFilters[] = $attr; } elseif (!$enabled && in_array($attr, $attrFilters)) { $key = array_search($attr, $attrFilters); if ($key !== false) { unset($attrFilters[$key]); } } $session->set('mautic.chat.channel.attr.filters', $attrFilters); } } //set limits $limit = $session->get('mautic.chat.channel.limit', $this->factory->getParameter('default_pagelimit')); $start = $page === 1 ? 0 : ($page - 1) * $limit; if ($start < 0) { $start = 0; } /** @var \MauticAddon\MauticChatBundle\Model\ChannelModel $channelModel */ $channelModel = $this->factory->getModel('addon.mauticChat.channel'); $settings = $channelModel->getSettings(); $orderBy = $session->get('mautic.chat.channel.orderby', 'c.name'); $orderByDir = $session->get('mautic.chat.channel.orderbydir', 'ASC'); $filters = $session->get('mautic.chat.channel.filters', array()); list($unreadCounts, $unreadIds) = $channelModel->getChannelsWithUnreadMessages(true); foreach ($attrFilters as $attr) { switch ($attr) { case 'newmessages': if (empty($unreadIds)) { $unreadIds = array(0); } $filters[] = array('column' => 'c.id', 'expr' => 'in', 'value' => $unreadIds); break; case 'invisible': if (!empty($settings['visible'])) { $filters[] = array('column' => 'c.id', 'expr' => 'notIn', 'value' => $settings['visible']); } break; case 'silent': if (!empty($settings['silent'])) { $filters[] = array('column' => 'c.id', 'expr' => 'in', 'value' => $settings['silent']); } break; case 'mute': if (!empty($settings['mute'])) { $filters[] = array('column' => 'c.id', 'expr' => 'in', 'value' => $settings['mute']); } break; case 'archived': $filters[] = array('column' => 'c.isPublished', 'expr' => 'eq', 'value' => false); break; case 'subscribed': $filters[] = array('column' => 'IDENTITY(s.user)', 'expr' => 'eq', 'value' => $this->factory->getUser()->getId()); break; } } //do some default filtering $filter = array('string' => '', 'force' => $filters); $channels = $this->factory->getModel('addon.mauticChat.channel')->getEntities(array('start' => $start, 'limit' => $limit, 'filter' => $filter, 'orderBy' => $orderBy, 'orderByDir' => $orderByDir, 'userId' => $this->factory->getUser()->getId())); //Check to see if the number of pages match the number of users $count = count($channels); if ($count && $count < $start + 1) { //the number of entities are now less then the current page so redirect to the last page $lastPage = $count === 1 ? 1 : floor($limit / $count) ?: 1; $session->set('mautic.chat.channel.page', $lastPage); $returnUrl = $this->generateUrl('mautic_chatchannel_list', array('page' => $lastPage)); return $this->postActionRedirect(array('returnUrl' => $returnUrl, 'viewParameters' => array('page' => $lastPage), 'contentTemplate' => 'MauticChatBundle:Channel:list', 'passthroughVars' => array('mauticContent' => 'chatChannel', 'replaceContent' => 'true', 'route' => false))); } //set what page currently on so that we can return here after form submission/cancellation $session->set('mautic.chat.channel.page', $page); return $this->delegateView(array('viewParameters' => array('items' => $channels, 'page' => $page, 'limit' => $limit, 'settings' => $settings, 'me' => $this->factory->getUser(), 'filters' => $attrFilters, 'unread' => $unreadCounts, 'stats' => $channelModel->getUserChannelStats()), 'contentTemplate' => 'MauticChatBundle:Channel:list.html.php', 'passthroughVars' => array('route' => $this->generateUrl('mautic_chatchannel_list', array('page' => $page)), 'mauticContent' => 'chatChannel', 'replaceContent' => 'true', 'route' => false))); }