[SPIP] v3.2.12 -> v3.2.12 - Reinstallation avec le spip_loader
[lhc/web/www.git] / www / ecrire / inc / boutons.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2019 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
8 * *
9 * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
10 * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
11 \***************************************************************************/
12
13 /**
14 * Gestion des boutons de l'interface privée
15 *
16 * @package SPIP\Core\Boutons
17 */
18
19 if (!defined('_ECRIRE_INC_VERSION')) {
20 return;
21 }
22
23 /**
24 * Classe définissant un bouton dans la barre du haut de l'interface
25 * privée ou dans un de ses sous menus
26 */
27 class Bouton {
28 /** @var string L'icone à mettre dans le bouton */
29 public $icone;
30
31 /** @var string Le nom de l'entrée d'i18n associé */
32 public $libelle;
33
34 /** @var null|string L'URL de la page (null => ?exec=nom) */
35 public $url = null;
36
37 /** @var null|string|array Arguments supplementaires de l'URL */
38 public $urlArg = null;
39
40 /** @var null|string URL du javascript */
41 public $url2 = null;
42
43 /** @var null|string Pour ouvrir dans une fenetre a part */
44 public $target = null;
45
46 /** @var null|mixed Sous-barre de boutons / onglets */
47 public $sousmenu = null;
48
49 /**
50 * Définit un bouton
51 *
52 * @param string $icone
53 * L'icone à mettre dans le bouton
54 * @param string $libelle
55 * Le nom de l'entrée i18n associé
56 * @param null|string $url
57 * L'URL de la page
58 * @param null|string|array $urlArg
59 * Arguments supplémentaires de l'URL
60 * @param null|string $url2
61 * URL du javascript
62 * @param null|mixed $target
63 * Pour ouvrir une fenêtre à part
64 */
65 public function __construct($icone, $libelle, $url = null, $urlArg = null, $url2 = null, $target = null) {
66 $this->icone = $icone;
67 $this->libelle = $libelle;
68 $this->url = $url;
69 $this->urlArg = $urlArg;
70 $this->url2 = $url2;
71 $this->target = $target;
72 }
73 }
74
75
76 /**
77 * Définir la liste des onglets dans une page de l'interface privée.
78 *
79 * On passe la main au pipeline "ajouter_onglets".
80 *
81 * @see plugin_ongletbouton() qui crée la fonction `onglets_plugins()`
82 * @pipeline_appel ajouter_onglets
83 *
84 * @param string $script
85 * @return array
86 */
87 function definir_barre_onglets($script) {
88
89 $onglets = array();
90 $liste_onglets = array();
91
92 // ajouter les onglets issus des plugin via paquet.xml
93 if (function_exists('onglets_plugins')) {
94 $liste_onglets = onglets_plugins();
95 }
96
97
98 foreach ($liste_onglets as $id => $infos) {
99 if (($parent = $infos['parent'])
100 && $parent == $script
101 && autoriser('onglet', "_$id")
102 ) {
103 $onglets[$id] = new Bouton(
104 isset($infos['icone']) ? find_in_theme($infos['icone']) : '', // icone
105 $infos['titre'], // titre
106 (isset($infos['action']) and $infos['action'])
107 ? generer_url_ecrire($infos['action'],
108 (isset($infos['parametres']) and $infos['parametres']) ? $infos['parametres'] : '')
109 : null
110 );
111 }
112 }
113
114 return pipeline('ajouter_onglets', array('data' => $onglets, 'args' => $script));
115 }
116
117
118 /**
119 *
120 * Création de la barre d'onglets
121 *
122 * @uses definir_barre_onglets()
123 * @uses onglet()
124 * @uses debut_onglet()
125 * @uses fin_onglet()
126 *
127 * @param string $rubrique
128 * @param string $ongletCourant
129 * @param string $class
130 * @return string
131 */
132 function barre_onglets($rubrique, $ongletCourant, $class = "barre_onglet") {
133 include_spip('inc/presentation');
134
135 $res = '';
136
137 foreach (definir_barre_onglets($rubrique) as $exec => $onglet) {
138 $url = $onglet->url ? $onglet->url : generer_url_ecrire($exec);
139 $res .= onglet(_T($onglet->libelle), $url, $exec, $ongletCourant, $onglet->icone);
140 }
141
142 return !$res ? '' : (debut_onglet($class) . $res . fin_onglet());
143 }