/** * Determines what action should be performed and takes that action. * * @uses MPM_PATH * @uses MPM_METHOD_PDO * @uses MPM_METHOD_MYSQLI * @uses MpmDbHelper::checkForDbTable() * @uses MpmDbHelper::getDbObj() * @uses MpmDbHelper::getMethod() * @uses MpmInitController::displayHelp() * @uses MpmCommandLineWriter::getInstance() * @uses MpmCommandLineWriter::writeHeader() * @uses MpmCommandLineWriter::writeFooter() * @uses MpmBuildController::build() * * @return void */ public function doAction() { $user = ''; $dbname = ''; $port = ''; $db_path = ''; $method = 0; $clw = MpmCommandLineWriter::getInstance(); $clw->writeHeader(); echo "Defaults are in brackets ([]). To accept the default, simply press ENTER.\n\n"; $skip_init_db_migration_config = false; if (file_exists(MPM_CONFIG_FILE_PATH . '/db_migration_config.php') || file_exists(MPM_CONFIG_FILE_PATH . '/db.php')) { echo "\nFound an existing migration config file db_migration_config.php and will use that"; $skip_init_db_migration_config = true; } else { $this->init_db_migration_config(); } // $db_config is introduced by require db_migration_config.php if (file_exists(MPM_CONFIG_FILE_PATH . '/db_migration_config.php')) { require MPM_CONFIG_FILE_PATH . '/db_migration_config.php'; } else { // Use adapter to read from WAGERplayer DB config file require MPM_MIGRATION_FILE_PATH . '/db_migration_config_adapter.php'; } $GLOBALS['db_config'] = $db_config; $this->init_migration_db_table($db_config->migrations_table); // by default we don't rebuild database or running migrations if (isset($doBuild) && $doBuild === true) { $obj = new MpmBuildController('build', $this->arguments); $obj->build(); echo "\n\n"; } else { echo "Your next step can be './migrate.php latest' to run all the migrations. \n\n"; } $clw->writeFooter(); exit; }
/** * Determines what action should be performed and takes that action. * * @uses MPM_PATH * @uses MPM_METHOD_PDO * @uses MPM_METHOD_MYSQLI * @uses MpmDbHelper::checkForDbTable() * @uses MpmDbHelper::getDbObj() * @uses MpmDbHelper::getMethod() * @uses MpmInitController::displayHelp() * @uses MpmCommandLineWriter::getInstance() * @uses MpmCommandLineWriter::writeHeader() * @uses MpmCommandLineWriter::writeFooter() * @uses MpmBuildController::build() * * @return void */ public function doAction() { $user = ''; $dbname = ''; $port = ''; $db_path = ''; $method = 0; $clw = MpmCommandLineWriter::getInstance(); $clw->writeHeader(); echo "Defaults are in brackets ([]). To accept the default, simply press ENTER.\n\n"; if (file_exists(MPM_PATH . '/config/db_config.php')) { echo "\nWARNING: IF YOU CONTINUE, YOUR EXISTING MIGRATION SETUP WILL BE ERASED!"; echo "\nThis will not affect your existing migrations or database, but \ncould cause your future migrations to fail."; echo "\nDO YOU WANT TO CONTINUE? [y/N] "; $answer = fgets(STDIN); $answer = trim($answer); $answer = strtolower($answer); if (empty($answer) || substr($answer, 0, 1) == 'n') { echo "\nABORTED!\n\n"; $clw->writeFooter(); exit; } else { require MPM_PATH . '/config/db_config.php'; } } do { echo "\nWhich method would you like to use to connect to\nthe database? " . MPM_METHOD_PDO . "=PDO or " . MPM_METHOD_MYSQLI . "=MySQLi"; if (isset($db_config)) { echo " [" . $db_config->method . "]"; } echo ": "; $method = fgets(STDIN); $method = trim($method); if (!is_numeric($method)) { $method = 0; } if (empty($method) && isset($db_config)) { $method = $db_config->method; } } while ($method < MPM_METHOD_PDO || $method > MPM_METHOD_MYSQLI || $method == 0); echo "\nEnter your MySQL database hostname or IP address ["; if (isset($db_config)) { echo $db_config->host; } else { echo 'localhost'; } echo ']: '; $host = fgets(STDIN); $host = trim($host); if (empty($host)) { if (isset($db_config)) { $host = $db_config->host; } else { $host = 'localhost'; } } while (empty($port)) { echo "\nEnter your MySQL database port ["; if (isset($db_config)) { echo $db_config->port; } else { echo '3306'; } echo ']: '; $port = fgets(STDIN); $port = trim($port); if (empty($port)) { $port = 3306; } if (!is_numeric($port)) { $port = ''; } } while (empty($user)) { echo "\nEnter your MySQL database username"; if (isset($db_config)) { echo ' [', $db_config->user, ']'; } echo ': '; $user = fgets(STDIN); $user = trim($user); if (empty($user) && isset($db_config)) { $user = $db_config->user; } } echo "\nEnter your MySQL database password (enter - for no password) ["; if (isset($db_config)) { echo $db_config->pass; } echo ']: '; $pass = fgets(STDIN); $pass = trim($pass); if (empty($pass) && isset($db_config)) { $pass = $db_config->pass; } else { if ($pass == '-') { $pass = ''; } } while (empty($dbname)) { echo "\nEnter your MySQL database name"; if (isset($db_config)) { echo ' [', $db_config->name, ']'; } echo ': '; $dbname = fgets(STDIN); $dbname = trim($dbname); if (empty($dbname) && isset($db_config)) { $dbname = $db_config->name; } } echo "\nEnter the directory where you'd like to store your\nmigration files ["; if (isset($db_config)) { echo $db_config->db_path; } else { echo MPM_PATH . '/db/'; } echo ']: '; $db_path = fgets(STDIN); $db_path = trim($db_path); if (empty($db_path) && isset($db_config)) { $db_path = $db_config->db_path; } else { if (empty($db_path) && !isset($db_config)) { $db_path = MPM_PATH . '/db/'; } } if (substr($db_path, strlen($db_path) - 1, 1) != '/') { $db_path .= '/'; } $method = (int) $method; if (file_exists($db_path . 'schema.php')) { echo "\nPerform build of database after initialization (builds schema\nand runs all existing migrations) [y/N]: "; $do_build = fgets(STDIN); $do_build = trim($do_build); $doBuild = false; if (strcasecmp(substr($do_build, 0, 1), 'y') == 0) { $doBuild = true; } } $file = '<?php' . "\n\n"; $file .= '$db_config = (object) array();' . "\n"; $file .= '$db_config->host = ' . "'" . $host . "';" . "\n"; $file .= '$db_config->port = ' . "'" . $port . "';" . "\n"; $file .= '$db_config->user = '******'" . $user . "';" . "\n"; $file .= '$db_config->pass = '******'" . $pass . "';" . "\n"; $file .= '$db_config->name = ' . "'" . $dbname . "';" . "\n"; $file .= '$db_config->db_path = ' . "'" . $db_path . "';" . "\n"; $file .= '$db_config->method = ' . $method . ";" . "\n"; $file .= "\n?>"; if (file_exists(MPM_PATH . '/config/db_config.php')) { unlink(MPM_PATH . '/config/db_config.php'); } $fp = fopen(MPM_PATH . '/config/db_config.php', "w"); if ($fp == false) { echo "\nUnable to write to file. Initialization failed!\n\n"; exit; } $success = fwrite($fp, $file); if ($success == false) { echo "\nUnable to write to file. Initialization failed!\n\n"; exit; } fclose($fp); require MPM_PATH . '/config/db_config.php'; $GLOBALS['db_config'] = $db_config; echo "\nConfiguration saved... looking for existing migrations table... "; try { if (false === MpmDbHelper::checkForDbTable()) { echo "not found.\n"; echo "Creating migrations table... "; $sql1 = "CREATE TABLE IF NOT EXISTS `mpm_migrations` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `timestamp` DATETIME NOT NULL, `active` TINYINT(1) NOT NULL DEFAULT 0, `is_current` TINYINT(1) NOT NULL DEFAULT 0, PRIMARY KEY ( `id` ) ) ENGINE=InnoDB"; $sql2 = "CREATE UNIQUE INDEX `TIMESTAMP_INDEX` ON `mpm_migrations` ( `timestamp` )"; if (MpmDbHelper::getMethod() == MPM_METHOD_PDO) { $pdo = MpmDbHelper::getDbObj(); $pdo->beginTransaction(); try { $pdo->exec($sql1); $pdo->exec($sql2); } catch (Exception $e) { $pdo->rollback(); echo "failure!\n\n" . 'Unable to create required mpm_migrations table:' . $e->getMessage(); echo "\n\n"; exit; } $pdo->commit(); } else { $mysqli = MpmDbHelper::getDbObj(); $mysqli->query($sql1); if ($mysqli->errno) { echo "failure!\n\n" . 'Unable to create required mpm_migrations table:' . $mysqli->error; echo "\n\n"; exit; } $mysqli->query($sql2); if ($mysqli->errno) { echo "failure!\n\n" . 'Unable to create required mpm_migrations table:' . $mysqli->error; echo "\n\n"; exit; } } echo "done.\n\n"; } else { echo "found.\n\n"; } } catch (Exception $e) { echo "failure!\n\nUnable to complete initialization: " . $e->getMessage() . "\n\n"; echo "Check your database settings and re-run init.\n\n"; exit; } if (isset($doBuild) && $doBuild === true) { $obj = new MpmBuildController(); $obj->build(); echo "\n\n"; } echo "Initalization complete! Type 'php migrate.php help' for a list of commands.\n\n"; $clw->writeFooter(); exit; }