/** * Información de un post. * @param int $post ID del post a visualizar. */ public function action_index($post) { // 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 al que intentas acceder no está disponible.'; Request::redirect('/'); } // Verifico el estado de post y permisos necesarios para acceder. switch ($model_post->estado) { case Model_Post::ESTADO_BORRADO: $_SESSION['flash_error'] = 'El post al que intentas acceder no existe.'; Request::redirect('/'); break; case Model_Post::ESTADO_PAPELERA: if ($model_post->usuario_id !== Usuario::$usuario_id && !Usuario::permiso(Model_Usuario_Rango::PERMISO_POST_VER_PAPELERA)) { $_SESSION['flash_error'] = 'El post al que intentas acceder no se encuentra disponible.'; Request::redirect('/'); } break; case Model_Post::ESTADO_BORRADOR: if ($model_post->usuario_id !== Usuario::$usuario_id && !Usuario::permiso(Model_Usuario_Rango::PERMISO_SITIO_ADMINISTRAR_CONTENIDO)) { $_SESSION['flash_error'] = 'El post al que intentas acceder no se encuentra disponible.'; Request::redirect('/'); } break; case Model_Post::ESTADO_PENDIENTE: case Model_Post::ESTADO_OCULTO: case Model_Post::ESTADO_RECHAZADO: if ($model_post->usuario_id !== Usuario::$usuario_id && !Usuario::permiso(Model_Usuario_Rango::PERMISO_POST_VER_DESAPROBADO)) { $_SESSION['flash_error'] = 'El post al que intentas acceder no se encuentra disponible.'; Request::redirect('/'); } break; } if ($model_post->as_object()->privado && !Usuario::is_login()) { // Asignamos el título. $this->template->assign('title', 'Post privado'); $view = View::factory('post/privado'); $view->assign('post', $model_post->as_array()); } else { // Asignamos el título. $this->template->assign('title', $model_post->as_object()->titulo); // Cargamos la vista. $view = View::factory('post/index'); // Verifico si debo contabilizar la visita. if (Usuario::$usuario_id != $model_post->as_object()->usuario_id) { $model_post->agregar_vista(); } // Mi id. $view->assign('me', Usuario::$usuario_id); // Verifico si sigo al usuario. if ($model_post->usuario_id !== Usuario::$usuario_id) { $view->assign('sigue_usuario', $model_post->usuario()->es_seguidor(Usuario::$usuario_id)); } else { $view->assign('sigue_usuario', TRUE); } // Información del usuario dueño del post. $u_data = $model_post->usuario()->as_array(); $u_data['seguidores'] = $model_post->usuario()->cantidad_seguidores(); $u_data['posts'] = $model_post->usuario()->cantidad_posts(); $u_data['comentarios'] = $model_post->usuario()->cantidad_comentarios(); $u_data['puntos'] = $model_post->usuario()->cantidad_puntos(); $view->assign('usuario', $u_data); unset($u_data); // Información del post. $pst = $model_post->as_array(); $pst['contenido_raw'] = $pst['contenido']; $pst['contenido'] = Decoda::procesar($pst['contenido']); $pst['seguidores'] = $model_post->cantidad_seguidores(); $pst['puntos'] = $model_post->puntos(); $pst['favoritos'] = $model_post->cantidad_favoritos(); $view->assign('post', $pst); unset($pst); // Verifico las acciones extendidas. $view->assign('modificar_ocultar', Usuario::$usuario_id === $model_post->usuario_id || Usuario::permiso(Model_Usuario_Rango::PERMISO_POST_OCULTAR)); $view->assign('modificar_especiales', Usuario::permiso(Model_Usuario_Rango::PERMISO_POST_FIJAR_PROMOVER)); $view->assign('modificar_aprobar', Usuario::permiso(Model_Usuario_Rango::PERMISO_POST_VER_DESAPROBADO) || Usuario::permiso(Model_Usuario_Rango::PERMISO_POST_VER_DENUNCIAS)); //TODO: ver si en todo momento es correcto permitir modificaciones. $view->assign('modificar_editar', Usuario::$usuario_id === $model_post->usuario_id || Usuario::permiso(Model_Usuario_Rango::PERMISO_POST_EDITAR)); $view->assign('modificar_borrar', Usuario::$usuario_id === $model_post->usuario_id || Usuario::permiso(Model_Usuario_Rango::PERMISO_POST_ELIMINAR)); // Verifico si el usuario puede comentar. $view->assign('podemos_comentar', Usuario::permiso(Model_Usuario_Rango::PERMISO_COMENTARIO_COMENTAR_CERRADO) || $model_post->comentar && Usuario::permiso(Model_Usuario_Rango::PERMISO_COMENTARIO_COMENTAR)); // Verifico si el usuario puede votar comentarios. $view->assign('podemos_votar_comentarios', Usuario::permiso(Model_Usuario_Rango::PERMISO_COMENTARIO_VOTAR)); // Verifico acciones generales. if ($model_post->as_object()->usuario_id == Usuario::$usuario_id) { $view->assign('es_favorito', TRUE); $view->assign('sigo_post', TRUE); $view->assign('puntuacion', FALSE); } else { $view->assign('es_favorito', $model_post->es_favorito(Usuario::$usuario_id)); $view->assign('sigo_post', $model_post->es_seguidor(Usuario::$usuario_id)); if (!Usuario::permiso(Model_Usuario_Rango::PERMISO_POST_PUNTUAR) || $model_post->dio_puntos(Usuario::$usuario_id)) { $view->assign('puntuacion', FALSE); } else { // Obtenemos puntos disponibles. $m_user = Usuario::usuario(); $p_d = $m_user->puntos_disponibles; $p_arr = array(); for ($i = 1; $i <= $p_d; $i++) { $p_arr[] = $i; } $view->assign('puntuacion', $p_arr); unset($m_user, $p_d, $p_arr); } } // Categoria del post. $view->assign('categoria', $model_post->categoria()->as_array()); // Etiquetas. $view->assign('etiquetas', $model_post->etiquetas()); // Acciones posibles sobre comentarios. $view->assign('comentario_eliminar', Usuario::permiso(Model_Usuario_Rango::PERMISO_COMENTARIO_ELIMINAR)); $view->assign('comentario_ocultar', Usuario::permiso(Model_Usuario_Rango::PERMISO_COMENTARIO_OCULTAR)); $view->assign('comentario_editar', Usuario::permiso(Model_Usuario_Rango::PERMISO_COMENTARIO_EDITAR)); // Comentarios del post. $cmts = $model_post->comentarios(NULL); $l_cmt = array(); foreach ($cmts as $cmt) { // Verifico omito los no visibles si el usuario no puede verlos. if ($cmt->estado !== Model_Comentario::ESTADO_VISIBLE && !Usuario::permiso(Model_Usuario_Rango::PERMISO_COMENTARIO_VER_DESAPROBADO)) { continue; } $cl_cmt = $cmt->as_array(); $cl_cmt['contenido_raw'] = $cl_cmt['contenido']; $cl_cmt['contenido'] = Decoda::procesar($cl_cmt['contenido']); if ($cl_cmt['usuario_id'] == Usuario::$usuario_id) { $cl_cmt['vote'] = TRUE; } else { $cl_cmt['vote'] = $cmt->ya_voto(Usuario::$usuario_id); } $cl_cmt['votos'] = $cmt->cantidad_votos(); $cl_cmt['usuario'] = $cmt->usuario()->as_array(); $l_cmt[] = $cl_cmt; } $view->assign('comentarios', $l_cmt); unset($l_cmt, $cmts); $view->assign('comentario_content', isset($_POST['comentario']) ? $_POST['comentario'] : NULL); $view->assign('comentario_error', get_flash('post_comentario_error')); $view->assign('comentario_success', get_flash('post_comentario_success')); } // 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()); }