protected function makeBuilderPredefinedEmailTemplate($name, $unserializedData, $subject = null, $modelClassName = null, $language = null, $type = null, $isDraft = 0, $textContent = null, $htmlContent = null) { $emailTemplate = new EmailTemplate(); $emailTemplate->type = $type; //EmailTemplate::TYPE_WORKFLOW; $emailTemplate->builtType = EmailTemplate::BUILT_TYPE_BUILDER_TEMPLATE; $emailTemplate->isDraft = $isDraft; $emailTemplate->modelClassName = $modelClassName; $emailTemplate->name = $name; if (empty($subject)) { $subject = $name; } $emailTemplate->subject = $subject; if (!isset($language)) { $language = Yii::app()->languageHelper->getForCurrentUser(); } $emailTemplate->language = $language; $emailTemplate->htmlContent = $htmlContent; $emailTemplate->textContent = $textContent; $emailTemplate->serializedData = CJSON::encode($unserializedData); $emailTemplate->addPermissions(Group::getByName(Group::EVERYONE_GROUP_NAME), Permission::READ_WRITE_CHANGE_PERMISSIONS_CHANGE_OWNER); $saved = $emailTemplate->save(false); if (!$saved) { throw new FailedToSaveModelException(); } $emailTemplate = EmailTemplate::getById($emailTemplate->id); ReadPermissionsOptimizationUtil::securableItemGivenPermissionsForGroup($emailTemplate, Group::getByName(Group::EVERYONE_GROUP_NAME)); $saved = $emailTemplate->save(false); assert('$saved'); }
/** * Send a "close pend ticket" email to the end user. (created, taken, etc...) */ function sendemail($messageno, $target, $id) { $template = EmailTemplate::getById($messageno, gGetDb()); $headers = 'From: accounts-enwiki-l@lists.wikimedia.org'; // Get the closing user's Email signature and append it to the Email. if (User::getCurrent()->getEmailSig() != "") { $emailsig = html_entity_decode(User::getCurrent()->getEmailSig(), ENT_QUOTES, "UTF-8"); mail($target, "RE: [ACC #{$id}] English Wikipedia Account Request", $template->getText() . "\n\n" . $emailsig, $headers); } else { mail($target, "RE: [ACC #{$id}] English Wikipedia Account Request", $template->getText(), $headers); } }
protected static function resolveEmailTemplateContent(WorkflowMessageInQueue $model) { $unserializedData = unserialize($model->serializedData); try { if (isset($unserializedData[0]) && isset($unserializedData[0]['emailTemplateId'])) { $emailTemplate = EmailTemplate::getById((int) $unserializedData[0]['emailTemplateId']); $modelContent = strval($emailTemplate); } else { throw new NotFoundException(); } } catch (AccessDeniedSecurityException $e) { $modelContent = Zurmo::t('Core', 'Restricted'); } catch (NotFoundException $e) { $modelContent = Zurmo::t('ZurmoModule', 'Record no longer exists'); } return ' — <span class="less-pronounced-text">' . $modelContent . '</span>'; }
/** * @throws MissingRecipientsForEmailMessageException */ public function process() { $emailTemplate = EmailTemplate::getById((int) $this->emailMessageForm->emailTemplateId); $emailMessage = new EmailMessage(); $emailMessage->owner = $this->triggeredByUser; $emailMessage->subject = $this->resolveEmailTemplateSubjectForModelData($emailTemplate); $emailContent = new EmailMessageContent(); $emailContent->textContent = $this->resolveEmailTemplateTextContentForModelData($emailTemplate); $emailContent->htmlContent = $this->resolveEmailTemplateHtmlContentForModelData($emailTemplate); $emailMessage->content = $emailContent; $emailMessage->sender = $this->resolveSender(); $this->resolveRecipients($emailMessage); if ($emailMessage->recipients->count() == 0) { throw new MissingRecipientsForEmailMessageException(); } $box = EmailBox::resolveAndGetByName(EmailBox::NOTIFICATIONS_NAME); $emailMessage->folder = EmailFolder::getByBoxAndType($box, EmailFolder::TYPE_DRAFT); Yii::app()->emailHelper->send($emailMessage); }
public function testCreateAndGetEmailTemplateById() { $emailTemplate = new EmailTemplate(); $emailTemplate->type = EmailTemplate::TYPE_CONTACT; $emailTemplate->subject = 'Test subject'; $emailTemplate->modelClassName = 'Contact'; $emailTemplate->name = 'Test Email Template'; $emailTemplate->htmlContent = 'Test html Content'; $emailTemplate->textContent = 'Test text Content'; $this->assertTrue($emailTemplate->save()); $id = $emailTemplate->id; unset($emailTemplate); $emailTemplate = EmailTemplate::getById($id); $this->assertEquals(EmailTemplate::TYPE_CONTACT, $emailTemplate->type); $this->assertEquals('Test subject', $emailTemplate->subject); $this->assertEquals('Test Email Template', $emailTemplate->name); $this->assertEquals('Test html Content', $emailTemplate->htmlContent); $this->assertEquals('Test text Content', $emailTemplate->textContent); $this->assertEquals(1, count(EmailTemplate::getAll())); }
/** * @param DemoDataHelper $demoDataHelper */ public function makeAll(&$demoDataHelper) { assert('$demoDataHelper instanceof DemoDataHelper'); assert('$demoDataHelper->isSetRange("User")'); $emailTemplates = array(); $types = array_keys(EmailTemplate::getTypeDropDownArray()); for ($this->index = 0; $this->index < 7; $this->index++) { $emailTemplate = new EmailTemplate(); $emailTemplate->type = $types[$this->index % 2]; $emailTemplate->owner = $demoDataHelper->getRandomByModelName('User'); $this->populateModel($emailTemplate); $emailTemplate->addPermissions(Group::getByName(Group::EVERYONE_GROUP_NAME), Permission::READ_WRITE_CHANGE_PERMISSIONS_CHANGE_OWNER); $saved = $emailTemplate->save(); assert('$saved'); $emailTemplate = EmailTemplate::getById($emailTemplate->id); ReadPermissionsOptimizationUtil::securableItemGivenPermissionsForGroup($emailTemplate, Group::getByName(Group::EVERYONE_GROUP_NAME)); $emailTemplate->save(); $emailTemplates[] = $emailTemplate->id; } $demoDataHelper->setRangeByModelName('EmailTemplate', $emailTemplates[0], $emailTemplates[count($emailTemplates) - 1]); }
/** * @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); }
protected static function resolveSerializedDataForTemplateByPostData() { $unserializedData = array(); $postUnserializedData = ArrayUtil::getArrayValue(static::$data, 'serializedData'); $templateUnserializedData = CJSON::decode(static::$emailTemplate->serializedData); if (empty($templateUnserializedData)) { $templateUnserializedData = array('baseTemplateId' => null); } // dom element would be empty till we get to canvas screen and hit save/finish at least once on create // we need to unset it so if user does not change pre-selected base template on step 2 and moves to canvas // during step 2, we don't end up purging baseTemplate's dom we loaded in step1's save. if (empty($postUnserializedData['dom'])) { unset($postUnserializedData['dom']); } else { // if it is set then it is most probably in $postUnserializedData['dom'] = CJSON::decode($postUnserializedData['dom']); } if (static::hasBaseTemplateIdChanged($postUnserializedData['baseTemplateId'], $templateUnserializedData['baseTemplateId'])) { // baseTemplateId has changed. $baseTemplateModel = EmailTemplate::getById(intval($postUnserializedData['baseTemplateId'])); $unserializedData = CJSON::decode($baseTemplateModel->serializedData); unset($unserializedData['icon']); $unserializedData['baseTemplateId'] = $postUnserializedData['baseTemplateId']; } elseif ($templateUnserializedData != $postUnserializedData) { // baseTemplateId remains same, probably a post from canvas if (isset($postUnserializedData['dom']) && isset($templateUnserializedData['dom'])) { unset($templateUnserializedData['dom']); } $unserializedData = CMap::mergeArray($templateUnserializedData, $postUnserializedData); } if (!empty($unserializedData)) { static::$emailTemplate->serializedData = CJSON::encode($unserializedData); } // we don't need this as we "continue" in the invoker if block but still... unset(static::$data['serializedData']); }
/** * @depends testSuperUserDetailsJsonActionForWorkflow */ public function testSuperUserDetailsActionForWorkflow() { $emailTemplateId = self::getModelIdByModelNameAndName('EmailTemplate', 'New Test Workflow Email Template 00'); $emailTemplate = EmailTemplate::getById($emailTemplateId); $this->setGetArray(array('id' => $emailTemplateId)); $content = $this->runControllerWithNoExceptionsAndGetContent('emailTemplates/default/details'); $this->assertTrue(strpos($content, '<span class="ellipsis-content">' . $emailTemplate->name . '</span>') !== false); $this->assertTrue(strpos($content, '<span>Options</span>') !== false); $this->assertTrue(strpos($content, 'emailTemplates/default/edit?id=' . $emailTemplateId) !== false); $this->assertTrue(strpos($content, 'emailTemplates/default/delete?id=' . $emailTemplateId) !== false); $this->assertTrue(strpos($content, '<th>Name</th><td colspan="1">' . $emailTemplate->name . '</td>') !== false); $this->assertTrue(strpos($content, '<th>Subject</th><td colspan="1">' . $emailTemplate->subject . '</td>') !== false); $this->assertTrue(strpos($content, '<div class="tabs-nav"><a class="active-tab" href="#tab1">') !== false); $this->assertTrue(strpos($content, '<a href="#tab2">') !== false); }
/** * Resolve html for a builder template provided its id * @param $emailTemplateId * @param bool $renderForCanvas * @return bool|null|string */ public static function resolveHtmlByEmailTemplateId($emailTemplateId, $renderForCanvas = false) { $emailTemplate = EmailTemplate::getById(intval($emailTemplateId)); $resolvedHtml = static::resolveHtmlByEmailTemplateModel($emailTemplate, $renderForCanvas); return $resolvedHtml; }
if ($nameCheck != false && $nameCheck->getId() != $_GET['edit']) { BootstrapSkin::displayAlertBox("That Email template name is already being used. Please choose another."); BootstrapSkin::displayInternalFooter(); die; } $database->transactionally(function () use($database, $emailTemplate) { $emailTemplate->save(); Logger::editedEmail($database, $emailTemplate); global $baseurl; Notification::emailEdited($emailTemplate); SessionAlert::success("Email template has been saved successfully."); header("Location: {$baseurl}/acc.php?action=emailmgmt"); }); die; } $emailTemplate = EmailTemplate::getById($_GET['edit'], gGetDb()); $smarty->assign('id', $emailTemplate->getId()); $smarty->assign('emailTemplate', $emailTemplate); $smarty->assign('createdid', $createdid); $smarty->assign('requeststates', $availableRequestStates); $smarty->assign('emailmgmtpage', 'Edit'); // Use a variable so we don't need two Smarty templates for creating and editing. $smarty->display("email-management/edit.tpl"); BootstrapSkin::displayInternalFooter(); die; } $query = "SELECT * FROM emailtemplate WHERE active = 1"; $statement = gGetDb()->prepare($query); $statement->execute(); $rows = $statement->fetchAll(PDO::FETCH_CLASS, "EmailTemplate"); $smarty->assign('activeemails', $rows);
/** * @depends testCreateAndGetEmailTemplateById */ public function testHtmlContentGetsSavedCorrectly() { $randomData = ZurmoRandomDataUtil::getRandomDataByModuleAndModelClassNames('EmailTemplatesModule', 'EmailTemplate'); $htmlContent = $randomData['htmlContent'][count($randomData['htmlContent']) - 1]; $emailTemplate = new EmailTemplate(); $emailTemplate->type = EmailTemplate::TYPE_CONTACT; $emailTemplate->builtType = EmailTemplate::BUILT_TYPE_PASTED_HTML; $emailTemplate->subject = 'Another Test subject'; $emailTemplate->name = 'Another Test Email Template'; $emailTemplate->textContent = 'Text Content'; $emailTemplate->htmlContent = $htmlContent; $emailTemplate->modelClassName = 'Contact'; $this->assertTrue($emailTemplate->save()); $emailTemplateId = $emailTemplate->id; $emailTemplate->forgetAll(); $emailTemplate = EmailTemplate::getById($emailTemplateId); $this->assertEquals($htmlContent, $emailTemplate->htmlContent); }
/** * Summary of getLogDescription * @param Log $entry * @return string */ public static function getLogDescription(Log $entry) { $text = "Deferred to "; if (substr($entry->getAction(), 0, strlen($text)) == $text) { // Deferred to a different queue // This is exactly what we want to display. return $entry->getAction(); } $text = "Closed custom-n"; if ($entry->getAction() == $text) { // Custom-closed return "closed (custom reason - account not created)"; } $text = "Closed custom-y"; if ($entry->getAction() == $text) { // Custom-closed return "closed (custom reason - account created)"; } $text = "Closed 0"; if ($entry->getAction() == $text) { // Dropped the request - short-circuit the lookup return "dropped request"; } $text = "Closed "; if (substr($entry->getAction(), 0, strlen($text)) == $text) { // Closed with a reason - do a lookup here. $id = substr($entry->getAction(), strlen($text)); $template = EmailTemplate::getById((int) $id, $entry->getDatabase()); if ($template != false) { return "closed (" . $template->getName() . ")"; } } // Fall back to the basic stuff $lookup = array('Reserved' => 'reserved', 'Email Confirmed' => 'email-confirmed', 'Unreserved' => 'unreserved', 'Approved' => 'approved', 'Suspended' => 'suspended', 'Banned' => 'banned', 'Edited' => 'edited interface message', 'Declined' => 'declined', 'EditComment-c' => 'edited a comment', 'EditComment-r' => 'edited a comment', 'Unbanned' => 'unbanned', 'Promoted' => 'promoted to tool admin', 'BreakReserve' => 'forcibly broke the reservation', 'Prefchange' => 'changed user preferences', 'Renamed' => 'renamed', 'Demoted' => 'demoted from tool admin', 'ReceiveReserved' => 'received the reservation', 'SendReserved' => 'sent the reservation', 'EditedEmail' => 'edited email', 'DeletedTemplate' => 'deleted template', 'EditedTemplate' => 'edited template', 'CreatedEmail' => 'created email', 'CreatedTemplate' => 'created template', 'SentMail' => 'sent an email to the requestor'); if (array_key_exists($entry->getAction(), $lookup)) { return $lookup[$entry->getAction()]; } // OK, I don't know what this is. Fall back to something sane. return "performed an unknown action ({$entry->getAction()})"; }
/** * Resolve html for a builder template provided its id * @param $emailTemplateId * @param bool $renderForCanvas * @param OwnedSecurableItem $attachedMergeTagModel * @return bool|null|string */ public static function resolveHtmlByEmailTemplateId($emailTemplateId, $renderForCanvas = false, OwnedSecurableItem $attachedMergeTagModel = null) { $emailTemplate = EmailTemplate::getById(intval($emailTemplateId)); $resolvedHtml = static::resolveHtmlByEmailTemplateModel($emailTemplate, $renderForCanvas, $attachedMergeTagModel); return $resolvedHtml; }
function zoomPage($id, $urlhash) { global $session, $availableRequestStates, $createdid; global $smarty, $locationProvider, $rdnsProvider, $antispoofProvider; global $xffTrustProvider, $enableEmailConfirm; $database = gGetDb(); $request = Request::getById($id, $database); if ($request == false) { // Notifies the user and stops the script. BootstrapSkin::displayAlertBox("Could not load the requested request!", "alert-error", "Error", true, false); BootstrapSkin::displayInternalFooter(); die; } $smarty->assign('ecenable', $enableEmailConfirm); if (isset($_GET['ecoverride']) && User::getCurrent()->isAdmin()) { $smarty->assign('ecoverride', true); } else { $smarty->assign('ecoverride', false); } $smarty->assign('request', $request); $smarty->assign("usernamerawunicode", html_entity_decode($request->getName())); $smarty->assign("iplocation", $locationProvider->getIpLocation($request->getTrustedIp())); $createdreason = EmailTemplate::getById($createdid, gGetDb()); $smarty->assign("createdEmailTemplate", $createdreason); #region setup whether data is viewable or not $viewableDataStatement = $database->prepare(<<<SQL SELECT COUNT(*) FROM request WHERE ( email = :email OR ip = :trustedIp OR forwardedip LIKE :trustedProxy ) AND reserved = :reserved AND emailconfirm = 'Confirmed' AND status != 'Closed'; SQL ); $viewableDataStatement->bindValue(":email", $request->getEmail()); $viewableDataStatement->bindValue(":reserved", User::getCurrent()->getId()); $viewableDataStatement->bindValue(":trustedIp", $request->getTrustedIp()); $viewableDataStatement->bindValue(":trustedProxy", '%' . $request->getTrustedIp() . '%'); $viewableDataStatement->execute(); $viewableData = $viewableDataStatement->fetchColumn(); $viewableDataStatement->closeCursor(); $hideinfo = $viewableData == 0; #endregion if ($request->getStatus() == "Closed") { $hash = md5($request->getId() . $request->getEmail() . $request->getTrustedIp() . microtime()); //If the request is closed, change the hash based on microseconds similar to the checksums. $smarty->assign("isclosed", true); } else { $hash = md5($request->getId() . $request->getEmail() . $request->getTrustedIp()); $smarty->assign("isclosed", false); } $smarty->assign("hash", $hash); if ($hash == $urlhash) { $correcthash = true; } else { $correcthash = false; } $smarty->assign("showinfo", false); if ($hideinfo == false || $correcthash == true || User::getCurrent()->isAdmin() || User::getCurrent()->isCheckuser()) { $smarty->assign("showinfo", true); } // force to not show, overriden later $smarty->assign("proxyip", ""); if ($hideinfo == false || $correcthash == true || User::getCurrent()->isAdmin() || User::getCurrent()->isCheckuser()) { $smarty->assign("proxyip", $request->getForwardedIp()); if ($request->getForwardedIp()) { $smartyproxies = array(); // Initialize array to store data to be output in Smarty template. $smartyproxiesindex = 0; $proxies = explode(",", $request->getForwardedIp()); $proxies[] = $request->getIp(); $origin = $proxies[0]; $smarty->assign("origin", $origin); $proxies = array_reverse($proxies); $trust = true; global $rfc1918ips; foreach ($proxies as $proxynum => $p) { $p2 = trim($p); $smartyproxies[$smartyproxiesindex]['ip'] = $p2; // get data on this IP. $trusted = $xffTrustProvider->isTrusted($p2); $ipisprivate = ipInRange($rfc1918ips, $p2); if (!$ipisprivate) { $iprdns = $rdnsProvider->getRdns($p2); $iplocation = $locationProvider->getIpLocation($p2); } else { // this is going to fail, so why bother trying? $iprdns = false; $iplocation = false; } // current trust chain status BEFORE this link $pretrust = $trust; // is *this* link trusted? $smartyproxies[$smartyproxiesindex]['trustedlink'] = $trusted; // current trust chain status AFTER this link $trust = $trust & $trusted; if ($pretrust && $p2 == $origin) { $trust = true; } $smartyproxies[$smartyproxiesindex]['trust'] = $trust; $smartyproxies[$smartyproxiesindex]['rdnsfailed'] = $iprdns === false; $smartyproxies[$smartyproxiesindex]['rdns'] = $iprdns; $smartyproxies[$smartyproxiesindex]['routable'] = !$ipisprivate; $smartyproxies[$smartyproxiesindex]['location'] = $iplocation; if ($iprdns == $p2 && $ipisprivate == false) { $smartyproxies[$smartyproxiesindex]['rdns'] = null; } $smartyproxies[$smartyproxiesindex]['showlinks'] = (!$trust || $p2 == $origin) && !$ipisprivate; $smartyproxiesindex++; } $smarty->assign("proxies", $smartyproxies); } } global $defaultRequestStateKey; // TODO: remove me and replace with call in the template directly $smarty->assign("isprotected", $request->isProtected()); $smarty->assign("defaultstate", $defaultRequestStateKey); $smarty->assign("requeststates", $availableRequestStates); try { $spoofs = $antispoofProvider->getSpoofs($request->getName()); } catch (Exception $ex) { $spoofs = $ex->getMessage(); } $smarty->assign("spoofs", $spoofs); // START LOG DISPLAY $logs = Logger::getRequestLogsWithComments($request->getId(), $request->getDatabase()); $requestLogs = array(); if (trim($request->getComment()) !== "") { $requestLogs[] = array('type' => 'comment', 'security' => 'user', 'userid' => null, 'user' => $request->getName(), 'entry' => null, 'time' => $request->getDate(), 'canedit' => false, 'id' => $request->getId(), 'comment' => $request->getComment()); } $namecache = array(); $editableComments = false; if (User::getCurrent()->isAdmin() || User::getCurrent()->isCheckuser()) { $editableComments = true; } foreach ($logs as $entry) { // both log and comment have a 'user' field if (!array_key_exists($entry->getUser(), $namecache)) { $namecache[$entry->getUser()] = $entry->getUserObject(); } if ($entry instanceof Comment) { $requestLogs[] = array('type' => 'comment', 'security' => $entry->getVisibility(), 'user' => $namecache[$entry->getUser()]->getUsername(), 'userid' => $entry->getUser() == -1 ? null : $entry->getUser(), 'entry' => null, 'time' => $entry->getTime(), 'canedit' => $editableComments || $entry->getUser() == User::getCurrent()->getId(), 'id' => $entry->getId(), 'comment' => $entry->getComment()); } if ($entry instanceof Log) { $requestLogs[] = array('type' => 'log', 'security' => 'user', 'userid' => $entry->getUser() == -1 ? null : $entry->getUser(), 'user' => $namecache[$entry->getUser()]->getUsername(), 'entry' => Logger::getLogDescription($entry), 'time' => $entry->getTimestamp(), 'canedit' => false, 'id' => $entry->getId(), 'comment' => $entry->getComment()); } } $smarty->assign("requestLogs", $requestLogs); // START OTHER REQUESTS BY IP AND EMAIL STUFF // Displays other requests from this ip. // assign to user $userListQuery = "SELECT username FROM user WHERE status = 'User' or status = 'Admin';"; $userListResult = gGetDb()->query($userListQuery); $userListData = $userListResult->fetchAll(PDO::FETCH_COLUMN); $userListProcessedData = array(); foreach ($userListData as $userListItem) { $userListProcessedData[] = "\"" . htmlentities($userListItem) . "\""; } $userList = '[' . implode(",", $userListProcessedData) . ']'; $smarty->assign("jsuserlist", $userList); // end: assign to user // TODO: refactor this! $createreasons = EmailTemplate::getActiveTemplates(EmailTemplate::CREATED); $smarty->assign("createreasons", $createreasons); $declinereasons = EmailTemplate::getActiveTemplates(EmailTemplate::NOT_CREATED); $smarty->assign("declinereasons", $declinereasons); $allcreatereasons = EmailTemplate::getAllActiveTemplates(EmailTemplate::CREATED); $smarty->assign("allcreatereasons", $allcreatereasons); $alldeclinereasons = EmailTemplate::getAllActiveTemplates(EmailTemplate::NOT_CREATED); $smarty->assign("alldeclinereasons", $alldeclinereasons); $allotherreasons = EmailTemplate::getAllActiveTemplates(false); $smarty->assign("allotherreasons", $allotherreasons); return $smarty->fetch("request-zoom.tpl"); }
/** * @depends testRegularUserAllDefaultControllerActions */ public function testRegularUserCreateActionForWorkflow() { // TODO: @Shoaibi/@Jason: Medium: Even if a user doesn't have module permission he can sent that modelClassName in POST // nobody needs access to meetings ans contact to have that in ddl. $this->user->setRight('ContactsModule', ContactsModule::getAccessRight()); $this->user->setRight('MeetingsModule', MeetingsModule::getAccessRight()); $this->assertTrue($this->user->save()); // Create a new emailTemplate and test validator. $this->setGetArray(array('type' => EmailTemplate::TYPE_WORKFLOW)); $this->setPostArray(array('EmailTemplate' => array('type' => EmailTemplate::TYPE_WORKFLOW, 'name' => 'New Test Workflow EmailTemplate', 'subject' => 'New Test Subject'))); $content = $this->runControllerWithNoExceptionsAndGetContent('emailTemplates/default/create'); $this->assertTrue(strpos($content, 'Create Email Template') !== false); $this->assertFalse(strpos($content, '<select name="EmailTemplate[type]" id="EmailTemplate_type">') !== false); $this->assertTrue(strpos($content, '<select name="EmailTemplate[modelClassName]" id="EmailTemplate_modelClassName_value"') !== false); $this->assertTrue(strpos($content, 'Please provide at least one of the contents field.') !== false); $this->assertTrue(strpos($content, 'Module cannot be blank.') !== false); // Create a new emailTemplate and test merge tags validator. $this->setPostArray(array('EmailTemplate' => array('type' => EmailTemplate::TYPE_WORKFLOW, 'modelClassName' => 'Meeting', 'name' => 'New Test Workflow EmailTemplate', 'subject' => 'New Test Subject', 'textContent' => 'This is text content [[INVALID^TAG]]', 'htmlContent' => 'This is Html content [[INVALIDTAG]]'))); $content = $this->runControllerWithNoExceptionsAndGetContent('emailTemplates/default/create'); $this->assertTrue(strpos($content, 'Create Email Template') !== false); $this->assertFalse(strpos($content, '<select name="EmailTemplate[type]" id="EmailTemplate_type">') !== false); $this->assertTrue(strpos($content, '<select name="EmailTemplate[modelClassName]" id="EmailTemplate_modelClassName_value">') !== false); $this->assertTrue(strpos($content, '<option value="Meeting" selected="selected">Meetings</option>') !== false); $this->assertTrue(strpos($content, 'INVALID^TAG') !== false); $this->assertTrue(strpos($content, 'INVALIDTAG') !== false); $this->assertEquals(2, substr_count($content, 'INVALID^TAG')); $this->assertEquals(2, substr_count($content, 'INVALIDTAG')); // Create a new emailTemplate and save it. $this->setPostArray(array('EmailTemplate' => array('type' => EmailTemplate::TYPE_WORKFLOW, 'name' => 'New Test Workflow EmailTemplate', 'modelClassName' => 'Contact', 'subject' => 'New Test Subject [[FIRST^NAME]]', 'textContent' => 'New Text Content [[FIRST^NAME]]'))); $redirectUrl = $this->runControllerWithRedirectExceptionAndGetUrl('emailTemplates/default/create'); $emailTemplateId = self::getModelIdByModelNameAndName('EmailTemplate', 'New Test Workflow EmailTemplate'); $emailTemplate = EmailTemplate::getById($emailTemplateId); $this->assertTrue($emailTemplate->id > 0); $this->assertEquals('New Test Subject [[FIRST^NAME]]', $emailTemplate->subject); $this->assertEquals('New Text Content [[FIRST^NAME]]', $emailTemplate->textContent); $this->assertTrue($emailTemplate->owner == $this->user); $compareRedirectUrl = Yii::app()->createUrl('emailTemplates/default/details', array('id' => $emailTemplate->id)); $this->assertEquals($compareRedirectUrl, $redirectUrl); $emailTemplates = EmailTemplate::getAll(); $this->assertEquals(1, count($emailTemplates)); }
public function actionConvertEmail($id, $converter = null) { $emailTemplate = EmailTemplate::getById(intval($id)); ControllerSecurityUtil::resolveAccessCanCurrentUserReadModel($emailTemplate); $htmlContent = ZurmoCssInlineConverterUtil::convertAndPrettifyEmailByModel($emailTemplate, $converter); echo $htmlContent; }