[SPIP] v3.2.1-->v3.2.2
[lhc/web/www.git] / www / prive / formulaires / instituer_objet.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 du formulaire d'institution (changement de statut) d'un objet
15 *
16 * @package SPIP\Core\Formulaires
17 **/
18
19 if (!defined('_ECRIRE_INC_VERSION')) {
20 return;
21 }
22
23 include_spip('inc/editer');
24 include_spip('inc/autoriser');
25 include_spip('inc/puce_statut');
26
27 /**
28 * Filtres les statuts utilisable selon les droits de publication
29 *
30 * @param array $desc
31 * @param bool $publiable
32 * @return array
33 */
34 function lister_statuts_proposes($desc, $publiable = true) {
35 if (!isset($desc['statut_textes_instituer'])) {
36 return false;
37 }
38
39 $l = $desc['statut_textes_instituer'];
40 if (!$publiable) {
41 unset($l['publie']);
42 unset($l['refuse']);
43 }
44
45 return $l;
46 }
47
48 /**
49 * Chargement du formulaire instituer objet
50 *
51 * @uses formulaires_editer_objet_charger()
52 *
53 * @param string $objet
54 * Type d'objet
55 * @param int $id_objet
56 * Identifiant de l'objet
57 * @param string $retour
58 * URL de redirection après le traitement
59 * @param bool $editable
60 * Indique si le statut est éditable ou non.
61 * Dans tous les cas, si l'on n'a pas la permission de modifier l'objet,
62 * cette option sera mise à false.
63 * @return array|bool
64 * Environnement du formulaire ou false si aucun affichage à faire.
65 */
66 function formulaires_instituer_objet_charger_dist($objet, $id_objet, $retour = '', $editable = true) {
67 $editable = ($editable ? true : false);
68
69 $table = table_objet_sql($objet);
70 $desc = lister_tables_objets_sql($table);
71
72 if (!isset($desc['statut_textes_instituer'])) {
73 return false;
74 }
75
76 if (!autoriser('modifier', $objet, $id_objet)) {
77 $editable = false;
78 }
79
80 // charger le contenu de l'objet
81 // dont son champ statut
82 $v = formulaires_editer_objet_charger($objet, $id_objet, 0, 0, '', '');
83
84 $publiable = true;
85 $statuts = lister_statuts_proposes($desc);
86 // tester si on a le droit de publier, si un statut publie existe
87 if (isset($statuts['publie'])) {
88 if (!autoriser('instituer', $objet, $id_objet, null, array('statut' => 'publie'))) {
89 if ($v['statut'] == 'publie') {
90 $editable = false;
91 } else {
92 $publiable = false;
93 }
94 }
95 }
96 $statuts = lister_statuts_proposes($desc, $editable ? $publiable : true);
97 if (count($statuts) == 1 and isset($statuts[$v['statut']])) {
98 $editable = false;
99 }
100
101 $valeurs = array(
102 'editable' => $editable,
103 'statut' => $v['statut'],
104 '_objet' => $objet,
105 '_id_objet' => $id_objet,
106 '_statuts' => $statuts,
107 '_publiable' => $publiable,
108 '_label' => isset($desc['texte_changer_statut']) ? $desc['texte_changer_statut'] : 'texte_article_statut',
109 '_aide' => isset($desc['aide_changer_statut']) ? $desc['aide_changer_statut'] : '',
110 '_hidden' => "<input type='hidden' name='statut_old' value='" . $v['statut'] . "' />",
111 );
112
113 #if (!count($valeurs['statuts']))
114 return $valeurs;
115 }
116
117 /**
118 * Vérifications du formulaire instituer objet
119 *
120 * @uses formulaires_editer_objet_charger()
121 *
122 * @param string $objet
123 * Type d'objet
124 * @param int $id_objet
125 * Identifiant de l'objet
126 * @param string $retour
127 * URL de redirection après le traitement
128 * @param bool $editable
129 * Indique si le statut est éditable ou non.
130 * @return array
131 * Tableau des erreurs
132 */
133 function formulaires_instituer_objet_verifier_dist($objet, $id_objet, $retour = '', $editable = true) {
134 $erreurs = array();
135 // charger le contenu de l'objet
136 // dont son champ statut
137 $v = formulaires_editer_objet_charger($objet, $id_objet, 0, 0, '', '');
138
139 if ($v['statut'] !== _request('statut_old')) {
140 $erreurs['statut'] = _T('instituer_erreur_statut_a_change');
141 } else {
142 $table = table_objet_sql($objet);
143 $desc = lister_tables_objets_sql($table);
144
145 $publiable = true;
146 if (isset($v['id_rubrique'])
147 and !autoriser('publierdans', 'rubrique', $v['id_rubrique'])
148 ) {
149 $publiable = false;
150 }
151 $l = lister_statuts_proposes($desc, $publiable);
152 $statut = _request('statut');
153 if (!isset($l[$statut])
154 or !autoriser('instituer', $objet, $id_objet, '', array('statut' => $statut))
155 ) {
156 $erreurs['statut'] = _T('instituer_erreur_statut_non_autorise');
157 }
158 }
159
160 return $erreurs;
161 }
162
163 /**
164 * Traitements du formulaire instituer objet
165 *
166 * @param string $objet
167 * Type d'objet
168 * @param int $id_objet
169 * Identifiant de l'objet
170 * @param string $retour
171 * URL de redirection après le traitement
172 * @param bool $editable
173 * Indique si le statut est éditable ou non.
174 * @return array
175 * Retour des traitements
176 */
177 function formulaires_instituer_objet_traiter_dist($objet, $id_objet, $retour = '', $editable = true) {
178
179 $c = array('statut' => _request('statut'));
180 // si on a envoye une 'date_posterieure', l'enregistrer
181 // todo dans le HTML
182 if ($d = _request('date_posterieure')) {
183 $c['date'] = $d;
184 }
185
186
187 include_spip('action/editer_objet');
188 if ($err = objet_instituer($objet, $id_objet, $c)) {
189 $res = array('message_erreur' => $err);
190 } else {
191 $res = array('message_ok' => _T('info_modification_enregistree'));
192 if ($retour) {
193 $res['redirect'] = $retour;
194 }
195 set_request('statut');
196 set_request('date_posterieure');
197 }
198
199 return $res;
200 }