public static function run() { while (true) { echo CliUtil::delimiter(); echo "Choose PHPModel function:\n"; echo "\t" . self::FUNCTION_EXECUTE_SQL . ": execute new SQL queries from registry\n"; echo "\t" . self::FUNCTION_CREATE_MODEL . ": create model\n"; echo "\t" . self::FUNCTION_ADD_MODEL_FIELD . ": add field to existing model\n"; echo "\t" . self::FUNCTION_MODEL_FIELD_EXTRAS . ": extra operations on model field\n"; echo "\tENTER: exit\n"; $command_str = CliUtil::readStdinAnswer(); switch ($command_str) { case self::FUNCTION_EXECUTE_SQL: CLIExecuteSql::executeSqlScreen(); break; case self::FUNCTION_CREATE_MODEL: CLICreateModel::enterClassNameScreen(); break; case self::FUNCTION_ADD_MODEL_FIELD: $cli_add_field_obj = new CLIAddFieldToModel(); $cli_add_field_obj->addField(); break; case self::FUNCTION_MODEL_FIELD_EXTRAS: $cli_add_field_obj = new CLIAddFieldToModel(); $cli_add_field_obj->extraFieldFunctionsScreen(); break; default: exit; } } }
public static function selectFileName($folder, $only_files = true) { while (true) { $dirty_arr = scandir($folder); // убираем все элементы, которые начинаются с . $arr = []; $index = 1; foreach ($dirty_arr as $dir_item) { if (!preg_match('@^\\.@', $dir_item)) { $arr[$index] = $dir_item; $index++; } } echo "\n" . $folder . ":\n"; foreach ($arr as $index => $item) { echo "\t" . str_pad($index, 8, '.') . $item . "\n"; } echo "\nEnter file or directory index:\n"; $index = CliUtil::readStdinAnswer(); if (!array_key_exists($index, $arr)) { echo "Index not found\n"; continue; } $selected_path = $folder . DIRECTORY_SEPARATOR . $arr[$index]; if (is_dir($selected_path)) { if ($only_files) { $folder = $selected_path; continue; } echo CliUtil::delimiter(); echo "Selected directory: " . $selected_path . "\n"; echo "Use it or enter directory?\n\t1 use directory\n\tENTER enter directory\n"; // TODO: constants $answer = CliUtil::readStdinAnswer(); switch ($answer) { case 1: // TODO: use constant return $selected_path; case '': $folder = $selected_path; break; default: throw new \Exception('Unknown answer'); } continue; } return $selected_path; } }
public static function chooseModelDBIndex() { echo CliUtil::delimiter(); echo "Choose model DB index:\n"; //$db_arr = \OLOG\ConfWrapper::value(\OLOG\Model\ModelConstants::MODULE_CONFIG_ROOT_KEY . '.db'); // TODO: check not empty $db_arr = DBConfig::getDBSettingsObjArr(); Assert::assert(count($db_arr) > 0, 'No database settings found in config'); // TODO: select db by index $db_id_by_index = []; $index = 1; foreach ($db_arr as $db_id => $db_settings_obj) { echo "\t" . str_pad($index, 8, '.') . $db_id . "\n"; $db_id_by_index[$index] = $db_id; $index++; } $model_db_index = CliUtil::readStdinAnswer(); if (!array_key_exists($model_db_index, $db_id_by_index)) { throw new \Exception('Wrong index'); } self::$model_db_id = $db_id_by_index[$model_db_index]; // TODO: check db presence in config? self::generateClass(); }
public static function process_db($db_id) { // checking DB connectivity $db_obj = null; try { $db_obj = \OLOG\DB\DBFactory::getDB($db_id); } catch (\Exception $e) { echo $e->getMessage() . "\n\n"; } if (!$db_obj) { echo CliUtil::delimiter(); echo "Can't connect to database " . $db_id . "\n"; echo "Probable problems:\n"; echo "- misconfiguration. App config for database:\n"; //echo var_export(DBFactory::getConfigArr($db_id)) . "\n"; // TODO: fix echo "- database server not accessible\n"; echo "- database not created. It must be created manually.\n"; exit; } $executed_queries_sql_arr = []; try { $executed_queries_sql_arr = \OLOG\DB\DBWrapper::readColumn($db_id, 'select sql_query from ' . self::EXECUTED_QUERIES_TABLE_NAME); } catch (\Exception $e) { echo CliUtil::delimiter(); echo "Can not load the executed queries list from " . self::EXECUTED_QUERIES_TABLE_NAME . " table:\n"; echo $e->getMessage() . "\n\n"; echo "Probably the " . self::EXECUTED_QUERIES_TABLE_NAME . " table was not created. Choose:\n"; echo "\tENTER to create table and proceed\n"; // TODO: constants echo "\tany other key to exit\n"; $command_str = CliUtil::readStdinAnswer(); // TODO: switch if ($command_str == '') { // TODO: constants \OLOG\DB\DBWrapper::query($db_id, 'create table ' . self::EXECUTED_QUERIES_TABLE_NAME . ' (id int not null auto_increment primary key, created_at_ts int not null, sql_query text) engine InnoDB default charset utf8'); } else { exit; } } $sql_arr = self::loadSqlArrForDB($db_id); foreach ($sql_arr as $sql) { if (!in_array($sql, $executed_queries_sql_arr)) { echo CliUtil::delimiter(); echo $sql . "\n"; // TODO: constants echo "\n"; echo "\t" . self::COMMAND_SKIP_QUERY . ": skip query now, do not mark as executed\n"; echo "\t" . self::COMMAND_IGNORE_QUERY . ": ignore query - mark as executed, but do not execute (you can execute one manually)\n"; echo "\tENTER execute query\n"; $command_str = CliUtil::readStdinAnswer(); switch ($command_str) { case '': \OLOG\DB\DBWrapper::query($db_id, $sql); \OLOG\DB\DBWrapper::query($db_id, 'insert into ' . self::EXECUTED_QUERIES_TABLE_NAME . ' (created_at_ts, sql_query) values (?, ?)', array(time(), $sql)); echo "Query executed.\n"; break; case self::COMMAND_IGNORE_QUERY: \OLOG\DB\DBWrapper::query($db_id, 'insert into ' . self::EXECUTED_QUERIES_TABLE_NAME . ' (created_at_ts, sql_query) values (?, ?)', array(time(), $sql)); echo "Query marked as executed without execution.\n"; break; case self::COMMAND_SKIP_QUERY: echo "Query skipped.\n"; break; default: //echo "Unknown command.\n"; throw new \Exception('unknown command'); break; // TODO: repeat entry? } } } }
public function extraFieldFunctionsScreen() { if (!$this->model_file_path) { echo "\nChoose model class file:\n"; $this->model_file_path = CLIFileSelector::selectFileName(getcwd()); echo "\nClass file: " . $this->model_file_path . "\n"; } $class_file_obj = new PHPClassFile($this->model_file_path); if (!$this->field_name) { $this->field_name = $this->askFieldName($class_file_obj); } Assert::assert($this->model_file_path); Assert::assert($this->field_name); while (true) { echo CliUtil::delimiter(); echo "Extra functions:\n"; echo "\t" . self::FUNCTION_CODE_ADD_UNIQUE_KEY . ": create unique key for field\n"; echo "\t" . self::FUNCTION_ADD_FOREIGN_KEY . ": create foreign key for field\n"; echo "\t" . self::FUNCTION_ADD_SELECTOR . ": create selector for field\n"; echo "\t" . "ENTER: exit to menu\n"; // TODO: use constants $function_code = trim(fgets(STDIN)); // TODO: check format switch ($function_code) { case self::FUNCTION_CODE_ADD_UNIQUE_KEY: $this->addUniqueKey(); break; case self::FUNCTION_ADD_FOREIGN_KEY: $this->addForeignKey(); break; case self::FUNCTION_ADD_SELECTOR: $this->addSelector(); break; case '': return; } } }