ID = $ID; $req = $GLOBALS['bdd']->prepare('SELECT * FROM megaStockages WHERE ID=?'); $req->execute(array($ID)); if($rep = $req->fetch()){ $this->valid = TRUE; $this->accountID = $rep['accountID']; $this->accountPassword = $rep['accountPassword']; $this->owner = new Membre($rep['owner']); $this->liberties = /* TODO parse liberties */$rep['liberties']; $this->path = $rep['path']; $this->size = $rep['size']; }else{ $this->valid = FALSE; } } public function __toString(){ $out = 'MegaStockage\n'; $out .= '\tID:' . $this->ID . '\n'; $out .= '\tAccount ID:' . $this->accountID . '\n'; $out .= '\tAccount password' . $this->adminLevel . '\n'; $out .= '\tOwner:' . $this->owner->__toString() . '\n'; $out .= '\tLiberties:' . $this->liberties . '\n'; $out .= '\tPath:' . $this->path . '\n'; $out .= '\tSize:' . $this->size . '\n'; return $out; } public function exists(){ return $this->valid; } //Getters //TODO gen getters //Useful getters public function canRead($he){ $read = $this->liberties[0]; if($read=='public') return TRUE; else if(in_array($he->getID(),$read)) return TRUE; return FALSE; } public function canWrite($he){ $write = $this->liberties[1]; if($write=='public') return TRUE; else if(in_array($he->getID(),$write)) return TRUE; return FALSE; } //Setters public function setAttribute($attribute,$value,$valueType){ //TODO todo $json=FALSE; switch ($attribute){ case 'ID': if($valueType !== '0'){ echo 'Error : the type "'.$valueType.'" is not allowed for the attribute '.$attribute; exit; } $value = intval($value); break; case 'pseudo': if($valueType !== '"'){ echo 'Error : the type "'.$valueType.'" is not allowed for the attribute '.$attribute; exit; } $value = '"'.strval($value).'"'; break; case 'hashedPseudo': if($valueType !== '"'){ echo 'Error : the type "'.$valueType.'" is not allowed for the attribute '.$attribute; exit; } $value = '"'.strval($value).'"'; break; case 'adminLevel': if($valueType !== '0'){ echo 'Error : the type "'.$valueType.'" is not allowed for the attribute '.$attribute; exit; } $value = intval($value); break; case 'dateCreation': if($valueType !== '"'){ echo 'Error : the type "'.$valueType.'" is not allowed for the attribute '.$attribute; exit; } $value = '"'.$value.'"'; break; case 'requiredBanner'://FIXME jsonMysqlProblem $json=TRUE; if($valueType !== '"'){ echo 'Error : the type "'.$valueType.'" is not allowed for the attribute '.$attribute; exit; } $value = '"'.strval($value).'"'; break; case 'personnalMessage': $json=TRUE; if($valueType !== '"'){ echo 'Error : the type "'.$valueType.'" is not allowed for the attribute '.$attribute; exit; } $value = '"'.strval($value).'"'; break; default: echo 'Undefined attribute "'.$attribute.'" for the class Membre'; exit; } $restrictionValues[] = $value; if($json){ //TODO Set command for json }else{ $command = 'UPDATE membres SET ' . $attribute . '=' . $value . ' WHERE ID=' . $this->ID; } echo $command.'
'; $req = $GLOBALS['bdd']->prepare($command); $req->execute(array()); if($req->errorInfo()[0] != 0){ echo 'Eine MYSQL Exception hat geworft. Einschuldigung'; exit; } } /** * * @return Objects which matchs the specified restrictions */ public static function getFromAttributes($restrictions){ $whereCommands = array(); $restrictionValues = array(); foreach ($restrictions as $restriction){ $whereCommand = NULL; $attribute = $restriction[0]; $json = FALSE; $operator = NULL; $value = NULL; try { switch ($attribute){ case 'ID': if($restriction[2][0] !== '0'){ echo 'Error : the type "'.$restriction[2][0].'" is not allowed for the attribute '.$attribute; exit; } $value = intval($restriction[2][1]); $operator = Utility::getIntegerSqlOperator($restriction[1]); break; case 'pseudo': if($restriction[2][0] !== '"'){ echo 'Error : the type "'.$restriction[2][0].'" is not allowed for the attribute '.$attribute; exit; } $value = '"'.strval($restriction[2][1]).'"'; $operator = Utility::getStringSqlOperator($restriction[1]); break; case 'hashedPseudo': if($restriction[2][0] !== '"'){ echo 'Error : the type "'.$restriction[2][0].'" is not allowed for the attribute '.$attribute; exit; } $value = '"'.strval($restriction[2][1]).'"'; $operator = Utility::getStringSqlOperator($restriction[1]); break; case 'adminLevel': if($restriction[2][0] !== '0'){ echo 'Error : the type "'.$restriction[2][0].'" is not allowed for the attribute '.$attribute; exit; } $value = intval($restriction[2][1]); $operator = Utility::getIntegerSqlOperator($restriction[1]); break; case 'dateCreation': if($restriction[2][0] !== '"'){//TODO add type date echo 'Error : the type "'.$restriction[2][0].'" is not allowed for the attribute '.$attribute; exit; } $value = '"'.$restriction[2][1].'"'; $operator = Utility::getDateSqlOperator($restriction[1]); break; case 'requiredBanner'://FIXME jsonMysqlProblem $json=TRUE; if($restriction[2][0] !== '"'){ echo 'Error : the type "'.$restriction[2][0].'" is not allowed for the attribute '.$attribute; exit; } $value = '"'.strval($restriction[2][1]).'"'; $operator = Utility::getStringSqlOperator($restriction[1]); break; case 'personnalMessage': $json=TRUE; if($restriction[2][0] !== '"'){ echo 'Error : the type "'.$restriction[2][0].'" is not allowed for the attribute '.$attribute; exit; } $value = '"'.strval($restriction[2][1]).'"'; $operator = Utility::getStringSqlOperator($restriction[1]); break; default: echo 'Undefined attribute "'.$attribute.'" for the class Membre'; exit; } }catch(InvalidOperatorException $e){ echo $e->getMessage().' when reading attribute "'.$attribute.'"'; exit; } $restrictionValues[] = $value; if($json){ $whereCommand = '((data->"$.'.$attribute.'" IS NOT NULL) AND (data->"$.'.$attribute.'" '.$operator.' ? ))'; }else{ $whereCommand = $attribute . ' ' . $operator . ' ' . $value; } $whereCommands[] = $whereCommand; } $wherePart = ""; if(count($whereCommands) >0) $wherePart = 'WHERE '.implode(' AND ',$whereCommands); $command = 'SELECT * FROM membres '.$wherePart; $req = $GLOBALS['bdd']->prepare($command); $req->execute($restrictionValues); echo $command.'
'; if($req->errorInfo()[0] != 0) echo 'Erreur SQL, veuillez verifier les selecteurs'; $out = array(); while($rep = $req->fetch()) $out[] = new Membre($rep['ID']); //Choose return value switch(count($out)){ case 0: return NULL; case 1: return $out[0]; default: return $out; } } public static function getFromPseudo($pseudo){ return Membre::getFromAttributes(array(['pseudo','=',['"',$pseudo]])); } public static function getFromAdminLevel($level){ return Membre::getFromAttributes(array(['adminLevel','=',['0',$level]])); } public static function getFromDateCreation($date){ return Membre::getFromAttributes(array(['dateCreation','=',['0',$date]])); } public static function getCreatedLaterThan($date){ return Membre::getFromAttributes(array(['dateCreation','>',['"',$date]])); } public static function getCreatedEarlierThan($date){ return Membre::getFromAttributes(array(['dateCreation','<',['"',$date]])); } public static function getAdminGreaterThan($min){ return Membre::getFromAttributes(array(['adminLevel','>',['0',$min]])); } public static function getAdminLowerThan($max){ return Membre::getFromAttributes(array(['adminLevel','<',['0',$max]])); } public static function me(){ if(!isset($_SESSION['session_id'])) return NULL; $me = new Membre($_SESSION['session_id']); if(!$me->exists()) return NULL; return $me; } //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::PERSON_REGISTERED; } //Operateurs public function __is_identical($copain){ return $this->getID() == $copain->getID(); } //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 !'; }