コード例 #1
0
ファイル: perfil.php プロジェクト: 4bs4/marifa
 /**
  * Cargamos el usuario. En caso de no existir vamos a la portada.
  * @param string $usuario ID o nick del usuario.
  */
 protected function cargar_usuario($usuario)
 {
     if ($usuario == NULL) {
         // Verificamos si estamos logueados.
         if (!Usuario::is_login()) {
             $_SESSION['flash_error'] = 'El usuario del que quieres ver el perfil no está disponible.';
             Request::redirect('/');
         }
         $model_usuario = Usuario::usuario();
     } else {
         // Verifico no sea yo.
         if (Usuario::is_login() && Usuario::usuario()->nick == $usuario) {
             $model_usuario = Usuario::usuario();
         } else {
             // Cargamos el modelo del usuario
             $model_usuario = new Model_Usuario();
             // Tratamos de cargar el usuario por su nick
             if (!$model_usuario->load_by_nick($usuario)) {
                 $_SESSION['flash_error'] = 'El usuario del que quieres ver el perfil no está disponible.';
                 Request::redirect('/');
             }
             // Verifico bloqueo.
             if ($model_usuario->esta_bloqueado(Usuario::$usuario_id)) {
                 $_SESSION['flash_error'] = 'El usuario del que quieres ver el perfil te tiene bloqueado.';
                 Request::redirect('/');
             }
         }
     }
     // Hacemos global para trabajar.
     $this->usuario = $model_usuario;
 }
コード例 #2
0
ファイル: usuario.php プロジェクト: 4bs4/marifa
 /**
  * Enviamos un correo para recuperar la contraseña.
  */
 public function action_recuperar()
 {
     // Verificamos si el usuario está conectado.
     if (Usuario::is_login()) {
         // Lo enviamos a la portada.
         Request::redirect('/');
     }
     // Asignamos el título.
     $this->template->assign('title', 'Recuperar clave.');
     // Cargamos la vista del usuario.
     $view_usuario = View::factory('usuario/recuperar');
     // Cargo datos.
     $view_usuario->assign('email', '');
     $view_usuario->assign('error_email', '');
     // Verificamos si se han enviado los datos.
     if (Request::method() == 'POST') {
         $error = FALSE;
         // Verificamos los datos enviados.
         $email = isset($_POST['email']) ? trim($_POST['email']) : '';
         if (!$error) {
             // Verfico existencia del correo.
             $model_usuario = new Model_Usuario();
             if (!$model_usuario->exists_email($email)) {
                 // Verifico existencia de nick.
                 if (!$model_usuario->exists_nick($email)) {
                     $view_usuario->assign('error_email', 'El nick o correo ingresado no existe.');
                     $error = TRUE;
                 } else {
                     $model_usuario->load_by_nick($email);
                     $error = FALSE;
                 }
             } else {
                 $model_usuario->load_by_email($email);
                 $error = FALSE;
             }
         }
         if (!$error) {
             // Elimino posibles tokens del usuario.
             $model_recuperacion = new Model_Usuario_Recuperacion();
             $model_recuperacion->borrar_por_usuario($model_usuario->id);
             // Genero un nuevo token.
             $token = $model_recuperacion->crear($model_usuario->id, $model_usuario->email, Model_Usuario_Recuperacion::TIPO_RECUPERACION);
             // Configuraciones del sitio.
             $model_config = new Model_Configuracion();
             // Creo el mensaje de correo.
             $message = Email::get_message();
             $message->setSubject('Restaurar contraseña de ' . $model_config->get('nombre', 'Marifa'));
             $message->setFrom('*****@*****.**', 'Ares');
             $message->setTo($email, $model_usuario->nick);
             // Cargo la vista.
             $message_view = View::factory('emails/recuperar');
             $message_view->assign('codigo', $token);
             $message_view->assign('titulo', $model_config->get('nombre', 'Marifa'));
             $message->setBody($message_view->parse());
             unset($message_view);
             // Envio el email.
             $mailer = Email::get_mailer();
             $mailer->send($message);
             // Registro completo.
             $view_usuario = View::factory('usuario/recuperar_completo');
         }
     }
     // Agregamos el la vista a la plantilla.
     $this->template->assign('contenido', $view_usuario->parse());
 }
コード例 #3
0
ファイル: cuenta.php プロジェクト: 4bs4/marifa
 /**
  * Bloqueos a los usuarios.
  */
 public function action_bloqueados()
 {
     // Asignamos el título.
     $this->template->assign('title', 'Cuenta - Bloqueos');
     // Cargamos la vista.
     $view = View::factory('cuenta/bloqueos');
     // Seteo parametros.
     $view->assign('usuario', '');
     $view->assign('error_usuario', FALSE);
     if (Request::method() == 'POST') {
         // Obtengo el usuario.
         $usuario = isset($_POST['usuario']) ? trim($_POST['usuario']) : '';
         // Seteo a la vista.
         $view->assign('usuario', $usuario);
         $error = FALSE;
         // Verifico el nick
         if (!preg_match('/^[a-zA-Z0-9]{4,16}$/D', $usuario)) {
             $view->assign('error_usuario', 'El usuario ingresado no es válido.');
             $error = TRUE;
         }
         if (!$error) {
             // Verifico exista.
             $model_usuario = new Model_Usuario();
             if (!$model_usuario->exists_nick($usuario)) {
                 $view->assign('error_usuario', 'El usuario ingresado no es válido.');
                 $error = TRUE;
             } else {
                 $model_usuario->load_by_nick($usuario);
             }
         }
         if (!$error) {
             // Verifico no sea uno mismo.
             if ($model_usuario->id === Usuario::$usuario_id) {
                 $view->assign('error_usuario', 'El usuario ingresado no es válido.');
                 $error = TRUE;
             }
         }
         if (!$error) {
             // Verifico estado.
             if ($model_usuario->estado !== Model_Usuario::ESTADO_ACTIVA) {
                 $view->assign('error_usuario', 'El usuario ingresado no es válido.');
                 $error = TRUE;
             }
         }
         if (!$error) {
             // Verifico no se encuentre bloqueado.
             if (Usuario::usuario()->esta_bloqueado($model_usuario->id)) {
                 $view->assign('error_usuario', 'El usuario ingresado no es válido.');
                 $error = TRUE;
             }
         }
         if (!$error) {
             // Bloqueo el usuario.
             Usuario::usuario()->bloquear($model_usuario->id);
             // Envio el suceso.
             $model_suceso = new Model_Suceso();
             if (Usuario::$usuario_id != $model_usuario->id) {
                 $model_suceso->crear($model_usuario->id, 'usuario_bloqueo', TRUE, Usuario::$usuario_id, $model_usuario->id, 0);
                 $model_suceso->crear(Usuario::$usuario_id, 'usuario_bloqueo', FALSE, Usuario::$usuario_id, $model_usuario->id, 0);
             } else {
                 $model_suceso->crear($model_usuario->id, 'usuario_bloqueo', FALSE, Usuario::$usuario_id, $model_usuario->id, 0);
             }
             // Envio notificación.
             $_SESSION['flash_success'] = 'El usuario fue bloqueado correctamente.';
             Request::redirect('/cuenta/bloqueados');
         }
     }
     // Cargo los bloqueos.
     $bloqueos = Usuario::usuario()->bloqueos();
     foreach ($bloqueos as $k => $v) {
         $bloqueos[$k] = $v->as_array();
     }
     $view->assign('bloqueos', $bloqueos);
     // Menu.
     $this->template->assign('master_bar', parent::base_menu('inicio'));
     $this->template->assign('top_bar', $this->submenu('bloqueados'));
     // Asignamos la vista.
     $this->template->assign('contenido', $view->parse());
 }
コード例 #4
0
ファイル: controller.php プロジェクト: 4bs4/marifa
 /**
  * Configuramos parámetros del sistema.
  */
 public function action_configuracion()
 {
     // Cargo la vista.
     $vista = View::factory('configuracion');
     // Seteo el menu.
     $this->template->assign('steps', $this->steps(4));
     // Cargamos las configuraciones.
     $model_configuracion = new Model_Configuracion();
     // Datos por defecto.
     foreach (array('nombre', 'descripcion', 'usuario', 'email', 'password', 'cpassword') as $v) {
         $vista->assign($v, '');
         $vista->assign('error_' . $v, FALSE);
     }
     if (Request::method() == 'POST') {
         // Cargo los valores.
         foreach (array('nombre', 'descripcion', 'usuario', 'email', 'password', 'cpassword') as $v) {
             ${$v} = isset($_POST[$v]) ? trim($_POST[$v]) : '';
         }
         // Limpio los valores.
         $nombre = preg_replace('/\\s+/', ' ', $_POST['nombre']);
         $descripcion = preg_replace('/\\s+/', ' ', $_POST['descripcion']);
         // Seteo nuevos valores a las vistas.
         foreach (array('nombre', 'descripcion', 'usuario', 'email', 'password', 'cpassword') as $v) {
             $vista->assign($v, ${$v});
         }
         $error = FALSE;
         // Verifico el nombre.
         if (!preg_match('/^[a-z0-9áéíóúñ !\\-_\\.]{2,20}$/iD', $nombre)) {
             $error = TRUE;
             $vista->assign('error_nombre', 'El nombre debe tener entre 2 y 20 caracteres. Pueden ser letras, números, espacios, !, -, _, . y \\');
         }
         // Verifico el contenido.
         if (!preg_match('/^[a-z0-9áéíóúñ !\\-_\\.]{5,30}$/iD', $descripcion)) {
             $error = TRUE;
             $vista->assign('error_descripcion', 'La descripción debe tener entre 5 y 30 caracteres. Pueden ser letras, números, espacios, !, -, _, . y \\');
         }
         // Verifico usuario.
         if (!preg_match('/^[a-zA-Z0-9]{4,16}$/D', $usuario)) {
             $error = TRUE;
             $vista->assign('error_usuario', 'El usuario debe tener entren 4 y 16 caracteres alphanumericos.');
         }
         // Verifico email.
         if (!preg_match('/^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/D', $email)) {
             $error = TRUE;
             $vista->assign('error_usuario', 'El E-Mail ingresado no es válido.');
         }
         // Verifico contraseña.
         if (!isset($password[6]) || isset($password[21])) {
             $error = TRUE;
             $vista->assign('error_password', 'La contraseña debe tener entre 6 y 20 caracteres.');
         }
         // Verifico contraseña repetida válida.
         if ($password !== $cpassword) {
             $error = TRUE;
             $vista->assign('error_cpassword', 'Las contraseñas ingresadas no coinciden.');
         }
         // Actualizo los valores.
         if (!$error) {
             // Actualizo las configuraciones.
             $model_configuracion->nombre = $nombre;
             $model_configuracion->descripcion = $descripcion;
             // Cargo modelo de usuarios.
             $model_usuario = new Model_Usuario();
             // Verifico no exista la cuenta.
             if ($model_usuario->exists_nick($usuario)) {
                 // Actualizo los datos.
                 $model_usuario->load_by_nick($usuario);
                 $model_usuario->actualizar_contrasena($password);
                 $model_usuario->actualizar_campo('rango', 1);
                 $model_usuario->actualizar_campo('estado', Model_Usuario::ESTADO_ACTIVA);
                 $model_usuario->actualizar_campo('email', $email);
             } else {
                 // Creo la cuenta.
                 $model_usuario->register($usuario, $email, $password, 1);
                 $model_usuario->load_by_nick($usuario);
                 $model_usuario->actualizar_campo('estado', Model_Usuario::ESTADO_ACTIVA);
             }
             // Seteo el paso como terminado.
             if ($_SESSION['step'] < 4) {
                 $_SESSION['step'] = 4;
             }
             // Redirecciono al siguiente.
             Request::redirect('/installer/finalizacion/');
         }
     }
     // Seteo la vista.
     $this->template->assign('contenido', $vista->parse());
 }
コード例 #5
0
ファイル: buscador.php プロジェクト: 4bs4/marifa
 /**
  * Buscamos un elemento.
  * @param string $query Cadena a buscar.
  * @param int $pagina Numero de página a mostrar.
  * @param string $categoria Nombre de la categoria a utilizar.
  * @param string $usuario Nombre del usuario a utilizar.
  * @return mixed
  */
 public function action_q($query, $pagina, $categoria, $usuario)
 {
     // Verificamos si es POST y redireccionamos.
     if (Request::method() == 'POST') {
         // Query.
         $q = isset($_POST['q']) ? urlencode($_POST['q']) : '';
         // Categoria.
         $c = isset($_POST['categoria']) ? urlencode($_POST['categoria']) : '';
         // Usuario
         $u = isset($_POST['usuario']) ? urlencode($_POST['usuario']) : '';
         if (!empty($u)) {
             $url = sprintf('/buscador/q/%s/1/%s/%s', $q, $c, $u);
         } elseif (!empty($c)) {
             $url = sprintf('/buscador/q/%s/1/%s', $q, $c);
         } else {
             $url = sprintf('/buscador/q/%s', $q);
         }
         Request::redirect($url);
     }
     // Limpiamos la consulta.
     $query = preg_replace('/\\s+/', ' ', urldecode(trim($query)));
     // Limpiamos la categoria.
     $categoria = urldecode(trim($categoria));
     if ($categoria !== 'todos') {
         // Cargamos la categoria.
         $model_categoria = new Model_Categoria();
         if ($model_categoria->existe_seo($categoria)) {
             $model_categoria->load_by_seo($categoria);
         } else {
             unset($model_categoria);
         }
     }
     unset($categoria);
     // Limpiamos nombre de usuario.
     $usuario = urldecode(trim($usuario));
     // Cargamos el usuario.
     $model_usuario = new Model_Usuario();
     if ($model_usuario->exists_nick($usuario)) {
         $model_usuario->load_by_nick($usuario);
     } else {
         unset($model_usuario);
     }
     unset($usuario);
     // Cargamos la vista.
     $vista = View::factory('buscador/index');
     // Verificamos si hay consulta.
     if (!empty($query)) {
         // 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;
         // Realizamos la busqueda.
         $model_post = new Model_Post();
         list($listado, $cantidad) = $model_post->buscar($query, $pagina, $cantidad_por_pagina, isset($model_categoria) ? $model_categoria->id : NULL, isset($model_usuario) ? $model_usuario->id : NULL);
         // Verifivo que la página seleccionada sea válida.
         if (count($listado) == 0 && $pagina != 1) {
             Request::redirect(sprintf('/buscador/q/%s/1/%s/%s', $query, isset($model_categoria) ? $model_categoria->seo : '', isset($model_usuario) ? $model_usuario->id : ''));
         }
         // Paginación.
         $paginador = new Paginator($cantidad, $cantidad_por_pagina);
         $vista->assign('paginacion', $paginador->get_view($pagina, "/buscador/q/{$query}/%s/" . (isset($model_categoria) ? $model_categoria->seo : '') . '/' . (isset($model_usuario) ? $model_usuario->id : '')));
         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);
     }
     // Armamos la vista.
     $vista->assign('q', $query);
     // Listado de categorias.
     $mc = new Model_Categoria();
     $vista->assign('categorias', $mc->lista());
     unset($mc);
     $vista->assign('categoria', isset($model_categoria) ? $model_categoria->seo : 'todos');
     // Usuario actual.
     $vista->assign('usuario', isset($model_usuario) ? $model_usuario->nick : '');
     // Menu.
     $this->template->assign('master_bar', parent::base_menu('posts'));
     $this->template->assign('top_bar', Controller_Home::submenu('buscador'));
     // Asignamos la vista.
     $this->template->assign('contenido', $vista->parse());
 }
コード例 #6
0
ファイル: mensaje.php プロジェクト: 4bs4/marifa
 /**
  * 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());
 }