Subversion Repositories eFlore/Applications.cel

Compare Revisions

No changes between revisions

Ignore whitespace Rev 1765 → Rev 1975

/tags/v1.8-debroussailleuse/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();
}
?>
/tags/v1.8-debroussailleuse/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;
}
}
?>
/tags/v1.8-debroussailleuse/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:eol-style
+native
\ No newline at end of property
Added: svn:executable
+*
\ No newline at end of property
/tags/v1.8-debroussailleuse/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);
}
}
?>
/tags/v1.8-debroussailleuse/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
/tags/v1.8-debroussailleuse/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:eol-style
+native
\ No newline at end of property
Added: svn:executable
+*
\ No newline at end of property
/tags/v1.8-debroussailleuse/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/"
/tags/v1.8-debroussailleuse/scripts/configurations
New file
Property changes:
Added: svn:ignore
+config.ini
/tags/v1.8-debroussailleuse/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';
?>
/tags/v1.8-debroussailleuse/scripts/.
New file
Property changes:
Added: svn:ignore
+framework.php