/** * Callback que se ejecuta antes de los métodos de todos los controladores */ protected final function initialize() { /** * Si el método de entrada es ajax, el tipo de respuesta es sólo la vista */ if (Input::isAjax()) { View::template('sgc/sgc'); } /** * Verifico que haya iniciado sesión */ if (!DwAuth::isLogged()) { //Verifico que no genere una redirección infinita if ($this->controller_name != 'login' && ($this->action_name != 'entrar' && $this->action_name != 'salir')) { DwMessage::warning('No has iniciado sesión o ha caducado.'); //Verifico que no sea una ventana emergente if ($this->module_name == 'reporte') { View::error(); //TODO: crear el método error() } else { DwRedirect::toLogin('sistema/login/entrar/'); } return false; } } else { if (DwAuth::isLogged() && $this->controller_name != 'login') { $acl = new DwAcl(); //Cargo los permisos y templates if (APP_UPDATE && Session::get('perfil_id') != Perfil::SUPER_USUARIO) { //Solo el super usuario puede hacer todo if ($this->module_name != 'dashboard' && $this->controller_name != 'index') { $msj = 'Estamos en labores de actualización y mantenimiento.'; $msj .= '<br />'; $msj .= 'El servicio se reanudará dentro de ' . APP_UPDATE_TIME; if (Input::isAjax()) { View::update(); } else { DwMessage::info($msj); DwRedirect::to("dashboard"); } return FALSE; } } if (!$acl->check(Session::get('perfil_id'))) { DwMessage::error('Tu no posees privilegios para acceder a <b>' . Router::get('route') . '</b>'); Input::isAjax() ? View::ajax() : View::select(NULL); return false; } if (!defined('SKIN')) { define('SKIN', Session::get('tema')); } } } }
/** * Método para las execpciones */ public static function exception(KumbiaException $e) { if (PRODUCTION) { $counter = Session::has('exception_counter') ? Session::get('exception_counter') : 1; Session::set('exception_counter', $counter++); DwMessage::warning('Oops! hemos realizado algún procedimiento mal... <br />Inténtalo nuevamente!'); } else { DwMessage::error($e->getMessage()); DwMessage::error("Detalle del error: " . $e->getTraceAsString()); } if (Session::has('exception_counter')) { if (Session::get('exception_counter') > 2) { DwMessage::info('Si el problema persiste contacta con el administrador del sistema.'); Sesion::set('exception_counter', 0); } } }
/** * Callback que se ejecuta antes de eliminar */ public function before_delete() { if ($this->id == 1) { //Para no eliminar la información de sucursal DwMessage::warning('Lo sentimos, pero esta sucursal no se puede eliminar.'); return 'cancel'; } }
/** * Callback que se ejecuta antes de guardar/modificar */ public function before_save() { $this->perfil = Filter::get($this->perfil, 'string'); $this->plantilla = Filter::get($this->plantilla, 'string'); $this->plantilla = !empty($this->plantilla) ? DwUtils::getSlug($this->plantilla, '_') : 'default'; if (!empty($this->id)) { if ($this->id == Perfil::SUPER_USUARIO) { DwMessage::warning('Lo sentimos, pero este perfil no se puede editar.'); return 'cancel'; } } $path = APP_PATH . 'views/_shared/templates/backend/' . $this->plantilla . '.phtml'; //Verifico si se encuentra el template if (!is_file($path)) { DwMessage::error('Lo sentimos, pero no hemos podidio ubicar la plantilla ' . $this->plantilla); return 'cancel'; } }
/** * Método para eliminar */ public function eliminar($key) { if (!($id = DwSecurity::isValidKey($key, 'eliminar_recurso', 'int'))) { return DwRedirect::toAction('listar'); } $recurso = new Recurso(); if (!$recurso->find_first($id)) { DwMessage::get('id_no_found'); return DwRedirect::toAction('listar'); } try { if ($recurso->delete()) { DwMessage::valid('El recurso se ha eliminado correctamente!'); } else { DwMessage::warning('Lo sentimos, pero este recurso no se puede eliminar.'); } } catch (KumbiaException $e) { DwMessage::error('Este recurso no se puede eliminar porque se encuentra relacionado con otro registro.'); } return DwRedirect::toAction('listar'); }
/** * Callback que se ejecuta antes de guardar/modificar */ public function before_save() { $this->menu = Filter::get($this->menu, 'string'); $this->url = Filter::get($this->url, 'string'); if (empty($this->url)) { $this->url = '#'; } $this->icono = Filter::get($this->icono, 'string'); $this->posicion = Filter::get($this->posicion, 'int'); if (!empty($this->id) && $this->id <= 2) { //Para no editar el dashboard DwMessage::warning('Lo sentimos, pero este menú no se puede editar.'); return 'cancel'; } }
/** * Método para descargar */ public function descargar($key = '') { if (!($id = DwSecurity::isValidKey($key, 'descargar_backup', 'int'))) { return View::ajax(); } $backup = new Backup(); if (!$backup->find_first($id)) { DwMessage::get('id_no_found'); return DwRedirect::toAction('listar'); } $file = APP_PATH . 'temp/backup/' . $backup->archivo; if (!is_file($file)) { DwMessage::warning('No hemos podido localizar el archivo. Por favor contacta al administrador del sistema.'); DwAudit::error("No se ha podido encontrar la copia de seguridad {$backup->archivo} en el sistema"); return DwRedirect::toAction('listar'); } View::template(NULL); $this->backup = $backup; }
/** * Callback que se ejecuta antes de guardar/modificar */ public function before_save() { $this->modulo = Filter::get($this->modulo, 'string'); $this->controlador = Filter::get($this->controlador, 'string'); $this->accion = Filter::get($this->accion, 'string'); if (empty($this->accion)) { $this->accion = '*'; } $this->recurso = trim($this->modulo . '/' . $this->controlador . '/' . $this->accion . '/', '/'); $this->descripcion = Filter::get($this->descripcion, 'string'); if (!empty($this->id) && $this->id <= 16) { DwMessage::warning('Lo sentimos, pero este recurso no se puede editar.'); return 'cancel'; } }
/** * Método para crear el archivo databases.ini según los parámetros enviados * * @param type $data Campos de los formularios * @param type $source Production o Deveploment * @param type $createDb Indica si se crea o no la base de datos * @return boolean */ public static function setDatabases($data, $source = 'development') { //Verifico si tiene permisos de escritura para crear y editar un archvivo.ini if (!is_writable(APP_PATH . 'config')) { DwMessage::warning('Asigna temporalmente el permiso de escritura a la carpeta "config" de tu app!.'); return false; } //Filtro el array con los parámetros $data = Filter::data($data, array('host', 'username', 'password', 'name', 'type'), 'trim'); //Se utiliza por defecto el driver mysqli por ser orientado a objetos $data['type'] = 'mysqli'; //Se utiliza por defecto el charset UTF-8 $data['charset'] = 'UTF-8'; $rs = DwConfig::write('databases', $data, $source); if ($rs) { DwAudit::info('Se ha actualizado el archivo de conexión del sistema'); } return $rs; }