#2 | Phalcon\Db\Adapter\Pdo->__construct(Array([host] => localhost, [port] => 3306, [username] => govern-soft, [password] => n1tYHNWdq8ukzcq8, [dbname] => govern-soft_dev, [dialectClass] => MysqlExtended, [options] => Array([1002] => SET NAMES utf8, [3] => 1)))
/var/www/new.govern.hu/www/apps/Bootstrap.php (65) <?php
namespace App;
use Phalcon\Mvc\Router;
use Phalcon\Mvc\Application;
use Phalcon\Di\FactoryDefault;
use Phalcon\Mvc\Dispatcher;
use Phalcon\Loader;
use Phalcon\Mvc\View;
use Phalcon\Config;
use Phalcon\Events\Manager as EventsManager;
use Phalcon\Mvc\View\Engine\Volt;
use Phalcon\Flash\Direct as Flash;
use Phalcon\Flash\Session as FlashSession;
use App\Admin\Component\HtmlComponent;
use App\Admin\Plugin\SecurityPlugin as Security;
use App\Admin\Component\UserComponent;
use App\Admin\Component\SortComponent;
use App\Admin\Component\ConvertComponent;
use App\Admin\Component\GenerateComponent;
use Phalcon\Db\Adapter\Pdo\Mysql as PdoMysql;
use Phalcon\Session\Adapter\Files as SessionAdapter;
use Phalcon\Mvc\Url as UrlProvider;
use Phalcon\Translate\Adapter\NativeArray as Translator;
use Phalcon\Http\Response\Cookies;
use Phalcon\Crypt;
class Bootstrap
{
public function run()
{
require BASE_PATH . "vendor/autoload.php";
// Create factory default
$di = new FactoryDefault();
$di->set("eventsManager", function ()
{
$em = new EventsManager();
return $em;
});
// Load apps
require_once APP_PATH . "Enum.php";
$apps = $this->loadApps();
// Loader
$loader = new Loader();
$loader->registerNamespaces($apps["namespaces"]);
$loader->register();
// Create config
$config = [];
foreach ($apps["apps"] as $app) {
$config[$app["name"]] = $app["appConfig"];
}
$config = new Config($config);
$di->set("config", $config);
// DB
require_once APP_PATH . "MysqlExtended.php";
$db = new PdoMysql([
"host" => $config->admin->database->host,
"port" => $config->admin->database->port,
"username" => $config->admin->database->username,
"password" => $config->admin->database->password,
"dbname" => $config->admin->database->name,
"dialectClass" => \MysqlExtended::class,
"options" => [
\PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_WARNING
]
]);
define("JSON_SUPPORT", true);
$di->set("db", $db);
// View
$view = new View();
$view->registerEngines([
".volt" => "voltService"
]);
$di->setShared("view", $view);
// Volt
$volt = new Volt($view, $di);
$volt->setOptions([
"compiledPath" => BASE_PATH . "cache" . DS . "volt" . DS,
"compiledExtension" => ".compiled",
"compileAlways" => true
]);
$di->setShared("voltService", $volt);
$di->set("dispatcher", function () use ($di)
{
$eventsManager = $di->getShared("eventsManager");
$security = new Security($di);
$eventsManager->attach("dispatch", $security);
$dispatcher = new Dispatcher();
$dispatcher->setEventsManager($eventsManager);
return $dispatcher;
});
// Session
$di->setShared("session", function ()
{
$session = new SessionAdapter();
$session->start();
return $session;
});
$session = $di->get("session");
$sessionCookie = $di->get("cookies")
->get($session->getName())
->useEncryption(false);
$timeout = 1200;
$now = time();
if ($sessionCookie->getExpiration() < $now) {
$session->regenerateId(true);
}
$sessionCookie->setValue($session->getId())
->setExpiration($now + $timeout)
->send();
// Register language && translations
$this->setupLang($di, $apps["apps"], $config->admin);
// Flash
$di->set("flash", function ()
{
$flash = new Flash([
"error" => "alert alert-danger",
"success" => "alert alert-success",
"notice" => "alert alert-info"
]);
$flash->setAutoescape(false);
return $flash;
});
// Flash session
$di->set("flashSession", function ()
{
$flashSession = new FlashSession([
"error" => "alert alert-danger",
"success" => "alert alert-success",
"notice" => "alert alert-info",
"warning" => "alert alert-warning"
]);
$flashSession->setAutoescape(false);
return $flashSession;
});
// Cookies
$di->set("cookies", function ()
{
$cookies = new Cookies();
$cookies->useEncryption(true);
return $cookies;
});
// Set encryption key
$di->set("crypt", function ()
{
$crypt = new Crypt();
$crypt->setKey("#151dj8$=dp?.ak//j1V$"); // Use a unique Key!
return $crypt;
});
// User component
$di->set("user", new UserComponent());
// Url
$di->set("url", function () use ($config)
{
$url = new UrlProvider();
$url->setBaseUri($config->admin->application->baseUri);
return $url;
});
// Sort
$di->set("sort", new SortComponent());
// Html
$di->set("html", new HtmlComponent());
// Convert
$di->set("convert", new ConvertComponent());
// Generate
$di->set("generate", new GenerateComponent());
// Create an application
$application = new Application($di);
// Register the installed modules
$application->registerModules($apps["apps"]);
// Handle the request
$response = $application->handle();
$response->send();
}
private function loadApps()
{
$appsData = [];
$apps = include_once APP_PATH . "Apps.php";
$base_namespace = "App\\";
$namespaces = [];
foreach ($apps as $app) {
$appsData[strtolower($app)] = [
"className" => $base_namespace . ucfirst($app) . "\\App",
"path" => APP_PATH . strtolower($app) . DS . "App.php",
"appConfig" => include_once APP_PATH . strtolower($app) . DS . "Config.php",
"name" => strtolower($app),
"routesClass" => $base_namespace . ucfirst($app) . "\\Routes"
];
$namespaces = array_merge($namespaces, $this->getNamespaces($app, $base_namespace));
}
return [
"apps" => $appsData,
"namespaces" => $namespaces
];
}
private function getNamespaces($app, $base_namespace)
{
$namespaces = [
$base_namespace . ucfirst($app) => APP_PATH . strtolower($app) . DS,
$base_namespace . ucfirst($app) . "\\Controller" => APP_PATH . strtolower($app) . DS . "controller" . DS,
$base_namespace . ucfirst($app) . "\\Model" => APP_PATH . strtolower($app) . DS . "model" . DS,
$base_namespace . ucfirst($app) . "\\Validator" => APP_PATH . strtolower($app) . DS . "validator" . DS,
$base_namespace . ucfirst($app) . "\\Form" => APP_PATH . strtolower($app) . DS . "form" . DS,
$base_namespace . ucfirst($app) . "\\Plugin" => APP_PATH . strtolower($app) . DS . "plugin" . DS,
$base_namespace . ucfirst($app) . "\\Component" => APP_PATH . strtolower($app) . DS . "component" . DS,
$base_namespace . ucfirst($app) . "\\Enum" => APP_PATH . strtolower($app) . DS . "enum" . DS
];
if ($app == "Admin") {
$namespaces[$base_namespace . ucfirst($app) . "\\Form\\Element"] = APP_PATH . strtolower($app) . DS . "form" . DS . "element" . DS;
}
return $namespaces;
}
/**
* Register language and translations
*
* @param FactoryDefault $di
* Depedency injector
* @param string $language
* Actual language
* @param array $modules
* Registered modules
* @param Config $config
* Config
*/
private function setupLang(FactoryDefault &$di, $modules, Config $config)
{
// Get choosen lang
$session = $di->get("session");
$request = $di->get("request");
$force = false;
if ($request->isGet() && $request->getQuery("lang")) {
$language = $request->getQuery("lang");
$force = true;
} elseif ($session->has("lang")) {
$language = $session->get("lang");
} else {
$language = substr($request->getBestLanguage(), 0, 2);
}
// Register language
$i18n = new \stdClass();
$i18n->default = $config->defaultLang;
$i18n->allLang = $config->offsetExists("languages") ? $config->languages->toArray() : [
$config->defaultLang => true
];
$i18n->items = [];
foreach ($i18n->allLang as $lang => $enabled) {
if ($enabled) {
$i18n->items[] = $lang;
}
}
$i18n->selected = in_array($language, $i18n->items) ? $language : $config->defaultLang;
$di->get("session")->set("lang", $i18n->selected);
$di->setShared("i18n", $i18n);
// Router
$this->setupRoutes($di, $modules, $force);
$i18n = $di->get("i18n");
// Register translations
$translations = [];
foreach ($modules as $item) {
$filename = APP_PATH . $item["name"] . DS . "translation" . DS . $i18n->selected . ".php";
if (file_exists($filename)) {
$translations += require_once $filename;
}
}
$di->setShared("trans", new Translator([
"content" => $translations
]));
}
private function setupRoutes(FactoryDefault &$di, array $modules, bool $force)
{
$i18n = $di->get("i18n");
$route = [
"lang" => $i18n->default
];
$allRoutes = [];
foreach ($i18n->allLang as $lang => $enabled) {
$router = new Router(false);
$router->setDefaultModule("admin")->removeExtraSlashes(true);
foreach ($modules as $app) {
$routesClassName = $app["routesClass"];
if (class_exists($routesClassName)) {
$module = $app["name"];
$routesClass = new $routesClassName($lang);
$routesClass->init($router, $module);
}
}
$router->handle();
if ($router->wasMatched() && ! $enabled) {
$route["route"] = $router->getMatchedRoute();
}
if ($router->wasMatched() && $enabled) {
if ($force) {
$route["route"] = $router->getMatchedRoute();
} else {
$route["lang"] = $lang;
}
}
$allRoutes[$lang] = $router;
if ($force && $i18n->selected == $lang && $enabled) {
$route["lang"] = $lang;
}
$router = null;
unset($router);
}
if (isset($route["route"])) {
$router = $allRoutes[$route["lang"]];
$router->handle();
if (! $router->wasMatched()) {
$param = [
"for" => $route["route"]->getName()
];
if ($router->getParams()) {
$param += $router->getParams();
}
$di->set("router", $router);
$di->get("response")
->redirect($param, false, 301)
->send();
exit();
}
} else {
if ($i18n->selected != $route["lang"]) {
$i18n->selected = $route["lang"];
$session = $di->get("session");
$session->destroy();
$session->set("lang", $i18n->selected);
}
}
if ($force) {
$router = $allRoutes[$route["lang"]];
$di->set("router", $router);
$di->get("response")
->redirect($router->getRewriteUri(), false, 301)
->send();
exit();
}
$router = new Router(false);
foreach ($modules as $app) {
$routesClassName = $app["routesClass"];
if (class_exists($routesClassName)) {
$module = $app["name"];
$routesClass = new $routesClassName($i18n->selected);
$routesClass->init($router, $module);
}
}
$router->setDefaultModule("admin")->removeExtraSlashes(true);
$di->set("router", $router);
}
}
|