/** * 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()); }
/** * 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()); }
/** * 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()); }
/** * 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')); }
/** * 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()); }
/** * 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()); }
/** * 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()); }
/** * 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()); }
/** * 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()); }
/** * 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()); }
/** * 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()); }
/** * 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()); }
/** * 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()); }
/** * 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()); }
/** * 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()); }
/** * 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()); }
/** * Verificamos que barra utilizar. */ public function __construct() { parent::__construct(); // Seteo el menu. $this->template->assign('master_bar', parent::base_menu()); }
/** * 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()); }
/** * 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()); }
/** * 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()); }