- Email verification (regular, business owner), CLI administration
This commit is contained in:
+45
-3
@@ -41,6 +41,13 @@ function _hasColumn(PDO $db, string $table, string $column): bool {
|
||||
}
|
||||
|
||||
function _ensureAppUpgrades(PDO $db): void {
|
||||
if (!_hasColumn($db, 'users', 'email_verified_at')) {
|
||||
$db->exec("ALTER TABLE users ADD COLUMN email_verified_at TEXT");
|
||||
$db->exec("UPDATE users SET email_verified_at=datetime('now') WHERE is_active=1");
|
||||
}
|
||||
if (!_hasColumn($db, 'users', 'member_type')) {
|
||||
$db->exec("ALTER TABLE users ADD COLUMN member_type TEXT NOT NULL DEFAULT 'member'");
|
||||
}
|
||||
if (!_hasColumn($db, 'businesses', 'video_url')) {
|
||||
$db->exec("ALTER TABLE businesses ADD COLUMN video_url TEXT NOT NULL DEFAULT ''");
|
||||
}
|
||||
@@ -69,10 +76,27 @@ function _ensureAppUpgrades(PDO $db): void {
|
||||
reviewed_at TEXT
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS idx_claim_requests_status ON business_claim_requests(status, created_at);
|
||||
CREATE TABLE IF NOT EXISTS email_verification_tokens (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
||||
token_hash TEXT NOT NULL UNIQUE,
|
||||
purpose TEXT NOT NULL DEFAULT 'email_verify',
|
||||
expires_at TEXT NOT NULL,
|
||||
used_at TEXT,
|
||||
created_at TEXT NOT NULL DEFAULT(datetime('now'))
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS idx_email_tokens_user ON email_verification_tokens(user_id, purpose, used_at);
|
||||
");
|
||||
|
||||
$defaults = [
|
||||
'home_random_interval' => '2hours',
|
||||
'site_base_url' => '',
|
||||
'mailgun_region' => 'us',
|
||||
'mailgun_domain' => '',
|
||||
'mailgun_api_key' => '',
|
||||
'mailgun_from_name' => 'Discover Keyser WV',
|
||||
'mailgun_from_email' => '',
|
||||
'mailgun_send_mode' => 'html',
|
||||
];
|
||||
$stmt = $db->prepare("INSERT OR IGNORE INTO settings(key,value)VALUES(?,?)");
|
||||
foreach ($defaults as $k => $v) $stmt->execute([$k, $v]);
|
||||
@@ -93,6 +117,8 @@ function _schema(PDO $db): void {
|
||||
password TEXT NOT NULL,
|
||||
is_admin INTEGER NOT NULL DEFAULT 0,
|
||||
is_active INTEGER NOT NULL DEFAULT 1,
|
||||
email_verified_at TEXT,
|
||||
member_type TEXT NOT NULL DEFAULT 'member',
|
||||
created_at TEXT NOT NULL DEFAULT(datetime('now')),
|
||||
last_login TEXT
|
||||
);
|
||||
@@ -148,6 +174,15 @@ function _schema(PDO $db): void {
|
||||
created_at TEXT NOT NULL DEFAULT(datetime('now')),
|
||||
reviewed_at TEXT
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS email_verification_tokens(
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
||||
token_hash TEXT NOT NULL UNIQUE,
|
||||
purpose TEXT NOT NULL DEFAULT 'email_verify',
|
||||
expires_at TEXT NOT NULL,
|
||||
used_at TEXT,
|
||||
created_at TEXT NOT NULL DEFAULT(datetime('now'))
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS reviews(
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
business_id INTEGER NOT NULL REFERENCES businesses(id) ON DELETE CASCADE,
|
||||
@@ -239,13 +274,20 @@ function _seed(PDO $db): void {
|
||||
'site_tagline'=>'The Friendliest City in the U.S.A.',
|
||||
'contact_email'=>'info@discoverkeyser.com',
|
||||
'events_require_approval'=>'1',
|
||||
'home_random_interval'=>'2hours'] as $k=>$v)
|
||||
'home_random_interval'=>'2hours',
|
||||
'site_base_url'=>'',
|
||||
'mailgun_region'=>'us',
|
||||
'mailgun_domain'=>'',
|
||||
'mailgun_api_key'=>'',
|
||||
'mailgun_from_name'=>'Discover Keyser WV',
|
||||
'mailgun_from_email'=>'',
|
||||
'mailgun_send_mode'=>'html'] as $k=>$v)
|
||||
qrun("INSERT OR IGNORE INTO settings(key,value)VALUES(?,?)",[$k,$v]);
|
||||
|
||||
/* Admin user — password "password123" */
|
||||
$hash = password_hash('password123', PASSWORD_BCRYPT);
|
||||
qrun("INSERT OR IGNORE INTO users(username,email,password,is_admin)
|
||||
VALUES('administrator','admin@discoverkeyser.com',?,1)",[$hash]);
|
||||
qrun("INSERT OR IGNORE INTO users(username,email,password,is_admin,email_verified_at,member_type)
|
||||
VALUES('administrator','admin@discoverkeyser.com',?,1,datetime('now'),'member')",[$hash]);
|
||||
|
||||
/* Categories */
|
||||
foreach ([
|
||||
|
||||
Reference in New Issue
Block a user