protected function resolveContentByPostSourceData(array $sourceData) { $content = parent::resolveContentByPostSourceData($sourceData); if (static::PREFER_SERIALIZED_DATA_OVER_HTML_CONTENT && isset($sourceData['serializedData'])) { $content['htmlContent'] = EmailTemplateSerializedDataToHtmlUtil::resolveHtmlBySerializedData($sourceData['serializedData']); } return $content; }
public static function convertAndPrettifyEmailByModel(EmailTemplate $emailTemplate, $converter = null, $prettyPrint = false) { $htmlContent = $emailTemplate->htmlContent; if (empty($htmlContent)) { $htmlContent = EmailTemplateSerializedDataToHtmlUtil::resolveHtmlByEmailTemplateModel($emailTemplate, false); } $htmlContent = static::convertAndPrettifyEmailByHtmlContent($htmlContent, $converter, $prettyPrint); return $htmlContent; }
/** * @depends testSaveWithValidDataWithValidation * @depends testGetHtmlContentActionForBuilder */ public function testSaveWithBaseTemplateIdUpdate() { $emailTemplateId = self::getModelIdByModelNameAndName('EmailTemplate', 'builder 02'); $emailTemplate = EmailTemplate::getById($emailTemplateId); $oldUnserializedData = CJSON::decode($emailTemplate->serializedData); $oldBaseTemplateId = ArrayUtil::getArrayValue($oldUnserializedData, 'baseTemplateId'); $baseTemplateId = self::getModelIdByModelNameAndName('EmailTemplate', 'builder 01'); $baseTemplate = EmailTemplate::getById($baseTemplateId); $expectedUnserializedData = CJSON::decode($baseTemplate->serializedData); unset($expectedUnserializedData['icon']); $expectedUnserializedData['baseTemplateId'] = $baseTemplate->id; $expectedHtmlContent = EmailTemplateSerializedDataToHtmlUtil::resolveHtmlByUnserializedData($expectedUnserializedData); $post = array('BuilderEmailTemplateWizardForm' => array('name' => 'builder 02', 'subject' => 'builder 02', 'type' => 2, 'builtType' => 3, 'isDraft' => 0, 'language' => '', 'hiddenId' => $emailTemplateId, 'modelClassName' => 'Contact', 'ownerId' => 1, 'ownerName' => 'Super User', 'explicitReadWriteModelPermissions' => array('nonEveryoneGroup' => 3, 'type' => 1), 'baseTemplateId' => $baseTemplateId, 'serializedData' => array('baseTemplateId' => $baseTemplateId, 'dom' => CJSON::encode($oldUnserializedData['dom'])), 'originalBaseTemplateId' => $oldBaseTemplateId, 'textContent' => 'some text changed'), 'validationScenario' => BuilderEmailTemplateWizardForm::PLAIN_AND_RICH_CONTENT_VALIDATION_SCENARIO, 'ajax' => 'edit-form'); $this->setGetArray(array('builtType' => EmailTemplate::BUILT_TYPE_BUILDER_TEMPLATE)); $this->setPostArray($post); $content = $this->runControllerWithExitExceptionAndGetContent('emailTemplates/default/save'); $jsonDecodedContent = CJSON::decode($content); $this->assertEmpty($jsonDecodedContent); // now send the actual save request unset($post['ajax']); $this->setPostArray($post); $content = $this->runControllerWithExitExceptionAndGetContent('emailTemplates/default/save'); $jsonDecodedContent = CJSON::decode($content); $this->assertNotEmpty($jsonDecodedContent); $this->assertCount(3, $jsonDecodedContent); $this->assertArrayHasKey('id', $jsonDecodedContent); $this->assertEquals($emailTemplateId, $jsonDecodedContent['id']); $this->assertArrayHasKey('redirectToList', $jsonDecodedContent); $this->assertFalse($jsonDecodedContent['redirectToList']); $this->assertArrayHasKey('moduleClassName', $jsonDecodedContent); $this->assertEquals('ContactsModule', $jsonDecodedContent['moduleClassName']); // ensure htmlContent was generated. $emailTemplate->forgetAll(); unset($emailTemplate); $emailTemplate = EmailTemplate::getById($emailTemplateId); $unserializedData = CJSON::decode($emailTemplate->serializedData); $this->assertEquals($expectedUnserializedData, $unserializedData); $this->assertEquals('some text changed', $emailTemplate->textContent); $this->assertEquals($expectedHtmlContent, $emailTemplate->htmlContent); }
public function actionSendTestEmail($id, $contactId = null, $emailAddress = null, $useHtmlContent = 1) { $emailTemplate = EmailTemplate::getById(intval($id)); ControllerSecurityUtil::resolveAccessCanCurrentUserReadModel($emailTemplate); $htmlContent = $emailTemplate->htmlContent; if (!$useHtmlContent) { $htmlContent = EmailTemplateSerializedDataToHtmlUtil::resolveHtmlByEmailTemplateModel($emailTemplate, false); } $contact = null; if (isset($contactId)) { $contact = Contact::getById(intval($contactId)); } static::resolveEmailMessage($emailTemplate, $contact, $htmlContent, $emailAddress); }
public function __set($attributeName, $value) { parent::__set($attributeName, $value); // we exclude predefined because: // a- we don't want htmlContent compiled for those. It wont be used anywhere anyway. // b- Using console installer we get errors due to getAssetManager(used in BuilderCanvasElement) // not being available in CConsoleApplication if ($attributeName == 'serializedData' && $this->isBuilderTemplate() && !$this->isPredefinedBuilderTemplate() && ArrayUtil::getArrayValue(CJSON::decode($this->serializedData), 'dom')) { $this->htmlContent = EmailTemplateSerializedDataToHtmlUtil::resolveHtmlBySerializedData($this->serializedData, false); } }
public function actionRenderPreview($id = null, $useHtmlContent = 1) { Yii::app()->clientScript->setToAjaxMode(); if (isset($id)) { $emailTemplate = EmailTemplate::getById(intval($id)); ControllerSecurityUtil::resolveAccessCanCurrentUserReadModel($emailTemplate); $content = $emailTemplate->htmlContent; if (!$useHtmlContent || empty($content)) { $content = EmailTemplateSerializedDataToHtmlUtil::resolveHtmlByEmailTemplateModel($emailTemplate, false); } Yii::app()->clientScript->render($content); echo $content; Yii::app()->end(0, false); } $serializedDataArray = Yii::app()->request->getPost('serializedData'); if (!Yii::app()->request->isPostRequest || $serializedDataArray === null) { Yii::app()->end(0, false); } $content = EmailTemplateSerializedDataToHtmlUtil::resolveHtmlBySerializedData($serializedDataArray, false); Yii::app()->clientScript->render($content); echo $content; }