Example #1
0
 /**
  * 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.'));
     }
 }
Example #2
0
 /**
  * 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'] ?? '');
     }
 }
Example #3
0
 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);
 }
Example #4
0
 /**
  * @return \Minute\Model\ModelEx
  */
 protected function getConfigModel()
 {
     return $this->database->isConnected() ? $this->resolver->getModel('Config', true) : null;
 }