Example #1
0
 /**
  * Portada del sitio.
  * @param int $pagina Número de página para lo últimos posts.
  */
 public function action_index($pagina)
 {
     // Cargamos la portada.
     $view = View::factory('notificaciones/index');
     // Seteo el menu.
     $this->template->assign('master_bar', parent::base_menu('inicio'));
     // 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);
     // Cargamos notificaciones.
     $sucesos = Suceso_Barra::obtener_listado_completo(Usuario::$usuario_id, $pagina, $cantidad_por_pagina);
     // Verifivo validez de la pagina.
     if (count($sucesos) == 0 && $pagina != 1) {
         Request::redirect('/notificaciones/');
     }
     // Paginación.
     $paginador = new Paginator(Suceso_Barra::cantidad_completa(Usuario::$usuario_id), $cantidad_por_pagina);
     $view->assign('paginacion', $paginador->get_view($pagina, '/notificaciones/index/%d'));
     unset($paginador);
     // Proceso el listado de sucesos.
     $eventos = array();
     foreach ($sucesos as $v) {
         // Obtengo información del suceso.
         $s_data = Suceso_Perfil::procesar($v);
         // Verifico su existencia.
         if ($s_data === NULL) {
             continue;
         }
         // Obtenemos el tipo de suceso.
         $tipo = $v->tipo;
         // Cargamos la vista.
         $suceso_vista = View::factory('/suceso/notificaciones/' . $tipo);
         // Asigno los datos del usuario actual.
         $suceso_vista->assign('actual', Usuario::usuario()->as_array());
         // Asigno información del suceso.
         $suceso_vista->assign('suceso', $s_data);
         // Datos del suceso.
         $suceso_vista->assign('fecha', $v->fecha);
         $suceso_vista->assign('visto', $v->visto);
         // Agregamos el evento.
         $eventos[] = $suceso_vista->parse();
     }
     $view->assign('sucesos', $eventos);
     unset($sucesos);
     // Asignamos la vista a la plantilla base.
     $this->template->assign('contenido', $view->parse());
 }
Example #2
0
File: tops.php Project: 4bs4/marifa
 /**
  * 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());
 }
Example #3
0
 /**
  * Administración de los nicks del usuario.
  */
 public function action_nick()
 {
     // Asignamos el título.
     $this->template->assign('title', 'Cuenta - Nick');
     // Cargamos la vista.
     $view = View::factory('cuenta/nick');
     // Cargamos el usuario actual.
     $model_usuario = Usuario::usuario();
     $view->assign('email', $model_usuario->email);
     // Valores por defecto.
     $view->assign('nick_actual', $model_usuario->nick);
     $view->assign('nick', '');
     $view->assign('error_nick', NULL);
     $view->assign('error_password', NULL);
     // Listado de nick's reservados.
     $nicks_reservados = $model_usuario->nicks();
     //TODO: Mantener nick's para evitar borrar y poder cambiar.
     //TODO: Mantener nicks por un tiempo limitado.
     // Calculo cuanto hace que cambio su nick.
     if (count($nicks_reservados) !== 0) {
         $fecha_cambio = Usuario::usuario()->ultimo_cambio_nick()->format('U');
     } else {
         // Obtengo fecha de refgistro.
         $fecha_cambio = Usuario::usuario()->registro->format('U');
     }
     // 5184000 === 2 meses.
     $view->assign('tiempo_cambio', $fecha_cambio + 5184000 - date('U'));
     if (Request::method() == 'POST') {
         if (!isset($_POST['nick']) || empty($_POST['nick']) || (!isset($_POST['password']) || empty($_POST['password']))) {
             // Verificamos los datos
             if (!isset($_POST['nick']) || empty($_POST['nick'])) {
                 $view->assign('error_nick', 'Debe ingresar un nuevo nick.');
             } else {
                 $view->assign('nick', $_POST['nick']);
             }
             if (!isset($_POST['password']) || empty($_POST['password'])) {
                 $view->assign('error_password', 'Debe ingresar su contraseña para validar el cambio.');
             }
         } else {
             $nick = $_POST['nick'];
             $password = $_POST['password'];
             $view->assign('nick', $nick);
             // Verifico longitud Nick.
             if (!preg_match('/^[a-zA-Z0-9]{4,20}$/D', $nick)) {
                 $view->assign('error_nick', 'El nick debe tener entre 4 y 20 caracteres alphanuméricos.');
             } else {
                 // Verifico la contraseña.
                 $enc = new Phpass(8, FALSE);
                 if (!$enc->check_password($password, $model_usuario->password)) {
                     $view->assign('error_password', 'La contraseña es incorrecta.');
                 } else {
                     // Verifico que no exista el nick.
                     if ($model_usuario->exists_nick($nick)) {
                         $view->assign('error_nick', 'El nick no está disponible.');
                     } else {
                         // Verifico la cantidad de nick's.
                         if (count($nicks_reservados) >= 3) {
                             $view->assign('error_nick', 'Has superado el máximo de nick\'s utilizados.');
                         } else {
                             // Verifico tiempo de cambio.
                             if ($fecha_cambio + 5184000 - date('U') <= 0) {
                                 // Actualizamos.
                                 $model_usuario->cambiar_nick($nick);
                                 // Recargo los nick's reservados.
                                 $nicks_reservados = $model_usuario->nicks();
                                 // Envio el suceso.
                                 $model_suceso = new Model_Suceso();
                                 //TODO: Implementar campos alphanumericos.
                                 $model_suceso->crear(Usuario::$usuario_id, 'usuario_cambio_nick', Usuario::$usuario_id);
                                 // Informamos resultado.
                                 $view->assign('success', 'El nick se ha actualizado correctamente.');
                                 $view->assign('nick', '');
                                 $view->assign('nick_actual', $nick);
                             } else {
                                 $view->assign('error_nick', 'Solo puedes cambiar tu nick cada 2 meses.');
                             }
                         }
                     }
                 }
             }
         }
     }
     // Cargo listado de nicks.
     $view->assign('nicks', $nicks_reservados);
     // Menu.
     $this->template->assign('master_bar', parent::base_menu('inicio'));
     $this->template->assign('top_bar', $this->submenu('nick'));
     // Asignamos la vista.
     $this->template->assign('contenido', $view->parse());
 }
Example #4
0
 /**
  * Constructor de la clase. Seteamos el elemento del menu actual.
  */
 public function __construct()
 {
     parent::__construct();
     // Cargo el menu.
     $this->template->assign('master_bar', parent::base_menu('inicio'));
 }
Example #5
0
File: home.php Project: 4bs4/marifa
 /**
  * Portada de la moderación.
  * Mostramos elementos relevantes y un resumen de los que sucede.
  */
 public function action_index()
 {
     // Cargamos la portada.
     $portada = View::factory('moderar/home/index');
     // Seteamos el menu.
     $this->template->assign('master_bar', parent::base_menu('moderar'));
     // Cargamos plantilla moderacion.
     $admin_template = View::factory('moderar/template');
     $admin_template->assign('contenido', $portada->parse());
     unset($portada);
     $admin_template->assign('top_bar', self::submenu('index'));
     // Asignamos la vista a la plantilla base.
     $this->template->assign('contenido', $admin_template->parse());
 }
Example #6
0
 /**
  * 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());
 }
Example #7
0
 /**
  * Listado de sessiones de usuarios activas.
  * @param int $pagina Número de página a mostrar.
  */
 public function action_sesiones($pagina)
 {
     // Formato de la página.
     $pagina = (int) $pagina > 0 ? (int) $pagina : 1;
     // Cantidad de elementos por pagina.
     $cantidad_por_pagina = 20;
     // Cargamos la vista.
     $vista = View::factory('admin/usuario/sesiones');
     // Modelo de sessiones.
     $model_session = new Model_Session(session_id());
     // Quitamos sessiones terminadas.
     $model_session->limpiar();
     // Cargamos el listado de usuarios.
     $lst = $model_session->listado($pagina, $cantidad_por_pagina);
     // Paginación.
     $paginador = new Paginator($model_session->cantidad(), $cantidad_por_pagina);
     $vista->assign('paginacion', $paginador->get_view($pagina, '/admin/usuario/sessiones/%s/'));
     // Obtenemos datos de las noticias.
     foreach ($lst as $k => $v) {
         $a = $v->as_array();
         $a['usuario'] = $v->usuario()->as_array();
         $a['ip_raw'] = $a['ip'];
         $a['ip'] = long2ip($a['ip']);
         $lst[$k] = $a;
     }
     // Seteamos listado de noticias.
     $vista->assign('sesiones', $lst);
     unset($lst);
     // 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('usuario_sesiones'));
     // Asignamos la vista a la plantilla base.
     $this->template->assign('contenido', $admin_template->parse());
 }
Example #8
0
 /**
  * Portada de los favoritos.
  * @param int $pagina Número de página a mostrar.
  */
 public function action_fotos($pagina)
 {
     // Cargamos la portada.
     $vista = View::factory('favoritos/fotos');
     // Cantidad de elementos por pagina.
     $model_configuracion = new Model_Configuracion();
     $cantidad_por_pagina = $model_configuracion->get('elementos_pagina', 20);
     // Formato de la página.
     $pagina = (int) $pagina > 0 ? (int) $pagina : 1;
     // Cargamos el listado de favoritos.
     $favoritos = Usuario::usuario()->listado_fotos_favoritos($pagina, $cantidad_por_pagina);
     // Verifivo que la página seleccionada sea válida.
     if (count($favoritos) == 0 && $pagina != 1) {
         Request::redirect('/favoritos/fotos/');
     }
     // Paginación.
     $paginador = new Paginator(Usuario::usuario()->cantidad_favoritos_fotos(), $cantidad_por_pagina);
     $vista->assign('paginacion', $paginador->get_view($pagina, '/favoritos/fotos/%d'));
     unset($paginador);
     // Obtengo información de los favoritos.
     foreach ($favoritos as $k => $v) {
         $a = $v->as_array();
         $a['usuario'] = $v->usuario()->as_array();
         $a['categoria'] = $v->categoria()->as_array();
         $favoritos[$k] = $a;
     }
     // Seteo parámetros a la vista.
     $vista->assign('favoritos', $favoritos);
     unset($favoritos);
     // Seteo el menu.
     $this->template->assign('master_bar', parent::base_menu('inicio'));
     $this->template->assign('top_bar', self::submenu('fotos'));
     // Asignamos la vista a la plantilla base.
     $this->template->assign('contenido', $vista->parse());
 }
Example #9
0
File: foto.php Project: 4bs4/marifa
 /**
  * Editamos una foto.
  * @param int $foto ID de la foto a editar.
  */
 public function action_editar($foto)
 {
     // Verificamos usuario conectado.
     if (!Usuario::is_login()) {
         $_SESSION['flash_error'] = 'Debes iniciar sessión para editar fotos.';
         Request::redirect('/usuario/login/', TRUE);
     }
     // Cargamos la foto.
     $foto = (int) $foto;
     $model_foto = new Model_Foto($foto);
     // Verifico la existencia.
     if (!$model_foto->existe()) {
         $_SESSION['flash_error'] = 'La foto que quiere editar no se encuentra disponible.';
         Request::redirect('/foto/');
     }
     // Verifico los permisos.
     if ($model_foto->usuario_id !== Usuario::$usuario_id && !Usuario::permiso(Model_Usuario_Rango::PERMISO_FOTO_EDITAR)) {
         $_SESSION['flash_error'] = 'La foto que deseas editar no se encuentra disponible.';
         Request::redirect('/foto/ver/' . $foto);
     }
     // Asignamos el título.
     $this->template->assign('title', 'Editar foto');
     // Cargamos la vista.
     $view = View::factory('foto/editar');
     $view->assign('foto', $model_foto->id);
     // Cargo valores actuales.
     $view->assign('titulo', $model_foto->titulo);
     $view->assign('descripcion', $model_foto->descripcion);
     $view->assign('comentarios', $model_foto->comentar);
     $view->assign('visitantes', $model_foto->visitas !== NULL);
     // Inicializo los errores.
     $view->assign('error_titulo', FALSE);
     $view->assign('error_descripcion', FALSE);
     // Menu.
     $this->template->assign('master_bar', parent::base_menu('fotos'));
     $this->template->assign('top_bar', $this->submenu('index'));
     if (Request::method() == 'POST') {
         $error = FALSE;
         // Obtenemos los datos y seteamos valores.
         foreach (array('titulo', 'descripcion') 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);
         // Actualizamos los datos.
         if (!$error) {
             // Evitamos XSS.
             $descripcion = htmlentities($descripcion, ENT_NOQUOTES, 'UTF-8');
             // Formateamos los campos.
             $titulo = trim(preg_replace('/\\s+/', ' ', $titulo));
             // Listado de campos a actualizar.
             $campos = array('titulo' => $titulo, 'descripcion' => $descripcion, 'comentar' => $comentarios, 'visitas' => $visitantes ? $model_foto->visitas !== NULL ? $model_foto->visitas : 0 : NULL);
             // Actualizo los datos.
             if ($model_foto->actualizar_campos($campos)) {
                 // Agregamos el suceso.
                 $model_suceso = new Model_Suceso();
                 if (Usuario::$usuario_id != $model_foto->usuario_id) {
                     $model_suceso->crear($model_foto->usuario_id, 'foto_editar', TRUE, $model_foto->id, Usuario::$usuario_id);
                     $model_suceso->crear(Usuario::$usuario_id, 'foto_editar', FALSE, $model_foto->id, Usuario::$usuario_id);
                 } else {
                     $model_suceso->crear($model_foto->usuario_id, 'foto_editar', FALSE, $model_foto->id, Usuario::$usuario_id);
                 }
                 $_SESSION['flash_success'] = 'La foto se ha actualizado correctamente.';
                 Request::redirect('/foto/ver/' . $model_foto->id);
             }
         }
     }
     // Asignamos la vista.
     $this->template->assign('contenido', $view->parse());
 }
Example #10
0
 /**
  * Editamos una noticia.
  * @param int $id ID de la noticia a editar.
  */
 public function action_editar_noticia($id)
 {
     // Cargamos el modelo de noticia.
     $model_noticia = new Model_Noticia((int) $id);
     if (!$model_noticia->existe()) {
         $_SESSION['flash_error'] = 'Noticia incorrecta.';
         Request::redirect('/admin/contenido/noticias');
     }
     // Cargamos la vista.
     $vista = View::factory('admin/contenido/editar_noticia');
     // Valores por defecto y errores.
     $vista->assign('contenido', $model_noticia->contenido);
     $vista->assign('error_contenido', FALSE);
     if (Request::method() == 'POST') {
         $error = FALSE;
         // Obtenemos el contenido.
         $contenido = isset($_POST['contenido']) ? $_POST['contenido'] : NULL;
         // Quitamos BBCode para dimenciones.
         $contenido_clean = preg_replace('/\\[([^\\[\\]]+)\\]/', '', $contenido);
         if (!isset($contenido_clean[10]) || isset($contenido_clean[200])) {
             $error = TRUE;
             $vista->assign('error_contenido', 'El contenido debe tener entre 10 y 200 caractéres');
         } else {
             // Evitamos XSS.
             $contenido = htmlentities($contenido, ENT_NOQUOTES, 'UTF-8');
             // Actualizamos el contenido.
             $model_noticia->actualizar_contenido($contenido);
             $vista->assign('contenido', $model_noticia->contenido);
             $vista->assign('success', 'Contenido actualizado correctamente');
         }
         unset($contenido_clean);
     }
     // 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_noticias'));
     // Asignamos la vista a la plantilla base.
     $this->template->assign('contenido', $admin_template->parse());
 }
Example #11
0
File: post.php Project: 4bs4/marifa
 /**
  * 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());
 }
Example #12
0
 /**
  * Listado de suspensiones a usuarios.
  * @param int $pagina Número de página a mostrar.
  */
 public function action_usuarios($pagina)
 {
     if (!Usuario::permiso(Model_Usuario_Rango::PERMISO_USUARIO_SUSPENDER)) {
         $_SESSION['flash_error'] = 'No tienes permiso para acceder a esa sección.';
         Request::redirect('/');
     }
     // 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);
     // Cargamos la vista.
     $vista = View::factory('moderar/gestion/usuarios');
     // Modelo de suspensiones.
     $model_suspension = new Model_Usuario_Suspension();
     // Limpio antiguos.
     Model_Usuario_Suspension::clean();
     // Cargamos el listado de posts.
     $lst = $model_suspension->listado($pagina, $cantidad_por_pagina);
     if (count($lst) == 0 && $pagina != 1) {
         Request::redirect('/moderar/gestion/usuarios');
     }
     // Paginación.
     $total = Model_Usuario_Suspension::cantidad();
     $vista->assign('cantidad_pendientes', $total);
     $paginador = new Paginator($total, $cantidad_por_pagina);
     $vista->assign('paginacion', $paginador->get_view($pagina, '/moderar/gestion/usuarios/%s/'));
     unset($total);
     // Obtenemos datos de las denuncias.
     foreach ($lst as $k => $v) {
         $a = $v->as_array();
         $a['motivo'] = Decoda::procesar($a['motivo']);
         $a['usuario'] = $v->usuario()->as_array();
         $a['moderador'] = $v->moderador()->as_array();
         $lst[$k] = $a;
     }
     // Seteamos listado de suspensiones.
     $vista->assign('suspensiones', $lst);
     unset($lst);
     // Seteamos el menu.
     $this->template->assign('master_bar', parent::base_menu('moderar'));
     // Cargamos plantilla administracion.
     $admin_template = View::factory('moderar/template');
     $admin_template->assign('contenido', $vista->parse());
     unset($portada);
     $admin_template->assign('top_bar', Controller_Moderar_Home::submenu('gestion_usuarios'));
     // Asignamos la vista a la plantilla base.
     $this->template->assign('contenido', $admin_template->parse());
 }
Example #13
0
 /**
  * Portada de los borradores.
  * @param int $pagina Número de página a mostrar.
  */
 public function action_index($pagina)
 {
     // Cargamos la portada.
     $vista = View::factory('borradores/index');
     // Cantidad de elementos por pagina.
     $model_configuracion = new Model_Configuracion();
     $cantidad_por_pagina = $model_configuracion->get('elementos_pagina', 20);
     // Cargamos datos de posts.
     $model_post = new Model_Post();
     // Formato de la página.
     $pagina = (int) $pagina > 0 ? (int) $pagina : 1;
     // Cargamos el listado de borradores.
     list($borradores, $total) = $model_post->borradores(Usuario::$usuario_id, $pagina, $cantidad_por_pagina);
     // Que sea un número de página válido.
     if (count($borradores) == 0 && $pagina != 1) {
         Request::redirect('/borradores');
     }
     // Paginación.
     $paginador = new Paginator($total, $cantidad_por_pagina);
     $vista->assign('paginacion', $paginador->get_view($pagina, '/borradores/index/%d'));
     unset($paginador);
     // Obtengo información de los borradores.
     foreach ($borradores as $k => $v) {
         if (is_array($v)) {
             $a = $v['post']->as_array();
             $a['categoria'] = $v['post']->categoria()->as_array();
             // $a['moderado'] = $v['moderado']->as_array();
             // $a['motivo'] = $v['moderado']->moderacion()->as_array();
         } else {
             $a = $v->as_array();
             $a['categoria'] = $v->categoria()->as_array();
         }
         $borradores[$k] = $a;
     }
     // Seteo parámetros a la vista.
     $vista->assign('borradores', $borradores);
     unset($borradores);
     // Seteo el menu.
     $this->template->assign('master_bar', parent::base_menu('posts'));
     // Asignamos la vista a la plantilla base.
     $this->template->assign('contenido', $vista->parse());
 }
Example #14
0
 /**
  * Listado de comentarios que se encuentran desaprobados.
  * @param int $pagina Número de página a mostrar.
  * @param int $tipo Tipo de comentarios a mostrar.
  */
 public function action_comentarios($pagina, $tipo)
 {
     // Verifico permisos.
     if (!Usuario::permiso(Model_Usuario_Rango::PERMISO_COMENTARIO_VER_DESAPROBADO)) {
         $_SESSION['flash_error'] = 'No tienes permiso para acceder a esa sección.';
         Request::redirect('/');
     }
     // Formato de la página.
     $pagina = (int) $pagina > 0 ? (int) $pagina : 1;
     // 0: Posts y fotos
     // 1: Fotos.
     // 2: Posts.
     // Verifico el tipo de comentarios a mostrar.
     if ($tipo == 0 || $tipo == 1 || $tipo == 2) {
         $tipo = (int) $tipo;
     } else {
         $tipo = 0;
     }
     // Cantidad de elementos por pagina.
     $cantidad_por_pagina = 20;
     // Cargamos la vista.
     $vista = View::factory('/moderar/desaprobado/comentarios');
     // Asignamos datos.
     $vista->assign('tipo', $tipo);
     // Cargo datos en función del tipo.
     if ($tipo === 0) {
         // Cargo el modelo.
         $model_comentario = new Model_Comentario();
         // Cargo el listado de comentarios.
         $lst = $model_comentario->listado($pagina, $cantidad_por_pagina, Model_Comentario::ESTADO_OCULTO);
         if (count($lst) == 0 && $pagina != 1) {
             Request::redirect('/moderar/desaprobado/comentarios');
         }
     } elseif ($tipo === 1) {
         // Cargo el modelo.
         $model_comentario = new Model_Foto_Comentario();
         // Cargo el listado de comentarios.
         $lst = $model_comentario->listado($pagina, $cantidad_por_pagina, Model_Foto_Comentario::ESTADO_OCULTO);
         if (count($lst) == 0 && $pagina != 1) {
             Request::redirect('/moderar/desaprobado/comentarios/1/1');
         }
     } else {
         // Cargo el modelo.
         $model_comentario = new Model_Post_Comentario();
         // Cargo el listado de comentarios.
         $lst = $model_comentario->listado($pagina, $cantidad_por_pagina, Model_Post_Comentario::ESTADO_OCULTO);
         if (count($lst) == 0 && $pagina != 1) {
             Request::redirect('/moderar/desaprobado/comentarios/1/2');
         }
     }
     // Calculo las cantidades.
     $c_foto = Model_Foto_Comentario::cantidad(Model_Foto_Comentario::ESTADO_OCULTO);
     $c_post = Model_Post_Comentario::cantidad(Model_Post_Comentario::ESTADO_OCULTO);
     $c_total = $c_foto + $c_post;
     // Paso datos para barra.
     $vista->assign('cantidad_fotos', $c_foto);
     $vista->assign('cantidad_posts', $c_post);
     $vista->assign('cantidad_total', $c_total);
     $vista->assign('actual', $pagina);
     // Paginación.
     $total = $tipo == 0 ? $c_total : ($tipo == 1 ? $c_foto : $c_post);
     $paginador = new Paginator($total, $cantidad_por_pagina);
     $vista->assign('paginacion', $paginador->get_view($pagina, '/moderar/desaprobado/comentario/%s/' . $tipo));
     // Obtenemos datos de los comentarios.
     foreach ($lst as $k => $v) {
         $a = $v->as_array();
         if ($v instanceof Model_Foto_Comentario) {
             $a['foto'] = $v->foto()->as_array();
         } else {
             $a['post'] = $v->post()->as_array();
         }
         $a['usuario'] = $v->usuario()->as_array();
         $lst[$k] = $a;
     }
     // Seteamos listado de comentarios.
     $vista->assign('comentarios', $lst);
     unset($lst);
     // Seteamos el menu.
     $this->template->assign('master_bar', parent::base_menu('moderar'));
     // Cargamos plantilla administracion.
     $admin_template = View::factory('moderar/template');
     $admin_template->assign('contenido', $vista->parse());
     unset($portada);
     $admin_template->assign('top_bar', Controller_Moderar_Home::submenu('desaprobado_comentarios'));
     // Asignamos la vista a la plantilla base.
     $this->template->assign('contenido', $admin_template->parse());
 }
Example #15
0
 /**
  * Listado de fotos que se encuentran en la papelera.
  * @param int $pagina Número de página a mostrar.
  */
 public function action_fotos($pagina)
 {
     // Verifico permisos.
     if (!Usuario::permiso(Model_Usuario_Rango::PERMISO_FOTO_VER_PAPELERA)) {
         $_SESSION['flash_error'] = 'No tienes permiso para acceder a esa sección.';
         Request::redirect('/');
     }
     // 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);
     // Cargamos la vista.
     $vista = View::factory('/moderar/papelera/fotos');
     // Modelo de fotos.
     $model_foto = new Model_Foto();
     // Cargamos el listado de posts.
     $lst = $model_foto->listado($pagina, $cantidad_por_pagina, Model_Foto::ESTADO_PAPELERA);
     if (count($lst) == 0 && $pagina != 1) {
         Request::redirect('/moderar/papelera/fotos');
     }
     // Paginación.
     $paginador = new Paginator(Model_Foto::s_cantidad(Model_Foto::ESTADO_PAPELERA), $cantidad_por_pagina);
     $vista->assign('paginacion', $paginador->get_view($pagina, '/moderar/papelera/fotos/%s/'));
     // Obtenemos datos de los posts.
     foreach ($lst as $k => $v) {
         $a = $v->as_array();
         $a['usuario'] = $v->usuario()->as_array();
         $lst[$k] = $a;
     }
     // Seteamos listado de fotos.
     $vista->assign('fotos', $lst);
     unset($lst);
     // Seteamos el menu.
     $this->template->assign('master_bar', parent::base_menu('moderar'));
     // Cargamos plantilla administracion.
     $admin_template = View::factory('moderar/template');
     $admin_template->assign('contenido', $vista->parse());
     unset($portada);
     $admin_template->assign('top_bar', Controller_Moderar_Home::submenu('papelera_fotos'));
     // Asignamos la vista a la plantilla base.
     $this->template->assign('contenido', $admin_template->parse());
 }
Example #16
0
 /**
  * Instalamos un nuevo tema.
  */
 public function action_instalar_tema()
 {
     // Cargamos la vista.
     $vista = View::factory('admin/configuracion/instalar_tema');
     // Valores por defecto.
     $vista->assign('error_carga', FALSE);
     if (Request::method() == 'POST') {
         $error = FALSE;
         // Verifico el envio correcto de datos.
         if (isset($_FILES['theme'])) {
             // Cargo los datos del archivo.
             $file = $_FILES['theme'];
             // Verifico el estado.
             if ($file['error'] !== UPLOAD_ERR_OK) {
                 $error = TRUE;
                 switch ($file['error']) {
                     case UPLOAD_ERR_INI_SIZE:
                     case UPLOAD_ERR_FORM_SIZE:
                         $vista->assign('error_carga', 'El tamaño del archivo es incorrecto.');
                         break;
                     case UPLOAD_ERR_PARTIAL:
                         $vista->assign('error_carga', 'Los datos enviados están corruptos.');
                         break;
                     case UPLOAD_ERR_NO_FILE:
                         $vista->assign('error_carga', 'No has seleccionado un archivo.');
                         break;
                     case UPLOAD_ERR_NO_TMP_DIR:
                     case UPLOAD_ERR_CANT_WRITE:
                         $vista->assign('error_carga', 'Error interno al cargar el archivo. Reintente. Si el error persiste contacte al administrador.');
                         break;
                     case UPLOAD_ERR_EXTENSION:
                         $vista->assign('error_carga', 'La configuración del servidor no permite archivo con esa extensión.');
                         break;
                 }
             } else {
                 // Cargo el mime.
                 $file['type'] = Update_Utils::get_mime($file['tmp_name']);
                 // Verifico esté dentro de los permitidos.
                 if (!in_array(Update_Utils::mime2compresor($file['type']), Update_Compresion::get_list())) {
                     $error = TRUE;
                     $vista->assign('error_carga', 'El tipo de archivo no es soportado. Verifique la configuración del servidor.');
                 }
             }
         } else {
             $error = TRUE;
             $vista->assign('error_carga', 'No has seleccionado un archivo.');
         }
         // Verifico el contenido de los datos.
         if (!$error) {
             // Armo directorio temporal para la descargar.
             $tmp_dir = TMP_PATH . uniqid('pkg_') . DS;
             mkdir($tmp_dir, 0777, TRUE);
             // Realizo la descompresión.
             $compresor = Update_Compresion::get_instance(Update_Utils::mime2compresor($file['type']));
             $compresor->set_temp_path($tmp_dir);
             if (!$compresor->decompress($file['tmp_name'])) {
                 // Limpio salidas.
                 Update_Utils::unlink($file['tmp_name']);
                 Update_Utils::unlink($tmp_dir);
                 // Informo del error.
                 $error = TRUE;
                 $vista->assign('error_carga', 'No se pudo descomprimir el archivo. Compruebe que sea correcto.');
             } else {
                 // Verifico que sea correcto.
                 if (is_dir($tmp_dir) && file_exists($tmp_dir . DS . 'theme.php') && file_exists($tmp_dir . DS . 'views') && $tmp_dir . DS . 'assets') {
                     // Cargo configuraciones.
                     $data = configuracion_obtener($tmp_dir . DS . 'theme.php');
                     // Verifico su contenido.
                     if (is_array($data)) {
                         if (isset($data['nombre']) && isset($data['author'])) {
                             $theme_name = preg_replace('/(\\s|[^a-z0-9])/', '', strtolower($data['nombre']));
                         }
                     }
                     if (!isset($theme_name)) {
                         // Limpio salidas.
                         Update_Utils::unlink($file['tmp_name']);
                         Update_Utils::unlink($tmp_dir);
                         // Informo del error.
                         $error = TRUE;
                         $vista->assign('error_carga', 'El archivo de descripción del tema es inválido.');
                     }
                 } else {
                     // Limpio salidas.
                     Update_Utils::unlink($file['tmp_name']);
                     Update_Utils::unlink($tmp_dir);
                     // Informo del error.
                     $error = TRUE;
                     $vista->assign('error_carga', 'No se trata de un tema válido.');
                 }
             }
         }
         // Genero directorios.
         if (!$error) {
             // Generamos el path donde se va a alojar.
             $target_path = APP_BASE . DS . VIEW_PATH . $theme_name . DS;
             // Verifico directorio donde alojar.
             if (!file_exists($target_path)) {
                 // Creo el directorio del tema.
                 if (!@mkdir($target_path, 0777, TRUE)) {
                     // Limpio salidas.
                     Update_Utils::unlink($target_path);
                     Update_Utils::unlink($file['tmp_name']);
                     Update_Utils::unlink($tmp_dir);
                     // Informo del error.
                     $vista->assign('error_carga', '1No se pudo alojar el tema en su lugar correspondiente. Verifica los permisos del directorio de temas.');
                     $error = TRUE;
                 }
             }
         }
         // Realizo actualizacion.
         if (!$error) {
             // Realizo el movimiento.
             if (!Update_Utils::copyr($tmp_dir, $target_path)) {
                 // Limpio salidas.
                 Update_Utils::unlink($file['tmp_name']);
                 Update_Utils::unlink($tmp_dir);
                 Update_Utils::unlink($target_path);
                 // Informo del error.
                 $vista->assign('error_carga', 'No se pudo alojar el tema en su lugar correspondiente. Verifica los permisos del directorio de temas.');
             } else {
                 // Limpio directorios.
                 Update_Utils::unlink($file['tmp_name']);
                 Update_Utils::unlink($tmp_dir);
                 // Informo resultado.
                 $_SESSION['flash_success'] = 'El tema se instaló correctamente.';
                 // Redireccionamos.
                 Request::redirect('/admin/configuracion/temas');
             }
         }
     }
     // 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('configuracion_temas'));
     // Asignamos la vista a la plantilla base.
     $this->template->assign('contenido', $admin_template->parse());
 }
Example #17
0
 /**
  * Verificamos que barra utilizar.
  */
 public function __construct()
 {
     parent::__construct();
     // Seteo el menu.
     $this->template->assign('master_bar', parent::base_menu());
 }
Example #18
0
 /**
  * Suspendemos a un usuario.
  * @param int $id ID del usuario a suspender.
  */
 public function action_suspender_usuario($id)
 {
     // Verifico permisos.
     if (!Usuario::permiso(Model_Usuario_Rango::PERMISO_USUARIO_VER_DENUNCIAS)) {
         $_SESSION['flash_error'] = 'No tienes permiso para acceder a esa sección.';
         Request::redirect('/');
     }
     // Verificamos no sea actual.
     if ($id == Usuario::$usuario_id) {
         $_SESSION['flash_error'] = 'No puedes enviarte una advertencia a vos mismo.';
         Request::redirect('/moderar/denuncias/usuarios/');
     }
     // Aseguramos un ID entero.
     $id = (int) $id;
     // Cargamos el modelo del usuario.
     $model_usuario = new Model_Usuario($id);
     if (!$model_usuario->existe()) {
         $_SESSION['flash_error'] = 'El usuario que deseas suspender no se encuentra disponible.';
         Request::redirect('/moderar/denuncias/usuarios/');
     }
     // Verifico no esté suspendido.
     $s = $model_usuario->suspension();
     if ($s !== NULL) {
         if ($s->restante() <= 0) {
             $s->anular();
         } else {
             $_SESSION['flash_error'] = 'El usuario que deseas suspender no se encuentra disponible.';
             Request::redirect('/moderar/denuncias/usuarios/');
         }
     }
     unset($s);
     // Cargamos la vista.
     $vista = View::factory('/moderar/denuncias/suspender_usuario');
     // Información del usuario a suspender.
     $vista->assign('usuario', $model_usuario->as_array());
     // Valores por defecto y errores.
     $vista->assign('motivo', '');
     $vista->assign('error_motivo', FALSE);
     $vista->assign('fin', '');
     $vista->assign('error_fin', FALSE);
     if (Request::method() == 'POST') {
         // Seteamos sin error.
         $error = FALSE;
         // Obtenemos los campos.
         $motivo = isset($_POST['motivo']) ? $_POST['motivo'] : NULL;
         $fin = isset($_POST['fin']) ? $_POST['fin'] : NULL;
         // Valores para cambios.
         $vista->assign('motivo', $motivo);
         $vista->assign('fin', $fin);
         // Quitamos BBCode para dimenciones.
         $motivo_clean = preg_replace('/\\[([^\\[\\]]+)\\]/', '', $motivo);
         if (!isset($motivo_clean[10]) || isset($motivo_clean[200])) {
             $error = TRUE;
             $vista->assign('error_motivo', 'El motivo debe tener entre 10 y 200 caractéres');
         }
         unset($motivo_clean);
         // Verificamos la fecha.
         if (empty($fin)) {
             $error = TRUE;
             $vista->assign('error_fin', 'La fecha de finalización no es correcta.');
         } else {
             $fin = strtotime($fin);
             if ($fin <= time()) {
                 $error = TRUE;
                 $vista->assign('error_fin', 'La fecha de finalización no es correcta.');
             }
         }
         if (!$error) {
             // Evitamos XSS.
             $motivo = htmlentities($motivo, ENT_NOQUOTES, 'UTF-8');
             // Creamos la suspensión.
             $model_suspension = new Model_Usuario_Suspension();
             $s_id = $model_suspension->nueva($id, Usuario::$usuario_id, $motivo, $fin);
             // Enviamos el suceso.
             $model_suceso = new Model_Suceso();
             if (Usuario::$usuario_id != $id) {
                 $model_suceso->crear($id, 'usuario_suspender', TRUE, $s_id);
                 $model_suceso->crear(Usuario::$usuario_id, 'usuario_suspender', FALSE, $s_id);
             } else {
                 $model_suceso->crear($id, 'usuario_suspender', FALSE, $s_id);
             }
             // Seteamos mensaje flash y volvemos.
             $_SESSION['flash_success'] = 'Usuario suspendido correctamente.';
             Request::redirect('/moderar/denuncias/usuarios/');
         }
     }
     // Seteamos el menu.
     $this->template->assign('master_bar', parent::base_menu('moderar'));
     // Cargamos plantilla administracion.
     $admin_template = View::factory('moderar/template');
     $admin_template->assign('contenido', $vista->parse());
     unset($portada);
     $admin_template->assign('top_bar', Controller_Moderar_Home::submenu('denuncias_usuarios'));
     // Asignamos la vista a la plantilla base.
     $this->template->assign('contenido', $admin_template->parse());
 }
Example #19
0
File: home.php Project: 4bs4/marifa
 /**
  * Portada del sitio.
  * @param int $pagina Número de página para lo últimos posts.
  */
 public function action_index($pagina)
 {
     // Cargamos la portada.
     $portada = View::factory('home/index');
     // Seteo el menu.
     $this->template->assign('master_bar', parent::base_menu('posts'));
     $this->template->assign('top_bar', self::submenu('inicio'));
     // Cargamos datos de posts.
     $model_post = new Model_Post();
     // Cantidad posts y comentarios en posts.
     $portada->assign('cantidad_posts', $model_post->cantidad());
     $portada->assign('cantidad_comentarios_posts', $model_post->cantidad_comentarios());
     // Cantidad de elementos por pagina.
     $model_configuracion = new Model_Configuracion();
     $cantidad_por_pagina = $model_configuracion->get('elementos_pagina', 20);
     // Formato de la página.
     $pagina = (int) $pagina > 0 ? (int) $pagina : 1;
     if ($pagina == 1) {
         // Cargo fijos.
         $post_sticky = $model_post->sticky();
         // Extendemos la información de los posts.
         foreach ($post_sticky as $k => $v) {
             $a = $v->as_array();
             $a['usuario'] = $v->usuario()->as_array();
             $a['puntos'] = $v->puntos();
             $a['comentarios'] = $v->cantidad_comentarios(Model_Post_Comentario::ESTADO_VISIBLE);
             $a['categoria'] = $v->categoria()->as_array();
             $post_sticky[$k] = $a;
         }
         // Seteo y limpio.
         $portada->assign('sticky', $post_sticky);
         unset($post_sticky);
     }
     // Ultimos posts
     $post_list = $model_post->obtener_ultimos($pagina, $cantidad_por_pagina);
     // Verifivo validez de la pagina.
     if (count($post_list) == 0 && $pagina != 1) {
         Request::redirect('/');
     }
     // Paginación.
     $paginador = new Paginator($model_post->cantidad(Model_Post::ESTADO_ACTIVO), $cantidad_por_pagina);
     $portada->assign('paginacion', $paginador->get_view($pagina, '/home/index/%d'));
     unset($paginador);
     // Extendemos la información de los posts.
     foreach ($post_list as $k => $v) {
         $a = $v->as_array();
         $a['usuario'] = $v->usuario()->as_array();
         $a['puntos'] = $v->puntos();
         $a['comentarios'] = $v->cantidad_comentarios(Model_Post_Comentario::ESTADO_VISIBLE);
         $a['categoria'] = $v->categoria()->as_array();
         $post_list[$k] = $a;
     }
     $portada->assign('ultimos_posts', $post_list);
     unset($post_list);
     // Cargamos TOP posts.
     $post_top_list = $model_post->obtener_tops();
     // Extendemos la información de los posts.
     foreach ($post_top_list as $k => $v) {
         $a = $v->as_array();
         $a['puntos'] = $v->puntos();
         $post_top_list[$k] = $a;
     }
     $portada->assign('top_posts', $post_top_list);
     unset($post_top_list, $model_post);
     // Cargamos últimos comentarios.
     $comentario_list = Model_Post_Comentario::obtener_ultimos();
     // Extendemos la información de los comentarios.
     foreach ($comentario_list as $k => $v) {
         $a = $v->as_array();
         $a['usuario'] = $v->usuario()->as_array();
         $a['post'] = $v->post()->as_array();
         $comentario_list[$k] = $a;
     }
     $portada->assign('ultimos_comentarios', $comentario_list);
     unset($comentario_list);
     // Cargamos top usuarios.
     $model_usuario = new Model_Usuario();
     // Cantidad de usuarios
     $portada->assign('cantidad_usuarios', $model_usuario->cantidad());
     $portada->assign('cantidad_usuarios_online', $model_usuario->cantidad_activos());
     // Top de usuarios.
     $usuario_top_list = $model_usuario->obtener_tops();
     // Extendemos la información de los usuarios.
     foreach ($usuario_top_list as $k => $v) {
         $a = $v->as_array();
         $a['puntos'] = $v->cantidad_puntos();
         $usuario_top_list[$k] = $a;
     }
     $portada->assign('usuario_top', $usuario_top_list);
     unset($usuario_top_list, $model_usuario);
     // Cargamos ultimas fotos.
     $model_foto = new Model_Foto();
     $foto_list = $model_foto->obtener_ultimas(1, 1);
     // Extendemos la información de las fotos.
     foreach ($foto_list as $k => $v) {
         $foto_list[$k] = $v->as_array();
     }
     $portada->assign('ultimas_fotos', $foto_list);
     unset($foto_list);
     // Cantidad fotos y comentarios en fotos.
     $portada->assign('cantidad_fotos', $model_foto->cantidad());
     $portada->assign('cantidad_comentarios_fotos', $model_foto->cantidad_comentarios());
     unset($model_foto);
     // Asignamos la vista a la plantilla base.
     $this->template->assign('contenido', $portada->parse());
 }
Example #20
0
 /**
  * Vemos un mensaje enviado.
  * @param int $mensaje ID del mensaje a ver
  */
 public function action_enviado($mensaje)
 {
     // Forzamos entero.
     $mensaje = (int) $mensaje;
     // Verificamos exista el mensaje.
     $model_mensaje = new Model_Mensaje($mensaje);
     if (!is_array($model_mensaje->as_array())) {
         Request::redirect('/mensaje/');
     }
     // Verificamos sea el emisor.
     if (Usuario::$usuario_id != $model_mensaje->emisor_id) {
         Request::redirect('/mensaje/');
     }
     // Asignamos el título.
     $this->template->assign('title', 'Mensajes - ' . $model_mensaje->asunto);
     // Cargamos la vista.
     $view = View::factory('mensaje/enviado');
     // Información general del mensaje.
     $aux = $model_mensaje->as_array();
     // Proceso el contenido.
     $aux['contenido'] = Decoda::procesar($aux['contenido']);
     // Agrego usuarios.
     $aux['emisor'] = $model_mensaje->emisor()->as_array();
     $aux['receptor'] = $model_mensaje->receptor()->as_array();
     $view->assign('mensaje', $aux);
     unset($aux);
     // Listado de mensajes hijos.
     // $view->assign('hijos', $this->listado_conversacion($model_mensaje->padre_id));
     // Menu.
     $this->template->assign('master_bar', parent::base_menu('inicio'));
     $this->template->assign('top_bar', $this->submenu('nuevo'));
     // Asignamos la vista.
     $this->template->assign('contenido', $view->parse());
 }