/** * Acción de inicio del controlador. */ public function start() { // Acciones del padre (ayuda y demás). parent::start(); // Definicion de PATH's. $this->base_dir = APP_BASE . DS . 'base' . DS; $this->p_dir = APP_BASE . DS . 'marifa' . DS; // Listado de path a omitir. $this->skip_list = array($this->base_dir . 'decoda/'); // Arreglo de archivos. $this->archivos_generados = array(); $this->archivos_iniciales = array(); $this->listado_archivos($this->p_dir); // Limpiamos el directorio de clases. @mkdir($this->p_dir, 0777, TRUE); $rst = $this->recursive_search(APP_BASE . DS . 'base'); foreach (array_intersect($this->archivos_iniciales, array_diff($this->archivos_generados, $this->archivos_iniciales)) as $k) { $this->unlinkr($k); } foreach (array('CLASES' => 0, 'INTERFACES' => 3) as $n => $v) { if ($rst[1 + $v] == 0) { $tail = "SIN ERRORES\n"; } else { $tail = "CORRECTAMENTE\n{$rst[1 + $v]} {$n} CON ERRORES\n"; } $p = $rst[2 + $v] > 1 ? 'PROCESADAS' : 'PROCESADA'; $nn = $rst[2 + $v] > 1 ? $n : substr($n, 0, -1); if ($rst[0 + $v] == 0) { Shell_Cli::write("{$rst[2 + $v]} {$nn} {$p} {$tail}"); } else { Shell_Cli::write("{$rst[2 + $v]}+{$rst[0 + $v]} {$nn} {$p} {$tail}"); } } }
/** * Función de inicio del controlador. */ public function start() { parent::start(); $action = isset($this->params[1]) ? $this->params[1] : NULL; // Seleccionamos la acción a tomar. switch ($action) { case 'apply': // Verificamos conección y verificamos exista la tabla. self::check_db_status(); // Obtenemos las versiones instaladas. try { $lista = Database::get_instance()->query('SELECT numero, fecha FROM migraciones')->get_pairs(); } catch (Database_Exception $e) { Shell_Cli::write_line(Shell_Cli::get_colored_string('Error ', 'red') . $e->getCode() . ': ' . $e->getMessage()); } // Obtenemos las faltantes. $migraciones = Shell_Migraciones::migraciones(); $faltantes = array_diff($migraciones, array_keys($lista)); // Verifico si especificó alguna en especial. if (isset($this->params[2])) { $migracion = (int) $this->params[2]; // Verifico no esté aplicada aún. if (in_array($migracion, $lista)) { Shell_Cli::write_line(Shell_Cli::get_colored_string('ERROR: ', 'red') . 'La migracion ' . $migracion . ' ya se encuentra aplicada.'); } // Verifico su existencia. if (!in_array($migracion, $migraciones)) { Shell_Cli::write_line(Shell_Cli::get_colored_string('ERROR: ', 'red') . 'La migracion ' . $migracion . ' no se encuentra disponible.'); } // Sobreescribo faltantes. $faltantes = array($migracion); } // Aplicamos las faltantes. foreach ($faltantes as $f) { try { Shell_Cli::write('Aplicando migracion ' . $f . '... '); if (Shell_Migraciones::migrar($f)) { Shell_Cli::write_line(Shell_Cli::get_colored_string('OK', 'green')); } } catch (Exception $e) { Shell_Cli::write_line(Shell_Cli::get_colored_string('ERROR ', 'red') . $e->getCode() . ': ' . $e->getMessage()); die; } } // Informamos que todo fue correcto. Shell_Cli::write_line(Shell_Cli::get_colored_string('Migraciones aplicadas correctamente.', 'green')); break; case 'status': default: // Verificamos conección y verificamos exista la tabla. self::check_db_status(); // Obtenemos las versiones instaladas. try { $lista = Database::get_instance()->query('SELECT numero, fecha FROM migraciones')->get_pairs(); } catch (Database_Exception $e) { Shell_Cli::write_line(Shell_Cli::get_colored_string('Error ', 'red') . $e->getCode() . ': ' . $e->getMessage()); } // Obtenemos las pentientes. $migraciones = Shell_Migraciones::migraciones(); $faltantes = array_diff($migraciones, array_keys($lista)); // Mostramos la salida. if (count($migraciones) == 0) { Shell_Cli::write_line('No hay migraciones definidas aún.'); } else { if (count($faltantes) == 0) { Shell_Cli::write_line('No hay migraciones pendientes.'); } else { if (count($faltantes) == 1) { Shell_Cli::write_line('Falta aplicar la migración ' . array_shift($faltantes) . '.'); } else { Shell_Cli::write_line('Faltan aplicar las siguiente migraciones:'); foreach ($faltantes as $f) { Shell_Cli::write_line(' - ' . $f); } } } } } }