Example #1
0
 /**
  * Instalamos un nuevo tema.
  */
 public function action_instalar_tema()
 {
     // Cargamos la vista.
     $vista = View::factory('admin/configuracion/instalar_tema');
     // Valores por defecto.
     $vista->assign('error_carga', FALSE);
     if (Request::method() == 'POST') {
         $error = FALSE;
         // Verifico el envio correcto de datos.
         if (isset($_FILES['theme'])) {
             // Cargo los datos del archivo.
             $file = $_FILES['theme'];
             // Verifico el estado.
             if ($file['error'] !== UPLOAD_ERR_OK) {
                 $error = TRUE;
                 switch ($file['error']) {
                     case UPLOAD_ERR_INI_SIZE:
                     case UPLOAD_ERR_FORM_SIZE:
                         $vista->assign('error_carga', 'El tamaño del archivo es incorrecto.');
                         break;
                     case UPLOAD_ERR_PARTIAL:
                         $vista->assign('error_carga', 'Los datos enviados están corruptos.');
                         break;
                     case UPLOAD_ERR_NO_FILE:
                         $vista->assign('error_carga', 'No has seleccionado un archivo.');
                         break;
                     case UPLOAD_ERR_NO_TMP_DIR:
                     case UPLOAD_ERR_CANT_WRITE:
                         $vista->assign('error_carga', 'Error interno al cargar el archivo. Reintente. Si el error persiste contacte al administrador.');
                         break;
                     case UPLOAD_ERR_EXTENSION:
                         $vista->assign('error_carga', 'La configuración del servidor no permite archivo con esa extensión.');
                         break;
                 }
             } else {
                 // Cargo el mime.
                 $file['type'] = Update_Utils::get_mime($file['tmp_name']);
                 // Verifico esté dentro de los permitidos.
                 if (!in_array(Update_Utils::mime2compresor($file['type']), Update_Compresion::get_list())) {
                     $error = TRUE;
                     $vista->assign('error_carga', 'El tipo de archivo no es soportado. Verifique la configuración del servidor.');
                 }
             }
         } else {
             $error = TRUE;
             $vista->assign('error_carga', 'No has seleccionado un archivo.');
         }
         // Verifico el contenido de los datos.
         if (!$error) {
             // Armo directorio temporal para la descargar.
             $tmp_dir = TMP_PATH . uniqid('pkg_') . DS;
             mkdir($tmp_dir, 0777, TRUE);
             // Realizo la descompresión.
             $compresor = Update_Compresion::get_instance(Update_Utils::mime2compresor($file['type']));
             $compresor->set_temp_path($tmp_dir);
             if (!$compresor->decompress($file['tmp_name'])) {
                 // Limpio salidas.
                 Update_Utils::unlink($file['tmp_name']);
                 Update_Utils::unlink($tmp_dir);
                 // Informo del error.
                 $error = TRUE;
                 $vista->assign('error_carga', 'No se pudo descomprimir el archivo. Compruebe que sea correcto.');
             } else {
                 // Verifico que sea correcto.
                 if (is_dir($tmp_dir) && file_exists($tmp_dir . DS . 'theme.php') && file_exists($tmp_dir . DS . 'views') && $tmp_dir . DS . 'assets') {
                     // Cargo configuraciones.
                     $data = configuracion_obtener($tmp_dir . DS . 'theme.php');
                     // Verifico su contenido.
                     if (is_array($data)) {
                         if (isset($data['nombre']) && isset($data['author'])) {
                             $theme_name = preg_replace('/(\\s|[^a-z0-9])/', '', strtolower($data['nombre']));
                         }
                     }
                     if (!isset($theme_name)) {
                         // Limpio salidas.
                         Update_Utils::unlink($file['tmp_name']);
                         Update_Utils::unlink($tmp_dir);
                         // Informo del error.
                         $error = TRUE;
                         $vista->assign('error_carga', 'El archivo de descripción del tema es inválido.');
                     }
                 } else {
                     // Limpio salidas.
                     Update_Utils::unlink($file['tmp_name']);
                     Update_Utils::unlink($tmp_dir);
                     // Informo del error.
                     $error = TRUE;
                     $vista->assign('error_carga', 'No se trata de un tema válido.');
                 }
             }
         }
         // Genero directorios.
         if (!$error) {
             // Generamos el path donde se va a alojar.
             $target_path = APP_BASE . DS . VIEW_PATH . $theme_name . DS;
             // Verifico directorio donde alojar.
             if (!file_exists($target_path)) {
                 // Creo el directorio del tema.
                 if (!@mkdir($target_path, 0777, TRUE)) {
                     // Limpio salidas.
                     Update_Utils::unlink($target_path);
                     Update_Utils::unlink($file['tmp_name']);
                     Update_Utils::unlink($tmp_dir);
                     // Informo del error.
                     $vista->assign('error_carga', '1No se pudo alojar el tema en su lugar correspondiente. Verifica los permisos del directorio de temas.');
                     $error = TRUE;
                 }
             }
         }
         // Realizo actualizacion.
         if (!$error) {
             // Realizo el movimiento.
             if (!Update_Utils::copyr($tmp_dir, $target_path)) {
                 // Limpio salidas.
                 Update_Utils::unlink($file['tmp_name']);
                 Update_Utils::unlink($tmp_dir);
                 Update_Utils::unlink($target_path);
                 // Informo del error.
                 $vista->assign('error_carga', 'No se pudo alojar el tema en su lugar correspondiente. Verifica los permisos del directorio de temas.');
             } else {
                 // Limpio directorios.
                 Update_Utils::unlink($file['tmp_name']);
                 Update_Utils::unlink($tmp_dir);
                 // Informo resultado.
                 $_SESSION['flash_success'] = 'El tema se instaló correctamente.';
                 // Redireccionamos.
                 Request::redirect('/admin/configuracion/temas');
             }
         }
     }
     // Seteamos el menu.
     $this->template->assign('master_bar', parent::base_menu('admin'));
     // Cargamos plantilla administracion.
     $admin_template = View::factory('admin/template');
     $admin_template->assign('contenido', $vista->parse());
     unset($portada);
     $admin_template->assign('top_bar', Controller_Admin_Home::submenu('configuracion_temas'));
     // Asignamos la vista a la plantilla base.
     $this->template->assign('contenido', $admin_template->parse());
 }
Example #2
0
 /**
  * Editamos una noticia.
  * @param int $id ID de la noticia a editar.
  */
 public function action_editar_noticia($id)
 {
     // Cargamos el modelo de noticia.
     $model_noticia = new Model_Noticia((int) $id);
     if (!$model_noticia->existe()) {
         $_SESSION['flash_error'] = 'Noticia incorrecta.';
         Request::redirect('/admin/contenido/noticias');
     }
     // Cargamos la vista.
     $vista = View::factory('admin/contenido/editar_noticia');
     // Valores por defecto y errores.
     $vista->assign('contenido', $model_noticia->contenido);
     $vista->assign('error_contenido', FALSE);
     if (Request::method() == 'POST') {
         $error = FALSE;
         // Obtenemos el contenido.
         $contenido = isset($_POST['contenido']) ? $_POST['contenido'] : NULL;
         // Quitamos BBCode para dimenciones.
         $contenido_clean = preg_replace('/\\[([^\\[\\]]+)\\]/', '', $contenido);
         if (!isset($contenido_clean[10]) || isset($contenido_clean[200])) {
             $error = TRUE;
             $vista->assign('error_contenido', 'El contenido debe tener entre 10 y 200 caractéres');
         } else {
             // Evitamos XSS.
             $contenido = htmlentities($contenido, ENT_NOQUOTES, 'UTF-8');
             // Actualizamos el contenido.
             $model_noticia->actualizar_contenido($contenido);
             $vista->assign('contenido', $model_noticia->contenido);
             $vista->assign('success', 'Contenido actualizado correctamente');
         }
         unset($contenido_clean);
     }
     // Seteamos el menu.
     $this->template->assign('master_bar', parent::base_menu('admin'));
     // Cargamos plantilla administracion.
     $admin_template = View::factory('admin/template');
     $admin_template->assign('contenido', $vista->parse());
     unset($portada);
     $admin_template->assign('top_bar', Controller_Admin_Home::submenu('contenido_noticias'));
     // Asignamos la vista a la plantilla base.
     $this->template->assign('contenido', $admin_template->parse());
 }
Example #3
0
 /**
  * Menu principal.
  * @param string $selected Clave seleccionada.
  * @return array
  */
 protected function base_menu($selected = NULL)
 {
     $data = array();
     // Listado de elementos ONLINE.
     if (Usuario::is_login()) {
         $data['inicio'] = array('link' => '/perfil/', 'caption' => 'Inicio', 'icon' => 'home', 'active' => FALSE);
     }
     // Listado de elemento OFFLINE.
     $data['posts'] = array('link' => '/', 'caption' => 'Posts', 'icon' => 'book', 'active' => FALSE);
     $data['fotos'] = array('link' => '/foto/', 'caption' => 'Fotos', 'icon' => 'picture', 'active' => FALSE);
     $data['tops'] = array('link' => '/tops/', 'caption' => 'TOPs', 'icon' => 'signal', 'active' => FALSE);
     // Listado elemento por permisos.
     if (Controller_Moderar_Home::permisos_acceso()) {
         $data['moderar'] = array('link' => '/moderar/', 'caption' => 'Moderación', 'icon' => 'eye-open', 'active' => FALSE);
     }
     if (Controller_Admin_Home::permisos_acceso()) {
         $data['admin'] = array('link' => '/admin/', 'caption' => 'Administración', 'icon' => 'certificate', 'active' => FALSE);
     }
     // Seleccionamos elemento.
     if ($selected !== NULL && isset($data[$selected])) {
         $data[$selected]['active'] = TRUE;
     } else {
         $data['posts']['active'] = TRUE;
     }
     return $data;
 }
Example #4
0
 /**
  * Listado de sessiones de usuarios activas.
  * @param int $pagina Número de página a mostrar.
  */
 public function action_sesiones($pagina)
 {
     // Formato de la página.
     $pagina = (int) $pagina > 0 ? (int) $pagina : 1;
     // Cantidad de elementos por pagina.
     $cantidad_por_pagina = 20;
     // Cargamos la vista.
     $vista = View::factory('admin/usuario/sesiones');
     // Modelo de sessiones.
     $model_session = new Model_Session(session_id());
     // Quitamos sessiones terminadas.
     $model_session->limpiar();
     // Cargamos el listado de usuarios.
     $lst = $model_session->listado($pagina, $cantidad_por_pagina);
     // Paginación.
     $paginador = new Paginator($model_session->cantidad(), $cantidad_por_pagina);
     $vista->assign('paginacion', $paginador->get_view($pagina, '/admin/usuario/sessiones/%s/'));
     // Obtenemos datos de las noticias.
     foreach ($lst as $k => $v) {
         $a = $v->as_array();
         $a['usuario'] = $v->usuario()->as_array();
         $a['ip_raw'] = $a['ip'];
         $a['ip'] = long2ip($a['ip']);
         $lst[$k] = $a;
     }
     // Seteamos listado de noticias.
     $vista->assign('sesiones', $lst);
     unset($lst);
     // Seteamos el menu.
     $this->template->assign('master_bar', parent::base_menu('admin'));
     // Cargamos plantilla administracion.
     $admin_template = View::factory('admin/template');
     $admin_template->assign('contenido', $vista->parse());
     unset($portada);
     $admin_template->assign('top_bar', Controller_Admin_Home::submenu('usuario_sesiones'));
     // Asignamos la vista a la plantilla base.
     $this->template->assign('contenido', $admin_template->parse());
 }