/branches/v1.7-croissant/build.properties |
---|
File deleted |
/branches/v1.7-croissant/TODO |
---|
File deleted |
/branches/v1.7-croissant/vendors/PHPExcel/issue-79.patch |
---|
File deleted |
/branches/v1.7-croissant/vendors/PHPExcel/f44b41242023265192efa5d4dd1dbf1dcb0d7cd1.diff |
---|
File deleted |
/branches/v1.7-croissant/vendors/gwt-ext-ux/UploadDialog/Ext.ux.UploadDialog.js |
---|
File deleted |
\ No newline at end of file |
/branches/v1.7-croissant/vendors/gwt-ext-ux/UploadDialog/README.txt |
---|
File deleted |
\ No newline at end of file |
/branches/v1.7-croissant/vendors/gwt-ext-ux/UploadDialog/Ext.ux.UploadDialog.packed.js |
---|
File deleted |
\ No newline at end of file |
/branches/v1.7-croissant/build.xml |
---|
1,87 → 1,25 |
<project name="cel_GWT2" xmlns:artifact="urn:maven-artifact-ant" basedir="."> |
<property file="build.properties"/> |
<property name="extjsdestdir" value="src/org/tela_botanica/public/js/ext"/> |
<target name="init"> |
<property file="local.properties" /> |
<property name="server-url" value="${server-url}" /> |
<property name="server-login" value="${server-login}" /> |
<property name="server-password" value="${server-password}" /> |
<property name="server-dir" value="${server-dir}" /> |
<property name="gwt-path" value="${gwt-path}" /> |
</target> |
<target name="generate-vocabulary" depends="init"> |
<target name="init"> |
<property file="local.properties" /> |
<property name="server-url" value="${server-url}" /> |
<property name="server-login" value="${server-login}" /> |
<property name="server-password" value="${server-password}" /> |
<property name="server-dir" value="${server-dir}" /> |
<property name="gwt-path" value="${gwt-path}" /> |
</target> |
<target name="generate-vocabulary" depends="init"> |
<java classname="com.google.gwt.i18n.tools.I18NSync" fork="true"> |
<arg value="org.tela_botanica.client.i18n.VocabulaireMetadonnees" /> |
<classpath> |
<path> |
<pathelement location="${gwt-path}/gwt-user.jar" /> |
<pathelement location="${gwt-path}/gwt-dev.jar" /> |
<pathelement location="src" /> |
</path> |
</classpath> |
</java> |
</target> |
<path id="gwt"> |
<fileset includes="*.jar" dir="${gwt-path}/gwt/build/lib"/> |
<fileset includes="*.jar" dir="${gwt-path}/gwt-google-apis/maps/build/lib"/> |
<fileset includes="gwtext.jar" dir="${gwt-path}/gwt-ext/build/lib"/> |
<!-- alternativement, en cas de passage (très hypothétique) a gwt 3: |
<fileset includes="gxt-legacy-3.0.1.jar" dir="${gwt-path}/gxt"/> |
<fileset includes="gxt-3.0.1.jar" dir="${gwt-path}/gxt"/> --> |
<fileset includes="*.jar" dir="${gwt-path}/gwt-ext-ux/build/lib"/> |
<pathelement location="src" /> |
</path> |
<!-- todo: must be inside cel2.gwt.xml in some way --> |
<target name="link-resources"> |
<mkdir dir="${extjsdestdir}"/> |
<mkdir dir="${extjsdestdir}/adapter/ext"/> <!-- normalement optionnel en extjs 4.2.1 --> |
<symlink overwrite="true" link="${extjsdestdir}/adapter/ext/" resource="${extjsdir}/adapter/ext/ext-base.js"/> |
<symlink overwrite="true" link="${extjsdestdir}" resource="${extjsdir}/ext-all.js"/> |
<symlink overwrite="true" link="${extjsdestdir}" resource="${extjsdir}/resources"/> |
</target> |
<target name="test"><echoproperties/></target> <!-- sometimes useful --> |
<target name="compile" depends="link-resources"> |
<!-- <java classname="com.google.gwt.dev.GWTCompiler" fork="true"> --> |
<java classname="com.google.gwt.dev.Compiler" fork="true"> |
<arg line="-localWorkers 2 -style DETAILED ${projectName}"/> |
<!-- <arg line="-out build/gwtOutput"/> --> |
<classpath refid="gwt"/> |
</java> |
</target> |
<target name="quick" depends="link-resources"> |
<java classname="com.google.gwt.dev.Compiler" fork="true"> |
<arg line="-style DETAILED -draftCompile ${projectTestName}" /> |
<classpath refid="gwt"/> |
</java> |
</target> |
<target name="debug" depends="link-resources"> |
<java classname="com.google.gwt.dev.Compiler" fork="true"> |
<arg line="-style DETAILED -logLevel DEBUG"/> <!-- TRACE --> |
<arg value="${projectName}" /> |
<classpath refid="gwt"/> |
</java> |
</target> |
<target name="live"> |
<java classname="com.google.gwt.dev.DevMode" spawn="true" fork="true"> |
<arg line="-startupUrl http://${celhost}/war/cel2.html -noserver -codeServerPort auto ${projectName}" /> |
<classpath refid="gwt"/> |
</java> |
</target> |
</project> |
<java classname="com.google.gwt.i18n.tools.I18NSync" fork="true"> |
<arg value="org.tela_botanica.client.i18n.VocabulaireMetadonnees" /> |
<classpath> |
<path> |
<pathelement location="${gwt-path}/gwt-user.jar" /> |
<pathelement location="${gwt-path}/gwt-dev.jar" /> |
<pathelement location="src" /> |
</path> |
</classpath> |
</java> |
</target> |
</project> |
/branches/v1.7-croissant/widget/modules/cartopoint/squelettes/carte_defaut.tpl.html |
---|
248,7 → 248,7 |
<td> |
<span class="nom-sci"> |
{{if nn != null && nn != 0 && nn != ''}} |
<a href="${urlEflore}" |
<a href="{urlEflore}" |
onclick="ouvrirNouvelleFenetre(this, event)"> |
${nomSci} |
</a> |
/branches/v1.7-croissant/widget/modules/photo/Photo.php |
---|
176,8 → 176,8 |
$item['eflore_url'] = $item['lien'] ; |
} |
// Récupération du GUID - aaaaah c'est cracra si on change la config yatoukipett !! Satan is in this code !!! |
if (preg_match($this->config['photo']['motif_guid'], $entree->guid, $match)) { |
// Récupération du GUID |
if (preg_match('/appli:cel-img:([0-9]+)[^.]+\.jpg$/', $entree->guid, $match)) { |
$item['guid'] = (int) $match[1]; |
} else { |
$item['guid'] = $entree->guid; |
/branches/v1.7-croissant/widget/modules/photo/config.defaut.ini |
---|
1,10 → 1,8 |
[photo] |
; Chemin pour l'autoload à ajouter |
autoload = "bibliotheque/;bibliotheque/xml_feed_parser/1.0.4/;bibliotheque/xml_feed_parser/1.0.4/parsers/" |
; URL ou chemin du flux RSS contenant les liens vers les photos - ne pas oublier de changer motif_guid en même temps! |
; URL ou chemin du flux RSS contenant les liens vers les photos |
fluxRssUrl = "http://www.tela-botanica.org/service:cel:CelSyndicationImage/multicriteres/atom/M" |
; Expression régulière pour récupérer le numéro de l'image à partir de l'URL renvoyée par le flux Atom |
motif_guid = "/appli:cel-img:([0-9]+)[^.]+\.jpg$/" |
; Squelette d'url pour accéder à la fiche eFlore |
efloreUrlTpl = "http://www.tela-botanica.org/bdtfx-nn-%s" |
; Nombre de vignette à afficher : nombre de vignettes par ligne et nombre de lignes séparés par une vigule (ex. : 4,3). |
/branches/v1.7-croissant/widget/modules/saisie/Saisie.php |
---|
23,7 → 23,6 |
const DS = DIRECTORY_SEPARATOR; |
const PROJET_DEFAUT = 'defaut'; |
const WS_SAISIE = 'CelWidgetSaisie'; |
const WS_UPLOAD = 'CelWidgetUploadImageTemp'; |
const WS_OBS = 'CelObs'; |
const WS_NOM = 'noms'; |
private $NS_PROJET_VERSION = '1.01'; |
108,7 → 107,6 |
$widget['donnees']['url_base'] = sprintf($this->config['chemins']['baseURLAbsoluDyn'], ''); |
$widget['donnees']['url_ws_saisie'] = sprintf($this->config['chemins']['baseURLServicesCelTpl'], self::WS_SAISIE); |
$widget['donnees']['url_ws_obs'] = sprintf($this->config['chemins']['baseURLServicesCelTpl'], self::WS_OBS); |
$widget['donnees']['url_ws_upload'] = sprintf($this->config['chemins']['baseURLServicesCelTpl'], self::WS_UPLOAD); |
$widget['donnees']['url_ws_annuaire'] = sprintf($this->config['chemins']['baseURLServicesAnnuaireTpl'], 'utilisateur/identite-par-courriel/'); |
/branches/v1.7-croissant/widget/modules/saisie/squelettes/defaut/defaut.tpl.html |
---|
412,7 → 412,7 |
</div> |
</div> |
</form> |
<form id="form-upload" class="form-horizontal" action="<?= $url_ws_upload ?>?projet=sauvages" |
<form id="form-upload" class="form-horizontal" action="<?=$url_base?>saisie?projet=sauvages&service=upload-image" |
method="post" enctype="multipart/form-data"> |
<h2>Image(s) de cette plante</h2> |
<strong>Ajouter une image</strong> |
/branches/v1.7-croissant/widget/modules/saisie/squelettes/defaut/js/defaut.js |
---|
784,9 → 784,9 |
$("#dialogue-obs-transaction-ko .alert-txt").append('<pre class="msg-erreur">'+erreurMsg+'</pre>'); |
$("#dialogue-obs-transaction-ko .alert-txt").append('<pre class="msg-debug">Débogage : '+debugMsg+'</pre>'); |
} |
var hrefCourriel = "mailto:cel_remarques@tela-botanica.org?"+ |
"subject=Dysfonctionnement du widget de saisie "+TAG_PROJET+ |
"&body="+erreurMsg+"%0D%0ADébogage :%0D%0A"+debugMsg; |
var hrefCourriel = "mailto:cel@tela-botanica.org?"+ |
"subject=Disfonctionnement du widget de saisie "+TAG_PROJET+ |
"&body="+erreurMsg+"\nDébogage :\n"+debugMsg; |
$('#dialogue-obs-transaction-ko .alert-txt').append($("#tpl-transmission-ko").clone() |
.find('.courriel-erreur') |
/branches/v1.7-croissant/widget/modules/saisie/squelettes/florileges/florileges.tpl.html |
---|
904,7 → 904,7 |
</div> |
</form> |
<form id="form-upload" class="form-horizontal" action="<?= $url_ws_upload ?>?projet=sauvages" |
<form id="form-upload" class="form-horizontal" action="<?=$url_base?>saisie?projet=sauvages&service=upload-image" |
method="post" enctype="multipart/form-data"> |
<div class="row-fluid"> |
<div class="span12 well"> |
/branches/v1.7-croissant/widget/modules/saisie/squelettes/sauvages/js/sauvages.js |
---|
555,7 → 555,6 |
'num_nom_ret' : taxons[numNomSel]['num_nom_ret'], |
'num_taxon' : taxons[numNomSel]['num_taxon'], |
'famille' : taxons[numNomSel]['famille'], |
'nom_referentiel' : 'bdtfx', |
'nom_fr' : taxons[numNomSel]['nom_fr'], |
'milieu' : milieux.join(','), |
'latitude' : $("#latitude").val(), |
/branches/v1.7-croissant/widget/modules/saisie/squelettes/sauvages/sauvages.tpl.html |
---|
232,7 → 232,7 |
</form> |
<div id="zone-fiche-terrain-photo"> |
<form id="form-upload" action="<?= $url_ws_upload ?>?projet=sauvages" |
<form id="form-upload" action="<?=$url_base?>saisie?projet=sauvages&service=upload-image" |
method="post" enctype="multipart/form-data"> |
<fieldset id="partie-photo"> |
<legend>Ajouter une photo</legend> |
/branches/v1.7-croissant/widget/modules/saisie/squelettes/biodiversite34/js/biodiversite34.js |
---|
114,7 → 114,6 |
'num_nom_ret' : taxons[numNomSel]['num_nom_ret'], |
'num_taxon' : taxons[numNomSel]['num_taxon'], |
'famille' : taxons[numNomSel]['famille'], |
'nom_referentiel' : 'bdtfx', |
'nom_fr' : taxons[numNomSel]['nom_fr'], |
'milieu' : $("#milieu option:selected").val(), |
'latitude' : $("#latitude").val(), |
/branches/v1.7-croissant/widget/modules/saisie |
---|
Property changes: |
Modified: svn:mergeinfo |
Reverse-merged /trunk/widget/modules/saisie:r1840-1913 |
/branches/v1.7-croissant/widget/widget.ini.defaut.php |
---|
34,7 → 34,7 |
baseURLServicesEfloreTpl = "http://www.tela-botanica.org/service:eflore:%s/%s/%s" |
; Dossier de stockage temporaire des images (ATTENTION : mettre le slash à la fin) |
imagesTempDossier = "/home/telabotap/www/eflore/cel/cache/images/" |
; Squelette d'URL pour les images temporaires sotckées sur le serveur - OBSOLETE |
; Squelette d'URL pour les images temporaires sotckées sur le serveur |
imagesTempUrlTpl = "http://www.tela-botanica.org/eflore/cel/cache/images/%s" |
; Url du service fournissant des infos sur les noms à partir d'un num tax |
infosTaxonUrl = "http://www.tela-botanica.org/service:eflore:0.1/bdtfx/noms/%s" |
/branches/v1.7-croissant/doc/bdd/schema_bdd_cel_v2.mwb |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.7-croissant/doc/bdd/cel_v2.sql |
---|
8,13 → 8,13 |
-- ----------------------------------------------------- |
DROP TABLE IF EXISTS `cel_obs_images` ; |
CREATE TABLE IF NOT EXISTS `cel_obs_images` ( |
`id_image` BIGINT NOT NULL, |
`id_observation` BIGINT NOT NULL, |
`date_liaison` DATETIME NOT NULL, |
PRIMARY KEY (`id_image`, `id_observation`), |
INDEX `observation` (`id_observation` ASC), |
INDEX `image` (`id_image` ASC)) |
CREATE TABLE IF NOT EXISTS `cel_obs_images` ( |
`id_image` BIGINT NOT NULL , |
`id_observation` BIGINT NOT NULL , |
`date_liaison` DATETIME NOT NULL , |
PRIMARY KEY (`id_image`, `id_observation`) , |
INDEX `observation` (`id_observation` ASC) , |
INDEX `image` (`id_image` ASC) ) |
ENGINE = MyISAM |
DEFAULT CHARACTER SET = utf8 |
COLLATE = utf8_unicode_ci; |
25,17 → 25,17 |
-- ----------------------------------------------------- |
DROP TABLE IF EXISTS `cel_utilisateurs` ; |
CREATE TABLE IF NOT EXISTS `cel_utilisateurs` ( |
`id_utilisateur` INT NOT NULL, |
`prenom` VARCHAR(255) NULL DEFAULT NULL, |
`nom` VARCHAR(255) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL, |
`courriel` VARCHAR(255) NOT NULL, |
`mot_de_passe` VARCHAR(45) NOT NULL, |
`admin` TINYINT(1) NULL DEFAULT '0', |
`licence_acceptee` TINYINT(1) NULL DEFAULT '0' COMMENT 'Acceptation de la licence utilisateur pour le cel\n', |
`preferences` LONGTEXT NULL DEFAULT NULL COMMENT 'Préférences utilisateur sérialisées sous une forme à définir\n', |
`date__premiere_utilisation` DATETIME NOT NULL, |
PRIMARY KEY (`id_utilisateur`)) |
CREATE TABLE IF NOT EXISTS `cel_utilisateurs` ( |
`id_utilisateur` INT NOT NULL , |
`prenom` VARCHAR(255) NULL DEFAULT NULL , |
`nom` VARCHAR(255) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL , |
`courriel` VARCHAR(255) NOT NULL , |
`mot_de_passe` VARCHAR(45) NOT NULL , |
`admin` TINYINT(1) NULL DEFAULT '0' , |
`licence_acceptee` TINYINT(1) NULL DEFAULT '0' COMMENT 'Acceptation de la licence utilisateur pour le cel\n' , |
`preferences` LONGTEXT NULL DEFAULT NULL COMMENT 'Préférences utilisateur sérialisées sous une forme à définir\n' , |
`date__premiere_utilisation` DATETIME NOT NULL , |
PRIMARY KEY (`id_utilisateur`) ) |
ENGINE = MyISAM |
DEFAULT CHARACTER SET = utf8 |
COLLATE = utf8_general_ci; |
46,24 → 46,24 |
-- ----------------------------------------------------- |
DROP TABLE IF EXISTS `cel_mots_cles_images` ; |
CREATE TABLE IF NOT EXISTS `cel_mots_cles_images` ( |
`id_mot_cle_image` VARCHAR(128) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL COMMENT 'Identifiant du mot-clé pour une position donnée dans l\'arbre d\'utilisateur.\nLe même mot-clé peut être placé à plusieurs endroits de l\'arbre et aura donc deux id distincts.', |
`id_utilisateur` VARCHAR(255) NOT NULL, |
`mot_cle` VARCHAR(50) NOT NULL COMMENT 'Mot clé de l\'utilisateur pour une position dans l\'arbre.', |
`md5` VARCHAR(32) NOT NULL COMMENT 'MD5 du mot clé en minuscule.', |
`bg` BIGINT NOT NULL COMMENT 'Bordure gauche.', |
`bd` BIGINT NOT NULL COMMENT 'bordure droite.', |
`niveau` INT NOT NULL COMMENT 'Niveau du mot clé dans l\'arbre.', |
`ce_mot_cle_image_parent` VARCHAR(128) NOT NULL, |
PRIMARY KEY (`id_mot_cle_image`, `id_utilisateur`), |
CREATE TABLE IF NOT EXISTS `cel_mots_cles_images` ( |
`id_mot_cle_image` VARCHAR(128) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL COMMENT 'Identifiant du mot-clé pour une position donnée dans l\'arbre d\'utilisateur.\nLe même mot-clé peut être placé à plusieurs endroits de l\'arbre et aura donc deux id distincts.' , |
`id_utilisateur` VARCHAR(255) NOT NULL , |
`mot_cle` VARCHAR(50) NOT NULL COMMENT 'Mot clé de l\'utilisateur pour une position dans l\'arbre.' , |
`md5` VARCHAR(32) NOT NULL COMMENT 'MD5 du mot clé en minuscule.' , |
`bg` BIGINT NOT NULL COMMENT 'Bordure gauche.' , |
`bd` BIGINT NOT NULL COMMENT 'bordure droite.' , |
`niveau` INT NOT NULL COMMENT 'Niveau du mot clé dans l\'arbre.' , |
`ce_mot_cle_image_parent` VARCHAR(128) NOT NULL , |
PRIMARY KEY (`id_mot_cle_image`, `id_utilisateur`) , |
CONSTRAINT `fk_cel_mots_cles_images_cel_utilisateur1` |
FOREIGN KEY (`id_utilisateur`) |
REFERENCES `cel_utilisateurs` (`id_utilisateur`) |
FOREIGN KEY (`id_utilisateur` ) |
REFERENCES `cel_utilisateurs` (`id_utilisateur` ) |
ON DELETE NO ACTION |
ON UPDATE NO ACTION, |
CONSTRAINT `fk_cel_mots_cles_images_cel_mots_cles_images1` |
FOREIGN KEY (`ce_mot_cle_image_parent`) |
REFERENCES `cel_mots_cles_images` (`id_mot_cle_image`) |
FOREIGN KEY (`ce_mot_cle_image_parent` ) |
REFERENCES `cel_mots_cles_images` (`id_mot_cle_image` ) |
ON DELETE NO ACTION |
ON UPDATE NO ACTION) |
ENGINE = InnoDB |
78,12 → 78,12 |
-- ----------------------------------------------------- |
DROP TABLE IF EXISTS `cel_images_mots_cles` ; |
CREATE TABLE IF NOT EXISTS `cel_images_mots_cles` ( |
`id_image` BIGINT NOT NULL, |
`id_mot_cle_image` VARCHAR(128) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL, |
`id_utilisateur` VARCHAR(128) NOT NULL, |
PRIMARY KEY (`id_image`, `id_mot_cle_image`, `id_utilisateur`), |
INDEX `image` (`id_image` ASC)) |
CREATE TABLE IF NOT EXISTS `cel_images_mots_cles` ( |
`id_image` BIGINT NOT NULL , |
`id_mot_cle_image` VARCHAR(128) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL , |
`id_utilisateur` VARCHAR(128) NOT NULL , |
PRIMARY KEY (`id_image`, `id_mot_cle_image`, `id_utilisateur`) , |
INDEX `image` (`id_image` ASC) ) |
ENGINE = MyISAM |
DEFAULT CHARACTER SET = utf8 |
COLLATE = utf8_general_ci; |
94,33 → 94,33 |
-- ----------------------------------------------------- |
DROP TABLE IF EXISTS `cel_images` ; |
CREATE TABLE IF NOT EXISTS `cel_images` ( |
`id_image` BIGINT NOT NULL AUTO_INCREMENT, |
`ordre` BIGINT NOT NULL, |
`ce_utilisateur` VARCHAR(255) NOT NULL COMMENT 'L\'id utilisateur est un int mais on utilise un varchar pour stocker des observations avec des identifiants temporaires\n', |
`prenom_utilisateur` VARCHAR(255) NULL DEFAULT NULL, |
`nom_utilisateur` VARCHAR(255) NULL DEFAULT NULL, |
`courriel_utilisateur` VARCHAR(255) NULL DEFAULT NULL, |
`hauteur` INT NOT NULL, |
`largeur` INT NOT NULL, |
`appareil_fabriquant` VARCHAR(50) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL, |
`appareil_modele` VARCHAR(50) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL, |
`date_prise_de_vue` DATETIME NULL DEFAULT NULL, |
`note_qualite` DECIMAL(1,0) NULL DEFAULT NULL, |
`mots_cles_texte` LONGTEXT NULL DEFAULT NULL COMMENT 'Champ calculé contenant la liste des mots clés utilisateurs séparé par des virgules.\n', |
`commentaire` LONGTEXT CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL, |
`nom_original` VARCHAR(255) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL, |
`md5` VARCHAR(32) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL, |
`meta_exif` LONGTEXT CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL, |
`meta_iptc` LONGTEXT CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL, |
`meta_xmp` LONGTEXT NULL DEFAULT NULL, |
`meta_makernote` LONGTEXT NULL DEFAULT NULL, |
`meta_autres` LONGTEXT NULL DEFAULT NULL, |
`date_modification` DATETIME NOT NULL, |
`date_creation` DATETIME NOT NULL COMMENT 'Date d\'ajout de l\'image au CEL.', |
`publiable_eflore` TINYINT(1) NOT NULL DEFAULT 1, |
PRIMARY KEY (`id_image`), |
INDEX `id_image` (`id_image` ASC, `ordre` ASC, `ce_utilisateur` ASC)) |
CREATE TABLE IF NOT EXISTS `cel_images` ( |
`id_image` BIGINT NOT NULL AUTO_INCREMENT , |
`ordre` BIGINT NOT NULL , |
`ce_utilisateur` VARCHAR(255) NOT NULL COMMENT 'L\'id utilisateur est un int mais on utilise un varchar pour stocker des observations avec des identifiants temporaires\n' , |
`prenom_utilisateur` VARCHAR(255) NULL DEFAULT NULL , |
`nom_utilisateur` VARCHAR(255) NULL DEFAULT NULL , |
`courriel_utilisateur` VARCHAR(255) NULL DEFAULT NULL , |
`hauteur` INT NOT NULL , |
`largeur` INT NOT NULL , |
`appareil_fabriquant` VARCHAR(50) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL , |
`appareil_modele` VARCHAR(50) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL , |
`date_prise_de_vue` DATETIME NULL DEFAULT NULL , |
`note_qualite` DECIMAL(1,0) NULL DEFAULT NULL , |
`mots_cles_texte` LONGTEXT NULL DEFAULT NULL COMMENT 'Champ calculé contenant la liste des mots clés utilisateurs séparé par des virgules.\n' , |
`commentaire` LONGTEXT CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL , |
`nom_original` VARCHAR(255) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL , |
`md5` VARCHAR(32) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL , |
`meta_exif` LONGTEXT CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL , |
`meta_iptc` LONGTEXT CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL , |
`meta_xmp` LONGTEXT NULL DEFAULT NULL , |
`meta_makernote` LONGTEXT NULL DEFAULT NULL , |
`meta_autres` LONGTEXT NULL DEFAULT NULL , |
`date_modification` DATETIME NOT NULL , |
`date_creation` DATETIME NOT NULL COMMENT 'Date d\'ajout de l\'image au CEL.' , |
`publiable_eflore` TINYINT(1) NOT NULL DEFAULT 1 , |
PRIMARY KEY (`id_image`) , |
INDEX `id_image` (`id_image` ASC, `ordre` ASC, `ce_utilisateur` ASC) ) |
ENGINE = MyISAM |
AUTO_INCREMENT = 265 |
DEFAULT CHARACTER SET = utf8 |
132,24 → 132,24 |
-- ----------------------------------------------------- |
DROP TABLE IF EXISTS `cel_mots_cles_obs` ; |
CREATE TABLE IF NOT EXISTS `cel_mots_cles_obs` ( |
`id_mot_cle_obs` VARCHAR(128) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL, |
`id_utilisateur` VARCHAR(255) NOT NULL, |
`mot_cle` VARCHAR(50) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL, |
`md5` VARCHAR(32) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL, |
`bg` BIGINT NOT NULL, |
`bd` BIGINT NOT NULL, |
`niveau` INT NOT NULL, |
`ce_mot_cle_obs_parent` VARCHAR(128) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL, |
PRIMARY KEY (`id_mot_cle_obs`, `id_utilisateur`), |
CREATE TABLE IF NOT EXISTS `cel_mots_cles_obs` ( |
`id_mot_cle_obs` VARCHAR(128) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL , |
`id_utilisateur` VARCHAR(255) NOT NULL , |
`mot_cle` VARCHAR(50) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL , |
`md5` VARCHAR(32) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL , |
`bg` BIGINT NOT NULL , |
`bd` BIGINT NOT NULL , |
`niveau` INT NOT NULL , |
`ce_mot_cle_obs_parent` VARCHAR(128) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL , |
PRIMARY KEY (`id_mot_cle_obs`, `id_utilisateur`) , |
CONSTRAINT `fk_cel_mots_cles_obs_cel_utilisateur1` |
FOREIGN KEY (`id_utilisateur`) |
REFERENCES `cel_utilisateurs` (`id_utilisateur`) |
FOREIGN KEY (`id_utilisateur` ) |
REFERENCES `cel_utilisateurs` (`id_utilisateur` ) |
ON DELETE NO ACTION |
ON UPDATE NO ACTION, |
CONSTRAINT `fk_cel_mots_cles_obs_cel_mots_cles_obs1` |
FOREIGN KEY (`ce_mot_cle_obs_parent`) |
REFERENCES `cel_mots_cles_obs` (`id_mot_cle_obs`) |
FOREIGN KEY (`ce_mot_cle_obs_parent` ) |
REFERENCES `cel_mots_cles_obs` (`id_mot_cle_obs` ) |
ON DELETE NO ACTION |
ON UPDATE NO ACTION) |
ENGINE = InnoDB |
164,12 → 164,12 |
-- ----------------------------------------------------- |
DROP TABLE IF EXISTS `cel_obs_mots_cles` ; |
CREATE TABLE IF NOT EXISTS `cel_obs_mots_cles` ( |
`id_observation` BIGINT NOT NULL, |
`id_mot_cle_obs` VARCHAR(128) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL, |
`id_utilisateur` VARCHAR(128) NOT NULL, |
PRIMARY KEY (`id_observation`, `id_mot_cle_obs`, `id_utilisateur`), |
INDEX `observation` (`id_observation` ASC)) |
CREATE TABLE IF NOT EXISTS `cel_obs_mots_cles` ( |
`id_observation` BIGINT NOT NULL , |
`id_mot_cle_obs` VARCHAR(128) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL , |
`id_utilisateur` VARCHAR(128) NOT NULL , |
PRIMARY KEY (`id_observation`, `id_mot_cle_obs`, `id_utilisateur`) , |
INDEX `observation` (`id_observation` ASC) ) |
ENGINE = MyISAM |
DEFAULT CHARACTER SET = utf8 |
COLLATE = utf8_general_ci; |
180,22 → 180,22 |
-- ----------------------------------------------------- |
DROP TABLE IF EXISTS `cel_zones_geo` ; |
CREATE TABLE IF NOT EXISTS `cel_zones_geo` ( |
`id_zone_geo` VARCHAR(50) NOT NULL, |
`code` VARCHAR(10) NOT NULL, |
`nom` VARCHAR(255) NOT NULL, |
`utm_secteur` CHAR(3) NOT NULL, |
`utm_x` INT NOT NULL DEFAULT '0', |
`utm_y` INT NOT NULL DEFAULT '0', |
`wgs84_latitude` FLOAT NOT NULL, |
`wgs84_longitude` FLOAT NOT NULL, |
`date_modification` DATETIME NOT NULL, |
`ce_zone_geo_parente` VARCHAR(50) NULL DEFAULT NULL, |
`bg` BIGINT NULL, |
`bd` BIGINT NULL, |
`niveau` INT NULL, |
PRIMARY KEY (`id_zone_geo`), |
INDEX `nom` (`nom` ASC)) |
CREATE TABLE IF NOT EXISTS `cel_zones_geo` ( |
`id_zone_geo` VARCHAR(50) NOT NULL , |
`code` VARCHAR(10) NOT NULL , |
`nom` VARCHAR(255) NOT NULL , |
`utm_secteur` CHAR(3) NOT NULL , |
`utm_x` INT NOT NULL DEFAULT '0' , |
`utm_y` INT NOT NULL DEFAULT '0' , |
`wgs84_latitude` FLOAT NOT NULL , |
`wgs84_longitude` FLOAT NOT NULL , |
`date_modification` DATETIME NOT NULL , |
`ce_zone_geo_parente` VARCHAR(50) NULL DEFAULT NULL , |
`bg` BIGINT NULL , |
`bd` BIGINT NULL , |
`niveau` INT NULL , |
PRIMARY KEY (`id_zone_geo`) , |
INDEX `nom` (`nom` ASC) ) |
ENGINE = MyISAM |
DEFAULT CHARACTER SET = utf8 |
COLLATE = utf8_general_ci; |
206,12 → 206,12 |
-- ----------------------------------------------------- |
DROP TABLE IF EXISTS `cel_obs_etendues` ; |
CREATE TABLE IF NOT EXISTS `cel_obs_etendues` ( |
`id_observation` BIGINT NOT NULL, |
`cle` VARCHAR(255) NOT NULL COMMENT 'Clé du champ au format chat mot (sans accents).\nEx. : maCle, uneAutreCle', |
`label` VARCHAR(255) NOT NULL COMMENT 'Intitulé du champ à afficher dans les formulaires.', |
`valeur` TEXT NOT NULL COMMENT 'Valeur du champ.', |
PRIMARY KEY (`id_observation`, `cle`)) |
CREATE TABLE IF NOT EXISTS `cel_obs_etendues` ( |
`id_observation` BIGINT NOT NULL , |
`cle` VARCHAR(255) NOT NULL COMMENT 'Clé du champ au format chat mot (sans accents).\nEx. : maCle, uneAutreCle' , |
`label` VARCHAR(255) NOT NULL COMMENT 'Intitulé du champ à afficher dans les formulaires.' , |
`valeur` TEXT NOT NULL COMMENT 'Valeur du champ.' , |
PRIMARY KEY (`id_observation`, `cle`) ) |
ENGINE = MyISAM |
DEFAULT CHARACTER SET = utf8 |
COLLATE = utf8_general_ci |
223,49 → 223,49 |
-- ----------------------------------------------------- |
DROP TABLE IF EXISTS `cel_obs` ; |
CREATE TABLE IF NOT EXISTS `cel_obs` ( |
`id_observation` BIGINT NOT NULL AUTO_INCREMENT, |
`ordre` BIGINT NOT NULL, |
`ce_utilisateur` VARCHAR(255) NOT NULL, |
`prenom_utilisateur` VARCHAR(255) NULL DEFAULT NULL, |
`nom_utilisateur` VARCHAR(255) NULL DEFAULT NULL, |
`courriel_utilisateur` VARCHAR(255) NULL DEFAULT NULL, |
`nom_sel` VARCHAR(601) NULL DEFAULT NULL COMMENT 'doit pouvoir contenir CONCAT(bdtfx.nom_sci, \" \", bdtfx.auteur) soit 601 caractères', |
`nom_sel_nn` DECIMAL(9,0) NULL DEFAULT NULL COMMENT 'Numéro du nom sélectionné.', |
`nom_ret` VARCHAR(601) NULL DEFAULT NULL COMMENT 'doit pouvoir contenir CONCAT(bdtfx.nom_sci, \" \", bdtfx.auteur) soit 601 caractères', |
`nom_ret_nn` DECIMAL(9,0) NULL DEFAULT NULL COMMENT 'Numéro du nom retenu = num_nom_retenu dans bdtfx', |
`nt` DECIMAL(9,0) NULL DEFAULT NULL COMMENT 'Numéro taxonomique.', |
`famille` VARCHAR(255) NULL DEFAULT NULL, |
`nom_referentiel` VARCHAR(255) NULL DEFAULT NULL, |
`ce_zone_geo` VARCHAR(50) NULL DEFAULT NULL, |
`zone_geo` VARCHAR(255) NULL DEFAULT NULL, |
`lieudit` VARCHAR(255) NULL DEFAULT NULL, |
`station` VARCHAR(255) NULL DEFAULT NULL, |
`milieu` VARCHAR(255) NULL DEFAULT NULL, |
`latitude` DECIMAL(8,5) NULL DEFAULT NULL, |
`longitude` DECIMAL(8,5) NULL DEFAULT NULL, |
`altitude` INT(5) NULL DEFAULT NULL, |
`geodatum` VARCHAR(25) NULL DEFAULT NULL COMMENT 'Référentiel géographique utilisé.\nPar exmple : WGS84', |
`date_observation` DATETIME NULL DEFAULT NULL, |
`mots_cles_texte` LONGTEXT NULL DEFAULT NULL COMMENT 'Champ calculé contenant la liste des mots clés utilisateurs séparé par des virgules.', |
`commentaire` TEXT NULL DEFAULT NULL, |
`transmission` TINYINT(1) NULL DEFAULT NULL, |
`date_creation` DATETIME NULL DEFAULT NULL, |
`date_modification` DATETIME NULL DEFAULT NULL, |
`date_transmission` DATETIME NULL DEFAULT NULL, |
`abondance` VARCHAR(50) NULL DEFAULT NULL, |
`certitude` VARCHAR(255) NULL DEFAULT NULL, |
`phenologie` VARCHAR(255) NULL DEFAULT NULL, |
`code_insee_calcule` VARCHAR(5) NULL DEFAULT NULL COMMENT 'Code INSEE calculé par un scrip CRON.', |
PRIMARY KEY (`id_observation`), |
UNIQUE INDEX `id_obs` (`ce_utilisateur` ASC, `ordre` ASC), |
INDEX `date_creation` (`ce_utilisateur`(10) ASC, `date_creation` ASC), |
INDEX `coordonnees` (`latitude` ASC, `longitude` ASC), |
INDEX `nom_retenu` (`nom_ret` ASC), |
INDEX `date_observation` (`date_observation` ASC), |
INDEX `nom_referentiel` (`nom_referentiel`(5) ASC) COMMENT ' /* comment truncated */ /*Index sur (bdtfx,bdtfx,isfan)*/', |
INDEX `date_transmission` (`date_transmission` DESC) COMMENT ' /* comment truncated */ /*Date_transmission : nécessaire à l'ORDER BY utilisé dans la liste d'observation de DEL*/', |
INDEX `transmission` (`transmission` ASC) COMMENT ' /* comment truncated */ /*Nécessaire à CEL/DEL qui officie avec transmission = 1*/') |
CREATE TABLE IF NOT EXISTS `cel_obs` ( |
`id_observation` BIGINT NOT NULL AUTO_INCREMENT , |
`ordre` BIGINT NOT NULL , |
`ce_utilisateur` VARCHAR(255) NOT NULL , |
`prenom_utilisateur` VARCHAR(255) NULL DEFAULT NULL , |
`nom_utilisateur` VARCHAR(255) NULL DEFAULT NULL , |
`courriel_utilisateur` VARCHAR(255) NULL DEFAULT NULL , |
`nom_sel` VARCHAR(601) NULL DEFAULT NULL COMMENT 'doit pouvoir contenir CONCAT(bdtfx.nom_sci, \" \", bdtfx.auteur) soit 601 caractères' , |
`nom_sel_nn` DECIMAL(9,0) NULL DEFAULT NULL COMMENT 'Numéro du nom sélectionné.' , |
`nom_ret` VARCHAR(601) NULL DEFAULT NULL COMMENT 'doit pouvoir contenir CONCAT(bdtfx.nom_sci, \" \", bdtfx.auteur) soit 601 caractères' , |
`nom_ret_nn` DECIMAL(9,0) NULL DEFAULT NULL COMMENT 'Numéro du nom retenu = num_nom_retenu dans bdtfx' , |
`nt` DECIMAL(9,0) NULL DEFAULT NULL COMMENT 'Numéro taxonomique.' , |
`famille` VARCHAR(255) NULL DEFAULT NULL , |
`nom_referentiel` VARCHAR(255) NULL DEFAULT NULL , |
`ce_zone_geo` VARCHAR(50) NULL DEFAULT NULL , |
`zone_geo` VARCHAR(255) NULL DEFAULT NULL , |
`lieudit` VARCHAR(255) NULL DEFAULT NULL , |
`station` VARCHAR(255) NULL DEFAULT NULL , |
`milieu` VARCHAR(255) NULL DEFAULT NULL , |
`latitude` DECIMAL(8,5) NULL DEFAULT NULL , |
`longitude` DECIMAL(8,5) NULL DEFAULT NULL , |
`altitude` INT(5) NULL DEFAULT NULL , |
`geodatum` VARCHAR(25) NULL DEFAULT NULL COMMENT 'Référentiel géographique utilisé.\nPar exmple : WGS84' , |
`date_observation` DATETIME NULL DEFAULT NULL , |
`mots_cles_texte` LONGTEXT NULL DEFAULT NULL COMMENT 'Champ calculé contenant la liste des mots clés utilisateurs séparé par des virgules.' , |
`commentaire` TEXT NULL DEFAULT NULL , |
`transmission` TINYINT(1) NULL DEFAULT NULL , |
`date_creation` DATETIME NULL DEFAULT NULL , |
`date_modification` DATETIME NULL DEFAULT NULL , |
`date_transmission` DATETIME NULL DEFAULT NULL , |
`abondance` VARCHAR(50) NULL DEFAULT NULL , |
`certitude` VARCHAR(255) NULL DEFAULT NULL , |
`phenologie` VARCHAR(255) NULL DEFAULT NULL , |
`code_insee_calcule` VARCHAR(5) NULL DEFAULT NULL COMMENT 'Code INSEE calculé par un scrip CRON.' , |
PRIMARY KEY (`id_observation`) , |
INDEX `id_obs` (`ordre` ASC, `ce_utilisateur` ASC) , |
INDEX `date_creation` (`ce_utilisateur` ASC, `date_creation` ASC) , |
INDEX `coordonnees` (`latitude` ASC, `longitude` ASC) , |
INDEX `nom_retenu` (`nom_ret` ASC) , |
INDEX `date_observation` (`date_observation` ASC) COMMENT 'Date_transmission : nécessaire à l'ORDER BY utilisé dans la liste d'observation de DEL' , |
INDEX `nom_referentiel` (`nom_referentiel`(5) ASC) COMMENT 'Index sur (bdtfx,bdtfx,isfan)' , |
INDEX `date_transmission` (`date_transmission` DESC) COMMENT 'Nécessaire à CEL/DEL qui officie avec transmission = 1' , |
INDEX `transmission` (`transmission` ASC) ) |
ENGINE = MyISAM |
DEFAULT CHARACTER SET = utf8 |
COLLATE = utf8_general_ci; |
276,13 → 276,13 |
-- ----------------------------------------------------- |
DROP TABLE IF EXISTS `cel_utilisateurs_infos` ; |
CREATE TABLE IF NOT EXISTS `cel_utilisateurs_infos` ( |
`id_utilisateur` INT NOT NULL, |
`admin` TINYINT(1) NOT NULL DEFAULT 0, |
`licence_acceptee` TINYINT(1) NOT NULL DEFAULT 0, |
`preferences` LONGTEXT NULL DEFAULT NULL, |
`date_premiere_utilisation` DATETIME NOT NULL, |
PRIMARY KEY (`id_utilisateur`)) |
CREATE TABLE IF NOT EXISTS `cel_utilisateurs_infos` ( |
`id_utilisateur` INT NOT NULL , |
`admin` TINYINT(1) NOT NULL DEFAULT 0 , |
`licence_acceptee` TINYINT(1) NOT NULL DEFAULT 0 , |
`preferences` LONGTEXT NULL DEFAULT NULL , |
`date_premiere_utilisation` DATETIME NOT NULL , |
PRIMARY KEY (`id_utilisateur`) ) |
ENGINE = MyISAM |
DEFAULT CHARACTER SET = utf8 |
COLLATE = utf8_general_ci |
294,12 → 294,12 |
-- ----------------------------------------------------- |
DROP TABLE IF EXISTS `cel_images_etendues` ; |
CREATE TABLE IF NOT EXISTS `cel_images_etendues` ( |
`id_observation` BIGINT NOT NULL, |
`cle` VARCHAR(255) NOT NULL COMMENT 'Clé du champ au format chat mot (sans accents).\nEx. : maCle, uneAutreCle', |
`label` VARCHAR(45) NOT NULL COMMENT 'Intitulé du champ à afficher dans les formulaires.', |
`valeur` TEXT NOT NULL COMMENT 'Valeur du champ.', |
PRIMARY KEY (`id_observation`, `cle`)) |
CREATE TABLE IF NOT EXISTS `cel_images_etendues` ( |
`id_observation` BIGINT NOT NULL , |
`cle` VARCHAR(255) NOT NULL COMMENT 'Clé du champ au format chat mot (sans accents).\nEx. : maCle, uneAutreCle' , |
`label` VARCHAR(45) NOT NULL COMMENT 'Intitulé du champ à afficher dans les formulaires.' , |
`valeur` TEXT NOT NULL COMMENT 'Valeur du champ.' , |
PRIMARY KEY (`id_observation`, `cle`) ) |
ENGINE = MyISAM |
DEFAULT CHARACTER SET = utf8 |
COLLATE = utf8_general_ci |
321,10 → 321,10 |
-- ----------------------------------------------------- |
DROP VIEW IF EXISTS `cel_utilisateurs` ; |
DROP TABLE IF EXISTS `cel_utilisateurs`; |
CREATE OR REPLACE VIEW `cel_utilisateurs` AS |
SELECT at.U_ID AS id_utilisateur, at.U_SURNAME AS prenom, at.U_NAME AS nom, at.U_MAIL AS courriel, at.U_PASSWD AS mot_de_passe, |
ui.licence_acceptee, ui.admin, ui.preferences, ui.date_premiere_utilisation |
FROM tela_prod_v4.annuaire_tela AS at |
CREATE OR REPLACE VIEW `cel_utilisateurs` AS |
SELECT at.U_ID AS id_utilisateur, at.U_SURNAME AS prenom, at.U_NAME AS nom, at.U_MAIL AS courriel, at.U_PASSWD AS mot_de_passe, |
ui.licence_acceptee, ui.admin, ui.preferences, ui.date_premiere_utilisation |
FROM tela_prod_v4.annuaire_tela AS at |
LEFT JOIN cel_utilisateurs_infos AS ui ON (ui.id_utilisateur = at.U_ID); |
-- ----------------------------------------------------- |
332,49 → 332,50 |
-- ----------------------------------------------------- |
DROP VIEW IF EXISTS `cel_tapir` ; |
DROP TABLE IF EXISTS `cel_tapir`; |
CREATE OR REPLACE VIEW `cel_tapir` AS |
select concat(_utf8'urn:lsid:tela-botanica.org:cel:',`o`.`id_observation`) AS `guid`, |
`o`.`id_observation` AS `observation_id`, |
date_format(`o`.`date_observation`,'%Y-%m-%d') AS `observation_date`, |
`o`.`nom_sel` AS `nom_scientifique_complet`, |
`o`.`nom_sel_nn` AS `nom_num_nomenclatural`, |
`o`.`nt` AS `nom_num_taxonomique`, |
`o`.`famille` AS `nom_famille`, |
concat(_utf8'',`zg`.`nom`,' [INSEE:',`zg`.`code`,']') AS `lieu_commune_nom_complet`, |
`zg`.`nom` AS `lieu_commune_nom`, |
`zg`.`code` AS `lieu_commune_code_insee`, |
if((`zg`.`code` <> ''), 'Lion1906 version 26-05-2008 - http://www.lion1906.com/', NULL) AS `lieu_commune_source`, |
format(if((`o`.`latitude` <> ''), `o`.`latitude`, `zg`.`wgs84_latitude`), 5) AS `lieu_latitude`, |
format(if((`o`.`longitude` <> ''), `o`.`longitude`, `zg`.`wgs84_longitude`), 5) AS `lieu_longitude`, |
`o`.`geodatum` AS `lieu_geodatum`, |
if((`o`.`geodatum` <> ''), 'Coordonnées issues de l''utilisation de Google Map', NULL) AS `lieu_georeference_source`, |
`o`.`lieudit` AS `lieu_localite`, |
`o`.`prenom_utilisateur` AS `observateur_prenom`, |
`o`.`nom_utilisateur` AS `observateur_nom`, |
`o`.`courriel_utilisateur` AS `observateur_courriel`, |
concat(`o`.`prenom_utilisateur`,_utf8' ',`o`.`nom_utilisateur`) AS `observateur_nom_complet`, |
concat_ws(' ',`o`.`prenom_utilisateur`,`o`.`nom_utilisateur`,concat('<',`o`.`courriel_utilisateur`,'>')) AS `observateur_intitule`, |
`o`.`commentaire` AS `observation_commentaire`, |
concat(_utf8'nom_num_nomenclatural=',`o`.`nom_sel_nn`,'; ', |
'nom_ret=',encodeToDcsv(`o`.`nom_ret`),'; ', |
'nom_num_ret=',`o`.`nom_ret_nn`,'; ', |
'nom_num_taxonomique=',`o`.`nt`,'; ', |
'nom_referentiel=',encodeToDcsv(`o`.`nom_referentiel`),'; ', |
'saisie_date_transmission=',`o`.`date_transmission`,'; ', |
'saisie_date_creation=',`o`.`date_creation`,'; ', |
'ordre=',`o`.`ordre`,'; ', |
'station=',encodeToDcsv(`o`.`station`),'; ', |
'milieu=',encodeToDcsv(`o`.`milieu`),'; ', |
'mots_cles=',encodeToDcsv(`o`.`mots_cles_texte`),'; ', |
'zg_utm_secteur=',encodeToDcsv(`zg`.`utm_secteur`),'; ', |
'zg_date_modification=',`zg`.`date_modification`) AS `observation_information_complement`, |
`o`.`date_modification` AS `saisie_date_modification`, |
`o`.`date_creation` AS `saisie_date_creation` |
from (`cel_obs` `o` |
left join `cel_zones_geo` `zg` on((`o`.`ce_zone_geo` = `zg`.`id_zone_geo`))) |
where `o`.`transmission` = 1 |
CREATE OR REPLACE VIEW `cel_tapir` AS |
select concat(_utf8'urn:lsid:tela-botanica.org:cel:',`o`.`id_observation`) AS `guid`, |
`o`.`id_observation` AS `observation_id`, |
date_format(`o`.`date_observation`,'%Y-%m-%d') AS `observation_date`, |
`o`.`nom_sel` AS `nom_scientifique_complet`, |
`o`.`nom_sel_nn` AS `nom_num_nomenclatural`, |
`o`.`nt` AS `nom_num_taxonomique`, |
`o`.`famille` AS `nom_famille`, |
concat(_utf8'',`zg`.`nom`,' [INSEE:',`zg`.`code`,']') AS `lieu_commune_nom_complet`, |
`zg`.`nom` AS `lieu_commune_nom`, |
`zg`.`code` AS `lieu_commune_code_insee`, |
if((`zg`.`code` <> ''), 'Lion1906 version 26-05-2008 - http://www.lion1906.com/', NULL) AS `lieu_commune_source`, |
format(if((`o`.`latitude` <> ''), `o`.`latitude`, `zg`.`wgs84_latitude`), 5) AS `lieu_latitude`, |
format(if((`o`.`longitude` <> ''), `o`.`longitude`, `zg`.`wgs84_longitude`), 5) AS `lieu_longitude`, |
`o`.`geodatum` AS `lieu_geodatum`, |
if((`o`.`geodatum` <> ''), 'Coordonnées issues de l''utilisation de Google Map', NULL) AS `lieu_georeference_source`, |
`o`.`lieudit` AS `lieu_localite`, |
`o`.`prenom_utilisateur` AS `observateur_prenom`, |
`o`.`nom_utilisateur` AS `observateur_nom`, |
`o`.`courriel_utilisateur` AS `observateur_courriel`, |
concat(`o`.`prenom_utilisateur`,_utf8' ',`o`.`nom_utilisateur`) AS `observateur_nom_complet`, |
concat_ws(' ',`o`.`prenom_utilisateur`,`o`.`nom_utilisateur`,concat('<',`o`.`courriel_utilisateur`,'>')) AS `observateur_intitule`, |
`o`.`commentaire` AS `observation_commentaire`, |
concat(_utf8'nom_num_nomenclatural=',`o`.`nom_sel_nn`,'; ', |
'nom_ret=',encodeToDcsv(`o`.`nom_ret`),'; ', |
'nom_num_ret=',`o`.`nom_ret_nn`,'; ', |
'nom_num_taxonomique=',`o`.`nt`,'; ', |
'nom_referentiel=',encodeToDcsv(`o`.`nom_referentiel`),'; ', |
'saisie_date_transmission=',`o`.`date_transmission`,'; ', |
'saisie_date_creation=',`o`.`date_creation`,'; ', |
'ordre=',`o`.`ordre`,'; ', |
'station=',encodeToDcsv(`o`.`station`),'; ', |
'milieu=',encodeToDcsv(`o`.`milieu`),'; ', |
'mots_cles=',encodeToDcsv(`o`.`mots_cles_texte`),'; ', |
'zg_utm_secteur=',encodeToDcsv(`zg`.`utm_secteur`),'; ', |
'zg_date_modification=',`zg`.`date_modification`) AS `observation_information_complement`, |
`o`.`date_modification` AS `saisie_date_modification`, |
`o`.`date_creation` AS `saisie_date_creation` |
from (`cel_obs` `o` |
left join `cel_zones_geo` `zg` on((`o`.`ce_zone_geo` = `zg`.`id_zone_geo`))) |
where `o`.`transmission` = 1 |
AND (`o`.`mots_cles_texte` NOT LIKE '%sensible%' OR `o`.`mots_cles_texte` IS NULL); |
SET SQL_MODE=@OLD_SQL_MODE; |
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; |
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS; |
/branches/v1.7-croissant/doc |
---|
Property changes: |
Added: svn:mergeinfo |
Merged /trunk/doc:r1841,1881 |
Merged /branches/topic-dbsingleton/doc:r1720-1764 |
/branches/v1.7-croissant/Changelog |
---|
1,8 → 1,3 |
Changements <next>: |
config jrest: ajout de api_host, dédié à la simplification des appels aux webservices |
config jrest: ajout de images_temp_url, dédié à la lecture des images temporaires du widget de saisie |
config widget: imagesTempUrlTpl est désormais obsolète |
config widget/photo: ajout de motif_guid |
war/config.default.js: bdtfx 2.00 et bdtxa 1.01 |
Changements 20130917 [création de la branche "v1.7-Croissant"]: |
/branches/v1.7-croissant/jrest/lib/GestionObservation.php |
---|
1,30 → 1,27 |
<?php |
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel // |
/** |
* PHP Version 5.2 |
* |
* @category PHP |
* @package jrest |
* @author Raphaël Droz <raphael@tela-botanica.org> |
* @author Aurelien Peronnet <aurelien@tela-botanica.org> |
* @copyright 2010, 2013 Tela-Botanica |
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt> |
* @link /doc/jrest/ |
* |
* Classe de gestion de l'ajout, modification et suppression des observations |
* |
* TODO: $sous_requete .= ' date_modification = now() ' |
* devrait être une clause ON UPDATE ou un TRIGGER |
* afin de mettre à jour la date de modification uniquement lorsqu'une modification a effectivement eu lieu |
* |
*/ |
* PHP Version 5 |
* |
* @category PHP |
* @package jrest |
* @author Aurelien Peronnet <aurelien@tela-botanica.org> |
* @copyright 2010 Tela-Botanica |
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL |
* @version SVN: <svn_id> |
* @link /doc/jrest/ |
*/ |
/** |
* Classe de gestion de l'ajout, modification et suppression des observations |
* |
* in=utf8 |
* out=utf8 |
* |
*/ |
class GestionObservation extends Cel { |
static $cel_obs = array( |
"id_observation", "ordre", "ce_utilisateur", "prenom_utilisateur", "nom_utilisateur", "courriel_utilisateur", "nom_sel", "nom_sel_nn", "nom_ret", "nom_ret_nn", "nt", "famille", "nom_referentiel", |
"ce_zone_geo", "zone_geo", "lieudit", "station", "milieu", "latitude", "longitude", "altitude", "geodatum", "date_observation", "mots_cles_texte", "commentaire", "transmission", |
"date_creation", "date_modification", "date_transmission", "abondance", "certitude", "phenologie", "code_insee_calcul"); |
/** |
* Ajoute une observation grâce aux paramètres fournis |
* |
34,28 → 31,13 |
* @return true ou false suivant le succès de l'opération |
*/ |
public function ajouterObservation($utilisateur, $parametres) { |
$origin_params = $parametres; |
$base_param = array('nom_sel_nn' => NULL, |
'nom_sel' => NULL, |
'nom_ret_nn' => NULL, |
'nom_referentiel' => NULL); |
$parametres = array_merge($base_param, $parametres); |
$retour = true; |
$parametres['ordre'] = $this->renvoyerDernierOrdreUtilisePlusUn($utilisateur); |
$this->traiterEspece($parametres); |
$this->formaterParametresObservation($parametres); |
// si la détermination à échoué, alors: |
// soit le référentiel d'origine était "valide", soit non |
if(!$parametres['nom_sel_nn']) { |
// quoiqu'il en soit, on le met à "autre" |
$parametres['nom_referentiel'] = Cel::$fallback_referentiel; |
} |
$this->ajoutInfoUtilisateurARequete($parametres); |
self::formaterParametresObservation($parametres); |
$requete_insertion_observation = 'INSERT INTO cel_obs '; |
$sous_requete_colonnes = $this->traiterParametresObservationEtConstruireSousRequeteAjout($parametres); |
128,12 → 110,13 |
'nom_sel' => NULL, |
'nom_ret_nn' => NULL, |
'nom_referentiel' => NULL); |
// $parametres = array_merge($base_param, $parametres); |
$parametres = array_merge($base_param, $parametres); |
$retour = true; |
$requete_modification = "UPDATE cel_obs SET " ; |
// si pas de nom_sel : on supprime les champs automatiques. et le référentiel. |
if(false && (!isset($parametres['nom_sel']) || !@$parametres['nom_sel'])) { |
if(!isset($parametres['nom_sel']) || !@$parametres['nom_sel']) { |
$parametres['nom_referentiel'] = NULL; // pas d'update de traiterParametresObservationEtConstruireSousRequeteMaj() |
$requete_modification .= "nom_referentiel = NULL, nom_sel_nn = NULL, nom_ret_nn = NULL, nom_ret = NULL, nt = NULL, famille = NULL,"; |
} |
152,25 → 135,20 |
famille = IF(SUBSTR(nom_referentiel, 1, 5) != "$r", NULL, famille), |
EOF; |
} |
elseif(isset($parametres['nom_sel'])) { |
else { |
// uniquement en cas de nom_sel présent |
$this->traiterEspece($parametres); |
} |
$this->formaterParametresObservation($parametres); |
self::formaterParametresObservation($parametres); |
$requete_modification .= $this->traiterParametresObservationEtConstruireSousRequeteMaj($parametres) . |
" WHERE ordre IN (".$ordre.") AND ce_utilisateur = ".Cel::db()->proteger($utilisateur); |
$champ_maj = self::traiterParametresObservationEtConstruireSousRequeteMaj($parametres); |
$champ_maj[] = "date_modification = now()"; |
$requete_modification .= |
implode(', ', $champ_maj) |
. " WHERE ordre IN (".$ordre.") AND ce_utilisateur = ".Cel::db()->proteger($utilisateur); |
// important ! ne pas utiliser la fonction executerRequete qui renvoie une erreur si la requete contient des | (pipes) |
// ce qui peut arriver dans les commentaires |
// TODO: corriger la fonction ou bien continuer à utiliser executerRequeteSimple |
$resultat_modification = Cel::db()->executerRequeteSimple($requete_modification . ' -- ' . __FILE__ . ':' . __LINE__); |
$resultat_modification = Cel::db()->executerRequeteSimple($requete_modification); |
if ($resultat_modification === false) { |
$retour = false; |
179,39 → 157,6 |
return $retour; |
} |
/** |
* @return nombre d'observations mises à jour, ou FALSE en cas de problème |
*/ |
static function modifierMultiplesObservation($utilisateur, Array $ordre, $parametres) { |
// nous pouvons aussi retirer 'ce_utilisateur' (== $utilisateur) qui sera dans la clause WHERE |
$exclusions = array('nom_sel_nn', 'nom_sel', 'nom_ret_nn', 'nom_referentiel', 'ce_utilisateur'); |
$parametres = array_diff_key($parametres, array_flip($exclusions)); |
$parametres = array_intersect_key($parametres, array_flip(self::$cel_obs)); |
$parametres = array_filter( |
$parametres, |
create_function('$e','return strpos($e, "(Valeurs multiples)") === false;')); |
// modifie $parametres par référence |
self::formaterParametresObservation($parametres); |
$champ_maj = self::traiterParametresObservationEtConstruireSousRequeteMaj($parametres); |
if(!$champ_maj) return 0; // rien à mettre à jour finalement |
$champ_maj[] = "date_modification = now()"; |
$nb_upd = Cel::db()->executer(sprintf( |
"UPDATE cel_obs SET %s WHERE ordre IN (%s) AND ce_utilisateur = %s -- %s:%d", |
implode(', ', $champ_maj), |
implode(', ', $ordre), |
Cel::db()->proteger($utilisateur), |
__FILE__, __LINE__)); |
if($nb_upd === FALSE) return FALSE; |
return $nb_upd; |
// TODO: return json_encode(updated_rows()); |
} |
/** |
* Modifie une observation publique dont l'id et l'utilisateur sont passé en paramètre |
230,15 → 175,11 |
$parametres = array_merge($base_param, $parametres); |
$this->traiterEspece($parametres); |
self::formaterParametresObservation($parametres); |
$this->formaterParametresObservation($parametres); |
$retour = true; |
$champ_maj = self::traiterParametresObservationEtConstruireSousRequeteMaj($parametres); |
$champ_maj[] = "date_modification = now()"; |
$requete_modification = "UPDATE cel_obs SET " . |
implode(', ', $champ_maj) . |
$this->traiterParametresObservationEtConstruireSousRequeteMaj($parametres) . |
" WHERE id_observation = ".Cel::db()->proteger($id). |
" AND ce_utilisateur = ".Cel::db()->proteger($utilisateur)." ". |
" AND transmission = 1"; |
246,13 → 187,14 |
// important ! ne pas utiliser la fonction executerRequete qui renvoie une erreur si la requete contient des | (pipes) |
// ce qui peut arriver dans les commentaires |
// TODO: corriger la fonction ou bien continuer à utiliser executerRequeteSimple |
$resultat_modification = Cel::db()->executerRequeteSimple($requete_modification . ' -- ' . __FILE__ . ':' . __LINE__); |
$resultat_modification = Cel::db()->executerRequeteSimple($requete_modification); |
if ($resultat_modification === false) { |
$retour = false; |
$this->logger("CEL_bugs","Erreur de mise à jour de l\'observation : ".$id); |
} |
return $resultat_modification; |
return $retour; |
} |
/** |
432,7 → 374,7 |
// XXX: ne devrait plus être nécessaire maintenant que rechercherInformationsComplementairesSurNom() [plus précisément effectuerRequeteUrlRecherche()] |
// a été modifiée pour retourner tous les champs nécessaire. |
if ($deuxieme_passe && (! array_key_exists('nom_ret_nn', $parametres) || ! array_key_exists('nt', $parametres))) { |
if ($deuxieme_passe && (!$parametres['nom_ret_nn'] || !$parametres['nt'])) { |
// Utilisation d'un nom faisant parti du referentiel : recherche du nom valide correspondant |
$chercheur_infos_complementaires = new RechercheInfosTaxonBeta($this->config , $code_referentiel); |
$complement = $chercheur_infos_complementaires->effectuerRequeteInfosComplementairesSurNumNom($parametres['nom_sel_nn']); |
458,16 → 400,6 |
$parametres['nom_referentiel'] = $code_referentiel; |
} |
// uniquement nécessaire lors de l'ajout |
private function ajoutInfoUtilisateurARequete(&$parametres) { |
if(! isset($parametres['ce_utilisateur'])) return; |
$infos_utilisateur = $this->getInfosComplementairesUtilisateur($parametres['ce_utilisateur']); |
$parametres['courriel_utilisateur'] = $infos_utilisateur['courriel']; |
$parametres['nom_utilisateur'] = $infos_utilisateur['nom']; |
$parametres['prenom_utilisateur'] = $infos_utilisateur['prenom']; |
} |
/** |
* Formate les paramètres fournis en ajoutant des infos complementaires |
* |
475,7 → 407,16 |
* |
* @return $parametres le tableau modifié selon ce qu'il contenait |
*/ |
static function formaterParametresObservation(&$parametres) { |
private function formaterParametresObservation(&$parametres) { |
if(isset($parametres['ce_utilisateur'])) { |
$infos_utilisateur = $this->getInfosComplementairesUtilisateur($parametres['ce_utilisateur']); |
$parametres['courriel_utilisateur'] = $infos_utilisateur['courriel']; |
$parametres['nom_utilisateur'] = $infos_utilisateur['nom']; |
$parametres['prenom_utilisateur'] = $infos_utilisateur['prenom']; |
} |
// Pour empecher que des numéros de département de 1 à 9 soient saisis sans 0 |
// TODO: décider quoi faire pour les zones géo plus générales |
if (isset($parametres['ce_zone_geo'])) { |
488,9 → 429,9 |
} |
if (strlen($parametres['ce_zone_geo']) > 0 && strlen($parametres['ce_zone_geo']) <= 2) { |
$parametres['ce_zone_geo'] = Cel::obtenirCodeInseeCommunePourNomEtDepartement($parametres['zone_geo'], $parametres['ce_zone_geo']); |
$parametres['ce_zone_geo'] = $this->obtenirCodeInseeCommunePourNomEtDepartement($parametres['zone_geo'], $parametres['ce_zone_geo']); |
} else { |
$parametres['ce_zone_geo'] = 'INSEE-C:'. $parametres['ce_zone_geo']; |
$parametres['ce_zone_geo'] = $this->convertirCodeInseeVersCodeZoneGeo($parametres['ce_zone_geo']); |
} |
} |
} |
552,12 → 493,13 |
* @return string une sous requete utilisable pour la modification d'une observation |
* selon la syntaxe UPDATE table SET colonne1 = valeur1, colonne2 = valeur2 WHERE condition |
*/ |
static function traiterParametresObservationEtConstruireSousRequeteMaj($parametres) { |
$champs = array(); |
private function traiterParametresObservationEtConstruireSousRequeteMaj($parametres) { |
$sous_requete = ''; |
// Nullifiage ... |
// TODO: code dupliqué, en faire une fonction à mettre à la place appropriée |
foreach($parametres as $cle => $valeur) { |
// Pour apparaitre le premier dans les tris ... |
if (trim($valeur) == "" || trim($valeur) == "null" || trim($valeur) == "000null") { |
$valeur = "NULL"; |
564,8 → 506,13 |
} else { |
$valeur = Cel::db()->proteger($valeur); |
} |
$champs[] = $cle." = ".$valeur; |
$sous_requete .= $cle." = ".$valeur.", "; |
} |
return $champs; |
$sous_requete .= ' date_modification = now() '; |
return $sous_requete; |
} |
} |
} |
?> |
/branches/v1.7-croissant/jrest/lib/ImageRecreation.php |
---|
1,8 → 1,8 |
<?php |
Class ImageRecreation { |
private $droits = 0755; |
private $formats = array('CRX2S','CRXS','CXS','CS','CRS','XS','S','M','L','XL','X2L','X3L'); |
private $droits = 0705; |
private $formats = array('CRX2S','CXS','CS','CRS','XS','S','M','L','XL','X2L','X3L'); |
const MODE_GD = 'gd'; |
const MODE_IMAGEMAGICK = 'imagemagick'; |
private $mode; |
/branches/v1.7-croissant/jrest/lib/RechercheInfosTaxonBeta.php |
---|
40,7 → 40,6 |
$this->url_service_nom = str_replace('{referentiel}', $this->code_referentiel ,$config['eflore']['url_service_nom']); |
$this->url_service_taxon = str_replace('{referentiel}', $this->code_referentiel ,$config['eflore']['url_service_taxon']); |
$this->url_service_chorologie_obs = $config['eflore']['url_service_chorologie_obs']; |
$this->config = $config; |
} |
public function rechercherGenreEspeceSurPrefixe($genre = null, $espece = null) { |
85,30 → 84,26 |
public function rechercherInformationsComplementairesSurNom($nom_saisi) { |
$nom_saisi = trim($nom_saisi); |
// Essai de recherche sur le nom saisi tel quel |
$liste_genre_espece = $this->effectuerRequeteUrlRecherche($nom_saisi, 'stricte'); |
if($liste_genre_espece) return $liste_genre_espece; |
// Essai de recherche stricte en tentant de supprimer le nom d'auteur |
if( ($nom_saisi_sans_auteur = self::supprimerAuteur($nom_saisi)) ) { // ne pas faire la requête sur un mot vide |
$liste_genre_espece = $this->effectuerRequeteUrlRecherche($nom_saisi_sans_auteur, 'stricte'); |
$liste_genre_espece = $this->effectuerRequeteUrlRecherche($nom_saisi, true); |
if(empty($liste_genre_espece)) { |
// Essai de recherche stricte en tentant de supprimer le nom d'auteur |
$nom_saisi_sans_auteur = self::supprimerAuteur($nom_saisi); |
if($nom_saisi_sans_auteur) { // ne pas faire la requête sur un mot vide |
$liste_genre_espece = $this->effectuerRequeteUrlRecherche($nom_saisi_sans_auteur, true); |
} |
if(empty($liste_genre_espece)) { |
// Dernière tentative : essai de recherche étendue |
$liste_genre_espece = $this->effectuerRequeteUrlRecherche($nom_saisi, false); |
} |
} |
if($liste_genre_espece) return $liste_genre_espece; |
// avant-dernière tentative : essai de recherche étendue |
$liste_genre_espece = $this->effectuerRequeteUrlRecherche($nom_saisi, 'etendue'); |
if($liste_genre_espece) return $liste_genre_espece; |
// dernière tentative: concaténation (nom_sci,auteur) (= nom-retenu généré utilisé comme nom_sci) |
$liste_genre_espece = $this->effectuerRequeteUrlRecherche($nom_saisi, 'concat'); |
return $liste_genre_espece; |
} |
private function effectuerRequeteUrlRecherche($nom_saisi, $mode = 'stricte') { |
private function effectuerRequeteUrlRecherche($nom_saisi, $stricte = true) { |
$res = @json_decode(file_get_contents(sprintf('%1$s?masque=%2$s&recherche=%3$s&ns.format=txt&retour.champs=%4$s&navigation.limite=1', |
$this->url_service_nom, |
urlencode($nom_saisi), |
$mode, |
($stricte ? 'stricte' : 'etendue'), |
implode(',', array("id","nom_sci","auteur","nom_retenu.id","famille","num_taxonomique","nom_retenu_complet"))))); |
if(!$res) return NULL; |
$resultat = (array)$res->resultat; |
141,20 → 136,7 |
return strpos($nom_saisi,'x ') === 0; |
} |
public function effectuerRequeteInfosComplementairesSurNumNom($num_nom, $ref = NULL) { |
if($ref && isset($this->config['eflore']['api_host'])) { |
return @json_decode(file_get_contents($this->config['eflore']['api_host'] . '/' . |
$ref . '/' . |
'noms' . '/' . |
$num_nom . |
'?retour.champs=' . implode(',', array('nom_sci,auteur', |
'id', |
'nom_retenu_complet', |
'nom_retenu.id', |
'num_taxonomique', |
'famille')))); |
} |
// XXX: compat |
public function effectuerRequeteInfosComplementairesSurNumNom($num_nom) { |
return @json_decode(file_get_contents($this->url_service_nom.'/'.$num_nom.'?retour.champs=nom_sci,auteur,id,nom_retenu_complet,nom_retenu.id,num_taxonomique,famille')); |
} |
201,12 → 183,10 |
// TODO: ignorer la colonne référentiel, et utiliser le référentiel donné |
// mais il faut alors avertir le service (d'import/modif) d'utiliser le référentiel |
// passé au nom d'espèce |
// Seul le effectuerRequeteInfosComplementairesSurNumNom() le supporte, car c'est encore |
// un peu complexe à implémenter proprement pour cause d'attributs de classes. |
} |
// Numero nomenclatural |
if ($type == 'nn') { |
$obj = $this->effectuerRequeteInfosComplementairesSurNumNom($num, $ref); |
$obj = $this->effectuerRequeteInfosComplementairesSurNumNom($num); |
} |
// Numero taxonomique |
else { |
/branches/v1.7-croissant/jrest/lib/Cel.php |
---|
121,7 → 121,10 |
protected function verifierSecuriteParametreUrl($param) { |
//$verifier = array('NULL', "\n", "\r", "\\", "'", '"', "\x00", "\x1a", ';'); |
return is_string($param) ? strip_tags($param) : $param; |
if (!is_string($param)) return $param; |
$param = strip_tags($param); |
return $param; |
} |
private function definirParametresUrlParDefaut() { |
216,12 → 219,12 |
print $contenu; |
} |
static function envoyerAuth($message_accueil, $message_echec) { |
private function envoyerAuth($message_accueil, $message_echec) { |
header('HTTP/1.0 401 Unauthorized'); |
header('WWW-Authenticate: Basic realm="'.mb_convert_encoding($message_accueil, 'ISO-8859-1', 'UTF-8').'"'); |
header('Content-type: text/plain; charset=UTF-8'); |
print $message_echec; |
exit; |
exit(0); |
} |
//+----------------------------------------------------------------------------------------------------------------+ |
237,12 → 240,14 |
//+----------------------------------------------------------------------------------------------------------------+ |
// GESTION DE L'IDENTIFICATION |
static function getAuthIdentifiant() { |
return isset($_SERVER['PHP_AUTH_USER']) ? $_SERVER['PHP_AUTH_USER'] : null; |
protected function getAuthIdentifiant() { |
$id = (isset($_SERVER['PHP_AUTH_USER'])) ? $_SERVER['PHP_AUTH_USER'] : null; |
return $id; |
} |
static function getAuthMotDePasse() { |
return isset($_SERVER['PHP_AUTH_PW']) ? $_SERVER['PHP_AUTH_PW'] : null; |
protected function getAuthMotDePasse() { |
$mdp = (isset($_SERVER['PHP_AUTH_PW'])) ? $_SERVER['PHP_AUTH_PW'] : null; |
return $mdp; |
} |
public function authentifierAdmin() { |
263,11 → 268,19 |
} |
public function isAdmin($id) { |
return in_array($id, explode(',', $this->config['jrest_admin']['admin'])); |
$admins = $this->config['jrest_admin']['admin']; |
$admin_tab = explode(',',$admins); |
if (in_array($id,$admin_tab)) { |
return true; |
} else { |
return false; |
} |
} |
public function controleUtilisateur($id) { |
if (@array_key_exists('name', $_SESSION['user']) && empty($_SESSION['user']['name'])) { |
if (isset($_SESSION['user']) && isset($_SESSION['user']['name']) && $_SESSION['user']['name'] == '') { |
//cas de la session temporaire, on ne fait rien de particulier |
} else { |
if (isset($_SESSION['user']) && isset($_SESSION['user']['name']) && !$this->isAdmin($_SESSION['user']['name']) && $_SESSION['user']['name'] != $id) { |
279,10 → 292,12 |
} |
public function controleAppelIpAutorisee() { |
$ips_autorisees = explode(',', @$this->config['jrest_admin']['ip_autorisees']); |
if(!in_array($_SERVER['REMOTE_ADDR'], $ips_autorisees) && $_SERVER['REMOTE_ADDR'] != $_SERVER['SERVER_ADDR']) { |
$ips_autorisees = explode(',', $this->config['jrest_admin']['ip_autorisees']); |
$ip_appelante = $_SERVER['REMOTE_ADDR']; |
if(!in_array($ip_appelante, $ips_autorisees) && $ip_appelante != $_SERVER['SERVER_ADDR']) { |
header('HTTP/1.0 401 Unauthorized'); |
exit('Accès interdit'); |
echo 'Accès interdit'; |
exit(0); |
} |
return true; |
} |
300,26 → 315,26 |
} |
private function authentifier($message_accueil, $message_echec, $type) { |
if (!isset($_SERVER['PHP_AUTH_USER'])) { |
self::envoyerAuth($message_accueil, $message_echec); // exit |
} |
if ($type == 'Utilisateur' && self::getAuthMotDePasse() == 'debug') { |
$autorisation = true; |
$id = $this->getAuthIdentifiant(); |
if (!isset($id)) { |
$this->envoyerAuth($message_accueil, $message_echec); |
} else { |
$methodeAutorisation = "etre{$type}Autorise"; |
$autorisation = $this->$methodeAutorisation(); |
if ($type == 'Utilisateur' && $this->getAuthMotDePasse() == 'debug') { |
$autorisation = true; |
} else { |
$methodeAutorisation = "etre{$type}Autorise"; |
$autorisation = $this->$methodeAutorisation(); |
} |
if ($autorisation == false) { |
$this->envoyerAuth($message_accueil, $message_echec); |
} |
} |
if ($autorisation == false) { |
self::envoyerAuth($message_accueil, $message_echec); |
} |
return true; |
} |
public function etreUtilisateurAutorise() { |
$identifiant = self::getAuthIdentifiant(); |
$mdp = md5(self::getAuthMotDePasse()); |
$identifiant = $this->getAuthIdentifiant(); |
$mdp = md5($this->getAuthMotDePasse()); |
$service = "TestLoginMdp/$identifiant/$mdp"; |
$url = sprintf($this->config['settings']['baseURLServicesAnnuaireTpl'], $service); |
$json = $this->getRestClient()->consulter($url); |
330,26 → 345,36 |
} |
public function etreAdminAutorise() { |
$identifiant = self::getAuthIdentifiant(); |
$identifiant = $this->getAuthIdentifiant(); |
$autorisation = ($this->etreUtilisateurAutorise() && $this->etreAdminCel($identifiant)) ? true : false; |
return $autorisation; |
} |
public function etreAdminCel($courriel) { |
// parmi les admins ? |
return in_array($courriel, explode(',', $this->config['jrest_admin']['admin'])); |
$admins = $this->config['jrest_admin']['admin']; |
$courriels_autorises = explode(',', $admins); |
$autorisation = (in_array($courriel, $courriels_autorises)) ? true : false ; |
return $autorisation; |
} |
public function getInfosComplementairesUtilisateur($id_utilisateur) { |
$defaut_infos = array('prenom' => $id_utilisateur, 'nom' => $id_utilisateur, 'courriel' => $id_utilisateur); |
if(! is_numeric($id_utilisateur)) return $defaut_infos; |
$resultat_infos_utilisateur = Cel::db()->requeter( |
'SELECT prenom, nom, courriel FROM cel_utilisateurs' |
. ' WHERE id_utilisateur = '.Cel::db()->proteger($id_utilisateur)); |
$infos_utilisateur = array('prenom' => $id_utilisateur, 'nom' => $id_utilisateur, 'courriel' => $id_utilisateur); |
if($resultat_infos_utilisateur && count($resultat_infos_utilisateur)) return $resultat_infos_utilisateur[0]; |
return $defaut_infos; // autrement, info par défaut |
if(is_numeric($id_utilisateur)) { |
$requete_infos_utilisateur = 'SELECT prenom, nom, courriel FROM cel_utilisateurs '. |
'WHERE id_utilisateur = '.Cel::db()->proteger($id_utilisateur); |
$resultat_infos_utilisateur = Cel::db()->requeter($requete_infos_utilisateur); |
if($resultat_infos_utilisateur && is_array($resultat_infos_utilisateur) && count($resultat_infos_utilisateur) > 0) { |
$infos_utilisateur = $resultat_infos_utilisateur[0]; |
} |
} |
return $infos_utilisateur; |
} |
public function getInfosComplementairesUtilisateurPourMail($mail_utilisateur) { |
431,7 → 456,8 |
} |
protected function tronquerCourriel($courriel) { |
return preg_replace('/[^@]+$/i', '...', $courriel); |
$courriel = preg_replace('/[^@]+$/i', '...', $courriel); |
return $courriel; |
} |
protected function nettoyerTableau(Array $tableau) { |
520,14 → 546,26 |
return $code_departement; |
} |
static function obtenirCodeInseeCommunePourNomEtDepartement($nom_commune, $code_insee) { |
$resultat = Cel::db()->requeter(sprintf( |
'SELECT id_zone_geo FROM cel_zones_geo WHERE nom LIKE %s AND id_zone_geo LIKE %s', |
Cel::db()->proteger($nom_commune), |
Cel::db()->proteger("INSEE-C:" . $code_insee . '%'))); |
protected function convertirCodeInseeVersCodeZoneGeo($code_insee) { |
return 'INSEE-C:'.$code_insee; |
} |
if($resultat && count($resultat)) return $resultat[0]['id_zone_geo']; |
return $code_insee; // autrement retourne l'original |
protected function obtenirCodeInseeCommunePourNomEtDepartement($nom_commune, $dpt) { |
$code_insee = $dpt; |
$requete = 'SELECT id_zone_geo FROM cel_zones_geo '. |
'WHERE nom LIKE '.Cel::db()->proteger($nom_commune).' '. |
'AND id_zone_geo LIKE "INSEE-C:'.$dpt.'%"'; |
$resultat = Cel::db()->requeter($requete); |
if(is_array($resultat) && count($resultat) > 0) { |
$code_insee = $resultat[0]['id_zone_geo']; |
} |
return $code_insee; |
} |
protected function encoderMotCle($mot_cle) { |
680,3 → 718,5 |
return $contenu; |
} |
} |
?> |
/branches/v1.7-croissant/jrest/lib/LiaisonMotsCles.php |
---|
1,14 → 1,24 |
<?php |
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel // |
/** |
* @package jrest |
* @author Aurélien Peronnet <aurelien@tela-botania.org> |
* @author Raphaël Droz <raphael@tela-botania.org> |
* @copyright 2010, 2013 Tela-Botanica |
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL |
* |
* Librairie de liaison d'images et d'observation à des mots clés |
*/ |
* PHP Version 5 |
* |
* @category PHP |
* @package jrest |
* @author Aurélien Peronnet <aurelien@tela-botania.org> |
* @copyright 2010 Tela-Botanica |
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL |
* @version SVN: <svn_id> |
* @link /doc/jrest/ |
*/ |
/** |
* in : utf8 |
* out : utf8 |
* |
* Librairie de liaison d'images et d'observation à des mots clés |
* |
*/ |
class LiaisonMotsCles extends Cel { |
const SEPARATEUR_MOT_CLE_TEXTE = ','; |
20,45 → 30,34 |
} |
public function ajouterLiaisonMotsCles($id_utilisateur, $ids_images_ou_obs, $mots_cles) { |
$mode = $this->mode; |
$champ_objet_lie = ($this->mode == 'obs') ? 'id_observation' : 'id_image'; |
$champ_mot_cle = ($this->mode == 'obs') ? 'id_mot_cle_obs' : 'id_mot_cle_image'; |
// le mot clé ignore est spécifique mysql, mais il est utilisé ici pour des raisons |
// de performance, à remplacer par un test sur les mots clés déjà existant si ça gène |
$requete_liaison_mots_cles = sprintf('INSERT IGNORE INTO cel_%s_mots_cles '. |
'(%s, %s) VALUES ', |
$mode, |
$mode == 'obs' ? 'id_observation' : 'id_image', |
$mode == 'obs' ? 'id_mot_cle_obs' : 'id_mot_cle_image'); |
$insert = array(); |
$requete_liaison_mots_cles = 'INSERT IGNORE INTO cel_'.$this->mode.'_mots_cles '. |
'('.$champ_objet_lie.', '.$champ_mot_cle.') '. |
'VALUES '; |
foreach($ids_images_ou_obs as $id_image_ou_obs) { |
foreach($mots_cles as $mot) { |
// TODO!! ce_utilisateur |
$insert[] = '('.$id_image_ou_obs.','.Cel::db()->proteger($mot).')'; |
$requete_liaison_mots_cles .= '('.$id_image_ou_obs.','.Cel::db()->proteger($mot).'),'; |
} |
} |
if(!$insert) { |
// peut arriver, par exemple lorsqu'on décoche tous les mots-clef associés à une image |
$this->logger('CEL_bugs', 'Pas de mot-clef à ajouter à des '.$mode.' : '. implode(',', $ids_images_ou_obs)); |
$requete_liaison_mots_cles = rtrim($requete_liaison_mots_cles,','); |
$resultat_liaison_mots_cles = Cel::db()->executer($requete_liaison_mots_cles); |
foreach($ids_images_ou_obs as $id_image_ou_obs) { |
$this->regenererIndexTexteMotCle($id_image_ou_obs, $id_utilisateur); |
} |
else { |
$resultat_liaison_mots_cles = Cel::db()->executer($requete_liaison_mots_cles . implode(',',$insert)); |
if(! $resultat_liaison_mots_cles) { |
$this->logger('CEL_bugs', 'Erreur d\'ajout de mots clés à des '.$mode.' : '.$requete_liaison_mots_cles); |
// ne pas retourner car si nous sommes passés par InventoryKeyWordImageLink updateElement(), |
// alors celui-ci à *purgé* les mots-clefs en amont et compte sur nous pour faire une réinitialisation |
/// correcte ... |
// return FALSE; |
} |
} |
// ... donc dans tous les cas nous devons conserver une cohérence entre les deux modes de stockage des mots-clefs |
$ret = TRUE; |
foreach($ids_images_ou_obs as $id_image_ou_obs) { |
$bool = self::regenererIndexTexteMotCle($id_image_ou_obs, $id_utilisateur, $mode); |
$ret = $ret & ($bool !== FALSE); // peut légitimement retourner 0 |
if(!$resultat_liaison_mots_cles) { |
$this->logger('CEL_bugs', 'Erreur d\'ajout de mots clés à des '.$this->mode.' : '.$requete_liaison_mots_cles); |
} |
return $ret; |
return $resultat_liaison_mots_cles; |
} |
public function supprimerLiaisonMotsClesEtRegenererIndexTexte($id_utilisateur, $ids_images_ou_obs, $mots_cles) { |
66,7 → 65,7 |
$retour = $this->supprimerLiaisonMotsCles($id_utilisateur, $ids_images_ou_obs, $mots_cles); |
foreach($ids_images_ou_obs as $image_ou_obs) { |
self::regenererIndexTexteMotCle($image_ou_obs, $id_utilisateur, $this->mode); |
$this->regenererIndexTexteMotCle($image_ou_obs, $id_utilisateur); |
} |
return $retour; |
83,10 → 82,16 |
$resultat_suppression_mot_cle = Cel::db()->executer($requete_suppression_liaison_mot_cle); |
if ($requete_suppression_liaison_mot_cle !== false) return TRUE; |
$this->logger("Erreur de suppression des mots clés de plusieurs ".$this->mode." : $requete"); |
return FALSE; |
if ($requete_suppression_liaison_mot_cle !== false) { |
$retour = true; |
} else { |
$message = "Erreur de suppression des mots clés de plusieurs ".$this->mode." : $requete"; |
$this->logger($message); |
$retour = false; |
} |
return $retour; |
} |
public function supprimerToutesLiaisonsPourIdImageOuObs($id_utilisateur, $ids_images_ou_obs) { |
100,11 → 105,15 |
$resultat_suppression_mot_cle = Cel::db()->executer($requete_suppression_liaison_mot_cle); |
if ($requete_suppression_liaison_mot_cle !== false) { |
return TRUE; |
$retour = true; |
} else { |
$message = "Erreur de suppression des mots clés de plusieurs ".$this->mode." : $requete"; |
$this->logger($message); |
$retour = false; |
} |
$this->logger("Erreur de suppression des mots clés de plusieurs ".$this->mode." : $requete"); |
return FALSE; |
return $retour; |
} |
public function supprimerToutesLiaisonsPourIdMotCle($id_utilisateur, $tableau_ids_mots_cles) { |
124,7 → 133,7 |
$resultat_requete_objets_lies_mot_cle = Cel::db()->requeter($requete_objets_lies_mot_cle); |
foreach($resultat_requete_objets_lies_mot_cle as $objet_lie) { |
self::regenererIndexTexteMotCle($objet_lie['id'], $id_utilisateur, $this->mode); |
$this->regenererIndexTexteMotCle($objet_lie['id'], $id_utilisateur); |
} |
if ($requete_suppression_liaison_mot_cle !== false) { |
139,37 → 148,42 |
return $retour; |
} |
static private function regenererIndexTexteMotCle($id_image_ou_obs, $identifiant_utilisateur, $mode) { |
$mots_cles = self::obtenirMotsClesTexte($id_image_ou_obs, $identifiant_utilisateur, $mode); |
private function regenererIndexTexteMotCle($image_ou_obs, $identifiant_utilisateur) { |
$mots_cles = $this->obtenirMotsClesTexte($image_ou_obs, $identifiant_utilisateur); |
$mots_cles_texte_chaine = ""; |
if (count($mots_cles) > 0) { |
$mots_cles_texte_chaine = self::formaterTableauMotCleTextePourInsertion($mots_cles); |
$mots_cles_texte_chaine = $this->formaterTableauMotCleTextePourInsertion($mots_cles); |
} |
// self::executerRequeteMiseAJourMotCleTexte($mots_cles_texte_chaine, $id_image_ou_obs, $identifiant_utilisateur, $mode); |
return Cel::db()->executer(sprintf('UPDATE %s SET mots_cles_texte = %s WHERE %s = %s AND ce_utilisateur = %s -- %s:%d', |
$mode == 'obs' ? 'cel_obs' : 'cel_images', |
Cel::db()->proteger($mots_cles_texte_chaine), |
$mode == 'obs' ? 'id_observation' : 'id_image', |
Cel::db()->proteger($id_image_ou_obs), |
Cel::db()->proteger($identifiant_utilisateur), |
__FILE__ , __LINE__)); |
$this->executerRequeteMiseAJourMotCleTexte($mots_cles_texte_chaine, $image_ou_obs, $identifiant_utilisateur); |
} |
private static function obtenirMotsClesTexte($id_image_ou_obs, $identifiant_utilisateur, $mode) { |
return Cel::db()->requeter(sprintf('SELECT mot_cle FROM cel_mots_cles_%1$s WHERE id_mot_cle_%2$s IN '. |
' (SELECT id_mot_cle_%2$s FROM cel_%1$s_mots_cles WHERE %3$s = %4$s)'. |
' AND id_utilisateur = %5$s -- %6$s:%7$d', |
$mode, |
$mode == 'obs' ? 'obs' : 'image', |
$mode == 'obs' ? 'id_observation' : 'id_image', |
Cel::db()->proteger($id_image_ou_obs), |
Cel::db()->proteger($identifiant_utilisateur), |
__FILE__ , __LINE__)); |
private function executerRequeteMiseAJourMotCleTexte($mots_cles_texte_chaine, $id_image_ou_obs, $identifiant_utilisateur) { |
$requete = 'UPDATE '.(($this->mode == 'obs') ? 'cel_obs' : 'cel_images').' '. |
'SET mots_cles_texte = '.Cel::db()->proteger($mots_cles_texte_chaine).' '. |
'WHERE '.(($this->mode == 'obs') ? 'id_observation' : 'id_image').' = '.Cel::db()->proteger($id_image_ou_obs). |
' AND ce_utilisateur = '.Cel::db()->proteger($identifiant_utilisateur); |
return Cel::db()->executer($requete); |
} |
private static function formaterTableauMotCleTextePourInsertion($tableau_mots_cles_texte) { |
private function obtenirMotsClesTexte($id_image_ou_obs, $identifiant_utilisateur) { |
$requete = 'SELECT mot_cle '. |
'FROM '.'cel_mots_cles_'.$this->mode.' '. |
'WHERE id_mot_cle_'.(($this->mode == 'obs') ? 'obs' : 'image').' IN '. |
'('. |
'SELECT id_mot_cle_'.(($this->mode == 'obs') ? 'obs' : 'image').' '. |
'FROM cel_'.$this->mode.'_mots_cles '. |
'WHERE '.(($this->mode == 'obs') ? 'id_observation' : 'id_image').' = '.Cel::db()->proteger($id_image_ou_obs). |
')'. |
' AND id_utilisateur = '.Cel::db()->proteger($identifiant_utilisateur); |
$resultats = Cel::db()->requeter($requete); |
return $resultats; |
} |
private function formaterTableauMotCleTextePourInsertion($tableau_mots_cles_texte) { |
$mot_cles_texte_chaine = ''; |
if (is_array($tableau_mots_cles_texte)) { |
183,7 → 197,7 |
return $mot_cles_texte_chaine; |
} |
static function nettoyerMotsCles($chaine) { |
public function nettoyerMotsCles($chaine) { |
$valeur = str_replace('null', '', $chaine); |
$valeur = trim($valeur, ';;'); |
/branches/v1.7-croissant/jrest/jrest.ini.php.defaut |
---|
45,8 → 45,7 |
hostspec = |
database = tela_prod_eflore_v1_1_principale |
api_host = "http://localhost/service:eflore:0.1" |
url_service_nom = "http://localhost/service:eflore:0.1/{referentiel}/noms" |
url_service_nom = "http://localhost/service:eflore:0.1/bdtfx/noms" |
url_service_taxon = "http://localhost/service:eflore:0.1/bdtfx/taxons" |
url_service_chorologie_obs = "http://localhost/service:eflore:0.1/chorodep/observations" |
url_service_chorologie_carte = "http://localhost/service:eflore:0.1/{referentiel_choro}/cartes" |
59,7 → 58,6 |
chemin_images = /opt/lampp/htdocs/Documents/images_serveur |
chemin_export = /opt/lampp/htdocs/Documents/export_images |
chemin_stockage_temp = /home/tmp |
images_temp_url = "http://localhost/tmp/images/%s" |
url_images = http://localhost/Documents/images_serveur |
url_export = http://localhost/Documents/export_images |
/branches/v1.7-croissant/jrest/tests/phptests/determ-espece-ref-badbdnffnn.test.php |
---|
File deleted |
/branches/v1.7-croissant/jrest/tests/phptests/ref-nonom-nonum.result.php |
---|
File deleted |
/branches/v1.7-croissant/jrest/tests/phptests/ref-nom-nonum.test.php |
---|
File deleted |
/branches/v1.7-croissant/jrest/tests/phptests/determ-espece-from-nom-ret.test.php |
---|
File deleted |
/branches/v1.7-croissant/jrest/tests/phptests/ref-nonom-nonum.test.php |
---|
File deleted |
/branches/v1.7-croissant/jrest/tests/phptests/ref-nom-nonum.result.php |
---|
File deleted |
/branches/v1.7-croissant/jrest/tests/phptests/ref-nonom-num.test.php |
---|
File deleted |
/branches/v1.7-croissant/jrest/tests/phptests/ref-nom-num.result.php |
---|
File deleted |
/branches/v1.7-croissant/jrest/tests/phptests/determ-espece-ref-badbdnffnn.result.php |
---|
File deleted |
/branches/v1.7-croissant/jrest/tests/phptests/ref-nonom-num.result.php |
---|
File deleted |
/branches/v1.7-croissant/jrest/tests/phptests/ref-nom-num.test.php |
---|
File deleted |
/branches/v1.7-croissant/jrest/tests/phptests/determ-espece-from-nom-ret.result.php |
---|
File deleted |
/branches/v1.7-croissant/jrest/tests/phptests/transmission.result.php |
---|
1,6 → 1,4 |
<?php |
date_default_timezone_set("Europe/Paris"); |
return array ( |
<?php return array ( |
'transmission' => 'oui', |
'date_transmission' => date("Y-m-d H:i:s") // attention au décallage (1sec par exemple) |
//'date_transmission' => '2013-07-26 18:20:08', |
); |
/branches/v1.7-croissant/jrest/tests/phptests/determ-espece-bdnffnt.result.php |
---|
1,7 → 1,7 |
<?php return array ( |
'nom_sel' => 'Viola riviniana f. riviniana', |
'nom_sel' => 'Viola riviniana subsp. riviniana', |
'nom_sel_nn' => '72478', |
'nom_ret' => 'Viola riviniana f. riviniana', |
'nom_ret' => 'Viola riviniana subsp. riviniana', |
'nom_ret_nn' => '72478', |
'nt' => '5757', |
'famille' => 'Violaceae', |
/branches/v1.7-croissant/jrest/tests/phptests/determ-espece-noref-bdnffnn.result.php |
---|
1,3 → 1,3 |
<?php return array ( |
'nom_sel' => 'Viola riviniana subsp. bavarica', |
'nom_referentiel' => 'bdtfx'); |
'nom_sel' => 'bdtfx:nn:72475', |
'nom_referentiel' => 'autre'); |
/branches/v1.7-croissant/jrest/tests/phptests/determ-espece-badref-bdnffnn.result.php |
---|
1,3 → 1,3 |
<?php return array ( |
'nom_sel' => 'Viola riviniana subsp. bavarica', |
'nom_referentiel' => 'bdtfx'); |
'nom_sel' => 'bdtfx:nn:72475', |
'nom_referentiel' => 'bdtxa'); |
/branches/v1.7-croissant/jrest/tests/api.php |
---|
36,8 → 36,6 |
'phenologie' => 'Phénologie', |
'images' => 'Image(s)', |
'nom_commun' => 'Nom Commun', |
'observateur' => 'Observateur', |
); |
106,10 → 104,8 |
'ce_utilisateur' => USER |
)); |
//curl_setopt($ch,CURLOPT_RETURNTRANSFER, TRUE); |
curl_setopt($ch,CURLOPT_RETURNTRANSFER, TRUE); |
//execute post |
if(DEBUG) @fwrite(STDERR, sprintf("curl -F file=@%s '%s'\n", $file, $URL)); |
$result = curl_exec($ch); |
curl_close($ch); |
return $result; |
/branches/v1.7-croissant/jrest/tests/cmd-test.php |
---|
1,10 → 1,9 |
#!/usr/bin/env php |
<?php |
define('DEFAULT_DOMAIN', 'http://cel'); |
define('DEFAULT_USER', 22506); |
$options = getopt("hiou:d:e:p:FU:P:D",array("help", "images", "obs", "user:", "domain:", "email:", "pass:", "flush", "upload:", "phpsessid", "debug")); |
$options = getopt("hiou:d:e:p:FU:P:",array("help", "images", "obs", "user:", "domain:", "email:", "pass:", "flush", "upload:", "phpsessid")); |
if(isset($options['h']) || isset($options['help'])) die(__help()); |
12,11 → 11,8 |
define('DOMAIN', isset($options['d']) ? $options['d'] : (isset($options['domain']) ? $options['domain'] : DEFAULT_DOMAIN)); |
define('EMAIL', isset($options['e']) ? $options['e'] : (isset($options['email']) ? $options['email'] : NULL)); |
define('PASS', isset($options['p']) ? $options['p'] : (isset($options['pass']) ? $options['pass'] : NULL)); |
define('DEBUG', isset($options['D']) ? 1 : (isset($options['debug']) ? 1 : 0)); |
define('COOKIE', isset($options['P']) ? $options['P'] : (isset($options['phpsessid']) ? $options['phpsessid'] : NULL)); |
if (isset($options['P'])) define('COOKIE', $options['P']); |
elseif (isset($options['phpsessid'])) define('COOKIE', $options['phpsessid']); |
// API::auth() define()'s COOKIE |
require_once('api.php'); |
31,7 → 27,7 |
$upload = isset($options['U']) ? $options['U'] : (isset($options['upload']) ? $options['upload'] : NULL); |
if($upload) cel_upload_image($upload); |
if(! defined('COOKIE')) { if(!auth()) die('no auth'); } |
if(! COOKIE) { if(!auth()) die('no auth'); } |
// $csv = genCSV(array('ordre' => 1, 'Date' => '23/06/1991', 'rien' => 'rien')); |
62,9 → 58,8 |
La priorité est donnée à -P sur le couple (-e , -p) pour l'authentification, eg: |
$ sqlite3 .mozilla/firefox/*.default/cookies.sqlite<<<"SELECT * FROM moz_cookies WHERE baseDomain = 'cel' AND name = 'PHPSESSID';" |
%1\$s -U|--upload <file> |
%1\$s -u|--upload <file> |
Upload le fichier "file". |
EOF |
, // */ |
basename(__FILE__), |
/branches/v1.7-croissant/jrest/services/CelWidgetUploadImageTemp.php |
---|
File deleted |
\ No newline at end of file |
/branches/v1.7-croissant/jrest/services/InventoryKeyWordImageLink.php |
---|
1,19 → 1,26 |
<?php |
// declare(encoding='UTF-8'); |
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel // |
/** |
* @category PHP |
* @package jrest |
* @author Aurélien Peronnet <aurelien@tela-botania.org> |
* @author Raphaël Droz <raphael@tela-botania.org> |
* @copyright 2010, 2013 Tela-Botanica |
* @license Licence CECILL <http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt> |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt> |
* |
* PHP Version 5 |
* |
* @category PHP |
* @package jrest |
* @author Aurélien Peronnet <aurelien@tela-botania.org> |
* @copyright 2010 Tela-Botanica |
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL |
* @version SVN: <svn_id> |
* @link /doc/jrest/ |
*/ |
/** |
* in : utf8 |
* out : utf8 |
* |
* Service de liaisons de mots clés à des images. |
* Le service lie une ou plusieurs mots clés à une ou plusieurs images |
*/ |
require_once('InventoryKeyWordObsLink.php'); |
* |
*/ |
class InventoryKeyWordImageLink extends Cel { |
public function getElement($uid) { |
29,24 → 36,46 |
return; |
} |
$id_images = array_filter(explode(',', $pairs['images'])); |
$mots_cles = array_filter(explode(',', $pairs['mots_cles'])); |
$pairs['images'] = rtrim($pairs['images'],','); |
$id_images = explode(',',$pairs['images']); |
$pairs['mots_cles'] = rtrim($pairs['mots_cles'],','); |
$mots_cles = explode(',',$pairs['mots_cles']); |
// Pour le moment on ne peut que supprimer les mots clés et ajouter les nouveaux à cause du fonctionnement |
// de l'arbre de mots clés des images |
$gestionnaire_mots_cles = new LiaisonMotsCles($this->config,'images'); |
$suppression_liaison_mot_cle = $gestionnaire_mots_cles->supprimerToutesLiaisonsPourIdImageOuObs($pairs['ce_utilisateur'], $id_images); |
return $gestionnaire_mots_cles->ajouterLiaisonMotsCles($pairs['ce_utilisateur'],$id_images, $mots_cles); |
$liaison_mot_cle = $gestionnaire_mots_cles->ajouterLiaisonMotsCles($pairs['ce_utilisateur'],$id_images, $mots_cles); |
return $liaison_mot_cle; |
} |
public function deleteElement($uid){ |
$retour = false; |
// Controle detournement utilisateur |
$this->controleUtilisateur($uid[0]); |
if (!isset($uid[0]) || !isset($uid[1]) || !isset($uid[2]) || ! InventoryKeyWordObsLink::estUnIdentifiantMotCle($uid[2])) { |
return FALSE; |
if (!isset($uid[0]) || !isset($uid[1]) || !isset($uid[2]) || !$this->estUnIdentifiantMotCle($uid[2])) { |
return; |
} |
$id_images = explode(',',$uid[1]); |
$id_utilisateur = $uid[0]; |
$gestionnaire_mots_cles = new LiaisonMotsCles($this->config,'images'); |
$mots_cles = $gestionnaire_mots_cles->nettoyerMotsCles($uid[2]); |
$mots_cles = explode(',',$mots_cles); |
$suppression_liaison_mot_cle = $gestionnaire_mots_cles->supprimerLiaisonMotsClesEtRegenererIndexTexte($id_utilisateur, $id_images, $mots_cles); |
return InventoryKeyWordObsLink::unlinkKeyword($this->config, 'images', explode(',',$uid[1]), $uid[0], $uid[2]); |
return $suppression_liaison_mot_cle; |
} |
private function estUnIdentifiantMotCle($chaine) { |
return trim($chaine) != '' && preg_match('/[0-9A-Z]+\.[0-9A-Z]+/i', $chaine); |
} |
} |
?> |
/branches/v1.7-croissant/jrest/services/InventoryKeyWordObsLink.php |
---|
1,18 → 1,31 |
<?php |
// declare(encoding='UTF-8'); |
/** |
* @package jrest |
* @author Aurélien Peronnet <aurelien@tela-botania.org> |
* @copyright 2010, 2013 Tela-Botanica |
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL |
* |
* PHP Version 5 |
* |
* @category PHP |
* @package jrest |
* @author Aurélien Peronnet <aurelien@tela-botania.org> |
* @copyright 2010 Tela-Botanica |
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL |
* @version SVN: <svn_id> |
* @link /doc/jrest/ |
*/ |
/** |
* in : utf8 |
* out : utf8 |
* |
* Service de liaisons de mots clés à des observations. |
* Le service lie une ou plusieurs mots clés à une ou plusieurs observations |
*/ |
* |
*/ |
class InventoryKeyWordObsLink extends Cel { |
public function getElement($uid) { } |
public function getElement($uid) { |
} |
public function createElement($pairs) { |
// Controle detournement utilisateur |
32,25 → 45,30 |
} |
public function deleteElement($uid){ |
$retour = false; |
// Controle detournement utilisateur |
$this->controleUtilisateur($uid[0]); |
if (!isset($uid[0]) || !isset($uid[1]) || !isset($uid[2]) || ! self::estUnIdentifiantMotCle($uid[2])) { |
return FALSE; |
if (!isset($uid[0]) || !isset($uid[1]) || !isset($uid[2]) || !$this->estUnIdentifiantMotCle($uid[2])) { |
return; |
} |
return self::unlinkKeyword($this->config, 'obs', explode(',',$uid[1]), $uid[0], $uid[2]); |
} |
$ids_obs = explode(',',$uid[1]); |
$id_utilisateur = $uid[0]; |
$gestionnaire_mots_cles = new LiaisonMotsCles($this->config,'obs'); |
$mots_cles = $gestionnaire_mots_cles->nettoyerMotsCles($uid[2]); |
$mots_cles = explode(',',$mots_cles); |
$suppression_liaison_mot_cle = $gestionnaire_mots_cles->supprimerLiaisonMotsClesEtRegenererIndexTexte($id_utilisateur, $ids_obs, $mots_cles); |
static function unlinkKeyword($config, $type /* = obs|images */, Array $obsIds, $uid, $keywordIds /* comma-separated string */) { |
if($type != 'obs' && $type != 'images') return FALSE; |
$gestionnaire_mots_cles = new LiaisonMotsCles($config, $type); |
$mots_cles = explode(',', LiaisonMotsCles::nettoyerMotsCles($keywordIds)); |
return $gestionnaire_mots_cles->supprimerLiaisonMotsClesEtRegenererIndexTexte($uid, $obsIds, $mots_cles); |
return $suppression_liaison_mot_cle; |
} |
static function estUnIdentifiantMotCle($chaine) { |
private function estUnIdentifiantMotCle($chaine) { |
return trim($chaine) != '' && preg_match('/[0-9A-Z]+\.[0-9A-Z]+/i', $chaine); |
} |
} |
} |
?> |
/branches/v1.7-croissant/jrest/services/CelImageDoublon.php |
---|
69,7 → 69,7 |
private function getDoublonHtml($parametres) { |
$widget = null; |
$utilisateur_mail = Cel::getAuthIdentifiant(); |
$utilisateur_mail = $this->getAuthIdentifiant(); |
$utilisateur_infos = new User($this->config); |
$utilisateur = $utilisateur_infos->obtenirUtilisateurSiExiste($utilisateur_mail); |
$utilisateur = $utilisateur['id_utilisateur']; |
/branches/v1.7-croissant/jrest/services/InventoryKeyWordList.php |
---|
42,69 → 42,27 |
// Controle detournement utilisateur |
$id_utilisateur = $uid[1] ; |
$this->controleUtilisateur($uid[1]); |
$this->setChampsEtTablePourSuffixe($uid[0]); |
$this->envoyerJson(self::getMotsClefs($uid[1], $uid[0])); |
return TRUE; // compat: pourquoi renvoyer true si vide ? |
} |
static function getMotsClefs($uid, $type) { |
if($type == 'obs') { |
return Cel::db()->requeter(sprintf( |
'SELECT mot_cle, id_mot_cle_obs, ce_mot_cle_obs_parent'. |
' FROM cel_mots_cles_obs'. |
' WHERE id_utilisateur = %s'. |
' ORDER BY niveau', |
Cel::db()->proteger($uid))); |
$requete = 'SELECT mot_cle, id_mot_cle'.$this->suffixe_champ.', ce_mot_cle'.$this->suffixe_champ.'_parent '. |
'FROM cel_mots_cles'.$this->suffixe_table.' '. |
'WHERE id_utilisateur = '.Cel::db()->proteger($id_utilisateur).' '. |
'ORDER BY niveau '; |
$resultats_mots_cles = Cel::db()->requeter($requete); |
if (is_array($resultats_mots_cles)) { |
$mots_cles = array(); |
foreach($resultats_mots_cles as $mot_cle) { |
$mots_cles[] = $mot_cle; |
} |
$this->envoyerJson($mots_cles); |
return true; |
} |
if($type == 'images') { |
return Cel::db()->requeter(sprintf( |
'SELECT mot_cle, id_mot_cle_image, ce_mot_cle_image_parent'. |
' FROM cel_mots_cles_images'. |
' WHERE id_utilisateur = %s'. |
' ORDER BY niveau', |
Cel::db()->proteger($uid))); |
} |
/* pour extraire un mot-clef en particulier (bien que getMotsClefId() soit plus adapté: |
array_walk($ret, |
create_function('&$val, $k, $keyword', |
'if($val["mot_cle"] != $keyword) $val = NULL;' . |
'else $val = $val["id_mot_cle_obs"];'), |
'XXX'); |
$obsKeywordIdToDetach = array_filter($ret); |
$obsKeywordIdToDetach = array_pop($obsKeywordIdToDetach); */ |
return array(); |
} |
static function getMotsClefId($uid, $type, $keyword) { |
if($type == 'obs') { |
$ret = Cel::db()->requeter(sprintf( |
'SELECT mot_cle, id_mot_cle_obs, ce_mot_cle_obs_parent'. |
' FROM cel_mots_cles_obs'. |
' WHERE id_utilisateur = %s'. |
' AND mot_cle = %s'. |
' ORDER BY niveau', |
Cel::db()->proteger($uid), |
Cel::db()->proteger($keyword) )); |
} |
if($type == 'images') { |
$ret = Cel::db()->requeter(sprintf( |
'SELECT mot_cle, id_mot_cle_image, ce_mot_cle_image_parent'. |
' FROM cel_mots_cles_images'. |
' WHERE id_utilisateur = %s'. |
' AND mot_cle = %s'. |
' ORDER BY niveau', |
Cel::db()->proteger($uid), |
Cel::db()->proteger($keyword) )); |
} |
return @$ret[0]['id_mot_cle_obs']; |
} |
public function updateElement($uid, $pairs) { |
$id_utilisateur = $uid[1]; |
$this->controleUtilisateur($uid[1]); |
132,7 → 90,7 |
} |
} else if ($action == 'deplacement') { |
self::commencerTransaction(); |
$this->commencerTransaction(); |
$transaction_reussie_1 = true; |
$id_pere = $pairs['parent']; |
171,10 → 129,10 |
if ($transaction_reussie_1 !== false && $transaction_reussie_2 !== false && |
$transaction_reussie_3 !== false && $transaction_reussie_4 !== false && |
$transaction_reussie_5 !== false && $transaction_reussie_6 !== false) { |
self::completerTransaction(); |
$this->completerTransaction(); |
return true; |
} else { |
self::annulerTransaction(); |
$this->annulerTransaction(); |
return false; |
} |
} |
196,6 → 154,8 |
$this->ajouterMotCleRacine($id_utilisateur); |
$this->commencerTransaction(); |
$bornes = $this->calculerBornesEtNiveau($id_parent, $id_utilisateur); |
$borne_pere = $bornes['bd']; |
$niveau = $bornes['niveau'] + 1; |
202,9 → 162,6 |
$bg = $bornes['bd']; |
$bd = $bg + 1; |
if(!$borne_pere) return false; |
self::commencerTransaction(); |
$transaction_reussie_1 = $this->decalerBornesPlusDeux($borne_pere,$id_utilisateur) ? true : false; |
$requete = 'INSERT INTO cel_mots_cles'.$this->suffixe_table.' '. |
221,18 → 178,11 |
$transaction_reussie_2 = Cel::db()->executer($requete); |
if ($transaction_reussie_1 && $transaction_reussie_2) { |
// on sort de self::createElement ==> JRest::(get|post) ==> JRest->created() qui fait header(). |
// or si nous dépassons ini_get(output_buffering) nous ne pouvons plus réécrire le code de retour |
// HTTP, de plus, si ini_get(output_buffering) == off, nous enverrions un warning. |
// d'où ce clone de JRest::created(); |
header('HTTP/1.0 201 Created'); |
self::completerTransaction(); |
exit; |
$this->completerTransaction(); |
return true; |
} else { |
// cf ci-dessus: JRest::badRequest |
header('HTTP/1.0 400 Bad Request'); |
self::annulerTransaction(); |
exit; |
$this->annulerTransaction(); |
return false; |
} |
return true; |
} |
247,7 → 197,7 |
$tableau_ids_mots_cles[] = $id_mot_cle; |
$this->controleUtilisateur($id_utilisateur); |
self::commencerTransaction(); |
$this->commencerTransaction(); |
$bornes = $this->calculerBornesEtNiveau($id_mot_cle, $id_utilisateur); |
if($bornes) { |
273,9 → 223,9 |
$transaction_reussie_2 = $this->decalerBornesMoinsIntervalle($bg, $bd, $id_utilisateur) ? true : false; |
if ($transaction_reussie_1 !== false && $transaction_reussie_2 !== false) { |
self::completerTransaction(); |
$this->completerTransaction(); |
} else { |
self::annulerTransaction(); |
$this->annulerTransaction(); |
} |
} |
// Suppression des liaisons associées à ce mot clé |
326,21 → 276,27 |
/** |
* Désactive l'auto-commit puis débute la transaction |
*/ |
static function commencerTransaction() { |
private function commencerTransaction() { |
// Désactive l'autocommit le temps de la manipulation de l'arbre |
$reussite_autocommit = Cel::db()->executer("SET AUTOCOMMIT = 0"); |
$requete = 'SET AUTOCOMMIT = 0 '; |
$reussite_autocommit = Cel::db()->executer($requete); |
// Débute une nouvelle transaction |
$reussite_begin = Cel::db()->executer("BEGIN"); |
$requete = 'BEGIN '; |
$reussite_begin = Cel::db()->executer($requete); |
} |
/** |
* Termine la transaction puis réactive l'auto-commit |
*/ |
static function completerTransaction() { |
private function completerTransaction() { |
// Complète la transaction |
$reussite_commit = Cel::db()->executer("COMMIT"); |
$requete = 'COMMIT '; |
$reussite_commit = Cel::db()->executer($requete); |
// Réactive l'autocommit le temps de la manipulation de l'arbre |
$reussite_autocommit = Cel::db()->executer("SET AUTOCOMMIT = 1"); |
$requete = 'SET AUTOCOMMIT = 1 '; |
$reussite_autocommit = Cel::db()->executer($requete); |
echo 'OK'; |
} |
348,11 → 304,14 |
/** |
* Annule la transaction et réactive l'auto-commit |
*/ |
static function annulerTransaction() { |
private function annulerTransaction() { |
// Annule la transaction |
$reussite_rollback = Cel::db()->executer("ROLLBACK"); |
$requete = 'ROLLBACK '; |
$reussite_rollback = Cel::db()->executer($requete); |
// Réactive l'autocommit le temps de la manipulation de l'arbre |
$reussite_autocommit = Cel::db()->executer("SET AUTOCOMMIT = 1"); |
$requete = 'SET AUTOCOMMIT = 1 '; |
$reussite_autocommit = Cel::db()->executer($requete); |
echo 'ERROR'; |
} |
/branches/v1.7-croissant/jrest/services/InventoryObservationList.php |
---|
1,30 → 1,36 |
<?php |
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel // |
/** |
* PHP Version 5.2 |
* |
* @category PHP |
* @package jrest |
* @author Raphaël Droz <raphael@tela-botanica.org> |
* @author Aurelien Peronnet <aurelien@tela-botanica.org> |
* @copyright 2010, 2013 Tela-Botanica |
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt> |
* @link /doc/jrest/ |
* |
* InventoryObservationList.php |
* Cas d'utilisation : |
* 1: Service recherche d'observations a partir de divers critères |
* a: Le service recherche les observations correspondant aux critères demandés |
* b: Le service renvoie la liste des observations correspondantes |
* |
* 2: Service modification en masse d'observations |
* a: Le service recherche les observations correspondant aux identifiants donnés |
* b: Le service modifie les observations correspondantes avec les infos données en paramètres |
* |
* 3: Service de suppression d'observations en masse |
* a: Le service recherche les observations correspondant aux critères demandés |
* b: Le service supprime la liste des observations correspondantes |
*/ |
* PHP Version 5 |
* |
* @category PHP |
* @package jrest |
* @author Aurelien Peronnet <aurelien@tela-botanica.org> |
* @copyright 2010 Tela-Botanica |
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL |
* @version SVN: <svn_id> |
* @link /doc/jrest/ |
*/ |
/** |
* InventoryObservationList.php |
* |
* in=utf8 |
* out=utf8 |
* |
* Cas d'utilisation : |
* 1: Service recherche d'observations a partir de divers critères |
* a: Le service recherche les observations correspondant aux critères demandés |
* b: Le service renvoie la liste des observations correspondantes |
* |
* 2: Service modification en masse d'observations |
* a: Le service recherche les observations correspondant aux identifiants donnés |
* b: Le service modifie les observations correspondantes avec les infos données en paramètres |
* |
* 3: Service de suppression d'observations en masse |
* a: Le service recherche les observations correspondant aux critères demandés |
* b: Le service supprime la liste des observations correspondantes |
*/ |
class InventoryObservationList extends Cel { |
/** |
77,32 → 83,13 |
//TODO: envoyer un message d'erreur |
return; |
} |
$obs = array_filter(array_map('intval', explode(',', $uid[1]))); |
if(count($obs) == 0) { |
return; |
} |
$uid[1] = rtrim($uid[1],','); |
$gestionnaire_observation = new GestionObservation($this->config); |
if(count($obs) == 1) { |
return $gestionnaire_observation->modifierObservation($uid[0], $obs[0], $pairs); |
} |
// cas de mise à jour de multiples observations: |
$ret = GestionObservation::modifierMultiplesObservation($uid[0], $obs, $pairs); |
if($ret === FALSE) return FALSE; // JRest::badRequest(); |
if($ret === 0) { |
header('HTTP/1.0 304 Not Modified'); |
die; |
} |
header('HTTP/1.0 200 OK'); // et non pas une 201 ! |
// die(); // non, car incompatible avec PHPUnit |
// throw(new Exception()); // non, lance une 400 (cf JRest::updateElement()) |
// return TRUE; // non, lance une 201 |
// return FALSE; // non, lance une 400 |
die; // tant pis |
$modification_observation = $gestionnaire_observation->modifierObservation($uid[0],$uid[1],$pairs); |
return true; |
} |
/** |
/branches/v1.7-croissant/jrest/services/squelettes/image_temp.tpl.xml |
---|
File deleted |
\ No newline at end of file |
/branches/v1.7-croissant/jrest/services/InventoryTransmit.php |
---|
1,42 → 1,67 |
<?php |
/* |
* @author Raphaël Droz <raphael@tela-botanica.org> |
* @author David Delon <david.delon@clapas.net> |
* @copyright 2010, 2013 Tela-Botanica |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt> |
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt> |
*/ |
// ATTENTION ! Classe compatible uniquement avec nouveau format de bdd du cel // |
/** |
* PHP Version 5 |
* |
* @category PHP |
* @package jrest |
* @author David Delon <david.delon@clapas.net> |
* @copyright 2010 Tela-Botanica |
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL |
* @version SVN: <svn_id> |
* @link /doc/jrest/ |
*/ |
/** |
* |
* in : utf8 |
* out : utf8 |
* |
* |
* Transmission observation vers Tela |
*/ |
class InventoryTransmit extends Cel { |
function updateElement($uid, $pairs) { |
function updateElement($uid,$pairs) { |
// Controle detournement utilisateur |
$this->controleUtilisateur($uid[0]); |
if (!isset($uid[1])) return false; |
$transmission = intval($pairs['transmission']); |
if($transmission != 0 && $transmission != 1) return false; |
//TODO: modification pour passer ceci dans la classe gestion observation |
if (isset($uid[1]) && $this->estUneSuiteIdentifiantsObservation($uid[1])) { |
$requete_transmission = 'UPDATE cel_obs '. |
'SET transmission = '.$pairs['transmission'].','. |
'date_modification = now(), date_transmission = now() '. |
'WHERE ce_utilisateur = '.Cel::db()->proteger($uid[0]).' AND ordre in ('.$uid[1].')'; |
} |
$ids = array_filter(array_map(create_function('$v','return intval($v);'), |
explode(',', $uid[1]))); |
if(!$ids) return FALSE; |
$resultat_transmission = Cel::db()->executer( |
sprintf('UPDATE cel_obs SET'. |
// mise à jour de la valeur de transmission (peut-être ?) |
' transmission = %1$d,'. |
// date_transmission n'est réactualisé que si nécessaire, c'est à dire si le statut de "transmission" actuel n'est |
// pas à 1 et que le nouveau statut est à 1. Autrement il est mis (ou reste) à NULL |
' date_transmission = IF(transmission != 1 AND %1$s = 1, now(), NULL),'. |
// idem pour date_modification qui n'est mise à now() que si l'on passe une observation |
// de non-transmise à tranmise ou de transmise à non-transmise |
' date_modification = IF(transmission != %1$d, now(), date_modification)'. |
' WHERE ce_utilisateur = %2$s AND ordre in (%3$s)', |
$transmission, |
Cel::db()->proteger($uid[0]), |
implode(',', $ids))); |
return ($resultat_transmission != 0); |
$resultat_transmission = Cel::db()->executer($requete_transmission); |
if ($resultat_transmission === false) { |
return false; |
} |
return true; |
} |
private function estUneSuiteIdentifiantsObservation($chaine) { |
// un ensemble d'identifiants est une suite d'identifiants séparés par des virgules |
// sans virgule terminale |
$reg_exp = "/^(([0-9])+,)*([0-9])+$/"; |
return preg_match($reg_exp, $chaine); |
} |
} |
/* +--Fin du code ---------------------------------------------------------------------------------------+ |
* $Log$ |
* Revision 1.3 2008-01-30 08:57:28 ddelon |
* fin mise en place mygwt |
* |
* Revision 1.2 2007-05-22 12:54:09 ddelon |
* Securisation acces utilisateur |
* |
*/ |
?> |
/branches/v1.7-croissant/jrest/services/CelValidationObservation.php |
---|
1,137 → 1,59 |
<?php |
/** |
* @category PHP |
* @package jrest |
* @author Aurélien Peronnet <aurelien@tela-botania.org> |
* @author Raphaël Droz <raphael@tela-botania.org> |
* @copyright 2013 Tela-Botanica |
* @license Licence CECILL <http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt> |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt> |
* |
*/ |
class CelValidationObservation extends Cel { |
/** |
* Méthode appelée avec une requête de type POST avec un identifiant d'obs. |
* Modifie le taxon associé à une observation avec les informations envoyées |
* Utilisé par: |
* - del/services/modules/0.1/determinations/ValiderDetermination.php::modifierObservationParDetermination() |
* |
* @param int $uid[0] identifiant observation |
* @param pairs array tableau contenant les valeurs à modifier |
* @param pairs['obsKeywordDelete'] optional string: mot-clef à délier à cette observation |
*/ |
public function updateElement($uid, $pairs) { |
public function updateElement($uid,$pairs) |
{ |
// ce service est uniquement destiné à être appelé en local, |
// depuis le serveur lui même |
// en particulier par l'application identiplante |
$this->controleAppelIpAutorisee(); |
self::verifierParametresObligatoires($uid, $pairs); |
$this->verifierParametresObligatoires($uid, $pairs); |
$id = $uid[0]; |
$gestion_observation = new GestionObservation($this->config); |
$pairs = array_map('trim', $pairs); |
$utilisateur = $pairs['ce_utilisateur']; |
unset($pairs['ce_utilisateur'], $pairs['id_observation']); |
// mise à jour des mots-clefs suite à une validation: |
// typiquement, DEL modifierObservationParDetermination() |
// nous enverra obsKeywordDelete=aDeterminer en plus de certitude=Certaine |
$obsKeywordDelete = @trim($pairs['obsKeywordDelete']); |
// $imgKeywordDelete = @trim($pairs['imgKeywordDelete']); |
unset($pairs['obsKeywordDelete']); // , $pairs['imgKeywordDelete']); |
// complete les données de la proposition validée car: |
// 1) la table tb_del.del_commentaire ne contient pas toutes les informations nécessaires |
// 2) la table tb_del.del_commentaire ne *devrait* pas contenir beaucoup plus que nom_sel et nom_sel_nn |
// 3) la génération de ces données ici, au moment de l'UPDATE, est le meilleur garant de leur fiabilité |
$more_data = CelTaxonNomFrom::NN2($this->bdd, @$pairs['nom_sel_nn'], @$pairs['nom_referentiel']); |
if($more_data) $pairs = array_merge($pairs, $more_data); |
unset($pairs['ce_utilisateur']); |
$modification = $gestion_observation->modifierObservationPublique($utilisateur, $id, $pairs); |
if($modification) { |
// quel impact de ces valeurs de retour ? |
if($kid = InventoryKeyWordList::getMotsClefId($utilisateur, 'obs', $obsKeywordDelete)) |
InventoryKeyWordObsLink::unlinkKeyword($this->config, 'obs', explode(',', $id), $utilisateur, $kid); |
/* if($kid = InventoryKeyWordList::getMotsClefId($utilisateur, 'images', $imgKeywordDelete)) |
InventoryKeyWordObsLink::unlinkKeyword($this->config, 'obs', explode(',', $id), $utilisateur, $kid); */ |
header("Content-Type: text/plain; charset=utf-8"); |
die("OK"); // attention, compatibilité avec ValiderDetermination.php de DEL ! |
if($modification !== false) { |
$resultat = 'ok'; |
$this->envoyer($resultat); |
exit; |
} else { |
$info = array(); |
$info = 'Impossible de modifier l\'observation associée à cet identifiant '; |
$this->envoyer($info, 'text/html', 'utf-8', false); |
exit; |
} |
// cf TODO: n'arrivera pas tant que l'UPDATE ajoutera systématiquement date_modification = now() |
elseif($modification === 0) { |
header("HTTP/1.0 304 Not Modified"); // XXX: PHP 5.4 // http_response_code(304); // Not Modified |
header("Content-Type: text/plain; charset=utf-8"); |
die("Not Modified"); |
} |
else { |
header("HTTP/1.0 500 Internal Server Error"); // XXX: PHP: 5.4 // http_response_code(500); // Internal Server Error |
header("Content-Type: text/plain; charset=utf-8"); |
die("Impossible de modifier l'observation associée à cet identifiant " . mysql_error()); |
} |
} |
static function verifierParametresObligatoires($uid, $params) { |
if(!@intval($uid[0]) || !@intval($params['id_observation'])) { |
header("Content-Type: text/plain; charset=utf-8"); |
die("L'identifiant d'observation doit être un entier"); |
private function verifierParametresObligatoires($uid ,$params) { |
$params_obligatoires = array('id_observation', |
'ce_utilisateur', |
'nom_sel'); |
$info = array(); |
if(!isset($uid[0]) || !is_numeric($uid[0])) { |
$info .= 'l\' identifiant doit être un entier '; |
} |
// TODO: check sur 'id_observation' en tant que param est superflu ? |
// TODO: avec l'apparition de CelTaxonNomFrom, "nom_sel" devrait être optionnel |
// puisque nous regénérons des données valides avant l'update et puisque |
// seul un nom_sel_nn *valide* a pu nous provenir depuis une validation de proposition de la part de DEL. |
$params_obligatoires = array('id_observation', 'ce_utilisateur', 'nom_sel'); |
foreach($params_obligatoires as $param) { |
if(@trim($params[$param])) continue; |
header("HTTP/1.0 412 Precondition Failed"); // XXX: PHP: 5.4 // http_response_code(412); // Precondition Failed |
header("Content-Type: text/plain; charset=utf-8"); |
die(sprintf("Paramètre %s manquant (parmi %s)", $param, implode(', ', $params_obligatoires))); |
if(!isset($params[$param]) || trim($params[$param]) == "") { |
$info = 'le paramètre '.$param.' doit exister et ne peut pas être vide '; |
} |
} |
if(!empty($info)) { |
$this->envoyer($info, 'text/html', 'utf-8', false); |
exit; |
} |
} |
} |
// pour les modifications touchants aux nom_sel(nn)/nom_ret(nn)/... |
// les clefs du tableau (= les aliases de champs) correspondent aux champs attendus |
// par tb_cel.cel_obs afin de pouvoir array_merger() et passer le résultat à modifierObservationPublique() |
class CelTaxonNomFrom { |
const db = 'tb_eflore'; |
const bdtfx = 'bdtfx_v2_00'; |
const bdtxa = 'bdtxa_v1_01'; |
const isfan = 'isfan_v2013'; |
// get from num_nom(_sel) |
static function NN($db, $id, $ref) { |
if(!$db || !$id || !$ref) return FALSE; |
return $db->query(sprintf("SELECT num_nom_retenu AS nom_ret_nn, num_taxon AS nt, CONCAT(nom_sci, ' ', auteur) AS nom_sel". |
" FROM cel_references". |
" WHERE referentiel = %s AND num_nom = %d", $db->quote($ref), intval($id)))->fetch(PDO::FETCH_ASSOC); |
} |
// get from num_nom(_sel) directement via la DB |
// ce qui nous permet l'initialisation des champs non-présents dans cel_references |
// cf TODO |
static function NN2($db, $id, $ref) { |
if(!$db || !$id || !$ref) return FALSE; |
switch($ref) { |
case "bdtfx": |
return $db->query(sprintf("SELECT o.num_nom_retenu AS nom_ret_nn, o.num_taxonomique AS nt, CONCAT(o.nom_sci, ' ', o.auteur) AS nom_sel". |
" , o.famille, CONCAT(ret.nom_sci, ' ', ret.auteur) AS nom_ret". |
" FROM %s.%s o". |
" LEFT JOIN %s.%s ret ON o.num_nom_retenu != 0 AND o.num_nom_retenu = ret.num_nom". |
" WHERE o.num_nom = %d -- %s:%d", self::db, self::bdtfx, self::db, self::bdtfx, intval($id), __FILE__, __LINE__))->fetch(PDO::FETCH_ASSOC); |
case "bdtxa": |
return $db->query(sprintf("SELECT o.num_nom_retenu AS nom_ret_nn, o.num_tax AS nt, CONCAT(o.nom_sci, ' ', o.auteur) AS nom_sel". // subtilité: "num_tax" |
" , o.famille, CONCAT(ret.nom_sci, ' ', ret.auteur) AS nom_ret". |
" FROM %s.%s o". |
" LEFT JOIN %s.%s ret ON o.num_nom_retenu != 0 AND o.num_nom_retenu = ret.num_nom". |
" WHERE o.num_nom = %d -- %s:%d", self::db, self::bdtxa, self::db, self::bdtxa, intval($id), __FILE__, __LINE__))->fetch(PDO::FETCH_ASSOC); |
case "isfan": |
return $db->query(sprintf("SELECT o.num_nom_retenu AS nom_ret_nn, o.num_taxonomique AS nt, CONCAT(o.nom_sci, ' ', o.auteur) AS nom_sel". |
" , o.famille, CONCAT(ret.nom_sci, ' ', ret.auteur) AS nom_ret". |
" FROM %s.%s o". |
" LEFT JOIN %s.%s ret ON o.num_nom_retenu != 0 AND o.num_nom_retenu = ret.num_nom". |
" WHERE o.num_nom = %d -- %s:%d", self::db, self::isfan, self::db, self::isfan, intval($id), __FILE__, __LINE__))->fetch(PDO::FETCH_ASSOC); |
} |
return FALSE; |
} |
} |
?> |
/branches/v1.7-croissant/jrest/services/ImportXLS.php |
---|
482,9 → 482,6 |
C_NOM_RET_NN => NULL, C_NT => NULL, C_FAMILLE => NULL); |
self::traiterEspece($ligne, $espece, $referentiel, $cel); |
if(!$espece[C_NOM_SEL]) $referentiel = Cel::$fallback_referentiel; |
if($espece[C_NOM_SEL] && !$espece[C_NOM_SEL_NN]) $referentiel = Cel::$fallback_referentiel; |
// $localisation est rempli à partir de plusieurs champs: C_ZONE_GEO et C_CE_ZONE_GEO |
$localisation = Array(C_ZONE_GEO => NULL, C_CE_ZONE_GEO => NULL); |
self::traiterLocalisation($ligne, $localisation); |
639,7 → 636,7 |
if(strpos($referentiel, 'autre') !== FALSE) return 'autre'; |
if($referentiel && isset($ligne[C_NOM_SEL]) && $ligne[C_NOM_SEL]) { |
trigger_error("ligne \"{$ref_ligne}\": Attention: référentiel \"{$referentiel}\" inconnu", E_USER_NOTICE); |
trigger_error("ligne \"{$ref_ligne}\": Attention: référentiel inconnu", E_USER_NOTICE); |
return 'autre'; |
} |
691,14 → 688,7 |
pour des questions de performances |
*/ |
static function traiterEspece($ligne, Array &$espece, &$referentiel, $cel) { |
if(empty($ligne[C_NOM_SEL])) { |
// TODO: nous ne déclarons pas "Numéro nomenclatural" comme colonne importable |
// Nous ne pouvons donc pas tenter d'être sympa sur la détermination par num_nom |
/* if(!empty($ligne[C_NOM_SEL_NN]) && $referentiel != Cel::$fallback_referentiel) |
$ligne[C_NOM_SEL] = $referentiel . ':nn:' . $ligne[C_NOM_SEL_NN]; |
else */ |
return; |
} |
if(empty($ligne[C_NOM_SEL])) return; |
// nom_sel reste toujours celui de l'utilisateur |
$espece[C_NOM_SEL] = trim($ligne[C_NOM_SEL]); |
/branches/v1.7-croissant/jrest/services/CelWidgetMapPoint.php |
---|
249,7 → 249,7 |
if (isset($this->parametres['ne']) && $this->parametres['sw'] && ! $this->etreNull($this->parametres['ne']) && ! $this->etreNull($this->parametres['ne']) && ! $this->etreNull($this->parametres['sw'])) { |
$ne = $this->decomposerLatLng($this->parametres['ne']); |
$sw = $this->decomposerLatLng($this->parametres['sw']); |
$marqueurs['points'] = CartoGroupage::creerGroupesQuadtree($points, $ne['lat'], $ne['lng'], $sw['lat'], $sw['lng'], $zoom); |
$marqueurs['points'] = CartoGroupage::creerGroupesQuadtree(&$points, $ne['lat'], $ne['lng'], $sw['lat'], $sw['lng'], $zoom); |
} else { |
$marqueurs['points'] = $points; |
} |
/branches/v1.7-croissant/src/org/tela_botanica/cel-test.gwt.xml |
---|
File deleted |
/branches/v1.7-croissant/src/org/tela_botanica/client/vues/observation/FormulaireSaisieObservationVue.java |
---|
83,7 → 83,7 |
* Le médiateur associé à la vue |
*/ |
private ObservationMediateur observationMediateur = null; |
FormPanel panneauFormulaire = null; |
private DateField date = null; |
101,56 → 101,56 |
private String referentielGeo = null; |
// Pour remise a zero partielle lors d'une validation |
private enum Champs { |
DATE, LIEUDIT, STATION, MILIEU, COMMENT, COMMUNE, ESPECE, TOUT, LATITUDE, LONGITUDE, ALTITUDE, ABONDANCE, CERTITUDE, REFERENTIELTAXO, PHENOLOGIE; |
@Override |
public String toString() { |
switch(this) { |
case DATE: |
return "date"; |
case COMMUNE: |
return "commune"; |
case LIEUDIT: |
return "lieu dit"; |
case STATION: |
return "station"; |
case MILIEU: |
return "milieu"; |
case COMMENT: |
return "commentaire"; |
case ESPECE: |
return "espèce"; |
case LATITUDE: |
return "latitude"; |
case LONGITUDE: |
return "longitude"; |
case ALTITUDE: |
return "altitude"; |
case ABONDANCE: |
return "abondance"; |
case CERTITUDE: |
return "identification"; |
case REFERENTIELTAXO: |
return "referentiel"; |
case PHENOLOGIE: |
return "phenologie"; |
case TOUT: |
return "date, commune, lieu dit, station, milieu, espèce, commentaire, latitude, longitude, altitude, abondance, identification, referentiel, phenologie"; |
} |
157,7 → 157,7 |
return TOUT.toString(); |
} |
}; |
private String formatDate = null ; |
private Button boutonOK = new Button("Créer"); |
private Button boutonModifier = new Button("Modifier"); |
169,9 → 169,9 |
private boolean selectionAbondance = false; |
private boolean selectionCertitude = false; |
private boolean selectionPhenologie = false; |
private Toolbar bt = null ; |
private final String VALEURS_MULTIPLES = "(Valeurs multiples)"; |
private final String modeleMessageModif = "commune:lieu-dit:station:milieu:latitude:longitude:altitude:date:espece:commentaire:abondance:identification:referentiel:phenologie"; |
private boolean communeModifiee = false; |
185,7 → 185,7 |
private boolean certitudeModifiee = false; |
private boolean referentielTaxoModifie = false; |
private boolean phenologieModifiee = false;; |
private final int KEY_ALT = 18; |
private final int KEY_BACKSPACE = 8; |
private final int KEY_CTRL = 17; |
202,7 → 202,7 |
private final int KEY_SHIFT = 16; |
private final int KEY_TAB = 9; |
private final int KEY_UP = 38; |
/** |
* Booleen d'instanciation |
*/ |
217,55 → 217,55 |
private TextField longitude; |
private TextField latitude; |
private TextField altitude; |
private MultiFieldPanel htmlCommunePanel = null; |
private MultiFieldPanel coordPanel; |
private TextField coordonnees; |
private Label lienSelectionCommune = null; |
private HTML afficherFormulaireLatLon; |
private HTML basculerverscarto; |
private boolean longlatAjoutee; |
private boolean latModifiee; |
private boolean longModifiee; |
private boolean altModifiee; |
protected boolean rechercheCommuneEnCours = false; |
private Timer tCoord; |
final String resultTplRefPerso = "<div class=\"search-item-commune\">{element_referentiel}</div>"; |
private ComboBox selecteurAbondance = null; |
private ComboBox selecteurCertitude = null; |
final String resultTplRefPerso = "<div class=\"search-item-commune\">{element_referentiel}</div>"; |
private ComboBox selecteurAbondance = null; |
private ComboBox selecteurCertitude = null; |
private ComboBox selecteurReferentielTaxo = null; |
private ComboBox selecteurStadePheno = null; |
private boolean selectionMultiple = false; |
private HTML lienAfficherChampsEtendus = null; |
Panel conteneurChampEtenduGauche = null; |
Panel conteneurChampEtenduDroite = null; |
private boolean afficherChampsEtendus = false; |
private boolean premierAffichage = true; |
private Map<String, TextField> listeChampsEtendus; |
/** |
* Constructeur sans argument (privé car ne doit pas être utilisé) |
*/ |
274,75 → 274,75 |
{ |
super() ; |
} |
/** |
* Constructeur avec argument |
* @param im |
*/ |
public FormulaireSaisieObservationVue(ObservationMediateur obs) |
{ |
{ |
super("Saisie"); |
// on associe le médiateur |
observationMediateur = obs ; |
referentielTaxo = obs.getRefTaxSelectionne().getCode(); |
panneauFormulaire = new FormPanel(Position.RIGHT); |
panneauFormulaire.setBorder(false); |
// Panneau intermediaire qui contient deux colonnes de formulaire |
panneauIntermediaire = new Panel(); |
panneauIntermediaire = new Panel(); |
if (Window.getClientWidth()> Window.getClientHeight()) { |
panneauIntermediaire.setLayout(new ColumnLayout()); |
panneauIntermediaire.setLayout(new ColumnLayout()); |
} |
else { |
panneauIntermediaire.setLayout(new RowLayout()); |
panneauIntermediaire.setLayout(new RowLayout()); |
} |
panneauIntermediaire.setBorder(false); |
//création du panneau formulaire de gauche auquels on ajoute les champs |
panneauPremierColonne = new Panel(); |
panneauPremierColonne.setLayout(new FormLayout()); |
panneauPremierColonne = new Panel(); |
panneauPremierColonne.setLayout(new FormLayout()); |
panneauPremierColonne.setBorder(false); |
//création du panneau formulaire de droite |
panneauSecondeColonne = new Panel(); |
panneauSecondeColonne.setLayout(new FormLayout()); |
panneauSecondeColonne = new Panel(); |
panneauSecondeColonne.setLayout(new FormLayout()); |
panneauSecondeColonne.setBorder(false); |
this.setPaddings(5) ; |
// Accesskey pour debugging |
commune=new ComboBox("Commune","commune\" accesskey=\"1"); |
final String resultTplCommune = "<div class=\"search-item-commune\">{commune}</div>"; |
commune=new ComboBox("Commune","commune\" accesskey=\"1"); |
final String resultTplCommune = "<div class=\"search-item-commune\">{commune}</div>"; |
commune.setTpl(resultTplCommune); |
commune.setMode(ComboBox.REMOTE); |
commune.setItemSelector("div.search-item-commune"); |
commune.setTypeAhead(true); |
commune.setLoadingText("Recherche..."); |
commune.setTypeAhead(true); |
commune.setLoadingText("Recherche..."); |
commune.setHideTrigger(true); |
//création du lien "Accès carto" dans le formulaire |
//création du lien "Accès carto" dans le formulaire |
basculerverscarto = new HTML(" <a id=\"lien_carto\" href=\"#\" tabindex=\"2\">Localiser la commune</a>"); |
basculerverscarto.addStyleName("lien_actif"); |
//création info bulle sur le lien "accès carto" |
ToolTip tip2 = new ToolTip(); |
tip2.setHtml("Via une carte, obtenez les coordonnées (latitude/longitude) de votre observation "); |
ToolTip tip2 = new ToolTip(); |
tip2.setHtml("Via une carte, obtenez les coordonnées (latitude/longitude) de votre observation "); |
tip2.applyTo(basculerverscarto.getElement()); |
//Sur une meme ligne, ajout de plusieurs champs |
htmlCommunePanel = new MultiFieldPanel(); |
htmlCommunePanel = new MultiFieldPanel(); |
int largeurCommune = Window.getClientWidth()/4; |
htmlCommunePanel.addToRow(commune, largeurCommune); |
htmlCommunePanel.addToRow(basculerverscarto, 160); |
htmlCommunePanel.addToRow(basculerverscarto, 160); |
htmlCommunePanel.setBorder(false); |
htmlCommunePanel.setId("x-commune-panel"); |
htmlCommunePanel.setId("x-commune-panel"); |
panneauPremierColonne.add(htmlCommunePanel); |
356,53 → 356,53 |
@Override |
public void onValidationSaisie() { |
validerSaisie(Champs.STATION); |
} |
} |
}; |
panneauPremierColonne.add(station, new AnchorLayoutData("95%")); |
panneauPremierColonne.add(station, new AnchorLayoutData("95%")); |
latitude = new TextField("Lat", "lat"); |
latitude.setGrowMax(70); |
latitude.setAllowBlank(true); |
longitude = new TextField("Lon", "lon"); |
longitude.setGrowMax(70); |
longitude.setAllowBlank(true); |
altitude = new TextField("Alt (mètres)", "alt"); |
altitude.setGrowMax(70); |
altitude.setAllowBlank(true); |
lienSelectionCommune = new Label(""); |
lienSelectionCommune.setId("conteneur_selection_commune"); |
lienSelectionCommune.setStyleName("conteneur_selection_commune"); |
lienSelectionCommune.addStyleName("lien_actif"); |
// Panneau de type plusieurs champs de formulaire sur une meme ligne, où seront renseignés Lat/Lon |
coordPanel = new MultiFieldPanel(); |
coordPanel = new MultiFieldPanel(); |
coordPanel.setPaddings(0, 0, 0, 10); |
coordPanel.setVisible(false); |
final double largeur ; |
largeur = 120; |
coordPanel.addToRow(latitude, new ColumnLayoutData(largeur)); |
coordPanel.addToRow(longitude, new ColumnLayoutData(largeur)); |
coordPanel.addToRow(lienSelectionCommune, new ColumnLayoutData(largeur)); |
coordPanel.addToRow(latitude, new ColumnLayoutData(largeur)); |
coordPanel.addToRow(longitude, new ColumnLayoutData(largeur)); |
coordPanel.addToRow(lienSelectionCommune, new ColumnLayoutData(largeur)); |
lienSelectionCommune.addClass("lien_decale"); |
coordPanel.setBorder(false); |
coordPanel.addToRow(altitude, new ColumnLayoutData(largeur)); |
//création du champs coordonnées |
//création du champs coordonnées |
referentielGeo = Configuration.getReferentielGeo(); |
coordonnees = new TextField("Coordonnées", "", 0); |
coordonnees.setMaxLength(0); |
coordonnees.setReadOnly(true); |
coordonnees.setCls("fieldname"); |
//création du lien "saisie X/Y" dans le formulaire |
afficherFormulaireLatLon = new HTML("<span style=\"padding-left:30px;\" class=\"conteneur_lien_afficher_lat_lon\">" + |
"<a title=\"Lat / Lon sont les latitudes / longitudes, à remplir en degrés décimaux\" class=\"lien_actif\" id=\"lien_coord\" href=\"#\" tabindex=\"6\">Saisie Lat/Lon ("+referentielGeo+")</a>" + |
409,28 → 409,28 |
"<span><span style=\"padding-left:20px\" class=\"conteneur_lien_localiser_lat_lon\">"+ |
"<a title=\"Cliquez pour obtenir les coordonnées de votre observation à partir de la carte\" class=\"lien_actif\" id=\"lien_carto_coord\" href=\"#\" tabindex=\"7\">Localiser sur la carte</a>"+ |
"</span>"); |
//ajout d'un listener sur le lien "saisie X/Y" |
//ajout d'un listener sur le lien "saisie X/Y" |
coordPanel.addListener(new PanelListenerAdapter() { |
@Override |
public void onAfterLayout(Container c) { |
surPremierAffichageCoordPanel(largeur); |
} |
}); |
//Sur une meme ligne, ajout de plusieurs champs |
final MultiFieldPanel htmlPanel = new MultiFieldPanel(); |
htmlPanel.addToRow(coordonnees, 100); |
htmlPanel.addToRow(afficherFormulaireLatLon, new ColumnLayoutData(0.9)); |
final MultiFieldPanel htmlPanel = new MultiFieldPanel(); |
htmlPanel.addToRow(coordonnees, 100); |
htmlPanel.addToRow(afficherFormulaireLatLon, new ColumnLayoutData(0.9)); |
htmlPanel.setBorder(false); |
htmlPanel.setId("x-coord-panel"); |
panneauPremierColonne.add(htmlPanel); |
panneauPremierColonne.add(coordPanel); |
date = new DateField("Date", "date", 250); |
date = new DateField("Date", "date", 250); |
date.setAllowBlank(true); |
formatDate = "d/m/Y"; |
date.setFormat(formatDate) ; |
437,11 → 437,11 |
date.setTitle("Date de l'observation au format jj/mm/aaaa"); |
date.setMaxValue(new Date()); |
//date.setTabIndex(5); |
panneauPremierColonne.add(date, new AnchorLayoutData("55%")); |
final String champsListeTpl = "<div class=\"x-combo-list-item search-item-tpl\" title=\"{label}\">{label}</div>"; |
panneauPremierColonne.add(date, new AnchorLayoutData("55%")); |
final String champsListeTpl = "<div class=\"x-combo-list-item search-item-tpl\" title=\"{label}\">{label}</div>"; |
// Selection d'un référentiel par défaut (le premier spécifié dans la config) |
referentielTaxo = Configuration.getReferentielsDispos().get(0).getCode(); |
selecteurReferentielTaxo = new ComboBox(); |
455,27 → 455,27 |
selecteurReferentielTaxo.setHideTrigger(false); |
selecteurReferentielTaxo.setForceSelection(true); |
selecteurReferentielTaxo.setTpl(champsListeTpl); |
espece=new ComboBox("Espèce","nom"); |
final String resultTplEspece = "<div class=\"search-item-espece {indicateurNomRetenu}\">{nom}</div>"; |
espece=new ComboBox("Espèce","nom"); |
final String resultTplEspece = "<div class=\"search-item-espece {indicateurNomRetenu}\">{nom}</div>"; |
espece.setTpl(resultTplEspece); |
espece.setMode(ComboBox.REMOTE); |
espece.setItemSelector("div.search-item-espece"); |
espece.setTypeAhead(true); |
espece.setLoadingText("Recherche..."); |
espece.setTypeAhead(true); |
espece.setLoadingText("Recherche..."); |
espece.setHideTrigger(true); |
Panel panelSeparationPp = new Panel(); |
panelSeparationPp.setHeight(15); |
panelSeparationPp.setBorder(false); |
panneauPremierColonne.add(panelSeparationPp); |
panneauPremierColonne.add(selecteurReferentielTaxo, new AnchorLayoutData("85%")); |
panneauPremierColonne.add(espece, new AnchorLayoutData("95%")); |
panneauPremierColonne.add(selecteurReferentielTaxo, new AnchorLayoutData("85%")); |
panneauPremierColonne.add(espece, new AnchorLayoutData("95%")); |
selecteurAbondance = new ComboBox(); |
selecteurAbondance.setCls("champ-separation"); |
selecteurAbondance.setLabel("Abondance"); |
486,13 → 486,13 |
selecteurAbondance.setHideTrigger(false); |
selecteurAbondance.setForceSelection(false); |
selecteurAbondance.setTpl(champsListeTpl); |
panneauPremierColonne.add(selecteurAbondance, new AnchorLayoutData("95%")); |
panneauPremierColonne.add(selecteurAbondance, new AnchorLayoutData("95%")); |
lieudit = new AutoCompletionRefComboBox("Lieu-dit", "lieudit",observationMediateur,TypesReferentiels.REFERENTIEL_LIEU_DIT) { |
@Override |
public void onModificationValeur() { |
lieuDitModifie = true; |
lieuDitModifie = true; |
} |
@Override |
500,8 → 500,8 |
validerSaisie(Champs.LIEUDIT); |
} |
}; |
panneauSecondeColonne.add(lieudit, new AnchorLayoutData("95%")); |
panneauSecondeColonne.add(lieudit, new AnchorLayoutData("95%")); |
milieu = new AutoCompletionRefComboBox("Milieu","milieu",observationMediateur,TypesReferentiels.REFERENTIEL_MILIEU) { |
@Override |
513,22 → 513,22 |
public void onValidationSaisie() { |
validerSaisie(Champs.MILIEU); |
} |
}; |
panneauSecondeColonne.add(milieu, new AnchorLayoutData("95%")); |
comment = new TextArea("Notes", "comment"); |
comment = new TextArea("Notes", "comment"); |
comment.setAllowBlank(true); |
comment.setHeight(50); |
panneauSecondeColonne.add(comment, new AnchorLayoutData("95%") ); |
Panel panelSeparationPs = new Panel(); |
panelSeparationPs.setHeight(39); |
panelSeparationPs.setBorder(false); |
panneauSecondeColonne.add(panelSeparationPs); |
selecteurCertitude = new ComboBox(); |
selecteurCertitude.setLabel("Identification"); |
selecteurCertitude.setStore(Ontologies.getValeursCertitude()); |
538,8 → 538,8 |
selecteurCertitude.setHideTrigger(false); |
selecteurCertitude.setForceSelection(false); |
selecteurCertitude.setTpl(champsListeTpl); |
panneauSecondeColonne.add(selecteurCertitude, new AnchorLayoutData("95%")); |
panneauSecondeColonne.add(selecteurCertitude, new AnchorLayoutData("95%")); |
selecteurStadePheno = new ComboBox(); |
selecteurStadePheno.setLabel("Phénologie"); |
selecteurStadePheno.setStore(Ontologies.getValeursPhenologie()); |
549,8 → 549,8 |
selecteurStadePheno.setHideTrigger(false); |
selecteurStadePheno.setForceSelection(false); |
selecteurStadePheno.setTpl(champsListeTpl); |
panneauSecondeColonne.add(selecteurStadePheno, new AnchorLayoutData("95%")); |
panneauSecondeColonne.add(selecteurStadePheno, new AnchorLayoutData("95%")); |
if (Window.getClientWidth() > Window.getClientHeight() || Window.getClientWidth() < 800) { |
panneauIntermediaire.add(panneauPremierColonne, new ColumnLayoutData(.5)); |
panneauIntermediaire.add(panneauSecondeColonne, new ColumnLayoutData(.5)); |
557,11 → 557,11 |
} |
else { |
panneauIntermediaire.add(panneauPremierColonne); |
panneauIntermediaire.add(panneauSecondeColonne); |
panneauIntermediaire.add(panneauSecondeColonne); |
} |
panneauFormulaire.add(panneauIntermediaire); |
if (Ext.isIE()) { |
panneauPremierColonne.setButtonAlign(Position.RIGHT); |
panneauPremierColonne.addButton(boutonOK); |
570,34 → 570,34 |
panneauSecondeColonne.setButtonAlign(Position.LEFT); |
panneauPremierColonne.addButton(boutonAnnuler); |
} |
else { |
else { |
panneauFormulaire.addButton(boutonOK); |
panneauFormulaire.addButton(boutonModifier); |
panneauFormulaire.addButton(boutonSupprimer); |
panneauFormulaire.addButton(boutonAnnuler); |
panneauFormulaire.addButton(boutonAnnuler); |
} |
this.add(panneauFormulaire) ; |
this.setAutoScroll(true); |
panneauFormulaire.addListener(new PanelListenerAdapter() { |
@Override |
public void onResize(BoxComponent component, int adjWidth, int adjHeight, int rawWidth, int rawHeight) { |
panneauIntermediaire.setWidth(rawWidth); |
panneauIntermediaire.setHeight(rawHeight); |
panneauPremierColonne.doLayout(); |
panneauSecondeColonne.doLayout(); |
htmlCommunePanel.doLayout(); |
htmlPanel.doLayout(); |
doLayout(); |
} |
}); |
lienAfficherChampsEtendus = new HTML("Afficher les champs étendus"); |
lienAfficherChampsEtendus.setStyleName("img-curseur-depl"); |
lienAfficherChampsEtendus.setStyleName("lienAfficherChampsEtendus"); |
613,7 → 613,7 |
conteneurChampEtenduDroite.hide(); |
} |
lienAfficherChampsEtendus.setText("Afficher les champs étendus"); |
} else { |
afficherChampsEtendus = true; |
if(conteneurChampEtenduGauche != null && conteneurChampEtenduDroite != null) { |
639,14 → 639,14 |
ajouterToolTipsBoutons(); |
saisieTabindex(); |
} |
private void ajouterToolTipsBoutons() { |
boutonOK.setTitle("Crée une nouvelle observation à partir des champs saisis dans le formulaire"); |
boutonModifier.setTitle("Modifie la ou les observations sélectionnées"); |
boutonSupprimer.setTitle("Supprime la ou les observations sélectionnées"); |
boutonAnnuler.setTitle("Vide tous les champs du formulaire"); |
boutonAnnuler.setTitle("Vide tous les champs du formulaire"); |
} |
private void surPremierAffichageCoordPanel(final double largeur) { |
ExtElement lienCoord = Ext.get("lien_coord"); |
lienCoord.removeAllListeners(); |
653,17 → 653,17 |
lienCoord.addListener("click", new EventCallback() { |
@Override |
public void execute(EventObject e) { |
coordPanel.setVisible(!coordPanel.isVisible()); |
if(Ext.isIE()) { |
latitude.focus(); |
} |
CarnetEnLigneMediateur.fireResize(); |
} |
}) ; |
ExtElement lienCartoCoord = Ext.get("lien_carto_coord"); |
lienCartoCoord.removeAllListeners(); |
lienCartoCoord.addListener("click", new EventCallback() { |
672,7 → 672,7 |
obtenirInformationCoord(); |
} |
}) ; |
ExtElement lienCarto = Ext.get("lien_carto"); |
lienCarto.removeAllListeners(); |
lienCarto.addListener("click", new EventCallback() { |
679,32 → 679,32 |
@Override |
public void execute(EventObject e) { |
if(commune.getValue() != null && !commune.getValue().equals("") && !getDepartement().equals("")) { |
obtenirInformationCommune(); |
longlatAjoutee = true; |
} else { |
Window.alert("Veuillez renseigner une commune et un numéro de département sous la forme : Commune (departement)"); |
} |
} |
}); |
if(!Ext.isIE() && Window.getClientWidth() < 1200) { |
int largeurN = (int)largeur; |
latitude.setWidth(largeurN+"px"); |
longitude.setWidth(largeurN+"px"); |
lienSelectionCommune.setWidth(largeurN+"px"); |
lienSelectionCommune.setWidth(largeurN+"px"); |
} |
} |
private void ajouterListeners() |
{ |
// Listener completion communne |
{ |
// Listener completion communne |
final Rafraichissable r = this; |
ListenerConfig listenerConfigCommune=new ListenerConfig(); |
listenerConfigCommune.setDelay(200); |
listenerConfigCommune.setStopPropagation(false); |
717,17 → 717,17 |
dateModifiee = true; |
} |
}); |
ListenerConfig listenerConfigAutocompletion=new ListenerConfig(); |
listenerConfigAutocompletion.setDelay(200); |
listenerConfigAutocompletion.setStopPropagation(false); |
listenerConfigAutocompletion.setStopEvent(false); |
ListenerConfig listenerConfigEspece=new ListenerConfig(); |
listenerConfigEspece.setDelay(10); |
listenerConfigEspece.setStopPropagation(false); |
listenerConfigEspece.setStopEvent(false); |
tCoord = new Timer() { |
@Override |
739,9 → 739,9 |
observationMediateur.obtenirInformationCoord(r,LatLng.newInstance(coord[0], coord[1])); |
} |
} |
}; |
ajouterListenerChampEvenementsClavier(commune, listenerConfigCommune); |
ajouterListenerChampEvenementsClavier(date); |
ajouterListenerChampEvenementsClavier(selecteurReferentielTaxo); |
750,118 → 750,118 |
ajouterListenerChampEvenementsClavier(latitude); |
ajouterListenerChampEvenementsClavier(longitude); |
ajouterListenerChampEvenementsClavier(altitude); |
ajouterListenerChampEvenementsClavier(selecteurAbondance); |
ajouterListenerChampEvenementsClavier(selecteurCertitude); |
ajouterListenerChampEvenementsClavier(selecteurAbondance); |
ajouterListenerChampEvenementsClavier(selecteurCertitude); |
ajouterListenerChampEvenementsClavier(selecteurStadePheno); |
ajouterListenerChampsCombobox(); |
boutonOK.addListener(new ButtonListenerAdapter() { |
@Override |
public void onClick(Button button, EventObject e) { |
public void onClick(Button button, EventObject e) { |
ajouterObservation(); |
} |
} |
}); |
boutonModifier.addListener(new ButtonListenerAdapter() { |
@Override |
public void onClick(Button button, EventObject e) { |
public void onClick(Button button, EventObject e) { |
if(selectionMultiple) { |
modifierObservationEnMasse(null); |
} else { |
modifierObservation() ; |
} |
} |
} |
}); |
boutonSupprimer.addListener(new ButtonListenerAdapter() { |
@Override |
public void onClick(Button button, EventObject e) { |
public void onClick(Button button, EventObject e) { |
if(!selectionMultiple) { |
supprimerObservation(); |
} else { |
observationMediateur.supprimerObservations(); |
} |
} |
} |
}); |
boutonAnnuler.addListener(new ButtonListenerAdapter() { |
boutonAnnuler.addListener(new ButtonListenerAdapter() { |
@Override |
public void onClick(Button button, EventObject e) { |
public void onClick(Button button, EventObject e) { |
setSelectionMultiple(false); |
raz(); |
} |
} |
}); |
this.addListener(new ContainerListenerAdapter() { |
@Override |
public void onAfterLayout(Container self) { |
commune.focus(); |
} |
}); |
}); |
} |
private void ajouterListenerChampsCombobox() { |
commune.addListener(new ComboBoxListenerAdapter() { |
commune.addListener(new ComboBoxListenerAdapter() { |
@Override |
public void onSelect(ComboBox comboBox, Record record, int index) { |
public void onSelect(ComboBox comboBox, Record record, int index) { |
commune.setValue(record.getAsString("commune")); |
departement=record.getAsString("departement"); |
codeInseeCommune=record.getAsString("codeInsee"); |
selectionCommune=true; |
commune.collapse(); |
} |
} |
@Override |
public void onExpand(ComboBox comboBox) { |
comboBox.focus(); |
} |
}); |
selecteurReferentielTaxo.addListener(new ComboBoxListenerAdapter() { |
}); |
selecteurReferentielTaxo.addListener(new ComboBoxListenerAdapter() { |
@Override |
public void onSelect(ComboBox comboBox, Record record, int index) { |
referentielTaxo = record.getAsString("valeur"); |
observationMediateur.setRefTaxSelectionne(index); |
referentielTaxoModifie = true; |
} |
}); |
espece.addListener(new ComboBoxListenerAdapter() { |
} |
}); |
espece.addListener(new ComboBoxListenerAdapter() { |
@Override |
public void onSelect(ComboBox comboBox, Record record, int index) { |
public void onSelect(ComboBox comboBox, Record record, int index) { |
espece.setValue(record.getAsString("nom")); |
numeroNom=record.getAsString("numeroNom"); |
selectionEspece=true; |
observationMediateur.obtenirImageInformationExternes(referentielTaxo, numeroNom); |
} |
}); |
selecteurAbondance.addListener(new ComboBoxListenerAdapter() { |
} |
}); |
selecteurAbondance.addListener(new ComboBoxListenerAdapter() { |
@Override |
public void onSelect(ComboBox comboBox, Record record, int index) { |
public void onSelect(ComboBox comboBox, Record record, int index) { |
selectionAbondance=true; |
abondanceModifiee = true; |
} |
}); |
selecteurCertitude.addListener(new ComboBoxListenerAdapter() { |
selecteurCertitude.addListener(new ComboBoxListenerAdapter() { |
@Override |
public void onSelect(ComboBox comboBox, Record record, int index) { |
public void onSelect(ComboBox comboBox, Record record, int index) { |
selectionCertitude=true; |
certitudeModifiee = true; |
} |
}); |
selecteurStadePheno.addListener(new ComboBoxListenerAdapter() { |
}); |
selecteurStadePheno.addListener(new ComboBoxListenerAdapter() { |
@Override |
public void onSelect(ComboBox comboBox, Record record, int index) { |
public void onSelect(ComboBox comboBox, Record record, int index) { |
selectionPhenologie=true; |
phenologieModifiee = true; |
} |
}); |
}); |
} |
private void ajouterListenerChampEvenementsClavier(final TextField champ) { |
champ.addKeyPressListener(new EventCallback() { |
@Override |
870,8 → 870,8 |
} |
}); |
} |
private void ajouterListenerChampEvenementsClavier(final TextField champ, final ListenerConfig config) { |
champ.addKeyPressListener(new EventCallback() { |
@Override |
880,9 → 880,9 |
} |
}, config); |
} |
private void surEvenementClavier(EventObject e, TextField champ) { |
switch(e.getKey()) { |
switch(e.getKey()) { |
case KEY_ALT: |
case KEY_CTRL: |
case KEY_DOWN: |
897,55 → 897,55 |
case KEY_TAB: |
case KEY_UP: |
break; |
case KEY_ENTER: |
surEvenementClavierToucheEntree(champ); |
break; |
default: |
gererEvenementClavierDefaut(champ); |
break; |
} |
} |
private void surEvenementClavierToucheEntree(TextField champ) { |
//TODO: faire un switch ou une enum |
if(champ.equals(selecteurStadePheno)) { |
if(!selectionPhenologie) { |
validerSaisie(Champs.PHENOLOGIE); |
if(!selectionPhenologie) { |
validerSaisie(Champs.PHENOLOGIE); |
} else { |
selectionPhenologie = false; |
} |
} |
if(champ.equals(selecteurCertitude)) { |
if(!selectionCertitude) { |
validerSaisie(Champs.CERTITUDE); |
if(!selectionCertitude) { |
validerSaisie(Champs.CERTITUDE); |
} else { |
selectionCertitude = false; |
} |
} |
if(champ.equals(selecteurAbondance)) { |
if(!selectionAbondance) { |
validerSaisie(Champs.ABONDANCE); |
if(!selectionAbondance) { |
validerSaisie(Champs.ABONDANCE); |
} else { |
selectionAbondance = false; |
} |
} |
if(champ.equals(longitude)) { |
validerSaisie(Champs.LONGITUDE); |
} |
if(champ.equals(latitude)) { |
validerSaisie(Champs.LATITUDE); |
if(champ.equals(latitude)) { |
validerSaisie(Champs.LATITUDE); |
} |
if(champ.equals(altitude)) { |
validerSaisie(Champs.ALTITUDE); |
if(champ.equals(altitude)) { |
validerSaisie(Champs.ALTITUDE); |
} |
if(champ.equals(espece)) { |
if(selectionEspece) { |
especeModifiee = true; |
952,19 → 952,19 |
selectionEspece=false; |
} |
else { |
validerSaisie(Champs.ESPECE); |
validerSaisie(Champs.ESPECE); |
} |
} |
if(champ.equals(selecteurReferentielTaxo)) { |
validerSaisie(Champs.REFERENTIELTAXO); |
validerSaisie(Champs.REFERENTIELTAXO); |
} |
if(champ.equals(date)) { |
validerSaisie(Champs.DATE); |
validerSaisie(Champs.DATE); |
} |
if(champ.equals(commune)) { |
if(champ.equals(commune)) { |
if(champ.equals(commune)) { |
if (selectionCommune) { |
communeModifiee= true; |
971,12 → 971,12 |
selectionCommune=false; |
} |
else { |
validerSaisie(Champs.COMMUNE); |
validerSaisie(Champs.COMMUNE); |
} |
} |
} |
} |
private void gererEvenementClavierDefaut(TextField champ) { |
//TODO: faire un switch ou une enum |
if(champ.equals(selecteurStadePheno)) { |
985,7 → 985,7 |
phenologieModifiee = true; |
selectionPhenologie = false; |
} |
if(champ.equals(selecteurCertitude)) { |
selecteurCertitude.setRawValue(selecteurCertitude.getRawValue()); |
selecteurCertitude.setValue(selecteurCertitude.getRawValue()); |
992,7 → 992,7 |
certitudeModifiee = true; |
selectionCertitude = false; |
} |
if(champ.equals(selecteurAbondance)) { |
selecteurAbondance.setRawValue(selecteurAbondance.getRawValue()); |
selecteurAbondance.setValue(selecteurAbondance.getRawValue()); |
999,53 → 999,53 |
abondanceModifiee = true; |
selectionAbondance = false; |
} |
if(champ.equals(longitude)) { |
longModifiee = true; |
tCoord.cancel(); |
tCoord.schedule(250); |
} |
if(champ.equals(latitude)) { |
if(champ.equals(latitude)) { |
latModifiee = true; |
tCoord.cancel(); |
tCoord.schedule(250); |
} |
if(champ.equals(altitude)) { |
altModifiee = true; |
if(champ.equals(altitude)) { |
altModifiee = true; |
} |
if(champ.equals(comment)) { |
commModifie = true; |
} |
if(champ.equals(espece)) { |
numeroNom=""; |
obtenirListeReferentielNom(); |
especeModifiee = true; |
} |
if(champ.equals(selecteurReferentielTaxo)) { |
referentielTaxoModifie = true; |
} |
if(champ.equals(date)) { |
dateModifiee = true; |
} |
if(champ.equals(commune)) { |
departement=""; |
commune.collapse(); |
commune.collapse(); |
obtenirListeReferentielCommune(); |
communeModifiee= true; |
communeModifiee= true; |
} |
} |
/** |
* Validation de la saisie |
* Validation de la saisie |
*/ |
private void validerSaisie(Champs champs) { |
if(!selectionMultiple) { |
ajouterObservation(); |
1054,7 → 1054,7 |
modifierObservationEnMasse(champs); |
} |
} |
/** |
* Desactive visuellement ce panneau |
*/ |
1062,7 → 1062,7 |
{ |
this.setDisabled(true) ; |
} |
/** |
* Active visuellement ce panneau |
*/ |
1073,7 → 1073,7 |
@Override |
public void rafraichir(Object nouvelleDonnees, boolean repandreRaffraichissement) { |
// si l'on a reçu une liste du referentiel commune (completion referentiel commune) |
if(nouvelleDonnees instanceof ListeReferentielCommune) |
{ |
1080,36 → 1080,36 |
ListeReferentielCommune data = (ListeReferentielCommune) nouvelleDonnees ; |
Object[][] communeData = new Object[data.size()][3]; |
int i = 0 ; |
// on la parse et on récupère les informations quiç nous interessent |
for (Iterator it = data.keySet().iterator(); it.hasNext();) |
{ |
for (Iterator it = data.keySet().iterator(); it.hasNext();) |
{ |
ReferentielCommune ref=data.get(it.next()); |
communeData[i][0]= ref.getCommune(); |
communeData[i][1]= ref.getDepartement(); |
communeData[i][2]= ref.getCodeInsee(); |
i++ ; |
} |
// creation du store |
FieldDef defCommune = new StringFieldDef("commune"); |
FieldDef defDepartement = new StringFieldDef("departement"); |
FieldDef defCodeInsee = new StringFieldDef("codeInsee"); |
FieldDef[] defTab = { defCommune, defDepartement, defCodeInsee}; |
RecordDef rd = new RecordDef(defTab); |
final MemoryProxy dataProxy = new MemoryProxy(communeData); |
final ArrayReader reader = new ArrayReader(rd); |
Store store=new Store(dataProxy,reader); |
final ArrayReader reader = new ArrayReader(rd); |
Store store=new Store(dataProxy,reader); |
commune.setStore(store); |
store.load(); |
} |
// si l'on a reçu une liste du référentiel nom (complétion referentiel nom) |
if(nouvelleDonnees instanceof ListeReferentielNom) |
{ |
1118,11 → 1118,11 |
int i = 0 ; |
// on la parse et on récupère les informations qui nous interessent |
for (Iterator it = data.keySet().iterator(); it.hasNext();) |
for (Iterator it = data.keySet().iterator(); it.hasNext();) |
{ |
ReferentielNom ref=data.get(it.next()); |
nomData[i][0]= ref.getNom(); |
nomData[i][1]= ref.getNumeroNom(); |
if (ref.getStatut().equals("3")) { |
1130,7 → 1130,7 |
} |
else { |
nomData[i][2]=""; |
} |
} |
i++ ; |
} |
1137,21 → 1137,21 |
FieldDef defNom = new StringFieldDef("nom"); |
FieldDef defNumeroNom = new StringFieldDef("numeroNom"); |
FieldDef indicateurNomRetenu = new StringFieldDef("indicateurNomRetenu"); |
FieldDef[] defTab = { defNom, defNumeroNom, indicateurNomRetenu}; |
RecordDef rd = new RecordDef(defTab); |
final MemoryProxy dataProxy = new MemoryProxy(nomData); |
final ArrayReader reader = new ArrayReader(rd); |
Store store=new Store(dataProxy,reader); |
final ArrayReader reader = new ArrayReader(rd); |
Store store=new Store(dataProxy,reader); |
espece.setStore(store); |
store.load() ; |
} |
// On recoit une observation dont on veut afficher le detail |
// On recoit une observation dont on veut afficher le detail |
if(nouvelleDonnees instanceof Observation) |
{ |
Observation obs = (Observation)nouvelleDonnees ; |
1158,26 → 1158,26 |
setSelectionMultiple(false); |
afficherDetailsObservation(obs) ; |
} |
if(nouvelleDonnees instanceof ListeObservation) { |
ListeObservation listeObs = (ListeObservation)nouvelleDonnees; |
setSelectionMultiple(true); |
calculerAfficherDifferences(listeObs); |
} |
if(nouvelleDonnees instanceof String) |
{ |
String str = (String)nouvelleDonnees ; |
observationMediateur.obtenirNombreObservation() ; |
} |
if(nouvelleDonnees instanceof String[]) { |
String[] anumNom = (String[])nouvelleDonnees ; |
numeroNom = anumNom[1]; |
espece.setValue(anumNom[0]); |
} |
if(nouvelleDonnees instanceof EntiteGeographiqueObservation) |
{ |
EntiteGeographiqueObservation infosComm = (EntiteGeographiqueObservation)nouvelleDonnees ; |
1188,26 → 1188,26 |
} |
} |
} |
private void afficherIndicationCommune( |
final EntiteGeographiqueObservation infosCom) { |
String nCommune = ""; |
if(infosCom != null && !infosCom.getZoneGeo().trim().equals("")){ |
nCommune += infosCom.getZoneGeo(); |
if(!infosCom.getIdZoneGeo().trim().equals("")) |
nCommune += " ("+Util.convertirChaineZoneGeoVersDepartement(infosCom.getIdZoneGeo())+")"; |
lienSelectionCommune.setHtml("<a id=\"lien_selection_commune\" tabindex=\"9\">"+nCommune+"</a>"); |
lienSelectionCommune.setStyleName("img-curseur-depl"); |
Ext.get("lien_selection_commune").addListener("click",new EventCallback() { |
@Override |
public void execute(EventObject e) { |
rafraichirCommune(infosCom); |
} |
} |
}); |
Ext.get("lien_selection_commune").addListener("keypress",new EventCallback() { |
@Override |
public void execute(EventObject e) { |
1214,23 → 1214,23 |
if(e.getCharCode() == KEY_ENTER) { |
rafraichirCommune(infosCom); |
} |
} |
} |
}); |
Ext.get("lien_selection_commune").addListener("focus",new EventCallback() { |
@Override |
public void execute(EventObject e) { |
Ext.get("lien_selection_commune").toggleClass("lien_sel"); |
} |
} |
}); |
Ext.get("lien_selection_commune").addListener("blur",new EventCallback() { |
@Override |
public void execute(EventObject e) { |
Ext.get("lien_selection_commune").toggleClass("lien_sel"); |
} |
} |
}); |
} else { |
if(rechercheCommuneEnCours) { |
lienSelectionCommune.setHtml("<span id=\"aucune_selection_commune\"> Erreur de localisation </span>"); |
1242,14 → 1242,14 |
Ext.get(lienSelectionCommune.getElement()).unmask(); |
rechercheCommuneEnCours = false; |
} |
private void rafraichirCommune(EntiteGeographiqueObservation infosCom) { |
String nCommune = ""; |
if(infosCom.getZoneGeo() != null && !infosCom.getZoneGeo().equals("")) { |
nCommune += infosCom.getZoneGeo(); |
} |
if(infosCom.getIdZoneGeo() != null && !infosCom.getIdZoneGeo().equals("")) { |
String codeGeoFormate = Util.convertirChaineZoneGeoVersDepartement(infosCom.getIdZoneGeo()); |
nCommune += " ("+codeGeoFormate+")"; |
1263,7 → 1263,7 |
// on ne remplace la commune que si le champ était vide |
if(commune.getRawValue() == null || commune.getRawValue().equals("")) { |
rafraichirCommune(infosCom); |
} |
} |
if(infosCom.getLat() != null && !infosCom.getLat().equals("")) { |
latitude.setValue(infosCom.getLat()); |
1272,34 → 1272,34 |
if(infosCom.getLon() != null && !infosCom.getLon().equals("")) { |
longitude.setValue(infosCom.getLon()); |
} |
latModifiee = true; |
longModifiee = true; |
coordPanel.setVisible(true); |
} |
public void obtenirListeReferentielCommune() { |
String com=commune.getText(); |
com=com.replaceAll("%",""); |
observationMediateur.obtenirListeReferentielCommune(this,com); |
} |
public void obtenirListeReferentielNom() { |
public void obtenirListeReferentielNom() { |
String esp=espece.getText().replaceAll(" ","/*"); |
esp=esp.replaceAll("%",""); |
String referentiel = this.referentielTaxo; |
observationMediateur.obtenirListeReferentielNom(this,referentiel ,esp); |
observationMediateur.obtenirListeReferentielNom(this,referentiel ,esp); |
} |
protected void obtenirReferentielStation() { |
protected void obtenirReferentielStation() { |
observationMediateur.obtenirListeReferentielPerso(this,TypesReferentiels.REFERENTIEL_STATION,station.getText()); |
} |
protected void obtenirListeReferentielMilieu() { |
observationMediateur.obtenirListeReferentielPerso(this,TypesReferentiels.REFERENTIEL_MILIEU,milieu.getText()); |
} |
1307,15 → 1307,15 |
protected void obtenirReferentielLieuDit() { |
observationMediateur.obtenirListeReferentielPerso(this,TypesReferentiels.REFERENTIEL_LIEU_DIT,lieudit.getText()); |
} |
public void ajouterObservation() { |
if(date.getRawValue() != null && !date.getRawValue().equals("") && !Util.verifierDateFormatCel(date.getRawValue())) { |
Window.alert("Attention la date saisie est invalide, la date doit être au format jj/mm/aaaa"); |
date.setInvalidText("Date invalide"); |
return; |
} |
if(departement != null) { |
if(departement.equals("000null") || departement.equals("")) { |
String[] depCom = commune.getText().split(" "); |
1325,7 → 1325,7 |
dep = dep.trim(); |
dep = dep.replace('\\',' '); |
dep = dep.trim(); |
try |
{ |
int nDep = Integer.parseInt(dep); |
1343,8 → 1343,8 |
String dateObs = Util.remplacerSeparateursDateFormatCel(date.getRawValue()); |
Observation obs=new Observation(espece.getText(),numeroNom,commune.getText(),departement,lieudit.getText(),station.getText(),milieu.getText(), comment.getText(),dateObs); |
Observation obs=new Observation(espece.getText(),numeroNom,commune.getText(),departement,lieudit.getText(),station.getText(),milieu.getText(), comment.getText(),dateObs); |
String[] coords = getValeurCoordonnees(); |
obs.setLatitude(coords[0]); |
obs.setLongitude(coords[1]); |
1353,25 → 1353,25 |
obs.setAbondance(getAbondance()); |
obs.setCertitude(getCertitude()); |
obs.setPhenologie(getPhenologie()); |
obs.setReferentielTaxo(Ontologies.getInfosReferentielNomParCode(referentielTaxo).getCodeVersionComplet()); |
obs.setChampsEtendus(getValeursChampsEtendus()); |
observationMediateur.ajouterObservation(obs); |
} |
private void modifierObservation() { |
if(!Window.confirm("Êtes-vous sur de vouloir modifier l'observation sélectionnée ?")) { |
return; |
} |
if(date.getRawValue() != null && !date.getRawValue().equals("") && !Util.verifierDateFormatCel(date.getRawValue())) { |
Window.alert("Attention la date saisie est invalide, la date doit être au format jj/mm/aaaa"); |
date.setInvalidText("Date invalide"); |
return; |
} |
if(departement.equals("000null") || departement.equals("")) { |
String[] depCom = commune.getText().split(" "); |
if(depCom.length > 1) { |
1380,7 → 1380,7 |
dep = dep.trim(); |
dep = dep.replace('\\',' '); |
dep = dep.trim(); |
try |
{ |
int nDep = Integer.parseInt(dep); |
1394,29 → 1394,29 |
} |
} |
} |
String dateObs = Util.remplacerSeparateursDateFormatCel(date.getRawValue()); |
Observation obs=new Observation(espece.getText(),numeroNom,commune.getText(),departement,lieudit.getText(),station.getText(),milieu.getText(), comment.getText(),dateObs); |
obs.setNumeroOrdre(numeroOrdre); |
String[] coords = getValeurCoordonnees(); |
obs.setLatitude(coords[0]); |
obs.setLongitude(coords[1]); |
obs.setAltitude(altitude.getText()); |
obs.setAbondance(getAbondance()); |
obs.setCertitude(getCertitude()); |
obs.setPhenologie(getPhenologie()); |
obs.setReferentielTaxo(getReferentielTaxo()); |
obs.setChampsEtendus(getValeursChampsEtendus()); |
observationMediateur.modifierObservation(obs); |
} |
private void modifierObservationEnMasse(Champs champModifie) { |
//TODO: factoriser |
String communeM = null; |
String departementM = null; |
1426,7 → 1426,7 |
String milieuM = null; |
String dateM = null; |
String especeM = null; |
String commM = null; |
String commM = null; |
String latM = null; |
String longM = null; |
String altM = null; |
1434,12 → 1434,12 |
String certitudeM = null; |
String referentielTaxoM = null; |
String phenologieM = null; |
String champs = modeleMessageModif; |
if(communeModifiee && ! commune.getRawValue().equals(VALEURS_MULTIPLES)) { |
if(communeModifiee) { |
communeM = commune.getText(); |
if(departement.equals("000null") || departement.equals("")) { |
String[] depCom = commune.getText().split(" "); |
if(depCom.length > 1) { |
1448,111 → 1448,113 |
dep = dep.trim(); |
dep = dep.replace('\\',' '); |
dep = dep.trim(); |
try { |
try |
{ |
int nDep = Integer.parseInt(dep); |
if(nDep > 0 && nDep < 110) { |
departement = dep ; |
} |
} |
catch(NumberFormatException e) { |
catch(NumberFormatException e) |
{ |
departement = "" ; |
} |
} |
} |
departementM = departement; |
} |
else { |
} else { |
champs = champs.replaceAll("commune", ""); |
} |
if(lieuDitModifie && ! lieudit.getRawValue().equals(VALEURS_MULTIPLES)) { |
if(lieuDitModifie) { |
lieuDitM = lieudit.getText(); |
} else { |
}else { |
champs = champs.replaceAll(":lieu-dit", ""); |
} |
if(stationModifiee && ! station.getRawValue().equals(VALEURS_MULTIPLES)) { |
if(stationModifiee) { |
stationM = station.getText(); |
} else { |
}else { |
champs = champs.replaceAll(":station", ""); |
} |
if(milieuModifie && ! milieu.getRawValue().equals(VALEURS_MULTIPLES)) { |
if(milieuModifie) { |
milieuM = milieu.getText(); |
} else { |
}else { |
champs = champs.replaceAll(":milieu", ""); |
} |
if(dateModifiee && ! date.getRawValue().equals(VALEURS_MULTIPLES)) { |
if(dateModifiee && !date.getRawValue().equals(VALEURS_MULTIPLES)) { |
dateM = date.getRawValue(); |
dateM = Util.remplacerSeparateursDateFormatCel(dateM); |
} else { |
}else { |
champs = champs.replaceAll(":date", ""); |
} |
if(especeModifiee && ! espece.getRawValue().equals(VALEURS_MULTIPLES)) { |
if(especeModifiee) { |
especeM = espece.getText(); |
numNomSelM = numeroNom; |
} else { |
}else { |
champs = champs.replaceAll(":espece", ""); |
} |
if(commModifie && ! comment.getRawValue().equals(VALEURS_MULTIPLES)) { |
if(commModifie) { |
commM = comment.getText(); |
} else { |
}else { |
champs = champs.replaceAll(":commentaire", ""); |
} |
if(latModifiee && ! latitude.getRawValue().equals(VALEURS_MULTIPLES)) { |
if(latModifiee) { |
latM = latitude.getText(); |
} else { |
}else { |
champs = champs.replaceAll(":latitude", ""); |
} |
if(altModifiee && ! altitude.getRawValue().equals(VALEURS_MULTIPLES)) { |
if(altModifiee) { |
altM = altitude.getText(); |
} else { |
}else { |
champs = champs.replaceAll(":altitude", ""); |
} |
if(longModifiee && ! longitude.getRawValue().equals(VALEURS_MULTIPLES)) { |
if(longModifiee) { |
longM = longitude.getText(); |
} else { |
}else { |
champs = champs.replaceAll(":longitude", ""); |
} |
if(abondanceModifiee && !selecteurAbondance.getRawValue().equals(VALEURS_MULTIPLES)) { |
abondanceM = getAbondance(); |
} else { |
champs = champs.replaceAll(":abondance", ""); |
} |
if(certitudeModifiee && !selecteurCertitude.getRawValue().equals(VALEURS_MULTIPLES)) { |
certitudeM = getCertitude(); |
} else { |
champs = champs.replaceAll(":identification", ""); |
} |
if(referentielTaxoModifie && !selecteurReferentielTaxo.getRawValue().equals(VALEURS_MULTIPLES)) { |
referentielTaxoM = getReferentielTaxo(); |
} else { |
champs = champs.replaceAll(":referentiel", ""); |
} |
if(phenologieModifiee && !selecteurStadePheno.getRawValue().equals(VALEURS_MULTIPLES)) { |
phenologieM = getPhenologie(); |
} else { |
champs = champs.replaceAll(":phenologie", ""); |
} |
champs = champs.replaceAll(":",", "); |
if(champs.startsWith(",")) { |
champs = champs.replaceFirst(",", ""); |
} |
String message = "Voulez vous modifier le(s) champ(s) suivant(s) : "+champs+" pour les observations selectionnées ?" ; |
if(champs.trim().equals("")) { |
Window.alert("Aucun champ n'a été modifié"); |
} else { |
1571,11 → 1573,11 |
} |
} |
} |
private void supprimerObservation() { |
private void supprimerObservation() { |
observationMediateur.supprimerObservation(this, numeroOrdre); |
} |
public void afficherDetailsObservation(Observation obs) |
{ |
raz() ; |
1595,7 → 1597,7 |
idLoc = idLoc.substring(0,2); |
} |
} |
if(!obs.getDate().equals("null") && !obs.getDate().equals("000null") && !obs.getDate().equals(VALEURS_MULTIPLES)) { |
String[] dateEtHeure = obs.getDate().split(" ", 2); |
if(verifierFormatDate(dateEtHeure[0])) { |
1603,7 → 1605,7 |
} |
else |
{ |
date.setRawValue(""); |
date.setRawValue(""); |
} |
} else { |
date.setRawValue(VALEURS_MULTIPLES); |
1621,7 → 1623,7 |
if(!obs.getCommentaire().equals("null") && !obs.getCommentaire().equals("000null")) { |
comment.setRawValue(Util.remplacerSautsDeligneMalEncodes(obs.getCommentaire())); |
} |
if(!obs.getLocalite().equals("null") && !obs.getLocalite().equals("000null")) { |
if(!idLoc.equals("000null") && !idLoc.equals("")) { |
1648,25 → 1650,25 |
if(!obs.getNumeroOrdre().equals("null") && !obs.getNumeroOrdre().equals("000null")) { |
numeroOrdre = obs.getNumeroOrdre() ; |
} |
if(doitAfficherLatLon(obs)) { |
latitude.setValue(Util.formaterNombre(obs.getLatitude())) ; |
longitude.setValue(Util.formaterNombre(obs.getLongitude())) ; |
} |
if(!obs.getAltitude().isEmpty() && !obs.getAltitude().equals("null") && !obs.getAltitude().equals("000null")) { |
altitude.setValue(Util.formaterNombre(obs.getAltitude())) ; |
} |
selecteurAbondance.getStore().load(); |
selecteurAbondance.setValue(obs.getAbondance()); |
selecteurCertitude.getStore().load(); |
selecteurCertitude.setValue(obs.getCertitude()); |
selecteurStadePheno.getStore().load(); |
selecteurStadePheno.setValue(obs.getPhenologie()); |
selecteurReferentielTaxo.getStore().load(); |
if(obs.getReferentielTaxo() != VALEURS_MULTIPLES) { |
referentielTaxo = obs.getCodeCourtReferentielTaxo(); |
1678,21 → 1680,21 |
referentielTaxo = ""; |
selecteurReferentielTaxo.setRawValue(VALEURS_MULTIPLES); |
} |
afficherChampsEtendus(obs); |
} |
private boolean doitAfficherLatLon(Observation obs) { |
return !obs.getLatitude().isEmpty() && |
!obs.getLatitude().equals("null") && |
!obs.getLatitude().equals("null") && |
!obs.getLatitude().equals("000null") && |
!Util.estZero(obs.getLatitude()) && |
!obs.getLongitude().isEmpty() && |
!obs.getLongitude().equals("null") && |
!Util.estZero(obs.getLatitude()) && |
!obs.getLongitude().isEmpty() && |
!obs.getLongitude().equals("null") && |
!obs.getLongitude().equals("000null") && |
!Util.estZero(obs.getLongitude()); |
} |
private void viderChampsEtendus() { |
if(listeChampsEtendus != null) { |
for (Iterator<String> it = listeChampsEtendus.keySet().iterator(); it.hasNext();) { |
1708,21 → 1710,21 |
listeChampsEtendus = null; |
} |
} |
private void afficherChampsEtendus(Observation obs) { |
viderChampsEtendus(); |
FormLayout flmd = new FormLayout(); |
flmd.setLabelWidth(150); |
FormLayout flmg = new FormLayout(); |
flmg.setLabelWidth(150); |
conteneurChampEtenduGauche = new Panel(); |
conteneurChampEtenduGauche.setLayout(flmg); |
conteneurChampEtenduDroite = new Panel(); |
conteneurChampEtenduDroite.setLayout(flmd); |
conteneurChampEtenduGauche.setAutoWidth(true); |
conteneurChampEtenduGauche.setStyle("conteneurChampsEtendus"); |
conteneurChampEtenduGauche.setBodyBorder(false); |
1729,10 → 1731,10 |
conteneurChampEtenduDroite.setAutoWidth(true); |
conteneurChampEtenduDroite.setStyle("conteneurChampsEtendus"); |
conteneurChampEtenduDroite.setBodyBorder(false); |
// pour corriger le décalage sur le panneau induit par le lien d'affichage |
conteneurChampEtenduDroite.setPaddings(25, 0, 0, 0); |
if(obs.getChampsEtendus() != null && obs.getChampsEtendus().size() > 0) { |
lienAfficherChampsEtendus.setVisible(true); |
listeChampsEtendus = new HashMap<String, TextField>(obs.getChampsEtendus().size()); |
1742,7 → 1744,7 |
ChampEtendu champ = obs.getChampsEtendus().get(id); |
String valeur = champ.getValeur(); |
String label = champ.getLabel(); |
TextField champTexteEtendu = new TextField(); |
champTexteEtendu.setWidth("90%"); |
champTexteEtendu.setLabel(label); |
1757,10 → 1759,10 |
listeChampsEtendus.put(id, champTexteEtendu); |
gauche = !gauche; |
} |
panneauPremierColonne.add(conteneurChampEtenduGauche); |
panneauSecondeColonne.add(conteneurChampEtenduDroite); |
if(!afficherChampsEtendus) { |
conteneurChampEtenduGauche.setVisible(false); |
conteneurChampEtenduDroite.setVisible(false); |
1770,7 → 1772,7 |
} |
doLayout(); |
} |
private Map<String, ChampEtendu> getValeursChampsEtendus() { |
Map<String, ChampEtendu> valeursChampsEtendus = new HashMap<String, ChampEtendu>(); |
if(listeChampsEtendus != null) { |
1785,11 → 1787,11 |
} |
return valeursChampsEtendus; |
} |
public void raz() |
{ |
raz(Champs.TOUT); |
} |
public void raz(Champs champs) |
{ |
1797,19 → 1799,19 |
case DATE: |
date.reset() ; |
break; |
case LIEUDIT: |
lieudit.reset() ; |
break; |
case STATION: |
station.reset() ; |
break; |
case MILIEU: |
milieu.reset() ; |
break; |
case COMMENT: |
comment.reset() ; |
break; |
1820,43 → 1822,43 |
latitude.reset(); |
longitude.reset(); |
break; |
case ESPECE: |
espece.reset(); |
numeroNom = "" ; |
numeroOrdre = ""; |
break; |
case LATITUDE: |
latitude.reset(); |
afficherIndicationCommune(null); |
break; |
case LONGITUDE: |
longitude.reset(); |
afficherIndicationCommune(null); |
break; |
case ALTITUDE: |
altitude.reset(); |
break; |
case ABONDANCE: |
selecteurAbondance.setValue(""); |
break; |
case CERTITUDE: |
selecteurCertitude.setValue(""); |
break; |
case REFERENTIELTAXO: |
selecteurReferentielTaxo.setValue(""); |
break; |
case PHENOLOGIE: |
selecteurStadePheno.setValue(""); |
break; |
case TOUT: |
commune.reset(); |
date.reset() ; |
1881,11 → 1883,11 |
break; |
} |
} |
public boolean verifierFormatDate(String date) { |
String regex = "[1-9][0-9]{3}-[0-9]{2}-[0-9]{2}" ; |
if(date.matches(regex) && !date.equals("0000-00-00")) { |
return true ; |
1905,13 → 1907,13 |
boutonOK.disable(); |
} |
} |
public boolean getSelectionMultiple() { |
return selectionMultiple; |
} |
private void calculerAfficherDifferences(ListeObservation listeObs) { |
String departement = null; |
String commune = null; |
String lieuDit = null; |
1927,9 → 1929,9 |
String certitude = null; |
String referentielTaxo = null; |
String phenologie = null; |
String ordreObs = ""; |
for(Iterator<String> it = listeObs.keySet().iterator();it.hasNext();) { |
Observation obsEnCours = listeObs.get(it.next()); |
departement = comparerDifferencesChamps(departement, obsEnCours.getIdentifiantLocalite()); |
1937,7 → 1939,7 |
lieuDit = comparerDifferencesChamps(lieuDit, obsEnCours.getLieudit()); |
station = comparerDifferencesChamps(station, obsEnCours.getStation()); |
milieu = comparerDifferencesChamps(milieu, obsEnCours.getMilieu()); |
espece = comparerDifferencesChamps(espece, obsEnCours.getNomSaisi()); |
espece = comparerDifferencesChamps(espece, obsEnCours.getNomSaisi()); |
date = comparerDifferencesChamps(date, obsEnCours.getDate()); |
notes = comparerDifferencesChamps(notes, obsEnCours.getCommentaire()); |
lat = comparerDifferencesChamps(lat, obsEnCours.getLatitude()); |
1947,10 → 1949,10 |
certitude = comparerDifferencesChamps(certitude, obsEnCours.getCertitude()); |
referentielTaxo = comparerDifferencesChamps(referentielTaxo, obsEnCours.getReferentielTaxo()); |
phenologie = comparerDifferencesChamps(phenologie, obsEnCours.getPhenologie()); |
ordreObs += obsEnCours.getNumeroOrdre()+","; |
} |
Observation obs=new Observation(espece,numeroNom,commune,departement,lieuDit,station,milieu, notes,date); |
obs.setNumeroOrdre(ordreObs); |
obs.setLatitude(lat); |
1960,13 → 1962,13 |
obs.setCertitude(certitude); |
obs.setReferentielTaxo(referentielTaxo); |
obs.setPhenologie(phenologie); |
afficherDetailsObservation(obs); |
afficherDetailsObservation(obs); |
} |
private String comparerDifferencesChamps(String valeurActuelle, String nouvelleValeur) { |
String retour = "000null"; |
if(valeurActuelle == null) { |
retour = nouvelleValeur; |
} else { |
1978,8 → 1980,8 |
} |
return retour; |
} |
private void reinitialiserValeurModifiees() { |
private void reinitialiserValeurModifiees() { |
communeModifiee = false; |
lieuDitModifie = false; |
stationModifiee = false; |
1995,7 → 1997,7 |
referentielTaxoModifie = false; |
phenologieModifiee = false; |
} |
public void saisieTabindex() |
{ |
commune.setTabIndex(1); |
2012,9 → 2014,9 |
} else { |
Ext.get("lien_carto").focus(); |
} |
} |
} |
}); |
latitude.setTabIndex(8); |
longitude.setTabIndex(9); |
altitude.setTabIndex(10); |
2026,9 → 2028,9 |
selecteurStadePheno.setTabIndex(16); |
boutonOK.setTabIndex(17); |
boutonAnnuler.setTabIndex(18); |
} |
private void obtenirInformationCoord() { |
if(coordonneesValides() != null) { |
observationMediateur.obtenirInformationCoord(LatLng.newInstance(coordonneesValides()[0],coordonneesValides()[1])); |
2037,29 → 2039,29 |
} |
} |
private void obtenirInformationCommune() { |
observationMediateur.obtenirInformationCommune(getCommuneSansDepartement(), Util.obtenirDepartementAPartirChaineCommune(departement, commune.getText())); |
} |
public double[] coordonneesValides() { |
try { |
double lat = Double.parseDouble(latitude.getValueAsString().replaceAll(",", ".")); |
double lon = Double.parseDouble(longitude.getValueAsString().replaceAll(",", ".")); |
double[] coord = {lat, lon}; |
return coord; |
} catch (NumberFormatException ne) { |
return null; |
} |
} |
private String[] getValeurCoordonnees() { |
double[] coDouble = coordonneesValides(); |
if(coDouble != null) { |
String[] coord = {coDouble[0]+"",coDouble[1]+""}; |
return coord; |
2068,33 → 2070,33 |
return coord; |
} |
} |
public String getCommune() { |
String valeurCommune = ""; |
if(commune.getValue() != null) { |
valeurCommune = commune.getValue(); |
valeurCommune = commune.getValue(); |
} |
return valeurCommune; |
} |
public String getDepartement() { |
return Util.obtenirDepartementAPartirChaineCommune(departement, commune.getText()); |
} |
public String getCommuneSansDepartement() { |
return Util.supprimerNumDepartementChaineLocalite(getCommune()); |
} |
private String getValeurChampListeLibre(ComboBox champ) { |
String valeurChamp = champ.getValue(); |
String valeurChampBrute = champ.getRawValue(); |
// Test idiot qui permet de savoir si l'on utilise la valeur saisie directement ou bien la valeur |
// selectionnee car lors du setValue sur le keypress, gwtext ne prends pas en compte le dernier |
// selectionnee car lors du setValue sur le keypress, gwtext ne prends pas en compte le dernier |
// caractère |
if(valeurChampBrute.trim().length() == 0) { |
valeurChamp = ""; |
} else { |
2110,15 → 2112,15 |
public String getAbondance() { |
return getValeurChampListeLibre(selecteurAbondance); |
} |
public String getCertitude() { |
return getValeurChampListeLibre(selecteurCertitude); |
} |
public String getPhenologie() { |
return getValeurChampListeLibre(selecteurStadePheno); |
} |
public String getReferentielTaxo() { |
String codeCourt = getValeurChampListeLibre(selecteurReferentielTaxo); |
return Ontologies.getInfosReferentielNomParCode(codeCourt).getCodeVersionComplet(); |
2127,13 → 2129,13 |
public boolean communeInitialisee() { |
return communeModifiee; |
} |
public void redimensionnerFormulaire() { |
afficherFormulaireLatLon.setWidth(panneauIntermediaire.getWidth()+"px"); |
panneauPremierColonne.doLayout(); |
panneauSecondeColonne.doLayout(); |
panneauIntermediaire.doLayout(); |
doLayout(); |
} |
} |
Property changes: |
Modified: svn:mergeinfo |
Reverse-merged /trunk/src/org/tela_botanica/client/vues/observation/FormulaireSaisieObservationVue.java:r1840-1908 |
/branches/v1.7-croissant/src/org/tela_botanica/cel2.gwt.xml |
---|
14,9 → 14,9 |
<!-- Parsing JSON --> |
<inherits name='com.google.gwt.json.JSON' /> |
<!-- cartes --> |
<!-- Encore des trucs pour les cartes --> |
<inherits name="com.google.gwt.maps.GoogleMaps" /> |
<inherits name='com.gwtext.GwtExt'/> |
<!-- Encore des trucs pour les user extensions --> |
<inherits name='com.gwtextux.GwtExtUx' /> |
<!-- Specify the app entry point class. --> |
/branches/v1.7-croissant/war/config.defaut.js |
---|
9,7 → 9,7 |
utiliseRedirectionImage:"1", |
referentielGeo:"WGS84", |
cleGoogleMaps:"ABQIAAAADBUAHF9l14gI02QVAbUYJBRqPsByHDhzHLE0yoC9hASLZaFmoRT4_9Zkiscf-BaH_gEy7DVHX5BxwQ", |
referentielsDispos:"bdtfx:v2.00,Métropole (BDTFX);bdtxa:v1.01,Antilles Françaises (BDTXA);isfan:v1.00,Afrique du Nord (ISFAN);autre,Autre/Inconnu", |
referentielsDispos:"bdtfx:v1.01,Métropole (BDTFX);bdtxa:v1.00,Antilles Françaises (BDTXA);isfan:v1.00,Afrique du Nord (ISFAN);autre,Autre/Inconnu", |
refTaxVersion:"1", |
lienEfloreBaseUrl:"www.tela-botanica.org/eflore", |
licence:"", |
/branches/v1.7-croissant/. |
---|
Property changes: |
Modified: svn:mergeinfo |
Reverse-merged /trunk:r1840,1842-1902,1904-1913 |