Skip to content

Commit

Permalink
Construire dynamiquement la liste des liens vers la saisie des protoc…
Browse files Browse the repository at this point in the history
…oles à partir de la table synthese.bib_sources - cf #69
  • Loading branch information
gildeluermoz committed Nov 3, 2015
1 parent f98ea65 commit 0bd75e8
Show file tree
Hide file tree
Showing 13 changed files with 282 additions and 48 deletions.
29 changes: 29 additions & 0 deletions apps/backend/modules/home/actions/actions.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,35 @@ public function executeIndex(sfRequest $request)

if($this->getUser()->isAuthenticated()){
slot('title', sfGeonatureConfig::$appname_main);
// construction dynamique de la liste des liens vers les formulaires
$groupes = BibSourcesTable::listSourcesGroupes();
$sources = BibSourcesTable::listActiveSources();
$this->lien_saisie = '';
foreach ($groupes as $groupe)
{
$group = $groupe['groupe'];
$this->liens_saisie .= '<b>'.$group.'</b><br/>';
foreach ($sources as $source)
{
$source_group = $source['groupe'];
$url = $source['url'];
$target = $source['target'];
$picto = $source['picto'];
$nom_source = $source['nom_source'];
if($source_group == $group)
{
$this->lien_saisie = '';
$this->lien_saisie .= '<div style="margin:10px 0 0 50px ">';
$this->lien_saisie .= '<div style="vertical-align:middle;display:inline-block;"><a href="'.$url.'" target="'.$target.'" style="text-decoration: none"><img src="'.$picto.'" border="0"> '.$nom_source.'</a></div>';
$this->lien_saisie .= '</div>';
$this->liens_saisie .= $this->lien_saisie;

}

}
}


}
else{
# $this->redirect('@login');
Expand Down
27 changes: 1 addition & 26 deletions apps/backend/modules/home/templates/indexSuccess.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,32 +23,7 @@
<div id="contenu_saisie" style="margin-bottom:30px">
Pour saisir de nouvelles données, vous pouvez utiliser l'un des liens ci-dessous.<br/>
Pour modifier des données contact faune, contact invertébré ou mortalité, vous devez passer par la synthèse pour retrouver les enregistrements à modifier.<br/><br/>
FAUNE<br/>
<div style="margin:10px 0 0 50px ">
<div style="vertical-align:middle;display:inline-block;"><img src="images/pictos/amphibien.gif" border="0"></div>
<div style="vertical-align:middle;display:inline-block;"><a href="cf" style="text-decoration: none">Saisie contact faune</a></div>
</div>
<div style="margin:10px 0 0 50px ">
<div style="vertical-align:middle;display:inline-block;"><img src="images/pictos/insecte.gif" border="0"></div>
<div style="vertical-align:middle;display:inline-block;"><a href="invertebre" style="text-decoration: none">Saisie contact invertébré</a></div>
</div>
<div style="margin:10px 0 0 50px ">
<div style="vertical-align:middle;display:inline-block;"><img src="images/pictos/squelette.png" border="0"></div>
<div style="vertical-align:middle;display:inline-block;"><a href="mortalite" style="text-decoration: none">Saisie mortalité faune</a></div>
</div>
FLORE<br/>
<!--<div style="margin:10px 0 0 50px ">
<div style="vertical-align:middle;display:inline-block;"><img src="images/pictos/plante.gif" border="0"></div>
<div style="vertical-align:middle;display:inline-block;"><a href="fp" style="text-decoration: none">Saisie flore prioritaire</a></div>
</div>-->
<div style="margin:10px 0 0 50px ">
<div style="vertical-align:middle;display:inline-block;"><img src="images/pictos/plante.gif" border="0"></div>
<div style="vertical-align:middle;display:inline-block;"><a href="fs" style="text-decoration: none">Saisie flore station</a></div>
</div>
<div style="margin:10px 0 0 50px ">
<div style="vertical-align:middle;display:inline-block;"><img src="images/pictos/mousse.gif" border="0"></div>
<div style="vertical-align:middle;display:inline-block;"><a href="bryo" style="text-decoration: none">Saisie bryophytes</a></div>
</div>
<? echo $liens_saisie;?>
</div>
<!--
<div id="bande_consultation" style="color:#FFFFFF;background: linear-gradient(90deg, #f09819 30%, #edde5d 90%) repeat scroll 0 0 rgba(0, 0, 0, 0);letter-spacing:5px;font-weight:bold;text-shadow:0 0 3px #000;height:25px;">
Expand Down
5 changes: 5 additions & 0 deletions config/doctrine/schema.yml
Original file line number Diff line number Diff line change
Expand Up @@ -265,6 +265,11 @@ BibSources:
db_schema: string(50)
db_table: string(50)
db_field: string(50)
url: string(255)
target: string(10)
picto: string(255)
groupe: string(50)
actif: boolean(1)
BibSupports:
tableName: meta.bib_supports
columns:
Expand Down
11 changes: 6 additions & 5 deletions data/2154/data_synthese_2154.sql
Original file line number Diff line number Diff line change
Expand Up @@ -328,11 +328,12 @@ SET search_path = synthese, pg_catalog;
-- Data for Name: bib_sources; Type: TABLE DATA; Schema: synthese; Owner: geonatuser
--

INSERT INTO bib_sources (id_source, nom_source, desc_source, host, port, username, pass, db_name, db_schema, db_table, db_field) VALUES (1, 'Contact faune', 'contenu des tables t_fiche_cf et t_releves_cf de la base faune postgres', 'localhost', 22, NULL, NULL, 'geonaturedb', 'contactfaune', 't_releves_cf', 'id_releve_cf');
INSERT INTO bib_sources (id_source, nom_source, desc_source, host, port, username, pass, db_name, db_schema, db_table, db_field) VALUES (3, 'Contact invertébrés', 'contenu des tables t_fiches_inv et t_releves_inv de la base faune postgres', 'localhost', 22, NULL, NULL, 'geonaturedb', 'contactinv', 't_releves_inv', 'id_releve_inv');
INSERT INTO bib_sources (id_source, nom_source, desc_source, host, port, username, pass, db_name, db_schema, db_table, db_field) VALUES (4, 'Flore prioritaire', 'Relevés en présence-absence de la flore prioritaire', 'localhost', 22, NULL, NULL, 'geonaturedb', 'florepatri', 't_apresence', 'indexap');
INSERT INTO bib_sources (id_source, nom_source, desc_source, host, port, username, pass, db_name, db_schema, db_table, db_field) VALUES (5, 'Flore station', 'Données de relevés floristique stationnels complets ou partiel', 'localhost', 22, NULL, NULL, 'geonaturedb', 'florestation', 'cor_fs_taxon', 'gid');
INSERT INTO bib_sources (id_source, nom_source, desc_source, host, port, username, pass, db_name, db_schema, db_table, db_field) VALUES (6, 'Bryophytes', 'Données de contact bryologique', 'localhost', 22, NULL, NULL, 'geonaturedb', 'bryophytes', 'cor_bryo_taxon', 'gid');
INSERT INTO bib_sources (id_source, nom_source, desc_source, host, port, username, pass, db_name, db_schema, db_table, db_field, url, target, picto, groupe, actif) VALUES (1, 'Contact faune', 'contenu des tables t_fiche_cf et t_releves_cf de la base faune postgres', 'localhost', 22, NULL, NULL, 'geonaturedb', 'contactfaune', 't_releves_cf', 'id_releve_cf', 'cf', NULL, 'images/pictos/amphibien.gif', 'FAUNE', true);
INSERT INTO bib_sources (id_source, nom_source, desc_source, host, port, username, pass, db_name, db_schema, db_table, db_field, url, target, picto, groupe, actif) VALUES (2, 'Mortalité', 'contenu des tables t_fiche_cf et t_releves_cf de la base faune postgres', 'localhost', 22, NULL, NULL, 'geonaturedb', 'contactfaune', 't_releves_cf', 'id_releve_cf', 'mortalite', NULL, 'images/pictos/squelette.png', 'FAUNE', true);
INSERT INTO bib_sources (id_source, nom_source, desc_source, host, port, username, pass, db_name, db_schema, db_table, db_field, url, target, picto, groupe, actif) VALUES (3, 'Contact invertébrés', 'contenu des tables t_fiches_inv et t_releves_inv de la base faune postgres', 'localhost', 22, NULL, NULL, 'geonaturedb', 'contactinv', 't_releves_inv', 'id_releve_inv', 'invertebre', NULL, 'images/pictos/insecte.gif', 'FAUNE', true);
INSERT INTO bib_sources (id_source, nom_source, desc_source, host, port, username, pass, db_name, db_schema, db_table, db_field, url, target, picto, groupe, actif) VALUES (4, 'Flore prioritaire', 'Relevés en présence-absence de la flore prioritaire', 'localhost', 22, NULL, NULL, 'geonaturedb', 'florepatri', 't_apresence', 'indexap', 'pda', NULL, 'images/pictos/plante.gif', 'FLORE', false);
INSERT INTO bib_sources (id_source, nom_source, desc_source, host, port, username, pass, db_name, db_schema, db_table, db_field, url, target, picto, groupe, actif) VALUES (5, 'Flore station', 'Données de relevés floristique stationnels complets ou partiel', 'localhost', 22, NULL, NULL, 'geonaturedb', 'florestation', 'cor_fs_taxon', 'gid', 'fs', NULL, 'images/pictos/plante.gif', 'FLORE', true);
INSERT INTO bib_sources (id_source, nom_source, desc_source, host, port, username, pass, db_name, db_schema, db_table, db_field, url, target, picto, groupe, actif) VALUES (6, 'Bryophytes', 'Données de contact bryologique', 'localhost', 22, NULL, NULL, 'geonaturedb', 'bryophytes', 'cor_bryo_taxon', 'gid', 'bryo', NULL, 'images/pictos/mousse.gif', 'FLORE', true);

SET search_path = taxonomie, pg_catalog;

Expand Down
28 changes: 19 additions & 9 deletions data/2154/synthese_2154.sql
Original file line number Diff line number Diff line change
Expand Up @@ -313,22 +313,27 @@ $$;

CREATE OR REPLACE FUNCTION contactfaune.synthese_insert_releve_cf()
RETURNS trigger AS
$$
$BODY$
DECLARE
fiche RECORD;
test integer;
mesobservateurs character varying(255);
criteresynthese integer;
unite integer;
idsource integer;
idsourcem integer;
idsourcecf integer;
unite integer;
BEGIN

--Récupération des données id_source dans la table synthese.bib_sources
SELECT INTO idsource id_source FROM synthese.bib_sources WHERE db_schema='contactfaune' AND db_field = 'id_releve_cf';

SELECT INTO idsourcem id_source FROM synthese.bib_sources WHERE db_schema='contactfaune' AND db_field = 'id_releve_cf' AND nom_source = 'Mortalité';
SELECT INTO idsourcecf id_source FROM synthese.bib_sources WHERE db_schema='contactfaune' AND db_field = 'id_releve_cf' AND nom_source = 'Contact faune';
--Récupération des données dans la table t_fiches_cf et de la liste des observateurs
SELECT INTO fiche * FROM contactfaune.t_fiches_cf WHERE id_cf = new.id_cf;
SELECT INTO criteresynthese id_critere_synthese FROM contactfaune.bib_criteres_cf WHERE id_critere_cf = new.id_critere_cf;
-- Récupération du id_source selon le critère d'observation, Si critère = 2 alors on est dans une source mortalité (=2) sinon cf (=1)
IF criteresynthese = 2 THEN idsource = idsourcem;
ELSE
idsource = idsourcecf;
END IF;
SELECT INTO mesobservateurs o.observateurs FROM contactfaune.t_releves_cf r
JOIN contactfaune.t_fiches_cf f ON f.id_cf = r.id_cf
LEFT JOIN (
Expand All @@ -338,7 +343,7 @@ BEGIN
GROUP BY id_cf
) o ON o.id_cf = f.id_cf
WHERE r.id_releve_cf = new.id_releve_cf;

INSERT INTO synthese.syntheseff (
id_source,
id_fiche_source,
Expand Down Expand Up @@ -387,7 +392,7 @@ BEGIN
);
RETURN NEW;
END;
$$
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION contactfaune.synthese_insert_releve_cf()
Expand Down Expand Up @@ -4444,7 +4449,12 @@ CREATE TABLE bib_sources (
db_name character varying(50),
db_schema character varying(50),
db_table character varying(50),
db_field character varying(50)
db_field character varying(50),
url character varying(255),
target character varying(10),
picto character varying(255),
groupe character varying(50) NOT NULL,
actif boolean NOT NULL
);


Expand Down
135 changes: 134 additions & 1 deletion data/update_1.4to1.5.sql
Original file line number Diff line number Diff line change
Expand Up @@ -232,7 +232,140 @@ ALTER TABLE synthese.v_tree_taxons_synthese
OWNER TO geonatuser;
GRANT ALL ON TABLE synthese.v_tree_taxons_synthese TO geonatuser;

--Généricité
ALTER TABLE meta.bib_programmes RENAME sitpn TO programme_public;
ALTER TABLE meta.bib_programmes RENAME desc_programme_sitpn TO desc_programme_public;
--Gestion du contenu du "Comment ?" dans la synthèse
ALTER TABLE meta.bib_programmes ADD COLUMN actif boolean;
UPDATE meta.bib_programmes SET actif = true;
UPDATE meta.bib_programmes SET actif = true;

--gestion dynamique des liens d'accès aux formulaires sur la page d'accueil
ALTER TABLE synthese.bib_sources ADD COLUMN url character varying(255);
COMMENT ON COLUMN synthese.bib_sources.url IS 'Définir l''url d''accès au formulaire de saisie de cette source de données - optionnel';
ALTER TABLE synthese.bib_sources ADD COLUMN target character varying(10);
COMMENT ON COLUMN synthese.bib_sources.url IS 'Indiquer si le formulaire de saisie de cette source de données s''ouvre dans un nouvel onglet - optionnel';
ALTER TABLE synthese.bib_sources ADD COLUMN picto character varying(255);
COMMENT ON COLUMN synthese.bib_sources.url IS 'Définir le chemin du pictogramme identifiant le protocole en lien avec la source de données - optionnel';
ALTER TABLE synthese.bib_sources ADD COLUMN groupe character varying(50);
COMMENT ON COLUMN synthese.bib_sources.url IS 'Placer cette source de données dans un groupe (exemple FAUNE ou FLORE) - optionnel';
ALTER TABLE synthese.bib_sources ADD COLUMN actif boolean;
COMMENT ON COLUMN synthese.bib_sources.url IS 'Définir si le formulaire de saisie de cette source de données doit aparaitre ou non sur la page d''accueil - optionnel';
--Attention si vous avez déjà une sources avec l'identifiant 2, vous devez adapter la ligne ci-dessous
INSERT INTO synthese.bib_sources (id_source, nom_source, desc_source, host, port, username, pass, db_name, db_schema, db_table, db_field, url, target, picto, groupe, actif) VALUES (2, 'Mortalité', 'contenu des tables t_fiche_cf et t_releves_cf de la base faune postgres', 'localhost', 22, NULL, NULL, 'geonaturedb', 'contactfaune', 't_releves_cf', 'id_releve_cf', 'mortalite', NULL, 'images/pictos/squelette.png', 'FAUNE', true);
UPDATE synthese.bib_sources SET actif = true;
UPDATE synthese.bib_sources SET actif = false WHERE id_source = 4;
UPDATE synthese.bib_sources SET groupe = 'FAUNE' WHERE id_source IN(1,2,3);
UPDATE synthese.bib_sources SET groupe = 'FLORE' WHERE id_source IN(4,5,6);
UPDATE synthese.bib_sources SET url = 'cf' WHERE id_source = 1;
UPDATE synthese.bib_sources SET url = 'mortalite' WHERE id_source = 2;
UPDATE synthese.bib_sources SET url = 'invertebre' WHERE id_source = 3;
UPDATE synthese.bib_sources SET url = 'pda' WHERE id_source = 4;
UPDATE synthese.bib_sources SET url = 'fs' WHERE id_source = 5;
UPDATE synthese.bib_sources SET url = 'bryo' WHERE id_source = 6;
UPDATE synthese.bib_sources SET picto = 'images/pictos/amphibien.gif' WHERE id_source = 1;
UPDATE synthese.bib_sources SET picto = 'images/pictos/squelette.png' WHERE id_source = 2;
UPDATE synthese.bib_sources SET picto = 'images/pictos/insecte.gif' WHERE id_source = 3;
UPDATE synthese.bib_sources SET picto = 'images/pictos/plante.gif' WHERE id_source = 4;
UPDATE synthese.bib_sources SET picto = 'images/pictos/plante.gif' WHERE id_source = 5;
UPDATE synthese.bib_sources SET picto = 'images/pictos/mousse.gif' WHERE id_source = 6;

--mise à jour du trigger contactfaune.synthese_insert_releve_cf
CREATE OR REPLACE FUNCTION contactfaune.synthese_insert_releve_cf()
RETURNS trigger AS
$BODY$
DECLARE
fiche RECORD;
test integer;
mesobservateurs character varying(255);
criteresynthese integer;
idsource integer;
danslecoeur boolean;
unite integer;
BEGIN
--Récupération des données dans la table t_fiches_cf et de la liste des observateurs
SELECT INTO fiche * FROM contactfaune.t_fiches_cf WHERE id_cf = new.id_cf;
SELECT INTO criteresynthese id_critere_synthese FROM contactfaune.bib_criteres_cf WHERE id_critere_cf = new.id_critere_cf;
-- Récupération du id_source selon le critère d'observation, Si critère = 2 alors on est dans une source mortalité (=2) sinon cf (=1)
IF criteresynthese = 2 THEN idsource = 2;
ELSE
idsource = 1;
END IF;
SELECT INTO mesobservateurs o.observateurs FROM contactfaune.t_releves_cf r
JOIN contactfaune.t_fiches_cf f ON f.id_cf = r.id_cf
LEFT JOIN (
SELECT id_cf, array_to_string(array_agg(r.nom_role || ' ' || r.prenom_role), ', ') AS observateurs
FROM contactfaune.cor_role_fiche_cf c
JOIN utilisateurs.t_roles r ON r.id_role = c.id_role
GROUP BY id_cf
) o ON o.id_cf = f.id_cf
WHERE r.id_releve_cf = new.id_releve_cf;
-- on calcul si on est dans le coeur
IF st_intersects((SELECT the_geom FROM layers.l_zonesstatut WHERE id_zone = 3249), fiche.the_geom_27572) THEN
danslecoeur = true;
ELSE
danslecoeur = false;
END IF;

INSERT INTO synthese.synthesefaune (
id_source,
id_fiche_source,
code_fiche_source,
id_organisme,
id_protocole,
codeprotocole,
ids_protocoles,
id_precision,
cd_nom,
id_taxon,
insee,
dateobs,
observateurs,
altitude_retenue,
remarques,
derniere_action,
supprime,
the_geom_27572,
the_geom_3857,
the_geom_2154,
the_geom_point,
id_lot,
id_critere_synthese,
effectif_total,
coeur
)
VALUES(
idsource,
new.id_releve_cf,
'f'||new.id_cf||'-r'||new.id_releve_cf,
fiche.id_organisme,
fiche.id_protocole,
1,
fiche.id_protocole,
1,
new.cd_ref_origine,
new.id_taxon,
fiche.insee,
fiche.dateobs,
mesobservateurs,
fiche.altitude_retenue,
new.commentaire,
'c',
false,
fiche.the_geom_27572,
fiche.the_geom_3857,
fiche.the_geom_2154,
fiche.the_geom_3857,
fiche.id_lot,
criteresynthese,
new.am+new.af+new.ai+new.na+new.jeune+new.yearling+new.sai,
danslecoeur
);

RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION contactfaune.synthese_insert_releve_cf()
OWNER TO geonatuser;
GRANT EXECUTE ON FUNCTION contactfaune.synthese_insert_releve_cf() TO geonatuser;
13 changes: 11 additions & 2 deletions docs/changelog.rst
Original file line number Diff line number Diff line change
Expand Up @@ -10,19 +10,28 @@ TODO
- rendre le schéma taxonomie totalement compatible avec taxhub
- tests complémentaires et bug fix


1.5.0.dev0
------------------

**Note de version**

* Pour les changements dans la base vous pouvez exécuter le fichier ``data/update_1.4to1.5.sql``

* Si vous souhaitez désactiver certains programmes dans le "Comment ?" de la synthèse vous devez utiliser le champs ``actif`` de la table meta.bib_programmes
* Compléter les champs ``url``, ``target``, ``picto``, ``groupe`` et ``actif`` dans la table ``synthese.bib_sources`
* Ajouter le paramètre ``id_source_mortalite = 2;`` au fichier ``web/js/config.js``;
* Ajouter le paramètre ``public static $id_source_mortalite = 2;`` au fichier ``lib/sfGeonatureConfig.php``;
* si vous avez déjà des données de mortalité enregistrée, vous devez adapater la requête SQL ci-dessous avec votre id_source pour mortalité et l'exécuter
::
UPDATE synthese.syntheseff SET id_source = 2 WHERE id_source = 1 AND id_critere_synthese = 2;

**Changements**

* Optimisation des vues aux chargement des listes de taxons #64
* Généricité des champs dans meta.bib_programmes (champs ``sitpn`` renommé en ``public``) #68
* Ajout d'un champ ``actif`` permettant de masquer certains programme dans le "Comment ?" de la synthese #66
* Ajout d'un champ ``actif`` à la table ``meta.bib_programmes`` permettant de masquer certains programmes dans le "Comment ?" de la synthèse #66
* Construire dynamiquement la liste des liens vers la saisie des protocoles à partir de la table ``synthese.bib_sources`` #69


1.4.0 (2015-10-16)
------------------
Expand Down
18 changes: 18 additions & 0 deletions lib/model/doctrine/BibSourcesTable.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,22 @@ public static function getInstance()
{
return Doctrine_Core::getTable('BibSources');
}
public static function listSourcesGroupes()
{

$dbh = Doctrine_Manager::getInstance()->getCurrentConnection()->getDbh();
$sql = "(SELECT DISTINCT groupe FROM synthese.bib_sources WHERE actif = true)";
$query = $dbh->query($sql)->fetchAll(PDO::FETCH_ASSOC);
return $query;
}
public static function listActiveSources()
{
$query= Doctrine_Query::create()
->select('id_source, nom_source, url, target, picto, groupe, actif' )
->from('BibSources')
->where('actif = true')
->orderBy('groupe')
->fetchArray();
return $query;
}
}
Loading

0 comments on commit 0bd75e8

Please sign in to comment.