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.')); } }
/** * 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; }