/**
  * @param \Render\APIs\APIv1\CssAPI $api
  * @param \Render\Unit              $unit
  * @param \Render\ModuleInfo        $moduleInfo
  */
 public function css($api, $unit, $moduleInfo)
 {
     echo "START-CSS:" . $unit->getId() . "\n";
     echo "ASSET-PATH:" . $moduleInfo->getAssetPath('assetPath') . "\n";
     echo "ASSET-URL:" . $moduleInfo->getAssetUrl('assetUrl') . "\n";
     try {
         $url = $api->getMediaItem('ITEM-NOT-EXISTS')->getUrl();
     } catch (\Exception $ignore) {
         $url = '#exception';
     }
     echo "NOT-EXISTS-MEDIA-URL:" . $url . "\n";
     echo "END-CSS:" . $unit->getId() . "\n";
 }
 /**
  * @param \Render\APIs\APIv1\CssAPI $api
  * @param \Render\Unit              $unit
  * @param \Render\ModuleInfo        $moduleInfo
  */
 public function css($api, $unit, $moduleInfo)
 {
     echo "START-CSS:" . $unit->getId() . "\n";
     echo "ASSET-PATH:" . $moduleInfo->getAssetPath('assetPath') . "\n";
     echo "ASSET-URL:" . $moduleInfo->getAssetUrl('assetUrl') . "\n";
     echo "MEDIA-URL:" . $api->getMediaItem($api->getFormValue($unit, 'download'))->getUrl() . "\n";
     echo "IMAGE-URL:" . $api->getMediaItem($api->getFormValue($unit, 'image'))->getImage()->resizeCenter(100, 100)->getUrl() . "\n";
     try {
         $url = $api->getMediaItem('ITEM-NOT-EXISTS')->getUrl();
     } catch (\Exception $ignore) {
         $url = '#exception';
     }
     echo "NOT-EXISTS-MEDIA-URL:" . $url . "\n";
     echo "END-CSS:" . $unit->getId() . "\n";
 }
Ejemplo n.º 3
0
 /**
  * @param \Render\APIs\APIv1\RenderAPI $renderApi
  * @param \Render\Unit $unit
  * @param \Render\ModuleInfo $moduleInfo
  */
 public function renderContent($renderApi, $unit, $moduleInfo)
 {
     $imgClass = '';
     $svgUrl = $moduleInfo->getAssetUrl('imageBlank.svg');
     $svgMedia = $renderApi->getFormValue($unit, 'svg');
     if ($svgMedia == '') {
         $imgClass = 'blankImgPlaceholder';
     } else {
         try {
             $svgUrl = $renderApi->getMediaItem($svgMedia)->getUrl();
         } catch (\Exception $e) {
         }
     }
     $svgImgTag = new HtmlTagBuilder('img', array('src' => $svgUrl, 'alt' => $renderApi->getFormValue($unit, 'svgAlt')));
     if (!empty($imgClass)) {
         $svgImgTag->set('class', $imgClass);
     }
     $svgTitle = $renderApi->getFormValue($unit, 'svgTitle');
     if (!empty($svgTitle)) {
         $svgImgTag->set('title', $svgTitle);
     }
     echo $svgImgTag->toString();
     $renderApi->renderChildren($unit);
 }
Ejemplo n.º 4
0
    /**
     * Root Modules Render Method (called by Backend Visitor)
     * @param \Render\APIs\RootAPIv1\RootRenderAPI $rootApi
     * @param \Render\Unit $rootUnit
     * @param \Render\ModuleInfo $moduleInfo
     */
    public function render($rootApi, $rootUnit, $moduleInfo)
    {
        // lang/locale
        $pageLang = $rootApi->getFormValue($rootUnit, 'lang', 'en-US');
        $pageLangLowDash = str_replace('-', '_', $pageLang);
        setlocale(LC_ALL, $pageLangLowDash . '.UTF8', $pageLang);
        $rootApi->setLocale($pageLangLowDash);
        // read custom data provided by module implementations (per module and per unit)
        $moduleData = $rootApi->getAllModuleData($rootUnit);
        $unitData = $rootApi->getAllUnitData($rootUnit);
        $nav = $rootApi->getNavigation();
        // http header redirect (only in live and preview mode)
        if ($rootApi->isLiveMode() || $rootApi->isPreviewMode()) {
            foreach ($unitData as $d) {
                $redirect = isset($d['redirect']) ? $d['redirect'] : null;
                if (is_array($redirect) && array_key_exists('url', $redirect)) {
                    header('Location: ' . $redirect['url'], true);
                    exit;
                }
            }
            $currentPage = $nav->getPage($nav->getCurrentPageId());
            $pageTitle = $currentPage->getTitle();
            $pageAttributes = $currentPage->getPageAttributes();
            $redirectFirstChild = false;
            if (array_key_exists('enableRedirect', $pageAttributes)) {
                if ($pageAttributes['enableRedirect'] == 1) {
                    if ($pageAttributes['redirectType'] == "firstChild") {
                        $redirectFirstChild = true;
                    } else {
                        if ($pageAttributes['redirectType'] == "page") {
                            if (array_key_exists('redirectPageId', $pageAttributes)) {
                                $redirectPageId = $pageAttributes['redirectPageId'];
                                if ($redirectPageId != '' && $redirectPageId != $nav->getCurrentPageId()) {
                                    $redirectUrl = $nav->getPage($redirectPageId)->getUrl();
                                    if ($redirectUrl != '') {
                                        header('Location: ' . $redirectUrl);
                                        exit;
                                    }
                                }
                            }
                        } else {
                            if (array_key_exists('redirectUrl', $pageAttributes)) {
                                $redirectUrl = $pageAttributes['redirectUrl'];
                                if (preg_match("/^[http]/", $redirectUrl)) {
                                    if ($rootApi->isLiveMode()) {
                                        header('Location: ' . $redirectUrl);
                                        exit;
                                    } else {
                                        $i18n = new Translator($rootApi, $moduleInfo);
                                        $msg1 = $i18n->translate('error.redirectLiveOnly1');
                                        $msg2 = $i18n->translate('error.redirectLiveOnly2');
                                        echo '<html><body style="margin:0;background-color: #454444;font-family:\'Trebuchet MS\',sans-serif;font-size:20px;color: #ffffff;">';
                                        echo '<div style="display:flex;height:100vh;width:80%;padding:0 10%;justify-content:center;align-items:center;text-align:center;">' . $msg1 . $redirectUrl . $msg2 . '</div>';
                                        echo '</body></html>';
                                        exit;
                                    }
                                }
                            }
                        }
                    }
                }
            }
            // redirect to first child page if page title equal [redirect]
            if (strtolower($pageTitle) == '[weiterleiten]' || strtolower($pageTitle) == '[redirect]' || $redirectFirstChild) {
                $childrenIds = $nav->getChildrenIds($nav->getCurrentPageId());
                if (count($childrenIds)) {
                    $currentPage = $nav->getPage($nav->getCurrentPageId());
                    $curUrl = $currentPage->getUrl();
                    $fstChild = $nav->getPage($childrenIds[0]);
                    $url = $fstChild->getUrl();
                    if (!empty($url) && $url != $curUrl) {
                        header('Location: ' . $url);
                        exit;
                    }
                }
            }
        }
        // protected pages
        $password_protection = $rootApi->getWebsiteSettings('password_protection');
        if ($password_protection['enableProtectedPage'] && $rootApi->isPage()) {
            if ($rootApi->isLiveMode() || $password_protection['inPreviewMode'] && $rootApi->isPreviewMode()) {
                $currentPageId = $nav->getCurrentPageId();
                $protectedPage = $password_protection['protectedPage'];
                $parentPages = $nav->getNavigatorIds($currentPageId);
                if (in_array($protectedPage, $parentPages) || $protectedPage == '') {
                    $validLogin = $this->authenticate($password_protection['loginPasswords']);
                    if (!$validLogin) {
                        exit;
                    }
                }
            }
        }
        // error reporting
        if ($rootApi->isEditMode() && $rootApi->getFormValue($rootUnit, 'debugShowPhpErrors')) {
            error_reporting(E_ALL);
            ini_set('display_errors', true);
        }
        // session TODO: remove?
        if (!$rootApi->isEditMode()) {
            if ($rootApi->getFormValue($rootUnit, 'enablePHPSession') && !isset($_SESSION)) {
                session_start();
            }
        }
        // start output
        echo '<!DOCTYPE html>';
        echo "<html lang='{$pageLang}'>";
        echo '<head>';
        // static meta tags
        echo '<meta charset="utf-8">';
        echo '<meta http-equiv="X-UA-Compatible" content="IE=edge">';
        echo '<meta name="viewport" content="initial-scale=1">';
        // favicon and appleTouchIcon
        $this->insertFavicon($rootApi, $rootUnit);
        // title tag and meta description
        $this->insertTitleAndDescription($rootApi, $rootUnit);
        // JS API
        echo $rootApi->isEditMode() ? '<script src="' . $rootApi->getJsApiUrl() . '"></script>' : '';
        // srcset polyfill (load before modernizer because of the htmlshiv, load before CSS according to doc)
        // http://caniuse.com/#feat=srcset (Safari, Android 4.x, Firefox)
        echo <<<EOF
    <script>
    if(!window.HTMLPictureElement){
      document.createElement('picture');
      function loadJS(u){var r = document.getElementsByTagName( "script" )[ 0 ], s = document.createElement( "script" );s.src = u;r.parentNode.insertBefore( s, r );}
      loadJS('{$moduleInfo->getAssetUrl('js/respimage.js')}');
    }
    </script>
EOF;
        // CSS Assets (static css files via <link>)
        $this->insertCssAssets($moduleData);
        // Dynamic CSS (only in edit mode - see css for live mode)
        if ($rootApi->isEditMode()) {
            $dynCss = $this->getDynCSSLib($moduleInfo);
            $dynCss->generateCSS($rootApi, $rootUnit, true);
            // Selectors Data (TODO: this could be also accessed by CMS.getCustomData(moduleId).selectors ?)
            echo '<script type="text/x-text-json" id="available_selectors">';
            echo $this->insertSelectorsJson($moduleData);
            echo '</script>';
        } else {
            echo '<link rel="stylesheet" type="text/css" href="' . $rootApi->getCssUrl() . '">';
        }
        //
        // JS
        //
        // responsive images
        if (!$rootApi->isEditMode()) {
            echo "<script>window.lazySizesConfig = { preloadAfterLoad: !(/mobi/i.test(navigator.userAgent)) };</script>";
        }
        echo "<script src='{$moduleInfo->getAssetUrl('js/lazysizes.js')}' async=''></script>";
        echo "<script src='{$moduleInfo->getAssetUrl('js/ls.progressive.js')}' async=''></script>";
        // modernizer for feature detection (and htmlshiv)
        echo "<script src='{$moduleInfo->getAssetUrl('js/modernizer.js')}'></script>";
        // insert jquery here, so it's already available in body
        echo "<script src='{$moduleInfo->getAssetUrl('js/jquery-2.1.4.js')}'></script>";
        // HTML/CSS polyfills
        if (!$rootApi->isEditMode()) {
            // vw/vh css units (http://caniuse.com/#feat=viewport-units)
            // Polyfill "prefixfree.viewport-units": modified to support browser resize
            echo "<script>Modernizr.load({test: Modernizr.cssvwunit && Modernizr.cssvhunit, nope: ['{$moduleInfo->getAssetUrl('js/prefixfree.stylefix.js')}', '{$moduleInfo->getAssetUrl('js/prefixfree.viewport-units.js')}']});</script>";
        }
        // HTML HEAD HOOK (provided by children)
        $this->insertHtmlHead($moduleData, $unitData);
        echo '</head>';
        // Body
        $rootClasses = array();
        if ($rootApi->isTemplate()) {
            $rootClasses[] = 'isTemplate';
        }
        echo '<body id="' . $rootUnit->getId() . '" class="' . implode(' ', $rootClasses) . '">';
        // CONTENT (child modules of the root module)
        $rootApi->renderChildren($rootUnit);
        // JS Assets (load after DOM)
        $this->insertJsAssets($moduleData);
        $this->insertJsModules($moduleData, $moduleInfo, $rootApi->isEditMode());
        // HTML BOTTOM HOOK (provided by children)
        $this->insertHtmlBottom($moduleData);
        // CSS Error Console
        if (isset($dynCss) && $rootApi->isEditMode() && $rootApi->getFormValue($rootUnit, 'debugShowDynCssErrors')) {
            $this->insertCssErrorPanel($dynCss->getErrors());
        }
        echo '</body>';
        echo '</html>';
    }
Ejemplo n.º 5
0
 /**
  * Returns the available js assets defined in the module manifest dependent
  * on a given type ("module" or "script") and the current mode of execution
  * @private
  * @param \Render\APIs\APIv1\HeadAPI $api
  * @param string $assetType
  * @param \Render\ModuleInfo $moduleInfo
  * @return array
  */
 private function getJsAssets($api, $assetType, $moduleInfo)
 {
     $customData = $moduleInfo->getCustomData();
     $jsAssets = $this->getValue('assets.js', $customData, array());
     $result = array();
     foreach ($jsAssets as $asset) {
         $mode = $this->getValue('mode', $asset, '');
         $type = $this->getValue('type', $asset, 'script');
         if ($type === $assetType && $this->isAvailableInMode($mode, $api)) {
             if (!$this->cachebusterDisabled) {
                 $cachebuster = new CacheBuster();
                 $cachebuster->setModuleManifest($moduleInfo->getManifest());
                 $result[] = $moduleInfo->getAssetUrl($cachebuster->suffix($this->getValue('file', $asset)));
             } else {
                 $result[] = $moduleInfo->getAssetUrl($this->getValue('file', $asset));
             }
         }
     }
     return $result;
 }