protected function initializeExtension(ExtensionInterface $extension) { $name = $extension->getName(); // Attempt to get extension YAML config try { $extension->getConfig(); } catch (\Exception $e) { $this->logInitFailure('Failed to load YAML config', $name, $e, Logger::ERROR); return; } // Call extension initialize() try { $extension->initialize(); // Add an object of this extension to the global Twig scope. $namespace = $this->getNamespace($extension); if (!empty($namespace)) { $this->app['twig'] = $this->app->share($this->app->extend('twig', function (\Twig_Environment $twig) use($namespace, $extension) { $twig->addGlobal($namespace, $extension); return $twig; })); } } catch (\Exception $e) { $this->logInitFailure('Initialisation failed', $name, $e, Logger::ERROR); return; } // Flag the extension as initialised $this->initialized[$name] = $extension; // If an extension makes it known it sends email, increase the counter if (is_callable(array($extension, 'sendsMail')) && $extension->sendsMail()) { $this->mailsenders++; } // Get the extension defined snippets try { $this->getSnippets($name); } catch (\Exception $e) { $this->logInitFailure('Snippet loading failed', $name, $e, Logger::ERROR); return; } // Add Twig extensions if (!is_callable(array($extension, 'getTwigExtensions'))) { return; } /** @var \Twig_Extension[] $extensions */ $twigExtensions = $extension->getTwigExtensions(); $addTwigExFunc = array($this, 'addTwigExtension'); foreach ($twigExtensions as $twigExtension) { $this->app['twig'] = $this->app->share($this->app->extend('twig', function (\Twig_Environment $twig) use($addTwigExFunc, $twigExtension, $name) { call_user_func($addTwigExFunc, $twig, $twigExtension, $name); return $twig; })); if (!is_callable(array($extension, 'isSafe')) || !$extension->isSafe()) { continue; } $this->app['safe_twig'] = $this->app->share($this->app->extend('safe_twig', function (\Twig_Environment $twig) use($addTwigExFunc, $twigExtension, $name) { call_user_func($addTwigExFunc, $twig, $twigExtension, $name); return $twig; })); } }
/** * Ensure any late added ContentTypes have a valid table object in the provider. * * @param string $contenttype * * @return \Bolt\Storage\Database\Schema\Table\ContentType */ private function getContentTypeTableObject($contenttype) { if (!isset($this->app['schema.tables'][$contenttype])) { $platform = $this->app['db']->getDatabasePlatform(); $this->app['schema.tables'][$contenttype] = $this->app->share(function () use($platform) { return new ContentType($platform); }); } return $this->app['schema.tables'][$contenttype]; }
/** * @inheritdoc */ protected function registerServices(Application $app) { $config = $this->getConfig(); $app['slugify'] = $app->share(function ($app) use($config) { if (!isset($config['regexp'])) { $config['regexp'] = '/([^A-Za-z0-9]|-)+/'; } if (!isset($config['lowercase'])) { $config['lowercase'] = true; } $slugify = new Slugify($config['regexp'], array('lowercase' => $config['lowercase'])); foreach ($config['rules'] as $key => $value) { $slugify->addRule($key, $value); } return $slugify; }); }
/** * Add Twig extensions. * * @param ExtensionInterface $extension * @param string $name * * @throws \Exception */ private function loadExtensionTwig(ExtensionInterface $extension, $name) { if (!is_callable([$extension, 'getTwigExtensions'])) { return; } /** @var \Twig_Extension[] $extensions */ $twigExtensions = $extension->getTwigExtensions(); $addTwigExFunc = [$this, 'addTwigExtension']; foreach ($twigExtensions as $twigExtension) { $this->app['twig'] = $this->app->share($this->app->extend('twig', function (\Twig_Environment $twig) use($addTwigExFunc, $twigExtension, $name) { call_user_func($addTwigExFunc, $twig, $twigExtension, $name); return $twig; })); if (!is_callable([$extension, 'isSafe']) || !$extension->isSafe()) { continue; } $this->app['safe_twig'] = $this->app->share($this->app->extend('safe_twig', function (\Twig_Environment $twig) use($addTwigExFunc, $twigExtension, $name) { call_user_func($addTwigExFunc, $twig, $twigExtension, $name); return $twig; })); } }
/** * @inheritdoc */ protected function registerServices(Application $app) { $app['storage.request.edit'] = $app->share(function ($app) { return new ContentRequest\CustomEdit($app['storage'], $app['config'], $app['users'], $app['filesystem'], $app['logger.system'], $app['logger.flash']); }); }