Browse Source

Un composant de formulaire pour editer role+valeur sur des liens riches

le role est un input libre, enrichi d'un datalist qui suggere les valeurs deja en base (pour eviter les doublons/coquilles)
la valeur est libre
On ne peut avoir qu'un lien pour chaque role. Il est possible d'avoir un lien avec un role vide
v1
cedric@yterium.com 8 years ago
parent
commit
84c8f370ea
  1. 1
      .gitattributes
  2. 19
      formulaires/inc-editer_liens_roles_valeurs.html
  3. 40
      inc/roles.php
  4. 2
      lang/roles_fr.php
  5. 4
      paquet.xml

1
.gitattributes vendored

@ -4,6 +4,7 @@ css/bootstrap-button-dropdown.css -text
formulaires/editer_liens.php -text
formulaires/inc-editer_liens_actions_roles.html -text
formulaires/inc-editer_liens_roles.html -text
formulaires/inc-editer_liens_roles_valeurs.html -text
inc/roles.php -text
javascript/bootstrap-dropdown.js -text
lang/paquet-roles_fr.php -text

19
formulaires/inc-editer_liens_roles_valeurs.html

@ -0,0 +1,19 @@
#SET{exclus,#ENV{id}|roles_presents_sur_id{#ENV{objet_source},#ENV{objet},#ENV{id_objet},#ENV{_objet_lien}}}
<input type="text"
class="text"
name="qualifier_lien\[#ENV{cle}\]\[#ENV{_roles/colonne}\]"
placeholder="<:roles:saisir_role|attribut_html:>"
value=""
list="choix-roles-#ENV{cle}"
style="width: 49%" />
<datalist id="choix-roles-#ENV{cle}">
<BOUCLE_roles(DATA){source table,#ENV{objet_source}|roles_connus_en_base{#ENV{objet},#ENV{_objet_lien}}}{valeur !IN #GET{exclus}}>
<option value="#VALEUR" />
</BOUCLE_roles>
</datalist>
<input type="text"
class="text"
name="qualifier_lien\[#ENV{cle}\]\[valeur\]"
placeholder="<:roles:saisir_valeur|attribut_html:>"
value=""
style="width: 49%" />

40
inc/roles.php

@ -318,3 +318,43 @@ function roles_presents_liaisons($objet_source, $objet, $id_objet, $objet_lien)
);
}
/**
* Lister des rôles connus en base pour une liaion, pour un objet source
*
* On retourne cette liste dans le datalist de saisie libre role.
*
* @param string $objet_source Objet dont on veut récupérer la liste des identifiants
* @param string $objet Objet sur lequel est liée la source
* @param string $objet_lien Objet dont on utilise la table de liaison (c'est forcément soit $objet_source, soit $objet)
* @return array|bool
* - Tableau de roles : tableau de description des roles,
* - false si pas de role déclarés
*/
function roles_connus_en_base($objet_source, $objet, $objet_lien){
static $done = array();
// stocker le résultat
$hash = "$objet_source-$objet-$objet_lien";
if (isset($done[$hash])) {
return $done[$hash];
}
if (!$lien = objet_associable($objet_lien)){
return $done[$hash] = false;
}
// pas de roles sur ces objets, on sort
$roles = roles_presents($objet_lien, ($objet_lien==$objet) ? $objet_source : $objet);
if (!$roles) {
return $done[$hash] = false;
}
list($primary,$l) = $lien;
$colone_role = $roles['colonne'];
$all = sql_allfetsel("DISTINCT $colone_role",$l,"objet=".sql_quote(($objet_source==$objet_lien)?$objet:$objet_source));
$done[$hash] = array_map("reset",$all);
return $done[$hash];
}

2
lang/roles_fr.php

@ -6,6 +6,8 @@ if (!defined('_ECRIRE_INC_VERSION')) return;
$GLOBALS[$GLOBALS['idx_lang']] = array(
// C
'choisir_role' => 'Choisir…',
'saisir_role' => 'Indiquer un rôle…',
'saisir_valeur' => 'Valeur',
// R
'roles_titre' => 'Rôles',

4
paquet.xml

@ -1,8 +1,8 @@
<paquet
prefix="roles"
categorie="outil"
version="1.4.0"
etat="dev"
version="1.5.0"
etat="test"
compatibilite="[3.0.0;3.1.*]"
logo="prive/themes/spip/images/roles-64.png"
documentation="http://contrib.spip.net/?article4199"

Loading…
Cancel
Save