save-new-user-email.php
06fbd764
 <?php
 /**
  *  Copyright (C) 2021  Double Bastion LLC
  *
  *  This file is part of Roundpin, which is licensed under the
  *  GNU Affero General Public License Version 3.0. The license terms
  *  are detailed in the "LICENSE.txt" file located in the root directory.
  */
 
 session_start();
 
 if (isset($_POST['s_ajax_call']) && ($_POST['s_ajax_call'] == $_SESSION['validate_s_access'])) {
 
  define('ACCESSCONST', TRUE);
 
  require('db-connect.php');
 
     $username = $_POST['username'];
     $currentEmail = $_POST['current_email'];
     $newEmail = $_POST['new_email'];
 
     // Get the email address of the current user from the 'app_users' table
     $queryemail = $mysqli->query("SELECT id, username, emailaddress, enabled FROM app_users WHERE username = '$username' AND enabled = 1");
     $emailfromdb = $queryemail->fetch_row();
     $fetchedemailfromdb = $emailfromdb[2];
 
     // Check if there is any other user with the same email address as the new email address
     $getemails = $mysqli->query("SELECT emailaddress FROM app_users");
 
     $duplicateemail = 0;
 
     while ($row = $getemails->fetch_row()) {
 
            if ($newEmail == $row[0]) {
                $duplicateemail = 1;
                break;
            }
     }
 
 
     if ($fetchedemailfromdb == $currentEmail) {
 
        if ($duplicateemail == 0) {
 
            /**
             *  Send the verification email
             */
 
            // Generate a random string to be used as the termination of the verification link
            function random_str($length, $keyspace = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ') {
                     $pieces = [];
                     $max = mb_strlen($keyspace, '8bit') - 1;
 
                     for ($i = 0; $i < $length; ++$i) {
                          $pieces []= $keyspace[random_int(0, $max)];
                     }
                     return implode('', $pieces);
            }
 
            $token = random_str(55);
 
            // Enter the new token in the database
            $entertokenquery = $mysqli->query("UPDATE app_users SET token = '$token' WHERE username = '$username' AND registered = 1 AND enabled = 1");
 
            // Create the verification email
            $verificationLink = $_SERVER['REQUEST_SCHEME'] . "://" . $_SERVER['HTTP_HOST'] . "/change-email-verification.php?token=" . $token . "&newemail=" . $newEmail;
 
            $domaininit = explode(".", $_SERVER['HTTP_HOST']);
            array_shift($domaininit);
            $domain = implode(".", $domaininit);
 
            $headers = "MIME-Version: 1.0" . "\r\n";
            $headers .= "Content-type: text/html; charset=UTF-8" . "\r\n";
 
            $headers .= "From: " . "no-reply@" . $domain . "\r\n";
 
            $subject = "Roundpin email address verification";
 
            $message = "Hello, <br><br>
                        We have received your email address change request. To change your current Roundpin email address, please verify your address by clicking on
                        the link from below: <br><br>
                        <a href='".$verificationLink."'>".$verificationLink."</a><br><br>
                        Alternatively, you can copy the link and paste it in the address bar of your browser.<br><br>
                        After email address verification, your new email address will be assigned to your Roundpin account and saved to the database.<br><br>
                        Thank you,<br>
                        Roundpin<br>
                        Host: '" . $_SERVER['HTTP_HOST'] . "'";
 
            // Send the verification email
            mail($newEmail, $subject, $message, $headers);
 
            $emailchangemessage = "An email has been sent to your new email address. Please click on the link included in the received email to change your Roundpin user email address.";
 
        } else { $emailchangemessage = "The new email address is already used by another Roundpin user. Please, choose a different email address!"; }
         
     } else { $emailchangemessage = "The email address you have entered in the 'Current Email' field doesn't match your current email address!"; }
 
     echo json_encode($emailchangemessage);
 
 } else {
         header("Location: roundpin-login.php");
 }
 
 ?>