/** Recibe un peticion para crear una cuenta de usuario
  * 
  * @param Request $request
  * @return string
  */
 function postCreateAccount(Request $request)
 {
     $data = $request->all();
     // return redirect()->back()->with("error","El registro de usuarios no esta habilitado en este momento.");
     if (strlen($data[User::ATTR_NAME]) == 0 || strlen($data[User::ATTR_LASTNAME]) == 0 || !filter_var($data[User::ATTR_EMAIL], FILTER_VALIDATE_EMAIL) || strlen($data[User::ATTR_PASSWORD]) < 6) {
         return redirect()->back()->with(User::ATTR_NAME, $data[User::ATTR_NAME])->with(User::ATTR_LASTNAME, $data[User::ATTR_LASTNAME])->with(User::ATTR_EMAIL, $data[User::ATTR_EMAIL])->with("error", trans("gen.info.error"));
     }
     //*******************************************
     //CONTROL DE CAPTCHA
     //*******************************************
     //   $response=file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=6LdEcQ4TAAAAABgMkSCLV3iVH-sXXk5Xqb79dfNt&response=".$data["g-recaptcha-response"]."&remoteip=".$_SERVER['REMOTE_ADDR']);
     $reCaptcha = new ReCaptcha("6LdEcQ4TAAAAABgMkSCLV3iVH-sXXk5Xqb79dfNt");
     // si se detecta la respuesta como enviada
     if (!$data["g-recaptcha-response"]) {
         return redirect()->back()->with(User::ATTR_NAME, $data[User::ATTR_NAME])->with(User::ATTR_LASTNAME, $data[User::ATTR_LASTNAME])->with(User::ATTR_EMAIL, $data[User::ATTR_EMAIL])->with("error-captcha", trans("gen.error.captcha"));
     }
     $response = $reCaptcha->verifyResponse($_SERVER["REMOTE_ADDR"], $data["g-recaptcha-response"]);
     //Valida el captcha
     if ($response == null || !$response->success) {
         return redirect()->back()->with(User::ATTR_NAME, $data[User::ATTR_NAME])->with(User::ATTR_LASTNAME, $data[User::ATTR_LASTNAME])->with(User::ATTR_EMAIL, $data[User::ATTR_EMAIL])->with("error-captcha", trans("gen.error.captcha"));
     }
     //Verifica si el corre ingresado existe
     if (User::existEmail($data[User::ATTR_EMAIL])) {
         return redirect()->back()->with(User::ATTR_NAME, $data[User::ATTR_NAME])->with(User::ATTR_LASTNAME, $data[User::ATTR_LASTNAME])->with(User::ATTR_EMAIL, $data[User::ATTR_EMAIL])->with("error", "El correo electrónico ingresado ya esta registrado");
     }
     $keyActivation = \hash("sha256", $data[User::ATTR_EMAIL]);
     $user = new User();
     $user->name = ucfirst($data[User::ATTR_NAME]);
     $user->lastname = ucfirst($data[User::ATTR_LASTNAME]);
     $user->email = $data[User::ATTR_EMAIL];
     $user->password = bcrypt($data[User::ATTR_PASSWORD]);
     $user->state = User::STATE_UNCONFIRMED_ACCOUNT;
     $user->role = User::ROLE_SUSCRIPTOR;
     $user->keyActivation = $keyActivation;
     $user->save();
     //Crea las carpetas de manejo de archivos del usuarios
     mkdir(public_path($user->getPathTemporal()));
     mkdir(public_path($user->getPathUploads()));
     $activationLink = url("user/confirm/email/" . $keyActivation);
     $description = "<p>Este correo electrónico ha sido asociado a una nueva cuenta en bandicot&#46;com, para poder usar esta cuenta es necesario activarla confirmando este correo electrónico.</p>" . "<p>Para confirmar este correo electrónico debes hacer clic en botón \"Activar cuenta\" que se muestra a continuación:<br/><br/>" . "<a style='display: block;padding: 10px;border: 1px black solid;width: 200px;text-align: center;color: white;background: red;-webkit-border-radius: 5px;-moz-border-radius: 5px;border-radius: 5px;font-style: normal;text-transform: uppercase;margin: auto;' href='" . $activationLink . "' target='_blank'>Activar cuenta</a></p>" . "<p>Si el botón no funciona, copia y pega el siguiente enlace para activar tu cuenta:<br/><br/>{$activationLink}</p>" . "<p><i><b>Atención:<b/> Si crees que se ha tratado de una equivocación, por favor ignora este mensaje.</i></p>";
     $email = new Email("Activación de cuenta", $data[User::ATTR_EMAIL], [Email::VAR_NAME => $user->name, Email::VAR_DESCRIPTION => $description]);
     $email->send();
     Auth::loginUsingId($user->id);
     return redirect("user/dashboard")->with(UI::modalMessage("¡Bienvenido a Bandicot.com!", view("ui/msg/contents/bienvenido-a-bandicot-com")->render()));
 }
 public function postRecovery(Request $request)
 {
     $data = $request->all();
     $email = $data[User::ATTR_EMAIL];
     if (!User::existEmail($email)) {
         return redirect()->back()->withInput()->with(UI::message(UI::MESSAGE_TYPE_ERROR, "El correo electrónico ingresado no existe"));
     }
     $user = User::where(User::ATTR_EMAIL, $email)->get()[0];
     $token = str_random(10);
     $reset = new PasswordReset();
     $reset->user_id = $user->id;
     $reset->email = $user->email;
     $reset->token = $token;
     $reset->active = Util::convertBooleanToInt(true);
     $reset->created_at = DateUtil::getCurrentTime();
     $reset->save();
     $description = "<p>Hemos recibido una solicitud para restablecer la contraseña de tu cuenta en Bandicot, para poder reiniciar tu contraseña debes ingresar este código de seguridad:</p>" . "<p>Código:</p>" . "<p style='font-weigth:bold;font-size:15pt;'>" . $token . "</p>" . "<p>Cópialo y pégalo en el formulario donde lo solicitastes. El código tiene una vigencia de 2 horas.</p> ";
     $email_send = new Email("Recuperación de contraseña", $user->email, [Email::VAR_NAME => $user->name, Email::VAR_DESCRIPTION => $description]);
     $email_send->send();
     return redirect("user/auth/recovery?request=send-mail&form=token")->with(User::ATTR_EMAIL, $email);
 }
 /** Envia un correo de usuario para activar su cuenta. (user/account/ajax/send/email/confirmation)
  *  
  */
 function ajaxSendConfirmation(Request $request)
 {
     if (!$request->ajax()) {
         return;
     }
     $description = "<p>Este correo electrónico ha sido asociado a una nueva cuenta en bandicot&#46;com, para poder usar esta cuenta es necesario activarla confirmando este correo electrónico.</p>" . "<p>Para confirmar este correo electrónico debes hacer clic en botón \"Activar cuenta\" que se muestra a continuación:<br/><br/>" . "<a style='display: block;padding: 10px;border: 1px black solid;width: 200px;text-align: center;color: white;background: red;-webkit-border-radius: 5px;-moz-border-radius: 5px;border-radius: 5px;font-style: normal;text-transform: uppercase;margin: auto;' href='" . Auth::user()->keyActivation . "' target='_blank'>Activar cuenta</a></p>" . "<p><i><b>Atención:<b/> Si crees que se ha tratado de una equivocación, por favor ignora este mensaje.</i></p>";
     $email = new Email("Activación de cuenta", Auth::user()->email, [Email::VAR_NAME => Auth::user()->name, Email::VAR_DESCRIPTION => $description]);
     $email->send();
     return json_encode(array());
 }