/tags/v0.1-20130830/initialiserBdd.sh |
---|
New file |
0,0 → 1,91 |
#!/bin/bash |
############################################################################################################## |
# But : Script permettant d'initialiser en une seule commande l'ensemble de la base de données eFlore. |
# Auteur : Jean-Pascal Milcent <jpm@tela-botanica.org> (translate bat file to shell script) |
# Exemple : /opt/lampp/bin/php -d memory_limit=3500M ./cli.php bdtxa -a supprimerTous |
# License : GPL v3 |
# Création : 07 decembre 2011 |
# Version: 0.1 |
# 2011-12-07 - Création |
# $Id$ |
############################################################################################################## |
# Constante |
APPDIR_ABSOLU=`pwd`; |
# |
CHEMIN_PHP="/opt/lampp/bin" |
CHEMIN_TBF_CLI="$APPDIR_ABSOLU/scripts" |
MEMORY_LIMIT="3500M" |
echo -e "\033[31m`tput blink`ATTENTION :`tput sgr0` Nécessite la création préalable de la base de données \033[31mtb_eflore\033[00m" |
echo "Nettoyage et chargement en cours..."; |
# BASEFLORE : doit être placé apèrs BDTFX (dépendance !) |
echo "BASEVEG :"; |
$CHEMIN_PHP/php -d memory_limit=$MEMORY_LIMIT $CHEMIN_TBF_CLI/cli.php baseveg -a supprimerTous |
$CHEMIN_PHP/php -d memory_limit=$MEMORY_LIMIT $CHEMIN_TBF_CLI/cli.php baseveg -a chargerTous |
echo "BDNT :"; |
$CHEMIN_PHP/php -d memory_limit=$MEMORY_LIMIT $CHEMIN_TBF_CLI/cli.php bdnt -a supprimerTous |
$CHEMIN_PHP/php -d memory_limit=$MEMORY_LIMIT $CHEMIN_TBF_CLI/cli.php bdnt -a chargerTous |
echo "BDTFX :"; |
$CHEMIN_PHP/php -d memory_limit=$MEMORY_LIMIT $CHEMIN_TBF_CLI/cli.php bdtfx -a supprimerTous |
$CHEMIN_PHP/php -d memory_limit=$MEMORY_LIMIT $CHEMIN_TBF_CLI/cli.php bdtfx -a chargerTous |
echo "BASEFLOR :"; |
$CHEMIN_PHP/php -d memory_limit=$MEMORY_LIMIT $CHEMIN_TBF_CLI/cli.php baseflor -a supprimerTous |
$CHEMIN_PHP/php -d memory_limit=$MEMORY_LIMIT $CHEMIN_TBF_CLI/cli.php baseflor -a chargerTous |
echo "BDTXA :"; |
$CHEMIN_PHP/php -d memory_limit=$MEMORY_LIMIT $CHEMIN_TBF_CLI/cli.php bdtxa -a supprimerTous |
$CHEMIN_PHP/php -d memory_limit=$MEMORY_LIMIT $CHEMIN_TBF_CLI/cli.php bdtxa -a chargerTous |
echo "BIBLIO_BOTA :"; |
$CHEMIN_PHP/php -d memory_limit=$MEMORY_LIMIT $CHEMIN_TBF_CLI/cli.php biblio_bota -a supprimerTous |
$CHEMIN_PHP/php -d memory_limit=$MEMORY_LIMIT $CHEMIN_TBF_CLI/cli.php biblio_bota -a chargerTous |
# echo "BONNIER :"; |
# Pas encore utilisé ! |
echo "CHORODEP :"; |
$CHEMIN_PHP/php -d memory_limit=$MEMORY_LIMIT $CHEMIN_TBF_CLI/cli.php chorodep -a supprimerTous |
$CHEMIN_PHP/php -d memory_limit=$MEMORY_LIMIT $CHEMIN_TBF_CLI/cli.php chorodep -a chargerTous |
echo "COSTE :"; |
$CHEMIN_PHP/php -d memory_limit=$MEMORY_LIMIT $CHEMIN_TBF_CLI/cli.php coste -a supprimerTous |
$CHEMIN_PHP/php -d memory_limit=$MEMORY_LIMIT $CHEMIN_TBF_CLI/cli.php coste -a chargerTous |
$CHEMIN_PHP/php -d memory_limit=$MEMORY_LIMIT $CHEMIN_TBF_CLI/cli.php coste -a chargerTxt |
$CHEMIN_PHP/php -d memory_limit=$MEMORY_LIMIT $CHEMIN_TBF_CLI/cli.php coste -a chargerIndex |
echo "EFLORE :"; |
$CHEMIN_PHP/php -d memory_limit=$MEMORY_LIMIT $CHEMIN_TBF_CLI/cli.php eflore -a supprimerTous |
$CHEMIN_PHP/php -d memory_limit=$MEMORY_LIMIT $CHEMIN_TBF_CLI/cli.php eflore -a chargerTous |
# echo "FOURNIER :"; |
# Pas encore utilisé ! |
echo "INSEE-D :"; |
$CHEMIN_PHP/php -d memory_limit=$MEMORY_LIMIT $CHEMIN_TBF_CLI/cli.php insee_d -a supprimerTous |
$CHEMIN_PHP/php -d memory_limit=$MEMORY_LIMIT $CHEMIN_TBF_CLI/cli.php insee_d -a chargerTous |
echo "ISO-3166-1 :"; |
$CHEMIN_PHP/php -d memory_limit=$MEMORY_LIMIT $CHEMIN_TBF_CLI/cli.php iso_3166_1 -a supprimerTous |
$CHEMIN_PHP/php -d memory_limit=$MEMORY_LIMIT $CHEMIN_TBF_CLI/cli.php iso_3166_1 -a chargerTous |
echo "ISO-639-1 :"; |
$CHEMIN_PHP/php -d memory_limit=$MEMORY_LIMIT $CHEMIN_TBF_CLI/cli.php iso_639_1 -a supprimerTous |
$CHEMIN_PHP/php -d memory_limit=$MEMORY_LIMIT $CHEMIN_TBF_CLI/cli.php iso_639_1 -a chargerTous |
echo "NVJFL :"; |
$CHEMIN_PHP/php -d memory_limit=$MEMORY_LIMIT $CHEMIN_TBF_CLI/cli.php nvjfl -a supprimerTous |
$CHEMIN_PHP/php -d memory_limit=$MEMORY_LIMIT $CHEMIN_TBF_CLI/cli.php nvjfl -a chargerTous |
echo "NVPS :"; |
$CHEMIN_PHP/php -d memory_limit=$MEMORY_LIMIT $CHEMIN_TBF_CLI/cli.php nvps -a supprimerTous |
$CHEMIN_PHP/php -d memory_limit=$MEMORY_LIMIT $CHEMIN_TBF_CLI/cli.php nvps -a chargerTous |
echo "NVA :"; |
$CHEMIN_PHP/php -d memory_limit=$MEMORY_LIMIT $CHEMIN_TBF_CLI/cli.php nva -a supprimerTous |
$CHEMIN_PHP/php -d memory_limit=$MEMORY_LIMIT $CHEMIN_TBF_CLI/cli.php nva -a chargerTous |
echo "PHOTOFLORA :"; |
$CHEMIN_PHP/php -d memory_limit=$MEMORY_LIMIT $CHEMIN_TBF_CLI/cli.php photoflora -a supprimerTous |
$CHEMIN_PHP/php -d memory_limit=$MEMORY_LIMIT $CHEMIN_TBF_CLI/cli.php photoflora -a chargerTous |
# echo "PROMETHEUS :"; |
# Ontologie botanique. |
# Pas encore utilisé ! |
echo "SPTB :"; |
# Statut de protection Tela Botanica |
$CHEMIN_PHP/php -d memory_limit=$MEMORY_LIMIT $CHEMIN_TBF_CLI/cli.php sptb -a supprimerTous |
$CHEMIN_PHP/php -d memory_limit=$MEMORY_LIMIT $CHEMIN_TBF_CLI/cli.php sptb -a chargerTous |
echo "CEL :"; |
echo -e "\033[31m`tput blink`ATTENTION :`tput sgr0` Nécessite la création préalable de la base de données \033[31mtb_cel\033[00m" |
$CHEMIN_PHP/php -d memory_limit=$MEMORY_LIMIT $CHEMIN_TBF_CLI/cli.php cel -a supprimerTous |
$CHEMIN_PHP/php -d memory_limit=$MEMORY_LIMIT $CHEMIN_TBF_CLI/cli.php cel -a chargerTous |
echo "TAPIRLINK :"; |
echo -e "\033[31m`tput blink`ATTENTION :`tput sgr0` Nécessite la création préalable de la base de données \033[31mtb_hit_indexation\033[00m" |
$CHEMIN_PHP/php -d memory_limit=$MEMORY_LIMIT $CHEMIN_TBF_CLI/cli.php tapirlink -a supprimerTous |
$CHEMIN_PHP/php -d memory_limit=$MEMORY_LIMIT $CHEMIN_TBF_CLI/cli.php tapirlink -a chargerTous |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
Added: svn:eol-style |
+native |
\ No newline at end of property |
/tags/v0.1-20130830/livraison.sh |
---|
New file |
0,0 → 1,21 |
#!/bin/bash |
############################################################################################################## |
# But : Script permettant d'initialiser en une seule commande l'ensemble de la base de données eFlore. |
# Auteur : Jean-Pascal Milcent <jpm@tela-botanica.org> (translate bat file to shell script) |
# License : GPL v3 |
# Création : 07 decembre 2011 |
# Version: 0.1 |
# 2011-12-07 - Création |
# $Id$ |
############################################################################################################## |
# ATTENTION NE PAS UTILISER !!! |
# compresser les services en excluant les fichiers svn et les fichiers de config et framework |
#tar cvzf services.tar.gz services/ --exclude=".svn" --exclude="*.ini" --exclude="framework.php" --exclude="*.sh" |
# envoyer sur tela |
#scp services.tar.gz root@tela-botanica.org:/home/telabotap/www/eflore-test/. |
# se connecter sur tela botanica en ssh et effectuer le déploiement |
#ssh root@tela-botanica.org "cd /home/telabotap/www/eflore-test/; cd services; tar cvzf ../backup/services.tar.gz .; cd ../; rm -Rf services; tar xvzf services.tar.gz; cd services; cp ../configurations/services/* . -R; chown #telabotap:users /home/telabotap/www/eflore-test/services -R; chmod 755 /home/telabotap/www/eflore-test/services -R; exit"; |
#echo "Done !" |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
Added: svn:eol-style |
+native |
\ No newline at end of property |
/tags/v0.1-20130830/chargerDonnees.sh |
---|
New file |
0,0 → 1,50 |
#!/bin/bash |
############################################################################################################## |
# But : téléchargement automatique en local des données des projets depuis le serveur de Tela Botanica par ftp |
# Auteur : Jean-Pascal Milcent <jpm@tela-botanica.org> (translate bat file to shell script) |
# License : GPL v3 |
# Création : 07 decembre 2011 |
# Version: 0.1 |
# 2011-12-07 - Création |
# $Id$ |
############################################################################################################## |
# Constante |
NBREPARAM=$# |
APPDIR_ABSOLU=`pwd`; |
DOSSIER_LOCAL="$APPDIR_ABSOLU/donnees/" |
DOSSIER_DISTANT="/www/eflore/donnees/" |
# Aide |
E_OPTERR=65 |
if [ "$1" = '--help' ] |
then # Le script a besoin d'au moins un argument sur la ligne de commande |
echo "Usage $0 -[parameters -u, -p ]" |
echo "Paramétres : " |
echo " -h: indiquer l'hote ftp" |
echo " -u: indiquer le nom de l'utilisateur ftp" |
echo " -p: indiquer le mot de passe de l'utilisateur ftp" |
exit $E_OPTERR |
fi |
# Récupération des paramètres et des options de la ligne de commande |
TEMP=`getopt -o u:p:h: -l help: -- "$@"` |
if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi |
eval set -- "$TEMP" |
while [ ! -z "$1" ] ; do |
#echo $1" # "$2 |
case "$1" in |
-h) HOST=$2;; |
-u) FTP_USER=$2;; |
-p) FTP_PASSWD=$2;; |
--) shift ; break ;; |
*) echo "Internal error!" ; exit 1 ;; |
esac |
shift 2 |
done |
# Transfert sur le serveur par FTP |
if [ $NBREPARAM -eq 0 ]; then |
echo "Pas de transfert sur le serveur. Utiliser --help pour voir les options de transfert." |
else |
echo "Téléchargement en cours :"; |
lftp ftp://$FTP_USER:$FTP_PASSWD@$HOST -e "set ftp:passive off; mirror -e --no-symlinks -x '.*cel\/images\/.*' -x '.*osm\/.*' -x '.*plantscan\/.*' -x '.*coste\/cles\/.*' -x '.*coste\/descriptions\/.*' -x '.*coste\/images\/.*' -x '.*coste\/ressources\/.*' $DOSSIER_DISTANT $DOSSIER_LOCAL ; quit" |
fi; |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
Added: svn:eol-style |
+native |
\ No newline at end of property |
/tags/v0.1-20130830/services/tests/0.1/commun/CommunAideTest.php |
---|
New file |
0,0 → 1,34 |
<?php |
require_once dirname(__FILE__).'/../ServiceEflorePhpUnit.php'; |
class CommunAideTest extends ServiceEflorePhpUnit { |
public function __construct() { |
$this->projet = 'eflore'; |
$this->service = 'aide'; |
} |
public function testAideSurCommun() { |
$ressources = array(); |
$parametres = array(); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertNotEmpty($retour['PROJET EFLORE'], 'données absentes'); |
$this->assertArrayHasKey('service.nom', $retour['PROJET EFLORE']['projet.services'][0], "Le json ne contient pas d'attribut : editeur. Voir : $url"); |
$this->assertEquals('ontologies', $retour['PROJET EFLORE']['projet.services'][0]['service.nom'], "L'attribut 'editeur' devrait avoir la valeur 'Tela Botanica'. Voir : $url"); |
} |
public function testAideProjets() { |
$ressources = array('projets'); |
$parametres = array(); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertNotEmpty($retour, 'données absentes'); |
$this->assertGreaterThanOrEqual(8, count($retour), $retour); |
$this->assertNotEmpty($retour['eflore'], 'données absentes'); |
$this->assertArrayHasKey('service.nom', $retour['eflore']['projet.services'][0], "Le json ne contient pas d'attribut : editeur. Voir : $url"); |
$this->assertEquals('ontologies', $retour['eflore']['projet.services'][0]['service.nom'], "L'attribut 'editeur' devrait avoir la valeur 'Tela Botanica'. Voir : $url"); |
} |
} |
?> |
/tags/v0.1-20130830/services/tests/0.1/commun/CommunMetaDonneesTest.php |
---|
New file |
0,0 → 1,22 |
<?php |
require_once dirname(__FILE__).'/../ServiceEflorePhpUnit.php'; |
class CommunMetaDonneesTest extends ServiceEflorePhpUnit { |
public function __construct() { |
$this->projet = 'eflore'; |
$this->service = 'meta-donnees'; |
} |
public function testValeurChampPrecis() { |
$ressources = array('editeur'); |
$parametres = array(); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertNotEmpty($retour[0], 'données absentes'); |
$this->assertArrayHasKey('editeur', $retour[0], "Le json ne contient pas d'attribut : editeur. Voir : $url"); |
$this->assertEquals('Tela Botanica', $retour[0]['editeur'], "L'attribut 'editeur' devrait avoir la valeur 'Tela Botanica'. Voir : $url"); |
$this->assertArrayNotHasKey('langue', $retour[0], "Le json contient un attribut : langue. Voir : $url"); |
} |
} |
?> |
/tags/v0.1-20130830/services/tests/0.1/commun/CommunOntologiesTest.php |
---|
New file |
0,0 → 1,109 |
<?php |
require_once dirname(__FILE__).'/../ServiceEflorePhpUnit.php'; |
class CommunOntologiesTest extends ServiceEflorePhpUnit { |
public function __construct() { |
$this->projet = 'eflore'; |
$this->service = 'ontologies'; |
} |
public function testRecherche() { |
$ressources = array(); |
$parametres = array(); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertNotEmpty($retour, 'données absentes'); |
$this->assertArrayHasKey('total', $retour['entete'], "Le json ne contient pas d'attribut : total. Voir : $url"); |
// au 20/08/2013, n°23 = Baznat |
$this->assertEquals('23', $retour['entete']['total'], "L'attribut 'total' devrait avoir la valeur '23'. Voir : $url"); |
$this->assertArrayHasKey('nom', $retour['resultat'][1], "Le json ne contient pas d'attribut : nom. Voir : $url"); |
$this->assertEquals('contactType', $retour['resultat'][1]['nom'], "L'attribut 'nom' devrait avoir la valeur 'contactType'. Voir : $url"); |
} |
public function testMasqueCode() { |
$ressources = array(); |
$parametres = array('masque.code' => 'o'); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertNotEmpty($retour, 'données absentes'); |
$this->assertArrayHasKey('total', $retour['entete'], "Le json ne contient pas d'attribut : total. Voir : $url"); |
$this->assertEquals('1', $retour['entete']['total'], "L'attribut 'total' devrait avoir la valeur '1'. Voir : $url"); |
$this->assertArrayHasKey('nom', $retour['resultat'][4], "Le json ne contient pas d'attribut : nom. Voir : $url"); |
$this->assertEquals('organisations', $retour['resultat'][4]['nom'], "L'attribut 'nom' devrait avoir la valeur 'organisations'. Voir : $url"); |
} |
public function testMasqueDescription() { |
$ressources = array(); |
$parametres = array('masque.description' => '%contact'); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertNotEmpty($retour, 'données absentes'); |
$this->assertArrayHasKey('total', $retour['entete'], "Le json ne contient pas d'attribut : total. Voir : $url"); |
$this->assertEquals('1', $retour['entete']['total'], "L'attribut 'total' devrait avoir la valeur '1'. Voir : $url"); |
$this->assertArrayHasKey('nom', $retour['resultat'][1], "Le json ne contient pas d'attribut : nom. Voir : $url"); |
$this->assertEquals('contactType', $retour['resultat'][1]['nom'], "L'attribut 'nom' devrait avoir la valeur 'contactType'. Voir : $url"); |
} |
// simple test ontologies bdnt |
// ce qui signifie les ontologies communes aux référentiels (bdtfx, bdtxa, isfan) |
public function testBdntSimpleNonExistante() { |
$url = '/bdnt' . ServiceEflorePhpUnit::creerUrl('ontologies', [ 'rangTaxo:-1' ] ); |
$retour = $this->consulterBrut('ontologies', 'bdnt', [ 'rangTaxo:-1' ] ); |
$this->assertContains($retour, 'Les données recherchées sont introuvables.'); |
} |
public function testBdntSimpleExistante() { |
$url = '/bdnt' . ServiceEflorePhpUnit::creerUrl('ontologies', [ 'rangTaxo:70' ] ); |
$retour = $this->consulterJson('ontologies', 'bdnt', [ 'rangTaxo:70' ] ); |
$this->assertNotEmpty($retour, 'données absentes'); |
foreach(['id', 'nom', 'code', 'complements', 'classe.id', 'classe', 'classe.href'] as $v) { |
$this->assertArrayHasKey($v, $retour, "Le json ne contient pas l'attribut \"$v\". Voir : $url"); |
} |
$this->assertEquals('15', $retour['id'], "L'attribut 'id' devrait avoir la valeur '15'. Voir : $url"); |
$this->assertEquals('Cladus', $retour['nom'], "L'attribut 'nom' devrait avoir la valeur 'Cladus'. Voir : $url"); |
} |
// Les ontologies supportent les requêtes multiples, eg: /bdnt/ontologies/rangTaxo:70,rangTaxo:-1 |
// Les ontologies sont alors indexées par élément de requête (pour faciliter le travail du client) |
// Les résultats inexistants ne sont pas retournés |
public function testBdntMultiplesNonExistante() { |
$ressource = [ implode(',', [ 'rangTaxo:70', 'rangTaxo:-1' ]) ]; |
$url = '/bdnt' . ServiceEflorePhpUnit::creerUrl('ontologies', $ressource ); |
$retour = $this->consulterJson('ontologies', 'bdnt', $ressource ); |
$this->assertNotEmpty($retour, 'données absentes'); |
$this->assertEquals(1, count($retour), "Le retour ne devrait contenir que le seul élément valide. Voir : $url"); |
$this->assertArrayHasKey('rangTaxo:70', $retour, "Le json ne contient pas d'élément rangTaxo:70. Voir : $url"); |
foreach(['id', 'nom', 'code', 'complements', 'classe.id', 'classe', 'classe.href'] as $v) { |
$this->assertArrayHasKey($v, $retour['rangTaxo:70'], "Le json ne contient pas l'attribut \"$v\". Voir : $url"); |
} |
$this->assertEquals('15', $retour['rangTaxo:70']['id'], "L'attribut 'id' devrait avoir la valeur '15'. Voir : $url"); |
$this->assertEquals('Cladus', $retour['rangTaxo:70']['nom'], "L'attribut 'nom' devrait avoir la valeur 'Cladus'. Voir : $url"); |
} |
// Les ontologies supportent les requêtes multiples sur des code différents |
// eg: /bdnt/ontologies/rangTaxo:70,zoneGeo:YT |
public function testBdntMultiplesExistantes() { |
$ressource = [ implode(',', [ 'rangTaxo:70', 'zoneGeo:YT' ]) ]; |
$url = '/bdnt' . ServiceEflorePhpUnit::creerUrl('ontologies', $ressource ); |
$retour = $this->consulterJson('ontologies', 'bdnt', $ressource ); |
$this->assertNotEmpty($retour, 'données absentes'); |
$this->assertEquals(2, count($retour), "Le retour devrait contenir 2 éléments valides. Voir : $url"); |
$this->assertArrayHasKey('rangTaxo:70', $retour, "Le json ne contient pas d'élément 'rangTaxo:70'. Voir : $url"); |
$this->assertArrayHasKey('zoneGeo:YT', $retour, "Le json ne contient pas d'élément 'zoneGeo:YT'. Voir : $url"); |
foreach($retour as $k => $e) { |
foreach(['id', 'nom', 'code', 'classe.id', 'classe', 'classe.href'] as $v) { |
$this->assertArrayHasKey($v, $e, "Le json ne contient pas l'attribut \"$v\" pour l'élément \"$k\". Voir : $url"); |
} |
} |
// n'existe pas pour "zoneGeo", pourquoi ? |
$this->assertArrayHasKey('complements', $retour['rangTaxo:70'], "Le json ne contient pas l'attribut \"$v\". Voir : $url"); |
$this->assertEquals('15', $retour['rangTaxo:70']['id'], "L'attribut 'id' devrait avoir la valeur '15'. Voir : $url"); |
$this->assertEquals('Cladus', $retour['rangTaxo:70']['nom'], "L'attribut 'nom' devrait avoir la valeur 'Cladus'. Voir : $url"); |
$this->assertEquals('180', $retour['zoneGeo:YT']['id'], "L'attribut 'id' devrait avoir la valeur '180'. Voir : $url"); |
$this->assertEquals('Mayotte', $retour['zoneGeo:YT']['nom'], "L'attribut 'nom' devrait avoir la valeur 'Mayotte'. Voir : $url"); |
} |
} |
/tags/v0.1-20130830/services/tests/0.1/nvjfl/NvjflOntologiesTest.php |
---|
New file |
0,0 → 1,50 |
<?php |
require_once dirname(__FILE__).'/../ServiceEflorePhpUnit.php'; |
class NvjflOntologiesTest extends ServiceEflorePhpUnit { |
// simple test ontologies nvjfl |
// ce qui signifie les ontologies communes aux référentiels (bdtfx, bdtxa, isfan) |
public function testOntoNVJFLSimpleNotExist() { |
$url = '/nvjfl' . ServiceEflorePhpUnit::creerUrl('ontologies', [ 'numStatut:-1' ] ); |
$retour = $this->consulterBrut('ontologies', 'nvjfl', [ 'numStatut:-1' ] ); |
$this->assertContains($retour, 'Les données recherchées sont introuvables.'); |
} |
public function testOntoNVJFLSimpleAttrNotExist() { |
$url = '/nvjfl' . ServiceEflorePhpUnit::creerUrl('ontologies', [ 'blah:1' ] ); |
$retour = $this->consulterBrut('ontologies', 'nvjfl', [ 'blah:1' ] ); |
$this->assertContains($retour, 'Les données recherchées sont introuvables.'); |
} |
public function testOntoNVJFLSimple() { |
$ressource = [ 'numStatut:1' ]; |
$url = '/nvjfl' . ServiceEflorePhpUnit::creerUrl('ontologies', $ressource ); |
$retour = $this->consulterJson('ontologies', 'nvjfl', $ressource ); |
$this->assertNotEmpty($retour, 'données absentes'); |
foreach(['id', 'nom', 'code', 'complements', 'classe.id', 'classe', 'classe.href', 'description'] as $v) { |
$this->assertArrayHasKey($v, $retour, "Le json ne contient pas l'attribut \"$v\". Voir : $url"); |
} |
} |
public function testOntoNVJFLMultiples() { |
$ressource = [ implode(',', [ 'numStatut:1', 'numStatut:2', 'genreNombre:10', 'numStatut:-1', 'blah:1' ]) ]; |
$url = '/nvjfl' . ServiceEflorePhpUnit::creerUrl('ontologies', $ressource ); |
$retour = $this->consulterJson('ontologies', 'nvjfl', $ressource ); |
$this->assertNotEmpty($retour, 'données absentes'); |
$this->assertEquals(3, count($retour), "Le retour devrait contenir 3 éléments valides. Voir : $url"); |
foreach($retour as $k => $e) { |
$this->assertArrayHasKey($k, $retour, "Le json ne contient pas d'élément '$k'. Voir : $url"); |
} |
foreach($retour as $k => $e) { |
foreach(['id', 'nom', 'code', 'classe.id', 'classe', 'classe.href'] as $v) { |
$this->assertArrayHasKey($v, $e, "Le json ne contient pas l'attribut \"$v\" pour l'élément \"$k\". Voir : $url"); |
} |
} |
$this->assertEquals('Recommandé ou typique', $retour['numStatut:1']['nom'], "test attribut 'nom' pour numStatut:1. Voir : $url"); |
$this->assertEquals('Secondaire ou régional', $retour['numStatut:2']['nom'], "test attribut 'nom' pour numStatut:2. Voir : $url"); |
$this->assertEquals('Féminin singulier', $retour['genreNombre:10']['nom'], "test attribut 'nom' pour genreNombre:10. Voir : $url"); |
$this->assertEquals('N° Statut', $retour['numStatut:1']['classe'], "test attribut 'classe' pour numStatut:1. Voir : $url"); |
$this->assertEquals('N° Genre et nombre', $retour['genreNombre:10']['classe'], "test attribut 'nom' pour genreNombre:10. Voir : $url"); |
} |
} |
/tags/v0.1-20130830/services/tests/0.1/nvjfl/NvjflNomsVernaTest.php |
---|
New file |
0,0 → 1,251 |
<?php |
require_once dirname(__FILE__).'/../ServiceEflorePhpUnit.php'; |
class NvjflNomsVernaTest extends ServiceEflorePhpUnit { |
public function __construct() { |
$this->projet = 'nvjfl'; |
$this->service = 'noms-vernaculaires'; |
} |
public function testVersionPrecise() { |
$ressources = array(); |
$parametres = array('version.projet' => '2007'); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertArrayHasKey('entete', $retour, "Le json ne contient pas d'attribut : entete. Voir : $url"); |
$this->assertArrayHasKey('resultat', $retour, "Le json ne contient pas d'attribut : resultat. Voir : $url"); |
} |
public function testVersionInexistante() { |
$ressources = array(); |
$parametres = array('version.projet' => '2011'); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); |
$attendu = 'La requête SQL formée comporte une erreur!'; |
$message = "L'url :\n'$url'\n doit retourner un résultat de la forme :\n $attendu"; |
$this->assertEquals($attendu, $retour, $message); |
} |
public function testRechercheStricte() { |
$ressources = array(); |
$parametres = array( |
'version.projet' => '2007', |
'recherche' => 'stricte', |
'masque' => 'Abricotier'); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$url_attendu = ServiceEflorePhpUnit::creerUrl($this->service, array('111'), array('version.projet' => '2007')); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertArrayHasKey('entete', $retour, "Le json ne contient pas d'attribut : entete. Voir : $url"); |
$this->assertArrayHasKey('resultat', $retour, "Le json ne contient pas d'attribut : resultat. Voir : $url"); |
$this->assertEquals('1', $retour['entete']['total'], "L'attribut 'total' de l'entête devrait valoir 1. Voir : $url"); |
$this->assertEquals(1, count($retour['resultat']), "Le résultat devrait contenir une seule donnée. Voir : $url"); |
$this->assertArrayNotHasKey('id', $retour['resultat']['111'], "Le tableau du résultat 111 ne doit pas contenir un champ 'id'. Voir : $url"); |
$this->assertArrayHasKey('href', $retour['resultat']['111'], "Le tableau du résultat 111 doit contenir un champ 'href'. Voir : $url"); |
$this->assertEquals($url_attendu, $retour['resultat']['111']['href'], "Le tableau du résultat 111 doit contenir un champ 'href' avec pour valeur $url_attendu . Voir : $url"); |
$this->assertArrayHasKey('nom', $retour['resultat']['111'], "Le tableau du résultat 111 doit contenir un champ 'nom'. Voir : $url"); |
$this->assertEquals('Abricotier', $retour['resultat']['111']['nom'], "Le tableau du résultat 111 doit contenir un champ 'nom' avec pour valeur 'Abricotier'. Voir : $url"); |
} |
public function testMasqueNt() { |
$ressources = array(); |
$parametres = array( |
'version.projet' => '2007', |
'recherche' => 'stricte', |
'masque.nt' => '379'); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$url_attendu = ServiceEflorePhpUnit::creerUrl($this->service, array('502'), array('version.projet' => '2007')); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertArrayHasKey('resultat', $retour, "Le json ne contient pas d'attribut : resultat. Voir : $url"); |
$this->assertEquals(2, count($retour['resultat']), "Le résultat devrait contenir une seule donnée. Voir : $url"); |
$this->assertArrayNotHasKey('id', $retour['resultat']['502'], "Le tableau du résultat 502 ne doit pas contenir un champ 'id'. Voir : $url"); |
$this->assertArrayHasKey('href', $retour['resultat']['502'], "Le tableau du résultat 502 doit contenir un champ 'href'. Voir : $url"); |
$this->assertEquals($url_attendu, $retour['resultat']['502']['href'], "Le tableau du résultat 502 doit contenir un champ 'href' avec pour valeur $url_attendu. Voir : $url"); |
$this->assertArrayHasKey('nom', $retour['resultat']['502'], "Le tableau du résultat 502 doit contenir un champ 'nom'. Voir : $url"); |
$this->assertEquals('Adénostyle de Briquet', $retour['resultat']['502']['nom'], "Le tableau du résultat 502 doit contenir un champ 'nom' avec pour valeur 'Adénostyle de Briquet'. Voir : $url"); |
} |
public function testMasqueLg() { |
$ressources = array(); |
$parametres = array( |
'version.projet' => '2007', |
'recherche' => 'stricte', |
'masque.lg' => 'fra', |
'navigation.limite' => '100'); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertArrayHasKey('entete', $retour, "Le json ne contient pas d'attribut : entete. Voir : $url"); |
$this->assertEquals('masque.lg=fra', $retour['entete']['masque'], "L'attribut 'masque' de l'entête devrait valoir 'masque.lg=fra'. Voir : $url"); |
$this->assertArrayHasKey('resultat', $retour, "Le json ne contient pas d'attribut : resultat. Voir : $url"); |
$this->assertEquals('16411', $retour['entete']['total'], "L'attribut 'total' de l'entête devrait valoir 16411. Voir : $url"); |
$this->assertEquals(100, count($retour['resultat']), "Le résultat devrait contenir 100 données. Voir : $url"); |
} |
public function testRechercheFloue() { |
$ressources = array(); |
$parametres = array( |
'version.projet' => '2007', |
'recherche' => 'floue', |
'masque' => 'Abrict'); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$url_attendu_pattern = ServiceEflorePhpUnit::creerUrl($this->service, ['%d'], array('version.projet' => '2007')); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertArrayHasKey('entete', $retour, "Le json ne contient pas d'attribut : entete. Voir : $url"); |
$this->assertArrayHasKey('resultat', $retour, "Le json ne contient pas d'attribut : resultat. Voir : $url"); |
$this->assertEquals('5', $retour['entete']['total'], "L'attribut 'total' de l'entête devrait valoir 1. Voir : $url"); |
$this->assertEquals(5, count($retour['resultat']), "Le résultat devrait contenir une seule donnée. Voir : $url"); |
$resultat_attendu = array( |
"2611" => array("nom" => "Apricot", "href" => sprintf($url_attendu_pattern, 2611)), |
"15868" => array("nom" => "Eyebright", "href" => sprintf($url_attendu_pattern, 15868)), |
"4857" => array("nom" => "Berg-Ziest", "href" => sprintf($url_attendu_pattern, 4857)), |
"33750" => array("nom" => "Periquet", "href" => sprintf($url_attendu_pattern, 33750)), |
"17614" => array("nom" => "Frare cugot", "href"=> sprintf($url_attendu_pattern, 17614))); |
$this->assertEquals($resultat_attendu, $retour['resultat'], "Le tableau de résultats est inattendu. Voir : $url"); |
} |
public function testRechercheAttributions() { |
$ressources = array('attributions'); |
$parametres = array( |
'version.projet' => '2007', |
'recherche' => 'stricte', |
'masque.nv' => 'Acacia', |
'retour.format' => 'min'); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertArrayHasKey('entete', $retour, "Le json ne contient pas d'attribut : entete. Voir : $url"); |
$this->assertArrayHasKey('resultat', $retour, "Le json ne contient pas d'attribut : resultat. Voir : $url"); |
$this->assertEquals('4', $retour['entete']['total'], "L'attribut 'total' de l'entête devrait valoir 4. Voir : $url"); |
$this->assertEquals(4, count($retour['resultat']), "Le résultat devrait contenir une seule donnée. Voir : $url"); |
$this->assertArrayHasKey('id', $retour['resultat']['-880871632'], "Le tableau du résultat -880871632 ne doit pas contenir un champ 'id'. Voir : $url"); |
$this->assertEquals('140', $retour['resultat']['-880871632']['id'], "Le tableau du résultat -880871632 doit contenir un champ 'id' avec pour valeur 140. Voir : $url"); |
$this->assertArrayNotHasKey('href', $retour['resultat']['-880871632'], "Le tableau du résultat -880871632 doit contenir un champ 'href'. Voir : $url"); |
$this->assertArrayHasKey('nom_vernaculaire', $retour['resultat']['-880871632'], "Le tableau du résultat -880871632 doit contenir un champ 'nom'. Voir : $url"); |
$this->assertEquals('Acacia', $retour['resultat']['-880871632']['nom_vernaculaire'], "Le tableau du résultat -880871632 doit contenir un champ 'nom' avec pour valeur 'Acacia'. Voir : $url"); |
$this->assertArrayHasKey('langue.code', $retour['resultat']['-880871632'], "Le tableau du résultat -880871632 doit contenir un champ 'langue.code'. Voir : $url"); |
$this->assertEquals('spa', $retour['resultat']['-880871632']['langue.code'], "Le tableau du résultat -880871632 doit contenir un champ 'langue.code' avec pour valeur 'spa'. Voir : $url"); |
$this->assertArrayHasKey('taxon.code', $retour['resultat']['-880871632'], "Le tableau du résultat -880871632 doit contenir un champ 'taxon.code'. Voir : $url"); |
$this->assertEquals('bdtfx.nt:30746', $retour['resultat']['-880871632']['taxon.code'], "Le tableau du résultat -880871632 doit contenir un champ 'taxon.code' avec pour valeur 'bdtfx.nt:30746'. Voir : $url"); |
} |
public function testerIdAvecOntologies() { |
$ressources = array('140'); |
$parametres = array('version.projet' => '2007'); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertArrayNotHasKey('entete', $retour, "Le json contient un attribut : entete. Voir : $url"); |
$this->assertArrayNotHasKey('resultat', $retour, "Le json contient un attribut : resultat. Voir : $url"); |
$this->assertArrayHasKey('id', $retour, "Le json doit contenir un attribut : 'id' . Voir : $url"); |
$this->assertEquals('140', $retour['id'], "Le json doit contenir un attribut 'id' avec pour valeur 140. Voir : $url"); |
$this->assertArrayHasKey('nom_vernaculaire', $retour, "Le json doit contenir un attribut 'nom'. Voir : $url"); |
$this->assertEquals('Acacia', $retour['nom_vernaculaire'], "Le json doit contenir un attribut 'nom' avec pour valeur 'Acacia'. Voir : $url"); |
$this->assertArrayHasKey('attributions', $retour, "Le json doit contenir un attribut 'attributions'. Voir : $url"); |
$this->assertEquals(2, count($retour['attributions']), "Le résultat devrait contenir deux langues d'attributions. Voir : $url"); |
$this->assertEquals(1, count($retour['attributions']['fra']), "Le résultat devrait contenir une attribution à un taxon en français. Voir : $url"); |
$this->assertArrayHasKey('taxon', $retour['attributions']['fra']['-1617415758'], "Le json doit contenir un attribut : 'taxon' . Voir : $url"); |
$this->assertEquals('Robinia pseudoacacia L.', $retour['attributions']['fra']['-1617415758']['taxon'], "Le json doit contenir un attribut 'taxon' avec pour valeur Robinia pseudoacacia. Voir : $url"); |
$this->assertArrayHasKey('genre', $retour['attributions']['fra']['-1617415758'], "Le json doit contenir un attribut : 'genre' . Voir : $url"); |
$this->assertEquals('Masculin singulier', $retour['attributions']['fra']['-1617415758']['genre'], "Le json doit contenir un attribut 'genre' avec pour valeur Masculin singulier. Voir : $url"); |
$this->assertArrayHasKey('conseil_emploi', $retour['attributions']['fra']['-1617415758'], "Le json doit contenir un attribut : 'conseil_emploi' . Voir : $url"); |
$this->assertEquals('Recommandé ou typique', $retour['attributions']['fra']['-1617415758']['conseil_emploi'], "Le json doit contenir un attribut 'conseil_emploi' avec pour valeur Recommandé ou typique. Voir : $url"); |
} |
public function testerAttributionsAvecRechercheMasqueEtOntologies() { |
$ressources = array('attributions'); |
$parametres = array( |
'retour.format' => 'max', |
'navigation.limite' => '50', |
'masque.nt' => '8523'); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertArrayHasKey('entete', $retour, "Le json ne contient pas d'attribut : entete. Voir : $url"); |
$this->assertArrayHasKey('resultat', $retour, "Le json contient pas d'attribut : resultat. Voir : $url"); |
$this->assertEquals('21', $retour['entete']['total'], "Le json ne contient pas le nombre de valeurs attendues. Voir : $url"); |
$this->assertEquals('Acer monspessulanum L.', $retour['resultat']['2081013327']['taxon'], "Le json ne contient pas le taxon attendu. Voir : $url"); |
$this->assertEquals('Masculin singulier', $retour['resultat']['2081013327']['genre'], "Le json ne contient pas le genre attendu pour ce taxon. Voir : $url"); |
$this->assertEquals('Recommandé ou typique', $retour['resultat']['2081013327']['conseil_emploi'], "Le json ne contient pas le conseil emploi attendu pour ce taxon. Voir : $url"); |
} |
public function testerAvecLangueFrMasqueEtRetourOss() { |
$ressources = array(); |
$parametres = array( |
'recherche' => 'etendue', |
'retour.format' => 'oss', |
'navigation.limite' => '50', |
'masque.lg' => 'fra', |
'masque' => 'Abr'); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
// Raphaël, le 28/08/2013: pourquoi double-requête ? dans le doute: commentée |
// $retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertArrayNotHasKey('entete', $retour, "Le json ne doit pas contenir d'attribut : entete. Voir : $url"); |
$this->assertEquals('Pas de masque', $retour['0'], "L'attribut 0 du retour devrait valoir 'Pas de masque'. Voir : $url"); |
$this->assertArrayNotHasKey('resultat', $retour, "Le json ne doit pas contenir d'attribut : resultat. Voir : $url"); |
$this->assertEquals(50, count($retour[1]), "Le résultat devrait contenir 50 données. Voir : $url"); |
} |
// L'utilisation de retour.champs=conseil_emploi sur l'Héliotrope commun induit un requêtage à |
// de multiple ontologies. Celles-ci devraient être factorisées sous la forme d'une requête et le |
// résultat renvoyé correct. |
// nvjfl/noms-vernaculaires/attributions?masque.nt=1382&retour.champs=conseil_emploi |
// masque.lg=fra (pour simplement réduire la lourdeur) |
public function testAttributionsOntologiesMultiples() { |
$parametres = [ 'masque.nt' => 1382, 'retour.champs' => 'conseil_emploi,genre', 'masque.lg' => 'fra' ]; |
$url = '/nvjfl' . ServiceEflorePhpUnit::creerUrl('noms-vernaculaires', ['attributions'], $parametres); |
$retour = $this->consulterJson('noms-vernaculaires', 'nvjfl', ['attributions'], $parametres); |
// basique: |
$this->assertArrayHasKey('entete', $retour, "Le json ne contient pas d'attribut : entete. Voir : $url"); |
$this->assertArrayHasKey('resultat', $retour, "Le json ne contient pas d'attribut : resultat. Voir : $url"); |
$this->assertEquals('4', $retour['entete']['total'], "L'attribut 'total' de l'entête devrait valoir 1. Voir : $url"); |
$this->assertEquals(4, count($retour['resultat']), "Le résultat devrait contenir une seule donnée. Voir : $url"); |
// présence champs standards: |
foreach($retour['resultat'] as $k => $e) { |
foreach([ 'id', 'nom_vernaculaire', 'taxon', /* 'langue.code', 'taxon.code', 'href', */ 'nom_retenu.code', 'num_taxon' ] as $v) { |
$this->assertArrayHasKey($v, $e, "Le json ne contient pas l'attribut \"$v\" pour l'élément \"$k\". Voir : $url"); |
} |
} |
// présence champs additionnels: |
foreach($retour['resultat'] as $k => $e) { |
foreach([ 'is_null', 'zone_usage', 'num_genre', 'notes', 'num_statut', 'num_nom_vernaculaire' ] as $v) { |
$this->assertArrayHasKey($v, $e, "Le json ne contient pas l'attribut \"$v\" pour l'élément \"$k\". Voir : $url"); |
} |
} |
// -1311256838 |
$this->assertArrayHasKey('-1311256838', $retour['resultat'], "Le json ne contient pas l'élément -1311256838. Voir : $url"); |
$this->assertEquals('Recommandé ou typique', $retour['resultat']['-1311256838']['conseil_emploi'], "L'élément '-1311256838' contient une valeur erronée pour l'attribut 'conseil_emploi'. Voir : $url"); |
$this->assertEquals('Héliotrope commun', $retour['resultat']['-1311256838']['nom_vernaculaire'], "L'élément '-1311256838' contient une valeur erronée pour l'attribut 'nom_vernaculaire'. Voir : $url"); |
$this->assertEquals('1', $retour['resultat']['-1311256838']['num_statut'], "L'élément '-1311256838' contient une valeur erronée pour l'attribut 'num_statut'. Voir : $url"); |
$this->assertEquals('Secondaire ou régional', $retour['resultat']['-516239805']['conseil_emploi'], "L'élément '-516239805' contient une valeur erronée pour l'attribut 'conseil_emploi'. Voir : $url"); |
$this->assertEquals('Girasol', $retour['resultat']['-516239805']['nom_vernaculaire'], "L'élément '-516239805' contient une valeur erronée pour l'attribut 'nom_vernaculaire'. Voir : $url"); |
$this->assertEquals('2', $retour['resultat']['-516239805']['num_statut'], "L'élément '-516239805' contient une valeur erronée pour l'attribut 'num_statut'. Voir : $url"); |
// TODO: code_langue et num_taxon => langue.code et taxon.code ? |
// absence champs "pseudo"-inattendus |
foreach($retour['resultat'] as $k => $e) { |
foreach([ '_result_ontologies@nvjfl'] as $v) { |
$this->assertArrayNotHasKey($v, $e, "Le json contient l'attribut \"$v\" pour l'élément \"$k\". Voir : $url"); |
} |
} |
} |
} |
/tags/v0.1-20130830/services/tests/0.1/cel/CelImagesTest.php |
---|
New file |
0,0 → 1,188 |
<?php |
require_once dirname(__FILE__).'/../ServiceEflorePhpUnit.php'; |
class CelImagesTest extends ServiceEflorePhpUnit { |
public function __construct() { |
$this->projet = 'cel'; |
$this->service = 'images'; |
} |
public function testParametreMasqueNnInexistant() { |
$ressources = array(); |
$parametres = array('retour'=>'image/jpeg', 'retour.format'=>'M'); |
$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); |
$messageAttendu = "Le paramètre masque.nn est obligatoire."; |
$this->assertEquals($messageAttendu, $retour, |
"Le service doit renvoyer un message pour un masque non renseigné"); |
} |
public function testParametreMasqueNnMultiple() { |
$ressources = array(); |
$parametres = array('masque.nn' => 'bdftf:6218,182','retour'=>'image/jpeg'); |
$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); |
$messageAttendu = "Le paramètre masque.nn peut contenir une seule valeur numérique pour l'instant pour le format de retour image/jpeg."; |
$this->assertEquals($messageAttendu, $retour, |
"Le service doit renvoyer un message car le paramètre masque.nn n'est pas complétement implémenté."); |
} |
public function testParametreRetourFormatInexistant() { |
$ressources = array(); |
$parametres = array('masque.nn' => '62018', 'retour'=>'image/jpeg'); |
$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); |
$image = imagecreatefromstring($retour); |
$largeur = imagesx($image); |
$hauteur = imagesy($image); |
$this->assertLessThanOrEqual(450, $largeur, |
"Le service doit renvoyer une image de taille M (largeur < 450px) par défaut (h:$hauteur x l:$largeur)"); |
$this->assertLessThanOrEqual(450, $hauteur, |
"Le service doit renvoyer une image de taille M (hauteur < 600px) par défaut (h:$hauteur x l:$largeur)"); |
if ($hauteur != 450) { |
$this->assertSame(450, $largeur, |
"Le service doit renvoyer une image de taille M : largeur == 450px pour une hauteur infèrieure à 600px (h:$hauteur x l:$largeur)"); |
} |
if ($largeur != 450) { |
$this->assertSame(450, $hauteur, |
"Le service doit renvoyer une image de taille M : hauteur == 600px pour une largeur infèrieure à 450px (h:$hauteur x l:$largeur)"); |
} |
} |
public function testValeurParametreRetourFormatInexistante() { |
$ressources = array(); |
$parametres = array('masque.nn' => '62018', 'retour'=>'image/jpeg', 'retour.format'=>'X53L'); |
$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); |
$messageAttendu = "Le type de format 'X53L' n'est pas supporté"; |
$this->assertEquals($messageAttendu, $retour, |
"Le service doit renvoyer un message pour un format de retour inexistant"); |
} |
public function testValeurParametreRetourInexistante() { |
$ressources = array(); |
$parametres = array('masque.nn' => '6218','retour'=>'image/jpog'); |
$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); |
$messageAttendu = "Le type de retour 'image/jpog' n'est pas supporté"; |
$this->assertEquals($messageAttendu, $retour, |
"Le service doit renvoyer un message d'erreur 400 sur une type de retour incorrect"); |
} |
public function testTaxonSansImage() { |
$ressources = array(); |
$parametres = array('masque.nn' => '6218','retour' => 'image/jpeg'); |
$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); |
$messageAttendu = "Aucune image ne correspond au numéro numenclatural bdtfx:'6218'"; |
$this->assertEquals($messageAttendu, $retour, |
"Le service doit renvoyer un message pour un taxon ne possédant pas d'images"); |
} |
public function testListeImagesJsonMasqueNnSimple() { |
$ressources = array(); |
$parametres = array('masque.nn' => '182','retour' => 'application/json', 'retour.format' => 'CRX2S'); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->verifierEnteteChampsObligatoires($retour); |
$this->assertEquals('nn=182', $retour['entete']['masque'], 'Valeur entete > masque = "nn=182"'); |
$this->assertSame(0, $retour['entete']['depart'], 'Valeur entete > depart = 0'); |
$this->assertSame(100, $retour['entete']['limite'], 'Valeur entete > limite = 0'); |
$this->assertSame(62, $retour['entete']['total'], 'Valeur entete > total = 62'); |
$this->assertArrayNotHasKey('href.suivant', $retour['entete'], "Absence champ : entete > href.suivant"); |
$this->assertArrayNotHasKey('href.precedent', $retour['entete'], "Absence champ : entete > href.precedent"); |
$this->verifierResultatsChampsObligatoires($retour); |
$this->verifierResultatsValeursGenerique($retour); |
$this->assertCount(62, $retour['resultats'], 'Nbre resultats = 62'); |
foreach ($retour['resultats'] as $id => $resultat) { |
$this->assertRegExp("/CRX2S/", $resultat['binaire.href']); |
} |
} |
public function testListeImagesJsonMasqueNnMultiple() { |
$ressources = array(); |
$parametres = array('masque.nn' => '62018,182,141','retour' => 'application/json'); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->verifierEnteteChampsObligatoires($retour); |
$this->assertEquals('nn=62018,182,141', $retour['entete']['masque'], 'Valeur entete > masque = "nn=62018,182,141"'); |
$this->assertSame(0, $retour['entete']['depart'], 'Valeur entete > depart = 0'); |
$this->assertSame(100, $retour['entete']['limite'], 'Valeur entete > limite = 0'); |
$this->assertSame(134, $retour['entete']['total'], 'Valeur entete > total = 134'); |
$this->assertArrayHasKey('href.suivant', $retour['entete'], "Présence champ : entete > href.suivant"); |
$urlHrefSuivantAttendue = 'http://localhost/service:eflore:0.1/cel/images?navigation.depart=100&navigation.limite=100&masque.nn=62018,182,141'; |
$this->assertEquals($urlHrefSuivantAttendue, $retour['entete']['href.suivant'], "Valeur entete > href.suivant = '$urlHrefSuivantAttendue'"); |
$this->assertArrayNotHasKey('href.precedent', $retour['entete'], "Abscence champ : entete > href.precedent"); |
$this->verifierResultatsChampsObligatoires($retour); |
$this->verifierResultatsValeursGenerique($retour); |
$this->assertCount(100, $retour['resultats'], 'Nbre resultats = 134'); |
$this->assertArrayHasKey('6114', $retour['resultats'], "Présence champ : resultats > 6114"); |
} |
public function testListeImagesJsonNavigation() { |
$ressources = array(); |
$parametres = array('masque.nn' => '62018,182,141', 'retour' => 'application/json', |
'navigation.depart' => 100, 'navigation.limite' => 100); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->verifierEnteteChampsObligatoires($retour); |
$this->assertEquals('nn=62018,182,141', $retour['entete']['masque'], 'Valeur entete > masque = "nn=62018,182,141"'); |
$this->assertSame((int)$parametres['navigation.depart'], $retour['entete']['depart'], "Valeur entete > depart = {$parametres['navigation.depart']}"); |
$this->assertSame((int)$parametres['navigation.limite'], $retour['entete']['limite'], "Valeur entete > limite = {$parametres['navigation.limite']}"); |
$this->assertSame(134, $retour['entete']['total'], 'Valeur entete > total = 134'); |
$this->assertArrayHasKey('href.precedent', $retour['entete'], "Présence champ : entete > href.precedent"); |
$urlHrefPrecedentAttendue = 'http://localhost/service:eflore:0.1/cel/images?navigation.depart=0&navigation.limite=100&masque.nn=62018,182,141'; |
$this->assertEquals($urlHrefPrecedentAttendue, $retour['entete']['href.precedent'], "Valeur entete > href.precedent = '$urlHrefPrecedentAttendue'"); |
$this->assertArrayNotHasKey('href.suivant', $retour['entete'], "Abscence champ : entete > href.suivant"); |
$this->verifierResultatsChampsObligatoires($retour); |
$this->verifierResultatsValeursGenerique($retour); |
} |
private function verifierEnteteChampsObligatoires($retour) { |
$this->assertArrayHasKey('entete', $retour, "Présence champ : entete"); |
$this->assertArrayHasKey('masque', $retour['entete'], "Présence champ : entete > masque"); |
$this->assertArrayHasKey('depart', $retour['entete'], "Présence champ : entete > depart"); |
$this->assertArrayHasKey('limite', $retour['entete'], "Présence champ : entete > limite"); |
$this->assertArrayHasKey('total', $retour['entete'], "Présence champ : entete > total"); |
} |
private function verifierResultatsChampsObligatoires($retour) { |
$this->assertArrayHasKey('resultats', $retour, "Présence champ : resultats"); |
foreach ($retour['resultats'] as $id => $resultat) { |
$this->assertTrue(is_int($id), "id = nbre entier : $id"); |
$this->assertArrayHasKey('date', $resultat, "Présence champ : resultats > $id > date"); |
$this->assertArrayHasKey('mime', $resultat, "Présence champ : resultats > $id > mime"); |
$this->assertArrayHasKey('binaire.href', $resultat, "Présence champ : resultats > $id > binaire.href"); |
$this->assertArrayHasKey('determination', $resultat, "Présence champ : resultats > $id > determination"); |
$this->assertArrayHasKey('determination.nom_sci', $resultat, "Présence champ : resultats > $id > determination.nom_sci"); |
$this->assertArrayHasKey('determination.nom_sci.code', $resultat, "Présence champ : resultats > $id > determination.nom_sci.code"); |
$this->assertArrayHasKey('station', $resultat, "Présence champ : resultats > $id > station"); |
$this->assertArrayHasKey('auteur', $resultat, "Présence champ : resultats > $id > auteur"); |
} |
} |
private function verifierResultatsValeursGenerique($retour) { |
foreach ($retour['resultats'] as $id => $resultat) { |
$this->assertRegExp("/$id/", $resultat['binaire.href']); |
} |
} |
public function testDateAnterieur1901() { |
$ressources = array('41825'); |
$parametres = array('referentiel'=>'bdtfx'); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertArrayHasKey('date', $retour, "Présence champ : date"); |
$this->assertEquals("1891-00-00 00:00:00", $retour['date'], 'Valeur date <> 1891'); |
} |
} |
?> |
/tags/v0.1-20130830/services/tests/0.1/chorodep/ChorodepObservationsTest.php |
---|
New file |
0,0 → 1,48 |
<?php |
require_once dirname(__FILE__).'/../ServiceEflorePhpUnit.php'; |
class ChorodepObservationsTest extends ServiceEflorePhpUnit { |
public function __construct() { |
$this->projet = 'chorodep'; |
$this->service = 'observations'; |
} |
public function testRecherche() { |
$ressources = array(); |
$parametres = array(); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertNotEmpty($retour, print_r($retour, true)); |
$this->assertNotEmpty($retour['entete'], print_r($retour['entete'], true)); |
$this->assertEquals(20, $retour['entete']['total'], "L'attribut 'total' devrait avoir la valeur '20'. Voir : $url"); |
$this->assertEquals(20, count($retour['resultat']), "Il devrait y avoir '20' résultats. Voir : $url"); |
} |
public function testObservation() { |
$ressources = array("10:20"); |
$parametres = array(); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertNotEmpty($retour, print_r($retour, true)); |
$this->assertArrayHasKey('type', $retour, "Le json ne contient pas d'attribut : type. Voir : $url"); |
$this->assertEquals('chorologie', $retour['type'], "L'attribut 'type' devrait avoir la valeur 'chorologie'. Voir : $url"); |
} |
public function testMasqueStation() { |
$ressources = array(); |
$parametres = array('masque.station' => '34', 'retour.format' => 'min'); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertNotEmpty($retour, 'pas de resultat'.print_r($retour, true)); |
$this->assertNotEmpty($retour['entete'], 'pas d\'entete'.print_r($retour['entete'], true)); |
$this->assertEquals(20, $retour['entete']['total'], "L'attribut 'total' devrait avoir la valeur '20'. Voir : $url"); |
$this->assertEquals(20, count($retour['resultat']), "L'attribut 'total' devrait avoir la valeur '20'. Voir : $url"); |
$this->assertNotEmpty($retour['resultat']['197:34'], 'resultat 197:34 absent'.print_r($retour['resultat']['74929:03'], true)); |
/*$this->assertArrayHasKey('type', $retour['resultat']['74929:03'], "Le json ne contient pas d'attribut : type. Voir : $url"); |
$this->assertEquals('chorologie', $retour['resultat']['74929:03']['type'], "L'attribut 'type' devrait avoir la valeur 'chorologie'. Voir : $url");*/ |
// TODO: implémenter "chorodep/observations/10:25?masque.station=34&retour.format=min" |
} |
} |
?> |
/tags/v0.1-20130830/services/tests/0.1/chorodep/ChorodepCartesTest.php |
---|
New file |
0,0 → 1,135 |
<?php |
require_once dirname(__FILE__).'/../ServiceEflorePhpUnit.php'; |
class ChorodepCartesTest extends ServiceEflorePhpUnit { |
private $retour = ''; |
private $svg = ''; |
public function __construct() { |
$this->projet = 'chorodep'; |
$this->service = 'cartes'; |
} |
public function setUp() { |
$this->retour = ''; |
$this->svg = ''; |
} |
public function testCarteGenerique() { |
$ressources = array(); |
$parametres = array('version.projet' => '2012.01'); |
$this->retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); |
$this->verifierPresenceMessage("A implémenter : carte proportionnelle ensemble des infos"); |
} |
public function testCarteGeneriqueLegende() { |
$ressources = array('legende'); |
$parametres = array('version.projet' => '2012.01'); |
$this->retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); |
$this->verifierPresenceMessage("A implémenter : légende carte proportionnelle ensemble des infos"); |
} |
public function testErreurRessource1() { |
$ressources = array('ressource1Erreur'); |
$parametres = array('version.projet' => '2012.01'); |
$this->retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); |
$this->verifierPresenceMessage("La ressource n°1 '{$ressources[0]} indiquée n'est pas valable."); |
} |
public function testCarteSvgIdentifiants() { |
$ressourcesListe = array( |
array('3237'), |
array('nn:3237'), |
array('bdtfx.nn:3237') |
); |
$parametres = array('version.projet' => '2012.01', |
'retour' => 'image/svg+xml'); |
foreach ($ressourcesListe as $ressources) { |
$this->retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); |
$this->chargerXml(); |
$this->etreSvg(); |
$this->verifierDepartementsPresence(array(63, 81)); |
} |
} |
public function testCarteSvgPlusieursLegendes() { |
$ressources = array('bdtfx.nn:71574'); |
$parametres = array('version.projet' => '2012.01', |
'retour' => 'image/svg+xml'); |
$this->retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); |
$this->chargerXml(); |
$this->etreSvg(); |
$this->verifierDepartementsPresence(array('02', '07', '57', '67', '88', '68', '90', '25', '21', '39', '01', '74', '73', '38', '46', '83')); |
$this->verifierDepartementsPresenceAConfirmer(array('62', '71')); |
$this->verifierDepartementsDisparu(array('70')); |
$this->verifierDepartementsErreur(array('06')); |
} |
private function verifierPresenceMessage($messageAttendu) { |
$this->assertEquals($messageAttendu, $this->retour); |
} |
private function chargerXml() { |
$this->svg = new DOMDocument(); |
$chargement = $this->svg->loadXML($this->retour); |
$this->assertTrue($chargement); |
} |
private function etreSvg() { |
$racineElement = $this->svg->documentElement; |
$this->assertEquals('svg', $racineElement->tagName); |
} |
private function verifierDepartementsPresence($departements) { |
$this->verifierReglesCssCouleur('A0FF7D', $departements); |
} |
private function verifierDepartementsPresenceAConfirmer($departements) { |
$this->verifierReglesCssCouleur('FFFF32', $departements); |
} |
private function verifierDepartementsDouteux($departements) { |
$this->verifierReglesCssCouleur('FFCB30', $departements); |
} |
private function verifierDepartementsDisparu($departements) { |
$this->verifierReglesCssCouleur('F88017', $departements); |
} |
private function verifierDepartementsErreur($departements) { |
$this->verifierReglesCssCouleur('FF2850', $departements); |
} |
private function verifierDepartementsErreurAConfirmer($departements) { |
$this->verifierReglesCssCouleur('9F0016', $departements); |
} |
private function verifierReglesCssCouleur($couleur, $departements) { |
sort($departements); |
$cssRegles = $this->getListeReglesCss($departements); |
$cssAttendu = "$cssRegles{\nfill:#$couleur;\n}"; |
$cssPresent = $this->svg->getElementsByTagName('style')->item(0)->nodeValue; |
$this->assertContains($cssAttendu, $cssPresent); |
} |
private function getListeReglesCss($departements) { |
foreach ($departements as $id => $val) { |
$departements[$id] = '.departement'.$val; |
} |
$cssRegle = implode(', ', $departements); |
return $cssRegle; |
} |
} |
?> |
/tags/v0.1-20130830/services/tests/0.1/chorodep/ChorodepOntologiesTest.php |
---|
New file |
0,0 → 1,48 |
<?php |
require_once dirname(__FILE__).'/../ServiceEflorePhpUnit.php'; |
class ChorodepOntologiesTest extends ServiceEflorePhpUnit { |
public function __construct() { |
$this->projet = 'chorodep'; |
$this->service = 'ontologies'; |
} |
public function testRecherche() { |
$ressources = array(); |
$parametres = array(); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertNotEmpty($retour, 'données absentes'); |
$this->assertArrayHasKey('total', $retour['entete'], "Le json ne contient pas d'attribut : total. Voir : $url"); |
$this->assertEquals('8', $retour['entete']['total'], "L'attribut 'total' devrait avoir la valeur '8'. Voir : $url"); |
$this->assertArrayHasKey('nom', $retour['resultat'][1], "Le json ne contient pas d'attribut : nom. Voir : $url"); |
$this->assertEquals('presenceChorologie', $retour['resultat'][1]['nom'], "L'attribut 'nom' devrait avoir la valeur 'presenceChorologie'. Voir : $url"); |
} |
public function testMasqueCode() { |
$ressources = array(); |
$parametres = array('masque.code' => '?'); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertNotEmpty($retour, 'données absentes'); |
$this->assertArrayHasKey('total', $retour['entete'], "Le json ne contient pas d'attribut : total. Voir : $url"); |
$this->assertEquals('1', $retour['entete']['total'], "L'attribut 'total' devrait avoir la valeur '1'. Voir : $url"); |
$this->assertArrayHasKey('5', $retour['resultat'], "L'ontologie n°5 ne fait pas partie du résultat. Voir : $url"); |
$this->assertArrayHasKey('nom', $retour['resultat'][5], "Le json ne contient pas d'attribut : nom. Voir : $url"); |
$this->assertEquals('douteux', $retour['resultat'][5]['nom'], "L'attribut 'nom' devrait avoir la valeur 'douteux'. Voir : $url"); |
} |
public function testMasqueNom() { |
$ressources = array(); |
$parametres = array('masque.nom' => 'disparu'); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertNotEmpty($retour, 'données absentes'); |
$this->assertArrayHasKey('total', $retour['entete'], "Le json ne contient pas d'attribut : total. Voir : $url"); |
$this->assertEquals('1', $retour['entete']['total'], "L'attribut 'total' devrait avoir la valeur '1'. Voir : $url"); |
$this->assertArrayHasKey('code', $retour['resultat'][6], "Le json ne contient pas d'attribut : code. Voir : $url"); |
$this->assertEquals('-|-', $retour['resultat'][6]['code'], "L'attribut 'code' devrait avoir la valeur '-|-'. Voir : $url"); |
} |
} |
?> |
/tags/v0.1-20130830/services/tests/0.1/bibliobota/PublicationsTest.php |
---|
New file |
0,0 → 1,33 |
<?php |
require_once dirname(__FILE__).'/../ServiceEflorePhpUnit.php'; |
class PublicationsTest extends ServiceEflorePhpUnit { |
public function __construct() { |
$this->projet = 'bibliobota'; |
$this->service = 'publications'; |
} |
public function testObtenirPublicationSansMasqueTaxon() { |
$ressources = array(); |
$parametres = array(); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertEquals('', $retour['entete']['masque'], 'Valeur entete > ""'); |
$this->assertSame(29689, $retour['entete']['total'], 'Valeur entete > total = 29689'); |
$this->assertArrayHasKey(463, $retour['resultats'], "Absence du résultat 463 attendu"); |
$this->assertArrayHasKey('href.suivant', $retour['entete'], "Absence de lien href suivant attendu"); |
} |
public function testObtenirPublication() { |
$ressources = array(); |
$parametres = array('masque.taxon' => 'Acer monspessulanum'); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertEquals('masque.taxon=Acer monspessulanum', $retour['entete']['masque'], 'Valeur entete > masque.taxon=Acer monspessulanum'); |
$this->assertSame(4, $retour['entete']['total'], 'Valeur entete > total = 4'); |
$this->assertArrayHasKey(21991, $retour['resultats'], "Absence du résultat 21991 attendu"); |
$this->assertArrayNotHasKey('href.suivant', $retour['entete'], "Le lien href suivant est présent alors qu'il ne devrait pas"); |
} |
} |
?> |
/tags/v0.1-20130830/services/tests/0.1/wikipedia/WikipediaTexteTest.php |
---|
New file |
0,0 → 1,59 |
<?php |
require_once dirname(__FILE__).'/../ServiceEflorePhpUnit.php'; |
class WikipediaTest extends ServiceEflorePhpUnit { |
public function __construct() { |
$this->projet = 'wikipedia'; |
$this->service = 'textes'; |
} |
public function testPageComplete() { |
$ressources = array('Viola_alba'); |
$parametres = array('txt.format'=> 'htm'); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertEquals("Violette blanche", $retour['titre'], "Le titre n'est pas celui attendu. Voir : $url"); |
$this->assertArrayHasKey('id', $retour, "Le json ne contient pas d'attribut : id. Voir : $url"); |
$this->assertArrayHasKey('titre', $retour, "Le json ne contient pas d'attribut : titre. Voir : $url"); |
$this->assertArrayHasKey('texte', $retour, "Le json ne contient pas d'attribut : texte. Voir : $url"); |
$this->assertContains("<a href=\"http://fr.wikipedia.org/wiki/Fichier:Viola_alba", $retour['texte'], "Le titre n'est pas celui attendu. Voir : $url"); |
$this->assertArrayHasKey('mime', $retour, "Le json ne contient pas d'attribut : mime. Voir : $url"); |
$this->assertArrayHasKey('href', $retour, "Le json ne contient pas d'attribut : href. Voir : $url"); |
} |
public function testDescription() { |
$ressources = array('Viola_alba'); |
$parametres = array('txt.format'=> 'htm', |
'txt.section.titre' => 'Description'); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertArrayHasKey('id', $retour, "Le json ne contient pas d'attribut : id. Voir : $url"); |
$this->assertArrayHasKey('titre', $retour, "Le json ne contient pas d'attribut : titre. Voir : $url"); |
$this->assertEquals("Violette blanche", $retour['titre'], "Le titre n'est pas celui attendu. Voir : $url"); |
$this->assertArrayHasKey('texte', $retour, "Le json ne contient pas d'attribut : texte. Voir : $url"); |
$this->assertEquals("<p>C'est une espèce ", substr($retour['texte'], 0, 21), "Le texte n'est pas celui attendu. Voir : $url"); |
} |
public function testCaracteristiques() { |
$ressources = array('Viola_alba'); |
$parametres = array('txt.format'=> 'htm', |
'txt.section.titre' => 'Caractéristiques'); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertEquals("Violette blanche", $retour['titre'], "Le titre n'est pas celui attendu. Voir : $url"); |
$this->assertArrayHasKey('texte', $retour, "Le json ne contient pas d'attribut : texte. Voir : $url"); |
$debut_chara = '<ul> |
<li>organes repr'; |
$this->assertEquals($debut_chara, trim(substr($retour['texte'], 0, 21)), "Le texte n'est pas celui attendu. Voir : $url"); |
} |
} |
?> |
/tags/v0.1-20130830/services/tests/0.1/bdtfx/BdtfxNomsTest.php |
---|
New file |
0,0 → 1,289 |
<?php |
require_once dirname(__FILE__).'/../ServiceEflorePhpUnit.php'; |
class BdtfxNomsTest extends ServiceEflorePhpUnit { |
public function __construct() { |
$this->projet = 'bdtfx'; |
$this->service = 'noms'; |
} |
public function testVersionPrecise() { |
$ressources = array(); |
$parametres = array('version.projet' => '1.01'); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertArrayHasKey('entete', $retour, "Le json ne contient pas d'attribut : entete. Voir : $url"); |
$this->assertArrayHasKey('resultat', $retour, "Le json ne contient pas d'attribut : resultat. Voir : $url"); |
} |
public function testNomsIdVersionMultiple() { |
$ressources = array('71711'); |
$parametres = array('version.projet' => '*'); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertArrayHasKey('bdtfx_v1_01', $retour, "Le json ne contient pas d'attribut : bdtfx_v1_01.\nVoir : $url"); |
$this->assertArrayHasKey('bdtfx_v1_02', $retour, "Le json ne contient pas d'attribut : bdtfx_v1_02.\nVoir : $url"); |
$this->assertEquals('71711', $retour['bdtfx_v1_01']['id'], "'bdtfx_v1_01' doit contenir un attribut 'id' avec la valeur '71711'"); |
$this->assertEquals('71711', $retour['bdtfx_v1_02']['id'], "'bdtfx_v1_02' doit contenir un attribut 'id' avec la valeur '71711'"); |
} |
public function testNomsVersionMultiple() { |
$ressources = array(); |
$parametres = array('version.projet' => '*'); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); |
$attendu = "L'affichage de plusieurs versions ne fonctionne que pour les ressources de type /ressources/#id"; |
$message = "L'url :\n'$url'\n doit retourner un résultat de la forme :\n $attendu"; |
$this->assertEquals($attendu, $retour, $message); |
} |
public function testVersionInexistante() { |
$ressources = array(); |
$parametres = array('version.projet' => '99.00'); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); |
$attendu = 'La requête SQL formée comporte une erreur!'; |
$message = "L'url :\n'$url'\n doit retourner un résultat de la forme :\n $attendu"; |
$this->assertEquals($attendu, $retour, $message); |
} |
public function testRechercheStricte() { |
$ressources = array(); |
$parametres = array( |
'version.projet' => '1.01', |
'recherche' => 'stricte', |
'masque' => 'Acer'); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertArrayHasKey('entete', $retour, "Le json ne contient pas d'attribut : entete. Voir : $url"); |
$this->assertArrayHasKey('resultat', $retour, "Le json ne contient pas d'attribut : resultat. Voir : $url"); |
$this->assertEquals('1', $retour['entete']['total'], "L'attribut 'total' de l'entête devrait valoir 1. Voir : $url"); |
$this->assertEquals(1, count($retour['resultat']), "Le résultat devrait contenir une seule donnée. Voir : $url"); |
} |
public function testResultatChamps() { |
$ressources = array(); |
$parametres = array( |
'version.projet' => '1.01', |
'recherche' => 'stricte', |
'masque.nn' => '182'); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertArrayHasKey('resultat', $retour, "Le json ne contient pas d'attribut : resultat. Voir : $url"); |
$this->assertEquals(1, count($retour['resultat']), "Le résultat devrait contenir une seule donnée. Voir : $url"); |
$this->assertArrayNotHasKey('id', $retour['resultat']['182'], "Le tableau du résultat 182 ne doit pas contenir un champ 'id'. Voir : $url"); |
$this->assertArrayHasKey('retenu', $retour['resultat']['182'], "Le tableau du résultat 182 doit contenir un champ 'id'. Voir : $url"); |
$this->assertEquals('true', $retour['resultat']['182']['retenu'], "Le tableau du résultat 182 doit contenir un champ 'retenu' avec pour valeur 'true'. Voir : $url"); |
$this->assertArrayHasKey('nom_sci', $retour['resultat']['182'], "Le tableau du résultat 182 doit contenir un champ 'nom_sci'. Voir : $url"); |
$this->assertEquals('Acer monspessulanum', $retour['resultat']['182']['nom_sci'], "Le tableau du résultat 182 doit contenir un champ 'nom_sci' avec pour valeur 'Acer monspessulanum'. Voir : $url"); |
} |
public function testMasqueSg() { |
$ressources = array(); |
$parametres = array( |
'version.projet' => '1.01', |
'recherche' => 'stricte', |
'masque.sg' => 'Asteraceae'); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertArrayHasKey('entete', $retour, "Le json ne contient pas d'attribut : entete. Voir : $url"); |
$this->assertEquals('nom_supra_generique=Asteraceae', $retour['entete']['masque'], "L'attribut 'masque' de l'entête devrait valoir 'nom_supra_generique=Asteraceae'. Voir : $url"); |
$this->assertArrayHasKey('resultat', $retour, "Le json ne contient pas d'attribut : resultat. Voir : $url"); |
$this->assertEquals('1', $retour['entete']['total'], "L'attribut 'total' de l'entête devrait valoir 1. Voir : $url"); |
$this->assertEquals(1, count($retour['resultat']), "Le résultat devrait contenir une seule donnée. Voir : $url"); |
} |
public function testMasqueGenSpSspAuAn() { |
$ressources = array(); |
$parametres = array( |
'version.projet' => '1.01', |
'recherche' => 'stricte', |
'masque.gen' => 'Allium', |
'masque.sp' => 'carinatum', |
'masque.ssp' => 'consimile', |
'masque.au' => 'Gren.', |
'masque.an' => '1855'); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertArrayHasKey('entete', $retour, "Le json ne contient pas d'attribut : entete. Voir : $url"); |
$masque = 'genre=Allium&epithete_sp=carinatum&epithete_infra_sp=consimile&auteur=Gren.&annee=1855'; |
$message = "L'attribut 'masque' de l'entête devrait valoir '$masque'. Voir : $url"; |
$this->assertEquals($masque, $retour['entete']['masque'], $message); |
$this->assertArrayHasKey('resultat', $retour, "Le json ne contient pas d'attribut : resultat. Voir : $url"); |
$this->assertEquals('1', $retour['entete']['total'], "L'attribut 'total' de l'entête devrait valoir 1. Voir : $url"); |
$this->assertEquals(1, count($retour['resultat']), "Le résultat devrait contenir une seule donnée. Voir : $url"); |
} |
public function testMasqueNn() { |
$ressources = array(); |
$parametres = array( |
'version.projet' => '1.01', |
'recherche' => 'stricte', |
'masque.nn' => '182'); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertArrayHasKey('entete', $retour, "Le json ne contient pas d'attribut : entete. Voir : $url"); |
$masque = 'num_nom=182'; |
$message = "L'attribut 'masque' de l'entête devrait valoir '$masque'. Voir : $url"; |
$this->assertEquals($masque, $retour['entete']['masque'], $message); |
$this->assertEquals('1', $retour['entete']['total'], "L'attribut 'total' de l'entête devrait valoir 1. Voir : $url"); |
$this->assertArrayHasKey('resultat', $retour, "Le json ne contient pas d'attribut : resultat. Voir : $url"); |
$this->assertEquals(1, count($retour['resultat']), "Le résultat devrait contenir une seule donnée. Voir : $url"); |
$this->assertArrayNotHasKey('id', $retour['resultat']['182'], "Le tableau du résultat 182 doit contenir un champ 'id'. Voir : $url"); |
} |
public function testMasqueRg() { |
$ressources = array(); |
$parametres = array( |
'version.projet' => '1.01', |
'recherche' => 'stricte', |
'masque.rg' => '180'); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertArrayHasKey('entete', $retour, "Le json ne contient pas d'attribut : entete. Voir : $url"); |
$masque = 'rang=180'; |
$message = "L'attribut 'masque' de l'entête devrait valoir '$masque'. Voir : $url"; |
$this->assertEquals($masque, $retour['entete']['masque'], $message); |
$this->assertEquals('210', $retour['entete']['total'], "L'attribut 'total' de l'entête devrait valoir 210. Voir : $url"); |
} |
public function testNsStructureTxt() { |
$ressources = array(); |
$parametres = array( |
'version.projet' => '1.01', |
'recherche' => 'stricte', |
'masque.nn' => '182', |
'ns.format' => 'txt', |
'ns.structure' => 'au,an,bib,ad'); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertArrayHasKey('entete', $retour, "Le json ne contient pas d'attribut : entete. Voir : $url"); |
$masque = 'num_nom=182'; |
$message = "L'attribut 'masque' de l'entête devrait valoir '$masque'. Voir : $url"; |
$this->assertEquals($masque, $retour['entete']['masque'], $message); |
$this->assertEquals('1', $retour['entete']['total'], "L'attribut 'total' de l'entête devrait valoir 1. Voir : $url"); |
$this->assertArrayHasKey('resultat', $retour, "Le json ne contient pas d'attribut : resultat. Voir : $url"); |
$this->assertEquals('Acer monspessulanum L. [1753, Sp. Pl., éd. 1 : 1056]', $retour['resultat']['182']['nom_sci_complet'], "Le tableau du résultat 182 doit contenir un champ 'nom_sci' avec pour valeur 'Acer monspessulanum'. Voir : $url"); |
} |
public function testNsStructureHtml() { |
$ressources = array(); |
$parametres = array( |
'version.projet' => '1.01', |
'recherche' => 'stricte', |
'masque.nn' => '182', |
'ns.format' => 'htm', |
'ns.structure' => 'au,an,bib,ad'); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertArrayHasKey('entete', $retour, "Le json ne contient pas d'attribut : entete. Voir : $url"); |
$masque = 'num_nom=182'; |
$message = "L'attribut 'masque' de l'entête devrait valoir '$masque'. Voir : $url"; |
$this->assertEquals($masque, $retour['entete']['masque'], $message); |
$this->assertEquals('1', $retour['entete']['total'], "L'attribut 'total' de l'entête devrait valoir 1. Voir : $url"); |
$this->assertArrayHasKey('resultat', $retour, "Le json ne contient pas d'attribut : resultat.\nVoir : $url"); |
$attendu = '<span class="sci"><span class="gen">Acer</span> <span class="sp">monspessulanum</span></span> <span class="auteur">L.</span> [<span class="annee">1753</span>, <span class="biblio">Sp. Pl., éd. 1 : 1056</span>]'; |
$message = "Le tableau du résultat 182 doit contenir un champ 'nom_sci' avec pour valeur '$attendu'. Voir : $url"; |
$this->assertEquals($attendu, $retour['resultat']['182']['nom_sci_complet'], $message); |
} |
public function testListeNomsAvecParametreRetourChamps() { |
$ressources = array(); |
$parametres = array('version.projet' => '1.01', |
'masque' => 'acer', |
'retour.champs' => 'auteur,nom_retenu.*'); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertArrayHasKey('auteur', $retour['resultat']['83587']); |
$this->assertArrayHasKey('nom_retenu.id', $retour['resultat']['83587']); |
$this->assertArrayHasKey('nom_retenu.href', $retour['resultat']['83587']); |
$this->assertArrayNotHasKey('nom_retenu', $retour['resultat']['83587']); |
} |
public function testNomsIdAvecParametreRetourChamps() { |
$ressources = array(1); |
$parametres = array('version.projet' => '1.01', |
'retour.champs' => 'nom_retenu.*'); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertArrayHasKey('nom_retenu.id', $retour); |
$this->assertArrayHasKey('nom_retenu.href', $retour); |
$this->assertArrayNotHasKey('nom_retenu', $retour); |
$this->assertArrayNotHasKey('auteur', $retour); |
} |
public function testListeNomAvecParametreNsStructureAuAnBibAd() { |
$ressources = array(); |
$parametres = array('version.projet' => '1.01', |
'masque.nn' => '39607', |
'ns.structure' => 'au,an,bib,ad'); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertArrayHasKey('resultat', $retour); |
$this->assertArrayHasKey('39607', $retour['resultat']); |
$this->assertArrayHasKey('nom_sci', $retour['resultat']['39607']); |
$nomSciTxt = 'Lolium annuum Gilib. [1792, Exercit. Phytol., 2 : 520] [nom. invalid.]'; |
$this->assertEquals($nomSciTxt, $retour['resultat']['39607']['nom_sci_complet']); |
} |
public function testListeNomAvecParametreNsStructureAuAnBibAdEtNsFormatHtm() { |
$ressources = array(); |
$parametres = array('version.projet' => '1.01', |
'masque.nn' => '39607', |
'ns.structure' => 'au,an,bib,ad', |
'ns.format' => 'htm'); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertArrayHasKey('entete', $retour); |
$this->assertArrayHasKey('masque', $retour['entete']); |
$this->assertEquals('num_nom=39607', $retour['entete']['masque']); |
$this->assertArrayHasKey('resultat', $retour); |
$this->assertArrayHasKey('39607', $retour['resultat']); |
$this->assertArrayHasKey('nom_sci', $retour['resultat']['39607']); |
$nomSciHtml = "<span class=\"sci\"><span class=\"gen\">Lolium</span> <span class=\"sp\">annuum</span></span> <span class=\"auteur\">Gilib.</span> [<span class=\"annee\">1792</span>, <span class=\"biblio\">Exercit. Phytol., 2 : 520</span>] [<span class=\"adendum\">nom. invalid.</span>]"; |
$this->assertEquals($nomSciHtml, $retour['resultat']['39607']['nom_sci_complet']); |
} |
public function testListeNomAvecParametreRetourChamps() { |
$ressources = array(); |
$parametres = array('version.projet' => '1.01', |
'masque.nn' => '39607', |
'retour.champs' => 'rang,auteur'); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertArrayHasKey('entete', $retour); |
$this->assertArrayHasKey('masque', $retour['entete']); |
$this->assertEquals('num_nom=39607', $retour['entete']['masque']); |
$this->assertArrayHasKey('resultat', $retour); |
$this->assertArrayHasKey('39607', $retour['resultat']); |
$this->assertArrayHasKey('rang.libelle', $retour['resultat']['39607']); |
$this->assertEquals('Espèce', $retour['resultat']['39607']['rang.libelle']); |
$this->assertArrayHasKey('auteur', $retour['resultat']['39607']); |
$this->assertEquals('Gilib.', $retour['resultat']['39607']['auteur']); |
} |
} |
?> |
/tags/v0.1-20130830/services/tests/0.1/bdtfx/BdtfxTaxonsTest.php |
---|
New file |
0,0 → 1,127 |
<?php |
require_once dirname(__FILE__).'/../ServiceEflorePhpUnit.php'; |
class BdtfxTaxonsTest extends ServiceEflorePhpUnit { |
public function __construct() { |
$this->projet = 'bdtfx'; |
$this->service = 'taxons'; |
} |
public function testVersionPrecise() { |
$ressources = array(); |
$parametres = array('version.projet' => '1.01'); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertArrayHasKey('entete', $retour, "Le json ne contient pas d'attribut : entete. Voir : $url"); |
$this->assertArrayHasKey('resultat', $retour, "Le json ne contient pas d'attribut : resultat. Voir : $url"); |
} |
public function testNomsIdVersionMultiple() { |
$ressources = array('182'); |
$parametres = array('version.projet' => '*'); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
/* NI (anymore ?) |
$this->assertArrayHasKey('bdtfx_v1_01', $retour, "Le json ne contient pas d'attribut : bdtfx_v1_01.\nVoir : $url"); |
$this->assertArrayHasKey('bdtfx_v1_02', $retour, "Le json ne contient pas d'attribut : bdtfx_v1_02.\nVoir : $url"); |
$this->assertEquals('182', $retour['bdtfx_v1_01']['id'], "'bdtfx_v1_01' doit contenir un attribut 'id' avec la valeur '182'"); |
$this->assertEquals('182', $retour['bdtfx_v1_02']['id'], "'bdtfx_v1_02' doit contenir un attribut 'id' avec la valeur '182'"); |
*/ |
$this->assertEquals('182', $retour['id'], "doit contenir un attribut 'id' avec la valeur '182'"); |
} |
public function testNomsVersionMultiple() { |
$ressources = array(); |
$parametres = array('version.projet' => '*'); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); |
$attendu = "L'affichage de plusieurs versions ne fonctionne que pour les ressources de type /ressources/#id"; |
$message = "L'url :\n'$url'\n doit retourner un résultat de la forme :\n $attendu"; |
$this->assertEquals($attendu, $retour, $message); |
} |
public function testVersionInexistante() { |
$ressources = array(); |
$parametres = array('version.projet' => '99.00'); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); |
$attendu = 'La requête SQL formée comporte une erreur!'; |
$message = "L'url :\n'$url'\n doit retourner un résultat de la forme :\n $attendu"; |
$this->assertEquals($attendu, $retour, $message); |
} |
public function testRechercheStricte() { |
$ressources = array(); |
$parametres = array( |
'version.projet' => '1.01', |
'recherche' => 'stricte', |
'masque' => 'Acer'); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertArrayHasKey('entete', $retour, "Le json ne contient pas d'attribut : entete. Voir : $url"); |
$this->assertArrayHasKey('resultat', $retour, "Le json ne contient pas d'attribut : resultat. Voir : $url"); |
$this->assertEquals('1', $retour['entete']['total'], "L'attribut 'total' de l'entête devrait valoir 1. Voir : $url"); |
$this->assertEquals(1, count($retour['resultat']), "Le résultat devrait contenir une seule donnée. Voir : $url"); |
} |
public function testRechercheEtendue() { |
$ressources = array(); |
$parametres = array( |
'version.projet' => '1.01', |
'recherche' => 'etendue', |
'masque' => 'Acer'); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertArrayHasKey('entete', $retour, "Le json ne contient pas d'attribut : entete. Voir : $url"); |
$this->assertArrayHasKey('resultat', $retour, "Le json ne contient pas d'attribut : resultat. Voir : $url"); |
$this->assertEquals('50', $retour['entete']['total'], "L'attribut total de l'entête devrait valoir 50. Voir : $url"); |
$this->assertEquals(50, count($retour['resultat']), "Le résultat devrait contenir 50 données. Voir : $url"); |
} |
public function testRechercheFloue() { |
$ressources = array(); |
$parametres = array( |
'version.projet' => '1.01', |
'recherche' => 'floue', |
'masque' => 'Acer'); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertArrayHasKey('entete', $retour, "Le json ne contient pas d'attribut : entete. Voir : $url"); |
$this->assertArrayHasKey('resultat', $retour, "Le json ne contient pas d'attribut : resultat. Voir : $url"); |
$this->assertEquals('3', $retour['entete']['total'], "L'attribut total de l'entête devrait valoir 3. Voir : $url"); |
$this->assertEquals(3, count($retour['resultat']), "Le résultat devrait contenir 3 données. Voir : $url"); |
} |
public function testTaxonsInf() { |
$ressources = array('13609', 'relations', 'inferieurs'); |
$parametres = array(); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertArrayHasKey('13609', $retour, "Le json ne contient pas le num tax en indice. Voir : $url"); |
$this->assertEquals('2', count($retour['13609']), "Le json ne contient pas le nom de taxons inf attendu. Voir : $url"); |
$this->assertEquals("Carex cuprina var. cuprina", $retour['13609']['13610']['nom_sci'], "Le json ne contient pas les 1er taxon inf attendu. Voir : $url"); |
} |
public function testTaxonsSup() { |
$ressources = array('13609', 'relations', 'superieurs'); |
$parametres = array(); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertArrayHasKey('13609', $retour, "Le json ne contient pas le num tax en indice. Voir : $url"); |
$this->assertEquals('14', count($retour['13609']), "Le json ne contient pas le nom de taxons inf attendu. Voir : $url"); |
$this->assertEquals("Chlorobiontes", $retour['13609']['101140']['nom_sci'], "Le json ne contient pas les 1er taxon inf attendu. Voir : $url"); |
} |
} |
?> |
/tags/v0.1-20130830/services/tests/0.1/iso-639-1/Iso6391LanguesTest.php |
---|
New file |
0,0 → 1,22 |
<?php |
require_once dirname(__FILE__).'/../ServiceEflorePhpUnit.php'; |
class Iso6391LanguesTest extends ServiceEflorePhpUnit { |
public function __construct() { |
$this->projet = 'iso-639-1'; |
$this->service = 'langues'; |
} |
public function testValeurChampPrecis() { |
$ressources = array('fr', 'nom'); |
$parametres = array(); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertArrayHasKey('id', $retour, "Le json ne contient pas d'attribut : id. Voir : $url"); |
$this->assertEquals('fr', $retour['id'], "L'attribut 'id' devrait avoir la valeur 'fr'. Voir : $url"); |
$this->assertArrayHasKey('nom.fr', $retour, "Le json ne contient pas d'attribut : nom.fr. Voir : $url"); |
$this->assertEquals('Français', $retour['nom.fr'], "L'attribut 'nom.fr' devrait avoir la valeur 'Français'. Voir : $url"); |
} |
} |
?> |
/tags/v0.1-20130830/services/tests/0.1/ServiceEflorePhpUnit.php |
---|
New file |
0,0 → 1,160 |
<?php |
// declare(encoding='UTF-8'); |
/** |
* Classe contenant des méthodes : |
* - d'intialisation des tests, |
* - refactorisant le code des tests, |
* - facilitant les tests. |
* |
* @category php 5.3 |
* @package Tests/Services |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
* @copyright Copyright (c) 2011, Tela Botanica (accueil@tela-botanica.org) |
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL |
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL |
* @version $Id$ |
*/ |
abstract class ServiceEflorePhpUnit extends PHPUnit_Framework_TestCase { |
/** Définir la valeur de cet attribut dans le constructeur de la classe de test.*/ |
protected $projet = ''; |
/** Définir la valeur de cet attribut dans le constructeur de la classe de test.*/ |
protected $service = ''; |
//+------------------------------------------------------------------------------------------------------+ |
// Intialisation |
public static function setUpBeforeClass() { |
error_reporting(E_ALL); |
self::chargerFramework(); |
// Enregistrement en première position des autoload de la méthode gérant les classes des services |
spl_autoload_register(array(get_class(), 'chargerClasseAuto')); |
} |
public static function chargerClasseAuto($classe) { |
if (class_exists($classe)) { |
return null; |
} |
$cheminBase = realpath(__DIR__.'/../../modules/0.1').'/'; |
$cheminsTests = __DIR__.'/'; |
$chemins = array($cheminBase, $cheminsTests); |
foreach ($chemins as $chemin) { |
$chemin = $chemin.$classe.'.php'; |
if (file_exists($chemin)) { |
require_once $chemin; |
} |
} |
} |
private static function chargerFramework() { |
$cheminRacine = realpath(dirname(__FILE__).'/../..').'/'; |
$framework = $cheminRacine.'framework.php'; |
if (!file_exists($framework)) { |
$e = "Veuillez paramétrer l'emplacement et la version du Framework dans le fichier $framework"; |
trigger_error($e, E_USER_ERROR); |
} else { |
// Inclusion du Framework |
require_once $framework; |
// Ajout d'information concernant cette application |
Framework::setCheminAppli($cheminRacine);// Obligatoire |
} |
} |
//+------------------------------------------------------------------------------------------------------+ |
// Refactorisation |
public function consulterJson($service, $projet, $ressources, $parametres = NULL) { |
$retourJson = self::consulterBrut($service, $projet, $ressources, $parametres); |
$retour = json_decode($retourJson, true); |
$url = self::creerUrl($service, $ressources, $parametres); |
$this->assertEquals(JSON_ERROR_NONE, json_last_error(), "Le json contient des erreurs qui bloquent le décodage. Voir : $url\n".print_r($retourJson, true)); |
return $retour; |
} |
static function consulterBrut($service, $projet, $ressources, $parametres = NULL) { |
array_unshift($ressources, $projet, $service); |
$projets = new Projets(); |
$retourJson = $projets->consulter($ressources, $parametres); |
return $retourJson; |
} |
static function creerUrl($service, $ressources, $parametres = NULL) { |
// TODO ? $version |
$ressourcesUrl = array(); |
foreach ($ressources as $ressource) { |
$ressourcesUrl[] = $ressource; |
} |
$ressourcesUrl = count($ressourcesUrl) > 0 ? '/'.implode('/', $ressourcesUrl) : ''; |
$parametresUrl = ''; |
if ($parametres) { |
foreach ($parametres as $cle => $valeur) { |
$parametresUrl[] = $cle.'='.rawurlencode($valeur); |
} |
$parametresUrl = '?'.implode('&', $parametresUrl); |
} |
return Config::get('url_service') . '/' . $service . $ressourcesUrl . $parametresUrl; |
} |
//+------------------------------------------------------------------------------------------------------+ |
// Méthodes facilitant les tests |
/** |
* Récupère un bouchon de classe abstraite. |
* Comment l'utiliser : |
* $classeAstraite = $this->getClasseAbstraite('MaClasse', array('param1', 'param2')); |
* $foo = $classeAstraite->methodeConcretePublique(); |
* |
* @param String $classeNom Le nom de la classe |
* @param Array $parametres Les paramètres à passer au constructeur. |
* @return Object Le bouchon de la classe abstraite |
*/ |
public function getClasseAbstraite($classeNom, Array $parametres) { |
$efloreScript = $this->getMockForAbstractClass($classeNom, $parametres); |
return $efloreScript; |
} |
/** |
* Récupère une méthode privée d'une classe pour tester/documenter. |
* Comment l'utiliser : |
* MyClass->foo(): |
* $cls = new MyClass(); |
* $foo = self::getPrivateMethode($cls, 'foo'); |
* $foo->invoke($cls, $...); |
* |
* @param object $objet Une instance de votre classe |
* @param string $methode Le nom de la méthode private |
* @return ReflectionMethod La méthode demandée |
*/ |
public static function getMethodePrivee($objet, $nomMethode) { |
$classe = new ReflectionClass($objet); |
$methode = $classe->getMethod($nomMethode); |
$methode->setAccessible(true); |
return $methode; |
} |
/** |
* Récupère une méthode protégée d'une classe pour tester/documenter. |
* Comment l'utiliser : |
* MyClass->foo(): |
* $cls = new MyClass(); |
* $foo = self::getProtectedMethode($cls, 'foo'); |
* $foo->invoke($cls, $...); |
* @param object $objet Une instance de votre classe |
* @param string $methode Le nom de la méthode protected |
* @return ReflectionMethod La méthode demandée |
*/ |
public static function getMethodeProtegee($objet, $nomMethode) { |
return self::getMethodePrivee($objet, $nomMethode); |
} |
} |
/* |
sed -i 's/$this->consulterBrut(/ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, /' $(grep -rl consulterBrut) |
sed -i 's/$this->consulterJson(/$this->consulterJson($this->service, $this->projet, /' $(grep -rl consulterJson) |
sed -i 's/$this->creerUrl(/ServiceEflorePhpUnit::creerUrl($this->service, /' $(grep -rl creerUrl) |
*/ |
?> |
/tags/v0.1-20130830/services/tests/0.1/baseveg/SyntaxonsTest.php |
---|
New file |
0,0 → 1,312 |
<?php |
require_once dirname(__FILE__).'/../ServiceEflorePhpUnit.php'; |
class SyntaxonsTest extends ServiceEflorePhpUnit { |
public function __construct() { |
$this->projet = 'baseveg'; |
$this->service = 'syntaxons'; |
} |
//++ ------------------------------------Test des ressources -----------------------------++ |
//la ressource demandée est t elle connue ? |
public function testRessourceInconnue() { |
$ressourcesList = array( |
array('inconnue'), |
array('code:07-2.0.1.0.1-08'), |
array('relations'), |
array('cle:bgwsd'), |
array('cle:5','relations'), |
array('cle:5','relations','synonymie'), |
array('cle:5','relations','niveaux-sup'), |
array('catminat:catminat'), |
array('catminat:45'), |
array('catminat:07-2.0.1.0.1-08','inconnu'), |
array('catminat:07-2.0.1.0.1-08','inconnu','synonymie'), |
array('catminat:07-2.0.1.0.1-08','relations','inconnu') |
); |
$parametres = array(); |
foreach ($ressourcesList as $ressources) { |
$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); |
$messageAttendu = "Erreur dans l'url de votre requête : </br> La ressource demandée n'existe pas."; |
$this->assertEquals($messageAttendu, $retour, "Il faut indiquer si une ressource est eronnée."); |
} |
} |
//++ ------------------------------------Test des parametres -----------------------------++ |
public function testParametreinconnu() { |
$ressourcesList = array( |
array('catminat:07-2.0.1.0.1-08'), |
array('cle:10'), |
array('catminat:07-2.0.1.0.1-08','relations','niveaux-sup'), |
array(), |
array('catminat:07-2.0.1.0.1-07','relations','synonymie'), |
array('catminat:07-2.0.1.0.1-07','relations') |
); |
$parametres = array('paramatre' => 'ORD'); |
foreach ($ressourcesList as $ressources) { |
$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); |
$messageAttendu = "Erreur dans les parametres de votre requête :". |
" </br> Le paramètre \" paramatre \" n'existe pas."; |
$this->assertEquals($messageAttendu, $retour, |
"Il faut indiquer si le masque est erronné."); |
} |
} |
public function testMasqueNiveauErronne() { |
$ressourcesList = array( |
array(), |
array('catminat:07-2.0.1.0.1-08','relations','niveaux-sup'), |
); |
$parametres = array('masque.niveau' => 'syn'); |
foreach ($ressourcesList as $ressources) { |
$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); |
$messageAttendu = "Erreur : valeur inconnue pour masque.niveau. valeurs possibles : ALL|ORD|CLA|SUBCLA|SUBORD|SUBALL|ASS|SUBASS|BC|DC|GRPT"; |
$this->assertEquals($messageAttendu, $retour, |
"Il faut indiquer si le masque est erronné."); |
} |
} |
public function testParametresNavigationNonAutorisesSyntaxonsCode() { |
$ressourcesList = array( |
array('catminat:07-2.0.1.0.1-08'), |
array('cle:6'), |
array('catminat:07-2.0.1.0.1-08','relations'), |
); |
$parametres = array('navigation.depart' => '0'); |
foreach ($ressourcesList as $ressources) { |
$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); |
$messageAttendu = $messageAttendu = "Erreur dans les parametres de votre requête :". |
" </br> Le paramètre \" navigation.depart \" n'existe pas."; |
$this->assertEquals($messageAttendu, $retour, |
"Il faut indiquer que le parametre navigation.depart est interdit pour ce sous-service."); |
} |
$parametres = array('navigation.limite' => '10'); |
foreach ($ressourcesList as $ressources) { |
$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); |
$messageAttendu = $messageAttendu = "Erreur dans les parametres de votre requête :". |
" </br> Le paramètre \" navigation.limite \" n'existe pas."; |
$this->assertEquals($messageAttendu, $retour, |
"Il faut indiquer que le parametre navigation.limite est interdit pour ce sous-service."); |
} |
} |
public function testParametresMasqueCatminatNonAutorise() { |
$ressourcesList = array( |
array('catminat:07-2.0.1.0.1-08'), |
array('cle:6'), |
array('catminat:07-2.0.1.0.1-08','relations'), |
array('catminat:07-2.0.1.0.1-08','relations','synonymie') |
); |
$parametres = array('masque.catminat' => '07-2.0.1.0.1-08'); |
foreach ($ressourcesList as $ressources) { |
$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); |
$messageAttendu = $messageAttendu = "Erreur dans les parametres de votre requête :". |
" </br> Le paramètre \" masque.catminat \" n'existe pas."; |
$this->assertEquals($messageAttendu, $retour, |
"Il faut indiquer que le parametre masque.catminat est interdit pour ce sous-service."); |
} |
} |
public function testParametresMasqueFixeNonAutorise() { |
$ressourcesList = array( |
array('catminat:07-2.0.1.0.1-08'), |
array('cle:6'), |
array('catminat:07-2.0.1.0.1-08','relations'), |
); |
$parametres = array('masque.fixe' => '2338'); |
foreach ($ressourcesList as $ressources) { |
$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); |
$messageAttendu = $messageAttendu = "Erreur dans les parametres de votre requête :". |
" </br> Le paramètre \" masque.fixe \" n'existe pas."; |
$this->assertEquals($messageAttendu, $retour, |
"Il faut indiquer que le parametre masque.fixe est interdit pour ce sous-service."); |
} |
} |
public function testParametresMasqueNiveauNonAutorise() { |
$ressourcesList = array( |
array('catminat:07-2.0.1.0.1-08'), |
array('cle:6'), |
array('catminat:07-2.0.1.0.1-08','relations'), |
array('catminat:07-2.0.1.0.1-08','relations','synonymie') |
); |
$parametres = array('masque.niveau' => 'ord'); |
foreach ($ressourcesList as $ressources) { |
$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); |
$messageAttendu = $messageAttendu = "Erreur dans les parametres de votre requête :". |
" </br> Le paramètre \" masque.niveau \" n'existe pas."; |
$this->assertEquals($messageAttendu, $retour, |
"Il faut indiquer que le parametre masque.niveau est interdit pour ce sous-service."); |
} |
} |
public function testParametresMasqueRetenuNonAutorise() { |
$ressourcesList = array( |
array('catminat:07-2.0.1.0.1-08'), |
array('cle:6'), |
array('catminat:07-2.0.1.0.1-08','relations'), |
array('catminat:07-2.0.1.0.1-08','relations','synonymie') |
); |
$parametres = array('masque.retenu' => 'true'); |
foreach ($ressourcesList as $ressources) { |
$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); |
$messageAttendu = "Erreur dans les parametres de votre requête :". |
" </br> Le paramètre \" masque.retenu \" n'existe pas."; |
$this->assertEquals($messageAttendu, $retour, |
"Il faut indiquer que le parametre masque.catminat est interdit pour ce sous-service."); |
} |
} |
//++ ------------------------------------Test du retour Json -----------------------------++ |
public function testJsonBienFormeListes() { |
$ressourcesList = array( |
array('catminat:07-2.0.1.0.1-08','relations','niveaux-sup'), |
array(), |
array('catminat:07-2.0.1.0.1-07','relations','synonymie'), |
array('catminat:07-2.0.1.0.1-07','relations') |
); |
$parametres = array(); |
foreach ($ressourcesList as $ressources) { |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertArrayHasKey('entete', $retour, "Le json ne contient pas d'attribut : entete. Voir : $url"); |
$this->assertArrayHasKey('resultat', $retour, "Le json ne contient pas d'attribut : resultat. Voir : $url"); |
} |
} |
public function testPasDeResultat() { |
$ressourcesList = array( |
array('catminat:18-5.2.1.6.0-8'), |
array('catminat:18-5.2.1.6.0-8','relations') |
); |
$parametres = array(); |
foreach ($ressourcesList as $ressources) { |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); |
$messageAttendu = "Les données recherchées sont introuvables."; |
$this->assertEquals($messageAttendu, $retour,"Il faut indiquer si les données recherchées sont introuvables"); |
} |
$ressourcesList = array( |
array('catminat:18-5.2.1.6.0-8','relations','synonymie'), |
array('catminat:18-5.2.1.6.0-8','relations','niveaux-sup'), |
); |
$parametres = array(); |
foreach ($ressourcesList as $ressources) { |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); |
$messageAttendu = "\"Les donn\u00e9es recherch\u00e9es sont introuvables\""; |
$this->assertEquals($messageAttendu, $retour,"Il faut indiquer si les données recherchées sont introuvables"); |
} |
} |
public function testChampsNiveau() { |
$ressources = array(); |
$parametres = array('masque.retenu' => 'true'); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
foreach ($retour['resultat'] as $cle => $valeurs) { |
$this->assertArrayHasKey('niveau.code', $valeurs, "Le json ne contient pas d'attribut : niveau.code . Voir : $url"); |
$this->assertNotEmpty($valeurs['niveau.code']); |
$this->assertArrayHasKey('niveau.libelle', $valeurs, "Le json ne contient pas d'attribut : niveau.libelle . Voir : $url"); |
$this->assertNotEmpty($valeurs['niveau.libelle']); |
$this->assertArrayHasKey('niveau.href', $valeurs, "Le json ne contient pas d'attribut : niveau.href . Voir : $url"); |
$this->assertNotEmpty($valeurs['niveau.href']); |
} |
$parametres = array('masque.retenu' => 'false'); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
foreach ($retour['resultat'] as $cle => $valeurs) { |
$this->assertArrayHasKey('niveau.code', $valeurs, "Le json ne contient pas d'attribut : niveau.code . Voir : $url"); |
$this->assertNotEmpty($valeurs['niveau.code']); |
$this->assertArrayHasKey('niveau.libelle', $valeurs, "Le json ne contient pas d'attribut : niveau.libelle . Voir : $url"); |
$this->assertNotEmpty($valeurs['niveau.libelle']); |
$this->assertArrayHasKey('niveau.detail', $valeurs, "Le json ne contient pas d'attribut : niveau.detail . Voir : $url"); |
$this->assertNotEmpty($valeurs['niveau.detail']); |
} |
} |
public function testMasqueNiveau() { |
$ressourcesList = array( |
array(), |
array('catminat:07-2.0.1.0.1-08','relations','niveaux-sup'), |
); |
$parametres = array('masque.niveau' => 'ORD'); |
foreach ($ressourcesList as $ressources) { |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
foreach ($retour['resultat'] as $cle => $valeurs) { |
$this->assertEquals( $valeurs['niveau.code'], 'ORD','le masque.niveau ne fonctionne pas.'); |
} |
} |
} |
public function testMasqueRetenu() { |
$ressourcesList = array(); |
$parametres = array('masque.retenu' => 'true'); |
foreach ($ressourcesList as $ressources) { |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
foreach ($retour['resultat'] as $cle => $valeurs) { |
$this->assertStringStartsNotWith('syn',$valeurs['niveau.code'],'le masque.retenu ne fonctionne pas pour true.'); |
} |
} |
$parametres = array('masque.retenu' => 'false'); |
foreach ($ressourcesList as $ressources) { |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
foreach ($retour['resultat'] as $cle => $valeurs) { |
$this->assertStringStartsWith('syn',$valeurs['niveau.code'],'le masque.retenu ne fonctionne pas pour false.'); |
} |
} |
} |
public function testMasqueCatminat() { |
$ressourcesList = array( |
array(), |
array('catminat:07-2.0.1.0.1-08','relations','niveaux-sup'), |
); |
$parametres = array('masque.catminat' => '07-2.'); |
foreach ($ressourcesList as $ressources) { |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
foreach ($retour['resultat'] as $cle => $valeurs) { |
$this->assertEquals( $valeurs['code_catminat'], '07/2.','le masque.niveau ne fonctionne pas.'); |
} |
} |
} |
public function testMasqueFixe() { |
$ressourcesList = array( |
array(), |
array('catminat:07-2.0.1.0.1-08','relations','niveaux-sup'), |
); |
$parametres = array('masque.fixe' => '2322'); |
foreach ($ressourcesList as $ressources) { |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
foreach ($retour['resultat'] as $cle => $valeurs) { |
$this->assertEquals( $valeurs['code_fixe_nom'], '2322','le masque.fixe ne fonctionne pas.'); |
} |
} |
} |
} |
?> |
/tags/v0.1-20130830/services/tests/0.1/eflore/EfloreCartesTest.php |
---|
New file |
0,0 → 1,52 |
<?php |
require_once dirname(__FILE__).'/../ServiceEflorePhpUnit.php'; |
class EfloreCartesTest extends ServiceEflorePhpUnit { |
private $retour = ''; |
private $map = ''; |
public function __construct() { |
$this->projet = 'eflore'; |
$this->service = 'cartes'; |
} |
public function setUp() { |
$this->retour = ''; |
$this->map = ''; |
} |
public function testCarteGenerale() { |
$ressources = array();//nn = 141; nt = 8522; nom = 'Acer campestre L.'; nom_ss_auteur = 'Acer campestre' |
$parametres = array('projet' => 'general', 'masque.nn' => '141', 'masque.nt' => '8522', |
'masque.ns' => 'Acer campestre', 'masque.au' => 'L.', 'retour' => 'text/html'); |
$this->retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); |
$this->assertNotEmpty($this->retour, $this->retour); |
$this->assertContains('<img', $this->retour, 'doit contenir une balise image'); |
$this->assertContains('nt8522_france_utm_600x564.png', $this->retour, 'l\'adresse doit se terminer par nt8522_france_utm_600x564.png'); |
$this->assertContains('<map', $this->retour, 'doit contenir une balise map'); |
$this->assertContains('CEL', $this->retour, 'doit contenir une observation CEL'); |
$this->assertContains('SOPHY', $this->retour, 'doit contenir une observation SOPHY'); |
} |
public function testCarteGeneriqueLegende() { |
$ressources = array('legende'); |
$parametres = array(); |
$this->retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertNotEmpty($this->retour); |
$this->assertGreaterThanOrEqual(4, count($this->retour), 'doit contenir au - les légendes de cel, cen-lr, sophy et plusieurs'.$this->retour); |
$this->assertArrayHasKey('code', $this->retour[0], 'contient le code du projet'); |
$this->assertArrayHasKey('couleur', $this->retour[0], 'contient le code couleur correspondant'); |
$this->assertArrayHasKey('nom', $this->retour[0], 'contient le nom du projet'); |
$this->assertArrayHasKey('description', $this->retour[0], 'contient une desctiption du projet'); |
} |
private function verifierPresenceMessage($messageAttendu) { |
$this->assertEquals($messageAttendu, $this->retour); |
} |
} |
?> |
/tags/v0.1-20130830/services/tests/0.1/eflore/EfloreOntologiesTest.php |
---|
New file |
0,0 → 1,50 |
<?php |
require_once dirname(__FILE__).'/../ServiceEflorePhpUnit.php'; |
class EfloreOntologiesTest extends ServiceEflorePhpUnit { |
public function __construct() { |
$this->projet = 'eflore'; |
$this->service = 'ontologies'; |
} |
public function testRecherche() { |
$ressources = array(); |
$parametres = array(); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertNotEmpty($retour, 'données absentes'); |
$this->assertArrayHasKey('total', $retour['entete'], "Le json ne contient pas d'attribut : total. Voir : $url"); |
// 23 au 20/08/2013 |
$this->assertGreaterThanOrEqual('23', $retour['entete']['total'], "L'attribut 'total' devrait avoir une valeur >= '23'. Voir : $url"); |
$this->assertArrayHasKey('10', $retour['resultat'], "Le json ne contient pas d'ontologie n°10. Voir : $url"); |
$this->assertArrayHasKey('nom', $retour['resultat'][10], "Le json ne contient pas d'attribut : nom. Voir : $url"); |
$this->assertEquals('legendeCarte', $retour['resultat'][10]['code'], "L'attribut 'code' devrait avoir la valeur 'legendeCarte'. Voir : $url"); |
$this->assertEquals('Légende carte eFlore observations', $retour['resultat'][10]['nom'], "L'attribut 'nom' devrait avoir la valeur 'Légende carte eFlore observations'. Voir : $url"); |
} |
public function testMasqueCode() { |
$ressources = array(); |
$parametres = array('masque.code' => 's'); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertNotEmpty($retour, 'données absentes'); |
$this->assertArrayHasKey('total', $retour['entete'], "Le json ne contient pas d'attribut : total. Voir : $url"); |
$this->assertEquals('2', $retour['entete']['total'], "L'attribut 'total' devrait avoir la valeur '2'. Voir : $url"); |
$this->assertArrayHasKey('nom', $retour['resultat'][2], "Le json ne contient pas d'attribut : nom. Voir : $url"); |
$this->assertEquals('service', $retour['resultat'][2]['nom'], "L'attribut 'nom' devrait avoir la valeur 'service'. Voir : $url"); |
} |
public function testMasqueNom() { |
$ressources = array(); |
$parametres = array('masque.nom' => 'description'); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertNotEmpty($retour, 'données absentes'); |
$this->assertArrayHasKey('total', $retour['entete'], "Le json ne contient pas d'attribut : total. Voir : $url"); |
$this->assertEquals('1', $retour['entete']['total'], "L'attribut 'total' devrait avoir la valeur '1'. Voir : $url"); |
$this->assertArrayHasKey('code', $retour['resultat'][6], "Le json ne contient pas d'attribut : code. Voir : $url"); |
$this->assertEquals('1', $retour['resultat'][6]['code'], "L'attribut 'code' devrait avoir la valeur '1'. Voir : $url"); |
} |
} |
?> |
/tags/v0.1-20130830/services/tests/0.1/baseflor/OntologiesBaseflorTest.php |
---|
New file |
0,0 → 1,44 |
<?php |
require_once dirname(__FILE__).'/../ServiceEflorePhpUnit.php'; |
class OntologiesBaseflorTest extends ServiceEflorePhpUnit { |
public function __construct() { |
$this->projet = 'baseflor'; |
$this->service = 'ontologies'; |
} |
public function testRecherche() { |
$ressources = array(); |
$parametres = array("navigation.depart" => 20, "navigation.limite" => 100); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertNotEmpty($retour, 'données absentes'); |
//limite |
$this->assertArrayHasKey('limite', $retour['entete'], |
"L'en-tête ne contient pas d'attribut : limite"); |
$this->assertEquals($retour['entete']['limite'], $parametres['navigation.limite'], |
"La valeur de limite est incorrecte dans l'en-tête."); |
//total |
$this->assertArrayHasKey('total', $retour['entete'], |
"L'en-tête ne contient pas d'attribut : total "); |
$this->assertEquals('156', $retour['entete']['total'], |
"L'attribut 'total' devrait avoir la valeur '156. Voir : $url"); |
//href |
$this->assertArrayHasKey('href.suivant', $retour['entete'], |
"L'en-tête ne contient pas d'attribut : href.suivant "); |
$this->assertArrayHasKey('href.precedent', $retour['entete'], |
"L'en-tête ne contient pas d'attribut : href.precedent "); |
$parametres_url = |
array('navigation.depart' => ($retour['entete']['limite']+$retour['entete']['depart']), |
'navigation.limite' => $retour['entete']['limite'] ); |
$urlsuivant = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres_url); |
$this->assertEquals($urlsuivant, $retour['entete']['href.suivant'], |
"L' url $urlsuivant de l'entete est incorrecte."); |
} |
} |
?> |
/tags/v0.1-20130830/services/tests/0.1/baseflor/GraphiquesBaseflorTest.php |
---|
New file |
0,0 → 1,267 |
<?php |
require_once dirname(__FILE__).'/../ServiceEflorePhpUnit.php'; |
class GraphiquesBaseflorTest extends ServiceEflorePhpUnit { |
private $svg; |
public function __construct() { |
$this->projet = 'baseflor'; |
$this->service = 'graphiques'; |
} |
//++ ------------------------------------Test des ressources -----------------------------++ |
public function testRessourceTypeGraphiqueInexistante() { |
$ressources = array('','bdtfx.nn:73256'); |
$parametres = array(); |
$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); |
$messageAttendu = "Erreur dans l'url de votre requête :". |
"</br> precisez le graphique -> \"sol\" ou \"climat\"."; |
$this->assertEquals($messageAttendu, $retour, |
"Il faut indiquer l'absence de la ressource 'sol' ou 'climat'."); |
} |
public function testRessourceReferentielNnInexistante() { |
$ressources = array('sol',''); |
$parametres = array(); |
$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); |
$messageAttendu = |
"Erreur dans l'url de votre requête : précisez le référentiel et le numéro nomenclatural sous la forme {bdnt}.nn:{nn}."; |
$this->assertEquals($messageAttendu, $retour, |
"Il faut indiquer l'absence de la ressource {bdnt}.nn:{nn}."); |
} |
public function testRessourceReferentielTypeGraphiqueErronee() { |
$ressources = array('humdite','bdtfx.nn:73256'); |
$parametres = array(); |
$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); |
$messageAttendu = "Erreur dans l'url de votre requête :". |
"</br> precisez le graphique -> \"sol\" ou \"climat\"."; |
$this->assertEquals($messageAttendu, $retour, |
"Il faut indiquer si la ressource type de graphique n'est ni sol' ni 'climat'."); |
} |
public function testRessourceReferentielNnEronne() { |
$ressources = array('sol','gnnyh'); |
$parametres = array(); |
$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); |
$messageAttendu = |
"Erreur dans l'url de votre requête : précisez le référentiel et le numéro nomenclatural sous la forme {bdnt}.nn:{nn}."; |
$this->assertEquals($messageAttendu, $retour, |
"Il faut indiquer si la ressource {bdnt}.nn:{nn} est erronée."); |
} |
public function testRessourceReferentielInconnu() { |
$ressources = array('climat','btdjv.nn:73256'); |
$parametres = array(); |
$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); |
$messageAttendu = "Le référentiel btdjv n'existe pas."; |
$this->assertEquals($messageAttendu, $retour, |
"Il faut indiquer si le référentiel est inconnu."); |
} |
public function testRessourceNNInconnu() { |
$ressources = array('sol','bdtfx.nn:3'); |
$parametres = array(); |
$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); |
$messageAttendu = "Les données recherchées sont introuvables."; |
$this->assertEquals($messageAttendu, $retour, |
"Il faut indiquer si une requête ne renvoie pas de résultats."); |
} |
//++ ------------------------------------Test des paramètres -----------------------------++ |
public function testParametreInconnu() { |
$ressources = array('sol','bdtfx.nn:73256'); |
$parametres = array('paramatre' => 'image/jpeg'); |
$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); |
$messageAttendu = "Erreur : Le paramètre paramatre est inconnu."; |
$this->assertEquals($messageAttendu, $retour, |
"Il faut indiquer si un paramètre est inconnu."); |
} |
public function testParametreRetourInconnu() { |
$ressources = array('sol','bdtfx.nn:73256'); |
$parametres = array('retour' => 'image/jpeg'); |
$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); |
$messageAttendu = |
"Erreur : valeur inconnue. Choisissez le format de retour pour le paramètre retour : image/svg%2Bxml ou image/png."; |
$this->assertEquals($messageAttendu, $retour, |
"Il faut indiquer si la valeur du paramètre retour est inconnue."); |
} |
public function testParametreRetourAbsent() { |
$ressources = array('sol','bdtfx.nn:73256'); |
$parametres = array('retour' => ''); |
$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); |
$messageAttendu = |
"Erreur : valeur inconnue. Choisissez le format de retour pour le paramètre retour : image/svg%2Bxml ou image/png."; |
$this->assertEquals($messageAttendu, $retour, |
"Il faut indiquer si la valeur du paramètre retour est absente."); |
} |
public function testParametreRetourFormatAbsent() { |
$ressources = array('sol','bdtfx.nn:73256'); |
$parametres = array('retour.format' => ''); |
$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); |
$messageAttendu = "Erreur : valeur inconnue. Entrez la largeur voulue (en pixels) pour le paramètre retour.format."; |
$this->assertEquals($messageAttendu, $retour, |
"Il faut indiquer si la valeur du paramètre retour.format est absente."); |
} |
public function testParametreRetourFormatInconnu() { |
$ressources = array('sol','bdtfx.nn:73256'); |
$parametres = array('retour.format' => 'dhgkg22'); |
$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); |
$messageAttendu = "Erreur : valeur inconnue. Entrez la largeur voulue (en pixels) pour le paramètre retour.format."; |
$this->assertEquals($messageAttendu, $retour, |
"Il faut indiquer si la valeur du paramètre retour.format est inconnue."); |
} |
public function testParametreVersionProjetInconnu() { |
$ressources = array('sol','bdtfx.nn:73256'); |
$parametres = array('version.projet' => 'dhgkg22'); |
$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); |
$messageAttendu = "Erreur : La version est inconnue."; |
$this->assertEquals($messageAttendu, $retour, |
"Il faut indiquer si la valeur du paramètre version.projet est inconnue."); |
} |
public function testParametreVersionProjetAbsent() { |
$ressources = array('sol','bdtfx.nn:73256'); |
$parametres = array('version.projet' => ''); |
$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); |
$messageAttendu = "Erreur : La version est inconnue."; |
$this->assertEquals($messageAttendu, $retour, |
"Il faut indiquer si la valeur du paramètre version.projet est absente."); |
} |
//++------------------------------------------test des fichiers -------------------------++ |
public function testRetourEstUnSVG(){ |
$ressourcesListe = array( |
array('sol','bdtfx.nn:73256'), |
array('climat','bdtfx.nn:73256'), |
array('climat','bdtfx.nn:101128'), |
array('sol','bdtfx.nn:101128') |
); |
$parametresListe = array( |
array('retour' => 'image/svg+xml'), |
array() |
); |
foreach ($ressourcesListe as $ressources) { |
foreach ($parametresListe as $parametres) { |
$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); |
$this->chargerXml($retour); |
$this->etreSvg($retour); |
} |
} |
} |
public function testSVGPresenceValeursEcolo_baseflor(){ |
$ressourcesListe = array( |
array('sol','bdtfx.nn:73256'), |
array('climat','bdtfx.nn:73256'), |
); |
$parametresListe = array(); |
foreach ($ressourcesListe as $ressources) { |
$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametresListe); |
$this->chargerXml($retour); |
$this->etreSvg($retour); |
$test = false; |
$curseurs = $this->svg->getElementsByTagName('circle'); |
foreach ($curseurs as $curseur){ |
$classe = $curseur->getAttribute('class'); |
if ($classe == 'curseur') { |
$test = true; |
break; |
} |
} |
} |
$this->assertTrue($test,"Le graphique renvoyé par $retour est vide de données écologiques."); |
} |
public function testSVGPresenceValeursEcolo_rangSup(){ |
$ressourcesListe = array( |
array('climat','bdtfx.nn:101128'), |
array('sol','bdtfx.nn:101128') |
); |
$parametresListe = array(); |
foreach ($ressourcesListe as $ressources) { |
$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametresListe); |
$this->chargerXml($retour); |
$this->etreSvg($retour); |
$test = false; |
$cases = $this->svg->getElementsByTagName('rect'); |
// ne fonctionne pas : |
/*$dompath = new DOMXPath($this->svg); |
$dompath->registerNamespace("svg", "http://www.w3.org/2000/svg"); |
$cases = $dompath->query('svg:rect[@fill and not(@id="fond" or @id="cache")]');*/ |
foreach ($cases as $case){ |
$classe = $case->getAttribute('class'); |
if ($classe != 'fond' and $classe != 'cache' and $case->getAttribute('fill') != 'none') { |
$test = true; |
break; |
} |
} |
} |
$this->assertTrue($test,"Le graphique renvoyé par $retour est vide de données écologiques."); |
} |
public function testExistenceDesSvgDeBase(){ |
$this->assertFileExists(config::get('chemin')."sol.svg","le svg de base sol.svg n'existe pas."); |
$this->assertFileExists(config::get('chemin')."climat.svg","le svg de base climat.svg n'existe pas."); |
$this->assertFileExists(config::get('chemin')."sol_min_max.svg","le svg de base sol_min_max.svg n'existe pas."); |
$this->assertFileExists(config::get('chemin')."climat_min_max.svg","le svg de base climat_min_max.svg n'existe pas."); |
} |
public function testCreationSvgEtPngDansCache(){ |
$convertisseur = config::get('convertisseur'); |
if ($convertisseur == 'rsvg') { |
$ressourcesListe = array( |
array('sol','bdtfx.nn:73256'), |
array('climat','bdtfx.nn:73256'), |
array('climat','bdtfx.nn:101128'), |
array('sol','bdtfx.nn:101128')); |
$parametresListe = array('retour' => 'image/png'); |
foreach ($ressourcesListe as $ressources) { |
ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametresListe); |
$fichier = config::get('cache_stockageChemin') . $this->getFichier($ressources); |
$this->assertFileExists($fichier.".svg"," {$fichier}.svg n'existe pas."); |
$this->assertFileExists($fichier.".png"," {$fichier}.png n'existe pas."); |
} |
} |
} |
//++------------------------------------------fonctions utiles-------------------------++ |
private function chargerXml($retour) { |
$this->svg = new DOMDocument(); |
$chargement = $this->svg->loadXML($retour); |
$this->assertTrue($chargement,"le fichier ne s'est pas chargé."); |
} |
private function etreSvg($retour) { |
$racineElement = $this->svg->documentElement; |
$this->assertEquals('svg', $racineElement->tagName,"$retour ne renvoie pas un svg." ); |
} |
private function getFichier($ressources) { |
$idfichier = str_replace(".","-",$ressources[1]); |
$idfichier = str_replace(':','-',$idfichier); |
$idfichier .= "-".$ressources[0]; |
return $idfichier; |
} |
} |
?> |
/tags/v0.1-20130830/services/tests/0.1/baseflor/InformationsBaseflorTest.php |
---|
New file |
0,0 → 1,367 |
<?php |
require_once dirname(__FILE__).'/../ServiceEflorePhpUnit.php'; |
class InformationsBaseflorTest extends ServiceEflorePhpUnit { |
public function __construct() { |
$this->projet = 'baseflor'; |
$this->service = 'informations'; |
} |
//++ ------------------------------------Test des ressources -----------------------------++ |
public function testRessourceReferentielInconnu() { |
$ressources = array('dgoju.nn:73256'); |
$parametres = array(); |
$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); |
$messageAttendu = |
"Erreur dans l'url de votre requête :". |
" </br> Le référentiel \" dgoju \" n'existe pas."; |
$this->assertEquals($messageAttendu, $retour, |
"Il faut indiquer un référentiel inconnu."); |
} |
public function testRessourceInconnue() { |
$ressources = array('inconnue'); |
$parametres = array(); |
$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); |
$messageAttendu = |
"Erreur dans l'url de votre requête : </br> La ressource demandée n'existe pas."; |
$this->assertEquals($messageAttendu, $retour, |
"Il faut indiquer si une ressource est eronnée."); |
} |
public function testRessourceNNInconnu() { |
$ressources = array('bdtfx.nn:3'); |
$parametres = array(); |
$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); |
$messageAttendu = "Les données recherchées sont introuvables."; |
$this->assertEquals($messageAttendu, $retour, |
"Il faut indiquer si une requête ne renvoie pas de résultats."); |
} |
//++ ------------------------------------Test des paramètres -----------------------------++ |
public function testParametreInconnu() { |
$ressourcesList = array( |
array('bdtfx.nn:73256'), |
array('bdtfx.nn:101128')); |
$parametres = array('paramatre' => 'image/jpeg'); |
foreach ($ressourcesList as $ressources) { |
$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); |
$messageAttendu = "Erreur dans les parametres de votre requête :". |
" </br> Le paramètre \" paramatre \" n'existe pas."; |
$this->assertEquals($messageAttendu, $retour, |
"Il faut indiquer si un paramètre est inconnu."); |
} |
} |
public function testParametreCategorieInconnue() { |
$ressourcesList = array( |
array('bdtfx.nn:73256'), |
array('bdtfx.nn:101128')); |
$parametres = array('categorie' => 'inventé'); |
foreach ($ressourcesList as $ressources) { |
$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); |
$messageAttendu = "Valeur de paramètre inconnue pour 'categorie'. Ce paramètre n'est pas autorisé"; |
$this->assertContains($messageAttendu, $retour, |
"Il faut indiquer si la valeur du paramètre categorie est inconnue pour (" . implode(',', $ressources) . ")."); |
} |
} |
public function testParametreNavigationDepartSansLimite() { |
$ressources = array(); |
$parametres = array('navigation.depart' => 10); |
$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); |
$messageAttendu = "indiquez également la valeur pour le paramètre navigation.limite."; |
$this->assertEquals($messageAttendu, $retour, |
"Navigation.depart doit être accompagné de navigation.limite ensemble."); |
} |
public function testParametreDepartSuperieurTotalResultats() { |
$ressources = array(); |
$parametres = array('navigation.depart' => 20000, 'navigation.limite' => 10 ); |
$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); |
$messageAttendu = |
"Erreur : la valeur pour le paramètre navigation.départ est supérieure". |
" au nombre total de résultats."; |
$this->assertEquals($messageAttendu, $retour, |
"Il faut indiquer si la valeur de départ est supérieure au nombre de résultats."); |
} |
public function testParametreNavigationErrone() { |
$ressources = array(); |
$parametresList = array( |
array('navigation.depart' => -5, 'navigation.limite' => 10 ), |
array('navigation.depart' => 0, 'navigation.limite' => abc )); |
$cles = array('navigation.depart','navigation.limite'); |
$i = 0 ; |
foreach ($parametresList as $parametres) { |
$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); |
$messageAttendu = "Erreur : valeur erronnée pour le paramètre {$cles[$i]}."; |
$this->assertEquals($messageAttendu, $retour, |
"il faut indiquer lorsque qu'un des paramètres de navigation a une valeur impossible."); |
$i++; |
} |
} |
public function testParametreRetourFormatErrone() { |
$ressourcesList = array( |
array('bdtfx.nn:73256'), |
array('bdtfx.nn:101128')); |
$parametres = array('retour.format' => 'pdf'); |
foreach ($ressourcesList as $ressources) { |
$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); |
$messageAttendu = "Valeur de paramètre inconnue pour 'retour.format'. Ce paramètre n'est pas autorisé"; |
$this->assertContains($messageAttendu, $retour, |
"il faut indiquer lorsque que le paramètre retour.format a une valeur impossible."); |
} |
} |
public function testParametreVersionProjetInconnu() { |
$ressourcesList = array( |
array('bdtfx.nn:73256'), |
array('bdtfx.nn:101128')); |
$parametres = array('version.projet' => 'dhgkg22'); |
foreach ($ressourcesList as $ressources){ |
$retour = ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, $ressources, $parametres); |
$messageAttendu = "Erreur : La version est inconnue."; |
$this->assertEquals($messageAttendu, $retour, |
"Il faut indiquer si la valeur du paramètre version.projet est inconnue."); |
} |
} |
//++ ------------------------------------Test du retour json correct -----------------------------++ |
//++ ---Informations ----++ |
public function testJsonBienFormeInformations() { |
$ressources = array(); |
$parametres = array('navigation.depart' => 10, 'navigation.limite' => 15); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertArrayHasKey('entete', $retour, "Le json ne contient pas d'attribut : entete. Voir : $url"); |
$this->assertArrayHasKey('resultats', $retour, "Le json ne contient pas d'attribut : resultat. Voir : $url"); |
$this->verifierJsonEnteteBienFormeInformations($retour, $parametres); |
} |
private function verifierJsonEnteteBienFormeInformations($retour, $parametres) { |
//depart |
$this->assertArrayHasKey('depart', $retour['entete'], |
"L'en-tête ne contient pas d'attribut : depart "); |
$this->assertEquals($retour['entete']['depart'], $parametres['navigation.depart'], |
"La valeur de départ est incorrecte dans l'en-tête."); |
//limite |
$this->assertArrayHasKey('limite', $retour['entete'], |
"L'en-tête ne contient pas d'attribut : limite"); |
$this->assertEquals($retour['entete']['limite'], $parametres['navigation.limite'], |
"La valeur de limite est incorrecte dans l'en-tête."); |
//total |
$this->assertArrayHasKey('total', $retour['entete'], |
"L'en-tête ne contient pas d'attribut : total "); |
$this->assertNotEquals('', $retour['entete']['total'], |
"La valeur de total est vide dans l'en-tête."); |
//href |
$this->assertArrayHasKey('href.suivant', $retour['entete'], |
"L'en-tête ne contient pas d'attribut : href.suivant "); |
$this->assertArrayHasKey('href.precedent', $retour['entete'], |
"L'en-tête ne contient pas d'attribut : href.precedent "); |
$parametres_url = |
array('navigation.depart' => ($retour['entete']['limite']+$retour['entete']['depart']), |
'navigation.limite' => $retour['entete']['limite'] ); |
$urlsuivant = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres_url); |
$this->assertEquals($urlsuivant, $retour['entete']['href.suivant'], |
"L' url $urlsuivant de l'entete est incorrecte."); |
} |
public function testJsonResultatsHrefInformations() { |
$ressources = array(); |
$parametres = array('navigation.depart' => 370, 'navigation.limite' => 5); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
foreach ($retour['resultats'] as $id => $valeurs) { |
if (!$valeurs['num_nomen']) { |
$this->assertArrayNotHasKey('href', $valeurs, |
"Il ne doit pas avoir de lien s'il n'y a pas de numéro nomenclatural (=0). Voir $url "); |
} |
} |
} |
public function testJsonNombreLimiteDemande() { |
$ressources = array(); |
$parametresList = array('navigation.depart' => 10, 'navigation.limite' => 15 ); |
$url = ServiceEflorePhpUnit::creerUrl($this->service, $ressources, $parametres); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertLessThanOrEqual(15, count($retour), |
"Le json renvoie un nombre de résultats trop important : entete. Voir : $url"); |
} |
//++ ---Informations.nn ----++ |
public function testJsonInformationsNN_min() { |
$ressourcesList = array( |
array('bdtfx.nn:73256'), |
array('bdtfx.nn:101128')); |
$parametres = array('retour.format' => 'min' ); |
foreach ($ressourcesList as $ressources) { |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$this->assertArrayNotHasKey('type_bio.code',$retour, |
"Le champs 'type_bio.code' ne doit pas être présent si retour.format=min. "); |
$this->assertArrayNotHasKey('type_bio.libelle',$retour, |
"Le champs 'type_bio.libelle' ne doit pas être présent si retour.format=min."); |
$this->assertArrayNotHasKey('type_bio.detail',$retour, |
"Le champs 'type_bio.detail' ne doit pas être présent si retour.format=min."); |
$champs = array_keys(config::get('champs_ontologiques')); |
foreach ($champs as $chps) { |
$this->assertArrayNotHasKey($chps.'.libelle', $retour, |
"Le champs '{$chps}.libelle' ne doit pas être présent si retour.format=min."); |
$this->assertArrayNotHasKey($chps.'.code', $retour, |
"Le champs '{$chps}.code' ne doit pas être présent si retour.format=min."); |
$this->assertArrayNotHasKey($chps.'.href', $retour, |
"Le champs '{$chps}.href' ne doit pas être présent si retour.format=min."); |
} |
foreach ($champs as $chps) { |
$this->assertArrayNotHasKey($chps.'_min.libelle', $retour, |
"Le champs '{$chps}_min.libelle' ne doit pas être présent si retour.format=min."); |
$this->assertArrayNotHasKey($chps.'_min.code', $retour, |
"Le champs '{$chps}_min.code' ne doit pas être présent si retour.format=min."); |
$this->assertArrayNotHasKey($chps.'_min.href', $retour, |
"Le champs '{$chps}_min.href' ne doit pas être présent si retour.format=min."); |
$this->assertArrayNotHasKey($chps.'_max.libelle', $retour, |
"Le champs '{$chps}_max.libelle' ne doit pas être présent si retour.format=min."); |
$this->assertArrayNotHasKey($chps.'_max.code', $retour, |
"Le champs '{$chps}_max.code' ne doit pas être présent si retour.format=min."); |
$this->assertArrayNotHasKey($chps.'_max.href', $retour, |
"Le champs '{$chps}_max.href' ne doit pas être présent si retour.format=min."); |
} |
} |
} |
public function testJsonInformationsNNBasefor_max() { |
$ressources = array('bdtfx.nn:73256'); |
$parametresList = array( |
array('retour.format' => 'max', 'categorie' => 'description'), |
array('retour.format' => 'max' , 'categorie' => 'ecologie')); |
foreach ($parametresList as $parametres) { |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
if ($parametres['categorie'] == 'description') { |
$this->verifierParametresDescription_max($retour); |
} else { |
$this->verifierParametresEcologie_max($retour, 'baseflor'); |
} |
} |
} |
public function testJsonInformationsNNRangSup_max() { |
$ressources = array('bdtfx.nn:101128'); |
$parametres = array('retour.format' => 'max' , 'categorie' => 'ecologie'); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
if ($parametres['categorie'] == 'description') { |
$this->verifierParametresDescription_max(); |
} else { |
$this->verifierParametresEcologie_max($retour, 'rangSup'); |
} |
} |
private function verifierParametresDescription_max($retour) { |
$this->assertArrayHasKey('type_bio.code',$retour, |
"Le champs 'type_bio.code' doit être présent si retour.format=max. "); |
$this->assertArrayHasKey('type_bio.libelle',$retour, |
"Le champs 'type_bio.libelle' doit être présent si retour.format=max."); |
$this->assertArrayHasKey('type_bio.detail',$retour, |
"Le champs 'type_bio.detail' doit être présent si retour.format=max."); |
} |
private function verifierParametresEcologie_max($retour,$type) { |
$champs = array_keys(config::get('champs_ontologiques')); |
if ($type == 'baseflor') { |
foreach ($champs as $chps) { |
$this->assertArrayHasKey($chps.'.libelle', $retour, |
"Le champs '{$chps}.libelle' doit être présent si retour.format=max."); |
$this->assertArrayHasKey($chps.'.code', $retour, |
"Le champs '{$chps}.code' doit être présent si retour.format=max."); |
$this->assertArrayHasKey($chps.'.href', $retour, |
"Le champs '{$chps}.href' doit être présent si retour.format=max."); |
} |
} elseif ($type == 'rangSup') { |
foreach ($champs as $chps) { |
$this->assertArrayHasKey($chps.'_min.libelle', $retour, |
"Le champs '{$chps}_min.libelle' doit être présent si retour.format=max."); |
$this->assertArrayHasKey($chps.'_min.code', $retour, |
"Le champs '{$chps}_min.code' doit être présent si retour.format=max."); |
$this->assertArrayHasKey($chps.'_min.href', $retour, |
"Le champs '{$chps}_min.href' doit être présent si retour.format=max."); |
$this->assertArrayHasKey($chps.'_max.libelle', $retour, |
"Le champs '{$chps}_max.libelle' doit être présent si retour.format=max."); |
$this->assertArrayHasKey($chps.'_max.code', $retour, |
"Le champs '{$chps}_max.code' doit être présent si retour.format=max."); |
$this->assertArrayHasKey($chps.'_max.href', $retour, |
"Le champs '{$chps}_max.href' doit être présent si retour.format=max."); |
} |
} |
} |
//++ ------------------------------------Test du champs type biologique -----------------------------++ |
//TEST sur différents cas typique de 'type_bio.libelle' |
public function testJsonTypeBioOntologies() { |
$ressourcesList = array(array("bdtfx.nn:73256"),array("bdtfx.nn:70441"),array("bdtfx.nn:62911"),array("bdtfx.nn:72496"), |
array("bdtfx.nn:6446"),array("bdtfx.nn:8373"), array("bdafx.nn:35574"), array("bdtfx.nn:62443"), |
array("bdtfx.nn:62442")); |
$parametres = array(); |
$resultats_attendus = array ('Grhi-aqua' => 'Géophytes (>= 1m) à rhizome (plantes aquatiques) ' , |
'test-aqua-car' => 'Thérophytes (< 1m) estivaux (plantes aquatiques, carnivores) ', |
'grhi' => 'Géophytes (< 1m) à rhizome ', |
'hsto(test)' => 'Hémicryptophytes (< 1m) stolonifères , Thérophytes (< 1m) estivaux ', |
'Hsto-lia(Grhi-lia)' => 'Hémicryptophytes (>= 1m) stolonifères (lianes) , Géophytes (>= 1m) à rhizome (lianes) ', |
'Cfru(b-cad)' => 'Chaméphytes (>= 1m) frutescents , Nanophanérophytes (2 à 4m) (caducifoliées) ', |
'test-aqua(heri)' => 'Thérophytes (< 1m) estivaux (plantes aquatiques) , Hémicryptophytes (< 1m) érigé ', |
'hbis(hsto,test)-suc' => 'Hémicryptophytes (< 1m) bisannuels (succulentes) , Hémicryptophytes (< 1m) stolonifères, Thérophytes (< 1m) estivaux ', |
'hbis(hsto)-suc' => 'Hémicryptophytes (< 1m) bisannuels (succulentes) , Hémicryptophytes (< 1m) stolonifères '); |
foreach ($ressourcesList as $ressources) { |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
$code = $retour['type_bio.code']; |
$this->assertEquals($resultats_attendus[$code], $retour['type_bio.libelle'], |
"le traitement de l'ontologie pour les types biologiques est erroné pour $ressources[0] . "); |
} |
} |
public function testRelationsCatminat() { |
$ressources = array('bdtfx.nn:5641', 'relations', 'catminat'); |
$retour = $this->consulterJson($this->service, $this->projet, $ressources, $parametres); |
// valeurs standards |
$this->assertArrayHasKey('cle',$retour, "Le champ 'cle' doit être présent."); |
$this->assertEquals('1693',$retour['cle'], "Le champ 'cle' est erroné."); |
$this->assertArrayHasKey('num_nomen',$retour, "Le champ 'num_nomen' doit être présent."); |
$this->assertEquals('5641',$retour['num_nomen'], "Le champ 'num_nomen' est erroné."); |
$this->assertArrayHasKey('bdnt',$retour, "Le champ 'bdnt' doit être présent."); |
$this->assertEquals('bdtfx',$retour['bdnt'], "Le champ 'bdnt' est erroné."); |
// valeurs écologiques, test libelle |
$this->assertArrayHasKey('ve_texture_sol_min.libelle',$retour, "Le champ 've_texture_sol_min.libelle' doit être présent."); |
$this->assertEquals('intermédiaire',$retour['ve_texture_sol_min.libelle'], "Le champ 've_texture_sol_min.libelle' est erroné."); |
$this->assertArrayHasKey('ve_humidite_atmos_min.code',$retour, "Le champ 've_humidite_atmos_min.code' doit être présent."); |
$this->assertEquals('8',$retour['ve_humidite_atmos_min.code'], "Le champ 've_texture_sol_min.libelle' est erroné."); |
// climat |
$this->assertArrayHasKey('graphique_climat',$retour, "Le champ 'graphique_climat' doit être présent."); |
$this->assertArrayHasKey('libelle',$retour['graphique_climat'], "Le champ 'graphique_climat > libelle' doit être présent."); |
$this->assertArrayHasKey('href',$retour['graphique_climat'], "Le champ 'graphique_climat > href' doit être présent."); |
$this->assertEquals('climat',$retour['graphique_climat']['libelle'], "Le champ 'graphique_climat > href' doit être présent."); |
} |
// TODO = ajouter un test pour Informations/id/Relations/catminat?navigation.limite=500&navigation.depart=0 |
} |
?> |
/tags/v0.1-20130830/services/tests/0.2/bdtfx/NomsServiceBdftxTest.php |
---|
New file |
0,0 → 1,399 |
<?php |
require_once dirname(__FILE__).'/../ServicePhpUnit.php'; |
class NomsServiceBdtfxTest extends ServicePhpUnit { |
private $retour = ''; |
private $nomDetailSqueletteUrl = 'http://localhost/service:eflore:0.2/bdtfx/noms/%s'; |
private $ontologieHrefTpl = 'http://localhost/service:eflore:0.2/bdnt/ontologies/rangTaxo:%s'; |
private $champsProjet = array( |
'presence_Ga' => 'presence_Ga.code', |
'presence_Co' => 'presence_Co.code' |
); |
public function __construct() { |
$this->projet = 'bdtfx'; |
$this->service = 'noms'; |
} |
public function initialiserService(NomsListe $service) { |
$service->setDetailsHrefTpl($this->nomDetailSqueletteUrl); |
$service->setOntologieHrefTpl($this->ontologieHrefTpl); |
$service->setChampsProjet($this->champsProjet); |
} |
public function testVersionPrecise() { |
$ressources = array(); |
$parametres = array('version.projet' => '1.01', 'recherche' => 'etendue', 'masque' => 'acer'); |
$this->retour = $this->consulter($ressources, $parametres); |
$this->verifierStructureListe(); |
$this->verifierMasque('nom_sci=acer%'); |
$this->verifierTotal(156); |
$this->verifierNbreResultats(100); |
} |
public function testNomsVersionMultiple() { |
$ressources = array(); |
$parametres = array('version.projet' => '*', 'recherche' => 'etendue', 'masque' => 'acer'); |
$this->retour = $this->consulterBrut($ressources, $parametres); |
$this->verifierPresenceMessage("L'affichage de plusieurs versions ne fonctionne que pour les ressources de type /ressources/#id"); |
} |
public function testVersionInexistante() { |
$ressources = array(); |
$parametres = array('version.projet' => '99.00'); |
$this->retour = $this->consulterBrut($ressources, $parametres); |
$this->verifierPresenceMessage("La version '99.00' n'est pas disponible pour le projet 'bdtfx' !"); |
} |
public function testAucunResultat() { |
$ressources = array(); |
$parametres = array( |
'version.projet' => '1.01', |
'recherche' => 'stricte', |
'masque' => 'Axer'); |
$this->retour = $this->consulterBrut($ressources, $parametres); |
$this->verifierPresenceMessage("Aucun résultat ne correspond a votre requête !"); |
} |
public function testRechercheStricte() { |
$ressources = array(); |
$parametres = array( |
'version.projet' => '1.01', |
'recherche' => 'stricte', |
'masque' => 'Acer'); |
$this->retour = $this->consulter($ressources, $parametres); |
$this->verifierStructureListe(); |
$this->verifierMasque('nom_sci=Acer'); |
$this->verifierTotal(1); |
$this->verifierNbreResultats(1); |
} |
public function testResultatChamps() { |
$ressources = array(); |
$parametres = array( |
'version.projet' => '1.01', |
'recherche' => 'stricte', |
'masque.nn' => '182'); |
$this->retour = $this->consulter($ressources, $parametres); |
$this->verifierStructureListe(); |
$this->verifierMasque('num_nom=182'); |
$this->verifierTotal(1); |
$this->verifierNbreResultats(1); |
$this->verifierLigneResultatsStructure(182); |
$this->verifierResultatsLigneAttributValeur(182, 'retenu', true); |
$this->verifierResultatsLigneAttributValeur(182, 'nom_sci', 'Acer monspessulanum'); |
} |
public function testMasqueSg() { |
$ressources = array(); |
$parametres = array( |
'version.projet' => '1.01', |
'recherche' => 'stricte', |
'masque.sg' => 'Asteraceae'); |
$this->retour = $this->consulter($ressources, $parametres); |
$this->verifierStructureListe(); |
$this->verifierMasque('nom_supra_generique=Asteraceae'); |
$this->verifierTotal(1); |
$this->verifierNbreResultats(1); |
} |
public function testMasqueGenSpSspAuAn() { |
$ressources = array(); |
$parametres = array( |
'version.projet' => '1.01', |
'recherche' => 'stricte', |
'masque.gen' => 'Allium', |
'masque.sp' => 'carinatum', |
'masque.ssp' => 'consimile', |
'masque.au' => 'Gren.', |
'masque.an' => '1855'); |
$this->retour = $this->consulter($ressources, $parametres); |
$this->verifierStructureListe(); |
$this->verifierMasque('genre=Allium&epithete_sp=carinatum&epithete_infra_sp=consimile&auteur=Gren.&annee=1855'); |
$this->verifierTotal(1); |
$this->verifierNbreResultats(1); |
} |
public function testMasqueNn() { |
$ressources = array(); |
$parametres = array( |
'version.projet' => '1.01', |
'recherche' => 'stricte', |
'masque.nn' => '182'); |
$this->retour = $this->consulter($ressources, $parametres); |
$this->verifierStructureListe(); |
$this->verifierMasque('num_nom=182'); |
$this->verifierTotal(1); |
$this->verifierNbreResultats(1); |
$this->verifierLigneResultatsStructure(182); |
} |
public function testMasqueRg() { |
$ressources = array(); |
$parametres = array( |
'version.projet' => '1.01', |
'recherche' => 'stricte', |
'masque.rg' => '180'); |
$this->retour = $this->consulter($ressources, $parametres); |
$this->verifierStructureListe(); |
$this->verifierMasque('rang=180'); |
$this->verifierTotal(210); |
} |
// TODO : à implémenter! |
/* |
public function testNomsIdVersionMultiple() { |
$ressources = array('71711'); |
$parametres = array('version.projet' => '*'); |
$retour = $this->consulter($ressources, $parametres); |
$this->assertArrayHasKey('bdtfx_v1_01', $retour, "Le json ne contient pas d'attribut : bdtfx_v1_01."); |
$this->assertArrayHasKey('bdtfx_v1_02', $retour, "Le json ne contient pas d'attribut : bdtfx_v1_02."); |
$this->assertEquals('71711', $retour['bdtfx_v1_01']['id'], "'bdtfx_v1_01' doit contenir un attribut 'id' avec la valeur '71711'"); |
$this->assertEquals('71711', $retour['bdtfx_v1_02']['id'], "'bdtfx_v1_02' doit contenir un attribut 'id' avec la valeur '71711'"); |
}*/ |
// TODO : à implémenter |
/* |
public function testNsStructureTxt() { |
$ressources = array(); |
$parametres = array( |
'version.projet' => '1.01', |
'recherche' => 'stricte', |
'masque.nn' => '182', |
'ns.format' => 'txt', |
'ns.structure' => 'au,an,bib,ad'); |
$this->retour = $this->consulter($ressources, $parametres); |
$this->verifierStructureListe(); |
$this->verifierMasque('num_nom=182'); |
$this->verifierTotal(1); |
$this->verifierNbreResultats(1); |
$this->verifierResultatsLigneAttributValeur(182, 'nom_sci', 'Acer monspessulanum L. [1753, Sp. Pl., éd. 1 : 1056]'); |
}*/ |
// TODO : à implémenter |
/* |
public function testNsStructureHtml() { |
$ressources = array(); |
$parametres = array( |
'version.projet' => '1.01', |
'recherche' => 'stricte', |
'masque.nn' => '182', |
'ns.format' => 'htm', |
'ns.structure' => 'au,an,bib,ad'); |
$this->retour = $this->consulter($ressources, $parametres); |
$this->verifierStructureListe(); |
$this->verifierMasque('num_nom=182'); |
$this->verifierTotal(1); |
$this->verifierNbreResultats(1); |
$nomSciAttendu = '<span class="sci"><span class="gen">Acer</span> <span class="sp">monspessulanum</span></span> <span class="auteur">L.</span> [<span class="annee">1753</span>, <span class="biblio">Sp. Pl., éd. 1 : 1056</span>]'; |
$this->verifierResultatsLigneAttributValeur(182, 'nom_sci', $nomSciAttendu); |
}*/ |
// TODO : à implémenter |
/* |
public function testListeNomsAvecParametreRetourChamps() { |
$ressources = array(); |
$parametres = array('version.projet' => '1.01', |
'masque' => 'acer', |
'retour.champs' => 'auteur,nom_retenu.*'); |
$this->retour = $this->consulter($ressources, $parametres); |
$this->verifierStructureListe(); |
$this->presenceAttributDansResultat(83587, 'auteur'); |
$this->presenceAttributDansResultat(83587, 'nom_retenu.id'); |
$this->presenceAttributDansResultat(83587, 'nom_retenu.href'); |
$this->abscenceAttributDansResultat(83587, 'nom_retenu'); |
}*/ |
// TODO : à implémenter |
/* |
public function testNomsIdAvecParametreRetourChamps() { |
$ressources = array('1'); |
$parametres = array('version.projet' => '1.01', |
'retour.champs' => 'nom_retenu.*'); |
$this->retour = $this->consulter($ressources, $parametres); |
$this->presenceAttribut('nom_retenu.id'); |
$this->presenceAttribut('nom_retenu.href'); |
$this->abscenceAttribut('nom_retenu'); |
$this->abscenceAttribut('auteur'); |
}*/ |
// TODO : à implémenter |
/* |
public function testListeNomAvecParametreNsStructureAuAnBibAd() { |
$ressources = array(); |
$parametres = array('version.projet' => '1.01', |
'masque.nn' => '39607', |
'ns.structure' => 'au,an,bib,ad'); |
$this->retour = $this->consulter($ressources, $parametres); |
$this->verifierStructureListe(); |
$this->presenceAttributDansResultat(39607, 'nom_sci'); |
$nomSciTxt = 'Lolium annuum Gilib. [1792, Exercit. Phytol., 2 : 520] [nom. invalid.]'; |
$this->verifierResultatsLigneAttributValeur(39607, 'nom_sci', $nomSciTxt); |
}*/ |
// TODO : à implémenter |
/* |
public function testListeNomAvecParametreNsStructureAuAnBibAdEtNsFormatHtm() { |
$ressources = array(); |
$parametres = array('version.projet' => '1.01', |
'masque.nn' => '39607', |
'ns.structure' => 'au,an,bib,ad', |
'ns.format' => 'htm'); |
$this->retour = $this->consulter($ressources, $parametres); |
$this->verifierStructureListe(); |
$this->verifierMasque('num_nom=39607'); |
$this->presenceAttributDansResultat(39607, 'nom_sci'); |
$nomSciHtml = "<span class=\"sci\"><span class=\"gen\">Lolium</span> <span class=\"sp\">annuum</span></span> <span class=\"auteur\">Gilib.</span> [<span class=\"annee\">1792</span>, <span class=\"biblio\">Exercit. Phytol., 2 : 520</span>] [<span class=\"adendum\">nom. invalid.</span>]"; |
$this->verifierResultatsLigneAttributValeur(39607, 'nom_sci', $nomSciHtml); |
}*/ |
public function testSansParametres() { |
$ressources = array('85'); |
$parametres = array(); |
$retour = $this->consulter($ressources, $parametres); |
$this->assertTrue(is_array($retour), 'Retour est un tableau'); |
$this->assertArrayHasKey('id', $retour, 'Présence champ id'); |
$this->assertSame(85, $retour['id'], 'Valeur champ id = 85'); |
$this->assertArrayHasKey('nom_sci', $retour, 'Présence champ nom_sci'); |
$this->assertSame('Abutilon theophrasti', $retour['nom_sci'], 'Valeur champ nom_sci = Abutilon theophrasti'); |
$this->assertArrayHasKey('nom_retenu.id', $retour, 'Présence champ nom_retenu.id'); |
$this->assertSame(85, $retour['nom_retenu.id'], 'Valeur champ nom_sci = 85'); |
$this->assertArrayHasKey('nom_retenu', $retour, 'Présence champ nom_retenu'); |
$this->assertSame('Abutilon theophrasti', $retour['nom_retenu'], 'Valeur champ nom_retenu = Abutilon theophrasti'); |
$this->assertArrayHasKey('nom_retenu.href', $retour, 'Présence champ nom_retenu.href'); |
$urlNomRetenuHrefAttendue = sprintf($this->nomDetailSqueletteUrl, 85); |
$this->assertSame($urlNomRetenuHrefAttendue, $retour['nom_retenu.href'], "Valeur champ nom_retenu.href = $urlNomRetenuHrefAttendue"); |
$this->assertArrayHasKey('rang.code', $retour, 'Présence champ rang.code'); |
$this->assertSame('bdnt.rangTaxo:290', $retour['rang.code'], 'Valeur champ rang.code = bdnt.rangTaxo:290'); |
$this->assertArrayHasKey('rang', $retour, 'Présence champ rang'); |
$this->assertSame('Espèce', $retour['rang'], 'Valeur champ rang = Espèce'); |
$this->assertArrayHasKey('rang.href', $retour, 'Présence champ rang.href'); |
$hrefAttendue =sprintf($this->ontologieHrefTpl, 290); |
$this->assertSame($hrefAttendue, $retour['rang.href'], "Valeur champ rang.href = $hrefAttendue"); |
$this->assertArrayHasKey('nom_sci.genre', $retour, 'Présence champ nom_sci.genre'); |
$this->assertSame('Abutilon', $retour['nom_sci.genre'], "Valeur champ nom_sci.genre = 'Abutilon'"); |
$this->assertArrayHasKey('nom_sci.sp', $retour, 'Présence champ nom_sci.sp'); |
$this->assertSame('theophrasti', $retour['nom_sci.sp'], "Valeur champ nom_sci.sp = theophrasti"); |
$this->assertArrayHasKey('auteur', $retour, 'Présence champ auteur'); |
$this->assertSame('Medik.', $retour['auteur'], "Valeur champ auteur = 'Medik.'"); |
$this->assertArrayHasKey('presence_Ga.code', $retour, 'Présence champ presence_Ga.code'.print_r($retour,true)); |
$this->assertSame('P', $retour['presence_Ga.code'], "Valeur champ presence_Ga.code = 'P'"); |
$this->assertArrayHasKey('presence_Co.code', $retour, 'Présence champ "presence_Co.code'); |
$this->assertSame('P', $retour['presence_Co.code'], "Valeur champ page = P"); |
} |
public function testNomSansCorrespondance() { |
$ressources = array('98940'); |
$parametres = array(); |
$this->retour = $this->consulter($ressources, $parametres); |
$this->abscenceAttribut('nom_retenu.id'); |
$this->abscenceAttribut('nom_retenu.href'); |
$this->verifierAttributValeur('nom_retenu', null); |
} |
private function verifierPresenceMessage($messageAttendu) { |
$this->assertEquals($messageAttendu, $this->retour); |
} |
private function verifierStructureListe() { |
$this->assertArrayHasKey('entete', $this->retour, "Présence attribut : entete"); |
$this->assertArrayHasKey('masque', $this->retour['entete'], "Présence attribut : entete>masque"); |
$this->assertArrayHasKey('depart', $this->retour['entete'], "Présence attribut : entete>depart"); |
$this->assertArrayHasKey('limite', $this->retour['entete'], "Présence attribut : entete>limite"); |
$this->assertArrayHasKey('total', $this->retour['entete'], "Présence attribut : entete>total"); |
$this->assertArrayHasKey('resultats', $this->retour, "Présence attribut : resultats"); |
} |
private function verifierMasque($masque) { |
$this->assertEquals($masque, $this->retour['entete']['masque'], "Attribut 'entete>masque' = '$masque'"); |
} |
private function verifierTotal($total) { |
$this->assertSame($total, $this->retour['entete']['total'], "Attribut 'entete>total' = $total"); |
} |
private function verifierNbreResultats($nbre) { |
$this->assertSame($nbre, count($this->retour['resultats']), "Nbre 'resultats' = 1"); |
} |
private function verifierLigneResultatsStructure($ligne) { |
$this->assertArrayHasKey($ligne, $this->retour['resultats'], "Presence attribut : resultats>$ligne".print_r($this->retour, true)); |
$this->assertArrayHasKey('nom_sci', $this->retour['resultats'][$ligne], "Presence attribut : resultats>$ligne>nom_sci".print_r($this->retour, true)); |
$this->assertArrayHasKey('retenu', $this->retour['resultats'][$ligne], "Presence attribut : resultats>$ligne>retenu".print_r($this->retour, true)); |
$this->assertArrayHasKey('href', $this->retour['resultats'][$ligne], "Presence attribut : resultats>$ligne>href".print_r($this->retour, true)); |
} |
private function presenceAttributDansResultat($ligne, $attribut) { |
$this->assertArrayHasKey($ligne, $this->retour['resultats'], "Présence ligne : resultats>$ligne"); |
$this->assertArrayHasKey($attribut, $this->retour['resultats'][$ligne], "Présence attribut : resultats>$ligne>$attribut"); |
} |
private function abscenceAttributDansResultat($ligne, $attribut) { |
$this->assertArrayNotHasKey($attribut, $this->retour['resultats'][$ligne], "Présence attribut : resultats>$ligne>$attribut"); |
} |
private function verifierResultatsLigneAttributValeur($ligne, $attribut, $valeur) { |
$this->assertSame($valeur, $this->retour['resultats'][$ligne][$attribut], "Attribut 'resultats>$ligne>$attribut' = $valeur"); |
} |
private function presenceAttribut($attribut) { |
$this->assertArrayHasKey($attribut, $this->retour); |
} |
private function abscenceAttribut($attribut) { |
$this->assertArrayNotHasKey($attribut, $this->retour); |
} |
private function verifierAttributValeur($attribut, $valeur) { |
$this->presenceAttribut($attribut); |
$this->assertSame($valeur, $this->retour[$attribut]); |
} |
} |
?> |
/tags/v0.1-20130830/services/tests/0.2/bdd/tb_eflore.sqlite |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/tags/v0.1-20130830/services/tests/0.2/bdd/tb_eflore.sqlite |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/tags/v0.1-20130830/services/tests/0.2/bdd/mysql2sqlite.sh |
---|
New file |
0,0 → 1,109 |
#!/bin/sh |
# Converts a mysqldump file into a Sqlite 3 compatible file. It also extracts the MySQL `KEY xxxxx` from the |
# CREATE block and create them in separate commands _after_ all the INSERTs. |
# Awk is choosen because it's fast and portable. You can use gawk, original awk or even the lightning fast mawk. |
# The mysqldump file is traversed only once. |
# Usage: $ ./mysql2sqlite mysqldump-opts db-name | sqlite3 database.sqlite |
# Example: $ ./mysql2sqlite --no-data -u root -pMySecretPassWord myDbase | sqlite3 database.sqlite |
# Thanks to and @artemyk and @gkuenning for their nice tweaks. |
# AJOUT 2011-12-27 : chemin vers lampp pour le dump mysql, suppression des commentaires, insenssibilité à la casse pour tous les champs |
# USAGE : |
# ./mysql2sqlite.sh --default-character-set=utf8 -u root -p tb_eflore bdnt_meta bdnt_ontologies_v4_30 bdtfx_meta bdtfx_v1_01 \ |
# bdtfx_v1_02 fournier_meta fournier_v1_00 | \ |
# sqlite3 /home/jpm/web/eflore/eflore-projets/services/tests/0.2/bdd/tb_eflore.sqlite |
/opt/lampp/bin/mysqldump --compatible=ansi --skip-extended-insert --compact "$@" | \ |
awk ' |
BEGIN { |
FS=",$" |
print "PRAGMA synchronous = OFF;" |
print "PRAGMA journal_mode = MEMORY;" |
print "BEGIN TRANSACTION;" |
} |
# CREATE TRIGGER statements have funny commenting. Remember we are in trigger. |
/^\/\*.*CREATE.*TRIGGER/ { |
gsub( /^.*TRIGGER/, "CREATE TRIGGER" ) |
inTrigger = 1 |
next |
} |
# The end of CREATE TRIGGER has a stray comment terminator |
/END \*\/;;/ { gsub( /\*\//, "" ); print; inTrigger = 0; next } |
# The rest of triggers just get passed through |
inTrigger != 0 { print; next } |
# Skip other comments |
/^\/\*/ { next } |
# Print all `INSERT` lines. The single quotes are protected by another single quote. |
/INSERT/ { |
gsub( /\\\047/, "\047\047" ) |
gsub(/\\n/, "\n") |
gsub(/\\r/, "\r") |
gsub(/\\"/, "\"") |
gsub(/\\\\/, "\\") |
gsub(/\\\032/, "\032") |
next |
} |
# Print the `CREATE` line as is and capture the table name. |
/^CREATE/ { |
if ( match( $0, /\"[^\"]+/ ) ) tableName = substr( $0, RSTART+1, RLENGTH-1 ) |
} |
# Replace `FULLTEXT KEY` or any other `XXXXX KEY` except PRIMARY by `KEY` |
/^ [^"]+KEY/ && !/^ PRIMARY KEY/ { gsub( /.+KEY/, " KEY" ) } |
# Get rid of field lengths in KEY lines |
/ KEY/ { gsub(/\([0-9]+\)/, "") } |
# Print all fields definition lines except the `KEY` lines. |
/^ / && !/^( KEY|\);)/ { |
gsub( /AUTO_INCREMENT|auto_increment/, "" ) |
gsub( /(CHARACTER SET|character set) [^ ]+ /, "" ) |
gsub( /DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP|default current_timestamp on update current_timestamp/, "" ) |
gsub( /(COLLATE|collate) [^ ]+ /, "" ) |
gsub(/(ENUM|enum)[^)]+\)/, "text ") |
gsub(/(SET|set)\([^)]+\)/, "text ") |
gsub(/UNSIGNED|unsigned/, "") |
# AJOUT : suppression des commentaires |
gsub(/(COMMENT|comment) '"'"'.+'"'"',/, ",") |
# AJOUT : insenssibilité à la casse pour tous les champs |
if (prev) print prev " COLLATE NOCASE," |
prev = $1 |
} |
# `KEY` lines are extracted from the `CREATE` block and stored in array for later print |
# in a separate `CREATE KEY` command. The index name is prefixed by the table name to |
# avoid a sqlite error for duplicate index name. |
/^( KEY|\);)/ { |
if (prev) print prev |
prev="" |
if ($0 == ");"){ |
} else { |
if ( match( $0, /\"[^"]+/ ) ) indexName = substr( $0, RSTART+1, RLENGTH-1 ) |
if ( match( $0, /\([^()]+/ ) ) indexKey = substr( $0, RSTART+1, RLENGTH-1 ) |
key[tableName]=key[tableName] "CREATE INDEX \"" tableName "_" indexName "\" ON \"" tableName "\" (" indexKey ");\n" |
} |
} |
# Print all `KEY` creation lines. |
END { |
for (table in key) printf key[table] |
print "END TRANSACTION;" |
} |
' |
exit 0 |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
Added: svn:eol-style |
+native |
\ No newline at end of property |
/tags/v0.1-20130830/services/tests/0.2/fournier/NomsListeFournierTest.php |
---|
New file |
0,0 → 1,211 |
<?php |
require_once dirname(__FILE__).'/../ServicePhpUnit.php'; |
class NomsListeFournierTest extends ServicePhpUnit { |
private $listeUrl = 'http://localhost/service:eflore:0.2/fournier/noms'; |
private $nomDetailSqueletteUrl = 'http://localhost/service:eflore:0.2/fournier/noms/%s'; |
private $nbreNom = 168; |
public function __construct() { |
$this->projet = 'fournier'; |
$this->service = 'noms'; |
} |
public function testSansParametres() { |
$ressources = array(); |
$parametres = array(); |
$retour = $this->consulter($ressources, $parametres); |
$this->assertArrayHasKey('entete', $retour, 'Présence champ entete'); |
$this->assertArrayHasKey('masque', $retour['entete'], 'Présence champ entete>masque'); |
$this->assertEmpty($retour['entete']['masque'], 'Valeur champ entete>masque = vide'); |
$this->assertArrayHasKey('depart', $retour['entete'], 'Présence champ entete>depart'); |
$this->assertSame(0, $retour['entete']['depart'], 'Valeur champ entete>depart = 0'); |
$this->assertArrayHasKey('limite', $retour['entete'], 'Présence champ entete>limite'); |
$this->assertSame(100, $retour['entete']['limite'], 'Valeur champ entete>limite = 100'); |
$this->assertArrayHasKey('total', $retour['entete'], 'Présence champ entete>total'); |
$this->assertNotEquals(0, $retour['entete']['total'], 'Valeur champ entete>total != 0'); |
$this->assertSame($this->nbreNom, $retour['entete']['total'], 'Valeur champ entete>total = 168'); |
$this->assertArrayNotHasKey('href.precedent', $retour['entete'], "Abscence champ entete>href.precedent"); |
$this->assertArrayHasKey('href.suivant', $retour['entete'], "Présence champ entete>href.suivant"); |
$url = $this->listeUrl.'?navigation.depart=100&navigation.limite=100'; |
$this->assertEquals($url, $retour['entete']['href.suivant'], "Valeur champ entete>href.suivant = $url"); |
$this->assertArrayHasKey('resultats', $retour, 'Valeur champ resultats'); |
$this->assertCount(100, $retour['resultats'], 'Nombre de valeurs dans resultats = 100'); |
$this->assertArrayNotHasKey('1', $retour['resultats'], 'Abscence champ resultats>1 car trie sur nom_sci ASC'); |
$this->assertArrayHasKey('2', $retour['resultats'], 'Présence champ resultats>2'); |
$this->assertArrayHasKey('nom_sci', $retour['resultats']['2'], 'Présence champ resultats>2>nom_sci'); |
$this->assertCount(3, $retour['resultats']['2'], 'Nombre de valeurs dans resultats>2 = 3'); |
$this->assertEquals('Cryptogames', $retour['resultats']['2']['nom_sci'], 'Test valeur champ resultats>2>nom_sci = Plantae'); |
$this->assertArrayHasKey('retenu', $retour['resultats']['2'], 'Présence champ resultats>2>retenu'); |
$this->assertTrue($retour['resultats']['2']['retenu'], 'Valeur champ resultats>2>retenu = true'); |
$this->assertArrayHasKey('href', $retour['resultats']['2'], 'Présence champ resultats>2>href'); |
$url = sprintf($this->nomDetailSqueletteUrl, '2'); |
$this->assertEquals($url, $retour['resultats']['2']['href'], "Valeur champ resultats>2>nom_sci = $url"); |
} |
public function testParametreNavigationDepart100() { |
$ressources = array(); |
$parametres = array('navigation.depart' => 100); |
$retour = $this->consulter($ressources, $parametres); |
$this->assertArrayHasKey('depart', $retour['entete'], 'Présence champ entete>depart'); |
$this->assertSame(100, $retour['entete']['depart'], 'Valeur champ entete>depart = 100'); |
$this->assertArrayHasKey('limite', $retour['entete'], 'Présence champ entete>limite'); |
$this->assertSame(100, $retour['entete']['limite'], 'Valeur champ entete>limite = 100'); |
$this->assertSame($this->nbreNom, $retour['entete']['total'], 'Valeur champ entete>total = 168'); |
$this->assertArrayNotHasKey('href.suivant', $retour['entete'], "Abscence champ entete>href.suivant"); |
$this->assertArrayHasKey('href.precedent', $retour['entete'], "Présence champ entete>href.precedent"); |
$url = $this->listeUrl.'?navigation.depart=0&navigation.limite=100'; |
$this->assertEquals($url, $retour['entete']['href.precedent'], "Valeur champ entete>href.precedent = $url"); |
} |
public function testRechercheDefautMasque() { |
$ressources = array(); |
$parametres = array('masque' => 'Lycopodium'); |
$retour = $this->consulter($ressources, $parametres); |
$this->assertArrayHasKey('masque', $retour['entete'], 'Présence champ entete>masque'); |
$this->assertEquals('nom_sci=Lycopodium', $retour['entete']['masque'], 'Valeur champ entete>masque = "nom_sci=Lycopodium"'); |
$this->assertCount(1, $retour['resultats'], 'Nombre de valeurs dans resultats = 1'); |
$this->assertEquals('Lycopodium', $retour['resultats']['5']['nom_sci'], 'Test valeur champ resultats>5>nom_sci = Lycopodium'); |
} |
public function testRechercheStricteMasque() { |
$ressources = array(); |
$parametres = array('masque' => 'Lycopodium', 'recherche' => 'stricte'); |
$retour = $this->consulter($ressources, $parametres); |
$this->assertArrayHasKey('masque', $retour['entete'], 'Présence champ entete>masque'); |
$this->assertEquals('nom_sci=Lycopodium', $retour['entete']['masque'], 'Valeur champ entete>masque = "nom_sci=Lycopodium"'); |
$this->assertCount(1, $retour['resultats'], 'Nombre de valeurs dans resultats = 1'); |
$this->assertEquals('Lycopodium', $retour['resultats']['5']['nom_sci'], 'Test valeur champ resultats>5>nom_sci = Lycopodium'); |
} |
public function testerRechercheEtendueMasque() { |
$ressources = array(); |
$parametres = array('masque' => 'Lycopodium', 'recherche' => 'etendue'); |
$retour = $this->consulter($ressources, $parametres); |
$this->assertArrayHasKey('masque', $retour['entete'], 'Présence champ entete>masque'); |
$this->assertEquals('nom_sci=Lycopodium%', $retour['entete']['masque'], 'Valeur champ entete>masque = "nom_sci=Lycopodium%"'); |
$this->assertCount(11, $retour['resultats'], 'Nombre de valeurs dans resultats = 10'); |
foreach ($retour['resultats'] as $nom) { |
$this->assertContains('Lycopodium', $nom['nom_sci'], 'Test valeur champ resultats>...>nom_sci contient Lycopodium'); |
} |
} |
public function testerRechercheFloueMasque() { |
$ressources = array(); |
$parametres = array('masque' => 'Licopodium', 'recherche' => 'floue'); |
$retour = $this->consulter($ressources, $parametres); |
$this->assertArrayHasKey('masque', $retour['entete'], 'Présence champ entete>masque'); |
$this->assertEquals('nom_sci=Licopodium', $retour['entete']['masque'], 'Valeur champ entete>masque = "nom_sci=Licopodium"'); |
$this->assertCount(1, $retour['resultats'], 'Nombre de valeurs dans resultats = 1'); |
$this->assertContains('Lycopodium', $retour['resultats'][5]['nom_sci'], 'Test valeur champ resultats>5>nom_sci contient Lycopodium'); |
} |
public function testRechercheDefautMasqueSg() { |
$ressources = array(); |
$parametres = array('masque.sg' => 'Lycopodiaceae'); |
$retour = $this->consulter($ressources, $parametres); |
$this->assertArrayHasKey('masque', $retour['entete'], 'Présence champ entete>masque'); |
$this->assertEquals('nom_supra_generique=Lycopodiaceae', $retour['entete']['masque'], 'Valeur champ entete>masque = "nom_sci=Lycopodiaceae"'); |
$this->assertCount(1, $retour['resultats'], 'Nombre de valeurs dans resultats = 1'); |
$this->assertEquals('Lycopodiaceae', $retour['resultats']['4']['nom_sci'], 'Test valeur champ resultats>4>nom_sci = Lycopodiaceae'); |
} |
public function testRechercheDefautMasqueGen() { |
$ressources = array(); |
$parametres = array('masque.gen' => 'Lycopodium'); |
$retour = $this->consulter($ressources, $parametres); |
$this->assertArrayHasKey('masque', $retour['entete'], 'Présence champ entete>masque'); |
$this->assertEquals('genre=Lycopodium', $retour['entete']['masque'], 'Valeur champ entete>masque = "genre=Lycopodium"'); |
$this->assertCount(11, $retour['resultats'], 'Nombre de valeurs dans resultats = 11'); |
foreach ($retour['resultats'] as $id => $info) { |
$this->assertContains('Lycopodium', $info['nom_sci'], "Test valeur champ resultats>$id>nom_sci contient Lycopodium"); |
} |
} |
public function testRechercheDefautMasqueSp() { |
$ressources = array(); |
$parametres = array('masque.sp' => 'alpinum'); |
$retour = $this->consulter($ressources, $parametres); |
$this->assertArrayHasKey('masque', $retour['entete'], 'Présence champ entete>masque'); |
$this->assertEquals('epithete_sp=alpinum', $retour['entete']['masque'], 'Valeur champ entete>masque = "epithete_sp=alpinum"'); |
$this->assertCount(2, $retour['resultats'], 'Nombre de valeurs dans resultats = 2'); |
foreach ($retour['resultats'] as $id => $info) { |
$this->assertContains('alpinum', $info['nom_sci'], "Test valeur champ resultats>$id>nom_sci contient alpinum"); |
} |
} |
public function testRechercheEtendueMasqueSg() { |
$ressources = array(); |
$parametres = array('masque.sg' => 'Lycopodiaceae', 'recherche' => 'etendue'); |
$retour = $this->consulter($ressources, $parametres); |
$this->assertArrayHasKey('masque', $retour['entete'], 'Présence champ entete>masque'); |
$this->assertEquals('nom_supra_generique=Lycopodiaceae%', $retour['entete']['masque'], 'Valeur champ entete>masque = "nom_sci=Lycopodiaceae"'); |
$this->assertCount(1, $retour['resultats'], 'Nombre de valeurs dans resultats = 1'); |
$this->assertEquals('Lycopodiaceae', $retour['resultats']['4']['nom_sci'], 'Test valeur champ resultats>4>nom_sci = Lycopodiaceae'); |
} |
public function testRechercheEtendueMasqueGen() { |
$ressources = array(); |
$parametres = array('masque.gen' => 'Lycopodium', 'recherche' => 'etendue'); |
$retour = $this->consulter($ressources, $parametres); |
$this->assertArrayHasKey('masque', $retour['entete'], 'Présence champ entete>masque'); |
$this->assertEquals('genre=Lycopodium%', $retour['entete']['masque'], 'Valeur champ entete>masque = "genre=Lycopodium"'); |
$this->assertCount(11, $retour['resultats'], 'Nombre de valeurs dans resultats = 11'); |
foreach ($retour['resultats'] as $id => $info) { |
$this->assertContains('Lycopodium', $info['nom_sci'], "Test valeur champ resultats>$id>nom_sci contient Lycopodium"); |
} |
} |
public function testRechercheEtendueMasqueSp() { |
$ressources = array(); |
$parametres = array('masque.sp' => 'alpinum', 'recherche' => 'etendue'); |
$retour = $this->consulter($ressources, $parametres); |
$this->assertArrayHasKey('masque', $retour['entete'], 'Présence champ entete>masque'); |
$this->assertEquals('epithete_sp=alpinum%', $retour['entete']['masque'], 'Valeur champ entete>masque = "epithete_sp=alpinum"'); |
$this->assertCount(2, $retour['resultats'], 'Nombre de valeurs dans resultats = 2'); |
foreach ($retour['resultats'] as $id => $info) { |
$this->assertContains('alpinum', $info['nom_sci'], "Test valeur champ resultats>$id>nom_sci contient alpinum"); |
} |
} |
public function testRetourChamps() { |
$ressources = array(); |
$parametres = array('retour.champs' => 'nom_retenu'); |
$retour = $this->consulter($ressources, $parametres); |
$this->assertArrayHasKey('href.suivant', $retour['entete'], "Présence champ entete>href.suivant"); |
$url = $this->listeUrl.'?retour.champs=nom_retenu&navigation.depart=100&navigation.limite=100'; |
$this->assertEquals($url, $retour['entete']['href.suivant'], "Valeur champ entete>href.suivant = $url"); |
foreach ($retour['resultats'] as $id => $info) { |
$this->assertArrayHasKey('nom_retenu', $info, "Présence champ resultats>$id>nom_retenu "); |
} |
} |
} |
?> |
/tags/v0.1-20130830/services/tests/0.2/fournier/NomDetailsFournierTest.php |
---|
New file |
0,0 → 1,61 |
<?php |
require_once dirname(__FILE__).'/../ServicePhpUnit.php'; |
class NomDetailsFournierTest extends ServicePhpUnit { |
private $nomDetailSqueletteUrl = 'http://localhost/service:eflore:0.2/fournier/noms/%s'; |
private $ontologieHrefTpl = 'http://localhost/service:eflore:0.2/bdnt/ontologies/rangTaxo:%s'; |
private $champsProjet = array( |
'nom_scientifique' => 'nom_scientifique', |
'auteur_origine' => 'auteur_origine', |
'nom_vernaculaire' => 'nom_vernaculaire', |
'page' => 'page', |
'code_taxon' => 'code_taxon', |
'milieu' => 'milieu', |
'floraison' => 'floraison', |
'type' => 'type', |
'sol' => 'sol', |
'rarete_region_alt' => 'rarete_region_alt', |
'region_bota_monde' => 'region_bota_monde', |
'etymologie' => 'etymologie', |
'taille' => 'taille', |
'formule_hybridite' => 'formule_hybridite', |
'culture' => 'culture'); |
public function __construct() { |
$this->projet = 'fournier'; |
$this->service = 'noms'; |
} |
public function testSansParametres() { |
$ressources = array('85'); |
$parametres = array(); |
$retour = $this->consulter($ressources, $parametres); |
$this->assertTrue(is_array($retour), 'Retour est un tableau'); |
$this->assertArrayHasKey('id', $retour, 'Présence champ id'); |
$this->assertSame(85, $retour['id'], 'Valeur champ id = 85'); |
$this->assertArrayHasKey('nom_sci', $retour, 'Présence champ nom_sci'); |
$this->assertSame('Hymenophyllum peltatum', $retour['nom_sci'], 'Valeur champ nom_sci = Hymenophyllum peltatum'); |
$this->assertArrayHasKey('nom_retenu.id', $retour, 'Présence champ nom_retenu.id'); |
$this->assertSame(84, $retour['nom_retenu.id'], 'Valeur champ nom_sci = 84'); |
$this->assertArrayHasKey('nom_retenu', $retour, 'Présence champ nom_retenu'); |
$this->assertSame('Hymenophyllum unilaterale', $retour['nom_retenu'], 'Valeur champ nom_retenu = Hymenophyllum unilaterale'); |
$this->assertArrayHasKey('nom_retenu.href', $retour, 'Présence champ nom_retenu.href'); |
$urlNomRetenuHrefAttendue = sprintf($this->nomDetailSqueletteUrl, 84); |
$this->assertSame($urlNomRetenuHrefAttendue, $retour['nom_retenu.href'], "Valeur champ nom_retenu.href = $urlNomRetenuHrefAttendue"); |
$this->assertArrayHasKey('rang.code', $retour, 'Présence champ rang.code'); |
$this->assertSame('bdnt.rangTaxo:290', $retour['rang.code'], 'Valeur champ rang.code = bdnt.rangTaxo:290'); |
$this->assertArrayHasKey('rang', $retour, 'Présence champ rang'); |
$this->assertSame('Espèce', $retour['rang'], 'Valeur champ rang = Espèce'); |
$this->assertArrayHasKey('rang.href', $retour, 'Présence champ rang.href'); |
$hrefAttendue =sprintf($this->ontologieHrefTpl, 290); |
$this->assertSame($hrefAttendue, $retour['rang.href'], "Valeur champ rang.href = $hrefAttendue"); |
} |
} |
?> |
/tags/v0.1-20130830/services/tests/0.2/bibliotheque/ParametresTest.php |
---|
New file |
0,0 → 1,89 |
<?php |
require_once dirname(__FILE__).'/../ServicePhpUnit.php'; |
class ParametresTest extends ServicePhpUnit { |
private function initialiser($parametresUrl = array()) { |
$bdd = $this->getMock('Bdd'); |
$parametres = new Parametres($parametresUrl, $bdd); |
return $parametres; |
} |
public function testerParametreParDefaut() { |
$parametres = $this->initialiser(); |
$this->assertEquals('stricte', $parametres->get('recherche')); |
$this->assertEquals('txt', $parametres->get('ns.format')); |
$this->assertEquals('application/json', $parametres->get('retour')); |
$this->assertEquals('max', $parametres->get('retour.format')); |
$this->assertEquals('fr', $parametres->get('retour.langue')); |
$this->assertEquals('+', $parametres->get('version.projet')); |
$this->assertSame(0, $parametres->get('navigation.depart')); |
$this->assertSame(100, $parametres->get('navigation.limite')); |
} |
public function testerExisterRetourneBouleen() { |
$parametresUrl = array('masque.id' => '12,15,18'); |
$parametres = $this->initialiser($parametresUrl); |
$this->assertTrue($parametres->exister('masque.id')); |
$this->assertFalse($parametres->exister('masque')); |
$this->assertTrue($parametres->exister('recherche')); |
} |
public function testerGetRetourneValeur() { |
$parametresUrl = array('masque.id' => '12,15,18'); |
$parametres = $this->initialiser($parametresUrl); |
$this->assertEquals('12,15,18', $parametres->get('masque.id')); |
} |
public function testerGetListeRetourneTableau() { |
$parametresUrl = array('masque.id' => '12,15,18'); |
$parametres = $this->initialiser($parametresUrl); |
$liste = $parametres->getListe('masque.id'); |
$this->assertTrue(is_array($liste)); |
$this->assertCount(3, $liste); |
$this->assertContains(12, $liste); |
$this->assertContains(15, $liste); |
$this->assertContains(18, $liste); |
} |
public function testerIterateur() { |
$parametresUrl = array('code1' => 'val1', 'code2' => 'val2', 'code3' => 'val3'); |
$parametres = $this->initialiser($parametresUrl); |
$parametres->rewind(); |
$code = $parametres->key(); |
$valeur = $parametres->current(); |
$this->assertEquals('code1', $code); |
$this->assertEquals('val1', $valeur); |
$parametres->next(); |
$code = $parametres->key(); |
$valeur = $parametres->current(); |
$this->assertEquals('code2', $code); |
$this->assertEquals('val2', $valeur); |
$parametres->next(); |
$code = $parametres->key(); |
$valeur = $parametres->current(); |
$this->assertEquals('code3', $code); |
$this->assertEquals('val3', $valeur); |
$parametres->next(); |
$this->assertFalse($parametres->valid()); |
$parametres->rewind(); |
$this->assertTrue($parametres->valid()); |
$code = $parametres->key(); |
$this->assertEquals('code1', $code); |
} |
} |
/tags/v0.1-20130830/services/tests/0.2/bibliotheque/ProjetTest.php |
---|
New file |
0,0 → 1,66 |
<?php |
require_once dirname(__FILE__).'/../ServicePhpUnit.php'; |
class ProjetTest extends ServicePhpUnit { |
private function initialiser($ressourcesUrl = array()) { |
$ressources = new Ressources($ressourcesUrl); |
$projet = new Projet($ressources); |
$projet->setCheminBase(realpath(dirname(__FILE__).'/../../../modules/0.2').'/'); |
$projet->setCheminConfig(realpath(dirname(__FILE__).'/../../../configurations').'/'); |
$projet->setCheminBiblio(realpath(dirname(__FILE__).'/../../../bibliotheque').'/'); |
$paramsVerif = $this->getMock('ParametresVerificateur'); |
$projet->setParamsVerif($paramsVerif); |
$ressourcesVerif = $this->getMock('RessourcesVerificateur'); |
$projet->setRessourcesVerif($ressourcesVerif); |
$versionVerif = $this->getMock('VersionVerificateur'); |
$projet->setVersionVerif($versionVerif); |
return $projet; |
} |
public function testerInitialiserAutoLoad() { |
$ressourcesUrl = array('fournier', 'noms', '1'); |
$projet = $this->initialiser($ressourcesUrl); |
$projet->initialiser(); |
$nomDetails = $this->getMock('NomDetailsGenerique'); |
$test = new NomDetailsFournier($nomDetails); |
} |
public function testerInitialiserConfig() { |
$ressourcesUrl = array('fournier', 'noms', '1'); |
$projet = $this->initialiser($ressourcesUrl); |
$projet->initialiser(); |
$this->assertNotNull(Config::get('nomProjet')); |
$this->assertNotNull(Config::get('bddTable')); |
$this->assertNotNull(Config::get('bddTableMeta')); |
$this->assertNotNull(Config::get('baseServiceUrl')); |
$this->assertNotNull(Config::get('baseProjetUrl')); |
$this->assertNotNull(Config::get('listeUrl')); |
$this->assertNotNull(Config::get('detailsHrefTpl')); |
$this->assertNotNull(Config::get('ontologieHrefTpl')); |
$this->assertNotNull(Config::get('servicesDispo')); |
$this->assertNotNull(Config::get('parametresAPI')); |
$this->assertNotNull(Config::get('champsProjet')); |
} |
public function testerVerifierExistanceClasseService() { |
$ressourcesUrl = array('fournier', 'ServiceInexistant', '1'); |
$projet = $this->initialiser($ressourcesUrl); |
try { |
$projet->verifier(); |
} catch(Exception $e) { |
$messageAttendu = "La classe du service demandé 'ServiceInexistant' n'existe pas dans le projet 'fournier' !"; |
$this->assertEquals($messageAttendu, $e->getMessage()); |
$this->assertEquals(404, $e->getCode()); |
return null; |
} |
$this->fail("Aucune exception n'a été soulevée."); |
} |
} |
?> |
/tags/v0.1-20130830/services/tests/0.2/bibliotheque/EnteteHttpTest.php |
---|
New file |
0,0 → 1,14 |
<?php |
require_once dirname(__FILE__).'/../ServicePhpUnit.php'; |
class EnteteHttpTest extends ServicePhpUnit { |
public function testerEnteteHttpParDefaut() { |
$enteteHttp = new EnteteHttp(); |
$this->assertEquals('200', $enteteHttp->code); |
$this->assertEquals('utf-8', $enteteHttp->encodage); |
$this->assertEquals('application/json', $enteteHttp->mime); |
} |
} |
?> |
/tags/v0.1-20130830/services/tests/0.2/bibliotheque/ParametresVerificateurTest.php |
---|
New file |
0,0 → 1,112 |
<?php |
require_once dirname(__FILE__).'/../ServicePhpUnit.php'; |
class ParametresVerificateurTest extends ServicePhpUnit { |
private function initialiser($parametresUrl = array(), $parametresAPI = array()) { |
$bdd = $this->getMock('Bdd'); |
$parametres = new Parametres($parametresUrl, $bdd); |
$verificateur = new ParametresVerificateur($parametres, $parametresAPI); |
return $verificateur; |
} |
public function testerValeursPermises() { |
$parametresUrl = array( |
'recherche' => 'declencheException', |
'ns.format' => 'declencheException', |
'retour' => 'declencheException', |
'retour.format' => 'declencheException', |
'retour.langue' => 'declencheException', |
'ns.structure' => 'declencheException', |
'version.projet' => 'declencheException'); |
$verificateur = $this->initialiser($parametresUrl); |
try { |
$verificateur->verifierValeurs(); |
} catch(Exception $e) { |
$messageComplet = array("Erreur dans le paramètrage de votre URL :"); |
$messageTpl = "Le paramètre '%s' ne peut pas prendre la valeur 'declencheException'. Valeurs permises : %s"; |
$messageComplet[] = $messageAttendu = sprintf($messageTpl, 'recherche', 'stricte|floue|etendue'); |
$this->assertContains($messageAttendu, $e->getMessage()); |
$messageComplet[] = $messageAttendu = sprintf($messageTpl, 'ns.format', 'htm|txt'); |
$this->assertContains($messageAttendu, $e->getMessage()); |
$messageComplet[] = $messageAttendu = sprintf($messageTpl, 'retour', 'application/json|image/jpeg'); |
$this->assertContains($messageAttendu, $e->getMessage()); |
$messageComplet[] = $messageAttendu = sprintf($messageTpl, 'retour.format', 'min|max|oss|perso'); |
$this->assertContains($messageAttendu, $e->getMessage()); |
$messageComplet[] = $messageAttendu = sprintf($messageTpl, 'retour.langue', '/^(?:[*]|orig|[a-z]{2})$/'); |
$this->assertContains($messageAttendu, $e->getMessage()); |
$messageComplet[] = $messageAttendu = sprintf($messageTpl, 'ns.structure', '|an|au|bib|ad'); |
$this->assertContains($messageAttendu, $e->getMessage()); |
$messageComplet[] = $messageAttendu = sprintf($messageTpl, 'version.projet', '/^(?:[0-9]+[.][0-9]+|[*+])$/'); |
$this->assertContains($messageAttendu, $e->getMessage()); |
$this->assertEquals(implode('<br/>', $messageComplet), $e->getMessage()); |
return null; |
} |
$this->fail("Aucune exception n'a été soulevée."); |
} |
public function testerExceptionVerificationConformiteApi() { |
$parametresUrl = array('code1' => 'val1'); |
$parametresAPI = array('paramApi'); |
$verificateur = $this->initialiser($parametresUrl, $parametresAPI); |
try { |
$verificateur->verifierConformiteApi(); |
} catch(Exception $e) { |
$messageAttendu = "Le paramètre 'code1' n'est pas pris en compte par cette version de l'API."; |
$this->assertEquals($messageAttendu, $e->getMessage()); |
return null; |
} |
$this->fail("Aucune exception n'a été soulevée."); |
} |
public function testerExceptionVerifierValeurSimple() { |
$parametresUrl = array('recherche' => 'declencheException'); |
$verificateur = $this->initialiser($parametresUrl); |
try { |
$verificateur->verifierValeurs(); |
} catch(Exception $e) { |
$messageAttendu = "Le paramètre 'recherche' ne peut pas prendre la valeur 'declencheException'. Valeurs permises : "; |
$this->assertContains($messageAttendu, $e->getMessage()); |
return null; |
} |
$this->fail("Aucune exception n'a été soulevée."); |
} |
public function testerExceptionVerifierValeurRegExp() { |
$parametresUrl = array('retour.langue' => '1'); |
$verificateur = $this->initialiser($parametresUrl); |
try { |
$verificateur->verifierValeurs(); |
} catch(Exception $e) { |
$messageAttendu = "Le paramètre 'retour.langue' ne peut pas prendre la valeur '1'. Valeurs permises : "; |
$this->assertContains($messageAttendu, $e->getMessage()); |
return null; |
} |
$this->fail("Aucune exception n'a été soulevée."); |
} |
public function testerExceptionVerifierValeurMultiple() { |
$parametresUrl = array('ns.structure' => 'an,1'); |
$verificateur = $this->initialiser($parametresUrl); |
try { |
$verificateur->verifierValeurs(); |
} catch(Exception $e) { |
$messageAttendu = "Le paramètre 'ns.structure' ne peut pas prendre la valeur '1'. Valeurs permises : "; |
$this->assertContains($messageAttendu, $e->getMessage()); |
return null; |
} |
$this->fail("Aucune exception n'a été soulevée."); |
} |
} |
?> |
/tags/v0.1-20130830/services/tests/0.2/ServicePhpUnit.php |
---|
New file |
0,0 → 1,168 |
<?php |
// declare(encoding='UTF-8'); |
/** |
* Classe contenant des méthodes : |
* - d'intialisation des tests, |
* - refactorisant le code des tests, |
* - facilitant les tests. |
* |
* @category php 5.3 |
* @package Tests/Services |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
* @copyright Copyright (c) 2011, Tela Botanica (accueil@tela-botanica.org) |
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL |
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL |
* @version $Id$ |
*/ |
abstract class ServicePhpUnit extends PHPUnit_Framework_TestCase { |
protected static $cheminBase = ''; |
protected $projet = ''; |
protected $service = ''; |
protected $baseUrl = 'http://localhost/service:eflore:0.1/'; |
protected $serviceBaseUrl = ''; |
//+------------------------------------------------------------------------------------------------------+ |
// Intialisation |
public static function setUpBeforeClass() { |
error_reporting(E_ALL); |
$_SERVER['argv'][] = '-contexte'; |
$_SERVER['argv'][] = $_GET['contexte'] = 'test'; |
self::chargerFramework(); |
self::$cheminBase = realpath(__DIR__.'/../../modules/0.2').'/'; |
// Enregistrement en première position des autoload de la méthode gérant les classes des services |
spl_autoload_register(array(get_class($this), 'chargerClasseAuto')); |
} |
public static function chargerClasseAuto($classe) { |
if (class_exists($classe)) { |
return null; |
} |
$cheminCommun = self::$cheminBase.'commun/'; |
$cheminBibliotheque = realpath(__DIR__.'/../../bibliotheque').'/'; |
$cheminBiblioInterfaces = $cheminBibliotheque.'interfaces/'; |
$cheminBiblioNom = $cheminBibliotheque.'nom/'; |
$cheminBiblioNomDeco = $cheminBiblioNom.'decorateurs/'; |
$cheminsTests = __DIR__.'/'; |
$chemins = array( |
self::$cheminBase, |
$cheminCommun, |
$cheminBibliotheque, |
$cheminsTests, |
$cheminBiblioInterfaces, |
$cheminBiblioNom, |
$cheminBiblioNomDeco); |
foreach ($chemins as $chemin) { |
$chemin = $chemin.$classe.'.php'; |
if (file_exists($chemin)) { |
require_once $chemin; |
} |
} |
} |
private static function chargerFramework() { |
$cheminRacine = realpath(dirname(__FILE__).'/../..').'/'; |
$framework = $cheminRacine.'framework.php'; |
if (!file_exists($framework)) { |
$e = "Veuillez paramétrer l'emplacement et la version du Framework dans le fichier $framework"; |
trigger_error($e, E_USER_ERROR); |
} else { |
// Inclusion du Framework |
require_once $framework; |
// Ajout d'information concernant cette application |
Framework::setCheminAppli($cheminRacine);// Obligatoire |
} |
} |
//+------------------------------------------------------------------------------------------------------+ |
// Refactorisation |
protected function consulter($ressources, $parametres) { |
$retourJson = $this->consulterBrut($ressources, $parametres); |
$retour = json_decode($retourJson, true); |
$this->assertEquals(JSON_ERROR_NONE, json_last_error(), "Le json contient des erreurs qui bloquent le décodage. Voir : $url"); |
return $retour; |
} |
protected function consulterBrut($ressources, $parametres) { |
array_unshift($ressources, $this->service); |
array_unshift($ressources, $this->projet); |
$projet = new Projets(); |
$retourJson = $projet->consulter($ressources, $parametres); |
return $retourJson; |
} |
protected function creerUrl($ressources, $parametres) { |
$version = ''; |
$ressourcesUrl = array(); |
foreach ($ressources as $ressource) { |
$ressourcesUrl[] = $ressource; |
} |
$ressourcesUrl = count($ressourcesUrl) > 0 ? '/'.implode('/', $ressourcesUrl) : ''; |
$parametresUrl = ''; |
if (count($parametres) > 0) { |
foreach ($parametres as $cle => $valeur) { |
$parametresUrl[] = $cle.'='.rawurlencode($valeur); |
} |
$parametresUrl = '?'.implode('&', $parametresUrl); |
} |
$url = $this->baseUrl.$this->projet.'/'.$version.$this->service.$ressourcesUrl.$parametresUrl; |
return $url; |
} |
//+------------------------------------------------------------------------------------------------------+ |
// Méthodes facilitant les tests |
/** |
* Récupère un bouchon de classe abstraite. |
* Comment l'utiliser : |
* $classeAstraite = $this->getClasseAbstraite('MaClasse', array('param1', 'param2')); |
* $foo = $classeAstraite->methodeConcretePublique(); |
* |
* @param String $classeNom Le nom de la classe |
* @param Array $parametres Les paramètres à passer au constructeur. |
* @return Object Le bouchon de la classe abstraite |
*/ |
public function getClasseAbstraite($classeNom, Array $parametres) { |
$efloreScript = $this->getMockForAbstractClass($classeNom, $parametres); |
return $efloreScript; |
} |
/** |
* Récupère une méthode privée d'une classe pour tester/documenter. |
* Comment l'utiliser : |
* MyClass->foo(): |
* $cls = new MyClass(); |
* $foo = self::getPrivateMethode($cls, 'foo'); |
* $foo->invoke($cls, $...); |
* |
* @param object $objet Une instance de votre classe |
* @param string $methode Le nom de la méthode private |
* @return ReflectionMethod La méthode demandée |
*/ |
public static function getMethodePrivee($objet, $nomMethode) { |
$classe = new ReflectionClass($objet); |
$methode = $classe->getMethod($nomMethode); |
$methode->setAccessible(true); |
return $methode; |
} |
/** |
* Récupère une méthode protégée d'une classe pour tester/documenter. |
* Comment l'utiliser : |
* MyClass->foo(): |
* $cls = new MyClass(); |
* $foo = self::getProtectedMethode($cls, 'foo'); |
* $foo->invoke($cls, $...); |
* @param object $objet Une instance de votre classe |
* @param string $methode Le nom de la méthode protected |
* @return ReflectionMethod La méthode demandée |
*/ |
public static function getMethodeProtegee($objet, $nomMethode) { |
return self::getMethodePrivee($objet, $nomMethode); |
} |
} |
?> |
/tags/v0.1-20130830/services/modules/0.1/iso-639-1/Langues.php |
---|
New file |
0,0 → 1,388 |
<?php |
/** |
* Description : |
* Classe Langues.php fournit des informations sur ensemble structuré des termes et concepts représentant les éléments |
* d'un domaine de connaissances . |
* Le but étant de fournir un ensemble minimal d'information comprenant : |
* un identifiant (numérique ou alphanumérique sous forme de ChatMot si possible), un nom, une region et |
* éventuellement une relation hiérarchique avec un autre terme (=classe). |
* Si l'url finit par /langues on retourne une liste de termes (seulement les 100 premières par défaut). |
* L'url peut contenir des paramètres optionnels passés après le ? : /observations?param1=val1¶m2=val2&... |
* |
* Les paramètres de requête disponibles sont : masque, masque.code, masque.nom, masque.region , recherche, |
* distinct, retour.format, navigation.depart et navigation.limite. |
* |
* Encodage en entrée : utf8 |
* Encodage en sortie : utf8 |
* @package framework-v3 |
* @author Delphine Cauquil <delphine@tela-botanica.org> |
* @author Jennifer Dhé <jennifer.dhe@tela-botanica.org> |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt> |
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt> |
* @version 1.0 |
* @copyright 1999-${year} Tela Botanica (accueil@tela-botanica.org) |
*/ |
class Langues extends Commun { |
protected $service = 'langues'; |
/** |
* Permet de stocker la requete formulée : /langues | /langues/#id | /langues/#id/champ | /langues/#id/relations |
* Est remplit au cours de l'analyse des ressources (traiterRessources()), par défaut, a la valeur du service. |
* Est utilisée principalement pr déterminer le format du tableau à retourner. */ |
protected $format_reponse = 'langues'; |
/** Variables constituant les parametres de la requete SQL (champ, condition, group by, limit) remplie |
* selon ressources et paramètres */ |
protected $requete_champ = ' * '; |
protected $requete_condition = ''; |
protected $limite_requete = array( |
'depart' => 0, |
'limite' => 100 |
); |
/** Stockage des ressources et paramétres */ |
protected $table_ressources = array(); |
protected $table_param = array(); |
/** |
* Precise la contenance plus ou moins précise du tableau à retourner : |
* - min = les données présentes dans la table |
* - max = les données de la table + les informations complémentaires (pour les identifiants et les codes) |
* - oss = la liste des nom_sci (uniquement pour noms et taxons) |
*/ |
protected $retour_format = 'max'; |
protected $retour_langue = 'fr'; |
/** Valeur du paramètre de requete recherche : |
* - stricte : le masque est passé tel quel à l'opérateur LIKE. |
* - etendue : ajout automatique du signe % à la place des espaces et en fin de masque avec utilisation de LIKE. |
* - floue : recherche tolérante vis-à-vis d'approximations ou d'erreurs (fautes d'orthographe par exemple) */ |
protected $recherche; |
/** Permet de stocker le tableau de résultat (non encodé en json) */ |
protected $table_retour = array(); |
/** Stocke le nombre total de résultats de la requete principale. Est calculée lors de l'assemblage de la requete */ |
protected $total_resultat; |
// +-------------------------------------------------------------------------------------------------------------------+ |
public function traiterParametres() { |
if (isset($this->parametres) && !empty($this->parametres)) { |
$this->table_param = $$this->parametres; |
// masque : filtre la liste en fonction d'un masque de recherche portant sur le code, le nom ou la region. |
// masque.code : filtre uniquement sur le code. masque.nom : filtre uniquement sur le nom. |
// masque.region : filtre uniquement sur la region. |
if (isset($parametres['recherche']) && $parametres['recherche'] != '') { |
$this->recherche = $parametres['recherche']; |
} |
foreach ($parametres as $param => $valeur) { |
switch ($param) { |
case 'masque' : |
$this->ajouterLeFiltreMasque('masque', $valeur); |
break; |
case 'masque.code' : |
$this->ajouterLeFiltreMasque('id', $valeur); |
break; |
case 'masque.nom' : |
$this->ajouterLeFiltreMasque('nom', $valeur); |
break; |
case 'retour.langue' : |
$this->retour_langue = $valeur;break; |
case 'retour.format' : |
$this->retour_format = $valeur; |
break; |
case 'navigation.depart' : |
$this->limite_requete['depart'] = $valeur; |
break; |
case 'navigation.limite' : |
$this->limite_requete['limite'] = $valeur; |
break; |
case 'recherche' : |
break; |
default : |
$p = 'Erreur dans les paramètres de recherche de votre requête : '. |
'</br> Le paramètre " '.$param.' " n\'existe pas.'; |
$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $p); |
} |
} |
} |
} |
public function ajouterLeFiltreMasque($nom_champ, $valeur) { |
if ($nom_champ == 'id') { |
$this->requete_condition[] = $nom_champ.' = '.$this->getBdd()->proteger($valeur); |
} else { |
if ($this->recherche == 'floue') { |
if ($nom_champ == 'masque') { |
$this->requete_condition[] = '( id = '.$this->getBdd()->proteger($valeur) |
.' OR ( SOUNDEX(nom) = SOUNDEX(\''.$valeur.'\')' |
.' OR SOUNDEX(REVERSE(nom)) = SOUNDEX(REVERSE(\''.$valeur.'\')) ' |
.')) '; |
} else { |
$this->requete_condition[] = '(SOUNDEX('.$nom_champ.') = SOUNDEX(\''.$valeur.'\')' |
.' OR SOUNDEX(REVERSE('.$nom_champ.')) = SOUNDEX(REVERSE(\''.$valeur.'\'))) '; |
} |
} else { |
if ($this->recherche == 'etendue') { |
$valeur = str_replace(' ','%', $valeur); |
$valeur .= '%'; |
} |
if ($nom_champ == 'masque') { |
$this->requete_condition[] = '(dep = '.$this->getBdd()->proteger($valeur) |
.' OR nccenr LIKE '.$this->getBdd()->proteger($valeur) |
.' OR region = '.$this->getBdd()->proteger($valeur).')'; |
} else { |
$this->requete_condition[] = $nom_champ.' LIKE '.$this->getBdd()->proteger($valeur); |
} |
} |
} |
} |
// +-------------------------------------------------------------------------------------------------------------------+ |
public function traiterRessources() { |
if (isset($this->ressources) && !empty($this->ressources)) { |
$this->table_ressources = $this->ressources; |
if (isset($this->table_ressources[0]) && !empty($this->table_ressources[0])) { |
//requete = /langues/#id |
$this->traiterRessourceId(); |
if (isset($this->table_ressources[1]) && !empty($this->table_ressources[1])) { |
//requete = /langues/#id/#champ ou /langues/#id/relations |
$this->traiterRessourceChampOuRelations(); |
} |
} |
} |
} |
public function traiterRessourceId() { |
//requete : /langues/#id (ex : /langues/7) |
if (preg_match('/^[a-z]{2}$/', $this->table_ressources[0])) { |
$this->requete_condition[] = ' id = '.$this->getBdd()->proteger($this->table_ressources[0]); |
$this->format_reponse .= '/id'; |
} else { |
$r = 'Erreur dans les ressources de votre requête : </br> La ressource " '.$this->table_ressources[0]. |
' " n\'existe pas.'; |
$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $r); |
} |
} |
public function traiterRessourceChampOuRelations() { |
//requete = /langues/#id/relations : |
if ($this->table_ressources[1] == 'relations') { |
$r = 'Erreur dans les ressources de votre requête : </br> La ressource " '.$this->table_ressources[1]. |
' " n\'existe pas.'; |
$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $r); |
//requete = /langues/#id/#champ : |
} else { |
$this->format_reponse .= '/champ'; |
} |
} |
// +-------------------------------------------------------------------------------------------------------------------+ |
public function assemblerLaRequete() { |
$requete = ' SELECT '.$this->requete_champ. |
' FROM '.$this->table |
.$this->formerRequeteCondition() |
.$this->formerRequeteLimite(); |
return $requete; |
} |
public function formerRequeteCondition() { |
$condition = ''; |
if ($this->requete_condition != null) { |
$condition = ' WHERE '.implode(' AND ', $this->requete_condition); |
} |
return $condition; |
} |
//ajout d'une limite seulement pour les listes (pas plus de 100 resultats retournés pr les requetes |
// suivantes : /langues et /langues/#id/relations) |
public function formerRequeteLimite() { |
if (($depart = $this->limite_requete['depart']) > ($this->total_resultat = $this->recupererTotalResultat())) { |
//cas ou la requete presente un navigation.depart supérieur au nb total de resultats. |
$this->limite_requete['depart'] = |
(($nb - $this->limite_requete['limite']) < 0) ? 0 : ($nb - $this->limite_requete['limite']); |
$this->requete_limite = ' LIMIT '.$this->limite_requete['depart'].', '.$this->limite_requete['limite']; |
} else { |
$this->requete_limite = ' LIMIT '.$this->limite_requete['depart'].', '.$this->limite_requete['limite']; |
} |
return $this->requete_limite; |
} |
public function recupererTotalResultat() { |
//on récupère le nombre total de résultats de la requete (ex : le nombre d'id contenu dans la liste /langues) |
$requete = 'SELECT count(*) as nombre FROM '. |
$this->table. |
$this->formerRequeteCondition(); |
$res = $this->getBdd()->recuperer($requete); |
if ($res) { |
$total = $res['nombre']; |
} else { |
$t = 'Fonction recupererTotalResultat() : <br/>Données introuvables dans la base'; |
$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $t); |
} |
return $total; |
} |
// +-------------------------------------------------------------------------------------------------------------------+ |
// determine en fct du service appelé (/langues | /langues/#id | /langues/#id/champ | |
// /langues/#id/relations) le format du tableau à retourner. Encode en json |
public function retournerResultatFormate($resultat) { |
$this->recupererTableConfig('correspondance_champs'); |
switch ($this->format_reponse) { |
case 'langues' : |
$reponse = $this->formaterLangues($resultat); |
break; |
case 'langues/id' : |
$reponse = $this->formaterLanguesId($resultat[0]); |
break; |
case 'langues/id/champ' : |
$reponse = $this->formaterLanguesIdChamp($resultat[0]); |
break; |
} |
return $reponse; |
} |
public function formaterLangues($resultat) { |
//on remplit la table $table_retour_json['entete'] |
$this->table_retour['depart'] = $this->limite_requete['depart']; |
$this->table_retour['limite'] = $this->limite_requete['limite']; |
$this->table_retour['total'] = $this->total_resultat; |
//formuler les urls precedentes et suivantes affichées dans l'entete du resultat |
$url = $this->formulerUrl($this->total_resultat, '/langues'); |
if (isset($url['precedent']) && $url['precedent'] != '') { |
$this->table_retour['href.precedent'] = $url['precedent']; |
} |
if (isset($url['suivant']) && $url['suivant'] != '') { |
$this->table_retour['href.suivant'] = $url['suivant']; |
} |
$table_retour_json['entete'] = $this->table_retour; |
$this->table_retour = array(); |
if ($this->retour_langue == 'fr') {$nom = 'nom'; } else {$nom = 'nom_'.$this->retour_langue;} |
if (isset($this->table_param['masque_nom'])) $resultat = $this->trierRechercheFloue($this->table_param['masque_nom'], $resultat, $nom); |
//on remplit la table $table_retour_json['resultat'] |
foreach ($resultat as $tab) { |
foreach ($tab as $key => $valeur) { |
if ($valeur != '') { |
//TODO : vérifier d'où venez $id |
if ($key == 'id') {// ATTENTION : au départ valait $id! |
$num = $valeur; |
$this->table_retour['code'] = $valeur; |
break; |
} elseif ($key == 'nom_'.$this->retour_langue || ($this->retour_langue == 'fr' && $key == 'nom')) { |
$this->table_retour['nom'] = $valeur; |
break; |
} else { |
switch ($key) { |
case 'id' : |
$num = $valeur; $this->table_retour['code'] = $valeur; |
break; |
case 'nom' : |
$this->table_retour['nom'] = $valeur; |
break; |
} |
} |
} |
} |
if ($this->retour_format == 'max') { |
$this->table_retour['href'] = $this->ajouterHref('langues', $num); |
} |
$resultat_json[$num] = $this->table_retour; |
$this->table_retour = array(); |
} |
$table_retour_json['resultat'] = $resultat_json; |
return $table_retour_json; |
} |
public function formaterLanguesId($resultat) { |
foreach ($resultat as $key => $valeur) { |
if ($valeur != '') { |
$this->afficherDonnees($key, $valeur); |
} |
} |
unset($this->table_retour['href']); |
return $this->table_retour; |
} |
public function formaterLanguesIdChamp($resultat) { |
//on recupère tous les resultats possibles |
$reponse = $this->formaterLanguesId($resultat); |
$this->table_retour = array(); |
//on recupère les résultats demandés à partir du tableau de résultat complet |
$this->table_retour['id'] = $reponse['code']; |
$champs = explode(' ', $this->table_ressources[1]); |
foreach ($champs as $champ) { |
if ($champ == 'nom') $champ = 'nom.fr'; |
if ($this->verifierValiditeChamp($champ)) { |
if (strrpos($champ, '.*') !== false) { |
$this->afficherPointEtoile($champ, $reponse); |
} else { |
if (isset($reponse[$champ])) { |
$this->table_retour[$champ] = $reponse[$champ]; |
} else { |
$this->table_retour[$champ] = null; |
} |
} |
} |
} |
return $this->table_retour; |
} |
public function verifierValiditeChamp($champ) { |
preg_match('/^([^.]+)(:?\.([^.]+))?$/', $champ, $match); |
$champs_possibles = $this->correspondance_champs; |
$champs_possibles[] = 'nom'; |
$champs_possibles[] = 'iso-639-2'; |
$champs_possibles[] = 'iso-639-3'; |
if (in_array($match[1], $champs_possibles)) { |
$validite = true; |
} elseif (in_array($match[0], $champs_possibles)) { |
$validite = true; |
} else { |
$champs_possibles = implode('</li><li>', $champs_possibles); |
$c = 'Erreur dans votre requête : </br> Le champ "'.$champ_possibles.'" n\'existe pas. '. |
'Les champs disponibles sont : <li>'.$champs_possibles.'</li>'; |
$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $c); |
} |
return $validite; |
} |
public function afficherPointEtoile($champ, $reponse) { |
preg_match('/^([^.]+\.)\*$/', $champ, $match); |
foreach ($reponse as $chp => $valeur) { |
if (strrpos($chp, $match[1]) !== false) { |
if ($valeur != '') { |
$this->table_retour[$chp] = $valeur; |
} else { |
$this->table_retour[$chp] = null; |
} |
} |
} |
} |
public function afficherDonnees($champ, $valeur) { |
if ($this->retour_format == 'max') { |
if (strpos($champ, 'iso_639_') !== false) { |
$projet = substr(str_replace('_', '-', $champ),5); |
$this->table_retour[$projet.'.code'] = $valeur; |
$this->table_retour[$projet.'.href'] = $this->ajouterHrefAutreProjet('langues', '', $valeur, $projet); |
} else { |
$this->table_retour[$this->correspondance_champs[$champ]] = $valeur; |
} |
} else { |
$this->table_retour[$this->correspondance_champs[$champ]] = $valeur; |
} |
} |
} |
?> |
/tags/v0.1-20130830/services/modules/0.1/bdtfx/CommunNomsTaxons.php |
---|
New file |
0,0 → 1,930 |
<?php |
// declare(encoding='UTF-8'); |
/** |
* Description : |
* Classe CommunNomsTaxons.php |
* Encodage en entrée : utf8 |
* Encodage en sortie : utf8 |
* @package framework-v3 |
* @author Jennifer Dhé <jennifer.dhe@tela-botanica.org> |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt> |
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt> |
* @version 1.0 |
* @copyright 1999-2011 Tela Botanica (accueil@tela-botanica.org) |
*/ |
abstract class CommunNomsTaxons extends Commun { |
/** Tableau de correspondance entre les noms des champs et les codes de l'ontologie.*/ |
private $relationsChampsCodesOntologie = null; |
protected $table_retour; //Permet de stocker le tableau de résultat (non encodé en json) |
protected $resultat_req; // Permet de stocker le résultat de la requete principale. |
protected $compo_nom = null; //Stocke sous forme de tableau les composant du nom à ajouter au nom scientifique |
protected $table;// Nom de la table dans laquelle on récupèrera les données dans les requetes SQL |
protected $total_resultat = null; |
/** Stocke le service appelé correspondant. Est utilisé principalement lors de l'affichage du href d'un synonyme |
(ex id=12, basionyme num 25 est un synonyme) dans le service taxon */ |
protected $service_href = null; |
protected $erreursParametres = null; |
protected $sans_nom_sci = array('gen','sp','ssp','fam','au_ss','bib_ss'); |
private $bib_traitees = array(); |
private $ontologie = array(); |
//+------------------------------- PARAMÈTRES ---------------------------------------------------------------+ |
public function traiterParametres() { |
$this->definirParametresParDefaut(); |
$this->verifierParametres(); |
if (isset($this->parametres) && count($this->parametres) > 0) { |
foreach ($this->parametres as $param => $val) { |
switch ($param) { |
case 'ns.structure' : |
$this->remplirTableCompositionNom($val); |
if (in_array($val,$this->sans_nom_sci)){ |
$this->requete_champ = implode(', ',$this->compo_nom); |
}else { |
$this->requete_champ .= ' ,'.implode(', ',$this->compo_nom); |
} |
break; |
case 'navigation.depart' : |
$this->limite_requete['depart'] = $val; |
break; |
case 'navigation.limite' : |
$this->limite_requete['limite'] = $val; |
break; |
} |
} |
$this->traiterParametresSpecifiques(); |
} |
} |
protected function definirParametresParDefaut() { |
if (empty($this->parametres['recherche'])) { |
$this->parametres['recherche'] = 'stricte'; |
} |
if (empty($this->parametres['ns.format'])) { |
$this->parametres['ns.format'] = 'txt'; |
} |
if (empty($this->parametres['retour.format'])) { |
$this->parametres['retour.format'] = 'max'; |
} |
if (empty($this->parametres['ns.structure']) && |
$this->parametres['retour.format'] != 'oss') { |
$this->parametres['ns.structure'] = 'au,an,bib'; |
} |
} |
public function verifierParametres() { |
//$this->verifierParametresAPI(); |
$this->verifierParametre('recherche', 'stricte|floue|etendue|complete'); |
$this->verifierParametre('ns.format', 'htm|txt'); |
$this->verifierParametre('retour.format', 'min|max|oss|perso'); |
$this->verifierParametreAvecValeurMultipe('ns.structure', 'an|au|bib|ad|gen|sp|ssp|fam|au_ss|bib_ss'); |
/*if (count($this->erreursParametres) > 0) { |
$m = 'Erreur dans votre requête : '.implode('<br/>', $this->erreursParametres); |
$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $m); |
}*/ |
} |
public function verifierParametresAPI() { |
$parametresApi = $this->recupererTableauConfig('parametresAPI'); |
while (!is_null($parametre = key($this->parametres))) { |
if (!in_array($parametre, $parametresApi)) { |
$this->erreursParametres[] = "Le paramètre '$parametre' n'est pas pris en compte par cette version de l'API."; |
} |
next($this->parametres); |
} |
} |
public function verifierParametre($parametre, $valeursPermises) { |
if (isset($this->parametres[$parametre]) && !empty($this->parametres[$parametre])) { |
$valeur = $this->parametres[$parametre]; |
$this->verifierValeursPermises($parametre, $valeur, $valeursPermises); |
} |
} |
public function verifierParametreAvecValeurMultipe($parametre, $valeursPermises) { |
if (isset($this->parametres[$parametre]) && !empty($this->parametres[$parametre])) { |
$valeursConcatenees = $this->parametres[$parametre]; |
$valeurs = explode(',', $valeursConcatenees); |
foreach ($valeurs as $valeur) { |
$this->verifierValeursPermises($parametre, $valeur, $valeursPermises); |
} |
} |
} |
private function verifierValeursPermises($parametre, $valeur, $valeursPermises) { |
if (!in_array($valeur, explode('|', $valeursPermises))) { |
$this->erreursParametres[] = "Le paramètre '$parametre' ne peut pas prendre la valeur '$valeur'. Valeurs permises : $valeursPermises"; |
} |
} |
public function traiterParametresCommuns() { |
} |
public function ajouterFiltreMasque($nom_champ, $valeur) { |
$valeur = explode(',',$valeur); |
$conditions = array(); |
if ($nom_champ == 'annee' || $nom_champ == 'rang') { |
foreach ($valeur as $val) { |
$conditions[] = "$nom_champ = ".$this->getBdd()->proteger($val); |
} |
} else { |
if ($this->parametres['recherche'] == 'etendue') { |
foreach ($valeur as $val) { |
$val = $this->modifierValeur($val); |
$conditions[] = "$nom_champ LIKE ".$this->getBdd()->proteger($val); |
} |
} elseif ($this->parametres['recherche'] == 'floue') { |
foreach ($valeur as $val) { |
$val = $this->getBdd()->proteger($val); |
$conditions[] = "( SOUNDEX($nom_champ) = SOUNDEX($val))". |
" OR ( SOUNDEX(REVERSE($nom_champ)) = SOUNDEX(REVERSE($val)))"; |
} |
} else { |
foreach ($valeur as $val) { |
$conditions[] = "$nom_champ LIKE ".$this->getBdd()->proteger($val); |
} |
} |
} |
$this->requete_condition[]= '('.implode(' OR ', $conditions ).')'; |
$this->masque[$nom_champ] = $nom_champ.'='.implode(',',$valeur); |
} |
private function modifierValeur($valeur) { |
$valeur = $this->remplacerCaractereHybrideEtChimere($valeur); |
$valeur = $this->preparerChainePourRechercheEtendue($valeur); |
return $valeur; |
} |
private function remplacerCaractereHybrideEtChimere($valeur) { |
$caracteres = array('×', '%D7', '+', '%2B'); |
$remplacements = array('x ','x ', '+', '+'); |
$valeur = str_replace($caracteres, $remplacements, $valeur); |
return $valeur; |
} |
private function preparerChainePourRechercheEtendue($valeur) { |
$valeur = str_replace(' ', '% ', trim($valeur)); |
$valeur = $valeur.'%'; |
return $valeur; |
} |
//+-------------------------------Fonctions d'analyse des ressources-------------------------------------+ |
private function etreRessourceId() { |
$ok = false; |
if ($this->estUnIdentifiant() && count($this->ressources) == 1) { |
$ok = true; |
} |
return $ok; |
} |
public function traiterRessources() { |
if (isset($this->ressources) && count($this->ressources) > 0) { |
if ($this->ressources[0] == 'relations') { |
$this->traiterRessourceRelations(); |
} elseif ($this->estUnIdentifiant()) { //l'identifiant peut etre de type /#id ou /nt:#id |
$this->traiterRessourcesIdentifiant(); // dans le service noms ou taxons |
} elseif ($this->ressources[0] == 'stats') { //ressource = noms/stats |
$this->traiterRessourcesStats(); |
} else { |
$e = 'Erreur dans votre requete </br> Ressources disponibles : <br/> |
<li> /'.$this->service.'/#id (id : L\'identifiant du nom rechercher)</li> |
<li> /'.$this->service.'/nt:#id (id : Numero du taxon recherche)</li> |
<li> /'.$this->service.'/stats </li>'; |
$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e); |
} |
} |
} |
public function traiterRessourcesStats() { |
$this->format_reponse = $this->service.'/stats'; |
$e = "Erreur dans votre requête </br> Ressources disponibles : $this->service/stats/[annees|rangs|initiales]"; |
if (isset($this->ressources[1]) && !empty($this->ressources[1])) { |
switch ($this->ressources[1]) { |
case 'annees' : |
$this->traiterRessourceStatsAnnees(); |
break; |
case 'rangs' : |
$this->traiterRessourceStatsRangs(); |
break; |
case 'initiales' : |
$this->traiterRessourceStatsInitiales(); |
break; |
default : |
$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e); |
break; |
} |
} else { |
$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e); |
} |
} |
/** Vérifie si la première valeur de la table de ressource est un identifiant : |
* un numerique ou un numéro taxonomique sous la forme nt:xx */ |
public function estUnIdentifiant() { |
return (is_numeric($this->ressources[0]) || (strrpos($this->ressources[0],'nt:') !== false |
&& is_numeric(str_replace('nt:','',$this->ressources[0])))); |
} |
//+------------------------------------------------------------------------------------------------------+ |
// Fonction d'analyse des parametres |
/** Permet de remplir le tableau compo_nom. Il comprendra en fct du paramètre ns.structure les éléments à rajouter |
* au nom_sci (annee, auteur, biblio ou addendum). */ |
public function remplirTableCompositionNom($valeur) { |
$structure_nom = explode(',', $valeur); |
foreach ($structure_nom as $structure) { |
$structure = trim($structure); |
$patterns = array('/^an$/', '/^au$/', '/^bib$/', '/^ad$/', '/^sp$/', '/^gen$/', '/^ssp$/','/^fam$/', |
'/^au_ss$/','/^bib_ss$/'); |
$champs = array('annee', 'auteur', 'biblio_origine', 'nom_addendum', 'epithete_sp', 'genre', |
'epithete_infra_sp','famille','auteur', 'biblio_origine'); |
// avec str_replace() 'sp' est inclu dans 'ssp', et la conversion pour 'ssp' est mauvaise |
$this->compo_nom[$structure] = preg_replace($patterns, $champs, $structure); |
} |
} |
public function mettreAuFormat() { |
if ($this->parametres['ns.format'] == 'htm') { |
if (strrpos($this->requete_champ, 'nom_sci_html as nom_sci') === false) { |
$this->requete_champ = str_replace('nom_sci', 'nom_sci_html as nom_sci', $this->requete_champ); |
} |
} |
} |
//+------------------------------------------------------------------------------------------------------+ |
// Fonctions de formatage |
/** Fonction permettant de creer la table dont le nom est passé en paramètre (champs_api, champs_bdtfx, |
* correspondance_champs...). Les données de chaque table sont présentes dans le fichier de configuration config.ini |
* @param String $table : Peut contenir plusieurs nom de table dont on souhaite récupérer les données : table,table,table. */ |
public function recupererTableSignification($table) { |
$tables = explode(',', $table); |
foreach ($tables as $tab) { |
if ($tab == 'champs_comp') { |
$champ_bdnff_api = array_keys($this->champs_api); //on recupère le nom des champ ds la bdd |
$this->champs_comp = array_diff($this->champs_table, $champ_bdnff_api); |
} elseif ($tab == 'champs_api') { |
foreach ($this->correspondance_champs as $key => $val) { |
preg_match('/(hybride[.]parent_0[12](?:[.]notes)?|nom_sci[.][^.]+|[^.]+)(?:[.](id|code))?/', $val, $match); |
$val = $match[1]; |
$this->champs_api[$key] = $val; |
} |
} else { |
$this->$tab = $this->recupererTableauConfig($tab); |
} |
} |
} |
public function formaterEnOss($resultat) { |
$table_nom = array(); |
$oss = ''; |
foreach ($resultat as $tab) { |
if (isset($tab['nom_sci']) ) { |
if (!in_array($tab['nom_sci'], $table_nom)) { |
$table_nom[] = $tab['nom_sci']; |
$oss[] = $tab['nom_sci'].' '.$this->ajouterCompositionNom($tab); |
} |
}else { |
$res = $this->ajouterCompositionNom($tab); |
if($res) { |
$oss[] = $res; |
} |
} |
} |
if (isset($this->masque)) $masque = implode('&', $this->masque); |
else $masque = 'Pas de masque'; |
$table_retour_oss = array($masque, $oss); |
return $table_retour_oss; |
} |
public function afficherEnteteResultat($url_service) { |
$this->table_retour['depart'] = $this->limite_requete['depart']; |
$this->table_retour['limite'] = $this->limite_requete['limite']; |
$this->table_retour['total'] = $this->total_resultat; |
$url = $this->formulerUrl($this->total_resultat, $url_service); |
if (isset($url['precedent']) && $url['precedent'] != '') { |
$this->table_retour['href.precedent'] = $url['precedent']; |
} |
if (isset($url['suivant']) && $url['suivant'] != '') { |
$this->table_retour['href.suivant'] = $url['suivant']; |
} |
} |
public function afficherNomHrefRetenu($tab, $num) { |
$this->resultat_req = $tab; |
$this->afficherDonnees('num_nom', $num); |
if ($this->parametres['retour.format'] == 'min') { // sinon est affiché ds afficherDonnees(num_nom, $val) ci-dessus |
$this->table_retour['nom_sci'] = $tab['nom_sci']; |
$this->table_retour['nom_sci_complet'] = $tab['nom_sci'].' '.$this->ajouterCompositionNom($tab); |
} |
if ($tab['num_nom_retenu'] != '') { |
$retenu = ($tab['num_nom_retenu'] == $num) ? 'true' : 'false'; |
} else { |
$retenu = 'absent'; |
} |
$this->table_retour['retenu'] = $retenu; |
// Pourquoi ce unset ? JPM - 28-03-2013 |
unset($this->table_retour['id']); |
} |
//+------------------------------------------------------------------------------------------------------+ |
// Fonction de formatage pour les services /#id/ |
public function formaterId($resultat) { |
$this->recupererTableSignification('correspondance_champs,champs_api,champs_comp'); |
$this->resultat_req = $resultat; |
foreach ($resultat as $cle => $valeur) { |
if ($valeur != '') { |
$this->afficherDonnees($cle, $valeur); |
} |
} |
if (isset($this->parametres['retour.champs']) && $this->format_reponse == 'noms/id') { |
$retour = $this->table_retour; |
$this->table_retour = array(); |
$champs = explode(',', $this->parametres['retour.champs']); |
$this->ajouterChampsPersonnalises($champs, $retour); |
} |
unset($this->table_retour['href']); |
return $this->table_retour; |
} |
public function formaterIdChamp($resultat) { |
$this->recupererTableSignification('correspondance_champs,champs_api,champs_comp'); |
$reponse_id = $this->formaterId($resultat); |
$this->table_retour = array(); |
$champs = explode(' ', $this->ressources[1]); |
$this->ajouterChampsPersonnalises($champs, $reponse_id); |
return $this->table_retour; |
} |
protected function ajouterChampsPersonnalises($champs, $reponse_id) { |
$champs_a_libeller = array('nom_retenu', 'rang', 'basionyme', 'hybride', 'hybride.parent_01', |
'hybride.parent_02', 'presence', 'tax_sup', 'statut_origine', 'statut_culture', 'statut_introduction'); |
if (! is_null($champs) && is_array($champs) && count($champs) > 0) { |
foreach ($champs as $champ) { |
if ($this->verifierValiditeChamp($champ)) { |
if (strrpos($champ, '.*') !== false) { |
$this->afficherPointEtoile($champ, $reponse_id); |
} elseif (in_array($champ, $champs_a_libeller)) { |
$this->table_retour[$champ.'.libelle'] = |
(isset($reponse_id[$champ.'.libelle'])) ? $reponse_id[$champ.'.libelle'] : null; |
} else { |
$champ = $this->trouverChampBddCorrespondant($champ); |
$this->table_retour[$champ] = (isset($reponse_id[$champ])) ? $reponse_id[$champ] : null; |
} |
} |
} |
} |
} |
public function afficherPointEtoile($champ, $reponse) { |
preg_match('/^([^.]+\.)\*$/', $champ, $match); |
if ($match[1] == 'nom_sci') { |
$this->afficherNomSciPointEpithete($this->resultat_req); |
} else { |
foreach ($reponse as $chp => $valeur) { |
if (strrpos($chp, $match[1]) !== false) { |
if ($valeur != '') { |
$this->table_retour[$chp] = $valeur; |
} else { |
$this->table_retour[$chp] = null; |
} |
} |
} |
} |
} |
public function decomposerNomChamp($champ) { |
$decomposition = false; |
if (preg_match('/^(?:([^.]+\.parent_0[12]|[^.]+))(?:\.(.+))?$/', $champ, $match)) { |
$radical_champ = $match[1]; |
$suffixe = (isset($match[2])) ? $match[2] : ""; |
$decomposition = array($radical_champ, $suffixe); |
} |
return $decomposition; |
} |
public function verifierValiditeChamp($champ) { |
$decomposition = $this->decomposerNomChamp($champ); |
$validite_ressource = true; |
if ($decomposition) { |
list($radical, $suffixe) = $decomposition; |
$champs_complementaire = array('nom_retenu_complet', 'basionyme_complet'); |
// on verifie si le nom du champ existe bien |
if (!$this->estChampApi($radical) && !$this->estChampComplementaire($radical)) { |
if (!in_array($radical, $champs_complementaire)) { |
$validite_ressource = false; |
$e = 'Le champ "'.$radical.'" n\'existe pas dans la base. <br/><br/>'; |
$this->renvoyerErreur( RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e); |
} |
} elseif ($this->estUnPoint($champ)) { |
$validite_ressource = $this->verifierValiditeSuffixe($suffixe, $radical); |
} |
} |
return $validite_ressource; |
} |
public function estChampApi($radical_champ) { |
$champ_api_ok = false; |
if (in_array($radical_champ, $this->champs_api) || in_array($radical_champ, $this->correspondance_champs)) { |
$champ_api_ok = true; |
} |
return $champ_api_ok; |
} |
public function estChampComplementaire($radical_champ) { |
$champ_complementaire_ok = in_array($radical_champ, $this->champs_comp) ? true : false; |
return $champ_complementaire_ok; |
} |
public function verifierValiditeSuffixe($suffixe, $radical_champ) { |
$validite_ressource = true; |
if ($this->correspondAUnId($radical_champ) || $radical_champ == 'id') { |
$this->verificationSuffixesIdentifiant($suffixe, $radical_champ, $validite_ressource); |
} elseif ($this->correspondAUnCode($radical_champ)) { |
$this->verificationSuffixesCodes($suffixe, $radical_champ, $validite_ressource); |
} elseif ($radical_champ == 'nom_sci') { |
if ($suffixe != '*') { |
$validite_ressource = false; |
$m = 'Erreur : Le suffixe demandé n\'existe pas pour le champ "'.$radical_champ.'".<br/> |
Les suffixes possibles sont les suivants : <li> * </li>'; |
$this->renvoyerErreur( RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $m); |
} |
} else { |
$validite_ressource = false; |
$m = 'Erreur : Le paramètre "'.$radical_champ.'" ne peut pas présenter de suffixe. <br/><br/>'; |
$this->renvoyerErreur( RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $m); |
} |
return $validite_ressource; |
} |
public function verificationSuffixesCodes(&$suffixe, &$radical_champ, &$validite_ressource ) { |
if (!in_array($suffixe, array('*', 'code', 'href', 'details'))) { |
$validite_ressource = false; |
$e = 'Erreur : Le suffixe demandé n\'existe pas pour le champ "'.$radical_champ.'.<br/> Les suffixes ' |
.'possibles sont les suivants : <li> .* </li><li> .code </li><li> .href </li><li> .details </li>'; |
$this->renvoyerErreur( RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e); |
} |
} |
public function verificationSuffixesIdentifiant(&$suffixe, &$radical_champ, &$validite_ressource) { |
if ((strrpos($radical_champ, 'parent') !== false && !in_array($suffixe, array('*', 'id', 'href', 'details', 'notes'))) |
|| !in_array($suffixe, array('*', 'id', 'href', 'details')) && strrpos($radical_champ, 'parent') === false) { |
$validite_ressource = false; |
$e = 'Erreur : Le suffixe demandé n\'existe pas pour le champ "'.$radical_champ.'".<br/> Les suffixes ' |
.'possibles sont les suivants : <li> .* </li><li> .id </li><li> .href </li><li> .details </li>' |
.'<li> .notes (seulement pour les hybride.parent)'; |
$this->renvoyerErreur( RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e); |
} |
} |
//------------------------------fonction de formatage pour les services /stats/----------------------------------------- |
public function formaterStatsAnnee($resultat) { |
foreach ($resultat as $cle_annee) { |
$annee = ($cle_annee['annee'] != '') ? $cle_annee['annee'] : 'ND'; |
$nb = $cle_annee['nombre']; |
$retour_stats_annee[$annee] = $nb; |
} |
return $retour_stats_annee; |
} |
public function formaterStatsRang($resultat) { |
foreach ($resultat as $rangs) { |
if ($rangs['rang'] != 0) { |
$rang = $rangs['rang']; |
if ($this->parametres['retour.format'] == 'max') { |
$retour_rang[$rang]['rang'] = $this->ajouterSignificationCode('rang',$rang); |
} |
$nombre = $rangs['nombre']; |
$retour_rang[$rang]['nombre'] = $nombre; |
} |
} |
return $retour_rang; |
} |
public function formaterStatsInitiales($resultat) { |
$rang = null; |
$table_rang = array(); |
foreach ($resultat as $tuple) { |
if ($tuple['rang'] != 0) { |
$this->memoriserRang($table_rang, $tuple, $rang); |
if ($tuple['lettre'] == 'x ') { |
$this->ajouterHybrideChimere('hybride', $rang, $tuple); |
} elseif ($tuple['lettre'] == '+ ') { |
$this->ajouterHybrideChimere('chimere', $rang, $tuple); |
} else { |
$l = substr($tuple['lettre'], 0, 1); |
if (isset($this->table_retour[$rang][$l])) { |
$this->table_retour[$rang][substr($tuple['lettre'], 0, 1)] += floatval($tuple['nb']); |
} else { |
$this->table_retour[$rang][substr($tuple['lettre'], 0, 1)] = floatval($tuple['nb']); |
} |
} |
} |
} |
return $this->table_retour; |
} |
public function memoriserRang(&$table_rang, $tuple, &$rang) { |
if (is_array($table_rang)) { |
if (!in_array($tuple['rang'], $table_rang)) { |
$rang = $tuple['rang']; |
$table_rang[] = $rang; |
if ($this->parametres['retour.format'] == 'max') { |
$rang = $this->ajouterSignificationCode('rang', $rang); |
} |
} |
} |
} |
public function ajouterHybrideChimere($groupe, &$rang, &$tuple) { |
if (isset($this->table_retour[$rang][str_replace('hybride', 'hyb', $groupe)])) { |
$this->table_retour[$rang][$groupe] += floatval($tuple['nb']); |
} else { |
$this->table_retour[$rang][$groupe] = floatval($tuple['nb']); |
} |
} |
//-----------------------------Fonctions d'affichage utiliser dans les fonctions de formatage--------------------------- |
public function afficherDonnees($champApi, $valeur) { |
$champBdd = $this->trouverChampBddCorrespondant($champApi); |
if ($this->parametres['retour.format'] == 'min') { |
if ($champApi == 'nom_sci') { |
$valeur = $valeur.' '.$this->ajouterCompositionNom($this->resultat_req); |
} |
if ($champApi == 'nom_sci_html') { |
$valeur = $valeur.' '.$this->ajouterCompositionNom($this->resultat_req, 'htm'); |
} |
$this->table_retour[$champBdd] = $valeur; |
// on essaye de permettre l'obtention du nom_sci_complet, y compris en retour.format == 'min', |
// tout en évitant les appels aux ontologies |
/*if ($this->correspondAUnId($champBdd) || $champBdd == 'id' && $valeur != '0') { |
preg_match('/^([^.]+\.parent_0[12]|[^.]+)(?:\.id)?$/', $champBdd, $match); |
if(strpos($this->parametres['retour.format'], $match[1]) !== false) $this->afficherSignification($match[1], $valeur); |
}*/ |
} else { |
$this->afficherToutesLesInfos($champBdd, $valeur); |
} |
} |
public function trouverChampBddCorrespondant($champApi) { |
if (array_key_exists($champApi, $this->champs_api)) { |
$champBdd = $this->correspondance_champs[$champApi]; |
} else { |
$champBdd = $champApi; |
} |
return $champBdd; |
} |
public function afficherToutesLesInfos($nom_champ_api, $valeur) { |
if ($this->presentePlusieursId($nom_champ_api, $valeur)) { |
preg_match('/^([^.]+\.parent_0[12]|[^.]+)(?:\.id)?$/', $nom_champ_api, $match); |
$this->afficherInfosPrecises($match[1], 'details', $valeur); |
$this->table_retour[$nom_champ_api] = $valeur; |
} elseif (strrpos($nom_champ_api, 'parent') !== false && strrpos($nom_champ_api, 'notes') !== false) { |
$this->table_retour[$nom_champ_api] = $valeur; |
} elseif (($this->correspondAUnId($nom_champ_api) || $nom_champ_api == 'id' && $valeur != '0')) { |
preg_match('/^([^.]+\.parent_0[12]|[^.]+)(?:\.id)?$/', $nom_champ_api, $match); |
$this->afficherInfosPrecises($match[1], 'id,signification,href', $valeur); |
} elseif ($this->correspondAUnCode($nom_champ_api)) { |
preg_match('/^([^.]+)(?:\.code)?$/', $nom_champ_api, $match); |
$this->afficherInfosPrecises($match[1], 'code,signification,href', $valeur); |
} elseif ($nom_champ_api == 'nom_sci_html') { |
$this->table_retour['nom_sci_html'] = $valeur; |
$this->table_retour['nom_sci_html_complet'] = $valeur.' '.$this->ajouterCompositionNom($this->resultat_req, 'htm'); |
}elseif ($nom_champ_api != 'nom_sci') { |
$this->table_retour[$nom_champ_api] = $valeur; |
} |
} |
public function presentePlusieursId($ressource, $valeur = null) { |
if ($valeur) { |
$presente = strrpos($ressource, 'proparte') !== false && strrpos($valeur, ',') !== false; |
} else { //pour la vérification du champ, on ignore alors la valeur de la ressource |
$presente = strrpos($ressource, 'proparte') !== false; |
} |
return $presente; |
} |
public function afficherInfosPrecises($champ, $suffixe, $valeur) { |
$suffixes = explode(',', $suffixe); |
//on initialise au service appelé. Sera potentiellement modifié dans la fonction afficherSignification() |
$this->service_href = $this->service; |
foreach ($suffixes as $suffixe) { |
switch ($suffixe) { |
case 'id' : |
$this->table_retour[str_replace('id.id', 'id', $champ.'.id')] = $valeur; |
break; |
case 'details' : |
$this->afficherTableDetails($champ, $valeur); |
break; |
case 'signification' : |
$this->afficherSignification($champ, $valeur); |
break; |
case 'href' : |
$url = $this->creerUrl($champ, $valeur); |
$this->table_retour[str_replace('id.href', 'href', $champ.'.href')] = $url; |
break; |
case 'code' : |
$this->table_retour[$champ.'.code'] = $this->obtenirCode($champ, $valeur); |
break; |
case 'notes' : |
$this->table_retour[$champ.'.notes'] = $this->resultat_req[str_replace('.', '_', $champ).'_notes']; |
break; |
default : break; |
} |
} |
} |
public function afficherTableDetails($nom_champ_api, $valeur) { |
$tab_id = explode(',', $valeur); |
$tab_res = $this->table_retour; |
$this->table_retour = array(); |
foreach ($tab_id as $id) { |
$this->afficherInfosPrecises($nom_champ_api, 'id,signification,href', $id); |
$tab_res[$nom_champ_api.'.details'][] = $this->table_retour; |
$this->table_retour = array(); |
} |
$this->table_retour = $tab_res; |
} |
private function obtenirCode($champ, $valeur) { |
$code = $this->transformerChampEnCode($champ); |
return "bdnt.$code:$valeur"; |
} |
private function transformerChampEnCode($champ) { |
if (is_null($this->relationsChampsCodesOntologie)) { |
$this->relationsChampsCodesOntologie = Outils::recupererTableauConfig('ChampsCodesOntologie'); |
} |
$code = $champ; |
if (array_key_exists($champ, $this->relationsChampsCodesOntologie)) { |
$code = $this->relationsChampsCodesOntologie[$champ]; |
} |
return $code; |
} |
public function creerUrl($champ, $valeur) { |
if ($this->correspondAUnId($champ) || $champ == 'id') { |
$service = $this->service_href; |
$url = $this->ajouterHref($service, $valeur); |
} else { |
$code = $this->transformerChampEnCode($champ); |
$url = $this->ajouterHrefAutreProjet('ontologies', "$code:", $valeur, 'bdnt'); |
} |
return $url; |
} |
public function afficherSignification($champ, $valeur) { |
if ($champ == 'id' && isset($this->resultat_req['nom_sci']) && $this->resultat_req['num_nom'] == $valeur) { |
//si le nom_sci du num_nom que l'on veut afficher est déjà dans la table de résultat : |
$this->table_retour['nom_sci'] = $this->resultat_req['nom_sci']; |
$this->table_retour['nom_sci_complet'] = $this->resultat_req['nom_sci'].' '. |
$this->ajouterCompositionNom($this->resultat_req); |
} elseif ($this->correspondAUnId($champ) || $champ == 'id') { |
$nom = $this->recupererNomSci($valeur); |
if ($nom != array()) { |
$this->table_retour[$champ.'.libelle'] = $nom['nom_sci']; |
$this->table_retour[$champ.'_html'] = $nom['nom_sci_html']; |
$this->table_retour[$champ.'_complet'] = $nom['nom_sci_complet']; |
$this->table_retour[$champ.'_html_complet'] = $nom['nom_sci_complet_html']; |
$this->service_href = $nom['service']; |
} |
} elseif ($this->correspondAUnCode($champ)) { |
$this->table_retour[$champ.'.libelle'] = $this->ajouterSignificationCode($champ, $valeur); |
} |
} |
/** Permet d'afficher les élements nomenclatural du nom_sci lors de l'appel dans le service noms/id/champ du champ^nom_sci.*/ |
public function afficherNomSciPointEpithete($resultat) { |
$tab_nom_sci = array('nom_supra_generique', 'genre', 'epithete_infra_generique', 'epithete_sp', |
'type_epithete', 'epithete_infra_sp', 'cultivar_groupe', 'cultivar', 'nom_commercial'); |
foreach ($tab_nom_sci as $compo_nom) { |
if (isset($resultat[$compo_nom]) && !empty($resultat[$compo_nom])) { |
$this->table_retour['nom_sci.'.$compo_nom] = $resultat[$compo_nom]; |
} |
} |
} |
public function ajouterSignificationCode($champ, $valeur) { |
if($this->termeOntologieEstEnCache($champ, $valeur)) { |
$nom_code = $this->obtenirTermeOntologieParCache($champ, $valeur); |
} else { |
$code = $this->transformerChampEnCode($champ); |
if (preg_match('/^([^_-]+)(?:_|-)([^_-]+)$/', $code, $match)) { |
$code = $match[1].ucfirst($match[2]); |
} |
$res = $this->getBdd()->recuperer(sprintf('SELECT * FROM %s WHERE id IN (SELECT id FROM %s WHERE code = "%s" AND classe_id = (SELECT id FROM %s WHERE code = "%s")) LIMIT 0, 100 -- %s:%s', 'bdnt_ontologies_v4_30', 'bdnt_ontologies_v4_30', $valeur, 'bdnt_ontologies_v4_30', $code, __FILE__, __LINE__), Bdd::MODE_OBJET); |
$nom_code = $valeur; |
if (is_object($res)) { |
$nom_code = $res->nom; |
} |
$this->mettreEnCacheOntologie($champ, $valeur, $nom_code); |
} |
return $nom_code; |
} |
public function recupererNomSci($id) { |
$nom = array(); |
if ($id != 0) { |
if ($this->compo_nom == null) { |
$req = 'SELECT nom_sci, num_nom_retenu, nom_sci_html FROM '.$this->table.' WHERE num_nom = '.$id; |
} else { //on ajoute à la requete sql, les champs de ns.structure |
//print_r($this->compo_nom); |
$req = 'SELECT nom_sci, num_nom_retenu, nom_sci_html, '.implode(', ', $this->compo_nom) |
.' FROM '.$this->table |
.' WHERE num_nom = '.$id; |
} |
if ($this->parametres['ns.format'] == 'htm') { |
$req = str_replace('nom_sci', 'nom_sci_html as nom_sci', $req); |
} |
$res = $this->getBdd()->recuperer($req . ' -- ' . __FILE__ . ':' . __LINE__); |
if ($res) { |
$nom['nom_sci'] = $res['nom_sci']; |
$nom['nom_sci_html'] = $res['nom_sci_html']; |
$nom['nom_sci_complet'] = $res['nom_sci'].' '.$this->ajouterCompositionNom($res); |
$nom['nom_sci_complet_html'] = $res['nom_sci_html'].' '.$this->ajouterCompositionNom($res, 'htm'); |
$nom['service'] = ($res['num_nom_retenu'] == $id && $this->service == 'taxons') ? 'taxons' : 'noms'; |
} |
} |
return $nom; |
} |
/** Permet de retourner une chaine de caractère composée des parametres du nom (ns.structure : annnée, auteur, |
* bibilio et addendum). A ajouter au nom scientifique */ |
public function ajouterCompositionNom($tab_res, $format = '') { |
$format = ($format == '') ? $this->parametres['ns.format'] : $format; |
$nom = ''; |
if (isset($this->compo_nom)) { |
if ($format == 'htm') { |
$format = array( |
'au' => '<span class="auteur">%s</span>', |
'an' => '[<span class="annee">%s</span>]', |
'an_bib' => '[<span class="annee">%s</span>, <span class="biblio">%s</span>]', |
'bib' => '[<span class="biblio">%s</span>]', |
'ad' => '[<span class="adendum">%s</span>]'); |
} else { |
$format = array( |
'au' => '%s', |
'an' => '[%s]', |
'an_bib' => '[%s, %s]', |
'bib' => '[%s]', |
'ad' => '[%s]', |
'gen' => '%s', |
'sp' => '%s', |
'ssp' => '%s', |
'fam' => '%s', |
'au_ss' => '%s', |
'bib_ss' => '%s'); |
} |
$compo_nom = array(); |
foreach ($this->compo_nom as $key => $champ) { |
if (isset($tab_res[$champ]) && !empty($tab_res[$champ])) { |
$compo_nom[$key] = $tab_res[$champ]; |
} |
} |
$nom_complet = $this->formerNomComplet($compo_nom, $format); |
$nom = implode(' ', $nom_complet); |
} |
return rtrim($nom, ' '); |
} |
public function formerNomComplet($compo_nom, $format) { |
$nom_complet = array(); |
extract($compo_nom); |
if (isset($au)) $nom_complet[] = sprintf($format['au'], $au); |
if (isset($an)) { |
if (isset($bib)) { |
$nom_complet[] = sprintf($format['an_bib'], $an, $bib); |
} else { |
$nom_complet[] = sprintf($format['an'], $an); |
} |
} elseif (isset($bib)) { |
$nom_complet[] = sprintf($format['bib'], $bib); |
} |
if (isset($ad)) $nom_complet[] = sprintf($format['ad'], $ad); |
if (isset($gen)) $nom_complet[] = sprintf($format['gen'], $gen); |
if (isset($ssp)) $nom_complet[] = sprintf($format['ssp'], $ssp); |
if (isset($sp)) $nom_complet[] = sprintf($format['sp'], $sp); |
if (isset($fam)) $nom_complet[] = sprintf($format['fam'], $fam); |
if (isset($au_ss)) $nom_complet[] = sprintf($format['au_ss'], $au_ss); |
if (isset($bib_ss)) { |
$bibl = $this->tronquerBiblio($bib_ss); |
//simule un 'select distinct' sur les biblio tronquées |
if (!isset($this->bib_traitees[$bibl])) { |
$nom_complet[] = sprintf($format['bib_ss'],$bibl ); |
$this->bib_traitees[$bibl] = 1; |
} |
} |
return $nom_complet; |
} |
public function tronquerBiblio($valeur){ |
$bib = ''; |
if(strpos($valeur,',') !== false) { |
$bib = explode(',',$valeur); |
} |
if(strpos($bib[0],';') !== false) { |
$bib[0] = strstr($bib[0],';'); |
$bib[0] = str_replace('; ','',$bib[0]); |
} |
return $bib[0]; |
} |
public function correspondAUnCode($key) { |
return (strrpos($key, '.code') !== false) || (in_array($key.'.code', $this->correspondance_champs)); |
} |
public function correspondAUnId($key) { |
return (strrpos($key, '.id') !== false) || (in_array($key.'.id', $this->correspondance_champs)); |
} |
public function estUnPoint($key) { |
if (strrpos($key, 'hybride.parent') !== false) { |
$key = str_replace('hybride.parent', 'hybride_parent', $key); |
} |
return (strrpos($key, '.') !== false); |
} |
public function recupererMasquePrincipal() { |
$masque = null; |
$tab_masque = array( |
'masque' => 'nom_sci', |
'masque_sg' => 'nom_supra_generique', |
'masque_gen' => 'genre', |
'masque_sp' => 'epithete_sp', |
'masque_ssp' => 'epithete_infra_sp', |
'masque_au' => 'auteur', |
'masque_an' => 'annee', |
'masque_bib' => 'biblio_origine', |
'masque_ad' => 'addendum', |
'masque_rg' => 'rang'); |
$liste_masque = array(); |
if (isset($this->masque['num_nom'])) { |
$liste_masque[] = $this->masque['num_nom']; |
} |
foreach ($tab_masque as $key => $filtre) { |
if (isset($this->masque[$filtre])) { |
if (!isset($masque) && !in_array($filtre, array('rang', 'annee'))) { |
$masque = array($key, $filtre); |
} |
$liste_masque[] = $this->masque[$filtre]; |
} |
} |
$this->masque = $liste_masque; |
return $masque; |
} |
private function mettreEnCacheOntologie($categorie, $valeur, $correspondance) { |
if(!isset($this->ontologie[$categorie])) { |
$this->ontologie[$categorie] = array(); |
} |
if(!isset($this->ontologie[$categorie][$valeur])) { |
$this->ontologie[$categorie][$valeur] = array(); |
} |
$this->ontologie[$categorie][$valeur] = $correspondance; |
} |
private function termeOntologieEstEnCache($categorie, $valeur) { |
return array_key_exists($categorie, $this->ontologie) && array_key_exists($valeur, $this->ontologie[$categorie]); |
} |
private function obtenirTermeOntologieParCache($categorie, $valeur) { |
return $this->ontologie[$categorie][$valeur]; |
} |
} |
?> |
/tags/v0.1-20130830/services/modules/0.1/bdtfx/Noms.php |
---|
New file |
0,0 → 1,669 |
<?php |
// declare(encoding='UTF-8'); |
/** |
* Classe permettant de fournir des informations sur les noms scientifiques. |
* Si l'url finit par /noms on retourne une liste de noms latin et leurs identifiants (seulement les 100 premeiers noms par défaut). |
* L'url peut contenir des paramètres optionnels passés après le ? : /noms?param1=val1¶m2=val2&... |
* |
* Les paramètres de requête disponibles sont : masque, masque.gen (nom de genre), masque.sp (épithète d'espèce), masque.ssp (épithète infra-spécifique), |
* masque.au (auteur du nom), masque.an (année de publication du nom), masque.bib (réf biblio de la publi d'origine du nom), masque.ad (nomen addendum), |
* masque.nn (identifiant du nom), recherche, rang, distinct, retour.format, nl.format, nl.structure, navigation.depart et navigation.limite. |
* Les différentes requetes : |
* - noms | noms/relations/#projet/#id_projet | noms/#id | noms/#id/#champ+#champ |
* - noms/#id/relations | noms/#id/relations/synonymie | noms/#id/relations/homonymie | noms/#id/relations/flores |
* - noms/stats/rangs | noms/stats/annees | noms/stats/initiales |
* |
* @package bdtfx |
* @author Jennifer Dhé <jennifer.dhe@tela-botanica.org> |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt> |
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt> |
* @version $Id$ |
* @copyright 1999-2011 Tela Botanica (accueil@tela-botanica.org) |
* @see http://www.tela-botanica.org/wikini/eflore/wakka.php?wiki=EfloreApi01Noms |
*/ |
class Noms extends CommunNomsTaxons { |
protected $format_reponse = 'noms'; // Permet de stocker la requete formulée |
protected $service = 'noms'; |
protected $serviceNom = 'noms'; |
protected $requete_champ = 'num_nom, nom_sci, num_nom_retenu'; |
protected $requete_condition = null; |
protected $requete_group_by = ''; |
/** Permet de stocker les limite de la requete SQL (par défaut seul les 100 premiers résultats seront retournés).*/ |
protected $limite_requete = array('depart' => 0, 'limite' => 100); |
protected $distinct = null; // Valeur du paramètre de requete distinct (=0|1) |
public function consulter($ressources, $parametres) { |
return parent::consulter($ressources, $parametres); |
} |
//+----------------FONCTION D'ANALYSE DES PARAMETRES---------------------------------------------------------+ |
public function traiterParametresSpecifiques() { |
foreach ($this->parametres as $param => $val) { |
switch ($param) { |
case 'masque' : |
$this->ajouterFiltreMasque('nom_sci', $val); |
break; |
case 'masque.sg' : |
$this->ajouterFiltreMasque('nom_supra_generique', $val); |
break; |
case 'masque.gen' : |
$this->ajouterFiltreMasque('genre', $val); |
break; |
case 'masque.sp' : |
$this->ajouterFiltreMasque('epithete_sp', $val); |
break; |
case 'masque.ssp' : |
$this->ajouterFiltreMasque('epithete_infra_sp',$val); |
break; |
case 'masque.au' : |
$this->ajouterFiltreMasque('auteur', $val); |
break; |
case 'masque.an' : |
$this->ajouterFiltreMasque('annee', $val); |
break; |
case 'masque.bib' : |
$this->ajouterFiltreMasque('biblio_origine',$val); |
break; |
case 'masque.ad' : |
$this->ajouterFiltreMasque('nom_addendum', $val); |
break; |
case 'masque.nn' : |
$this->requete_condition []= 'num_nom IN ('.$val.')'; |
$this->masque['num_nom'] = "num_nom=$val"; |
break; |
case 'masque.nt' : |
$this->requete_condition []= 'num_taxonomique IN ('.$val.')'; |
$this->masque['num_tax'] = "num_taxonomique=$val"; |
break; |
case 'masque.rg' : |
$this->ajouterFiltreMasque('rang', $val); |
break; |
case 'retour.champs' : |
$this->verifierParamChamps($param, $val); |
break; |
case 'distinct' : |
$this->ajouterNomDistinct($val); |
break; |
case 'masque.fam' : |
$this->ajouterFiltreMasque('famille', $val); |
break; |
case 'masque.prga' : |
$this->ajouterFiltreMasque('presence_ga', $val); |
break; |
case 'masque.prco' : |
$this->ajouterFiltreMasque('presence_co', $val); |
break; |
case 'masque.sto' : |
$this->ajouterFiltreMasque('statut_origine', $val); |
break; |
case 'masque.sti' : |
$this->ajouterFiltreMasque('statut_introduction', $val); |
break; |
case 'masque.stc' : |
$this->ajouterFiltreMasque('statut_culture', $val); |
break; |
case 'masque.and' : |
$this->requete_condition []= " annee >= ".$this->getBdd()->proteger($val); |
break; |
case 'masque.anf' : |
$this->requete_condition []= " annee <= ".$this->getBdd()->proteger($val); |
break; |
} |
} |
} |
public function verifierParamChamps($param, $val) { |
$this->recupererTableSignification('correspondance_champs,champs_api,champs_comp'); |
$champs_demandes = explode(',', $val); |
$champs_verifies = array(); |
$champs_api = array_flip($this->champs_api); |
$champs_supp = array('nom_retenu_complet'=>'num_nom_retenu', 'basionyme_complet'=>'basionyme'); |
$champs_api = array_merge($champs_api, $champs_supp); |
foreach ($champs_demandes as $champ) { |
if (array_key_exists($champ, $champs_api)) { |
$champs_verifies[] = $champs_api[$champ]; |
} |
} |
if (count($champs_verifies) > 0) { |
$this->requete_champ .= ', '.implode(',', $champs_verifies); |
} |
} |
/** Permet de rajouter à la requete sql le parametre distinct. N'est utilisé qu'avec le format oss */ |
public function ajouterNomDistinct($distinct) { |
if (isset($distinct)) { |
if ($distinct == 1 && $this->parametres['retour.format'] == 'oss') { |
$this->distinct = ' distinct '; |
} elseif ($distinct == 1 && $this->parametres['retour.format'] != 'oss') { |
$e = 'Erreur dans votre requête </br> L\'utilisation du paramètre distinct ne se fait que sous |
le format oss'; |
$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e); |
} |
} |
} |
//-----------------FONCTION D'ANALYSE DES RESSOURCES-------------------------------------------------------------------- |
public function traiterRessourcesIdentifiant() { |
//on initialise la condition de la requete sql et le format de réponse |
$this->requete_condition = array(); //on vide la table dans le cas de plusieurs version |
$this->requete_condition[] = 'num_nom = '.$this->getBdd()->proteger($this->ressources[0]); |
$this->format_reponse = $this->service.'/id'; |
if (isset($this->ressources[1]) && !empty($this->ressources[1])) { |
if ($this->ressources[1] == 'relations') { |
$this->traiterRessourceIdRelations(); |
} else { |
$e = 'Erreur dans votre requête </br> Ressources disponibles : <br/> |
<li> noms/#id/relations </li> <li> noms/#id/#champ+#champ </li> |
<li> noms/#id/relations/synonymie </li> <li> noms/#id/relations/flores </li> |
<li> noms/#id/relations/homonymie </li>'; |
$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e); |
} |
} else { // requete de type noms/#id : rajout du nom_sci pour récupérer le format html par la fct mettreAuFormat() |
$this->requete_champ = ' *, nom_sci '; |
} |
} |
public function traiterRessourceRelations() { |
$this->format_reponse .= '/relations'; |
$projet = $this->ressources[1]; |
$num_nom = $this->ressources[2]; |
if (strrpos($num_nom, 'nn.coste') !== false) { |
list($p, $nn) = explode('=', $num_nom); |
$num_nom = $nn; |
} |
$champ = "flore_$projet"."_num"; |
if (isset($this->ressources[3])) { |
$type = $this->ressources[3]; |
if (!in_array($type, array('homonymie', 'synonymie', 'flores'))) { |
$e = "Les types disponibles pour les noms sont homonymie, synonymie et flores"; |
$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e); |
} |
} |
$this->requete_champ = ' num_nom '; |
$this->requete_condition = array(); |
$this->requete_condition[] = "$champ = ".$this->getBdd()->proteger($num_nom); |
} |
public function traiterRessourceIdRelations() { |
$this->format_reponse .= '/relations'; |
if (isset($this->ressources[2]) && !empty($this->ressources[2])) { |
// requete de type noms/#id/relations/#relation |
switch ($this->ressources[2]) { |
case 'synonymie' : |
$this->traiterRessourceIdSynonymie(); |
break; |
case 'flores' : |
$this->traiterRessourceIdFlores(); |
break; |
case 'homonymie' : |
$this->traiterRessourceIdHomonymie(); |
break; |
default : |
$e = 'Erreur dans votre requête </br> Ressources disponibles : <br/> |
<li> noms/#id/relations </li> <li> noms/#id/relations/synonymie </li> |
<li> noms/#id/relations/flores </li> <li> noms/#id/relations/homonymie </li>'; |
$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e); |
break; |
} |
} |
} |
public function traiterRessourceIdSynonymie() { |
// SELECT num_nom, nom_sci, num_nom_retenu, basionyme FROM bdtfx_v2_00 WHERE num_nom = X LIMIT 0,100; |
$this->format_reponse .= '/synonymie'; |
if (strrpos($this->requete_champ, ', basionyme') === false) { |
$this->requete_champ .= ', basionyme '; |
} |
$this->requete_condition[0] = 'num_nom_retenu = '. |
'(SELECT num_nom_retenu FROM '.$this->table.' WHERE '.$this->requete_condition[0].')'; |
} |
public function traiterRessourceIdHomonymie() { |
// SELECT num_nom, nom_sci, num_nom_retenu FROM bdtfx_v2_00 WHERE nom_sci = (SELECT nom_sci FROM bdtfx_v2_00 WHERE num_nom = X); |
$this->format_reponse .= '/homonymie'; |
$this->requete_condition[0] = 'nom_sci = (SELECT nom_sci FROM '.$this->table |
.' WHERE '.$this->requete_condition[0].')'; |
} |
public function traiterRessourceIdFlores() { |
$champ_flores = ''; |
foreach ($this->champs_table as $champ) { |
if (preg_match('/^flore_.*$/', $champ)) { |
$champ_flores .= ', '.$champ; |
} |
} |
$this->format_reponse .= '/flores'; |
$this->requete_champ = 'num_nom'.$champ_flores; |
} |
public function traiterRessourceStatsRangs() { |
// SELECT count(*) as nombre, rang FROM bdtfx_v2_00 [WHERE rang = 290] GROUP BY rang ORDER BY rang; |
$this->format_reponse .= '/rangs'; |
$this->requete_champ = 'count(*) as nombre, rang '; |
$this->requete_group_by = ' GROUP BY rang ORDER BY rang '; |
} |
public function traiterRessourceStatsAnnees() { |
// SELECT count(*) as nombre, annee FROM bdtfx_v2_00 GROUP BY annee ORDER BY annee; |
$this->format_reponse .= '/annees'; |
$this->requete_champ = 'count(*) as nombre, annee '; |
$this->requete_condition = null; |
$this->requete_group_by = ' GROUP BY annee ORDER BY annee '; |
} |
public function traiterRessourceStatsInitiales() { |
// SELECT count(left( nom_sci, 2 )) as nb, rang, left(nom_sci, 2) as lettre GROUP BY rang, left(nom_sci, 2); |
$this->format_reponse .= '/initiales'; |
$this->requete_champ = 'count(left( nom_sci, 2 )) as nb, rang, left(nom_sci, 2) as lettre '; |
$this->requete_group_by = ' GROUP BY rang, left(nom_sci, 2)'; |
} |
//-----------------------------FONCTIONS DASSEMBLAGE DE LA REQUETE----------------------------------------------------- |
public function assemblerLaRequete() { |
if ( strrpos($this->format_reponse, 'noms/stats/') === false ) { |
$this->mettreAuFormat(); //Ds CommunNomsTaxons.php |
} |
$requete = 'SELECT '.$this->retournerChamps().' '. |
"FROM {$this->table} ". |
$this->retournerRequeteCondition().' '. |
$this->requete_group_by.' '. |
$this->retournerOrderBy().' '. |
$this->formerRequeteLimite() . |
' -- ' . __FILE__ . ':' . __LINE__ ; |
return $requete; |
} |
public function retournerChamps() { |
$sql = ''; |
if ($this->distinct) { |
$sql .= $this->distinct.' '; |
} |
if ($this->requete_champ) { |
$sql .= $this->requete_champ.' '; |
} |
// Champs "virtuels" pour tier sur l'ensemble des résultats |
if (isset($this->parametres['retour.tri'])) { |
list($champ, $ordre) = $this->decouperParametreRetourTri(); |
if ($champ == 'retenu') { |
$sql .= ", IF(num_nom = num_nom_retenu, '0', '1') AS nom_retenu_tri "; |
} |
} |
return $sql; |
} |
public function decouperParametreRetourTri() { |
$tri = array('', ''); |
if (isset($this->parametres['retour.tri'])) { |
if (preg_match('/^(retenu)(?:,(ASC|DESC)|)$/', $this->parametres['retour.tri'], $match)) |
$tri[0] = $match[1]; |
$tri[1] = isset($match[2]) ? $match[2] : ''; |
} |
return $tri; |
} |
public function retournerRequeteCondition() { |
$condition = ''; |
if ($this->requete_condition) { |
$condition = ' WHERE '.implode(' AND ', $this->requete_condition); |
} |
return $condition; |
} |
public function retournerOrderBy() { |
$orderBy = array(); |
// Tri sur l'ensemble des résultats |
if (isset($this->parametres['retour.tri'])) { |
list($champ, $ordre) = $this->decouperParametreRetourTri(); |
if ($champ == 'retenu') { |
$orderBy[] = "nom_retenu_tri $ordre"; |
} |
} |
// Tri par défaut |
if ($this->format_reponse == 'noms') { |
$orderBy[] = 'nom_sci ASC'; |
} |
$sql = ''; |
if (count($orderBy) > 0) { |
$sql = 'ORDER BY '.implode(', ', $orderBy).' '; |
} |
return $sql; |
} |
public function formerRequeteLimite() { |
if ($this->format_reponse != 'noms' && $this->format_reponse != 'noms/id/relations/synonymie' |
&& $this->format_reponse != 'noms/id/relations/homonymie') { |
$this->requete_limite = ''; |
} elseif (($depart = $this->limite_requete['depart']) > ($this->total_resultat = $this->recupererTotalResultat())) { |
$this->limite_requete['depart'] = |
(($this->total_resultat - $this->limite_requete['limite']) < 0) ? 0 : ($this->total_resultat - $this->limite_requete['limite']); |
$this->requete_limite = ' LIMIT '.$this->limite_requete['depart'].', '.$this->limite_requete['limite']; |
} else { |
$this->requete_limite = ' LIMIT '.$this->limite_requete['depart'].', '.$this->limite_requete['limite']; |
} |
return $this->requete_limite; |
} |
/** Recupere le nombre total de résultat d'une requete lancée. */ |
public function recupererTotalResultat() { |
$total = null; |
$requete = 'SELECT count(*) as nombre FROM '.$this->table.$this->retournerRequeteCondition().$this->requete_group_by; |
$res = $this->getBdd()->recuperer($requete); |
if ($res) { |
$total = $res['nombre']; |
} else { |
$e = 'Fct recupererTotalResultat() : <br/>Données introuvables dans la base'; |
$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $e); |
} |
return $total; |
} |
//-------------------FONCTIONS POUR LE FORMATAGE EN JSON---------------------------------------------------------------- |
public function retournerResultatFormate($resultat) { |
switch ($this->format_reponse) { |
case 'noms/relations' : |
$reponse = $this->formaterRelations($resultat[0]); |
break; |
case 'noms/id' : //ds CommunNomsTaxons |
$reponse = $this->formaterId($resultat[0]); |
break; |
case 'noms/id/relations' : |
$reponse = $this->formaterIdRelations($resultat[0]); |
break; |
case 'noms/id/relations/synonymie' : |
$reponse = $this->formaterIdSynonymie($resultat); |
break; |
case 'noms/id/relations/homonymie' : |
$reponse = $this->formaterIdHomonymie($resultat); |
break; |
case 'noms/id/relations/flores' : //ds CommunsNomsTaxons |
$reponse = $this->formaterIdFlores($resultat[0]); |
break; |
case 'noms/stats/annees' : //ds CommunNomsTaxons |
$reponse = $this->formaterStatsAnnee($resultat); |
break; |
case 'noms/stats/rangs' : //ds CommunNomsTaxons |
$reponse = $this->formaterStatsRang($resultat); |
break; |
case 'noms/stats/initiales' : //ds CommunNomsTaxons |
$reponse = $this->formaterStatsInitiales($resultat); |
break; |
case 'noms' : |
$reponse = $this->formaterNoms($resultat); |
break; |
} |
return $reponse; |
} |
//+---------------------concerne les resultats pour des requetes de type noms/id-----------------------------+ |
public function formaterRelations($resultat) { |
$num_nom = $resultat['num_nom']; |
if (isset($this->ressources[3])) { |
$url = Config::get('url_service').$this->service."/$num_nom/relations"; |
} else { |
$type = $this->ressources[3]; |
$url = Config::get('url_service')."/$this->service/$num_nom/relations/$type"; |
} |
$res = $this->consulterHref($url); |
return $res; |
} |
public function formaterIdRelations($resultat) { |
$this->recupererTableSignification('correspondance_champs,champs_api,champs_comp'); |
$this->resultat_req = $resultat; |
$retour_id_rel = array ('entete' => array()); //on initialise pr que l'entete apparaisse en premier lors de l'affichage |
//on recupère le resultat de chaque relation (appel du WS correspondant) |
$flores = $this->ajouterRelations('flores'); |
if (isset($flores)) $retour_id_rel['resultat']['flores'] = $flores; |
$homonymes = $this->ajouterRelations('homonymie'); |
if (isset($homonymes)) $retour_id_rel['resultat']['homonymes'] = $homonymes; |
$synonymes = $this->ajouterRelations('synonymie'); |
if (isset($synonymes)) $retour_id_rel['resultat']['synonymes'] = $synonymes; |
//on renvoit null si il n'existe aucune relations (on efface l'entete en premier lieu) |
if (!isset($retour_id_rel['resultat'])) { |
$retour_id_rel = null; |
} else { //on rajoute l'entete si des relations existent |
$this->afficherDonnees('num_nom', $this->ressources[0]); |
$retour_id_rel['entete'] = $this->table_retour; |
$this->table_retour = array(); |
} |
return $retour_id_rel; |
} |
/** |
* Recupere les relations (type de la relation passée en paramètres :[type_relation] = synonymie, homonymie ou |
* flores) par l'appel du web service [version]/noms/#id/relations/[type_relation] |
*/ |
public function ajouterRelations($relation) { |
$version = str_replace(Config::get('bdd_table').'_', '', $this->table); |
$res = null; |
$parametres_url = ''; |
if ($this->parametres != array()) $parametres_url = '?'.http_build_query($this->parametres, '', '&'); |
$url = Config::get('url_service').'/'.$this->service.'/' |
.$this->ressources[0].'/relations/' |
.$relation.$parametres_url; Debug::printr($url); |
$relation = $this->consulterHref($url); |
$res = $relation->resultat; |
return $res; |
} |
public function formaterIdSynonymie($resultat) { |
$this->recupererTableSignification('correspondance_champs,champs_api,champs_comp'); |
$retour_id_syn = array(); |
if ($resultat[0]['num_nom_retenu'] == '') { |
$retour_id_syn[] = 'nom_retenu N.D.'; |
} elseif (count($resultat) != 1) { |
//on remplit d'abord l'entete du resultat |
$this->table_retour['id'] = $this->ressources[0]; |
$this->afficherEnteteResultat('/'.$this->service.'/'.$this->ressources[0].'/relations/synonymie'); |
$retour_id_syn['entete'] = $this->table_retour; |
$this->table_retour = array(); |
foreach ($resultat as $tab) { |
//pour chaque basionyme, on recupère le résultat : num_nom, nom_sci, basionyme et num_nom_retenu : |
$this->resultat_req = $tab; |
$num = $tab['num_nom']; |
$this->afficherNomHrefRetenu($tab, $num); |
$this->afficherDonnees('basionyme', $tab['basionyme']); |
$retour_id_syn['resultat'][$num] = $this->table_retour; |
$this->table_retour = array(); |
} |
if (!isset($retour_id_syn['resultat']) && !in_array('nom_retenu N.D.', $retour_id_syn)) { |
$retour_id_syn = null; //on initialise le resultat à null |
} |
} |
return $retour_id_syn; |
} |
public function formaterIdHomonymie($resultat) { |
$this->recupererTableSignification('correspondance_champs,champs_api,champs_comp'); |
if (count($resultat) != 1) { |
$this->table_retour['id'] = $this->ressources[0]; |
$this->afficherEnteteResultat($resultat, '/'.$this->service.'/'.$this->ressources[0].'/relations/homonymie'); |
$retour_id_hom['entete'] = $this->table_retour; |
$this->table_retour = array(); |
foreach ($resultat as $homonyme) { |
$this->resultat_req = $homonyme; |
$id = $homonyme['num_nom']; |
$this->afficherDonnees('num_nom', $id); |
if ($homonyme['num_nom_retenu'] != '') { |
$retenu = ($id == $homonyme['num_nom_retenu']) ? 'true' : 'false'; |
} else { |
$retenu = 'absent'; |
} |
$this->table_retour['retenu'] = $retenu; |
$retour_id_hom['resultat'][$id] = $this->table_retour; |
unset($retour_id_hom['resultat'][$id]['id']); |
$this->table_retour = array(); |
} |
} else { |
$retour_id_hom = null; |
} |
return $retour_id_hom; |
} |
public function obtenirSynonymesParNumNomAvecInfosFlore($num_nom, $version='1_02') { |
$champs_flore = 'flore_bonnier_num, flore_bonnier_rem,'. |
'flore_cnrs_num, flore_cnrs_rem '. |
'flore_fe_num, flore_fe_rem '. |
'flore_coste_num, flore_coste_rem '. |
'flore_fh_num, flore_fh_rem '. |
'flore_fournier_num, flore_fournier_rem'; |
$requete = 'SELECT num_nom, nom_sci, '.$champs_flore.' '. |
'FROM '.$this->table.' '. |
'WHERE num_nom_retenu = '. |
'('. |
'SELECT num_nom_retenu FROM '.$this->table.' WHERE num_nom = "'.$num_nom.'"'. |
')'; |
return $this->getBdd()->recupererTous($requete . ' -- ' . __FILE__ . ':' . __LINE__ ); |
} |
public function formaterIdFlores($resultat) { |
$this->recupererTableSignification('correspondance_champs,champs_api,champs_comp,noms_projets'); |
$this->resultat_req = $resultat; |
$id = array_shift($resultat); |
$reponse['entete']['id'] = $id; |
$synonymes_flores = $this->obtenirSynonymesParNumNomAvecInfosFlore($this->ressources[0]); |
if(is_array($synonymes_flores)) { |
foreach ($synonymes_flores as $synonyme) { |
$nom_sci = $synonyme['nom_sci']; |
$num_nom = $synonyme['num_nom']; |
unset($synonyme['nom_sci']); |
unset($synonyme['num_nom']); |
foreach ($synonyme as $flores => $valeur) { |
if ($valeur != '' && $valeur != '0') { |
$this->afficherInfosFlore($synonyme, $flores, $valeur, $nom_sci, $num_nom); |
} |
} |
} |
} |
if ($this->table_retour != array()) { |
$reponse['resultat'] = $this->table_retour; |
$this->table_retour = array(); |
} else { |
$reponse = null; |
} |
return $reponse; |
} |
public function getNomCompletFlore($flore) { |
return Config::get($flore.'_texte'); |
} |
public function afficherInfosFlore(&$resultat, $flores, $valeur, $nom_sci, $num_nom) { |
$flore = substr($flores,0,strrpos($flores, '_')); |
$projet = $this->noms_projets[$flore]; |
//TODO voir si l'on peut factoriser les affectations à la table retour |
// et simplifier ce gros pavé |
if (strrpos($flores, 'num') !== false) { |
if (preg_match('/^([0-9]+)(?:[.]syn[^a-z]*|(.*))?$/', $valeur, $match)) { |
$this->table_retour[$num_nom][$flore]['id'] = $match[1]; |
if ($projet == 'coste') { |
$this->table_retour[$num_nom][$flore]['href'] = $this->ajouterHrefAutreProjet('noms', 'nn_coste:', $match[1], $projet); |
} |
if (isset($match[2]) && $match[2] != '') $this->table_retour[$num_nom][$flore]['cle'] = $match[2]; |
$this->table_retour[$num_nom][$flore]['nom_flore'] = $this->getNomCompletFlore($flore); |
$this->table_retour[$num_nom][$flore]['nom_sci'] = $nom_sci; |
} |
if (isset($resultat[$flore.'_rem']) && !empty($resultat[$flore.'_rem'])) { |
$this->table_retour[$num_nom][$flore]['remarque'] = $resultat[$flore.'_rem']; |
$this->table_retour[$num_nom][$flore]['nom_flore'] = $this->getNomCompletFlore($flore); |
$this->table_retour[$num_nom][$flore]['nom_sci'] = $nom_sci; |
unset($resultat[$flore.'_rem']); |
} |
} elseif (strrpos($flores,'belge') !== false) { |
if (preg_match('/^([0-9]+) (R|S)?$/', $valeur, $match)) { |
if (isset($match[2])) $type = ($match[2] == 'R') ? 'taxons' : 'synonyme'; |
$this->table_retour[$num_nom][$flore]['page'] = $match[1]; |
$this->table_retour[$num_nom][$flore]['type'] = $type; |
$this->table_retour[$num_nom][$flore]['nom_flore'] = $this->getNomCompletFlore($flore); |
$this->table_retour[$num_nom][$flore]['nom_sci'] = $nom_sci; |
} |
} |
} |
//+---------------------concerne les resultats pour des requetes de type /noms avec ou sans paramètres-------+ |
public function formaterNoms($resultat) { |
if ($this->parametres['retour.format'] == 'oss') { |
$reponse = $this->formaterEnOss($resultat); //Ds CommunNomsTaxons.php |
} else { |
$reponse = $this->formaterEnJsonMax($resultat); |
} |
return $reponse; |
} |
public function formaterEnJsonMax($resultat) { |
$this->recupererTableSignification('correspondance_champs,champs_api,champs_comp'); |
// TODO : améliorer le trie des résultats |
// ATTENTION : ce comportement est étrange |
$masque = $this->recupererMasquePrincipal(); |
if (isset($masque) && !isset($this->parametres['retour.tri'])) { |
$resultat = $this->trierRechercheFloue($this->parametres[$masque[0]], $resultat, $masque[1]); |
} |
$table_retour_json['entete'] = $this->remplirJsonEntete(); |
$table_retour_json['resultat'] = $this->remplirJsonResultat($resultat); |
return $table_retour_json; |
} |
public function remplirJsonResultat($resultat) { |
$champs = null; |
if (array_key_exists('retour.champs', $this->parametres)) { |
$champs = explode(',', $this->parametres['retour.champs']); |
} |
$noms = array(); |
foreach ($resultat as $tab) { |
$this->table_retour = array(); |
$num = $tab['num_nom']; |
$this->afficherNomHrefRetenu($tab, $num); // ajoute le nom_sci, href et si le nom est retenu dans $this->table_retour |
$retour = $this->table_retour; |
$this->table_retour = array(); |
if ($champs != null) { |
$reponse_id = $this->formaterId($tab); |
$this->table_retour = array(); |
$this->ajouterChampsPersonnalises($champs, $reponse_id); |
$retour = array_merge($retour, $this->table_retour); |
} |
$noms[$num] = $retour; |
} |
return $noms; |
} |
public function remplirJsonEntete() { |
$entete = array(); |
if (isset($this->masque)) { |
$this->table_retour['masque'] = implode('&', $this->masque); |
} |
parent::afficherEnteteResultat('/'.$this->service); |
return $this->table_retour; |
} |
} |
?> |
/tags/v0.1-20130830/services/modules/0.1/bdtfx/Taxons.php |
---|
New file |
0,0 → 1,523 |
<?php |
// declare(encoding='UTF-8');// ou ISO-8859-15 |
/** |
* Description : |
* Classe Taxons.php permettant de fournir des informations sur les noms scientifiques retenu. |
* Si l'url finit par /taxons on retourne une liste de noms latin et leurs identifiants (seulement les 100 premeiers noms par défaut). |
* L'url peut contenir des paramètres optionnels passés après le ? : /taxons?param1=val1¶m2=val2&... |
* |
* Les paramètres de requête disponibles sont : masque, recherche, rang, distinct, retour.format, nl.format, |
* nl.structure, navigation.depart et navigation.limite. |
* |
* Encodage en entrée : utf8 |
* Encodage en sortie : utf8 |
* @package framework-v3 |
* @author Jennifer Dhé <jennifer.dhe@tela-botanica.org> |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt> |
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt> |
* @version 1.0 |
* @copyright 1999-${year} Tela Botanica (accueil@tela-botanica.org) |
*/ |
class Taxons extends CommunNomsTaxons { |
/** Permet de stocker la requete formulée taxons | taxons/#id | taxons/#id/#champ+#champ ...*/ |
protected $format_reponse = 'taxons'; |
protected $service = 'taxons'; |
protected $requete_champ = 'num_nom, nom_sci, num_nom_retenu, num_taxonomique '; |
protected $requete_condition = null; |
protected $requete_group_by = ' '; |
/** Permet de stocker les limite de la requete SQL (par défaut seul les 100 premiers résultats seront retournés).*/ |
protected $limite_requete = array('depart' => 0, 'limite' => 100); |
protected $num_nom_taxon; //Stocke le num_nom du nom retenu du num_nom recherché |
protected $presence_num_tax = true; |
public function consulter($ressources, $parametres) { |
return parent::consulter($ressources, $parametres); |
} |
public function traiterParametresSpecifiques() { |
$this->requete_condition[] = 'num_nom = num_nom_retenu'; |
foreach ($this->parametres as $param => $val) { |
switch ($param) { |
case 'masque' : |
$this->ajouterFiltreMasque('nom_sci', $val); |
break; |
case 'masque.nt' : |
$this->requete_condition[] = "num_taxonomique IN ($val)"; |
$this->masque[] = "num_tax=$val"; |
break; |
case 'masque.rg': |
$this->requete_condition[] = 'rang = '.$this->getBdd()->proteger($val); |
$this->masque[] = "rang=$val"; |
break; |
} |
} |
} |
//------------------------------------------Fonction ressources--------------------------------------------------------------------- |
public function gererNumTax() { |
if (!in_array('num_taxonomique', $this->champs_table)) { |
$this->presence_num_tax = false; |
$this->requete_champ = str_replace(', num_taxonomique ', '', $this->requete_champ); |
} else { |
$this->presence_num_tax = true; |
} |
} |
public function traiterRessourcesIdentifiant() { |
$this->format_reponse = 'taxons/id'; |
$this->traiterRessourceNtId(); |
$this->num_nom_taxon = $this->recupererNumNomTaxon(); //on recupere le taxon correspondant au num_nom recherché |
if ($this->entete_http == '') { |
$this->requete_condition[0] = 'num_nom = '.$this->getBdd()->proteger($this->num_nom_taxon); |
if (isset($this->ressources[1]) && !empty($this->ressources[1])) { |
//---------------- requete de type taxons/#id/#champ+#champ-------------------------------------- |
if ($this->ressources[1] != 'relations') { // SELECT *, nom_sci FROM bftfx_v2_00 WHERE num_nom = X; |
$this->requete_champ = ' *, nom_sci '; |
$this->format_reponse .= '/champ'; |
//---------------- requete de type taxons/#id/relations/#relation-------------------------------- |
} elseif ($this->ressources[1] == 'relations') { |
$this->traiterRessourceIdRelations(); |
} else { |
$e = 'Erreur dans votre requête </br> Ressources disponibles : <br/> |
<li> #id/relations </li> <li> #id/#champ+#champ </li> <li> #id/relations </li> |
<li> #id/relations/inferieurs </li> <li> #id/relations/superieurs </li>'; |
$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e); |
} |
} else { //--------------- requete de type taxons/#id----------------------------------------------------- |
$this->requete_champ = ' *, nom_sci '; |
} |
} |
} |
public function traiterRessourceNtId() { |
if (strrpos($this->ressources[0], 'nt:') !== false) { |
if ($this->presence_num_tax) { |
// SELECT num_nom FROM bdtfx_v2_00 WHERE num_nom = num_nom_retenu AND num_taxonomique = X; |
$this->requete_condition[0] = ' num_taxonomique = ' |
.str_replace('nt:', '', $this->ressources[0]).' '; |
} else { |
$e = 'Erreur dans votre requête : </br> Le numéro taxonomique n\'existe pas dans ce projet'; |
$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e); |
} |
} else { |
// SELECT num_nom FROM bdtfx_v2_00 WHERE num_nom = (SELECT num_nom_retenu FROM bdtfx_v2_00 WHERE num_nom = X); |
$this->requete_condition[0] = 'num_nom = '.$this->ressources[0]; |
} |
} |
/** Permet de récupérer le num_nom du taxon recherché. Soit le numéro taxonomique est demandé (avec nt: ) |
* soit un num_nom dont on recherche le num_nom_retenu */ |
public function recupererNumNomTaxon() { |
$identifiant = ''; |
if ($this->entete_http == '') { |
//on récupere l'identifiant du taxon correspondant au num_nom ou num_taxonomique demandé pour pouvoir l'afficher |
$req_tax = 'SELECT num_nom_retenu FROM '.$this->table.' WHERE '.$this->requete_condition[0]; |
$res_tax = $this->getBdd()->recuperer($req_tax . ' -- ' . __FILE__ . ':' . __LINE__ ); |
//on recherche ensuite les identifiants des taxons supérieurs ou inférieurs |
if ($res_tax && $res_tax != '') { |
$identifiant = $res_tax['num_nom_retenu']; |
} else { |
$e = 'Le numéro de taxon ou l\'identifiant de nom correspondant au num_nom ' |
.$this->ressources[0].' n\'existe pas dans la base.'; |
$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $e); |
Debug::printr($req_tax); |
} |
} |
return $identifiant; |
} |
public function traiterRessourceIdRelations() { |
//----------------- requete de type taxons/#id/relations------------------------------------------- |
// SELECT *, nom_sci FROM bftfx_v2_00 WHERE num_nom = X; |
$this->format_reponse .= '/relations'; |
if (isset($this->ressources[2]) && !empty($this->ressources[2])) { |
//------------- requete de type taxons/#id/relations/#relation-------------------------------- |
switch ($this->ressources[2]) { |
case 'superieurs' : |
$rel = 'recupererIdSup'; |
$this->format_reponse .= '/superieurs'; |
$this->traiterRessourceIdRelationInfSup($rel); |
break; |
case 'inferieurs' : |
$rel = 'recupererIdInf'; |
$this->format_reponse .= '/inferieurs'; |
$this->traiterRessourceIdRelationInfSup($rel); |
break; |
case 'hierarchie' : |
$rel = 'recupererIdHierarchie'; |
$this->format_reponse .= '/hierarchie'; |
$this->traiterRessourceIdRelationHierarchie($rel); |
break; |
default : |
$e = 'Erreur dans votre requête </br> Ressources disponibles : <br/> |
<li> taxons/#id/relations </li><li> #id/relations/inferieurs </li> |
<li> #id/relations/superieurs </li>'; |
$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e); |
break; |
} |
} |
} |
public function traiterRessourceIdRelationInfSup($rel) { |
//Appel de la fct récupérerIdSup ou recupererIdInf : retourne les num_nom des noms inferieurs ou superieurs |
$res_relation = $this->$rel(); |
//analyse du résultat retourné par la requete de recherche des identifiants correspondant aux taxons inf|sup : |
if ($res_relation == '') { //dans le cas ou la requete comporte des erreurs |
$e = 'Fct traiterRessourceIdRelationInfSup : La requête forme comporte une erreur!'; |
$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $e); |
} elseif ($res_relation) { |
//dans le cas ou une ou plusieurs relations est retournée, on récupère les identifiants ss la forme (id, id, id) |
foreach ($res_relation as $ligne) $res[] = $ligne['num_nom']; |
$res = implode(',',$res); |
$this->requete_condition[0] = "num_nom IN ($res)"; |
$this->requete_champ .= ', rang, num_tax_sup '; |
} else { //dans le cas ou aucune relation n'existe |
$res = array($this->num_nom_taxon => null); |
$this->corps_http = json_encode($res); |
$this->entete_http = RestServeur::HTTP_CODE_OK; |
} |
} |
public function traiterRessourceIdRelationHierarchie($rel) { |
//Appel de la fct récupérerIdSup ou recupererIdInf : retourne les num_nom des noms inferieurs ou superieurs |
$res_relation = $this->$rel(); |
//analyse du résultat retourné par la requete de recherche des identifiants correspondant aux taxons inf|sup : |
if ($res_relation == '') { |
//dans le cas ou la requete comporte des erreurs |
$e = 'Fct traiterRessourceIdRelationInfSup : La requête forme comporte une erreur!'; |
$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $e); |
} elseif ($res_relation) { |
//dans le cas ou une ou plusieurs relations est retournée, on récupère les identifiants ss la forme (id, id, id) |
foreach ($res_relation as $ligne) $res[] = $ligne['num_nom']; |
$res = implode(',',$res); |
$this->requete_condition[0] = "num_nom IN ($res)"; |
$this->requete_champ .= ', rang, num_tax_sup '; |
} else { //dans le cas ou aucune relation n'existe |
$res = array($this->num_nom_taxon => null); |
$this->corps_http = json_encode($res); |
$this->entete_http = RestServeur::HTTP_CODE_OK; |
} |
} |
public function recupererIdHierarchie() { |
$req_relation = 'SELECT num_nom FROM '.$this->table.' '. |
' WHERE hierarchie LIKE CONCAT('. |
'(SELECT hierarchie FROM '. |
$this->table.' '. |
'WHERE num_nom = '.$this->getBdd()->proteger($this->num_nom_taxon).')'. |
', '.$this->getBdd()->proteger($this->num_nom_taxon.'-%'). |
')'; |
$res_relation = $this->getBdd()->recupererTous($req_relation . ' -- ' . __FILE__ . ':' . __LINE__ ); |
return $res_relation; |
} |
public function recupererIdInf() { |
//SELECT num_nom FROM bfdtx_v2_00 WHERE num_tax_sup = (SELECT num_nom FROM bdtfx_v2_00 WHERE num_nom = X); |
$req_relation = 'SELECT num_nom FROM '.$this->table |
.' WHERE num_tax_sup = (SELECT num_nom FROM ' |
.$this->table |
.' WHERE '.implode(' AND ', $this->requete_condition).')'; |
$res_relation = $this->getBdd()->recupererTous($req_relation . ' -- ' . __FILE__ . ':' . __LINE__ ); |
return $res_relation; |
} |
public function recupererIdSup() { |
//SELECT num_nom FROM bfdtx_v2_00 WHERE num_nom = (SELECT num_tax_sup FROM bdtfx_v2_00 WHERE num_nom = X); |
$req_relation = 'SELECT num_tax_sup as num_nom FROM '.$this->table |
.' WHERE '.implode(' AND ', $this->requete_condition); |
$res_relation = $this->getBdd()->recupererTous($req_relation . ' -- ' . __FILE__ . ':' . __LINE__ ); |
return $res_relation; |
} |
public function traiterRessourceStatsInitiales() { |
// SELECT count(nom_sci) as nb, rang, left(nom_sci, 2) as lettre FROM bdtfx_v2_00 GROUP BY rang, left(nom_sci, 2); |
$this->format_reponse = 'taxons/stats/initiales'; |
$this->requete_champ = 'count(nom_sci) as nb, rang, left(nom_sci, 2) as lettre '; |
$this->requete_group_by = ' GROUP BY rang, left(nom_sci, 2) '; |
} |
public function traiterRessourceStatsRangs() { |
// SELECT count(*) as nombre, rang FROM bdtfx_v2_00 [WHERE rang = 290] GROUP BY rang ORDER BY rang; |
$this->format_reponse = 'taxons/stats/rangs'; |
$this->requete_champ = 'count(*) as nombre, rang '; |
$this->requete_group_by = ' GROUP BY rang ORDER BY rang '; |
} |
public function traiterRessourceStatsAnnees() { |
// SELECT count(*) as nombre, annee FROM bdtfx_v2_00 GROUP BY annee ORDER BY annee; |
$this->format_reponse = 'taxons/stats/annees'; |
$this->requete_champ = 'count(*) as nombre, annee '; |
$this->requete_group_by = ' GROUP BY annee ORDER BY annee '; |
} |
//-----------------------------FONCTIONS DASSEMBLAGE DE LA REQUETE----------------------------------------------------- |
public function assemblerLaRequete() { |
if ($this->format_reponse != 'taxons/stats/initiales') { |
$this->mettreAuFormat(); //on remplace les nom_sci par les nom_sci_html |
} |
$requete = ' SELECT '.$this->requete_champ. |
' FROM '.$this->table |
.$this->retournerRequeteCondition() |
.$this->requete_group_by |
.$this->formerRequeteLimite() . |
' -- ' . __FILE__ . ':' . __LINE__ ; |
return $requete; |
} |
public function formerRequeteLimite() { |
if ($this->format_reponse != 'taxons' && $this->format_reponse != 'taxons/id/relations/homonymie') { |
$this->requete_limite = ''; |
} elseif (($depart = $this->limite_requete['depart']) > ($this->total_resultat = $this->recupererTotalResultat())) { |
$this->limite_requete['depart'] = (($this->total_resultat - $this->limite_requete['limite']) < 0) ? 0 : ($this->total_resultat - $this->limite_requete['limite']); |
$this->requete_limite = ' LIMIT '.$this->limite_requete['depart'].', '.$this->limite_requete['limite']; |
} else { |
$this->requete_limite = ' LIMIT '.$this->limite_requete['depart'].', '.$this->limite_requete['limite']; |
} |
return $this->requete_limite; |
} |
public function retournerRequeteCondition() { |
$condition = ''; |
if ($this->requete_condition) { |
$condition = ' WHERE '.implode(' AND ', $this->requete_condition); |
} |
return $condition; |
} |
public function recupererTotalResultat() { |
$requete = 'SELECT count(*) as nombre FROM '.$this->table.$this->retournerRequeteCondition().$this->requete_group_by; |
$res = $this->getBdd()->recuperer($requete); |
if ($res) { |
$total = $res['nombre']; |
} |
return $total; |
} |
//-------------------------FONCTIONS DE FORMATION DU RESULTAT----------------------------------------------------------- |
/** Permet de récupérer le résultat à retourner propre à chaque requete et de l'encoder en json*/ |
public function retournerResultatFormate($resultat, $version) { |
switch ($this->format_reponse) { |
case 'taxons/id' ://ds CommunNomsTaxons |
$reponse = $this->formaterId($resultat[0]); |
break; |
case 'taxons/id/champ' ://ds CommunNomsTaxons |
$reponse = $this->formaterIdChamp($resultat[0]); |
break; |
case 'taxons/id/relations' : |
$reponse = $this->formaterIdRelations($resultat[0],$version); |
break; |
case 'taxons/id/relations/superieurs' : |
$reponse = $this->formaterIdSuperieur($resultat, $version); |
break; |
case 'taxons/id/relations/inferieurs' : |
$reponse = $this->formaterIdInferieur($resultat); |
break; |
case 'taxons/id/relations/hierarchie' : |
// le formatage de la hiérarchie est identique aux relations inférieures |
$reponse = $this->formaterIdInferieur($resultat); |
break; |
case 'taxons/stats/annees' : //ds CommunNomsTaxons |
$reponse = $this->formaterStatsAnnee($resultat); |
break; |
case 'taxons/stats/rangs' ://ds CommunNomsTaxons |
$reponse = $this->formaterStatsRang($resultat); |
break; |
case 'taxons/stats/initiales' ://ds CommunNomsTaxons |
$reponse = $this->formaterStatsInitiales($resultat); |
break; |
case 'taxons' : |
$reponse = $this->formatertaxons($resultat); |
break; |
} |
return $reponse; |
} |
//----------------------concerne les resultats pour des requetes de type /noms avec ou sans paramètres-------------- |
public function formaterTaxons($resultat) { |
if ($this->parametres['retour.format'] == 'oss') { |
$reponse = $this->formaterEnOss($resultat); |
} else { |
$reponse = $this->formaterEnJsonMax($resultat); |
} |
return $reponse; |
} |
public function formaterEnJsonMax($resultat) { |
//print_r($resultat); |
$this->recupererTableSignification('correspondance_champs,champs_api,champs_comp'); |
$masque = $this->recupererMasquePrincipal(); |
if (isset($masque)) $resultat = $this->trierRechercheFloue($this->parametres[$masque[0]], $resultat, $masque[1]); |
if (isset($this->masque)) $this->table_retour['masque'] = implode('&', $this->masque); |
$this->afficherEnteteResultat('/'.$this->service); |
$table_retour_json['entete'] = $this->table_retour; |
$this->table_retour = array(); |
//on remplit la table $table_retour_json['resultat'] |
$tab_tax_inf = $this->recupererListeTaxonInf($resultat); |
foreach ($resultat as $tab) { |
$num = $tab['num_nom']; |
if (isset($this->parametres['masque.nt'])) $this->afficherDonnees('num_taxonomique', $tab['num_taxonomique']); |
$this->afficherNomHrefRetenu($tab, $num); |
$this->afficherTaxonInfNb($num, $tab_tax_inf); |
$resultat_json[$num] = $this->table_retour; |
$this->table_retour = array(); //on vide le tableau table_retour |
} |
$table_retour_json['resultat'] = $resultat_json; |
return $table_retour_json; |
} |
//--------------------concerne les resultats pour des requetes de type noms/id---------------------------------------- |
public function formaterIdRelations($resultat, $version) { |
$this->recupererTableSignification('correspondance_champs,champs_api,champs_comp'); |
$this->resultat_req = $resultat; |
$retour_id_rel = array ('entete' => array()); //on initialise pr que l'entete apparaisse en premier |
$superieurs = $this->ajouterRelations('superieurs'); //, $version); |
if (isset($superieurs)) $retour_id_rel['resultat']['superieurs'] = $superieurs; |
$inferieurs = $this->ajouterRelations('inferieurs', $version); |
if (isset($inferieurs)) $retour_id_rel['resultat']['inferieurs'] = $inferieurs; |
if (!isset($retour_id_rel['resultat'])) { //on renvoit un tableau null si il n'existe aucune relations |
$retour_id_rel = 'null'; |
} else { //on rajoute l'entete si des relations existent |
$this->afficherDonnees('num_nom', $this->num_nom_taxon); //$this->afficherEnteteResultat($resultat, '/'.$this->service.'/'.$this->ressources[0].'/relations/synonymie'); |
$retour_id_rel['entete'] = $this->table_retour; |
$this->table_retour = array(); |
} |
return $retour_id_rel; |
} |
public function ajouterRelations($relation, $version) { |
$version = str_replace(Config::get('bdd_table').'_', '', $version); |
$res = null; |
$taxon = $this->num_nom_taxon; |
$parametres_url = ''; |
if ($this->parametres != array()) $parametres_url = '?'.http_build_query($this->parametres, '', '&'); |
$url = Config::get('url_service').'/' |
.$this->service.'/'.$version.'/' |
.$this->ressources[0].'/relations/' |
.$relation.$parametres_url; |
$relation = $this->consulterHref($url); |
if (isset($relation->resultat)) { |
$res = $relation->resultat; |
} elseif (isset($relation->$taxon)) { //pour les relations inf et sup |
$res = $relation->$taxon; |
} |
return $res; |
} |
public function formaterIdSuperieur($resultat, $version) { |
$this->recupererTableSignification('correspondance_champs,champs_api,champs_comp'); |
$tab_relation = null; //si il n'existe aucune relation |
$taxon_sup_traites = array(); |
if (($resultat) != '' ) { |
//on recupere d'abord les rangs supérieurs |
$sup = $resultat[0]; |
do { |
$sup = $this->recupererIdSuperieur($sup['num_tax_sup'], $version); |
if(!in_array($sup['num_nom'], $taxon_sup_traites)) { |
$taxon_sup_traites[] = $sup['num_nom']; |
} else { |
$sup = null; |
} |
if ($sup['rang'] == '0') $sup['rang'] = '10'; //erreur dans la base |
if (isset($sup)) $resultat[] = $sup; |
} while ($sup != null); |
krsort($resultat); |
//on les affiche ensuite |
foreach ($resultat as $tab) { |
$this->resultat_req = $tab; |
$num = $tab['num_nom']; |
$this->afficherNomHrefRetenu($tab, $num); |
$this->afficherDonnees('rang', $tab['rang']); |
$tab_inf[$num] = $this->table_retour; |
$tab_inf[$num]['num_nom'] = $tab['num_nom']; |
$this->table_retour = array(); |
} |
$tab_relation[$this->num_nom_taxon] = $tab_inf; |
} |
return $tab_relation; |
} |
public function recupererIdSuperieur($id, $version) { |
$req = 'SELECT num_nom, num_nom_retenu, num_tax_sup, rang, nom_sci FROM ' |
.$version.' WHERE num_nom = '.$this->getBdd()->proteger($id); |
$res = $this->getBdd()->recupererTous($req . ' -- ' . __FILE__ . ':' . __LINE__ ); |
if ($res) { |
$resultat = $res[0]; |
} else { |
$resultat = null; //on return null si il n'y a pas de taxon superieur |
} |
return $resultat; |
} |
public function formaterIdInferieur($resultat) { |
// Attention à l'ordre, on doit d'abord récupérer correpondance_champs avant champs_api |
$this->recupererTableSignification('correspondance_champs,champs_api,champs_comp'); |
$tab_relation = null; |
if (($resultat) != array()) { |
foreach ($resultat as $tab) { |
$this->resultat_req = $tab; |
$num = $tab['num_nom']; |
$this->afficherNomHrefRetenu($tab, $num); |
if(!empty($tab['rang'])) { |
$this->afficherDonnees('rang', $tab['rang']); |
} |
$tab_inf[$num] = $this->table_retour; |
$tab_inf[$num]['nom_sci'] = $tab['nom_sci']; |
$tab_inf[$num]['num_nom'] = $tab['num_nom']; |
$this->table_retour = array(); |
} |
$tab_relation[$this->num_nom_taxon] = $tab_inf; |
} |
return $tab_relation; |
} |
public function afficherTaxonInfNb($num, $tab_tax_inf) { |
foreach ($tab_tax_inf as $taxNb) { |
if ($taxNb['num_tax_sup'] == $num) { |
$this->table_retour['taxon_inferieur_nbre'] = $taxNb['nb']; |
} |
} |
if (!isset($this->table_retour['taxon_inferieur_nbre'])) { |
$this->table_retour['taxon_inferieur_nbre'] = '0'; |
} |
} |
public function recupererListeTaxonInf($resultat) { |
// SELECT num_tax_sup, count(*) as nb FROM bdtfx_v2_00 WHERE num_tax_sup IN (id, id, id) AND num_nom = num_nom_retenu GROUP BY num_tax_sup'; |
foreach ($resultat as $tab) { |
$tab_num[] = $tab['num_nom']; //on regroupe ici les id des taxons dont on cherche le nb de taxon inf |
} |
$req = 'SELECT num_tax_sup, count(*) as nb FROM '.$this->table |
.' WHERE num_tax_sup IN ('.implode(',',$tab_num) |
.') AND num_nom = num_nom_retenu GROUP BY num_tax_sup'; |
$res = $this->getBdd()->recupererTous($req . ' -- ' . __FILE__ . ':' . __LINE__ ); |
if ($res) { |
$resultat = $res; |
} else { |
$resultat = array(); //on retourne un tableau vide s'il n'y a pas de taxon inférieurs |
} |
return $resultat; |
} |
} |
?> |
/tags/v0.1-20130830/services/modules/0.1/sptb/Statuts.php |
---|
New file |
0,0 → 1,176 |
<?php |
// declare(encoding='UTF-8'); |
/** |
* Classe implémentant l'API d'eFlore concernant les statuts de protection |
* |
* @see http://www.tela-botanica.org/wikini/eflore/wakka.php?wiki=EfloreApi01Status |
* |
* @package eFlore/services |
* @author Aurélien PERONNET <aurelien@tela-botanica.org> |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt> |
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt> |
* @version 1.0 |
* @copyright 1999-2011 Tela Botanica (accueil@tela-botanica.org) |
*/ |
// TODO : Config et Outils sont des classes statiques qui doivent poser des pb pour les tests... |
class Statuts extends Commun { |
protected $parametres = array(); |
protected $ressources = array(); |
private $bdd; |
private $retour_format = 'complet'; |
private $retours_formats_autorises = array('complet','zone_geo'); |
public function __construct($config = null) { |
$this->config = $config; |
$this->bdd = $this->getBdd(); |
} |
public function consulter($ressources, $parametres) { |
$this->parametres = $parametres; |
$this->ressources = $ressources; |
$this->affecterParametresParDefaut(); |
$this->verifierParametres(); |
$resultat = new ResultatService(); |
$resultat->corps = $this->obtenirStatuts(); |
return $resultat; |
} |
//+---------------------------FONCTION D'ANALYSE DES PARAMETRES---------------------------------------------------------+ |
private function affecterParametresParDefaut() { |
$this->retour_format = isset($this->parametres['retour.format']) ? $this->parametres['retour.format'] : $this->retour_format; |
} |
private function verifierParametres() { |
$erreurs = array(); |
if (empty($this->parametres['masque.nn'])) { |
$erreurs[] = 'renseignez une valeur pour masque.nn'; |
} |
if(!is_numeric($this->parametres['masque.nn'])) { |
$erreurs[] = 'la valeur pour masque.nn doit être un entier'; |
} |
if(!in_array($this->retour_format, $this->retours_formats_autorises)) { |
$erreurs[] = 'la valeur '.$this->retour_format.' est inconnue'; |
} |
if (count($erreurs) > 0) { |
$message = implode('<br />', $erreurs); |
$code = RestServeur::HTTP_CODE_MAUVAISE_REQUETE; |
throw new Exception($message, $code); |
} |
} |
//+---------------------------FONCTIONS DE REQUETE---------------------------------------------------------+ |
private function obtenirLois(Array $id_lois) { |
$id_lois = array_map(array($this->bdd, 'proteger'), $id_lois); |
$requete = "SELECT * FROM ".Config::get('bdd_table_lois').' '. |
"WHERE id IN (".implode(',',$id_lois).") "; |
return $this->bdd->recupererTous($requete); |
} |
private function obtenirLoisZoneGeo(Array $id_lois) { |
$id_lois = array_map(array($this->bdd, 'proteger'), $id_lois); |
$requete = "SELECT DISTINCT zone_application, code_zone_application FROM ".Config::get('bdd_table_lois').' '. |
"WHERE id IN (".implode(',',$id_lois).") "; |
return $this->bdd->recupererTous($requete); |
} |
private function obtenirStatuts() { |
$nn_demande = $this->parametres['masque.nn']; |
$conditions_taxons = array(); |
$conditions_taxons = $this->obtenirNumNomTaxonsSuperieurs($nn_demande); |
$conditions_taxons[] = $this->bdd->proteger($nn_demande); |
$requete = "SELECT * FROM ".Config::get('bdd_table_especes').' '. |
"WHERE num_nom_retenu IN (".implode(', ', $conditions_taxons).") OR ". |
"num_nom IN (".implode(', ', $conditions_taxons).") " . ' -- ' . __FILE__ . ':' . __LINE__; |
$statuts = $this->bdd->recuperer($requete); |
$statuts = $this->formaterRetour($statuts); |
return $statuts; |
} |
private function obtenirNumNomTaxonsSuperieurs($nn_demande) { |
$nn_taxons_sup = array(); |
// TODO: ceci ramène trop de champs alors que l'on a besoin que du numéro nomenclatural |
// et il y a peut-être un meilleur moyen que ramener la hierarchie des taxons supérieurs |
// mais pour le moment ça marche et c'est assez rapide |
$url = $this->ajouterHrefAutreProjet('taxons', $nn_demande, '/relations/superieurs',Config::get('referentiel')); |
$classification = $this->consulterHref($url); |
$classification = is_object($classification) ? get_object_vars($classification) : array(); |
if(isset($classification[$nn_demande])) { |
$classification_nn_demande = get_object_vars($classification[$nn_demande]); |
$tab_nn_demandes = array_keys($classification_nn_demande); |
$nn_taxons_sup = array_map(array($this->bdd,'proteger'), $tab_nn_demandes); |
} |
return $nn_taxons_sup; |
} |
//+---------------------------FONCTIONS DE FORMATAGE---------------------------------------------------------+ |
private function formaterRetour($statuts_taxon) { |
switch($this->retour_format) { |
case 'zone_geo': |
$retour = $this->formaterStatutsTaxonZoneGeo($statuts_taxon); |
break; |
case 'complet': |
$retour = $this->formaterStatutsTaxon($statuts_taxon); |
break; |
default: |
$retour = $this->formaterStatutsTaxon(); |
break; |
} |
return $retour; |
} |
private function formaterStatutsTaxonZoneGeo($statuts_taxon) { |
$lois_statuts = array(); |
// cas ou la requête (obtenirStatuts()) ne retourne rien |
if(!$statuts_taxon) return array(); |
foreach ($statuts_taxon as $champ => $statut) { |
if($statut == "1") { |
$lois_statuts[] = $champ; |
} |
} |
$zones_geo_lois = (!empty($lois_statuts)) ? $this->obtenirLoisZoneGeo($lois_statuts) : array(); |
return $zones_geo_lois; |
} |
private function formaterStatutsTaxon($statuts_taxon) { |
$statuts_formates = array(); |
$lois_statuts = array(); |
if(is_array($statuts_taxon)) { |
unset($statuts_taxon['num_nom']); |
unset($statuts_taxon['num_nom_retenu']); |
unset($statuts_taxon['nom_sci']); |
foreach ($statuts_taxon as $champ => $statut) { |
if($statut == "1") { |
$lois_statuts[] = $champ; |
} |
} |
} |
$statuts_formates = (!empty($lois_statuts)) ? $this->obtenirLois($lois_statuts) : array(); |
return $statuts_formates; |
} |
} |
?> |
/tags/v0.1-20130830/services/modules/0.1/sptba/Statuts.php |
---|
New file |
0,0 → 1,173 |
<?php |
// declare(encoding='UTF-8'); |
/** |
* Classe implémentant l'API d'eFlore concernant les statuts de protection |
* |
* @see http://www.tela-botanica.org/wikini/eflore/wakka.php?wiki=EfloreApi01Status |
* |
* @package eFlore/services |
* @author Aurélien PERONNET <aurelien@tela-botanica.org> |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt> |
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt> |
* @version 1.0 |
* @copyright 1999-2011 Tela Botanica (accueil@tela-botanica.org) |
*/ |
// TODO : Config et Outils sont des classes statiques qui doivent poser des pb pour les tests... |
class Statuts extends Commun { |
protected $parametres = array(); |
protected $ressources = array(); |
private $bdd; |
private $retour_format = 'complet'; |
private $retours_formats_autorises = array('complet','zone_geo'); |
public function __construct($config = null) { |
$this->config = $config; |
$this->bdd = $this->getBdd(); |
} |
public function consulter($ressources, $parametres) { |
$this->parametres = $parametres; |
$this->ressources = $ressources; |
$this->affecterParametresParDefaut(); |
$this->verifierParametres(); |
$resultat = new ResultatService(); |
$resultat->corps = $this->obtenirStatuts(); |
return $resultat; |
} |
//+---------------------------FONCTION D'ANALYSE DES PARAMETRES---------------------------------------------------------+ |
private function affecterParametresParDefaut() { |
$this->retour_format = isset($this->parametres['retour.format']) ? $this->parametres['retour.format'] : $this->retour_format; |
} |
private function verifierParametres() { |
$erreurs = array(); |
if (empty($this->parametres['masque.nn'])) { |
$erreurs[] = 'renseignez une valeur pour masque.nn'; |
} |
if(!is_numeric($this->parametres['masque.nn'])) { |
$erreurs[] = 'la valeur pour masque.nn doit être un entier'; |
} |
if(!in_array($this->retour_format, $this->retours_formats_autorises)) { |
$erreurs[] = 'la valeur '.$this->retour_format.' est inconnue'; |
} |
if (count($erreurs) > 0) { |
$message = implode('<br />', $erreurs); |
$code = RestServeur::HTTP_CODE_MAUVAISE_REQUETE; |
throw new Exception($message, $code); |
} |
} |
//+---------------------------FONCTIONS DE REQUETE---------------------------------------------------------+ |
private function obtenirLois(Array $id_lois) { |
$id_lois = array_map(array($this->bdd, 'proteger'), $id_lois); |
$requete = "SELECT * FROM ".Config::get('bdd_table_lois').' '. |
"WHERE id IN (".implode(',',$id_lois).") "; |
return $this->bdd->recupererTous($requete); |
} |
private function obtenirLoisZoneGeo(Array $id_lois) { |
$id_lois = array_map(array($this->bdd, 'proteger'), $id_lois); |
$requete = "SELECT DISTINCT zone_application, code_zone_application FROM ".Config::get('bdd_table_lois').' '. |
"WHERE id IN (".implode(',',$id_lois).") "; |
return $this->bdd->recupererTous($requete); |
} |
private function obtenirStatuts() { |
$nn_demande = $this->parametres['masque.nn']; |
$conditions_taxons = array(); |
$conditions_taxons = $this->obtenirNumNomTaxonsSuperieurs($nn_demande); |
$conditions_taxons[] = $this->bdd->proteger($nn_demande); |
$requete = "SELECT * FROM ".Config::get('bdd_table_especes').' '. |
"WHERE num_nom_retenu IN (".implode(', ', $conditions_taxons).") OR ". |
"num_nom IN (".implode(', ', $conditions_taxons).") "; |
$statuts = $this->bdd->recuperer($requete); |
$statuts = $this->formaterRetour($statuts); |
return $statuts; |
} |
private function obtenirNumNomTaxonsSuperieurs($nn_demande) { |
$nn_taxons_sup = array(); |
// TODO: ceci ramène trop de champs alors que l'on a besoin que du numéro nomenclatural |
// et il y a peut-être un meilleur moyen que ramener la hierarchie des taxons supérieurs |
// mais pour le moment ça marche et c'est assez rapide |
$url = $this->ajouterHrefAutreProjet('taxons', $nn_demande, '/relations/superieurs',Config::get('referentiel')); |
$classification = $this->consulterHref($url); |
$classification = is_object($classification) ? get_object_vars($classification) : array(); |
if(isset($classification[$nn_demande])) { |
$classification_nn_demande = get_object_vars($classification[$nn_demande]); |
$tab_nn_demandes = array_keys($classification_nn_demande); |
$nn_taxons_sup = array_map(array($this->bdd,'proteger'), $tab_nn_demandes); |
} |
return $nn_taxons_sup; |
} |
//+---------------------------FONCTIONS DE FORMATAGE---------------------------------------------------------+ |
private function formaterRetour($statuts_taxon) { |
switch($this->retour_format) { |
case 'zone_geo': |
$retour = $this->formaterStatutsTaxonZoneGeo($statuts_taxon); |
break; |
case 'complet': |
$retour = $this->formaterStatutsTaxon($statuts_taxon); |
break; |
default: |
$retour = $this->formaterStatutsTaxon(); |
break; |
} |
return $retour; |
} |
private function formaterStatutsTaxonZoneGeo($statuts_taxon) { |
$lois_statuts = array(); |
foreach ($statuts_taxon as $champ => $statut) { |
if($statut == "1") { |
$lois_statuts[] = $champ; |
} |
} |
$zones_geo_lois = (!empty($lois_statuts)) ? $this->obtenirLoisZoneGeo($lois_statuts) : array(); |
return $zones_geo_lois; |
} |
private function formaterStatutsTaxon($statuts_taxon) { |
$statuts_formates = array(); |
$lois_statuts = array(); |
if(is_array($statuts_taxon)) { |
unset($statuts_taxon['num_nom']); |
unset($statuts_taxon['num_nom_retenu']); |
unset($statuts_taxon['nom_sci']); |
foreach ($statuts_taxon as $champ => $statut) { |
if($statut == "1") { |
$lois_statuts[] = $champ; |
} |
} |
} |
$statuts_formates = (!empty($lois_statuts)) ? $this->obtenirLois($lois_statuts) : array(); |
return $statuts_formates; |
} |
} |
?> |
/tags/v0.1-20130830/services/modules/0.1/Projets.php |
---|
New file |
0,0 → 1,328 |
<?php |
/** |
* Description : |
* Classe principale de chargement des services d'eFlore. |
* |
* Encodage en entrée : utf8 |
* Encodage en sortie : utf8 |
* @package eflore-projets |
* @author Jennifer DHÉ <jennifer.dhe@tela-botanica.org> |
* @author Delphine CAUQUIL <delphine@tela-botanica.org> |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt> |
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt> |
* @version 0.1 |
* @copyright 1999-2011 Tela Botanica (accueil@tela-botanica.org) |
*/ |
class Projets extends RestService { |
/** Contients les paramètres.*/ |
private $parametres = array(); |
/** Contients les ressources.*/ |
private $ressources = array(); |
/** Nom du projet courrant. */ |
private $projetNom = array(); |
/** Nom du service demandé. */ |
private $serviceNom = array(); |
/** Chemin vers le dossier courrant. */ |
private $cheminCourrant = null; |
private $classe = null; |
private $cache; |
/** Indique si oui (true) ou non (false), on veut utiliser les paramètres brutes. */ |
protected $utilisationParametresBruts = true; |
public function __construct() { |
$this->cheminCourrant = dirname(__FILE__).DS; |
} |
public function consulter($ressources, $parametres) { |
$resultat = ''; |
$reponseHttp = new ReponseHttp(); |
try { |
$this->initialiserRessourcesEtParametres($ressources, $parametres); |
$resultat = $this->traiterRessources(); |
$reponseHttp->setResultatService($resultat); |
} catch (Exception $e) { |
$reponseHttp->ajouterErreur($e); |
} |
$reponseHttp->emettreLesEntetes(); |
$corps = $reponseHttp->getCorps(); |
return $corps; |
} |
private function initialiserRessourcesEtParametres($ressources, $parametres) { |
$this->ressources = $ressources; |
$this->parametres = $parametres; |
} |
private function traiterRessources() { |
$retour = ''; |
if ($this->avoirRessources()) { |
if ($this->avoirRessourceProjet()) { |
$this->chargerNomDuService(); // défini $this->serviceNom |
$this->initialiserProjet(); // autoload defined here |
if ($this->avoirRessourceService()) { |
$this->classe = self::debusquerClasse($this->projetNom, $this->serviceNom); |
$retour = $this->initialiserService(); |
} |
} |
} |
return $retour; |
} |
private function avoirRessources() { |
$presenceDeRessources = false; |
if (isset($this->ressources) && count($this->ressources) > 0) { |
$presenceDeRessources = true; |
} else { |
$message = "Aucune ressource n'a été indiquée.\n". |
"Veuillez indiquer au moins un code de projet et un type de service."; |
$code = RestServeur::HTTP_CODE_MAUVAISE_REQUETE; |
throw new Exception($message, $code); |
} |
return $presenceDeRessources; |
} |
private function avoirRessourceProjet() { |
$presenceRessourceProjet = false; |
$projet = $this->ressources[0]; |
$projetsDispo = Outils::recupererTableauConfig('projetsDispo'); |
if (in_array($projet, $projetsDispo)) { |
$presenceRessourceProjet = true; |
} else { |
$message = "La ressource '$projet' n'indique pas un projet existant.\n". |
"Les projets existant sont :\n".implode(', ', $projetsDispo); |
$code = RestServeur::HTTP_CODE_MAUVAISE_REQUETE; |
throw new Exception($message, $code); |
} |
return $presenceRessourceProjet; |
} |
private function initialiserProjet() { |
$this->chargerNomDuProjet(); |
$this->chargerConfigProjet(); |
// php5.3 : Enregistrement en première position des autoload de la méthode gérant les classes des services |
if (phpversion() < 5.3) { |
spl_autoload_register(array($this, 'chargerClasseProjet')); |
} else { |
spl_autoload_register(array($this, 'chargerClasseProjet'), true , true); |
} |
} |
private function chargerNomDuProjet() { |
$this->projetNom = $this->ressources[0]; |
} |
private function chargerConfigProjet() { |
$projet = $this->projetNom; |
$chemin = Config::get('chemin_configurations')."config_$projet.ini"; |
Config::charger($chemin); |
} |
/* |
1) jusqu'à présent: |
* le principe pour URL = a/b est: de charger |
* require_once($chemin/a/ucfirst(c).php) |
* new ucfirst(c); ucfirst(c)->consulter() |
* sachant que ucfirst(c).php et la classe ucfirst(c) apparaîssent à de multiples emplacements (selon a) |
1") Beurk... (php-className conflicts en PHP 5.2) |
Ici nous faisons des cas particuliers pour Ontologies, mais en suivant ce principe, sont affectés: |
Images, Informations, InformationsTaxonsSup, |
LegendeCartes, NomCommune, Noms, NomsVernaculaires, Projets, Statuts, |
Taxons, TaxonsCartes, Textes, ZoneGeo |
cf: |
$ grep -r '^[cC]lass '|grep -F '.php:'|egrep -w " \($(grep -rh '^[cC]lass '|awk '{print $2}'|sort|uniq -d|tr "\n" '|')\) " \ |
|sort -k2 |
PS: "Using two class with the same name" |
http://stackoverflow.com/questions/4555186/using-two-class-with-the-same-name |
> Stop. |
> Whatever you are doing is wrong. Backup. Re-evaluate what you are doing and why. |
*/ |
private static function debusquerClasse($p, $s) { |
if($s == 'ontologies') { |
switch($p) { |
case 'baseflor': |
return 'BaseFloreOntologies'; |
case 'eflore': |
return 'EfloreOntologies'; |
case 'chorodep': |
return 'ChorodepOntologies'; |
case 'baseveg': |
return 'BasevegOntologies'; |
case 'moissonnage': |
return 'MoissonnageOntologies'; |
case 'commun': |
return 'Ontologies'; |
} |
} |
if($s == 'cartes') { |
switch($p) { |
case 'bdtxa': |
return 'BdtxaCartes'; |
case 'eflore': |
return 'EfloreCartes'; |
case 'chorodep': |
return 'ChorodepCartes'; |
case 'moissonnage': |
return 'MoissonnageCartes'; |
} |
} |
return NULL; |
} |
private function chargerClasseProjet($classe) { |
if (class_exists($classe)) { |
return null; |
} |
if($this->serviceNom == 'ontologies') { |
$c = NULL; |
switch($this->projetNom) { |
case 'baseflor': |
$c = 'BaseFloreOntologies'; |
break; |
case 'eflore': |
$c = 'EfloreOntologies'; |
break; |
case 'chorodep': |
$c = 'ChorodepOntologies'; |
break; |
case 'baseveg': |
$c = 'BasevegOntologies'; |
break; |
case 'moissonnage': |
$c = 'MoissonnageOntologies'; |
break; |
case 'commun': |
$c = 'Ontologies'; |
break; |
} |
if($c) { |
require_once($this->cheminCourrant . 'commun' . DS . 'Commun.php'); |
require_once($this->cheminCourrant . $this->projetNom . DS . $this->obtenirNomClasseService($this->serviceNom) . '.php'); |
return; |
} |
} |
// problème de class-name conflict. Exemple: |
// phpunit --verbose --debug --filter 'ChorodepCartesTest::testCarteGenerique|EfloreCartesTest::testCarteGenerale' |
if($this->serviceNom == 'cartes') { |
$c = NULL; |
switch($this->projetNom) { |
case 'bdtxa': |
$c = 'BdtxaCartes'; |
break; |
case 'eflore': |
$c = 'EfloreCartes'; |
break; |
case 'chorodep': |
$c = 'ChorodepCartes'; |
break; |
case 'moissonnage': |
$c = 'MoissonnageCartes'; |
break; |
} |
if($c) { |
require_once($this->cheminCourrant . 'commun' . DS . 'Commun.php'); |
require_once($this->cheminCourrant . $this->projetNom . DS . $this->obtenirNomClasseService($this->serviceNom) . '.php'); |
return; |
} |
} |
$cheminBiblio = Config::get('chemin_bibliotheque'); |
$chemins = array(); |
$chemins[] = $this->cheminCourrant.$this->projetNom.DS; |
$chemins[] = $this->cheminCourrant.'commun'.DS; |
$chemins[] = $cheminBiblio; |
$chemins[] = $cheminBiblio.'robots'.DS; |
foreach ($chemins as $chemin) { |
$chemin = $chemin.$classe.'.php'; |
if (file_exists($chemin)) { |
require_once $chemin; |
break; |
} |
} |
} |
private function avoirRessourceService() { |
$presenceRessourceService = false; |
$servicesDispo = Outils::recupererTableauConfig('servicesDispo'); |
if (isset($this->ressources[1])) { |
$service = $this->ressources[1]; |
if (in_array($service, $servicesDispo)) { |
$presenceRessourceService = true; |
} else { |
$message = "La service demandé '$service' n'est pas disponible pour le projet {$this->projetNom} !\n". |
"Les services disponibles sont : ".implode(', ', $servicesDispo); |
$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE; |
throw new Exception($message, $code); |
} |
} else { |
$message = "Vous n'avez pas indiqué de service pour le projet {$this->projetNom} !\n". |
"Les services disponibles sont : ".implode(', ', $servicesDispo); |
$code = RestServeur::HTTP_CODE_MAUVAISE_REQUETE; |
throw new Exception($message, $code); |
} |
return $presenceRessourceService; |
} |
private function initialiserService() { |
if($this->classe) { |
$classe = $this->classe; |
$service = new $classe($this->getBdd()); |
return $service->consulter($this->filtrerRessourcesPourService(), $this->parametres); |
} |
$classe = $this->obtenirNomClasseService($this->serviceNom); |
$chemins = array(); |
$chemins[] = $this->cheminCourrant.$this->projetNom.DS.$classe.'.php'; |
$chemins[] = $this->cheminCourrant.'commun'.DS.$classe.'.php'; |
$service = null; |
foreach ($chemins as $chemin) { |
if (file_exists($chemin)) { |
$service = new $classe($this->getBdd()); |
// Affichage utile lors de PHPUnit pour détecter les conflits d'autoload de classes de même nom |
// $reflector = new ReflectionClass($classe); |
// printf("===> Projets init classe '%s' depuis '%s', mais provenant de '%s'\n", $classe, $chemin, $reflector->getFileName()); |
$ressourcesPourService = $this->filtrerRessourcesPourService(); |
$this->cache = new CacheEflore($service, $this->projetNom, $this->serviceNom, Config::get('cache')); |
return $this->cache->consulter($ressourcesPourService, $this->parametres); |
} |
} |
if (is_null($service)) { |
$message = "La service demandé '{$this->serviceNom}' n'existe pas dans le projet {$this->projetNom} !"; |
$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE; |
throw new Exception($message, $code); |
} |
return NULL; |
} |
private function chargerNomDuService() { |
$this->serviceNom = $this->ressources[1]; |
} |
private function obtenirNomClasseService($mot) { |
return str_replace(' ', '', ucwords(strtolower(str_replace('-', ' ', $mot)))); |
} |
private function filtrerRessourcesPourService() { |
$ressourcesPourService = array(); |
$nbreDeRessources = count($this->ressources); |
for ($i = 2; $i < $nbreDeRessources; $i++) { |
$ressourcesPourService[] = $this->ressources[$i]; |
} |
return $ressourcesPourService; |
} |
} |
?> |
/tags/v0.1-20130830/services/modules/0.1/baseveg/precisions_sur_niveaux.txt |
---|
New file |
0,0 → 1,16 |
Précisions pour les ontologies : voir le fichier log dans le script de baseveg. |
niveaux existants : |
ORD,ALL,ASS,CLA,SUBCLA,SUBORD,SUBASS,SUBCLA,SUBALL,BC,DC,GRPT |
A ce jour je ne connais pas le sens de BC et DC. |
synonymes : |
"syn" suivi de un ou plusieurs des termes suivants : |
incl,=,= ?,illeg,pp,pmaxp,pminp,compl,ambig,non,inval,nn,ined |
on rencontre parfois des textes entre [ ] comme dans : " syn incl illeg [pro race hyperatlantique] ". |
catminat : certains codes comme 01/A6.0.1.0.1/01 comportent des lettres (probablement pour bdafx (algues)). |
ces cas ont été ignorés. |
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |
/tags/v0.1-20130830/services/modules/0.1/baseveg/syntaxons/SyntaxonsRelationsToutes.php |
---|
New file |
0,0 → 1,87 |
<?php |
/** |
* |
* syntaxons/relations -> retourne toutes les relations d'un syntaxon en fonction du numéro catminat |
* |
* * @package eflore-projets |
* @author mathilde Salthun-Lassalle |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt> |
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt> |
* @version 1.0 |
* @copyright 1999-2012 Tela Botanica (accueil@tela-botanica.org) |
* |
*/ |
class SyntaxonsRelationsToutes extends SyntaxonsCommun { |
public function consulter($ressources, $parametres) { |
$this->ressources = $ressources; |
$this->parametres = $parametres; |
$this->traiterParametres(); |
$resultats = null; |
$resultat = $this->retournerResultatRelations(); |
$versionResultat = $this->traiterResultat($resultat); |
$resultats = $versionResultat; |
return $resultats; |
} |
// si je ne réinstancie pas la classe entre les appels à la méthode consulter, çà ne marche pas ! |
private function retournerResultatRelations () { |
$resultat_relation = array(); |
$classe = new SyntaxonsRelation(new Conteneur()); |
$ressources_syn = array_merge($this->ressources, array('synonymie') ); |
$synonymie = $classe->consulter($ressources_syn,$this->parametres); |
if ($synonymie != 'Les données recherchées sont introuvables') { |
$resultat_relation['synonymie'] = $synonymie['resultat']; |
} |
$ressources_niv = array_merge($this->ressources, array('niveaux-sup') ); |
$classe = new SyntaxonsRelation(new Conteneur()); |
$niveaux = $classe->consulter($ressources_niv,$this->parametres); |
if ($niveaux != 'Les données recherchées sont introuvables') { |
$resultat_relation['niveaux_superieurs'] = $niveaux['resultat']; |
} |
return $resultat_relation; |
} |
//+-------------------------------------traitement des ressources et des paramètres----------------------------------------+// |
public function traiterParametres() { |
if (isset($this->parametres) && !empty($this->parametres) ) { |
foreach ($this->parametres as $param => $valeur) { |
if ($param != 'version.projet' || $param != 'retour.champs' ) { |
$e = 'Erreur dans les parametres de votre requête : </br> Le paramètre " ' |
.$param.' " n\'existe pas.'; |
$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e); |
} |
} |
} |
} |
//+--------------------------formatages de resultats -------------------------------------------+ |
public function retournerResultatFormate($resultat) { |
$resultat_json = array(); |
$resultat_json['entete']['catminat'] = str_replace('-','/',$this->ressources[0]); |
$resultat_json['resultat'] = $resultat; |
return $resultat_json; |
} |
} |
?> |
/tags/v0.1-20130830/services/modules/0.1/baseveg/syntaxons/SyntaxonsCode.php |
---|
New file |
0,0 → 1,107 |
<?php |
/** |
* |
* /syntaxons?masque.catminat=#catminat&masque.niveau=#niveau etc.--> retourne les syntaxons répondant à ces critères |
* /syntaxons/cle:#cle --> retourne les informations de ce syntaxon ( peut être un synonyme ) |
* |
* Remarque : le code fixe n'est pas tout à fait unique puisque certaines valeurs (ex. 1489) |
* apparaissent 2 ou 3 fois avec des codes catminat ou des syntaxons sensiblement différents. |
* C'est pourquoi il n'est pas utilisé. |
* |
* |
* @package eflore-projets |
* @author mathilde Salthun-Lassalle |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt> |
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt> |
* @version 1.0 |
* @copyright 1999-2012 Tela Botanica (accueil@tela-botanica.org) |
* |
*/ |
class SyntaxonsCode extends SyntaxonsCommun { |
public function consulter($ressources, $parametres) { |
$this->ressources = $ressources; |
$this->parametres = $parametres; |
$this->traiterRessources(); |
$this->traiterParametres(); |
$this->definirTables(); |
$resultats = null; |
$requete = ''; |
foreach ($this->table_version as $version) { |
$this->table = $version; |
$requete = $this->assemblerLaRequete(); |
$resultat = $this->Bdd->recupererTous($requete); |
$versionResultat = $this->traiterResultat($resultat, $version); |
if (count($this->table_version) > 1) { |
$resultats[$version] = $versionResultat; |
} else { |
$resultats = $versionResultat; |
} |
} |
return $resultats; |
} |
function __construct(Conteneur $conteneur) { |
parent::__construct($conteneur); |
} |
//+-------------------------------------traitement des ressources et des paramètres----------------------------------------+// |
public function traiterRessources() { |
$catminat=''; |
if(preg_match("/catminat:(([0-9]{2}\-$)|([0-9]{2}\-[0-9]\.$)|([0-9]{2}\-(?:[0-9]\.){1,5}[0-9]$)|([0-9]{2}\-(?:[0-9]\.){4,5}[0-9]\-[0-9]+(?:bis|ter|quater){0,1}$))/",$this->ressources[0], $retour)) { |
$this->catminat = str_replace('-', '/',$retour[1]); |
$this->requete_condition[] = ' code_catminat = \''.$this->catminat.'\' ' ; |
$this->requete_condition[] = ' niveau NOT LIKE \'syn%\' '; |
} elseif (preg_match("/cle:([0-9]+)/",$this->ressources[0], $retour)) { |
$this->champs_recherches = ' * '; |
$this->requete_condition[] = ' cle = '.$retour[1].' ' ; |
}elseif ($this->ressources[0]) { |
$e = 'Erreur dans l\'url de votre requête : </br> La ressource demandée n\'existe pas.'; |
throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE); |
} |
return $catminat; |
} |
public function traiterParametres() { |
if (isset($this->parametres) && !empty($this->parametres) ) { |
foreach ($this->parametres as $param => $valeur) { |
switch ($param) { |
case 'version.projet' : |
$this->traiterVersion($valeur); |
break; |
default : |
$e = 'Erreur dans les parametres de votre requête : </br> Le paramètre " ' |
.$param.' " n\'existe pas.'; |
$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e); break; |
} |
} |
} |
} |
//+--------------------------formatages de resultats -------------------------------------------+ |
public function retournerResultatFormate($resultat) { |
$resultat_json = array(); |
foreach ($resultat as $cle => $res) { |
$resultat[$cle] = array_merge($resultat[$cle],$this->traiterOntologieNiveau($res['niveau'])); |
unset($resultat[$cle]['niveau']); |
$resultat[$cle] = $this->enleverValeursVides($resultat[$cle]); |
} |
$resultat_json['resultat'] = $resultat; |
return $resultat_json; |
} |
} |
?> |
/tags/v0.1-20130830/services/modules/0.1/baseveg/syntaxons/SyntaxonsTous.php |
---|
New file |
0,0 → 1,149 |
<?php |
/** |
* |
* /syntaxons --> retourne l'ensemble des tuples de la table |
* /syntaxons?masque.catminat=#catminat&masque.niveau=#niveau etc.--> retourne les syntaxons répondant à ces critères |
* |
* * @package eflore-projets |
* @author mathilde Salthun-Lassalle |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt> |
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt> |
* @version 1.0 |
* @copyright 1999-2012 Tela Botanica (accueil@tela-botanica.org) |
* |
*/ |
class SyntaxonsTous extends SyntaxonsCommun { |
function __construct(Conteneur $conteneur) { |
parent::__construct($conteneur); |
$this->champs_recherches = 'cle, code_catminat, syntaxon, code_fixe_nom, code_natura_2000, niveau '; |
} |
public function consulter($ressources, $parametres) { |
$this->ressources = $ressources; |
$this->parametres = $parametres; |
$this->traiterParametres(); |
$this->definirTables(); |
$resultats = null; |
foreach ($this->table_version as $version) { |
$this->table = $version; |
$requete = $this->assemblerLaRequete(); |
$resultat = $this->Bdd->recupererTous($requete); |
$versionResultat = $this->traiterResultat($resultat); |
if (count($this->table_version) > 1) { |
$resultats[$version] = $versionResultat; |
} else { |
$resultats = $versionResultat; |
} |
} |
return $resultats; |
} |
//+-------------------------------------traitement des ressources et des paramètres----------------------------------------+// |
public function traiterParametres() { |
if (isset($this->parametres) && !empty($this->parametres) ) { |
foreach ($this->parametres as $param => $valeur) { |
switch ($param) { |
case 'navigation.depart' : |
$this->definirNavigationDepart($valeur); |
break; |
case 'navigation.limite' : |
$this->definirNavigationLimite($valeur); |
break; |
case 'version.projet' : |
$this->traiterVersion($valeur); |
break; |
case 'masque.catminat' : |
$this->traiterCatminat($valeur); |
break; |
case 'masque.niveau' : |
$this->traiterNiveau($valeur); |
break; |
case 'masque.retenu' : |
$this->traiterRetenu($valeur); |
break; |
case 'masque.fixe' : |
$this->requete_condition[] = ' code_fixe_nom = \''.$valeur.'\' '; |
break; |
case 'retour.champs' : |
$this->champs_recherches .= ','.$valeur.' '; |
break; |
default : |
$e = 'Erreur dans les parametres de votre requête : </br> Le paramètre " ' |
.$param.' " n\'existe pas.'; |
$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e); break; |
} |
} |
} |
} |
public function traiterRetenu($valeur) { |
$valeur = trim($valeur); |
if( $valeur == 'true') { |
$this->requete_condition[] = ' niveau NOT LIKE \'syn%\' '; |
} elseif ( $valeur == 'false') { |
$this->requete_condition[] = ' niveau LIKE \'syn%\' '; |
} |
} |
public function traiterCatminat($valeur) { |
$valeur = trim($valeur); |
$valeur = str_replace('-', '/', $valeur); |
$this->requete_condition[] = ' code_catminat = '.$this->getBdd()->proteger($valeur).''; |
} |
public function traiterNiveau($valeur) { |
$valeur = strtoupper(trim($valeur)); |
if (in_array($valeur,$this->niv)) { |
$this->requete_condition[] = ' niveau = '.$this->getBdd()->proteger($valeur).''; |
//$this->requete_condition[] = ' code_catminat = '.$this->catminat.''; |
} else { |
$e = "Erreur : valeur inconnue pour masque.niveau." |
." valeurs possibles : ALL|ORD|CLA|SUBCLA|SUBORD|SUBALL|ASS|SUBASS|BC|DC|GRPT"; |
throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE); |
} |
} |
//+--------------------------formatages de resultats -------------------------------------------+ |
public function retournerResultatFormate($resultat) { |
$resultat_json = array(); |
$resultat_json['entete'] = $this->ajouterEnteteResultat(); |
foreach ($resultat as $cle => $res) { |
$resultat[$cle]['href'] = $this->ajouterHref('syntaxons','cle:'.$res['cle']); |
$resultat[$cle] = array_merge($resultat[$cle],$this->traiterOntologieNiveau($res['niveau'])); |
unset($resultat[$cle]['niveau']); |
} |
$resultat_json['resultat'] = $resultat; |
return $resultat_json; |
} |
public function ajouterEnteteResultat() { |
$entete['depart'] = $this->limite_requete['depart']; |
$entete['limite'] = $this->limite_requete['limite']; |
$entete['total'] = $this->total_resultat; |
$entete['version'] = $this->version_projet; |
$ressources = (empty($this->ressources)) ? '/syntaxons' : '/syntaxons/' ; |
$url = $this->formulerUrl($this->total_resultat, $ressources.implode('/',$this->ressources)); |
if (isset($url['precedent']) && $url['precedent'] != '') { |
$entete['href.precedent'] = $url['precedent']; |
} |
if (isset($url['suivant']) && $url['suivant'] != '') { |
$entete['href.suivant'] = $url['suivant']; |
} |
return $entete; |
} |
} |
?> |
/tags/v0.1-20130830/services/modules/0.1/baseveg/syntaxons/SyntaxonsRelation.php |
---|
New file |
0,0 → 1,256 |
<?php |
/** |
* |
* syntaxons/relations -> retourne toutes les relations d'un syntaxon en fonction du numéro catminat |
* |
* /syntaxons/catminat:#code_catminat/relations/niveaux_sup --> retourne les niveaux supérieurs d'un syntaxon |
* /syntaxons/catminat:#code_catminat/relations/synonymie --> retourne tous les synonymes pour un code catminat |
* |
* @package eflore-projets |
* @author mathilde Salthun-Lassalle |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt> |
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt> |
* @version 1.0 |
* @copyright 1999-2012 Tela Botanica (accueil@tela-botanica.org) |
* |
*/ |
class SyntaxonsRelation extends SyntaxonsCommun{ |
public function consulter($ressources, $parametres) { |
$this->ressources = $ressources; |
$this->parametres = $parametres; |
$this->traiterRessources(); |
$this->traiterParametres(); |
$this->definirTables(); |
$resultats = null; |
$requete = ''; |
foreach ($this->table_version as $version) { |
$this->table = $version; |
$requete = $this->assemblerLaRequete(); |
$resultat = $this->Bdd->recupererTous($requete); |
$versionResultat = $this->traiterResultat($resultat, $this->version_projet); |
if (count($this->table_version) > 1) { |
$resultats[$version] = $versionResultat; |
} else { |
$resultats = $versionResultat; |
} |
} |
return $resultats; |
} |
function __construct(Conteneur $conteneur) { |
parent::__construct($conteneur); |
$this->champs_recherches = 'cle, code_catminat, syntaxon, code_fixe_nom, code_natura_2000, niveau '; |
} |
//surchargée car le web-service est appelé par SyntaxonsRelationsToutes. |
//ne doit pas renvoyer une erreur mais un résultat vide. |
public function traiterResultat($resultat, $version) { |
$versionResultat = null; |
if ($resultat == '') { |
$message = 'La requête SQL formée comporte une erreur!'; |
$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE; |
throw new Exception($message, $code); |
} elseif ($resultat) { |
$versionResultat = $this->retournerResultatFormate($resultat); |
} else { |
$versionResultat = 'Les données recherchées sont introuvables'; |
} |
return $versionResultat; |
} |
//+-------------------------------------traitement des ressources et des paramètres----------------------------------------+// |
public function traiterRessources() { |
$catminat=''; |
if(preg_match("/catminat:(([0-9]{2}\-$)|([0-9]{2}\-[0-9]\.$)|([0-9]{2}\-(?:[0-9]\.){1,5}[0-9]$)|([0-9]{2}\-(?:[0-9]\.){4,5}[0-9]\-[0-9]+(?:bis|ter|quater){0,1}$))/",$this->ressources[0], $retour)) { |
$this->catminat = str_replace('-', '/',$retour[1]); |
$this->traiterRessourcesRelations(); |
}elseif ($this->ressources[0]) { |
$e = 'Erreur dans l\'url de votre requête : </br> La ressource demandée n\'existe pas.'; |
throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE); |
} |
return $catminat; |
} |
public function traiterRessourcesRelations(){ |
if($this->ressources[1] == 'relations') { |
switch($this->ressources[2]) { |
case 'niveaux-sup': |
$catminat_sup = $this->chercherCatminatSuperieurs(); |
if (!empty($catminat_sup)) { |
if (count($catminat_sup)>1) { |
$this->requete_condition[] = ' code_catminat in ('.implode(',',$catminat_sup).')'; |
} else { |
$this->requete_condition[] = ' code_catminat = '.$catminat_sup[0].' '; |
} |
} else { |
$e = 'Erreur dans l\'url de votre requête : le code catminat est trop court.'; |
throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE); |
} |
break; |
case 'synonymie' : |
$this->requete_condition[] = " niveau LIKE 'syn%' and code_catminat = '".$this->catminat."' " ; |
break; |
default : |
$e = 'Erreur dans l\'url de votre requête : </br> La ressource demandée n\'existe pas.'; |
throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE); |
} |
} else { |
$e = 'Erreur dans l\'url de votre requête : </br> La ressource demandée n\'existe pas.'; |
throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE); |
} |
} |
//ne renvoie que les supérieurs ( sans la valeur initiale ) |
public function chercherCatminatSuperieurs() { |
$catminat_sup = array(); |
$catminat_slash = explode('/',$this->catminat); |
$catminat_slash = $this->enleverValeursVides($catminat_slash); |
$taille_slash = count($catminat_slash); |
if ($taille_slash > 1) { |
$catminat_sup[0] = "'".array_shift($catminat_slash)."/'"; |
$niveaux = array_shift($catminat_slash); |
$unites = explode('.',trim($niveaux)); //attention explode peut renvoyer des cases vides (voir la doc php) |
$unites = $this->enleverValeursVides($unites); |
$taille = ($taille_slash == 3) ? count($unites) : count($unites)-1 ; |
for ($i=0; $i< $taille ; $i++) { |
$sup = "'".trim($catminat_sup[$i],"'"); |
if ($i == 0) { |
$sup .= $unites[$i].".'"; |
} elseif ($i == 1) { |
$sup .= $unites[$i]."'"; |
} else { |
$sup .= ".".$unites[$i]."'"; |
} |
$catminat_sup[] = $sup; |
} |
} |
return $catminat_sup; |
} |
public function traiterParametres() { |
if (isset($this->parametres) && !empty($this->parametres) ) { |
foreach ($this->parametres as $param => $valeur) { |
switch ($param) { |
case 'navigation.depart' : |
$this->definirNavigationDepart($valeur); |
break; |
case 'navigation.limite' : |
$this->definirNavigationLimite($valeur); |
break; |
case 'version.projet' : |
$this->traiterVersion($valeur); |
break; |
case 'masque.catminat' : |
$this->traiterCatminat($valeur); |
break; |
case 'masque.niveau' : |
$this->traiterNiveau($valeur); |
break; |
case 'masque.fixe': |
$this->requete_condition[] = ' code_fixe_nom = \''.$valeur.'\' '; |
break; |
case 'retour.champs' : |
$this->champs_recherches .= ','.$valeur.' '; |
break; |
case 'masque.retenu' : |
$this->traiterRetenu($valeur); |
break; |
default : |
$e = 'Erreur dans les parametres de votre requête : </br> Le paramètre " ' |
.$param.' " n\'existe pas.'; |
$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e); break; |
} |
} |
} |
} |
public function traiterRetenu($valeur) { |
if ($this->ressources[2] == 'niveaux-sup') { |
$valeur = trim($valeur); |
if( $valeur == 'true') { |
$this->requete_condition[] = ' niveau NOT LIKE \'syn%\' '; |
} elseif ( $valeur == 'false') { |
$this->requete_condition[] = ' niveau LIKE \'syn%\' '; |
} |
} else { |
$e = 'Erreur dans les parametres de votre requête : </br> Le paramètre " masque.retenu " n\'existe pas.'; |
$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e); |
} |
} |
public function traiterCatminat($valeur) { |
if ($this->ressources[2] == 'niveaux-sup') { |
$valeur = trim($valeur); |
$valeur = str_replace('-', '/', $valeur); |
$this->requete_condition[] = ' code_catminat = '.$this->getBdd()->proteger($valeur).''; |
} else { |
$e = 'Erreur dans les parametres de votre requête : </br> Le paramètre " masque.catminat " n\'existe pas.'; |
$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e); break; |
} |
} |
public function traiterNiveau($valeur) { |
if ($this->ressources[2] == 'niveaux-sup') { |
$valeur = strtoupper(trim($valeur)); |
if (in_array($valeur,$this->niv)) { |
$this->requete_condition[] = ' niveau = '.$this->getBdd()->proteger($valeur).''; |
} else { |
$e = "Erreur : valeur inconnue pour masque.niveau." |
." valeurs possibles : ALL|ORD|CLA|SUBCLA|SUBORD|SUBALL|ASS|SUBASS|BC|DC|GRPT"; |
throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE); |
} |
} else { |
$e = 'Erreur dans les parametres de votre requête : </br> Le paramètre " masque.niveau " n\'existe pas.'; |
$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e); |
} |
} |
//+--------------------------formatages de resultats -------------------------------------------+// |
public function retournerResultatFormate($resultat) { |
$resultat_json = array(); |
$resultat_json['entete'] = $this->ajouterEnteteResultat(); |
foreach ($resultat as $cle => $res) { |
$resultat[$cle]['href'] = $this->ajouterHref('syntaxons','cle:'.$res['cle']); |
$resultat[$cle] = array_merge($resultat[$cle],$this->traiterOntologieNiveau($res['niveau'])); |
unset($resultat[$cle]['niveau']); |
} |
$resultat_json['resultat'] = $resultat; |
return $resultat_json; |
} |
public function ajouterEnteteResultat() { |
$entete['depart'] = $this->limite_requete['depart']; |
$entete['limite'] = $this->limite_requete['limite']; |
$entete['total'] = $this->total_resultat; |
$entete['version'] = $this->version_projet; |
$ressources = (empty($this->ressources)) ? '/syntaxons' : '/syntaxons/' ; |
$url = $this->formulerUrl($this->total_resultat, $ressources.implode('/',$this->ressources)); |
if (isset($url['precedent']) && $url['precedent'] != '') { |
$entete['href.precedent'] = $url['precedent']; |
} |
if (isset($url['suivant']) && $url['suivant'] != '') { |
$entete['href.suivant'] = $url['suivant']; |
} |
return $entete; |
} |
} |
?> |
/tags/v0.1-20130830/services/modules/0.1/baseveg/syntaxons/SyntaxonsCommun.php |
---|
New file |
0,0 → 1,205 |
<?php |
/** |
* |
* fonctions et paramètres communs aux traitement des syntaxons |
* - traitement de l'ontologie |
* - fonction utiles pour les paramètres de configuration entre autres |
* - traitement des tables et de leur version |
* - traitement de la requête |
* |
* @package eflore-projets |
* @author mathilde Salthun-Lassalle |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt> |
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt> |
* @version 1.0 |
* @copyright 1999-2012 Tela Botanica (accueil@tela-botanica.org) |
*/ |
class SyntaxonsCommun extends Commun { |
protected $table = ""; |
protected $format_reponse = 'syntaxons'; |
protected $serviceNom = 'syntaxons'; |
protected $Bdd; |
protected $syn; |
protected $niv; |
protected $limite_requete = array('depart' => 0, 'limite' => 100); |
protected $requete_condition = ''; |
protected $total_resultat; |
protected $champs_recherches = ' * '; |
protected $table_version; |
protected $version_projet = '+' ; |
public function __construct(Conteneur $conteneur) { |
$this->Bdd = $conteneur->getBdd(); |
$this->syn = $this->getParametreTableauSpe('synonymes'); |
$this->niv = $this->getParametreTableauSpe('niveaux'); |
} |
//+---------------------------------------------------outils------------------------------------------------// |
protected function getParametreTableauSpe($cle) { |
$tableau = array(); |
$parametre = Config::get($cle); |
if (empty($parametre) === false) { |
$tableauPartiel = explode(',', $parametre); |
$tableauPartiel = array_map('trim', $tableauPartiel); |
foreach ($tableauPartiel as $champ) { |
$tableau[] = trim($champ,"'");// spécificité pour le = ? des synonymes |
} |
} |
return $tableau; |
} |
//la fonction php array_filters ne marche pas sur le serveur |
protected function enleverValeursVides($tableau) { |
$tab = array(); |
foreach ($tableau as $cle => $valeur) { |
if ($valeur != '' && is_int($cle)) { |
$tab[] = $valeur; |
} elseif ($valeur != '' && is_string($cle)) { |
$tab[$cle] = $valeur; |
} |
} |
return $tab; |
} |
//+++------------------------------traitement des versions----------------------------------------++ |
protected function traiterVersion($valeur) { |
if (preg_match('/^[0-9]+(?:[._][0-9]+)*$/', $valeur) || $valeur == '+' || $valeur == '*') { |
$this->version_projet = $valeur; |
} else { |
$e = "Erreur : La version est inconnue."; |
throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE); |
} |
} |
protected function definirTables() { |
$table_num_version = $this->recupererVersionDisponible(); |
$prefixe_table = config::get('bdd_table'); |
if ( in_array($this->version_projet,$table_num_version) ) { |
$this->table_version[] = $prefixe_table.'_v'.$this->version_projet; |
} elseif ($this->version_projet == '+') { |
$derniere_version = $table_num_version[count($table_num_version) - 1]; |
$this->table_version[] = $prefixe_table.'_v'.str_replace('.', '_', $derniere_version); |
} elseif ($this->version_projet == '*') { |
foreach ($table_num_version as $num_version) { |
$this->table_version[] = $prefixe_table.'_v'.str_replace('.', '_', $num_version); |
} |
} else { |
$e = "Erreur : La version est inconnue."; |
throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE); |
} |
} |
//+------------------------------------ontologies----------------------------------------------------+ |
protected function recupererOntologiesNiveau($valeur, $code){ |
$ontologie = array(); |
$url = Config::get('url_service_base').Config::get('nom_projet'). |
'/ontologies/'.$code.':'.urlencode(urlencode($valeur)); |
$val = $this->consulterHref($url); |
$ontologie['niveau.code'] = $valeur; |
$ontologie['niveau.libelle'] = $val->nom; |
$ontologie['niveau.href'] = $url; |
return $ontologie; |
} |
protected function recupererOntologiesNiveauSyn($niveau){ |
$ontologie = array(); |
$synonymes = explode(' ',$niveau[1]); |
$libelle = array(); |
$detail = array(); |
foreach ($synonymes as $syn) { |
if ($syn == '=') { |
$syn = 'equi'; |
} elseif ($syn == '= ?') { |
$syn = 'prob'; |
} |
if ($syn != '' && $syn != '?') { |
$detail[] = $this->recupererOntologiesNiveau($syn, 'syn'); |
$dernier = end($detail); |
$libelle[] = $dernier['niveau.libelle'].' '; |
} |
} |
$ontologie['niveau.code'] = $niveau[0]; |
$ontologie['niveau.libelle'] = 'synonyme '.implode(' - ',$libelle); |
if ($niveau[2]) { |
$ontologie['niveau.libelle'] .= ' '.$niveau[2]; |
} |
$ontologie['niveau.detail'] = $detail; |
return $ontologie; |
} |
protected function traiterOntologieNiveau($niveau) { |
$ontologie = array(); |
if ( preg_match('/syn {0,1}(['.implode('',$this->syn).']*)( *\[.+\])*/',$niveau,$retour)) { |
$ontologie = $this->recupererOntologiesNiveauSyn($retour); |
} else { |
$ontologie = $this->recupererOntologiesNiveau($niveau, 'UP'); |
} |
return $ontologie; |
} |
//+--------------------------FONCTIONS D'ASSEMBLAGE DE LA REQUETE-------------------------------------------+ |
protected function assemblerLaRequete() { |
$requete = ' SELECT '.$this->champs_recherches.' FROM '.$this->table.' ' |
.$this->retournerRequeteCondition().' '.$this->delimiterResultatsRequete(); |
return $requete; |
} |
protected function calculerTotalResultat() { |
$requete = 'SELECT count(*) as nombre FROM '.$this->table.' '.$this->retournerRequeteCondition(); |
$res = $this->getBdd()->recuperer($requete); |
if ($res) { |
$this->total_resultat = $res['nombre']; |
} else { |
$this->total_resultat = 0; |
$e = 'Données introuvables dans la base'; |
$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $e); |
} |
} |
protected function delimiterResultatsRequete() { |
$this->calculerTotalResultat(); |
$requete_limite = ''; |
if (($this->limite_requete['depart'] <= $this->total_resultat) ){ |
if (($this->limite_requete['limite'] + $this->limite_requete['depart'] ) |
< $this->total_resultat ){ |
$requete_limite = 'LIMIT '.$this->limite_requete['depart'].', ' |
.$this->limite_requete['limite']; |
} |
} else { |
$e = "Erreur : la valeur pour le paramètre navigation.départ est supérieure". |
" au nombre total de résultats."; |
throw new Exception($e, RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE); |
} |
return $requete_limite; |
} |
protected function retournerRequeteCondition() { |
$condition = ''; |
if (empty($this->requete_condition) == false) { |
$condition = ' WHERE '.implode(' AND ', $this->requete_condition); |
} |
return $condition; |
} |
} |
?> |
/tags/v0.1-20130830/services/modules/0.1/baseveg/Ontologies.php |
---|
New file |
0,0 → 1,347 |
<?php |
/** |
Classe Ontologies.php fournit des informations sur ensemble structuré des termes et concepts représentant les éléments |
* d'un domaine de connaissances pour le projet baseveg. |
*/ |
class BasevegOntologies extends Commun { |
protected $requete_condition = null; |
/** Permet de stocker la requete formulée: /ontologies | /ontologies/#id | /ontologies/#id/champ | /ontologies/#id/relations */ |
protected $format_reponse = 'ontologies'; |
/** Permet de stocker les limite de la requete SQL (par défaut seul les 100 premiers résultats seront retournés). |
* Stocke également les valeurs des paramètres navigation.depart et navigation.limite passés dans la requete*/ |
protected $limite_requete = array( 'depart' => 0, 'limite' => 100); |
/** Stocke le nombre total de résultats de la requete principale. Est calculée lors de l'assemblage de la requete */ |
protected $total_resultat; |
protected $retour_format = 'max'; |
public function consulter($ressources, $parametres) { |
$this->ressources = $ressources; |
$this->parametres = $parametres; |
$this->service = 'ontologies'; |
$this->traiterParametres(); |
$resultats = ''; |
$this->table = 'baseveg_ontologies'; |
$this->recupererNomChamp($this->table); |
$this->traiterRessources(); |
$requete = $this->assemblerLaRequete(); |
$resultat = $this->getBdd()->recupererTous($requete); |
$versionResultat = $this->traiterResultat($resultat, ''); |
$resultats = $versionResultat; |
return $resultats; |
} |
public function traiterParametres() { |
if (isset($this->parametres) && !empty($this->parametres)) { |
foreach ($this->parametres as $param => $valeur) { |
switch ($param) { |
case 'masque' : $this->ajouterLeFiltreMasque('masque', $valeur); break; |
case 'masque.code' : $this->ajouterLeFiltreMasque('code', $valeur); break; |
case 'masque.nom' : $this->ajouterLeFiltreMasque('nom', $valeur); break; |
case 'masque.description' : $this->ajouterLeFiltreMasque('description', $valeur); break; |
case 'retour.format' : $this->retour_format = $valeur; break; |
case 'navigation.depart' : $this->limite_requete['depart'] = $valeur; break; |
case 'navigation.limite' : $this->limite_requete['limite'] = $valeur; break; |
default : |
$e = 'Erreur dans les parametres de recherche de votre requête : </br> Le paramètre " ' |
.$param.' " n\'existe pas.'; |
$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e); break; |
} |
} |
} |
} |
public function ajouterLeFiltreMasque($nom_champ, $valeur) { |
if ($nom_champ == 'code') { |
$this->requete_condition[] = $nom_champ.' = '.$this->getBdd()->proteger($valeur); |
} else { |
if (isset($this->parametres['recherche']) && $this->parametres['recherche'] == 'floue') { |
if ($nom_champ == 'masque') { |
$this->requete_condition[] = '( code = '.$this->getBdd()->proteger($valeur) |
.' OR ( SOUNDEX(nom) = SOUNDEX(\''.$valeur.'\')' |
.' OR SOUNDEX(REVERSE(nom)) = SOUNDEX(REVERSE(\''.$valeur.'\')) ' |
.') OR ( SOUNDEX(description) = SOUNDEX(\''.$valeur.'\')' |
.' OR SOUNDEX(REVERSE(description)) = SOUNDEX(REVERSE(\''.$valeur.'\')) ))'; |
} else { |
$this->requete_condition[] = '(SOUNDEX('.$nom_champ.') = SOUNDEX(\''.$valeur.'\')' |
.' OR SOUNDEX(REVERSE('.$nom_champ.')) = SOUNDEX(REVERSE(\''.$valeur.'\')))'; |
} |
} else { |
if (isset($this->parametres['recherche']) && $this->parametres['recherche'] == 'etendue') { |
$valeur = str_replace(' ','%', $valeur); |
$valeur .= '%'; |
} |
if ($nom_champ == 'masque') { |
$this->requete_condition[] = '(code = '.$this->getBdd()->proteger($valeur) |
.' OR nom LIKE '.$this->getBdd()->proteger($valeur) |
.' OR description LIKE '.$this->getBdd()->proteger($valeur).')'; |
} else { |
$this->requete_condition[] = $nom_champ.' LIKE '.$this->getBdd()->proteger($valeur); |
} |
} |
} |
} |
public function traiterRessources() { |
if (isset($this->ressources) && !empty($this->ressources)) { |
if (isset($this->ressources[0]) && !empty($this->ressources[0])) { |
//requete = /ontologies/#id |
$this->traiterRessourceId(); |
if (isset($this->ressources[1]) && !empty($this->ressources[1])) { |
//requete = /ontologies/#id/relations |
$this->traiterRessourceRelations(); |
} |
} |
} |
} |
public function traiterRessourceId() { |
$this->requete_condition = array(); |
//requete : /ontologies/#id (ex : /ontologies/7) |
if (is_numeric($this->ressources[0])) { |
$this->requete_condition[] = ' id = '.$this->getBdd()->proteger($this->ressources[0]); |
$this->format_reponse .= '/id'; |
//requete : /ontologies/#classe:#code (ex : /ontologies/rangTaxo:290) |
} elseif (strrpos($this->ressources[0], ':') !== false) { |
$this->format_reponse .= '/id'; |
preg_match('/^([^:]+):([^:]+)$/', $this->ressources[0], $match); |
$this->requete_condition[] = |
' id = (SELECT id FROM '.$this->table.' WHERE code = BINARY '.$this->getBdd()->proteger($match[2]) |
.' AND classe_id = (SELECT id FROM '.$this->table.' WHERE code = BINARY '.$this->getBdd()->proteger($match[1]).'))'; |
} else { |
$e = 'Erreur dans les paramètres de recherche de votre requête : </br> Le paramètre " ' |
.$this->ressources[0].' " n\'existe pas.'; |
$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e); |
} |
} |
public function traiterRessourceRelations() { |
//requete = /ontologies/#id/relations : |
if ($this->ressources[1] == 'relations') { |
$this->format_reponse .= '/relations'; |
$this->requete_condition = array('classe_id = (SELECT classe_id FROM '.$this->table.' WHERE ' |
.implode(' AND ', $this->requete_condition).')'); |
} |
} |
//+--------------------------FONCTION ASSEMBLAGE DE LA REQUETE-------------------------------------------+ |
public function assemblerLaRequete() { |
$requete = ' SELECT '.$this->formerRequeteChamp(). |
' FROM '.$this->table |
.$this->retournerRequeteCondition() |
.$this->formerRequeteLimite(); //print_r($requete); |
return $requete; |
} |
public function formerRequeteChamp() { |
$champ[] = 'id'; |
if ($this->format_reponse == 'ontologies') { |
$champ[] = 'nom, code '; |
} |
if (isset($this->parametres['retour_champs']) || $this->format_reponse == 'ontologies/id/champs') { |
$champs_recherches = explode(',', $this->parametres['retour_champs']); |
$champs_possibles = $this->rechercherChampsPossibles(); |
foreach ($champs_recherches as $champ_recherche) { |
if ($this->verifierValiditeChamp($champ_recherche)) { |
$champ[] = (preg_match('/classe/', $champ_recherche)) ? 'classe_id' : $champ_recherche; |
} |
} |
} |
if (count($champ) == 1) { |
$champ = array(' * '); |
} |
return implode(', ', $champ); |
} |
public function rechercherChampsPossibles() { |
$this->recupererNomChamp($this->table); |
$champs_possibles = $this->champs_table; |
$champs_possibles[] = 'classe.id'; |
$champs_possibles[] = 'classe'; |
$champs_possibles[] = 'classe.href'; |
return $champs_possibles; |
} |
public function verifierValiditeChamp($champ, $champs_possibles) { |
$validite = false; |
preg_match('/^([^.]+)(:?\.([^.]+))?$/', $champ, $match); |
if (in_array($match[1], $champs_possibles)) { |
$validite = true; |
} else { |
$champs = implode('</li><li>', $champs_possibles); |
$e = 'Erreur dans votre requête : </br> Le champ "'.$champ |
.'" n\'existe pas. Les champs disponibles sont : <li>'.$champs.'</li>'; |
$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e); |
} |
return $validite; |
} |
public function retournerRequeteCondition() { |
$condition = ''; |
if ($this->requete_condition !== null) { |
$condition = ' WHERE '.implode(' AND ', $this->requete_condition); |
} |
return $condition; |
} |
public function formerRequeteLimite() { |
$this->total_resultat = $this->recupererTotalResultat(); |
if (in_array($this->format_reponse , array('textes/id', 'textes/id/relations'))) { |
$this->requete_limite = ''; |
} elseif (($depart = $this->limite_requete['depart']) > ($this->total_resultat)) { |
$this->limite_requete['depart'] = |
(($this->total_resultat - $this->limite_requete['limite']) < 0) ? 0 : ($this->total_resultat - $this->limite_requete['limite']); |
$this->requete_limite = ' LIMIT '.$this->limite_requete['depart'].', '.$this->limite_requete['limite']; |
} else { |
$this->requete_limite = ' LIMIT '.$this->limite_requete['depart'].', '.$this->limite_requete['limite']; |
} |
return $this->requete_limite; |
} |
public function recupererTotalResultat() { |
//on récupère le nombre total de résultats de la requete (ex : le nombre d'id contenu dans la liste /ontologies) |
$requete = 'SELECT count(*) as nombre FROM '.$this->table.' ' |
.$this->retournerRequeteCondition(); |
$res = $this->getBdd()->recuperer($requete); |
if ($res) { |
$total = $res['nombre']; |
} else { |
$e = 'Données introuvables dans la base'; |
$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $e); |
Debug::printr($requete); |
} |
return $total; |
} |
//+------------------------------------------------------------------------------------------------------+ |
public function retournerResultatFormate($resultat) { |
// determine en fct du service appelé (/ontologies | /ontologies/#id | /ontologies/#id/champ | |
// /ontologies/#id/relations) le format du tableau à retourner. Encode en json |
switch ($this->format_reponse) { |
case 'ontologies' : $reponse = $this->formaterOntologies($resultat); break; |
case 'ontologies/id' : $reponse = $this->formaterOntologiesId($resultat[0]); break; |
case 'ontologies/id/relations' : $reponse = $this->formaterOntologiesIdRelations($resultat); break; |
default : break; |
} |
return $reponse; |
} |
public function formaterOntologies($resultat) { |
$this->ajouterEnteteResultat($resultat); |
$table_retour_json['entete'] = $this->ajouterEnteteResultat($resultat); |
if (isset($this->parametres['masque_code']) || isset($this->parametres['masque'])) { |
$resultat = $this->trierRechercheFloue($this->parametres['masque_code'], $resultat, 'code'); |
} elseif (isset($this->parametres['masque_nom'])) { |
$resultat = $this->trierRechercheFloue($this->parametres['masque_nom'], $resultat, 'nom'); |
} elseif (isset($this->parametres['masque_description'])) { |
$resultat = $this->trierRechercheFloue($this->parametres['masque_description'], $resultat, 'description'); |
} |
//on remplit la table $table_retour_json['resultat'] |
foreach ($resultat as $tab) { |
$num = $tab['id']; |
unset($tab['id']); |
foreach ($tab as $param => $valeur) { |
$resultat_json[$num][$param] = $valeur; |
} |
if ($this->retour_format == 'max') $resultat_json[$num]['href'] = $this->ajouterHref('ontologies', $num); |
} |
$table_retour_json['resultat'] = $resultat_json; |
return $table_retour_json; |
} |
public function ajouterEnteteResultat($resultat) { |
//on remplit la table $table_retour_json['entete'] |
$entete['depart'] = $this->limite_requete['depart']; |
$entete['limite'] = $this->limite_requete['limite']; |
$entete['total'] = $this->total_resultat; |
//formuler les urls |
$url = $this->formulerUrl($this->total_resultat, '/ontologies'); |
if (isset($url['precedent']) && $url['precedent'] != '') { $entete['href.precedent'] = $url['precedent']; } |
if (isset($url['suivant']) && $url['suivant'] != '') { $entete['href.suivant'] = $url['suivant']; } |
return $entete; |
} |
public function formaterOntologiesId($resultat) { |
$table_retour = array(); |
foreach ($resultat as $key => $valeur) { |
if ($valeur != '') { |
$table_retour = array_merge($table_retour, $this->afficherDonnees($key, $valeur)); |
} |
} |
return $table_retour; |
} |
public function afficherDonnees($champ, $valeur) { |
$retour[$champ] = $valeur; |
if ($this->retour_format == 'max') { |
if ($champ == 'classe_id') { |
unset($retour[$champ]); // remplacer par classe.id |
if ($valeur != "0") { // pas de parent |
if (isset($this->parametres['retour_champs'])) { |
switch ($this->parametres['retour_champs']) { |
case 'classe' : $retour['classe'] = $this->ajouterClasseCorrespondante($valeur); break; |
case 'classe.id' : $retour['classe.id'] = $valeur; break; |
case 'classe.href' : $retour['classe.href'] = $this->ajouterHref('ontologies', $valeur); break; |
case 'classe.*' : $retour['classe.id'] = $valeur; $retour['classe.href'] = $this->ajouterHref('ontologies', $valeur); break; |
} |
} else { |
$nom_classe = $this->ajouterClasseCorrespondante($valeur); |
if (isset($nom_classe)) $retour['classe'] = $nom_classe; |
$retour['classe.id'] = $valeur; |
$retour['classe.href'] = $this->ajouterHref('ontologies', $valeur); |
} |
} |
} |
} |
return $retour; |
} |
/** Recherche par interrogation de la base, le nom de la classe à partir de son identifiant (classe.id) */ |
public function ajouterClasseCorrespondante($classe_id) { |
$nom = null; |
if ($classe_id != 0) { |
$nom = ''; |
$req = 'SELECT nom FROM '.$this->table.' WHERE id = '.$this->getBdd()->proteger($classe_id); |
$res = $this->getBdd()->recuperer($req); |
if ($res) { |
$nom = $res['nom']; |
} else { |
$e = "Données introuvables dans la table $this->table"; |
$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $e); |
Debug::printr($req); |
} |
} |
return $nom; |
} |
public function formaterOntologiesIdRelations($resultat) { |
$retour = null; |
if ($resultat != '') { |
$retour['entete'] = $this->ajouterEnteteResultat($resultat); |
//on remplit la table $table_retour_json['resultat'] |
foreach ($resultat as $tab) { |
$num = $tab['id']; |
$retour['resultat'][$num]['nom'] = $tab['nom']; |
if ($this->retour_format == 'max') { |
$retour['resultat'][$num]['href'] = $this->ajouterHref('ontologies', $num); |
} |
} |
} |
return $retour; |
} |
} |
?> |
/tags/v0.1-20130830/services/modules/0.1/baseveg/Syntaxons.php |
---|
New file |
0,0 → 1,85 |
<?php |
/** |
* Classe Syntaxons.php permet de faire des requetes de baseveg autour du code CATMINAT ou des niveaux de syntaxons |
* Un syntaxon est une unité de végétation ( groupement ) |
* Cette classe analyse les ressources pour rediriger vers la classe du web service correpondant |
* |
* @see http://www.tela-botanica.org/wikini/eflore/wakka.php?wiki=EfloreApi01Syntaxons |
* |
* Encodage en entrée : utf8 |
* Encodage en sortie : utf8 |
* @package eflore-projets |
* @author Mathilde SALTHUN-LASSALLE <mathilde@tela-botanica.org> |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt> |
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt> |
* @version 1.0 |
* @copyright 1999-2012 Tela Botanica (accueil@tela-botanica.org) |
*/ |
class Syntaxons extends Commun {// héritage de commun à cause du cache ! |
private $sousService; |
public function consulter($ressources, $parametres) { |
spl_autoload_register(array($this, 'chargerSyntaxons')); |
$this->parametres = $parametres; |
$this->ressources = $ressources; |
$this->analyserRessources(); |
$resultat = $this->executerSousService(); |
return $resultat; |
} |
private function analyserRessources() { |
$nb_ressources = count($this->ressources); |
switch ($nb_ressources) { |
case 0 : // syntaxons/ |
$this->sousService = 'SyntaxonsTous'; |
break; |
case 1 : // syntaxons/#type_code:#code |
$this->sousService = 'SyntaxonsCode'; |
break; |
case 2 : // syntaxons/code catminat/relations |
$this->sousService = 'SyntaxonsRelationsToutes'; |
break; |
case 3 : // syntaxons/code catminat/relations /#type_relation |
$this->sousService = 'SyntaxonsRelation'; |
break; |
default: |
$message = 'Erreur dans l\'url de votre requête : </br> La ressource demandée n\'existe pas.'; |
$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE; |
throw new Exception($message, $code); |
break; |
} |
} |
private function executerSousService() { |
if (isset($this->sousService)) { |
$classe = $this->sousService; |
//require_once dirname(__FILE__).DS.'syntaxons'.DS.$classe.'.php'; |
$sousService = new $classe(new Conteneur()); |
$resultat = $sousService->consulter($this->ressources, $this->parametres); |
} else { |
$message = "L'analyse des ressources n'a pu aboutir à déterminer le sous service à executer."; |
$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE; |
throw new Exception($message, $code); |
} |
return $resultat; |
} |
private function chargerSyntaxons($classe) { |
$base = dirname(__FILE__).DS; |
$chemin = $base.DS.'syntaxons'.DS; |
$fichierATester = $chemin.$classe.'.php'; |
if (file_exists($fichierATester)) { |
include_once $fichierATester; |
return null; |
} |
} |
} |
?> |
/tags/v0.1-20130830/services/modules/0.1/eflore/cartes/GeneralFormateur.php |
---|
New file |
0,0 → 1,309 |
<?php |
class GeneralFormateur implements Formateur { |
public $dest_map = array(); |
public $img = array(); |
public function __construct($info) { |
$this->info = $info; |
} |
public function img() { |
$qualite = 9; |
imagepng($this->img['general'], Config::get('cache_stockageChemin').$this->dest_map['general'], $qualite); |
} |
//+----------------------------------------------------------------------------------------------------------------+ |
// Méthodes d'accès aux objets du Framework |
/** |
* Méthode de connection à la base de données sur demande. |
* Tous les services web n'ont pas besoin de s'y connecter. |
*/ |
protected function getBdd() { |
if (! isset($this->Bdd)) { |
$this->Bdd = new Bdd(); |
} |
return $this->Bdd; |
} |
public function definirCouleurs() { |
// green |
$couleur['green'] = imagecolorallocate($this->img['general'], 0, 255, 0); |
// red |
$couleur['red'] = imagecolorallocate($this->img['general'], 255, 0, 0); |
// blue |
$couleur['blue'] = imagecolorallocate($this->img['general'], 0, 0, 255); |
// purple |
$couleur['purple'] = imagecolorallocate($this->img['general'], 255, 0, 255); |
// black |
$couleur['black'] = imagecolorallocate($this->img['general'], 0, 0, 0); |
return $couleur; |
} |
public function initialiserImage() { |
// Nom du fichier image en sortie |
$this->cheminCartesBase = Config::get('Cartes.chemin'); |
$this->dest_map['general'] = 'nt'.$this->info['nt'].'_'.$this->info['src_map']; |
$this->img['general'] = imagecreatefrompng($this->cheminCartesBase.$this->info['src_map']); |
} |
public function testerParametresProjets() { |
$test = true; |
return $test; |
} |
public function chargerDonnees() { |
// Recherche nom correspondant au numero nomenclatural en cours (pour etablir le lien avec les donnees moissonnes). |
// Récuperation donnée inventaire |
/* |
* Les donnees issues du carnet en ligne sont recuperes directement, sans passer par le mecanisme de moissonage car : |
* - pour l'instant le service de moissonage n'est pas automatise et donc il y a un decalage dans l'affichage des donnees transmises |
* - la table contenant les donnees moissonees ne reprend pas tous les champs necessaires a l'exploitation par eflore (notamment pas de code localite, pas d'identifiant libre) |
* |
* A terme, utilser vraiment le moissonage, y compris pour les donnees issues du CEL, en utilisant ABCD et en modifiant le programme d'harvesting. |
*/ |
if ($this->info['nt'] == 0) { |
$inventoriesCel = array(); |
} else { |
$queryCel = "SELECT 'cel' as collection_code, zone_geo as location, REPLACE(ce_zone_geo,'INSEE-C:','') as id_location, date_observation, ". |
" longitude as y_utm, latitude as x_utm, geodatum as sector, courriel_utilisateur as identifiant FROM tb_cel.cel_obs ". |
"WHERE nt = '".$this->info['nt']."' ". |
" AND transmission = 1"; |
$inventoriesCel = $this->getBdd()->recupererTous($queryCel); |
} |
// Recuperation des donnees de moissonage |
// Collection code = 'flore' (Cenlr) |
if ($this->info['nom'] == '') { |
$inventoriesCenlr = array(); |
} else { |
$queryCenlr = "SELECT collection_code, locality as location, county as id_location, ". |
" STR_TO_DATE(concat(year, '/',month, '/',day), '%Y/%m/%d') as date_observation, latitude as y_utm , ". |
" longitude as x_utm , max_altitude as sector, collector_name as identifiant ". |
"FROM tb_hit_indexation.raw_occurrence_record ". |
"WHERE scientific_name = ".$this->getBdd()->proteger($this->info['nom']). |
" AND collection_code = 'flore' ". |
" AND (deleted IS NULL OR deleted = '0000-00-00 00:00:00')"; |
$inventoriesCenlr = $this->getBdd()->recupererTous($queryCenlr); |
} |
// Collection code = 'FLORE - VAR' (Cbnmed) |
/*$queryCbnmed = "SELECT collection_code, locality as location, county as id_location, ". |
" STR_TO_DATE(concat(ifnull(year,0),'/', ifnull(month,0), '/',ifnull(day,0)), '%Y/%m/%d') as date_observation, ". |
" latitude as y_utm , longitude as x_utm , max_altitude as sector, collector_name as identifiant ". |
"FROM tb_hit_indexation.raw_occurrence_record ". |
"WHERE scientific_name = ".$this->getBdd()->proteger($this->info['nom']). |
" AND collection_code='FLORE - VAR' ". |
" AND (deleted IS NULL OR deleted = '0000-00-00 00:00:00')"; |
$inventoriesCbnmed = $this->getBdd()->recupererTous($queryCbnmed);*/ |
// Collection code = 'sophy' |
if ($this->info['nom_ss_auteur'] == '') { |
$inventoriesSophy = array(); |
} else { |
$querySophy = "SELECT 'sophy' as collection_code, lieu_station_nom as location, lieu_commune_code_insee as id_location, ". |
" observation_date as date_observation, lieu_station_utm_est as x_utm , ". |
" lieu_station_utm_nord as y_utm , lieu_station_utm_zone as sector, observateur_nom_complet as identifiant ". |
"FROM sophy_tapir ". |
"WHERE nom_scientifique_complet = ".$this->getBdd()->proteger($this->info['nom_ss_auteur']); |
$inventoriesSophy = $this->getBdd()->recupererTous($querySophy); |
} |
return array_merge($inventoriesCel, $inventoriesCenlr, $inventoriesSophy); //$inventoriesCbnmed, |
} |
public function dessinerPoint($text, $merge, $couleurs) { |
$usemap['general'] = ''; |
foreach ($text as $coord => $origines ) { |
foreach ($origines as $origine => $maptext ) { |
$maptext = preg_replace("/\"/", "\'", $maptext); |
list($x,$y) = explode('|', $coord); |
$tpl_area = '<area shape="%s" alt="" class="tooltip" coords="%s" title="%s"/>'; |
$rayon = 2; |
$type = 'circle'; |
$coords = "$x,$y,5"; |
$on_mouseover = "this.ttBgColor='#99C242';this.ttFontColor='#000000';this.T_OFFSETX=-200;this.T_OFFSETY=-50;this.T_STICKY=1;return escape('$maptext')"; |
if (isset($merge[$coord]) && $merge[$coord]) { |
imagefilledrectangle($this->img['general'], ($x - $rayon), ($y - $rayon), ($x + $rayon), ($y + $rayon), $couleurs['black']); |
} elseif (isset ($text[$coord]['cel']) && ($text[$coord]['cel'])) { |
imagefilledrectangle($this->img['general'], ($x - $rayon), ($y - $rayon), ($x + $rayon), ($y + $rayon), $couleurs['green']); |
} elseif (isset ($text[$coord]['flore']) && ($text[$coord]['flore'])) { |
imagefilledrectangle($this->img['general'], ($x - $rayon), ($y - $rayon), ($x + $rayon), ($y + $rayon), $couleurs['red']); |
}/* elseif (isset ($text[$coord]['FLORE - VAR']) && ($text[$coord]['FLORE - VAR'])) { |
imagefilledrectangle($this->img['general'], ($x - $rayon), ($y - $rayon), ($x + $rayon), ($y + $rayon), $couleurs['blue']); |
}*/ elseif (isset ($text[$coord]['sophy']) && ($text[$coord]['sophy'])) { |
imagefilledrectangle($this->img['general'], ($x - $rayon), ($y - $rayon), ($x + $rayon), ($y + $rayon), $couleurs['purple']); |
} |
$usemap['general'] = $usemap['general'].sprintf($tpl_area, $type, $coords, $maptext); |
} |
} |
return $usemap; |
} |
public function formaterCartes($usemap) { |
$retour = Config::get('Cartes.cel_dst').$this->dest_map['general']; |
if ($this->info['retour'] == self::MIME_MAP) { |
$retour = "<img src=\"".$retour."\" style=\"border:none; ". |
"cursor:crosshair\" alt=\"\" usemap=\"#themap\" /><br />\n". |
"<map name=\"themap\" id=\"themap\">".utf8_encode($usemap['general'])."</map>"; |
} |
return $retour; |
} |
//+----------------------------------------------------------------------------------------------------------------+ |
// sous fonction de calculer répartition |
public function chercherVille($inventory, $tab_code_insee = array()) { |
$location_protege = $this->getBdd()->proteger($inventory['location']); |
$id_location_protege = '"'.$inventory['id_location'].'"'; |
$utm = array(); |
if ($inventory['collection_code'] == 'FLORE - VAR') { |
if (isset($tab_code_insee[$location_protege])) { |
$utm = array(0 => $tab_code_insee[$location_protege]); |
} |
} elseif ($inventory['collection_code'] == 'sophy') { |
if (strpos($inventory['id_location'], '20') === 0) { |
$a = str_replace('20', '2A', $inventory['id_location']); |
if (isset($tab_code_insee[$a])) { |
$utm = array(0 => $tab_code_insee[$a]); |
} else { |
$b = str_replace('20', '2B', $inventory['id_location']); |
if (isset($tab_code_insee[$b])) { |
$utm = array(0 => $tab_code_insee[$b]); |
} |
} |
} elseif (isset($tab_code_insee[$inventory['id_location']])) { |
$utm = array(0 => $tab_code_insee[$inventory['id_location']]); |
} elseif (strpos($inventory['id_location'], '000') === 2) { |
$code = $this->getBdd()->proteger(str_replace('000', '', $inventory['id_location'])); |
$requete = "SELECT chef_lieu ". |
"FROM tb_eflore.insee_d_v2011 ". |
"WHERE dep = $code "; |
$resultat = $this->getBdd()->recupererTous($requete); |
if ($resultat != array() && isset($tab_code_insee[$resultat[0]['chef_lieu']])) { |
$utm = $tab_code_insee[$resultat[0]['chef_lieu']]; |
} |
} |
} else { |
if ($inventory['id_location'] != 'null') { |
if (isset($tab_code_insee[$id_location_protege])) { |
$utm = array(0 => $tab_code_insee[$id_location_protege]); |
} else { |
$requete = "SELECT nom as name, code as insee_code, utm_x as x_utm, utm_y as y_utm, utm_secteur as sector ". |
"FROM tb_cel.cel_zones_geo ". |
"WHERE nom LIKE $location_protege ". |
" AND code = $id_location_protege "; |
$resultat = $this->getBdd()->recupererTous($requete); |
if ($resultat != false) { |
$utm = $resultat; |
} |
} |
} else { |
$requete = "SELECT nom as name, code as insee_code, utm_x as x_utm, utm_y as y_utm, utm_secteur as sector". |
" FROM tb_cel.cel_zones_geo WHERE nom LIKE $location_protege "; |
$utm = $this->getBdd()->recupererTous($requete); |
} |
} |
return $utm; |
} |
public function formerCommentaire($utm, $inventory) { |
$comment = ''; |
if ($inventory['date_observation'] != '0000-00-00 00:00:00') { |
$comment .= $this->formerDate($inventory); |
} |
if ($inventory['collection_code'] == 'cel') { |
list($identifiant) = explode("@", $inventory['identifiant']); |
$comment .= " par ".$identifiant."@..."; |
} else { |
$comment .= " par ".utf8_decode($inventory['identifiant']); |
} |
return $comment; |
} |
public function formerDate($inventory) { |
$date = NULL; |
if ($inventory['collection_code'] == 'sophy') { |
$date = ', en '.$inventory['date_observation']; |
} |
elseif($inventory['date_observation']) { |
list($year, $month, $day) = explode ('-',$inventory['date_observation']); |
list($day) = explode (' ',$day); |
if ($month == '00') { |
$date = ', en '.$year; |
} else { |
$date = ', le '.$day.'/'.$month.'/'.$year; |
} |
} |
return $date; |
} |
/* |
* Stockage commentaire associe a un point : |
* |
* Param : |
* @text : texte cumule |
* @merge : indicateur de commentaire fusionne |
* @name : commune associee |
* @comment : commentaire |
* @origine : origine de la donnee |
* |
* |
* TODO : rendre cette fonction independante des valeurs d'origine passee en parametre |
*/ |
public function stockerCommentaire($text, $merge, $name, $comment, $origine, $x, $y) { |
if ($origine == 'cel') { |
$prefix = 'CEL : '; |
} elseif ($origine == 'flore') { |
$prefix = 'CEN LR : '; |
} /*elseif ($origine == 'FLORE - VAR') { |
$prefix = 'CBN MED : '; |
}*/ elseif ($origine == 'sophy') { |
$prefix = 'SOPHY : '; |
} |
// Cumul toute origine : |
if (isset($text[$x.'|'.$y]['tout']) && ($text[$x.'|'.$y])) { |
$text[$x.'|'.$y]['tout'] = $text[$x.'|'.$y]['tout'].'<br>'.$prefix.$name.$comment; |
} else { |
// Nouveau commentaire |
$text[$x.'|'.$y]['tout']=$prefix.$name.$comment; |
} |
// Deja present pour cette origine ? on ajoute |
if (isset ($text[$x.'|'.$y][$origine]) && ($text[$x.'|'.$y][$origine])) { |
$text[$x.'|'.$y][$origine] = $text[$x.'|'.$y][$origine].'<br>'.$name.$comment; |
} else { // Nouveau commentaire |
$text[$x.'|'.$y][$origine] = $name.$comment; |
} |
// Detection superposition de donnee |
if ($origine == 'cel') { |
if ((isset ($text[$x.'|'.$y]['sophy']) && ($text[$x.'|'.$y]['sophy'])) || (isset ($text[$x.'|'.$y]['flore']) && ($text[$x.'|'.$y]['flore'])) |
|| (isset ($text[$x.'|'.$y]['FLORE - VAR']) && ($text[$x.'|'.$y]['FLORE - VAR']))) { |
$merge[$x.'|'.$y]=true; |
} |
} elseif ($origine == 'flore') { |
if ((isset ($text[$x.'|'.$y]['sophy']) && ($text[$x.'|'.$y]['sophy'])) ||(isset ($text[$x.'|'.$y]['cel']) && ($text[$x.'|'.$y]['cel'])) || |
(isset ($text[$x.'|'.$y]['FLORE - VAR']) && ($text[$x.'|'.$y]['FLORE - VAR']))) { |
$merge[$x.'|'.$y]=true; |
} |
} elseif ($origine == 'FLORE - VAR') { |
if ((isset ($text[$x.'|'.$y]['sophy']) && ($text[$x.'|'.$y]['sophy'])) || (isset ($text[$x.'|'.$y]['cel']) && ($text[$x.'|'.$y]['cel'])) || |
(isset ($text[$x.'|'.$y]['flore']) && ($text[$x.'|'.$y]['flore']))) { |
$merge[$x.'|'.$y]=true; |
} |
} elseif ($origine == 'sophy') { |
if ((isset ($text[$x.'|'.$y]['cel']) && ($text[$x.'|'.$y]['cel'])) || (isset ($text[$x.'|'.$y]['flore']) && ($text[$x.'|'.$y]['flore'])|| |
(isset ($text[$x.'|'.$y]['FLORE - VAR']) && ($text[$x.'|'.$y]['FLORE - VAR'])))) { |
$merge[$x.'|'.$y]=true; |
} |
} |
return array($text, $merge); |
} |
} |
?> |
/tags/v0.1-20130830/services/modules/0.1/eflore/cartes/Formateur.php |
---|
New file |
0,0 → 1,32 |
<?php |
interface Formateur { |
const MIME_MAP = 'text/html'; |
const MIME_PNG = 'image/png'; |
public function __construct($info); |
public function initialiserImage(); |
public function chargerDonnees(); |
public function dessinerPoint($text, $merge, $couleurs); |
public function formaterCartes($usemap); |
//+----------------------------------------------------------------------------------------------------------------+ |
// sous fonction de calculer répartition |
public function chercherVille($inventory, $tab_code_insee = array()); |
public function formerCommentaire($utm, $inventory); |
public function formerDate($inventory); |
/* |
* Stockage commentaire associe a un point : |
* |
* Param : |
* @text : texte cumule |
* @merge : indicateur de commentaire fusionne |
* @name : commune associee |
* @comment : commentaire |
* @origine : origine de la donnee |
* |
* |
* TODO : rendre cette fonction independante des valeurs d'origine passee en parametre |
*/ |
public function stockerCommentaire($text, $merge, $name, $comment, $origine, $x, $y); |
} |
?> |
/tags/v0.1-20130830/services/modules/0.1/eflore/cartes/LegendeCartes.php |
---|
New file |
0,0 → 1,123 |
<?php |
// declare(encoding='UTF-8'); |
/** |
* Gère le sous-service Legende de Cartes. |
* |
* @see http://www.tela-botanica.org/wikini/eflore/wakka.php?wiki=EfloreApi01Cartes |
* |
* @package eFlore/services |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt> |
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt> |
* @version 1.0 |
* @copyright 1999-2012 Tela Botanica (accueil@tela-botanica.org) |
*/ |
// TODO : Config et Outils sont des classes statiques qui doivent poser des pb pour les tests... |
class LegendeCartes { |
private $parametres = array(); |
private $ressources = array(); |
const MIME_JSON = 'application/json'; |
const LEGENDE = '10'; |
private $formatsSupportes = array(self::MIME_JSON); |
private $tableOntologie = ''; |
private $ontologies = ''; |
private $legende = array(); |
public function __construct(Conteneur $conteneur) { |
$this->Bdd = $conteneur->getBdd(); |
$this->tableOntologie = $conteneur->getParametre('bdd_table_ontologies'); |
} |
public function consulter($ressources, $parametres) { |
//$tpsDebut = microtime(true); |
$this->parametres = $parametres; |
$this->ressources = $ressources; |
$this->definirValeurParDefautDesParametres(); |
$this->verifierParametres(); |
$resultat = $this->obtenirResultat(); |
return $resultat; |
} |
private function definirValeurParDefautDesParametres() { |
if (isset($this->parametres['retour']) == false) { |
$this->parametres['retour'] = self::MIME_JSON; |
} |
} |
private function verifierParametres() { |
$erreurs = array(); |
if (isset($this->parametres['retour']) == false) { |
$erreurs[] = "Le paramètre type de retour 'retour' est obligatoire."; |
} |
if ($this->verifierValeurParametreRetour() == false) { |
$erreurs[] = "Le type de retour '{$this->parametres['retour']}' n'est pas supporté."; |
} |
if (count($erreurs) > 0) { |
$message = implode('<br />', $erreurs); |
$code = RestServeur::HTTP_CODE_MAUVAISE_REQUETE; |
throw new Exception($message, $code); |
} |
} |
private function verifierValeurParametreRetour() { |
return in_array($this->parametres['retour'], $this->formatsSupportes); |
} |
private function obtenirResultat() { |
$this->chargerOntologies(); |
$this->chargerLegende(); |
$resultat = new ResultatService(); |
$resultat->corps = $this->legende; |
$resultat->mime = $this->parametres['retour']; |
return $resultat; |
} |
private function chargerOntologies() { |
$requete = "SELECT * FROM {$this->tableOntologie} "; |
$resultats = $this->Bdd->recupererTous($requete); |
if (!is_array($resultats) || count($resultats) <= 0) { |
$message = "Les données d'ontologies n'ont pu être chargées pour la ressource demandée"; |
$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE; |
throw new Exception($message, $code); |
} |
foreach ($resultats as $ontologie) { |
$this->ontologies[$ontologie['id']] = $this->extraireComplementsOntologies($ontologie); |
} |
} |
private function extraireComplementsOntologies($ontologie) { |
if ($ontologie['complements'] != '') { |
$complements = explode(',', trim($ontologie['complements'])); |
foreach ($complements as $complement) { |
list($cle, $val) = explode('=', trim($complement)); |
$ontologie[trim($cle)] = trim($val); |
} |
} |
return $ontologie; |
} |
private function chargerLegende() { |
foreach ($this->ontologies as $ontologie) { |
if ($ontologie['classe_id'] == self::LEGENDE) { |
$this->legende[] = array( |
'code' => $ontologie['code'], |
'couleur' => $ontologie['legende'], |
'nom' => $ontologie['nom'], |
'description' => $ontologie['description']); |
} |
} |
} |
} |
?> |
/tags/v0.1-20130830/services/modules/0.1/eflore/cartes/SophyFormateur.php |
---|
New file |
0,0 → 1,171 |
<?php |
class SophyFormateur implements Formateur { |
public $dest_map = array(); |
public $img = array(); |
public function __construct($info) { |
$this->info = $info; |
} |
public function img() { |
$qualite = 9; |
imagepng($this->img['sophy'], Config::get('cache_stockageChemin').$this->dest_map['sophy'], $qualite); |
} |
//+----------------------------------------------------------------------------------------------------------------+ |
// Méthodes d'accès aux objets du Framework |
/** |
* Méthode de connection à la base de données sur demande. |
* Tous les services web n'ont pas besoin de s'y connecter. |
*/ |
protected function getBdd() { |
if (! isset($this->Bdd)) { |
$this->Bdd = new Bdd(); |
} |
return $this->Bdd; |
} |
public function definirCouleurs() { |
// purple |
$couleur['purple'] = imagecolorallocate($this->img['sophy'], 255, 0, 255); |
return $couleur; |
} |
public function initialiserImage() { |
// Nom du fichier image en sortie |
$this->cheminCartesBase = Config::get('Cartes.chemin'); |
$this->dest_map['sophy'] = 'sophy_nt'.$this->info['nt'].'_'.$this->info['src_map']; |
$this->img['sophy'] = imagecreatefromjpeg($this->cheminCartesBase.$this->info['src_map']); |
} |
public function testerParametresProjets() { |
$test = true; |
if ($this->info['nom_ss_auteur'] == '') { |
$test = false; |
} |
return $test; |
} |
public function chargerDonnees() { |
// Collection code = 'sophy' |
$querySophy = "SELECT 'sophy' as collection_code, lieu_station_nom as location, lieu_commune_code_insee as id_location, ". |
" observation_date as date_observation, lieu_station_utm_est as x_utm , ". |
" lieu_station_utm_nord as y_utm , lieu_station_utm_zone as sector, observateur_nom_complet as identifiant ". |
"FROM sophy_tapir ". |
"WHERE nom_scientifique_complet = ".$this->getBdd()->proteger($this->info['nom_ss_auteur']). |
" AND lieu_commune_code_insee != '' group by `nom_scientifique_complet`,`lieu_commune_code_insee`, `lieu_station_nom`"; |
$inventoriesSophy = $this->getBdd()->recupererTous($querySophy); |
return $inventoriesSophy; |
} |
public function dessinerPoint($text, $merge, $couleurs) { |
$usemap['sophy'] = ''; |
foreach ($text as $coord => $origines ) { |
foreach ($origines as $origine => $maptext ) { |
$maptext = preg_replace("/\"/", "\'", $maptext); |
list($x,$y) = explode('|', $coord); |
$tpl_area = '<area shape="%s" alt="" class="tooltip" coords="%s" title="%s"/>'; |
$rayon = 2; |
$type = 'circle'; |
$coords = "$x,$y,5"; |
$on_mouseover = "this.ttBgColor='#99C242';this.ttFontColor='#000000';this.T_OFFSETX=-200;this.T_OFFSETY=-50;this.T_STICKY=1;return escape('$maptext')"; |
imagefilledrectangle($this->img['sophy'], ($x - $rayon), ($y - $rayon), ($x + $rayon), ($y + $rayon), $couleurs['purple']); |
$coords = ($x - $rayon).','.($y - $rayon).','.($x + $rayon).','.($y + $rayon); |
$usemap['sophy'] = $usemap['sophy'].sprintf($tpl_area, 'rect', $coords, $maptext); |
} |
} |
return $usemap; |
} |
public function formaterCartes($usemap) { |
$retour = Config::get('Cartes.cel_dst').$this->dest_map['sophy']; |
if ($this->info['retour'] == self::MIME_MAP) { |
$retour = "<img src=\"".$retour."\" style=\"border:none; ". |
"cursor:crosshair\" alt=\"\" usemap=\"#themap\" /><br />\n". |
"<map name=\"themap\" id=\"themap\">".utf8_encode($usemap['sophy'])."</map>"; |
} |
return $retour; |
} |
//+----------------------------------------------------------------------------------------------------------------+ |
// sous fonction de calculer répartition |
public function chercherVille($inventory, $tab_code_insee = array()) { |
$utm = ''; |
if (strpos($inventory['id_location'], '20') === 0) { |
$a = str_replace('20', '2A', $inventory['id_location']); |
if (isset($tab_code_insee[$a])) { |
$utm = array(0 => $tab_code_insee[$a]); |
} else { |
$b = str_replace('20', '2B', $inventory['id_location']); |
if (isset($tab_code_insee[$b])) { |
$utm = array(0 => $tab_code_insee[$b]); |
} |
} |
} elseif (isset($tab_code_insee[$inventory['id_location']])) { |
$utm = array(0 => $tab_code_insee[$inventory['id_location']]); |
} elseif (strpos($inventory['id_location'], '000') === 2) { |
$code = $this->getBdd()->proteger(str_replace('000', '', $inventory['id_location'])); |
$requete = "SELECT chef_lieu ". |
"FROM tb_eflore.insee_d_v2011 ". |
"WHERE dep = $code "; |
$resultat = $this->getBdd()->recupererTous($requete); |
if ($resultat != array() && isset($tab_code_insee[$resultat[0]['chef_lieu']])) { |
$utm = $tab_code_insee[$resultat[0]['chef_lieu']]; |
} |
} |
return $utm; |
} |
public function formerCommentaire($utm, $inventory) { |
$comment = ''; |
if ($inventory['date_observation'] != '0000-00-00 00:00:00') { |
$comment .= $this->formerDate($inventory); |
} |
$comment .= " par ".utf8_decode($inventory['identifiant']); |
return $comment; |
} |
public function formerDate($inventory) { |
$date = ', en '.$inventory['date_observation']; |
return $date; |
} |
/* |
* Stockage commentaire associe a un point : |
* |
* Param : |
* @text : texte cumule |
* @merge : indicateur de commentaire fusionne |
* @name : commune associee |
* @comment : commentaire |
* @origine : origine de la donnee |
* |
* |
* TODO : rendre cette fonction independante des valeurs d'origine passee en parametre |
*/ |
public function stockerCommentaire($text, $merge, $name, $comment, $origine, $x, $y) { |
$prefix = 'SOPHY : '; |
// Deja present pour cette origine ? on ajoute |
if (isset ($text[$x.'|'.$y][$origine]) && ($text[$x.'|'.$y][$origine])) { |
$text[$x.'|'.$y][$origine] = $text[$x.'|'.$y][$origine].'<br>'.$name.$comment; |
} else { // Nouveau commentaire |
$text[$x.'|'.$y][$origine] = $name.$comment; |
} |
if ((isset ($text[$x.'|'.$y]['cel']) && ($text[$x.'|'.$y]['cel'])) || (isset ($text[$x.'|'.$y]['flore']) && ($text[$x.'|'.$y]['flore'])|| |
(isset ($text[$x.'|'.$y]['FLORE - VAR']) && ($text[$x.'|'.$y]['FLORE - VAR'])))) { |
$merge[$x.'|'.$y] = true; |
} |
return array($text, $merge); |
} |
} |
?> |
/tags/v0.1-20130830/services/modules/0.1/eflore/cartes/CelFormateur.php |
---|
New file |
0,0 → 1,192 |
<?php |
class CelFormateur implements Formateur { |
public $dest_map = array(); |
public $img = array(); |
public function __construct($info) { |
$this->info = $info; |
} |
public function img() { |
$qualite = 9; |
imagepng($this->img['cel'], Config::get('cache_stockageChemin').$this->dest_map['cel'], $qualite); |
} |
//+----------------------------------------------------------------------------------------------------------------+ |
// Méthodes d'accès aux objets du Framework |
/** |
* Méthode de connection à la base de données sur demande. |
* Tous les services web n'ont pas besoin de s'y connecter. |
*/ |
protected function getBdd() { |
if (! isset($this->Bdd)) { |
$this->Bdd = new Bdd(); |
} |
return $this->Bdd; |
} |
public function definirCouleurs() { |
// green |
$couleurs['green'] = imagecolorallocate($this->img['cel'], 0, 255, 0); |
return $couleurs; |
} |
public function initialiserImage() { |
// Nom du fichier image en sortie |
$this->cheminCartesBase = Config::get('Cartes.chemin'); |
$this->dest_map['cel'] = 'cel_nt'.$this->info['nt'].'_'.$this->info['src_map']; |
$this->img['cel'] = imagecreatefrompng($this->cheminCartesBase.$this->info['src_map']); |
} |
public function testerParametresProjets() { |
$test = true; |
if ($this->info['nt'] == 0) { |
$test = false; |
} |
return $test; |
} |
public function chargerDonnees() { |
// Recherche nom correspondant au numero nomenclatural en cours (pour etablir le lien avec les donnees moissonnes). |
// R�cuperation donn�e inventaire |
/* |
* Les donnees issues du carnet en ligne sont recuperes directement, sans passer par le mecanisme de moissonage car : |
* - pour l'instant le service de moissonage n'est pas automatise et donc il y a un decalage dans l'affichage des donnees transmises |
* - la table contenant les donnees moissonees ne reprend pas tous les champs necessaires a l'exploitation par eflore (notamment pas de code localite, pas d'identifiant libre) |
* |
* A terme, utilser vraiment le moissonage, y compris pour les donnees issues du CEL, en utilisant ABCD et en modifiant le programme d'harvesting. |
*/ |
$queryCel = "SELECT 'cel' as collection_code, zone_geo as location, REPLACE(ce_zone_geo,'INSEE-C:','') as id_location, date_observation, ". |
" longitude as y_utm, latitude as x_utm, geodatum as sector, courriel_utilisateur as identifiant FROM tb_cel.cel_obs ". |
"WHERE nt = '".$this->info['nt']."' ". |
" AND transmission = 1"; |
$inventoriesCel = $this->getBdd()->recupererTous($queryCel); |
return $inventoriesCel; |
} |
public function dessinerPoint($text, $merge, $couleurs) { |
$usemap['cel'] = ''; |
foreach ($text as $coord => $origines ) { |
foreach ($origines as $origine => $maptext ) { |
$maptext = preg_replace("/\"/", "\'", $maptext); |
list($x,$y) = explode('|', $coord); |
$tpl_area = '<area shape="%s" alt="" class="tooltip" coords="%s" title="%s"/>'; |
$rayon = 2; |
$type = 'circle'; |
$coords = "$x,$y,5"; |
$on_mouseover = "this.ttBgColor='#99C242';this.ttFontColor='#000000';this.T_OFFSETX=-200;this.T_OFFSETY=-50;this.T_STICKY=1;return escape('$maptext')"; |
imagefilledrectangle($this->img['cel'], ($x - $rayon), ($y - $rayon), ($x + $rayon), ($y + $rayon), $couleurs['green']); |
$coords = ($x - $rayon).','.($y - $rayon).','.($x + $rayon).','.($y + $rayon); |
$usemap['cel'] = $usemap['cel'].sprintf($tpl_area, 'rect', $coords, $maptext); |
} |
} |
return $usemap; |
} |
public function formaterCartes($usemap) { |
$retour = Config::get('Cartes.cel_dst').$this->dest_map['cel']; |
if ($this->info['retour'] == self::MIME_MAP) { |
$retour = "<img src=\"".$retour."\" style=\"border:none; ". |
"cursor:crosshair\" alt=\"\" usemap=\"#themap\" /><br />\n". |
"<map name=\"themap\" id=\"themap\">".utf8_encode($usemap['cel'])."</map>"; |
} |
return $retour; |
} |
//+----------------------------------------------------------------------------------------------------------------+ |
// sous fonction de calculer répartition |
public function chercherVille($inventory, $tab_code_insee = array()) { |
$location_protege = $this->getBdd()->proteger($inventory['location']); |
$id_location_protege = $this->getBdd()->proteger($inventory['id_location']); |
$utm = array(); |
if ($inventory['id_location'] != 'null') { |
if (isset($tab_code_insee) & in_array($inventory['id_location'], $tab_code_insee)) { |
$utm = array(0 => $this->tab_code_insee[$id_location_protege]); |
} else { |
$requete = "SELECT nom as name, code as insee_code, utm_x as x_utm, utm_y as y_utm, utm_secteur as sector ". |
"FROM cel.cel_zones_geo ". |
"WHERE nom LIKE $location_protege ". |
" AND code = $id_location_protege "; |
$resultat = $this->getBdd()->recupererTous($requete); |
$utm = $resultat; |
} |
} else { |
$requete = "SELECT nom as name, code as insee_code, utm_x as x_utm, utm_y as y_utm, utm_secteur as sector". |
" FROM tb_cel.cel_zones_geo WHERE nom LIKE $location_protege "; |
$utm = $this->getBdd()->recupererTous($requete); |
} |
return $utm; |
} |
public function formerCommentaire($utm, $inventory) { |
$comment = ''; |
if ($inventory['date_observation'] != '0000-00-00 00:00:00') { |
$comment .= $this->formerDate($inventory); |
} |
list($identifiant) = explode("@", $inventory['identifiant']); |
$comment .= " par ".$identifiant."@..."; |
return $comment; |
} |
public function formerDate($inventory) { |
list($year, $month, $day) = explode ('-',$inventory['date_observation']); |
list($day) = explode (' ',$day); |
if ($month == '00') { |
$date = ', en '.$year; |
} else { |
$date = ', le '.$day.'/'.$month.'/'.$year; |
} |
return $date; |
} |
/* |
* Stockage commentaire associe a un point : |
* |
* Param : |
* @text : texte cumule |
* @merge : indicateur de commentaire fusionne |
* @name : commune associee |
* @comment : commentaire |
* @origine : origine de la donnee |
* |
* |
* TODO : rendre cette fonction independante des valeurs d'origine passee en parametre |
*/ |
public function stockerCommentaire($text, $merge, $name, $comment, $origine, $x, $y) { |
$prefix = 'CEL : '; |
// Cumul toute origine : |
if (isset($text[$x.'|'.$y]['tout']) && ($text[$x.'|'.$y])) { |
$text[$x.'|'.$y]['tout'] = $text[$x.'|'.$y]['tout'].'<br>'.$prefix.$name.$comment; |
} else { |
// Nouveau commentaire |
$text[$x.'|'.$y]['tout']=$prefix.$name.$comment; |
} |
// Deja present pour cette origine ? on ajoute |
if (isset ($text[$x.'|'.$y][$origine]) && ($text[$x.'|'.$y][$origine])) { |
$text[$x.'|'.$y][$origine] = $text[$x.'|'.$y][$origine].'<br>'.$name.$comment; |
} else { // Nouveau commentaire |
$text[$x.'|'.$y][$origine] = $name.$comment; |
} |
// Detection superposition de donnee |
if ((isset ($text[$x.'|'.$y]['sophy']) && ($text[$x.'|'.$y]['sophy'])) || (isset ($text[$x.'|'.$y]['flore']) && ($text[$x.'|'.$y]['flore'])) |
|| (isset ($text[$x.'|'.$y]['FLORE - VAR']) && ($text[$x.'|'.$y]['FLORE - VAR']))) { |
$merge[$x.'|'.$y]=true; |
} |
return array($text, $merge); |
} |
} |
?> |
/tags/v0.1-20130830/services/modules/0.1/eflore/cartes/CenlrFormateur.php |
---|
New file |
0,0 → 1,150 |
<?php |
class CenlrFormateur implements Formateur { |
public $dest_map = array(); |
public $img = array(); |
public function __construct($info) { |
$this->info = $info; |
} |
public function img() { |
$qualite = 9; |
imagepng($this->img['cenlr'], Config::get('cache_stockageChemin').$this->dest_map['cenlr'], $qualite); |
} |
//+----------------------------------------------------------------------------------------------------------------+ |
// Méthodes d'accès aux objets du Framework |
/** |
* Méthode de connection à la base de données sur demande. |
* Tous les services web n'ont pas besoin de s'y connecter. |
*/ |
protected function getBdd() { |
if (! isset($this->Bdd)) { |
$this->Bdd = new Bdd(); |
} |
return $this->Bdd; |
} |
public function definirCouleurs() { |
// green |
$couleur['green'] = imagecolorallocate($this->img['cenlr'], 0, 255, 0); |
// red |
$couleur['red'] = imagecolorallocate($this->img['cenlr'], 255, 0, 0); |
// blue |
$couleur['blue'] = imagecolorallocate($this->img['cenlr'], 0, 0, 255); |
// purple |
$couleur['purple'] = imagecolorallocate($this->img['cenlr'], 255, 0, 255); |
// black |
$couleur['black'] = imagecolorallocate($this->img['cenlr'], 0, 0, 0); |
return $couleur; |
} |
public function initialiserImage() { |
// Nom du fichier image en sortie |
$this->cheminCartesBase = Config::get('Cartes.chemin'); |
$this->dest_map['cenlr'] = 'cenlr_nt'.$this->info['nt'].'_'.$this->info['src_map']; |
$this->img['cenlr'] = imagecreatefrompng($this->cheminCartesBase.$this->info['src_map']); |
} |
public function testerParametresProjets() { |
$test = true; |
if ($this->info['nom'] == '') { |
$test = false; |
} |
return $test; |
} |
public function chargerDonnees() { |
// Collection code = 'flore' (Cenlr) |
$queryCenlr = "SELECT collection_code, locality as location, county as id_location, ". |
" STR_TO_DATE(concat(year, '/',month, '/',day), '%Y/%m/%d') as date_observation, latitude as y_utm , ". |
" longitude as x_utm , max_altitude as sector, collector_name as identifiant ". |
"FROM tb_hit_indexation.raw_occurrence_record ". |
"WHERE scientific_name = ".$this->getBdd()->proteger($this->info['nom']). |
" AND collection_code = 'flore' ". |
" AND (deleted IS NULL OR deleted = '0000-00-00 00:00:00')"; |
$inventoriesCenlr = $this->getBdd()->recupererTous($queryCenlr); |
return $inventoriesCenlr; |
} |
public function dessinerPoint($text, $merge, $couleurs) { |
$usemap['cenlr'] = ''; |
foreach ($text as $coord => $origines ) { |
foreach ($origines as $origine => $maptext ) { |
$maptext = preg_replace("/\"/", "\'", $maptext); |
list($x,$y) = explode('|', $coord); |
$tpl_area = '<area shape="%s" alt="" class="tooltip" coords="%s" title="%s"/>'; |
$rayon = 2; |
$type = 'circle'; |
$coords = "$x,$y,5"; |
$on_mouseover = "this.ttBgColor='#99C242';this.ttFontColor='#000000';this.T_OFFSETX=-200;this.T_OFFSETY=-50;this.T_STICKY=1;return escape('$maptext')"; |
imagefilledellipse($this->img['cenlr'], $x, $y, 7, 7, $couleurs['red']); |
$usemap['cenlr'] = $usemap['cenlr'].sprintf($tpl_area, $type, $coords, $maptext); |
} |
} |
return $usemap; |
} |
public function formaterCartes($usemap) { |
$retour = Config::get('Cartes.cel_dst').$this->dest_map['cenlr']; |
if ($this->info['retour'] == self::MIME_MAP) { |
$retour = "<img src=\"".$retour."\" style=\"border:none; ". |
"cursor:crosshair\" alt=\"\" usemap=\"#themap\" /><br />\n". |
"<map name=\"themap\" id=\"themap\">".utf8_encode($usemap['cenlr'])."</map>"; |
} |
return $retour; |
} |
//+----------------------------------------------------------------------------------------------------------------+ |
// sous fonction de calculer répartition |
public function chercherVille($inventory, $tab_code_insee = array()) { |
return $utm = ''; |
} |
public function formerCommentaire($utm, $inventory) { |
$comment = ''; |
if ($inventory['date_observation'] != '0000-00-00 00:00:00') { |
$comment .= $this->formerDate($inventory); |
} |
$comment .= " par ".utf8_decode($inventory['identifiant']); |
return $comment; |
} |
public function formerDate($inventory) { |
list($year, $month, $day) = explode ('-',$inventory['date_observation']); |
list($day) = explode (' ',$day); |
if ($month == '00') { |
$date = ', en '.$year; |
} else { |
$date = ', le '.$day.'/'.$month.'/'.$year; |
} |
return $date; |
} |
public function stockerCommentaire($text, $merge, $name, $comment, $origine, $x, $y) { |
$prefix = 'CEN LR : '; |
// Deja present pour cette origine ? on ajoute |
if (isset ($text[$x.'|'.$y][$origine]) && ($text[$x.'|'.$y][$origine])) { |
$text[$x.'|'.$y][$origine] = $text[$x.'|'.$y][$origine].'<br>'.$name.$comment; |
} else { // Nouveau commentaire |
$text[$x.'|'.$y][$origine] = $name.$comment; |
} |
// Detection superposition de donnee |
if ((isset ($text[$x.'|'.$y]['sophy']) && ($text[$x.'|'.$y]['sophy'])) ||(isset ($text[$x.'|'.$y]['cel']) && ($text[$x.'|'.$y]['cel'])) || |
(isset ($text[$x.'|'.$y]['FLORE - VAR']) && ($text[$x.'|'.$y]['FLORE - VAR']))) { |
$merge[$x.'|'.$y]=true; |
} |
return array($text, $merge); |
} |
} |
?> |
/tags/v0.1-20130830/services/modules/0.1/eflore/cartes/CbnmedFormateur.php |
---|
New file |
0,0 → 1,167 |
<?php |
class CbnmedFormateur implements Formateur { |
public $dest_map = array(); |
public $img = array(); |
public function __construct($info) { |
$this->info = $info; |
} |
public function img() { |
$qualite = 9; |
imagepng($this->img['cbnmed'], Config::get('cache_stockageChemin').$this->dest_map['cbnmed'], $qualite); |
} |
//+----------------------------------------------------------------------------------------------------------------+ |
// Méthodes d'accès aux objets du Framework |
/** |
* Méthode de connection à la base de données sur demande. |
* Tous les services web n'ont pas besoin de s'y connecter. |
*/ |
protected function getBdd() { |
if (! isset($this->Bdd)) { |
$this->Bdd = new Bdd(); |
} |
return $this->Bdd; |
} |
public function definirCouleurs() { |
// green |
$couleur['green'] = imagecolorallocate($this->img['cbnmed'], 0, 255, 0); |
// red |
$couleur['red'] = imagecolorallocate($this->img['cbnmed'], 255, 0, 0); |
// blue |
$couleur['blue'] = imagecolorallocate($this->img['cbnmed'], 0, 0, 255); |
// purple |
$couleur['purple'] = imagecolorallocate($this->img['cbnmed'], 255, 0, 255); |
// black |
$couleur['black'] = imagecolorallocate($this->img['cbnmed'], 0, 0, 0); |
return $couleur; |
} |
public function initialiserImage() { |
// Nom du fichier image en sortie |
$this->cheminCartesBase = Config::get('Cartes.chemin'); |
$this->dest_map['cbnmed'] = 'cbnmed_nt'.$this->info['nt'].'_'.$this->info['src_map']; |
$this->img['cbnmed'] = imagecreatefrompng($this->cheminCartesBase.$this->info['src_map']); |
} |
public function testerParametresProjets() { |
$test = true; |
if ($this->info['nom'] == '') { |
$test = false; |
} |
return $test; |
} |
public function chargerDonnees() { |
// Recherche nom correspondant au numero nomenclatural en cours (pour etablir le lien avec les donnees moissonnes). |
// Collection code = 'FLORE - VAR' (Cbnmed) |
$queryCbnmed = "SELECT collection_code, locality as id_location, county as location, ". |
" STR_TO_DATE(concat(ifnull(year,0),'/', ifnull(month,0), '/',ifnull(day,0)), '%Y/%m/%d') as date_observation, ". |
" latitude as y_utm , longitude as x_utm , max_altitude as sector, collector_name as identifiant ". |
"FROM tb_hit_indexation.raw_occurrence_record ". |
"WHERE scientific_name = ".$this->getBdd()->proteger($this->info['nom']). |
" AND collection_code='FLORE - VAR' ". |
" AND (deleted IS NULL OR deleted = '0000-00-00 00:00:00')"; |
$inventoriesCbnmed = $this->getBdd()->recupererTous($queryCbnmed); |
return $inventoriesCbnmed; |
} |
public function dessinerPoint($text, $merge, $couleurs) { |
$usemap['cbnmed'] = ''; |
foreach ($text as $coord => $origines ) { |
foreach ($origines as $origine => $maptext ) { |
$maptext = preg_replace("/\"/", "\'", $maptext); |