Subversion Repositories eFlore/Applications.cel

Compare Revisions

No changes between revisions

Ignore whitespace Rev 1516 → Rev 1547

/branches/v1.6-croc/doc/bdd/cel_v2011-09-23.sql
File deleted
/branches/v1.6-croc/doc/bdd/schema_bdd_cel_v1.mwb
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.6-croc/doc/bdd/cel_v1.sql
File deleted
/branches/v1.6-croc/doc/bdd/migration.txt
File deleted
\ No newline at end of file
/branches/v1.6-croc/doc/bdd/schema_bdd_cel_v1.pdf
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.6-croc/doc/bdd/schema_bdd_cel_v2.mwb
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.6-croc/doc/bdd/cel_v2.sql
253,6 → 253,8
`date_transmission` DATETIME NULL DEFAULT NULL ,
`abondance` VARCHAR(50) NULL ,
`certitude` VARCHAR(255) NULL ,
`phenologie` VARCHAR(255) NULL ,
`code_insee_calcule` VARCHAR(5) 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) ,
/branches/v1.6-croc/doc/bdd/schema_bdd_cel_v2.pdf
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.6-croc/doc/bdd/archives/schema_bdd_cel_v1.pdf
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.6-croc/doc/bdd/archives/schema_bdd_cel_v1.pdf
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.6-croc/doc/bdd/archives/cel_v2011-09-23.sql
New file
0,0 → 1,222
-- phpMyAdmin SQL Dump
-- version 3.4.4
-- http://www.phpmyadmin.net
--
-- Client: localhost
-- Généré le : Ven 23 Septembre 2011 à 15:52
-- Version du serveur: 5.1.32
-- Version de PHP: 5.2.17
 
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
 
 
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
 
--
-- Base de données: `cel`
--
 
-- --------------------------------------------------------
 
--
-- Structure de la table `cel_images`
--
 
CREATE TABLE IF NOT EXISTS `cel_images` (
`ci_id_image` bigint(20) NOT NULL AUTO_INCREMENT,
`ci_ordre` bigint(20) NOT NULL,
`ci_ce_utilisateur` varchar(60) NOT NULL,
`ci_publiable_eflore` tinyint(1) NOT NULL,
`ci_note_image` tinyint(5) NOT NULL DEFAULT '-1',
`ci_meta_height` int(11) NOT NULL,
`ci_meta_width` int(11) NOT NULL,
`ci_meta_make` varchar(20) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`ci_meta_model` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`ci_meta_x_resolution` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`ci_meta_y_resolution` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`ci_meta_date_time` varchar(30) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`ci_meta_date` date DEFAULT NULL,
`ci_meta_date_ajout` datetime NOT NULL,
`ci_meta_gps` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`ci_meta_user_comment` longtext CHARACTER SET ascii,
`ci_meta_comment` longtext CHARACTER SET utf8 COLLATE utf8_unicode_ci,
`ci_meta_mots_cles` varchar(800) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`ci_meta_exif_exposure_time` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`ci_meta_exif_f_number` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`ci_meta_exif_exif_version` int(11) DEFAULT NULL,
`ci_meta_exif_compressed_bits_per_pixel` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`ci_meta_exif_shutter_speed_value` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`ci_meta_exif_aperture_value` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`ci_meta_exif_exposure_bias_value` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`ci_meta_exif_max_aperture_value` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`ci_meta_exif_metering_mode` int(5) DEFAULT NULL,
`ci_meta_exif_light_source` varchar(2) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`ci_meta_exif_flash` int(5) DEFAULT NULL,
`ci_meta_exif_focal_length` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`ci_meta_exif_flash_pix_version` int(10) DEFAULT NULL,
`ci_meta_exif_color_space` int(5) DEFAULT NULL,
`ci_meta_exif_interoperability_offset` int(10) DEFAULT NULL,
`ci_meta_exif_focal_plane_x_resolution` varchar(20) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`ci_meta_exif_focal_plane_y_resolution` varchar(20) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`ci_meta_exif_focal_plane_resolution_unit` int(5) DEFAULT NULL,
`ci_meta_exif_sensing_method` int(5) DEFAULT NULL,
`ci_meta_exif_file_source` text CHARACTER SET utf8 COLLATE utf8_unicode_ci,
`ci_meta_exif_custom_rendered` int(5) DEFAULT NULL,
`ci_meta_exif_exposure_mode` int(5) DEFAULT NULL,
`ci_meta_exif_white_balance` int(5) DEFAULT NULL,
`ci_meta_exif_digital_zoom_ratio` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`ci_meta_exif_scene_capture_type` int(5) DEFAULT NULL,
`ci_meta_exif_gain_control` int(5) DEFAULT NULL,
`ci_meta_exif_contrast` int(5) DEFAULT NULL,
`ci_meta_exif_saturation` int(5) DEFAULT NULL,
`ci_meta_exif_sharpness` int(5) DEFAULT NULL,
`ci_meta_exif_subject_distance_range` int(5) DEFAULT NULL,
`ci_meta_exif_autres` longtext CHARACTER SET utf8 COLLATE utf8_unicode_ci,
`ci_meta_iptc_category` varchar(200) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`ci_meta_iptc_mots_cles` longtext CHARACTER SET utf8 COLLATE utf8_unicode_ci,
`ci_meta_iptc_by_line` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`ci_meta_iptc_by_line_title` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`ci_meta_iptc_city` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`ci_meta_iptc_sub_location` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`ci_meta_iptc_province_state` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`ci_meta_iptc_country_primary_location_code` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`ci_meta_iptc_country_name` varchar(200) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`ci_meta_iptc_headline` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`ci_meta_iptc_credit` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`ci_meta_iptc_copyright_notice` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`ci_meta_iptc_contact` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`ci_meta_iptc_autres` longtext CHARACTER SET utf8 COLLATE utf8_unicode_ci,
`ci_nom_original` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`ci_md5` varchar(32) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`ci_id_image`),
KEY `ci_id_image` (`ci_id_image`,`ci_ordre`,`ci_ce_utilisateur`),
KEY `ci_ce_utilisateur` (`ci_ce_utilisateur`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=44843 ;
 
-- --------------------------------------------------------
 
--
-- Structure de la table `cel_inventory`
--
 
CREATE TABLE IF NOT EXISTS `cel_inventory` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`identifiant` varchar(128) NOT NULL,
`prenom_utilisateur` varchar(255) DEFAULT NULL COMMENT 'Prénom de l''utilisateur ayant saisi l''observation.',
`nom_utilisateur` varchar(255) DEFAULT NULL COMMENT 'Nom de l''utilisateur ayant saisi l''observation.',
`ordre` bigint(20) NOT NULL,
`nom_sel` varchar(255) NOT NULL,
`num_nom_sel` int(11) NOT NULL,
`nom_ret` varchar(255) NOT NULL,
`num_nom_ret` int(11) NOT NULL,
`num_taxon` int(11) NOT NULL,
`famille` varchar(255) NOT NULL,
`location` varchar(50) NOT NULL,
`id_location` varchar(10) NOT NULL,
`date_observation` datetime NOT NULL,
`lieudit` varchar(255) NOT NULL,
`station` varchar(255) NOT NULL,
`milieu` varchar(255) NOT NULL,
`commentaire` varchar(1024) NOT NULL,
`transmission` tinyint(4) NOT NULL,
`date_creation` datetime NOT NULL,
`date_modification` datetime NOT NULL,
`date_transmission` datetime NOT NULL,
`mots_cles` longtext NOT NULL,
`mots_cles_texte` text,
`coord_x` varchar(50) NOT NULL,
`coord_y` varchar(50) NOT NULL,
`ref_geo` varchar(25) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `identifiant_ordre` (`identifiant`,`ordre`),
KEY `identifiant_date_creation` (`identifiant`,`date_creation`),
KEY `id_location` (`id_location`),
KEY `location` (`location`),
KEY `date_observation` (`date_observation`),
KEY `nom_ret` (`nom_ret`),
KEY `identifiant` (`identifiant`),
KEY `coordonnees` (`coord_x`,`coord_y`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=370469 ;
 
-- --------------------------------------------------------
 
--
-- Structure de la table `cel_mots_cles_images`
--
 
CREATE TABLE IF NOT EXISTS `cel_mots_cles_images` (
`cmc_mot_cle` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`cmc_bg` int(10) NOT NULL,
`cmc_bd` int(10) NOT NULL,
`cmc_id_mot_cle_general` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`cmc_id_mot_cle_utilisateur` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`cmc_id_proprietaire` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`cmc_id_parent` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`cmc_niveau` int(10) NOT NULL,
PRIMARY KEY (`cmc_mot_cle`,`cmc_id_mot_cle_general`,`cmc_id_proprietaire`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
 
-- --------------------------------------------------------
 
--
-- Structure de la table `cel_mots_cles_obs`
--
 
CREATE TABLE IF NOT EXISTS `cel_mots_cles_obs` (
`cmc_mot_cle` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`cmc_bg` int(20) NOT NULL,
`cmc_bd` int(20) NOT NULL,
`cmc_id_mot_cle_general` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`cmc_id_mot_cle_utilisateur` varchar(128) COLLATE utf8_unicode_ci NOT NULL,
`cmc_id_proprietaire` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`cmc_id_parent` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`cmc_niveau` int(11) NOT NULL,
PRIMARY KEY (`cmc_id_mot_cle_utilisateur`,`cmc_id_proprietaire`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ROW_FORMAT=COMPACT COMMENT='Table des mots clés, à utiliser avec des transactions !';
 
-- --------------------------------------------------------
 
--
-- Structure de la table `cel_obs_images`
--
 
CREATE TABLE IF NOT EXISTS `cel_obs_images` (
`coi_ce_image` int(11) NOT NULL,
`coi_ce_utilisateur` varchar(100) CHARACTER SET utf8 NOT NULL,
`coi_ce_observation` int(11) NOT NULL,
`coi_date_liaison` datetime NOT NULL,
PRIMARY KEY (`coi_ce_image`,`coi_ce_observation`),
KEY `coi_ce_utilisateur` (`coi_ce_utilisateur`),
KEY `coi_ce_observation` (`coi_ce_observation`),
KEY `coi_ce_image` (`coi_ce_image`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
 
-- --------------------------------------------------------
 
--
-- Structure de la table `locations`
--
 
CREATE TABLE IF NOT EXISTS `locations` (
`name` varchar(50) NOT NULL,
`maj_name` varchar(50) NOT NULL,
`code` varchar(3) NOT NULL DEFAULT '0',
`insee_code` varchar(5) NOT NULL DEFAULT '0',
`sector` varchar(3) NOT NULL,
`x_utm` varchar(10) NOT NULL DEFAULT '0',
`y_utm` varchar(10) NOT NULL DEFAULT '0',
`wgs84_latitude` double NOT NULL,
`wgs84_longitude` double NOT NULL,
`update_date` datetime NOT NULL,
PRIMARY KEY (`name`,`code`),
KEY `MAJ` (`maj_name`,`code`),
KEY `sector` (`sector`,`x_utm`,`y_utm`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
 
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/branches/v1.6-croc/doc/bdd/archives/schema_bdd_cel_v1.mwb
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.6-croc/doc/bdd/archives/schema_bdd_cel_v1.mwb
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.6-croc/doc/bdd/archives/cel_v1.sql
New file
0,0 → 1,220
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';
 
 
-- -----------------------------------------------------
-- Table `cel_images`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `cel_images` ;
 
CREATE TABLE IF NOT EXISTS `cel_images` (
`ci_id_image` BIGINT(20) NOT NULL AUTO_INCREMENT ,
`ci_ordre` BIGINT(20) NOT NULL ,
`ci_ce_utilisateur` VARCHAR(60) NOT NULL ,
`ci_publiable_eflore` TINYINT(1) NOT NULL ,
`ci_note_image` TINYINT(5) NOT NULL DEFAULT '-1' ,
`ci_meta_height` INT(11) NOT NULL ,
`ci_meta_width` INT(11) NOT NULL ,
`ci_meta_make` VARCHAR(20) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL ,
`ci_meta_model` VARCHAR(50) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL ,
`ci_meta_x_resolution` VARCHAR(10) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL ,
`ci_meta_y_resolution` VARCHAR(10) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL ,
`ci_meta_date_time` VARCHAR(30) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL ,
`ci_meta_date` DATE NULL DEFAULT NULL ,
`ci_meta_date_ajout` DATETIME NOT NULL ,
`ci_meta_gps` VARCHAR(50) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL ,
`ci_meta_user_comment` LONGTEXT CHARACTER SET 'ascii' NULL DEFAULT NULL ,
`ci_meta_comment` LONGTEXT CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL ,
`ci_meta_mots_cles` VARCHAR(800) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL ,
`ci_meta_exif_exposure_time` VARCHAR(10) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL ,
`ci_meta_exif_f_number` VARCHAR(10) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL ,
`ci_meta_exif_exif_version` INT(11) NULL DEFAULT NULL ,
`ci_meta_exif_compressed_bits_per_pixel` VARCHAR(10) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL ,
`ci_meta_exif_shutter_speed_value` VARCHAR(10) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL ,
`ci_meta_exif_aperture_value` VARCHAR(10) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL ,
`ci_meta_exif_exposure_bias_value` VARCHAR(10) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL ,
`ci_meta_exif_max_aperture_value` VARCHAR(10) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL ,
`ci_meta_exif_metering_mode` INT(5) NULL DEFAULT NULL ,
`ci_meta_exif_light_source` VARCHAR(2) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL ,
`ci_meta_exif_flash` INT(5) NULL DEFAULT NULL ,
`ci_meta_exif_focal_length` VARCHAR(10) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL ,
`ci_meta_exif_flash_pix_version` INT(10) NULL DEFAULT NULL ,
`ci_meta_exif_color_space` INT(5) NULL DEFAULT NULL ,
`ci_meta_exif_interoperability_offset` INT(10) NULL DEFAULT NULL ,
`ci_meta_exif_focal_plane_x_resolution` VARCHAR(20) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL ,
`ci_meta_exif_focal_plane_y_resolution` VARCHAR(20) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL ,
`ci_meta_exif_focal_plane_resolution_unit` INT(5) NULL DEFAULT NULL ,
`ci_meta_exif_sensing_method` INT(5) NULL DEFAULT NULL ,
`ci_meta_exif_file_source` TEXT CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL ,
`ci_meta_exif_custom_rendered` INT(5) NULL DEFAULT NULL ,
`ci_meta_exif_exposure_mode` INT(5) NULL DEFAULT NULL ,
`ci_meta_exif_white_balance` INT(5) NULL DEFAULT NULL ,
`ci_meta_exif_digital_zoom_ratio` VARCHAR(10) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL ,
`ci_meta_exif_scene_capture_type` INT(5) NULL DEFAULT NULL ,
`ci_meta_exif_gain_control` INT(5) NULL DEFAULT NULL ,
`ci_meta_exif_contrast` INT(5) NULL DEFAULT NULL ,
`ci_meta_exif_saturation` INT(5) NULL DEFAULT NULL ,
`ci_meta_exif_sharpness` INT(5) NULL DEFAULT NULL ,
`ci_meta_exif_subject_distance_range` INT(5) NULL DEFAULT NULL ,
`ci_meta_exif_autres` LONGTEXT CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL ,
`ci_meta_iptc_category` VARCHAR(200) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL ,
`ci_meta_iptc_mots_cles` LONGTEXT CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL ,
`ci_meta_iptc_by_line` VARCHAR(50) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL ,
`ci_meta_iptc_by_line_title` VARCHAR(50) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL ,
`ci_meta_iptc_city` VARCHAR(50) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL ,
`ci_meta_iptc_sub_location` VARCHAR(50) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL ,
`ci_meta_iptc_province_state` VARCHAR(50) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL ,
`ci_meta_iptc_country_primary_location_code` VARCHAR(50) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL ,
`ci_meta_iptc_country_name` VARCHAR(200) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL ,
`ci_meta_iptc_headline` VARCHAR(50) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL ,
`ci_meta_iptc_credit` VARCHAR(50) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL ,
`ci_meta_iptc_copyright_notice` VARCHAR(50) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL ,
`ci_meta_iptc_contact` VARCHAR(50) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL ,
`ci_meta_iptc_autres` LONGTEXT CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL ,
`ci_nom_original` VARCHAR(255) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL ,
`ci_md5` VARCHAR(32) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL ,
PRIMARY KEY (`ci_id_image`) ,
INDEX `ci_id_image` (`ci_id_image` ASC, `ci_ordre` ASC, `ci_ce_utilisateur` ASC) ,
INDEX `ci_ce_utilisateur` (`ci_ce_utilisateur` ASC) )
ENGINE = MyISAM
AUTO_INCREMENT = 51091
DEFAULT CHARACTER SET = utf8;
 
 
-- -----------------------------------------------------
-- Table `locations`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `locations` ;
 
CREATE TABLE IF NOT EXISTS `locations` (
`name` VARCHAR(50) NOT NULL ,
`maj_name` VARCHAR(50) NOT NULL ,
`code` VARCHAR(3) NOT NULL DEFAULT '0' ,
`insee_code` VARCHAR(5) NOT NULL DEFAULT '0' ,
`sector` VARCHAR(3) NOT NULL ,
`x_utm` VARCHAR(10) NOT NULL DEFAULT '0' ,
`y_utm` VARCHAR(10) NOT NULL DEFAULT '0' ,
`wgs84_latitude` DOUBLE NOT NULL ,
`wgs84_longitude` DOUBLE NOT NULL ,
`update_date` DATETIME NOT NULL ,
PRIMARY KEY (`name`, `code`) ,
INDEX `MAJ` (`maj_name` ASC, `code` ASC) ,
INDEX `sector` (`sector` ASC, `x_utm` ASC, `y_utm` ASC) )
ENGINE = MyISAM
DEFAULT CHARACTER SET = utf8;
 
 
-- -----------------------------------------------------
-- Table `cel_inventory`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `cel_inventory` ;
 
CREATE TABLE IF NOT EXISTS `cel_inventory` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT ,
`identifiant` VARCHAR(128) NOT NULL ,
`prenom_utilisateur` VARCHAR(255) NULL DEFAULT NULL COMMENT 'Prénom de l\'utilisateur ayant saisi l\'observation.' ,
`nom_utilisateur` VARCHAR(255) NULL DEFAULT NULL COMMENT 'Nom de l\'utilisateur ayant saisi l\'observation.' ,
`ordre` BIGINT(20) NOT NULL ,
`nom_sel` VARCHAR(255) NOT NULL ,
`num_nom_sel` INT(11) NOT NULL ,
`nom_ret` VARCHAR(255) NOT NULL ,
`num_nom_ret` INT(11) NOT NULL ,
`num_taxon` INT(11) NOT NULL ,
`famille` VARCHAR(255) NOT NULL ,
`nom_referentiel` varchar(25) NOT NULL DEFAULT 'bdnff:4.02',
`location` VARCHAR(50) NOT NULL ,
`id_location` VARCHAR(10) NOT NULL ,
`date_observation` DATETIME NOT NULL ,
`lieudit` VARCHAR(255) NOT NULL ,
`station` VARCHAR(255) NOT NULL ,
`milieu` VARCHAR(255) NOT NULL ,
`commentaire` VARCHAR(1024) NOT NULL ,
`transmission` TINYINT(4) NOT NULL ,
`date_creation` DATETIME NOT NULL ,
`date_modification` DATETIME NOT NULL ,
`date_transmission` DATETIME NOT NULL ,
`mots_cles` LONGTEXT NOT NULL ,
`mots_cles_texte` TEXT NULL DEFAULT NULL ,
`coord_x` VARCHAR(50) NOT NULL ,
`coord_y` VARCHAR(50) NOT NULL ,
`ref_geo` VARCHAR(25) NOT NULL ,
PRIMARY KEY (`id`) ,
UNIQUE INDEX `identifiant_ordre` (`identifiant` ASC, `ordre` ASC) ,
INDEX `identifiant_date_creation` (`identifiant` ASC, `date_creation` ASC) ,
INDEX `id_location` (`id_location` ASC) ,
INDEX `location` (`location` ASC) ,
INDEX `date_observation` (`date_observation` ASC) ,
INDEX `nom_ret` (`nom_ret` ASC) ,
INDEX `identifiant` (`identifiant` ASC) ,
INDEX `coordonnees` (`coord_x` ASC, `coord_y` ASC) )
ENGINE = MyISAM
AUTO_INCREMENT = 426426
DEFAULT CHARACTER SET = utf8;
 
 
-- -----------------------------------------------------
-- Table `cel_mots_cles_images`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `cel_mots_cles_images` ;
 
CREATE TABLE IF NOT EXISTS `cel_mots_cles_images` (
`cmc_mot_cle` VARCHAR(50) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL ,
`cmc_bg` INT(10) NOT NULL ,
`cmc_bd` INT(10) NOT NULL ,
`cmc_id_mot_cle_general` VARCHAR(50) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL ,
`cmc_id_mot_cle_utilisateur` VARCHAR(50) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL ,
`cmc_id_proprietaire` VARCHAR(50) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL ,
`cmc_id_parent` VARCHAR(50) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL ,
`cmc_niveau` INT(10) NOT NULL ,
PRIMARY KEY (`cmc_id_mot_cle_utilisateur`, `cmc_id_proprietaire`) )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_unicode_ci;
 
 
-- -----------------------------------------------------
-- Table `cel_mots_cles_obs`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `cel_mots_cles_obs` ;
 
CREATE TABLE IF NOT EXISTS `cel_mots_cles_obs` (
`cmc_mot_cle` VARCHAR(50) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL ,
`cmc_bg` INT(20) NOT NULL ,
`cmc_bd` INT(20) NOT NULL ,
`cmc_id_mot_cle_general` VARCHAR(50) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL ,
`cmc_id_mot_cle_utilisateur` VARCHAR(128) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL ,
`cmc_id_proprietaire` VARCHAR(50) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL ,
`cmc_id_parent` VARCHAR(50) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL ,
`cmc_niveau` INT(11) NOT NULL ,
PRIMARY KEY (`cmc_id_mot_cle_utilisateur`, `cmc_id_proprietaire`) )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_unicode_ci
COMMENT = 'Table des mots clés, à utiliser avec des transactions !'
ROW_FORMAT = COMPACT;
 
 
-- -----------------------------------------------------
-- Table `cel_obs_images`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `cel_obs_images` ;
 
CREATE TABLE IF NOT EXISTS `cel_obs_images` (
`coi_ce_image` INT(11) NOT NULL ,
`coi_ce_utilisateur` VARCHAR(100) CHARACTER SET 'utf8' NOT NULL ,
`coi_ce_observation` INT(11) NOT NULL ,
`coi_date_liaison` DATETIME NOT NULL ,
PRIMARY KEY (`coi_ce_image`, `coi_ce_observation`) ,
INDEX `coi_ce_utilisateur` (`coi_ce_utilisateur` ASC) ,
INDEX `coi_ce_observation` (`coi_ce_observation` ASC) ,
INDEX `coi_ce_image` (`coi_ce_image` ASC) )
ENGINE = MyISAM
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_unicode_ci;
 
 
 
SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
/branches/v1.6-croc/doc/bdd/archives/migration.txt
New file
0,0 → 1,17
Pour migrer la base de données du CEL de la version 1 vers la version 2, il faut :
- avoir une base de données 'tb_v4' contenant les tables de l'application Annuaire de Tela Botanica
- avoir une base de données 'cel' contenant les tables de la verion 1
- avoir une base de données 'tb_cel' vide (dans laquelle seront migrées les données)
1. Dans la base tb_cel, créer les nouvelles tables de la version 2 à l'aide du fichier sql : cel_v2.sql
2. Configurer le fichier jrest.ini.php :
- dans la section [database_cel] :
- le paramétre 'database' doit correspondre à 'cel'
- le paramétre 'database_migration' à 'tb_cel'
- dans la section [database_ident] :
- le paramétre 'database' à 'tb_prod_v4'
3. Ouvrez une console et placez vous dans le dossier 'jrest', vous pourrez ensuite lancer successivement les
commandes :
/opt/lampp/bin/php cli.php MigrationObs getElement
/opt/lampp/bin/php cli.php MigrationImages getElement
/opt/lampp/bin/php cli.php MigrationMotsCles getElement
Property changes:
Added: svn:eol-style
+native
\ No newline at end of property
/branches/v1.6-croc/jrest/lib/GestionChampsTags.php
File deleted
\ No newline at end of file
/branches/v1.6-croc/jrest/lib/GestionObservation.php
108,6 → 108,39
}
/**
* Modifie une observation publique dont l'id et l'utilisateur sont passé en paramètre
*
* @param int $utilisateur id utilisateur du proprietaire de l'observation
* @param int $id identifiant de l'observation
* @param array $parametres tableau indexé avec les mêmes noms de champs que la bdd
*
* @return true ou false suivant le succès de l'opération
*/
public function modifierObservationPublique($utilisateur, $id, $parametres) {
$retour = true;
$requete_modification = "UPDATE cel_obs SET " ;
$sous_requete_modification = $this->traiterParametresObservationEtConstruireSousRequeteMaj($parametres);
$requete_modification .= $sous_requete_modification;
$requete_modification .= " WHERE id_observation = ".$this->proteger($id).
" AND ce_utilisateur = ".$this->proteger($utilisateur)." ".
" AND transmission = 1";
// 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 = $this->executerRequeteSimple($requete_modification);
if ($resultat_modification === false) {
$retour = false;
$this->logger("CEL_bugs","Erreur de mise à jour de l\'observation : ".$id);
}
return $retour;
}
/**
* Supprime une ou plusieurs observations grâce aux paramètres fournis
*
* @param int $utilisateur id utilisateur du proprietaire de l'observation
247,10 → 280,15
* @return $parametres le tableau modifié selon ce qu'il contenait
*/
private function formaterParametresObservation($parametres) {
if (($parametres['nom_sel_nn'] == '' || $parametres['nom_sel_nn'] == 0) && $parametres['nom_sel'] != '') {
$code_referentiel = 'bdtfx';
if(!isset($parametres['nom_referentiel'])) {
$parametres['nom_referentiel'] = 'bdtfx:v1.01';
}
$code_referentiel = substr($parametres['nom_referentiel'], 0, 5);
if ($this->estUnNomSolitaire($parametres)) {
$chercheur_infos_complementaires = new RechercheInfosTaxonBeta($this->config);
$chercheur_infos_complementaires = new RechercheInfosTaxonBeta($this->config, $code_referentiel);
// Utilisation d'un nom sans numéro nomenclatural, recherche d'une correspondance sur le nom
$complement = $chercheur_infos_complementaires->rechercherInformationsComplementairesSurNom($parametres['nom_sel']);
 
259,20 → 297,17
if(count($complement) > 0) {
$parametres['nom_sel_nn'] = $complement[0][0];
}
$parametres['nom_referentiel'] = 'bdtfx:v1.01';
}
 
if ($parametres['nom_sel_nn'] != '') {
if ($this->parametreNumNomEstPresent($parametres)) {
// Utilisation d'un nom faisant parti du referentiel : recherche du nom valide correspondant
$chercheur_infos_complementaires = new RechercheInfosTaxonBeta($this->config);
$chercheur_infos_complementaires = new RechercheInfosTaxonBeta($this->config , $code_referentiel);
$complement = $chercheur_infos_complementaires->rechercherInformationsComplementairesSurNumNom($parametres['nom_sel_nn']);
$parametres['nom_ret']=$complement['Nom_Retenu'];
$parametres['nom_ret_nn']=$complement['Num_Nom_Retenu'];
$parametres['nt']=$complement['Num_Taxon'];
$parametres['famille']=$complement['Famille'];
$parametres['nom_referentiel'] = 'bdtfx:v1.01';
}
if(isset($parametres['ce_utilisateur'])) {
305,13 → 340,30
 
// TODO : voir si l'on peut utiliser un des fonctions de la classe cel
if (isset($parametres['date_observation']) && $parametres['date_observation']!="null") {
list($jour,$mois,$annee)=explode("/",$parametres['date_observation']);
$parametres['date_observation']=$annee."-".$mois."-".$jour." 0:0:0";
if(substr_count($parametres['date_observation'], '/') == 3) {
list($jour,$mois,$annee)=explode("/",$parametres['date_observation']);
$parametres['date_observation']=$annee."-".$mois."-".$jour." 0:0:0";
}
}
return $parametres;
}
private function estUnNomSolitaire($parametres) {
return $this->parametreNumNomPasPresent($parametres) && $parametres['nom_sel'] != '';
}
private function parametreNumNomEstPresent($parametres) {
return !$this->parametreNumNomPasPresent($parametres);
}
private function parametreNumNomPasPresent($parametres) {
return (!isset($parametres['nom_sel_nn']) ||
$parametres['nom_sel_nn'] == null ||
$parametres['nom_sel_nn'] == '' ||
$parametres['nom_sel_nn'] == 0);
}
/**
* Assemble une sous requete pour un ajout, tout en formatant les paramètres et en recherchant
* les infos complémentaires
/branches/v1.6-croc/jrest/lib/GestionChampsEtendus.php
82,22 → 82,24
* @return array
*/
public function obtenirChampsEtendusPourElementsMultiples($ids_element_lies) {
$ids_element_lies = array_map(array($this, 'proteger'),$ids_element_lies);
$requete = "SELECT * FROM ".$this->table_champs_etendus." ".
"WHERE ".$this->champ_id." IN (".implode(',',$ids_element_lies).") ";
 
$resultats = $this->executerRequete($requete);
$champs_etendus_par_element = array();
foreach ($resultats as &$ligne) {
$id_element = $ligne[$this->champ_id];
if(!isset($champs_etendus_par_element[$id_element])) {
$champs_etendus_par_element[$id_element] = array();
if(!empty($ids_element_lies)) {
$ids_element_lies = array_map(array($this, 'proteger'),$ids_element_lies);
$requete = "SELECT * FROM ".$this->table_champs_etendus." ".
"WHERE ".$this->champ_id." IN (".implode(',',$ids_element_lies).") ";
$resultats = $this->executerRequete($requete);
$champs_etendus_par_element = array();
foreach ($resultats as &$ligne) {
$id_element = $ligne[$this->champ_id];
if(!isset($champs_etendus_par_element[$id_element])) {
$champs_etendus_par_element[$id_element] = array();
}
$champs_etendus_par_element[$id_element][$ligne['cle']] = $ligne['valeur'];
}
$champs_etendus_par_element[$id_element][$ligne['cle']] = $ligne['valeur'];
}
return $champs_etendus_par_element;
/branches/v1.6-croc/jrest/lib/RechercheInfosTaxonBeta.php
24,11 → 24,17
private $url_service_chorologie = null;
private $masque_recherche = null;
private $code_referentiel = 'bdtfx';
public function RechercheInfosTaxonBeta($config, $code_referentiel = 'bdtfx') {
parent::__construct($config);
$this->code_referentiel = $code_referentiel;
$this->formaterUrlsServices($config);
}
public function RechercheInfosTaxonBeta($config) {
parent::__construct($config);
$this->url_service_nom = $config['eflore']['url_service_nom'];
$this->url_service_taxon = $config['eflore']['url_service_taxon'];
private function formaterUrlsServices($config) {
$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'];
}
152,7 → 158,7
}
public function effectuerRequeteInfosComplementairesSurNumNom($num_nom) {
$infos = array();
$infos = array();
$url = $this->url_service_nom.'/'.$num_nom.'?retour.champs=nom_sci,auteur,id,nom_retenu_complet,nom_retenu.id,num_taxonomique,famille';
$resultat = @file_get_contents($url);
if($resultat != '') {
169,6 → 175,7
'Num_Taxon' => $infos['num_taxonomique'],
'Famille' => $infos['famille']
);
return $infos_formatees;
}
private function supprimerBiblio($nom) {
176,7 → 183,6
}
public function rechercherNumTaxSurNumNom($num_nom) {
$nt = null;
$url = $this->url_service_nom."/".$num_nom.'?retour.champs=num_taxonomique';
$resultat = @file_get_contents($url);
222,7 → 228,7
$identifiant_espece=utf8_encode($identifiant_espece);
$retour = array();
//TODO: voir ce qu'on fait pour l'import de différent référentiels
preg_match('/BDNFFnn([0-9][0-9]*)/',$identifiant_espece, $elements);
if (isset($elements[1])) {
// Numero nomenclatural
/branches/v1.6-croc/jrest/lib/Cel.php
326,7 → 326,7
 
//+----------------------------------------------------------------------------------------------------------------+
// GESTION DE L'IDENTIFICATION
 
protected function getAuthIdentifiant() {
$id = (isset($_SERVER['PHP_AUTH_USER'])) ? $_SERVER['PHP_AUTH_USER'] : null;
return $id;
377,6 → 377,17
}
}
}
public function controleAppelIpAutorisee() {
$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');
echo 'Accès interdit';
exit(0);
}
return true;
}
 
public function logger($index,$chaine) {
if(!class_exists('Log')) {
/branches/v1.6-croc/jrest/lib/RechercheObservation.php
95,9 → 95,13
}
public function formaterPourEnvoiCel($tableau_observations) {
$ids = array();
foreach($tableau_observations as &$observation) {
$observation['ce_zone_geo'] = $this->convertirCodeZoneGeoVersCodeInsee($observation['ce_zone_geo']);
$ids_mots_cles = $this->getIdsMotsClesObservation($observation['id_observation']);
$ids[] = $observation['id_observation'];
$mots_cles_chaine = '';
foreach($ids_mots_cles as $id_mot_cle) {
$mots_cles_chaine .= $id_mot_cle['id_mot_cle_obs'].';';
112,6 → 116,15
}
}
$gestion_champs_etendus = new GestionChampsEtendus($this->config, 'obs');
$champs_supp = $gestion_champs_etendus->obtenirChampsEtendusPourElementsMultiples($ids);
foreach($tableau_observations as &$obs) {
if(isset($champs_supp[$obs['id_observation']])) {
$obs['obs_etendue'] = $champs_supp[$obs['id_observation']];
}
}
return $tableau_observations;
}
/branches/v1.6-croc/jrest/services/NameSearch.php
21,7 → 21,7
* Cas d'utilisation :
* Service completion nom scientifique
*
* 1 : L'application recoit un debut de nom scientifique
* 1 : L'application recoit un debut de nom scientifique ainsi qu'un code de référentiel
* 2 : Si le genre recu est >1, l'application retourne les 50 premieres genre commencant par ce prefixe
* 3 : Si l'espece est presente l'application retourne les 50 premieres genre+espece commencant par ce prefixe
*/
38,19 → 38,23
$liste_genre_espece = array();
$referentiel = null;
$genre = null;
$espece = null;
if(isset($uid[0])) {
$genre = $uid[0];
$referentiel = $uid[0];
}
if(isset($uid[1])) {
$espece = $uid[1];
$genre = $uid[1];
}
if(isset($uid[2])) {
$espece = $uid[2];
}
 
$chercheur_infos_taxon = new RechercheInfosTaxonBeta($this->config);
$chercheur_infos_taxon = new RechercheInfosTaxonBeta($this->config, $referentiel);
$liste_genre_espece = $chercheur_infos_taxon->rechercherGenreEspeceSurPrefixe($genre,$espece);
$this->envoyerJson($liste_genre_espece);
/branches/v1.6-croc/jrest/services/NameMap.php
20,27 → 20,38
* Cas d'utilisation :
* Service recherche d'image a partir d'un numero nomenclatural
*
* 1: Le service recoit un numero nomenclatural
* 2: Le service calcul le numero taxonomique associe
* 3: Le service recherche une carte disponible
* A: Pas de carte disponible, generation de l'image
* 1: Le service recoit un référentiell et un numero nomenclatural
* 2: Le service recherche une carte disponible
*/
 
class NameMap extends Cel {
 
function getElement($uid){
$url_service_chorologie = $this->config['eflore']['url_service_chorologie_carte'];
$nt = null;
$retour = array('');
if(isset($uid[0]) && isset($uid[1])) {
$uid[0] = $uid[0] != '' ? $uid[0] : 'bdtfx';
$retour = $this->obtenirCarteChorologie($uid[0], $uid[1]);
}
 
if(isset($uid[0])) {
$retour = array('');
$file = $url_service_chorologie.'/nn%3A'.$uid[0].'?retour.format=587&retour=image%2Fpng';
$retour = array($file);
}
 
$this->envoyerJson($retour);
return true;
}
function obtenirCarteChorologie($referentiel_taxo, $nn) {
// TODO: gérer ici les cartes d'autres référentiels si celles si sont disponibles
$retour = array('');
switch($referentiel_taxo) {
case 'bdtfx':
$url_service_chorologie = $this->config['eflore']['url_service_chorologie_carte'];
$file = $url_service_chorologie.'/nn%3A'.$nn.'?retour.format=587&retour=image%2Fpng';
$retour = array($file);
break;
default:
break;
}
return $retour;
}
}
/* +--Fin du code ---------------------------------------------------------------------------------------+
* $Log$
/branches/v1.6-croc/jrest/services/InventoryExport.php
55,18 → 55,19
$worksheet->write(0,3,'Numero nomenclatural nom retenu');
$worksheet->write(0,4,'Numero taxonomique');
$worksheet->write(0,5,'Famille');
$worksheet->write(0,6,'Commune');
$worksheet->write(0,7,'Identifiant Commune');
$worksheet->write(0,8,'Date');
$worksheet->write(0,9,'Lieu-dit');
$worksheet->write(0,10,'Station');
$worksheet->write(0,11,'Milieu');
$worksheet->write(0,12,'Notes');
$worksheet->write(0,13,'Latitude');
$worksheet->write(0,14,'Longitude');
$worksheet->write(0,15,'Referentiel Geographique');
$worksheet->write(0,16,'Ordre');
$worksheet->write(0,17,'Identifiant');
$worksheet->write(0,6,'Referentiel taxonomique');
$worksheet->write(0,7,'Commune');
$worksheet->write(0,8,'Identifiant Commune');
$worksheet->write(0,9,'Date');
$worksheet->write(0,10,'Lieu-dit');
$worksheet->write(0,11,'Station');
$worksheet->write(0,12,'Milieu');
$worksheet->write(0,13,'Notes');
$worksheet->write(0,14,'Latitude');
$worksheet->write(0,15,'Longitude');
$worksheet->write(0,16,'Referentiel Geographique');
$worksheet->write(0,17,'Ordre');
$worksheet->write(0,18,'Identifiant');
$numero_page = isset($criteres['numero_page']) ? $criteres['numero_page'] : 0;
$limite = isset($criteres['limite']) ? $criteres['limite'] : 0;
91,18 → 92,19
$worksheet->write($i,3,$obs['nom_ret_nn']);
$worksheet->write($i,4,$obs['nt']);
$worksheet->write($i,5,$obs['famille']);
$worksheet->write($i,6,$obs['zone_geo']);
$worksheet->write($i,7,$this->convertirCodeZoneGeoVersDepartement($obs['ce_zone_geo']));
$worksheet->write($i,8,$obs['date_observation']);
$worksheet->write($i,9,$obs['lieudit']);
$worksheet->write($i,10,$obs['station']);
$worksheet->write($i,11,$obs['milieu']);
$worksheet->write($i,12,$obs['commentaire']);
$worksheet->write($i,13,$obs['latitude']);
$worksheet->write($i,14,$obs['longitude']);
$worksheet->write($i,15,$obs['geodatum']);
$worksheet->write($i,16,$obs['ordre']);
$worksheet->write($i,17,$obs['id_observation']);
$worksheet->write($i,6,$obs['nom_referentiel']);
$worksheet->write($i,7,$obs['zone_geo']);
$worksheet->write($i,8,$this->convertirCodeZoneGeoVersDepartement($obs['ce_zone_geo']));
$worksheet->write($i,9,$obs['date_observation']);
$worksheet->write($i,10,$obs['lieudit']);
$worksheet->write($i,11,$obs['station']);
$worksheet->write($i,12,$obs['milieu']);
$worksheet->write($i,13,$obs['commentaire']);
$worksheet->write($i,14,$obs['latitude']);
$worksheet->write($i,15,$obs['longitude']);
$worksheet->write($i,16,$obs['geodatum']);
$worksheet->write($i,17,$obs['ordre']);
$worksheet->write($i,18,$obs['id_observation']);
$i++;
}
 
/branches/v1.6-croc/jrest/services/CelWidgetSaisie.php
126,7 → 126,7
// si le formulaire contient une image on la traite
if ($img != null) {
$this->nettoyerImagesUploades();
$this->stockerImagesEtLierAObs($img, $id_utilisateur, $utilisateur);
$img_a_taguer_ids = $this->stockerImagesEtLierAObs($img, $id_utilisateur, $utilisateur);
}
}
197,7 → 197,8
$imgAAjouter['id_utilisateur'] = $id_utilisateur;
$imgAAjouter['id_obs'] = $ordreObs;
$imgAAjouter['nom'] = $obs['image_nom'];
$imgAAjouter['b64'] = $obs['image_b64'];
//$imgAAjouter['tags'] = isset($obs['image_tag']) ? explode(',',$obs['image_tag']) : '';
$imgAAjouter['b64'] = isset($obs['image_b64']) ? $obs['image_b64'] : array();
$this->debug[] = 'Contient B64 : '.(empty($obs['image_b64']) ? 'non' : 'oui');
}
}
208,7 → 209,6
private function stockerImagesEtLierAObs($img, $id_utilisateur, $utilisateur) {
if(!isset($img['nom']) && is_array($img)) {
foreach($img as $index => $image) {
//echo '<pre>'.print_r($image,true).'</pre>';exit;
$nomFichierImg = $this->traiterNomFichierImage($image['nom']);
$cheminImage = $this->config['cel']['chemin_stockage_temp']."/$nomFichierImg";
// Si l'image est transmise en base 64
248,6 → 248,8
}
}
}
return $img_a_taguer_ids;
}
private function affecterChampsManquantsUtilisateur($utilisateur) {
267,7 → 269,6
return $valeur;
}
 
 
private function getMaxOrdre($id_utilisateur) {
$ordre = null;
$identifiant = $this->bdd->quote($id_utilisateur);
/branches/v1.6-croc/jrest/services/InventoryImportExcel.php
276,6 → 276,8
$info_transmettre = $this->traiterTransmettre($line[TRANSMETTRE][$i]);
break;
case ESPECE:
// suppression des accents éventuels
$line[ESPECE][$i] = remove_accent(cp1252_to_utf8($line[ESPECE][$i]));
$resultat_recherche_espece = $this->chercheur_infos_taxon->rechercherInfosSurTexteCodeOuNumTax($line[ESPECE][$i]);
if (isset($resultat_recherche_espece['en_id_nom']) && $resultat_recherche_espece['en_id_nom'] != '') {
$info_espece['nom_sel'] = $resultat_recherche_espece['nom_sel'];
289,8 → 291,10
$info_espece['nom_sel'] = $line[ESPECE][$i];
}
case IMAGE:
$info_image=$this->traiterImage($line[IMAGE][$i],$utilisateur); // Image separee par des / + utilisateur
break;
if(isset($line[IMAGE])) {
$info_image=$this->traiterImage($line[IMAGE][$i],$utilisateur); // Image separee par des / + utilisateur
}
break;
}
}
else {
385,17 → 389,18
}
 
function traiterLigneComplement($line,$i,$utilisateur, $id_obs = null) {
$info_image=$this->traiterImage($line[IMAGE][$i],$utilisateur); // Image separee par des / + utilisateur
// creation lien image
foreach ($info_image as $pic) {
$requete = 'INSERT INTO cel_obs_images (id_image, id_observation) VALUES ('.$this->proteger($pic['id_image']).', '.$this->proteger($id_obs).') ON DUPLICATE KEY UPDATE id_image = id_image' ;
$resultat_liaison = $this->executer($requete);
if ($resultat_liaison !== false) {
$this->cpt_images_liees++;
} else {
return false;
}
if(isset($line[IMAGE])) {
$info_image=$this->traiterImage($line[IMAGE][$i],$utilisateur); // Image separee par des / + utilisateur
// creation lien image
foreach ($info_image as $pic) {
$requete = 'INSERT INTO cel_obs_images (id_image, id_observation) VALUES ('.$this->proteger($pic['id_image']).', '.$this->proteger($id_obs).') ON DUPLICATE KEY UPDATE id_image = id_image' ;
$resultat_liaison = $this->executer($requete);
if ($resultat_liaison !== false) {
$this->cpt_images_liees++;
} else {
return false;
}
}
}
}
598,6 → 603,7
}
 
function remove_accent($str) {
return supprimerAccents($str);
$a = array('À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Æ', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î',
'Ï', 'Ð', 'Ñ', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ø', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', 'ß',
'à', 'á', 'â', 'ã', 'ä', 'å', 'æ', 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î',
629,6 → 635,18
return str_replace($a, $b, $str);
}
 
//TODO: déplacer les fonctions ci dessus et dessous dans une classe
// utilitaire
function supprimerAccents($str, $charset = 'UTF-8')
{
$str = htmlentities($str, ENT_NOQUOTES, $charset);
$str = preg_replace('#&([A-za-z])(?:acute|cedil|circ|grave|orn|ring|slash|th|tilde|uml);#', '\1', $str);
$str = preg_replace('#&([A-za-z]{2})(?:lig);#', '\1', $str); // pour les ligatures e.g. '&oelig;'
$str = preg_replace('#&[^;]+;#', '', $str); // supprime les autres caractères
 
return $str;
}
 
function cp1252_to_utf8($str) {
$cp1252_map = array ("\xc2\x80" => "\xe2\x82\xac",
"\xc2\x82" => "\xe2\x80\x9a",
/branches/v1.6-croc/jrest/services/NameImage.php
25,28 → 25,50
* 3: Le service recherche une image disponible pour ce numero taxonomique
* 4: Le service redimensionne l'image et la renvoie
*/
 
class NameImage extends Cel {
 
function getElement($uid){
$image = array();
$url_photoflora = $this->config['eflore']['url_service_photoflora'];
if(isset($uid[0])) {
$url = $url_photoflora.'?masque.nn='.$uid[0].'&navigation.limite=1';
$resultat = @file_get_contents($url);
$resultat = json_decode($resultat);
if(is_object($resultat) && isset($resultat->resultats)) {
$element = (array)$resultat->resultats;
$element = array_pop($element);
$image = array($element->{'binaire.href'}, $element->{'binaire.hrefmax'});
}
$image = array("","");
if(isset($uid[0]) && isset($uid[1])) {
$uid[0] = $uid[0] != '' ? $uid[0] : 'bdtfx';
$image = $this->obtenirIllustration($uid[0], $uid[1]);
}
$this->envoyerJson($image);
return true;
}
function obtenirIllustration($referentiel_taxo, $nn) {
// TODO: gérer ici les images d'autres référentiels si celles si sont disponibles
$retour = array("","");
switch($referentiel_taxo) {
case 'bdtfx':
$retour = $this->effectuerRequetePhotoFlora($nn);
break;
default:
break;
}
return $retour;
}
private function effectuerRequetePhotoFlora($nn) {
$url_photoflora = $this->config['eflore']['url_service_photoflora'];
$url = $url_photoflora.'?masque.nn='.$nn.'&navigation.limite=1';
$resultat = @file_get_contents($url);
$resultat = json_decode($resultat);
if(is_object($resultat) && isset($resultat->resultats)) {
$element = (array)$resultat->resultats;
$element = array_pop($element);
if(is_object($element)) {
$image = array($element->{'binaire.href'}, $element->{'binaire.hrefmax'});
} else {
$image = array('','');
}
}
return $image;
}
}
/* +--Fin du code ---------------------------------------------------------------------------------------+
* $Log$
/branches/v1.6-croc/jrest/services
Property changes:
Modified: svn:ignore
MigrationImages.php
MigrationMotsCles.php
MigrationObs.php
+Test.php
/branches/v1.6-croc/scripts/modules/codeinseecommune/traitements_cel
New file
0,0 → 1,41
#!/bin/sh
#/etc/rc.d/init.d/
#
# Aurélien PERONNET [17 avril 2013]
# Service de lancement des scripts de maintenance et modification du cel
#
case "$1" in
 
start)
 
echo "Demarrage de codeinseecommune :"
nohup /usr/local/sbin/codeinseecommune.sh 1>/dev/null 2>/dev/null &
 
;;
 
stop)
 
echo "Arret de codeinseecommune"
PID=`ps -eaf | grep codeinseecommune | grep -v grep | tr -s ' ' | cut -d' ' -f2 | head -n1`
kill -9 ${PID}
 
;;
 
status)
 
echo -n "Voici les PID du processus codeinseecommune :"
PID=`ps -eaf | grep codeinseecommune | grep -v grep | tr -s ' ' | cut -d' ' -f2 | head -n1`
echo ${PID}
 
;;
 
 
*)
 
echo "Usage: {start|stop|status}"
 
exit 1
 
;;
 
esac
/branches/v1.6-croc/scripts/modules/codeinseecommune/Codeinseecommune.php
2,9 → 2,9
// Encodage : UTF-8
// +-------------------------------------------------------------------------------------------------------------------+
/**
* Traitement des fichiers de la banque de données SOPHY pour insertion
* Traitement des codes INSEE de la banque de données cel
*
* Description : classe permettant d'insérer les tableaux phytosociologiques de la banque de données SOPHY
* Description : classe permettant d'affecter des codes INSEE aux obs possédant des coordonnées mais pas de commune
* Utilisation : php script.php code -a codeInseeCommune
*
* @category PHP 5.3
11,6 → 11,7
* @package phytosocio
//Auteur original :
* @author Delphine CAUQUIL <delphine@tela-botanica.org>
* @author Aurélien PERONNET <aurelien@tela-botanica.org>
* @copyright Copyright (c) 2009, Tela Botanica (accueil@tela-botanica.org)
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL-v3
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL-v2
22,36 → 23,39
protected $tableauTaxon;
protected $dao;
protected $observations;
protected $mode_verbeux = false;
// Paramêtres autorisées lors de l'appel au script en ligne de commande
protected $parametres_autorises = array(
'-n' => array(true, true, 'Nom du fichier ou du dossier à traiter'));
 
 
 
// +-------------------------------------------------------------------------------------------------------------------+
public function executer() {
include_once dirname(__FILE__).'/bibliotheque/Dao.php';
 
$this->dao = new Dao();
// Récupération de paramétres
// Lancement de l'action demandée
$cmd = $this->getParametre('a');
$this->mode_verbeux = $this->getParametre('v');
switch ($cmd) {
case 'tout' :
// à effectuer manuellement au premier lancement du script
$this->creerColonne();
$this->calculerCodeInsee();
$this->modifierCodeInsee();
$this->calculerCodesInsee();
break;
case 'colonne' :
$this->creerColonne();
break;
case 'sanscorrespondance' :
// devrait être être l'option utilisée dans le cron quotidien (avec l'option -v 0)
$this->calculerCodesInseeSansCorrespondance();
break;
case 'calculer' :
$this->calculerCodeInsee();
$this->calculerCodesInsee();
break;
case 'modifier' :
$this->modifierCodeInsee();
break;
default :
$this->traiterErreur('Erreur : la commande "%s" n\'existe pas!', array($cmd));
}
60,44 → 64,118
// +-------------------------------------------------------------------------------------------------------------------+
 
private function creerColonne() {
$this->dao->creerColonneCodeInseeCalculee();
$this->dao->creerColonneCodeInseeCalcule();
}
private function calculerCodeInsee() {
private function calculerCodesInseeSansCorrespondance() {
$liste_coordonnees = $this->dao->rechercherCoordonneesSansCorrespondances();
$this->traiterCoordonnees($liste_coordonnees);
}
private function calculerCodesInsee() {
$liste_coordonnees = $this->dao->rechercherCoordonnees();
$this->traiterCoordonnees($liste_coordonnees);
}
private function traiterCoordonnees($liste_coordonnees) {
$debut = microtime(true);
$nb_coordonnees_modifiees = 0;
$nb_coordonnees_ignorees = 0;
$total = count($liste_coordonnees);
if($this->mode_verbeux) {
echo "-------------------------------------------------------------------\n";
echo " Calcul des codes INSEE et modification (".count($liste_coordonnees)." coordonnées en tout) ... \n";
echo " Enrichissement des champs zone geo et ce_zone_geo vides ... \n";
echo "-------------------------------------------------------------------\n";
}
foreach ($liste_coordonnees as $coordonnees) {
if ($this->testerCoordonneesWgsFrance($coordonnees['latitude'], $coordonnees['longitude'])) {
$code_insee = $this->chercherCodeCommune('osm', $coordonnees['latitude'], $coordonnees['longitude']);
if ($code_insee != "") {
$this->dao->ajouterCodeInseeCalculee($coordonnees['latitude'], $coordonnees['longitude'], $code_insee);
} else {
$code_insee = $this->chercherCodeCommune('lion1906', $coordonnees['latitude'], $coordonnees['longitude']);
if ($code_insee != "") {
$this->dao->ajouterCodeInseeCalculee($coordonnees['latitude'], $coordonnees['longitude'], $code_insee);
}
}
$infos_coord = $this->obtenirInfosPourCoordonnees($coordonnees);
if ($infos_coord != null) {
$coordonnee_a_traiter = array(
'latitude' => $coordonnees['latitude'],
'longitude' => $coordonnees['longitude'],
'code_insee' => $infos_coord['code_insee'],
'nom' => $infos_coord['nom']
);
$this->modifierInformationsGeo($coordonnee_a_traiter);
$nb_coordonnees_modifiees++;
} else {
$nb_coordonnees_ignorees++;
}
if($this->mode_verbeux) {
$this->afficherAvancement(' Coordonnées traitées ', $nb_coordonnees_modifiees);
}
}
$fin = microtime(true);
if($this->mode_verbeux) {
echo "\n";
echo "-------------------------------------------------------------------\n";
echo " Fin de la mise à jour des codes INSEE calculés et de l'enrichissement, \n";
echo " ".($fin - $debut)." secondes écoulées \n";
echo " ".$nb_coordonnees_modifiees." code insee calculés et modifiés \n";
echo " ".$nb_coordonnees_ignorees." coordonnées ignorées \n";
echo "-------------------------------------------------------------------\n";
echo "\n";
}
}
private function modifierCodeInsee() {
$this->dao->modifierCodeInsee();
private function obtenirInfosPourCoordonnees($coordonnees) {
$infos_coord = null;
if ($this->testerCoordonneesWgsFrance($coordonnees['latitude'], $coordonnees['longitude'])) {
$infos_coord = $this->chercherInfosCommune('osm', $coordonnees['latitude'], $coordonnees['longitude']);
if ($infos_coord == null) {
$infos_coord = $this->chercherInfosCommune('lion1906', $coordonnees['latitude'], $coordonnees['longitude']);
}
}
return $infos_coord;
}
private function chercherCodeCommune($projet, $latitude, $longitude) {
$code_insee = '';
private function modifierInformationsGeo($coordonnee_a_traiter) {
$this->modifierCodeInseeCalculePourCoordonnees($coordonnee_a_traiter);
$this->modifierCodeInseeEtZoneGeo($coordonnee_a_traiter);
}
private function modifierCodeInseeCalculePourCoordonnees($coordonnee_a_traiter) {
$this->dao->testerActiviteConnection();
$this->dao->ajouterCodeInseeCalcule($coordonnee_a_traiter['latitude'], $coordonnee_a_traiter['longitude'], $coordonnee_a_traiter['code_insee']);
}
private function modifierCodeInseeEtZoneGeo($coordonnee_a_traiter) {
$this->dao->testerActiviteConnection();
$this->dao->modifierCodeInseeEtZoneGeo($coordonnee_a_traiter);
}
private function chercherInfosCommune($projet, $latitude, $longitude) {
$url_service = "www.tela-botanica.org/service:eflore:0.1/{$projet}/nom-commune".
"?lat={$latitude}&lon={$longitude}";
$url_service = str_replace(',', '.', $url_service);
$ch = curl_init($url_service);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$reponse = curl_exec($ch);
$infos_coord = $this->traiterReponseServiceCommune($reponse);
curl_close($ch);
return $infos_coord;
}
 
private function traiterReponseServiceCommune($reponse) {
$retour = null;
$reponse = json_decode($reponse);
// cas du service lion 1906 qui peut renvoyer plusieurs communes (on prend la première)
if(is_array($reponse)) {
$reponse = $reponse[0];
}
if (isset($reponse->codeINSEE)) {
$code_insee = $reponse->codeINSEE;
$retour = array('code_insee' => $reponse->codeINSEE,
'nom' => $reponse->nom);
}
curl_close($ch);
return $code_insee;
return $retour;
}
private function testerCoordonneesWgsFrance($latitude, $longitude) {
111,53 → 189,5
}
return $coord_france;
}
private function analyserCodeDeptComm($ligneDecoupe) {
if (preg_match('/^\d{2}$/', $ligneDecoupe['codeDept'])) {
} elseif (preg_match('/^\s{0,1}\d{1,2}\s{0,1}$/',$ligneDecoupe['codeDept'])) {
$ligneDecoupe['codeDept'] = str_replace(' ', '0', $ligneDecoupe['codeDept']);
} else {
$ligneDecoupe['codeDept'] = null;
}
if (preg_match('/^\d{3}$/', $ligneDecoupe['codeCommune'])) {
} elseif (preg_match('/^\s{0,2}\d{1,2,3}\s{0,2}$/', $ligneDecoupe['codeCommune'])) {
$ligneDecoupe['codeCommune'] = str_replace(' ', '0', $ligneDecoupe['codeCommune']);
} elseif ($ligneDecoupe['codeDept'] == null) {
$ligneDecoupe['codeCommune'] = null;
} else {
$ligneDecoupe['codeCommune'] = '000';
}
return $ligneDecoupe;
}
private function analyserCoordGrdParis($ligneDecoupe, $ligne) {
if (preg_match('/[\s0]0\.000/', $ligneDecoupe['latitude'], $match)) {
$ligneDecoupe['latitude'] = null;
$ligneDecoupe['longitude'] = null;
} elseif (preg_match('/\d{1,2}\.\d{2,3}/', $ligneDecoupe['latitude'], $match)) {// format souhaité
$ligneDecoupe['latitude_wgs'] = round($ligneDecoupe['latitude']*0.9, 7);
$ligneDecoupe['longitude_wgs'] = round($ligneDecoupe['longitude']*0.9+2.3372291, 7);
} elseif (preg_match('/(\d{2})[\d\s,](\d{3})/', $ligneDecoupe['latitude'], $match)) {//erreur de saisie
$ligneDecoupe['latitude'] = $match[1].'.'.$match[2];
$ligneDecoupe['latitude_wgs'] = round($ligneDecoupe['latitude']*0.9, 7);
$ligneDecoupe['longitude_wgs'] = round($ligneDecoupe['longitude']*0.9 + 2.3372291, 7);
} elseif (preg_match('/^[a-zA-Z\s]*[a-zA-Z][a-zA-Z\s]*$/', $ligneDecoupe['latitude'])) {// lat absente + nom long
$ligneDecoupe['nomStation'] = rtrim(substr($ligne, 10, 48));
$ligneDecoupe['latitude'] = null;
$ligneDecoupe['longitude'] = null;
} elseif (preg_match('/.[AO].123/', $ligneDecoupe['latitude'], $match)) {
$ligneDecoupe['latitude'] = null;
$ligneDecoupe['longitude'] = null;
} elseif ($ligneDecoupe['latitude'] != null) {
$ligneDecoupe['latitude'] = null;
$ligneDecoupe['longitude'] = null;
}
return $ligneDecoupe;
}
/*SELECT distinct `ce_zone_geo`,`zone_geo`,`ce_zone_geo_calculee` FROM `cel_obs`
WHERE `ce_zone_geo_calculee`!= "" and `ce_zone_geo`!= "" and
`ce_zone_geo` != concat("INSEE-C:",`ce_zone_geo_calculee`)
*/
 
 
}
?>
?>
/branches/v1.6-croc/scripts/modules/codeinseecommune/codeinseecommune.sh
New file
0,0 → 1,12
#!/bin/bash
#
# /etc/init.d/codeinseecommune : traitement du calcul des codes insee du cel
# Aurélien Peronnet [11 avril 2013]
#
while true
do
logger "Lancement script cel::codeinseecommune"
sudo -u telabotap /usr/local/bin/php-cli-52 -f /home/telabotap/www/eflore-test/cel/scripts/cli.php codeinseecommune -a sanscorrespondance -v 0
logger "Arret script cel::codeinseecommune"
sleep 86400
done
Property changes:
Added: svn:eol-style
+native
\ No newline at end of property
Added: svn:executable
+*
\ No newline at end of property
/branches/v1.6-croc/scripts/modules/codeinseecommune/bibliotheque/Dao.php
1,34 → 1,69
<?php
class Dao extends Bdd {
 
 
private $temps_derniere_requete = 0;
public function rechercherCoordonnees() {
$requete = "SELECT longitude, latitude
FROM `cel_obs`
GROUP BY `longitude` , `latitude`";
$requete = "SELECT longitude, latitude ".
"FROM cel_obs ".
"GROUP BY longitude , latitude ";
$resultat = $this->recupererTous($requete);
$this->reinitialiserTempsDerniereRequete();
return $resultat;
}
public function creerColonneCodeInseeCalculee() {
$create = "ALTER TABLE `cel_obs` ADD `code_insee_calcule` VARCHAR( 5 ) NOT NULL";
public function rechercherCoordonneesSansCorrespondances() {
$requete = 'SELECT longitude, latitude '.
'FROM cel_obs '.
"WHERE code_insee_calcule = '' ".
' AND DATE_ADD(date_modification, INTERVAL 25 HOUR) >= CURDATE() '.
'GROUP BY longitude , latitude ';
$resultat = $this->recupererTous($requete);
$this->reinitialiserTempsDerniereRequete();
return $resultat;
}
public function creerColonneCodeInseeCalcule() {
$create = 'ALTER TABLE cel_obs '.
'ADD code_insee_calcule VARCHAR(5) NOT NULL ';
$this->requeter($create);
$this->reinitialiserTempsDerniereRequete();
}
public function ajouterCodeInseeCalculee($latitude, $longitude, $code_insee) {
$insert = "UPDATE `cel_obs` SET `code_insee_calcule` = '$code_insee' ".
"WHERE latitude = '$latitude' AND longitude = '$longitude'";
public function ajouterCodeInseeCalcule($latitude, $longitude, $code_insee) {
$insert = 'UPDATE cel_obs '.
"SET code_insee_calcule = ".$this->proteger($code_insee)." ".
"WHERE latitude = ".$this->proteger($latitude)." ".
" AND longitude = ".$this->proteger($longitude)." ";
$this->requeter($insert);
$this->reinitialiserTempsDerniereRequete();
}
public function modifierCodeInsee() {
$update = "UPDATE `cel_obs` SET ce_zone_geo=concat('INSEE-C:' ,`code_insee_calcule`) ".
"WHERE ce_zone_geo= '' ";
public function modifierCodeInseeEtZoneGeo($coordonnees) {
$update = "UPDATE cel_obs ".
"SET ce_zone_geo = concat('INSEE-C:' , code_insee_calcule), ".
"zone_geo = ".$this->proteger($coordonnees['nom'])." ".
"WHERE ce_zone_geo = '' AND zone_geo = '' ".
" AND latitude = ".$this->proteger($coordonnees['latitude'])." ".
" AND longitude = ".$this->proteger($coordonnees['longitude'])." ";
$this->requeter($update);
$this->reinitialiserTempsDerniereRequete();
}
 
 
// Il peut se passer assez de temps sans qu'aucune requete ne soit effectuée
// (cas d'un grand nombre d'enregistrements à la suite pour lesquels on ne trouve
// aucun département). Pour éviter cela on teste régulièrement la connection
public function testerActiviteConnection() {
$temps_courant = microtime(true);
$temps_depuis_derniere_requete = $temps_courant - $this->temps_derniere_requete;
if($temps_depuis_derniere_requete >= 18) {
$this->ping();
$this->reinitialiserTempsDerniereRequete();
}
}
private function reinitialiserTempsDerniereRequete() {
$this->temps_derniere_requete = microtime(true);
}
}
?>
/branches/v1.6-croc/src/org/tela_botanica/client/vues/observation/indicateurs/LienExterneVue.java
27,8 → 27,8
public LienExterneVue(ObservationMediateur om) {
oMediateur = om;
refTax = Configuration.getRefTax();
refTaxVersion = Configuration.getRefTaxVersion();
refTax = om.getRefTaxSelectionne().getCode();
refTaxVersion = om.getRefTaxSelectionne().getVersionCourte();
efloreBaseUrl = Configuration.getLienEfloreBaseUrl();
titreLien.setVisible(false);
/branches/v1.6-croc/src/org/tela_botanica/client/vues/observation/ListeObservationVue.java
63,57 → 63,28
*/
private ObservationMediateur observationMediateur = null;
 
 
/**
* Config de colonne
*/
private ColumnConfig etatObservation;
/**
* Config de colonne
*/
private ColumnConfig referentielTaxoObservation;
private ColumnConfig nomSaisiObservation;
/**
* Config de colonne
*/
private ColumnConfig nomRetenuObservation;
/**
* Config de colonne
*/
private ColumnConfig lieuObservation;
/**
* Config de colonne
*/
private ColumnConfig dateObservation;
/**
* Config de colonne
*/
private ColumnConfig ordreObservation;
/**
* Config de colonne
*/
private ColumnConfig abondanceObservation;
/**
* Config de colonne
*/
private ColumnConfig certitudeObservation;
/**
* Modele de colonnes
*/
private ColumnConfig abondanceObservation;
private ColumnConfig certitudeObservation;
private ColumnModel modeleColonnes;
 
/**
* Store qui contient les données à afficher
*/
private Store st = null;
/**
* Barre de pagination
*/
private BarrePaginationVue bt = null ;
 
/**
* Numéro de page en cours
*/
141,6 → 112,8
 
 
private boolean tailleInitialisee = false ;
 
private ColumnConfig phenologieObservation;
/**
* Constructeur sans arguments (privé car ne doit pas être utilisé)
161,9 → 134,7
setId("x-list-obs");
setHeader(true);
setHeader(true);
// on place la barre de pagination
bt = new BarrePaginationVue(this);
bt.setLabelElement("Observations");
258,18 → 229,12
public String render(Object value, CellMetadata cellMetadata,
Record record, int rowIndex, int colNum, Store store) {
if(value == null || value.equals("null") || value.equals("000null") || value.equals("0000-00-00 00:00:00")) {
return "" ;
}
else
{
String valeur = "";
if(value != null && !value.equals("null") && !value.equals("000null") && !value.equals("0000-00-00 00:00:00")) {
valeur = value.toString() ;
}
return value.toString() ;
return valeur;
}
} ;
Renderer dateRend = new Renderer() {
313,9 → 278,10
}
});
nomSaisiObservation = new ColumnConfig("Nom saisi", "nomSaisi_observation", 200, true, colRend);
nomRetenuObservation = new ColumnConfig("Nom retenu", "nomRetenu_observation", 200, true, colRend);
lieuObservation = new ColumnConfig("Lieu", "lieu_observation", 200, true, colRend);
referentielTaxoObservation = new ColumnConfig("Référentiel", "referentiel_taxo_observation", 15, true, colRend);
nomSaisiObservation = new ColumnConfig("Nom saisi", "nomSaisi_observation", 130, true, colRend);
nomRetenuObservation = new ColumnConfig("Nom retenu", "nomRetenu_observation", 130, true, colRend);
lieuObservation = new ColumnConfig("Lieu", "lieu_observation", 130, true, colRend);
dateObservation = new ColumnConfig("Date", "date_observation", 70, true, dateRend);
abondanceObservation = new ColumnConfig("Abondance", "abondance", 50, true, colRend);
certitudeObservation = new ColumnConfig("Identification", "certitude", 50, true, new Renderer() {
326,8 → 292,9
}
});
ordreObservation = new ColumnConfig("Ordre", "ordre_observation", 50, true, colRend);
ColumnConfig[] cm = {etatObservation, nomSaisiObservation, certitudeObservation, nomRetenuObservation, abondanceObservation, lieuObservation, dateObservation, ordreObservation};
phenologieObservation = new ColumnConfig("Phénologie", "phenologie", 40, true, colRend);
ordreObservation = new ColumnConfig("Ordre", "ordre_observation", 70, true, colRend);
ColumnConfig[] cm = {etatObservation, referentielTaxoObservation, nomSaisiObservation, certitudeObservation, nomRetenuObservation, abondanceObservation, phenologieObservation, lieuObservation, dateObservation, ordreObservation};
return cm;
}
575,7 → 542,7
if(nouvelleDonnees instanceof ListeObservation)
{
ListeObservation data = (ListeObservation) nouvelleDonnees ;
Object[][] observationData = new Object[data.size()][9];
Object[][] observationData = new Object[data.size()][11];
int i = 0 ;
if(data.size() == 0)
590,14 → 557,16
Observation obs=data.get(it.next());
observationData[i][0] = obs.getTransmis();
observationData[i][1] = obs.getNomSaisi();
observationData[i][2] = obs.getCertitude();
observationData[i][3] = obs.getNomRetenu();
observationData[i][4] = obs.getAbondance();
observationData[i][5] = Util.formaterLieu(obs, modeleLieu);
observationData[i][6] = obs.getDate();
observationData[i][7] = obs.getNumeroOrdre();
observationData[i][8] = obs.getNumeroNomenclaturalSaisi();
observationData[i][1] = obs.getCodeCourtReferentielTaxo();
observationData[i][2] = obs.getNomSaisi();
observationData[i][3] = obs.getCertitude();
observationData[i][4] = obs.getNomRetenu();
observationData[i][5] = obs.getAbondance();
observationData[i][6] = obs.getPhenologie();
observationData[i][7] = Util.formaterLieu(obs, modeleLieu);
observationData[i][8] = obs.getDate();
observationData[i][9] = obs.getNumeroOrdre();
observationData[i][10] = obs.getNumeroNomenclaturalSaisi();
i++ ;
}
634,8 → 603,12
// et on notifie de le mediateur du changement des valeurs
changerPageMaxEtCourante(pageMax,pageEncours,taillePage,pages[0]) ;
masquerChargement();
observationMediateur.obtenirListeObservation(this);
if(nbElements > 0) {
masquerChargement();
observationMediateur.obtenirListeObservation(this);
} else {
this.rafraichir(new ListeObservation(0), false);
}
}
677,10 → 650,12
private FieldDef[] getDefinitionChamps() {
// creation du store qui les contient
FieldDef defEtatObservation = new StringFieldDef("etat_observation");
FieldDef defRefTaxObservation = new StringFieldDef("referentiel_taxo_observation");
FieldDef defNomSaisiObservation = new StringFieldDef("nomSaisi_observation");
FieldDef defCertitudeObservation = new StringFieldDef("certitude");
FieldDef defNomRetenuObservation = new StringFieldDef("nomRetenu_observation");
FieldDef defAbondanceObservation = new StringFieldDef("abondance");
FieldDef defPhenologieObservation = new StringFieldDef("phenologie");
FieldDef defLieuObservation = new StringFieldDef("lieu_observation");
FieldDef defDateObservation = new StringFieldDef("date_observation");
FieldDef defOrdreObservation = new IntegerFieldDef("ordre_observation");
688,8 → 663,8
// Non affiches :
FieldDef defNumeroNomenclaturalSaisiObservation = new StringFieldDef("numeroNomenclaturalSaisi_observation");
 
FieldDef[] defTab = { defEtatObservation, defNomSaisiObservation, defCertitudeObservation, defNomRetenuObservation, defAbondanceObservation,
defLieuObservation, defDateObservation, defOrdreObservation, defNumeroNomenclaturalSaisiObservation };
FieldDef[] defTab = {defEtatObservation, defRefTaxObservation,defNomSaisiObservation, defCertitudeObservation, defNomRetenuObservation, defAbondanceObservation,
defPhenologieObservation, defLieuObservation, defDateObservation, defOrdreObservation, defNumeroNomenclaturalSaisiObservation };
return defTab;
}
/branches/v1.6-croc/src/org/tela_botanica/client/vues/observation/FormulaireSaisieObservationVue.java
92,13 → 92,13
private String numeroNom = null;
private String numeroOrdre = null;
private String codeInseeCommune = null;
private String referentielTaxo = null;
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, ABONDANCE, CERTITUDE;
DATE, LIEUDIT, STATION, MILIEU, COMMENT, COMMUNE, ESPECE, TOUT, LATITUDE, LONGITUDE, ABONDANCE, CERTITUDE, REFERENTIELTAXO, PHENOLOGIE;
@Override
public String toString() {
136,9 → 136,15
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, abondance, identification";
return "date, commune, lieu dit, station, milieu, espèce, commentaire, latitude, longitude, abondance, identification, referentiel, phenologie";
}
return TOUT.toString();
}
152,12 → 158,13
private boolean selectionEspece=false;
private boolean selectionAbondance = false;
private boolean selectionCertitude = false;
private boolean selectionPhenologie = false;
private boolean modification = false ;
private Toolbar bt = null ;
private final String VALEURS_MULTIPLES = "(Valeurs multiples)";
private final String modeleMessageModif = "commune:lieu-dit:station:milieu:latitude:longitude:date:espece:commentaire:abondance:identification";
private final String modeleMessageModif = "commune:lieu-dit:station:milieu:latitude:longitude:date:espece:commentaire:abondance:identification:referentiel:phenologie";
private boolean communeModifiee = false;
private boolean lieuDitModifie = false;
private boolean stationModifiee = false;
167,6 → 174,8
private boolean commModifie = false;
private boolean abondanceModifiee = false;
private boolean certitudeModifiee = false;
private boolean referentielTaxoModifie = false;
private boolean phenologieModifiee = false;;
private final int KEY_ALT = 18;
private final int KEY_BACKSPACE = 8;
239,6 → 248,10
private ComboBox selecteurCertitude = null;
private ComboBox selecteurReferentielTaxo = null;
private ComboBox selecteurStadePheno = null;
/**
* Constructeur sans argument (privé car ne doit pas être utilisé)
*/
253,12 → 266,12
* @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);
382,57 → 395,7
@Override
public void onAfterLayout(Container c) {
ExtElement lienCoord = Ext.get("lien_coord");
lienCoord.removeAllListeners();
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() {
@Override
public void execute(EventObject e) {
obtenirInformationCoord();
}
}) ;
ExtElement lienCarto = Ext.get("lien_carto");
lienCarto.removeAllListeners();
lienCarto.addListener("click", new EventCallback() {
 
@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");
}
surPremierAffichageCoordPanel(largeur);
}
});
455,20 → 418,30
//date.setTabIndex(5);
panneauPremierColonne.add(date, new AnchorLayoutData("55%"));
// 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();
selecteurReferentielTaxo.setCls("champ-separation");
selecteurReferentielTaxo.setLabel("Référentiel");
selecteurReferentielTaxo.setStore(Ontologies.getValeursReferentiel());
selecteurReferentielTaxo.setValue(referentielTaxo);
selecteurReferentielTaxo.setDisplayField("label") ;
selecteurReferentielTaxo.setValueField("valeur");
selecteurReferentielTaxo.setEditable(false);
selecteurReferentielTaxo.setHideTrigger(false);
selecteurReferentielTaxo.setForceSelection(true);
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.setPageSize(10); // Ne fonctionne pas
espece.setItemSelector("div.search-item-espece");
espece.setTypeAhead(true);
espece.setLoadingText("Recherche...");
espece.setHideTrigger(true);
//espece.setTabIndex(6);
 
Panel panelSeparationPp = new Panel();
panelSeparationPp.setHeight(15);
475,7 → 448,7
panelSeparationPp.setBorder(false);
panneauPremierColonne.add(panelSeparationPp);
panneauPremierColonne.add(selecteurReferentielTaxo, new AnchorLayoutData("50%"));
panneauPremierColonne.add(espece, new AnchorLayoutData("95%"));
selecteurAbondance = new ComboBox();
522,11 → 495,10
comment.setAllowBlank(true);
comment.setHeight(50);
//comment.setTabIndex(7);
panneauSecondeColonne.add(comment, new AnchorLayoutData("95%") );
Panel panelSeparationPs = new Panel();
panelSeparationPs.setHeight(15);
panelSeparationPs.setHeight(39);
panelSeparationPs.setBorder(false);
panneauSecondeColonne.add(panelSeparationPs);
541,6 → 513,16
selecteurCertitude.setForceSelection(false);
panneauSecondeColonne.add(selecteurCertitude, new AnchorLayoutData("50%"));
selecteurStadePheno = new ComboBox();
selecteurStadePheno.setLabel("Phénologie");
selecteurStadePheno.setStore(Ontologies.getValeursPhenologie());
selecteurStadePheno.setDisplayField("label") ;
selecteurStadePheno.setValueField("valeur");
selecteurStadePheno.setEditable(true);
selecteurStadePheno.setHideTrigger(false);
selecteurStadePheno.setForceSelection(false);
panneauSecondeColonne.add(selecteurStadePheno, new AnchorLayoutData("50%"));
if (Window.getClientWidth() > Window.getClientHeight() || Window.getClientWidth() < 800) {
panneauIntermediaire.add(panneauPremierColonne, new ColumnLayoutData(.5));
panneauIntermediaire.add(panneauSecondeColonne, new ColumnLayoutData(.5));
547,8 → 529,7
}
else {
panneauIntermediaire.add(panneauPremierColonne);
panneauIntermediaire.add(panneauSecondeColonne);
panneauIntermediaire.add(panneauSecondeColonne);
}
panneauFormulaire.add(panneauIntermediaire);
569,8 → 550,7
bt.addSpacer() ;
bt.addText("Mode de saisie ") ;
bt.addField(selecteurMode) ;
if (Ext.isIE()) {
panneauPremierColonne.setButtonAlign(Position.RIGHT);
panneauPremierColonne.addButton(boutonOK);
577,15 → 557,12
panneauSecondeColonne.setButtonAlign(Position.LEFT);
panneauPremierColonne.addButton(boutonAnnuler);
}
else {
else {
panneauFormulaire.addButton(boutonOK);
panneauFormulaire.addButton(boutonAnnuler);
}
selecteurMode.addListener(new ComboBoxListenerAdapter() {
 
@Override
public void onSelect(ComboBox comboBox, Record record, int index) {
593,7 → 570,6
comboBox.setValue(record.getAsString("nom_mode"));
setModification(record.getAsString("mode")) ;
}
 
});
this.add(panneauFormulaire) ;
615,417 → 591,124
htmlPanel.doLayout();
doLayout();
}});
}
});
// on ajoute les listeners
ajouterListeners() ;
saisieTabindex();
}
private void ajouterListeners()
{
// Listener completion communne
final Rafraichissable r = this;
commune.addListener(new ComboBoxListenerAdapter() {
@Override
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();
}
});
ListenerConfig listenerConfigCommune=new ListenerConfig();
listenerConfigCommune.setDelay(200);
listenerConfigCommune.setStopPropagation(false);
listenerConfigCommune.setStopEvent(false);
commune.addKeyPressListener(new EventCallback() {
@Override
public void execute(EventObject e) {
switch(e.getKey()) {
case KEY_ALT:
case KEY_CTRL:
case KEY_DOWN:
case KEY_END:
case KEY_ESCAPE:
case KEY_HOME:
case KEY_LEFT:
case KEY_PAGEDOWN:
case KEY_PAGEUP:
case KEY_RIGHT:
case KEY_SHIFT:
case KEY_TAB:
case KEY_UP:
break;
case KEY_ENTER:
if (selectionCommune) {
communeModifiee= true;
selectionCommune=false;
}
else {
validerSaisie(Champs.COMMUNE);
// lancer mise a jour
}
break;
default:
departement="";
commune.collapse();
obtenirListeReferentielCommune();
communeModifiee= true;
break;
}
}
}, listenerConfigCommune
);
date.addKeyPressListener(new EventCallback() {
 
@Override
public void execute(EventObject e) {
// TODO Auto-generated method stub
switch(e.getKey()) {
case KEY_ALT:
case KEY_CTRL:
case KEY_DOWN:
case KEY_END:
case KEY_ESCAPE:
case KEY_HOME:
case KEY_LEFT:
case KEY_PAGEDOWN:
case KEY_PAGEUP:
case KEY_RIGHT:
case KEY_SHIFT:
case KEY_TAB:
if(date.getRawValue().equals(VALEURS_MULTIPLES)) {
date.clearInvalid();
}
case KEY_UP:
break;
case KEY_ENTER:
validerSaisie(Champs.DATE);
break;
default:
dateModifiee = true;
}
private void surPremierAffichageCoordPanel(final double largeur) {
ExtElement lienCoord = Ext.get("lien_coord");
lienCoord.removeAllListeners();
lienCoord.addListener("click", new EventCallback() {
@Override
public void execute(EventObject e) {
coordPanel.setVisible(!coordPanel.isVisible());
if(Ext.isIE()) {
latitude.focus();
}
});
date.addListener(new DatePickerListenerAdapter() {
 
@Override
public void onSelect(DatePicker dataPicker, Date date) {
dateModifiee = true;
}
});
ListenerConfig listenerConfigAutocompletion=new ListenerConfig();
listenerConfigAutocompletion.setDelay(200);
listenerConfigAutocompletion.setStopPropagation(false);
listenerConfigAutocompletion.setStopEvent(false);
 
// Listener completion espece
espece.addListener(new ComboBoxListenerAdapter() {
@Override
public void onSelect(ComboBox comboBox, Record record, int index) {
espece.setValue(record.getAsString("nom"));
numeroNom=record.getAsString("numeroNom");
selectionEspece=true;
observationMediateur.obtenirImageInformationExternes(numeroNom);
}
});
 
ListenerConfig listenerConfigEspece=new ListenerConfig();
listenerConfigEspece.setDelay(10);
listenerConfigEspece.setStopPropagation(false);
listenerConfigEspece.setStopEvent(false);
 
CarnetEnLigneMediateur.fireResize();
}
}) ;
espece.addKeyPressListener(new EventCallback() {
@Override
public void execute(EventObject e) {
switch(e.getKey()) {
case KEY_ALT:
case KEY_CTRL:
case KEY_DOWN:
case KEY_END:
case KEY_ESCAPE:
case KEY_HOME:
case KEY_LEFT:
case KEY_PAGEDOWN:
case KEY_PAGEUP:
case KEY_RIGHT:
case KEY_SHIFT:
case KEY_TAB:
case KEY_UP:
break;
case KEY_ENTER:
if(selectionEspece) {
especeModifiee = true;
selectionEspece=false;
}
else {
validerSaisie(Champs.ESPECE);
}
break;
default:
numeroNom="";
obtenirListeReferentielNom();
especeModifiee = true;
break;
}
ExtElement lienCartoCoord = Ext.get("lien_carto_coord");
lienCartoCoord.removeAllListeners();
lienCartoCoord.addListener("click", new EventCallback() {
@Override
public void execute(EventObject e) {
obtenirInformationCoord();
}
}) ;
ExtElement lienCarto = Ext.get("lien_carto");
lienCarto.removeAllListeners();
lienCarto.addListener("click", new EventCallback() {
 
}
}, listenerConfigEspece
);
comment.addKeyPressListener(new EventCallback() {
 
@Override
public void execute(EventObject e) {
switch(e.getKey()) {
case KEY_ALT:
case KEY_CTRL:
case KEY_DOWN:
case KEY_END:
case KEY_ESCAPE:
case KEY_HOME:
case KEY_LEFT:
case KEY_PAGEDOWN:
case KEY_PAGEUP:
case KEY_RIGHT:
case KEY_SHIFT:
case KEY_TAB:
case KEY_UP:
break;
 
default:
commModifie = true;
}
}
});
tCoord = new Timer() {
 
@Override
public void run() {
double[] coord = coordonneesValides();
if(!rechercheCommuneEnCours && coord != null && (longModifiee || latModifiee)) {
rechercheCommuneEnCours = true;
Ext.get(lienSelectionCommune.getElement()).mask("recherche");
observationMediateur.obtenirInformationCoord(r,LatLng.newInstance(coord[0], coord[1]));
}
}
@Override
public void execute(EventObject e) {
};
latitude.addKeyPressListener(new EventCallback() {
 
@Override
public void execute(EventObject e) {
switch(e.getKey()) {
case KEY_ALT:
case KEY_CTRL:
case KEY_DOWN:
case KEY_END:
case KEY_ESCAPE:
case KEY_HOME:
case KEY_LEFT:
case KEY_PAGEDOWN:
case KEY_PAGEUP:
case KEY_RIGHT:
case KEY_SHIFT:
case KEY_TAB:
case KEY_UP:
break;
case KEY_ENTER:
validerSaisie(Champs.LATITUDE);
break;
 
default:
latModifiee = true;
tCoord.cancel();
tCoord.schedule(250);
}
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) {
longitude.addKeyPressListener(new EventCallback() {
 
@Override
public void execute(EventObject e) {
switch(e.getKey()) {
case KEY_ALT:
case KEY_CTRL:
case KEY_DOWN:
case KEY_END:
case KEY_ESCAPE:
case KEY_HOME:
case KEY_LEFT:
case KEY_PAGEDOWN:
case KEY_PAGEUP:
case KEY_RIGHT:
case KEY_SHIFT:
case KEY_UP:
case KEY_TAB:
break;
case KEY_ENTER:
validerSaisie(Champs.LONGITUDE);
break;
 
default:
longModifiee = true;
tCoord.cancel();
tCoord.schedule(250);
}
}
});
int largeurN = (int)largeur;
selecteurAbondance.addListener(new ComboBoxListenerAdapter() {
 
@Override
public void onSelect(ComboBox comboBox, Record record, int index) {
selectionAbondance=true;
abondanceModifiee = true;
}
});
latitude.setWidth(largeurN+"px");
longitude.setWidth(largeurN+"px");
lienSelectionCommune.setWidth(largeurN+"px");
}
}
selecteurAbondance.addKeyPressListener(new EventCallback() {
private void ajouterListeners()
{
// Listener completion communne
final Rafraichissable r = this;
ListenerConfig listenerConfigCommune=new ListenerConfig();
listenerConfigCommune.setDelay(200);
listenerConfigCommune.setStopPropagation(false);
listenerConfigCommune.setStopEvent(false);
 
@Override
public void execute(EventObject e) {
switch(e.getKey()) {
case KEY_ALT:
case KEY_CTRL:
case KEY_DOWN:
case KEY_END:
case KEY_ESCAPE:
case KEY_HOME:
case KEY_LEFT:
case KEY_PAGEDOWN:
case KEY_PAGEUP:
case KEY_RIGHT:
case KEY_SHIFT:
case KEY_TAB:
case KEY_UP:
break;
case KEY_ENTER:
if(!selectionAbondance) {
validerSaisie(Champs.ABONDANCE);
} else {
selectionAbondance = false;
}
break;
date.addListener(new DatePickerListenerAdapter() {
 
default:
selecteurAbondance.setRawValue(selecteurAbondance.getRawValue());
selecteurAbondance.setValue(selecteurAbondance.getRawValue());
abondanceModifiee = true;
selectionAbondance = false;
break;
}
}
});
@Override
public void onSelect(DatePicker dataPicker, Date date) {
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);
selecteurCertitude.addListener(new ComboBoxListenerAdapter() {
tCoord = new Timer() {
 
@Override
public void onSelect(ComboBox comboBox, Record record, int index) {
selectionCertitude=true;
certitudeModifiee = true;
}
});
@Override
public void run() {
double[] coord = coordonneesValides();
if(!rechercheCommuneEnCours && coord != null && (longModifiee || latModifiee)) {
rechercheCommuneEnCours = true;
Ext.get(lienSelectionCommune.getElement()).mask("recherche");
observationMediateur.obtenirInformationCoord(r,LatLng.newInstance(coord[0], coord[1]));
}
}
selecteurCertitude.addKeyPressListener(new EventCallback() {
 
@Override
public void execute(EventObject e) {
switch(e.getKey()) {
case KEY_ALT:
case KEY_CTRL:
case KEY_DOWN:
case KEY_END:
case KEY_ESCAPE:
case KEY_HOME:
case KEY_LEFT:
case KEY_PAGEDOWN:
case KEY_PAGEUP:
case KEY_RIGHT:
case KEY_SHIFT:
case KEY_TAB:
case KEY_UP:
break;
case KEY_ENTER:
if(!selectionCertitude) {
validerSaisie(Champs.CERTITUDE);
} else {
selectionCertitude = false;
}
break;
 
default:
selecteurCertitude.setRawValue(selecteurCertitude.getRawValue());
selecteurCertitude.setValue(selecteurCertitude.getRawValue());
certitudeModifiee = true;
selectionCertitude = false;
break;
}
}
});
 
};
ajouterListenerChampEvenementsClavier(commune, listenerConfigCommune);
ajouterListenerChampEvenementsClavier(date);
ajouterListenerChampEvenementsClavier(selecteurReferentielTaxo);
ajouterListenerChampEvenementsClavier(espece, listenerConfigEspece);
ajouterListenerChampEvenementsClavier(comment);
ajouterListenerChampEvenementsClavier(latitude);
ajouterListenerChampEvenementsClavier(longitude);
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) {
if(modification) {
if(masseModification) {
modifierObservationEnMasse(null);
1036,17 → 719,12
else {
ajouterObservation();
}
}
}
});
boutonAnnuler.addListener(new ButtonListenerAdapter() {
boutonAnnuler.addListener(new ButtonListenerAdapter() {
@Override
public void onClick(Button button, EventObject e) {
public void onClick(Button button, EventObject e) {
if(modification)
{
supprimerObservation() ;
1055,19 → 733,251
{
raz();
}
}
}
});
this.addListener(new ContainerListenerAdapter() {
@Override
public void onAfterLayout(Container self) {
commune.focus();
}
});
});
}
private void ajouterListenerChampsCombobox() {
commune.addListener(new ComboBoxListenerAdapter() {
@Override
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() {
@Override
public void onSelect(ComboBox comboBox, Record record, int index) {
referentielTaxo = record.getAsString("valeur");
observationMediateur.setRefTaxSelectionne(index);
referentielTaxoModifie = true;
}
});
espece.addListener(new ComboBoxListenerAdapter() {
@Override
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() {
@Override
public void onSelect(ComboBox comboBox, Record record, int index) {
selectionAbondance=true;
abondanceModifiee = true;
}
});
selecteurCertitude.addListener(new ComboBoxListenerAdapter() {
 
@Override
public void onSelect(ComboBox comboBox, Record record, int index) {
selectionCertitude=true;
certitudeModifiee = true;
}
});
selecteurStadePheno.addListener(new ComboBoxListenerAdapter() {
@Override
public void onSelect(ComboBox comboBox, Record record, int index) {
selectionPhenologie=true;
phenologieModifiee = true;
}
});
}
private void ajouterListenerChampEvenementsClavier(final TextField champ) {
champ.addKeyPressListener(new EventCallback() {
@Override
public void execute(EventObject e) {
surEvenementClavier(e, champ);
}
});
}
private void ajouterListenerChampEvenementsClavier(final TextField champ, final ListenerConfig config) {
champ.addKeyPressListener(new EventCallback() {
@Override
public void execute(EventObject e) {
surEvenementClavier(e, champ);
}
}, config);
}
private void surEvenementClavier(EventObject e, TextField champ) {
switch(e.getKey()) {
case KEY_ALT:
case KEY_CTRL:
case KEY_DOWN:
case KEY_END:
case KEY_ESCAPE:
case KEY_HOME:
case KEY_LEFT:
case KEY_PAGEDOWN:
case KEY_PAGEUP:
case KEY_RIGHT:
case KEY_SHIFT:
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);
} else {
selectionPhenologie = false;
}
}
if(champ.equals(selecteurCertitude)) {
if(!selectionCertitude) {
validerSaisie(Champs.CERTITUDE);
} else {
selectionCertitude = false;
}
}
if(champ.equals(selecteurAbondance)) {
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(espece)) {
if(selectionEspece) {
especeModifiee = true;
selectionEspece=false;
}
else {
validerSaisie(Champs.ESPECE);
}
}
if(champ.equals(selecteurReferentielTaxo)) {
validerSaisie(Champs.REFERENTIELTAXO);
}
if(champ.equals(date)) {
validerSaisie(Champs.DATE);
}
if(champ.equals(commune)) {
if(champ.equals(commune)) {
if (selectionCommune) {
communeModifiee= true;
selectionCommune=false;
}
else {
validerSaisie(Champs.COMMUNE);
}
}
}
}
private void gererEvenementClavierDefaut(TextField champ) {
//TODO: faire un switch ou une enum
if(champ.equals(selecteurStadePheno)) {
selecteurStadePheno.setRawValue(selecteurStadePheno.getRawValue());
selecteurStadePheno.setValue(selecteurStadePheno.getRawValue());
phenologieModifiee = true;
selectionPhenologie = false;
}
if(champ.equals(selecteurCertitude)) {
selecteurCertitude.setRawValue(selecteurCertitude.getRawValue());
selecteurCertitude.setValue(selecteurCertitude.getRawValue());
certitudeModifiee = true;
selectionCertitude = false;
}
if(champ.equals(selecteurAbondance)) {
selecteurAbondance.setRawValue(selecteurAbondance.getRawValue());
selecteurAbondance.setValue(selecteurAbondance.getRawValue());
abondanceModifiee = true;
selectionAbondance = false;
}
if(champ.equals(longitude)) {
longModifiee = true;
tCoord.cancel();
tCoord.schedule(250);
}
if(champ.equals(latitude)) {
latModifiee = true;
tCoord.cancel();
tCoord.schedule(250);
}
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();
obtenirListeReferentielCommune();
communeModifiee= true;
}
}
 
/**
* Validation de la saisie
*/
1076,7 → 986,7
if(modification) {
if(masseModification) {
modifierObservationEnMasse(champs);
modifierObservationEnMasse(champs);
} else {
modifierObservation();
}
1144,16 → 1054,14
}
// si l'on a reçu une liste du référentiel nom (complétion referentiel nom)
// si l'on a reçu une liste du référentiel nom (complétion referentiel nom)
if(nouvelleDonnees instanceof ListeReferentielNom)
{
ListeReferentielNom data = (ListeReferentielNom) nouvelleDonnees ;
Object[][] nomData = new Object[data.size()][3];
int i = 0 ;
 
// on la parse et on récupère les informations quiç nous interessent
// on la parse et on récupère les informations qui nous interessent
for (Iterator it = data.keySet().iterator(); it.hasNext();)
{
1200,8 → 1108,6
calculerAfficherDifferences(listeObs);
}
// Sur Mise à jour ou suppression d'une suppression ?
if(nouvelleDonnees instanceof String)
{
String str = (String)nouvelleDonnees ;
1299,7 → 1205,6
}
 
private void rafraichirCommuneEtCoord(EntiteGeographiqueObservation infosCom) {
;
// on ne remplace la commune que si le champ était vide
if(commune.getRawValue() == null || commune.getRawValue().equals("")) {
rafraichirCommune(infosCom);
1328,13 → 1233,12
}
 
public void obtenirListeReferentielNom() {
// FIXME : trouver un autre moyen que le hack "/*" pour rechercher les taxons lors de la saisie d'un espace apres le genre
String esp=espece.getText().replaceAll(" ","/*");
esp=esp.replaceAll("%","");
String referentiel = this.referentielTaxo;
observationMediateur.obtenirListeReferentielNom(this,esp);
observationMediateur.obtenirListeReferentielNom(this,referentiel ,esp);
}
protected void obtenirReferentielStation() {
1357,9 → 1261,7
return;
}
if(departement != null) {
// TODO : regler le probleme a la base plutot que ce patch
if(departement != null) {
if(departement.equals("000null") || departement.equals("")) {
String[] depCom = commune.getText().split(" ");
if(depCom.length > 1) {
1383,22 → 1285,24
}
}
}
 
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);
String[] coords = getValeurCoordonnees();
obs.setLatitude(coords[0]);
obs.setLongitude(coords[1]);
 
obs.setAbondance(getAbondance());
obs.setCertitude(getCertitude());
obs.setPhenologie(getPhenologie());
obs.setReferentielTaxo(Ontologies.getInfosReferentielNomParCode(referentielTaxo).getCodeVersionComplet());
observationMediateur.ajouterObservation(obs);
}
 
private void modifierObservation() {
if(!Util.verifierDateFormatCel(date.getRawValue()) && !date.getRawValue().equals("")) {
1442,15 → 1346,18
obs.setAbondance(getAbondance());
obs.setCertitude(getCertitude());
obs.setPhenologie(getPhenologie());
obs.setReferentielTaxo(getReferentielTaxo());
observationMediateur.modifierObservation(obs);
 
selecteurMode.setValue("création");
setModification("false");
}
private void modifierObservationEnMasse(Champs champModifie) {
//TODO: factoriser
String communeM = null;
String departementM = null;
String numNomSelM = null;
1464,6 → 1371,8
String longM = null;
String abondanceM = null;
String certitudeM = null;
String referentielTaxoM = null;
String phenologieM = null;
String champs = modeleMessageModif;
1560,6 → 1469,18
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(",", "");
1576,6 → 1497,8
obs.setLongitude(longM);
obs.setAbondance(abondanceM);
obs.setCertitude(certitudeM);
obs.setReferentielTaxo(referentielTaxoM);
obs.setPhenologie(phenologieM);
if(Window.confirm(message)) {
observationMediateur.modifierObservationEnMasse(obs);
reinitialiserValeurModifiees();
1583,8 → 1506,7
}
}
private void supprimerObservation() {
private void supprimerObservation() {
observationMediateur.supprimerObservation(this, numeroOrdre);
}
1672,6 → 1594,18
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();
selecteurReferentielTaxo.setValue(referentielTaxo);
} else {
referentielTaxo = "";
selecteurReferentielTaxo.setRawValue(VALEURS_MULTIPLES);
}
}
1683,8 → 1617,6
public void raz(Champs champs)
{
switch (champs) {
case DATE:
date.reset() ;
break;
1705,7 → 1637,6
comment.reset() ;
break;
 
 
case COMMUNE:
commune.reset() ;
departement ="";
1737,6 → 1668,14
selecteurCertitude.setValue("");
break;
case REFERENTIELTAXO:
selecteurReferentielTaxo.setValue("");
break;
case PHENOLOGIE:
selecteurStadePheno.setValue("");
break;
case TOUT:
commune.reset();
date.reset() ;
1751,6 → 1690,9
espece.reset();
selecteurAbondance.clearValue();
selecteurCertitude.clearValue();
selecteurReferentielTaxo.clearValue();
selecteurStadePheno.clearValue();
referentielTaxo = "";
numeroNom = "" ;
numeroOrdre = "";
afficherIndicationCommune(null);
1834,6 → 1776,8
String lon = null;
String abondance = null;
String certitude = null;
String referentielTaxo = null;
String phenologie = null;
String ordreObs = "";
1851,6 → 1795,8
lon = comparerDifferencesChamps(lon, obsEnCours.getLongitude());
abondance = comparerDifferencesChamps(abondance, obsEnCours.getAbondance());
certitude = comparerDifferencesChamps(certitude, obsEnCours.getCertitude());
referentielTaxo = comparerDifferencesChamps(referentielTaxo, obsEnCours.getReferentielTaxo());
phenologie = comparerDifferencesChamps(phenologie, obsEnCours.getPhenologie());
ordreObs += obsEnCours.getNumeroOrdre()+",";
}
1861,6 → 1807,8
obs.setLongitude(lon);
obs.setAbondance(abondance);
obs.setCertitude(certitude);
obs.setReferentielTaxo(referentielTaxo);
obs.setPhenologie(phenologie);
rafraichir(obs, false);
}
1892,6 → 1840,8
longModifiee = false;
abondanceModifiee = false;
certitudeModifiee = false;
referentielTaxoModifie = false;
phenologieModifiee = false;
}
public void saisieTabindex()
1922,8 → 1872,9
espece.setTabIndex(12);
selecteurCertitude.setTabIndex(13);
selecteurAbondance.setTabIndex(14);
boutonOK.setTabIndex(15);
boutonAnnuler.setTabIndex(16);
selecteurStadePheno.setTabIndex(15);
boutonOK.setTabIndex(16);
boutonAnnuler.setTabIndex(17);
}
1937,7 → 1888,7
}
private void obtenirInformationCommune() {
observationMediateur.obtenirInformationCommune(getCommuneSansDepartement(), obtenirDepartementAPartirChampCommune());
observationMediateur.obtenirInformationCommune(getCommuneSansDepartement(), Util.obtenirDepartementAPartirChaineCommune(departement, commune.getText()));
}
public double[] coordonneesValides() {
1967,52 → 1918,6
}
}
private String obtenirDepartementAPartirChampCommune() {
String dep = "";
if(departement == null) {
departement = "";
}
if(departement.equals("000null") || departement.equals("")) {
String[] depCom = commune.getText().split(" ");
if(depCom.length > 1) {
dep = depCom[1].replace('(', ' ');
} else {
dep = "";
}
} else {
dep = departement;
}
dep = dep.replace(')', ' ');
dep = dep.trim();
dep = dep.replace('\\',' ');
dep = dep.trim();
try
{
int nDep = Integer.parseInt(dep);
if(nDep > 0 && nDep < 110) {
departement = dep ;
}
if(departement.length() == 4) {
departement = "0"+departement;
}
departement = departement.substring(0,2);
}
catch(NumberFormatException e)
{
departement = "" ;
}
return departement;
}
public String getCommune() {
String valeurCommune = "";
2024,7 → 1929,7
}
public String getDepartement() {
return obtenirDepartementAPartirChampCommune();
return Util.obtenirDepartementAPartirChaineCommune(departement, commune.getText());
}
public String getCommuneSansDepartement() {
2031,35 → 1936,38
return Util.supprimerNumDepartementChaineLocalite(getCommune());
}
//TODO fusionner les deux fonctions et les objets qu'elles utilisent
// car leur code est à 99% identique
public String getAbondance() {
String valeurAbondance = selecteurAbondance.getValue();
String valeurAbondanceBrute = selecteurAbondance.getRawValue();
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
// caractère
if(valeurAbondance.equals(valeurAbondanceBrute.substring(0, valeurAbondanceBrute.length() -1))) {
valeurAbondance = selecteurAbondance.getRawValue();
if(valeurChamp != null && valeurChamp.length() > 0) {
if(valeurChamp.equals(valeurChampBrute.substring(0, valeurChampBrute.length() -1))) {
valeurChamp = champ.getRawValue();
}
}
return valeurAbondance;
return valeurChamp;
}
 
public String getAbondance() {
return getValeurChampListeLibre(selecteurAbondance);
}
public String getCertitude() {
String valeurCertitude = selecteurCertitude.getValue();
String valeurCertitudeBrute = selecteurCertitude.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
// caractère
if(valeurCertitude.equals(valeurCertitudeBrute.substring(0, valeurCertitudeBrute.length() -1))) {
valeurCertitude = selecteurCertitude.getRawValue();
}
return valeurCertitude;
return getValeurChampListeLibre(selecteurCertitude);
}
public String getPhenologie() {
return getValeurChampListeLibre(selecteurStadePheno);
}
public String getReferentielTaxo() {
String codeCourt = getValeurChampListeLibre(selecteurReferentielTaxo);
return Ontologies.getInfosReferentielNomParCode(codeCourt).getCodeVersionComplet();
}
 
public boolean communeInitialisee() {
return communeModifiee;
/branches/v1.6-croc/src/org/tela_botanica/client/interfaces/FournisseurListe.java
5,17 → 5,13
* implémentent cette interface.
* Elle permet de faire transiter le rafraichissable jusqu'au DAO et d'appeler sa méthode rafraichir un fois
* les données reçues, tout celà en préservant bien la séparation des rôles car les classes qui font transiter
* le rafraichissable ne connaissent que cette interface et pas le restye de l'objet
* le rafraichissable ne connaissent que cette interface et pas le reste de l'objet
* @author aurelien
*
*/
public interface FournisseurListe {
/**
* Méthode de mise à jour d'un objet
* @param nouvelleDonnees Un objet de n'importe quel type (programmation générique) qui contient les données de mise à jour
* @param repandreRaffraichissement indique si l'élement doit notifier d'autres éléments de sa mise à jour
*/
public void obtenirListeDonnees(final Rafraichissable r, String critere);
public void obtenirListeDonnees(Rafraichissable r, String referentiel, String critere);
 
}
/branches/v1.6-croc/src/org/tela_botanica/client/cel2.java
16,26 → 16,24
* This is the entry point method.
*/
@Override
public void onModuleLoad() {
public void onModuleLoad() {
CarnetEnLigneMediateur carnetEnLigneMediateur= CarnetEnLigneMediateur.Instance();
if(GWT.isScript()) { // Nav
new Viewport(carnetEnLigneMediateur.getPanneauPrincipalCarnetEnLigne()) ;
} else { // Hosted
RootPanel.get().add(carnetEnLigneMediateur.getPanneauPrincipalCarnetEnLigne());
}
CarnetEnLigneMediateur carnetEnLigneMediateur= CarnetEnLigneMediateur.Instance();
if(GWT.isScript()) { // Nav
new Viewport(carnetEnLigneMediateur.getPanneauPrincipalCarnetEnLigne()) ;
} else { // Hosted
RootPanel.get().add(carnetEnLigneMediateur.getPanneauPrincipalCarnetEnLigne());
carnetEnLigneMediateur.getEtatUtilisateur() ;
 
Timer t = new Timer() {
@Override
public void run() {
Ext.get("loading").hide();
}
carnetEnLigneMediateur.getEtatUtilisateur() ;
 
Timer t = new Timer() {
@Override
public void run() {
Ext.get("loading").hide();
}
};
t.schedule(3000);
};
t.schedule(3000);
}
}
/branches/v1.6-croc/src/org/tela_botanica/client/modeles/dao/ListeReferentielNomAsynchroneDAO.java
56,16 → 56,11
* @param r le rafraichissable qui demande la mise à jour
* @param criteres un string contenant le terme a rechercher
*/
@Override
public void obtenirListeDonnees(final Rafraichissable r, final String critere)
public void obtenirListeDonnees(final Rafraichissable r,final String referentiel, final String critere)
{
ListeReferentielNom referentielNomDataFromCache=null;
// En cache ?
if ((referentielNomDataFromCache=getFromCache(critere))!=null) {
r.rafraichir(referentielNomDataFromCache,true);
76,7 → 71,7
// On vérifie si un genre et une espèce sont demandées
// et ajoute le / manuellement car sinon il devient urlencode
String[] criteres =critere.split("/");
String urlParams = "/NameSearch/";
String urlParams = "/NameSearch/"+referentiel+"/";
if(criteres.length > 1) {
String critere1 = criteres[0];
String critere2 = criteres[1];
143,14 → 138,16
}
private void addToCache(String query, ListeReferentielNom result) {
cache.put(query.toLowerCase(),result);
}
@Override
public void obtenirListeDonnees(Rafraichissable r, String critere) {
obtenirListeDonnees(r, "bdtfx", critere);
}
private void addToCache(String query, ListeReferentielNom result) {
cache.put(query.toLowerCase(),result);
}
 
private ListeReferentielNom getFromCache (String query) {
return cache.get(query.toLowerCase());
}
 
 
private ListeReferentielNom getFromCache (String query) {
return cache.get(query.toLowerCase());
}
}
/branches/v1.6-croc/src/org/tela_botanica/client/modeles/dao/ListeReferentielCommuneAsynchroneDAO.java
76,73 → 76,71
}
else {
RequestBuilder rb = new RequestBuilder(RequestBuilder.GET, Configuration.getServiceBaseUrl() + "/LocationSearch/" + URL.encodeComponent(critere));
try {
rb.sendRequest(null, new RequestCallback() {
 
@Override
public void onError(final Request request, final Throwable exception) {
// TODO Auto-generated method stub
}
 
@Override
public void onResponseReceived(final Request request,
final Response response) {
final ListeReferentielCommune referentielCommuneData;
final JSONValue responseValue = JSONParser.parse(response.getText());
JSONArray reponse = null;
 
// si c'est un tableau
if ((reponse = responseValue.isArray()) != null) {
RequestBuilder rb = new RequestBuilder(RequestBuilder.GET, Configuration.getServiceBaseUrl() + "/LocationSearch/" + URL.encodeComponent(critere));
try {
rb.sendRequest(null, new RequestCallback() {
@Override
public void onError(final Request request, final Throwable exception) {
// TODO Auto-generated method stub
JSONArray communes;
final int taillemax = reponse.size();
}
@Override
public void onResponseReceived(final Request request,
final Response response) {
referentielCommuneData = new ListeReferentielCommune(taillemax);
final ListeReferentielCommune referentielCommuneData;
final JSONValue responseValue = JSONParser.parse(response.getText());
JSONArray reponse = null;
// si c'est un tableau
if ((reponse = responseValue.isArray()) != null) {
JSONArray communes;
final int taillemax = reponse.size();
referentielCommuneData = new ListeReferentielCommune(taillemax);
for (int i = 0; i < taillemax; i++) {
if ((communes = reponse.get(i).isArray()) != null) {
String commune = ((JSONString) communes.get(0)).stringValue();
String departement = ((JSONString) communes.get(1)).stringValue();
ReferentielCommune com = new ReferentielCommune(commune, departement);
referentielCommuneData.put(com.getCommune() + com.getDepartement(), com);
}
}
} else {
referentielCommuneData = new ListeReferentielCommune(0);
}
addToCache(critere, referentielCommuneData);
r.rafraichir(referentielCommuneData, true);
for (int i = 0; i < taillemax; i++) {
if ((communes = reponse.get(i).isArray()) != null) {
String commune = ((JSONString) communes.get(0)).stringValue();
String departement = ((JSONString) communes.get(1)).stringValue();
ReferentielCommune com = new ReferentielCommune(commune, departement);
referentielCommuneData.put(com.getCommune() + com.getDepartement(), com);
}
}
} else {
referentielCommuneData = new ListeReferentielCommune(0);
}
addToCache(critere, referentielCommuneData);
r.rafraichir(referentielCommuneData, true);
}
}
});
});
} catch (RequestException e) {
e.printStackTrace();
}
} catch (RequestException e) {
e.printStackTrace();
}
} // Fin else si pas de cache
}
private void addToCache(String query, ListeReferentielCommune result) {
cache.put(query.toLowerCase(),result);
}
/**
* Fonction à implémenter dans le futur, lors de l'utilisation de plusieurs
* référentiels de localité
*/
@Override
public void obtenirListeDonnees(Rafraichissable r, String referentiel, String critere) {
// TODO Auto-generated method stub
}
private void addToCache(String query, ListeReferentielCommune result) {
cache.put(query.toLowerCase(),result);
}
 
private ListeReferentielCommune getFromCache (String query) {
return cache.get(query.toLowerCase());
}
 
 
private ListeReferentielCommune getFromCache (String query) {
return cache.get(query.toLowerCase());
}
}
/branches/v1.6-croc/src/org/tela_botanica/client/modeles/dao/ObservationAsynchroneDAO.java
65,7 → 65,9
+"&latitude="+URL.encodeComponent(""+obs.getLatitude())
+"&longitude="+URL.encodeComponent(""+obs.getLongitude())
+"&abondance="+URL.encodeComponent(""+obs.getAbondance())
+"&certitude="+URL.encodeComponent(""+obs.getCertitude());
+"&certitude="+URL.encodeComponent(""+obs.getCertitude())
+"&phenologie="+URL.encodeComponent(""+obs.getPhenologie())
+"&nom_referentiel="+URL.encodeComponent(""+obs.getReferentielTaxo());
try {
rb.sendRequest(postData, new RequestCallback() {
115,7 → 117,9
+"&latitude="+URL.encodeComponent(""+obs.getLatitude())
+"&longitude="+URL.encodeComponent(""+obs.getLongitude())
+"&abondance="+URL.encodeComponent(""+obs.getAbondance())
+"&certitude="+URL.encodeComponent(""+obs.getCertitude());
+"&certitude="+URL.encodeComponent(""+obs.getCertitude())
+"&phenologie="+URL.encodeComponent(""+obs.getPhenologie())
+"&nom_referentiel="+URL.encodeComponent(""+obs.getReferentielTaxo());
try {
rb.sendRequest(postData, new RequestCallback() {
/branches/v1.6-croc/src/org/tela_botanica/client/modeles/dao/ListeObservationAsynchroneDAO.java
187,6 → 187,14
if(obs.getCertitude() != null) {
postData += "&certitude="+URL.encodeComponent(""+obs.getCertitude());
}
if(obs.getPhenologie() != null) {
postData += "&phenologie="+URL.encodeComponent(""+obs.getPhenologie());
}
if(obs.getReferentielTaxo() != null) {
postData += "&nom_referentiel="+URL.encodeComponent(""+obs.getReferentielTaxo());
}
 
try {
rb.sendRequest(postData, new RequestCallback() {
/branches/v1.6-croc/src/org/tela_botanica/client/modeles/dao/ImageGeneriqueVueAsynchroneDAO.java
40,13 → 40,13
* @param numeroNomenclaturalSaisiObservation
*/
public void obtenirURLImage(final Rafraichissable r, String numeroNomenclaturalSaisiObservation) {
public void obtenirURLImage(final Rafraichissable r, String referentielTaxo, String numeroNomenclaturalSaisiObservation) {
String referentielDefaut = Configuration.getReferentielsDispos().get(0).getCode();
referentielTaxo = (referentielTaxo != null && !referentielTaxo.isEmpty()) ? referentielTaxo : referentielDefaut;
// on envoie le get asynchrone
RequestBuilder rb = new RequestBuilder(RequestBuilder.GET,Configuration.getServiceBaseUrl()
+"/NameImage/"+numeroNomenclaturalSaisiObservation) ;
+"/NameImage/"+referentielTaxo+"/"+numeroNomenclaturalSaisiObservation) ;
try {
rb.sendRequest(null, new RequestCallback() {
/branches/v1.6-croc/src/org/tela_botanica/client/modeles/dao/ImageInformationRepartitionAsynchroneDAO.java
40,13 → 40,14
* @param numeroNomenclaturalSaisiObservation
*/
public void obtenirURLImage(final Rafraichissable r, String numeroNomenclaturalSaisiObservation) {
public void obtenirURLImage(final Rafraichissable r, String referentielTaxo, String numeroNomenclaturalSaisiObservation) {
String referentielDefaut = Configuration.getReferentielsDispos().get(0).getCode();
referentielTaxo = (referentielTaxo != null && !referentielTaxo.isEmpty()) ? referentielTaxo : referentielDefaut;
// on envoie le get asynchrone
RequestBuilder rb = new RequestBuilder(RequestBuilder.GET,Configuration.getServiceBaseUrl()
+"/NameMap/"+numeroNomenclaturalSaisiObservation) ;
+"/NameMap/"+referentielTaxo+"/"+numeroNomenclaturalSaisiObservation) ;
try {
rb.sendRequest(null, new RequestCallback() {
/branches/v1.6-croc/src/org/tela_botanica/client/modeles/objets/Configuration.java
1,6 → 1,12
package org.tela_botanica.client.modeles.objets;
 
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
import com.google.gwt.i18n.client.Dictionary;
import com.google.gwt.user.client.Window;
 
/**
* Classe chargeant certains paramètres de configuration à partir d'un fichier
49,6 → 55,8
private static String imageRedirectUrl;
private static String tailleMaxUpload;
private static List<InfosReferentielNom> referentielsDispos;
 
/**
* Constructeur sans argument
82,12 → 90,6
lienEfloreBaseUrl = Dictionary.getDictionary("configuration").get(
"lienEfloreBaseUrl");
refTax = Dictionary.getDictionary("configuration").get(
"refTax");
refTaxVersion = Dictionary.getDictionary("configuration").get(
"refTaxVersion");
formatOriginal = Dictionary.getDictionary("configuration").get(
"formatOriginal");
109,8 → 111,19
tailleMaxUpload = Dictionary.getDictionary("configuration").get(
"tailleMaxUpload");
//licence = Dictionary.getDictionary("configuration").get("licence");
referentielsDispos = parserReferentielsDispos(Dictionary.getDictionary("configuration").get(
"referentielsDispos"));
}
private List<InfosReferentielNom> parserReferentielsDispos(String chaineListeReferentiels) {
String[] tabReferentiels = chaineListeReferentiels.split(";");
List<InfosReferentielNom> referentiels = new ArrayList<InfosReferentielNom>(tabReferentiels.length);
for (int i = 0; i < tabReferentiels.length; i++) {
InfosReferentielNom infoRef = new InfosReferentielNom(tabReferentiels[i]);
referentiels.add(infoRef);
}
return referentiels;
}
 
/**
* Accesseur pour l'url de base du serveur jrest
179,14 → 192,6
return lienEfloreBaseUrl;
}
public static String getRefTax() {
return refTax;
}
public static String getRefTaxVersion() {
return refTaxVersion;
}
public static String getLicence() {
return licence;
}
218,4 → 223,8
public static String getTailleMaxUpload() {
return tailleMaxUpload;
}
public static List<InfosReferentielNom> getReferentielsDispos() {
return referentielsDispos;
}
}
/branches/v1.6-croc/src/org/tela_botanica/client/modeles/objets/InfosReferentielNom.java
New file
0,0 → 1,64
package org.tela_botanica.client.modeles.objets;
 
import com.google.gwt.user.client.Window;
 
public class InfosReferentielNom {
private String code = null;
private String version = null;
private String versionCourte = null;
private String intitule = null;
 
public InfosReferentielNom(String infosReferentiel) {
String[] codeCompletIntitule = infosReferentiel.split(",");
intitule = codeCompletIntitule[1];
String[] codeVersion = codeCompletIntitule[0].split(":");
code = codeVersion[0];
version = codeVersion[1];
versionCourte = formaterVersionCourte(version);
}
public InfosReferentielNom(String code, String version, String intitule) {
super();
this.code = code;
this.version = version;
this.intitule = intitule;
this.versionCourte = formaterVersionCourte(version);
}
private String formaterVersionCourte(String version) {
return version.replaceAll("v","");
}
public String getCodeVersionComplet() {
return code+":"+version;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
public String getIntitule() {
return intitule;
}
public void setIntitule(String intitule) {
this.intitule = intitule;
}
 
public String getVersionCourte() {
return versionCourte;
}
 
public void setVersionCourte(String versionCourte) {
this.versionCourte = versionCourte;
}
}
/branches/v1.6-croc/src/org/tela_botanica/client/modeles/objets/ReferentielNom.java
1,15 → 1,11
package org.tela_botanica.client.modeles.objets;
 
 
 
 
 
/**
*
* Classe representant un element du referentiel de nom
*
*/
 
public class ReferentielNom {
 
 
22,7 → 18,6
}
 
/**
* @param nom
* @param numeroNom
29,14 → 24,10
* @param statut
*
*/
public ReferentielNom(String nom, String numeroNom, String statut) {
this.nom = nom;
this.numeroNom = numeroNom;
this.statut = statut;
 
}
 
 
44,7 → 35,6
return nom;
}
 
 
public String getNumeroNom() {
return numeroNom;
}
/branches/v1.6-croc/src/org/tela_botanica/client/modeles/objets/Ontologies.java
1,6 → 1,8
package org.tela_botanica.client.modeles.objets;
 
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
 
import com.gwtext.client.data.SimpleStore;
import com.gwtext.client.data.Store;
7,7 → 9,10
 
public class Ontologies {
//TODO: extraire toutes ces valeurs dans des fichiers de configuration
// ou bien via l'appel d'un web service spécialisé.
private static HashMap<String, String> valeursCertitude = null;
private static List<InfosReferentielNom> listeReferentielsNoms = null;
 
public static Store getValeursCertitude() {
Object[][] valeurs = {{"Certaine","certain"},
20,15 → 25,30
}
public static Store getValeursAbondance() {
Object[][] valeurs = {{"i : un seul individu","i"},
{"r : rare (quelques pieds)","r"},
{"+ : recouvrement R < 1%","+"},
{"1 : 1% < R < 5%","1"},
{"2 : 5% < R < 25%","2"},
{"3 : 25% < R < 50%","3"},
{"4 : 50% < R < 75%","4"},
{"5 : recouvrement R > 75%","5"}
};
Object[][] valeurs = {
{"5 : recouvrement R > 75%","5"},
{"4 : 50% < R < 75%","4"},
{"3 : 25% < R < 50%","3"},
{"2 : 5% < R < 25%","2"},
{"1 : 1% < R < 5%","1"},
{"+ : recouvrement R < 1%","+"},
{"r : rare (quelques pieds)","r"},
{"i : un seul individu","i"},
{"1-5 individus","1-5"},
{"5-10 individus","5-10"},
{"10-50 individus","10-50"},
{"50-100 individus","50-100"},
{"100-500 individus","100-500"},
{">500 individus",">500"},
{"E : exceptionnel","E"},
{"RR : très rare","RR"},
{"R : rare","R"},
{"AR : assez rare","E"},
{"PC : peu commun","PC"},
{"AC : assez commun","AC"},
{"C : commun","C"},
{"CC : très commun","C"}
};
SimpleStore storeAbondance = new SimpleStore(new String[] {"label","valeur"},valeurs);
storeAbondance.load();
return storeAbondance;
46,4 → 66,61
return valeur == null ? cle : valeur;
}
public static Store getValeursReferentiel() {
List<InfosReferentielNom> listeReferentiels = Configuration.getReferentielsDispos();
Object[][] valeurs = new Object[listeReferentiels.size()][2];
int i = 0;
for (Iterator<InfosReferentielNom> iterator = listeReferentiels.iterator(); iterator
.hasNext();) {
InfosReferentielNom infosReferentielNom = iterator.next();
String[] valeur = {infosReferentielNom.getIntitule(), infosReferentielNom.getCode()};
valeurs[i] = valeur;
i++;
}
SimpleStore storeReferentiels = new SimpleStore(new String[] {"label","valeur"},valeurs);
storeReferentiels.load();
return storeReferentiels;
}
 
public static InfosReferentielNom getInfosReferentielNomParCode(String code) {
InfosReferentielNom infos = null;
List<InfosReferentielNom> listeReferentiels = Configuration.getReferentielsDispos();
for (Iterator<InfosReferentielNom> iterator = listeReferentiels.iterator(); iterator
.hasNext();) {
InfosReferentielNom infosReferentielNom = iterator.next();
if(infosReferentielNom.getCode().equals(code)) {
infos = infosReferentielNom;
break;
}
}
return infos;
}
public static Store getValeursPhenologie() {
Object[][] valeurs = {
{"00-09: germination, développement des bourgeons", "00-09"},
{"10-19: développement des feuilles", "10-19"},
{"11: par ex, environ 10% des feuilles épanouies", "11"},
{"15: par ex, environ 50% des feuilles épanouies", "15"},
{"20-29: formation de pousses latérales, tallage", "20-29"},
{"30-39: développement des tiges, croissance des rosettes", "30-39"},
{"40-49: développement des organes de propagation végétative", "40-49"},
{"50-59: apparition de l'inflorescence, épiaison", "50-59"},
{"60-69: floraison", "60-69"},
{"61 : par ex, environ 10% des fleurs épanouies", "61"},
{"65 : par ex, environ 50% des fleurs épanouies", "65"},
{"70-79: fructification", "70-79"},
{"80-89: maturité des fruits et des graines", "80-89"},
{"85: par ex, 50% des fruits matures", "85"},
{"90-99: sénescence et dormance", "90-99"},
{"91: par ex, environ 10% des feuilles jaunes", "91"},
{"95: par ex, environ 50% des feuilles jaunes", "95"}
};
SimpleStore storeAbondance = new SimpleStore(new String[] {"label","valeur"},valeurs);
storeAbondance.load();
return storeAbondance;
}
}
/branches/v1.6-croc/src/org/tela_botanica/client/modeles/objets/Observation.java
1,5 → 1,8
package org.tela_botanica.client.modeles.objets;
 
import java.util.List;
import java.util.Map;
 
import org.tela_botanica.client.util.Util;
 
import com.google.gwt.json.client.JSONObject;
27,8 → 30,13
private String latitude=null;
private String longitude=null;
private String referentielGeo=null;
private String referentielTaxo=null;
private String abondance=null;
private String certitude=null;
private String phenologie=null;
private String altitude=null;
private Map<String, String> champsEtendus=null;
 
public Observation() {
}
106,6 → 114,8
this.motsCles = Util.getValeurJsonOuVide(observation,"mots_cles");
this.abondance = Util.getValeurJsonOuVide(observation,"abondance");
this.certitude = Util.getValeurJsonOuVide(observation,"certitude");
this.phenologie = Util.getValeurJsonOuVide(observation,"phenologie");
this.setReferentielTaxo(Util.getValeurJsonOuVide(observation,"nom_referentiel"));
}
/**
287,4 → 297,60
public void setCertitude(String certitude) {
this.certitude = certitude;
}
 
public String getReferentielTaxo() {
return referentielTaxo;
}
 
public String getCodeCourtReferentielTaxo() {
String codeRef = "";
if(!getReferentielTaxo().equals("") && getReferentielTaxo().length() >= 5) {
codeRef = referentielTaxo.substring(0, 5);
}
return codeRef;
}
 
public void setReferentielTaxo(String referentielTaxo) {
this.referentielTaxo = referentielTaxo;
}
public String getPhenologie() {
return phenologie;
}
public void setPhenologie(String phenologie) {
this.phenologie = phenologie;
}
 
public String getAltitude() {
return altitude;
}
 
 
public void setAltitude(String altitude) {
this.altitude = altitude;
}
 
 
public void setValeurChampEtendu(String cle, String valeur) {
champsEtendus.put(cle, valeur);
}
 
public String getValeurChampEtendu(String cle) {
String valeur = "";
if(champsEtendus.containsKey(cle)) {
valeur = champsEtendus.get(cle);
}
return valeur;
}
public Map<String, String> getChampsEtendus() {
return champsEtendus;
}
 
 
public void setChampsEtendus(Map<String, String> champsEtendus) {
this.champsEtendus = champsEtendus;
}
}
/branches/v1.6-croc/src/org/tela_botanica/client/observation/ObservationMediateur.java
5,7 → 5,9
// TODO : systematiser les onQuelquechose, appelle depuis les vues
import org.tela_botanica.client.CarnetEnLigneMediateur;
import org.tela_botanica.client.interfaces.Rafraichissable;
import org.tela_botanica.client.modeles.objets.Configuration;
import org.tela_botanica.client.modeles.objets.EntiteGeographiqueObservation;
import org.tela_botanica.client.modeles.objets.InfosReferentielNom;
import org.tela_botanica.client.modeles.objets.ListeObservation;
import org.tela_botanica.client.modeles.objets.Observation;
import org.tela_botanica.client.modeles.objets.Utilisateur;
153,6 → 155,8
 
private com.gwtext.client.widgets.Window fenetreCarto;
public boolean changementTabProg = false;
private InfosReferentielNom refTaxSelectionne = null;
 
private Panel centre;
163,11 → 167,12
private ObservationMediateur(CarnetEnLigneMediateur carnetEnLigneMediateur )
{
this.carnetEnLigneMediateur=carnetEnLigneMediateur;
this.carnetEnLigneMediateur=carnetEnLigneMediateur;
// on crée un modèle
observationModele = ObservationModele.Instance(this);
// initialisation du référentiel par défaut
setRefTaxSelectionne(Configuration.getReferentielsDispos().get(0));
listeObservation = new ListeObservationVue(this);
listeObservation.setTitle("Observations");
273,7 → 278,7
String[] selectionListe = listeObservation.getIdSelectionnees();
if(selectionListe.length > 0) {
Observation obs = listeObservation.getCacheListeObservation().get(selectionListe[0]);
obtenirImageInformationExternes(obs.getNumeroNomenclaturalSaisi());
obtenirImageInformationExternes(obs.getCodeCourtReferentielTaxo(), obs.getNumeroNomenclaturalSaisi());
}
CarnetEnLigneMediateur.fireResize();
}
329,7 → 334,6
panneauPrincipalObservation.add(filtres,regionOuest);
panneauPrincipalObservation.add(centre,regionCentre);
}
/**
440,9 → 444,9
// Affichage de la carte de repartition correspondante
String numeroNomenclaturalSaisiObservation = obs.getNumeroNomenclaturalRetenu() ;
if(numeroNomenclaturalSaisiObservation != null && !numeroNomenclaturalSaisiObservation.isEmpty()) {
observationModele.obtenirImageInformationRepartition(informationRepartitionVue,numeroNomenclaturalSaisiObservation) ;
observationModele.obtenirImageInformationRepartition(informationRepartitionVue,obs.getCodeCourtReferentielTaxo(), numeroNomenclaturalSaisiObservation) ;
liExtVue.rafraichir(numeroNomenclaturalSaisiObservation, false);
observationModele.obtenirImageGenerique(imageGeneriqueVue,numeroNomenclaturalSaisiObservation) ;
observationModele.obtenirImageGenerique(imageGeneriqueVue,obs.getCodeCourtReferentielTaxo(), numeroNomenclaturalSaisiObservation) ;
observationModele.obtenirLiaisonImage(mvz, obs.getId()) ;
 
}
450,7 → 454,7
filtres.getArbreMotsClesObservationVue().rafraichir(obs.getMotsCles(), false);
}
public void obtenirImageInformationExternes(String numeroNomenclaturalSaisiObservation) {
public void obtenirImageInformationExternes(String referentielTaxo, String numeroNomenclaturalSaisiObservation) {
if(details.isVisible()) {
if(GWT.isScript()) {
457,8 → 461,8
masquerChargementInfosObservations() ;
}
liExtVue.rafraichir(numeroNomenclaturalSaisiObservation, false);
observationModele.obtenirImageInformationRepartition(informationRepartitionVue,numeroNomenclaturalSaisiObservation) ;
observationModele.obtenirImageGenerique(imageGeneriqueVue,numeroNomenclaturalSaisiObservation) ;
observationModele.obtenirImageInformationRepartition(informationRepartitionVue, referentielTaxo, numeroNomenclaturalSaisiObservation) ;
observationModele.obtenirImageGenerique(imageGeneriqueVue, referentielTaxo, numeroNomenclaturalSaisiObservation) ;
}
}
472,12 → 476,7
// ACCES au Modèle
// C du CRUD
/**
* TODO : afficher un message du type "observation ajouté".
* Lance la creation d'une observation
484,7 → 483,6
* @param obs : l'observation saisie
*/
public void ajouterObservation(Observation obs) {
// On rafraichit la liste d'observation
observationModele.ajouterObservation(listeObservation, obs) ;
filtres.getArbreEntiteGeographiqueObservationFiltreVue().rafraichir(obs,true) ;
492,10 → 490,7
}
// R du CRUD
/**
* Demande au modele le nombre d'Observation à afficher
* TODO : grouper cette demande avec la demande d'affichage de liste ?
637,9 → 632,9
* @param critere : les criteres de selection
*/
public void obtenirListeReferentielNom(Rafraichissable r, String critere) {
public void obtenirListeReferentielNom(Rafraichissable r,String referentiel, String critere) {
 
observationModele.obtenirListeReferentielNom(r,critere) ;
observationModele.obtenirListeReferentielNom(r, referentiel, critere) ;
}
// Etat du syteme
1173,7 → 1168,6
}
 
private void razFiltres() {
filtres.getArbreDateObservationFiltreVue().raz() ;
filtres.getArbreEntiteGeographiqueObservationFiltreVue().raz() ;
filtres.getArbreMotsClesObservationVue().raz();
1187,7 → 1181,6
}
 
public Component getListeObservation() {
return listeObservation;
}
 
1201,9 → 1194,7
if (formImportObs==null) { // lazy inst.
formImportObs = new FormulaireImportObservationVue(this);
}
formImportObs.afficher();
formImportObs.afficher();
}
 
public void setImporterObservationsAnonymes(boolean importerObservations) {
1259,4 → 1250,16
fenetreCarto.hide();
}
}
 
public InfosReferentielNom getRefTaxSelectionne() {
return refTaxSelectionne;
}
public void setRefTaxSelectionne(int index) {
refTaxSelectionne = Configuration.getReferentielsDispos().get(index);
}
public void setRefTaxSelectionne(InfosReferentielNom refTax) {
refTaxSelectionne = refTax;
}
}
/branches/v1.6-croc/src/org/tela_botanica/client/observation/ObservationModele.java
197,12 → 197,12
* @param r
* @param critere
*/
public void obtenirListeReferentielNom(Rafraichissable r, String critere) {
public void obtenirListeReferentielNom(Rafraichissable r, String referentiel, String critere) {
if (nomDAO==null) {
nomDAO=new ListeReferentielNomAsynchroneDAO(this);
}
nomDAO.obtenirListeDonnees(r, critere);
nomDAO.obtenirListeDonnees(r, referentiel, critere);
}
274,10 → 274,10
*/
 
 
public void obtenirImageInformationRepartition( Rafraichissable r,String numeroNomenclaturalSaisiObservation) {
public void obtenirImageInformationRepartition(Rafraichissable r, String referentielTaxo, String numeroNomenclaturalSaisiObservation) {
ImageInformationRepartitionAsynchroneDAO repDAO=new ImageInformationRepartitionAsynchroneDAO(this);
repDAO.obtenirURLImage(r, numeroNomenclaturalSaisiObservation);
ImageInformationRepartitionAsynchroneDAO repDAO= new ImageInformationRepartitionAsynchroneDAO(this);
repDAO.obtenirURLImage(r, referentielTaxo, numeroNomenclaturalSaisiObservation);
}
288,10 → 288,10
* @param numeroNomenclaturalSaisiObservation
*/
 
public void obtenirImageGenerique( Rafraichissable r,String numeroNomenclaturalSaisiObservation) {
public void obtenirImageGenerique( Rafraichissable r, String referentielTaxo, String numeroNomenclaturalSaisiObservation) {
ImageGeneriqueVueAsynchroneDAO imgDAO=new ImageGeneriqueVueAsynchroneDAO(this);
imgDAO.obtenirURLImage(r, numeroNomenclaturalSaisiObservation);
ImageGeneriqueVueAsynchroneDAO imgDAO= new ImageGeneriqueVueAsynchroneDAO(this);
imgDAO.obtenirURLImage(r, referentielTaxo, numeroNomenclaturalSaisiObservation);
}
/branches/v1.6-croc/src/org/tela_botanica/client/util/Util.java
1,7 → 1,12
package org.tela_botanica.client.util;
 
import java.util.HashMap;
import java.util.Map;
 
import org.tela_botanica.client.modeles.objets.ListeObservation;
import org.tela_botanica.client.modeles.objets.Observation;
 
import com.google.gwt.json.client.JSONArray;
import com.google.gwt.json.client.JSONObject;
import com.google.gwt.json.client.JSONString;
 
14,6 → 19,18
return jsonNonNull(jo, index) ? ((JSONString)jo.get(index)).stringValue() : "";
}
public static Map<String, String> getMapValeursOuVide(JSONArray jo, String index) {
Map<String, String> mapValeurs = new HashMap<String, String>();
final int taillemax = jo.size();
JSONObject temp = null;
for (int i = 0; i < taillemax; i++) {
if ((temp = jo.get(i).isObject()) != null) {
mapValeurs.put(temp.get("cle").isString().stringValue(), temp.get("valeur").isString().stringValue());
}
}
return mapValeurs;
}
public static boolean jsonNonNull(JSONObject jo, String index) {
return (jo != null &&
jo.get(index) != null &&
74,6 → 91,52
return lieuModele;
}
public static String obtenirDepartementAPartirChaineCommune(String departement, String commune) {
String dep = "";
if(departement == null) {
departement = "";
}
if(departement.equals("000null") || departement.equals("")) {
String[] depCom = commune.split(" ");
if(depCom.length > 1) {
dep = depCom[1].replace('(', ' ');
} else {
dep = "";
}
} else {
dep = departement;
}
dep = dep.replace(')', ' ');
dep = dep.trim();
dep = dep.replace('\\',' ');
dep = dep.trim();
try
{
int nDep = Integer.parseInt(dep);
if(nDep > 0 && nDep < 110) {
departement = dep ;
}
if(departement.length() == 4) {
departement = "0"+departement;
}
departement = departement.substring(0,2);
}
catch(NumberFormatException e)
{
departement = "" ;
}
return departement;
}
public static String supprimerNumDepartementChaineLocalite(String chaineLocaliteComplete) {
return chaineLocaliteComplete.replaceAll(" \\([0-9]*\\)", "");
}
/branches/v1.6-croc/war/modele_import.xls
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.6-croc/war/cel2.css
454,4 → 454,9
 
#lienAide {
padding-right: 50px;
}
 
.champ-separation {
padding-top: 10px;
}
}
/branches/v1.6-croc/widget/modules/carto/config.defaut.ini
3,6 → 3,3
communesKmzChemin = "/home/telabotap/www/commun/google/map/3/kmz/communes/,/home/telabotap/www/commun/google/map/3/kmz/communes_incompletes/"
; Template de l'url où charger les fichiers kml des limites communales.
limitesCommunaleUrlTpl = "http://www.tela-botanica.org/eflore/cel2/widget/modules/carto/squelettes/kml/%s/%s"
communeImageUrl = "http://www.tela-botanica.org/commun/icones/carto/commune.png"
pointImageUrl = "http://www.tela-botanica.org/commun/icones/carto/point2.png"
groupeImageUrlTpl = "http://www.tela-botanica.org/service:cel:CelWidgetMapPoint/icone-groupe?type={type}&nbre={nbre}"
/branches/v1.6-croc/widget/modules/carto/Carto.php
41,6 → 41,7
private $num_taxon = null;
private $station = null;
private $format = null;// Format des obs pour les stations (tableau/liste)
private $photos = null; // Seulement les obs avec photos ou bien toutes
/**
* Méthode appelée par défaut pour charger ce widget.
70,6 → 71,7
$this->utilisateur = (isset($utilisateur) ? $utilisateur : '*');
$this->projet = (isset($projet) ? $projet : '*');
$this->tag = (isset($tag) ? $tag : '*');
$this->tag = (isset($motcle) ? $motcle : $this->tag);
$this->dept = (isset($dept) ? $dept : '*');
$this->commune = (isset($commune) ? $commune : '*');
$this->num_taxon = (isset($num_taxon) ? $num_taxon : '*');
78,6 → 80,7
$this->commentaire = (isset($commentaire) ? $commentaire : null);
$this->station = (isset($station) ? $station : null);
$this->format = (isset($format) ? $format : null);
$this->photos = (isset($photos) ? $photos : null);
$this->start = (isset($start) ? $start : null);
$this->limit = (isset($limit) ? $limit : null);
}
103,10 → 106,8
$widget['donnees']['date'] = $this->date;
$widget['donnees']['taxon'] = $this->taxon;
$widget['donnees']['commentaire'] = $this->commentaire;
$widget['donnees']['photos'] = $this->photos;
$widget['donnees']['url_limites_communales'] = $this->obtenirUrlsLimitesCommunales();
$widget['donnees']['communeImageUrl'] = $this->config['carto']['communeImageUrl'];
$widget['donnees']['pointImageUrl'] = $this->config['carto']['pointImageUrl'];
$widget['donnees']['groupeImageUrlTpl'] = $this->config['carto']['groupeImageUrlTpl'];
$widget['squelette'] = 'carte_defaut';
122,7 → 123,7
$parametres_retenus = array();
$parametres_a_tester = array('station', 'utilisateur', 'projet', 'tag', 'dept', 'commune',
'num_taxon', 'taxon', 'date', 'commentaire',
'start', 'limit');
'start', 'limit', 'photos');
foreach ($parametres_a_tester as $param) {
if (isset($this->$param) && $this->$param != '*') {
$parametres_retenus[$param] = $this->$param;
142,7 → 143,7
private function obtenirUrlsLimitesCommunales() {
$urls = null;
if (isset($this->dept)) {
// si on veut afficher les limites départemmentales on va compter et chercher les noms de fichiers
// si on veut afficher les limites départementales on va compter et chercher les noms de fichiers
$fichiersKml = $this->chercherFichierKml();
if (count($fichiersKml) > 0) {
foreach ($fichiersKml as $kml => $dossier){
195,4 → 196,5
return $widget;
}
}
}
?>
/branches/v1.6-croc/widget/modules/carto/squelettes/obs_liste.tpl.html
New file
0,0 → 1,43
<div class="info-bulle-contenu">
<div class="onglets">
<ul>
<li class="inactif"><a class="onglet" onclick="chargerFormatObs('<?=$station_id?>', 'tableau');return false;" href="#">Tableau</a></li>
<li class="actif"><span class="onglet">Liste</span></li>
</ul>
</div>
<div id="observations">
<h2><?=count($observations)?> observations pour <?=(isset($commune) ? $commune : '?')?></h2>
<ol>
<? foreach ($observations as $obs) : ?>
<li>
<div>
<? if (isset($images[$obs['id']])) : ?>
<? foreach ($images[$obs['id']] as $num => $urls) : ?>
<div<?=($num == 0) ? ' class="cel-img-principale"': ' class="cel-img-secondaire"'?>>
<a class="cel-img" href="<?=$urls['normale']?>" rel="cel-obs-<?=$obs['id']?>">
<img src="<?=$urls['miniature']?>" alt="Image #<?=$urls['id']?> de l'osbervation #<?=$obs['id']?>" />
</a>
</div>
<? endforeach ?>
<? endif ?>
<dl>
<dt class="champ_nom_latin">Nom</dt>
<dd>&nbsp;
<? if (isset($obs['nn']) && $obs['nn'] != '' && $obs['nn'] != 0) : ?>
<a href="http://www.tela-botanica.org/bdtfx-nn-<?=$obs['nn']?>" onclick="window.open(this.href); arreter(event); return false; "><?=$obs['nom']?></a>
<? else : ?>
<?=$obs['nom']?>
<? endif; ?>
</dd>
<dt>Lieu</dt><dd>&nbsp;<?=$obs['lieu']?></dd>
<dt>Publié par</dt><dd>&nbsp;<?=$obs['observateur']?></dd>
<dt>Le</dt><dd>&nbsp;<?=$obs['date']?></dd>
</dl>
<hr class="nettoyage"/>
</div>
</li>
<? endforeach; ?>
</ol>
<? include(dirname(__FILE__).'/obs_msg_info.tpl.html') ?>
</div>
</div>
/branches/v1.6-croc/widget/modules/carto/squelettes/carte_defaut.tpl.html
25,7 → 25,7
<!-- <script type="text/javascript" src="https://getfirebug.com/firebug-lite.js"></script> -->
<!-- Google Map v3 -->
<script type="text/javascript" src="http://maps.google.com/maps/api/js?v=3.5&amp;sensor=true&amp;language=fr&amp;region=FR"></script>
<script type="text/javascript" src="http://www.tela-botanica.org/commun/google/map/3/markermanager/1.0/markermanager-1.0.pack.js"></script>
<script type="text/javascript" src="http://www.tela-botanica.org/commun/google/map/3/markerclusterer/2.0.1/markerclusterer-2.0.1.pack.js"></script>
<!-- Jquery -->
<script type="text/javascript" src="http://www.tela-botanica.org/commun/jquery/1.6.2/jquery-1.6.2.min.js"></script>
<script type="text/javascript" src="http://www.tela-botanica.org/commun/jquery/jquery-ui/1.8.15/js/jquery-ui-1.8.15.custom.min.js"></script>
36,6 → 36,9
<script type="text/javascript" src="http://www.tela-botanica.org/commun/jquery/validate/1.8.1/jquery.validate.min.js"></script>
<script type="text/javascript" src="http://www.tela-botanica.org/commun/jquery/validate/1.8.1/messages_fr.js"></script>
<!-- Javascript : données -->
<script src="<?=$url_stations?>" type="text/javascript"></script>
<!-- Javascript : appli carto -->
<script type="text/javascript">
//<![CDATA[
42,15 → 45,19
var urlsLimitesCommunales = <?=$url_limites_communales?>;
var nt = '<?=$num_taxon?>';
var filtreCommun =
'&taxon=<?=rawurlencode($taxon)?>'+
'&taxon=<?=$taxon?>'+
'&utilisateur=<?=$utilisateur?>'+
'&projet=<?=rawurlencode($projet)?>'+
'&tag=<?=rawurlencode($tag)?>'+
'&projet=<?=$projet?>'+
'&tag=<?=$tag?>'+
'&date=<?=$date?>'+
'&dept=<?=$dept?>'+
'&commune=<?=rawurlencode($commune)?>'+
'&commentaire=<?=rawurlencode($commentaire)?>';
var stationsUrl = '<?=$url_cel_carto?>/tout'+'?'+
'&commune=<?=$commune?>'+
'&commentaire=<?=$commentaire?>';
var photos = '<?= ($photos != null) ? $photos : null; ?>';
if(photos != null) {
filtreCommun += '&photos=<?=rawurlencode($photos)?>';
}
var stationsUrl = '<?=$url_cel_carto?>/stations'+'?'+
'num_taxon='+nt+
filtreCommun;
var taxonsUrl = '<?=$url_cel_carto?>/taxons'+'?'+
60,9 → 67,6
'station={stationId}'+
'&num_taxon={nt}'+
filtreCommun;
var communeImageUrl = '<?= $communeImageUrl ?>';
var pointImageUrl = '<?= $pointImageUrl ?>';
var groupeImageUrlTpl = '<?= $groupeImageUrlTpl ?>';
//]]>
</script>
<script type="text/javascript" src="<?=$url_base?>modules/carto/squelettes/scripts/carto.js"></script>
74,38 → 78,22
</head>
 
<body>
<div id="zone-chargement-point" style="background-color: white;border: 5px solid #D7DBEA;display: none;
height: 70px;
left: 40%;
padding: 10px;
position: fixed;
text-align: center;
top: 35px;
width: 230px;
z-index: 3000;">
<img src="<?=$url_base?>modules/carto/squelettes/images/chargement.gif" alt="Chargement en cours..." />
<p> Chargement des points en cours... </p>
</div>
<div id="zone-titre">
<h1 id="carte-titre">
<span id="logo">
<a href="http://www.tela-botanica.org/site:accueil"
title="Aller à l'accueil de Tela Botanica"
onclick="ouvrirNouvelleFenetre(this, event)">
onclick="window.open(this.href); arreter(event); return false;">
<img src="http://www.tela-botanica.org/sites/commun/generique/images/favicones/tela_botanica.png" alt="TB" />
</a>
</span>
<span id="carte-titre-infos">Cartographie</span>
- <a href="http://www.tela-botanica.org/appli:cel"
title="Carnet en Ligne"
onclick="ouvrirNouvelleFenetre(this, event)">
CEL
</a>
(<a href="http://www.tela-botanica.org/" onclick="ouvrirNouvelleFenetre(this, event)">Tela Botanica</a>)
<span id="obs-nbre">&nbsp;</span> observations <?= ($photos != null && $photos == 1) ? 'avec photos' : ''; ?>
<span class="plante-titre">de <span class="plantes-nbre">&nbsp;</span> plantes</span> sur
<span id="commune-nbre">&nbsp;</span> communes
- <a href="http://www.tela-botanica.org/appli:cel" title="Carnet en Ligne" onclick="window.open(this.href); arreter(event); return false;">CEL</a> (<a href="http://www.tela-botanica.org/" onclick="window.open(this.href); arreter(event); return false;">Tela Botanica</a>)
</h1>
<div id="zone-info">
<a href="<?=$url_base?>carto?carte=avertissement"
onClick="ouvrirPopUp(this, 'Avertissement', event)">
<a href="<?=$url_base?>carto?carte=avertissement" onClick="ouvrirPopUp('<?=$url_base?>carto?carte=avertissement', 'Avertissement'); arreter(event); return false;">
<img src="<?=$url_base?>modules/carto/squelettes/images/information.png"
alt="Avertissements" title="Avertissements &amp; informations" />
</a>
136,7 → 124,7
<!-- Squelette du message de chargement des observations -->
<script id="tpl-chargement" type="text/x-jquery-tmpl">
<div id="chargement" style="height:300px;">
<div id="chargement" style="height:500px;">
<img src="<?=$url_base?>modules/carto/squelettes/images/chargement.gif" alt="Chargement en cours..." />
<p>Chargement des observations en cours...</p>
</div>
146,7 → 134,7
<script id="tpl-obs" type="text/x-jquery-tmpl">
<div id="info-bulle" style="width:{largeur}px;">
<div id="obs">
<h2 id="obs-station-titre">Station</h2>
<h2><span id="obs-total">&nbsp;</span> observations pour <span id="obs-commune">&nbsp;</span></h2>
<div class="navigation">&nbsp;</div>
<div>
<ul>
176,10 → 164,11
</ol>
</div>
</div>
<div class="navigation">&nbsp;</div>
<div id="obs-pieds-page">
<p id="obs-msg-info">Les observations de cette carte sont regroupées par commune.</p>
<p>Id : <span id="obs-station-id">&nbsp;</span></p>
</div>
<div class="navigation">&nbsp;</div>
</div>
</div>
</script>
190,8 → 179,8
<td>
<span class="nom-sci">&nbsp;
{{if nn != 0}}
<a href="http://www.tela-botanica.org/nn${nn}"
onclick="ouvrirNouvelleFenetre(this, event)">
<a href="http://www.tela-botanica.org/bdtfx-nn-${nn}"
onclick="window.open(this.href); arreter(event); return false; ">
${nomSci}
</a>
{{else}}
249,8 → 238,8
<dd title="Nom défini par l'utilisateur{{if nn != 0}}. Cliquez pour accéder à la fiche d'eFlore.{{/if}}">
<span class="nom-sci">&nbsp;
{{if nn != 0}}
<a href="http://www.tela-botanica.org/nn${nn}"
onclick="ouvrirNouvelleFenetre(this, event)">
<a href="http://www.tela-botanica.org/bdtfx-nn-${nn}"
onclick="window.open(this.href); arreter(event); return false; ">
${nomSci}
</a>
{{else}}
335,4 → 324,4
//]]>
</script>
</body>
</html>
</html>
/branches/v1.6-croc/widget/modules/carto/squelettes/scripts/carto.js
2,23 → 2,16
// PARAMÊTRES et CONSTANTES
// Mettre à true pour afficher les messages de débogage
var DEBUG = false;
/**
* Indication de certaines variables ajoutée par php
* var communeImageUrl ;
* var pointImageUrl ;
* var groupeImageUrlTpl ;
*/
var pointImageUrl = 'http://chart.apis.google.com/chart?cht=mm&chs=24x32&chco=FFFFFF,008CFF,000000&ext=.png';
var pointsOrigine = null;
var boundsOrigine = null;
var markerClusterer = null;
var map = null;
var infoBulle = new google.maps.InfoWindow();
var stations = null;
var pointClique = null;
var carteCentre = new google.maps.LatLng(25, 10);
var carteCentre = new google.maps.LatLng(46.4, 3.10);
var carteOptions = {
zoom: 3,
center:carteCentre,
zoom: 6,
mapTypeId: google.maps.MapTypeId.ROADMAP,
mapTypeControlOptions: {
mapTypeIds: ['OSM',
28,6 → 21,7
google.maps.MapTypeId.TERRAIN]
}
};
var ctaLayer = null;
var osmMapType = new google.maps.ImageMapType({
getTileUrl: function(coord, zoom) {
return "http://tile.openstreetmap.org/" +
39,16 → 33,11
name: "OSM",
maxZoom: 19
});
var ctaLayer = null;
var pagineur = {'limite':50, 'start':0, 'total':0, 'stationId':null, 'format':'tableau'};
var station = {'commune':'', 'obsNbre':0};
var obsStation = new Array();
var obsPage = new Array();
var taxonsCarte = new Array();
var mgr = null;
var marqueursCache = new Array();
var zonesCache = new Array();
var requeteChargementPoints;
/*+--------------------------------------------------------------------------------------------------------+*/
// INITIALISATION DU CODE
 
58,48 → 47,26
});
 
function initialiserWidget() {
afficherStats();
definirTailleTitre();
initialiserAffichageCarte();
initialiserAffichagePanneauLateral();
initialiserCarte();
initialiserGestionnaireMarqueurs()
initialiserInfoBulle();
initialiserFormulaireContact();
chargerLimitesCommunales();
attribuerListenerCarte();
programmerRafraichissementCarte();
rafraichirCarte();
}
 
/*+--------------------------------------------------------------------------------------------------------+*/
// AFFICHAGE GÉNÉRAL
 
function afficherTitreCarte() {
if (stations != null && taxonsCarte.length > 0) {
var obsNbre = stations.stats.observations;
var obsNbreFormate = stations.stats.observations.formaterNombre();
var plteNbre = taxonsCarte.length;
var plteNbreFormate = taxonsCarte.length.formaterNombre();
var communeNbre = stations.stats.communes;
var communeNbreFormate = stations.stats.communes.formaterNombre();
var titre = obsNbreFormate+' observation';
titre += (obsNbre > 1) ? 's' : '' ;
if (nt == '*') {
titre += ' de '+plteNbreFormate+' plante';
titre += (plteNbre > 1) ? 's' : '' ;
} else {
if (taxonsCarte[0]) {
var taxon = taxonsCarte[0];
titre += ' pour '+taxon.nom;
}
}
titre += ' sur '+communeNbreFormate+' commune';
titre += (communeNbre > 1) ? 's' : '' ;
$('#carte-titre-infos').text(titre);
}
function afficherStats() {
// Ajout du nombre de communes où des observations ont eu lieu
$('#commune-nbre').text(stations.stats.communes.formaterNombre());
// Ajout du nombre d'observations
$('#obs-nbre').text(stations.stats.observations.formaterNombre());
}
 
function definirTailleTitre() {
121,7 → 88,7
function initialiserAffichageCarte() {
$('#carte').height($(window).height() - 35);
$('#carte').width($(window).width() - 24);
 
if (nt != '*') {
$('#carte').css('left', 0);
}
133,139 → 100,48
map.mapTypes.set('OSM', osmMapType);
}
 
function initialiserGestionnaireMarqueurs() {
mgr = new MarkerManager(map);
}
 
function chargerLimitesCommunales() {
if (urlsLimitesCommunales != null) {
for (urlId in urlsLimitesCommunales) {
var url = urlsLimitesCommunales[urlId];
ctaLayer = new google.maps.KmlLayer(url, {preserveViewport: false});
ctaLayer = new google.maps.KmlLayer(url, {preserveViewport: true});
ctaLayer.setMap(map);
}
}
}
 
var listener = null;
var timer = null;
function attribuerListenerCarte() {
listener = google.maps.event.addListener(map, 'bounds_changed', function(){
programmerRafraichissementCarte();
});
listener = google.maps.event.addListener(map, 'zoom_changed', function(){
programmerRafraichissementCarte();
});
}
function programmerRafraichissementCarte() {
if(timer != null) {
window.clearTimeout(timer);
}
if(requeteChargementPoints != null) {
requeteChargementPoints.abort();
}
timer = window.setTimeout(function() {
var zoom = map.getZoom();
var NELatLng = (map.getBounds().getNorthEast().lat())+'|'+(map.getBounds().getNorthEast().lng());
var SWLatLng = (map.getBounds().getSouthWest().lat())+'|'+(map.getBounds().getSouthWest().lng());
chargerMarqueurs(zoom, NELatLng, SWLatLng);
}, 400);
}
 
var marqueurs = new Array();
function chargerMarqueurs(zoom, NELatLng, SWLatLng) {
var url = stationsUrl+
'&zoom='+zoom+
'&ne='+NELatLng+
'&sw='+SWLatLng;
if(infoBulleOuverte) {
return;
}
if(requeteChargementPoints != null) {
requeteChargementPoints.abort();
cacherMessageChargementPoints();
}
afficherMessageChargementPoints();
requeteChargementPoints = $.getJSON(url, function(data) {
rafraichirMarqueurs(data);
cacherMessageChargementPoints();
});
}
 
function afficherMessageChargementPoints() {
$('#zone-chargement-point').css('display','block');
}
 
function cacherMessageChargementPoints() {
$('#zone-chargement-point').css('display','none');
}
 
function rafraichirMarqueurs(data) {
$.each(marqueurs, function(index, marqueur) {
marqueur.setMap(null);
});
marqueurs = new Array();
stations = data;
afficherTitreCarte();
$.each(stations.points, function (index, station) {
if(station != null) {
var nouveauMarqueur = creerMarqueur(station);
marqueurs.push(nouveauMarqueur);
}
});
}
 
function creerMarqueur(station) {
var titre = '';
if(station.nbreMarqueur) {
titre = station.nbreMarqueur+' points renseignés';
} else {
if(station.nom) {
titre = station.nom;
}
}
//var titre = station['nbreMarqueur'];
var icone = attribuerImageMarqueur(station['id'], station['nbreMarqueur']);
var latLng = new google.maps.LatLng(station['lat'], station['lng']);
var marqueur = new google.maps.Marker({
position: latLng,
icon: icone,
title: ''+titre,
map: map,
stationInfos: station
});
attribuerListenerClick(marqueur, station['id']);
marqueur.setMap(map);
return marqueur;
}
 
function rendrePointsVisibles(bounds) {
map.setCenter(bounds.getCenter());
map.fitBounds(bounds);
map.panToBounds(bounds);
}
 
function programmerRafraichissementCarteSauv() {
var pointCentreAvantAffichageInfoBulle = null;
function rafraichirCarte() {
var points = [];
var bounds = new google.maps.LatLngBounds();
for (var i = 0; i < stations.points.length; ++i) {
var point = stations.points[i];
var maLatLng = new google.maps.LatLng(point.lat, point.lng);
var stationImage = attribuerImageMarqueur(point.id);
for (var i = 0; i < stations.stats.communes; ++i) {
var maLatLng = new google.maps.LatLng(stations.points[i].latitude, stations.points[i].longitude);
var pointImage = new google.maps.MarkerImage(pointImageUrl, new google.maps.Size(24, 32));
var point = new google.maps.Marker({
position: maLatLng,
map: map,
icon: stationImage,
stationInfos: point
icon: pointImage,
stationId: stations.points[i].id
});
 
bounds.extend(maLatLng);
google.maps.event.addListener(point, 'click', surClickMarqueur);
google.maps.event.addListener(point, 'click', function() {
pointCentreAvantAffichageInfoBulle = map.getCenter();
pointClique = this;
infoBulle.open(map, this);
var limites = map.getBounds();
var centre = limites.getCenter();
var nordEst = limites.getNorthEast();
var centreSudLatLng = new google.maps.LatLng(nordEst.lat(), centre.lng());
map.panTo(centreSudLatLng);
afficherInfoBulle();
chargerObs(0, 0);
});
points.push(point);
}
 
277,148 → 153,31
executerMarkerClusterer(points, bounds);
}
 
function attribuerImageMarqueur(id, nbreMarqueur) {
var marqueurImage = null;
if (etreMarqueurCommune(id)) {
marqueurImage = new google.maps.MarkerImage(communeImageUrl, new google.maps.Size(24, 32));
} else if (etreMarqueurStation(id)) {
marqueurImage = new google.maps.MarkerImage(pointImageUrl, new google.maps.Size(16, 16));
} else if (etreMarqueurGroupe(id)) {
var type = 0;
var largeur = 0;
var hauteur = 0;
if (nbreMarqueur != null) {
if (nbreMarqueur >= 2 && nbreMarqueur < 100 ) {
type = '1';
largeur = 53;
hauteur = 52;
} else if (nbreMarqueur >= 100 && nbreMarqueur < 1000 ) {
type = '2';
largeur = 56;
hauteur = 55;
} else if (nbreMarqueur >= 1000 && nbreMarqueur < 10000 ) {
type = '3';
largeur = 66;
hauteur = 65;
} else if (nbreMarqueur >= 10000 && nbreMarqueur < 20000 ) {
type = '4';
largeur = 78;
hauteur = 77;
} else if (nbreMarqueur >= 20000) {
type = '5';
largeur = 66;
hauteur = 65;
}
}
groupeImageUrl = groupeImageUrlTpl.replace(/\{type\}/, type);
groupeImageUrl = groupeImageUrl.replace(/\{nbre\}/, nbreMarqueur);
marqueurImage = new google.maps.MarkerImage(groupeImageUrl, new google.maps.Size(largeur, hauteur));
}
return marqueurImage
function deplacerCartePointClique() {
map.panTo(pointCentreAvantAffichageInfoBulle);
}
 
function attribuerListenerClick(marqueur, id) {
if (etreMarqueurCommune(id) || etreMarqueurStation(id)) {
google.maps.event.addListener(marqueur, 'click', surClickMarqueur);
} else if (etreMarqueurGroupe(id)) {
google.maps.event.addListener(marqueur, 'click', surClickGroupe);
}
}
 
function surClickMarqueur(event) {
 
if(infoBulleOuverte) {
infoBulle.close();
}
pointClique = this;
infoBulle.open(map, this);
actualiserPagineur();
var limites = map.getBounds();
var centre = limites.getCenter();
var nordEst = limites.getNorthEast();
var centreSudLatLng = new google.maps.LatLng(nordEst.lat(), centre.lng());
map.panTo(centreSudLatLng);
afficherInfoBulle();
}
 
function surClickGroupe() {
map.setCenter(this.getPosition());
var nouveauZoom = map.getZoom() + 2;
map.setZoom(nouveauZoom);
mgr.clearMarkers();
}
 
function etreMarqueurGroupe(id) {
var groupe = false;
var motif = /^GROUPE/;
if (motif.test(id)) {
groupe = true;
}
return groupe;
}
 
function etreMarqueurCommune(id) {
var commune = false;
var motif = /^COMMUNE:/;
if (motif.test(id)) {
commune = true;
}
return commune;
}
 
function etreMarqueurStation(id) {
var station = false;
var motif = /^STATION:/;
if (motif.test(id)) {
station = true;
}
return station;
}
 
function deplacerCarteSurPointClique() {
map.panTo(pointClique.position);
}
 
function executerMarkerClusterer(points, bounds) {
if (markerClusterer) {
markerClusterer.clearMarkers();
}
markerClusterer = new MarkerClusterer(map, points, {gridSize: 50, maxZoom: 18});
markerClusterer = new MarkerClusterer(map, points);
map.fitBounds(bounds);
}
 
/*+--------------------------------------------------------------------------------------------------------+*/
// INFO BULLE
var infoBulleOuverte = false;
 
function initialiserInfoBulle() {
google.maps.event.addListener(infoBulle, 'domready', initialiserContenuInfoBulle);
google.maps.event.addListener(infoBulle, 'closeclick', surFermetureInfoBulle);
google.maps.event.addListener(infoBulle, 'content_changed', definirLargeurInfoBulle);
google.maps.event.addListener(infoBulle, 'closeclick', deplacerCartePointClique);
}
 
function surFermetureInfoBulle() {
infoBulleOuverte = false;
programmerRafraichissementCarte();
}
 
function centrerInfoBulle() {
var limites = map.getBounds();
var centre = limites.getCenter();
var nordEst = limites.getNorthEast();
var centreSudLatLng = new google.maps.LatLng(nordEst.lat(), centre.lng());
map.panTo(centreSudLatLng);
}
 
function afficherInfoBulle() {
var obsHtml = $("#tpl-obs").html();
var largeur = definirLargeurInfoBulle();
obsHtml = obsHtml.replace(/\{largeur\}/, largeur);
infoBulle.setContent(obsHtml);
chargerObs(0, 0);
infoBulleOuverte = true;
}
 
function definirLargeurInfoBulle() {
440,10 → 199,6
}
}
 
function afficherMessageChargementTitreInfoBulle() {
$("#obs-station-titre").text("Chargement des observations");
}
 
function supprimerMessageChargement() {
$('#chargement').remove();
}
452,66 → 207,43
if (depart == 0 || depart < total) {
var limite = 300;
if (depart == 0) {
viderTableauObs();
obsStation = new Array();
}
//console.log("Chargement de "+depart+" à "+(depart+limite));
var urlObs = observationsUrl+'&start={start}&limit='+limite;
urlObs = urlObs.replace(/\{stationId\}/g, pointClique.stationInfos.id);
if (pointClique.stationInfos.type_emplacement == 'communes') {
urlObs = urlObs.replace(/commune=%2A/g, 'commune='+pointClique.stationInfos.nom);
}
urlObs = urlObs.replace(/\{stationId\}/g, pointClique.stationId);
urlObs = urlObs.replace(/\{nt\}/g, nt);
urlObs = urlObs.replace(/\{start\}/g, depart);
$.getJSON(urlObs, function(observations){
surRetourChargementObs(observations, depart, total);
chargerObs(depart+limite, observations.total);
obsStation = obsStation.concat(observations.observations);
if (depart == 0) {
actualiserInfosStation(observations);
actualiserPagineur();
creerTitreInfoBulle();
}
//console.log("Chargement ok");
chargerObs(depart+limite, station.obsNbre);
});
} else {
if (pagineur.limite < total) {
afficherPagination();
} else {
surClicPagePagination(0, null);
selectionnerOnglet("#obs-vue-"+pagineur.format);
}
}
}
 
function viderTableauObs() {
obsStation = new Array();
surClicPagePagination(0, null);
}
 
function surRetourChargementObs(observations, depart, total) {
obsStation = obsStation.concat(observations.observations);
if (depart == 0) {
actualiserInfosStation(observations);
creerTitreInfoBulle();
surClicPagePagination(0, null);
}
afficherPagination();
actualiserPagineur();
selectionnerOnglet("#obs-vue-"+pagineur.format);
}
 
function actualiserInfosStation(infos) {
pointClique.stationInfos.commune = infos.commune;
pointClique.stationInfos.obsNbre = infos.total;
station.commune = infos.commune;
station.obsNbre = infos.total;
}
 
function creerTitreInfoBulle() {
$("#obs-total").text(station.obsNbre);
$("#obs-commune").text(station.commune);
var titre = '';
titre += pointClique.stationInfos.obsNbre+' observation';
titre += (pointClique.stationInfos.obsNbre > 1) ? 's': '' ;
titre += ' pour ';
if (etreMarqueurCommune(pointClique.stationInfos.id)) {
nomStation = 'la commune : ';
} else {
nomStation = 'la station : ';
}
titre += pointClique.stationInfos.nom;
$("#obs-station-titre").text(titre);
}
 
function actualiserPagineur() {
pagineur.stationId = pointClique.stationInfos.id;
pagineur.total = pointClique.stationInfos.obsNbre;
pagineur.stationId = pointClique.stationId;
pagineur.total = station.obsNbre;
//console.log("Total pagineur: "+pagineur.total);
if (pagineur.total > 4) {
pagineur.format = 'tableau';
} else {
559,20 → 291,19
}
}
 
function creerTitreInfoBulle() {
$("#obs-total").text(station.obsNbre);
$("#obs-commune").text(station.commune);
}
 
function initialiserContenuInfoBulle() {
afficherOnglets();
afficherMessageChargement('#observations');
cacherContenuOnglets();
afficherOnglets();
ajouterTableauTriable("#obs-tableau");
afficherTextStationId();
corrigerLargeurInfoWindow();
}
 
function cacherContenuOnglets() {
$("#obs-vue-tableau").css("display", "none");
$("#obs-vue-liste").css("display", "none");
}
 
function afficherOnglets() {
var $tabs = $('#obs').tabs();
$('#obs').bind('tabsselect', function(event, ui) {
582,21 → 313,15
surClicAffichageListe();
}
});
if (pointClique.stationInfos.nbre > 4) {
$tabs.tabs('select', "#obs-vue-tableau");
} else {
$tabs.tabs('select', "#obs-vue-liste");
}
$tabs.tabs('select', "#obs-vue-"+pagineur.format);
}
 
function selectionnerOnglet(onglet) {
$(onglet).css('display', 'block');
$('#obs').tabs('select', onglet);
}
 
function afficherTextStationId() {
$('#obs-station-id').text(pointClique.stationInfos.id);
$('#obs-station-id').text(pointClique.stationId);
}
 
function corrigerLargeurInfoWindow() {
604,6 → 329,7
}
 
function surClicAffichageTableau(event) {
//console.log('tableau');
pagineur.format = 'tableau';
mettreAJourObservations();
mettreAJourTableauTriable("#obs-tableau");
610,6 → 336,7
}
 
function surClicAffichageListe(event) {
//console.log('liste');
pagineur.format = 'liste';
mettreAJourObservations();
ajouterGaleriePhoto("a.cel-img");
667,12 → 394,12
'<\/div>';
return tpl;
}
}).live('click', function(e) {
if (e.stopPropagation) {
e.stopPropagation();
}
return false;
});
}).live('click', function(e) {
if (e.stopPropagation) {
e.stopPropagation();
}
return false;
});
}
 
function ajouterFomulaireContact(element) {
715,9 → 442,9
}
 
function chargerInfoObsPourMessage(idObs) {
var nomSci = jQuery.trim($(".cel-obs-"+idObs+" .nom-sci:eq(0)").text());
var date = jQuery.trim($(".cel-obs-"+idObs+" .date:eq(0)").text());
var lieu = jQuery.trim($(".cel-obs-"+idObs+" .lieu:eq(0)").text());
var nomSci = trim($(".cel-obs-"+idObs+" .nom-sci:eq(0)").text());
var date = trim($(".cel-obs-"+idObs+" .date:eq(0)").text());
var lieu = trim($(".cel-obs-"+idObs+" .lieu:eq(0)").text());
var sujet = "Observation #"+idObs+" de "+nomSci;
var message = "\n\n\n\n\n\n\n\n--\nConcerne l'observation de \""+nomSci+'" du "'+date+'" au lieu "'+lieu+'".';
$("#fc_sujet").attr('value', sujet);
758,7 → 485,7
}
if (cle == 'message') {
champ.value += "\n--\n"+
"Ce message vous est envoyé par l'intermédiaire du widget carto "+
"Ce message vous est envoyé par l'intermédiaire du widget Cartographique "+
"du Carnet en Ligne du réseau Tela Botanica.\n"+
"http://www.tela-botanica.org/widget:cel:carto";
}
800,7 → 527,7
'Une erreur est survenue lors de la transmission de votre message.'+'<br />'+
'Vous pouvez signaler le disfonctionnement à <a href="'+
'mailto:cel@tela-botanica.org'+'?'+
'subject=Disfonctionnement du widget carto'+
'subject=Disfonctionnement du widget de Cartographie'+
"&body="+erreurMsg+"\nDébogage :\n"+debugMsg+
'">cel@tela-botanica.org</a>.'+
'</p>');
842,17 → 569,26
} else {
if (nt == '*') {
afficherTaxons();
} else {
afficherNomPlante();
}
afficherTitreCarte();
}
}
 
function afficherTaxons() {
$(".plantes-nbre").text(taxonsCarte.length);
// Ajout du nombre de plantes au titre
$('.plantes-nbre').text(taxonsCarte.length.formaterNombre());
$("#tpl-taxons-liste").tmpl({'taxons':taxonsCarte}).appendTo("#pl-corps");
$('.taxon').live('click', filtrerParTaxon);
}
 
function afficherNomPlante() {
if (nt != '*') {
var taxon = taxonsCarte[0];
$('.plante-titre').text('pour '+taxon.nom);
}
}
 
function afficherPanneauLateral() {
$('#panneau-lateral').width(300);
874,29 → 610,26
google.maps.event.trigger(map, 'resize');
};
 
function ouvrirPopUp(url, nom) {
window.open(url, nom, 'scrollbars=yes,width=650,height=600,directories=no,location=no,menubar=no,status=no,toolbar=no');
};
 
function filtrerParTaxon() {
var ntAFiltrer = $('.nt', this).text();
infoBulle.close();
var zoom = map.getZoom();
var NELatLng = map.getBounds().getNorthEast().lat()+'|'+map.getBounds().getNorthEast().lng();
var SWLatLng = map.getBounds().getSouthWest().lat()+'|'+map.getBounds().getSouthWest().lng();
$('#taxon-'+nt).removeClass('taxon-actif');
if (nt == ntAFiltrer) {
nt = '*';
stationsUrl = stationsUrl.replace(/num_taxon=[*0-9]+/, 'num_taxon='+nt);
chargerMarqueurs(zoom, NELatLng, SWLatLng);
executerMarkerClusterer(pointsOrigine, boundsOrigine);
} else {
stationsUrl = stationsUrl.replace(/num_taxon=[*0-9]+/, 'num_taxon='+ntAFiltrer);
url = stationsUrl;
url += '&zoom='+zoom+
'&ne='+NELatLng+
'&sw='+SWLatLng;
requeteChargementPoints = $.getJSON(url, function (stationsFiltrees) {
var url = stationsUrl.replace(/num_taxon=[*0-9]+/, 'num_taxon='+ntAFiltrer)+
'&formatRetour=jsonP'+
'&callback=?';
$.getJSON(url, function (stationsFiltrees) {
stations = stationsFiltrees;
nt = ntAFiltrer;
$('#taxon-'+nt).addClass('taxon-actif');
rafraichirMarqueurs(stations);
rafraichirCarte();
});
}
};
904,28 → 637,6
/*+--------------------------------------------------------------------------------------------------------+*/
// FONCTIONS UTILITAIRES
 
function ouvrirPopUp(element, nomPopUp, event) {
var options =
'width=650,'+
'height=600,'+
'scrollbars=yes,'+
'directories=no,'+
'location=no,'+
'menubar=no,'+
'status=no,'+
'toolbar=no';
var popUp = window.open(element.href, nomPopUp, options);
if (window.focus) {
popUp.focus();
}
return arreter(event);
};
 
function ouvrirNouvelleFenetre(element, event) {
window.open(element.href);
return arreter(event);
}
 
function arreter(event) {
if (event.stopPropagation) {
event.stopPropagation();
932,10 → 643,6
} else if (window.event) {
window.event.cancelBubble = true;
}
if (event.preventDefault) {
event.preventDefault();
}
event.returnValue = false;
return false;
}
 
1024,4 → 731,8
msg = "La variable vaut null.";
}
console.log(msg);
}
}
 
function trim (chaine) {
return chaine.replace(/^\s+/g, '').replace(/\s+$/g, '');
}
/branches/v1.6-croc/widget/modules/carto/squelettes/css/carto.css
19,7 → 19,7
}
a, a:active, a:visited {
border-bottom:1px dotted #666;
color:#CCC;
color: #AAAAAA;
text-decoration:none;
}
a:active {
101,6 → 101,7
hr.nettoyage{
visibility:hidden;
}
 
/*+-----------------------------------------------------------------------------------------------------------------+*/
/* Carte */
#carte {
155,7 → 156,9
width:100%;
height:35px;
overflow:hidden;
background-color:#4A4B4C;
background-color: #DDDDDD;
border-bottom: 1px solid grey;
z-index: 9;
}
#zone-info {
position:absolute;
174,7 → 177,7
display:inline-block;
margin:0;
padding:0.2em;
color:#CCCCCC;
color: black;
}
#carte-titre {/*Hack CSS fonctionne seulement dans ie6, 7 & 8 */
display:inline !hackCssIe6Et7;/*Hack CSS pour ie6 & ie7 */
191,8 → 194,9
bottom:0;
width:24px;
overflow:hidden;
background-color:#4A4B4C;
border-right:1px solid grey;
background-color: #DDDDDD;
border-right: 1px solid grey;
z-index: 10;
}
#pl-contenu {
display:none;
218,13 → 222,13
}
#pl-ouverture {
left:0;
background:url(../images/ouverture.png) no-repeat top left #4A4B4C;
background:url(../images/ouverture.png) no-repeat top left #DDDDDD;
height:100%;
}
#pl-fermeture {
display:none;
left:276px;
background:url(../images/fermeture.png) no-repeat top right #4A4B4C;
background:url(../images/fermeture.png) no-repeat top right #DDDDDD;
}
#pl-ouverture span, #pl-fermeture span{
display:none;
231,11 → 235,11
}
/* Panneau latéral : balises */
#panneau-lateral h2, #panneau-lateral p {
color:#CCCCCC;}
color:black;}
/*+-----------------------------------------------------------------------------------------------------------------+*/
/* Liste des taxons de la carte */
#taxons {
color:#999;
color:black;
}
#taxons .taxon-actif, #taxons .taxon-actif span {
color:#56B80E;
242,7 → 246,7
}
#taxons li span {
border-bottom:1px dotted #666;
color:#CCC;
color:black;
}
#taxons li span:focus {
outline:thin dotted;
258,8 → 262,8
/*+-----------------------------------------------------------------------------------------------------------------+*/
/* Pop-up observations */
#info-bulle{
min-height:500px;
width:500px;
min-height:300px;
/*width:géstion via le Javascript;*/
}
#observations {
overflow:none;
425,12 → 429,13
width:300px;
height:200px;
}
#form-contact #fc_envoyer{
width:50px;
#form-contact #fc_envoyer, #fc_annuler, #fc_effacer{
width:75px;
}
#fc_envoyer{
float:right;
}
#form-contact #fc_annuler{
width:50px;
#fc_annuler{
float:left;
}
#form-contact label.error {
444,4 → 449,4
color: white;
white-space: pre-wrap;
width: 300px;
}
}
/branches/v1.6-croc/widget/modules/carto/squelettes/obs_tableau.tpl.html
New file
0,0 → 1,35
<div class="info-bulle-contenu">
<div class="onglets">
<ul>
<li class="actif"><span class="onglet">Tableau</span></li>
<li class="inactif"><a class="onglet" onclick="chargerFormatObs('<?=$station_id?>', 'liste');return false;" href="#">Liste</a></li>
</ul>
</div>
<div id="observations">
<table>
<caption><h2><?=count($observations)?> observations pour <?=(isset($commune) ? $commune : '?')?></h2></caption>
<thead>
<tr>
<th>Nom</th><th>Date</th><th>Lieu</th><th>Observateur</th>
</tr>
</thead>
<tbody>
<? foreach ($observations as $obs) : ?>
<tr>
<td>&nbsp;
<? if (isset($obs['nn']) && $obs['nn'] != '' && $obs['nn'] != 0) : ?>
<a href="http://www.tela-botanica.org/bdtfx-nn-<?=$obs['nn']?>" onclick="window.open(this.href); arreter(event); return false; "><?=$obs['nom']?></a>
<? else : ?>
<?=$obs['nom']?>
<? endif; ?>
</td>
<td>&nbsp;<?=$obs['date']?></td>
<td>&nbsp;<?=$obs['lieu']?></td>
<td>&nbsp;<?=$obs['observateur']?></td>
</tr>
<? endforeach; ?>
</tbody>
</table>
<? include(dirname(__FILE__).'/obs_msg_info.tpl.html') ?>
</div>
</div>
/branches/v1.6-croc/widget/modules/saisie/Saisie.php
75,7 → 75,7
private function chargerConfigProjet() {
$fichier_config = dirname(__FILE__).self::DS.'configurations'.self::DS.$this->projet.'.ini';
if (file_exists($fichier_config)) {
if (!$this->configProjet = parse_ini_file($fichier_config)) {
if (!$this->configProjet = parse_ini_file($fichier_config)) {
$this->messages[] = "Le fichier ini '$fichier_config' du projet n'a pu être chargé.";
}
} else {
82,11 → 82,13
$this->debug[] = "Le fichier ini '$fichier_config' du projet n'existe pas.";
}
}
 
private function chargerProjetsVersion() {
foreach ($this->configProjet as $config => $valeur) {
if(strstr($config,'.version')) {
$this->projetsVersions[str_replace('.version', '', $config)] = $valeur;
if (isset($this->configProjet)) {
foreach ($this->configProjet as $config => $valeur) {
if(strstr($config,'.version')) {
$this->projetsVersions[str_replace('.version', '', $config)] = $valeur;
}
}
}
}
93,23 → 95,25
 
public function executerWidget() {
$referentiel_impose = false;
if(isset($_GET['referentiel']) && $_GET['referentiel'] != '') {
if (isset($_GET['referentiel']) && $_GET['referentiel'] != '') {
$this->NS_PROJET = isset($_GET['referentiel']) && $_GET['referentiel'] != '' ? $_GET['referentiel'] : $this->NS_PROJET;
$this->NS_PROJET_VERSION = $this->projetsVersions[$this->NS_PROJET];
$referentiel_impose = true;
}
 
$widget['squelette'] = $this->projet;
$widget['donnees'] = array();
$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_annuaire'] = sprintf($this->config['chemins']['baseURLServicesAnnuaireTpl'], 'utilisateur/identite-par-courriel/');
 
 
$widget['donnees']['logo'] = isset($_GET['logo']) ? $_GET['logo'] : 'defaut';
$widget['donnees']['titre'] = isset($_GET['titre']) ? $_GET['titre'] : 'defaut';
$widget['donnees']['titre'] = ($widget['donnees']['titre'] == '0') ? '' : $widget['donnees']['titre'];
 
// cas du projet par défaut ou bien d'un projet n'ayant pas de squelette spécifique
if ($this->projet == 'defaut' || !$this->projetASquelette()) {
if ($this->projet == 'defaut' || $this->projet == 'florileges' || !$this->projetASquelette()) {
$urlWsNsTpl = $this->config['chemins']['baseURLServicesEfloreTpl'];
$urlWsNs = sprintf($urlWsNsTpl, self::EFLORE_API_VERSION, $this->NS_PROJET, self::WS_NOM);
$urlWsNsSansRef = sprintf($urlWsNsTpl, self::EFLORE_API_VERSION, '{referentiel}', self::WS_NOM);
120,27 → 124,28
$widget['donnees']['ns_version'] = $this->NS_PROJET_VERSION;
$widget['donnees']['referentiel_impose'] = $referentiel_impose;
$widget['donnees']['projets_versions'] = $this->projetsVersions;
if(self::especeEstImposee()) {
$nom = self::executerChargementInfosTaxon($_GET['num_nom']);
$widget['donnees']['espece_imposee'] = false;
$widget['donnees']['nn_espece_defaut'] = '';
$widget['donnees']['nom_sci_espece_defaut'] = '';
$widget['donnees']['infos_espece'] = '{}';
 
if ($this->especeEstImposee()) {
$nom = $this->executerChargementInfosTaxon($_GET['num_nom']);
$widget['donnees']['espece_imposee'] = true;
$widget['donnees']['nn_espece_defaut'] = $_GET['num_nom'];
$widget['donnees']['nom_sci_espece_defaut'] = $nom['nom_sci'];
$widget['donnees']['infos_espece'] = $this->array2js($nom, true);
} else {
$widget['donnees']['espece_imposee'] = false;
$widget['donnees']['nn_espece_defaut'] = '';
$widget['donnees']['nom_sci_espece_defaut'] = '';
$widget['donnees']['infos_espece'] = array();
}
} else {
}
if ($this->projet != 'defaut' || $this->projetASquelette()) {
$widget['donnees']['taxons'] = $this->recupererListeTaxon();
$widget['donnees']['milieux'] = $this->parserMilieux();
}
return $widget;
}
 
private function projetASquelette() {
// fonction très simple qui ne teste que si le dossier du projet courant
// fonction très simple qui ne teste que si le dossier du projet courant
// existe, mais elle suffit pour le moment.
return file_exists(dirname(__FILE__).self::DS.'squelettes'.self::DS.$this->projet);
}
163,7 → 168,7
$fichier_tsv = dirname(__FILE__).self::DS.'configurations'.self::DS.$this->projet.'_taxons.tsv';
if (file_exists($fichier_tsv) && is_readable($fichier_tsv)) {
$taxons = $this->decomposerFichierTsv($fichier_tsv);
$taxons = self::trierTableauMd($taxons, array('nom_fr' => SORT_ASC));
$taxons = self::trierTableauMd($taxons, array('nom_fr' => SORT_ASC));
} else {
$this->debug[] = "Impossible d'ouvrir le fichier '$fichier_tsv'.";
}
171,7 → 176,7
}
 
private function decomposerFichierTsv($fichier, $delimiter = "\t"){
$header = NULL;
$header = null;
$data = array();
if (($handle = fopen($fichier, 'r')) !== FALSE) {
while (($row = fgetcsv($handle, 1000, $delimiter)) !== FALSE) {
188,28 → 193,30
 
private function parserMilieux() {
$infosMilieux = array();
$milieux = explode('|', $this->configProjet['milieux']);
foreach ($milieux as $milieu) {
$details = explode(';', $milieu);
if (isset($details[1])) {
$infosMilieux[$details[0]] = $details[1];
} else {
$infosMilieux[$details[0]] = '';
if (isset($this->configProjet['milieux'])) {
$milieux = explode('|', $this->configProjet['milieux']);
foreach ($milieux as $milieu) {
$details = explode(';', $milieu);
if (isset($details[1])) {
$infosMilieux[$details[0]] = $details[1];
} else {
$infosMilieux[$details[0]] = '';
}
}
ksort($infosMilieux);
}
ksort($infosMilieux);
return $infosMilieux;
}
 
private function especeEstImposee() {
return isset($_GET['num_nom']) && $_GET['num_nom'] != '';
return (isset($_GET['num_nom']) && $_GET['num_nom'] != '');
}
 
private function executerChargementInfosTaxon($num_nom) {
$url_service_infos = sprintf($this->config['chemins']['infosTaxonUrl'], $this->NS_PROJET, $num_nom);
$infos = json_decode(file_get_contents($url_service_infos));
$resultat = array();
if(isset($infos) && !empty($infos)) {
if (isset($infos) && !empty($infos)) {
$infos = (array)$infos;
$resultat = (isset($infos['nom_sci']) && $infos['nom_sci'] != '') ? $infos : array();
}
296,36 → 303,45
$retour['donnees']['debogage'] = $debogage;
return $retour;
}
// Il ne faut pas utiliser l'index type du tableau files pour tester
 
// Il ne faut pas utiliser l'index type du tableau files pour tester
// si une image est en jpeg car le type renvoyé par les navigateurs
// peut varier (ex. sous ie qui renvoie image/pjpeg
// peut varier (ex. sous ie qui renvoie image/pjpeg
private function verifierFormatJpeg($chemin) {
// get imagesize renvoie un résultat consistant par contre
$infos = getimagesize($chemin, $infos);
return (isset($infos["mime"]) && $infos["mime"] == "image/jpeg");
return (isset($infos['mime']) && $infos['mime'] == 'image/jpeg');
}
private function array2js($array,$show_keys)
{
$dimensions = array();
$valeurs = array();
$total = count ($array)-1;
$i=0;
foreach($array as $key=>$value){
if (is_array($value)) {
$dimensions[$i] = array2js($value,$show_keys);
if ($show_keys) $dimensions[$i] = '"'.$key.'":'.$dimensions[$i];
} else {
$dimensions[$i] = '"'.addslashes($value).'"';
if ($show_keys) $dimensions[$i] = '"'.$key.'":'.$dimensions[$i];
}
if ($i==0) $dimensions[$i] = '{'.$dimensions[$i];
if ($i==$total) $dimensions[$i].= '}';
$i++;
}
return implode(',',$dimensions);
}
 
private function array2js($array,$show_keys) {
$tableauJs = '{}';
if (!empty($array)) {
$total = count($array) - 1;
$i = 0;
$dimensions = array();
foreach ($array as $key => $value) {
if (is_array($value)) {
$dimensions[$i] = array2js($value,$show_keys);
if ($show_keys) {
$dimensions[$i] = '"'.$key.'":'.$dimensions[$i];
}
} else {
$dimensions[$i] = '"'.addslashes($value).'"';
if ($show_keys) {
$dimensions[$i] = '"'.$key.'":'.$dimensions[$i];
}
}
if ($i == 0) {
$dimensions[$i] = '{'.$dimensions[$i];
}
if ($i == $total) {
$dimensions[$i].= '}';
}
$i++;
}
$tableauJs = implode(',', $dimensions);
}
return $tableauJs;
}
}
?>
/branches/v1.6-croc/widget/modules/saisie/configurations/florileges_taxons.tsv
New file
0,0 → 1,487
nom_sel num_nom_sel nom_ret num_nom_ret num_taxon famille nom_fr nom_fr_autre groupe
Ailante faux-vernis-du-japon 2088 Ailanthus altissima (Mill.) Swingle 2088 5537 Simaroubaceae Ailante faux-vernis-du-japon arbres et arbustes
Aubépine à un style 19472 Crataegus monogyna Jacq. 19472 4721 Rosaceae Aubépine à un style arbres et arbustes
Aulne glutineux 3318 Alnus glutinosa (L.) Gaertn. 3318 1321 Betulaceae Aulne glutineux arbres et arbustes
Bouleau verruqueux 9626 Betula pendula Roth 9626 1325 Betulaceae Bouleau verruqueux arbres et arbustes
Buddléia arbre-aux-papillons 11336 Buddleja davidii Franch. 11336 1837 Buddlejaceae Buddléia arbre-aux-papillons arbres et arbustes
Cornouiller sanguin 75064 Cornus sanguinea L. 75064 30056 Cornaceae Cornouiller sanguin arbres et arbustes
Érable négundo 74932 Acer negundo L. 74932 29924 Aceraceae Érable négundo arbres et arbustes
Érable plane 74934 Acer platanoides L. 74934 29926 Aceraceae Érable plane arbres et arbustes
Figuier commun 75134 Ficus carica L. 75134 30126 Moraceae Figuier commun arbres et arbustes
Mahonia à feuilles de houx 40676 Mahonia aquifolium (Pursh) Nutt. 40676 1317 Berberidaceae Mahonia à feuilles de houx arbres et arbustes
Paulownia tomenteux 48115 Paulownia tomentosa (Thunb.) Steud. 48115 5411 Scrophulariaceae Paulownia tomenteux arbres et arbustes
Peuplier noir 52030 Populus nigra L. 52030 5128 Salicaceae Peuplier noir arbres et arbustes
Prunelier épine-noire 53652 Prunus spinosa L. 53652 4847 Rosaceae Prunelier épine-noire arbres et arbustes
Robinier faux-acacia 56245 Robinia pseudoacacia L. 56245 3124 Fabaceae Robinier faux-acacia arbres et arbustes
Sureau noir 60241 Sambucus nigra L. 60241 1968 Caprifoliaceae Sureau noir arbres et arbustes
Asplenium capillaire 7728 Asplenium trichomanes L. 7728 7358 Aspleniaceae Asplenium capillaire fougères et prêles
Asplenium cétérac 74978 Ceterach officinarum Willd. 77204 29970 Aspleniaceae Asplenium cétérac fougères et prêles
Asplenium rue-des-murailes 7681 Asplenium ruta-muraria L. 7681 8688 Aspleniaceae Asplenium rue-des-murailes fougères et prêles
Prêle des champs 24488 Equisetum arvense L. 24488 7397 Equisetaceae Prêle des champs fougères et prêles
Amarante couchée 3944 Amaranthus deflexus L. 3944 39 Amaranthaceae Amarante couchée plante à fleurs minuscules
Amarante réfléchie 4009 Amaranthus retroflexus L. 4009 49 Amaranthaceae Amarante réfléchie plante à fleurs minuscules
Ambroisie à feuilles d'armoise 4066 Ambrosia artemisiifolia L. 4066 383 Asteraceae Ambroisie à feuilles d'armoise plante à fleurs minuscules
Arabette des dames 5767 Arabidopsis thaliana (L.) Heynh. 5767 1484 Brassicaceae Arabette des dames plante à fleurs minuscules
Armoise annuelle 6765 Artemisia annua L. 6765 430 Asteraceae Armoise annuelle plante à fleurs minuscules
Armoise commune 6987 Artemisia vulgaris L. 6987 459 Asteraceae Armoise commune plante à fleurs minuscules
Armoise des frères Verlot 6983 Artemisia verlotiorum Lamotte 6983 458 Asteraceae Armoise des frères Verlot plante à fleurs minuscules
Arroche couchée 8444 Atriplex prostrata Boucher ex DC. 8444 8712 Chenopodiaceae Arroche couchée plante à fleurs minuscules
Arroche étalée 74991 Atriplex patula L. 74991 29983 Chenopodiaceae Arroche étalée plante à fleurs minuscules
Asperge à feuilles aigües 7214 Asparagus acutifolius L. 7214 6269 Asparagaceae Asperge à feuilles aigües plante à fleurs minuscules
Capselle bourse-à-pasteur 75016 Capsella bursa-pastoris (L.) Medik. 75016 30008 Brassicaceae Capselle bourse-à-pasteur plante à fleurs minuscules
Cardamine hérissée 12878 Cardamine hirsuta L. 12878 1592 Brassicaceae Cardamine hérissée plante à fleurs minuscules
Céraiste aggloméré 15862 Cerastium glomeratum Thuill. 15862 2024 Caryophyllaceae Céraiste aggloméré plante à fleurs minuscules
Céraiste des fontaines 15840 Cerastium fontanum Baumg. 15840 9277 Caryophyllaceae Céraiste des fontaines plante à fleurs minuscules
Chénopode blanc 16741 Chenopodium album L. 16741 2335 Chenopodiaceae Chénopode blanc plante à fleurs minuscules
Chénopode des murailles 16847 Chenopodium murale L. 16847 2353 Chenopodiaceae Chénopode des murailles plante à fleurs minuscules
Gaillet grateron 28896 Galium aparine L. 28896 5037 Rubiaceae Gaillet grateron plante à fleurs minuscules
Gaillet mollugine 29078 Galium mollugo L. 29078 5057 Rubiaceae Gaillet mollugine plante à fleurs minuscules
Lycope d'Europe 40533 Lycopus europaeus L. 40533 3576 Lamiaceae Lycope d'Europe plante à fleurs minuscules
Mercuriale annuelle 42320 Mercurialis annua L. 42320 2751 Euphorbiaceae Mercuriale annuelle plante à fleurs minuscules
Ortie brûlante 70431 Urtica urens L. 70431 5650 Urticaceae Ortie brûlante plante à fleurs minuscules
Ortie dioïque 70396 Urtica dioica L. 70396 14875 Urticaceae Ortie dioïque plante à fleurs minuscules
Pariètaire de Judée 47921 Parietaria judaica L. 47921 5641 Urticaceae Pariètaire de Judée plante à fleurs minuscules
Passerage de Virginie 38574 Lepidium virginicum L. 38574 1743 Brassicaceae Passerage de Virginie plante à fleurs minuscules
Persicaire tachetée 48340 Polygonum persicaria L. 51630 4236 Polygonaceae Persicaire tachetée plante à fleurs minuscules
Pimprenelle mineure 60289 Sanguisorba minor Scop. 60289 4976 Rosaceae Pimprenelle mineure plante à fleurs minuscules
Plantain corne-de-cerf 49875 Plantago coronopus L. 49875 4088 Plantaginaceae Plantain corne-de-cerf plante à fleurs minuscules
Plantain lancéolé 49948 Plantago lanceolata L. 49948 4094 Plantaginaceae Plantain lancéolé plante à fleurs minuscules
Plantain majeur 49976 Plantago major L. 49976 4096 Plantaginaceae Plantain majeur plante à fleurs minuscules
Plantain toujours vert 50068 Plantago sempervirens Crantz 50068 4105 Plantaginaceae Plantain toujours vert plante à fleurs minuscules
Polycarpon quatre-feuilles 51112 Polycarpon tetraphyllum (L.) L. 51112 13356 Caryophyllaceae Polycarpon quatre-feuilles plante à fleurs minuscules
Renouée des oiseaux 51363 Polygonum aviculare L. 51363 4224 Polygonaceae Renouée des oiseaux plante à fleurs minuscules
Renouée faux-liseron 26474 Fallopia convolvulus (L.) Á.Löve 26474 4218 Polygonaceae Renouée faux-liseron plante à fleurs minuscules
Rumex à feuilles obtuses 58812 Rumex obtusifolius L. 58812 4274 Polygonaceae Rumex à feuilles obtuses plante à fleurs minuscules
Rumex crépue 58698 Rumex crispus L. 58698 4262 Polygonaceae Rumex crépue plante à fleurs minuscules
Sagine couchée 59112 Sagina procumbens L. 59112 2167 Caryophyllaceae Sagine couchée plante à fleurs minuscules
Sagine sans pétale 59056 Sagina apetala Ard. 59056 2161 Caryophyllaceae Sagine sans pétale plante à fleurs minuscules
Vergerette de Buenos Aires 24874 Conyza bonariensis (L.) Cronquist 18835 699 Asteraceae Vergerette de Buenos Aires plante à fleurs minuscules
Vergerette de Sumatra 24956 Conyza sumatrensis (Retz.) E.Walker 18851 702 Asteraceae Vergerette de Sumatra plante à fleurs minuscules
Vergerette du Canada 24880 Conyza canadensis (L.) Cronquist 18836 700 Asteraceae Vergerette du Canada plante à fleurs minuscules
Verveine officinale 71022 Verbena officinalis L. 71022 5710 Verbenaceae Verveine officinale plante à fleurs minuscules
Vesce hérissée 71616 Vicia hirsuta (L.) Gray 71616 3242 Fabaceae Vesce hérissée plante à fleurs minuscules
Andryale à feuilles entières 4699 Andryala integrifolia L. 4699 395 Asteraceae Andryale à feuilles entières plantes à capitules jaunes
Chondrille à feuilles de joncs 17040 Chondrilla juncea L. 17040 647 Asteraceae Chondrille à feuilles de joncs plantes à capitules jaunes
Crépide à feuilles de capselle 19627 Crepis bursifolia L. 19627 715 Asteraceae Crépide à feuilles de capselle plantes à capitules jaunes
Crépis à feuilles de pissenlit 19797 Crepis vesicaria subsp. taraxacifolia (Thuill.) Thell. ex Schinz & R.Keller 19797 739 Asteraceae Crépis à feuilles de pissenlit plantes à capitules jaunes
Crépis capillaire 19630 Crepis capillaris (L.) Wallr. 19630 716 Asteraceae Crépis capillaire plantes à capitules jaunes
Crépis de Nîmes 19756 Crepis sancta subsp. nemausensis (Vill.) Babc. 19756 734 Asteraceae Crépis de Nîmes plantes à capitules jaunes
Crépis fétide 19654 Crepis foetida L. 19654 719 Asteraceae Crépis fétide plantes à capitules jaunes
Crépis hérissée 19762 Crepis setosa Haller f. 19762 735 Asteraceae Crépis hérissée plantes à capitules jaunes
Jacobée commune 36239 Senecio jacobaea subsp. jacobaea 62926 14453 Asteraceae Jacobée commune plantes à capitules jaunes
Laiteron délicat 65231 Sonchus tenerrimus L. 65231 1234 Asteraceae Laiteron délicat plantes à capitules jaunes
Laiteron maraîcher 65205 Sonchus oleraceus L. 65205 1232 Asteraceae Laiteron maraîcher plantes à capitules jaunes
Laiteron rude 65171 Sonchus asper (L.) Hill 65171 14563 Asteraceae Laiteron rude plantes à capitules jaunes
Laitue des murailles 37338 Mycelis muralis (L.) Dumort. 43130 1066 Asteraceae Laitue des murailles plantes à capitules jaunes
Laitue scariole 37373 Lactuca serriola L. 37373 991 Asteraceae Laitue scariole plantes à capitules jaunes
Lampsane commune 37660 Lapsana communis L. 37660 997 Asteraceae Lampsane commune plantes à capitules jaunes
Picris fausse-épervière 49351 Picris hieracioides L. 49351 1102 Asteraceae Picris fausse-épervière plantes à capitules jaunes
Picris fausse-vipérine 31546 Picris echioides L. 49346 1101 Asteraceae Picris fausse-vipérine plantes à capitules jaunes
Pissenlit 87290 Taraxacum 87290 36245 Asteraceae Pissenlit plantes à capitules jaunes
Porcelle enracinée 35439 Hypochaeris radicata L. 35439 967 Asteraceae Porcelle enracinée plantes à capitules jaunes
Reichardie fausse-picride 55654 Reichardia picroides (L.) Roth 55654 1115 Asteraceae Reichardie fausse-picride plantes à capitules jaunes
Salsifis des prés 68767 Tragopogon pratensis L. 68767 14813 Asteraceae Salsifis des prés plantes à capitules jaunes
Séneçon à feuilles de roquette 62849 Senecio erucifolius L. 62849 1166 Asteraceae Séneçon à feuilles de roquette plantes à capitules jaunes
Séneçon commun 63096 Senecio vulgaris L. 63096 1203 Asteraceae Séneçon commun plantes à capitules jaunes
Séneçon du Cap 62909 Senecio inaequidens DC. 62909 1176 Asteraceae Séneçon du Cap plantes à capitules jaunes
Séneçon visqueux 63095 Senecio viscosus L. 63095 1202 Asteraceae Séneçon visqueux plantes à capitules jaunes
Solidage géant 65065 Solidago gigantea Aiton 65065 14560 Asteraceae Solidage géant plantes à capitules jaunes
Tussilage pas-d'âne 70113 Tussilago farfara L. 70113 1284 Asteraceae Tussilage pas-d'âne plantes à capitules jaunes
Urosperme de Daléchamps 70381 Urospermum dalechampii (L.) Scop. ex F.W.Schmidt 70381 1286 Asteraceae Urosperme de Daléchamps plantes à capitules jaunes
Achillée millefeuille 365 Achillea millefolium L. 365 8527 Asteraceae Achillée millefeuille plantes à fleurs blanches
Alliaire officinale 2913 Alliaria petiolata (M.Bieb.) Cavara & Grande 2913 1468 Brassicaceae Alliaire officinale plantes à fleurs blanches
Berce commune 31656 Heracleum sphondylium L. 31656 187 Apiaceae Berce commune plantes à fleurs blanches
Carotte sauvage 21674 Daucus carota L. 21674 151 Apiaceae Carotte sauvage plantes à fleurs blanches
Cerfeuil des bois 5290 Anthriscus sylvestris (L.) Hoffm. 5290 8626 Apiaceae Cerfeuil des bois plantes à fleurs blanches
Cerfeuil enivrant 16354 Chaerophyllum temulum L. 16354 140 Apiaceae Cerfeuil enivrant plantes à fleurs blanches
Clématite vigne-blanche 18235 Clematis vitalba L. 18235 4436 Ranunculaceae Clématite vigne-blanche plantes à fleurs blanches
Datura stramoine 21654 Datura stramonium L. 21654 5544 Solanaceae Datura stramoine plantes à fleurs blanches
Diplotaxis fausse-roquette 75095 Diplotaxis erucoides (L.) DC. 75095 30087 Brassicaceae Diplotaxis fausse-roquette plantes à fleurs blanches
Drave de printemps 22994 Erophila verna (L.) Chevall. 25208 1653 Brassicaceae Drave de printemps plantes à fleurs blanches
Fumeterre grimpante 75465 Fumaria capreolata L. 75465 30457 Papaveraceae Fumeterre grimpante plantes à fleurs blanches
Lamier blanc 37472 Lamium album L. 37472 3557 Lamiaceae Lamier blanc plantes à fleurs blanches
Linaire mineure 16280 Chaenorrhinum minus (L.) Lange 16280 5311 Scrophulariaceae Linaire mineure plantes à fleurs blanches
Liseron des haies 12341 Calystegia sepium (L.) R.Br. 12341 2448 Convolvulaceae Liseron des haies plantes à fleurs blanches
Mauve négligée 40856 Malva neglecta Wallr. 40856 3827 Malvaceae Mauve négligée plantes à fleurs blanches
Mélilot blanc 41764 Melilotus albus Medik. 41764 3053 Fabaceae Mélilot blanc plantes à fleurs blanches
Ombilic nombril-de-Vénus 70339 Umbilicus rupestris (Salisb.) Dandy 70339 2545 Crassulaceae Ombilic nombril-de-Vénus plantes à fleurs blanches
Orpin blanc 62141 Sedum album L. 62141 2489 Crassulaceae Orpin blanc plantes à fleurs blanches
Passerage drave 38489 Lepidium draba L. 38489 1609 Brassicaceae Passerage drave plantes à fleurs blanches
Pensée des champs 72065 Viola arvensis Murray 72065 14914 Violaceae Pensée des champs plantes à fleurs blanches
Phytolaque raisin-d'Amérique 49293 Phytolacca americana L. 49293 4061 Phytolaccaceae Phytolaque raisin-d'Amérique plantes à fleurs blanches
Renouée du Japon 55763 Reynoutria japonica Houtt. 55763 4244 Polygonaceae Renouée du Japon plantes à fleurs blanches
Réséda blanc 55658 Reseda alba L. 55658 4601 Resedaceae Réséda blanc plantes à fleurs blanches
Ronces 77191 Rubus 77191 31181 Rosaceae Ronces plantes à fleurs blanches
Sabline à feuilles de serpolet 6292 Arenaria serpyllifolia L. 6292 8642 Caryophyllaceae Sabline à feuilles de serpolet plantes à fleurs blanches
Saxifrage à trois doigts 61042 Saxifraga tridactylites L. 61042 5290 Saxifragaceae Saxifrage à trois doigts plantes à fleurs blanches
Silène compagnon-blanc 64192 Silene latifolia subsp. alba (Mill.) Greuter & Burdet 64192 2218 Caryophyllaceae Silène compagnon-blanc plantes à fleurs blanches
Silène enflé 64419 Silene vulgaris (Moench) Garcke 64419 14537 Caryophyllaceae Silène enflé plantes à fleurs blanches
Stellaire intermédiaire 75396 Stellaria media (L.) Vill. 75396 30388 Caryophyllaceae Stellaire intermédiaire plantes à fleurs blanches
Torilis du Japon 68580 Torilis japonica (Houtt.) DC. 68580 312 Apiaceae Torilis du Japon plantes à fleurs blanches
Trèfle pied-de-lièvre 68989 Trifolium arvense L. 68989 14822 Fabaceae Trèfle pied-de-lièvre plantes à fleurs blanches
Trèfle rampant 69341 Trifolium repens L. 69341 14834 Fabaceae Trèfle rampant plantes à fleurs blanches
Véronique cymbalaire 71145 Veronica cymbalaria Bodard 71145 5506 Scrophulariaceae Véronique cymbalaire plantes à fleurs blanches
Aster écailleux 7909 Aster squamatus (Spreng.) Hieron. 7909 478 Asteraceae Aster écailleux plantes à fleurs blanches à coeur jaune
Galinsoga à petites fleurs 28869 Galinsoga parviflora Cav. 28869 800 Asteraceae Galinsoga à petites fleurs plantes à fleurs blanches à coeur jaune
Galinsoga cilié 28871 Galinsoga quadriradiata Ruiz & Pav. 28871 801 Asteraceae Galinsoga cilié plantes à fleurs blanches à coeur jaune
Matricaire camomille 41057 Matricaria recutita L. 41057 1063 Asteraceae Matricaire camomille plantes à fleurs blanches à coeur jaune
Matricaire inodore 69569 Matricaria perforata Mérat 41054 1062 Asteraceae Matricaire inodore plantes à fleurs blanches à coeur jaune
Morelle noire 64930 Solanum nigrum L. 64930 14552 Solanaceae Morelle noire plantes à fleurs blanches à coeur jaune
Pâquerette vivace 9408 Bellis perennis L. 9408 493 Asteraceae Pâquerette vivace plantes à fleurs blanches à coeur jaune
Bourrache officinale 9966 Borago officinalis L. 9966 1350 Boraginaceae Bourrache officinale plantes à fleurs bleues
Bugle rampante 2407 Ajuga reptans L. 2407 3519 Lamiaceae Bugle rampante plantes à fleurs bleues
Chicorée amère 17314 Cichorium intybus L. 17314 661 Asteraceae Chicorée amère plantes à fleurs bleues
Myosotis des champs 43173 Myosotis arvensis Hill 43173 1400 Boraginaceae Myosotis des champs plantes à fleurs bleues
Passiflore bleue 48083 Passiflora caerulea L. 48083 4059 Passifloraceae Passiflore bleue plantes à fleurs bleues
Véronique à feuilles de lierre 71191 Veronica hederifolia L. 71191 14890 Scrophulariaceae Véronique à feuilles de lierre plantes à fleurs bleues
Véronique à feuilles de serpolet 71348 Veronica serpyllifolia L. 71348 14893 Scrophulariaceae Véronique à feuilles de serpolet plantes à fleurs bleues
Véronique de Perse 71290 Veronica persica Poir. 71290 5522 Scrophulariaceae Véronique de Perse plantes à fleurs bleues
Véronique des champs 71090 Veronica arvensis L. 71090 5496 Scrophulariaceae Véronique des champs plantes à fleurs bleues
Véronique petit-chêne 75431 Veronica chamaedrys L. 75431 30423 Scrophulariaceae Véronique petit-chêne plantes à fleurs bleues
Vesce des haies 71787 Vicia sepium L. 71787 3266 Fabaceae Vesce des haies plantes à fleurs bleues
Vipérine commune 23559 Echium vulgare L. 23559 9898 Boraginaceae Vipérine commune plantes à fleurs bleues
Benoîte des villes 30154 Geum urbanum L. 30154 4758 Rosaceae Benoîte des villes plantes à fleurs jaunes
Chélidoine grande-éclaire 16703 Chelidonium majus L. 16703 4026 Papaveraceae Chélidoine grande-éclaire plantes à fleurs jaunes
Chou colza 10308 Brassica napus L. 10308 1556 Brassicaceae Chou colza plantes à fleurs jaunes
Diplotaxis à feuilles étroites 22660 Diplotaxis tenuifolia (L.) DC. 22660 1633 Brassicaceae Diplotaxis à feuilles étroites plantes à fleurs jaunes
Fenouil commun 27986 Foeniculum vulgare Mill. 27986 180 Apiaceae Fenouil commun plantes à fleurs jaunes
Fraisier de Duchesne 23328 Duchesnea indica (Andrews) Focke 23328 4738 Rosaceae Fraisier de Duchesne plantes à fleurs jaunes
Giroflée des murailles 25436 Erysimum cheiri (L.) Crantz 25436 1611 Brassicaceae Giroflée des murailles plantes à fleurs jaunes
Linaire commune 39331 Linaria vulgaris Mill. 39331 5377 Scrophulariaceae Linaire commune plantes à fleurs jaunes
Lotier corniculé 39988 Lotus corniculatus L. 39988 2988 Fabaceae Lotier corniculé plantes à fleurs jaunes
Luzerne d'Arabie 41184 Medicago arabica (L.) Huds. 41184 3014 Fabaceae Luzerne d'Arabie plantes à fleurs jaunes
Luzerne lupuline 41325 Medicago lupulina L. 41325 3029 Fabaceae Luzerne lupuline plantes à fleurs jaunes
Mélilot officinal 41839 Melilotus officinalis Lam. 41839 3060 Fabaceae Mélilot officinal plantes à fleurs jaunes
Millepertuis perforé 35348 Hypericum perforatum L. 35348 3494 Hypericaceae Millepertuis perforé plantes à fleurs jaunes
Moutarde des champs 75386 Sinapis arvensis L. 75386 30378 Brassicaceae Moutarde des champs plantes à fleurs jaunes
Muflier gueule-de-loup 5474 Antirrhinum majus L. 5474 8631 Scrophulariaceae Muflier gueule-de-loup plantes à fleurs jaunes
Onagre bisanuelle 44495 Oenothera biennis L. 44495 3914 Onagraceae Onagre bisanuelle plantes à fleurs jaunes
Orpin âcre 75358 Sedum acre L. 75358 30350 Crassulaceae Orpin âcre plantes à fleurs jaunes
Oxalis corniculée 47119 Oxalis corniculata L. 47119 4010 Oxalidaceae Oxalis corniculée plantes à fleurs jaunes
Oxalis des fontaines 47141 Oxalis fontana Bunge 47141 4017 Oxalidaceae Oxalis des fontaines plantes à fleurs jaunes
Panais cultivé 48097 Pastinaca sativa L. 48097 237 Apiaceae Panais cultivé plantes à fleurs jaunes
Potentille rampante 52829 Potentilla reptans L. 52829 4818 Rosaceae Potentille rampante plantes à fleurs jaunes
Pourpier maraîcher 52102 Portulaca oleracea L. 52102 4300 Portulacaceae Pourpier maraîcher plantes à fleurs jaunes
Renoncule âcre 54682 Ranunculus acris L. 54682 4490 Ranunculaceae Renoncule âcre plantes à fleurs jaunes
Renoncule bulbeuse 54838 Ranunculus bulbosus L. 54838 4502 Ranunculaceae Renoncule bulbeuse plantes à fleurs jaunes
Renoncule rampante 55340 Ranunculus repens L. 55340 4561 Ranunculaceae Renoncule rampante plantes à fleurs jaunes
Réséda jaune 75322 Reseda lutea L. 75322 30314 Resedaceae Réséda jaune plantes à fleurs jaunes
Sisymbre officinal 64674 Sisymbrium officinale (L.) Scop. 64674 14546 Brassicaceae Sisymbre officinal plantes à fleurs jaunes
Sisymbre vélaret 64651 Sisymbrium irio L. 64651 1803 Brassicaceae Sisymbre vélaret plantes à fleurs jaunes
Trèfle douteux 69085 Trifolium dubium Sibth. 69085 3152 Fabaceae Trèfle douteux plantes à fleurs jaunes
Trèfle jaune 75495 Trifolium campestre Schreb. 75495 30487 Fabaceae Trèfle jaune plantes à fleurs jaunes
Alcée rose-trémière 2451 Alcea rosea L. 2451 3801 Malvaceae Alcée rose-trémière plantes à fleurs roses
Belle-de-nuit commune 42698 Mirabilis jalapa L. 42698 3865 Nyctaginaceae Belle-de-nuit commune plantes à fleurs roses
Cardère à foulon 22678 Dipsacus fullonum L. 22678 2584 Dipsacaceae Cardère à foulon plantes à fleurs roses
Chardon à capitules denses 75026 Carduus pycnocephalus L. 75026 30018 Asteraceae Chardon à capitules denses plantes à fleurs roses
Epilobe à quatre angles 24336 Epilobium tetragonum L. 24336 9924 Onagraceae Epilobe à quatre angles plantes à fleurs roses
Érodium à feuilles de cigüe 25064 Erodium cicutarium (L.) L'Hér. 25064 9954 Geraniaceae Érodium à feuilles de cigüe plantes à fleurs roses
Érodium à feuilles de mauve 75116 Erodium malacoides (L.) L'Hér. 75116 30108 Geraniaceae Érodium à feuilles de mauve plantes à fleurs roses
Eupatoire chanvrine 25746 Eupatorium cannabinum L. 25746 786 Asteraceae Eupatoire chanvrine plantes à fleurs roses
Fumeterre officinale 28525 Fumaria officinalis L. 28525 3314 Papaveraceae Fumeterre officinale plantes à fleurs roses
Géranium à feuilles découpées 29941 Geranium dissectum L. 29941 3420 Geraniaceae Géranium à feuilles découpées plantes à fleurs roses
Géranium à feuilles molles 75468 Geranium molle L. 75468 30460 Geraniaceae Géranium à feuilles molles plantes à fleurs roses
Géranium à feuilles rondes 30056 Geranium rotundifolium L. 30056 3438 Geraniaceae Géranium à feuilles rondes plantes à fleurs roses
Géranium herbe-à-Robert 30049 Geranium robertianum subsp. robertianum 30049 10265 Geraniaceae Géranium herbe-à-Robert plantes à fleurs roses
Impatiente glanduleuse 35713 Impatiens glandulifera Royle 35713 1307 Balsaminaceae Impatiente glanduleuse plantes à fleurs roses
Lamier à feuilles embrassantes 75206 Lamium amplexicaule L. 75206 30198 Lamiaceae Lamier à feuilles embrassantes plantes à fleurs roses
Lamier pourpre 37538 Lamium purpureum L. 37538 3568 Lamiaceae Lamier pourpre plantes à fleurs roses
Liseron des champs 75060 Convolvulus arvensis L. 75060 30052 Convolvulaceae Liseron des champs plantes à fleurs roses
Salicaire rouge 40631 Lythrum salicaria L. 40631 3792 Lythraceae Salicaire rouge plantes à fleurs roses
Saponaire officinale 60403 Saponaria officinalis L. 60403 2178 Caryophyllaceae Saponaire officinale plantes à fleurs roses
Shérardie des champs 63722 Sherardia arvensis L. 63722 14514 Rubiaceae Shérardie des champs plantes à fleurs roses
Trèfle des près 69291 Trifolium pratense L. 69291 14832 Fabaceae Trèfle des près plantes à fleurs roses
Vesce cultivée 71760 Vicia sativa L. 71760 14908 Fabaceae Vesce cultivée plantes à fleurs roses
Centranthe lilas-d'Espagne 75042 Centranthus ruber (L.) DC. 75042 30034 Valerianaceae Centranthe lilas-d'Espagne plantes à fleurs rouges
Mouron des champs 101468 Lysimachia arvensis (L.) U.Manns & Anderb. 101468 8601 Primulacea Mouron des champs plantes à fleurs rouges
Pavot coquelicot 75277 Papaver rhoeas L. 75277 30269 Papaveraceae Pavot coquelicot plantes à fleurs rouges
Aphanès des champs 5600 Aphanes arvensis L. 5600 4700 Rosaceae Aphanès des champs plantes à fleurs vertes
Arum d'Italie 7024 Arum italicum Mill. 7024 8677 Araceae Arum d'Italie plantes à fleurs vertes
Bryone dioïque 11290 Bryonia dioica Jacq. 11290 2547 Cucurbitaceae Bryone dioïque plantes à fleurs vertes
Euphorbe des jardins 25996 Euphorbia peplus L. 25996 7570 Euphorbiaceae Euphorbe des jardins plantes à fleurs vertes
Euphorbe épurge 25941 Euphorbia lathyris L. 25941 2717 Euphorbiaceae Euphorbe épurge plantes à fleurs vertes
Euphorbe petit-cyprès 25823 Euphorbia cyparissias L. 25823 2692 Euphorbiaceae Euphorbe petit-cyprès plantes à fleurs vertes
Euphorbe réveille-matin 25914 Euphorbia helioscopia L. 25914 2710 Euphorbiaceae Euphorbe réveille-matin plantes à fleurs vertes
Euphorbe tachetée 25956 Euphorbia maculata L. 25956 2719 Euphorbiaceae Euphorbe tachetée plantes à fleurs vertes
Houblon grimpant 34958 Humulus lupulus L. 34958 1947 Cannabaceae Houblon grimpant plantes à fleurs vertes
Lierre grimpant 30892 Hedera helix L. 30892 329 Araliaceae Lierre grimpant plantes à fleurs vertes
Matricaire sans ligule 41027 Matricaria discoidea DC. 41027 1060 Asteraceae Matricaire sans ligule plantes à fleurs vertes
Vigne-vierge à cinq folioles 47997 Parthenocissus quinquefolia (L.) Planch. 47997 5769 Vitaceae Vigne-vierge à cinq folioles plantes à fleurs vertes
Bardane à petites têtes 6091 Arctium minus (Hill) Bernh. 6091 417 Asteraceae Bardane à petites têtes plantes à fleurs violettes
Brunelle commune 75307 Prunella vulgaris L. 75307 30299 Lamiaceae Brunelle commune plantes à fleurs violettes
Cirse commun 17870 Cirsium vulgare (Savi) Ten. 17870 691 Asteraceae Cirse commun plantes à fleurs violettes
Cirse des champs 17468 Cirsium arvense (L.) Scop. 17468 664 Asteraceae Cirse des champs plantes à fleurs violettes
Cymbalaire des murailles 75081 Cymbalaria muralis P.Gaertn. B.Mey. & Scherb. 75081 30073 Scrophulariaceae Cymbalaire des murailles plantes à fleurs violettes
Glécome lierre-terrestre 30252 Glechoma hederacea L. 30252 3549 Lamiaceae Glécome lierre-terrestre plantes à fleurs violettes
Luzerne cultivée 41470 Medicago sativa L. 41470 3041 Fabaceae Luzerne cultivée plantes à fleurs violettes
Mauve sylvestre 40893 Malva sylvestris L. 40893 3831 Malvaceae Mauve sylvestre plantes à fleurs violettes
Morelle douce-amère 64869 Solanum dulcamara L. 64869 5570 Solanaceae Morelle douce-amère plantes à fleurs violettes
Scabieuse des jardins 64813 Sixalix atropurpurea (L.) Greuter & Burdet 64813 14549 Dipsacaceae Scabieuse des jardins plantes à fleurs violettes
Violette odorante 72389 Viola odorata L. 72389 5746 Violaceae Violette odorante plantes à fleurs violettes
Agrostis stolonifère 1908 Agrostis stolonifera L. 1908 8558 Poaceae Agrostis stolonifère Graminées
Brome mou 10780 Bromus hordeaceus L. 10780 6698 Poaceae Brome mou Graminées
Brome stérile 11176 Bromus sterilis L. 11176 6720 Poaceae Brome stérile Graminées
Chiendent pied-de-poule 20551 Cynodon dactylon (L.) Pers. 20551 6750 Poaceae Chiendent pied-de-poule Graminées
Chiendent rampant 23913 Elytrigia repens (L.) Desv. ex Nevski 23913 9912 Poaceae Chiendent rampant Graminées
Dactyle aggloméré 21111 Dactylis glomerata L. 21111 6754 Poaceae Dactyle aggloméré Graminées
Digitaire sanguine 22486 Digitaria sanguinalis (L.) Scop. 22486 6780 Poaceae Digitaire sanguine Graminées
Echinochloé pied-de-coq 23376 Echinochloa crus-galli (L.) P.Beauv. 23376 9891 Poaceae Echinochloé pied-de-coq Graminées
Éragrostis mineure 24658 Eragrostis minor Host 24658 6817 Poaceae Éragrostis mineure Graminées
Faux millet 49724 Piptatherum miliaceum (L.) Coss. 49724 7069 Poaceae Faux millet Graminées
Houlque laineuse 34724 Holcus lanatus L. 34724 6947 Poaceae Houlque laineuse Graminées
Orge des rats 34857 Hordeum murinum L. 34857 6955 Poaceae Orge des rats Graminées
Pâturin annuel 50284 Poa annua L. 50284 7075 Poaceae Pâturin annuel Graminées
Ray-grass anglais 39692 Lolium perenne L. 39692 6983 Poaceae Ray-grass anglais Graminées
Rostraria à crête 57834 Rostraria cristata (L.) Tzvelev 57834 7117 Poaceae Rostraria à crête Graminées
Sétaire verticillée 63668 Setaria verticillata (L.) P.Beauv. 63668 7137 Poaceae Sétaire verticillée Graminées
Ailanthus altissima (Mill.) Swingle 2088 Ailanthus altissima (Mill.) Swingle 2088 5537 Simaroubaceae Ailanthus altissima (Mill.) Swingle arbres et arbustes
Crataegus monogyna Jacq. 19472 Crataegus monogyna Jacq. 19472 4721 Rosaceae Crataegus monogyna Jacq. arbres et arbustes
Alnus glutinosa (L.) Gaertn. 3318 Alnus glutinosa (L.) Gaertn. 3318 1321 Betulaceae Alnus glutinosa (L.) Gaertn. arbres et arbustes
Betula pendula Roth 9626 Betula pendula Roth 9626 1325 Betulaceae Betula pendula Roth arbres et arbustes
Buddleja davidii Franch. 11336 Buddleja davidii Franch. 11336 1837 Buddlejaceae Buddleja davidii Franch. arbres et arbustes
Cornus sanguinea L. 75064 Cornus sanguinea L. 75064 30056 Cornaceae Cornus sanguinea L. arbres et arbustes
Acer negundo L. 74932 Acer negundo L. 74932 29924 Aceraceae Acer negundo L. arbres et arbustes
Acer platanoides L. 74934 Acer platanoides L. 74934 29926 Aceraceae Acer platanoides L. arbres et arbustes
Ficus carica L. 75134 Ficus carica L. 75134 30126 Moraceae Ficus carica L. arbres et arbustes
Mahonia aquifolium (Pursh) Nutt. 40676 Mahonia aquifolium (Pursh) Nutt. 40676 1317 Berberidaceae Mahonia aquifolium (Pursh) Nutt. arbres et arbustes
Paulownia tomentosa (Thunb.) Steud. 48115 Paulownia tomentosa (Thunb.) Steud. 48115 5411 Scrophulariaceae Paulownia tomentosa (Thunb.) Steud. arbres et arbustes
Populus nigra L. 52030 Populus nigra L. 52030 5128 Salicaceae Populus nigra L. arbres et arbustes
Prunus spinosa L. 53652 Prunus spinosa L. 53652 4847 Rosaceae Prunus spinosa L. arbres et arbustes
Robinia pseudoacacia L. 56245 Robinia pseudoacacia L. 56245 3124 Fabaceae Robinia pseudoacacia L. arbres et arbustes
Sambucus nigra L. 60241 Sambucus nigra L. 60241 1968 Caprifoliaceae Sambucus nigra L. arbres et arbustes
Asplenium trichomanes L. 7728 Asplenium trichomanes L. 7728 7358 Aspleniaceae Asplenium trichomanes L. fougères et prêles
Asplenium ceterach L. 74978 Ceterach officinarum Willd. 77204 29970 Aspleniaceae Asplenium ceterach L. fougères et prêles
Asplenium ruta-muraria L. 7681 Asplenium ruta-muraria L. 7681 8688 Aspleniaceae Asplenium ruta-muraria L. fougères et prêles
Equisetum arvense L. 24488 Equisetum arvense L. 24488 7397 Equisetaceae Equisetum arvense L. fougères et prêles
Amaranthus deflexus L. 3944 Amaranthus deflexus L. 3944 39 Amaranthaceae Amaranthus deflexus L. plante à fleurs minuscules
Amaranthus retroflexus L. 4009 Amaranthus retroflexus L. 4009 49 Amaranthaceae Amaranthus retroflexus L. plante à fleurs minuscules
Ambrosia artemisiifolia L. 4066 Ambrosia artemisiifolia L. 4066 383 Asteraceae Ambrosia artemisiifolia L. plante à fleurs minuscules
Arabidopsis thaliana (L.) Heynh. 5767 Arabidopsis thaliana (L.) Heynh. 5767 1484 Brassicaceae Arabidopsis thaliana (L.) Heynh. plante à fleurs minuscules
Artemisia annua L. 6765 Artemisia annua L. 6765 430 Asteraceae Artemisia annua L. plante à fleurs minuscules
Artemisia vulgaris L. 6987 Artemisia vulgaris L. 6987 459 Asteraceae Artemisia vulgaris L. plante à fleurs minuscules
Artemisia verlotiorum Lamotte 6983 Artemisia verlotiorum Lamotte 6983 458 Asteraceae Artemisia verlotiorum Lamotte plante à fleurs minuscules
Atriplex prostrata Boucher ex DC. 8444 Atriplex prostrata Boucher ex DC. 8444 8712 Chenopodiaceae Atriplex prostrata Boucher ex DC. plante à fleurs minuscules
Atriplex patula L. 74991 Atriplex patula L. 74991 29983 Chenopodiaceae Atriplex patula L. plante à fleurs minuscules
Asparagus acutifolius L. 7214 Asparagus acutifolius L. 7214 6269 Asparagaceae Asparagus acutifolius L. plante à fleurs minuscules
Capsella bursa-pastoris (L.) Medik. 75016 Capsella bursa-pastoris (L.) Medik. 75016 30008 Brassicaceae Capsella bursa-pastoris (L.) Medik. plante à fleurs minuscules
Cardamine hirsuta L. 12878 Cardamine hirsuta L. 12878 1592 Brassicaceae Cardamine hirsuta L. plante à fleurs minuscules
Cerastium glomeratum Thuill. 15862 Cerastium glomeratum Thuill. 15862 2024 Caryophyllaceae Cerastium glomeratum Thuill. plante à fleurs minuscules
Cerastium fontanum Baumg. 15840 Cerastium fontanum Baumg. 15840 9277 Caryophyllaceae Cerastium fontanum Baumg. plante à fleurs minuscules
Chenopodium album L. 16741 Chenopodium album L. 16741 2335 Chenopodiaceae Chenopodium album L. plante à fleurs minuscules
Chenopodium murale L. 16847 Chenopodium murale L. 16847 2353 Chenopodiaceae Chenopodium murale L. plante à fleurs minuscules
Galium aparine L. 28896 Galium aparine L. 28896 5037 Rubiaceae Galium aparine L. plante à fleurs minuscules
Galium mollugo L. 29078 Galium mollugo L. 29078 5057 Rubiaceae Galium mollugo L. plante à fleurs minuscules
Lycopus europaeus L. 40533 Lycopus europaeus L. 40533 3576 Lamiaceae Lycopus europaeus L. plante à fleurs minuscules
Mercurialis annua L. 42320 Mercurialis annua L. 42320 2751 Euphorbiaceae Mercurialis annua L. plante à fleurs minuscules
Urtica urens L. 70431 Urtica urens L. 70431 5650 Urticaceae Urtica urens L. plante à fleurs minuscules
Urtica dioica L. 70396 Urtica dioica L. 70396 14875 Urticaceae Urtica dioica L. plante à fleurs minuscules
Parietaria judaica L. 47921 Parietaria judaica L. 47921 5641 Urticaceae Parietaria judaica L. plante à fleurs minuscules
Lepidium virginicum L. 38574 Lepidium virginicum L. 38574 1743 Brassicaceae Lepidium virginicum L. plante à fleurs minuscules
Persicaria maculosa Gray 48340 Polygonum persicaria L. 51630 4236 Polygonaceae Persicaria maculosa Gray plante à fleurs minuscules
Sanguisorba minor Scop. 60289 Sanguisorba minor Scop. 60289 4976 Rosaceae Sanguisorba minor Scop. plante à fleurs minuscules
Plantago coronopus L. 49875 Plantago coronopus L. 49875 4088 Plantaginaceae Plantago coronopus L. plante à fleurs minuscules
Plantago lanceolata L. 49948 Plantago lanceolata L. 49948 4094 Plantaginaceae Plantago lanceolata L. plante à fleurs minuscules
Plantago major L. 49976 Plantago major L. 49976 4096 Plantaginaceae Plantago major L. plante à fleurs minuscules
Plantago sempervirens Crantz 50068 Plantago sempervirens Crantz 50068 4105 Plantaginaceae Plantago sempervirens Crantz plante à fleurs minuscules
Polycarpon tetraphyllum (L.) L. 51112 Polycarpon tetraphyllum (L.) L. 51112 13356 Caryophyllaceae Polycarpon tetraphyllum (L.) L. plante à fleurs minuscules
Polygonum aviculare L. 51363 Polygonum aviculare L. 51363 4224 Polygonaceae Polygonum aviculare L. plante à fleurs minuscules
Fallopia convolvulus (L.) Á.Löve 26474 Fallopia convolvulus (L.) Á.Löve 26474 4218 Polygonaceae Fallopia convolvulus (L.) Á.Löve plante à fleurs minuscules
Rumex obtusifolius L. 58812 Rumex obtusifolius L. 58812 4274 Polygonaceae Rumex obtusifolius L. plante à fleurs minuscules
Rumex crispus L. 58698 Rumex crispus L. 58698 4262 Polygonaceae Rumex crispus L. plante à fleurs minuscules
Sagina procumbens L. 59112 Sagina procumbens L. 59112 2167 Caryophyllaceae Sagina procumbens L. plante à fleurs minuscules
Sagina apetala Ard. 59056 Sagina apetala Ard. 59056 2161 Caryophyllaceae Sagina apetala Ard. plante à fleurs minuscules
Erigeron bonariensis L. 24874 Conyza bonariensis (L.) Cronquist 18835 699 Asteraceae Erigeron bonariensis L. plante à fleurs minuscules
Erigeron sumatrensis Retz. 24956 Conyza sumatrensis (Retz.) E.Walker 18851 702 Asteraceae Erigeron sumatrensis Retz. plante à fleurs minuscules
Erigeron canadensis L. 24880 Conyza canadensis (L.) Cronquist 18836 700 Asteraceae Erigeron canadensis L. plante à fleurs minuscules
Verbena officinalis L. 71022 Verbena officinalis L. 71022 5710 Verbenaceae Verbena officinalis L. plante à fleurs minuscules
Vicia hirsuta (L.) Gray 71616 Vicia hirsuta (L.) Gray 71616 3242 Fabaceae Vicia hirsuta (L.) Gray plante à fleurs minuscules
Andryala integrifolia L. 4699 Andryala integrifolia L. 4699 395 Asteraceae Andryala integrifolia L. plantes à capitules jaunes
Chondrilla juncea L. 17040 Chondrilla juncea L. 17040 647 Asteraceae Chondrilla juncea L. plantes à capitules jaunes
Crepis bursifolia L. 19627 Crepis bursifolia L. 19627 715 Asteraceae Crepis bursifolia L. plantes à capitules jaunes
Crepis vesicaria subsp. taraxacifolia (Thuill.) Thell. ex Schinz & R.Keller 19797 Crepis vesicaria subsp. taraxacifolia (Thuill.) Thell. ex Schinz & R.Keller 19797 739 Asteraceae Crepis vesicaria subsp. taraxacifolia (Thuill.) Thell. ex Schinz & R.Keller plantes à capitules jaunes
Crepis capillaris (L.) Wallr. 19630 Crepis capillaris (L.) Wallr. 19630 716 Asteraceae Crepis capillaris (L.) Wallr. plantes à capitules jaunes
Crepis sancta subsp. nemausensis (Vill.) Babc. 19756 Crepis sancta subsp. nemausensis (Vill.) Babc. 19756 734 Asteraceae Crepis sancta subsp. nemausensis (Vill.) Babc. plantes à capitules jaunes
Crepis foetida L. 19654 Crepis foetida L. 19654 719 Asteraceae Crepis foetida L. plantes à capitules jaunes
Crepis setosa Haller f. 19762 Crepis setosa Haller f. 19762 735 Asteraceae Crepis setosa Haller f. plantes à capitules jaunes
Jacobaea vulgaris Moench 36239 Senecio jacobaea subsp. jacobaea 62926 14453 Asteraceae Jacobaea vulgaris Moench plantes à capitules jaunes
Sonchus tenerrimus L. 65231 Sonchus tenerrimus L. 65231 1234 Asteraceae Sonchus tenerrimus L. plantes à capitules jaunes
Sonchus oleraceus L. 65205 Sonchus oleraceus L. 65205 1232 Asteraceae Sonchus oleraceus L. plantes à capitules jaunes
Sonchus asper (L.) Hill 65171 Sonchus asper (L.) Hill 65171 14563 Asteraceae Sonchus asper (L.) Hill plantes à capitules jaunes
Lactuca muralis (L.) G.Mey. 37338 Mycelis muralis (L.) Dumort. 43130 1066 Asteraceae Lactuca muralis (L.) G.Mey. plantes à capitules jaunes
Lactuca serriola L. 37373 Lactuca serriola L. 37373 991 Asteraceae Lactuca serriola L. plantes à capitules jaunes
Lapsana communis L. 37660 Lapsana communis L. 37660 997 Asteraceae Lapsana communis L. plantes à capitules jaunes
Picris hieracioides L. 49351 Picris hieracioides L. 49351 1102 Asteraceae Picris hieracioides L. plantes à capitules jaunes
Helminthotheca echioides (L.) Holub 31546 Picris echioides L. 49346 1101 Asteraceae Helminthotheca echioides (L.) Holub plantes à capitules jaunes
Taraxacum div. Sp. 87290 Taraxacum 87290 36245 Asteraceae Taraxacum div. Sp. plantes à capitules jaunes
Hypochaeris radicata L. 35439 Hypochaeris radicata L. 35439 967 Asteraceae Hypochaeris radicata L. plantes à capitules jaunes
Reichardia picroides (L.) Roth 55654 Reichardia picroides (L.) Roth 55654 1115 Asteraceae Reichardia picroides (L.) Roth plantes à capitules jaunes
Tragopogon pratensis L. 68767 Tragopogon pratensis L. 68767 14813 Asteraceae Tragopogon pratensis L. plantes à capitules jaunes
Senecio erucifolius L. 62849 Senecio erucifolius L. 62849 1166 Asteraceae Senecio erucifolius L. plantes à capitules jaunes
Senecio vulgaris L. 63096 Senecio vulgaris L. 63096 1203 Asteraceae Senecio vulgaris L. plantes à capitules jaunes
Senecio inaequidens DC. 62909 Senecio inaequidens DC. 62909 1176 Asteraceae Senecio inaequidens DC. plantes à capitules jaunes
Senecio viscosus L. 63095 Senecio viscosus L. 63095 1202 Asteraceae Senecio viscosus L. plantes à capitules jaunes
Solidago gigantea Aiton 65065 Solidago gigantea Aiton 65065 14560 Asteraceae Solidago gigantea Aiton plantes à capitules jaunes
Tussilago farfara L. 70113 Tussilago farfara L. 70113 1284 Asteraceae Tussilago farfara L. plantes à capitules jaunes
Urospermum dalechampii (L.) Scop. ex F.W.Schmidt 70381 Urospermum dalechampii (L.) Scop. ex F.W.Schmidt 70381 1286 Asteraceae Urospermum dalechampii (L.) Scop. ex F.W.Schmidt plantes à capitules jaunes
Achillea millefolium L. 365 Achillea millefolium L. 365 8527 Asteraceae Achillea millefolium L. plantes à fleurs blanches
Alliaria petiolata (M.Bieb.) Cavara & Grande 2913 Alliaria petiolata (M.Bieb.) Cavara & Grande 2913 1468 Brassicaceae Alliaria petiolata (M.Bieb.) Cavara & Grande plantes à fleurs blanches
Heracleum sphondylium L. 31656 Heracleum sphondylium L. 31656 187 Apiaceae Heracleum sphondylium L. plantes à fleurs blanches
Daucus carota L. 21674 Daucus carota L. 21674 151 Apiaceae Daucus carota L. plantes à fleurs blanches
Anthriscus sylvestris (L.) Hoffm. 5290 Anthriscus sylvestris (L.) Hoffm. 5290 8626 Apiaceae Anthriscus sylvestris (L.) Hoffm. plantes à fleurs blanches
Chaerophyllum temulum L. 16354 Chaerophyllum temulum L. 16354 140 Apiaceae Chaerophyllum temulum L. plantes à fleurs blanches
Clematis vitalba L. 18235 Clematis vitalba L. 18235 4436 Ranunculaceae Clematis vitalba L. plantes à fleurs blanches
Datura stramonium L. 21654 Datura stramonium L. 21654 5544 Solanaceae Datura stramonium L. plantes à fleurs blanches
Diplotaxis erucoides (L.) DC. 75095 Diplotaxis erucoides (L.) DC. 75095 30087 Brassicaceae Diplotaxis erucoides (L.) DC. plantes à fleurs blanches
Draba verna L. 22994 Erophila verna (L.) Chevall. 25208 1653 Brassicaceae Draba verna L. plantes à fleurs blanches
Fumaria capreolata L. 75465 Fumaria capreolata L. 75465 30457 Papaveraceae Fumaria capreolata L. plantes à fleurs blanches
Lamium album L. 37472 Lamium album L. 37472 3557 Lamiaceae Lamium album L. plantes à fleurs blanches
Chaenorrhinum minus (L.) Lange 16280 Chaenorrhinum minus (L.) Lange 16280 5311 Scrophulariaceae Chaenorrhinum minus (L.) Lange plantes à fleurs blanches
Calystegia sepium (L.) R.Br. 12341 Calystegia sepium (L.) R.Br. 12341 2448 Convolvulaceae Calystegia sepium (L.) R.Br. plantes à fleurs blanches
Malva neglecta Wallr. 40856 Malva neglecta Wallr. 40856 3827 Malvaceae Malva neglecta Wallr. plantes à fleurs blanches
Melilotus albus Medik. 41764 Melilotus albus Medik. 41764 3053 Fabaceae Melilotus albus Medik. plantes à fleurs blanches
Umbilicus rupestris (Salisb.) Dandy 70339 Umbilicus rupestris (Salisb.) Dandy 70339 2545 Crassulaceae Umbilicus rupestris (Salisb.) Dandy plantes à fleurs blanches
Sedum album L. 62141 Sedum album L. 62141 2489 Crassulaceae Sedum album L. plantes à fleurs blanches
Lepidium draba L. 38489 Lepidium draba L. 38489 1609 Brassicaceae Lepidium draba L. plantes à fleurs blanches
Viola arvensis Murray 72065 Viola arvensis Murray 72065 14914 Violaceae Viola arvensis Murray plantes à fleurs blanches
Phytolacca americana L. 49293 Phytolacca americana L. 49293 4061 Phytolaccaceae Phytolacca americana L. plantes à fleurs blanches
Reynoutria japonica Houtt. 55763 Reynoutria japonica Houtt. 55763 4244 Polygonaceae Reynoutria japonica Houtt. plantes à fleurs blanches
Reseda alba L. 55658 Reseda alba L. 55658 4601 Resedaceae Reseda alba L. plantes à fleurs blanches
Rubus div. sp. 77191 Rubus 77191 31181 Rosaceae Rubus div. sp. plantes à fleurs blanches
Arenaria serpyllifolia L. 6292 Arenaria serpyllifolia L. 6292 8642 Caryophyllaceae Arenaria serpyllifolia L. plantes à fleurs blanches
Saxifraga tridactylites L. 61042 Saxifraga tridactylites L. 61042 5290 Saxifragaceae Saxifraga tridactylites L. plantes à fleurs blanches
Silene latifolia subsp. alba (Mill.) Greuter & Burdet 64192 Silene latifolia subsp. alba (Mill.) Greuter & Burdet 64192 2218 Caryophyllaceae Silene latifolia subsp. alba (Mill.) Greuter & Burdet plantes à fleurs blanches
Silene vulgaris (Moench) Garcke 64419 Silene vulgaris (Moench) Garcke 64419 14537 Caryophyllaceae Silene vulgaris (Moench) Garcke plantes à fleurs blanches
Stellaria media (L.) Vill. 75396 Stellaria media (L.) Vill. 75396 30388 Caryophyllaceae Stellaria media (L.) Vill. plantes à fleurs blanches
Torilis japonica (Houtt.) DC. 68580 Torilis japonica (Houtt.) DC. 68580 312 Apiaceae Torilis japonica (Houtt.) DC. plantes à fleurs blanches
Trifolium arvense L. 68989 Trifolium arvense L. 68989 14822 Fabaceae Trifolium arvense L. plantes à fleurs blanches
Trifolium repens L. 69341 Trifolium repens L. 69341 14834 Fabaceae Trifolium repens L. plantes à fleurs blanches
Veronica cymbalaria Bodard 71145 Veronica cymbalaria Bodard 71145 5506 Scrophulariaceae Veronica cymbalaria Bodard plantes à fleurs blanches
Aster squamatus (Spreng.) Hieron. 7909 Aster squamatus (Spreng.) Hieron. 7909 478 Asteraceae Aster squamatus (Spreng.) Hieron. plantes à fleurs blanches à coeur jaune
Galinsoga parviflora Cav. 28869 Galinsoga parviflora Cav. 28869 800 Asteraceae Galinsoga parviflora Cav. plantes à fleurs blanches à coeur jaune
Galinsoga quadriradiata Ruiz & Pav. 28871 Galinsoga quadriradiata Ruiz & Pav. 28871 801 Asteraceae Galinsoga quadriradiata Ruiz & Pav. plantes à fleurs blanches à coeur jaune
Matricaria recutita L. 41057 Matricaria recutita L. 41057 1063 Asteraceae Matricaria recutita L. plantes à fleurs blanches à coeur jaune
Tripleurospermum inodorum Sch.Bip. 69569 Matricaria perforata Mérat 41054 1062 Asteraceae Tripleurospermum inodorum Sch.Bip. plantes à fleurs blanches à coeur jaune
Solanum nigrum L. 64930 Solanum nigrum L. 64930 14552 Solanaceae Solanum nigrum L. plantes à fleurs blanches à coeur jaune
Bellis perennis L. 9408 Bellis perennis L. 9408 493 Asteraceae Bellis perennis L. plantes à fleurs blanches à coeur jaune
Borago officinalis L. 9966 Borago officinalis L. 9966 1350 Boraginaceae Borago officinalis L. plantes à fleurs bleues
Ajuga reptans L. 2407 Ajuga reptans L. 2407 3519 Lamiaceae Ajuga reptans L. plantes à fleurs bleues
Cichorium intybus L. 17314 Cichorium intybus L. 17314 661 Asteraceae Cichorium intybus L. plantes à fleurs bleues
Myosotis arvensis Hill 43173 Myosotis arvensis Hill 43173 1400 Boraginaceae Myosotis arvensis Hill plantes à fleurs bleues
Passiflora caerulea L. 48083 Passiflora caerulea L. 48083 4059 Passifloraceae Passiflora caerulea L. plantes à fleurs bleues
Veronica hederifolia L. 71191 Veronica hederifolia L. 71191 14890 Scrophulariaceae Veronica hederifolia L. plantes à fleurs bleues
Veronica serpyllifolia L. 71348 Veronica serpyllifolia L. 71348 14893 Scrophulariaceae Veronica serpyllifolia L. plantes à fleurs bleues
Veronica persica Poir. 71290 Veronica persica Poir. 71290 5522 Scrophulariaceae Veronica persica Poir. plantes à fleurs bleues
Veronica arvensis L. 71090 Veronica arvensis L. 71090 5496 Scrophulariaceae Veronica arvensis L. plantes à fleurs bleues
Veronica chamaedrys L. 75431 Veronica chamaedrys L. 75431 30423 Scrophulariaceae Veronica chamaedrys L. plantes à fleurs bleues
Vicia sepium L. 71787 Vicia sepium L. 71787 3266 Fabaceae Vicia sepium L. plantes à fleurs bleues
Echium vulgare L. 23559 Echium vulgare L. 23559 9898 Boraginaceae Echium vulgare L. plantes à fleurs bleues
Geum urbanum L. 30154 Geum urbanum L. 30154 4758 Rosaceae Geum urbanum L. plantes à fleurs jaunes
Chelidonium majus L. 16703 Chelidonium majus L. 16703 4026 Papaveraceae Chelidonium majus L. plantes à fleurs jaunes
Brassica napus L. 10308 Brassica napus L. 10308 1556 Brassicaceae Brassica napus L. plantes à fleurs jaunes
Diplotaxis tenuifolia (L.) DC. 22660 Diplotaxis tenuifolia (L.) DC. 22660 1633 Brassicaceae Diplotaxis tenuifolia (L.) DC. plantes à fleurs jaunes
Foeniculum vulgare Mill. 27986 Foeniculum vulgare Mill. 27986 180 Apiaceae Foeniculum vulgare Mill. plantes à fleurs jaunes
Duchesnea indica (Andrews) Focke 23328 Duchesnea indica (Andrews) Focke 23328 4738 Rosaceae Duchesnea indica (Andrews) Focke plantes à fleurs jaunes
Erysimum cheiri (L.) Crantz 25436 Erysimum cheiri (L.) Crantz 25436 1611 Brassicaceae Erysimum cheiri (L.) Crantz plantes à fleurs jaunes
Linaria vulgaris Mill. 39331 Linaria vulgaris Mill. 39331 5377 Scrophulariaceae Linaria vulgaris Mill. plantes à fleurs jaunes
Lotus corniculatus L. 39988 Lotus corniculatus L. 39988 2988 Fabaceae Lotus corniculatus L. plantes à fleurs jaunes
Medicago arabica (L.) Huds. 41184 Medicago arabica (L.) Huds. 41184 3014 Fabaceae Medicago arabica (L.) Huds. plantes à fleurs jaunes
Medicago lupulina L. 41325 Medicago lupulina L. 41325 3029 Fabaceae Medicago lupulina L. plantes à fleurs jaunes
Melilotus officinalis Lam. 41839 Melilotus officinalis Lam. 41839 3060 Fabaceae Melilotus officinalis Lam. plantes à fleurs jaunes
Hypericum perforatum L. 35348 Hypericum perforatum L. 35348 3494 Hypericaceae Hypericum perforatum L. plantes à fleurs jaunes
Sinapis arvensis L. 75386 Sinapis arvensis L. 75386 30378 Brassicaceae Sinapis arvensis L. plantes à fleurs jaunes
Antirrhinum majus L. 5474 Antirrhinum majus L. 5474 8631 Scrophulariaceae Antirrhinum majus L. plantes à fleurs jaunes
Oenothera biennis L. 44495 Oenothera biennis L. 44495 3914 Onagraceae Oenothera biennis L. plantes à fleurs jaunes
Sedum acre L. 75358 Sedum acre L. 75358 30350 Crassulaceae Sedum acre L. plantes à fleurs jaunes
Oxalis corniculata L. 47119 Oxalis corniculata L. 47119 4010 Oxalidaceae Oxalis corniculata L. plantes à fleurs jaunes
Oxalis fontana Bunge 47141 Oxalis fontana Bunge 47141 4017 Oxalidaceae Oxalis fontana Bunge plantes à fleurs jaunes
Pastinaca sativa L. 48097 Pastinaca sativa L. 48097 237 Apiaceae Pastinaca sativa L. plantes à fleurs jaunes
Potentilla reptans L. 52829 Potentilla reptans L. 52829 4818 Rosaceae Potentilla reptans L. plantes à fleurs jaunes
Portulaca oleracea L. 52102 Portulaca oleracea L. 52102 4300 Portulacaceae Portulaca oleracea L. plantes à fleurs jaunes
Ranunculus acris L. 54682 Ranunculus acris L. 54682 4490 Ranunculaceae Ranunculus acris L. plantes à fleurs jaunes
Ranunculus bulbosus L. 54838 Ranunculus bulbosus L. 54838 4502 Ranunculaceae Ranunculus bulbosus L. plantes à fleurs jaunes
Ranunculus repens L. 55340 Ranunculus repens L. 55340 4561 Ranunculaceae Ranunculus repens L. plantes à fleurs jaunes
Reseda lutea L. 75322 Reseda lutea L. 75322 30314 Resedaceae Reseda lutea L. plantes à fleurs jaunes
Sisymbrium officinale (L.) Scop. 64674 Sisymbrium officinale (L.) Scop. 64674 14546 Brassicaceae Sisymbrium officinale (L.) Scop. plantes à fleurs jaunes
Sisymbrium irio L. 64651 Sisymbrium irio L. 64651 1803 Brassicaceae Sisymbrium irio L. plantes à fleurs jaunes
Trifolium dubium Sibth. 69085 Trifolium dubium Sibth. 69085 3152 Fabaceae Trifolium dubium Sibth. plantes à fleurs jaunes
Trifolium campestre Schreb. 75495 Trifolium campestre Schreb. 75495 30487 Fabaceae Trifolium campestre Schreb. plantes à fleurs jaunes
Alcea rosea L. 2451 Alcea rosea L. 2451 3801 Malvaceae Alcea rosea L. plantes à fleurs roses
Mirabilis jalapa L. 42698 Mirabilis jalapa L. 42698 3865 Nyctaginaceae Mirabilis jalapa L. plantes à fleurs roses
Dipsacus fullonum L. 22678 Dipsacus fullonum L. 22678 2584 Dipsacaceae Dipsacus fullonum L. plantes à fleurs roses
Carduus pycnocephalus L. 75026 Carduus pycnocephalus L. 75026 30018 Asteraceae Carduus pycnocephalus L. plantes à fleurs roses
Epilobium tetragonum L. 24336 Epilobium tetragonum L. 24336 9924 Onagraceae Epilobium tetragonum L. plantes à fleurs roses
Erodium cicutarium (L.) L'Hér. 25064 Erodium cicutarium (L.) L'Hér. 25064 9954 Geraniaceae Erodium cicutarium (L.) L'Hér. plantes à fleurs roses
Erodium malacoides (L.) L'Hér. 75116 Erodium malacoides (L.) L'Hér. 75116 30108 Geraniaceae Erodium malacoides (L.) L'Hér. plantes à fleurs roses
Eupatorium cannabinum L. 25746 Eupatorium cannabinum L. 25746 786 Asteraceae Eupatorium cannabinum L. plantes à fleurs roses
Fumaria officinalis L. 28525 Fumaria officinalis L. 28525 3314 Papaveraceae Fumaria officinalis L. plantes à fleurs roses
Geranium dissectum L. 29941 Geranium dissectum L. 29941 3420 Geraniaceae Geranium dissectum L. plantes à fleurs roses
Geranium molle L. 75468 Geranium molle L. 75468 30460 Geraniaceae Geranium molle L. plantes à fleurs roses
Geranium rotundifolium L. 30056 Geranium rotundifolium L. 30056 3438 Geraniaceae Geranium rotundifolium L. plantes à fleurs roses
Geranium robertianum subsp. robertianum 30049 Geranium robertianum subsp. robertianum 30049 10265 Geraniaceae Geranium robertianum subsp. robertianum plantes à fleurs roses
Impatiens glandulifera Royle 35713 Impatiens glandulifera Royle 35713 1307 Balsaminaceae Impatiens glandulifera Royle plantes à fleurs roses
Lamium amplexicaule L. 75206 Lamium amplexicaule L. 75206 30198 Lamiaceae Lamium amplexicaule L. plantes à fleurs roses
Lamium purpureum L. 37538 Lamium purpureum L. 37538 3568 Lamiaceae Lamium purpureum L. plantes à fleurs roses
Convolvulus arvensis L. 75060 Convolvulus arvensis L. 75060 30052 Convolvulaceae Convolvulus arvensis L. plantes à fleurs roses
Lythrum salicaria L. 40631 Lythrum salicaria L. 40631 3792 Lythraceae Lythrum salicaria L. plantes à fleurs roses
Saponaria officinalis L. 60403 Saponaria officinalis L. 60403 2178 Caryophyllaceae Saponaria officinalis L. plantes à fleurs roses
Sherardia arvensis L. 63722 Sherardia arvensis L. 63722 14514 Rubiaceae Sherardia arvensis L. plantes à fleurs roses
Trifolium pratense L. 69291 Trifolium pratense L. 69291 14832 Fabaceae Trifolium pratense L. plantes à fleurs roses
Vicia sativa L. 71760 Vicia sativa L. 71760 14908 Fabaceae Vicia sativa L. plantes à fleurs roses
Centranthus ruber (L.) DC. 75042 Centranthus ruber (L.) DC. 75042 30034 Valerianaceae Centranthus ruber (L.) DC. plantes à fleurs rouges
Lysimachia arvensis (L.) U.Manns & Anderb. 101468 Lysimachia arvensis (L.) U.Manns & Anderb. 101468 8601 Primulacea Lysimachia arvensis (L.) U.Manns & Anderb. plantes à fleurs rouges
Papaver rhoeas L. 75277 Papaver rhoeas L. 75277 30269 Papaveraceae Papaver rhoeas L. plantes à fleurs rouges
Aphanes arvensis L. 5600 Aphanes arvensis L. 5600 4700 Rosaceae Aphanes arvensis L. plantes à fleurs vertes
Arum italicum Mill. 7024 Arum italicum Mill. 7024 8677 Araceae Arum italicum Mill. plantes à fleurs vertes
Bryonia dioica Jacq. 11290 Bryonia dioica Jacq. 11290 2547 Cucurbitaceae Bryonia dioica Jacq. plantes à fleurs vertes
Euphorbia peplus L. 25996 Euphorbia peplus L. 25996 7570 Euphorbiaceae Euphorbia peplus L. plantes à fleurs vertes
Euphorbia lathyris L. 25941 Euphorbia lathyris L. 25941 2717 Euphorbiaceae Euphorbia lathyris L. plantes à fleurs vertes
Euphorbia cyparissias L. 25823 Euphorbia cyparissias L. 25823 2692 Euphorbiaceae Euphorbia cyparissias L. plantes à fleurs vertes
Euphorbia helioscopia L. 25914 Euphorbia helioscopia L. 25914 2710 Euphorbiaceae Euphorbia helioscopia L. plantes à fleurs vertes
Euphorbia maculata L. 25956 Euphorbia maculata L. 25956 2719 Euphorbiaceae Euphorbia maculata L. plantes à fleurs vertes
Humulus lupulus L. 34958 Humulus lupulus L. 34958 1947 Cannabaceae Humulus lupulus L. plantes à fleurs vertes
Hedera helix L. 30892 Hedera helix L. 30892 329 Araliaceae Hedera helix L. plantes à fleurs vertes
Matricaria discoidea DC. 41027 Matricaria discoidea DC. 41027 1060 Asteraceae Matricaria discoidea DC. plantes à fleurs vertes
Parthenocissus quinquefolia (L.) Planch. 47997 Parthenocissus quinquefolia (L.) Planch. 47997 5769 Vitaceae Parthenocissus quinquefolia (L.) Planch. plantes à fleurs vertes
Arctium minus (Hill) Bernh. 6091 Arctium minus (Hill) Bernh. 6091 417 Asteraceae Arctium minus (Hill) Bernh. plantes à fleurs violettes
Prunella vulgaris L. 75307 Prunella vulgaris L. 75307 30299 Lamiaceae Prunella vulgaris L. plantes à fleurs violettes
Cirsium vulgare (Savi) Ten. 17870 Cirsium vulgare (Savi) Ten. 17870 691 Asteraceae Cirsium vulgare (Savi) Ten. plantes à fleurs violettes
Cirsium arvense (L.) Scop. 17468 Cirsium arvense (L.) Scop. 17468 664 Asteraceae Cirsium arvense (L.) Scop. plantes à fleurs violettes
Cymbalaria muralis P.Gaertn. B.Mey. & Scherb. 75081 Cymbalaria muralis P.Gaertn. B.Mey. & Scherb. 75081 30073 Scrophulariaceae Cymbalaria muralis P.Gaertn. B.Mey. & Scherb. plantes à fleurs violettes
Glechoma hederacea L. 30252 Glechoma hederacea L. 30252 3549 Lamiaceae Glechoma hederacea L. plantes à fleurs violettes
Medicago sativa L. 41470 Medicago sativa L. 41470 3041 Fabaceae Medicago sativa L. plantes à fleurs violettes
Malva sylvestris L. 40893 Malva sylvestris L. 40893 3831 Malvaceae Malva sylvestris L. plantes à fleurs violettes
Solanum dulcamara L. 64869 Solanum dulcamara L. 64869 5570 Solanaceae Solanum dulcamara L. plantes à fleurs violettes
Sixalix atropurpurea (L.) Greuter & Burdet 64813 Sixalix atropurpurea (L.) Greuter & Burdet 64813 14549 Dipsacaceae Sixalix atropurpurea (L.) Greuter & Burdet plantes à fleurs violettes
Viola odorata L. 72389 Viola odorata L. 72389 5746 Violaceae Viola odorata L. plantes à fleurs violettes
Agrostis stolonifera L. 1908 Agrostis stolonifera L. 1908 8558 Poaceae Agrostis stolonifera L. Graminées
Bromus hordeaceus L. 10780 Bromus hordeaceus L. 10780 6698 Poaceae Bromus hordeaceus L. Graminées
Bromus sterilis L. 11176 Bromus sterilis L. 11176 6720 Poaceae Bromus sterilis L. Graminées
Cynodon dactylon (L.) Pers. 20551 Cynodon dactylon (L.) Pers. 20551 6750 Poaceae Cynodon dactylon (L.) Pers. Graminées
Elytrigia repens (L.) Desv. ex Nevski 23913 Elytrigia repens (L.) Desv. ex Nevski 23913 9912 Poaceae Elytrigia repens (L.) Desv. ex Nevski Graminées
Dactylis glomerata L. 21111 Dactylis glomerata L. 21111 6754 Poaceae Dactylis glomerata L. Graminées
Digitaria sanguinalis (L.) Scop. 22486 Digitaria sanguinalis (L.) Scop. 22486 6780 Poaceae Digitaria sanguinalis (L.) Scop. Graminées
Echinochloa crus-galli (L.) P.Beauv. 23376 Echinochloa crus-galli (L.) P.Beauv. 23376 9891 Poaceae Echinochloa crus-galli (L.) P.Beauv. Graminées
Eragrostis minor Host 24658 Eragrostis minor Host 24658 6817 Poaceae Eragrostis minor Host Graminées
Piptatherum miliaceum (L.) Coss. 49724 Piptatherum miliaceum (L.) Coss. 49724 7069 Poaceae Piptatherum miliaceum (L.) Coss. Graminées
Holcus lanatus L. 34724 Holcus lanatus L. 34724 6947 Poaceae Holcus lanatus L. Graminées
Hordeum murinum L. 34857 Hordeum murinum L. 34857 6955 Poaceae Hordeum murinum L. Graminées
Poa annua L. 50284 Poa annua L. 50284 7075 Poaceae Poa annua L. Graminées
Lolium perenne L. 39692 Lolium perenne L. 39692 6983 Poaceae Lolium perenne L. Graminées
Rostraria cristata (L.) Tzvelev 57834 Rostraria cristata (L.) Tzvelev 57834 7117 Poaceae Rostraria cristata (L.) Tzvelev Graminées
Setaria verticillata (L.) P.Beauv. 63668 Setaria verticillata (L.) P.Beauv. 63668 7137 Poaceae Setaria verticillata (L.) P.Beauv. Graminées
Phyllitis scolopendrium L. 49132 Asplenium scolopendrium L. 74981 29973 Aspleniaceae Scolopendre officinale
Scolopendre officinale 49132 Asplenium scolopendrium L. 74981 29973 Aspleniaceae Scolopendre officinale
Dryopteris filix-mas (L.) Schott 23262 Dryopteris filix-mas (L.) Schott 23262 7379 Dryopteridaceae Fougère mâle
Fougère mâle 23262 Dryopteris filix-mas (L.) Schott 23262 7379 Dryopteridaceae Fougère mâle
Geranium pusillum L. 30036 Geranium pusillum L. 30036 3432 Geraniaceae Géranium fluet
Géranium fluet 30036 Geranium pusillum L. 30036 3432 Geraniaceae Géranium fluet
Lepidium ruderale L. 38554 Lepidium ruderale L. 38554 1740 Brassicaceae Passerage des décombres
Passerage des décombres 38554 Lepidium ruderale L. 38554 1740 Brassicaceae Passerage des décombres
Lepidium squamatum Forssk. 38565 Lepidium squamatum Forssk. 38565 1625 Brassicaceae Corne-de-cerf écailleuse
Corne-de-cerf écailleuse 38565 Lepidium squamatum Forssk. 38565 1625 Brassicaceae Corne-de-cerf écailleuse
Coquelicot 75277 Papaver rhoeas L. 75277 30269 Papaveraceae Coquelicot plantes à fleurs rouges
Plante de type pissenlit (capitules jaunes non déterminée) 100897 Asteracea 100897 36470 Asteraceae Plante de type pissenlit (capitules jaunes non déterminée) plantes à capitules jaunes
Plante de type carotte (ombelle blanche ou jaune non déterminée) 100948 Apiaceae 100948 36521 Apiaceae Plante de type carotte (ombelle blanche ou jaune non déterminée)
Graminée non déterminée 100898 Poaceae 100898 36471 Poaceae Graminée non déterminée Graminées
Crucifère non déterminée (4 pétales jaunes ou blancs, disposés en croix) 100902 Brassicaceae 100902 36475 Brassicaceae Crucifère non déterminée (4 pétales jaunes ou blancs, disposés en croix)
Colza 10308 Brassica napus L. 10308 1556 Brassicaceae Colza plantes à fleurs jaunes
/branches/v1.6-croc/widget/modules/saisie/configurations/sauvages_taxons.tsv
469,10 → 469,20
Lolium perenne L. 39692 Lolium perenne L. 39692 6983 Poaceae Lolium perenne L. Graminées
Rostraria cristata (L.) Tzvelev 57834 Rostraria cristata (L.) Tzvelev 57834 7117 Poaceae Rostraria cristata (L.) Tzvelev Graminées
Setaria verticillata (L.) P.Beauv. 63668 Setaria verticillata (L.) P.Beauv. 63668 7137 Poaceae Setaria verticillata (L.) P.Beauv. Graminées
Coquelicot 75277 Papaver rhoeas L. 75277 30269 Papaveraceae Coquelicot plantes à fleurs rouges
Phyllitis scolopendrium L. 49132 Asplenium scolopendrium L. 74981 29973 Aspleniaceae Scolopendre officinale
Scolopendre officinale 49132 Asplenium scolopendrium L. 74981 29973 Aspleniaceae Scolopendre officinale
Dryopteris filix-mas (L.) Schott 23262 Dryopteris filix-mas (L.) Schott 23262 7379 Dryopteridaceae Fougère mâle
Fougère mâle 23262 Dryopteris filix-mas (L.) Schott 23262 7379 Dryopteridaceae Fougère mâle
Geranium pusillum L. 30036 Geranium pusillum L. 30036 3432 Geraniaceae Géranium fluet
Géranium fluet 30036 Geranium pusillum L. 30036 3432 Geraniaceae Géranium fluet
Lepidium ruderale L. 38554 Lepidium ruderale L. 38554 1740 Brassicaceae Passerage des décombres
Passerage des décombres 38554 Lepidium ruderale L. 38554 1740 Brassicaceae Passerage des décombres
Lepidium squamatum Forssk. 38565 Lepidium squamatum Forssk. 38565 1625 Brassicaceae Corne-de-cerf écailleuse
Corne-de-cerf écailleuse 38565 Lepidium squamatum Forssk. 38565 1625 Brassicaceae Corne-de-cerf écailleuse
Coquelicot 75277 Papaver rhoeas L. 75277 30269 Papaveraceae Coquelicot plantes à fleurs rouges
Plante de type pissenlit (capitules jaunes non déterminée) 100897 Asteracea 100897 36470 Asteraceae Plante de type pissenlit (capitules jaunes non déterminée) plantes à capitules jaunes
Plante de type carotte (ombelle blanche ou jaune non déterminée) 100948 Apiaceae 100948 36521 Apiaceae Plante de type carotte (ombelle blanche ou jaune non déterminée)
Graminée non déterminée 100898 Poaceae 100898 36471 Poaceae Graminée non déterminée Graminées
Autre(s) espèce(s) (écrire le/les nom(s) dans les notes) 87491 Tracheophytes 87491 36446 Autre(s) espèce(s) (écrire le/les nom(s) dans les notes)
Crucifère non déterminée (4 pétales jaunes ou blancs, disposés en croix) 100902 Brassicaceae 100902 36475 Brassicaceae Crucifère non déterminée (4 pétales jaunes ou blancs, disposés en croix)
Colza 10308 Brassica napus L. 10308 1556 Brassicaceae Colza plantes à fleurs jaunes
Colza 10308 Brassica napus L. 10308 1556 Brassicaceae Colza plantes à fleurs jaunes
Autre(s) espèce(s) (écrire le/les nom(s) dans les notes) 87491 Tracheophytes 87491 36446 Autre(s) espèce(s) (écrire le/les nom(s) dans les notes)
/branches/v1.6-croc/widget/modules/saisie/configurations/florileges.ini
New file
0,0 → 1,2
[referentiels]
bdtfx.version = 1.01
/branches/v1.6-croc/widget/modules/saisie/squelettes/florileges/css/fonts/caflisch_scriptw_web.ttf
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.6-croc/widget/modules/saisie/squelettes/florileges/css/fonts/caflisch_scriptw_web.ttf
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.6-croc/widget/modules/saisie/squelettes/florileges/css/fonts/caflisch_scriptw_web.woff
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.6-croc/widget/modules/saisie/squelettes/florileges/css/fonts/caflisch_scriptw_web.woff
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.6-croc/widget/modules/saisie/squelettes/florileges/css/florileges.css
New file
0,0 → 1,281
@CHARSET "UTF-8";
/*+--------------------------------------------------------------------------------------------------------+*/
/* Polices d'écriture*/
@font-face {
font-family: florileges;
src: url(fonts/caflisch_scriptw_web.ttf) format('ttf'),
url(fonts/caflisch_scriptw_web.woff) format('woff');
}
 
/*+--------------------------------------------------------------------------------------------------------+*/
/* Balises */
body {
background: url("../img/background/noise.png") repeat scroll 0 0, none repeat scroll 0 0 #524C47;
}
footer p{
color:white;
text-align:center;
}
button img {
display:block;
}
h1, h2 {
font-size: 40px;
font-family:florileges;
font-weight: normal;
}
/*+--------------------------------------------------------------------------------------------------------+*/
/* Générique */
.discretion {
color:white;
font-family:arial;
font-size:11px;
line-height: 13px;
}
.droite {
text-align:right;
}
.centre {
text-align:center;
}
.modal-fenetre {
position:fixed;
z-index:1000;
top:0;
left:0;
height:100%;
width:100%;
background:#777;
background:rgba(90,86,93,0.7);
text-align:center;
}
.modal-contenu {
position:relative;
width:30%;
margin:0 auto;
top:30%;
}
.nom-sci {
font-style: italic;
}
/*+--------------------------------------------------------------------------------------------------------+*/
/* Gestion des photos */
.miniature{
float: left;
height: 130px;
padding-left: 15px;
padding-right: 15px;
}
.miniature-img {
height: 100px;
}
.miniature img {
display: block;
}
.miniature-chargement {
height:100px;
width: 100px;
}
.defilement-miniatures-gauche, .defilement-miniatures-droite {
float: left;
font-size: 1.2em;
font-weight: bold;
height: 62px;
margin: 5px;
padding-top: 30px;
width: 12px;
}
.defilement-miniatures {
width: 210px;
}
.defilement-miniatures-cache {
visibility: hidden;
}
.miniature-cachee {
display: none;
}
.miniature-selectionnee {
display: block;
width: 90px;
}
#fichier {
display: none;
}
#photos-conteneur {
height: 120px;
}
#photo-placeholder {
background: url("../img/icones/icone-photo.png");
background-size: 89px;
cursor: pointer;
margin-bottom: 15px;
margin-right: 15px;
float:left;
border: 5px dashed #CCCCCC;
border-radius: 8px 8px 8px 8px;
height: 100px;
margin: 2px 0 2px 2px;
text-align: center;
width: 98px;
box-sizing:border-box;
-moz-box-sizing:border-box;
-webkit-box-sizing:border-box;
}
#photo-placeholder:hover {
background: url("../img/icones/icone-photo-hover.png");
background-size: 89px;
border: 5px dashed #111;
border-radius: 8px;
}
 
/*+--------------------------------------------------------------------------------------------------------+*/
/* Correction style CSS Bootstrap */
.well {
margin-bottom: 5px;
padding: 4px;
background: url("../img/background/noise.png") repeat scroll 0 0 white;
}
@media (min-width: 575px) and (max-width: 767px){
.forcer-colonne [class*="span"] {
float: left;
margin-left: 2.12766%;
}
.forcer-colonne .span4 {
width: 31.6239%;
}
.forcer-colonne .span6 {
width: 48.9362%;
}
.forcer-colonne .span8 {
width: 65.9574%;
}
}
/*+--------------------------------------------------------------------------------------------------------+*/
/* Spécifique Florilèges */
.page-header .intro {
background: url("../img/background/noise.png") repeat scroll 0 0, radial-gradient(ellipse farthest-corner at center center , #A1C886 0%, #689E4B 100%) repeat scroll 0 0 transparent;
color: white;
padding:5px;
}
.page-header .intro a {
color: #524C47;
}
 
/* Géolocalisation */
 
 
#map-canvas {
height: 240px;
margin-bottom:5px;
}
.coordonnees-geo, .lat-lon-info {
font-size: 10px;
}
#info-commune {
text-align:right;
font-size:10px;
}
.afficher-coord {
font-size:10px;
}
 
/* Observations */
#obs-titre {
margin-right: 20px;
}
#form-date {
margin: 10px 0;
line-height: 40px;
}
.ns-retenu {
font-weight:bold;
}
.nn{
color:#3B9D3B;
}
.obs .nom-sci{
font-size:1.5em;
font-weight:bold;
}
.commune, .date{
font-size:1.3em;
font-weight:bold;
}
.obs-action{
opacity:1;
}
 
/* Validation du formulaire */
label.valid {
display: inline-block;
text-indent: -9999px;
color: #468847;
}
label.error {
font-weight: bold;
color: #B94A48;
padding: 2px 8px;
margin-top: 2px;
}
/*+--------------------------------------------------------------------------------------------------------+*/
/* SLIDERs */
.slider-on {
display: none;
}
.slider-holder {
height: 65px;
margin-left: -20px;
margin-right: 20px;
padding-left: 40px;
padding-top: 30px;
}
.ui-widget-header {
background: url("../img/background/noise.png") #A1C886;
}
.horizontal-slider {
margin: 0 3%;
height: 9px !important;
width: 90%;
}
.horizontal-slider.ui-slider-horizontal .ui-slider-range-min {
border-radius: 5px 0 0 5px;
}
.slider-holder p {
float: left;
font-size: 10px;
text-align: center;
top: 10px;
}
.slider-holder p + p {
line-height: 1.5em;
}
.slider-holder .slider-legend {
margin: 0 3%;
}
.slider-holder .slider-legend p {
padding-top:5px;
overflow: hidden;
}
.horizontal-slider a.ui-slider-handle {
background: url("../img/icones/selecteur.png") no-repeat scroll 23px 20px transparent;
border: medium none;
border-radius: 0;
display: block;
font-size: 14px;
font-weight: bold;
height: 60px;
margin: 5px 5px 5px -35px;
padding: 0;
position: relative;
text-align: center;
text-decoration: none;
top: -40px;
width: 70px;
white-space: nowrap;
}
.ui-slider .ui-slider-handle {
font-size: 12px;
}
.ui-datepicker {
z-index: 2;
}
/branches/v1.6-croc/widget/modules/saisie/squelettes/florileges/florileges.tpl.html
New file
0,0 → 1,932
<!DOCTYPE html>
<html lang="fr">
<head>
<title>Florilèges</title>
<meta charset="utf-8">
<meta name="author" content="Jean-Pascal MILCENT, Aurélien PERONNET" />
<meta name="keywords" content="Florilege, Tela Botanica, CEL" />
<meta name="description" content="Widget de saisie du projet Florilege" />
 
<!-- Viewport Mobile -->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- Favicones -->
<link rel="shortcut icon" type="image/x-icon" href="<?=$url_base?>/modules/saisie/squelettes/florileges/img/favicon.ico" />
<!-- Javascript : bibliothèques -->
<!-- Google Map v3 -->
<!--<script type="text/javascript" src="https://getfirebug.com/firebug-lite.js"></script>-->
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true&amp;language=fr&amp;region=FR"></script>
<!-- Jquery -->
<script type="text/javascript" src="http://www.tela-botanica.org/commun/jquery/1.9.1/jquery-1.9.1.js"></script>
<!-- Jquery UI : nécessaire pour le minicalendrier et l'auto-complétion -->
<script type="text/javascript" src="http://www.tela-botanica.org/commun/jquery/jquery-ui/1.10.2/js/jquery-ui-1.10.2.custom.min.js"></script>
<script type="text/javascript" src="http://www.tela-botanica.org/commun/jquery/jquery-ui/1.10.2/js/jquery.ui.datepicker-fr.min.js"></script>
<!-- Jquery Plugins -->
<!-- Jquery Validate : nécessaire pour la validation des formulaires -->
<script type="text/javascript" src="http://www.tela-botanica.org/commun/jquery/validate/1.11.1/jquery.validate.min.js"></script>
<script type="text/javascript" src="http://www.tela-botanica.org/commun/jquery/validate/1.11.1/messages_fr.js"></script>
<!-- Jquery Form :nécessaire pour l'upload des images -->
<script type="text/javascript" src="http://www.tela-botanica.org/commun/jquery/form/3.32/jquery.form.min.js"></script>
<!-- Bootstrap -->
<script type="text/javascript" src="http://www.tela-botanica.org/commun/bootstrap/2.3.1/js/bootstrap.min.js"></script>
<!-- Javascript : appli saisie -->
<script src="<?=$url_base?>saisie?projet=sauvages&amp;service=taxons" type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
// La présence du parametre 'debug' dans l'URL enclenche le dégogage
var DEBUG = <?=isset($_GET['debug']) ? 'true' : 'false'?>;
// La présence du parametre 'html5' dans l'URL enclenche les fonctions avancées HTML5
var HTML5 = <?=isset($_GET['html5']) ? 'true' : 'false'?>;
// Mot-clé du widget/projet
var TAG_PROJET = "WidgetFlorileges";
// Mots-clés à ajouter aux images
var TAG_IMG = "<?=isset($_GET['tag-img']) ? $_GET['tag-img'] : ''?>";
TAG_IMG = <?=isset($_GET['motcle']) ? "'".$_GET['motcle']."'" : 'TAG_IMG' ?>;
// Mots-clés à ajouter aux observations
var TAG_OBS = "<?=isset($_GET['tag-obs']) ? $_GET['tag-obs'] : ''?>";
TAG_OBS = <?=isset($_GET['projet']) ? "'".$_GET['projet']."'" : 'TAG_OBS' ?>;
// URL du web service réalisant l'insertion des données dans la base du CEL.
var SERVICE_SAISIE_URL = "<?=$url_ws_saisie?>";
// Code du référentiel utilisé pour les nom scientifiques (de la forme nom:code).
var NOM_SCI_REFERENTIEL = "<?=$ns_referentiel?>";
// Nom du référentiel utilisé pour les nom scientifiques.
var NOM_SCI_PROJET = "<?=$ns_projet?>";
// Code de la version du référentiel utilisé pour les nom scientifiques.
var NOM_SCI_VERSION = "<?=$ns_version?>";
// Indication de la présence d'une espèce imposée
var ESPECE_IMPOSEE = "<?=$espece_imposee; ?>";
// Tableau d'informations sur l'espèce imposée
var INFOS_ESPECE_IMPOSEE = <?=$infos_espece; ?>;
// Nombre d'élément dans les listes d'auto-complétion
var AUTOCOMPLETION_ELEMENTS_NBRE = 20;
// Indication de la présence d'un référentiel imposé
var REFERENTIEL_IMPOSE = "<?=$referentiel_impose; ?>";
// Indication des version utilisées de chaque référentiel
var PROJETS_VERSIONS = <?=json_encode($projets_versions)?>;
// URL du web service permettant l'auto-complétion des noms scientifiques.
var SERVICE_AUTOCOMPLETION_NOM_SCI_URL = "<?=$url_ws_autocompletion_ns?>?"+
"masque={masque}&"+
"recherche=etendue&"+
"retour.champs=famille,nom_retenu,nom_retenu_complet,num_taxonomique,nom_retenu.id&"+
//"version.projet="+NOM_SCI_VERSION+"&"+
"ns.structure=au"+"&"+
"navigation.limite="+AUTOCOMPLETION_ELEMENTS_NBRE;
// URL du web service permettant l'auto-complétion des noms scientifiques.
var SERVICE_AUTOCOMPLETION_NOM_SCI_URL_TPL = "<?=$url_ws_autocompletion_ns_tpl?>?"+
"masque={masque}&"+
"recherche=etendue&"+
"retour.champs=famille,nom_retenu,nom_retenu_complet,num_taxonomique,nom_retenu.id&"+
//"version.projet="+NOM_SCI_VERSION+"&"+
"ns.structure=au"+"&"+
"navigation.limite="+AUTOCOMPLETION_ELEMENTS_NBRE;
// Nombre d'observations max autorisé avant transmission
var OBS_MAX_NBRE = 10;
// Durée d'affichage en milliseconde des messages d'informations
var DUREE_MESSAGE = 15000;
// Squelette d'URL du web service de l'annuaire.
var SERVICE_ANNUAIRE_ID_URL = "<?=$url_ws_annuaire?>";
// Squelette d'URL du web service d'eFlore fournissant les noms de communes.
var SERVICE_NOM_COMMUNE_URL = "http://www.tela-botanica.org/service:eflore:0.1/osm/nom-commune?lon={lon}&lat={lat}";
// Squelette d'URL du web service d'eFlore fournissant les noms de communes hors de France (localisation approximative).
var SERVICE_NOM_COMMUNE_URL_ALT = "http://www.tela-botanica.org/service:eflore:0.1/wikipedia/nom-commune?lon={lon}&lat={lat}&nbre=1";
// URL du marqueur à utiliser dans la carte Google Map
var GOOGLE_MAP_MARQUEUR_URL = "<?=$url_base?>modules/saisie/squelettes/florileges/img/icones/epingle.png";
// URL de l'icône du chargement en cours
var CHARGEMENT_ICONE_URL = "<?=$url_base?>modules/saisie/squelettes/florileges/img/icones/chargement.gif";
// URL de l'icône du chargement en cours d'une image
var CHARGEMENT_IMAGE_URL = "<?=$url_base?>modules/saisie/squelettes/florileges/img/icones/chargement-image.gif";
// URL de l'icône du calendrier
var CALENDRIER_ICONE_URL = "<?=$url_base?>modules/saisie/squelettes/florileges/img/icones/calendrier.png";
// URL de l'icône du calendrier
var PAS_DE_PHOTO_ICONE_URL = "<?=$url_base?>modules/saisie/squelettes/florileges/img/icones/pas_de_photo.png";
//]]>
</script>
<script type="text/javascript" src="<?=$url_base?>modules/saisie/squelettes/florileges/js/florileges.js"></script>
<!-- CSS -->
<link href="http://www.tela-botanica.org/commun/jquery/jquery-ui/1.10.2/css/smoothness/jquery-ui-1.10.2.custom.css" rel="stylesheet" type="text/css" media="screen" />
<link href="http://www.tela-botanica.org/commun/bootstrap/2.3.1/css/bootstrap.min.css" rel="stylesheet" type="text/css" media="screen" />
<link href="http://www.tela-botanica.org/commun/bootstrap/2.3.1/css/bootstrap-responsive.min.css" rel="stylesheet" type="text/css" media="screen" />
<link href="<?=$url_base?>modules/saisie/squelettes/florileges/css/<?=isset($_GET['style']) ? $_GET['style'] : 'florileges'?>.css" rel="stylesheet" type="text/css" media="screen" />
</head>
 
<body data-spy="scroll">
<div class="container">
<div class="row-fluid page-header">
<div class="span7">
<div class="well intro">
<h1>Florilèges</h1>
<p>
Bienvenue sur l'interface de saisie en ligne des données
"Florilèges"-RUES. Cette interface vous permet d'enregistrer vos
observations de terrain et de les partager simplement
(sous <a href="http://creativecommons.org/licenses/by-sa/2.0/fr/">licence CC-BY-SA</a>)
avec <a href="http://www.plante-et-cite.fr">Plante & Cité</a>,
<a href="http://www.tela-botanica.org/site:accueil">le réseau Tela Botanica</a>
et <a href="http://sauvagesdemarue.mnhn.fr">le programme Sauvage de ma Rue</a>.
</p>
<p>
En vous identifiant, vous pourrez retrouver et consulter l'ensemble de
vos observations dans <a href="http://www.tela-botanica.org/appli:cel">le Carnet en ligne</a>.<br />
Renseignez tout d'abord les caractéristiques et l'itinéraire technique mis en place
sur le site des relevés, puis détaillez ensuite les espèces observées sur ce site.
Ajoutez chaque observation à la liste à transmettre à l'aide du bouton
«&nbsp;Créer&nbsp;».
</p>
<p>
L'interface de saisie vous permet de renseigner jusqu'à 10 observations à des dates
différentes pour un même site.
Partagez-les avec le bouton «&nbsp;Transmettre&nbsp;».
Elles apparaissent immédiatement sur
<a href="http://www.tela-botanica.org/site:botanique?langue=fr">la carte</a> et
<a href="http://www.tela-botanica.org/site:botanique?langue=fr">la galerie photos</a>
du projet.
</p>
<p>
Pour toute question, <a href="mailto:contact@florileges.info">contactez les animateurs du programme Florilèges</a>.
</p>
<p class="discretion">
Un aide intéractive est à votre disposition sur l'interface.
Une fois familiarisé, vous pouvez cliquer sur le bouton suivant pour la désactiver :
<button id="btn-aide" class="btn btn-mini btn-success">
<span class="icon-question-sign icon-white"></span>
<span id="btn-aide-txt" >Désactiver l'aide</span>
</button>
</p>
</div>
</div>
<div class="span5">
<div class="well forcer-colonne">
<h2>Observateur</h2>
<form id="form-observateur" action="#" class="" autocomplete="on">
<div class="row-fluid">
<div class="span6 control-group" rel="tooltip" data-placement="bottom"
title="Saisissez le courriel avec lequel vous être inscrit à Tela Botanica.
Si vous n'êtes pas inscrit, ce n'est pas grave, vous pourrez le faire
ultérieurement. Des informations complémentaires vont vous être
demandées : prénom et nom.">
<label class="control-label" for="courriel">
<strong class="obligatoire">*</strong>
Courriel
</label>
<div class="controls">
<div class="input-prepend">
<span class="add-on">
<i class="icon-envelope"></i>
</span>
<input id="courriel" name="courriel" class="span11" type="text"/>
<input id="id_utilisateur" name="id_utilisateur" type="hidden"/>
</div>
</div>
</div>
<div id="zone-courriel-confirmation" class="span6 hidden control-group">
<label class="control-label" for="courriel_confirmation">
<strong class="obligatoire">*</strong>
Courriel (confirmation)
</label>
<div class="controls">
<div class="input-prepend">
<span class="add-on">
<i class="icon-envelope"></i>
</span>
<input id="courriel_confirmation" name="courriel_confirmation"
class="span11" type="text"/>
</div>
</div>
</div>
</div>
<div id="zone-prenom-nom" class="row-fluid hidden">
<div class="span6">
<label for="prenom">
Prénom
</label>
<input id="prenom" name="prenom" class="span12" type="text"/>
</div>
<div class="span6">
<label for="nom">
Nom
</label>
<input id="nom" name="nom" class="span12" type="text"/>
</div>
</div>
<div id="zone-personne-complement" class="forcer-colonne">
<div class="row-fluid">
<div class="span6">
<label for="structure">
Structure
</label>
<input id="structure" name="personneStructure" class="span12 " type="text"/>
</div>
<div class="span6">
<label for="service">
Service
</label>
<input id="service" name="personneService" class="span12" type="text"/>
</div>
</div>
<div class="row-fluid">
<div class="span12">
<label for="fonction">
Fonction
</label>
<input id="fonction" name="personneFonction" class="span12" type="text"/>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
<!-- Messages d'erreur du formulaire-->
<div class="row-fluid">
<div class="zone-alerte span6 offset3">
<div id="dialogue-bloquer-copier-coller" class="alert alert-info alert-block" style="display:none;">
<a class="close">×</a>
<h4 class="alert-heading">Information : copier/coller</h4>
<p>
Merci de ne pas copier/coller votre courriel.<br/>
La double saisie permet de vérifier l'absence d'erreurs.
</p>
</div>
<div id="dialogue-courriel-introuvable" class="alert alert-info alert-block" style="display:none;">
<a class="close">×</a>
<h4 class="alert-heading">Information : courriel introuvable</h4>
<p>
Vous n'êtes pas inscrit à Tela Botanica avec ce courriel.<br/>
Veuillez compléter les champs supplémentaires ou indiquer votre courriel d'inscription.<br/>
Pour retrouver vos observations dans le <a href="http://www.tela-botanica.org/appli:cel">Carnet en ligne</a>,
il sera nécesaire de <a href="http://www.tela-botanica.org/page:inscription">vous inscrire à Tela Botanica</a>.
</p>
</div>
</div>
</div>
<div class="row-fluid">
<div class="span12">
<div class="well">
<div class="row-fluid">
<div class="span4">
<div class="row-fluid">
<div class="span12">
<h2>Site</h2>
</div>
</div>
<div class="row-fluid">
<div class="span12" rel="tooltip"
title="Nom du site." >
<label for="station">Nom</label>
<div>
<input type="text" id="station" class="span12" name="station"/>
</div>
</div>
</div>
<div class="forcer-colonne well">
<div class="row-fluid">
<div class="span4">
<label for="map_canvas" title="Veuillez localiser l'observation">
Géolocalisation
</label>
</div>
<div class="span8 droite">
<form id="form-carte-recherche" class="form-search form-horizontal">
<div class="control-group">
<input id="carte-recherche" class="search-query" type="text" value=""
rel="tooltip"
title="Permet de centrer la carte sur le lieu recherché. Il est nécessaire de sélectionner le lieu dans la liste déroulante."
placeholder="Centrer la carte sur un lieu..."/>
</div>
</form>
</div>
</div>
<div class="row-fluid">
<div class="span12">
<div id="map-canvas" rel="tooltip"
title="Vous pouvez cliquer sur la carte pour déplacer le marqueur
représentant votre station ou bien le glisser-déposer sur
le lieu souhaité."></div>
</div>
</div>
<div id="coordonnees-geo-affichage" class="row-fluid">
<label for="coordonnees-geo" class="span6">
<a class="afficher-coord btn">
<span class="afficher-coord-action">Afficher</span>
<span class="afficher-coord-action" style="display:none;">Cacher</span>
coordonnées
<span id="lat-lon-info" class="info"
rel="tooltip"
title="Système géodésique mondial, révision de 1984 - Coordonnées non projetées">
(WGS84)
</span>
</a>
</label>
<div id="info-commune" class="span6">
<span for="marqueur-commune">Commune : </span>
<span id="marqueur-commune">
<span id="commune-nom" class="commune-info"></span>
(<span id="commune-code-insee" class="commune-info"
rel="tooltip"
title="Code INSEE de la commune"></span>)
</span>
</div>
</div>
<div id="coordonnees-geo" class="row-fluid" style="display:none;">
<form id="form-station" class="control-group form-inline">
<div id="coord-lat" class="span4">
<label>
Latitude
<input id="latitude" class="input-mini" name="latitude" type="text" value=""/>
</label>
</div>
<div id="coord-lng" class="span4">
<label>
Longitude
<input id="longitude" class="input-mini" name="longitude" type="text" value=""/>
</label>
</div>
<div class="span4">
<button id="geolocaliser" class="btn"
rel="tooltip"
title="Centre la carte sur les coordonnées de latitude et longitude saisies.">
Voir sur la carte
</button>
</div>
</form>
</div>
</div>
</div>
<div class="span4">
<div class="row-fluid">
<div class="span12">
<h2>Typologie du site</h2>
</div>
</div>
<div class="row-fluid">
<div class="span12" rel="tooltip"
title="Typologie du site. Vous pouvez en cliquant dans la zone de saisie puis en appuyant sur la touche «flêche bas», ouvrir la liste des choix disponibles." >
<label>
Typologie
<select id="typo-urbaine" class="span12" name="typoUrbaine">
<option>centre ville</option>
<option>faubourg</option>
<option>quartier résidentiel</option>
<option>zone commerciale</option>
<option>zone d'activités</option>
</select>
</label>
</div>
</div>
<div class="row-fluid">
<div class="span12" rel="tooltip"
title="Type de revêtement de sol." >
<label>
Revêtement de sol
<select id="revetement-sol" class="span12" name="revetementSol">
<option>asphalte et enrobés</option>
<option>pavés</option>
<option>stabilisés, aires sablées</option>
<option>graviers</option>
<option>terre</option>
</select>
</label>
</div>
</div>
<div class="row-fluid">
<div class="span12" rel="tooltip"
title="Présence de zones végétalisés autour du site (haie, aménagement paysager, parcs et jardins, ...)." >
<label>
Présence de zones végétalisés
<select id="presence-zone-vegetalise">
<option>nulle</option>
<option>faible</option>
<option>moyenne</option>
<option>importante</option>
</select>
</label>
</div>
</div>
<div class="row-fluid">
<div class="span12" rel="tooltip"
title="Hauteur des bâtiments avoisinants (en étages)." >
<label>
Hauteur des bâtiments
<select id="hauteur-batiment-avoisinant">
<option>0</option>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5 et +</option>
</select>
</label>
</div>
</div>
</div>
<div class="span4">
<div class="row-fluid">
<div class="span12">
<h2>Itinéraire technique</h2>
</div>
</div>
<div class="row-fluid">
<div class="span12" rel="tooltip"
title="Intensité de gestion." >
<label>
Intensité de gestion
<select id="intensite-gestion" class="span12">
<option>extensive</option>
<option>intermédiaire</option>
<option>intensive</option>
</select>
</label>
</div>
</div>
<div class="row-fluid">
<div class="span12">
<div class="row-fluid">
<div class="span12" rel="tooltip"
title="Utilisation de produits phytosanitaires sur le site." >
<label>
Utilisation de produits phytosanitaires
<select id="periodicite-traitement-phyto">
<option value="régulière">régulière</option>
<option value="occasionnelle">occasionnelle</option>
<option value="rare">rare</option>
<option value="jamais">jamais</option>
</select>
</label>
</div>
</div>
<div id="datp-zone" class="row-fluid hidden">
<div class="span12" rel="tooltip"
title="Date approximative de l'arrêt des traitements.
Vous pouvez cliquer sur l'icône de calendrier pour
sélectionner une date dans un calendrier.">
<label title="Veuillez indiquer la date du relevé au format jj/mm/aaaa">
Date d'arrêt des traitements
<div class="input-prepend">
<span id="date-arret-traitement-phyto-icone" class="add-on"></span>
<input id="date-arret-traitement-phyto" class="input-small"
name="date-arret-traitement-phyto" type="text"
placeholder="jj/mm/aaaa" />
</div>
</label>
</div>
</div>
</div>
</div>
<div class="row-fluid">
<div class="span12" rel="tooltip"
title="Description de l'itinéraire de gestion (type de traitement, matériel utilisé, fréquence de passage, ...)." >
<label>
Description de l'itinéraire de gestion
<textarea id="itineraire-gestion" class="span12" rows="7" name="itineraireGestion"></textarea>
</label>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row-fluid">
<div class="span12 well">
<div class="row-fluid">
<div class="span4">
<h2 id="obs-titre">Observations</h2>
</div>
<div class="span8">
<form id="form-date" class="form-inline">
<div class="span6" rel="tooltip"
title="Vous pouvez cliquer sur l'icône de calendrier pour
sélectionner une date dans un calendrier.">
<label title="Veuillez indiquer la date du relevé au format jj/mm/aaaa">
Date du relevé
<div class="input-prepend">
<span id="date-icone" class="add-on"></span>
<input id="date" class="input-small" name="date" type="text"
placeholder="jj/mm/aaaa" />
</div>
</label>
</div>
<div class="span6" rel="tooltip"
title="Date approximative de la dernière intervention." >
<label>
Dernière intervention
<select id="date-derniere-intervention">
<option value="inconnue">ne sais pas</option>
<option>plus de 3 ans</option>
<option>entre 1 et 3 ans</option>
<option>moins d'1 an</option>
<option>au cours du dernier semestre</option>
<option>au cours du dernier trimestre</option>
<option>au cours des 30 derniers jours</option>
<option>au cours des 7 derniers jours</option>
</select>
</label>
</div>
</form>
</div>
</div>
<form id="form-obs" autocomplete="on">
<div class="row-fluid">
<div class="well span6">
<div class="row-fluid">
<div class="span12">
<div id="taxon-liste-input-groupe" class="control-group" rel="tooltip"
title="Sélectionnez une espèce dans la liste déroulante par son nom latin
ou commun. Si une espèce est abscente, sélectionner «Autre espèce»." >
<label class="control-label" for="taxon-liste" title="Choisissez l'espèce rencontrée.">
<strong class="obligatoire">*</strong>
Espèces les plus communes
</label>
<div class="controls">
<div class="input-prepend ">
<span class="add-on">
<i class="icon-leaf"></i>
</span>
<select id="taxon-liste" class="span12" name="taxon-liste">
<option value="" selected>Sélectionner une espèce</option>
<option value="?">Autre espèce</option>
<?php foreach ($taxons as $taxon) :?>
<option
class="<?=($taxon['nom_ret'] == $taxon['nom_fr']) ? 'nom-sci' : 'nom-fr' ?>"
value="<?=$taxon['num_nom_sel']?>"
title="<?=$taxon['nom_ret'].($taxon['nom_fr_autre'] != '' ? ' - '.$taxon['nom_fr_autre'] : '' )?>"
>
<?=$taxon['nom_fr']?>
</option>
<?php endforeach; ?>
</select>
</div>
</div>
</div>
</div>
</div>
<div id="taxon-input-groupe" class="row-fluid hidden">
<div class="span12">
<div class="control-group" rel="tooltip"
title="Sélectionnez une espèce dans la liste déroulante pour lier
votre nom au référentiel. Si vous le désirez vous pouvez aussi saisir
un nom absent du référentiel (Ex. : 'fleur violette' ou 'viola sinensis???')." >
<label class="control-label" for="taxon" title="Choisissez l'espèce rencontrée.">
Autre espèce
</label>
<div class="controls">
<input id="taxon" name="taxon" type="text" class="span12"
placeholder="Autre espèce (ou indication sur la plante)"
value="<?= $nom_sci_espece_defaut; ?>" />
</div>
</div>
</div>
</div>
<div class="row-fluid">
<div class="span12" rel="tooltip"
title="Sélectionner un ou plusieurs milieux dans lesquels l'espèce est présente sur le site.">
<label class="span2">
Milieux
</label>
<div class="input-prepend">
<div class="btn-group">
<button class="btn dropdown-toggle" data-toggle="dropdown">
<i class="icon-globe"></i>
Sélectionner un ou plusieurs milieux
<span class="caret"></span>
</button>
<ul class="dropdown-menu" role="menu" aria-labelledby="dLabel">
<li>
<label class="checkbox">
<input name="milieux" type="checkbox" value="chemin"/>
chemin
</label>
</li>
<li>
<label class="checkbox">
<input name="milieux" type="checkbox" value="fissures"/>
fissures
</label>
</li>
<li>
<label class="checkbox">
<input name="milieux" type="checkbox" value="haie"/>
haie
</label>
</li>
<li>
<label class="checkbox">
<input name="milieux" type="checkbox" value="mur"/>
mur
</label>
</li>
<li>
<label class="checkbox">
<input name="milieux" type="checkbox" value="pelouse"/>
pelouse
</label>
</li>
<li>
<label class="checkbox">
<input name="milieux" type="checkbox" value="pied d'arbre"/>
pied d'arbre
</label>
</li>
<li>
<label class="checkbox">
<input name="milieux" type="checkbox" value="plate bande"/>
plate bande
</label>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="row-fluid">
<div class="span12" rel="tooltip"
title="Hauteur maximum en centimètre de la plante sur le site.">
<label >
Hauteux max. (en cm) de la plante
<input id="hauteur-plante" class="span2" name="hauteurPlante"
type="number" min="0" step="1" />
</label>
</div>
</div>
<div class="row-fluid">
<div class="span12">
<label for="notes">Commentaires</label>
<div>
<textarea id="notes" class="span12" rows="7" name="notes"
placeholder="vous pouvez éventuellement ajouter des informations complémentaires à votre observation (altitude, taille de la plante...)"></textarea>
</div>
</div>
</div>
</div>
<div class="span6">
<div class="well">
<div class="row-fluid">
<div class="span12" rel="tooltip"
title="Résistance/Résilience face aux traitements utilisés." >
<label>
Résistance/Résilience
<select id="resistance-traitement-phyto" name="resistanceTraitementPhyto">
<option>Pas de traitement</option>
<option>faible</option>
<option>intermédiaire</option>
<option>forte</option>
<option>très forte</option>
</select>
</label>
</div>
</div>
<div class="row-fluid">
<div class="span12" rel="tooltip"
title="Vitesse de croissance sur site." >
<label>
Croissance
<select id="vitesse-croissance" name="vitesseCroissance">
<option>nulle</option>
<option>lente</option>
<option>moyenne</option>
<option>rapide</option>
<option>trop rapide</option>
</select>
</label>
</div>
</div>
</div>
<div class="well">
<div class="row-fluid">
<div class="span12" rel="tooltip"
title="Perception globale de l'espèce par l'équipe technique.">
<label class="span4">
Perceptions par l'équipe
</label>
<div class="input-prepend">
<div class="btn-group">
<button class="btn dropdown-toggle" data-toggle="dropdown">
<i class="icon-eye-open"></i>
Sélectionner une ou plusieurs perceptions
<span class="caret"></span>
</button>
<ul class="dropdown-menu" role="menu" aria-labelledby="dLabel">
<li>
<label class="checkbox">
<input name="milieux" type="checkbox" value="ne connaissais pas la plante avant l'étude"/>
ne connaissais pas la plante avant l'étude
</label>
</li>
<li>
<label class="checkbox">
<input name="milieux" type="checkbox" value="discrète ne pose pas de problème"/>
discrète ne pose pas de problème
</label>
</li>
<li>
<label class="checkbox">
<input name="milieux" type="checkbox" value="visible et esthétique"/>
visible et esthétique
</label>
</li>
<li>
<label class="checkbox">
<input name="milieux" type="checkbox" value="gênante, difficile à gérer"/>
gênante, difficile à gérer
</label>
</li>
<li>
<label class="checkbox">
<input name="milieux" type="checkbox" value="envahissante, cause des dégâts"/>
envahissante, cause des dégâts
</label>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="row-fluid">
<div class="span12" rel="tooltip"
title="Mauvaise perception de la plante par les riverains." >
<label>
Mauvaise perception par les riverains ?
<select id="perception-riverain" name="perceptionRiverain">
<option>inconnue</option>
<option>oui</option>
<option>non</option>
</select>
</label>
</div>
</div>
</div>
</div>
</div>
</form>
<form id="form-upload" class="form-horizontal" action="<?=$url_base?>saisie?projet=sauvages&amp;service=upload-image"
method="post" enctype="multipart/form-data">
<div class="row-fluid">
<div class="span12 well">
<strong>Cliquez sur l'icone pour ajouter une image</strong>
<p class="miniature-info" class="discretion help-inline">Les photos doivent être au format JPEG et ne doivent pas excéder 5Mo chacunes.</p>
<div id ="photos-conteneur">
<div id="photo-placeholder" rel="tooltip"
title="Cliquez pour ajouter une photo de votre observation. Elle doit être au
format JPEG et ne doit pas excéder 5Mo."></div>
<input type="file" id="fichier" name="fichier" accept="image/jpeg" />
<input type="hidden" name="MAX_FILE_SIZE" value="5242880"/>
<div id="miniatures">
</div>
<p class="miniature-msg" class="span12">&nbsp;</p>
</div>
</div>
</div>
</form>
<div class="row-fluid">
<div class="span12 centre" rel="tooltip"
title="Une fois les champs remplis, vous pouvez cliquer sur ce bouton pour
ajouter votre observation à la liste à transmettre.">
<button id="ajouter-obs" class="btn btn-primary btn-large" type="button">
Créer
</button>
</div>
</div>
</div>
</div>
<!-- Messages d'erreur du formulaire-->
<div class="row-fluid">
<div class="zone-alerte span6 offset3">
<div id="dialogue-bloquer-creer-obs" class="alert alert-warning alert-block" style="display: none;">
<a class="close">×</a>
<h4 class="alert-heading">Information : 10 observations maximum</h4>
<p>
Vous venez d'ajouter votre 10ème observation.<br/>
Pour en ajouter de nouvelles, il est nécessaire de les transmettre en cliquant sur le bouton ci-dessous.
</p>
</div>
</div>
<div class="zone-alerte span6 offset3">
<div id="dialogue-form-invalide" class="alert alert-warning alert-block" style="display: none;">
<a class="close">×</a>
<h4 class="alert-heading">Information : champs en erreur</h4>
<p>
Certains champs du formulaire sont mal remplis.<br/>
Veuillez vérifier vos données.
</p>
</div>
</div>
</div>
<!-- Affiche le tableau récapitualif des observations ajoutées -->
<div id="zone-liste-obs" class="row-fluid">
<div class="span12">
<div class="well">
<div class="row-fluid">
<div class="span8">
<h2>Observations à transmettre : <span class="obs-nbre">0</span></h2>
</div>
<div class="span4 droite">
<button id="transmettre-obs" class="btn btn-primary btn-large"
type="button" disabled="disabled" rel="tooltip"
title="Ajoute les observations ci-dessous à votre Carnet en Ligne et les rend publiques.">
Transmettre
</button>
</div>
</div>
<div id="liste-obs" ></div>
<div class="row">
<div class="zone-alerte span6 offset3">
<div id="dialogue-zero-obs" class="alert alert-block" style="display: none;">
<a class="close">×</a>
<h4 class="alert-heading">Attention : aucune observation</h4>
<p>Veuillez saisir des observations pour les transmettres.</p>
</div>
<div id="dialogue-obs-transaction-ok" class="alert alert-success alert-block" style="display: none;"">
<a class="close">×</a>
<h4 class="alert-heading">Information : transmission des observations</h4>
<div class="alert-txt"></div>
</div>
<div id="dialogue-obs-transaction-ko" class="alert alert-error alert-block" style="display: none;">
<a class="close">×</a>
<h4 class="alert-heading">Erreur : transmission des observations</h4>
<div class="alert-txt"></div>
</div>
</div>
</div>
</div>
</div>
</div>
<footer class="row-fluid">
<p class="span12">&copy; Tela Botanica 2013</p>
</footer>
</div>
<!-- Fenêtres modales -->
<div id="chargement" class="modal-fenetre" style="display:none;">
<div id="chargement-centrage" class="modal-contenu">
<img id="chargement-img"
src="<?=$url_base?>modules/saisie/squelettes/sauvages/images/chargement_arbre.gif"
alt="Transfert en cours..."/>
<p id="chargement-txt" style="color:white;font-size:1.5em;">
Transfert des observations en cours...<br />
Cela peut prendre plusieurs minutes en fonction de la taille des images et du nombre
d'observations à transférer.
</p>
</div>
</div>
<!-- Templates HTML -->
<div id="tpl-transmission-ok" style="display:none;">
<p class="msg">
Vos observations ont bien été transmises.<br />
Elles sont désormais consultables à travers les différents outils de visualisation
du réseau Tela Botanica (<a href="http://www.tela-botanica.org/site:botanique">eFlore</a>,
<a href="http://www.tela-botanica.org/appli:pictoflora">galeries d'images</a>,
<a href="http://www.tela-botanica.org/appli:identiplante">identiplante</a>,
<a href="http://www.tela-botanica.org/widget:cel:cartoPoint">cartographie (widget)</a>...)<br />
Si vous souhaitez les modifier ou les supprimer, vous pouvez les retrouver en vous
connectant à votre <a href="http://www.tela-botanica.org/appli:cel">Carnet en ligne</a>.<br />
N'oubliez pas qu'il est nécessaire de
<a href="http://www.tela-botanica.org/page:inscription">s'inscrire à Tela Botanica</a>
au préalable, si ce n'est pas déjà fait.
</p>
</div>
<div id="tpl-transmission-ko" style="display:none;">
<p class="msg">
Une erreur est survenue lors de la transmission de vos observations.<br />
Vous pouvez signaler le dysfonctionnement à
<a class="courriel-erreur" href="mailto:">cel_remarques@tela-botanica.org</a>.
</p>
</div>
<!-- Stats : Google Analytics-->
<script type="text/javascript">
//<![CDATA[
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-20092557-1']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
//]]>
</script>
</div>
</body>
</html>
/branches/v1.6-croc/widget/modules/saisie/squelettes/florileges/img/favicon.ico
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.6-croc/widget/modules/saisie/squelettes/florileges/img/favicon.ico
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.6-croc/widget/modules/saisie/squelettes/florileges/img/background/noise.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/branches/v1.6-croc/widget/modules/saisie/squelettes/florileges/img/background/noise.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/branches/v1.6-croc/widget/modules/saisie/squelettes/florileges/img/icones/calendrier.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/branches/v1.6-croc/widget/modules/saisie/squelettes/florileges/img/icones/calendrier.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/branches/v1.6-croc/widget/modules/saisie/squelettes/florileges/img/icones/selecteur.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/branches/v1.6-croc/widget/modules/saisie/squelettes/florileges/img/icones/selecteur.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/branches/v1.6-croc/widget/modules/saisie/squelettes/florileges/img/icones/chargement-image.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.6-croc/widget/modules/saisie/squelettes/florileges/img/icones/chargement-image.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.6-croc/widget/modules/saisie/squelettes/florileges/img/icones/chargement.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/branches/v1.6-croc/widget/modules/saisie/squelettes/florileges/img/icones/chargement.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v1.6-croc/widget/modules/saisie/squelettes/florileges/img/icones/epingle.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/branches/v1.6-croc/widget/modules/saisie/squelettes/florileges/img/icones/epingle.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/branches/v1.6-croc/widget/modules/saisie/squelettes/florileges/img/icones/pas_de_photo.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/branches/v1.6-croc/widget/modules/saisie/squelettes/florileges/img/icones/pas_de_photo.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/branches/v1.6-croc/widget/modules/saisie/squelettes/florileges/js/florileges.js
New file
0,0 → 1,1089
//+---------------------------------------------------------------------------------------------------------+
// GÉNÉRAL
$(document).ready(function() {
if (DEBUG == false) {
$(window).on('beforeunload', function(event) {
return 'Êtes vous sûr de vouloir quiter la page?\nLes observations saisies mais non transmises seront perdues.';
});
}
});
//+----------------------------------------------------------------------------------------------------------+
// FONCTIONS GÉNÉRIQUES
/**
* Stope l'évènement courrant quand on clique sur un lien.
* Utile pour Chrome, Safari...
* @param evenement
* @return
*/
function arreter(evenement) {
if (evenement.stopPropagation) {
evenement.stopPropagation();
}
if (evenement.preventDefault) {
evenement.preventDefault();
}
return false;
}
 
function extraireEnteteDebug(jqXHR) {
var msgDebug = '';
if (jqXHR.getResponseHeader('X-DebugJrest-Data') != '') {
var debugInfos = jQuery.parseJSON(jqXHR.getResponseHeader('X-DebugJrest-Data'));
if (debugInfos != null) {
$.each(debugInfos, function (cle, valeur) {
msgDebug += valeur + "\n";
});
}
}
return msgDebug;
}
 
function afficherPanneau(selecteur) {
$(selecteur).fadeIn('slow').delay(DUREE_MESSAGE).fadeOut('slow');
}
 
//+----------------------------------------------------------------------------------------------------------+
//UPLOAD PHOTO : Traitement de l'image
$(document).ready(function() {
$('.effacer-miniature').click(function () {
supprimerMiniatures($(this));
});
$('#photo-placeholder').click(function(event) {
$('#fichier').click();
});
$('#fichier').bind('change', function (e) {
arreter(e);
var options = {
success: afficherMiniature, // post-submit callback
dataType: 'xml', // 'xml', 'script', or 'json' (expected server response type)
resetForm: true // reset the form after successful submit
};
$('#miniature').append(
'<img id="miniature-chargement" class="miniature" alt="chargement" src="'+CHARGEMENT_IMAGE_URL+'"/>');
$('#ajouter-obs').attr('disabled', 'disabled');
if(verifierFormat($('#fichier').val())) {
$('#form-upload').ajaxSubmit(options);
} else {
window.alert("Le format de fichier n'est pas supporté, les formats acceptés sont "+ $('#fichier').attr('accept'));
}
return false;
});
$('.effacer-miniature').on('click', function() {
$(this).parent().remove();
});
});
 
function verifierFormat(nom) {
var parts = nom.split('.');
extension = parts[parts.length - 1];
return (extension.toLowerCase() == 'jpeg' || extension.toLowerCase() == 'jpg');
}
 
function afficherMiniature(reponse) {
if (DEBUG) {
var debogage = $('debogage', reponse).text();
console.log('Débogage upload : ' + debogage);
}
var message = $('message', reponse).text();
if (message != '') {
$('#miniature-msg').append(message);
} else {
$('#miniatures').append(creerWidgetMiniature(reponse));
}
$('#ajouter-obs').removeAttr('disabled');
}
 
function creerWidgetMiniature(reponse) {
var miniatureUrl = $('miniature-url', reponse).text(),
imgNom = $('image-nom', reponse).text(),
html =
'<div class="miniature">'+
'<img class="miniature-img" class="miniature" alt="'+imgNom+'" src="'+miniatureUrl+'"/>'+
'<button class="effacer-miniature" type="button">Effacer</button>'+
'</div>'
return html;
}
 
function supprimerMiniatures() {
$('#miniatures').empty();
$('#miniature-msg').empty();
}
 
//+----------------------------------------------------------------------------------------------------------+
// GOOGLE MAP
var map,
marker,
latLng,
geocoder;
 
$(document).ready(function() {
initialiserGoogleMap();
// Autocompletion du champ adresse
$('#carte-recherche').on('focus', function() {
$(this).select();
});
$('#carte-recherche').on('mouseup', function(event) {// Pour Safari...
event.preventDefault();
});
$('#carte-recherche').keypress(function(e) {
if (e.which == 13) {
e.preventDefault();
}
});
$('#carte-recherche').autocomplete({
//Cette partie utilise geocoder pour extraire des valeurs d'adresse
source: function(request, response) {
geocoder.geocode( {'address': request.term+', France', 'region' : 'fr' }, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
response($.map(results, function(item) {
var retour = {
label: item.formatted_address,
value: item.formatted_address,
latitude: item.geometry.location.lat(),
longitude: item.geometry.location.lng()
};
return retour;
}));
} else {
afficherErreurGoogleMap(status);
}
});
},
// Cette partie est executee a la selection d'une adresse
select: function(event, ui) {
var latLng = new google.maps.LatLng(ui.item.latitude, ui.item.longitude);
deplacerMarker(latLng);
}
});
$('#geolocaliser').on('click', geolocaliser);
google.maps.event.addListener(marker, 'dragend', surDeplacementMarker);
google.maps.event.addListener(map, 'click', surClickDansCarte);
});
 
function initialiserGoogleMap(){
// Carte
var latLng = new google.maps.LatLng(46.30871, 2.54395),// Centre de la France
zoomDefaut = 5;
options = {
zoom: zoomDefaut,
center: latLng,
mapTypeId: google.maps.MapTypeId.HYBRID,
mapTypeControlOptions: {
mapTypeIds: ['OSM',
google.maps.MapTypeId.ROADMAP,
google.maps.MapTypeId.HYBRID,
google.maps.MapTypeId.SATELLITE,
google.maps.MapTypeId.TERRAIN]}
};
 
// Ajout de la couche OSM à la carte
osmMapType = new google.maps.ImageMapType({
getTileUrl: function(coord, zoom) {
return 'http://tile.openstreetmap.org/' + zoom + '/' + coord.x + '/' + coord.y + '.png';
},
tileSize: new google.maps.Size(256, 256),
isPng: true,
alt: 'OpenStreetMap',
name: 'OSM',
maxZoom: 19
});
// Création de la carte Google
map = new google.maps.Map(document.getElementById('map-canvas'), options); //affiche la google map dans la div map_canvas
map.mapTypes.set('OSM', osmMapType);
// Création du Geocoder
geocoder = new google.maps.Geocoder();
// Marqueur google draggable
marker = new google.maps.Marker({
map: map,
draggable: true,
title: 'Ma station',
icon: GOOGLE_MAP_MARQUEUR_URL,
position: latLng
});
initialiserMarker(latLng);
// Tentative de geocalisation
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
var latitude = position.coords.latitude,
longitude = position.coords.longitude;
latLng = new google.maps.LatLng(latitude, longitude);
deplacerMarker(latLng);
});
}
}
 
function surDeplacementMarker() {
trouverCommune(marker.getPosition());
mettreAJourMarkerPosition(marker.getPosition());
}
 
function surClickDansCarte(event) {
deplacerMarker(event.latLng);
}
 
function geolocaliser(event) {
var latitude = $('#latitude').val(),
longitude = $('#longitude').val();
latLng = new google.maps.LatLng(latitude, longitude);
deplacerMarker(latLng);
arreter(event);
}
 
function initialiserMarker(latLng) {
if (marker != undefined) {
marker.setPosition(latLng);
map.setCenter(latLng);
mettreAJourMarkerPosition(latLng);
trouverCommune(latLng);
}
}
 
function deplacerMarker(latLng) {
if (marker != undefined) {
marker.setPosition(latLng);
map.setCenter(latLng);
mettreAJourMarkerPosition(latLng);
trouverCommune(latLng);
}
}
 
function mettreAJourMarkerPosition(latLng) {
var lat = latLng.lat().toFixed(5),
lng = latLng.lng().toFixed(5);
remplirChampLatitude(lat);
remplirChampLongitude(lng);
}
 
function remplirChampLatitude(latDecimale) {
var lat = Math.round(latDecimale * 100000) / 100000;
$('#latitude').val(lat);
}
 
function remplirChampLongitude(lngDecimale) {
var lng = Math.round(lngDecimale * 100000) / 100000;
$('#longitude').val(lng);
}
 
function trouverCommune(pos) {
$(function() {
var url_service = SERVICE_NOM_COMMUNE_URL,
urlNomCommuneFormatee = url_service.replace('{lat}', pos.lat()).replace('{lon}', pos.lng());
$.ajax({
url: urlNomCommuneFormatee,
type: 'GET',
dataType: 'jsonp',
beforeSend: function() {
$('.commune-info').empty();
$('#dialogue-erreur .alert-txt').empty();
},
success: function(data, textStatus, jqXHR) {
$('.commune-info').empty();
$('#commune-nom').append(data.nom);
$('#commune-code-insee').append(data.codeINSEE);
$('#marqueur-commune').data('commune', {'nom' : data.nom, 'codeInsee' : data.codeINSEE});
},
statusCode: {
500: function(jqXHR, textStatus, errorThrown) {
if (DEBUG) {
$('#dialogue-erreur .alert-txt').append('<p id="msg">Un problème est survenu lors de l\'appel au service fournissante le nom des communes.</p>');
reponse = jQuery.parseJSON(jqXHR.responseText);
var erreurMsg = "";
if (reponse != null) {
$.each(reponse, function (cle, valeur) {
erreurMsg += valeur + '<br />';
});
}
$('#dialogue-erreur .alert-txt').append(
'<p class="msg-erreur">Erreur 500 : '+errorThrown+'<br />'+erreurMsg+'</p>');
}
}
},
error: function(jqXHR, textStatus, errorThrown) {
if (DEBUG) {
$('#dialogue-erreur .alert-txt').append(
'<p class="msg">Une erreur Ajax est survenue lors de la transmission de vos observations.</p>');
reponse = jQuery.parseJSON(jqXHR.responseText);
var erreurMsg = '';
if (reponse != null) {
$.each(reponse, function (cle, valeur) {
erreurMsg += valeur + '<br />';
});
}
$('#dialogue-erreur .alert-txt').append(
'<p class="msg-erreur">Erreur Ajax : '+errorThrown+' (type : '+textStatus+') <br />'+erreurMsg+'</p>');
}
},
complete: function(jqXHR, textStatus) {
var debugMsg = extraireEnteteDebug(jqXHR);
if (debugMsg != '') {
if (DEBUG) {
$("#dialogue-erreur .alert-txt").append('<pre class="msg-debug msg">Débogage : '+debugMsg+'</pre>');
}
}
if ($("#dialogue-erreur .msg").length > 0) {
$("#dialogue-erreur").show();
}
}
});
});
}
//+---------------------------------------------------------------------------------------------------------+
// IDENTITÉ
$(document).ready(function() {
$('#courriel').on('blur', requeterIdentite);
$('#courriel').on('keypress', testerLancementRequeteIdentite);
});
 
function testerLancementRequeteIdentite(event) {
if (event.which == 13) {
requeterIdentite();
event.preventDefault();
event.stopPropagation();
}
}
 
function requeterIdentite() {
var courriel = $('#courriel').val();
//TODO: mettre ceci en paramètre de config
var urlAnnuaire = SERVICE_ANNUAIRE_ID_URL + courriel;
$.ajax({
url: urlAnnuaire,
type: 'GET',
success: function(data, textStatus, jqXHR) {
console.log('SUCCESS:'+textStatus);
if (data != undefined && data[courriel] != undefined) {
var infos = data[courriel];
$('#id_utilisateur').val(infos.id);
$('#prenom').val(infos.prenom);
$('#nom').val(infos.nom);
$('#courriel_confirmation').val(courriel);
$('#prenom, #nom, #courriel_confirmation').attr('disabled', 'disabled');
$('#date').focus();
} else {
surErreurCompletionCourriel();
}
},
error: function(jqXHR, textStatus, errorThrown) {
console.log('ERREUR :'+textStatus);
surErreurCompletionCourriel();
},
complete: function(jqXHR, textStatus) {
console.log('COMPLETE :'+textStatus);
$('#zone-prenom-nom').removeClass('hidden');
$('#zone-courriel-confirmation').removeClass('hidden');
}
});
}
 
function surErreurCompletionCourriel() {
$('#prenom, #nom, #courriel_confirmation').val('');
$('#prenom, #nom, #courriel_confirmation').removeAttr('disabled');
afficherPanneau('#dialogue-courriel-introuvable');
}
//+---------------------------------------------------------------------------------------------------------+
// FORMULAIRE
var obsNbre = 0;
 
$(document).ready(function() {
// Sliders
transformerEnSlider('#presence-zone-vegetalise');
transformerEnSlider('#hauteur-batiment-avoisinant');
transformerEnSlider('#periodicite-traitement-phyto');
transformerEnSlider('#resistance-traitement-phyto');
transformerEnSlider('#vitesse-croissance');
// Afficher/Cacher champs cachés par défaut
$('#periodicite-traitement-phyto').on('change', function() {
if ($(this).val() === 'jamais') {
$('#datp-zone').removeClass('hidden');
} else {
$('#datp-zone').addClass('hidden');
}
});
$('#taxon-liste').on('change', function() {
if ($(this).val() === '?') {
$('#taxon-input-groupe').removeClass('hidden');
} else {
$('#taxon-input-groupe').addClass('hidden');
}
});
$('.alert .close').on('click', fermerPanneauAlert);
$('[rel=tooltip]').tooltip('enable');
$('#btn-aide').on('click', basculerAffichageAide);
$('#prenom').on('change', formaterPrenom);
$('#nom').on('change', formaterNom);
configurerDatePicker('#date');
configurerDatePicker('#date-arret-traitement-phyto');
ajouterAutocompletionNoms();
configurerFormValidator();
definirReglesFormValidator();
$('#courriel_confirmation').on('paste', bloquerCopierCollerCourriel);
$('a.afficher-coord').on('click', basculerAffichageCoord);
$('#ajouter-obs').on('click', ajouterObs);
$('.obs-nbre').on('changement', surChangementNbreObs);
$('body').on('click', '.supprimer-obs', supprimerObs);
$('#transmettre-obs').on('click', transmettreObs);
$('body').on('click', '.defilement-miniatures-gauche', function(event) {
event.preventDefault();
defilerMiniatures($(this));
});
$('body').on('click', '.defilement-miniatures-droite', function(event) {
event.preventDefault();
defilerMiniatures($(this));
});
$('.dropdown-menu input, .dropdown-menu label').on('click', function(event) {
event.stopPropagation();
});
$('input#hauteur-plante').on('blur', function() {
// if there's a bad value
var valeur = $(this).val();
console.log(valeur);
if (! valeur.match(/^[0-9]+$/)) {
// replace it with nothing
var nouvelleValeur = valeur.replace(/[^0-9]/g, '');
$(this).val(nouvelleValeur);
}
});
});
 
function transformerEnSlider(selector) {
$(selector).each(function(index, el) {
// hide the element
$(el).addClass('slider-on');
// add the slider to each element
var slider = $( '<div class="slider-holder"><div class="horizontal-slider"></div></div>' ).
insertAfter( el ).find('.horizontal-slider').slider({
min: 1,
max: el.options.length,
range: 'min',
value: el.selectedIndex + 1,
slide: function( event, ui ) {
el.selectedIndex = ui.value - 1;
slider.find('a').text(el.options[el.selectedIndex].text);
},
stop: function() {
$(el).change();
}
});
slider.find('a').text(el.options[el.selectedIndex].text);
// Create a legend under the slider so we can see the options
var options = [];
for (var option in $(el).children()) {
if (!isNaN(parseInt(option))) {
options.push(el.options[option].text);
}
}
// the width of each legend/option
var width = (slider.width() / (options.length - 1));
// Add the legend. Half the width of the first and last options for display consistency.
slider.after('<div class="slider-legend"><p style="width:' + (width / 2) + 'px;text-align:left;">' +
options.join('</p><p style="width:' + width + 'px;">') +'</p></div>')
.parent().find('.slider-legend p:last-child').css('width', width / 2)
.css('text-align', 'right');
// if there are too many options so that the text is wider than the width, then hide the text
var lastChild = slider.parent().find('.slider-legend p:last-child');
if (lastChild[0].clientWidth < lastChild[0].scrollWidth) {
slider.parent().find('.slider-legend p').css('text-indent', '200%');
}
});
}
 
function configurerFormValidator() {
$.validator.addMethod(
'dateCel',
function (value, element) {
return value == '' || (/^[0-9]{2}[-\/][0-9]{2}[-\/][0-9]{4}$/.test(value));
},
'Format : jj/mm/aaaa. Date incomplète, utiliser 0, exemple : 00/12/2011.');
$.extend($.validator.defaults, {
highlight: function(element) {
$(element).closest('.control-group').removeClass('success').addClass('error');
},
success: function(element) {
element.text('OK!').addClass('valid')
.closest('.control-group').removeClass('error').addClass('success');
if (element.attr('id') == 'taxon' && $('#taxon').val() != '') {
// Si le taxon n'est pas lié au référentiel, on vide le data associé
if ($('#taxon').data('value') != $('#taxon').val()) {
$('#taxon').data('numNomSel', '');
$('#taxon').data('nomRet', '');
$('#taxon').data('numNomRet', '');
$('#taxon').data('nt', '');
$('#taxon').data('famille', '');
}
}
}
});
}
 
function definirReglesFormValidator() {
$('#form-observateur').validate({
rules: {
courriel: {
required: true,
email: true},
courriel_confirmation: {
required: true,
equalTo: '#courriel'}
}
});
$('#form-station').validate({
rules: {
latitude : {
range: [-90, 90]},
longitude: {
range: [-180, 180]}
}
});
$('#form-obs').validate({
rules: {
date: 'dateCel',
'taxon-liste': 'required'
}
});
}
 
function configurerDatePicker(selector) {
$.datepicker.setDefaults($.datepicker.regional['fr']);
$(selector).datepicker({
dateFormat: 'dd/mm/yy',
showOn: 'button',
buttonImageOnly: true,
buttonImage: CALENDRIER_ICONE_URL,
buttonText: 'Afficher le calendrier pour saisir la date.',
showButtonPanel: true
});
$(selector + ' + img.ui-datepicker-trigger').appendTo(selector + '-icone.add-on');
}
 
function fermerPanneauAlert() {
$(this).parentsUntil('.zone-alerte', '.alert').hide();
}
 
function formaterNom() {
$(this).val($(this).val().toUpperCase());
}
 
function formaterPrenom() {
var prenom = new Array(),
mots = $(this).val().split(' ');
for (var i = 0; i < mots.length; i++) {
var mot = mots[i];
if (mot.indexOf('-') >= 0) {
var prenomCompose = new Array(),
motsComposes = mot.split('-');
for (var j = 0; j < motsComposes.length; j++) {
var motSimple = motsComposes[j],
motMajuscule = motSimple.charAt(0).toUpperCase() + motSimple.slice(1);
prenomCompose.push(motMajuscule);
}
prenom.push(prenomCompose.join('-'));
} else {
var motMajuscule = mot.charAt(0).toUpperCase() + mot.slice(1);
prenom.push(motMajuscule);
}
}
$(this).val(prenom.join(' '));
}
 
function basculerAffichageAide() {
if ($(this).hasClass('btn-warning')) {
$('[rel=tooltip]').tooltip('enable');
$(this).removeClass('btn-warning').addClass('btn-success');
$('#btn-aide-txt', this).text("Désactiver l'aide");
} else {
$('[rel=tooltip]').tooltip('disable');
$(this).removeClass('btn-success').addClass('btn-warning');
$('#btn-aide-txt', this).text("Activer l'aide");
}
}
 
function bloquerCopierCollerCourriel() {
afficherPanneau('#dialogue-bloquer-copier-coller');
return false;
}
 
function basculerAffichageCoord() {
$('.afficher-coord-action').toggle();
$('#coordonnees-geo').toggle('slow');
//valeur false pour que le lien ne soit pas suivi
return false;
}
 
function ajouterObs() {
if (validerFormulaire() == true) {
obsNbre = obsNbre + 1;
$('.obs-nbre').text(obsNbre);
$('.obs-nbre').triggerHandler('changement');
afficherObs();
stockerObsData();
supprimerMiniatures();
$('#taxon').val('').data('numNomSel', undefined).removeClass('ns-retenu');
} else {
afficherPanneau('#dialogue-form-invalide');
}
}
 
function afficherObs() {
var numNomSel = ($('#taxon-liste').val() == '?') ? $('#taxon').data('numNomSel') : $('#taxon-liste').val(),
taxon = ($('#taxon-liste').val() == '?') ? $('#taxon').val() : taxons[numNomSel]['nom_sel'],
referentiel = (numNomSel == undefined) ? '' : '['+NOM_SCI_PROJET+']',
commune = $('#commune-nom').text(),
codeInsee = $('#commune-code-insee').text(),
lat = $('input[name="latitude"]').val(),
lng = $('input[name="longitude"]').val(),
date = $('#date').val(),
site = $('#station').val(),
milieux = getMilieux(),
notes = $('#notes').val();
$('#liste-obs').prepend(
'<div id="obs'+obsNbre+'" class="row-fluid obs obs'+obsNbre+'">'+
'<div class="span12">'+
'<div class="well">'+
'<div class="obs-action pull-right" rel="tooltip" data-placement="bottom" '+
'title="Supprimer cette observation de la liste à transmettre">'+
'<button class="btn btn-danger supprimer-obs" value="'+obsNbre+'" title="'+obsNbre+'">'+
'<i class="icon-trash icon-white"></i>'+
'</button>'+
'</div> '+
'<div class="row-fluid">'+
'<div class="thumbnail span2">'+
ajouterImgMiniatureAuTransfert()+
'</div>'+
'<div class="span9">'+
'<ul class="unstyled">'+
'<li>'+
'<span class="nom-sci">' + taxon + '</span> ' +
formaterNumNomSel(numNomSel)+
'<span class="referentiel-obs">' + referentiel + '</span>' +
' observé à ' +
'<span class="commune">' + commune + '</span> ' +
'(' + codeInsee + ') [' + lat +' / ' + lng + ']' +
' le ' +
'<span class="date">' + date + '</span>' +
'</li>' +
'<li>' +
'<span>Site :</span> ' + site + ' ' +
'<span>Milieu :</span> ' + milieux + ' ' +
'</li>' +
'<li>' +
'Commentaires : <span class="discretion">' + notes + '</span>'+
'</li>'+
'</ul>'+
'</div>'+
'</div>'+
'</div>'+
'</div>'+
'</div>');
}
 
function getMilieux() {
var milieuxStr = '',
milieux = [];
$('input:checkbox[name="milieux"]:checked').each(function() {
milieux.push($(this).val());
});
milieuxStr = Array.prototype.slice.call(milieux).join(', ');
return milieuxStr;
}
 
function ajouterImgMiniatureAuTransfert() {
var html = '',
miniatures = '',
premiere = true;
if ($('#miniatures img').length >= 1) {
$('#miniatures img').each(function() {
var visible = premiere ? 'miniature-selectionnee' : 'miniature-cachee',
css = $(this).hasClass('b64') ? 'miniature b64' : 'miniature',
src = $(this).attr('src'),
alt = $(this).attr('alt');
premiere = false;
miniature = '<img class="'+css+' '+visible+'" alt="'+alt+'"src="'+src+'" />';
miniatures += miniature;
});
visible = ($('#miniatures img').length > 1) ? '' : 'defilement-miniatures-cache';
var html =
'<div class="defilement-miniatures">'+
'<a href="#" class="defilement-miniatures-gauche '+visible+'">&#60;</a>'+
miniatures+
'<a href="#" class="defilement-miniatures-droite '+visible+'">&#62;</a>'+
'</div>';
} else {
html = '<img class="miniature" alt="Aucune photo"src="'+PAS_DE_PHOTO_ICONE_URL+'" />';
}
return html;
}
 
function formaterNumNomSel(numNomSel) {
var nn = '';
if (numNomSel == undefined) {
nn = '<span class="alert-error">[non lié au référentiel]</span>';
} else {
nn = '<span class="nn">[nn'+numNomSel+']</span>';
}
return nn;
}
 
function stockerObsData() {
$('#liste-obs').data('obsId'+obsNbre, {
'date' : $('#date').val(),
'notes' : $('#notes').val(),
'nom_sel' : $('#taxon').val(),
'num_nom_sel' : $('#taxon').data('numNomSel'),
'nom_ret' : $('#taxon').data('nomRet'),
'num_nom_ret' : $('#taxon').data('numNomRet'),
'num_taxon' : $('#taxon').data('nt'),
'famille' : $('#taxon').data('famille'),
'referentiel' : ($('#taxon').data('numNomSel') == undefined ? '' : NOM_SCI_REFERENTIEL),
'latitude' : $('#latitude').val(),
'longitude' : $('#longitude').val(),
'commune_nom' : $('#commune-nom').text(),
'commune_code_insee' : $('#commune-code-insee').text(),
'lieudit' : $('#lieudit').val(),
'station' : $('#station').val(),
'milieu' : $('#milieu').val(),
//Ajout des champs images
'image_nom' : getNomsImgsOriginales(),
'image_b64' : getB64ImgsOriginales()
});
}
 
function surChangementReferentiel() {
NOM_SCI_PROJET = $('#referentiel').val();
NOM_SCI_REFERENTIEL = NOM_SCI_PROJET+':'+PROJETS_VERSIONS[NOM_SCI_PROJET];
$('#taxon').val('');
}
 
function surChangementNbreObs() {
if (obsNbre == 0) {
$('#transmettre-obs').attr('disabled', 'disabled');
$('#ajouter-obs').removeAttr('disabled');
} else if (obsNbre > 0 && obsNbre < OBS_MAX_NBRE) {
$('#transmettre-obs').removeAttr('disabled');
$('#ajouter-obs').removeAttr('disabled');
} else if (obsNbre >= OBS_MAX_NBRE) {
$('#ajouter-obs').attr('disabled', 'disabled');
afficherPanneau('#dialogue-bloquer-creer-obs');
}
}
 
function transmettreObs() {
var observations = $('#liste-obs').data();
console.log(observations);
if (observations == undefined || jQuery.isEmptyObject(observations)) {
afficherPanneau('#dialogue-zero-obs');
} else {
observations['projet'] = TAG_PROJET;
observations['tag-obs'] = TAG_OBS;
observations['tag-img'] = TAG_IMG;
var utilisateur = new Object();
utilisateur.id_utilisateur = $('#id_utilisateur').val();
utilisateur.prenom = $('#prenom').val();
utilisateur.nom = $('#nom').val();
utilisateur.courriel = $('#courriel').val();
observations['utilisateur'] = utilisateur;
envoyerObsAuCel(observations);
}
return false;
}
 
function envoyerObsAuCel(observations) {
var erreurMsg = '';
$.ajax({
url: SERVICE_SAISIE_URL,
type: 'POST',
data: observations,
dataType: 'json',
beforeSend: function() {
$('#dialogue-obs-transaction-ko').hide();
$('#dialogue-obs-transaction-ok').hide();
$('.alert-txt .msg').remove();
$('.alert-txt .msg-erreur').remove();
$('.alert-txt .msg-debug').remove();
$('#chargement').show();
},
success: function(data, textStatus, jqXHR) {
$('#dialogue-obs-transaction-ok .alert-txt').append($('#tpl-transmission-ok').clone().html());
supprimerMiniatures();
},
statusCode: {
500: function(jqXHR, textStatus, errorThrown) {
erreurMsg += "Erreur 500 :\ntype : " + textStatus + ' ' + errorThrown + "\n";
}
},
error: function(jqXHR, textStatus, errorThrown) {
erreurMsg += "Erreur Ajax :\ntype : " + textStatus + ' ' + errorThrown + "\n";
try {
reponse = jQuery.parseJSON(jqXHR.responseText);
if (reponse != null) {
$.each(reponse, function (cle, valeur) {
erreurMsg += valeur + "\n";
});
}
} catch(e) {
erreurMsg += "L'erreur n'était pas en JSON.";
}
},
complete: function(jqXHR, textStatus) {
$('#chargement').hide();
var debugMsg = extraireEnteteDebug(jqXHR);
if (erreurMsg != '') {
if (DEBUG) {
$('#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@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')
.attr('href', hrefCourriel)
.end()
.html());
$('#dialogue-obs-transaction-ko').show();
} else {
if (DEBUG) {
$('#dialogue-obs-transaction-ok .alert-txt').append('<pre class="msg-debug">Débogage : ' + debugMsg + '</pre>');
}
$('#dialogue-obs-transaction-ok').show();
}
initialiserObs();
}
});
}
 
function validerFormulaire() {
$observateur = $('#form-observateur').valid();
$station = $('#form-station').valid();
$obs = $('#form-obs').valid();
return ($observateur == true && $station == true && $obs == true) ? true : false;
}
 
function getNomsImgsOriginales() {
var noms = new Array();
$('.miniature-img').each(function() {
noms.push($(this).attr('alt'));
});
return noms;
}
 
function getB64ImgsOriginales() {
var b64 = new Array();
$('.miniature-img').each(function() {
if ($(this).hasClass('b64')) {
b64.push($(this).attr('src'));
} else if ($(this).hasClass('b64-canvas')) {
b64.push($(this).data('b64'));
}
});
return b64;
}
 
function supprimerObs() {
var obsId = $(this).val();
// Problème avec IE 6 et 7
if (obsId == 'Supprimer') {
obsId = $(this).attr('title');
}
obsNbre = obsNbre - 1;
$('.obs-nbre').text(obsNbre);
$('.obs-nbre').triggerHandler('changement');
$('.obs'+obsId).remove();
$('#liste-obs').removeData('obsId' + obsId);
}
 
function initialiserObs() {
obsNbre = 0;
$('.obs-nbre').text(obsNbre);
$('.obs-nbre').triggerHandler('changement');
$('#liste-obs').removeData();
$('.obs').remove();
$('#dialogue-bloquer-creer-obs').hide();
}
 
 
function defilerMiniatures(element) {
var miniatureSelectionne = element.siblings('img.miniature-selectionnee');
miniatureSelectionne.removeClass('miniature-selectionnee');
miniatureSelectionne.addClass('miniature-cachee');
var miniatureAffichee = miniatureSelectionne;
if(element.hasClass('defilement-miniatures-gauche')) {
if(miniatureSelectionne.prev('.miniature').length != 0) {
miniatureAffichee = miniatureSelectionne.prev('.miniature');
} else {
miniatureAffichee = miniatureSelectionne.siblings('.miniature').last();
}
} else {
if(miniatureSelectionne.next('.miniature').length != 0) {
miniatureAffichee = miniatureSelectionne.next('.miniature');
} else {
miniatureAffichee = miniatureSelectionne.siblings('.miniature').first();
}
}
miniatureAffichee.addClass('miniature-selectionnee');
miniatureAffichee.removeClass('miniature-cachee');
}
 
//+---------------------------------------------------------------------------------------------------------+
// AUTO-COMPLÉTION Noms Scientifiques
 
function ajouterAutocompletionNoms() {
$('#taxon').autocomplete({
source: function(requete, add){
// la variable de requête doit être vidée car sinon le parametre "term" est ajouté
var url = getUrlAutocompletionNomsSci();
$.getJSON(url, function(data) {
console.log(data);
var suggestions = traiterRetourNomsSci(data);
add(suggestions);
});
},
html: true
});
$('#taxon').bind('autocompleteselect', function(event, ui) {
$('#taxon').data(ui.item);
if (ui.item.retenu == true) {
$('#taxon').addClass('ns-retenu');
} else {
$('#taxon').removeClass('ns-retenu');
}
});
}
 
function getUrlAutocompletionNomsSci() {
var mots = $('#taxon').val(),
url = SERVICE_AUTOCOMPLETION_NOM_SCI_URL_TPL.replace('{referentiel}',NOM_SCI_PROJET);
url = url.replace('{masque}', mots);
return url;
}
 
function traiterRetourNomsSci(data) {
var suggestions = [];
if (data.resultat != undefined) {
$.each(data.resultat, function(i, val) {
val.nn = i;
var nom = {label: '', value: '', nt: '', nomSel: '', nomSelComplet: '', numNomSel: '',
nomRet: '', numNomRet: '', famille: '', retenu: false
};
if (suggestions.length >= AUTOCOMPLETION_ELEMENTS_NBRE) {
nom.label = '...';
nom.value = $('#taxon').val();
suggestions.push(nom);
return false;
} else {
nom.label = val.nom_sci_complet;
nom.value = val.nom_sci_complet;
nom.nt = val.num_taxonomique;
nom.nomSel = val.nom_sci;
nom.nomSelComplet = val.nom_sci_complet;
nom.numNomSel = val.nn;
nom.nomRet = val.nom_retenu_complet;
nom.numNomRet = val['nom_retenu.id'];
nom.famille = val.famille;
nom.retenu = (val.retenu == 'false') ? false : true;
suggestions.push(nom);
}
});
}
return suggestions;
}
 
/*
* jQuery UI Autocomplete HTML Extension
*
* Copyright 2010, Scott González (http://scottgonzalez.com)
* Dual licensed under the MIT or GPL Version 2 licenses.
*
* http://github.com/scottgonzalez/jquery-ui-extensions
*
* Adaptation par Aurélien Peronnet pour la mise en gras des noms de taxons valides
*/
(function($) {
var proto = $.ui.autocomplete.prototype,
initSource = proto._initSource;
function filter(array, term) {
var matcher = new RegExp($.ui.autocomplete.escapeRegex(term), 'i');
return $.grep(array, function(value) {
return matcher.test($('<div>').html(value.label || value.value || value).text());
});
}
$.extend(proto, {
_initSource: function() {
if (this.options.html && $.isArray(this.options.source)) {
this.source = function( request, response ) {
response(filter(this.options.source, request.term));
};
} else {
initSource.call(this);
}
},
_renderItem: function(ul, item) {
if (item.retenu == true) {
item.label = '<strong>'+item.label+'</strong>';
}
return $('<li></li>')
.data('item.autocomplete', item)
.append($('<a></a>')[this.options.html ? 'html' : 'text'](item.label))
.appendTo(ul);
}
});
})(jQuery);
/branches/v1.6-croc/widget/modules/saisie/squelettes/sauvages/js/sauvages.js
563,6 → 563,8
'image_nom' : $("#miniature-img").attr('alt'),
'image_b64' : getB64ImgOriginal()
});
// retour à une sélection vide pour le taxon
$('#taxon option[value=""]').attr("selected", "selected");
}
});
/branches/v1.6-croc/widget/modules/saisie/squelettes/defaut/defaut.tpl.html
51,10 → 51,12
var TAG_PROJET = "WidgetSaisie";
// Mots-clés à ajouter aux images
var TAG_IMG = "<?=isset($_GET['tag-img']) ? $_GET['tag-img'] : ''?>";
TAG_IMG = <?=isset($_GET['motcle']) ? "'".$_GET['motcle']."'" : 'TAG_IMG' ?>;
var SEPARATION_TAG_IMG = '<?= isset($_GET['motcle']) && isset($_GET['tag-img']) ? ',' : '' ?>';
TAG_IMG = <?=isset($_GET['motcle']) ? "'".$_GET['motcle']."'+SEPARATION_TAG_IMG+TAG_IMG" : 'TAG_IMG' ?>;
// Mots-clés à ajouter aux observations
var TAG_OBS = "<?=isset($_GET['tag-obs']) ? $_GET['tag-obs'] : ''?>";
TAG_OBS = <?=isset($_GET['projet']) ? "'".$_GET['projet']."'" : 'TAG_OBS' ?>;
var SEPARATION_TAG_OBS = '<?= isset($_GET['projet']) && isset($_GET['tag-obs']) ? ',' : '' ?>';
TAG_OBS = <?=isset($_GET['projet']) ? "'".$_GET['projet']."'+SEPARATION_TAG_OBS+TAG_OBS" : 'TAG_OBS' ?>;
// URL du web service réalisant l'insertion des données dans la base du CEL.
var SERVICE_SAISIE_URL = "<?=$url_ws_saisie?>";
// Code du référentiel utilisé pour les nom scientifiques (de la forme nom:code).
347,7 → 349,7
</div>
<div class="span6">
<form id="form-obs" action="#" autocomplete="on">
<h2>Observations</h2>
<h2>Observation</h2>
<?php if(!$referentiel_impose) : ?>
<div class="row-fluid">
<div rel="tooltip"
406,16 → 408,15
</form>
<form id="form-upload" class="form-horizontal" action="<?=$url_base?>saisie?projet=sauvages&amp;service=upload-image"
method="post" enctype="multipart/form-data">
<div rel="tooltip"
title="Ajouter une photo de votre observation. Elle doit être au
format JPEG et ne doit pas excéder 5Mo.">
<label>Photo</label>
<h2>Image(s) de cette plante</h2>
<strong>Ajouter une image</strong>
<p class="miniature-info" class="discretion help-inline">Les photos doivent être au format JPEG et ne doivent pas excéder 5Mo chacunes.</p>
<div id ="photos-conteneur">
<input type="file" id="fichier" name="fichier" accept="image/jpeg" />
<input type="hidden" name="MAX_FILE_SIZE" value="5242880"/>
<p id="miniature-info" class="discretion help-inline">La photo doit être au format JPEG et ne doit pas excéder 5Mo.</p>
<div id="miniature"></div>
<button id="effacer-miniature" type="button" style="display:none;">Effacer</button>
<p id="miniature-msg" class="span12">&nbsp;</p>
<div id="miniatures">
</div>
<p class="miniature-msg" class="span12">&nbsp;</p>
</div>
</form>
</div>
/branches/v1.6-croc/widget/modules/saisie/squelettes/defaut/img/icones/icone-photo-hover.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/branches/v1.6-croc/widget/modules/saisie/squelettes/defaut/img/icones/icone-photo-hover.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/branches/v1.6-croc/widget/modules/saisie/squelettes/defaut/img/icones/plus.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/branches/v1.6-croc/widget/modules/saisie/squelettes/defaut/img/icones/plus.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/branches/v1.6-croc/widget/modules/saisie/squelettes/defaut/img/icones/icone-photo.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/branches/v1.6-croc/widget/modules/saisie/squelettes/defaut/img/icones/icone-photo.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/branches/v1.6-croc/widget/modules/saisie/squelettes/defaut/js/defaut.js
44,31 → 44,26
//UPLOAD PHOTO : Traitement de l'image
$(document).ready(function() {
$("#effacer-miniature").click(function () {
supprimerMiniature();
$(".effacer-miniature").click(function () {
supprimerMiniatures($(this));
});
if (HTML5 && window.File && window.FileReader && isCanvasSupported()) {
if (DEBUG) {
console.log("Support OK pour : API File et Canvas.");
$("#fichier").bind('change', function (e) {
arreter(e);
var options = {
success: afficherMiniature, // post-submit callback
dataType: 'xml', // 'xml', 'script', or 'json' (expected server response type)
resetForm: true // reset the form after successful submit
};
$("#miniature").append('<img id="miniature-chargement" class="miniature" alt="chargement" src="'+CHARGEMENT_IMAGE_URL+'"/>');
$("#ajouter-obs").attr('disabled', 'disabled');
if(verifierFormat($("#fichier").val())) {
$("#form-upload").ajaxSubmit(options);
} else {
window.alert("Le format de fichier n'est pas supporté, les formats acceptés sont "+ $("#fichier").attr("accept"));
}
$('#fichier').bind('change', function(e) {
afficherMiniatureHtml5(e);
});
} else {
$("#fichier").bind('change', function (e) {
arreter(e);
var options = {
success: afficherMiniature, // post-submit callback
dataType: 'xml', // 'xml', 'script', or 'json' (expected server response type)
resetForm: true // reset the form after successful submit
};
$("#miniature").append('<img id="miniature-chargement" class="miniature" alt="chargement" src="'+CHARGEMENT_IMAGE_URL+'"/>');
$("#ajouter-obs").attr('disabled', 'disabled');
$("#form-upload").ajaxSubmit(options);
return false;
});
}
return false;
});
if(ESPECE_IMPOSEE) {
$("#taxon").attr("disabled", "disabled");
86,98 → 81,19
infosAssociee.retenu = (INFOS_ESPECE_IMPOSEE.retenu == 'false') ? false : true;
$("#taxon").data(infosAssociee);
}
$('.effacer-miniature').live('click', function() {
$(this).parent().remove();
});
});
 
function isCanvasSupported(){
var elem = document.createElement('canvas');
return !!(elem.getContext && elem.getContext('2d'));
function verifierFormat(nom) {
var parts = nom.split('.');
extension = parts[parts.length - 1];
return (extension.toLowerCase() == 'jpeg' || extension.toLowerCase() == 'jpg');
}
 
function afficherMiniatureHtml5(evt) {
supprimerMiniature();
var selectedfiles = evt.target.files;
var f = selectedfiles[0];// Nous récupérons seulement le premier fichier.
if (f.type != 'image/jpeg') {
var message = "Seule les images JPEG sont supportées.";
$("#miniature-msg").append(message);
} else if (f.size > 5242880) {
var message = "Votre image à un poids supérieur à 5Mo.";
$("#miniature-msg").append(message);
} else {
var reader = new FileReader();
// Lit le fichier image commune url de données
reader.readAsDataURL(f);
var imgNom = f.name;
// Closure pour capturer les infos du fichier
reader.onload = (function(theFile) {
return function(e) {
// Rendre la miniature
var imageBase64 = e.target.result;
//$("#miniature").append('<img id="miniature-img" class="miniature b64" src="'+imageBase64+'" alt="'+imgNom+'"/>');
// HTML5 Canvas
var img = new Image();
img.src = imageBase64;
img.alt = imgNom;
img.onload = function() {
transformerImgEnCanvas(this, 100, 100, false, 'white');
};
};
})(f);
}
$("#effacer-miniature").show();
}
 
function transformerImgEnCanvas(img, thumbwidth, thumbheight, crop, background) {
var canvas = document.createElement('canvas');
canvas.width = thumbwidth;
canvas.height = thumbheight;
var dimensions = calculerDimenssions(img.width, img.height, thumbwidth, thumbheight);
if (crop) {
canvas.width = dimensions.w;
canvas.height = dimensions.h;
dimensions.x = 0;
dimensions.y = 0;
}
cx = canvas.getContext('2d');
if (background !== 'transparent') {
cx.fillStyle = background;
cx.fillRect(0, 0, thumbwidth, thumbheight);
}
cx.drawImage(img, dimensions.x, dimensions.y, dimensions.w, dimensions.h);
afficherMiniatureCanvas(img, canvas);
}
 
function calculerDimenssions(imagewidth, imageheight, thumbwidth, thumbheight) {
var w = 0, h = 0, x = 0, y = 0,
widthratio = imagewidth / thumbwidth,
heightratio = imageheight / thumbheight,
maxratio = Math.max(widthratio, heightratio);
if (maxratio > 1) {
w = imagewidth / maxratio;
h = imageheight / maxratio;
} else {
w = imagewidth;
h = imageheight;
}
x = (thumbwidth - w) / 2;
y = (thumbheight - h) / 2;
return {w:w, h:h, x:x, y:y};
}
 
function afficherMiniatureCanvas(imgB64, canvas) {
var url = canvas.toDataURL('image/jpeg' , 0.8);
var alt = imgB64.alt;
var title = Math.round(url.length / 1000 * 100) / 100 + ' KB';
var miniature = '<img id="miniature-img" class="miniature b64-canvas" src="'+url+'" alt="'+alt+'" title="'+title+'" />';
$("#miniature").append(miniature);
$("#miniature-img").data('b64', imgB64.src);
}
 
function afficherMiniature(reponse) {
supprimerMiniature();
if (DEBUG) {
var debogage = $("debogage", reponse).text();
console.log("Débogage upload : "+debogage);
186,18 → 102,25
if (message != '') {
$("#miniature-msg").append(message);
} else {
var miniatureUrl = $("miniature-url", reponse).text();
var imgNom = $("image-nom", reponse).text();
$("#miniature").append('<img id="miniature-img" class="miniature" alt="'+imgNom+'" src="'+miniatureUrl+'"/>');
$("#miniatures").append(creerWidgetMiniature(reponse));
}
$('#ajouter-obs').removeAttr('disabled');
$("#effacer-miniature").show();
$('#ajouter-obs').removeAttr('disabled');
}
 
function supprimerMiniature() {
$("#miniature").empty();
function creerWidgetMiniature(reponse) {
var miniatureUrl = $("miniature-url", reponse).text();
var imgNom = $("image-nom", reponse).text();
var html =
'<div class="miniature">'+
'<img class="miniature-img" class="miniature" alt="'+imgNom+'" src="'+miniatureUrl+'"/>'+
'<button class="effacer-miniature" type="button">Effacer</button>'+
'</div>'
return html;
}
 
function supprimerMiniatures() {
$("#miniatures").empty();
$("#miniature-msg").empty();
$("#effacer-miniature").hide();
}
 
//+----------------------------------------------------------------------------------------------------------+
217,6 → 140,13
$("#carte-recherche").on('mouseup', function(event) {// Pour Safari...
event.preventDefault();
});
$("#carte-recherche").keypress(function(e) {
if (e.which == 13) {
e.preventDefault();
}
});
$("#carte-recherche").autocomplete({
//Cette partie utilise geocoder pour extraire des valeurs d'adresse
source: function(request, response) {
365,11 → 295,6
$(function() {
var url_service = SERVICE_NOM_COMMUNE_URL;
/*if(NOM_SCI_PROJET != "bdtfx") {
// Dans le cas d'autres référentiels comme les Antilles, on utilise
// une localisation mondiale mais approximative (c'est mieux que rien)
url_service = SERVICE_NOM_COMMUNE_URL_ALT
}*/
var urlNomCommuneFormatee = url_service.replace('{lat}', pos.lat()).replace('{lon}', pos.lng());
$.ajax({
523,6 → 448,16
$("#transmettre-obs").on('click', transmettreObs);
$("#referentiel").on('change', surChangementReferentiel);
$("body").on('click', ".defilement-miniatures-gauche", function(event) {
event.preventDefault();
defilerMiniatures($(this));
});
$("body").on('click', ".defilement-miniatures-droite", function(event) {
event.preventDefault();
defilerMiniatures($(this));
});
});
 
function configurerFormValidator() {
670,7 → 605,9
$(".obs-nbre").triggerHandler('changement');
afficherObs();
stockerObsData();
supprimerMiniature();
supprimerMiniatures();
$("#taxon").val("");
$("#taxon").data("numNomSel",undefined);
} else {
afficherPanneau('#dialogue-form-invalide');
}
741,8 → 678,8
'milieu' : $("#milieu").val(),
//Ajout des champs images
'image_nom' : $("#miniature-img").attr('alt'),
'image_b64' : getB64ImgOriginal()
'image_nom' : getNomsImgsOriginales(),
'image_b64' : getB64ImgsOriginales()
});
}
 
767,6 → 704,7
 
function transmettreObs() {
var observations = $("#liste-obs").data();
console.log(observations);
if (observations == undefined || jQuery.isEmptyObject(observations)) {
afficherPanneau("#dialogue-zero-obs");
803,7 → 741,7
},
success : function(data, textStatus, jqXHR) {
$('#dialogue-obs-transaction-ok .alert-txt').append($("#tpl-transmission-ok").clone().html());
supprimerMiniature();
supprimerMiniatures();
},
statusCode : {
500 : function(jqXHR, textStatus, errorThrown) {
860,13 → 798,24
return ($observateur == true && $station == true && $obs == true) ? true : false;
}
 
function getB64ImgOriginal() {
var b64 = '';
if ($("#miniature-img").hasClass('b64')) {
b64 = $("#miniature-img").attr('src');
} else if ($("#miniature-img").hasClass('b64-canvas')) {
b64 = $("#miniature-img").data('b64');
}
function getNomsImgsOriginales() {
var noms = new Array();
$(".miniature-img").each(function() {
noms.push($(this).attr('alt'));
});
return noms;
}
 
function getB64ImgsOriginales() {
var b64 = new Array();
$(".miniature-img").each(function() {
if ($(this).hasClass('b64')) {
b64.push($(this).attr('src'));
} else if ($(this).hasClass('b64-canvas')) {
b64.push($(this).data('b64'));
}
});
 
return b64;
}
 
894,18 → 843,57
}
 
function ajouterImgMiniatureAuTransfert() {
var miniature = '';
if ($("#miniature img").length == 1) {
var css = $("#miniature-img").hasClass('b64') ? 'miniature b64' : 'miniature';
var src = $("#miniature-img").attr("src");
var alt = $("#miniature-img").attr("alt");
miniature = '<img class="'+css+' " alt="'+alt+'"src="'+src+'" />';
var html = '';
var miniatures = '';
var premiere = true;
if ($("#miniatures img").length >= 1) {
$("#miniatures img").each(function() {
var visible = premiere ? 'miniature-selectionnee' : 'miniature-cachee';
premiere = false;
var css = $(this).hasClass('b64') ? 'miniature b64' : 'miniature';
var src = $(this).attr("src");
var alt = $(this).attr("alt");
miniature = '<img class="'+css+' '+visible+'" alt="'+alt+'"src="'+src+'" />';
miniatures += miniature;
});
visible = ($("#miniatures img").length > 1) ? '' : 'defilement-miniatures-cache';
var html =
'<div class="defilement-miniatures">'+
'<a href="#" class="defilement-miniatures-gauche '+visible+'">&#60;</a>'+
miniatures+
'<a href="#" class="defilement-miniatures-droite '+visible+'">&#62;</a>'+
'</div>';
} else {
miniature = '<img class="miniature" alt="Aucune photo"src="'+PAS_DE_PHOTO_ICONE_URL+'" />';
html = '<img class="miniature" alt="Aucune photo"src="'+PAS_DE_PHOTO_ICONE_URL+'" />';
}
return miniature;
return html;
}
 
function defilerMiniatures(element) {
var miniatureSelectionne = element.siblings("img.miniature-selectionnee");
miniatureSelectionne.removeClass('miniature-selectionnee');
miniatureSelectionne.addClass('miniature-cachee');
var miniatureAffichee = miniatureSelectionne;
if(element.hasClass('defilement-miniatures-gauche')) {
if(miniatureSelectionne.prev('.miniature').length != 0) {
miniatureAffichee = miniatureSelectionne.prev('.miniature');
} else {
miniatureAffichee = miniatureSelectionne.siblings(".miniature").last();
}
} else {
if(miniatureSelectionne.next('.miniature').length != 0) {
miniatureAffichee = miniatureSelectionne.next('.miniature');
} else {
miniatureAffichee = miniatureSelectionne.siblings(".miniature").first();
}
}
console.log(miniatureAffichee);
miniatureAffichee.addClass('miniature-selectionnee');
miniatureAffichee.removeClass('miniature-cachee');
}
 
function ajouterNumNomSel() {
var nn = '';
if ($("#taxon").data("numNomSel") == undefined) {
/branches/v1.6-croc/widget/modules/saisie/squelettes/defaut/css/defaut.css
67,14 → 67,58
.obs-action{
opacity:1;
}
 
#miniatures {
padding-top: 5px;
}
 
.miniature{
max-width:100px;
float: left;
height: 130px;
padding-left: 15px;
padding-right: 15px;
}
 
.miniature-img {
height: 100px;
}
 
.miniature img {
display: block;
}
 
.miniature-chargement {
height:100px;
width: 100px;
}
 
.defilement-miniatures-gauche, .defilement-miniatures-droite {
float: left;
font-size: 1.2em;
font-weight: bold;
height: 62px;
margin: 5px;
padding-top: 30px;
width: 12px;
}
 
.defilement-miniatures {
width: 210px;
}
 
.defilement-miniatures-cache {
visibility: hidden;
}
 
.miniature-cachee {
display: none;
}
 
.miniature-selectionnee {
display: block;
width: 90px;
}
 
.referentiel-obs {
color:#3B9D3B;
}
86,6 → 130,36
position: relative;
top: -8px;
}
 
#photos-conteneur {
height: 120px;
}
 
#photo-placeholder {
background: url("../img/icones/icone-photo.png");
background-size: 89px;
cursor: pointer;
margin-bottom: 15px;
margin-right: 15px;
float:left;
border: 5px dashed #CCCCCC;
border-radius: 8px 8px 8px 8px;
height: 100px;
margin: 2px 0 2px 2px;
text-align: center;
width: 98px;
box-sizing:border-box;
-moz-box-sizing:border-box;
-webkit-box-sizing:border-box;
}
 
#photo-placeholder:hover {
background: url("../img/icones/icone-photo-hover.png");
background-size: 89px;
border: 5px dashed #111;
border-radius: 8px;
}
 
/*+--------------------------------------------------------------------------------------------------------+*/
/* Correction style CSS Bootstrap */
.well {