/** * FirstRun constructor. * * @param Database $database * @param Lang $lang * @param BootLoader $bootLoader * @param Session $session * * @param PluginInstaller $installer * * @param Sniffer $sniffer * * @throws FirstRunError */ public function __construct(Database $database, Lang $lang, BootLoader $bootLoader, Session $session, PluginInstaller $installer, Sniffer $sniffer) { $this->lang = $lang; $this->database = $database; $this->bootLoader = $bootLoader; $this->session = $session; $this->installer = $installer; $this->sniffer = $sniffer; if (@$_GET['reset'] === '1') { //`echo drop database fff; create database fff; | mysql -uroot -psan`; @unlink($this->bootLoader->getBaseDir() . '/app/Config/db-config'); } if ($this->database->isConnected()) { throw new FirstRunError($this->lang->getText('Database has already been setup. Please remove the database configuration file (\\app\\Config\\db-config) before running this script.')); } }
/** * Bind listeners defined in plugins, app and Database */ public function bind() { $listeners = $this->cache->get('app-listeners', function () { foreach ($this->resolver->getListeners() as $file) { try { $binding = $this; require_once $file; } catch (\Throwable $e) { $this->logger->warn("Unable to include {$file}: " . $e->getMessage()); } } $listeners = $this->getListeners(); if ($this->database->isConnected()) { /** @var ModelEx $eventModel */ if ($eventModel = $this->resolver->getModel('Event', true)) { try { foreach ($eventModel::all() as $item) { $attrs = $item->attributesToArray(); list($class, $func) = @explode('@', $attrs['handler']); $event = array_merge($attrs, ['event' => $attrs['name'], 'handler' => [sprintf('\\%s', ltrim($class, '\\')), $func ?? 'index']]); $listeners[] = $event; } } catch (\Exception $e) { } } } return $listeners; }, 300); foreach ($listeners as $listener) { $this->dispatcher->listen($listener['event'], $listener['handler'], $listener['priority'] ?? 99, $listener['data'] ?? ''); } }
public function importSession(ViewEvent $event) { if (!$this->database->isConnected()) { return; } /** @var RouteEx $route */ $view = $event->getView(); $vars = $view->getVars(); $route = $view->get('_route'); $data = $this->getCachedSessionData(false); $data['request'] = array_merge(['url' => getenv('REQUEST_URI')], $this->request->getParameters()); $data['params'] = array_diff_key($route->getDefaults(), array_flip(['controller', 'auth', 'models', '_route'])); foreach ($vars as $key => $value) { if ($key[0] !== '_' && (is_scalar($value) || is_array($value))) { $data['vars'][$key] = $value; } } if (!empty($data['site'])) { $data['site']['version'] = $this->database->hasRdsAccess() ? 'production' : 'debug'; } $printer = sprintf('<script' . '>Minute.setSessionData(%s)</script>', json_encode($data)); $event->setContent($printer); }
/** * @return \Minute\Model\ModelEx */ protected function getConfigModel() { return $this->database->isConnected() ? $this->resolver->getModel('Config', true) : null; }