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: