/** * Suceso producido cuando se publica un post. * @param array $suceso Datos del suceso. * @return array */ protected static function suceso_post_publicar($suceso) { // Verifico si fui yo. if ($suceso['objeto_id1'] == Usuario::$usuario_id) { return NULL; } // Cargo datos del post. $model_post = new Model_Post((int) $suceso['objeto_id']); // Cargo datos de quien publica el post. $model_usuario = new Model_Usuario((int) $suceso['objeto_id1']); return array('post' => $model_post->as_array(), 'usuario' => $model_post->usuario()->as_array(), 'publica' => $model_usuario->as_array()); }
/** * Damos puntos a un post. * @param int $post ID del post al cual darle puntos. * @param int $cantidad Cantidad de puntos. Número entre 1 y 10. */ public function action_puntuar($post, $cantidad) { // Verificamos usuario logueado. if (!Usuario::is_login()) { $_SESSION['flash_error'] = 'Debes iniciar sessión para poder puntuar posts.'; Request::redirect('/usuario/login'); } // Verifico permisos. if (!Usuario::permiso(Model_Usuario_Rango::PERMISO_POST_PUNTUAR)) { $_SESSION['flash_error'] = 'No tienes permisos para puntuar posts.'; Request::redirect('/'); } // Convertimos el post a ID. $post = (int) $post; // Validamos la cantidad. $cantidad = (int) $cantidad; if ($cantidad < 1 || $cantidad > 10) { $_SESSION['flash_error'] = 'La petición que has realizado es inválida.'; Request::redirect('/'); } // Cargamos el post. $model_post = new Model_Post($post); // Verificamos exista. if (!is_array($model_post->as_array())) { $_SESSION['flash_error'] = 'El post que desea puntuar no se encuentra disponible.'; Request::redirect('/'); } // Verifico el estado del post. if ($model_post->estado !== Model_Post::ESTADO_ACTIVO) { $_SESSION['flash_error'] = 'El post que desea puntuar no se encuentra disponible.'; Request::redirect('/post/index/' . $post); } // Verifico el autor. if ($model_post->usuario_id === Usuario::$usuario_id) { $_SESSION['flash_error'] = 'El post que desea puntuar no se encuentra disponible.'; Request::redirect('/post/index/' . $post); } // Verificamos si ya dio puntos. if ($model_post->dio_puntos(Usuario::$usuario_id)) { $_SESSION['flash_error'] = 'El post que desea puntuar ya ha sido puntuado por usted.'; Request::redirect('/post/index/' . $post); } // Verificamos la cantidad de puntos. if (Usuario::usuario()->puntos_disponibles < $cantidad) { $_SESSION['flash_error'] = 'El post que desea puntuar ya ha sido puntuado por usted.'; Request::redirect('/post/index/' . $post); } // Damos los puntos. $model_post->dar_puntos(Usuario::$usuario_id, $cantidad); // Enviamos el suceso. $model_suceso = new Model_Suceso(); if (Usuario::$usuario_id != $model_post->usuario_id) { $model_suceso->crear($model_post->usuario_id, 'post_puntuar', TRUE, $post, Usuario::$usuario_id, $cantidad); $model_suceso->crear(Usuario::$usuario_id, 'post_puntuar', FALSE, $post, Usuario::$usuario_id, $cantidad); } else { $model_suceso->crear($model_post->usuario_id, 'post_puntuar', FALSE, $post, Usuario::$usuario_id, $cantidad); } // Informamos el resultado. $_SESSION['flash_success'] = 'Has puntuado el post de manera correcta.'; Request::redirect('/post/index/' . $post); }
/** * 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()); }
/** * Borramos un post. * @param int $post ID del post a modificar el atributo. */ public function action_borrar_post($post) { // Verifico permisos. if (!Usuario::permiso(Model_Usuario_Rango::PERMISO_POST_VER_DESAPROBADO)) { $_SESSION['flash_error'] = 'No tienes permiso para acceder a esa sección.'; Request::redirect('/'); } // Convertimos el post a ID. $post = (int) $post; // Cargamos el post. $model_post = new Model_Post($post); // Verificamos exista. if (!is_array($model_post->as_array())) { $_SESSION['flash_error'] = 'El post que deseas eliminar no se encuentra disponible.'; Request::redirect('/moderar/desaprobado/posts'); } // Verifico el usuario y sus permisos. if (Usuario::$usuario_id !== $model_post->usuario_id || !Usuario::permiso(Model_Usuario_Rango::PERMISO_ELIMINAR_POSTS)) { $_SESSION['flash_error'] = 'El post que deseas eliminar no se encuentra disponible.'; Request::redirect('/moderar/desaprobado/posts'); } // Actualizo el estado. $model_post->actualizar_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'] = 'El post fue eliminado correctamente.'; Request::redirect('/moderar/desaprobado/posts'); }