source: spip-zone/_plugins_/identifiants/trunk/identifiants_fonctions.php @ 93843

Last change on this file since 93843 was 93843, checked in by tcharlss@…, 4 years ago

Premier jet d'un petit plugin expérimental pour ajouter des identifiants aux objets. Les identifiants sont stockés dans une table de liens spip_identifiants. La balise #IDENTIFIANT retourne en priorité celui de la table si la colonne existe, sinon la valeur dans la table des identifiants. Il faut faire une jointure explicite sur la table des identifiants : <BOUCLE_rub(RUBRIQUES identifiants){identifiant=x}>. TODO : ajouter des autorisations afin que seuls les admins puissent gérer les identifiants, forcer la jointure partout pour ne pas avoir à mettre la jointure explicite. Et sans doute d'autres trucs.

File size: 2.3 KB
Line 
1<?php
2/**
3 * fonctions utiles au plugin Identifiants
4 *
5 * @plugin     Identifiants
6 * @copyright  2016
7 * @author     Tcharlss
8 * @licence    GNU/GPL
9 * @package    SPIP\Identifiants\Fonctions
10 */
11
12
13/**
14 * Calcul de la balise #IDENTIFIANT
15 *
16 * @example
17 * `#IDENTIFIANT{#OBJET,#ID_OBJET}`
18 * @balise
19 * @return string
20 */
21function balise_IDENTIFIANT_dist($p) {
22        if (!$_type = interprete_argument_balise(1,$p)){
23                $_type = sql_quote($p->type_requete);
24                $_id = champ_sql($p->boucles[$p->id_boucle]->primary,$p);
25        }
26        else {
27                $_id = interprete_argument_balise(2,$p);
28        }
29        $connect = $p->boucles[$p->id_boucle]->sql_serveur;
30        $p->code = "identifiant_objet(".$_type.", intval(".$_id."), ".sql_quote($connect).")";
31        $p->interdire_scripts = false;
32        return $p;
33}
34
35
36/**
37 * Retourne l'identifiant d'un objet
38 *
39 * @param string $objet
40 *     Le type de l'objet
41 * @param int $id_objet
42 *     L'identifiant de l'objet
43 * @return string | null
44 */
45function identifiant_objet($objet, $id_objet) {
46
47        // Cherchons d'abord si l'objet existe bien
48        if ($objet
49                and $id_objet = intval($id_objet)
50                and include_spip('base/connect_sql')
51                and $objet = objet_type($objet)
52                and $table_sql = table_objet_sql($objet)
53                and $cle_objet = id_table_objet($objet)
54                and $ligne = sql_fetsel('*', $table_sql, "$cle_objet = $id_objet")
55        ){
56                // 1) Fonction précise pour ce type d'objet : identifiant_<objet>() dans identifiant/<objet>.php
57                if ($fonction = charger_fonction('identifiant', "identifiant/$objet", true)){
58                        // On passe la ligne SQL en paramètre pour ne pas refaire la requête
59                        $identifiant = $fonction($id_objet, $ligne);
60                }
61                // 2) Sinon champ normalisé
62                elseif ($ligne['identifiant']) {
63                        $identifiant = $ligne['identifiant'];
64                }
65                // 3) Sinon identifiant dans la table spip_identifiants
66                else {
67                        $identifiant = sql_getfetsel('identifiant', 'spip_identifiants', 'objet='.sql_quote($objet).' AND id_objet='.intval($id_objet));
68                }
69        }
70
71        return $identifiant;
72}
73
74
75/**
76 * Retourne une liste de tables possédant une colonne « identifiant »
77 *
78 * @return Array
79 */
80function tables_avec_identifiant() {
81
82        include_spip('base/objets');
83
84        $tables_avec_identifiant = array();
85
86        if ($tables = lister_tables_objets_sql()) {
87                foreach($tables as $table=>$infos) {
88                        if (array_key_exists('identifiant', $infos['field'])) {
89                                $tables_avec_identifiant[] = $table;
90                        }
91                }
92        }
93        return $tables_avec_identifiant;
94}
Note: See TracBrowser for help on using the repository browser.