BxMassMailerTemplate.php 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. <?php defined('BX_DOL') or die('hack attempt');
  2. /**
  3. * Copyright (c) UNA, Inc - https://una.io
  4. * MIT License - https://opensource.org/licenses/MIT
  5. *
  6. * @defgroup MassMailer Mass Mailer
  7. * @ingroup UnaModules
  8. *
  9. * @{
  10. */
  11. class BxMassMailerTemplate extends BxBaseModGeneralTemplate
  12. {
  13. public function __construct(&$oConfig, &$oDb)
  14. {
  15. parent::__construct($oConfig, $oDb);
  16. }
  17. function getClicks($aData)
  18. {
  19. $aList = [];
  20. foreach($aData as $aItem)
  21. $aList[] = [
  22. 'title' => $aItem['title'],
  23. 'link' => $aItem['link'],
  24. 'last_click' => $this->_bIsApi ? $aItem['last_click'] : ($aItem['last_click'] > 0 ? bx_time_js($aItem['last_click']) : ''),
  25. 'click_count' => $aItem['click_count']
  26. ];
  27. if($this->_bIsApi)
  28. return array_merge([[
  29. 'title' => _t('_bx_massmailer_txt_title_title'),
  30. 'link' => _t('_bx_massmailer_txt_link_title'),
  31. 'last_click' => _t('_bx_massmailer_txt_last_click_title'),
  32. 'click_count' => _t('_bx_massmailer_txt_click_count_title'),
  33. ]], $aList);
  34. $this->addJs([BX_DIRECTORY_PATH_MODULES . 'boonex/massmailer/plugins/datatables/|datatables.min.js']);
  35. $this->addCss(['main.css', BX_DIRECTORY_PATH_MODULES . 'boonex/massmailer/plugins/datatables/|datatables.min.css']);
  36. return $this->parseHtmlByName('campaign_clicks.html', array(
  37. 'bx_repeat:items' => $aList,
  38. 'title_title' => _t('_bx_massmailer_txt_title_title'),
  39. 'link_title' => _t('_bx_massmailer_txt_link_title'),
  40. 'click_count_title' => _t('_bx_massmailer_txt_click_count_title'),
  41. 'last_click_title' => _t('_bx_massmailer_txt_last_click_title'),
  42. ));
  43. }
  44. function getInfo($CampaignId)
  45. {
  46. $CNF = &$this->getModule()->_oConfig->CNF;
  47. $aData = $this->_oModule->_oDb->getCampaignInfoById($CampaignId);
  48. $aDataStat = $this->_oModule->_oDb->getStatByCampaignId($CampaignId);
  49. $this->addJs(array('chart.umd.min.js', 'chart.js', BX_DIRECTORY_PATH_MODULES . 'boonex/massmailer/plugins/daterangepicker/|daterangepicker.js'));
  50. $this->addCss(array('main.css', BX_DIRECTORY_PATH_MODULES . 'boonex/massmailer/plugins/daterangepicker/|daterangepicker.css'));
  51. if($this->_bIsApi) {
  52. $aItems = [
  53. ['title' => '_bx_massmailer_txt_subject_title', 'value' => $aData[$CNF['FIELD_SUBJECT']]],
  54. ['title' => '_bx_massmailer_txt_body_title', 'value' => $aData[$CNF['FIELD_BODY']]],
  55. ['title' => '_bx_massmailer_txt_from_name_title', 'value' => $aData[$CNF['FIELD_FROM_NAME']]],
  56. ['title' => '_bx_massmailer_txt_reply_title', 'value' => $aData[$CNF['FIELD_REPLY_TO']]],
  57. ['title' => '_bx_massmailer_txt_created_title', 'value' => $aData[$CNF['FIELD_ADDED']]],
  58. ['title' => '_bx_massmailer_txt_sent_to_title', 'value' => $aData[$CNF['FIELD_DATE_SENT']]],
  59. ['title' => '_bx_massmailer_txt_sent_to_title', 'value' => $this->getModule()->getSegments($aData[$CNF['FIELD_SEGMENTS']])]
  60. ];
  61. array_walk($aItems, function(&$aItem) {
  62. $aItem['title'] = trim(_t($aItem['title']), ":");
  63. });
  64. return $aItems;
  65. }
  66. return $this->getJsCode('chart', array('sChartName' => 'CAMPAIGN_REPORT', 'sReportName' => $CampaignId)) . $this->parseHtmlByName('campaign_info.html', array(
  67. 'created_title' => _t('_bx_massmailer_txt_created_title'),
  68. 'subject_title' => _t('_bx_massmailer_txt_subject_title'),
  69. 'body_title' => _t('_bx_massmailer_txt_body_title'),
  70. 'sent_on_title' => _t('_bx_massmailer_txt_sent_on_title'),
  71. 'sent_to_title' => _t('_bx_massmailer_txt_sent_to_title'),
  72. 'sent_total_title' => _t('_bx_massmailer_txt_sent_total_title'),
  73. 'opened_total_title' => _t('_bx_massmailer_txt_opened_total_title'),
  74. 'unopened_total_title' => _t('_bx_massmailer_txt_unopened_total_title'),
  75. 'clicked_total_title' => _t('_bx_massmailer_txt_clicked_total_title'),
  76. 'reply_title' => _t('_bx_massmailer_txt_reply_title'),
  77. 'subject' => $aData[$CNF['FIELD_SUBJECT']],
  78. 'body' => $aData[$CNF['FIELD_BODY']],
  79. 'sent_on' => bx_time_js($aData[$CNF['FIELD_DATE_SENT']]),
  80. 'created' => bx_time_js($aData[$CNF['FIELD_ADDED']]),
  81. 'sent_to' => $this->getModule()->getSegments($aData[$CNF['FIELD_SEGMENTS']]),
  82. 'sent_total' => $aDataStat['total'],
  83. 'opened_total' => $aDataStat['seen'],
  84. 'unopened_total' => $aDataStat['total'] - $aDataStat['seen'],
  85. 'clicked_total' => $aDataStat['clicked'],
  86. 'bx_if:from_name' => array(
  87. 'condition' => $aData[$CNF['FIELD_FROM_NAME']] != '',
  88. 'content' => array(
  89. 'from_name_title' => _t('_bx_massmailer_txt_from_name_title'),
  90. 'from_name' => $aData[$CNF['FIELD_FROM_NAME']],
  91. )
  92. ),
  93. 'bx_if:reply' => array(
  94. 'condition' => $aData[$CNF['FIELD_REPLY_TO']] != '',
  95. 'content' => array(
  96. 'reply_title' => _t('_bx_massmailer_txt_reply_title'),
  97. 'reply' => $aData[$CNF['FIELD_REPLY_TO']],
  98. )
  99. ),
  100. ));
  101. }
  102. function getTotalSubscribers()
  103. {
  104. $CNF = &$this->getModule()->_oConfig->CNF;
  105. $this->addJs(array('chart.umd.min.js', 'chartjs-adapter-moment.min.js', 'chart.js', BX_DIRECTORY_PATH_MODULES . 'boonex/massmailer/plugins/daterangepicker/|daterangepicker.js'));
  106. $this->addCss(array('main.css', BX_DIRECTORY_PATH_MODULES . 'boonex/massmailer/plugins/daterangepicker/|daterangepicker.css'));
  107. $sDate = date('d/m/Y', time() - 90 * 86400) . ' - ' . date('d/m/Y');
  108. $aSegments = $this->_oModule->getSegments();
  109. $aTmp = array();
  110. foreach($aSegments as $sKey => $aSegment){
  111. $aTmp[$sKey] = $aSegment;
  112. }
  113. $oForm = new BxTemplFormView(array());
  114. $aInputReport = array(
  115. 'type' => 'select',
  116. 'name' => 'report',
  117. 'attrs' => ['class' => 'bx_massmailer_report_selector'],
  118. 'value' => 'content_total',
  119. 'values' => [
  120. 'content_total' => _t('_bx_massmailer_txt_title_content_total'),
  121. 'content_speed' => _t('_bx_massmailer_txt_title_content_speed')
  122. ]
  123. );
  124. $aInputSegments = array(
  125. 'type' => 'select',
  126. 'name' => 'segments',
  127. 'attrs' => ['class' => 'bx_massmailer_segments_selector'],
  128. 'value' => 'content_total',
  129. 'values' => $aTmp
  130. );
  131. $aInputInterval = array(
  132. 'type' => 'text',
  133. 'name' => 'interval',
  134. 'attrs' => ['class' => 'bx_massmailer_date_picker'],
  135. 'value' => $sDate
  136. );
  137. return $this->getJsCode('chart', array('sChartName' => 'SUBSCRIBERS_INFO')) . $this->parseHtmlByName('subscribers_info.html', array(
  138. 'report' => $oForm->genInput($aInputReport),
  139. 'segments' => $oForm->genInput($aInputSegments),
  140. 'interval' => $oForm->genInput($aInputInterval),
  141. ));
  142. }
  143. public function entryBreadcrumb($aContentInfo, $aTmplVarsItems = array())
  144. {
  145. $CNF = &$this->getModule()->_oConfig->CNF;
  146. $sTitleHome = $this->getModule()->_aModule['title'];
  147. $aTmplVarsItems = array(array(
  148. 'url' => $aContentInfo['url'],
  149. 'title' => bx_process_output($aContentInfo[$CNF['FIELD_TITLE']])
  150. ));
  151. return $this->parseHtmlByName('breadcrumb.html', array(
  152. 'url_home' => bx_absolute_url(BxDolPermalinks::getInstance()->permalink($CNF['URL_MANAGE_CAMPAIGNS'])),
  153. 'icon_home' => $CNF['ICON'],
  154. 'title_home' => bx_html_attribute(strip_tags(_t($sTitleHome ? $sTitleHome : '_sys_menu_item_title_system_home')), BX_ESCAPE_STR_QUOTE),
  155. 'bx_repeat:items' => $aTmplVarsItems
  156. ));
  157. }
  158. public function getAttributes($aAttributesParts)
  159. {
  160. $aList2 = array();
  161. foreach($aAttributesParts as $aPart){
  162. $aList = array();
  163. foreach($aPart[1] as $sKey => $sItem){
  164. $aList[] = array('title' => $sItem, 'attribute' => $sKey);
  165. }
  166. $aList2[] = array('title' => $aPart[0], 'list' => $this->parseHtmlByName('attributes_part.html', array('bx_repeat:items' => $aList)));
  167. }
  168. return $this->parseHtmlByName('attributes.html', array('bx_repeat:items' => $aList2));
  169. }
  170. }
  171. /** @} */