Your IP : 216.73.216.79


Current Path : /var/www/html/eform/console/controllers/
Upload File :
Current File : /var/www/html/eform/console/controllers/AutobotController.php

<?php
/**
 * @link http://myopensoft.net/
 * @copyright Copyright (c) 2016 Opensoft Technologies Sdn Bhd
 * @license http://myopensoft.net/license/
 */

namespace console\controllers;

use Yii;
use yii\console\Controller;
use yii\helpers\Console;

/**
 * Automatically generate CRUD for all user-defined tables in connected database
 *
 * @author Osh Pilaf <faizal@myopensoft.net>
 */
class AutobotController extends Controller
{
    /**
     * Hello world.
     * @param string $message the message to be echoed.
     */
    public function actionIndex($message = 'hello world')
    {
        //echo $message . "\n";
        //$msg = Console::ansiFormat($message, [Console::FG_YELLOW]);
        //$this->stdout("Use $msg to get usage info.\n");
        
        //Yii::$app->runAction('help',['gii/crud']);
        //$str = 'this_is_a_name';
        //echo $this->underscoreToCamelCase($str, 0);
        Yii::$app->runAction('help',['migrate']);
    }
    
    /**
     * Create complete model + CRUD for all user-defined tables in schema
     */
    public function actionRollout($modelNamespace='common', $crudNamespace='backend')
    {
        /*
         * gii/model
         *
         * --enableI18N=1
         * --modelClass=Demo (no namespace)
         * --ns=common\\models
         * --tableName=demo
         * --generateRelations=all (options: none, all, all-inverse)
         * --interactive=0
         * --overwrite=1
         *
         * gii/crud
         *
         * --controllerClass=backend\\controllers\\DemoController (fully qualified namespace)
         * --viewPath=@backend/views/demo
         * --enableI18N=1
         * --enablePjax=1
         * --indexWidgetType=grid (options: grid, list)
         * --interactive=0
         * --modelClass=common\\models\\Demo
         * --overwrite=1
         * --searchModelClass=common\\models\\DemoSearch
         * 
         */
        
        $run_tables = [];
        // Skip dermaga default tables
        $skip_tables = [
            'dmg_bul_cat',
            'dmg_bul_cat_lang',
            'dmg_bulletin',
            'dmg_bulletin_content',
            'dmg_bulletin_status',
            'dmg_doc_attach',
            'dmg_gal',
            'dmg_gal_media',
            'dmg_log',
            'dmg_menu',
            'dmg_menu_lang',
            'dmg_ref',
            'dmg_role_mapping',
            'dmg_staff_access',
            'dmg_user',
            'dmg_user_info',
            'dmg_visitor',
            'migration',
        ];
        // Get all user defined tables
        $db_connection = \Yii::$app->db;
        $dbSchema = $db_connection->schema;
        $tables = $dbSchema->getTableNames();
        foreach($tables as $tbl){
            if (!in_array($tbl, $skip_tables)){
                $run_tables[] = $tbl;
            }
        }
        
        if (is_array($run_tables) && !empty($run_tables)){
            $modelNamespace = "$modelNamespace\\models";
            foreach ($run_tables as $rt){
                // Generate Model
                $modelName = $this->underscoreToCamelCase($rt, 1);
                Yii::$app->runAction('gii/model',[
                    'enableI18N' => 1,
                    'modelClass' => $modelName,
                    'ns' => $modelNamespace,
                    'tableName' => $rt,
                    'generateRelations' => 'all',
                    'interactive' => 0,
                    'overwrite' => 1
                ]);
                // Generate CRUD files
                $controllerName = $modelName.'Controller';
                $modelSearch = $modelName.'Search';
                Yii::$app->runAction('gii/crud',[
                    'controllerClass' => "$crudNamespace\\controllers\\$controllerName",
                    'viewPath' => "$crudNamespace/views/".strtolower($modelName),
                    'enableI18N' => 1,
                    'enablePjax' => 1,
                    'indexWidgetType' => 'grid',
                    'interactive' => 0,
                    'modelClass' => "$modelNamespace\\$modelName",
                    'overwrite' => 1,
                    'searchModelClass' => "$modelNamespace\\$modelSearch"
                ]);
            }
        }
        
        $message = 'Models & CRUDs generation successfull!';
        $message = Console::ansiFormat($message, [Console::FG_YELLOW]);
        $this->stdout("$message\n"); 
    }
    
    private function underscoreToCamelCase( $string, $first_char_caps = false)
    {
        if( $first_char_caps == true )
        {
            $string[0] = strtoupper($string[0]);
        }
        $func = create_function('$c', 'return strtoupper($c[1]);');
        return preg_replace_callback('/_([a-z])/', $func, $string);
    }
}