public function testMake()
 {
     Yii::app()->languageHelper->load();
     $util = MergeTagsUtilFactory::make(EmailTemplate::TYPE_CONTACT, 'en', 'test');
     $this->assertTrue($util instanceof ContactMergeTagsUtil);
     $util = MergeTagsUtilFactory::make(EmailTemplate::TYPE_WORKFLOW, 'en', 'test');
     $this->assertTrue($util instanceof WorkflowMergeTagsUtil);
 }
 protected function resolveContentForMergeTags()
 {
     $language = null;
     $invalidTags = array();
     $type = EmailTemplate::TYPE_WORKFLOW;
     $model = Yii::app()->user->userModel;
     $params = $this->resolveMergeTagParams();
     $util = MergeTagsUtilFactory::make($type, $language, $this->placeholderContent);
     $resolvedContent = $util->resolveMergeTags($model, $invalidTags, $language, MergeTagsToModelAttributesAdapter::DO_NOT_ERROR_ON_FIRST_INVALID_TAG, $params);
     if ($resolvedContent !== false) {
         $this->placeholderContent = $resolvedContent;
     }
 }
 protected function resolveContentForMergeTags()
 {
     $language = null;
     $invalidTags = array();
     $type = EmailTemplate::TYPE_WORKFLOW;
     $model = Yii::app()->user->userModel;
     $params = $this->resolveMergeTagParams();
     $util = MergeTagsUtilFactory::make($type, $language, $this->placeholderContent);
     $resolvedContent = $util->resolveMergeTags($model, $invalidTags, $language, false, $params);
     if ($resolvedContent !== false) {
         $this->placeholderContent = $resolvedContent;
     }
 }
 protected static function resolveContent(&$textContent, &$htmlContent, Contact $contact)
 {
     // TODO: @Shoaibi/@Jason: High: we might add support for language in autoresponder.
     $language = null;
     $errorOnFirstMissing = true;
     $invalidTags = null;
     // this could be an empty array, only used when $errorOnFirstMissing is false
     $templateType = EmailTemplate::TYPE_CONTACT;
     $invalidTags = array();
     $textMergeTagsUtil = MergeTagsUtilFactory::make($templateType, $language, $textContent);
     $htmlMergeTagsUtil = MergeTagsUtilFactory::make($templateType, $language, $htmlContent);
     $resolvedTextContent = $textMergeTagsUtil->resolveMergeTags($contact, $invalidTags, $language, $errorOnFirstMissing);
     $resolvedHtmlContent = $htmlMergeTagsUtil->resolveMergeTags($contact, $invalidTags, $language, $errorOnFirstMissing);
     if ($resolvedTextContent && $resolvedHtmlContent) {
         $textContent = $resolvedTextContent;
         $htmlContent = $resolvedHtmlContent;
     } else {
         throw new NotSupportedException(Zurmo::t('EmailTemplatesModule', 'Provided content contains few invalid merge tags.'));
     }
 }
示例#5
0
 /**
  * Validates the attribute of the model.
  * If there is any error, the error message is added to the model.
  * @param RedBeanModel $object the model being validated
  * @param string $attribute the attribute being validated
  * @return boolean true if validation passed
  */
 protected function validateAttribute($object, $attribute)
 {
     $this->resolveMergeTagValidatorProperties($object);
     $passedValidation = true;
     if (!empty($object->{$attribute}) && @class_exists($this->modelClassName)) {
         $model = new $this->modelClassName(false);
         $mergeTagsUtil = MergeTagsUtilFactory::make($this->type, $this->language, $object->{$attribute});
         $invalidTags = array();
         $mergeTagCount = $mergeTagsUtil->extractMergeTagsPlaceHolders();
         if ($mergeTagCount && !$mergeTagsUtil->resolveMergeTagsArrayToAttributes($model, $invalidTags, null)) {
             $passedValidation = false;
             if (!empty($invalidTags)) {
                 foreach ($invalidTags as $tag) {
                     $errorMessage = EmailTemplateHtmlAndTextContentElement::renderModelAttributeLabel($attribute) . ': Invalid MergeTag({mergeTag}) used.';
                     $this->addError($object, $attribute, Zurmo::t('EmailTemplatesModule', $errorMessage, array('{mergeTag}' => $tag)));
                 }
             } else {
                 $this->addError($object, $attribute, Zurmo::t('EmailTemplatesModule', 'Provided content contains few invalid merge tags.'));
             }
         }
     }
     return $passedValidation;
 }
 protected static function resolveContentForNestedMergeTags(&$resolvedSpecialMergeTagContent, $model = null, $errorOnFirstMissing = MergeTagsToModelAttributesAdapter::DO_NOT_ERROR_ON_FIRST_INVALID_TAG, $params = array())
 {
     $language = null;
     $type = EmailTemplate::TYPE_WORKFLOW;
     $invalidTags = array();
     $language = null;
     if ($model instanceof Contact) {
         $type = EmailTemplate::TYPE_CONTACT;
     }
     $util = MergeTagsUtilFactory::make($type, $language, $resolvedSpecialMergeTagContent);
     $resolvedContent = $util->resolveMergeTags($model, $invalidTags, $language, $errorOnFirstMissing, $params);
     if ($resolvedContent !== false) {
         $resolvedSpecialMergeTagContent = $resolvedContent;
     }
 }
 /**
  * If the content cannot be resolved for the merge tags, then use the original content
  * @param EmailTemplate $emailTemplate
  * @return string
  */
 protected function resolveEmailTemplateHtmlContentForModelData(EmailTemplate $emailTemplate)
 {
     $mergeTagsUtil = MergeTagsUtilFactory::make($emailTemplate->type, $emailTemplate->language, $emailTemplate->htmlContent);
     if (false === ($resolvedContent = $mergeTagsUtil->resolveMergeTags($this->triggeredModel))) {
         return $emailTemplate->htmlContent;
     }
     return $resolvedContent;
 }
 /**
  * Resolve content for merge tags and return resolution result
  * @param $content
  * @param RedBeanModel $attachedModel
  * @param int $emailTemplateType
  * @param int $errorOnFirstMissing
  * @param null $language
  * @param array $invalidTags
  * @param null $marketingListId
  * @param bool $preview
  * @param null $modelId
  * @param null $modelType
  * @param null $personId
  * @param bool $isHtmlContent
  * @return bool
  * @throws NotSupportedException
  */
 public static function resolveContentForMergeTags(&$content, RedBeanModel $attachedModel = null, $emailTemplateType = EmailTemplate::TYPE_CONTACT, $errorOnFirstMissing = MergeTagsToModelAttributesAdapter::ERROR_ON_FIRST_INVALID_TAG, $language = null, array &$invalidTags = array(), $marketingListId = null, $preview = false, $modelId = null, $modelType = null, $personId = null, $isHtmlContent = false)
 {
     $params = GlobalMarketingFooterUtil::resolveFooterMergeTagsArray($personId, $marketingListId, $modelId, $modelType, !$preview, $preview, $isHtmlContent);
     $util = MergeTagsUtilFactory::make($emailTemplateType, $language, $content);
     $resolvedContent = $util->resolveMergeTags($attachedModel, $invalidTags, $language, $errorOnFirstMissing, $params);
     if ($resolvedContent !== false) {
         $content = $resolvedContent;
         return true;
     }
     return false;
 }
 /**
  * @depends testLastYearMergeTag
  */
 public function testBaseUrlMergeTag()
 {
     $content = '[[BASE^URL]]';
     $mergeTagsUtil = MergeTagsUtilFactory::make(EmailTemplate::TYPE_WORKFLOW, null, $content);
     $this->assertTrue($mergeTagsUtil instanceof MergeTagsUtil);
     $this->assertTrue($mergeTagsUtil instanceof WorkflowMergeTagsUtil);
     $resolvedContent = $mergeTagsUtil->resolveMergeTags(self::$emailTemplate, $this->invalidTags);
     $this->assertTrue($resolvedContent !== false);
     $this->assertNotEquals($resolvedContent, $content);
     $this->assertTrue(strpos($resolvedContent, 'localhost') === 0);
     $this->assertEmpty($this->invalidTags);
 }
 protected function resolveValueForMergeTags($value, WorkflowActionProcessingModelAdapter $adapter)
 {
     $mergeTagsUtil = MergeTagsUtilFactory::make(EmailTemplate::TYPE_WORKFLOW, Yii::app()->languageHelper->getByUser($adapter->getTriggeredByUser()), $value);
     if (false === ($resolvedValue = $mergeTagsUtil->resolveMergeTags($adapter->getTriggeredModel()))) {
         return $value;
     }
     return $resolvedValue;
 }
 protected static function resolveContentForMergeTags(&$content)
 {
     $language = null;
     $errorOnFirstMissing = true;
     $templateType = EmailTemplate::TYPE_CONTACT;
     $invalidTags = array();
     $textMergeTagsUtil = MergeTagsUtilFactory::make($templateType, $language, $content);
     $params = GlobalMarketingFooterUtil::resolveFooterMergeTagsArray(1, 2, 3, 'AutoresponderITem', true, false);
     $content = $textMergeTagsUtil->resolveMergeTags(Yii::app()->user->userModel, $invalidTags, $language, $errorOnFirstMissing, $params);
     return $content !== false;
 }
 protected static function resolveMergeTagsUtil($content)
 {
     $language = static::resolveLanguageForContent();
     $templateType = static::resolveEmailTemplateType();
     $util = MergeTagsUtilFactory::make($templateType, $language, $content);
     return $util;
 }
 /**
  * @depends testOwnersEmailSignatureMergeTag
  */
 public function testHasManyRelation()
 {
     $content = '[[HAS^MANY__EMAIL^TEMPLATE^MODEL^TEST^ITEM2]]';
     $mergeTagsUtil = MergeTagsUtilFactory::make(EmailTemplate::TYPE_WORKFLOW, null, $content);
     $this->assertTrue($mergeTagsUtil instanceof MergeTagsUtil);
     $this->assertTrue($mergeTagsUtil instanceof WorkflowMergeTagsUtil);
     $resolvedContent = $mergeTagsUtil->resolveMergeTags(self::$emailTemplate, $this->invalidTags);
     $this->assertTrue($resolvedContent !== false);
     $this->assertNotEquals($resolvedContent, $content);
     $expectedContent = 'manyChangedName, newOriginalName';
     $this->assertEquals($expectedContent, $resolvedContent);
     $this->assertEmpty($this->invalidTags);
 }
 /**
  * @depends testOwnersAvatarLargeMergeTag
  */
 public function testOwnersEmailSignatureMergeTag()
 {
     $content = '[[OWNERS^EMAIL^SIGNATURE]]';
     $mergeTagsUtil = MergeTagsUtilFactory::make(EmailTemplate::TYPE_CONTACT, null, $content);
     $this->assertTrue($mergeTagsUtil instanceof MergeTagsUtil);
     $this->assertTrue($mergeTagsUtil instanceof ContactMergeTagsUtil);
     $resolvedContent = $mergeTagsUtil->resolveMergeTags(self::$contact, $this->invalidTags);
     $this->assertTrue($resolvedContent !== false);
     $this->assertNotEquals($resolvedContent, $content);
     $expectedEmailSignature = 'my email signature';
     $this->assertEquals($expectedEmailSignature, $resolvedContent);
     $this->assertEmpty($this->invalidTags);
 }
 /**
  * Resolve merge tags present in html
  * @param $html
  * @param OwnedSecurableItem $attachedMergeTagModel
  * @param null $type
  * @param null $language
  * @return bool|string
  * @throws FailedToResolveMergeTagsException
  */
 public static function resolveMergeTagsByModel($html, OwnedSecurableItem $attachedMergeTagModel, $type = null, $language = null)
 {
     $invalidTags = array();
     if (!isset($type)) {
         $type = EmailTemplate::TYPE_CONTACT;
         if (get_class($attachedMergeTagModel) != 'Contact') {
             $type = EmailTemplate::TYPE_WORKFLOW;
         }
     }
     $mergeTagsUtil = MergeTagsUtilFactory::make($type, $language, $html);
     $resolvedContent = $mergeTagsUtil->resolveMergeTags($attachedMergeTagModel, $invalidTags, $language);
     if ($resolvedContent == false) {
         throw new FailedToResolveMergeTagsException();
     }
     return $resolvedContent;
 }