PageRenderTime 55ms CodeModel.GetById 28ms RepoModel.GetById 0ms app.codeStats 0ms

/backend/modules/mailmotor/actions/index.php

https://github.com/lowiebenoot/forkcms
PHP | 310 lines | 141 code | 61 blank | 108 comment | 17 complexity | fff6c2aa4cfe65e9866d711bb45fb49e MD5 | raw file
  1. <?php
  2. /*
  3. * This file is part of Fork CMS.
  4. *
  5. * For the full copyright and license information, please view the license
  6. * file that was distributed with this source code.
  7. */
  8. /**
  9. * This is the index-action (default), it will display the overview of mailings
  10. *
  11. * @author Dave Lens <dave.lens@netlash.com>
  12. */
  13. class BackendMailmotorIndex extends BackendBaseActionIndex
  14. {
  15. // limits
  16. const QUEUED_MAILINGS_PAGING_LIMIT = 10;
  17. const SENT_MAILINGS_PAGING_LIMIT = 10;
  18. const UNSENT_MAILINGS_PAGING_LIMIT = 10;
  19. /**
  20. * The active campaign
  21. *
  22. * @var array
  23. */
  24. private $campaign = array();
  25. /**
  26. * DataGrids
  27. *
  28. * @var BackendDataGrid
  29. */
  30. private $dgQueuedMailings, $dgSentMailings, $dgUnsentMailings;
  31. /**
  32. * Execute the action
  33. */
  34. public function execute()
  35. {
  36. parent::execute();
  37. // update the queued mailings with 'sent' status if their time has come already
  38. BackendMailmotorModel::updateQueuedMailings();
  39. // get the active campaign
  40. $this->getCampaign();
  41. // load datagrid
  42. $this->loadDataGrids();
  43. // parse page
  44. $this->parse();
  45. // display the page
  46. $this->display();
  47. }
  48. /**
  49. * Fetches the campaign ID and sets its record
  50. */
  51. private function getCampaign()
  52. {
  53. // get the active campaign
  54. $id = $this->getParameter('campaign', 'int');
  55. // fetch the campaign record
  56. $this->campaign = BackendMailmotorModel::getCampaign($id);
  57. }
  58. /**
  59. * Loads the datagrid with the unsent mailings
  60. */
  61. private function loadDataGridQueuedMailings()
  62. {
  63. // set query & parameters
  64. $query = BackendMailmotorModel::QRY_DATAGRID_BROWSE_SENT;
  65. $parameters = array('queued');
  66. // campaign is set
  67. if(!empty($this->campaign))
  68. {
  69. // reset query, add to parameters
  70. $query = BackendMailmotorModel::QRY_DATAGRID_BROWSE_SENT_FOR_CAMPAIGN;
  71. $parameters[] = $this->campaign['id'];
  72. }
  73. // create datagrid
  74. $this->dgQueuedMailings = new BackendDataGridDB($query, $parameters);
  75. $this->dgQueuedMailings->setColumnsHidden(array('campaign_id', 'status'));
  76. // if a campaign is set, hide the campaign name in the datagrid
  77. if(!empty($this->campaign)) $this->dgQueuedMailings->setColumnHidden('campaign_name');
  78. // set headers values
  79. $headers['sent'] = SpoonFilter::ucfirst(BL::lbl('WillBeSentOn'));
  80. // set headers
  81. $this->dgQueuedMailings->setHeaderLabels($headers);
  82. // sorting columns
  83. $this->dgQueuedMailings->setSortingColumns(array('name', 'campaign_name', 'sent', 'language'), 'name');
  84. $this->dgQueuedMailings->setSortParameter('desc');
  85. // add the multicheckbox column
  86. $this->dgQueuedMailings->addColumn('checkbox', '<span class="checkboxHolder"><input type="checkbox" name="toggleChecks" value="toggleChecks" /></span>', '<span><input type="checkbox" name="id[]" value="[id]" class="inputCheckbox" /></span>');
  87. $this->dgQueuedMailings->setColumnsSequence('checkbox');
  88. // add mass action dropdown
  89. $ddmMassAction = new SpoonFormDropdown('action', array('delete' => BL::lbl('Delete')), 'delete');
  90. $this->dgQueuedMailings->setMassAction($ddmMassAction);
  91. // set column functions
  92. $this->dgQueuedMailings->setColumnFunction(array(__CLASS__, 'setCampaignLink'), array('[campaign_id]', '[campaign_name]'), 'campaign_name', true);
  93. $this->dgQueuedMailings->setColumnFunction('date', array('Y-m-d @ H:i', '[sent]'), 'sent', true);
  94. // check if this action is allowed
  95. if(BackendAuthentication::isAllowedAction('copy'))
  96. {
  97. $this->dgQueuedMailings->addColumnAction('copy', null, BL::lbl('Copy'), BackendModel::createURLForAction('copy') . '&amp;id=[id]', BL::lbl('Copy'), array('class' => 'button icon iconMailAdd linkButton'));
  98. }
  99. // check if this action is allowed
  100. if(BackendAuthentication::isAllowedAction('edit_mailing_campaign'))
  101. {
  102. $this->dgQueuedMailings->addColumnAction('edit_mailing_campaign', null, BL::lbl('Edit'), BackendModel::createURLForAction('edit_mailing_campaign') . '&amp;id=[id]', BL::lbl('EditMailingCampaign'), array('class' => 'button icon iconFolderEdit linkButton'));
  103. }
  104. // check if this action is allowed
  105. if(BackendAuthentication::isAllowedAction('statistics'))
  106. {
  107. $this->dgQueuedMailings->addColumnAction('statistics', null, BL::lbl('Statistics'), BackendModel::createURLForAction('statistics') . '&amp;id=[id]', BL::lbl('Statistics'), array('class' => 'button icon iconStats linkButton'));
  108. }
  109. // add styles
  110. $this->dgQueuedMailings->setColumnAttributes('name', array('class' => 'title'));
  111. // set paging limit
  112. $this->dgQueuedMailings->setPagingLimit(self::SENT_MAILINGS_PAGING_LIMIT);
  113. }
  114. /**
  115. * Loads the datagrids for mailings
  116. */
  117. private function loadDataGrids()
  118. {
  119. // load sent mailings
  120. $this->loadDataGridQueuedMailings();
  121. // load unsent mailings
  122. $this->loadDataGridUnsentMailings();
  123. // load sent mailings
  124. $this->loadDataGridSentMailings();
  125. }
  126. /**
  127. * Loads the datagrid with the unsent mailings
  128. */
  129. private function loadDataGridSentMailings()
  130. {
  131. // set query & parameters
  132. $query = BackendMailmotorModel::QRY_DATAGRID_BROWSE_SENT;
  133. $parameters = array('sent');
  134. // campaign is set
  135. if(!empty($this->campaign))
  136. {
  137. // reset query, add to parameters
  138. $query = BackendMailmotorModel::QRY_DATAGRID_BROWSE_SENT_FOR_CAMPAIGN;
  139. $parameters[] = $this->campaign['id'];
  140. }
  141. // create datagrid
  142. $this->dgSentMailings = new BackendDataGridDB($query, $parameters);
  143. $this->dgSentMailings->setColumnsHidden(array('campaign_id', 'status'));
  144. // if a campaign is set, hide the campaign name in the datagrid
  145. if(!empty($this->campaign)) $this->dgSentMailings->setColumnHidden('campaign_name');
  146. // sorting columns
  147. $this->dgSentMailings->setSortingColumns(array('name', 'campaign_name', 'sent', 'language'), 'sent');
  148. $this->dgSentMailings->setSortParameter('desc');
  149. // add the multicheckbox column
  150. $this->dgSentMailings->addColumn('checkbox', '<span class="checkboxHolder"><input type="checkbox" name="toggleChecks" value="toggleChecks" /></span>', '<span><input type="checkbox" name="id[]" value="[id]" class="inputCheckbox" /></span>');
  151. $this->dgSentMailings->setColumnsSequence('checkbox');
  152. // add mass action dropdown
  153. $ddmMassAction = new SpoonFormDropdown('action', array('delete' => BL::lbl('Delete')), 'delete');
  154. $this->dgSentMailings->setMassAction($ddmMassAction);
  155. // set column functions
  156. $this->dgSentMailings->setColumnFunction(array(__CLASS__, 'setCampaignLink'), array('[campaign_id]', '[campaign_name]'), 'campaign_name', true);
  157. $this->dgSentMailings->setColumnFunction(array('BackendDataGridFunctions', 'getTimeAgo'), array('[sent]'), 'sent', true);
  158. // check if this action is allowed
  159. if(BackendAuthentication::isAllowedAction('copy'))
  160. {
  161. $this->dgSentMailings->addColumnAction('copy', null, BL::lbl('Copy'), BackendModel::createURLForAction('copy') . '&amp;id=[id]', BL::lbl('Copy'), array('class' => 'button icon iconMailAdd linkButton'));
  162. }
  163. // check if this action is allowed
  164. if(BackendAuthentication::isAllowedAction('edit_mailing_campaign'))
  165. {
  166. $this->dgSentMailings->addColumnAction('edit_mailing_campaign', null, BL::lbl('Edit'), BackendModel::createURLForAction('edit_mailing_campaign') . '&amp;id=[id]', BL::lbl('EditMailingCampaign'), array('class' => 'button icon iconFolderEdit linkButton'));
  167. }
  168. // check if this action is allowed
  169. if(BackendAuthentication::isAllowedAction('statistics'))
  170. {
  171. $this->dgSentMailings->addColumnAction('statistics', null, BL::lbl('Statistics'), BackendModel::createURLForAction('statistics') . '&amp;id=[id]', BL::lbl('Statistics'), array('class' => 'button icon iconStats linkButton'));
  172. }
  173. // add styles
  174. $this->dgUnsentMailings->setColumnAttributes('name', array('class' => 'title'));
  175. // set paging limit
  176. $this->dgSentMailings->setPagingLimit(self::SENT_MAILINGS_PAGING_LIMIT);
  177. }
  178. /**
  179. * Loads the datagrid with the unsent mailings
  180. */
  181. private function loadDataGridUnsentMailings()
  182. {
  183. // set query & parameters
  184. $query = BackendMailmotorModel::QRY_DATAGRID_BROWSE_UNSENT;
  185. $parameters = array('concept');
  186. // campaign is set
  187. if(!empty($this->campaign))
  188. {
  189. // reset query, add to parameters
  190. $query = BackendMailmotorModel::QRY_DATAGRID_BROWSE_UNSENT_FOR_CAMPAIGN;
  191. $parameters[] = $this->campaign['id'];
  192. }
  193. // create datagrid
  194. $this->dgUnsentMailings = new BackendDataGridDB($query, $parameters);
  195. $this->dgUnsentMailings->setColumnsHidden(array('campaign_id', 'status'));
  196. // if a campaign is set, hide the campaign name in the datagrid
  197. if(!empty($this->campaign)) $this->dgUnsentMailings->setColumnHidden('campaign_name');
  198. // sorting columns
  199. $this->dgUnsentMailings->setSortingColumns(array('name', 'campaign_name', 'created_on', 'language'), 'created_on');
  200. $this->dgUnsentMailings->setSortParameter('desc');
  201. // check if this action is allowed
  202. if(BackendAuthentication::isAllowedAction('edit'))
  203. {
  204. // set colum URLs
  205. $this->dgUnsentMailings->setColumnURL('name', BackendModel::createURLForAction('edit') . '&amp;id=[id]');
  206. // add edit column
  207. $this->dgUnsentMailings->addColumn('edit', null, BL::lbl('Edit'), BackendModel::createURLForAction('edit') . '&amp;id=[id]', BL::lbl('Edit'));
  208. }
  209. // add the multicheckbox column
  210. $this->dgUnsentMailings->addColumn('checkbox', '<span class="checkboxHolder"><input type="checkbox" name="toggleChecks" value="toggleChecks" /></span>', '<span><input type="checkbox" name="id[]" value="[id]" class="inputCheckbox" /></span>');
  211. $this->dgUnsentMailings->setColumnsSequence('checkbox');
  212. // add mass action dropdown
  213. $ddmMassAction = new SpoonFormDropdown('action', array('delete' => BL::lbl('Delete')), 'delete');
  214. $this->dgUnsentMailings->setMassAction($ddmMassAction);
  215. // set column functions
  216. $this->dgUnsentMailings->setColumnFunction(array('BackendMailmotorIndex', 'setCampaignLink'), array('[campaign_id]', '[campaign_name]'), 'campaign_name', true);
  217. $this->dgUnsentMailings->setColumnFunction(array('BackendDataGridFunctions', 'getTimeAgo'), array('[created_on]'), 'created_on', true);
  218. // add styles
  219. $this->dgUnsentMailings->setColumnAttributes('name', array('class' => 'title'));
  220. // set paging limit
  221. $this->dgUnsentMailings->setPagingLimit(self::UNSENT_MAILINGS_PAGING_LIMIT);
  222. }
  223. /**
  224. * Parse all datagrids
  225. */
  226. protected function parse()
  227. {
  228. parent::parse();
  229. // a campaign was found, so parse the campaign record
  230. if(!empty($this->campaign)) $this->tpl->assign($this->campaign);
  231. // parse the datagrid for all unsent mailings
  232. $this->tpl->assign('dgUnsentMailings', ($this->dgUnsentMailings->getNumResults() != 0) ? $this->dgUnsentMailings->getContent() : false);
  233. // parse the datagrid for all sent mailings
  234. $this->tpl->assign('dgSentMailings', ($this->dgSentMailings->getNumResults() != 0) ? $this->dgSentMailings->getContent() : false);
  235. // parse the datagrid for all queued mailings
  236. $this->tpl->assign('dgQueuedMailings', ($this->dgQueuedMailings->getNumResults() != 0) ? $this->dgQueuedMailings->getContent() : false);
  237. }
  238. /**
  239. * Sets the correct campaign link in the datagrid
  240. *
  241. * @param int $id The ID of the campaign.
  242. * @param string $name The name of the campaign.
  243. * @return string
  244. */
  245. public static function setCampaignLink($id, $name)
  246. {
  247. return !empty($name) ? '<a href="' . SITE_URL . BackendModel::createURLForAction('index') . '&amp;campaign=' . $id . '">' . $name . '</a>' : SpoonFilter::ucfirst(BL::lbl('NoCampaign'));
  248. }
  249. }