source: spip-zone/_plugins_/diogene/diogene/trunk/diogene_fonctions.php @ 97999

Last change on this file since 97999 was 97999, checked in by kent1@…, 3 years ago

Nettoyage

File size: 9.2 KB
Line 
1<?php
2/**
3 * Plugin Diogene
4 *
5 * Auteurs :
6 * b_b
7 * kent1 (http://www.kent1.info - kent1@arscenic.info)
8 *
9 * Distribue sous licence GNU/GPL
10 *
11 * Fonctions spécifiques à Diogene
12 *
13 * @package SPIP\Diogene\Fonctions
14 **/
15
16if (!defined('_ECRIRE_INC_VERSION')) {
17        return;
18}
19
20/**
21 * Redéfinition de la balise #URL_ARTICLE
22 * http://doc.spip.org/@balise_URL_ARTICLE_dist
23 *
24 * Si l'article n'existe pas ou n'est pas publié, on envoie vers la page publique de publication
25 * Pratique pour les liens vers associé à une auteur mais pas encore publiés
26 *
27 * @param Champ $p
28 *     Pile au niveau de la balise
29 * @return Champ
30 *     Pile complétée du code compilé
31 */
32function balise_URL_ARTICLE($p) {
33        include_spip('balise/url_');
34        // Cas particulier des boucles (SYNDIC_ARTICLES)
35        if ($p->type_requete == 'syndic_articles') {
36                $code = champ_sql('url', $p);
37                $p->code = "vider_url($code)";
38        } else {
39                $code = generer_generer_url('article', $p);
40                $_id = interprete_argument_balise(1, $p);
41                if (!$_id) {
42                        $_id = champ_sql('id_article', $p);
43                }
44                $p->code = "generer_url_publier($_id,'article','',false)";
45
46                $p->interdire_scripts = false;
47        }
48        return $p;
49}
50
51/**
52 * Fonction calculant le nombre d'objets qu'un utilisateur peut encore créer
53 * Utilisé que sur les objets à base d'articles
54 *
55 * @param int
56 *              $id_diogene : l'identifiant numérique du diogene
57 * @return string|int|false
58 *              le retour à trois types de valeurs :
59 *              - string "infinite" : le nombre est infini
60 *              - boolean false : il y a une erreur, pas de limite pour ce genre d'objet
61 *              - int : le nombre possible
62 */
63function diogene_nombre_attente($id_diogene) {
64        $id_auteur = $GLOBALS['visiteur_session']['id_auteur'];
65        if (!intval($id_auteur) || ($id_auteur < 1)) {
66                return false;
67        }
68        if ($GLOBALS['visiteur_session']['statut'] == '0minirezo') {
69                return 'infinite';
70        }
71
72        $diogene = sql_fetsel('id_secteur,nombre_attente', 'spip_diogenes', 'id_diogene='.intval($id_diogene).' AND objet IN ("article","emballe_media")');
73
74        if ($diogene['nombre_attente'] == 0) {
75                return 'infinite';
76        }
77
78        $nb_articles = sql_countsel('spip_articles as art LEFT JOIN spip_auteurs_liens as lien ON lien.objet="article" AND art.id_article=lien.id_objet', 'lien.id_auteur='.intval($id_auteur).' AND art.id_secteur='.intval($diogene['id_secteur']).' AND statut NOT IN ("publie","poubelle")');
79        $nombre_attente = ($diogene['nombre_attente'] - $nb_articles);
80        if ($nombre_attente < 0) {
81                $nombre_attente = 0;
82        }
83        return intval($nombre_attente);
84
85}
86
87// TODO : passer le define dans une valeur de config
88if (!test_espace_prive() and (defined('_DIOGENE_MODIFIER_PUBLIC') ? _DIOGENE_MODIFIER_PUBLIC : true)) {
89        function generer_url_ecrire_article($id, $args, $ancre, $public, $connect) {
90                return url_absolue(generer_url_publier($id, 'article', null, true));
91        }
92}
93
94/**
95 * Génération d'une url vers la page de publication d'un objet
96 *
97 * @param int $id
98 *              Identifiant numérique de l'objet
99 * @param string
100 *              $objet Le type de l'objet
101 * @param boolean
102 *              $forcer Dans le cas où l'objet est déjà publié cela renverra vers la page de l'objet. Si $forcer = true,
103 *              cela forcera le fait d'aller sur la page de modification de l'objet
104 * @return string $url
105 *              L'URL de la page que l'on souhaite
106 */
107function generer_url_publier($id = null, $objet = 'article', $id_secteur = 0, $forcer = true, $forcer_ecrire = 'non') {
108        include_spip('inc/urls');
109
110        $id_table_objet = id_table_objet($objet) ? id_table_objet($objet) : 'id_article';
111        $table = table_objet_sql($objet);
112        $table_objet = table_objet($objet);
113
114        $infos_cherchees = array('statut');
115        $trouver_table = charger_fonction('trouver_table', 'base');
116
117        if ($desc = $trouver_table($table_objet)
118                and isset($desc['field']['id_secteur'])) {
119                $infos_cherchees[] = 'id_secteur';
120        }
121
122        if (is_numeric($id)) {
123                $infos_objet = sql_fetsel($infos_cherchees, $table, $id_table_objet.'='.intval($id));
124                $id_secteur = $infos_objet['id_secteur'] ? $infos_objet['id_secteur'] : 0;
125        } else {
126                $infos_objet = array();
127        }
128
129        /**
130         * Si on ne force pas, on envoit vers la page de l'objet
131         */
132        if ($forcer === false) {
133                if (in_array($infos_objet['statut'], array('publie','archive'))) {
134                        return generer_url_entite($id, $objet);
135                }
136        }
137        $objets[] = $objet;
138        if ($objet == 'article') {
139                $objets[] = 'emballe_media';
140                $objets[] = 'page';
141        }
142
143        if ($forcer_ecrire == 'prive') {
144                $type_objet = sql_getfetsel('type', 'spip_diogenes', 'id_secteur='.intval($id_secteur).' AND '.sql_in('objet', $objets));
145        }
146
147        if (isset($type_objet) and $type_objet) {
148                $page_publier = defined('_PAGE_PUBLIER') ? _PAGE_PUBLIER : 'publier';
149                $url = generer_url_public($page_publier, 'type_objet=' . $type_objet, '', true);
150                if (is_numeric($id)) {
151                        $url = parametre_url($url, $id_table_objet, intval($id));
152                }
153        } else {
154                $a = id_table_objet($objet) . '=' . intval($id);
155                if (!function_exists('objet_info')) {
156                        include_spip('inc/filtres');
157                }
158                $url = generer_url_ecrire(objet_info($objet, 'url_voir'), $a);
159        }
160        return $url;
161}
162
163/**
164 * Fonction retournant la chaine de langue depuis un statut
165 *
166 * @param string $statut
167 *              Le statut de l'objet
168 * @param string $type
169 *              Le type d'objet SPIP
170 * @return string
171 *              La locution adéquate pour le statut
172 */
173function diogene_info_statut($statut, $type = 'article') {
174        $statuts = objet_info($type, 'statut_titres');
175        if (!is_array($statuts)) {
176                $statuts = objet_info($type, 'statut_textes_instituer');
177        }
178        if (is_array($statuts) && array_key_exists($statut, $statuts)) {
179                return _T($statuts[$statut]);
180        } else {
181                switch ($type) {
182                        case 'article':
183                                $etats = array_flip($GLOBALS['liste_des_etats']);
184                                return _T($etats[$statut]);
185                        case 'rubrique':
186                                $etats = array_flip($GLOBALS['liste_des_etats']);
187                                if (isset($etats[$statut])) {
188                                        return _T($etats[$statut]);
189                                } elseif ($statut == 'new') {
190                                        return _T('diogene:info_rubrique_new');
191                                } elseif ($statut == 0) {
192                                        /**
193                                         * Rubrique qui a été dépubliée
194                                         * cf depublier_rubrique_if() dans inc/rubriques
195                                         */
196                                        return _T('diogene:info_rubrique_vide');
197                                } else {
198                                        return $statut;
199                                }
200                }
201        }
202        return;
203}
204
205/**
206 * Être sûr d'avoir les fonctions des puces
207 */
208if (!function_exists('puce_statut')) {
209        include_spip('inc/autoriser');
210        include_spip('inc/puce_statut');
211}
212
213if (!function_exists('puce_statut_rubrique')) {
214        /**
215         * Surcharge de la fonction puce_statut_dist() de inc/puce_statut
216         *
217         * @param $id_objet int L'id_rubrique
218         * @param $statut string Le statut de la rubrique
219         * @param $id_parent int
220         * @param $type string 'rubrique'
221         * @param $ajax
222         *
223         * @return un tag image <img src... /> ou le string du statut
224         */
225        function puce_statut_rubrique($id_objet, $statut, $id_parent, $type, $ajax = '') {
226                if (test_espace_prive()) {
227                        return puce_statut_rubrique_dist($id_objet, $statut, $id_parent, $type, $ajax = '');
228                } else {
229                        switch ($statut) {
230                                case 'publie':
231                                        $img = 'puce-verte.gif';
232                                        $alt = _T('diogene:info_rubrique_publie');
233                                        return http_img_pack($img, $alt, $atts);
234                                /**
235                                 * Nouvelle rubrique cr&eacute;&eacute;e
236                                 */
237                                case 'new':
238                                        $img = 'puce-blanche.gif';
239                                        $alt = _T('diogene:info_rubrique_new');
240                                        return http_img_pack($img, $alt, $atts);
241                                /**
242                                 * Rubrique qui a été dépubliée
243                                 * cf depublier_rubrique_if() dans inc/rubriques
244                                 */
245                                case '0':
246                                        $img = 'puce-blanche.gif';
247                                        $alt = _T('diogene:info_rubrique_new');
248                                        return http_img_pack($img, $alt, $atts);
249                                default:
250                                        return $statut;
251                        }
252                }
253        }
254}
255
256/**
257 * Generer un lien d'aide (icone + lien)
258 *
259 * @param string $aide
260 *              cle d'identification de l'aide souhaitee
261 * @param string $skel
262 *              Nom du squelette qui appelle ce bouton d'aide
263 * @param array $env
264 *              Environnement du squelette
265 * @param bool $aide_spip_directe
266 *              false : Le lien genere est relatif a notre site (par defaut)
267 *              true : Le lien est realise sur spip.net/aide/ directement ...
268 * @return
269**/
270function inc_aider($aide = '', $skel = '', $env = array(), $aide_spip_directe = false) {
271        global $spip_lang, $aider_index;
272        include_spip('inc/aider');
273        if (($skel = basename($skel))
274                and isset($aider_index[$skel])
275                and isset($aider_index[$skel][$aide])) {
276                $aide = $aider_index[$skel][$aide];
277        }
278
279        if ($aide_spip_directe) {
280                // on suppose que spip.net est le premier present
281                // dans la liste des serveurs. C'est forcement le cas
282                // a l'installation tout du moins
283                $help_server = $GLOBALS['help_server'];
284                $url = array_shift($help_server) . '/';
285                $url = parametre_url($url, 'exec', 'aide');
286                $url = parametre_url($url, 'aide', $aide);
287                $url = parametre_url($url, 'var_lang', $spip_lang);
288        } else {
289                $args = "aide=$aide&var_lang=$spip_lang";
290                if (test_espace_prive()) {
291                        $url = generer_url_ecrire('aide', $args);
292                } else {
293                        $url = generer_url_public('aide_spip', $args);
294                }
295        }
296        return aider_icone($url);
297}
298
299function diogene_puce_statut($id_objet, $type, $statut, $id_parent = '0') {
300        $puce_statut = charger_fonction('puce_statut', 'inc');
301        return $puce_statut($id_objet, $statut, $id_parent, $type, false, null);
302}
303
304/**
305 * Pour PHP < 5.3.0
306 *
307 * Une définition de la fonction lcfirst
308 *
309 * @param string $texte
310 *              Le texte que l'on souhaite modifier
311 * @return string $texte
312 *              Le texte modifié
313 */
314if (!function_exists('lcfirst')) {
315        function lcfirst($texte) {
316                $texte{0} = strtolower($texte{0});
317                return $texte;
318        }
319}
Note: See TracBrowser for help on using the repository browser.