/** * Convenience method to merge if the message has a content areas template. * * @param string $templateBody the template body * @param int $messageId the message id * @param DAO $dao an instance of a DAO intended for unit testing * * @return string|false the generated HTML or false if the message does not have * a content areas template */ public static function mergeIfTemplate($templateBody, $messageId, DAO $dao = null) { if (!$templateBody) { return false; } $tm = new self($templateBody); if (!$tm->isTemplate()) { return false; } if ($dao === null) { $dao = new DAO(new DB()); } $mm = new MessageModel($messageId, $dao); return $tm->merge($mm->messageAreas()); }
protected function actionDisplay() { if (!isset($_POST['submit'])) { ob_end_clean(); echo $this->mergeTemplateWithMessage(true); exit; } $mm = new MessageModel($_GET['id'], $this->dao); $messageAreas = $mm->messageAreas(); $ref = Reference::decode(stripslashes($_REQUEST['field'])); $idRef = clone $ref; switch ($_POST['submit']) { case 'save': $newValue = $_POST['content']; if ($ref->repeat) { $messageAreas[$ref->repeat][$ref->instance][$ref->name] = $newValue; } else { $messageAreas[$ref->name] = $newValue; } $mm->replaceMessageAreas($messageAreas); break; case 'cancel': break; case 'add': if (!isset($messageAreas[$ref->repeat])) { $messageAreas[$ref->repeat] = array(); } array_splice($messageAreas[$ref->repeat], $ref->instance + 1, 0, array(array())); $mm->replaceMessageAreas($messageAreas); $idRef->instance += 1; break; case 'delete': if (isset($messageAreas[$ref->repeat][$ref->instance])) { unset($messageAreas[$ref->repeat][$ref->instance]); $messageAreas[$ref->repeat] = array_values($messageAreas[$ref->repeat]); $mm->replaceMessageAreas($messageAreas); $idRef->instance = $idRef->instance > 0 ? --$idRef->instance : $idRef->instance; } break; case 'up': if (isset($messageAreas[$ref->repeat][$ref->instance]) && isset($messageAreas[$ref->repeat][$ref->instance - 1])) { $temp = $messageAreas[$ref->repeat][$ref->instance - 1]; $messageAreas[$ref->repeat][$ref->instance - 1] = $messageAreas[$ref->repeat][$ref->instance]; $messageAreas[$ref->repeat][$ref->instance] = $temp; $mm->replaceMessageAreas($messageAreas); $idRef->instance -= 1; } break; case 'down': if (isset($messageAreas[$ref->repeat][$ref->instance]) && isset($messageAreas[$ref->repeat][$ref->instance + 1])) { $temp = $messageAreas[$ref->repeat][$ref->instance + 1]; $messageAreas[$ref->repeat][$ref->instance + 1] = $messageAreas[$ref->repeat][$ref->instance]; $messageAreas[$ref->repeat][$ref->instance] = $temp; $mm->replaceMessageAreas($messageAreas); $idRef->instance += 1; } break; case 'hide': $messageAreas[$ref->name][0]['_hidden'] = true; $mm->replaceMessageAreas($messageAreas); break; case 'unhide': $messageAreas[$ref->name][0]['_hidden'] = false; $mm->replaceMessageAreas($messageAreas); break; default: } $query = $_GET; unset($query['field']); $redirect = new PageURL('message_page', $query, $idRef->toId()); header('Location: ' . $redirect); exit; }
/** * @test */ public function mergesTemplateWithMessageId() { $daoStub = $this->getMockBuilder('phpList\\plugin\\ContentAreas\\DAO')->disableOriginalConstructor()->getMock(); $daoStub->method('messageData')->willReturn('SER:' . serialize(['article' => '<p>here is the article</p>'])); $tm = new TemplateModel('<html><body><div data-edit="article"></div></body></html>'); $mm = new MessageModel(123, $daoStub); $result = $tm->merge($mm->messageAreas()); $expected = "<!DOCTYPE html>\r\n<html><body><div><p>here is the article</p></div></body></html>\r\n"; $this->assertEquals($expected, $result); }