public function register(Application $app)
 {
     $app['listener.general'] = $app->share(function ($app) {
         return new Listener\GeneralListener($app);
     });
     $app['listener.exception'] = $app->share(function ($app) {
         $rootPath = $app['resources']->getPath('root');
         return new Listener\ExceptionListener($rootPath, $app['render'], $app['logger.system'], $app['session'], $app['config']->get('general/debug', false));
     });
     $app['listener.not_found'] = $app->share(function ($app) {
         return new Listener\NotFoundListener($app['config']->get('general/notfound'), $app['storage.legacy'], $app['templatechooser'], $app['render']);
     });
     /*
      * Creating the actual url generator flushes all controllers.
      * We aren't ready for this since controllers.mount event hasn't fired yet.
      * RedirectListener doesn't use the url generator until kernel.response
      * (way after controllers have been added).
      */
     $app['listener.redirect'] = $app->share(function ($app) {
         return new Listener\RedirectListener($app['session'], $app['url_generator.lazy'], $app['users'], $app['access_control']);
     });
     $app['listener.session'] = $app->share(function ($app) {
         $debug = $app['debug'] && $app['config']->get('general/debug_show_loggedoff', false);
         return new Listener\SessionListener($app['logger.flash'], $debug);
     });
     $app['listener.pager'] = $app->share(function ($app) {
         return new Listener\PagerListener($app->raw('pager'));
     });
     $app['listener.snippet'] = $app->share(function ($app) {
         return new Listener\SnippetListener($app['asset.queue.snippet'], $app['config'], $app['resources'], $app['render']);
     });
     $app['listener.zone_guesser'] = $app->share(function ($app) {
         return new Listener\ZoneGuesser($app);
     });
 }
 /**
  * {@inheritDoc}
  */
 public function register(Application $app)
 {
     $app['routing.resource'] = null;
     $app['routing.options'] = array();
     $app['routing.loader.xml'] = $app->share(function (Application $app) {
         return new XmlFileLoader($app['config.locator']);
     });
     $app['routing.loader.php'] = $app->share(function (Application $app) {
         return new PhpFileLoader($app['config.locator']);
     });
     $app['routing.loader.yml'] = $app->share(function (Application $app) {
         return new YamlFileLoader($app['config.locator']);
     });
     $app['routing.loader.null'] = $app->share(function (Application $app) {
         return new NullLoader();
     });
     $app['routing.loader.resolver'] = $app->share(function (Application $app) {
         $loaders = array($app['routing.loader.xml'], $app['routing.loader.php'], $app['routing.loader.null']);
         if (class_exists('Symfony\\Component\\Yaml\\Yaml')) {
             $loaders[] = $app['routing.loader.yml'];
         }
         return new LoaderResolver($loaders);
     });
     $app['routing.loader'] = $app->share(function (Application $app) {
         return new DelegatingLoader($app['routing.loader.resolver']);
     });
     $app['router'] = $app->share(function (Application $app) {
         $defaults = array('debug' => $app['debug'], 'matcher_base_class' => 'Silex\\RedirectableUrlMatcher', 'matcher_class' => 'Silex\\RedirectableUrlMatcher');
         $options = array_replace($defaults, $app['routing.options']);
         return new Router($app['routing.loader'], $app['routing.resource'], $options, $app['request_context'], $app['logger']);
     });
     $app['routes'] = function (Application $app) {
         return $app['router']->getRouteCollection();
     };
     $app['url_matcher'] = $app->raw('router');
     $app['url_generator'] = $app->raw('router');
 }
Example #3
0
 public function searchContentType($contenttypename, array $parameters = [], &$pager = [])
 {
     $where = [];
     $tablename = $this->getContenttypeTablename($contenttypename);
     $contenttype = $this->app['config']->get('contenttypes/' . $contenttypename);
     // If this contenttype has 'searchable: false', we skip it.
     if (isset($contenttype['searchable']) && $contenttype['searchable'] === false) {
         return [];
     }
     // for all the non-reserved parameters that are fields, we assume people want to do a 'where'
     foreach ($parameters as $key => $value) {
         if (in_array($key, ['order', 'where', 'limit', 'offset'])) {
             continue;
             // Skip this one.
         }
         if (!$this->isValidColumn($key, $contenttype)) {
             continue;
             // Also skip if 'key' isn't a field in the contenttype.
         }
         $where[] = $this->parseWhereParameter($key, $value);
     }
     // @todo update with nice search string
     // If we need to filter, add the WHERE for that.
     // Meh, InnoDB doesn't support full text search.
     if (!empty($parameters['filter'])) {
         $filter = $this->app['db']->quote($parameters['filter']);
         $filterWhere = [];
         foreach ($contenttype['fields'] as $key => $value) {
             if (in_array($value['type'], ['text', 'textarea', 'html', 'markdown'])) {
                 $filterWhere[] = sprintf("%s LIKE '%%%s%%'", $key, $filter);
             }
         }
         if (!empty($filterWhere)) {
             $where[] = '(' . implode(' OR ', $filterWhere) . ')';
         }
     }
     $limit = !empty($parameters['limit']) ? $parameters['limit'] : 9999;
     $page = !empty($parameters['page']) ? $parameters['page'] : 1;
     // If we're allowed to use pagination, use the 'page' parameter.
     if (!empty($parameters['paging']) && $this->app->raw('request') instanceof Request) {
         $page = $this->app['request']->get('page', $page);
     }
     $queryparams = "";
     // implode 'where'
     if (!empty($where)) {
         $queryparams .= sprintf(' WHERE (%s)', implode(" AND ", $where));
     }
     // Order, with a special case for 'RANDOM'.
     if (!empty($parameters['order'])) {
         if ($parameters['order'] == "RANDOM") {
             $dboptions = $this->app['db']->getParams();
             $queryparams .= sprintf(' ORDER BY %s', $dboptions['randomfunction']);
         } else {
             $order = $this->getEscapedSortorder($parameters['order'], false);
             if (!empty($order)) {
                 $queryparams .= sprintf(' ORDER BY %s', $order);
             }
         }
     }
     // Make the query for the pager.
     $pagerquery = sprintf('SELECT COUNT(*) AS count FROM %s %s', $tablename, $queryparams);
     // Add the limit
     $queryparams = $this->app['db']->getDatabasePlatform()->modifyLimitQuery($queryparams, $limit, ($page - 1) * $limit);
     // Make the query to get the results.
     $query = "SELECT * FROM {$tablename}" . $queryparams;
     $rows = $this->app['db']->fetchAll($query);
     // Make sure content is set, and all content has information about its contenttype
     $content = [];
     foreach ($rows as $row) {
         $content[$row['id']] = $this->getContentObject($contenttype, $row);
     }
     // TODO: Check if we need to hydrate here!
     // Make sure all content has their taxonomies and relations
     $this->getTaxonomy($content);
     $this->getRelation($content);
     // Set up the $pager array with relevant values.
     $rowcount = $this->app['db']->executeQuery($pagerquery)->fetch();
     $pager = ['for' => 'search', 'count' => $rowcount['count'], 'totalpages' => ceil($rowcount['count'] / $limit), 'current' => $page, 'showing_from' => ($page - 1) * $limit + 1, 'showing_to' => ($page - 1) * $limit + count($content)];
     return $content;
 }
Example #4
0
    public function register(Application $app)
    {
        $app['knp_menu.factory'] = $app->share(function () use ($app) {
            if (isset($app['url_generator'])) {
                return new RouterAwareFactory($app['url_generator']);
            }

            return new MenuFactory();
        });

        $app['knp_menu.renderer.list'] = $app->share(function () use ($app){
            return new ListRenderer($app['charset']);
        });

        $app['knp_menu.menu_provider'] = $app->share(function () use ($app){
            return new PimpleMenuProvider($app, $app['knp_menu.menus']);
        });

        if (!isset($app['knp_menu.menus'])) {
            $app['knp_menu.menus'] = array();
        }

        $app['knp_menu.renderer_provider'] = $app->share(function () use ($app){
            $app['knp_menu.renderers'] = array_merge(
                array('list' => 'knp_menu.renderer.list'),
                isset($app['knp_menu.renderer.twig']) ? array('twig' => 'knp_menu.renderer.twig') : array(),
                isset($app['knp_menu.renderers']) ? $app['knp_menu.renderers'] : array()
            );

            return new PimpleRendererProvider($app, $app['knp_menu.default_renderer'], $app['knp_menu.renderers']);
        });

        if (!isset($app['knp_menu.default_renderer'])) {
            $app['knp_menu.default_renderer'] = 'list';
        }

        $app['knp_menu.helper'] = $app->share(function () use ($app){
            return new Helper($app['knp_menu.renderer_provider'], $app['knp_menu.menu_provider']);
        });

        if (isset($app['twig'])) {
            $app['knp_menu.twig_extension'] = $app->share(function () use ($app){
                return new MenuExtension($app['knp_menu.helper']);
            });

            $app['knp_menu.renderer.twig'] = $app->share(function () use ($app){
                return new TwigRenderer($app['knp_menu.template']);
            });

            if (!isset($app['knp_menu.template'])) {
                $app['knp_menu.template'] = 'knp_menu.html.twig';
            }

            $oldTwig = $app->raw('twig');
            $app['twig'] = $app->share(function($c) use ($oldTwig, $app) {
                $twig = $oldTwig($c);
                $twig->addExtension($app['knp_menu.renderer.twig']);
                $twig->addExtension($app['knp_menu.twig_extension']);

                return $twig;
            });

            $oldLoader = $app->raw('twig.loader.filesystem');
            $app['twig.loader.filesystem'] = $app->share(function($c) use ($oldLoader, $app) {
                $loader = $oldLoader($c);
                $loader->addPath(__DIR__.'/../Resources/views');

                return $loader;
            });
        }
    }
 /**
  * @param string $key
  * @return mixed
  */
 public function raw($key)
 {
     return $this->container->raw($key);
 }
 /**
  * Registers services on the given app.
  *
  * This method should only be used to configure services and parameters.
  * It should not get services.
  *
  * @param Application $app
  */
 public function register(Application $app)
 {
     $app['zend.authentication.firewalls'] = isset($app['zend.authentication.firewalls']) ? $app['zend.authentication.firewalls'] : [];
     $app['zend.authentication.storage_factory.session'] = $app->protect(function (array $options) use($app) {
         return $app->share(function () use($app, $options) {
             return new Session(isset($options['namespace']) ? $options['namespace'] : null, isset($options['member']) ? $options['member'] : null);
         });
     });
     $app['zend.authentication.storage_factory.non_persistent'] = $app->protect(function () use($app) {
         return $app->share(function () {
             return new NonPersistent();
         });
     });
     $app['zend.authentication.storage_factory.chain'] = $app->protect(function (array $options) use($app) {
         return $app->share(function () use($app, $options) {
             $options = array_map(function ($option) use($app) {
                 /* @var $factory \Closure */
                 $factory = is_string($option) ? $app->raw($option) : $app['zend.authentication.storage_factory.' . $option['type']]($option['options']);
                 return $factory($app);
             }, $options);
             $chain = new Chain();
             foreach ($options as $option) {
                 $chain->add($option);
             }
             return $chain;
         });
     });
     $app['zend.authentication.adapter_factory.db'] = $app->protect(function (array $options) use($app) {
         return $app->share(function () use($app, $options) {
             return new Database($app['db'], $options);
         });
     });
     $app['zend.authentication.adapter_factory.digest'] = $app->protect(function (array $options) use($app) {
         return $app->share(function () use($app, $options) {
             return new Digest($options);
         });
     });
     $app['zend.authentication.adapter_factory.http_basic'] = $app->protect(function (array $options) use($app) {
         return $app->share(function () use($app, $options) {
             $filename = $options['filename'];
             unset($options['filename']);
             return new Http\HttpBasic(new FileResolver($filename), $this['request_stack']->getCurrentRequest(), $options);
         });
     });
     $app['zend.authentication.adapter_factory.http_digest'] = $app->protect(function (array $options) use($app) {
         return $app->share(function () use($app, $options) {
             $filename = $options['filename'];
             unset($options['filename']);
             return new Http\HttpDigest(new FileResolver($filename), $this['request_stack']->getCurrentRequest(), $options);
         });
     });
     $app['zend.authentication.adapter_factory.callback'] = $app->protect(function (array $options) use($app) {
         return $app->share(function () use($options) {
             return new Callback($options['callback']);
         });
     });
     $app['zend.authentication.adapter_factory.chain'] = $app->protect(function (array $options) use($app) {
         return $app->share(function () use($app, $options) {
             $options = array_map(function ($option) use($app) {
                 /* @var $factory \Closure */
                 $factory = is_string($option) ? $app->raw($option) : $app['zend.authentication.adapter_factory.' . $option['type']]($option['options']);
                 return $factory($app);
             }, $options);
             return new \SilexCMF\ZendAuthentication\Adapter\Chain($options, isset($app['logger']) ? $app['logger'] : null);
         });
     });
     $app['zend.authentication.listener_factory.form'] = $app->protect(function ($name, array $options) use($app) {
         return $app->share(function () use($app, $name, $options) {
             return new FormListener($app['zend.authentication.service.' . $name], $options['pattern'], $options['whitelist'], new Container('zend.authentication.session.' . $name), $options['form']);
         });
     });
     $app['zend.authentication.listener_factory.http'] = $app->protect(function ($name, array $options) use($app) {
         return $app->share(function () use($app, $name, $options) {
             return new HttpListener($app['zend.authentication.service.' . $name], $options['pattern'], $options['whitelist']);
         });
     });
     $app['zend.authentication.listener_factory.logout'] = $app->protect(function ($name, array $options) use($app) {
         return $app->share(function () use($app, $name, $options) {
             $options = $this->logoutListenerOptions->resolve($options);
             return new LogoutListener($app['zend.authentication.service.' . $name], $options['logout_url'], $options['target_url']);
         });
     });
     $app['zend.authentication.service_factory'] = $app->protect(function ($name, array $options) use($app) {
         $options = $this->authenticationServiceOptions->resolve($options);
         $storageId = 'zend.authentication.storage.' . $name;
         if (!isset($app[$storageId])) {
             $app[$storageId] = is_string($options['storage']) ? $app->raw($options['storage']) : $app['zend.authentication.storage_factory.' . $options['storage']['type']]($options['storage']['options']);
         }
         $adapterId = 'zend.authentication.adapter.' . $name;
         if (!isset($app[$adapterId])) {
             $app[$adapterId] = is_string($options['adapter']) ? $app->raw($options['adapter']) : $app['zend.authentication.adapter_factory.' . $options['storage']['type']]($options['storage']['options']);
         }
         if (isset($options['form'])) {
             $app['zend.authentication.listener.form.' . $name] = $app['zend.authentication.listener_factory.form']($options);
         }
         if (isset($options['http'])) {
             $app['zend.authentication.listener.http.' . $name] = $app['zend.authentication.listener_factory.http']();
         }
         if (isset($options['logout'])) {
             $app['zend.authentication.listener.logout.' . $name] = $app['zend.authentication.listener_factory.logout']($options['logout']);
         }
         return $app->share(function () use($app, $name, $options) {
             return new AuthenticationService($app['zend.authentication.storage.' . $name], $app['zend.authentication.adapter.' . $name]);
         });
     });
 }