Esempio n. 1
0
 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;
         }
     }
 }
Esempio n. 2
0
 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;
     }
 }
Esempio n. 3
0
 public static function generateClass()
 {
     //
     $cwd = getcwd();
     // TODO: model_namespace_for_path may have leading '/' - remove it?
     $model_filename = $cwd . DIRECTORY_SEPARATOR . self::$model_namespace_for_path . DIRECTORY_SEPARATOR . self::$model_class_name . '.php';
     $model_tablename = mb_strtolower(self::$model_namespace_for_class . "\\" . self::$model_class_name);
     $model_tablename = preg_replace('@\\W@', '_', $model_tablename);
     //
     // creating model class file
     //
     $class_file = self::getClassTemplate();
     // TODO: use common variable replacemnt method
     $class_file = str_replace('TEMPLATECLASS_CLASSNAME', self::$model_class_name, $class_file);
     $class_file = str_replace('TEMPLATECLASS_NAMESPACE', self::$model_namespace_for_class, $class_file);
     $class_file = str_replace('TEMPLATECLASS_TABLENAME', $model_tablename, $class_file);
     $class_file = str_replace('TEMPLATECLASS_DBID', self::$model_db_id, $class_file);
     self::file_force_contents($model_filename, $class_file);
     echo "\nModel file created: " . $model_filename . "\n";
     //
     // altering database sql file
     //
     $class_sql = self::getClassSQL();
     // TODO: use common variable replacemnt method
     $class_sql = str_replace('TEMPLATECLASS_TABLENAME', $model_tablename, $class_sql);
     CLIExecuteSql::addSqlToRegistry(self::$model_db_id, $class_sql);
     echo "\nSQL registry updated\n";
     echo "\nType ENTER to execute SQL queries, Ctrl+C to exit.\n";
     $command_str = CliUtil::readStdinAnswer();
     if ($command_str == '') {
         CLIExecuteSql::executeSqlScreen();
     }
     return;
 }
Esempio n. 4
0
 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?
             }
         }
     }
 }
Esempio n. 5
0
 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;
         }
     }
 }