Example #1
0
 /**
  * set database
  * @param string $database
  * @return SQL
  */
 public function setDB($database = 'PF')
 {
     $f3 = \Base::instance();
     // "Hive" Key for DB storage
     $dbHiveKey = $this->getDbHiveKey($database);
     // check if DB connection already exists
     if (!$f3->exists($dbHiveKey)) {
         if ($database === 'CCP') {
             // CCP DB
             $dns = Controller\Controller::getEnvironmentData('DB_CCP_DNS');
             $name = Controller\Controller::getEnvironmentData('DB_CCP_NAME');
             $user = Controller\Controller::getEnvironmentData('DB_CCP_USER');
             $password = Controller\Controller::getEnvironmentData('DB_CCP_PASS');
         } else {
             // Pathfinder(PF) DB
             $dns = Controller\Controller::getEnvironmentData('DB_DNS');
             $name = Controller\Controller::getEnvironmentData('DB_NAME');
             $user = Controller\Controller::getEnvironmentData('DB_USER');
             $password = Controller\Controller::getEnvironmentData('DB_PASS');
         }
         $db = $this->connect($dns, $name, $user, $password);
         if (!is_null($db)) {
             // set DB timezone to UTC +00:00 (eve server time)
             $db->exec('SET @@session.time_zone = "+00:00";');
             // set default storage engine
             $db->exec('SET @@session.default_storage_engine = "' . Controller\Controller::getRequiredMySqlVariables('DEFAULT_STORAGE_ENGINE') . '"');
             // store DB object
             $f3->set($dbHiveKey, $db);
         }
         return $db;
     } else {
         return $f3->get($dbHiveKey);
     }
 }
Example #2
0
 /**
  * set database
  * @param string $database
  * @return SQL
  */
 public function setDB($database = 'PF')
 {
     $f3 = \Base::instance();
     // "Hive" Key for DB storage
     $dbHiveKey = $this->getDbHiveKey($database);
     if ($database === 'CCP') {
         // CCP DB
         $dns = Controller\Controller::getEnvironmentData('DB_CCP_DNS');
         $name = Controller\Controller::getEnvironmentData('DB_CCP_NAME');
         $user = Controller\Controller::getEnvironmentData('DB_CCP_USER');
         $password = Controller\Controller::getEnvironmentData('DB_CCP_PASS');
     } else {
         // Pathfinder(PF) DB
         $dns = Controller\Controller::getEnvironmentData('DB_DNS');
         $name = Controller\Controller::getEnvironmentData('DB_NAME');
         $user = Controller\Controller::getEnvironmentData('DB_USER');
         $password = Controller\Controller::getEnvironmentData('DB_PASS');
     }
     // check if DB connection already exists
     if (!$f3->exists($dbHiveKey) || $name !== $f3->get($dbHiveKey)->name()) {
         $db = $this->connect($dns, $name, $user, $password);
         // set DB timezone to UTC +00:00 (eve server time)
         $db->exec('SET @@session.time_zone = "+00:00";');
         // disable innoDB schema (relevant vor MySql 5.5)
         // not necessary for MySql > v.5.6
         // $db->exec('SET GLOBAL innodb_stats_on_metadata = OFF;');
         // store DB object
         $f3->set($dbHiveKey, $db);
         return $db;
     } else {
         return $f3->get($dbHiveKey);
     }
 }
Example #3
0
 /**
  * set database
  * @param string $database
  */
 public function setDB($database = 'PF')
 {
     $f3 = \Base::instance();
     if ($database === 'CCP') {
         // CCP DB
         $dns = Controller\Controller::getEnvironmentData('DB_CCP_DNS');
         $name = Controller\Controller::getEnvironmentData('DB_CCP_NAME');
         $user = Controller\Controller::getEnvironmentData('DB_CCP_USER');
         $password = Controller\Controller::getEnvironmentData('DB_CCP_PASS');
     } else {
         // Pathfinder DB
         $dns = Controller\Controller::getEnvironmentData('DB_DNS');
         $name = Controller\Controller::getEnvironmentData('DB_NAME');
         $user = Controller\Controller::getEnvironmentData('DB_USER');
         $password = Controller\Controller::getEnvironmentData('DB_PASS');
     }
     // check for DB switch. If current DB equal new DB -> no switch needed
     if (!$f3->exists('DB') || $name !== $f3->get('DB')->name()) {
         $db = $this->connect($dns, $name, $user, $password);
         $f3->set('DB', $db);
         // set DB timezone to UTC +00:00 (eve server time)
         $f3->get('DB')->exec('SET @@session.time_zone = "+00:00";');
         // disable innoDB schema (relevant vor MySql 5.5)
         // not necessary for MySql > v.5.6
         //$f3->get('DB')->exec('SET GLOBAL innodb_stats_on_metadata = OFF;');
     }
 }
Example #4
0
<?php

$f3 = (require 'app/lib/base.php');
// load main config
$f3->config('app/config.ini');
// load route config
$f3->config('app/routes.ini');
// load pathfinder config
$f3->config('app/pathfinder.ini');
// load cron config
$f3->config('app/cron.ini');
// set base dir
$f3->set('BASE', \Controller\Controller::getEnvironmentData('BASE'));
// set debug  level (stacktrace)
$f3->set('DEBUG', \Controller\Controller::getEnvironmentData('DEBUG'));
// set debug  level (stacktrace)
$f3->set('URL', \Controller\Controller::getEnvironmentData('URL'));
// initiate cron-jobs
Cron::instance();
$f3->run();
Example #5
0
 /**
  * get database connection information
  * @param $f3
  * @param bool|false $exec
  * @return array
  */
 protected function checkDatabase($f3, $exec = false)
 {
     foreach ($this->databases as $dbKey => $dbData) {
         $dbLabel = '';
         $dbName = '';
         $dbUser = '';
         $dbConfig = [];
         // DB connection status
         $dbConnected = false;
         // DB type (e.g. MySql,..)
         $dbDriver = 'unknown';
         // enable database ::setup() function in UI
         $dbSetupEnable = false;
         // check  of everything is OK (connection, tables, columns, indexes,..)
         $dbStatusCheckCount = 0;
         // db queries for column fixes (types, indexes, unique)
         $dbColumnQueries = [];
         // tables that should exist in this DB
         $requiredTables = [];
         // check DB for valid connection
         $db = DB\Database::instance()->getDB($dbKey);
         switch ($dbKey) {
             case 'PF':
                 $dbLabel = 'Pathfinder';
                 $dbName = Controller::getEnvironmentData('DB_NAME');
                 $dbUser = Controller::getEnvironmentData('DB_USER');
                 // enable (table) setup for this DB
                 $dbSetupEnable = true;
                 // get table data from model
                 foreach ($dbData['models'] as $model) {
                     $tableConfig = call_user_func($model . '::resolveConfiguration');
                     $requiredTables[$tableConfig['table']] = ['model' => $model, 'name' => $tableConfig['table'], 'fieldConf' => $tableConfig['fieldConf'], 'exists' => false, 'empty' => true, 'foreignKeys' => []];
                 }
                 break;
             case 'CCP':
                 $dbLabel = 'EVE-Online [SDE]';
                 $dbName = Controller::getEnvironmentData('DB_CCP_NAME');
                 $dbUser = Controller::getEnvironmentData('DB_CCP_USER');
                 // get table model from static table array
                 foreach ($dbData['tables'] as $tableName) {
                     $requiredTables[$tableName] = ['exists' => false, 'empty' => true];
                 }
                 break;
         }
         if ($db) {
             // db connect was successful
             $dbConnected = true;
             $dbDriver = $db->driver();
             $dbConfig = $this->checkDBConfig($f3, $db);
             // get tables
             $schema = new SQL\Schema($db);
             $currentTables = $schema->getTables();
             // check each table for changes
             foreach ($requiredTables as $requiredTableName => $data) {
                 $tableExists = false;
                 $tableEmpty = true;
                 // Check if table status is OK (no errors/warnings,..)
                 $tableStatusCheckCount = 0;
                 $currentColumns = [];
                 if (in_array($requiredTableName, $currentTables)) {
                     // Table exists
                     $tableExists = true;
                     // get existing table columns and column related constraints (if exists)
                     $tableModifierTemp = new MySQL\TableModifier($requiredTableName, $schema);
                     $currentColumns = $tableModifierTemp->getCols(true);
                     // get row count
                     $countRes = $db->exec("SELECT COUNT(*) `num` FROM " . $db->quotekey($requiredTableName));
                     $tableEmpty = $countRes[0]['num'] > 0 ? false : true;
                 } else {
                     // table missing
                     $dbStatusCheckCount++;
                     $tableStatusCheckCount++;
                 }
                 foreach ((array) $data['fieldConf'] as $columnName => $fieldConf) {
                     $columnStatusCheck = true;
                     $foreignKeyStatusCheck = true;
                     $requiredTables[$requiredTableName]['fieldConf'][$columnName]['requiredType'] = $fieldConf['type'];
                     $requiredTables[$requiredTableName]['fieldConf'][$columnName]['requiredIndex'] = $fieldConf['index'] ? '1' : '0';
                     $requiredTables[$requiredTableName]['fieldConf'][$columnName]['requiredUnique'] = $fieldConf['unique'] ? '1' : '0';
                     if (array_key_exists($columnName, $currentColumns)) {
                         // column exists
                         // get tableModifier -> possible column update
                         $tableModifier = new MySQL\TableModifier($requiredTableName, $schema);
                         // get new column and copy Schema from existing column
                         $col = new MySQL\Column($columnName, $tableModifier);
                         $col->copyfrom($currentColumns[$columnName]);
                         $currentColType = $currentColumns[$columnName]['type'];
                         $currentColIndexData = call_user_func($data['model'] . '::indexExists', [$columnName]);
                         $currentColIndex = is_array($currentColIndexData);
                         $hasIndex = $currentColIndex ? '1' : '0';
                         $hasUnique = $currentColIndexData['unique'] ? '1' : '0';
                         $changedType = false;
                         $changedUnique = false;
                         $changedIndex = false;
                         // set (new) column information -------------------------------------------------------
                         $requiredTables[$requiredTableName]['fieldConf'][$columnName]['exists'] = true;
                         $requiredTables[$requiredTableName]['fieldConf'][$columnName]['currentType'] = $currentColType;
                         $requiredTables[$requiredTableName]['fieldConf'][$columnName]['currentIndex'] = $hasIndex;
                         $requiredTables[$requiredTableName]['fieldConf'][$columnName]['currentUnique'] = $hasUnique;
                         // check constraint -------------------------------------------------------------------
                         if (isset($fieldConf['constraint'])) {
                             // add or update constraints
                             foreach ((array) $fieldConf['constraint'] as $constraintData) {
                                 $constraint = $col->newConstraint($constraintData);
                                 $foreignKeyExists = $col->constraintExists($constraint);
                                 $requiredTables[$requiredTableName]['foreignKeys'][] = ['exists' => $foreignKeyExists, 'keyName' => $constraint->getConstraintName()];
                                 $col->addConstraint($constraint);
                                 if (!$foreignKeyExists) {
                                     $tableStatusCheckCount++;
                                     $foreignKeyStatusCheck = false;
                                 }
                             }
                         }
                         // check type changed -----------------------------------------------------------------
                         if ($fieldConf['type'] !== 'JSON' && !$schema->isCompatible($fieldConf['type'], $currentColType)) {
                             // column type has changed
                             $changedType = true;
                             $columnStatusCheck = false;
                             $tableStatusCheckCount++;
                         }
                         // check if column unique changed -----------------------------------------------------
                         $indexUpdate = false;
                         $indexKey = (bool) $hasIndex;
                         $indexUnique = (bool) $hasUnique;
                         if ($currentColIndexData['unique'] != $fieldConf['unique']) {
                             $changedUnique = true;
                             $columnStatusCheck = false;
                             $tableStatusCheckCount++;
                             $indexUpdate = true;
                             $indexUnique = (bool) $fieldConf['unique'];
                         }
                         // check if column index changed ------------------------------------------------------
                         if ($currentColIndex != $fieldConf['index']) {
                             $changedIndex = true;
                             $columnStatusCheck = false;
                             $tableStatusCheckCount++;
                             $indexUpdate = true;
                             $indexKey = (bool) $fieldConf['index'];
                         }
                         // build table with changed columns ---------------------------------------------------
                         if (!$columnStatusCheck || !$foreignKeyStatusCheck) {
                             if (!$columnStatusCheck) {
                                 // IMPORTANT: setType is always required! Even if type has not changed
                                 $col->type($fieldConf['type']);
                                 // update/change/delete index/unique keys
                                 if ($indexUpdate) {
                                     if ($hasIndex) {
                                         $tableModifier->dropIndex($columnName);
                                     }
                                     if ($indexKey) {
                                         $tableModifier->addIndex($columnName, $indexUnique);
                                     }
                                 }
                                 $tableModifier->updateColumn($columnName, $col);
                             }
                             $buildStatus = $tableModifier->build($exec);
                             if (is_array($buildStatus) || is_string($buildStatus)) {
                                 // query strings for change available
                                 $dbColumnQueries = array_merge($dbColumnQueries, (array) $buildStatus);
                             }
                         }
                         // set (new) column information -------------------------------------------------------
                         $requiredTables[$requiredTableName]['fieldConf'][$columnName]['changedType'] = $changedType;
                         $requiredTables[$requiredTableName]['fieldConf'][$columnName]['changedUnique'] = $changedUnique;
                         $requiredTables[$requiredTableName]['fieldConf'][$columnName]['changedIndex'] = $changedIndex;
                     } elseif (!isset($fieldConf['has-manny']) && isset($fieldConf['type'])) {
                         // column not exists but it is required!
                         // columns that do not match this criteria ("mas-manny") are "virtual" fields
                         // and can be ignored
                         $requiredTables[$requiredTableName]['fieldConf'][$columnName]['currentType'] = '';
                         $columnStatusCheck = false;
                         $tableStatusCheckCount++;
                     }
                     $requiredTables[$requiredTableName]['fieldConf'][$columnName]['statusCheck'] = $columnStatusCheck;
                 }
                 $dbStatusCheckCount += $tableStatusCheckCount;
                 $requiredTables[$requiredTableName]['empty'] = $tableEmpty;
                 $requiredTables[$requiredTableName]['exists'] = $tableExists;
                 $requiredTables[$requiredTableName]['statusCheckCount'] = $tableStatusCheckCount;
             }
         } else {
             // DB connection failed
             $dbStatusCheckCount++;
         }
         if ($exec) {
             $f3->reroute('@setup');
         }
         $this->databases[$dbKey]['info'] = ['db' => $db, 'label' => $dbLabel, 'driver' => $dbDriver, 'name' => $dbName, 'user' => $dbUser, 'dbConfig' => $dbConfig, 'setupEnable' => $dbSetupEnable, 'connected' => $dbConnected, 'statusCheckCount' => $dbStatusCheckCount, 'columnQueries' => $dbColumnQueries, 'tableData' => $requiredTables];
     }
     return $this->databases;
 }
Example #6
0
 /**
  * get "Authorization:" Header data
  * -> This header is required for any Auth-required endpoints!
  * @return string
  */
 private function getAuthorizationHeader()
 {
     return base64_encode(Controller::getEnvironmentData('SSO_CCP_CLIENT_ID') . ':' . Controller::getEnvironmentData('SSO_CCP_SECRET_KEY'));
 }