/** * 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()); }
/** * Realizo el cambio de estados del post. * @param int $post ID del post al cual cambiarle el estado. * @param int $estado Estado que se debe colocar. */ public function action_cambiar_estado_post($post, $estado) { $post = (int) $post; // Cargo el post. $model_post = new Model_Post($post); // Verifico que exista. if (!$model_post->existe()) { $_SESSION['flash_error'] = 'El post al cual le quiere cambiar el estado no se encuentra disponible.'; Request::redirect('/admin/contenido/posts'); } // Obtengo el estado. switch ($model_post->estado) { case 0: // Activo if ($estado == Model_Post::ESTADO_BORRADO) { // Borramos. // Actualizo el estado. $model_post->actualizar_estado(Model_Post::ESTADO_BORRADO); // Envio el suceso. $model_suceso = new Model_Suceso(); if (Usuario::$usuario_id != $model_post->usuario_id) { $model_suceso->crear($model_post->usuario_id, 'post_borrar', TRUE, $model_post->id, Usuario::$usuario_id); $model_suceso->crear(Usuario::$usuario_id, 'post_borrar', FALSE, $model_post->id, Usuario::$usuario_id); } else { $model_suceso->crear($model_post->usuario_id, 'post_borrar', FALSE, $model_post->id, Usuario::$usuario_id); } // Informo el resultado $_SESSION['flash_success'] = 'El post se a eliminado correctamente.'; Request::redirect('/admin/contenido/posts'); } elseif ($estado == Model_Post::ESTADO_OCULTO) { // Ocultamos. // Actualizo el estado. $model_post->actualizar_estado(Model_Post::ESTADO_OCULTO); // Envio el suceso. $model_suceso = new Model_Suceso(); if (Usuario::$usuario_id != $model_post->usuario_id) { $model_suceso->crear($model_post->usuario_id, 'post_ocultar', TRUE, $model_post->id, Usuario::$usuario_id, 0); $model_suceso->crear(Usuario::$usuario_id, 'post_ocultar', FALSE, $model_post->id, Usuario::$usuario_id, 0); } else { $model_suceso->crear($model_post->usuario_id, 'post_ocultar', FALSE, $model_post->id, Usuario::$usuario_id, 0); } // Informo el resultado $_SESSION['flash_success'] = 'Actualización correcta.'; Request::redirect('/admin/contenido/posts'); } elseif ($estado == 5) { // Rechazamos. // Actualizo el estado. $model_post->actualizar_estado(5); // Envio el suceso. $model_suceso = new Model_Suceso(); if (Usuario::$usuario_id != $model_post->usuario_id) { $model_suceso->crear($model_post->usuario_id, 'post_aprobar', TRUE, $model_post->id, Usuario::$usuario_id, 0); $model_suceso->crear(Usuario::$usuario_id, 'post_aprobar', FALSE, $model_post->id, Usuario::$usuario_id, 0); } else { $model_suceso->crear($model_post->usuario_id, 'post_aprobar', FALSE, $model_post->id, Usuario::$usuario_id, 0); } // Informo el resultado $_SESSION['flash_success'] = 'Actualización correcta.'; Request::redirect('/admin/contenido/posts'); } elseif ($estado == 6) { // Enviamos a la papelera. // Actualizo el estado. $model_post->actualizar_estado(6); // Envio el suceso. $model_suceso = new Model_Suceso(); if (Usuario::$usuario_id != $model_post->usuario_id) { $model_suceso->crear($model_post->usuario_id, 'post_papelera', TRUE, $model_post->id, Usuario::$usuario_id); $model_suceso->crear(Usuario::$usuario_id, 'post_papelera', FALSE, $model_post->id, Usuario::$usuario_id); } else { $model_suceso->crear($model_post->usuario_id, 'post_papelera', FALSE, $model_post->id, Usuario::$usuario_id); } // Informo el resultado $_SESSION['flash_success'] = 'Actualización correcta.'; Request::redirect('/admin/contenido/posts'); } else { // Acción no permitida. $_SESSION['flash_error'] = 'No puedes realizar esa acción.'; Request::redirect('/admin/contenido/posts'); } break; case 1: // Borrador if ($estado == 2) { // Borramos. // Actualizo el estado. $model_post->actualizar_estado(2); // Envio el suceso. $model_suceso = new Model_Suceso(); if (Usuario::$usuario_id != $model_post->usuario_id) { $model_suceso->crear($model_post->usuario_id, 'post_borrar', TRUE, $model_post->id, Usuario::$usuario_id); $model_suceso->crear(Usuario::$usuario_id, 'post_borrar', FALSE, $model_post->id, Usuario::$usuario_id); } else { $model_suceso->crear($model_post->usuario_id, 'post_borrar', FALSE, $model_post->id, Usuario::$usuario_id); } // Informo el resultado $_SESSION['flash_success'] = 'Actualización correcta.'; Request::redirect('/admin/contenido/posts'); } else { // Acción no permitida. $_SESSION['flash_error'] = 'No puedes realizar esa acción.'; Request::redirect('/admin/contenido/posts'); } break; case 2: // Borrado // No hay acciones posibles a este punto. $_SESSION['flash_error'] = 'No puedes realizar esa acción.'; Request::redirect('/admin/contenido/posts'); break; case 3: // Pendiente if ($estado == 0) { // Aprobamos. // Actualizo el estado. $model_post->actualizar_estado(0); // Envio el suceso. $model_suceso = new Model_Suceso(); if (Usuario::$usuario_id != $model_post->usuario_id) { $model_suceso->crear($model_post->usuario_id, 'post_aprobar', TRUE, $model_post->id, Usuario::$usuario_id, 1); $model_suceso->crear(Usuario::$usuario_id, 'post_aprobar', FALSE, $model_post->id, Usuario::$usuario_id, 1); } else { $model_suceso->crear($model_post->usuario_id, 'post_aprobar', FALSE, $model_post->id, Usuario::$usuario_id, 1); } // Informo el resultado $_SESSION['flash_success'] = 'Actualización correcta.'; Request::redirect('/admin/contenido/posts'); } elseif ($estado == 5) { // Rechazamos. // Actualizo el estado. $model_post->actualizar_estado(5); // Envio el suceso. $model_suceso = new Model_Suceso(); if (Usuario::$usuario_id != $model_post->usuario_id) { $model_suceso->crear($model_post->usuario_id, 'post_aprobar', TRUE, $model_post->id, Usuario::$usuario_id, 0); $model_suceso->crear(Usuario::$usuario_id, 'post_aprobar', FALSE, $model_post->id, Usuario::$usuario_id, 0); } else { $model_suceso->crear($model_post->usuario_id, 'post_aprobar', FALSE, $model_post->id, Usuario::$usuario_id, 0); } // Informo el resultado $_SESSION['flash_success'] = 'Actualización correcta.'; Request::redirect('/admin/contenido/posts'); } elseif ($estado == 2) { // Borramos. // Actualizo el estado. $model_post->actualizar_estado(2); // Envio el suceso. $model_suceso = new Model_Suceso(); if (Usuario::$usuario_id != $model_post->usuario_id) { $model_suceso->crear($model_post->usuario_id, 'post_borrar', TRUE, $model_post->id, Usuario::$usuario_id); $model_suceso->crear(Usuario::$usuario_id, 'post_borrar', FALSE, $model_post->id, Usuario::$usuario_id); } else { $model_suceso->crear($model_post->usuario_id, 'post_borrar', FALSE, $model_post->id, Usuario::$usuario_id); } // Informo el resultado $_SESSION['flash_success'] = 'Actualización correcta.'; Request::redirect('/admin/contenido/posts'); } else { // Acción no permitida. $_SESSION['flash_error'] = 'No puedes realizar esa acción.'; Request::redirect('/admin/contenido/posts'); } break; case 4: // Oculto if ($estado == 0) { // Mostrar. // Actualizo el estado. $model_post->actualizar_estado(0); // Envio el suceso. $model_suceso = new Model_Suceso(); if (Usuario::$usuario_id != $model_post->usuario_id) { $model_suceso->crear($model_post->usuario_id, 'post_ocultar', TRUE, $model_post->id, Usuario::$usuario_id, 1); $model_suceso->crear(Usuario::$usuario_id, 'post_ocultar', FALSE, $model_post->id, Usuario::$usuario_id, 1); } else { $model_suceso->crear($model_post->usuario_id, 'post_ocultar', FALSE, $model_post->id, Usuario::$usuario_id, 1); } // Informo el resultado $_SESSION['flash_success'] = 'Actualización correcta.'; Request::redirect('/admin/contenido/posts'); } elseif ($estado == 2) { // Borramos. // Actualizo el estado. $model_post->actualizar_estado(2); // Envio el suceso. $model_suceso = new Model_Suceso(); if (Usuario::$usuario_id != $model_post->usuario_id) { $model_suceso->crear($model_post->usuario_id, 'post_borrar', TRUE, $model_post->id, Usuario::$usuario_id); $model_suceso->crear(Usuario::$usuario_id, 'post_borrar', FALSE, $model_post->id, Usuario::$usuario_id); } else { $model_suceso->crear($model_post->usuario_id, 'post_borrar', FALSE, $model_post->id, Usuario::$usuario_id); } // Informo el resultado $_SESSION['flash_success'] = 'Actualización correcta.'; Request::redirect('/admin/contenido/posts'); } else { // Acción no permitida. $_SESSION['flash_error'] = 'No puedes realizar esa acción.'; Request::redirect('/admin/contenido/posts'); } break; case 5: // Rechazado if ($estado == 0) { // Aprobamos. // Actualizo el estado. $model_post->actualizar_estado(0); // Envio el suceso. $model_suceso = new Model_Suceso(); if (Usuario::$usuario_id != $model_post->usuario_id) { $model_suceso->crear($model_post->usuario_id, 'post_aprobar', TRUE, $model_post->id, Usuario::$usuario_id, 1); $model_suceso->crear(Usuario::$usuario_id, 'post_aprobar', FALSE, $model_post->id, Usuario::$usuario_id, 1); } else { $model_suceso->crear($model_post->usuario_id, 'post_aprobar', FALSE, $model_post->id, Usuario::$usuario_id, 1); } // Informo el resultado $_SESSION['flash_success'] = 'Actualización correcta.'; Request::redirect('/admin/contenido/posts'); } elseif ($estado == 2) { // Borramos. // Actualizo el estado. $model_post->actualizar_estado(2); // Envio el suceso. $model_suceso = new Model_Suceso(); if (Usuario::$usuario_id != $model_post->usuario_id) { $model_suceso->crear($model_post->usuario_id, 'post_borrar', TRUE, $model_post->id, Usuario::$usuario_id); $model_suceso->crear(Usuario::$usuario_id, 'post_borrar', FALSE, $model_post->id, Usuario::$usuario_id); } else { $model_suceso->crear($model_post->usuario_id, 'post_borrar', FALSE, $model_post->id, Usuario::$usuario_id); } // Informo el resultado $_SESSION['flash_success'] = 'Actualización correcta.'; Request::redirect('/admin/contenido/posts'); } else { // Acción no permitida. $_SESSION['flash_error'] = 'No puedes realizar esa acción.'; Request::redirect('/admin/contenido/posts'); } break; case 6: // Papelera if ($estado == 0) { // Restauramos. // Actualizo el estado. $model_post->actualizar_estado(0); // Envio el suceso. $model_suceso = new Model_Suceso(); if (Usuario::$usuario_id != $model_post->usuario_id) { $model_suceso->crear($model_post->usuario_id, 'post_restaurar', TRUE, $model_post->id, Usuario::$usuario_id); $model_suceso->crear(Usuario::$usuario_id, 'post_restaurar', FALSE, $model_post->id, Usuario::$usuario_id); } else { $model_suceso->crear($model_post->usuario_id, 'post_restaurar', FALSE, $model_post->id, Usuario::$usuario_id); } // Informo el resultado $_SESSION['flash_success'] = 'Actualización correcta.'; Request::redirect('/admin/contenido/posts'); } elseif ($estado == 2) { // Borramos. // Actualizo el estado. $model_post->actualizar_estado(2); // Envio el suceso. $model_suceso = new Model_Suceso(); if (Usuario::$usuario_id != $model_post->usuario_id) { $model_suceso->crear($model_post->usuario_id, 'post_borrar', TRUE, $model_post->id, Usuario::$usuario_id); $model_suceso->crear(Usuario::$usuario_id, 'post_borrar', FALSE, $model_post->id, Usuario::$usuario_id); } else { $model_suceso->crear($model_post->usuario_id, 'post_borrar', FALSE, $model_post->id, Usuario::$usuario_id); } // Informo el resultado $_SESSION['flash_success'] = 'Actualización correcta.'; Request::redirect('/admin/contenido/posts'); } else { // Acción no permitida. $_SESSION['flash_error'] = 'No puedes realizar esa acción.'; Request::redirect('/admin/contenido/posts'); } break; } }
/** * Borramos un post. * @param int $post ID del post a borrar. */ public function action_borrar_post($post) { // Verifico permisos. if (!Usuario::permiso(Model_Usuario_Rango::PERMISO_POST_VER_DENUNCIAS)) { $_SESSION['flash_error'] = 'No tienes permiso para acceder a esa sección.'; Request::redirect('/'); } // Cargamos el post. $post = (int) $post; $model_post = new Model_Post($post); // Verifico existencia del post. if (!$model_post->existe()) { $_SESSION['flash_error'] = 'El post que deseas borrar no se encuentra disponible.'; Request::redirect('/moderar/denuncias/posts'); } // Verifico los permisos. if (Usuario::$usuario_id !== $model_post->usuario_id && !Usuario::permiso(Model_Usuario_Rango::PERMISO_ELIMINAR_POSTS)) { $_SESSION['flash_error'] = 'No tienes permisos para realizar esa acción.'; Request::redirect('/moderar/denuncias/posts'); } // Verifico el estado. if ($model_post->estado === Model_Post::ESTADO_BORRADO) { $_SESSION['flash_error'] = 'El post que deseas borrar no se encuentra disponible.'; Request::redirect('/moderar/denuncias/posts'); } // Actualizo el post. $model_post->actualizar_campo('estado', Model_Post::ESTADO_BORRADO); // Enviamos el suceso. $model_suceso = new Model_Suceso(); if (Usuario::$usuario_id != $model_post->usuario_id) { $model_suceso->crear($model_post->usuario_id, 'post_borrar', TRUE, $post, Usuario::$usuario_id); $model_suceso->crear(Usuario::$usuario_id, 'post_borrar', FALSE, $post, Usuario::$usuario_id); } else { $model_suceso->crear($model_post->usuario_id, 'post_borrar', FALSE, $post, Usuario::$usuario_id); } // Informamos el resultado. $_SESSION['flash_success'] = 'Post eliminado correctamente.'; Request::redirect('/moderar/denuncias/posts'); }
/** * Creamos un nuevo post. * @param int $post ID del post a editar. */ public function action_editar($post) { // Verificamos usuario logueado. if (!Usuario::is_login()) { $_SESSION['flash_error'] = 'Debes iniciar sessión para poder editar posts.'; Request::redirect('/usuario/login'); } // Limpio la entrada $post = (int) $post; // Cargo el post. $model_post = new Model_Post($post); // Verifico exista. if (!$model_post->existe()) { $_SESSION['flash_error'] = 'El post especificado no se encuentra disponible.'; Request::redirect('/'); } // No podemos editar posts borrados. if ($model_post->estado == Model_Post::ESTADO_BORRADO) { $_SESSION['flash_error'] = 'El post especificado no se encuentra disponible.'; Request::redirect('/post/index/' . $post); } // Verifico el usuario y el permiso de edición para terceros. if (Usuario::$usuario_id !== $model_post->usuario_id && !Usuario::permiso(Model_Usuario_Rango::PERMISO_POST_EDITAR)) { $_SESSION['flash_error'] = 'No tienes los permisos necesarios para realizar esa edición.'; Request::redirect('/post/index/' . $post); } // Asignamos el título. $this->template->assign('title', 'Editar post'); // Cargamos la vista. $view = View::factory('post/editar'); $view->assign('post', $post); // Seteo permisos especiales. $view->assign('permisos_especiales', Usuario::permiso(Model_Usuario_Rango::PERMISO_POST_FIJAR_PROMOVER)); // Cargamos valores por defecto. $view->assign('titulo', $model_post->titulo); $view->assign('contenido', $model_post->contenido); $view->assign('categoria', $model_post->categoria()->seo); $view->assign('privado', $model_post->privado); $view->assign('patrocinado', $model_post->sponsored); $view->assign('sticky', $model_post->sticky); $view->assign('comentar', $model_post->comentar); $view->assign('tags', implode(', ', $model_post->etiquetas())); // Elementos por defecto. foreach (array('error_titulo', 'error_contenido', 'error_categoria', 'error_tags') as $k) { $view->assign($k, FALSE); } // 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('index')); // 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; } // 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)); // Obtengo el listado de etiquetas. $tags = explode(',', $tags); foreach ($tags as $k => $v) { $tags[$k] = trim($v); if ($tags[$k] == '') { unset($tags[$k]); } } // Obtengo listado a agregar, quitar y mantener. $delta_etiquetas = array_intersect($model_post->etiquetas(), $tags); $etiquetas_eliminadas = array_diff($model_post->etiquetas(), $delta_etiquetas); $etiquetas_nuevos = array_diff($tags, $delta_etiquetas); unset($tags, $delta_etiquetas); $datos = array('titulo' => $titulo, 'contenido' => $contenido, 'categoria_id' => $categoria_id, 'privado' => $privado, 'sponsored' => $patrocinado, 'sticky' => $sticky, 'comentar' => $comentar); // Verifico parámetros especiales. if (!Usuario::permiso(Model_Usuario_Rango::PERMISO_POST_FIJAR_PROMOVER)) { unset($datos['sponsored'], $datos['sticky']); } // Actualizo los parámetros. $rst = $model_post->actualizar_campos($datos); // Actualizo las etiquetas. if (is_array($etiquetas_eliminadas) && count($etiquetas_eliminadas) > 0) { $rst = $rst || $model_post->borrar_etiqueta($etiquetas_eliminadas); } if (is_array($etiquetas_nuevos) && count($etiquetas_nuevos) > 0) { $rst = $rst || $model_post->agregar_etiqueta($etiquetas_nuevos); } // Emito suceso para el usuario. if ($rst) { $model_suceso = new Model_Suceso(); if (Usuario::$usuario_id != $model_post->usuario_id) { $model_suceso->crear($model_post->usuario_id, 'post_editado', TRUE, $model_post->id, Usuario::$usuario_id); $model_suceso->crear(Usuario::$usuario_id, 'post_editado', FALSE, $model_post->id, Usuario::$usuario_id); } else { $model_suceso->crear($model_post->usuario_id, 'post_editado', FALSE, $model_post->id, Usuario::$usuario_id); } } // Informo que todo fue correcto. $_SESSION['flash_success'] = 'Actualización del post correcta.'; } } // 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()); }