Пример #1
0
 public function getGlobals()
 {
     /** @var \Bolt\Config $config */
     $config = $this->app['config'];
     $configVal = $this->safe ? null : $config;
     /** @var \Bolt\Users $users */
     $users = $this->app['users'];
     /** @var \Bolt\Configuration\ResourceManager $resources */
     $resources = $this->app['resources'];
     $zone = null;
     /** @var RequestStack $requestStack */
     $requestStack = $this->app['request_stack'];
     if ($request = $requestStack->getCurrentRequest()) {
         $zone = Zone::get($request);
     }
     // User calls can cause exceptions that block the exception handler
     try {
         /** @deprecated Deprecated since 3.0, to be removed in 4.0. */
         $usersVal = $this->safe ? null : $users->getUsers();
         $usersCur = $users->getCurrentUser();
     } catch (\Exception $e) {
         $usersVal = null;
         $usersCur = null;
     }
     // Structured to allow PHPStorm's SymfonyPlugin to provide code completion
     return ['bolt_name' => $this->app['bolt_name'], 'bolt_version' => $this->app['bolt_version'], 'frontend' => $zone === Zone::FRONTEND, 'backend' => $zone === Zone::BACKEND, 'async' => $zone === Zone::ASYNC, 'paths' => $resources->getPaths(), 'theme' => $config->get('theme'), 'user' => $usersCur, 'users' => $usersVal, 'config' => $configVal];
 }
Пример #2
0
 /**
  * Sets the request's zone if needed and returns it.
  *
  * @param Request $request
  *
  * @return string
  */
 public function setZone(Request $request)
 {
     if ($zone = Zone::get($request)) {
         return $zone;
     }
     $zone = $this->determineZone($request);
     Zone::set($request, $zone);
     return $zone;
 }
Пример #3
0
 /**
  * @covers \Bolt\Controller\Zone::get
  * @covers \Bolt\Controller\Zone::isBackend
  */
 public function testControllerZone()
 {
     $app = $this->getApp();
     $this->setRequest(Request::create('/bolt'));
     $request = $this->getRequest();
     $kernel = $this->getMock('Symfony\\Component\\HttpKernel\\HttpKernelInterface');
     $app['dispatcher']->dispatch(KernelEvents::REQUEST, new GetResponseEvent($kernel, $request, HttpKernelInterface::MASTER_REQUEST));
     $this->assertEquals('backend', Zone::get($request));
     $this->assertTrue(Zone::isBackend($request));
 }
Пример #4
0
 /**
  * @covers \Bolt\Controller\Zone::get
  * @covers \Bolt\Controller\Zone::isAsync
  */
 public function testControllerZone()
 {
     $app = $this->getApp();
     $this->allowLogin($app);
     $this->setRequest(Request::create('/async'));
     $request = $this->getRequest();
     $request->cookies->set($app['token.authentication.name'], 'dropbear');
     $kernel = $this->getMock('Symfony\\Component\\HttpKernel\\HttpKernelInterface');
     $app['dispatcher']->dispatch(KernelEvents::REQUEST, new GetResponseEvent($kernel, $request, HttpKernelInterface::MASTER_REQUEST));
     $this->assertEquals('async', Zone::get($request));
     $this->assertTrue(Zone::isAsync($request));
 }
Пример #5
0
 public function getGlobals()
 {
     /** @var \Bolt\Config $config */
     $config = $this->app['config'];
     /** @var \Bolt\Users $users */
     $users = $this->app['users'];
     /** @var \Bolt\Configuration\ResourceManager $resources */
     $resources = $this->app['resources'];
     $configVal = $this->safe ? null : $config;
     $usersVal = $this->safe ? null : $users->getUsers();
     $zone = null;
     /** @var RequestStack $requestStack */
     $requestStack = $this->app['request_stack'];
     if ($request = $requestStack->getCurrentRequest()) {
         $zone = Zone::get($request);
     }
     // Structured to allow PHPStorm's SymfonyPlugin to provide code completion
     return ['bolt_name' => $this->app['bolt_name'], 'bolt_version' => $this->app['bolt_version'], 'frontend' => $zone === Zone::FRONTEND, 'backend' => $zone === Zone::BACKEND, 'async' => $zone === Zone::ASYNC, 'paths' => $resources->getPaths(), 'theme' => $config->get('theme'), 'user' => $users->getCurrentUser(), 'users' => $usersVal, 'config' => $configVal];
 }
Пример #6
0
 /**
  * {@inheritdoc}
  */
 public function process(Request $request, Response $response)
 {
     // First, gather all html <!-- comments -->, because they shouldn't be
     // considered for replacements. We use a callback, so we can fill our
     // $this->matchedComments array
     preg_replace_callback('/<!--(.*)-->/Uis', [$this, 'pregCallback'], $response->getContent());
     /** @var Snippet $asset */
     foreach ($this->queue as $key => $asset) {
         if ($asset->getZone() === Zone::get($request)) {
             $this->injector->inject($asset, $asset->getLocation(), $response);
         }
         unset($this->queue[$key]);
     }
     // Conditionally add jQuery
     $this->addJquery($request, $response);
     // Finally, replace back ###comment### with its original comment.
     if (!empty($this->matchedComments)) {
         $html = preg_replace(array_keys($this->matchedComments), $this->matchedComments, $response->getContent(), 1);
         $response->setContent($html);
     }
 }
Пример #7
0
 private function determineZone()
 {
     if (PHP_SAPI === 'cli') {
         return 'cli';
     }
     /** @var \Symfony\Component\HttpFoundation\RequestStack $stack */
     $stack = $this->app['request_stack'];
     $request = $stack->getCurrentRequest() ?: Request::createFromGlobals();
     if ($zone = Zone::get($request)) {
         return $zone;
     }
     /** @var \Bolt\EventListener\ZoneGuesser $guesser */
     $guesser = $this->app['listener.zone_guesser'];
     return $guesser->setZone($request);
 }
Пример #8
0
 /**
  * Process a single asset.
  *
  * @param FileAssetInterface $asset
  * @param Request            $request
  * @param Response           $response
  */
 protected function processAsset(FileAssetInterface $asset, Request $request, Response $response)
 {
     if ($asset->getZone() !== Zone::get($request)) {
         return;
     } elseif ($asset->isLate()) {
         $this->injector->inject($asset, Target::END_OF_BODY, $response);
     } elseif ($asset->getType() === 'stylesheet') {
         $this->injector->inject($asset, Target::BEFORE_CSS, $response);
     } elseif ($asset->getType() === 'javascript') {
         $this->injector->inject($asset, Target::AFTER_JS, $response);
     }
 }
Пример #9
0
 /**
  * Process a single asset.
  *
  * @param FileAssetInterface $asset
  * @param Request            $request
  * @param Response           $response
  */
 protected function processAsset(FileAssetInterface $asset, Request $request, Response $response)
 {
     if ($asset->getZone() !== Zone::get($request)) {
         return;
     } elseif ($asset->isLate()) {
         if ($asset->getLocation() === null) {
             $location = Target::END_OF_BODY;
         } else {
             $location = $asset->getLocation();
         }
     } elseif ($asset->getLocation() !== null) {
         $location = $asset->getLocation();
     } else {
         $location = Target::END_OF_HEAD;
     }
     $this->injector->inject($asset, $location, $response);
 }
Пример #10
0
 /**
  * Insert jQuery, if it's not inserted already.
  *
  * Some of the patterns that 'match' are:
  * - jquery.js
  * - jquery.min.js
  * - jquery-latest.js
  * - jquery-latest.min.js
  * - jquery-1.8.2.min.js
  * - jquery-1.5.js
  *
  * @param string $html
  *
  * @return string HTML
  */
 protected function addJquery($html)
 {
     if (!$this->app['config']->get('general/add_jquery', false) && !$this->app['config']->get('theme/add_jquery', false)) {
         return $html;
     }
     $zone = Zone::FRONTEND;
     /** @var RequestStack $requestStack */
     $requestStack = $this->app['request_stack'];
     if ($request = $requestStack->getCurrentRequest()) {
         $zone = Zone::get($request);
     }
     $regex = '/<script(.*)jquery(-latest|-[0-9\\.]*)?(\\.min)?\\.js/';
     if ($zone === Zone::FRONTEND && !preg_match($regex, $html)) {
         $jqueryfile = $this->app['resources']->getPath('app/view/js/jquery-2.1.4.min.js');
         $asset = new Snippet(Target::BEFORE_JS, '<script src="' . $jqueryfile . '"></script>');
         $html = $this->app['asset.injector']->inject($asset, $asset->getLocation(), $html);
     }
     return $html;
 }
Пример #11
0
 /**
  * Get the parameters that will be used to update Bolt's registered Twig
  * globals.
  *
  * This is here as a transitory measure.
  *
  * @param bool $safe
  *
  * @return array
  */
 private function setGlobals($safe)
 {
     /** @var \Twig_Environment $twig */
     $twig = $safe ? $this->app['safe_twig'] : $this->app['twig'];
     /** @var \Bolt\Config $config */
     $config = $this->app['config'];
     $configVal = $safe ? null : $config;
     /** @var \Bolt\Users $users */
     $users = $this->app['users'];
     /** @var \Bolt\Configuration\ResourceManager $resources */
     $resources = $this->app['resources'];
     $zone = null;
     /** @var RequestStack $requestStack */
     $requestStack = $this->app['request_stack'];
     if ($request = $requestStack->getCurrentRequest()) {
         $zone = Zone::get($request);
     }
     // User calls can cause exceptions that block the exception handler
     try {
         /** @deprecated Deprecated since 3.0, to be removed in 4.0. */
         $usersVal = $safe ? null : $users->getUsers();
         $usersCur = $users->getCurrentUser();
     } catch (\Exception $e) {
         $usersVal = null;
         $usersCur = null;
     }
     $twig->addGlobal('bolt_name', Bolt\Version::name());
     $twig->addGlobal('bolt_version', Bolt\Version::VERSION);
     $twig->addGlobal('bolt_stable', Bolt\Version::isStable());
     $twig->addGlobal('frontend', $zone === Zone::FRONTEND);
     $twig->addGlobal('backend', $zone === Zone::BACKEND);
     $twig->addGlobal('async', $zone === Zone::ASYNC);
     $twig->addGlobal('paths', $resources->getPaths());
     $twig->addGlobal('theme', $config->get('theme'));
     $twig->addGlobal('user', $usersCur);
     $twig->addGlobal('users', $usersVal);
     $twig->addGlobal('config', $configVal);
 }