Exemple #1
0
 /**
  * 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());
 }