/** * @param \KodiApp\Application $application */ public function initializeApplication(\KodiApp\Application $application) { $router = new \KodiApp\Router\SimpleRouter(); $router->setRoutes([["method" => "GET", "url" => "/foo/bar/1222", "handler" => "FooController::methodName"], ["method" => "GET", "url" => "/news/{news_id}", "handler" => "NewsController::renderNews"]]); $application->setRouter(new \KodiApp\Router\SimpleRouter()); $application->setEnvironment(["type" => \KodiApp\Application::ENV_DEVELOPMENT, "timezone" => "Europe/Budapest", "loglevel" => Logger::INFO, "display_errors" => 1, "error_reporting" => E_ERROR | E_WARNING | E_PARSE, "force_https" => false, "controllers_path" => "src/Controller", "controller_namespace" => "TestApp\\Controller"]); // Adatbázis inicializálása $application->register(new DatabaseProvider(["name" => "database_connection", "driver" => "mysql", "dbname" => "db_database", "host" => "localhost", "user" => "root", "password" => "", "charset" => "utf8"])); // Monolog inicializálása $application->register(new MonologProvider(["name" => 'test_proj', "path" => '/log/admin.log', "log_level" => Logger::INFO])); $application->register(new TranslatorProvider(["fallbackLocales" => ["hu", "en"], "loader" => ["dev" => Translator::LOADER_ARRAY, "prod" => Translator::LOADER_SERIALIZED], "resources" => ["hu" => ["/asd/asd"]], "strategy" => Translator::STRATEGY_ONLY_COOKIE, "cookie_set_url" => "/lang/set/{locale:[a-z]+}"])); // Security inicializálása $application->register(new SecurityProvider(["user_class" => TestUser::class, "permissions" => ["/myprofile" => \KodiApp\Security\Role::ROLE_USER]])); // Session inicializálása $application->register(new SessionProvider(["name" => "mv_session", "lifetime" => 7200])); $application->register(new TwigProvider(["path" => '/view', "page_frame_template_path" => '/page_frame/frame.twig', "content_providers" => [new ServerContentProvider()]])); $application->setErrorHandler(function ($error) { if ($error instanceof HttpNotFoundException) { return "HTTP 404: [" . $_SERVER['REQUEST_METHOD'] . "] " . $_SERVER['REQUEST_URI']; } elseif ($error instanceof HttpInternalErrorException) { $result = ""; foreach (debug_backtrace() as $line) { $result .= $line . "\n"; } return "HTTP 500: \n" . $result; } elseif ($error instanceof HttpAccessDeniedException) { return "HTTP 403: [" . $_SERVER['REQUEST_METHOD'] . "] " . $_SERVER['REQUEST_URI']; } else { return "HTTP: Undefined error"; } }); }
public function generate($url_name, $parameters = []) { $routes = Application::Router()->getRoutes(); $translator = Application::Translator(); if (!isset($routes[$url_name])) { return $url_name; } // Ha szükséges be kell rakni a nyelvet is a paraméterek közé if ($translator != null && $translator->getStrategy() != Translator::STRATEGY_ONLY_COOKIE && !$routes[$url_name]["locale"] == LanguageRouter::LOCALE_NOT_ALLOWED) { $parameters["locale"] = $translator->getLocale(); } $url = $routes[$url_name]["url"]; $resultUrl = ""; $index = 0; while (($firstPos = strpos($url, "{", $index)) != false) { $lastPos = strpos($url, "}", $firstPos); $name = explode(":", substr($url, $firstPos + 1, $lastPos - $firstPos - 1))[0]; $resultUrl .= substr($url, $index, $firstPos - $index) . (isset($parameters[$name]) ? $parameters[$name] : ""); $index = $lastPos + 1; } if ($index != strlen($url)) { $resultUrl .= substr($url, $index); } // Ha nincs semmi, akkor nem volt paraméter, másoljuk az egész url-t. if ($resultUrl === "") { $resultUrl = $url; } return $resultUrl; }
/** * Required parameters: * from,to,subject,body_html,body_plain * * Optional parameters: * cc * * @param array $emailParameters */ public function sendEmail($emailParameters) { $email = \Swift_Message::newInstance(); $email->setSubject($emailParameters["subject"])->setFrom($emailParameters["from"])->setTo($this->debugMail == null && Application::isDevelopmentEnv() ? $emailParameters["to"] : $this->debugMail)->setBody($emailParameters["body_html"], 'text/html'); if (isset($emailParameters["cc"])) { $email->setCc($emailParameters["cc"]); } $email->addPart($emailParameters["body_plain"], 'text/plain'); $this->mailer->send($email); }
/** * Registers services on the given container. * * This method should only be used to configure services and parameters. * It should not get services. * * @param Container $pimple A container instance */ public function register(Container $pimple) { $configuration = $this->configuration; $pimple['twig'] = function ($c) use($configuration) { return new Twig($configuration); }; //Jogosultság kezelése twighez $pimple->extend('twig', function ($twig, $c) { /** @var Security $security */ $security = Application::Security(); if ($security != null) { $mytwig = $security->setTwigFunctions($twig); } else { $mytwig = $twig; } return $mytwig; }); }
/** * Registers services on the given container. * * This method should only be used to configure services and parameters. * It should not get services. * * @param Container $pimple A container instance */ public function register(Container $pimple) { $pimple['url_generator'] = function ($c) { return new UrlGenerator(Application::Router()); }; //url_generate függvény hozzáadása a twighez $pimple->extend('twig', function ($twig, $c) { /** @var Twig $mytwig */ $mytwig = $twig; /** @var UrlGenerator $urlGenerator */ $urlGenerator = $c["url_generator"]; $url_generator = new \Twig_SimpleFunction("url_generate", function ($url_name, $parameters = []) use($urlGenerator) { return $urlGenerator->generate($url_name, $parameters); }); $mytwig->getTwigEnvironment()->addFunction($url_generator); return $mytwig; }); }
/** * @param $method * @param $uri * @return array * @throws HttpNotFoundException */ public function findRoute($method, $uri) { $routes = $this->getRoutes(); //Hozzá kell még adni a nyelvi url-t, ha van. $translator = Application::Translator(); if ($translator != null) { $langRoute = $translator->getCookieSetUrl(); if ($langRoute != null) { $routes["langSetRoute"] = ["method" => $langRoute["method"], "url" => $langRoute["url"], "handler" => $langRoute["handler"]]; } } $this->dispatcher = simpleDispatcher(function (RouteCollector $r) use($routes) { foreach ($routes as $route) { $r->addRoute($route["method"], $route["url"], $route["handler"]); } }); // Strip query string (?foo=bar) and decode URI if (false !== ($pos = strpos($uri, '?'))) { $uri = substr($uri, 0, $pos); } $uri = rawurldecode($uri); $routeInfo = $this->dispatcher->dispatch($method, $uri); switch ($routeInfo[0]) { case RouterInterface::NOT_FOUND: throw new HttpNotFoundException(); case RouterInterface::METHOD_NOT_ALLOWED: throw new HttpNotFoundException(); case RouterInterface::FOUND: foreach ($routes as $route) { if ($route["handler"] == $routeInfo[1]) { $this->actualRoute = $route; break; } } return ["handler" => $routeInfo[1], "params" => $routeInfo[2]]; default: return []; } }
/** * Translator constructor. * @param array $configuration */ public function __construct($configuration) { // Konfiguráció betöltése $this->configuration = $configuration; //Aktuális nyelv kiválasztása a stratégiától függően switch ($this->configuration["strategy"]) { case Translator::STRATEGY_ONLY_COOKIE: if (!isset($this->configuration["cookie_set_url"])) { throw new \InvalidArgumentException("You must provide 'cookie_set_url' parameter in case of STRATEGY_ONLY_COOKIE"); } // Locale beállítása $locale = $this->loadLocaleFromCookie(); break; case Translator::STRATEGY_ONLY_URL: // Itt jelenleg nem kell csinálni semmit, mert a language router mindent elintéz, majd beállítja a // a megfelelő helyen $locale = $configuration["fallbackLocales"][0]; break; case Translator::STRATEGY_COOKIE_AND_URL: // Locale beállítása $locale = $this->loadLocaleFromCookie(); break; default: $locale = $configuration["fallbackLocales"][0]; } //Symfony-s translator inicilaizálása $this->translator = new \Symfony\Component\Translation\Translator($locale); $this->translator->setFallbackLocales($this->configuration["fallbackLocales"]); //Loader és források inicializálás if (Application::isDevelopmentEnv()) { $format = $this->configuration["loader"]["dev"]; } else { $format = $this->configuration["loader"]["prod"]; } $this->translator->addLoader($format, $this->loaderFactory($format)); foreach ($this->configuration["resources"] as $locale => $resources) { foreach ($resources as $resource) { $this->translator->addResource($format, $resource, $locale); } } }
/** * Visszaadja a paraméterben megadott adatok alapján, a megfelelő handler-t és az ahhoz tartozó esetleges * paramétereket. * * Ha nem talál egyezést abban az esetben HttpNotFoundException hibát dob. * * * @param $method * @param $uri * @return array * @throws HttpNotFoundException */ public function findRoute($method, $uri) { // Strip query string (?foo=bar) and decode URI if (false !== ($pos = strpos($uri, '?'))) { $uri = substr($uri, 0, $pos); } $uri = rawurldecode($uri); $routeInfo = $this->dispatcher->dispatch($method, $uri); switch ($routeInfo[0]) { case RouterInterface::NOT_FOUND: throw new HttpNotFoundException(); case RouterInterface::METHOD_NOT_ALLOWED: throw new HttpNotFoundException(); case RouterInterface::FOUND: $params = $routeInfo[2]; //Ha van locale, akkor azt beállítjuk és töröljük a paraméter listából if (isset($params["locale"])) { Application::Translator()->setLocale($params["locale"]); unset($params["locale"]); } foreach ($this->routes as $route) { if ($route["handler"] == $routeInfo[1]) { $this->actualRoute = $route; break; } } return ["handler" => $routeInfo[1], "params" => $params]; default: return []; } }
public function __construct($status, $content = null) { parent::__construct(Application::isDevelopmentEnv() && $content != null ? $content : Response::$statusTexts[$status], $status); }
public function getValue() { return ["server_name" => $_SERVER["SERVER_NAME"], "server_protocol" => $_SERVER["SSL_PROTOCOL"] ? 'https' : 'http', "session_token" => Application::getInstance()->getSession()->get("session_token"), "environment" => Application::getInstance()->getEnvironment()]; }
/** * Betölti a twigbe az általunk definiált függvényeket. */ private function initializeBaseTwigFunction() { // Development-e a környezet $is_dev = new \Twig_SimpleFunction('is_dev', function () { return Application::isDevelopmentEnv(); }); $this->twig->addFunction($is_dev); /* * A további twig függvényeket az átláthatóság szempontjából ide tegyük. Célszerű amúgy a Service providerekben * extendelni a twiget. */ }
/** * @return UserInterface */ public function getUser() { $session = Application::Session(); if (!$session->get("loggedin")) { return null; } else { $class_name = $this->userClassName; /** @var UserInterface $user */ $user = new $class_name($session->get("userid")); return $user; } }
/** * @return UrlGenerator */ public static function UrlGenerator() { return Application::getInstance()->getPimpleElement("url_generator"); }