implemented email functionality, users can now request to become contributors.

This commit is contained in:
2025-04-03 13:25:01 -06:00
parent e5af3aca66
commit 7eebc920a2
5 changed files with 62 additions and 7 deletions
+1 -1
View File
@@ -5,7 +5,7 @@
"require": { "require": {
"erusev/parsedown": "^1.7", "erusev/parsedown": "^1.7",
"vlucas/phpdotenv": "^5.6", "vlucas/phpdotenv": "^5.6",
"phpmailer/phpmailer": "^6.9" "wildbit/postmark-php": "^6.0"
}, },
"authors": [ "authors": [
{ {
+35 -3
View File
@@ -2,6 +2,8 @@
require_once 'db_functions.php'; require_once 'db_functions.php';
require_once 'article_functions.php'; require_once 'article_functions.php';
use Postmark\PostmarkClient;
function user_id_exists($user_id) function user_id_exists($user_id)
{ {
$conn = get_connection(); $conn = get_connection();
@@ -361,7 +363,7 @@ function request_role_change_form()
while ($row = $result->fetch_assoc()) { while ($row = $result->fetch_assoc()) {
$roles .= ' $roles .= '
<label class="form_checkbox_container">' . $row['role'] . ' <label class="form_checkbox_container">' . $row['role'] . '
<input name="requested_role" value="' . $row['role_id'] . '" type="checkbox"' . ($row['role_id'] == $_COOKIE['role_id'] ? ' checked' : '') . '> <input name="requested_role" value="' . $row['role_id'] . '" type="radio"' . ($row['role_id'] == $_COOKIE['role_id'] ? ' checked' : '') . '>
<span class="checkmark"></span> <span class="checkmark"></span>
</label> </label>
'; ';
@@ -374,7 +376,7 @@ function request_role_change_form()
<h5 class="underline">Request Role</h5> <h5 class="underline">Request Role</h5>
<span class="modal_close">&times;</span> <span class="modal_close">&times;</span>
<form method="post"> <form method="post">
<input type="hidden" name="form_id" value="request_role_form"> <input type="hidden" name="form_id" value="request_role_change_form">
' . $roles . ' ' . $roles . '
<input type="submit" class="button" value="Request Role"> <input type="submit" class="button" value="Request Role">
@@ -387,7 +389,35 @@ function request_role_change_form()
function request_role_change($user_id, $new_role_id) function request_role_change($user_id, $new_role_id)
{ {
// TODO: Need to implement email handler first. $conn = get_connection();
$stmt = $conn->prepare('SELECT user_id, username, email, roles.role, created_at FROM user INNER JOIN roles WHERE user.role_id = roles.role_id AND user_id = ?');
$stmt->bind_param('i', $user_id);
$stmt->execute();
$user = $stmt->get_result()->fetch_assoc();
$stmt = $conn->prepare('SELECT role FROM roles WHERE role_id = ?');
$stmt->bind_param('i', $new_role_id);
$stmt->execute();
$new_role = $stmt->get_result()->fetch_array();
$email_html = '
<h1>User Role Change Request</h1>
<p>The following user has requested their role on vintagecoding.net to be changed:</p>
<p><strong>User ID: </strong>' . $user['user_id'] . '</p>
<p><strong>Username: </strong>' . $user['username'] . '</p>
<p><strong>Email: </strong>' . $user['email'] . '</p>
<p><strong>Current Role: </strong>' . $user['role'] . ' -> ' . $new_role[0] . '</p>
<p><strong>Created At: </strong>' . $user['created_at'] . '</p>
';
$client = new PostmarkClient($_ENV['POSTMARK_API_TOKEN']);
$send_result = $client->sendEmail(
'mailer@joshashton.dev',
'me@joshashton.dev',
'User Role Change Request - ' . $user['user_id'],
$email_html
);
} }
function delete_account_form() function delete_account_form()
@@ -524,6 +554,7 @@ function user_view($user_id)
<button id="reset_pw_form_button" class="modal_button underline">Reset Password</button> <button id="reset_pw_form_button" class="modal_button underline">Reset Password</button>
<button id="update_email_form_button" class="modal_button underline">Update Email</button> <button id="update_email_form_button" class="modal_button underline">Update Email</button>
<button id="update_username_form_button" class="modal_button underline">Update Username</button> <button id="update_username_form_button" class="modal_button underline">Update Username</button>
<button id="request_role_form_button" class="modal_button underline">Request Role</button>
<button id="delete_account_form_button" class="modal_button underline">Delete Account</button> <button id="delete_account_form_button" class="modal_button underline">Delete Account</button>
</div> </div>
@@ -535,6 +566,7 @@ function user_view($user_id)
<div id="reset_pw_form" class="modal_form">' . reset_pw_form() . '</div> <div id="reset_pw_form" class="modal_form">' . reset_pw_form() . '</div>
<div id="update_email_form" class="modal_form">' . update_email_form() . '</div> <div id="update_email_form" class="modal_form">' . update_email_form() . '</div>
<div id="update_username_form" class="modal_form">' . update_username_form() . '</div> <div id="update_username_form" class="modal_form">' . update_username_form() . '</div>
<div id="request_role_change_form" class="modal_form">' . request_role_change_form() . '</div>
<div id="delete_account_form" class="modal_form">' . delete_account_form() . '</div> <div id="delete_account_form" class="modal_form">' . delete_account_form() . '</div>
</div> </div>
</div> </div>
+3 -3
View File
@@ -15,12 +15,12 @@ document.addEventListener('DOMContentLoaded', function() {
case 'update_username_form_button': case 'update_username_form_button':
openModal('update_username_form'); openModal('update_username_form');
break; break;
case 'request_role_form_button':
openModal("request_role_change_form");
break;
case 'delete_account_form_button': case 'delete_account_form_button':
openModal('delete_account_form'); openModal('delete_account_form');
break; break;
// case 3:
// openModal("request_role_form");
// break;
default: default:
break; break;
} }
+17
View File
@@ -0,0 +1,17 @@
<?php
require_once 'vendor/autoload.php';
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->safeLoad();
use Postmark\PostmarkClient;
$client = new PostmarkClient($_ENV['POSTMARK_API_TOKEN']);
$send_result = $client->sendEmail(
"mailer@joshashton.dev",
"me@joshashton.dev",
"Postmark PHP Test",
"This is a test. Do not be alarmed."
);
+6
View File
@@ -59,6 +59,12 @@ if (isset($_POST['form_id'])) {
$_POST['verify_new_username'] $_POST['verify_new_username']
); );
break; break;
case 'request_role_change_form':
request_role_change(
$_COOKIE['user_id'],
$_POST['requested_role']
);
break;
case 'delete_account_form': case 'delete_account_form':
$msg = delete_account( $msg = delete_account(
($_COOKIE['role_id'] <= 2 && $_COOKIE['user_id'] != $_POST['user_id'] ? $_POST['user_id'] : $_COOKIE['user_id']), ($_COOKIE['role_id'] <= 2 && $_COOKIE['user_id'] != $_POST['user_id'] ? $_POST['user_id'] : $_COOKIE['user_id']),