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