$erreur = array ();
$entites = $base->meta_entite_liste ($_SESSION['token']);
+$statuts = array(
+ array("id" => 1, "statut" => "Sorti"),
+ array("id" => 2, "statut" => "Pré-admission"),
+ array("id" => 3, "statut" => "Admission"),
+ array("id" => 4, "statut" => "Présent")
+);
$pagination = new Pagination ($base);
$pagination->setImagesPath ('/Images/navig');
}
}
+$lis_statuts = array ();
if (isset ($_GET['lis'])) {
$lis_id = (int)$_GET['lis'];
if (count ($erreur)) {
$lis['lis_code'] = $_POST['ed_code'];
$lis['lis_inverse'] = $_POST['ed_inverse'];
$lis['lis_pagination_tout'] = $_POST['ed_tout'];
+ if (count ($_POST['ed_statut'])) {
+ foreach ($_POST['ed_statut'] as $s) {
+ $lis_statuts[] = array ('sta_id' => $s);
+ }
+ }
} else {
$lis = $base->liste_liste_get ($_SESSION['token'], $lis_id);
+ $lis_statuts = $base->liste_liste_statuts_get($_SESSION['token'], $lis_id);
}
} else {
if (count ($erreur)) {
$lis['lis_code'] = $_POST['ed_code'];
$lis['lis_inverse'] = $_POST['ed_inverse'];
$lis['lis_pagination_tout'] = $_POST['ed_tout'];
+ if (count ($_POST['ed_statut'])) {
+ foreach ($_POST['ed_statut'] as $s) {
+ $lis_statuts[] = array ('sta_id' => $s);
+ }
+ }
} else {
$lis = array ();
}
<script type="text/javascript">
$(document).ready (function () {
$("#dupliquer").click (on_dupliquer_click);
+ $("#ed_statut_lock").change(function (e) {
+ $(".ed_statut_cb").prop('disabled', !e.target.checked);
+ });
+ $("#ed_ent_id").change (function (e) {
+ if (e.target.selectedOptions[0].text == 'Famille')
+ $("#ed_statut_tr").show();
+ else {
+ $("#ed_statut_tr").hide();
+ $("#ed_statut_lock").prop('checked', false);
+ $(".ed_statut_cb").prop('disabled', !e.target.checked);
+ $(".ed_statut_cb").prop('checked', false);
+ }
+ });
});
function on_dupliquer_click () {
<tr class="impair">
<td>Type de personne</td>
- <td><select name="ed_ent_id"><option value=""></option>
+ <td><select name="ed_ent_id" id="ed_ent_id"><option value=""></option>
<?php liste_entites($lis) ?>
</select> <?= arrval ($erreur, 'ed_ent_id', '') ?>
</td>
</tr>
+ <tr class="impair" <?php echo ($entites[array_search($lis['ent_id'], array_column($entites, 'ent_id'))]['ent_libelle'] == 'Famille') ? '' : 'style="display: none"' ?>>
+ <td>Statut usager</td>
+ <td>
+ <input type="checkbox" id="ed_statut_lock" name="ed_statut_lock" value="lock" <?php echo ($lis['lis_locked'] ? 'checked' : '') ?>><label for="ed_statut_lock">Verrouiller sur statut</label><br>
+ <?php liste_statuts_usager ($lis_statuts, $lis['lis_locked']) ?>
+ </td>
+ </tr>
+
<tr class="pair">
<td>Affichage inversé</td>
<td><input type="checkbox" name="ed_inverse"<?= $lis['lis_inverse'] ? ' checked' : ''?>></input>
<?php
+function liste_statuts_usager($lis_statuts, $locked) {
+ global $base, $statuts;
+ foreach ($statuts as $statut) {
+ $checked = false;
+ if (count ($lis_statuts)) {
+ foreach ($lis_statuts as $lis_statut) {
+ if ($lis_statut['sta_id'] == $statut['id']) $checked = true;
+ }
+ }
+ echo '<input class="ed_statut_cb" type="checkbox" id="ed_statut_'.$statut['id'].'" name="ed_statut[]" value="'.$statut['id'].'"'.($checked ? ' checked' : '').($locked ? '' : ' disabled').'><label for="ed_statut_'.$statut['id'].'">'.$statut['statut'].'</label><br>';
+ }
+}
+
function liste_entites ($lis) {
global $entites;
foreach ($entites as $entite) {
global $base;
$lis_id = $_GET['lis'];
- $base->liste_liste_update ($_SESSION['token'], $lis_id, $post['ed_nom'], $post['ed_code'], $post['ed_ent_id'], $post['ed_inverse'] == 'on', $post['ed_tout'] == 'on');
+ $base->liste_liste_update ($_SESSION['token'], $lis_id, $post['ed_nom'], $post['ed_code'], $post['ed_ent_id'], $post['ed_inverse'] == 'on', $post['ed_tout'] == 'on', $post['ed_statut_lock'] ? true : false);
+
+ // Sauve les lens statut d'usager
+ if (isset ($post['ed_statut']) && count ($post['ed_statut'])) {
+ $statuts = array ();
+ foreach ($post['ed_statut'] as $statut) {
+ $statuts[] = $statut;
+ }
+ } else {
+ $statuts = NULL;
+ }
+
+ $base->liste_liste_statuts_set ($_SESSION['token'], $lis_id, $statuts);
return true;
}
);
COMMENT ON TABLE events.events_statut IS 'Spécialisation des pages d''evenements à certains statuts d''usagers';
END IF;
+ -- Ajout d'une colonne lis_locked à la table liste
+ IF NOT EXISTS (SELECT 1 FROM information_schema.columns
+ WHERE table_schema = 'liste' AND
+ table_name = 'liste' AND
+ column_name = 'lis_locked') THEN
+ ALTER TABLE liste.liste ADD COLUMN lis_locked boolean DEFAULT false;
+ END IF;
+
+ -- Ajout table liste_statut au schéma liste
+ IF NOT EXISTS (SELECT 1 FROM information_schema.tables
+ WHERE table_schema = 'liste' AND
+ table_name = 'liste_statut') THEN
+ CREATE TABLE liste.liste_statut (
+ lst_id serial NOT NULL PRIMARY KEY,
+ lis_id integer,
+ sta_id integer,
+ CONSTRAINT liste_statut_lis_id_fkey FOREIGN KEY (lis_id)
+ REFERENCES liste.liste (lis_id) MATCH SIMPLE
+ ON UPDATE NO ACTION ON DELETE NO ACTION
+ );
+ COMMENT ON TABLE liste.liste_statut IS 'Spécialisation des pages de liste à certains statuts d''usagers';
+ END IF;
END;
$$;
DROP FUNCTION IF EXISTS liste_liste_supprime_rec(prm_lis_id integer);
DROP FUNCTION IF EXISTS liste_liste_update(prm_lis_id integer, prm_nom character varying, prm_ent_id integer, prm_inverse boolean);
DROP FUNCTION IF EXISTS liste_liste_update(prm_lis_id integer, prm_nom character varying, prm_ent_id integer, prm_inverse boolean, prm_pagination_tout boolean);
+DROP FUNCTION IF EXISTS liste_liste_update(prm_token integer, prm_lis_id integer, prm_nom character varying, prm_code varchar, prm_ent_id integer, prm_inverse boolean, prm_pagination_tout boolean);
--
-- Suppression anciennes fonctions
COMMENT ON FUNCTION liste_liste_supprime(prm_token integer, prm_lis_id integer) IS
'Supprime une configuration de page liste.';
-CREATE OR REPLACE FUNCTION liste_liste_update(prm_token integer, prm_lis_id integer, prm_nom character varying, prm_code varchar, prm_ent_id integer, prm_inverse boolean, prm_pagination_tout boolean) RETURNS void
+CREATE OR REPLACE FUNCTION liste_liste_update(prm_token integer, prm_lis_id integer, prm_nom character varying, prm_code varchar, prm_ent_id integer, prm_inverse boolean, prm_pagination_tout boolean, prm_lis_locked boolean) RETURNS void
LANGUAGE plpgsql
AS $$
BEGIN
PERFORM login._token_assert (prm_token, FALSE, FALSE);
PERFORM login._token_assert_interface (prm_token);
- UPDATE liste.liste SET lis_nom = prm_nom, lis_code = pour_code (prm_code), ent_id = prm_ent_id, lis_inverse = prm_inverse, lis_pagination_tout = prm_pagination_tout WHERE lis_id = prm_lis_id;
+ UPDATE liste.liste SET lis_nom = prm_nom, lis_code = pour_code (prm_code), ent_id = prm_ent_id, lis_inverse = prm_inverse, lis_pagination_tout = prm_pagination_tout, lis_locked = prm_lis_locked WHERE lis_id = prm_lis_id;
END;
$$;
-COMMENT ON FUNCTION liste_liste_update(prm_token integer, prm_lis_id integer, prm_nom character varying, prm_code varchar, prm_ent_id integer, prm_inverse boolean, prm_pagination_tout boolean) IS
+COMMENT ON FUNCTION liste_liste_update(prm_token integer, prm_lis_id integer, prm_nom character varying, prm_code varchar, prm_ent_id integer, prm_inverse boolean, prm_pagination_tout boolean, prm_lis_locked boolean IS
'Modifie les informations d''une configuration de page liste.';
CREATE OR REPLACE FUNCTION liste_supp_edit (prm_token integer, prm_cha_id integer, prm_inf_ids integer[])
RETURN tmp_supp.sup_id;
END;
$$;
+
+CREATE OR REPLACE FUNCTION liste_liste_statuts_set (prm_token integer, prm_lis_id integer, prm_sta_ids integer[]) RETURNS void LANGUAGE plpgsql AS
+$$
+BEGIN
+ PERFORM login._token_assert (prm_token, FALSE, TRUE);
+ DELETE FROM liste.liste_statut WHERE lis_id = prm_lis_id;
+ IF prm_sta_ids NOTNULL THEN
+ FOR i IN 1 .. array_upper(prm_sta_ids, 1) LOOP
+ INSERT INTO liste.liste_statut (lis_id, sta_id) VALUES (prm_lis_id, prm_sta_ids[i]);
+ END LOOP;
+ END IF;
+END;
+$$;
+COMMENT ON FUNCTION liste_liste_statuts_set (prm_token integer, prm_lis_id integer, prm_sta_ids integer[]) IS
+'Indique les statuts de dossiers d''utilisateurs que l''on souhaite prendre en compte sur une vue de liste.
+
+Entrées :
+ - prm_token : Token d''authentification
+ - prm_lis_id : Identifiant de la vue de liste
+ - prm_sta_ids : tableau d''identifiants de status';
+
+CREATE OR REPLACE FUNCTION liste_liste_statuts_get (prm_token integer, prm_lis_id integer) RETURNS SETOF liste.liste_statut
+LANGUAGE plpgsql AS
+$$
+DECLARE
+ row liste.liste_statut%ROWTYPE;
+BEGIN
+ PERFORM login._token_assert (prm_token, FALSE, FALSE);
+ FOR row IN
+ SELECT * FROM liste.liste_statut
+ WHERE lis_id = prm_lis_id
+ LOOP
+ RETURN NEXT row;
+ END LOOP;
+END;
+$$;
+COMMENT ON FUNCTION liste_liste_statuts_get (prm_token integer, prm_lis_id integer) IS
+'Retourne quels statuts d''usagers sont pris en compte sur une vue de liste.
+
+Entrées :
+ - prm_token : Token d''authentification
+ - prm_lis_id : Identifiant de la vue de liste';
}
}
-$sql = 'SELECT DISTINCT per_id, ';
+$sql = 'SELECT DISTINCT personne.per_id, ';
$sqlfiltre = '';
foreach ($infos as $info) {
continue;
if (get_class ($info['obj']) == 'Info_coche_calcule')
continue;
- $sql .= $info['obj']->fct()." (".$_SESSION['token'].", per_id, '".pg_escape_string ($info['inf_code'])."') AS ".$info['inf_code'].", ";
+ $sql .= $info['obj']->fct()." (".$_SESSION['token'].", personne.per_id, '".pg_escape_string ($info['inf_code'])."') AS ".$info['inf_code'].", ";
if (isset ($_GET['rech-'.$info['inf_code']]) && $_GET['rech-'.$info['inf_code']]) {
if ($type[$info['int_id']]['int_code'] == 'texte') {
$parts = array ();
foreach ($_GET['rech-'.$info['inf_code']] as $val) {
if ($val)
- $parts[] = $info['obj']->fct()." (".$_SESSION['token'].", per_id, '".pg_escape_string ($info['inf_code'])."') ilike '%".$val."%'";
+ $parts[] = $info['obj']->fct()." (".$_SESSION['token'].", personne.per_id, '".pg_escape_string ($info['inf_code'])."') ilike '%".$val."%'";
}
if (count ($parts))
$sqlfiltre .= " AND (".implode (' OR ', $parts).' )';
$parts = array ();
foreach ($_GET['rech-'.$info['inf_code']] as $val) {
if ($val)
- $parts[] = $info['obj']->fct()." (".$_SESSION['token'].", per_id, '".pg_escape_string ($info['inf_code'])."') = ".$val;
+ $parts[] = $info['obj']->fct()." (".$_SESSION['token'].", personne.per_id, '".pg_escape_string ($info['inf_code'])."') = ".$val;
}
if (count ($parts))
$sqlfiltre .= " AND (".implode (' OR ', $parts).' )';
}
$mets = implode (', ', $metparts);
if ($val)
- $parts[] = $info['obj']->fct()." (".$_SESSION['token'].", per_id, '".pg_escape_string ($info['inf_code'])."') IN (".$mets.")";
+ $parts[] = $info['obj']->fct()." (".$_SESSION['token'].", personne.per_id, '".pg_escape_string ($info['inf_code'])."') IN (".$mets.")";
}
if (count ($parts))
$sqlfiltre .= " AND (".implode (' OR ', $parts).' )';
}
}
}
+$sqlstatut = '';
+$sqlstatutjoin = '';
+if ($entite[$lis['ent_id']]['ent_code'] == 'famille' && $lis['lis_locked']) {
+ $sqlstatut = " AND personne_info.inf_code ilike 'famille_'";
+ $sqlstatut .= " AND personne_info_integer_get(".$_SESSION['token'].", personne_info.per_id, 'statut_usager') = ANY(select array_agg(sta_id) from liste_statut inner join liste using (lis_id) where lis_locked and lis_id = ".$lis['lis_id'].")";
+ $sqlstatutjoin = " LEFT JOIN personne_info_lien_familial ON personne_info_lien_familial.per_id_parent = personne.per_id LEFT JOIN personne_info using (pin_id)";
+}
+
$sql = substr ($sql, 0, -2);
if ($entite[$lis['ent_id']]['ent_code'] == 'usager') {
if ($_SESSION['uti_root']) {
- $sql .= ' FROM personne INNER JOIN personne_etablissement USING (per_id) WHERE eta_id = '.$_SESSION['eta_id'];
+ $sql .= ' FROM personne INNER JOIN personne_etablissement USING (per_id)';
+ $sql .= $sqlstatutjoin;
+ $sql .= ' WHERE eta_id = '.$_SESSION['eta_id'];
} else {
- $sql .= ' FROM personne INNER JOIN personne_groupe USING (per_id) INNER JOIN login.grouputil_groupe USING(grp_id) INNER JOIN login.utilisateur_grouputil USING(gut_id) WHERE uti_id = '.$_SESSION['uti_id'];
+ $sql .= ' FROM personne INNER JOIN personne_groupe USING (per_id) INNER JOIN login.grouputil_groupe USING(grp_id) INNER JOIN login.utilisateur_grouputil USING(gut_id)';
+ $sql .= $sqlstatutjoin;
+ $sql .= ' WHERE uti_id = '.$_SESSION['uti_id'];
}
$sql .= " AND ent_code = '".$entite[$lis['ent_id']]['ent_code']."'";
} else {
$sql .= ' FROM personne';
+ $sql .= $sqlstatutjoin;
$sql .= " WHERE ent_code = '".$entite[$lis['ent_id']]['ent_code']."'";
}
$sql .= $sqlfiltre;
+$sql .= $sqlstatut;
//echo $sql;
$sortcol = isset ($_GET['col']) && $_GET['col'] ? $_GET['col'] : 'nom';
ent_id integer REFERENCES meta.entite,
lis_inverse boolean,
lis_pagination_tout boolean DEFAULT false NOT NULL,
- lis_code varchar UNIQUE
+ lis_code varchar UNIQUE,
+ lis_locked boolean default false
);
COMMENT ON TABLE liste IS 'Les configurations de page liste.';
COMMENT ON COLUMN liste.lis_id IS 'Identifiant';
COMMENT ON COLUMN supp.sup_ordre IS 'Ordre d''affichage';
-- TODO index cha_id, inf_id
+--
+-- TABLE liste_statut
+--
+CREATE TABLE liste_statut (
+ lst_id serial PRIMARY KEY,
+ lis_id integer REFERENCES liste.liste,
+ sta_id integer
+);
+COMMENT ON TABLE liste_statut IS 'Spécialisation des vues de liste à certains statuts d''usagers';