Ejemplo n.º 1
0
 /**
  * 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);
 }
Ejemplo n.º 2
0
 /**
  * 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/');
 }
Ejemplo n.º 3
0
 /**
  * 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);
 }
Ejemplo n.º 4
0
 /**
  * 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');
 }
Ejemplo n.º 5
0
Archivo: foto.php Proyecto: 4bs4/marifa
 /**
  * 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);
 }
Ejemplo n.º 6
0
 /**
  * Suspendemos a un usuario.
  * @param int $id ID del usuario a suspender.
  */
 public function action_suspender_usuario($id)
 {
     // Verifico permisos.
     if (!Usuario::permiso(Model_Usuario_Rango::PERMISO_USUARIO_VER_DENUNCIAS)) {
         $_SESSION['flash_error'] = 'No tienes permiso para acceder a esa sección.';
         Request::redirect('/');
     }
     // Verificamos no sea actual.
     if ($id == Usuario::$usuario_id) {
         $_SESSION['flash_error'] = 'No puedes enviarte una advertencia a vos mismo.';
         Request::redirect('/moderar/denuncias/usuarios/');
     }
     // Aseguramos un ID entero.
     $id = (int) $id;
     // Cargamos el modelo del usuario.
     $model_usuario = new Model_Usuario($id);
     if (!$model_usuario->existe()) {
         $_SESSION['flash_error'] = 'El usuario que deseas suspender no se encuentra disponible.';
         Request::redirect('/moderar/denuncias/usuarios/');
     }
     // Verifico no esté suspendido.
     $s = $model_usuario->suspension();
     if ($s !== NULL) {
         if ($s->restante() <= 0) {
             $s->anular();
         } else {
             $_SESSION['flash_error'] = 'El usuario que deseas suspender no se encuentra disponible.';
             Request::redirect('/moderar/denuncias/usuarios/');
         }
     }
     unset($s);
     // Cargamos la vista.
     $vista = View::factory('/moderar/denuncias/suspender_usuario');
     // Información del usuario a suspender.
     $vista->assign('usuario', $model_usuario->as_array());
     // Valores por defecto y errores.
     $vista->assign('motivo', '');
     $vista->assign('error_motivo', FALSE);
     $vista->assign('fin', '');
     $vista->assign('error_fin', FALSE);
     if (Request::method() == 'POST') {
         // Seteamos sin error.
         $error = FALSE;
         // Obtenemos los campos.
         $motivo = isset($_POST['motivo']) ? $_POST['motivo'] : NULL;
         $fin = isset($_POST['fin']) ? $_POST['fin'] : NULL;
         // Valores para cambios.
         $vista->assign('motivo', $motivo);
         $vista->assign('fin', $fin);
         // Quitamos BBCode para dimenciones.
         $motivo_clean = preg_replace('/\\[([^\\[\\]]+)\\]/', '', $motivo);
         if (!isset($motivo_clean[10]) || isset($motivo_clean[200])) {
             $error = TRUE;
             $vista->assign('error_motivo', 'El motivo debe tener entre 10 y 200 caractéres');
         }
         unset($motivo_clean);
         // Verificamos la fecha.
         if (empty($fin)) {
             $error = TRUE;
             $vista->assign('error_fin', 'La fecha de finalización no es correcta.');
         } else {
             $fin = strtotime($fin);
             if ($fin <= time()) {
                 $error = TRUE;
                 $vista->assign('error_fin', 'La fecha de finalización no es correcta.');
             }
         }
         if (!$error) {
             // Evitamos XSS.
             $motivo = htmlentities($motivo, ENT_NOQUOTES, 'UTF-8');
             // Creamos la suspensión.
             $model_suspension = new Model_Usuario_Suspension();
             $s_id = $model_suspension->nueva($id, Usuario::$usuario_id, $motivo, $fin);
             // Enviamos el suceso.
             $model_suceso = new Model_Suceso();
             if (Usuario::$usuario_id != $id) {
                 $model_suceso->crear($id, 'usuario_suspender', TRUE, $s_id);
                 $model_suceso->crear(Usuario::$usuario_id, 'usuario_suspender', FALSE, $s_id);
             } else {
                 $model_suceso->crear($id, 'usuario_suspender', FALSE, $s_id);
             }
             // Seteamos mensaje flash y volvemos.
             $_SESSION['flash_success'] = 'Usuario suspendido correctamente.';
             Request::redirect('/moderar/denuncias/usuarios/');
         }
     }
     // Seteamos el menu.
     $this->template->assign('master_bar', parent::base_menu('moderar'));
     // Cargamos plantilla administracion.
     $admin_template = View::factory('moderar/template');
     $admin_template->assign('contenido', $vista->parse());
     unset($portada);
     $admin_template->assign('top_bar', Controller_Moderar_Home::submenu('denuncias_usuarios'));
     // Asignamos la vista a la plantilla base.
     $this->template->assign('contenido', $admin_template->parse());
 }
Ejemplo n.º 7
0
Archivo: post.php Proyecto: 4bs4/marifa
 /**
  * Creamos un nuevo post.
  */
 public function action_nuevo()
 {
     // Verificamos usuario logueado.
     if (!Usuario::is_login()) {
         $_SESSION['flash_error'] = 'Debes iniciar sessión para poder crear posts.';
         Request::redirect('/usuario/login');
     }
     // Verifico los permisos.
     if (!Usuario::permiso(Model_Usuario_Rango::PERMISO_POST_CREAR)) {
         $_SESSION['flash_error'] = 'No tienes permisos para poder crear posts.';
         Request::redirect('/');
     }
     // Asignamos el título.
     $this->template->assign('title', 'Nuevo post');
     // Cargamos la vista.
     $view = View::factory('post/nuevo');
     // Seteo permisos especiales.
     $view->assign('permisos_especiales', Usuario::permiso(Model_Usuario_Rango::PERMISO_POST_FIJAR_PROMOVER));
     // Elementos por defecto.
     foreach (array('titulo', 'contenido', 'categoria', 'privado', 'patrocinado', 'sticky', 'comentar', 'tags', 'error_titulo', 'error_contenido', 'error_categoria', 'error_tags') as $k) {
         $view->assign($k, '');
     }
     // Listado de categorias.
     $model_categoria = new Model_Categoria();
     $view->assign('categorias', $model_categoria->lista());
     // Menu.
     $this->template->assign('master_bar', parent::base_menu('posts'));
     $this->template->assign('top_bar', Controller_Home::submenu('nuevo'));
     // Asignamos la vista.
     $this->template->assign('contenido', $view->parse());
     if (Request::method() == 'POST') {
         $error = FALSE;
         // Obtenemos los datos y seteamos valores.
         foreach (array('titulo', 'contenido', 'categoria', 'tags') as $k) {
             ${$k} = isset($_POST[$k]) ? $_POST[$k] : '';
             $view->assign($k, ${$k});
         }
         // Obtenemos los checkbox.
         foreach (array('privado', 'patrocinado', 'sticky', 'comentar') as $k) {
             ${$k} = isset($_POST[$k]) ? $_POST[$k] == 1 : FALSE;
             $view->assign($k, ${$k});
         }
         // Verificamos el titulo.
         if (!preg_match('/^[a-zA-Z0-9áéíóú\\-,\\.:\\s]{6,60}$/D', $titulo)) {
             $view->assign('error_titulo', 'El formato del título no es correcto.');
             $error = TRUE;
         }
         // Verificamos el contenido.
         $contenido_clean = preg_replace('/\\[.*\\]/', '', $contenido);
         if (!isset($contenido_clean[20]) || isset($contenido[5000])) {
             $view->assign('error_contenido', 'El contenido debe tener entre 20 y 5000 caractéres.');
             $error = TRUE;
         }
         unset($contenido_clean);
         // Verificamos la categoria.
         $model_categoria = new Model_Categoria();
         if (!$model_categoria->existe_seo($categoria)) {
             $view->assign('error_categoria', 'La categoría seleccionada es incorrecta.');
             $error = TRUE;
         } else {
             $model_categoria->load_by_seo($categoria);
             $categoria_id = $model_categoria->id;
         }
         unset($model_categoria);
         // Quito espacios adicionales a las etiquetas.
         $tags = preg_replace('/\\s+/', ' ', trim($tags));
         // Verificamos las etiquetas.
         if (!preg_match('/^[a-zA-Z0-9áéíóúñÑÁÉÍÓÚ, ]{0,}$/D', $tags)) {
             $view->assign('error_tags', 'Las etiquetas ingresadas con son alphanuméricas.');
             $error = TRUE;
         }
         if (!$error) {
             // Obtengo el listado de etiquetas.
             $tags = explode(',', $tags);
             foreach ($tags as $k => $v) {
                 $tags[$k] = trim($v);
                 if ($tags[$k] == '') {
                     unset($tags[$k]);
                 }
             }
             // Verifico la cantidad.
             if (count($tags) < 3) {
                 $view->assign('error_tags', 'Debes insertar un mínimo de 3 etiquetas.');
                 $error = TRUE;
             }
         }
         // Procedemos a crear el post.
         if (!$error) {
             // Evitamos XSS.
             $contenido = htmlentities($contenido, ENT_NOQUOTES, 'UTF-8');
             // Formateamos los campos.
             $titulo = trim(preg_replace('/\\s+/', ' ', $titulo));
             // Verifico si es borrador.
             $borrador = isset($_POST['submit']) ? $_POST['submit'] == 'borrador' : FALSE;
             // Obtengo el estado a aplicar.
             if ($borrador) {
                 $estado = Model_Post::ESTADO_BORRADOR;
             } else {
                 if (Usuario::permiso(Model_Usuario_Rango::PERMISO_USUARIO_REVISAR_CONTENIDO)) {
                     $estado = Model_Post::ESTADO_PENDIENTE;
                 } else {
                     $estado = Model_Post::ESTADO_ACTIVO;
                 }
             }
             unset($borrador);
             // Verifico parámetros especiales.
             if (!Usuario::permiso(Model_Usuario_Rango::PERMISO_POST_FIJAR_PROMOVER)) {
                 $patrocinado = FALSE;
                 $sticky = FALSE;
             }
             $model_post = new Model_Post();
             $post_id = $model_post->crear(Usuario::$usuario_id, $titulo, $contenido, $categoria_id, $privado, $patrocinado, $sticky, $comentar, $estado);
             if ($post_id > 0) {
                 // Cargo el post.
                 $model_post = new Model_Post($post_id);
                 // Agrego las etiquetas.
                 $model_post->agregar_etiqueta($tags);
                 // Agrego el suceso.
                 $model_suceso = new Model_Suceso();
                 $model_suceso->crear(Usuario::$usuario_id, 'post_nuevo', FALSE, $post_id);
                 // Informo y voy a post.
                 $_SESSION['flash_success'] = 'El post fue creado correctamente.';
                 Request::redirect('/post/index/' . $post_id);
             } else {
                 $view->assign('error', 'Se produjo un error cuando se creaba el post. Reintente.');
             }
         }
     }
     // Menu.
     $this->template->assign('master_bar', parent::base_menu('posts'));
     $this->template->assign('top_bar', Controller_Home::submenu('nuevo'));
     // Asignamos la vista.
     $this->template->assign('contenido', $view->parse());
 }
Ejemplo n.º 8
0
 /**
  * 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');
 }
Ejemplo n.º 9
0
 /**
  * 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');
 }
Ejemplo n.º 10
0
 /**
  * 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');
 }
Ejemplo n.º 11
0
 /**
  * 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>&iexcl;Felicitaciones!</b> Foto borrada correctamente.';
     Request::redirect('/moderar/papelera/fotos');
 }
Ejemplo n.º 12
0
 /**
  * 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());
 }
Ejemplo n.º 13
0
 /**
  * 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());
 }