source: spip-zone/_plugins_/selection_d_objets/branches/1/selection_objet_fonctions.php @ 70292

Last change on this file since 70292 was 70292, checked in by abelass@…, 7 years ago
  • Informer sur les liesn de l'objets dur page de l'objet sélectionné
  • Uniformiser l'attribution du titre de l'objet
File size: 6.0 KB
Line 
1<?php
2
3if (!defined('_ECRIRE_INC_VERSION')) return;
4
5
6
7 //Applique des filtres sur des champs spéciciques
8function filtrer_champ($data){
9    include_spip('inc/texte');
10    $exceptions=charger_fonction('exceptions','inc');
11    $titres=$exceptions('titre');
12    $titres=array_merge(array(0=>'titre'),$titres);
13    $propres=array('descriptif','texte');
14    $extraire_multi=array_merge($titres,array('descriptif','texte'));
15    $filtres=array(
16        'extraire_multi'=>  $extraire_multi,         
17        'supprimer_numero'=>$titres,
18        'propre'=>$propres,
19       );
20       
21    foreach($filtres as $filtre => $champ){
22        if(is_array($data)){
23            if(is_array($champ)){
24                foreach($champ as $c){
25                    if($data[$c])$data[$c]=$filtre($data[$c]);
26                    }
27                }
28            }
29        else $data=$filtre($data);
30        }
31    return $data;   
32   
33}
34
35/*Etablit le titre de l'objet*/
36function titre_objet_sel($objet,$contexte){
37    $exceptions=charger_fonction('exceptions','inc');
38    $exception_titre=$exceptions('titre');
39    //Les exceptions du titre
40    if(!$titre=$exception_titre[$objet])$titre=$contexte['titre'];
41   
42    if(!$titre){
43        if($objet=='document'){
44            $f=explode('/',$contexte['fichier']);
45            $titre=$f[1];
46            }
47        else $titre=$objet.'_'.$id_objet;
48   
49    }
50    return $titre;
51}
52
53/* Fournit les champs désirés d'un objet donné */
54function info_objet($objet,$id_objet='',$champs='*',$where=array()){
55        include_spip('inc/filtres');
56
57    //Les tables non conforme
58    $exceptions=charger_fonction('exceptions','inc');
59    $exception_objet=$exceptions('objet');
60    if($exception_objet[$objet]){
61         $objet=$exception_objet[$objet];
62          $table='spip_'.$objet;
63    }
64    else $table='spip_'.$objet.'s';
65
66   
67    if($id_objet){
68        if(!$where)$where=array('id_'.$objet.'='.$id_objet); 
69        if($champs=='*')$data=sql_fetsel($champs,$table,$where);
70        else $data=sql_getfetsel($champs,$table,$where);
71        $data=filtrer_champ($data);
72        }
73    else{
74        $data=array();
75        $sql=sql_select($champs,$table,$where);
76        while($d = sql_fetch($sql)){
77           
78            if($d)$data[$d['id_'.$objet]]=filtrer_champ($d);
79            }
80        }
81        return $data;
82   
83}
84
85/* Fonction qui fournit le lien d'un objet*/
86function url_objet($id_objet,$objet,$titre='',$url=''){
87   
88    if(!$titre AND !$url){
89        $objet_sel=sql_fetsel('titre,url','spip_selection_objets','id_objet='.$id_objet.' AND objet='.sql_quote($objet));
90        $url=$objet_sel['url'];
91        $titre=$objet_sel['titre'];
92    }
93
94        if(!$titre)$titre=info_objet($objet,$id_objet,'titre');
95    if(!$url)$url=generer_url_entite($id_objet,$objet);
96       
97        $lien = '<a href="'.$url.'" title="'.$titre.'">'.$titre.'</a>';
98        return $lien;
99}
100
101
102/*Fournit un tableau avec id_objet=>donnees_objet*/
103
104function tableau_objet($objet,$id_objet='',$champs='*',$where=array(),$filtrer=array(),$array_donnes=true){
105    $d=info_objet($objet,$id_objet,$champs,$where);
106    //Les tables non conforme, faudrait inclure une pipeline
107    $exceptions=charger_fonction('exceptions','inc');
108    $exception_objet=$exceptions('objet');
109    if($exception_objet[$objet]){
110         $objet=$exception_objet[$objet];
111    }
112    $data=array();
113    if(is_array($d)){
114        foreach($d as $r){
115            //déterminer le titre
116            if(!$r['titre'])$r['titre']=titre_objet_sel($objet,$r);
117            if(!$filtrer) $data[$r['id_'.$objet]]=$r;
118            elseif(is_array($filtrer)){
119                $donnees=array();
120                foreach($filtrer as $c){
121                if($r[$c])$donnees[$c]=$r[$c]; 
122                }
123             if($array_donnes) $data[$r['id_'.$objet]]=$donnees; 
124             else $data[$r['id_'.$objet]]=implode(',',$donnees);
125            }
126        }
127    }
128    return $data;
129}
130/* Assemble les données entre un objet sélectioné et son objet d'origine pour injection dans un modele choisit*/
131function generer_modele($id_objet,$objet='article',$fichier='modeles_selection_objet/defaut',$env=array(),$where=''){
132    include_spip('inc/utils');
133   
134    //Quelques objets ne sont pas conforme, on adapte
135    $exceptions=charger_fonction('exceptions','inc');
136    $exception_objet=$exceptions();
137   
138
139    if($exception_objet['objet'][$objet]){
140         $objet=$exception_objet['objet'][$objet];
141          $table='spip_'.$objet;
142    }
143    else $table='spip_'.$objet.'s';
144    if(!$where)$where='id_'.$objet.'='.$id_objet;
145   
146    if(!$contexte=sql_fetsel('*',$table,$where))$contexte=array();
147   
148    //Filtrer les champs vides
149    foreach($env as $k=>$v){
150        if(!$v)unset($env[$k]);
151    }
152   
153    if(!$cont=calculer_contexte())$cont=array();
154    if(is_array($env))$contexte= array_merge($cont,$contexte,$env);
155
156    $contexte['objet']=$objet;
157    $contexte['id_objet']=$id_objet;
158   
159     //déterminer le titre
160    if(!$contexte['titre'])$contexte['titre']=titre_objet_sel($objet,$contexte);
161
162    //Les exceptions du titre
163    if(!$exception_titre[$objet]){
164        $contexte['champ_titre']='titre'; 
165        }
166    else{
167        $contexte['champ_titre']=$exception_objet['titre'][$objet]; 
168        } 
169   
170    //Chercher le logo correpsondant
171    //Si il y a un logo Selection Objet
172    $chercher_logo = charger_fonction('chercher_logo', 'inc');
173    $logo=$chercher_logo($contexte['id_selection_objet'],'id_selection_objet','on');
174    $contexte['logo_objet']=$logo[0];
175    //sinon le logo de l'objet sélectionné
176    if(!$contexte['logo_objet']){
177        $_id_objet=id_table_objet($objet);       
178        $logo=$chercher_logo($id_objet,$_id_objet,'on');
179        $contexte['logo_objet']=$logo[0];
180        }
181    $fond=recuperer_fond($fichier,$contexte);
182   
183    return $fond;
184}
185
186//donnele nom du type de lien
187function nom_type($type,$objet){
188    include_spip('inc/config');
189    if(!$types=lire_config('selection_objet/type_liens_'.$objet,array())) $types=lire_config('selection_objet/type_liens',array());
190   
191    if(!$nom=_T($types[$type]))$nom=$type;
192   
193    return $nom;
194    }
195?>
Note: See TracBrowser for help on using the repository browser.