예제 #1
0
 protected function generateCode()
 {
     $files = $this->generator->generate();
     $n = count($files);
     if ($n === 0) {
         echo "No code to be generated.\n";
         return;
     }
     echo "The following files will be generated:\n";
     $skipAll = $this->controller->interactive ? null : !$this->controller->overwrite;
     $answers = [];
     foreach ($files as $file) {
         $path = $file->getRelativePath();
         if (is_file($file->path)) {
             if (file_get_contents($file->path) === $file->content) {
                 echo '  ' . $this->controller->ansiFormat('[unchanged]', Console::FG_GREY);
                 echo $this->controller->ansiFormat(" {$path}\n", Console::FG_CYAN);
                 $answers[$file->id] = false;
             } else {
                 echo '    ' . $this->controller->ansiFormat('[changed]', Console::FG_RED);
                 echo $this->controller->ansiFormat(" {$path}\n", Console::FG_CYAN);
                 if ($skipAll !== null) {
                     $answers[$file->id] = !$skipAll;
                 } else {
                     $answer = $this->controller->select("Do you want to overwrite this file?", ['y' => 'Overwrite this file.', 'n' => 'Skip this file.', 'ya' => 'Overwrite this and the rest of the changed files.', 'na' => 'Skip this and the rest of the changed files.']);
                     $answers[$file->id] = $answer === 'y' || $answer === 'ya';
                     if ($answer === 'ya') {
                         $skipAll = false;
                     } elseif ($answer === 'na') {
                         $skipAll = true;
                     }
                 }
             }
         } else {
             echo '        ' . $this->controller->ansiFormat('[new]', Console::FG_GREEN);
             echo $this->controller->ansiFormat(" {$path}\n", Console::FG_CYAN);
             $answers[$file->id] = true;
         }
     }
     if (!array_sum($answers)) {
         $this->controller->stdout("\nNo files were chosen to be generated.\n", Console::FG_CYAN);
         return;
     }
     if (!$this->controller->confirm("\nReady to generate the selected files?", true)) {
         $this->controller->stdout("\nNo file was generated.\n", Console::FG_CYAN);
         return;
     }
     if ($this->generator->save($files, (array) $answers, $results)) {
         $this->controller->stdout("\nFiles were generated successfully!\n", Console::FG_GREEN);
     } else {
         $this->controller->stdout("\nSome errors occurred while generating the files.", Console::FG_RED);
     }
     echo preg_replace('%<span class="error">(.*?)</span>%', '\\1', $results) . "\n";
 }
예제 #2
0
 /**
  * @inheritdoc
  */
 public function init()
 {
     $stickyAttributes = $this->model->stickyAttributes();
     if (in_array($this->attribute, $stickyAttributes)) {
         $this->sticky();
     }
     $hints = $this->model->hints();
     if (isset($hints[$this->attribute])) {
         $this->hint($hints[$this->attribute]);
     }
     $autoCompleteData = $this->model->autoCompleteData();
     if (isset($autoCompleteData[$this->attribute])) {
         if (is_callable($autoCompleteData[$this->attribute])) {
             $this->autoComplete(call_user_func($autoCompleteData[$this->attribute]));
         } else {
             $this->autoComplete($autoCompleteData[$this->attribute]);
         }
     }
 }
예제 #3
0
 /**
  * Loads the generator with the specified ID.
  * @param string $id the ID of the generator to be loaded.
  * @return \richkay\geesgii\Generator the loaded generator
  * @throws NotFoundHttpException
  */
 protected function loadGenerator($id)
 {
     if (isset($this->module->generators[$id])) {
         $this->generator = $this->module->generators[$id];
         $this->generator->loadStickyAttributes();
         $this->generator->load(Yii::$app->request->post());
         return $this->generator;
     } else {
         throw new NotFoundHttpException("Code generator not found: {$id}");
     }
 }
예제 #4
0
 /**
  * @inheritdoc
  */
 public function stickyAttributes()
 {
     return array_merge(parent::stickyAttributes(), ['baseControllerClass']);
 }
예제 #5
0
 /**
  * @inheritdoc
  */
 public function rules()
 {
     return array_merge(parent::rules(), [[['controllerClass', 'actions', 'baseClass'], 'filter', 'filter' => 'trim'], [['controllerClass', 'baseClass'], 'required'], ['controllerClass', 'match', 'pattern' => '/^[\\w\\\\]*Controller$/', 'message' => 'Only word characters and backslashes are allowed, and the class name must end with "Controller".'], ['controllerClass', 'validateNewClass'], ['baseClass', 'match', 'pattern' => '/^[\\w\\\\]*$/', 'message' => 'Only word characters and backslashes are allowed.'], ['actions', 'match', 'pattern' => '/^[a-z][a-z0-9\\-,\\s]*$/', 'message' => 'Only a-z, 0-9, dashes (-), spaces and commas are allowed.'], ['viewPath', 'safe']]);
 }
예제 #6
0
 /**
  * @inheritdoc
  */
 public function stickyAttributes()
 {
     return array_merge(parent::stickyAttributes(), ['migrationPath', 'db', 'generateRelations', 'useTablePrefix']);
 }
예제 #7
0
 /**
  * @inheritdoc
  */
 public function rules()
 {
     return array_merge(parent::rules(), [[['moduleID', 'moduleClass'], 'filter', 'filter' => 'trim'], [['moduleID', 'moduleClass'], 'required'], [['moduleID'], 'match', 'pattern' => '/^[\\w\\-]+$/', 'message' => 'Only word characters and dashes are allowed.'], [['moduleClass'], 'match', 'pattern' => '/^[\\w\\\\]*$/', 'message' => 'Only word characters and backslashes are allowed.'], [['moduleClass'], 'validateModuleClass']]);
 }
예제 #8
0
 /**
  * @inheritdoc
  */
 public function stickyAttributes()
 {
     return array_merge(parent::stickyAttributes(), ['ns', 'db', 'baseClass', 'generateRelations', 'generateLabelsFromComments', 'queryNs', 'queryBaseClass']);
 }