illustration

Coming Soon

New WordPress website is being built and will be published soon

/* ============================================ * AJAX HANDLERS * ============================================ */ // REGISTER add_action('wp_ajax_nopriv_mmae_register', 'mmae_handle_register'); function mmae_handle_register() { if (!isset($_POST['nonce']) || !wp_verify_nonce($_POST['nonce'], 'mmae_register')) { wp_send_json_error(array('message' => 'Security error')); } $username = isset($_POST['username']) ? sanitize_user($_POST['username']) : ''; $email = isset($_POST['email']) ? sanitize_email($_POST['email']) : ''; $password = isset($_POST['password']) ? $_POST['password'] : ''; if (empty($username) || empty($email) || empty($password)) { wp_send_json_error(array('message' => 'All fields are required.')); } if (strlen($username) < 3) { wp_send_json_error(array('message' => 'Username must be at least 3 characters.')); } if (strlen($password) < 6) { wp_send_json_error(array('message' => 'Password must be at least 6 characters.')); } if (!is_email($email)) { wp_send_json_error(array('message' => 'Invalid email address.')); } if (username_exists($username)) { wp_send_json_error(array('message' => 'Username already exists.')); } if (email_exists($email)) { wp_send_json_error(array('message' => 'Email already registered.')); } $user_id = wp_create_user($username, $password, $email); if (is_wp_error($user_id)) { wp_send_json_error(array('message' => $user_id->get_error_message())); } // Pending activation update_user_meta($user_id, 'mmae_status', 'pending'); $key = wp_generate_password(32, false); update_user_meta($user_id, 'mmae_key', $key); // Send email $activation_url = add_query_arg(array( 'action' => 'mmae_activate', 'key' => $key, 'user' => $user_id ), home_url()); $subject = '🎵 MiMusicA - Activate Your Account'; $message = "Welcome to MiMusicA!\n\nClick to activate: " . $activation_url . "\n\nMiMusicA Team"; wp_mail($email, $subject, $message); wp_send_json_success(array('message' => '✅ Account created! Check your email to activate.')); } // ACTIVATION add_action('template_redirect', 'mmae_handle_activation'); function mmae_handle_activation() { if (!isset($_GET['action']) || $_GET['action'] !== 'mmae_activate') { return; } $key = isset($_GET['key']) ? sanitize_text_field($_GET['key']) : ''; $user_id = isset($_GET['user']) ? intval($_GET['user']) : 0; if (empty($key) || !$user_id) { wp_die('Invalid link'); } $stored_key = get_user_meta($user_id, 'mmae_key', true); if ($key !== $stored_key) { wp_die('Invalid key'); } update_user_meta($user_id, 'mmae_status', 'active'); delete_user_meta($user_id, 'mmae_key'); wp_redirect(home_url('/?activated=1')); exit; } // CHECK ACTIVATION add_filter('wp_authenticate_user', 'mmae_check_activation', 10, 2); function mmae_check_activation($user, $password) { if (is_wp_error($user)) { return $user; } $status = get_user_meta($user->ID, 'mmae_status', true); if ($status === 'pending') { return new WP_Error('not_activated', 'Please activate your account via email.'); } return $user; } // RESET PASSWORD add_action('wp_ajax_nopriv_mmae_reset', 'mmae_handle_reset'); function mmae_handle_reset() { if (!isset($_POST['nonce']) || !wp_verify_nonce($_POST['nonce'], 'mmae_reset')) { wp_send_json_error(array('message' => 'Security error')); } $email = isset($_POST['email']) ? sanitize_email($_POST['email']) : ''; if (empty($email) || !is_email($email)) { wp_send_json_error(array('message' => 'Invalid email.')); } $user = get_user_by('email', $email); if (!$user) { wp_send_json_error(array('message' => 'No account with that email.')); } $reset_key = get_password_reset_key($user); if (is_wp_error($reset_key)) { wp_send_json_error(array('message' => 'Error generating link.')); } $reset_url = add_query_arg(array( 'action' => 'mmae_reset_form', 'key' => $reset_key, 'login' => rawurlencode($user->user_login) ), home_url()); $subject = '🎵 MiMusicA - Reset Password'; $message = "Click to reset: " . $reset_url . "\n\nThe MiMusicA Team"; wp_mail($email, $subject, $message); wp_send_json_success(array('message' => '✅ Reset link sent! Check your email.')); } // RESET FORM add_action('template_redirect', 'mmae_reset_form'); function mmae_reset_form() { if (!isset($_GET['action']) || $_GET['action'] !== 'mmae_reset_form') { return; } $key = isset($_GET['key']) ? sanitize_text_field($_GET['key']) : ''; $login = isset($_GET['login']) ? sanitize_text_field($_GET['login']) : ''; if (empty($key) || empty($login)) { wp_die('Invalid link'); } $user = check_password_reset_key($key, $login); if (is_wp_error($user)) { wp_die('Invalid or expired link'); } if ($_SERVER['REQUEST_METHOD'] === 'POST') { $new_password = isset($_POST['new_password']) ? $_POST['new_password'] : ''; if (strlen($new_password) < 6) { wp_die('Password must be at least 6 characters'); } reset_password($user, $new_password); wp_redirect(home_url('/?password_reset=1')); exit; } ?> Reset Password - MiMusicA

Reset Password

Enter your new password