register(new Silex\Provider\DoctrineServiceProvider(), array('db.options' => $cfg['database']['dev'])); $app->register(new Silex\Provider\SessionServiceProvider()); $app->register(new Silex\Provider\SwiftmailerServiceProvider()); $app->register(new Silex\Provider\FormServiceProvider()); $app->register(new Silex\Provider\ValidatorServiceProvider()); if ($app['env'] == 'dev') { $app->register(new Whoops\Provider\Silex\WhoopsServiceProvider()); } $app->register( new Silex\Provider\TwigServiceProvider(), array( 'twig.path' => __DIR__.'/../views', 'twig.class_path' => __DIR__.'/../vendor/twig/lib', ) ); $app->register(new Cocur\Slugify\Bridge\Silex\SlugifyServiceProvider()); $app['twig'] = $app->share( $app->extend( 'twig', function ($twig, $app) { $twig->addExtension(new Twig_Extensions_Extension_Text($app)); $twig->addExtension(new Twig_Extension_StringLoader()); return $twig; } ) ); $app->register(new ImagineServiceProvider()); $app->register(new Silex\Provider\UrlGeneratorServiceProvider()); $app['twig']->addGlobal('baseUrl', $cfg['baseUrl']); $app['twig']->addGlobal('baseHost', $cfg['baseHost']); $app['twig']->addGlobal('siteName', $cfg['siteName']); $app->register( new Silex\Provider\SessionServiceProvider(), array( 'session.storage.options' => array( 'name' => 'w6_session', 'cookie_httponly' => true, ), ) ); $configs = $em->getRepository('\W6\Model\Config')->findAll(); $app->register(new Silex\Provider\SwiftmailerServiceProvider()); $app['swiftmailer.options'] = array( 'host' => $configs['smtp_server'], 'port' => $configs['smtp_port'], 'username' => $configs['email'], 'password' => $configs['smtp_passwd'], 'encryption' => $configs['criptografia'] ? $configs['criptografia'] : null, 'auth_mode' => null, ); $app['em'] = $em; //Entity Manager $app['config.routing'] = $cfg['routes']; $app['config.path'] = $cfg['basePath']; $app['config.url'] = $cfg['url']; $app['config.siteName'] = $cfg['siteName']; $app['config.baseHost'] = $cfg['baseHost']; $app['config.custom'] = $configs; $app['twig']->addGlobal('config', $configs); $app['subdomain.options'] = array( 'nullOnEmptySubdomain' => true, 'baseHost' => $app['config.baseHost'], 'modelName' => 'W6\Model\Portal', 'subdomainFieldName' => 'subdominio' ); $app->register(new W6\Provider\SubdomainProvider); try { $subdomain = $app['subdomain']->getSubdomainData(); } catch (Exception $e) { $subdomain = null; } /* * Registrando provider de permissões */ $app->register(new W6\Provider\LogProvider()); $app->register(new W6\Provider\PermissaoProvider()); $app->register(new W6\Provider\ImageOptimizeServiceProvider()); $app->register(new W6\Provider\OptimizeCssProvider()); $app->register(new W6\Provider\PortalProvider()); $function = new Twig_SimpleFunction( 'is_granted', function ($role) use ($app) { return $app['security']->isGranted($role); } ); $app['twig']->addFunction($function); $repeatFunction = new Twig_SimpleFunction( 'repeat', function ($str, $i) use ($app) { return str_repeat($str, $i); } ); $app['twig']->addFunction($repeatFunction); $dump = new Twig_SimpleFunction( 'dump', function ($var) use ($app) { dump($var); } ); $app['twig']->addFunction($dump); $diff = new Twig_SimpleFunction( 'date_diff', function ($end) use ($app) { $hj = new \DateTime(); return date_diff($hj, $end)->format('%a'); } ); $app['twig']->addFunction($diff); $app['twig']->addFilter('floor', new Twig_Filter_Function('floor')); //Google Analytics $app['twig']->addGlobal('googleAnalytics', $configs['ga']); $exists = new Twig_SimpleFunction( 'exists', function ($path, $file) use ($app) { return file_exists($app['config.path'].$path.'/'.$file); } ); $app['twig']->addFunction($exists); /* * Adiciona o role provide */ $app->register(new \W6\Model\Role\RoleProvider($rolesConfig)); if (!$subdomain) { if (trim($app['subdomain']->getSubdomain()) !== "") { if (headers_sent() === false) { header('Location: ' . $app['config.url'], true, 302); } exit(); } $app->register( new Silex\Provider\SecurityServiceProvider(), array( 'security.firewalls' => array( 'login' => array('pattern' => '^/login$'), // Example of an url available as anonymous user 'restrict' => array( 'pattern' => '^/admin|^/logout$', 'anonymous' => true, // Needed as the login path is under the secured area, 'switch_user' => true, 'form' => array('login_path' => '/login', 'check_path' => '/admin/doLogin'), 'logout' => array('target' => '/login', 'logout_path' => '/logout'), // url to call for logging out 'users' => $app->share( function ($pro) { return new \W6\Provider\UserProvider($pro['em']); } ), ), ), 'security.access_rules' => $app['roles']->getRoles(), 'security.role_hierarchy' => $app['roles']->getRoleHierarchy(), ) ); foreach ($app['config.routing'] as $name => $conf) { $v = $app->mount($conf['path'], new $conf['provider']()); } $app->get( '/login', function (Request $request) use ($app) { $error = $app['security.last_error']($request); if ($error == 'Bad credentials') { $error = 'Usuário / Senha inválidos'; } return $app['twig']->render( 'login.twig', array( 'error' => $error, 'last_username' => $app['session']->get('_security.last_username'), ) ); } ); } else { $str = $app['subdomain']->getSubdomain(); $controllerName = preg_replace("/\s/", "", ucwords(preg_replace("/[^a-zA-Z0-9]/", " ", $str))); // Transforma subdominio em PascalCase (ex: meio-ambiente -> MeioAmbiente) $controller = '\W6\Controller\Hotsite\\' . $controllerName . 'Controller'; $app->mount('', new $controller); } $app->error( function (Exception $e) use ($app) { //die($e->getMessage()); if ($e instanceof NotFoundHttpException) { return $app['twig']->render('errors/404.twig', array('code' => 404)); } elseif ($e instanceof AccessDeniedHttpException) { return $app['twig']->render('errors/403.twig', array('code' => 403)); } $code = ($e instanceof HttpException) ? $e->getStatusCode() : 500; return $app['twig']->render('errors/500.twig', array('code' => $code, 'message' => $e->getMessage())); } ); // TranslationServiceProvider $app->register( new Silex\Provider\TranslationServiceProvider(), array( 'locale_fallbacks' => array('pt'), ) ); // Lista os portais disponíveis para o site $portais = $app['em']->getRepository('W6\Model\Portal')->findBy(array(), array('ordem' => 'ASC')); $ultimasNoticias = array(); foreach ($portais as $portal) { $noticias = $app['em']->getRepository('W6\Model\Noticia')->findAllNoticia($portal->getId(), 0, 1); if (count($noticias) > 0) { $ultimasNoticias[$noticias[0]->getData()->format('Ymd') . $portal->getId()] = $noticias[0]; } } #arsort($ultimasNoticias); $app['twig']->addGlobal('portais', $portais); $app['twig']->addGlobal('ultimasNoticias', $ultimasNoticias); $app['translator'] = $app->share($app->extend('translator', function ($translator, $app) { $translator->addLoader('yaml', new Symfony\Component\Translation\Loader\YamlFileLoader()); $translator->addResource('yaml', __DIR__.'/../locales/pt.yml', 'pt'); $translator->addResource('yaml', __DIR__.'/../locales/en.yml', 'en'); return $translator; })); $app['twig']->addFunction(new Twig_SimpleFunction('verifyPermissionModule', function ($path, $action = 'read') use ($app) { return $app['permissao']->verifyPermissionModule($app, $path, $action); })); $app['locale'] = $app['session']->get('lang'); $app['debug'] = true; $app->run();