Example #1
0
            $elementsEditorData = $app->cache->get($cacheKey);
            if (!is_array($elementsEditorData)) {
                $elementsEditorData = Server::call('elementseditor', $requestArguments, true);
                $app->cache->set($cacheKey, $elementsEditorData, is_array($elementsEditorData) && isset($elementsEditorData['result']) ? 99999 : 10);
            }
            if (is_array($elementsEditorData) && isset($elementsEditorData['result']) && is_array($elementsEditorData['result']) && isset($elementsEditorData['result']['content'])) {
                $domDocument = new HTML5DOMDocument();
                $domDocument->loadHTML($content);
                $domDocument->insertHTML($elementsEditorData['result']['content']);
                $content = $domDocument->saveHTML();
            } else {
                $response = new App\Response\TemporaryUnavailable();
            }
        }
        // It's needed even when there is no editable zone on the current page (editing a blog post for instance)
        $domDocument = new HTML5DOMDocument();
        $domDocument->loadHTML($content);
        $domDocument->insertHTML('<html><body><script src="' . htmlentities($context->assets->getUrl('assets/HTML5DOMDocument.min.js')) . '"></script></body></html>');
        $content = $domDocument->saveHTML();
        $content = Server::updateAssetsUrls($content, false);
        if (strpos($content, '{body}') !== false) {
            $content = str_replace('{body}', '<component src="data:base64,' . base64_encode($response->content) . '"/>', $content);
        } elseif (strpos($content, '{jsonEncodedBody}') !== false) {
            $content = str_replace('{jsonEncodedBody}', json_encode($app->components->process($response->content)), $content);
        }
        $response->content = $app->components->process($content);
    } else {
        $response = new App\Response\TemporaryUnavailable();
    }
}, ['priority' => 1000]);
if (Options::hasServer() && (Options::hasFeature('USERS') || Options::hasFeature('USERS_LOGIN_*'))) {
<?php

/*
 * Google Analytics addon for Bear Framework
 * https://github.com/ivopetkov/google-analytics-bearframework-addon
 * Copyright (c) 2016 Ivo Petkov
 * Free to use under the MIT license.
 */
use BearFramework\App;
use IvoPetkov\HTML5DOMDocument;
$app->hooks->add('responseCreated', function ($response) use($context) {
    if ($response instanceof App\Response\HTML) {
        $options = $context->options;
        if (!empty($options['trackingID'])) {
            $domDocument = new HTML5DOMDocument();
            $domDocument->loadHTML($response->content);
            $code = '<script>(function(i,s,o,g,r,a,m){i[\'GoogleAnalyticsObject\']=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)})(window,document,\'script\',\'//www.google-analytics.com/analytics.js\',\'ga\');ga(\'create\',\'' . htmlentities($options['trackingID']) . '\',\'auto\');ga(\'send\',\'pageview\');</script>';
            $domDocument->insertHTML($code);
            $response->content = $domDocument->saveHTML();
        }
    }
});