mootensai\enhancedgii\crud\Generator::generate PHP Method

generate() public method

public generate ( )
    public function generate()
    {
        $files = [];
        $relations = $this->generateRelations();
        $this->relations = $relations;
        $db = $this->getDbConnection();
        $this->nameAttribute = $this->nameAttribute ? explode(',', str_replace(' ', '', $this->nameAttribute)) : [$this->nameAttribute];
        $this->hiddenColumns = $this->hiddenColumns ? explode(',', str_replace(' ', '', $this->hiddenColumns)) : [$this->hiddenColumns];
        $this->skippedColumns = $this->skippedColumns ? explode(',', str_replace(' ', '', $this->skippedColumns)) : [$this->skippedColumns];
        $this->skippedRelations = $this->skippedRelations ? explode(',', str_replace(' ', '', $this->skippedRelations)) : [$this->skippedRelations];
        $this->skippedColumns = array_filter($this->skippedColumns);
        $this->skippedRelations = array_filter($this->skippedRelations);
        foreach ($this->getTableNames() as $tableName) {
            // model :
            if (strpos($this->tableName, '*') !== false) {
                $modelClassName = $this->generateClassName($tableName);
                $controllerClassName = $modelClassName . 'Controller';
            } else {
                $modelClassName = !empty($this->modelClass) ? $this->modelClass : Inflector::id2camel($tableName, '_');
                $controllerClassName = !empty($this->controllerClass) ? $this->controllerClass : $modelClassName . 'Controller';
            }
            //            $queryClassName = ($this->generateQuery) ? $this->generateQueryClassName($modelClassName) : false;
            $tableSchema = $db->getTableSchema($tableName);
            $this->modelClass = "{$this->nsModel}\\{$modelClassName}";
            $this->tableSchema = $tableSchema;
            //            $this->relations = isset($relations[$tableName]) ? $relations[$tableName] : [];
            $this->controllerClass = $this->nsController . '\\' . $controllerClassName;
            $isTree = !array_diff(self::getTreeColumns(), $tableSchema->columnNames);
            // search model :
            if ($this->generateSearchModel && !$isTree) {
                if (empty($this->searchModelClass) || strpos($this->tableName, '*') !== false) {
                    $searchModelClassName = $modelClassName . 'Search';
                } else {
                    if ($this->nsSearchModel === $this->nsModel && $this->searchModelClass === $modelClassName) {
                        $searchModelClassName = $this->searchModelClass . 'Search';
                    } else {
                        $searchModelClassName = $this->searchModelClass;
                    }
                }
                $this->searchModelClass = $this->nsSearchModel . '\\' . $searchModelClassName;
                $searchModel = Yii::getAlias('@' . str_replace('\\', '/', ltrim($this->searchModelClass, '\\') . '.php'));
                $files[] = new CodeFile($searchModel, $this->render('search.php', ['relations' => isset($relations[$tableName]) ? $relations[$tableName] : []]));
            }
            //controller
            $files[] = new CodeFile(Yii::getAlias('@' . str_replace('\\', '/', $this->nsController)) . '/' . $controllerClassName . '.php', $isTree ? $this->render('controllerNested.php', ['relations' => isset($relations[$tableName]) ? $relations[$tableName] : []]) : $this->render('controller.php', ['relations' => isset($relations[$tableName]) ? $relations[$tableName] : []]));
            // views :
            $viewPath = $this->getViewPath();
            $templatePath = $this->getTemplatePath() . '/views';
            foreach (scandir($templatePath) as $file) {
                //                if($file === '_formNested.php')
                //                    echo  $file;
                if (empty($this->searchModelClass) && $file === '_search.php') {
                    continue;
                }
                if ($file === '_formrefone.php' || $file === '_formrefmany.php' || $file === '_datarefone.php' || $file === '_datarefmany.php' || $file === '_expand.php' || $file === '_detail.php' || $file === '_data.php' || $file === 'saveAsNew.php' || $file === '_pdf.php') {
                    continue;
                }
                if ($this->indexWidgetType != 'list' && $file === '_index.php') {
                    continue;
                }
                if ($isTree && ($file === 'index.php' || $file === 'view.php' || $file === '_form.php' || $file === 'create.php' || $file === 'update.php')) {
                    continue;
                }
                if (!$isTree && ($file === 'indexNested.php' || $file === '_formNested.php')) {
                    continue;
                }
                if (is_file($templatePath . '/' . $file) && pathinfo($file, PATHINFO_EXTENSION) === 'php') {
                    $fileName = $isTree ? str_replace('Nested', '', $file) : $file;
                    $files[] = new CodeFile("{$viewPath}/{$fileName}", $this->render("views/{$file}", ['relations' => isset($relations[$tableName]) ? $relations[$tableName] : [], 'isTree' => $isTree]));
                }
            }
            if ($this->expandable) {
                $files[] = new CodeFile("{$viewPath}/_expand.php", $this->render("views/_expand.php", ['relations' => isset($relations[$tableName]) ? $relations[$tableName] : []]));
            }
            if ($this->pdf) {
                $files[] = new CodeFile("{$viewPath}/_pdf.php", $this->render("views/_pdf.php", ['relations' => isset($relations[$tableName]) ? $relations[$tableName] : []]));
            }
            if ($this->saveAsNew) {
                $files[] = new CodeFile("{$viewPath}/saveAsNew.php", $this->render("views/saveAsNew.php", ['relations' => isset($relations[$tableName]) ? $relations[$tableName] : []]));
            }
            if (isset($relations[$tableName]) && !$isTree) {
                if ($this->expandable) {
                    $files[] = new CodeFile("{$viewPath}/_detail.php", $this->render("views/_detail.php", ['relations' => isset($relations[$tableName]) ? $relations[$tableName] : []]));
                }
                foreach ($relations[$tableName] as $name => $rel) {
                    if ($rel[self::REL_IS_MULTIPLE] && isset($rel[self::REL_TABLE]) && !in_array($name, $this->skippedRelations)) {
                        $files[] = new CodeFile("{$viewPath}/_form{$rel[self::REL_CLASS]}.php", $this->render("views/_formrefmany.php", ['relations' => isset($relations[$tableName]) ? $relations[$tableName][$name] : []]));
                        if ($this->expandable) {
                            $files[] = new CodeFile("{$viewPath}/_data{$rel[self::REL_CLASS]}.php", $this->render("views/_datarefmany.php", ['relName' => $name, 'relations' => isset($relations[$tableName]) ? $relations[$tableName][$name] : []]));
                        }
                    } else {
                        if (isset($rel[self::REL_IS_MASTER]) && !$rel[self::REL_IS_MASTER] && !in_array($name, $this->skippedRelations)) {
                            $files[] = new CodeFile("{$viewPath}/_form{$rel[self::REL_CLASS]}.php", $this->render("views/_formrefone.php", ['relName' => $name, 'relations' => isset($relations[$tableName]) ? $relations[$tableName][$name] : []]));
                            if ($this->expandable) {
                                $files[] = new CodeFile("{$viewPath}/_data{$rel[self::REL_CLASS]}.php", $this->render("views/_datarefone.php", ['relName' => $name, 'relations' => isset($relations[$tableName]) ? $relations[$tableName][$name] : []]));
                            }
                        }
                    }
                }
            }
            if (strpos($this->tableName, '*') !== false || $isTree) {
                $this->modelClass = '';
                $this->controllerClass = '';
                $this->searchModelClass = '';
            } else {
                $this->modelClass = $modelClassName;
                $this->controllerClass = $controllerClassName;
                if ($this->generateSearchModel) {
                    $this->searchModelClass = $searchModelClassName;
                }
            }
        }
        $this->nameAttribute = is_array($this->nameAttribute) ? implode(', ', $this->nameAttribute) : '';
        $this->hiddenColumns = is_array($this->hiddenColumns) ? implode(', ', $this->hiddenColumns) : '';
        $this->skippedColumns = is_array($this->skippedColumns) ? implode(', ', $this->skippedColumns) : '';
        $this->skippedRelations = is_array($this->skippedRelations) ? implode(', ', $this->skippedRelations) : '';
        return $files;
    }