/branches/v1.7-croissant/scripts/configurations/config.defaut.ini |
---|
New file |
0,0 → 1,42 |
; Encodage : UTF-8 |
; +------------------------------------------------------------------------------------------------------+ |
; Info sur l'application |
info.nom = Scripts de tests |
; Abréviation de l'application |
info.abr = SCRIPTS |
; Version du Framework nécessaire au fonctionnement de cette application |
info.framework.version = 0.3 |
; Encodage de l'application |
encodage_appli = "UTF-8" |
; Chemin de l'application (pour l'utiliser dans ce fichier) |
chemin_scripts = "php:Framework::getCheminAppli()" |
; +------------------------------------------------------------------------------------------------------+ |
; Débogage |
; Indique si oui ou non on veut afficher le débogage. |
debogage = true |
; Indique si oui ou non on veut lancer le chronométrage |
chronometrage = false |
+------------------------------------------------------------------------------------------------------+ |
; Paramètrage de la base de données. |
; bdd_abstraction : abstraction de la base de données. |
; bdd_protocole : Protocole de la base de données. |
; bdd_serveur : Nom du serveur de bases de données. |
; bdd_utilisateur : Nom de l'utilisateur de la base de données. |
; bdd_mot_de_passe : Mot de passe de l'utilisateur de la base de données. |
; bdd_nom : Nom de la base de données principale. |
; bdd_encodage : Encodage de la base de données principale. Normalement le même que l'application mais au format base de |
; données : voir ici : http://dev.mysql.com/doc/refman/5.0/en/charset-charsets.html |
; et là: http://www.postgresql.org/docs/8.1/static/multibyte.html pour les correspondances |
bdd_abstraction = pdo |
bdd_protocole = mysql |
bdd_serveur = localhost |
bdd_utilisateur = "root" |
bdd_mot_de_passe = "" |
bdd_nom = "tb_cel" |
bdd_encodage = "utf8" |
; Dossier de base contenant les données d'eFlore (Fichiers TSV et SQL) |
dossierDonneesEflore = "/home/telabotap/www/eflore/donnees/" |
/branches/v1.7-croissant/scripts/configurations |
---|
New file |
Property changes: |
Added: svn:ignore |
+config.ini |
/branches/v1.7-croissant/scripts/framework.defaut.php |
---|
New file |
0,0 → 1,6 |
<?php |
// Inclusion du Framework |
// Renomer ce fichier en "framework.php" |
// Indiquer ci-dessous le chemin absolu vers le fichier autoload.inc.php de la bonne version du Framework |
require_once '/home/www/commun/framework/0.3/Framework.php'; |
?> |
/branches/v1.7-croissant/scripts/cli.php |
---|
New file |
0,0 → 1,37 |
<?php |
// Encodage : UTF-8 |
// +-------------------------------------------------------------------------------------------------------------------+ |
/** |
* Initialise le chargement et l'exécution des scripts |
* |
* Lancer ce fichier en ligne de commande avec : |
* <code>/opt/lampp/bin/php cli.php mon_script -a test</code> |
* |
//Auteur original : |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
* @author Delphine CAUQUIL <delphine@tela-botanica.org> |
* @copyright Tela-Botanica 1999-2008 |
* @licence GPL v3 & CeCILL v2 |
* @version $Id$ |
*/ |
// +-------------------------------------------------------------------------------------------------------------------+ |
// Le fichier Framework.php du Framework de Tela Botanica doit être appelée avant tout autre chose dans l'application. |
// Sinon, rien ne sera chargé. |
// Chemin du fichier chargeant le framework requis |
$framework = dirname(__FILE__).DIRECTORY_SEPARATOR.'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(__FILE__);// Obligatoire |
Framework::setInfoAppli(Config::get('info')); |
// Initialisation et lancement du script appelé en ligne de commande |
Cli::executer(); |
} |
?> |
/branches/v1.7-croissant/scripts/modules/codeinseecommune/bibliotheque/Dao.php |
---|
New file |
0,0 → 1,69 |
<?php |
class Dao extends Bdd { |
private $temps_derniere_requete = 0; |
public function rechercherCoordonnees() { |
$requete = "SELECT longitude, latitude ". |
"FROM cel_obs ". |
"GROUP BY longitude , latitude "; |
$resultat = $this->recupererTous($requete); |
$this->reinitialiserTempsDerniereRequete(); |
return $resultat; |
} |
public function rechercherCoordonneesSansCorrespondances() { |
$requete = 'SELECT longitude, latitude '. |
'FROM cel_obs '. |
"WHERE code_insee_calcule = '' ". |
' AND DATE_ADD(date_modification, INTERVAL 25 HOUR) >= CURDATE() '. |
'GROUP BY longitude , latitude '; |
$resultat = $this->recupererTous($requete); |
$this->reinitialiserTempsDerniereRequete(); |
return $resultat; |
} |
public function creerColonneCodeInseeCalcule() { |
$create = 'ALTER TABLE cel_obs '. |
'ADD code_insee_calcule VARCHAR(5) NOT NULL '; |
$this->requeter($create); |
$this->reinitialiserTempsDerniereRequete(); |
} |
public function ajouterCodeInseeCalcule($latitude, $longitude, $code_insee) { |
$insert = 'UPDATE cel_obs '. |
"SET code_insee_calcule = ".$this->proteger($code_insee)." ". |
"WHERE latitude = ".$this->proteger($latitude)." ". |
" AND longitude = ".$this->proteger($longitude)." "; |
$this->requeter($insert); |
$this->reinitialiserTempsDerniereRequete(); |
} |
public function modifierCodeInseeEtZoneGeo($coordonnees) { |
$update = "UPDATE cel_obs ". |
"SET ce_zone_geo = concat('INSEE-C:' , code_insee_calcule), ". |
"zone_geo = ".$this->proteger($coordonnees['nom'])." ". |
"WHERE ce_zone_geo = '' AND zone_geo = '' ". |
" AND latitude = ".$this->proteger($coordonnees['latitude'])." ". |
" AND longitude = ".$this->proteger($coordonnees['longitude'])." "; |
$this->requeter($update); |
$this->reinitialiserTempsDerniereRequete(); |
} |
// Il peut se passer assez de temps sans qu'aucune requete ne soit effectuée |
// (cas d'un grand nombre d'enregistrements à la suite pour lesquels on ne trouve |
// aucun département). Pour éviter cela on teste régulièrement la connection |
public function testerActiviteConnection() { |
$temps_courant = microtime(true); |
$temps_depuis_derniere_requete = $temps_courant - $this->temps_derniere_requete; |
if($temps_depuis_derniere_requete >= 18) { |
$this->ping(); |
$this->reinitialiserTempsDerniereRequete(); |
} |
} |
private function reinitialiserTempsDerniereRequete() { |
$this->temps_derniere_requete = microtime(true); |
} |
} |
?> |
/branches/v1.7-croissant/scripts/modules/codeinseecommune/traitements_cel |
---|
New file |
0,0 → 1,41 |
#!/bin/sh |
#/etc/rc.d/init.d/ |
# |
# Aurélien PERONNET [17 avril 2013] |
# Service de lancement des scripts de maintenance et modification du cel |
# |
case "$1" in |
start) |
echo "Demarrage de codeinseecommune :" |
nohup /usr/local/sbin/codeinseecommune.sh 1>/dev/null 2>/dev/null & |
;; |
stop) |
echo "Arret de codeinseecommune" |
PID=`ps -eaf | grep codeinseecommune | grep -v grep | tr -s ' ' | cut -d' ' -f2 | head -n1` |
kill -9 ${PID} |
;; |
status) |
echo -n "Voici les PID du processus codeinseecommune :" |
PID=`ps -eaf | grep codeinseecommune | grep -v grep | tr -s ' ' | cut -d' ' -f2 | head -n1` |
echo ${PID} |
;; |
*) |
echo "Usage: {start|stop|status}" |
exit 1 |
;; |
esac |
/branches/v1.7-croissant/scripts/modules/codeinseecommune/Codeinseecommune.php |
---|
New file |
0,0 → 1,193 |
<?php |
// Encodage : UTF-8 |
// +-------------------------------------------------------------------------------------------------------------------+ |
/** |
* Traitement des codes INSEE de la banque de données cel |
* |
* Description : classe permettant d'affecter des codes INSEE aux obs possédant des coordonnées mais pas de commune |
* Utilisation : php script.php code -a codeInseeCommune |
* |
* @category PHP 5.3 |
* @package phytosocio |
//Auteur original : |
* @author Delphine CAUQUIL <delphine@tela-botanica.org> |
* @author Aurélien PERONNET <aurelien@tela-botanica.org> |
* @copyright Copyright (c) 2009, Tela Botanica (accueil@tela-botanica.org) |
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL-v3 |
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL-v2 |
* @version $Id$ |
*/ |
// +-------------------------------------------------------------------------------------------------------------------+ |
class Codeinseecommune extends Script { |
protected $tableauTaxon; |
protected $dao; |
protected $observations; |
protected $mode_verbeux = false; |
// Paramêtres autorisées lors de l'appel au script en ligne de commande |
protected $parametres_autorises = array( |
'-n' => array(true, true, 'Nom du fichier ou du dossier à traiter')); |
// +-------------------------------------------------------------------------------------------------------------------+ |
public function executer() { |
include_once dirname(__FILE__).'/bibliotheque/Dao.php'; |
$this->dao = new Dao(); |
// Récupération de paramétres |
// Lancement de l'action demandée |
$cmd = $this->getParametre('a'); |
$this->mode_verbeux = $this->getParametre('v'); |
switch ($cmd) { |
case 'tout' : |
// à effectuer manuellement au premier lancement du script |
$this->creerColonne(); |
$this->calculerCodesInsee(); |
break; |
case 'colonne' : |
$this->creerColonne(); |
break; |
case 'sanscorrespondance' : |
// devrait être être l'option utilisée dans le cron quotidien (avec l'option -v 0) |
$this->calculerCodesInseeSansCorrespondance(); |
break; |
case 'calculer' : |
$this->calculerCodesInsee(); |
break; |
default : |
$this->traiterErreur('Erreur : la commande "%s" n\'existe pas!', array($cmd)); |
} |
} |
// +-------------------------------------------------------------------------------------------------------------------+ |
private function creerColonne() { |
$this->dao->creerColonneCodeInseeCalcule(); |
} |
private function calculerCodesInseeSansCorrespondance() { |
$liste_coordonnees = $this->dao->rechercherCoordonneesSansCorrespondances(); |
$this->traiterCoordonnees($liste_coordonnees); |
} |
private function calculerCodesInsee() { |
$liste_coordonnees = $this->dao->rechercherCoordonnees(); |
$this->traiterCoordonnees($liste_coordonnees); |
} |
private function traiterCoordonnees($liste_coordonnees) { |
$debut = microtime(true); |
$nb_coordonnees_modifiees = 0; |
$nb_coordonnees_ignorees = 0; |
$total = count($liste_coordonnees); |
if($this->mode_verbeux) { |
echo "-------------------------------------------------------------------\n"; |
echo " Calcul des codes INSEE et modification (".count($liste_coordonnees)." coordonnées en tout) ... \n"; |
echo " Enrichissement des champs zone geo et ce_zone_geo vides ... \n"; |
echo "-------------------------------------------------------------------\n"; |
} |
foreach ($liste_coordonnees as $coordonnees) { |
$infos_coord = $this->obtenirInfosPourCoordonnees($coordonnees); |
if ($infos_coord != null) { |
$coordonnee_a_traiter = array( |
'latitude' => $coordonnees['latitude'], |
'longitude' => $coordonnees['longitude'], |
'code_insee' => $infos_coord['code_insee'], |
'nom' => $infos_coord['nom'] |
); |
$this->modifierInformationsGeo($coordonnee_a_traiter); |
$nb_coordonnees_modifiees++; |
} else { |
$nb_coordonnees_ignorees++; |
} |
if($this->mode_verbeux) { |
$this->afficherAvancement(' Coordonnées traitées ', $nb_coordonnees_modifiees); |
} |
} |
$fin = microtime(true); |
if($this->mode_verbeux) { |
echo "\n"; |
echo "-------------------------------------------------------------------\n"; |
echo " Fin de la mise à jour des codes INSEE calculés et de l'enrichissement, \n"; |
echo " ".($fin - $debut)." secondes écoulées \n"; |
echo " ".$nb_coordonnees_modifiees." code insee calculés et modifiés \n"; |
echo " ".$nb_coordonnees_ignorees." coordonnées ignorées \n"; |
echo "-------------------------------------------------------------------\n"; |
echo "\n"; |
} |
} |
private function obtenirInfosPourCoordonnees($coordonnees) { |
$infos_coord = null; |
if ($this->testerCoordonneesWgsFrance($coordonnees['latitude'], $coordonnees['longitude'])) { |
$infos_coord = $this->chercherInfosCommune('osm', $coordonnees['latitude'], $coordonnees['longitude']); |
if ($infos_coord == null) { |
$infos_coord = $this->chercherInfosCommune('lion1906', $coordonnees['latitude'], $coordonnees['longitude']); |
} |
} |
return $infos_coord; |
} |
private function modifierInformationsGeo($coordonnee_a_traiter) { |
$this->modifierCodeInseeCalculePourCoordonnees($coordonnee_a_traiter); |
$this->modifierCodeInseeEtZoneGeo($coordonnee_a_traiter); |
} |
private function modifierCodeInseeCalculePourCoordonnees($coordonnee_a_traiter) { |
$this->dao->testerActiviteConnection(); |
$this->dao->ajouterCodeInseeCalcule($coordonnee_a_traiter['latitude'], $coordonnee_a_traiter['longitude'], $coordonnee_a_traiter['code_insee']); |
} |
private function modifierCodeInseeEtZoneGeo($coordonnee_a_traiter) { |
$this->dao->testerActiviteConnection(); |
$this->dao->modifierCodeInseeEtZoneGeo($coordonnee_a_traiter); |
} |
private function chercherInfosCommune($projet, $latitude, $longitude) { |
$url_service = "www.tela-botanica.org/service:eflore:0.1/{$projet}/nom-commune". |
"?lat={$latitude}&lon={$longitude}"; |
$url_service = str_replace(',', '.', $url_service); |
$ch = curl_init($url_service); |
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); |
$reponse = curl_exec($ch); |
$infos_coord = $this->traiterReponseServiceCommune($reponse); |
curl_close($ch); |
return $infos_coord; |
} |
private function traiterReponseServiceCommune($reponse) { |
$retour = null; |
$reponse = json_decode($reponse); |
// cas du service lion 1906 qui peut renvoyer plusieurs communes (on prend la première) |
if(is_array($reponse)) { |
$reponse = $reponse[0]; |
} |
if (isset($reponse->codeINSEE)) { |
$retour = array('code_insee' => $reponse->codeINSEE, |
'nom' => $reponse->nom); |
} |
return $retour; |
} |
private function testerCoordonneesWgsFrance($latitude, $longitude) { |
$coord_france = false; |
if ($latitude != '' && $longitude != '') { |
if ($latitude < 51.071667 && $latitude > 41.316667) { |
if ($longitude < 9.513333 && $longitude > -5.140278) { |
$coord_france = true; |
} |
} |
} |
return $coord_france; |
} |
} |
?> |
/branches/v1.7-croissant/scripts/modules/codeinseecommune/codeinseecommune.sh |
---|
New file |
0,0 → 1,12 |
#!/bin/bash |
# |
# /etc/init.d/codeinseecommune : traitement du calcul des codes insee du cel |
# Aurélien Peronnet [11 avril 2013] |
# |
while true |
do |
logger "Lancement script cel::codeinseecommune" |
sudo -u telabotap /usr/local/bin/php-cli-52 -f /home/telabotap/www/eflore-test/cel/scripts/cli.php codeinseecommune -a sanscorrespondance -v 0 |
logger "Arret script cel::codeinseecommune" |
sleep 86400 |
done |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
Added: svn:eol-style |
+native |
\ No newline at end of property |
/branches/v1.7-croissant/scripts/modules/maj-code-DB-access-201307.sh |
---|
New file |
0,0 → 1,49 |
#!/bin/bash |
# @author Raphaël Droz <raphael@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> |
# @copyright © 2013, Tela Botanica |
# Met à jour les appels à la database via l'instance $this de Cel |
# pour y substituer le singleton Cel::db() |
# À lancer dans le répertoire racine. |
# fichiers à traiter (dans jrest/) |
fichiers=$(grep -rl 'extends Cel' jrest) |
# liste des fonctions à substituer, obtenue à partir de: |
# grep -A1 'delete wrappers' jrest/lib/Cel.php |grep 'function.*()'|awk -F '[ (]' '{print $3}' |
wrappers=( requeter executer protegerRequete proteger executerRequeteSimple executerRequete getTxt ) |
chaine=$(export IFS='|'; echo "${wrappers[*]}"); |
# Les fichiers qui définissent ou redéfinissent l'une de ces fonctions doivent être modifiés à la main |
# car il est légitime pour eux d'utiliser $this |
a_exclure=$(grep -rEl "function ($chaine)\(" jrest) |
# (ils représentent 10 occurences du pattern) |
# en réalité les fichiers dans scripts/ n'ont pas besoin d'être modifiés |
# la liste refiltrée des fichiers |
fichiers=$(echo "$fichiers"|fgrep -v -f <(echo "$a_exclure")) |
echo -e "a modifier manuellement:\n$a_exclure" >&2 |
# 3 backslashes: |
# 1 pour ne pas interpréter $this par bash entre les "" |
# 1 autre en tant que simple bashslash (donc doublé) pour éviter que sed ne considère '$' comme fin de ligne |
# Première regexp: |
# 0 substitutions, car seuls les fichiers dans scripts/ l'utilisent |
# or ils n'étendent pas la classe Cel |
# sed -E "s;\\\$this->bdd->($chaine)\(;Cel::db()->\1(;g" $fichiers |
# Seconde regexp |
# 489 substitutions: |
# sed -nE "s;\\\$this->($chaine)\(;Cel::db()->\1(;gp" $fichiers |
sed -i -E "s;\\\$this->($chaine)\(;Cel::db()->\1(;g" $fichiers |
# Troisième passe: substitution de $this->bdd->quote() |
# 25 substitutions |
fichiers_quote=$(grep -rl '$this->bdd->quote(' jrest/services) |
sed -i -E 's;\$this->bdd->quote\(;Cel::db()->quote(;g' $fichiers_quote |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
Added: svn:eol-style |
+native |
\ No newline at end of property |
/branches/v1.7-croissant/scripts/. |
---|
New file |
Property changes: |
Added: svn:ignore |
+framework.php |