/**
  * @param array|\ArrayObject $options
  * @param MessageContent     $content
  *
  * @return array|\ArrayObject
  * @SuppressWarnings(PHPMD.LongVariable)
  * @SuppressWarnings(PHPMD.CyclomaticComplexity)
  * @SuppressWarnings(PHPMD.NPathComplexity)
  * @SuppressWarnings(PHPMD.Superglobals)
  */
 public function getCellContentTypeOptions($options = array(), MessageContent $content = null)
 {
     $message = $content->getMessage();
     $layout = $message->getLayout();
     if (!$layout || $layout->getType() != 'mailChimp') {
         return $options;
     }
     $allowedTypes = array($content->getType());
     list($group, $mailChimpTemplate) = explode(':', $layout->getMailchimpTemplate());
     if (isset($GLOBALS['AVISOTA_MAILCHIMP_TEMPLATE'][$group][$mailChimpTemplate])) {
         $config = $GLOBALS['AVISOTA_MAILCHIMP_TEMPLATE'][$group][$mailChimpTemplate];
         if (isset($config['cells'][$content->getCell()])) {
             $cellConfig = $config['cells'][$content->getCell()];
             if (!isset($cellConfig['content'])) {
                 if (isset($cellConfig['preferredElements'])) {
                     $allowedTypes = array_merge($allowedTypes, $cellConfig['preferredElements']);
                 } else {
                     foreach ($GLOBALS['TL_MCE'] as $elements) {
                         foreach ($elements as $elementType) {
                             $allowedTypes[] = $elementType;
                         }
                     }
                 }
             }
         }
     }
     foreach ($layout->getAllowedCellContents() as $allowedCellContentType) {
         list($cell, $elementType) = explode(':', $allowedCellContentType);
         if ($cell == $content->getCell()) {
             $allowedTypes[] = $elementType;
         }
     }
     foreach ($options as $group => &$values) {
         if (is_array($values)) {
             foreach ($values as $key => $value) {
                 if (!in_array($key, $allowedTypes) && $value) {
                     unset($values[$key]);
                 }
             }
         } else {
             if (!in_array($group, $allowedTypes)) {
                 unset($options[$group]);
             }
         }
     }
     return $options;
 }
 /**
  * @param MessageContent $messageContent
  *
  * @return array
  */
 protected function handleMessageContent(MessageContent $messageContent)
 {
     switch ($messageContent->getType()) {
         case 'event':
             $elementIdMethod = 'getEventIdWithTimestamp';
             $containerModelName = 'Contao\\CalendarEventsModel';
             break;
         default:
             $elementIdMethod = 'get' . ucfirst($messageContent->getType()) . 'Id';
             $containerModelName = ucfirst($messageContent->getType()) . 'Model';
             if (!method_exists($messageContent, $elementIdMethod)) {
                 return array();
             }
             break;
     }
     $contents = array();
     foreach ($messageContent->{$elementIdMethod}() as $elementId) {
         /** @var \Model $containerModel */
         $containerModel = $containerModelName::findByPk($elementId);
         $elements = array($messageContent);
         if ($containerModel) {
             $elements = array_merge($elements, $this->findContainerCustomTemplates($containerModel));
         }
         $contents = array_merge($contents, $elements);
     }
     return $contents;
 }