예제 #1
0
 /**
  * @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);
 }
예제 #2
0
 /**
  * @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)));
 }