Encore plus de nouvelles classes
Tests sur les nombres univers
This commit is contained in:
@@ -1,8 +1,9 @@
|
||||
<?php
|
||||
class Langage{
|
||||
|
||||
const java = new Langage(0, "Java", "jar java javadoc");
|
||||
const vba = new Langage(1, "VBA", "xlsm vb");
|
||||
//FIXME const
|
||||
static $java = new Langage(0, "Java", "jar java javadoc");
|
||||
static $vba = new Langage(1, "VBA", "xlsm vb");
|
||||
|
||||
protected static $languages = array();
|
||||
|
||||
|
||||
+89
-33
@@ -126,62 +126,118 @@ class Membre {
|
||||
return Membre::PASSWORD_CHANGED;
|
||||
}
|
||||
|
||||
|
||||
//Membre getters
|
||||
private static function memberGetterOutput($req){
|
||||
/**
|
||||
*
|
||||
* @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':
|
||||
$value = intval($restriction[2]);
|
||||
$operator = Utility::getIntegerSqlOperator($restriction[1]);
|
||||
break;
|
||||
case 'pseudo':
|
||||
$value = '"'.strval($restriction[2]).'"';//FIXME escaped chars (',",\n,\t ...)
|
||||
$operator = Utility::getStringSqlOperator($restriction[1]);
|
||||
break;
|
||||
case 'hashedPseudo':
|
||||
$value = '"'.strval($restriction[2]).'"';
|
||||
$operator = Utility::getStringSqlOperator($restriction[1]);
|
||||
break;
|
||||
case 'adminLevel':
|
||||
$value = intval($restriction[2]);
|
||||
$operator = Utility::getIntegerSqlOperator($restriction[1]);
|
||||
break;
|
||||
case 'dateCreation':
|
||||
//FIXME y ä pâs là vàlüè
|
||||
$value=""
|
||||
$operator = 'convert(datetime, "'.Utility::getDateSqlOperator($restriction[1]).'")';
|
||||
break;
|
||||
case 'requiredBanner':
|
||||
$json=TRUE;
|
||||
$value = "'".strval($restriction[2])."'";
|
||||
$operator = Utility::getStringSqlOperator($restriction[1]);
|
||||
break;
|
||||
case 'personnalMessage':
|
||||
$json=TRUE;
|
||||
$value = "'".strval($restriction[2])."'";
|
||||
$operator = Utility::getStringSqlOperator($restriction[1]);
|
||||
break;
|
||||
default:
|
||||
echo 'Unknown 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 = 'WHERE '.implode(' AND ',$whereCommands);
|
||||
|
||||
|
||||
$req = $GLOBALS['bdd']->prepare('SELECT * FROM membres '.$wherePart);
|
||||
$req->execute($restrictionValues);
|
||||
if($req->errorInfo()[0] == 0)
|
||||
echo 'A SQL exception occured ...';
|
||||
$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;
|
||||
}
|
||||
|
||||
//Choose return value
|
||||
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);
|
||||
return getFromAttributes(array(['pseudo','=',$pseudo]));
|
||||
}
|
||||
|
||||
public static function getFromAdminLevel($level){
|
||||
$req = $GLOBALS['bdd']->prepare('SELECT * FROM membres WHERE adminLevel=?');
|
||||
$req->execute(array($level));
|
||||
return membreGetterOutput($req);
|
||||
return getFromAttributes(array(['adminLevel','=',$level]));
|
||||
}
|
||||
|
||||
public static function getFromDateCreation($date){
|
||||
$req = $GLOBALS['bdd']->prepare('SELECT * FROM membres WHERE dateCreation=?');
|
||||
$req->execute(array($date));
|
||||
return membreGetterOutput($req);
|
||||
return getFromAttributes(array(['dateCreation','=',$date]));
|
||||
}
|
||||
|
||||
public static function getCreatedLaterThan($date){
|
||||
$req = $GLOBALS['bdd']->prepare('SELECT * FROM membres WHERE dateCreation>?');
|
||||
$req->execute(array($date));
|
||||
return membreGetterOutput($req);
|
||||
return getFromAttributes(array(['dateCreation','>',$date]));
|
||||
}
|
||||
|
||||
public static function getCreatedEarlierThan($date){
|
||||
$req = $GLOBALS['bdd']->prepare('SELECT * FROM membres WHERE dateCreation<?');
|
||||
$req->execute(array($date));
|
||||
return membreGetterOutput($req);
|
||||
return getFromAttributes(array(['dateCreation','<',$date]));
|
||||
}
|
||||
|
||||
public static function getAdminGreaterThan($min){
|
||||
$req = $GLOBALS['bdd']->prepare('SELECT * FROM membres WHERE adminLevel>?');
|
||||
$req->execute(array($min));
|
||||
return membreGetterOutput($req);
|
||||
return getFromAttributes(array(['adminLevel','>',$min]));
|
||||
}
|
||||
|
||||
public static function getAdminLowerThan($max){
|
||||
$req = $GLOBALS['bdd']->prepare('SELECT * FROM membres WHERE adminLevel<?');
|
||||
$req->execute(array($max));
|
||||
return membreGetterOutput($req);
|
||||
return getFromAttributes(array(['adminLevel','<',$max]));
|
||||
}
|
||||
|
||||
|
||||
@@ -191,7 +247,7 @@ class Membre {
|
||||
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;
|
||||
return Membre::PERSON_REGISTERED;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
<?php
|
||||
class Projet{
|
||||
|
||||
protected $ID;
|
||||
protected $name;
|
||||
protected $dateCreation;
|
||||
|
||||
@@ -0,0 +1,117 @@
|
||||
<?php
|
||||
class InvalidOperatorException extends Exception{
|
||||
public $type;
|
||||
public $operator;
|
||||
|
||||
public function __construct ($type,$operator){
|
||||
parent::__construct('Invalid operator "'.$operator.'" for the type '.$type);
|
||||
}
|
||||
|
||||
}
|
||||
class Utility{
|
||||
|
||||
/*
|
||||
* <> ou !=
|
||||
|
||||
...les deux valeurs ne sont pas égales
|
||||
<
|
||||
|
||||
...la valeur de gauche est strictement inférieure à celle de droite
|
||||
>
|
||||
|
||||
...la valeur de gauche est strictement supérieure à celle de droite
|
||||
<=
|
||||
|
||||
...la valeur de gauche est strictement inférieure ou égale à celle de droite
|
||||
>=
|
||||
|
||||
...la valeur de gauche est strictement supérieure ou égale à celle de droite
|
||||
BETWEEN..AND
|
||||
|
||||
...la valeur testée est située entre deux valeurs données
|
||||
IN
|
||||
|
||||
...la valeur testée se situe dans une liste valeurs données
|
||||
NOT IN
|
||||
|
||||
...la valeur testée ne se situe pas dans une liste de valeurs données
|
||||
LIKE
|
||||
|
||||
...la valeur de gauche correspond à celle de droite (celle de droite peux utiliser le caractère % pour simuler n'importe quel nombre de caractère, et _ pour un seul caractère
|
||||
NOT LIKE
|
||||
|
||||
...les deux valeurs ne correspondent pas
|
||||
REGEXP ou RLIKE
|
||||
|
||||
...la valeur de gauche correspond à l'expression régulière donnée
|
||||
NOT REGEXP
|
||||
|
||||
...la valeur de gauche ne correspond pas à l'expression régulière donnée
|
||||
*/
|
||||
|
||||
public static function getIntegerSqlOperator($operator){
|
||||
switch ($operator){
|
||||
case '=':
|
||||
return '=';
|
||||
case '<':
|
||||
return '<';
|
||||
case '>':
|
||||
return '>';
|
||||
case '<=':
|
||||
return '<=';
|
||||
case '>=':
|
||||
return '>=';
|
||||
case '=<':
|
||||
return '<=';
|
||||
case '<>':
|
||||
return '<>';
|
||||
case '!=':
|
||||
return '!=';
|
||||
case '!<':
|
||||
return '!<';
|
||||
case '!>':
|
||||
return '!>';
|
||||
default:
|
||||
throw new InvalidOperatorException('integer',$operator);
|
||||
}
|
||||
}
|
||||
|
||||
public static function getStringSqlOperator($operator){
|
||||
switch ($operator){
|
||||
case '=':
|
||||
return '=';
|
||||
case '&like;':
|
||||
return 'LIKE';
|
||||
default:
|
||||
throw new InvalidOperatorException('string',$operator);
|
||||
}
|
||||
}
|
||||
|
||||
public static function getDateSqlOperator($operator){
|
||||
switch ($operator){
|
||||
case '=':
|
||||
return '=';
|
||||
case '<':
|
||||
return '<';
|
||||
case '>':
|
||||
return '>';
|
||||
case '<=':
|
||||
return '<=';
|
||||
case '>=':
|
||||
return '>=';
|
||||
case '=<':
|
||||
return '<=';
|
||||
case '<>':
|
||||
return '<>';
|
||||
case '!=':
|
||||
return '!=';
|
||||
case '!<':
|
||||
return '!<';
|
||||
case '!>':
|
||||
return '!>';
|
||||
default:
|
||||
throw new InvalidOperatorException('date',$operator);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
+2
-1
@@ -7,10 +7,11 @@ try{
|
||||
}
|
||||
|
||||
//TODO in the classes , do more test of exists in setters
|
||||
include_once 'clazz/Utility.class.php';
|
||||
include_once 'clazz/Langage.class.php';
|
||||
include_once 'clazz/Membre.class.php';
|
||||
include_once 'clazz/Discussion.class.php';
|
||||
include_once 'clazz/Message.class.php';
|
||||
include_once 'clazz/Projet.class.php';
|
||||
//Use class's consts for file names
|
||||
//TODO Use class's consts for file names
|
||||
include_once 'clazz/Version.class.php';
|
||||
|
||||
Reference in New Issue
Block a user