/**
  * 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 verificar si la llave es válida
  * 
  * @param string $id
  * @param string $action
  * @param string $filter Filtro a aplicar al id devuelto
  * @return boolean
  */
 public static function isValidKey($valueKey, $action = '', $filter = '', $popup = FALSE)
 {
     $key = explode('.', $valueKey);
     $id = $key[0];
     $validKey = self::getKey($id, $action);
     $valid = $validKey === $valueKey ? TRUE : FALSE;
     if (!$valid) {
         MkcMessage::error('Acceso denegado. La llave de seguridad es incorrecta.');
         if ($popup) {
             View::error();
         }
         return FALSE;
     }
     return $filter ? Filter::get($id, $filter) : $id;
 }
示例#3
0
 /**
  * Método que muestra el reporte según el formato. Si es un formato desconocido muesra la página de error
  *
  * @param string $formato Formato a mostrar: html, pdf, xls, xml, ticket, etc
  * @return boolean
  */
 public static function report($formato)
 {
     $formato = Filter::get($formato, 'string');
     $template = $formato == 'html' ? 'backend/impress' : NULL;
     if ($formato == 'error') {
         self::error();
     } else {
         if ($formato != 'html' && $formato != 'pdf' && $formato != 'xls' && $formato != 'xlsx' && $formato != 'doc' && $formato != 'docx' && $formato != 'csv' && $formato != 'xml' && $formato != 'ticket' or $formato == null) {
             MkcMessage::error('Error: ACCESO DENEGADO. El formato del reporte es incorrecto.');
             self::error();
         } else {
             self::response($formato, $template);
         }
     }
 }
示例#4
0
 /**
  * Callback que se ejecuta despues de insertar un usuario
  */
 protected function after_create()
 {
     if (!EstadoUsuario::setEstadoUsuario('registrar', array('usuario_id' => $this->id, 'descripcion' => 'Activado por registro inicial'))) {
         MkcMessage::error('Se ha producido un error interno al activar el usuario. Pofavor intenta nuevamente.');
         return 'cancel';
     }
 }
示例#5
0
 /**
  * Método para paginar resultados utilizando el método find_all_by_sql de los modelos <br>
  *
  * Retorna un PageObject que tiene los siguientes atributos: <br>
  * next: numero de pagina siguiente, si no hay pagina siguiente entonces es false <br>
  * prev: numero de pagina anterior, si no hay pagina anterior entonces es false <br>
  * current: numero de pagina actual <br>
  * total: total de paginas que se pueden mostrar <br>
  * items: array de items de la pagina <br>
  * counter: Número que lleva el conteo de la página <br>
  * size: Total de registros <br>
  * per_page: cantidad de elementos por pagina <br>
  *
  *
  * @param string $model modelo
  * @param string $sql consulta sql
  * @return stdClass
  */
 public static function paginate_by_sql($model, $sql)
 {
     $params = Util::getParams(func_get_args());
     $page_number = isset($params['page']) ? Filter::get($params['page'], 'numeric') : 1;
     //Numero de la página
     $per_page = isset($params['per_page']) ? Filter::get($params['per_page'], 'numeric') : DATAGRID;
     //Datos por página
     $counter = $page_number > 1 ? $page_number * $per_page - ($per_page - 1) : 1;
     //Determino el contador para utilizarlo en la vista
     $start = $per_page * ($page_number - 1);
     //Determino el offset
     $page = new stdClass();
     //Instancia del objeto contenedor de pagina
     $total_items = $model->count_by_sql("SELECT COUNT(*) FROM ({$sql}) AS t");
     //Se cuentan los registros
     $page->items = $model->find_all_by_sql($model->limit($sql, "offset: {$start}", "limit: {$per_page}"));
     //Se efectua la búsqueda
     //Se efectuan los cálculos para las paginas
     $page->next = $start + $per_page < $total_items ? $page_number + 1 : false;
     $page->prev = $page_number > 1 ? $page_number - 1 : false;
     $page->current = $page_number;
     $page->total_page = ceil($total_items / $per_page);
     if ($page->total_page < $page_number && $total_items > 0) {
         $page->prev = false;
         $url = Router::get('route');
         $url = explode('pag', $url);
         $url = trim($url[0], '/');
         MkcMessage::error('La página solicitada no se encuentra en el paginador.  <br />' . MkcHtml::link($url, 'Regresar a la página 1'));
     }
     $page->counter = $total_items >= $counter ? $counter : 1;
     $page->size = $total_items;
     $page->per_page = $per_page;
     return $page;
 }
示例#6
0
 /**
  * Método que verifica la conexión con la base de datos
  * @param type $data
  * @param type $source
  * @return boolean 
  */
 public static function testConnection($data, $source, $db = 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';
     $data['charset'] = 'UTF-8';
     try {
         //Seteo las variables del core
         Config::set("databases.{$source}", $data);
         //Reviso la conexión, sino, genera la excepción
         @Db::factory($source, true);
         MkcMessage::valid("Conexión establecida en modo <b>{$source}!</b>");
     } catch (KumbiaException $e) {
         MkcMessage::error("Error en modo '{$source}': <br /> " . $e->getMessage());
         return false;
     }
 }
 /**
  * Método para resetear las configuraciones del sistema
  * @return type
  */
 public function reset()
 {
     try {
         if (Sistema::reset()) {
             MkcMessage::valid('El sistema se ha reseteado correctamente!');
         }
     } catch (KumbiaException $e) {
         MkcMessage::error('Se ha producido un error al resetear la configuración del sistema.');
     }
     return MkcRedirect::toAction('index');
 }
示例#8
0
 /**
  * Método para restaurar el sistema
  * @param type $id
  */
 public static function restoreBackup($id, $path = '')
 {
     $id = Filter::get($id, 'int');
     if (empty($id)) {
         return FALSE;
     }
     $obj = new Backup();
     if (!$obj->find_first($id)) {
         MkcMessage::get('id_no_found');
         return FALSE;
     }
     if (empty($path)) {
         $path = APP_PATH . 'temp/backup/';
     }
     $file = $path . $obj->archivo;
     if (!is_file($file)) {
         MkcMessage::error('Error: BKP-RES001. Se ha producido un error en la restauración del sistema. <br />No se pudo localizar el archivo de restaruación.');
         return FALSE;
     }
     //Almaceno las copias de seguridad anteriores
     $old_backup = $obj->find('order: registrado_at ASC');
     $system = $obj->_getSystem(TRUE);
     //Verifico el sistema operativo para la restauración
     $database = Config::get('config.application.database');
     //tomo el entorno actual
     $config = $obj->_getConfig($database);
     //Tomo la configuración de conexión
     $exec = "gunzip < {$file} | {$system} -h " . $config['host'] . " -u " . $config['username'] . " --password="******" " . $config['name'];
     system($exec, $result);
     if (!$result) {
         //Inserto los backups anteriores
         foreach ($old_backup as $backup) {
             if ($backup->id >= $obj->id) {
                 $obj->sql("REPLACE INTO `backup` (`id`,`usuario_id`,`denominacion`,`tamano`,`archivo`,`registrado_at`) VALUES ('{$backup->id}', '{$backup->usuario_id}', '{$backup->denominacion}', '{$backup->tamano}', '{$backup->archivo}', '{$backup->registrado_at}')");
             }
         }
         if ($obj) {
             MkcAudit::debug("Se ha restaurado el sistema con la copia de seguridad: {$obj->denominacion}");
         }
         return $obj ? $obj : FALSE;
     }
     return FALSE;
 }
 /**
  * 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');
 }
 /**
  * Método para optimizar tablas
  */
 public function optimizar($key)
 {
     if (!($tabla = MkcSecurity::isValidKey($key, 'optimizar'))) {
         return MkcRedirect::toAction('index');
     }
     try {
         $sistema = new Sistema();
         if ($sistema->getOptimizacion($tabla)) {
             MkcMessage::valid("Se ha optimizado la tabla '{$tabla}' correctamente!");
         } else {
             MkcMessage::error('Se ha presentado un error interno al optimizar la tabla. <br />Por favor intenta más tarde.');
         }
     } catch (KumbiaException $e) {
         MkcMessage::error('Oops! hemos realizado algo mal. <br />Por favor intenta más tarde.');
     }
     return MkcRedirect::toAction('index');
 }
示例#11
0
 /**
  * Método que se ejecuta antes de guardar y/o modificar     
  */
 public function before_save()
 {
     $this->sucursal = Filter::get($this->sucursal, 'string');
     $this->slug = MkcUtils::getSlug($this->sucursal);
     $this->direccion = Filter::get($this->direccion, 'string');
     $this->telefono = Filter::get($this->telefono, 'numeric');
     $this->celular = Filter::get($this->celular, 'numeric');
     $this->fax = Filter::get($this->fax, 'numeric');
     $conditions = "sucursal = '{$this->sucursal}' AND ciudad_id = {$this->ciudad_id} AND empresa_id = {$this->empresa_id}";
     $conditions .= isset($this->id) ? " AND id != {$this->id}" : '';
     if ($this->count("conditions: {$conditions}")) {
         MkcMessage::error('Lo sentimos, pero ya existe una sucursal registrada con el mismo nombre y ciudad.');
         return 'cancel';
     }
 }
示例#12
0
 /**
  * Método para restaurar
  */
 public function restaurar($key = '')
 {
     if (!Input::isAjax()) {
         MkcMessage::error('Método incorrecto para restaurar el sistema.');
         return MkcRedirect::toAction('listar');
     }
     if (!($id = MkcSecurity::isValidKey($key, 'restaurar_backup', 'int'))) {
         return View::ajax();
     }
     $pass = Input::post('password');
     $usuario = Usuario::getUsuarioLogueado();
     if ($usuario->password != md5(sha1($pass))) {
         MkcMessage::error('Acceso incorrecto al sistema. Tu no tienes los permisos necesarios para realizar esta acción.');
         return View::ajax();
     }
     if ($backup = Backup::restoreBackup($id)) {
         MkcMessage::valid('El sistema se ha restaurado satisfactoriamente con la copia de seguridad <b>' . $backup->archivo . '</b>');
     } else {
         MkcMessage::error('Se ha producido un error interno al restaurar el sistema. Por favor contacta al administrador.');
     }
     return View::ajax();
 }
示例#13
0
 /**
  * Método para eliminar
  */
 public function eliminar($key)
 {
     if (!($id = MkcSecurity::isValidKey($key, 'del_sucursal', 'int'))) {
         return MkcRedirect::toAction('listar');
     }
     $sucursal = new Sucursal();
     if (!$sucursal->getInformacionSucursal($id)) {
         MkcMessage::get('id_no_found');
         return MkcRedirect::toAction('listar');
     }
     try {
         if (Sucursal::setSucursal('delete', array('id' => $sucursal->id))) {
             MkcMessage::valid('La sucursal se ha eliminado correctamente!');
         }
     } catch (KumbiaException $e) {
         MkcMessage::error('Esta sucursal no se puede eliminar porque se encuentra relacionada con otro registro.');
     }
     return MkcRedirect::toAction('listar');
 }