Example #1
0
    /**
     * PreProcess page slots for public view.
     *
     * @param array $slots
     * @param Page  $entity
     */
    private function processSlots($slots, $entity)
    {
        /** @var \Mautic\CoreBundle\Templating\Helper\AssetsHelper $assetsHelper */
        $assetsHelper = $this->factory->getHelper('template.assets');
        /** @var \Mautic\CoreBundle\Templating\Helper\SlotsHelper $slotsHelper */
        $slotsHelper = $this->factory->getHelper('template.slots');
        /** @var \Mautic\CoreBundle\Templating\Helper\TranslatorHelper $translatorHelper */
        $translatorHelper = $this->factory->getHelper('template.translator');
        $formFactory = $this->get('form.factory');
        $slotsHelper->inBuilder(true);
        $content = $entity->getContent();
        foreach ($slots as $slot => $slotConfig) {
            // backward compatibility - if slotConfig array does not exist
            if (is_numeric($slot)) {
                $slot = $slotConfig;
                $slotConfig = [];
            }
            // define default config if does not exist
            if (!isset($slotConfig['type'])) {
                $slotConfig['type'] = 'html';
            }
            if (!isset($slotConfig['placeholder'])) {
                $slotConfig['placeholder'] = 'mautic.page.builder.addcontent';
            }
            $value = isset($content[$slot]) ? $content[$slot] : '';
            if ($slotConfig['type'] == 'slideshow') {
                if (isset($content[$slot])) {
                    $options = json_decode($content[$slot], true);
                } else {
                    $options = ['width' => '100%', 'height' => '250px', 'background_color' => 'transparent', 'arrow_navigation' => false, 'dot_navigation' => true, 'interval' => 5000, 'pause' => 'hover', 'wrap' => true, 'keyboard' => true];
                }
                // Create sample slides for first time or if all slides were deleted
                if (empty($options['slides'])) {
                    $options['slides'] = [['order' => 0, 'background-image' => $assetsHelper->getUrl('media/images/mautic_logo_lb200.png'), 'captionheader' => 'Caption 1'], ['order' => 1, 'background-image' => $assetsHelper->getUrl('media/images/mautic_logo_db200.png'), 'captionheader' => 'Caption 2']];
                }
                // Order slides
                usort($options['slides'], function ($a, $b) {
                    return strcmp($a['order'], $b['order']);
                });
                $options['slot'] = $slot;
                $options['public'] = false;
                // create config form
                $options['configForm'] = $formFactory->createNamedBuilder(null, 'slideshow_config', [], ['data' => $options])->getForm()->createView();
                // create slide config forms
                foreach ($options['slides'] as $key => &$slide) {
                    $slide['key'] = $key;
                    $slide['slot'] = $slot;
                    $slide['form'] = $formFactory->createNamedBuilder(null, 'slideshow_slide_config', [], ['data' => $slide])->getForm()->createView();
                }
                $renderingEngine = $this->container->get('templating');
                if (method_exists($renderingEngine, 'getEngine')) {
                    $renderingEngine->getEngine('MauticPageBundle:Page:Slots/slideshow.html.php');
                }
                $slotsHelper->set($slot, $renderingEngine->render('MauticPageBundle:Page:Slots/slideshow.html.php', $options));
            } else {
                $slotsHelper->set($slot, "<div data-slot=\"text\" id=\"slot-{$slot}\">{$value}</div>");
            }
        }
        //add builder toolbar
        $slotsHelper->start('builder');
        ?>
        <input type="hidden" id="builder_entity_id" value="<?php 
        echo $entity->getSessionId();
        ?>
" />
        <?php 
        $slotsHelper->stop();
    }
 /**
  * {@inheritDoc}
  */
 public function getSessionId()
 {
     $this->__initializer__ && $this->__initializer__->__invoke($this, 'getSessionId', array());
     return parent::getSessionId();
 }