/**
  * 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(null);
     }
     /**
      * Verifico que haya iniciado sesión
      */
     if (!MkcAuth::isLogged()) {
         //Verifico que no genere una redirección infinita
         if ($this->controller_name != 'login' && ($this->action_name != 'entrar' && $this->action_name != 'salir')) {
             MkcMessage::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 {
                 MkcRedirect::toLogin('sistema/login/entrar/');
             }
             return false;
         }
     } else {
         if (MkcAuth::isLogged() && $this->controller_name != 'login') {
             $acl = new MkcAcl();
             //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 {
                         MkcMessage::info($msj);
                         MkcRedirect::to("dashboard");
                     }
                     return FALSE;
                 }
             }
             if (!$acl->check(Session::get('perfil_id'))) {
                 MkcMessage::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'));
             }
         }
     }
 }
示例#2
0
 /**
  * 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++);
         MkcMessage::warning('Oops! hemos realizado algún procedimiento mal... <br />Inténtalo nuevamente!');
     } else {
         MkcMessage::error($e->getMessage());
         MkcMessage::error("Detalle del error: " . $e->getTraceAsString());
     }
     if (Session::has('exception_counter')) {
         if (Session::get('exception_counter') > 2) {
             MkcMessage::info('Si el problema persiste contacta con el administrador del sistema.');
             Sesion::set('exception_counter', 0);
         }
     }
 }
示例#3
0
 /**
  * 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')) {
         MkcMessage::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 = MkcConfig::write('databases', $data, $source);
     if ($rs) {
         MkcAudit::info('Se ha actualizado el archivo de conexión del sistema');
     }
     return $rs;
 }
示例#4
0
 /**
  * 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) {
         MkcMessage::warning('Lo sentimos, pero este recurso no se puede editar.');
         return 'cancel';
     }
 }
 /**
  * Método para eliminar
  */
 public function eliminar($key)
 {
     if (!($id = MkcSecurity::isValidKey($key, 'eliminar_recurso', 'int'))) {
         return MkcRedirect::toAction('listar');
     }
     $recurso = new Recurso();
     if (!$recurso->find_first($id)) {
         MkcMessage::get('id_no_found');
         return MkcRedirect::toAction('listar');
     }
     try {
         if ($recurso->delete()) {
             MkcMessage::valid('El recurso se ha eliminado correctamente!');
         } else {
             MkcMessage::warning('Lo sentimos, pero este recurso no se puede eliminar.');
         }
     } catch (KumbiaException $e) {
         MkcMessage::error('Este recurso no se puede eliminar porque se encuentra relacionado con otro registro.');
     }
     return MkcRedirect::toAction('listar');
 }
示例#6
0
 /**
  * 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) ? MkcUtils::getSlug($this->plantilla, '_') : 'default';
     if (!empty($this->id)) {
         if ($this->id == Perfil::SUPER_USUARIO) {
             MkcMessage::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)) {
         DMkcMessage::error('Lo sentimos, pero no hemos podidio ubicar la plantilla ' . $this->plantilla);
         return 'cancel';
     }
 }
示例#7
0
 /**
  * Callback que se ejecuta antes de eliminar
  */
 public function before_delete()
 {
     if ($this->id == 1) {
         //Para no eliminar la información de sucursal
         MkcMessage::warning('Lo sentimos, pero esta sucursal no se puede eliminar.');
         return 'cancel';
     }
 }
示例#8
0
 /**
  * Método para descargar
  */
 public function descargar($key = '')
 {
     if (!($id = MkcSecurity::isValidKey($key, 'descargar_backup', 'int'))) {
         return View::ajax();
     }
     $backup = new Backup();
     if (!$backup->find_first($id)) {
         MkcMessage::get('id_no_found');
         return MkcRedirect::toAction('listar');
     }
     $file = APP_PATH . 'temp/backup/' . $backup->archivo;
     if (!is_file($file)) {
         MkcMessage::warning('No hemos podido localizar el archivo. Por favor contacta al administrador del sistema.');
         MkcAudit::error("No se ha podido encontrar la copia de seguridad {$backup->archivo} en el sistema");
         return MkcRedirect::toAction('listar');
     }
     View::template(NULL);
     $this->backup = $backup;
 }
示例#9
0
 /**
  * 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
         MkcMessage::warning('Lo sentimos, pero este menú no se puede editar.');
         return 'cancel';
     }
 }