From 4a73aa38ca7eab5c76ee0890f3b6a73b6529780c Mon Sep 17 00:00:00 2001 From: cflip <36554078+cflip@users.noreply.github.com> Date: Sat, 21 Aug 2021 13:57:33 -0600 Subject: Show who the user was invited by on user page --- includes/model/User.php | 25 +++++++++++++++++++------ meta/setup.sql | 1 + viewuser.php | 9 ++++++++- 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/includes/model/User.php b/includes/model/User.php index 8e28239..3515fad 100755 --- a/includes/model/User.php +++ b/includes/model/User.php @@ -24,6 +24,7 @@ class User public $level = 'user'; public $invite_code; public $generation; + public $invited_by; private $has_value = false; @@ -31,7 +32,7 @@ class User // and PHP does not allow function overloading. public function get_by_id($id) { - $sql = "SELECT user_name, user_password, user_date_registered, user_level, user_invite_code, user_generation FROM users WHERE user_id = ?;"; + $sql = "SELECT user_name, user_password, user_date_registered, user_level, user_invite_code, user_generation, user_invited_by FROM users WHERE user_id = ?;"; $result = Database::get()->query($sql, "i", $id); if (empty($result)) { @@ -45,6 +46,7 @@ class User $this->level = $result[0]['user_level']; $this->invite_code = $result[0]['user_invite_code']; $this->generation = $result[0]['user_generation']; + $this->invited_by = $result[0]['user_invited_by']; $this->has_value = true; } @@ -52,7 +54,7 @@ class User // TODO: Duplicated code, there should be a common database read function for all models public function get_by_name($name) { - $sql = "SELECT user_id, user_password, user_date_registered, user_level, user_invite_code, user_generation FROM users WHERE user_name = ?;"; + $sql = "SELECT user_id, user_password, user_date_registered, user_level, user_invite_code, user_generation, user_invited_by FROM users WHERE user_name = ?;"; $result = Database::get()->query($sql, "s", $name); if (empty($result)) { @@ -66,13 +68,14 @@ class User $this->level = $result[0]['user_level']; $this->invite_code = $result[0]['user_invite_code']; $this->generation = $result[0]['user_generation']; + $this->invited_by = $result[0]['user_invited_by']; $this->has_value = true; } public function get_by_invite_code($invite_code) { - $sql = "SELECT user_id, user_name, user_password, user_date_registered, user_level, user_generation FROM users WHERE user_invite_code = ?;"; + $sql = "SELECT user_id, user_name, user_password, user_date_registered, user_level, user_generation, user_invited_by FROM users WHERE user_invite_code = ?;"; $result = Database::get()->query($sql, "s", $invite_code); if (empty($result)) { @@ -86,21 +89,31 @@ class User $this->level = $result[0]['user_level']; $this->invite_code = $invite_code; $this->generation = $result[0]['user_generation']; + $this->invited_by = $result[0]['user_invited_by']; $this->has_value = true; } + public function get_inviter(): User + { + $result = new User(); + $result->get_by_id($this->invited_by); + return $result; + } + public function has_value(): bool { return $this->has_value; } - public static function register(string $username, string $password, int $generation) + public static function register(string $username, string $password, User $invited_by) { - $sql = "INSERT INTO users(user_name, user_password, user_date_registered, user_invite_code, user_generation) VALUES(?, ?, NOW(), ?, ?);"; + $sql = "INSERT INTO users(user_name, user_password, user_date_registered, user_invite_code, user_generation, user_invited_by) VALUES(?, ?, NOW(), ?, ?, ?);"; $pass_hash = password_hash($password, PASSWORD_DEFAULT); $invite_code = generate_invite_code(); - Database::get()->query($sql, "sssi", $username, $pass_hash, $invite_code, $generation); + + $generation = $invited_by->generation + 1; + Database::get()->query($sql, "sssii", $username, $pass_hash, $invite_code, $generation, $invited_by->id); } public function update_invite_code() diff --git a/meta/setup.sql b/meta/setup.sql index dff7769..7f7d48d 100644 --- a/meta/setup.sql +++ b/meta/setup.sql @@ -6,6 +6,7 @@ CREATE TABLE users ( user_date_registered DATETIME NOT NULL, user_invite_code VARCHAR(8) NOT NULL, user_generation INT NOT NULL, + user_invited_by INT, UNIQUE INDEX user_name_unique (user_name), UNIQUE INDEX user_invite_unique (user_invite_code), PRIMARY KEY (user_id) diff --git a/viewuser.php b/viewuser.php index 33d8636..19f034c 100755 --- a/viewuser.php +++ b/viewuser.php @@ -25,7 +25,14 @@ if (!$current->has_value()) {
Your invite code is = $current->invite_code ?>
-- cgit v1.2.3