public function editarCategoriaAcao() { if ($_POST) { $idcategoria = (int) $_POST['idcategoria']; $categoria = $_POST['categoria']; $voCategoria = new Vo_Categoria(); $voCategoria->idcategoria = $idcategoria; $voCategoria->categoria = $categoria; $categoriaModel = new Model_Categoria(); $categoriaModel->editar($voCategoria); header("location:categoria-editar.php?idcategoria={$idcategoria}"); exit; } else { $idcategoria = (int) $_GET['idcategoria']; $dao = new Dao_Categoria(); $retorno = $dao->request("idcategoria = {$idcategoria}"); if (!isset($retorno[0])) { echo "Registro não encontrado!"; exit; } $categoria = $retorno[0]; } $view = $this->getView(); $view->setValor('categoria', $categoria); $view->mostrar('categoria-editar'); }
/** * Mostramos tops de usuarios. * @param string $categoria Categoria para filtar los tops de usuario. * @param int $periodo Período para filtar usuarios. */ public function action_usuarios($categoria, $periodo) { // Cargamos la portada. $portada = View::factory('tops/usuarios'); // Seteo el menu. $this->template->assign('master_bar', parent::base_menu('tops')); $this->template->assign('top_bar', $this->submenu()); // Cargo las categorias. $model_categorias = new Model_Categoria(); // Seteo el listado en la vista. $portada->assign('categorias', $model_categorias->lista()); // Obtengo la categoria por POST. //TODO: hacer una mejora con jQuery. if (isset($_POST['categoria'])) { $categoria = $_POST['categoria']; } // Verifico si existe la categoria. $categoria = trim($categoria) == '' ? NULL : trim($categoria); if ($categoria !== NULL && $categoria != 'todas') { if (!$model_categorias->load_by_seo($categoria)) { Request::redirect('/tops'); } else { $categoria_id = $model_categorias->id; $categoria = $model_categorias->seo; } } else { $categoria = 'todas'; $categoria_id = NULL; } // Seteo la categoria actual. $portada->assign('categoria', $categoria); // Obtengo el período. $periodo = (int) $periodo; // Verifico por un válido. if ($periodo != 0 && $periodo != 1 && $periodo != 2 && $periodo != 3 && $periodo != 4) { Request::redirect('/tops'); } $portada->assign('periodo', $periodo); // Cargo modelo de usuarios. $model_usuario = new Model_Usuario(); $portada->assign('puntos', $model_usuario->top_puntos($categoria_id, $periodo)); $portada->assign('seguidores', $model_usuario->top_seguidores($periodo)); // Asignamos la vista a la plantilla base. $this->template->assign('contenido', $portada->parse()); }
/** * * @return array */ protected function _getTreeCategorias() { $modelCategoria = new Model_Categoria(); return $modelCategoria->listTreeCategorias(); }
/** * Post con las mismas etiquetas que el selecionado. * @param int $post ID del post a mostrar relacionados. * @param int $pagina Número de página a mostrar. */ public function action_relacionados($post, $pagina) { // Transformamos a entero. $post = (int) $post; // Cargamos el post. $model_post = new Model_Post($post); // Verificamos existencia. if (!$model_post->existe()) { Request::redirect('/buscador/q/'); } // Cargamos la vista. $vista = View::factory('buscador/index'); // Formato de la página. $pagina = (int) $pagina > 0 ? (int) $pagina : 1; // Cantidad de elementos por pagina. $model_configuracion = new Model_Configuracion(); $cantidad_por_pagina = $model_configuracion->get('elementos_pagina', 20); // Realizamos la busqueda. list($listado, $cantidad) = $model_post->buscar_relacionados($pagina, $cantidad_por_pagina); // Verifivo que la página seleccionada sea válida. if (count($listado) == 0 && $pagina != 1) { Request::redirect('/buscador/relacionados/' . $post); } // Paginación. $paginador = new Paginator($cantidad, $cantidad_por_pagina); $vista->assign('paginacion', $paginador->get_view($pagina, "/buscador/relacionados/{$post}/%s/")); unset($paginador); $vista->assign('total', $cantidad); // Procesamos listado de post. foreach ($listado as $k => $v) { $a = $v->as_array(); $a['usuario'] = $v->usuario()->as_array(); $a['puntos'] = $v->puntos(); $a['comentarios'] = $v->cantidad_comentarios(); $a['categoria'] = $v->categoria()->as_array(); $listado[$k] = $a; } $vista->assign('resultados', $listado); unset($listado); $vista->assign('q', ''); // Vista de relacionado. $view_relacionado = View::factory('buscador/relacionado'); $view_relacionado->assign('post', $model_post->as_array()); $vista->assign('relacionado', $view_relacionado->parse()); unset($view_relacionado); // Listado de categorias. $mc = new Model_Categoria(); $vista->assign('categorias', $mc->lista()); unset($mc); $vista->assign('categoria', 'todos'); $vista->assign('usuario', ''); // Menu. $this->template->assign('master_bar', parent::base_menu()); $this->template->assign('top_bar', Controller_Home::submenu('buscador')); // Asignamos la vista. $this->template->assign('contenido', $vista->parse()); }
/** * Agregamos una nueva foto. */ public function action_nueva() { // Verificamos usuario conectado. if (!Usuario::is_login()) { $_SESSION['flash_error'] = 'Debes loguearte para poder agregar fotos.'; Request::redirect('/usuario/login'); } // Verifico los permisos para crear foto. if (!Usuario::permiso(Model_Usuario_Rango::PERMISO_FOTO_CREAR)) { $_SESSION['flash_error'] = 'No tienes permisos para crear fotos.'; Request::redirect('/foto/'); } // Asignamos el título. $this->template->assign('title', 'Nueva foto'); // Cargamos la vista. $view = View::factory('foto/nueva'); // Cargo el listado de categorias. $model_categorias = new Model_Categoria(); $categorias = $model_categorias->lista(); $view->assign('categorias', $categorias); // Elementos por defecto. foreach (array('titulo', 'url', 'descripcion', 'comentarios', 'visitantes', 'categoria', 'error_titulo', 'error_url', 'error_descripcion', 'error_categoria') as $k) { $view->assign($k, ''); } // Menu. $this->template->assign('master_bar', parent::base_menu('fotos')); $this->template->assign('top_bar', $this->submenu('nuevo')); if (Request::method() == 'POST') { $error = FALSE; // Obtenemos los datos y seteamos valores. foreach (array('titulo', 'url', 'descripcion', 'categoria') as $k) { ${$k} = isset($_POST[$k]) ? $_POST[$k] : ''; $view->assign($k, ${$k}); } // Obtenemos los checkbox. $visitantes = isset($_POST['visitantes']) ? $_POST['visitantes'] == 1 : FALSE; $view->assign('visitantes', $visitantes); $comentarios = isset($_POST['comentarios']) ? $_POST['comentarios'] == 1 : FALSE; $view->assign('comentarios', $comentarios); // Verificamos el titulo. if (!preg_match('/^[a-zA-Z0-9áéíóú\\-,\\.:\\s]{6,60}$/D', $titulo)) { $view->assign('error_titulo', 'El formato del título no es correcto.'); $error = TRUE; } // Verificamos quitando BBCODE. $descripcion_clean = preg_replace('/\\[([^\\[\\]]+)\\]/', '', $descripcion); // Verificamos la descripcion. if (!isset($descripcion_clean[20]) || isset($descripcion[600])) { $view->assign('error_descripcion', 'La descripción debe tener entre 20 y 600 caractéres.'); $error = TRUE; } unset($contenido_clean); // Verificamos la URL. if (!preg_match('/^(http|https):\\/\\/([A-Z0-9][A-Z0-9_-]*(?:\\.[A-Z0-9][A-Z0-9_-]*)+):?(\\d+)?\\/?/Di', $url)) { // Verifico IMG. if (!isset($_FILES['img']) || $_FILES['img']['error'] == UPLOAD_ERR_NO_FILE) { $view->assign('error_url', 'La dirección de la URL no es válida.'); $error = TRUE; } } // Verifico la categoria. if (!$model_categorias->existe_seo($categoria)) { $view->assign('error_categoria', 'La categoria seleccionada es incorrecta.'); $error = TRUE; } // Proceso de verificación de método de carga de la imagen. if (!$error) { if (!isset($_FILES['img']) || $_FILES['img']['error'] == UPLOAD_ERR_NO_FILE) { $upload = new Upload_Imagen(); try { $rst = $upload->from_url($url); if ($rst) { $url = $rst; } else { $view->assign('error_url', 'Se produjo un error al cargar la imagen.'); $error = TRUE; } } catch (Exception $e) { $view->assign('error_url', $e->getMessage()); $error = TRUE; } } else { // Verifico la imagen. $upload = new Upload_Imagen(); try { $rst = $upload->procesar_imagen('img'); if ($rst) { $url = $rst; } else { $view->assign('error_url', 'Se produjo un error al cargar la imagen.'); $error = TRUE; } } catch (Exception $e) { $view->assign('error_url', $e->getMessage()); $error = TRUE; } } } // Procedemos a crear la imagen. if (!$error) { // Evitamos XSS. $descripcion = htmlentities($descripcion, ENT_NOQUOTES, 'UTF-8'); // Formateamos los campos. $titulo = trim(preg_replace('/\\s+/', ' ', $titulo)); // Obtengo el ID de la categoria. $model_categorias->load_by_seo($categoria); //TODO: implementar en revisión. // $estado = Usuario::permiso(Model_Usuario_Rango::PERMISO_USUARIO_REVISAR_CONTENIDO) ? Model_Foto::ESTADO_OCULTA : Model_Foto::ESTADO_ACTIVA; $estado = Model_Foto::ESTADO_ACTIVA; $model_foto = new Model_Foto(); $foto_id = $model_foto->crear(Usuario::$usuario_id, $titulo, $descripcion, $url, $model_categorias->id, $visitantes, $comentarios, $estado); if ($foto_id > 0) { // Envio el suceso. $model_suceso = new Model_Suceso(); $model_suceso->crear(Usuario::$usuario_id, 'foto_nueva', FALSE, $model_foto->id); // Informo el resultado. $_SESSION['flash_success'] = 'Foto creada correctamente.'; Request::redirect('/foto/ver/' . $model_foto->id); } else { $view->assign('error', 'Se produjo un error cuando se creaba la foto. Reintente.'); } } } // Asignamos la vista. $this->template->assign('contenido', $view->parse()); }
/** * Editamos una categoria existente. * @param int $id ID de la categoria a editar. */ public function action_editar_categoria($id) { // Cargamos el modelo de la categoria. $model_categoria = new Model_Categoria((int) $id); // Verifico que exista. if (!$model_categoria->existe()) { $_SESSION['flash_error'] = 'No exista la categoria que quiere editar.'; Request::redirect('/admin/contenido/categorias'); } // Cargamos la vista. $vista = View::factory('admin/contenido/editar_categoria'); // Cargamos el listado de imagens para rangos disponibles. $imagenes_categorias = scandir(VIEW_PATH . THEME . DS . 'assets' . DS . 'img' . DS . 'categoria' . DS); unset($imagenes_categorias[1], $imagenes_categorias[0]); // Quitamos . y .. $vista->assign('imagenes_categorias', $imagenes_categorias); // Valores por defecto y errores. $vista->assign('nombre', $model_categoria->nombre); $vista->assign('error_nombre', FALSE); $vista->assign('imagen', $model_categoria->imagen); $vista->assign('error_imagen', FALSE); if (Request::method() == 'POST') { // Seteamos sin error. $error = FALSE; // Obtenemos los campos. $nombre = isset($_POST['nombre']) ? preg_replace('/\\s+/', ' ', trim($_POST['nombre'])) : NULL; $imagen = isset($_POST['imagen']) ? $_POST['imagen'] : NULL; // Valores para cambios. $vista->assign('nombre', $nombre); $vista->assign('imagen', $imagen); // Verificamos el nombre. if (!preg_match('/^[a-z0-9\\sáéíóúñ]{3,50}$/iD', $nombre)) { $error = TRUE; $vista->assign('error_nombre', 'El nombre de la categoria deben ser entre 5 y 32 caractéres alphanuméricos.'); } // Verificamos la imagen. if (!in_array($imagen, $imagenes_categorias)) { $error = TRUE; $vista->assign('error_imagen', 'No ha seleccionado una imagen válida.'); } if (!$error) { // Verifico no exista campo con ese nombre. if ($model_categoria->existe_seo($model_categoria->make_seo($nombre), TRUE)) { $error = TRUE; $vista->assign('error_nombre', 'Ya existe una categoria con ese nombre seo.'); } } if (!$error) { // Actualizo el imagen. if ($model_categoria->imagen != $imagen) { $model_categoria->cambiar_imagen($imagen); } // Actualizo el nombre. if ($model_categoria->nombre != $nombre) { $model_categoria->cambiar_nombre($nombre); } // Informamos suceso. $vista->assign('success', 'Información actualizada correctamente'); } } // 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_categorias')); // Asignamos la vista a la plantilla base. $this->template->assign('contenido', $admin_template->parse()); }
/** * Creamos un nuevo post. */ public function action_nuevo() { // Verificamos usuario logueado. if (!Usuario::is_login()) { $_SESSION['flash_error'] = 'Debes iniciar sessión para poder crear posts.'; Request::redirect('/usuario/login'); } // Verifico los permisos. if (!Usuario::permiso(Model_Usuario_Rango::PERMISO_POST_CREAR)) { $_SESSION['flash_error'] = 'No tienes permisos para poder crear posts.'; Request::redirect('/'); } // Asignamos el título. $this->template->assign('title', 'Nuevo post'); // Cargamos la vista. $view = View::factory('post/nuevo'); // Seteo permisos especiales. $view->assign('permisos_especiales', Usuario::permiso(Model_Usuario_Rango::PERMISO_POST_FIJAR_PROMOVER)); // Elementos por defecto. foreach (array('titulo', 'contenido', 'categoria', 'privado', 'patrocinado', 'sticky', 'comentar', 'tags', 'error_titulo', 'error_contenido', 'error_categoria', 'error_tags') as $k) { $view->assign($k, ''); } // Listado de categorias. $model_categoria = new Model_Categoria(); $view->assign('categorias', $model_categoria->lista()); // Menu. $this->template->assign('master_bar', parent::base_menu('posts')); $this->template->assign('top_bar', Controller_Home::submenu('nuevo')); // Asignamos la vista. $this->template->assign('contenido', $view->parse()); if (Request::method() == 'POST') { $error = FALSE; // Obtenemos los datos y seteamos valores. foreach (array('titulo', 'contenido', 'categoria', 'tags') as $k) { ${$k} = isset($_POST[$k]) ? $_POST[$k] : ''; $view->assign($k, ${$k}); } // Obtenemos los checkbox. foreach (array('privado', 'patrocinado', 'sticky', 'comentar') as $k) { ${$k} = isset($_POST[$k]) ? $_POST[$k] == 1 : FALSE; $view->assign($k, ${$k}); } // Verificamos el titulo. if (!preg_match('/^[a-zA-Z0-9áéíóú\\-,\\.:\\s]{6,60}$/D', $titulo)) { $view->assign('error_titulo', 'El formato del título no es correcto.'); $error = TRUE; } // Verificamos el contenido. $contenido_clean = preg_replace('/\\[.*\\]/', '', $contenido); if (!isset($contenido_clean[20]) || isset($contenido[5000])) { $view->assign('error_contenido', 'El contenido debe tener entre 20 y 5000 caractéres.'); $error = TRUE; } unset($contenido_clean); // Verificamos la categoria. $model_categoria = new Model_Categoria(); if (!$model_categoria->existe_seo($categoria)) { $view->assign('error_categoria', 'La categoría seleccionada es incorrecta.'); $error = TRUE; } else { $model_categoria->load_by_seo($categoria); $categoria_id = $model_categoria->id; } unset($model_categoria); // Quito espacios adicionales a las etiquetas. $tags = preg_replace('/\\s+/', ' ', trim($tags)); // Verificamos las etiquetas. if (!preg_match('/^[a-zA-Z0-9áéíóúñÑÁÉÍÓÚ, ]{0,}$/D', $tags)) { $view->assign('error_tags', 'Las etiquetas ingresadas con son alphanuméricas.'); $error = TRUE; } if (!$error) { // Obtengo el listado de etiquetas. $tags = explode(',', $tags); foreach ($tags as $k => $v) { $tags[$k] = trim($v); if ($tags[$k] == '') { unset($tags[$k]); } } // Verifico la cantidad. if (count($tags) < 3) { $view->assign('error_tags', 'Debes insertar un mínimo de 3 etiquetas.'); $error = TRUE; } } // Procedemos a crear el post. if (!$error) { // Evitamos XSS. $contenido = htmlentities($contenido, ENT_NOQUOTES, 'UTF-8'); // Formateamos los campos. $titulo = trim(preg_replace('/\\s+/', ' ', $titulo)); // Verifico si es borrador. $borrador = isset($_POST['submit']) ? $_POST['submit'] == 'borrador' : FALSE; // Obtengo el estado a aplicar. if ($borrador) { $estado = Model_Post::ESTADO_BORRADOR; } else { if (Usuario::permiso(Model_Usuario_Rango::PERMISO_USUARIO_REVISAR_CONTENIDO)) { $estado = Model_Post::ESTADO_PENDIENTE; } else { $estado = Model_Post::ESTADO_ACTIVO; } } unset($borrador); // Verifico parámetros especiales. if (!Usuario::permiso(Model_Usuario_Rango::PERMISO_POST_FIJAR_PROMOVER)) { $patrocinado = FALSE; $sticky = FALSE; } $model_post = new Model_Post(); $post_id = $model_post->crear(Usuario::$usuario_id, $titulo, $contenido, $categoria_id, $privado, $patrocinado, $sticky, $comentar, $estado); if ($post_id > 0) { // Cargo el post. $model_post = new Model_Post($post_id); // Agrego las etiquetas. $model_post->agregar_etiqueta($tags); // Agrego el suceso. $model_suceso = new Model_Suceso(); $model_suceso->crear(Usuario::$usuario_id, 'post_nuevo', FALSE, $post_id); // Informo y voy a post. $_SESSION['flash_success'] = 'El post fue creado correctamente.'; Request::redirect('/post/index/' . $post_id); } else { $view->assign('error', 'Se produjo un error cuando se creaba el post. Reintente.'); } } } // Menu. $this->template->assign('master_bar', parent::base_menu('posts')); $this->template->assign('top_bar', Controller_Home::submenu('nuevo')); // Asignamos la vista. $this->template->assign('contenido', $view->parse()); }