aboutsummaryrefslogtreecommitdiff
path: root/classes
diff options
context:
space:
mode:
Diffstat (limited to 'classes')
-rw-r--r--classes/User.php130
1 files changed, 13 insertions, 117 deletions
diff --git a/classes/User.php b/classes/User.php
index 0569433..e3d3f1a 100644
--- a/classes/User.php
+++ b/classes/User.php
@@ -24,14 +24,10 @@
/**
* An interface to the user table in the database
*/
-class User {
- /**
- * @var pdo $pdo The PDO class for database communication
- * @var int $id The id of the user
- * @var string $username The username of the user
- * @var string $password The (hashed) password of the user
- */
- protected $pdo, $id, $username, $password;
+class User extends Model {
+ public
+ $table = 'user',
+ $fillable_columns = ['username', 'password'];
/**
* Generate a random password
@@ -59,104 +55,23 @@ class User {
);
}
- /**
- * Create a new instance
- *
- * @param PDO $pdo The PDO class, to access the database
- * @param int $id The id of the user to fetch
- *
- * @throws PDOException If something went wrong with the database
- * @throws Exception If the user could not be found
- */
- public function __construct($pdo, $id) {
- $this->pdo = $pdo;
-
- $stmt = $this->pdo->prepare("SELECT * FROM `".Constants::db_prefix."user` WHERE `id`=?");
- $stmt->execute(array($id));
- if ($stmt->rowCount() == 0) {
- throw new Exception("The user with id '$id' could not be found.");
+ public function mutator($key, $value) {
+ switch ($key) {
+ case 'password':
+ return self::hash($password);
+ break;
+ default:
+ return parent::mutator($key, $value);
}
- $user = $stmt->fetch(PDO::FETCH_ASSOC);
-
- $this->id = $user['id'];
- $this->username = $user['username'];
- $this->password = $user['password'];
}
- //------------------------------------------------------------------------------
- // Getters and setters
- //------------------------------------------------------------------------------
-
- /**
- * Get the ID of the user
- *
- * @return int The ID
- */
- public function getId() {
- return $this->id;
- }
-
- /**
- * Get the username of the user
- *
- * @return string The username
- */
- public function getUsername() {
- return $this->username;
- }
-
- /**
- * Set the username of the user
- *
- * @param string $username The new username for the user
- *
- * @throws PDOException If something went wrong with the database
- *
- * @return bool True on succes, false on failure
- */
- public function setName($username) {
- $stmt = $this->pdo->prepare("UPDATE `".Constants::db_prefix."user` SET `username`=? WHERE `id`=?");
- $stmt->execute(array($username, $this->id));
- if ($stmt->rowCount() == 1) {
- $this->username = $username;
- return true;
- } else {
- return false;
- }
- }
-
- /**
- * Set the password of the user
- *
- * @param string $password The new password for the user
- *
- * @throws PDOException If something went wrong with the database
- *
- * @return bool True on succes, false on failure
- */
- public function setPassword($password) {
- $password = self::hash($password);
- $stmt = $this->pdo->prepare("UPDATE `".Constants::db_prefix."user` SET `password`=? WHERE `id`=?");
- $stmt->execute(array($password, $this->id));
- if ($stmt->rowCount() == 1) {
- $this->password = $password;
- return true;
- } else {
- return false;
- }
- }
-
- //------------------------------------------------------------------------------
- // Other functions
- //------------------------------------------------------------------------------
-
/**
* Check if a user has administrator rights
*
* @return bool True iff the user has administrator rights
*/
public function isAdmin() {
- return in_array($this->getId(), Constants::user_admins);
+ return in_array($this->id, Constants::user_admins);
}
/**
@@ -172,27 +87,8 @@ class User {
}
if (password_needs_rehash($this->password, Constants::password_algo,
['cost' => Constants::password_cost])) {
- $this->setPassword($password);
+ $this->password = $password;
}
return true;
}
-
- /**
- * Remove this user from the database
- *
- * If this doesn't succeed (i.e. false is returned), that means the user was removed manually or by another instance of this class
- *
- * @throws PDOException If something went wrong with the database
- *
- * @return bool True on success, false on failure
- */
- public function delete() {
- $stmt = $this->pdo->prepare("DELETE FROM `".Constants::db_prefix."user` WHERE `id`=?");
- $stmt->execute(array($this->id));
- if ($stmt->rowCount() != 1) {
- return false;
- } else {
- return true;
- }
- }
}