1: <?php
2:
3: /*****************************************************************************************
4: * X2Engine Open Source Edition is a customer relationship management program developed by
5: * X2Engine, Inc. Copyright (C) 2011-2016 X2Engine Inc.
6: *
7: * This program is free software; you can redistribute it and/or modify it under
8: * the terms of the GNU Affero General Public License version 3 as published by the
9: * Free Software Foundation with the addition of the following permission added
10: * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
11: * IN WHICH THE COPYRIGHT IS OWNED BY X2ENGINE, X2ENGINE DISCLAIMS THE WARRANTY
12: * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
13: *
14: * This program is distributed in the hope that it will be useful, but WITHOUT
15: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
16: * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
17: * details.
18: *
19: * You should have received a copy of the GNU Affero General Public License along with
20: * this program; if not, see http://www.gnu.org/licenses or write to the Free
21: * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
22: * 02110-1301 USA.
23: *
24: * You can contact X2Engine, Inc. P.O. Box 66752, Scotts Valley,
25: * California 95067, USA. or at email address contact@x2engine.com.
26: *
27: * The interactive user interfaces in modified source and object code versions
28: * of this program must display Appropriate Legal Notices, as required under
29: * Section 5 of the GNU Affero General Public License version 3.
30: *
31: * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
32: * these Appropriate Legal Notices must retain the display of the "Powered by
33: * X2Engine" logo. If the display of the logo is not reasonably feasible for
34: * technical reasons, the Appropriate Legal Notices must display the words
35: * "Powered by X2Engine".
36: *****************************************************************************************/
37:
38: /**
39: *
40: * @property integer $campaignSize The total number of items in the campaign.
41: * @property array $listItems The list item IDs for this campaign (that haven't
42: * already been sent)
43: * @property integer $sentCount Number of emails sent already (or undeliverable)
44: * @package application.components
45: * @author Demitri Morgan <demitri@x2engine.com>
46: */
47: class EmailProgressControl extends X2Widget {
48:
49: private $_listItems;
50: private $_sentCount;
51: public $campaign;
52: public $JSClass = 'EmailProgressControl';
53:
54:
55: public function getCampaignSize() {
56: return count($this->listItems) + $this->sentCount;
57: }
58:
59: public function getListItems() {
60: if(!isset($this->_listItems,$this->_sentCount)) {
61: $allListItems = CampaignMailingBehavior::deliverableItems($this->campaign->list->id);
62: $this->_listItems = array();
63: $this->_sentCount = 0;
64: foreach($allListItems as $listItem) {
65: if($listItem['sent'] == 0)
66: $this->_listItems[] = $listItem['id'];
67: else
68: $this->_sentCount++;
69: }
70: }
71: return $this->_listItems;
72: }
73:
74: public function getSentCount() {
75: if(!isset($this->_sentCount)) {
76: $this->getListItems(); // This will set _sentCount
77: }
78: return $this->_sentCount;
79: }
80:
81: public function getPackages () {
82: if (!isset ($this->_packages)) {
83: $this->_packages = array_merge (parent::getPackages(), array (
84: 'emailProgressControl' => array(
85: 'baseUrl' => $this->module->assetsUrl,
86: 'css' => array (
87: '/css/emailProgressControl.css'
88: ),
89: 'js' => array(
90: '/js/emailProgressControl.js'
91: ),
92: ))
93: );
94: }
95: return $this->_packages;
96: }
97:
98: public function getJSClassParams () {
99: $totalEmails = count($this->listItems) + $this->sentCount;
100:
101: if (!isset ($this->_JSClassParams)) {
102: $this->_JSClassParams = array_merge ( parent::getJSClassParams(),
103: array(
104: 'sentCount' => $this->sentCount,
105: 'totalEmails' => $totalEmails,
106: 'listItems' => $this->listItems,
107: 'sendUrl' => Yii::app()->controller->createUrl ('/marketing/marketing/mailIndividual'),
108: 'campaignId' => $this->campaign->id,
109: 'paused' => !(isset($_GET['launch']) && $_GET['launch'])
110: )
111: );
112: }
113: return $this->_JSClassParams;
114: }
115:
116: public function run() {
117: $this->render('emailProgressControl');
118: $this->registerPackages ();
119: $this->instantiateJSClass(true);
120: }
121:
122: public function getTranslations() {
123: return array(
124: 'confirm' => Yii::t('marketing', 'You have unsent mail in this campaign. Are you sure you want to forcibly mark this campaign as complete?'),
125: 'pause' => Yii::t('marketing', 'Pause'),
126: 'complete' => Yii::t('marketing', 'Email Delivery Complete'),
127: 'resume' => Yii::t('marketing', 'Resume'),
128: 'error' => Yii::t('marketing', 'Could not send email due to an error in the request to the server.')
129: );
130: }
131: }
132:
133: ?>
134: