/** * Obtenemos la cantidad de sucesos que hay disponibles. * @param int $usuario ID del usuario dueño de los posts. * @param string $class Nombre de la clase. No debe ser pasado, solo es a fines de compatibilidad de herencias estáticas. */ public static function cantidad($usuario, $class = __CLASS__) { // Obtenemos la lista de sucesos que puede procesar. $rc = new ReflectionClass(substr($class, 5)); $ms = $rc->getMethods(ReflectionMethod::IS_STATIC); $methods = array(); foreach ($ms as $method) { if (substr($method->name, 0, 7) == 'suceso_') { $methods[] = substr($method->name, 7); } } unset($rc, $ms); // Obtenemos la cantidad. $model_suceso = new Model_Suceso(); return $model_suceso->cantidad($usuario, $methods); }
/** * Marcamos las notificaciones como vistas. */ public function action_vistas() { // Cargo sucesos. $model_suceso = new Model_Suceso(); // Seteo como vistas. $model_suceso->vistas(Usuario::$usuario_id); // Notifico y redirecciono. $_SESSION['flash_message'] = 'Las notificaciones han sido marcadas como leidas correctamente.'; Request::redirect('/notificaciones/'); }
/** * Desbloqueamos el acceso a mi perfil del usuario. * @param string $usuario Usuario a desbloquear. */ public function action_desbloquear($usuario) { // Cargamos el usuario. $this->cargar_usuario($usuario); // Verifico estar logueado. if (!Usuario::is_login()) { $_SESSION['flash_error'] = 'Debes estar logueado para poder desbloquear usuarios.'; Request::redirect('/usuario/login'); } // Verificamos no sea uno mismo. if (Usuario::$usuario_id == $this->usuario->id) { $_SESSION['flash_error'] = 'El usuario al cual quieres desbloquear no se encuentra disponible.'; Request::redirect('/perfil/index/' . $usuario->nick); } // Verifico el estado. if ($this->usuario->estado !== Model_Usuario::ESTADO_ACTIVA) { $_SESSION['flash_error'] = 'El usuario al cual quieres desbloquear no se encuentra disponible.'; Request::redirect('/perfil/index/' . $this->usuario->nick); } // Verifico esté bloqueado. if (!Usuario::usuario()->esta_bloqueado($this->usuario->id)) { $_SESSION['flash_error'] = 'El usuario al cual quieres desbloquear no se encuentra disponible.'; Request::redirect('/perfil/index/' . $this->usuario->nick); } // Desbloqueo al usuario. Usuario::usuario()->desbloquear($this->usuario->id); // Envio el suceso. $model_suceso = new Model_Suceso(); if ($this->usuario->id != Usuario::$usuario_id) { $model_suceso->crear($this->usuario->id, 'usuario_bloqueo', TRUE, Usuario::$usuario_id, $this->usuario->id, 1); $model_suceso->crear(Usuario::$usuario_id, 'usuario_bloqueo', FALSE, Usuario::$usuario_id, $this->usuario->id, 1); } else { $model_suceso->crear($this->usuario->id, 'usuario_bloqueo', FALSE, Usuario::$usuario_id, $this->usuario->id, 1); } // Informo resultado. $_SESSION['flash_success'] = 'El usuario se ha desbloqueado correctamente.'; Request::redirect('/perfil/index/' . $this->usuario->nick); }
/** * Seleccionamos un nick a utilizar de nuestra lista. * @param string $nick Nick que vamos a utilizar. */ public function action_utilizar_nick($nick) { // Verifico el formato. if (!preg_match('/^[a-zA-Z0-9]{4,20}$/D', $nick)) { $_SESSION['flash_error'] = 'El nick que desea liberar no es correcto.'; Request::redirect('/cuenta/nick'); } // Verifico si es del usuario. if (!in_array($nick, Usuario::usuario()->nicks())) { $_SESSION['flash_error'] = 'El nick que desea liberar no es correcto.'; Request::redirect('/cuenta/nick'); } // Elimino el nick y lo asigno nuevamente. Usuario::usuario()->eliminar_nick($nick); Usuario::usuario()->cambiar_nick($nick); // Envio el suceso. $model_suceso = new Model_Suceso(); //TODO: Implementar campos alphanumericos. $model_suceso->crear(Usuario::$usuario_id, 'usuario_cambio_nick', Usuario::$usuario_id); // Informo el resultado. $_SESSION['flash_success'] = 'El nick se ha actualizado correctamente.'; Request::redirect('/cuenta/nick'); }
/** * Restauramos una foto proveniente de la papelera. * @param int $foto ID de la foto a restaurar. */ public function action_restaurar_foto($foto) { if (!Usuario::is_login()) { $_SESSION['flash_error'] = 'Debes iniciar sessión para poder restaurar fotos.'; Request::redirect('/usuario/login'); } $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 que intentas restaurar no se encuentra disponible.'; Request::redirect('/foto/'); } // Verifico el usuario y sus permisos. if (Usuario::$usuario_id !== $model_foto->usuario_id && !Usuario::permiso(Model_Usuario_Rango::PERMISO_FOTO_VER_PAPELERA)) { $_SESSION['flash_error'] = 'La foto que intentas restaurar no se encuentra disponible.'; Request::redirect('/foto/ver/' . $foto); } // Verifico el estado de la foto. if ($model_foto->estado !== Model_Foto::ESTADO_PAPELERA) { $_SESSION['flash_error'] = 'La foto que intentas restaurar no se encuentra disponible.'; Request::redirect('/foto/ver/' . $foto); } // Actualizo el estado. $model_foto->actualizar_estado(Model_Foto::ESTADO_ACTIVA); // Enviamos el suceso. $model_suceso = new Model_Suceso(); if (Usuario::$usuario_id != $model_foto->usuario_id) { $model_suceso->crear($model_foto->usuario_id, 'foto_restaurar', TRUE, $foto, Usuario::$usuario_id); $model_suceso->crear(Usuario::$usuario_id, 'foto_restaurar', FALSE, $foto, Usuario::$usuario_id); } else { $model_suceso->crear($model_foto->usuario_id, 'foto_restaurar', FALSE, $foto, Usuario::$usuario_id); } // Informamos el resultado. $_SESSION['flash_success'] = 'La foto se ha restaurado correctamente.'; Request::redirect('/foto/ver/' . $foto); }
/** * 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()); }
/** * 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()); }
/** * La foto se ha borrado correctamente. * @param int $id ID de la foto a borrar. */ public function action_eliminar_foto($id) { // Cargamos el modelo de la foto. $model_foto = new Model_Foto((int) $id); // Verifico que exista. if (!$model_foto->existe()) { $_SESSION['flash_error'] = 'No existe la foto que quiere mostrar.'; Request::redirect('/admin/contenido/fotos'); } // Borramos la foto. $model_foto->borrar(); // Envio el suceso. $model_suceso = new Model_Suceso(); if (Usuario::$usuario_id != $model_foto->usuario_id) { $model_suceso->crear($model_foto->usuario_id, 'foto_borrar', TRUE, $model_foto->id, Usuario::$usuario_id); $model_suceso->crear(Usuario::$usuario_id, 'foto_borrar', FALSE, $model_foto->id, Usuario::$usuario_id); } else { $model_suceso->crear($model_foto->usuario_id, 'foto_borrar', FALSE, $model_foto->id, Usuario::$usuario_id); } // Informamos. $_SESSION['flash_success'] = 'Foto borrrada correctamente.'; Request::redirect('/admin/contenido/fotos'); }
/** * Terminamos la suspensión de un usuario. * @param int $usuario ID del usuario a quitar la suspensión. */ public function action_terminar_suspension($usuario) { if (!Usuario::permiso(Model_Usuario_Rango::PERMISO_USUARIO_SUSPENDER)) { $_SESSION['flash_error'] = 'No tienes permiso para acceder a esa sección.'; Request::redirect('/'); } // Valido el ID. $usuario = (int) $usuario; // Verifico que exista el usuario. $model_usuario = new Model_Usuario($usuario); if (!$model_usuario->existe()) { $_SESSION['flash_error'] = 'El usuario del que desea terminar la suspención no se encuentra disponible.'; Request::redirect('/moderar/gestion/usuarios'); } // Verifico el estado. if ($model_usuario->estado !== Model_Usuario::ESTADO_SUSPENDIDA) { $_SESSION['flash_error'] = 'El usuario del que desea terminar la suspención no se encuentra disponible.'; Request::redirect('/moderar/gestion/usuarios'); } // Borramos la suspensión. $model_usuario->suspension()->anular(); // Creamos el suceso. $model_suceso = new Model_Suceso(); if (Usuario::$usuario_id != $model_usuario->id) { $model_suceso->crear($model_usuario->id, 'usuario_fin_suspension', TRUE, $model_usuario->id, Usuario::$usuario_id); $model_suceso->crear(Usuario::$usuario_id, 'usuario_fin_suspension', FALSE, $model_usuario->id, Usuario::$usuario_id); } else { $model_suceso->crear($model_usuario->id, 'usuario_fin_suspension', FALSE, $model_usuario->id, Usuario::$usuario_id); } // Informamos el resultado. $_SESSION['flash_success'] = 'Suspensión anulada correctamente.'; Request::redirect('/moderar/gestion/usuarios'); }
/** * Corramos el comentario de un post o una foto * @param int $comentario ID del comentario. * @param int $tipo 1: post, 2: foto. */ public function action_borrar_comentario($comentario, $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('/'); } // Verifico el tipo. $tipo = (int) $tipo; if ($tipo !== 1 && $tipo !== 2) { $_SESSION['flash_error'] = 'El comentario que deseas borrar no se encuentra disponible.'; Request::redirect('/moderar/desaprobado/comentarios'); } // Cargo el comentario. $comentario = (int) $comentario; if ($tipo == 1) { $model_comentario = new Model_Post_Comentario($comentario); } else { $model_comentario = new Model_Foto_Comentario($comentario); } // Verifico existencia. if (!$model_comentario->existe()) { $_SESSION['flash_error'] = 'El comentario que deseas borrar no se encuentra disponible.'; Request::redirect('/moderar/desaprobado/comentarios'); } // Verifico el estado. if ($model_comentario->estado !== Model_Comentario::ESTADO_OCULTO) { $_SESSION['flash_error'] = 'El comentario que deseas borrar no se encuentra disponible.'; Request::redirect('/moderar/desaprobado/comentarios'); } // Actualizo. $model_comentario->actualizar_campo('estado', Model_Comentario::ESTADO_BORRADO); // Enviamos el suceso. $model_suceso = new Model_Suceso(); if (Usuario::$usuario_id != $model_comentario->usuario_id) { $model_suceso->crear($model_comentario->usuario_id, $tipo == 1 ? 'post_comentario_borrar' : 'foto_comentario_borrar', TRUE, $model_comentario->id, Usuario::$usuario_id); $model_suceso->crear(Usuario::$usuario_id, $tipo == 1 ? 'post_comentario_borrar' : 'foto_comentario_borrar', FALSE, $model_comentario->id, Usuario::$usuario_id); } else { $model_suceso->crear($model_comentario->usuario_id, $tipo == 1 ? 'post_comentario_borrar' : 'foto_comentario_borrar', FALSE, $model_comentario->id, Usuario::$usuario_id); } // Informo el resultado. $_SESSION['flash_success'] = 'El comentario se ha eliminado correctamente.'; Request::redirect('/moderar/desaprobado/comentarios'); }
/** * Borramos una foto. * @param int $foto ID de la post a borrar. */ public function action_borrar_foto($foto) { // Verifico permisos. if (!Usuario::permiso(Model_Usuario_Rango::PERMISO_FOTO_VER_PAPELERA)) { $_SESSION['flash_error'] = 'No tienes permiso para borrar fotos.'; Request::redirect('/'); } $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 que deseas borrar no se encuentra disponible.'; Request::redirect('/moderar/papelera/fotos'); } // Verifico el usuario y sus permisos. if (Usuario::$usuario_id !== $model_foto->usuario_id || !Usuario::permiso(Model_Usuario_Rango::PERMISO_ELIMINAR_FOTOS)) { $_SESSION['flash_error'] = 'La foto que deseas borrar no se encuentra disponible.'; Request::redirect('/moderar/papelera/fotos'); } // Actualizo el estado. $model_foto->actualizar_campo('estado', Model_Foto::ESTADO_BORRADO); // Enviamos el suceso. $model_suceso = new Model_Suceso(); if (Usuario::$usuario_id != $model_foto->usuario_id) { $model_suceso->crear($model_foto->usuario_id, 'foto_borrar', TRUE, $foto, Usuario::$usuario_id); $model_suceso->crear(Usuario::$usuario_id, 'foto_borrar', FALSE, $foto, Usuario::$usuario_id); } else { $model_suceso->crear($model_foto->usuario_id, 'foto_borrar', FALSE, $foto, Usuario::$usuario_id); } // Informamos el resultado. $_SESSION['flash_success'] = '<b>¡Felicitaciones!</b> Foto borrada correctamente.'; Request::redirect('/moderar/papelera/fotos'); }
/** * Cambiamos el rango de un usuario. * @param int $usuario ID del usuario al que se le cambia el rango. * @param int $rango ID del rango a setear. */ public function action_cambiar_rango($usuario, $rango) { $usuario = (int) $usuario; // Verificamos no sea actual. if ($usuario == Usuario::$usuario_id) { $_SESSION['flash_error'] = 'El usuario que deseas cambiarle el rango no se encuentra disponible.'; Request::redirect('/admin/usuario/'); } // Cargamos el modelo del usuario. $model_usuario = new Model_Usuario($usuario); if (!$model_usuario->existe()) { $_SESSION['flash_error'] = 'El usuario que deseas cambiarle el rango no se encuentra disponible.'; Request::redirect('/admin/usuario/'); } // Verifico su orden. if ($model_usuario->rango()->es_superior(Usuario::usuario()->rango)) { $_SESSION['flash_error'] = 'El usuario que deseas cambiarle el rango no se encuentra disponible.'; Request::redirect('/admin/usuario/'); } $rango = (int) $rango; // Verifico el rango. $model_rango = new Model_Usuario_Rango($rango); if ($model_rango->existe()) { // Verifico el nivel. if ($rango == Usuario::usuario()->rango || $model_rango->es_superior(Usuario::usuario()->rango)) { $_SESSION['flash_error'] = 'Rango que deseas asignar no se encuentra disponible.'; Request::redirect('/admin/usuario/'); } // Actualizo el rango. $model_usuario->actualizar_campo('rango', $rango); // Envio el suceso. $model_suceso = new Model_Suceso(); if (Usuario::$usuario_id != $model_usuario->id) { $model_suceso->crear($model_usuario->id, 'usuario_cambio_rango', TRUE, $model_usuario->id, $rango, Usuario::$usuario_id); $model_suceso->crear(Usuario::$usuario_id, 'usuario_cambio_rango', FALSE, $model_usuario->id, $rango, Usuario::$usuario_id); } else { $model_suceso->crear($model_usuario->id, 'usuario_cambio_rango', FALSE, $model_usuario->id, $rango, Usuario::$usuario_id); } // Informo el resultado. $_SESSION['flash_success'] = 'El rango fue cambiado correctamente correctamente.'; Request::redirect('/admin/usuario'); } // Cargo la vista. $vista = View::factory('admin/usuario/cambiar_rango'); // Seteo la información. $vista->assign('usuario', $model_usuario->as_array()); // Cargamos los rangos. $lst = $model_rango->listado(Usuario::usuario()->rango()->orden); foreach ($lst as $k => $v) { $lst[$k] = $v->as_array(); } $vista->assign('rangos', $lst); // 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')); // Asignamos la vista a la plantilla base. $this->template->assign('contenido', $admin_template->parse()); }
/** * Enviamos un mensaje. * @param int $tipo Tipo de acción a tomar. 1 Responder, 2 Reenviar, NULL nuevo mensaje. * @param int $mensaje_id ID del mensaje a tomar para las acciones especiales. NULL para nuevo. */ public function action_nuevo($tipo, $mensaje_id) { // Verificamos si es reenvio o respuesta. // 1 - Responder. // 2 - Reenviar. if ($tipo == 1 || $tipo == 2) { // Cargamos el mensaje padre. $model_padre = new Model_Mensaje((int) $mensaje_id); if (is_array($model_padre->as_array())) { if ($model_padre->receptor_id == Usuario::$usuario_id) { $padre = $model_padre; } } unset($model_padre); } // Asignamos el título. $this->template->assign('title', 'Mensajes - Enviar mensaje'); // Cargamos la vista. $view = View::factory('mensaje/nuevo'); // Informamos tipo y mensaje_id a la vista. if (isset($padre)) { $view->assign('tipo', $tipo); $view->assign('mensaje_id', (int) $mensaje_id); } // Elementos por defecto. foreach (array('para', 'asunto', 'contenido', 'error_para', 'error_asunto', 'error_contenido') as $k) { $view->assign($k, ''); } // Obtenemos los datos y seteamos valores. foreach (array('para', 'asunto', 'contenido') as $k) { ${$k} = isset($_POST[$k]) ? $_POST[$k] : ''; $view->assign($k, ${$k}); } // Por defecto segun tipo de llamada. if (isset($padre)) { if ($tipo == 1) { $para = $padre->emisor()->nick; $view->assign('para', $para); $view->assign('asunto', 'RE: ' . $padre->asunto); } else { $view->assign('asunto', $padre->asunto); $view->assign('contenido', $padre->contenido); } } if (Request::method() == 'POST') { $error = FALSE; // Verificamos el asunto. if (!preg_match('/^[a-zA-Z0-9áéíóú\\-,\\.:\\s]{6,60}$/D', $asunto)) { $view->assign('error_asunto', 'El formato del asunto no es correcto.'); $error = TRUE; } // Verificamos lista de usuarios. if (!preg_match('/^(([a-zA-Z0-9áéíóúAÉÍÓÚÑñ ]{4,16})(,(\\s)?)?){1,}$/D', $para)) { $view->assign('error_para', 'No introdujo una lista de usuarios válida.'); $error = TRUE; } else { if (isset($padre) && $tipo == 1) { $usuarios = array($padre->emisor()); } else { // Verificamos cada uno de los usuarios. $u_list = explode(',', $para); $model_usuario = new Model_Usuario(); $usuarios = array(); foreach ($u_list as $u) { $u = trim($u); if ($model_usuario->exists_nick($u)) { $model_usuario->load_by_nick($u); if ($model_usuario->id == $_SESSION['usuario_id']) { $view->assign('error_para', "No puedes enviarte mensaje a ti mismo."); $error = TRUE; break; } $usuarios[$u] = $model_usuario; $model_usuario = new Model_Usuario(); } else { $view->assign('error_para', "El usuario '{$u}' no es válido."); $error = TRUE; } } unset($model_usuario); } } // Verificamos el contenido. $contenido_clean = preg_replace('/\\[([^\\[\\]]+)\\]/', '', $contenido); if (!isset($contenido_clean[20]) || isset($contenido[600])) { $view->assign('error_contenido', 'El mensaje debe tener entre 20 y 600 caractéres.'); $error = TRUE; } unset($contenido_clean); // Procedemos a crear el mensaje. if (!$error) { // Evitamos XSS. $contenido = htmlentities($contenido, ENT_NOQUOTES, 'UTF-8'); // Formateamos los campos. $asunto = trim(preg_replace('/\\s+/', ' ', $asunto)); $errors = array(); foreach ($usuarios as $u) { $model_mensaje = new Model_Mensaje(); if (isset($padre) && $tipo == 1) { $padre->actualizar_estado(Model_Mensaje::ESTADO_RESPONDIDO); $mensaje_id = $model_mensaje->enviar(Usuario::$usuario_id, $u->id, $asunto, $contenido, $padre->id); } else { if (isset($padre) && $tipo == 2) { $padre->actualizar_estado(Model_Mensaje::ESTADO_REENVIADO); } $mensaje_id = $model_mensaje->enviar(Usuario::$usuario_id, $u->id, $asunto, $contenido); } if ($mensaje_id > 0) { $model_suceso = new Model_Suceso(); if (Usuario::$usuario_id != $u->id) { $model_suceso->crear($u->id, 'nuevo_mensaje', TRUE, $mensaje_id); $model_suceso->crear(Usuario::$usuario_id, 'nuevo_mensaje', FALSE, $mensaje_id); } else { $model_suceso->crear($u->id, 'nuevo_mensaje', FALSE, $mensaje_id); } } else { $errors[] = "Se produjo un error cuando se creaba enviaba el mensaje a '{$u->nick}'. Reintente."; } } if (count($errors) == 0) { $_SESSION['flash_success'] = 'Mensajes enviados correctamente.'; Request::redirect('/mensaje/'); } else { $view->assign('error', $errors); } } } // 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()); }