--- /dev/null
+<?php
+
+class PdoAdministratorManager extends AbstractPdoManager {
+
+ public function editAdministrator(Administrator $administrator){
+ if (! $administrator->username){
+ throw new Exception("Le nom d'utilisateur est obligatoire.");
+ }
+
+ if (! $administrator->password){
+ throw new Exception("Le mot de passe est obligatoire.");
+ }
+
+ if ($administrator->id){
+ $this->updateAdministrator($administrator);
+ return $administrator->id;
+ }
+
+ if ($this->usernameInUse($administrator->username)){
+ throw new Exception("{$administrator->username} est déjà utilisé.");
+ }
+
+ return $this->createAdministrator($administrator);
+ }
+
+
+ public function usernameInUse($username){
+ $sql = "SELECT count(*) FROM administrators WHERE username=?";
+ return $this->queryOne($sql,$username);
+ }
+
+ public function checkPassword($username,$password){
+ $sql = "SELECT password FROM administrators WHERE username=?";
+ $hash_password = $this->queryOne($sql,$username);
+ return password_verify($password,$hash_password);
+ }
+
+ private function hashPassword($password){
+ return password_hash($password,PASSWORD_DEFAULT);
+ }
+
+ public function createAdministrator(Administrator $administrator) {
+ $query = $this -> pdo -> prepare(
+ 'INSERT INTO administrators (
+ username,
+ password,
+ email
+ ) VALUES (
+ :username,
+ :password,
+ :email
+ );'
+ );
+ $query -> bindValue(':username', $administrator -> getUsername());
+ $query -> bindValue(':password', $this->hashPassword($administrator -> getPassword()));
+ $query -> bindValue(':email', $administrator -> getEmail());
+ $query -> execute();
+ return $this->lastInsertId();
+ }
+
+ public function updateAdministrator(Administrator $administrator) {
+
+ $query = $this -> pdo -> prepare(
+ 'UPDATE administrators
+ SET username = :username,
+ password = :password,
+ email = :email
+ WHERE id = :id'
+ );
+ $query -> bindValue(':id', $administrator -> getId());
+ $query -> bindValue(':username', $administrator -> getUsername());
+ $query -> bindValue(':password', $this->hashPassword($administrator -> getPassword()));
+ $query -> bindValue(':email', $administrator -> getEmail());
+ $query -> execute();
+ }
+
+ public function getAdministrator($administrator_id) {
+ $sql = "SELECT * FROM administrators WHERE id = ?";
+ $result = $this->queryOne($sql,$administrator_id);
+ if (! $result){
+ return false;
+ }
+ return new Administrator($result['id'], $result['username'], $result['password'], $result['email']);
+ }
+
+ public function getAdministratorByUsername($username) {
+ $query = $this -> pdo -> prepare('SELECT * FROM administrators WHERE username = :username');
+ $query -> bindValue(':username', $username);
+ $query -> execute();
+
+ $result = $query -> fetch(PDO::FETCH_ASSOC);
+ $administrator = new Administrator($result['id'], $result['username'], $result['password'], $result['email']);
+
+ $query->closeCursor();
+
+ return $administrator;
+ }
+
+ /**
+ * @return Administrator
+ */
+ public function getAdministrators() {
+
+ $query = $this -> pdo -> prepare('SELECT * FROM administrators');
+ $query -> execute();
+
+ $results = $query -> fetchAll(PDO::FETCH_ASSOC);
+ $administrators = array();
+ foreach ($results as $result) {
+ $administrators[] = new Administrator($result['id'], $result['username'], $result['password'], $result['email']);
+ }
+
+ $query->closeCursor();
+ return $administrators;
+ }
+
+ public function delete($administrator_id) {
+ $sql = "DELETE FROM administrators WHERE id = ?";
+ $this->query($sql,$administrator_id);
+ }
+
+
+}
+