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;
 }