1: <?php
  2:   3:   4:   5:   6:   7:   8:   9:  10:  11:  12:  13:  14:  15:  16:  17:  18:  19:  20:  21:  22:  23:  24:  25:  26:  27:  28:  29:  30:  31:  32:  33:  34:  35: 
 36: 
 37:  38:  39: 
 40: 
 41: class TestEmailAction extends CAction {
 42: 
 43:     public function getBehaviors(){
 44:         return array(
 45:             'CampaignMailingBehavior' => array(
 46:                 'class' => 'application.modules.marketing.components.CampaignMailingBehavior'
 47:             ),
 48:             'responds' => array(
 49:                 'class' => 'application.components.ResponseBehavior',
 50:                 'errorCode' => 200
 51:             ),
 52:         );
 53:     }
 54: 
 55:     public function run(){
 56:         if (Yii::app()->user->isGuest) {
 57:             Yii::app()->controller->redirect(Yii::app()->controller->createUrl('/site/login'));
 58:         }
 59: 
 60:         $this->attachBehaviors($this->behaviors);
 61:         
 62: 
 63:         $scenario = 'custom';
 64:         $model = new TestEmailActionForm ();
 65:         $model->contactFlag = true;
 66:         $model->setScenario($scenario);
 67:         if(!isset($_POST['InlineEmail'])){
 68:             throw new CHttpException (400, Yii::t('marketing', 'Bad request'));
 69:         }
 70: 
 71:         $model->attributes = $_POST['InlineEmail'];
 72:         $responseMessage = '';
 73:         $sendStatus = array_fill_keys(array('code','message'),'');
 74:         $failed = false;
 75:         if ($model->validate ()) {
 76:             $model->campaign->content = $model->message;
 77:             $model->campaign->sendAs = $model->credId;
 78:             $this->asa ('CampaignMailingBehavior')->setCampaign ($model->campaign);
 79:             list($subject,$message,$uniqueId) = 
 80:                 self::prepareEmail ($model->campaign, $model->getTargetModel ());
 81: 
 82:             $this->deliverEmail ($model->mailingList, $model->subject, $message);
 83:             $sendStatus['code'] = $this->asa ('CampaignMailingBehavior')->status['code'];
 84:             $sendStatus['message'] = $this->asa ('CampaignMailingBehavior')->status['message'];
 85:             if ($this->asa ('CampaignMailingBehavior')->status['code'] == 200) {
 86:                 $responseMessage = Yii::t(
 87:                     'marketing','Test email sent successfully to {address}.',
 88:                     array('{address}' => $model->to));
 89:             } else {
 90:                 $responseMessage = Yii::t(
 91:                     'marketing','Test email sent could not be sent to {address}.',
 92:                     array('{address}' => $model->to));
 93:                 $failed = true;
 94:             }
 95:         }
 96: 
 97:         
 98:         $modelHasErrors = $model->hasErrors();
 99:         $failed = $failed || $modelHasErrors;
100:         $model->attachments = array (); 
101:         $response = array(
102:             'scenario' => $scenario,
103:             'sendStatus' => $sendStatus,
104:             'attributes' => $model->attributes,
105:             'modelErrors' => $model->errors,
106:             'failed' => $failed,
107:             'modelHasErrors' => $modelHasErrors,
108:             'modelErrorHtml' => CHtml::errorSummary(
109:                 $model,Yii::t('app', "Please fix the following errors:"),
110:                 null,
111:                 array('style'=>'margin-bottom: 5px;', 'class' => '')),
112:         );
113:         $this->mergeResponse($response);
114:         $this->respond($responseMessage,$failed);
115:     }
116: }
117: 
118: 119: 120: 
121: 
122: class TestEmailActionForm extends InlineEmail {
123:     public $campaignId;
124:     public $campaign;
125:     public $modelName = 'Contacts';
126:     public $recordName;
127: 
128:     public function rules () {
129:         return array_merge (parent::rules (), array (
130:             array (
131:                 'campaignId', 'required'
132:             ),
133:             array (
134:                 'modelName', 'required'
135:             ),
136:             array (
137:                 'recordName', 'safe'
138:             ),
139:             array (
140:                 'modelName', 'validateModelName'
141:             ),
142:             array (
143:                 'campaignId', 'validateCampaignId'
144:             ),
145:         ));
146:     }
147: 
148:     149: 150: 
151:     public function validateModelName ($attr) {
152:         $value = $this->$attr;
153:         $contact = null;
154:         if (isset ($this->modelId) && is_numeric ($this->modelId)) {
155:             $contact = Contacts::model ()->findByPk ($this->modelId);
156:         } else if (isset ($this->recordName)) {
157:             $contact = Contacts::model ()->findByAttributes (array (
158:                 'name' => $this->recordName
159:             ));
160:         }
161:         if (!$contact) $this->addError ($attr, Yii::t('app', 'Contact not found'));
162:         else $this->setTargetModel ($contact);
163:     }
164: 
165:     public function validateCampaignId ($attr) {
166:         $value = $this->$attr;
167:         $campaign = Campaign::model ()->findByPk ($value);
168:         if (!$campaign) {
169:             throw new CHttpException (400, Yii::t('marketing', 'Bad request'));
170:         }
171:         $this->campaign = $campaign;
172:     }
173: }
174: 
175: ?>
176: