/** * * @param string $table * @param string $adapter * @param string $module * @return void * @throws Zend_Tool_Project_Exception * @throws Exception */ public function config($table, $adapter, $module = null, $name = null, $env = null, $schema = null) { if (!$schema) { $schema = $adapter; } $this->_print(' Criando arquivo de configuracao '); $this->_print(' table: ' . $table . ' | adapter : ' . $adapter . ' | module: ' . $module); $this->_loadProfile(self::NO_PROFILE_THROW_EXCEPTION); $table = strtolower($table); $module = strtolower($module); if ($name !== null) { $controllerName = strtolower(str_replace('_', '-', $name)); } else { $controllerName = strtolower(str_replace('_', '-', $table)); } $path = $this->_loadedProfile->getAttribute('projectDirectory'); $this->_configModule($path, $module); $dirModules = $path . '/application/configs/modules'; if (!is_dir($dirModules)) { mkdir($dirModules); } $dirModule = $dirModules . '/' . $module; if (!is_dir($dirModule)) { mkdir($dirModule); } $fileName = $dirModule . '/' . $table . '.php'; /** * */ $config = array(); if (!file_exists($fileName)) { $config['table']['name'] = $table; if ($name != null || $name) { $config['table']['modelName'] = $name; } else { $config['table']['modelName'] = $table; } $config['table']['schema'] = $adapter; $config['table']['sequenceName'] = 'sid_' . $table; $config['table']['moduleName'] = $module; $config['table']['objectName'] = str_replace("_Crud", "", ZendT_Lib::convertTableNameToObjectName($module, $config['table']['modelName'])); $config['table']['controllerName'] = str_replace("Model_", "", $config['table']['objectName']) || 'Controller'; $config['table']['seeker']['field']['search'] = ''; $config['table']['seeker']['field']['display'] = ''; $config['table']['seeker']['search']['css-width'] = '270px'; $config['table']['seeker']['display']['css-width'] = '0px'; $config['table']['seeker']['url']['grid'] = "/{$module}/{$controllerName}/grid"; $config['table']['seeker']['url']['search'] = "/{$module}/{$controllerName}/seeker-search"; $config['table']['seeker']['url']['retrieve'] = "/{$module}/{$controllerName}/retrieve"; $config['table']['seeker']['modal']['width'] = 800; $config['table']['seeker']['modal']['height'] = 450; } else { $config = (require $fileName); } $config['table']['seeker']['field']['id'] = array(); $this->_connect($this->_loadedProfile, $adapter, $env); $describeModel = $this->_dbAdapter->describeTable($table, $schema); if (count($describeModel) <= 0) { $this->_print('Erro ao localizar as colunas da Tabela, certifique a conexao e nome da tabela'); exit; } else { /** * */ /* if (!isset($config['table']['columns'])) { $config['table']['columns'] = array(); } */ /** * Força para manter a ordem das colunas */ foreach ($describeModel as $columnName => $column) { if (!isset($config['table']['columns'][$columnName])) { if (!$config['table']['columns'][strtolower($columnName)]['label']) { $config['table']['columns'][strtolower($columnName)]['label'] = $columnName; } } } } //print_r($describeModel); //$describeModel['PRECISION'] = (int) $describeModel['PRECISION']; if (!isset($config['table']['dependentTables'])) { $config['table']['dependentTables'] = array(); } if (!isset($config['table']['referenceMaps'])) { $config['table']['referenceMaps'] = array(); } if (isset($describeModel['REFERENCE_MAP'])) { $_referenceMaps = array(); foreach ($describeModel['REFERENCE_MAP'] as &$reference) { $modelName = ZendT_Tool_Crud::getModelName($this->_loadedProfile->getAttribute('projectDirectory'), $reference['TABLE_NAME_REFERENCE'], $reference['SCHEMA_NAME_REFERENCE']); if ($modelName) { $data = array(); $data['columnName'] = $reference['COLUMN_NAME']; $data['objectNameReference'] = $modelName; $data['tableNameReference'] = strtolower($reference['TABLE_NAME_REFERENCE']); $data['schemaNameReference'] = strtolower($reference['SCHEMA_NAME_REFERENCE']); $data['columnReference'] = $reference['COLUMN_NAME_REFERENCE']; $_referenceMaps[] = $data; } else { $data = array(); $data['columnName'] = $reference['COLUMN_NAME']; if (strtolower($reference['TABLE_NAME_REFERENCE']) == strtolower($table)) { $data['objectNameReference'] = $config['table']['objectName']; } else { $data['objectNameReference'] = str_replace("_Crud", "", ZendT_Lib::convertTableNameToObjectName($module, $reference['TABLE_NAME_REFERENCE'])); } $data['tableNameReference'] = strtolower($reference['TABLE_NAME_REFERENCE']); $data['schemaNameReference'] = strtolower($reference['SCHEMA_NAME_REFERENCE']); $data['columnReference'] = $reference['COLUMN_NAME_REFERENCE']; $_referenceMaps[] = $data; } $config['table']['columns'][strtolower($reference['COLUMN_NAME'])]['referenceMap'] = true; } $config['table']['referenceMaps'] = $_referenceMaps; } if (isset($describeModel['DEPENDENT_TABLES'])) { $_dependentTables = array(); foreach ($describeModel['DEPENDENT_TABLES'] as &$dependentTable) { $modelName = ZendT_Tool_Crud::getModelName($this->_loadedProfile->getAttribute('projectDirectory'), $dependentTable['TABLE_NAME'], $dependentTable['SCHEMA_NAME'], true); if ($modelName) { $_dependentTables[] = $modelName['table']['objectName']; $tab['description'] = $modelName['table']['description']; $tab['url'] = str_replace('/grid', '/form/grid/1', $modelName['table']['seeker']['url']['grid']); $tab['column'] = strtolower($dependentTable['COLUMN_NAME']); $tab['message'] = 'Necessário seleção ' . $config['table']['description']; if (!isset($config['table']['tabs'][$modelName['table']['name']])) { $config['table']['tabs'][$modelName['table']['name']] = $tab; } } else { $_dependentTables[] = str_replace("_Crud", "", ZendT_Lib::convertTableNameToObjectName($module, $dependentTable['TABLE_NAME'])); /*$tab['description'] = $dependentTable['TABLE_NAME']; $tab['url'] = '/' . strtolower($module).'/' . strtolower(str_replace('_', '-', $dependentTable['TABLE_NAME'])) . '/form/grid/1'; $tab['column'] = 'ID_' . strtoupper($config['table']['name']); $tab['message'] = 'Necessário seleção ' . $config['table']['description'];*/ } } $config['table']['dependentTables'] = $_dependentTables; //$config['table']['tabs'] = $_tabs; } if (!isset($config['table']['form'])) { $config['table']['form']['url']['retrieve'] = "/{$module}/{$controllerName}/retrieve"; $config['table']['form']['url']['insert'] = "/{$module}/{$controllerName}/insert"; $config['table']['form']['url']['update'] = "/{$module}/{$controllerName}/update"; $config['table']['form']['url']['delete'] = "/{$module}/{$controllerName}/delete"; } unset($describeModel['REFERENCE_MAP']); unset($describeModel['DEPENDENT_TABLES']); $primary = array(); foreach ($describeModel as $columnName => $column) { $columnName = strtolower($columnName); if ($column['PRECISION']) { $column['LENGTH'] = (int) $column['PRECISION']; } if ($column['SCALE']) { $column['LENGTH'] -= (int) $column['SCALE']; $column['LENGTH'] .= '.' . $column['SCALE']; } /* if (!isset($config['table']['columns'])) { $config['table']['columns'] = array(); } */ /* if (!isset($config['table']['columns'][$columnName])) { $config['table']['columns'][$columnName] = array(); } */ /* if (!isset($config['table']['columns'][$columnName]['object'])) { $config['table']['columns'][$columnName]['object'] = array(); } */ //$this->_print('Coluna '.$columnName.' => Label: '.$config['table']['columns'][$columnName]['label']); if ($config['table']['columns'][$columnName]['label'] == '') { $config['table']['columns'][$columnName]['label'] = $columnName; } //$this->_print('Coluna '.$columnName.' => Label: '.$config['table']['columns'][$columnName]['label']); #$config['table']['columns'][$columnName]['label'] = $config['table']['columns'][$columnName]['label']; if (!isset($config['table']['columns'][$columnName]['multiple'])) { $config['table']['columns'][$columnName]['multiple'] = 0; } if (!isset($config['table']['columns'][$columnName]['type'])) { $config['table']['columns'][$columnName]['type'] = 'String'; } if (!isset($config['table']['columns'][$columnName]['object']['mask'])) { $config['table']['columns'][$columnName]['object']['mask'] = null; } if (!isset($config['table']['columns'][$columnName]['object']['charMask'])) { $config['table']['columns'][$columnName]['object']['charMask'] = '@'; } if (!isset($config['table']['columns'][$columnName]['object']['filter'])) { $config['table']['columns'][$columnName]['object']['filter'][] = 'trim'; $config['table']['columns'][$columnName]['object']['filter'][] = 'strtoupper'; $config['table']['columns'][$columnName]['object']['filter'][] = 'removeAccent'; } if (!isset($config['table']['columns'][$columnName]['object']['filterDb'])) { $config['table']['columns'][$columnName]['object']['filterDb'][] = ''; } if (!isset($config['table']['columns'][$columnName]['object']['validators'])) { $config['table']['columns'][$columnName]['object']['validators'] = array(); } if (!isset($config['table']['columns'][$columnName]['object']['listOptions'])) { $config['table']['columns'][$columnName]['object']['listOptions'] = array(); } $config['table']['columns'][$columnName]['object']['listOptions'] = $config['table']['columns'][$columnName]['object']['listOptions']; $config['table']['columns'][$columnName]['type'] = $column['DATA_TYPE']; $config['table']['columns'][$columnName]['length'] = $column['LENGTH']; $config['table']['columns'][$columnName]['nullable'] = $column['NULLABLE']; if (!isset($config['table']['primary'])) { $config['table']['primary'] = array(); } $column['DATA_TYPE'] = strtoupper($column['DATA_TYPE']); if ($column['PRIMARY']) { /** * @todo pensar em uma forma de tratar os casos de chave composta */ $config['table']['seeker']['field']['id'] = $columnName; $primary[] = $columnName; $config['table']['columns'][$columnName]['type'] = 'Integer'; $config['table']['columns'][$columnName]['object']['type'] = 'Text'; $config['table']['columns'][$columnName]['object']['text']['css-width'] = $column['LENGTH'] * 8.75; if ($config['table']['columns'][$columnName]['object']['text']['css-width'] > 300) { $config['table']['columns'][$columnName]['object']['text']['css-width'] = '300px'; } else { if ($config['table']['columns'][$columnName]['object']['text']['css-width'] < 100) { $config['table']['columns'][$columnName]['object']['text']['css-width'] = '100px'; } else { $config['table']['columns'][$columnName]['object']['text']['css-width'] .= 'px'; } } $config['table']['columns'][$columnName]['object']['text']['maxlength'] = $column['LENGTH']; $config['table']['columns'][$columnName]['object']['text']['id'] = null; } elseif (isset($config['table']['columns'][$columnName]['referenceMap'])) { //substr(strtolower($columnName),0,2) == 'id' || is_numeric(strpos($columnName, '_id'))) { $config['table']['columns'][$columnName]['type'] = 'Integer'; $config['table']['columns'][$columnName]['object']['type'] = 'Seeker'; $load = false; if (!isset($config['table']['columns'][$columnName]['object']['type'])) { $load = true; } elseif (!in_array($config['table']['columns'][$columnName]['object']['type'], array('Seeker'))) { $load = true; } if (!isset($config['table']['columns'][$columnName]['object']['seeker'])) { $configSeeker = ZendT_Tool_Crud::getConfigSeeker($this->_loadedProfile->getAttribute('projectDirectory'), $config, $columnName); $config['table']['columns'][$columnName]['object']['seeker'] = array(); $config['table']['columns'][$columnName]['object']['seeker'] = $configSeeker; } } elseif (in_array($column['DATA_TYPE'], array('VARCHAR2', 'VARCHAR', 'CHAR'))) { $load = false; if (!isset($config['table']['columns'][$columnName]['object']['type'])) { $load = true; } elseif (!in_array($config['table']['columns'][$columnName]['object']['type'], array('Text', 'Select'))) { $load = true; } if (!isset($config['table']['columns'][$columnName]['object']['type'])) { $config['table']['columns'][$columnName]['object']['type'] = 'Text'; } if (!isset($config['table']['columns'][$columnName]['object']['text'])) { $config['table']['columns'][$columnName]['object']['text'] = array(); } if ($config['table']['seeker']['field']['search'] == '') { $config['table']['seeker']['field']['search'] = $columnName; } $config['table']['columns'][$columnName]['object']['text']['maxlength'] = $column['LENGTH']; $validatorNew = array('name' => 'Zend_Validate_StringLength', 'param' => array('max' => (int) $column['LENGTH'])); foreach ($config['table']['columns'][$columnName]['object']['validators'] as &$validator) { if ($validator['name'] == 'Zend_Validate_StringLength') { $validator = $validatorNew; $validatorNew = null; } } if ($validatorNew !== null) { $config['table']['columns'][$columnName]['object']['validators'][] = $validatorNew; } if ($load) { $config['table']['columns'][$columnName]['object']['text']['css-width'] = $column['LENGTH'] * 8.75; if ($config['table']['columns'][$columnName]['object']['text']['css-width'] > 200) { $config['table']['columns'][$columnName]['object']['text']['css-width'] = '200px'; } else { if ($config['table']['columns'][$columnName]['object']['text']['css-width'] < 100) { $config['table']['columns'][$columnName]['object']['text']['css-width'] = '100px'; } else { $config['table']['columns'][$columnName]['object']['text']['css-width'] .= 'px'; } } $config['table']['columns'][$columnName]['object']['text']['id'] = null; $config['table']['columns'][$columnName]['object']['mask'] = null; } $config['table']['columns'][$columnName]['type'] = 'String'; } elseif (in_array($column['DATA_TYPE'], array('CLOB'))) { $load = false; if (!isset($config['table']['columns'][$columnName]['object']['type'])) { $load = true; } elseif (!in_array($config['table']['columns'][$columnName]['object']['type'], array('Text', 'Select'))) { $load = true; } $config['table']['columns'][$columnName]['object']['type'] = 'Textare'; if (!isset($config['table']['columns'][$columnName]['object']['textare'])) { $config['table']['columns'][$columnName]['object']['textare'] = array(); } if ($load) { $config['table']['columns'][$columnName]['object']['textare']['id'] = null; $config['table']['columns'][$columnName]['object']['textare']['html'] = false; $config['table']['columns'][$columnName]['object']['textare']['cols'] = 50; $config['table']['columns'][$columnName]['object']['textare']['rows'] = 10; } $config['table']['columns'][$columnName]['type'] = 'StringLong'; } elseif (in_array($column['DATA_TYPE'], array('BLOB'))) { $load = false; if (!isset($config['table']['columns'][$columnName]['object']['type'])) { $load = true; } $config['table']['columns'][$columnName]['object']['type'] = 'File'; if ($load) { $config['table']['columns'][$columnName]['object']['file']['id'] = null; } $config['table']['columns'][$columnName]['type'] = 'BinaryLong'; } elseif (in_array($column['DATA_TYPE'], array('DATE'))) { $load = false; if (!isset($config['table']['columns'][$columnName]['object']['type'])) { $load = true; } elseif (!in_array($config['table']['columns'][$columnName]['object']['type'], array('DateTime', 'Date'))) { $load = true; } if ($load) { unset($config['table']['columns'][$columnName]['object'][strtolower($config['table']['columns'][$columnName]['object']['type'])]); if (!isset($config['table']['columns'][$columnName]['object']['date'])) { $config['table']['columns'][$columnName]['object']['date'] = array(); } if (is_numeric(strpos(strtoupper($columnName), 'DH_'))) { $config['table']['columns'][$columnName]['object']['type'] = 'DateTime'; $config['table']['columns'][$columnName]['object']['date']['css-width'] = '87.5px'; $config['table']['columns'][$columnName]['object']['date']['maxlength'] = 10; $config['table']['columns'][$columnName]['object']['time']['css-width'] = '43.75px;'; $config['table']['columns'][$columnName]['object']['time']['maxlength'] = 5; $config['table']['columns'][$columnName]['type'] = 'DateTime'; } else { $config['table']['columns'][$columnName]['object']['type'] = 'Date'; $config['table']['columns'][$columnName]['object']['date']['css-width'] = '87.5px'; $config['table']['columns'][$columnName]['object']['date']['maxlength'] = 10; $config['table']['columns'][$columnName]['object']['date']['id'] = null; $config['table']['columns'][$columnName]['type'] = 'Date'; } } } elseif (in_array($column['DATA_TYPE'], array('DATETIME'))) { $load = false; if (!isset($config['table']['columns'][$columnName]['object']['type'])) { $load = true; } elseif (!in_array($config['table']['columns'][$columnName]['object']['type'], array('DateTime'))) { $load = true; } if ($load) { if (!isset($config['table']['columns'][$columnName]['object']['datetime'])) { $config['table']['columns'][$columnName]['object']['datetime'] = array(); } unset($config['table']['columns'][$columnName]['object'][strtolower($config['table']['columns'][$columnName]['object']['type'])]); $config['table']['columns'][$columnName]['object']['type'] = 'DateTime'; $config['table']['columns'][$columnName]['object']['date']['css-width'] = '87.5px'; $config['table']['columns'][$columnName]['object']['date']['maxlength'] = 10; $config['table']['columns'][$columnName]['object']['date']['id'] = null; $config['table']['columns'][$columnName]['object']['time']['css-width'] = '43.75px'; $config['table']['columns'][$columnName]['object']['time']['maxlength'] = 5; $config['table']['columns'][$columnName]['object']['time']['id'] = null; } $config['table']['columns'][$columnName]['type'] = 'DateTime'; } elseif (in_array($column['DATA_TYPE'], array('TIME'))) { $load = false; if (!isset($config['table']['columns'][$columnName]['object']['type'])) { $load = true; } elseif (!in_array($config['table']['columns'][$columnName]['object']['type'], array('Time'))) { $load = true; } if ($load) { if (!isset($config['table']['columns'][$columnName]['object']['time'])) { $config['table']['columns'][$columnName]['object']['time'] = array(); } unset($config['table']['columns'][$columnName]['object'][strtolower($config['table']['columns'][$columnName]['object']['type'])]); $config['table']['columns'][$columnName]['object']['type'] = 'Time'; $config['table']['columns'][$columnName]['object']['time']['css-width'] = '43.75px'; $config['table']['columns'][$columnName]['object']['time']['maxlength'] = 5; $config['table']['columns'][$columnName]['object']['time']['id'] = null; } $config['table']['columns'][$columnName]['type'] = 'Time'; } elseif (in_array($column['DATA_TYPE'], array('NUMBER', 'INTEGER', 'DECIMAL', 'INT'))) { if (!isset($config['table']['columns'][$columnName]['object']['numeric'])) { $config['table']['columns'][$columnName]['object']['numeric'] = array(); } $config['table']['columns'][$columnName]['object']['type'] = 'Numeric'; $aux = explode('.', $column['LENGTH']); $config['table']['columns'][$columnName]['object']['numeric']['numDecimal'] = $aux[1]; $config['table']['columns'][$columnName]['object']['numeric']['numInteger'] = $aux[0]; $config['table']['columns'][$columnName]['object']['numeric']['id'] = null; unset($aux); $config['table']['columns'][$columnName]['type'] = 'Number'; } if ($column['NULLABLE']) { $config['table']['columns'][$columnName]['object']['required'] = false; } else { $config['table']['columns'][$columnName]['object']['required'] = true; } } if (count($primary) > 0) { $config['table']['primary'] = $primary; } if (count($config['table']['primary']) > 1) { unset($config['table']['sequenceName']); } foreach ($config['table']['columns'] as $columnName => $prop) { if (!isset($describeModel[strtoupper($columnName)])) { unset($config['table']['columns'][$columnName]); } } if (!isset($config['table']['unique'])) { $config['table']['unique'] = array(); } if (!isset($config['table']['description'])) { $config['table']['description'] = $config['table']['name']; /* $nameResponse = $this->_registry ->getClient() ->promptInteractiveInput("[ZendT] Informe a descricao da tabela?"); $description = $nameResponse->getContent(); $config['table']['description'] = utf8_encode($description); */ } $content = "<?php\nreturn " . var_export($config, true) . "\n?>"; file_put_contents($fileName, $content); $this->_print('Gerado o arquivo ' . $fileName); }