/** * 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()); }
/** * 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()); }
/** * 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()); }
/** * 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()); }
/** * 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()); }