예제 #1
0
 public function getGeneratedFile()
 {
     $ds = DIRECTORY_SEPARATOR;
     $modelo = LUMINE_INCLUDE_PATH . "{$ds}lib{$ds}Templates{$ds}validator.xml";
     $props = array();
     $options = array();
     foreach ($this->conf as $key => $val) {
         if ($key == 'options') {
             foreach ($val as $k => $v) {
                 $options[] = $this->ident . $this->ident . "'{$k}' => '{$v}'";
             }
             continue;
         }
         $props[] = $this->ident . "'{$key}' => '{$val}'";
     }
     $str_props = implode(', ' . PHP_EOL, $props) . ', ' . PHP_EOL;
     $str_options = implode(', ' . PHP_EOL, $options);
     if (!file_exists($modelo)) {
         Lumine_Log::error('O arquivo ' . $modelo . ' não existe');
         exit;
     }
     $file = file_get_contents($modelo);
     $file = str_replace('{properties}', $str_props, $file);
     $file = str_replace('{options}', $str_options, $file);
     $file = preg_replace('@\\{(\\w+)\\}@e', '$this->$1', $file);
     return $file;
 }
예제 #2
0
 /**
  * retona a classe criada
  *
  * @author Hugo Ferreira da Silva
  * @link http://www.hufersil.com.br
  * @param string $tablename
  * @param Lumine_Configuration $cfg
  * @return Lumine_Factory
  */
 public static function create($tablename, Lumine_Configuration $cfg)
 {
     $pkg = $cfg->getProperty('package');
     Lumine_Log::debug('Recuperando campos da tabela ' . $tablename);
     $fields = $cfg->getConnection()->describe($tablename);
     $obj = new Lumine_Factory($pkg, $tablename);
     foreach ($fields as $item) {
         list($name, $type_native, $type, $length, $primary, $notnull, $default, $autoincrement) = $item;
         $options = array('primary' => $primary, 'notnull' => $notnull, 'autoincrement' => $autoincrement);
         // para o pg, ainda tem o nome da sequence
         if (!empty($item[8]['sequence'])) {
             $options['sequence'] = $item[8]['sequence'];
         }
         // se tiver um valor padrao
         if (!empty($default)) {
             $options['default'] = $default;
         }
         // nome do membro
         $memberName = $name;
         // se for para usar camel case
         if ($cfg->getOption('camel_case') == true) {
             $memberName = Lumine_Util::camelCase($memberName);
         }
         $obj->metadata()->addField($memberName, $name, $type, $length, $options);
     }
     return $obj;
 }
예제 #3
0
 /**
  * @see Lumine_Connection_IConnection::close()
  */
 public function close()
 {
     $this->dispatchEvent(new Lumine_Events_ConnectionEvent(Lumine_Event::PRE_CLOSE, $this));
     if ($this->conn_id && $this->state != self::CLOSED) {
         Lumine_Log::debug('Liberando resultados todos os resultados');
         Lumine_Dialect_Factory::getByName('MySQL')->freeAllResults();
         $this->state = self::CLOSED;
         Lumine_Log::debug('Fechando conexao com ' . $this->getDatabase());
         mysql_close($this->conn_id);
     }
     $this->dispatchEvent(new Lumine_Events_ConnectionEvent(Lumine_Event::POS_CLOSE, $this));
 }
예제 #4
0
 /**
  * 
  * @see Lumine_Export_IExport::create()
  */
 public function create()
 {
     $this->getForeignKeys();
     $this->getIndexes();
     $this->getTablesDefinition();
     $sqlList = array_merge($this->tables, $this->indexes);
     // para cada chave estrangeira, criaremos o SQL de geracao do Foreign Key
     reset($this->foreignKeys);
     foreach ($this->foreignKeys as $fk) {
         $sql = sprintf('ALTER TABLE `%s` ADD FOREIGN KEY(`%s`) REFERENCES `%s`(`%s`) ON DELETE %s ON UPDATE %s', $fk['table'], $fk['column'], $fk['reftable'], $fk['refcolumn'], $fk['onDelete'], $fk['onUpdate']);
         $sqlList[] = $sql;
     }
     $sqlList = array_merge($sqlList, $this->foreignKeysSQL);
     // ok, agora que temos as definicoes de tabela, vamos cria-las no banco
     // e so executar uma a uma
     foreach ($sqlList as $sql) {
         Lumine_Log::debug('Executando a SQL: ' . $sql);
         $this->cnn->executeSQL($sql);
     }
 }
예제 #5
0
 private function validateByClass($val, $fieldname, $classname, $method)
 {
     if (empty($classname)) {
         Lumine_Log::warning('Classe para validacao nao informada no XML. Use "classname" para informar o nome da classe');
         return false;
     }
     $ds = DIRECTORY_SEPARATOR;
     $cfg = $this->obj->_getConfiguration();
     $classpath = $cfg->getProperty('class_path');
     $classespath = $classpath . $ds . str_replace('.', '/', $cfg->getProperty('package')) . $ds . 'validators' . $ds;
     $classfile = str_replace('.', '/', $classname) . '.php';
     $classdef = array_pop(explode('.', $classname));
     $php_validator_path = $cfg->getOption('php_validator_path');
     $possibilidades = array();
     if (!empty($php_validator_path)) {
         $possibilidades[] = $php_validator_path . $ds . $classfile;
     }
     $possibilidades[] = LUMINE_INCLUDE_PATH . $ds . 'lib' . $ds . 'Validator' . $ds . 'Custom' . $ds . $classfile;
     $possibilidades[] = $classpath . $ds . $classfile;
     $possibilidades[] = $classespath . $classfile;
     $use = '';
     foreach ($possibilidades as $file) {
         if (file_exists($file)) {
             $use = $file;
         }
     }
     if (empty($use)) {
         Lumine_Log::error('Classe para validacao "' . $classname . '" nao encontrada');
         return false;
     }
     require_once $use;
     if (!class_exists($classdef)) {
         Lumine_Log::error('Definicao para a classe de validacao "' . $classdef . '" nao encontrada');
         return false;
     }
     $tester = new $classdef();
     if (method_exists($tester, $method) && $method != '') {
         return $tester->{$method}($val);
     } else {
         if (method_exists($tester, 'execute')) {
             return $tester->execute($val);
         } else {
             Lumine_Log::error('Metodo "' . $method . '" nao encontrado na classe "' . $classdef . '" e a classe nao possui o metodo "execute"');
             return false;
         }
     }
 }
예제 #6
0
 /**
  * altera as colunas
  * 
  * @author Hugo Ferreira da Silva
  * @link http://www.hufersil.com.br/
  * @param array $arrayColumns
  * @return void
  */
 function setColumns($arrayColumns)
 {
     $old = $this->columns;
     try {
         $this->columns = array();
         foreach ($arrayColumns as $column) {
             $this->addColumn($column);
         }
     } catch (Exception $e) {
         Lumine_Log::warning('Formato de coluna invalido, restaurando anterior...');
         $this->columns = $old;
     }
 }
예제 #7
0
 /**
  * 
  * @see Lumine_Form_IForm::getControlTemplate()
  */
 public function getControlTemplate(Lumine_Configuration $cfg, $className)
 {
     $file = LUMINE_INCLUDE_PATH . $this->template . 'control.txt';
     if (!file_exists($file)) {
         Lumine_Log::error('O arquivo "' . $file . '" nao existe!');
         exit;
     }
     $content = file_get_contents($file);
     $content = str_replace('{class_path}', str_replace('\\', '/', $cfg->getProperty('class_path')), $content);
     $content = str_replace('{entity_name}', $className, $content);
     $content = str_replace('{LUMINE_PATH}', LUMINE_INCLUDE_PATH, $content);
     return $content;
 }
예제 #8
0
 /**
  * Exibe uma mensagem no log dizendo que este metodo nao pode ser feito para esta instancia
  * 
  * @author Hugo Ferreira da Silva
  * @link http://www.hufersil.com.br/
  * @return void
  */
 private function negado()
 {
     $x = debug_backtrace();
     $str = 'Rotina "' . $x[1]['function'] . '" negada nesta classe';
     Lumine_Log::warning($str);
 }
예제 #9
0
 /**
  * Limpa o resultado armazenado para o objeto atual
  * 
  * @author Hugo Ferreira da Silva
  * @return void
  */
 public function freeResult($resultID)
 {
     if (isset($this->resultList[$resultID]) && is_resource($this->resultList[$resultID])) {
         Lumine_Log::debug('Liberando o registro #' . $resultID);
         ibase_free_result($this->resultList[$resultID]);
     }
 }
예제 #10
0
 /**
  * recupera uma opcao de um campo desejado
  *
  * @author Hugo Ferreira da Silva
  * @link http://www.hufersil.com.br/
  * @param string $name nome do campo desejado
  * @param string $option nome da opcao desejada
  * @return mixed Valor da opcao
  */
 public function getFieldOption($name, $option)
 {
     try {
         $fld = $this->getField($name);
         if (isset($fld['options'][$option])) {
             return $fld['options'][$option];
         } else {
             if (isset($fld[$option])) {
                 return $fld[$option];
             }
         }
     } catch (Exception $e) {
         Lumine_Log::debug($e->getMessage());
     }
     return null;
 }
예제 #11
0
 /**
  * Importa o DTO relacionado a classe, quando houver
  * @author Hugo Ferreira da Silva
  * @link http://www.hufersil.com.br/
  * @return void
  */
 public static function importDTO()
 {
     $args = func_get_args();
     $cn = Lumine_ConnectionManager::getInstance();
     $list = $cn->getConfigurationList();
     $cfg = array_shift($list);
     /////////////////////////////////////////////////////////////
     // alteracoes para poder buscar os DTO's em varios pacotes
     /////////////////////////////////////////////////////////////
     $dtoPkgList = $cfg->getOption('dto_package');
     if (!is_array($dtoPkgList)) {
         $dtoPkgList = array($dtoPkgList);
         $cfg->setOption('dto_package', $dtoPkgList);
     }
     foreach ($dtoPkgList as $dtoPkg) {
         $path = $cfg->getProperty('class_path') . DIRECTORY_SEPARATOR . str_replace('.', DIRECTORY_SEPARATOR, $cfg->getProperty('package')) . DIRECTORY_SEPARATOR . 'dto' . DIRECTORY_SEPARATOR . str_replace('.', DIRECTORY_SEPARATOR, $dtoPkg) . DIRECTORY_SEPARATOR;
         foreach ($args as $classname) {
             Lumine_Log::debug('procurando dto ' . $path . $classname);
             $filename = $path . $classname . $cfg->getOption('class_sufix') . '.php';
             if (file_exists($filename)) {
                 require_once $filename;
             }
         }
     }
 }
예제 #12
0
 /**
  * Trunca os valores de string conforme o comprimento do campo
  * 
  * @author Hugo Ferreira da Silva
  * @param array $prop Propriedades do campo
  * @param string $value String a ser truncada
  * @return stirng String truncada
  */
 public static function truncateValue($prop, $value)
 {
     if (!isset($prop['length'])) {
         return $value;
     }
     switch (strtolower($prop['type'])) {
         case 'text':
         case 'longtext':
         case 'tinytext':
         case 'blob':
         case 'longblob':
         case 'tinyblob':
         case 'varchar':
         case 'varbinary':
         case 'char':
             if (strlen($value) > $prop['length']) {
                 Lumine_Log::warning('Truncando valor do campo ' . (isset($prop['name']) ? $prop['name'] : $prop['column']) . ' (' . $prop['length'] . ')');
                 $value = substr($value, 0, $prop['length']);
             }
             break;
     }
     return $value;
 }
예제 #13
0
 /**
  * Recupera uma conexao com o nome informado
  *
  * @author Hugo Ferreira da Silva
  * @link http://www.hufersil.com.br/
  * @param string $connectionName Nome da conexao desejada
  * @return Lumine_Configuration Configuracao / conexao encontrada ou false se nao recuperar
  */
 public function getConnection($connectionName)
 {
     if (!isset($this->connections[$connectionName])) {
         Lumine_Log::warning('Conexao inexistente: ' . $connectionName);
         return false;
     }
     return $this->connections[$connectionName]->getConnection();
 }
예제 #14
0
파일: MsSQL.php 프로젝트: rrmoura1/Abstergo
 /**
  * @see ILumine_Connection::executeSQL()
  */
 public function executeSQL($sql)
 {
     $this->dispatchEvent(new Lumine_ConnectionEvent(Lumine_Event::PRE_EXECUTE, $this, '', $sql));
     $this->connect();
     if (preg_match('@\\s*(LIMIT.+?)$@i', $sql, $reg)) {
         $sql = str_replace($reg[1], '', $sql);
         preg_match('@LIMIT\\s*(\\d+)\\s*(OFFSET\\s*(\\d+)?)?@i', $reg[1], $f);
         $limit = $f[1];
         $offset = isset($f[3]) ? $f[3] : 0;
         $sql = $this->modifyLimitQuery($sql, $limit, $offset);
         Lumine_Log::debug('Consulta transformada para MsSQL: ' . $sql);
     }
     $rs = @mssql_query($sql, $this->conn_id);
     if (!$rs) {
         $msg = $this->getErrorMsg();
         $this->dispatchEvent(new Lumine_ConnectionEvent(Lumine_Event::EXECUTE_ERROR, $this, $msg, $sql));
         throw new Lumine_Exception("Falha na consulta: " . $msg, Lumine_Exception::QUERY_ERROR);
     }
     $this->dispatchEvent(new Lumine_ConnectionEvent(Lumine_Event::POS_EXECUTE, $this, '', $sql));
     return $rs;
 }
예제 #15
0
파일: Util.php 프로젝트: rrmoura1/Abstergo
 /**
  * Exibe os resultados de uma consulta em uma tabela HTML
  *
  * @author Hugo Ferreira da Silva
  * @link http://www.hufersil.com.br/
  * @param Lumine_Base $obj
  * @return void
  */
 public static function showResult(Lumine_Base $obj)
 {
     $sql = $obj->_getSQL();
     $resultset = $obj->allToArray();
     if (!empty($resultset)) {
         $header = $resultset[0];
         $style = ' style="font-family:Verdana, Arial, Helvetica, sans-serif; font-size:9px" ';
         echo '<table cellpadding="2" cellspacing="1" width="100%">';
         echo '<tr>';
         echo '<tr>' . PHP_EOL;
         echo '<td ' . $style . ' colspan="' . count($header) . '">' . $sql . '</td>' . PHP_EOL;
         echo '</tr>' . PHP_EOL;
         foreach ($header as $key => $value) {
             echo '<td' . $style . ' bgcolor="#CCCCCC">' . $key . '</td>' . PHP_EOL;
         }
         echo '</tr>';
         for ($i = 0; $i < count($resultset); $i++) {
             $row = $resultset[$i];
             $cor = $i % 2 != 0 ? '#EFEFEF' : '#FFFFFF';
             echo '<tr>';
             foreach ($row as $value) {
                 echo '<td' . $style . ' bgcolor="' . $cor . '">' . $value . '</td>' . PHP_EOL;
             }
             echo '</tr>';
         }
         echo '</table>';
     } else {
         Lumine_Log::warning('Nenhum resultado encontrado no objeto passado: ' . get_class($obj));
     }
 }
예제 #16
0
         // ajusta algumas configuracoes
         if ($_POST['options']['tipo_geracao'] == 1) {
             $_POST['options']['generate_files'] = 1;
             $_POST['options']['generate_zip'] = 0;
         } else {
             if ($_POST['options']['tipo_geracao'] == 2) {
                 $_POST['options']['generate_files'] = 0;
                 $_POST['options']['generate_zip'] = 1;
             }
         }
         Lumine_Log::setLevel(Lumine_Log::ERROR);
         $cfg = new Lumine_Reverse($_POST);
         $cfg->setTables($table_list);
         $cfg->start();
         if (!empty($_POST['addons'])) {
             Lumine_Log::debug('Executando add-ons');
             foreach ($_POST['addons'] as $classname) {
                 foreach ($addons as $item) {
                     if (get_class($item) == $classname) {
                         $item->execute($_POST['class_path'] . '/lumine-conf.php', $_POST[strtolower($classname)]);
                     }
                 }
             }
         }
         echo '<span style="color: #006600; font-weight: bold;">Engenharia reversa terminada!</span>';
     } catch (Exception $e) {
         echo "Falha na engenharia reversa: " . $e->getMessage();
     }
     exit;
     break;
 case 'loadTemplate':
예제 #17
0
 /**
  * @see Lumine_Connection_IConnection::getForeignKeys()
  */
 public function getForeignKeys($tablename)
 {
     if (!$this->connect()) {
         return false;
     }
     $sql = "SELECT pg_catalog.pg_get_constraintdef(r.oid, true) as condef\n\t\t\t\tFROM pg_catalog.pg_constraint r, pg_catalog.pg_class c\n\t\t\t\tWHERE r.conrelid = c.oid AND r.contype = 'f'\n\t\t\t\tAND c.relname = '" . $tablename . "'";
     $fks = array();
     $rs = $this->executeSQL($sql);
     while ($row = pg_fetch_row($rs)) {
         // Exemplo:
         // FOREIGN KEY (idusuario) REFERENCES usuario(idusuario) ON UPDATE CASCADE ON DELETE CASCADE
         //preg_match('@FOREIGN KEY \((\w+)\) REFERENCES (\w+)\((\w+)\)(.*?)$@i', str_replace('"', '', $row[0]), $matches);
         //preg_match('@FOREIGN KEY \((\w+(.*?)?)\) REFERENCES (\w+)\((\w+(.*?))\)(.*?)$@i', str_replace('"', '', $row[0]), $matches);
         preg_match('@FOREIGN KEY \\((?<from>\\w+(.*?)?)\\) REFERENCES (?<target_table>\\w+\\.?\\w+)\\((?<target_column>\\w+\\.?\\w+(.*?))\\)(.*?)$@i', str_replace('"', '', $row[0]), $matches);
         $listFrom = explode(',', str_replace(' ', '', $matches['from']));
         $listTo = explode(',', str_replace(' ', '', $matches['target_column']));
         if (count($listFrom) != count($listTo)) {
             Lumine_Log::error('O numero de itens de origem nao e igual ao numero de itens de destino');
             exit;
         }
         for ($i = 0; $i < count($listFrom); $i++) {
             // removemos o nome do schema
             // 22/03/2011 - encontrado por Thiago Marsiglia
             $targetTable = end(explode('.', $matches['target_table']));
             // nome da fk
             $name = $targetTable;
             $fieldFrom = $listFrom[$i];
             $fieldTo = $listTo[$i];
             if (isset($fks[$name])) {
                 $name = $name . '_' . $fieldTo;
             }
             $fks[$name]['from'] = $fieldFrom;
             $fks[$name]['to'] = $targetTable;
             $fks[$name]['to_column'] = $fieldTo;
             $reg = array();
             if (preg_match('@(.*?)ON UPDATE (RESTRICT|CASCADE)@i', $matches[5], $reg)) {
                 $fks[$name]['update'] = strtoupper($reg[2]);
             } else {
                 $fks[$name]['update'] = 'RESTRICT';
             }
             if (preg_match('@(.*?)ON DELETE (RESTRICT|CASCADE)@i', $matches[5], $reg)) {
                 $fks[$name]['delete'] = strtoupper($reg[2]);
             } else {
                 $fks[$name]['delete'] = 'RESTRICT';
             }
         }
     }
     return $fks;
 }
예제 #18
0
 /**
  * Cria uma classe pelo nome da tabelaon the fly
  * @author Hugo Ferreira da Silva
  * @link http://www.hufersil.com.br
  * @param string $tablename Nome da tabela
  * @return Lumine_Factory
  */
 public function factory($tablename)
 {
     Lumine_Log::debug('Criando entidade para a tabela ' . $tablename);
     return Lumine_Factory::create($tablename, $this);
 }
예제 #19
0
 /**
  * Gera os arquivos
  * @author Hugo Ferreira da Silva
  * @link http://www.hufersil.com.br/
  * @param boolean $overwrite Forca a sobrescrita nos arquivos
  * @return void
  */
 private function generateFiles($overwrite)
 {
     Lumine_Log::debug('Gerando arquivos direto na pasta');
     $fullpath = $this->cfg->getProperty('class_path') . DIRECTORY_SEPARATOR . str_replace('.', DIRECTORY_SEPARATOR, $this->cfg->getProperty('package'));
     $sufix = $this->cfg->getOption('class_sufix');
     if (!empty($sufix)) {
         $sufix = '.' . $sufix;
     }
     $dummy = new Lumine_Reverse_ClassTemplate();
     $end = $dummy->getEndDelim();
     if (!file_exists($fullpath) && $this->cfg->getOption('create_paths') == 1) {
         mkdir($fullpath, 0777, true) or die('Não foi possivel criar o diretorio: ' . $fullpath);
     }
     reset($this->files);
     foreach ($this->files as $classname => $content) {
         $filename = $fullpath . DIRECTORY_SEPARATOR . $classname . $sufix . '.php';
         if (file_exists($filename) && empty($overwrite)) {
             $fp = fopen($filename, 'r');
             $old_content = fread($fp, filesize($filename));
             fclose($fp);
             $start = strpos($old_content, $end) + strlen($end);
             $customized = substr($old_content, $start);
             $top = substr($content, 0, strpos($content, $end));
             $content = $top . $end . $customized;
         }
         $fp = @fopen($filename, 'w');
         if ($fp) {
             fwrite($fp, $content);
             fclose($fp);
             chmod($filename, 0777);
             Lumine_Log::debug('Arquivo para a classe ' . $classname . ' gerado com sucesso');
         } else {
             Lumine_Log::error('O PHP nao tem direito de escrita na pasta "' . $fullpath . '". Verifique se o diretario existe e se o PHP tem direito de escrita.');
             exit;
         }
     }
     //// cria os dtos
     if ($this->cfg->getOption('create_dtos')) {
         reset($this->dtos);
         // pasta raiz dos DTO's
         $path = $this->cfg->getProperty('class_path') . DIRECTORY_SEPARATOR . str_replace('.', DIRECTORY_SEPARATOR, $this->cfg->getProperty('package')) . DIRECTORY_SEPARATOR . 'dto';
         // para cada DTO
         foreach ($this->dtos as $obj) {
             $fullpath = $path . DIRECTORY_SEPARATOR . str_replace('.', DIRECTORY_SEPARATOR, $obj->getPackage());
             // se o diretorio nao existe, tenta criar
             if (!is_dir($fullpath) && $this->cfg->getOption('create_paths') == 1) {
                 mkdir($fullpath, 0777, true) or die('Não foi possivel criar o diretorio: ' . $fullpath);
             }
             $filename = $fullpath . DIRECTORY_SEPARATOR . $obj->getClassname() . $sufix . '.php';
             file_put_contents($filename, $obj->getContent());
         }
     }
     // models
     foreach ($this->models as $item) {
         Lumine_Log::debug('Criando Model ' . $item->getClassname());
         $filename = $item->getFullFileName();
         if (!is_dir(dirname($filename)) && $this->cfg->getOption('create_paths') == 1) {
             $path = dirname($filename);
             mkdir($path, 0777, true) or die('Não foi possivel criar o diretorio: ' . $path);
         } else {
             if (!is_dir(dirname($filename))) {
                 $path = dirname($filename);
                 Lumine_Log::error('Nao eh possivel gravar em ' . $path . '. Verifique se a pasta existe e se ha permissao de gravacao');
             }
         }
         $content = $item->getContent();
         file_put_contents($filename, $content);
         chmod($filename, 0777);
     }
     // copia o arquivo de contexto
     if ($this->cfg->getOption('model_context') == 1) {
         $contextFile = LUMINE_INCLUDE_PATH . '/lib/Templates/ApplicationContext.php';
         if (file_exists($contextFile)) {
             $path = $this->cfg->getProperty('class_path') . DIRECTORY_SEPARATOR . $this->cfg->getOption('model_context_path') . DIRECTORY_SEPARATOR;
             if (!is_dir($path)) {
                 if ($this->cfg->getOption('create_paths') == 1) {
                     mkdir($path, 0777, true) or die('Não foi possivel criar o diretorio ' . $path);
                 } else {
                     Lumine_Log::error('Nao foi possivel gravar o contexto na pasta ' . $path . '. Verifique se a pasta existe.');
                 }
             }
             $destino = $path . 'Lumine_ApplicationContext.php';
             // so copiamos se o arquivo nao existir
             if (!file_exists($destino)) {
                 Lumine_Log::debug('Copiando arquivo de contexto: ' . $destino);
                 copy($contextFile, $destino);
                 chmod($path . 'Lumine_ApplicationContext.php', 0777);
                 // ja existe, nao copaimos mas avisamos
             } else {
                 Lumine_Log::debug('O arquivo "' . $destino . '" ja existe');
             }
         }
     }
     // escreve os controles
     $path = $this->cfg->getProperty('class_path');
     $path .= DIRECTORY_SEPARATOR . 'controls' . DIRECTORY_SEPARATOR;
     if (!file_exists($path) && $this->cfg->getOption('create_paths') == 1) {
         mkdir($path, 0777, true) or die('Nao foi possivel criar o diretorio: ' . $path);
     }
     foreach ($this->controls as $classname => $content) {
         $filename = $path . $classname . '.php';
         $fp = @fopen($filename, 'w');
         if (!$fp) {
             Lumine_Log::error('O PHP nao tem direito de escrita para gerar o arquivo "' . $filename . '". Verifique se o diretorio existe e se o PHP tem direito de escrita.');
             exit;
         } else {
             fwrite($fp, $content);
             fclose($fp);
             Lumine_Log::debug('Arquivo de controle "' . $filename . '" gerado com sucesso.');
         }
     }
     // copia os demais arquivos
     if (!empty($this->controls) && $this->cfg->getOption('create_controls') != '') {
         $class = 'Lumine_Form_' . $this->cfg->getOption('create_controls');
         $ref = new ReflectionClass($class);
         $instance = $ref->newInstance(null);
         $instance->copyFiles($path);
     }
     // escreve o arquivo de configuracao
     $filename = $this->cfg->getProperty('class_path') . DIRECTORY_SEPARATOR . 'lumine-conf.php';
     $fp = @fopen($filename, 'w');
     if (!$fp) {
         Lumine_Log::error('O PHP nao tem direito de escrita para gerar o arquivo "' . $filename . '". Verifique se o diretorio existe e se o PHP tem direito de escrita.');
         exit;
     }
     fwrite($fp, $this->config);
     fclose($fp);
     Lumine_Log::debug('Arquivo "' . $filename . '" gerado com sucesso.');
 }
예제 #20
0
 /**
  * @see ILumine_Connection::close()
  */
 public function close()
 {
     $this->dispatchEvent(new Lumine_ConnectionEvent(Lumine_Event::PRE_CLOSE, $this));
     if ($this->conn_id && self::$state != self::CLOSED) {
         self::$state = self::CLOSED;
         Lumine_Log::debug('Fechando conexao com ' . $this->getDatabase());
         pg_close($this->conn_id);
     }
     $this->dispatchEvent(new Lumine_ConnectionEvent(Lumine_Event::POS_CLOSE, $this));
 }
예제 #21
0
 /**
  * Retorna o indice do registro atual
  * @return int;
  */
 public function key()
 {
     Lumine_Log::debug('Retornando o indice ' . ($this->_iteratorPosition + 1) . ' para iterator');
     return $this->_iteratorPosition;
 }
예제 #22
0
 /**
  * @see ILumine_Connection::executeSQL()
  */
 public function executeSQL($sql)
 {
     $this->dispatchEvent(new Lumine_ConnectionEvent(Lumine_Event::PRE_EXECUTE, $this, '', $sql));
     $this->connect();
     if (preg_match('@\\s*(LIMIT.+?)$@i', $sql, $reg)) {
         $sql = str_replace($reg[1], '', $sql);
         $limite = strtoupper($reg[1]);
         $limite = str_replace('LIMIT', 'FIRST', $limite);
         $limite = str_replace('OFFSET', 'SKIP', $limite);
         $sql = preg_replace('@^SELECT\\s+@i', 'SELECT ' . $limite . ' ', $sql);
         Lumine_Log::debug('Consulta transformada para Firebird: ' . $sql);
     }
     $rs = @ibase_query($sql, $this->conn_id);
     if (!$rs) {
         $msg = $this->getErrorMsg();
         $this->dispatchEvent(new Lumine_ConnectionEvent(Lumine_Event::EXECUTE_ERROR, $this, $msg, $sql));
         throw new Lumine_Exception("Falha na consulta: " . $msg, Lumine_Exception::QUERY_ERROR);
     }
     $this->dispatchEvent(new Lumine_ConnectionEvent(Lumine_Event::CONNECTION_ERROR, $this, '', $sql));
     return $rs;
 }