Encore plus de nouvelles classes

Tests sur les nombres univers
This commit is contained in:
Mysaa
2021-06-06 12:24:05 +02:00
parent c9589d2cf6
commit fba5123944
12 changed files with 692 additions and 332 deletions
+3 -2
View File
@@ -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
View File
@@ -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
View File
@@ -1,5 +1,6 @@
<?php
class Projet{
protected $ID;
protected $name;
protected $dateCreation;
+117
View File
@@ -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
View File
@@ -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';