/** * Cargamos la plantilla base. */ public function __construct() { // Cargamos la plantilla base. $this->template = View::factory('template'); // Cargo las noticias. $noticia = Model_Noticia::get_active(); if ($noticia !== NULL) { $this->template->assign('noticia', Decoda::procesar($noticia->contenido)); } unset($noticia); // Cargo nombre del sitio. $model_config = new Model_Configuracion(); $this->template->assign('brand', $model_config->get('nombre', 'Marifa')); // Acciones para menu offline. if (!Usuario::is_login()) { // Seteamos menu offline. $this->template->assign('user_header', View::factory('header/logout')->parse()); } else { $this->template->assign('user_header', $this->make_user_header()->parse()); } $this->template->assign('contenido', ''); // Eventos flash. if (isset($_SESSION['flash_success'])) { $this->template->assign('flash_success', get_flash('flash_success')); } if (isset($_SESSION['flash_error'])) { $this->template->assign('flash_error', get_flash('flash_error')); } // Seteo si es mantenimiento. $m = new Mantenimiento(); $this->template->assign('is_locked', $m->is_locked()); unset($m); }
/** * 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()); }
/** * Inicio de sessión de un usuario. */ public function action_login() { // Verificamos si el usuario está conectado. if (Usuario::is_login()) { // Lo enviamos al perfil. Request::redirect('/', FALSE, TRUE); } // Asignamos el título. $this->template->assign('title', 'Inicio de Sessión'); // Cargamos la vista del usuario. $view_usuario = View::factory('usuario/login'); $view_usuario->assign('error', NULL); $view_usuario->assign('error_nick', FALSE); $view_usuario->assign('error_password', FALSE); $view_usuario->assign('nick', ''); // Verificamos si se han enviado los datos. if (Request::method() == 'POST') { // Verificamos los datos enviados. // Verificamos estén ambos datos. if (!isset($_POST['nick']) || empty($_POST['nick']) || !isset($_POST['password']) || empty($_POST['password'])) { $view_usuario->assign('error', 'Debe introducir el E-Mail o Usuario y la contraseña para poder acceder.'); $view_usuario->assign('error_nick', !(isset($_POST['nick']) && !empty($_POST['nick']))); $view_usuario->assign('error_password', !(isset($_POST['password']) && !empty($_POST['password']))); $view_usuario->assign('nick', isset($_POST['nick']) ? $_POST['nick'] : ''); } else { // Obtenemos los datos. $nick = $_POST['nick']; $password = $_POST['password']; // Realizamos el login. $model_usuario = new Model_Usuario(); $rst = $model_usuario->login($nick, $password); switch ($rst) { case -1: // Datos inválidos. $view_usuario->assign('error', 'Los datos introducidos son inválidos.'); $view_usuario->assign('error_nick', TRUE); $view_usuario->assign('error_password', TRUE); break; case Model_Usuario::ESTADO_ACTIVA: // Cuenta activa. $_SESSION['flash_success'] = 'Bienvenido.'; Request::redirect('/', FALSE, TRUE); break; case Model_Usuario::ESTADO_PENDIENTE: // Cuenta por activar. $view_usuario->assign('error', 'La cuenta no ha sido validada aún. Si no recibiste el correo de activación haz click <a href="/usuario/pedir_activacion/">aqui</a>'); break; case Model_Usuario::ESTADO_SUSPENDIDA: // Cuenta suspendida. // Obtenemos la suspensión. $suspension = $model_usuario->suspension(); // Obtengo información para formar mensaje. $motivo = Decoda::procesar($suspension->motivo); $moderador = $suspension->moderador()->as_array(); $seconds = $suspension->restante(); // Tiempo restante $restante = sprintf("%d:%02d:%02d", floor($seconds / 3600), floor($seconds % 3600 / 60), $seconds % 60); unset($seconds); $view_usuario->assign('error', sprintf(__('%s te ha suspendido por %s debido a:<br /> %s', FALSE), $moderador['nick'], $restante, $motivo)); break; case Model_Usuario::ESTADO_BANEADA: // Cuenta baneada. $baneo = $model_usuario->baneo(); $view_usuario->assign('error', sprintf(__('%s te ha baneado el %s debido a: <br /> %s', FALSE), $baneo->moderador()->nick, $baneo->fecha->format('d/m/Y H:i:s'), Decoda::procesar($baneo->razon))); } $view_usuario->assign('nick', $nick); } } else { $view_usuario->assign('nick', ''); } // Agregamos el la vista a la plantilla. $this->template->assign('contenido', $view_usuario->parse()); }
/** * Mostramos una foto. * @param int $foto ID de la foto. */ public function action_ver($foto) { // Convertimos la foto a ID. $foto = (int) $foto; // Cargamos la foto. $model_foto = new Model_Foto($foto); // Verificamos exista. if (!is_array($model_foto->as_array())) { $_SESSION['flash_error'] = 'La foto a la que intentas acceder no está disponible.'; Request::redirect('/foto/'); } // Verifico el estado. if ($model_foto->usuario_id !== Usuario::$usuario_id && $model_foto->estado !== Model_Foto::ESTADO_ACTIVA && !Usuario::permiso(Model_Usuario_Rango::PERMISO_FOTO_VER_DESAPROBADO) && !Usuario::permiso(Model_Usuario_Rango::PERMISO_FOTO_VER_PAPELERA)) { $_SESSION['flash_error'] == 'La foto a la que intentas acceder no está disponible.'; Request::redirect('/foto/'); } // Asignamos el título. $this->template->assign('title', 'Foto - ' . $model_foto->as_object()->titulo); // Cargamos la vista. $view = View::factory('foto/ver'); // Mi id. $view->assign('me', Usuario::$usuario_id); // Informamos los permisos a la vista. $view->assign('permiso_borrar', Usuario::$usuario_id === $model_foto->usuario_id || Usuario::permiso(Model_Usuario_Rango::PERMISO_FOTO_ELIMINAR)); $view->assign('permiso_editar', Usuario::$usuario_id === $model_foto->usuario_id || Usuario::permiso(Model_Usuario_Rango::PERMISO_FOTO_EDITAR)); $view->assign('permiso_ocultar', Usuario::permiso(Model_Usuario_Rango::PERMISO_FOTO_OCULTAR) || Usuario::permiso(Model_Usuario_Rango::PERMISO_FOTO_VER_DESAPROBADO) || Usuario::permiso(Model_Usuario_Rango::PERMISO_FOTO_VER_DENUNCIAS)); $view->assign('permiso_papelera', Usuario::$usuario_id === $model_foto->usuario_id); // Información del usuario dueño del post. $u_data = $model_foto->usuario()->as_array(); $u_data['seguidores'] = $model_foto->usuario()->cantidad_seguidores(); $u_data['posts'] = $model_foto->usuario()->cantidad_posts(); $u_data['comentarios'] = $model_foto->usuario()->cantidad_comentarios(); $u_data['puntos'] = $model_foto->usuario()->cantidad_puntos(); $view->assign('usuario', $u_data); unset($u_data); // Información de la foto. $ft = $model_foto->as_array(); $ft['descripcion'] = Decoda::procesar($ft['descripcion']); $ft['votos'] = (int) $model_foto->votos(); $ft['favoritos'] = (int) $model_foto->favoritos(); $view->assign('foto', $ft); unset($ft); if (!Usuario::is_login() || $model_foto->as_object()->usuario_id == Usuario::$usuario_id) { $view->assign('es_favorito', TRUE); $view->assign('ya_vote', TRUE); } else { // Computamos la visita si es necesario. if ($model_foto->visitas !== NULL) { $model_foto->agregar_visita(); } $view->assign('es_favorito', $model_foto->es_favorito(Usuario::$usuario_id)); $view->assign('ya_vote', !Usuario::permiso(Model_Usuario_Rango::PERMISO_FOTO_VOTAR) || $model_foto->ya_voto(Usuario::$usuario_id)); } // Verifico si soporta comentarios. $view->assign('puedo_comentar', Usuario::permiso(Model_Usuario_Rango::PERMISO_COMENTARIO_COMENTAR_CERRADO) || $model_foto->soporta_comentarios() && Usuario::permiso(Model_Usuario_Rango::PERMISO_COMENTARIO_COMENTAR)); $view->assign('comentario_eliminar', Usuario::permiso(Model_Usuario_Rango::PERMISO_COMENTARIO_ELIMINAR)); $view->assign('comentario_ocultar', Usuario::permiso(Model_Usuario_Rango::PERMISO_COMENTARIO_OCULTAR)); $view->assign('comentario_editar', Usuario::permiso(Model_Usuario_Rango::PERMISO_COMENTARIO_EDITAR)); // Comentarios del post. $cmts = $model_foto->comentarios(); $l_cmt = array(); foreach ($cmts as $cmt) { $cl_cmt = $cmt->as_array(); $cl_cmt['usuario'] = $cmt->usuario()->as_array(); $l_cmt[] = $cl_cmt; } $view->assign('comentarios', $l_cmt); unset($l_cmt, $cmts); $view->assign('comentario_content', isset($_POST['comentario']) ? $_POST['comentario'] : NULL); $view->assign('comentario_error', get_flash('post_comentario_error')); $view->assign('comentario_success', get_flash('post_comentario_success')); // Menu. $this->template->assign('master_bar', parent::base_menu('fotos')); $this->template->assign('top_bar', $this->submenu('index')); // Asignamos la vista. $this->template->assign('contenido', $view->parse()); }
/** * Listado de noticias. * @param int $pagina Número de página de la cual mostrar noticias. */ public function action_noticias($pagina) { // 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('admin/contenido/noticias'); // Modelo de noticias. $model_noticias = new Model_Noticia(); // Cargamos el listado de noticias. $lst = $model_noticias->listado($pagina, $cantidad_por_pagina); // Paginación. $total = $model_noticias->total(); $paginador = new Paginator($total, $cantidad_por_pagina); $vista->assign('paginacion', $paginador->get_view($pagina, '/admin/contenido/noticias/%s/')); // Obtenemos datos de las noticias. foreach ($lst as $k => $v) { $a = $v->as_array(); $a['contenido_raw'] = $a['contenido']; $a['contenido'] = Decoda::procesar($a['contenido']); $a['usuario'] = $v->usuario()->as_array(); $lst[$k] = $a; } // Seteamos listado de noticias. $vista->assign('noticias', $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('contenido_noticias')); // Asignamos la vista a la plantilla base. $this->template->assign('contenido', $admin_template->parse()); }
/** * Información de un post. * @param int $post ID del post a visualizar. */ public function action_index($post) { // Convertimos el post a ID. $post = (int) $post; // Cargamos el post. $model_post = new Model_Post($post); // Verificamos exista. if (!is_array($model_post->as_array())) { $_SESSION['flash_error'] = 'El post al que intentas acceder no está disponible.'; Request::redirect('/'); } // Verifico el estado de post y permisos necesarios para acceder. switch ($model_post->estado) { case Model_Post::ESTADO_BORRADO: $_SESSION['flash_error'] = 'El post al que intentas acceder no existe.'; Request::redirect('/'); break; case Model_Post::ESTADO_PAPELERA: if ($model_post->usuario_id !== Usuario::$usuario_id && !Usuario::permiso(Model_Usuario_Rango::PERMISO_POST_VER_PAPELERA)) { $_SESSION['flash_error'] = 'El post al que intentas acceder no se encuentra disponible.'; Request::redirect('/'); } break; case Model_Post::ESTADO_BORRADOR: if ($model_post->usuario_id !== Usuario::$usuario_id && !Usuario::permiso(Model_Usuario_Rango::PERMISO_SITIO_ADMINISTRAR_CONTENIDO)) { $_SESSION['flash_error'] = 'El post al que intentas acceder no se encuentra disponible.'; Request::redirect('/'); } break; case Model_Post::ESTADO_PENDIENTE: case Model_Post::ESTADO_OCULTO: case Model_Post::ESTADO_RECHAZADO: if ($model_post->usuario_id !== Usuario::$usuario_id && !Usuario::permiso(Model_Usuario_Rango::PERMISO_POST_VER_DESAPROBADO)) { $_SESSION['flash_error'] = 'El post al que intentas acceder no se encuentra disponible.'; Request::redirect('/'); } break; } if ($model_post->as_object()->privado && !Usuario::is_login()) { // Asignamos el título. $this->template->assign('title', 'Post privado'); $view = View::factory('post/privado'); $view->assign('post', $model_post->as_array()); } else { // Asignamos el título. $this->template->assign('title', $model_post->as_object()->titulo); // Cargamos la vista. $view = View::factory('post/index'); // Verifico si debo contabilizar la visita. if (Usuario::$usuario_id != $model_post->as_object()->usuario_id) { $model_post->agregar_vista(); } // Mi id. $view->assign('me', Usuario::$usuario_id); // Verifico si sigo al usuario. if ($model_post->usuario_id !== Usuario::$usuario_id) { $view->assign('sigue_usuario', $model_post->usuario()->es_seguidor(Usuario::$usuario_id)); } else { $view->assign('sigue_usuario', TRUE); } // Información del usuario dueño del post. $u_data = $model_post->usuario()->as_array(); $u_data['seguidores'] = $model_post->usuario()->cantidad_seguidores(); $u_data['posts'] = $model_post->usuario()->cantidad_posts(); $u_data['comentarios'] = $model_post->usuario()->cantidad_comentarios(); $u_data['puntos'] = $model_post->usuario()->cantidad_puntos(); $view->assign('usuario', $u_data); unset($u_data); // Información del post. $pst = $model_post->as_array(); $pst['contenido_raw'] = $pst['contenido']; $pst['contenido'] = Decoda::procesar($pst['contenido']); $pst['seguidores'] = $model_post->cantidad_seguidores(); $pst['puntos'] = $model_post->puntos(); $pst['favoritos'] = $model_post->cantidad_favoritos(); $view->assign('post', $pst); unset($pst); // Verifico las acciones extendidas. $view->assign('modificar_ocultar', Usuario::$usuario_id === $model_post->usuario_id || Usuario::permiso(Model_Usuario_Rango::PERMISO_POST_OCULTAR)); $view->assign('modificar_especiales', Usuario::permiso(Model_Usuario_Rango::PERMISO_POST_FIJAR_PROMOVER)); $view->assign('modificar_aprobar', Usuario::permiso(Model_Usuario_Rango::PERMISO_POST_VER_DESAPROBADO) || Usuario::permiso(Model_Usuario_Rango::PERMISO_POST_VER_DENUNCIAS)); //TODO: ver si en todo momento es correcto permitir modificaciones. $view->assign('modificar_editar', Usuario::$usuario_id === $model_post->usuario_id || Usuario::permiso(Model_Usuario_Rango::PERMISO_POST_EDITAR)); $view->assign('modificar_borrar', Usuario::$usuario_id === $model_post->usuario_id || Usuario::permiso(Model_Usuario_Rango::PERMISO_POST_ELIMINAR)); // Verifico si el usuario puede comentar. $view->assign('podemos_comentar', Usuario::permiso(Model_Usuario_Rango::PERMISO_COMENTARIO_COMENTAR_CERRADO) || $model_post->comentar && Usuario::permiso(Model_Usuario_Rango::PERMISO_COMENTARIO_COMENTAR)); // Verifico si el usuario puede votar comentarios. $view->assign('podemos_votar_comentarios', Usuario::permiso(Model_Usuario_Rango::PERMISO_COMENTARIO_VOTAR)); // Verifico acciones generales. if ($model_post->as_object()->usuario_id == Usuario::$usuario_id) { $view->assign('es_favorito', TRUE); $view->assign('sigo_post', TRUE); $view->assign('puntuacion', FALSE); } else { $view->assign('es_favorito', $model_post->es_favorito(Usuario::$usuario_id)); $view->assign('sigo_post', $model_post->es_seguidor(Usuario::$usuario_id)); if (!Usuario::permiso(Model_Usuario_Rango::PERMISO_POST_PUNTUAR) || $model_post->dio_puntos(Usuario::$usuario_id)) { $view->assign('puntuacion', FALSE); } else { // Obtenemos puntos disponibles. $m_user = Usuario::usuario(); $p_d = $m_user->puntos_disponibles; $p_arr = array(); for ($i = 1; $i <= $p_d; $i++) { $p_arr[] = $i; } $view->assign('puntuacion', $p_arr); unset($m_user, $p_d, $p_arr); } } // Categoria del post. $view->assign('categoria', $model_post->categoria()->as_array()); // Etiquetas. $view->assign('etiquetas', $model_post->etiquetas()); // Acciones posibles sobre comentarios. $view->assign('comentario_eliminar', Usuario::permiso(Model_Usuario_Rango::PERMISO_COMENTARIO_ELIMINAR)); $view->assign('comentario_ocultar', Usuario::permiso(Model_Usuario_Rango::PERMISO_COMENTARIO_OCULTAR)); $view->assign('comentario_editar', Usuario::permiso(Model_Usuario_Rango::PERMISO_COMENTARIO_EDITAR)); // Comentarios del post. $cmts = $model_post->comentarios(NULL); $l_cmt = array(); foreach ($cmts as $cmt) { // Verifico omito los no visibles si el usuario no puede verlos. if ($cmt->estado !== Model_Comentario::ESTADO_VISIBLE && !Usuario::permiso(Model_Usuario_Rango::PERMISO_COMENTARIO_VER_DESAPROBADO)) { continue; } $cl_cmt = $cmt->as_array(); $cl_cmt['contenido_raw'] = $cl_cmt['contenido']; $cl_cmt['contenido'] = Decoda::procesar($cl_cmt['contenido']); if ($cl_cmt['usuario_id'] == Usuario::$usuario_id) { $cl_cmt['vote'] = TRUE; } else { $cl_cmt['vote'] = $cmt->ya_voto(Usuario::$usuario_id); } $cl_cmt['votos'] = $cmt->cantidad_votos(); $cl_cmt['usuario'] = $cmt->usuario()->as_array(); $l_cmt[] = $cl_cmt; } $view->assign('comentarios', $l_cmt); unset($l_cmt, $cmts); $view->assign('comentario_content', isset($_POST['comentario']) ? $_POST['comentario'] : NULL); $view->assign('comentario_error', get_flash('post_comentario_error')); $view->assign('comentario_success', get_flash('post_comentario_success')); } // Menu. $this->template->assign('master_bar', parent::base_menu('posts')); $this->template->assign('top_bar', Controller_Home::submenu('index')); // Asignamos la vista. $this->template->assign('contenido', $view->parse()); }
/** * 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()); }