ID = $ID; $this->connected = FALSE; $req = $GLOBALS['bdd']->prepare('SELECT * FROM membres WHERE ID=?'); $req->execute(array($ID)); if($rep = $req->fetch()){ $this->valid = TRUE; $this->pseudo = $rep['pseudo']; $this->adminLevel = $rep['adminLevel']; $this->dateCreation = $rep['dateCreation']; $this->hashedPassword = $rep['hashedPassword']; $this->decodeData($rep['data']); }else{ $this->valid = FALSE; } } public function connect($password) { $this->connected = password_verify ( $this->pass, $rep ['mdp'] ); return $this->connected; } public function __toString(){ $out = 'Membre\n'; $out .= '\tID:' . $this->ID . '\n'; $out .= '\tPseudo:' . $this->pseudo . '\n'; $out .= '\tAdmin level:' . $this->adminLevel . '\n'; $out .= '\tDate of creation:' . $this->dateCreation . '\n'; $out .= '\tRequired banner:' . $this->requiredBanner . '\n'; $out .= '\tPersonnal message:' . $this->personnalMessage . '\n'; return out; } public function isConnected(){ return $this->connected; } public function exists(){ return $this->valid; } private function decodeData($data) { $jsonData = json_decode ( $data ); // Set the data's required_banner if it is defined , otherwise sets the DEFAULT_BANNER $this->requiredBanner = $jsonData ['requiredBanner'] ?? self::DEFAULT_BANNER; $this->personnalMessage = $jsonData ['personnalMessage'] ?? NULL; } //Getters public function getID(){ return $this->ID; } public function getPseudo(){ return $this->pseudo; } public function getAdminLevel() { return $this->adminLevel; } public function getDateCreation(){ return $this->dateCreation; } public function getRequiredBanner() { return $this->requiredBanner; } public function getPersonnalMessage(){ return $this->personnalMessage; } //Useful getters public function isAdminLevelLowerThan($max){ return $this->adminLevel<$max; } public function isAdminLevelGreaterThan($min){ return $this->adminLevel>$max; } public function isAdminLevelLowerOrEqualThan($max){ return $this->adminLevel<$max; } public function isAdminLevelGreaterOrEqualThan($min){ return $this->adminLevel>$max; } public function hasPersonnalMessage() { return isset ( $this->personnalMessage ); } public function showPersonnalMessage() { $msg = $this->personnalMessage; $this->setPersonnalMessage = NULL; return $msg; } //Setters public function changePassword($newPassword){ if(strlen($newPassword)>255) return Membre::PASSWORD_TOO_LONG; $req = $GLOBALS['bdd']->prepare('UPDATE membres SET mdp=? WHERE ID=?'); $req->execute(array(password_hash ( $newPassword, PASSWORD_DEFAULT ),$this->ID)); return Membre::PASSWORD_CHANGED; } //Membre getters private static function memberGetterOutput($req){ $out = array(); while($rep = $req->fetch()) $out[] = new Membre($rep['ID']); switch(count($out)){ case 0: return NULL; case 1: return $out[0]; default: return $out; } } public static function getFromPseudo($pseudo){ $req = $GLOBALS['bdd']->prepare('SELECT * FROM membres WHERE pseudo=?'); $req->execute(array($pseudo)); return membreGetterOutput($req); } public static function getFromAdminLevel($level){ $req = $GLOBALS['bdd']->prepare('SELECT * FROM membres WHERE adminLevel=?'); $req->execute(array($level)); return membreGetterOutput($req); } public static function getFromDateCreation($date){ $req = $GLOBALS['bdd']->prepare('SELECT * FROM membres WHERE dateCreation=?'); $req->execute(array($date)); return membreGetterOutput($req); } public static function getCreatedLaterThan($date){ $req = $GLOBALS['bdd']->prepare('SELECT * FROM membres WHERE dateCreation>?'); $req->execute(array($date)); return membreGetterOutput($req); } public static function getCreatedEarlierThan($date){ $req = $GLOBALS['bdd']->prepare('SELECT * FROM membres WHERE dateCreationexecute(array($date)); return membreGetterOutput($req); } public static function getAdminGreaterThan($min){ $req = $GLOBALS['bdd']->prepare('SELECT * FROM membres WHERE adminLevel>?'); $req->execute(array($min)); return membreGetterOutput($req); } public static function getAdminLowerThan($max){ $req = $GLOBALS['bdd']->prepare('SELECT * FROM membres WHERE adminLevelexecute(array($max)); return membreGetterOutput($req); } //Membre creator public static function registerPerson($pseudo, $mdp) { if (Membre::getFromPseudo($pseudo)) return Membre::USED_USERNAME; $req = $GLOBALS ['bdd']->prepare ('INSERT INTO membres(pseudo,mdp,date_creation) VALUES (?,?,NOW())'); $req->execute (array($pseudo,password_hash( $mdp, PASSWORD_DEFAULT))); return Membre::USERNAME_CHANGED; } //Outputs texts //changePassword const PASSWORD_TOO_LONG = 'Le mot de passe est trop long ! (Max : 255 caractères)'; const PASSWORD_CHANGED = 'Le mot de passe a bien été changé'; //registerPerson const USED_USERNAME = 'Le pseudonyme est déjà utilisé'; const PERSON_REGISTERED = 'Le membre a bien été inscrit !'; }