[SPIP] ~v3.0.20-->v3.0.25
[lhc/web/clavette_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-2016 *
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 if (!defined('_ECRIRE_INC_VERSION')) return;
14
15 include_spip('inc/editer');
16 include_spip('inc/autoriser');
17 include_spip('inc/puce_statut');
18
19 /**
20 * filtres les statuts utilisable selon les droits de publication
21 * @param array $desc
22 * @param bool $publiable
23 * @return array
24 */
25 function lister_statuts_proposes($desc,$publiable = true){
26 if (!isset($desc['statut_textes_instituer']))
27 return false;
28
29 $l = $desc['statut_textes_instituer'];
30 if (!$publiable){
31 unset($l['publie']);
32 unset($l['refuse']);
33 }
34 return $l;
35 }
36
37 /**
38 * Charger #FORMULAIRE_INSTITUER_OBJET
39 * @param string $objet
40 * @param int $id_objet
41 * @param string $retour
42 * @return array|bool
43 */
44 function formulaires_instituer_objet_charger_dist($objet,$id_objet,$retour="",$editable = true){
45 $editable = ($editable?true:false);
46
47 $table = table_objet_sql($objet);
48 $desc = lister_tables_objets_sql($table);
49
50 if (!isset($desc['statut_textes_instituer']))
51 return false;
52
53 if (!autoriser('modifier', $objet, $id_objet))
54 $editable = false;
55
56 // charger le contenu de l'objet
57 // dont son champ statut
58 $v = formulaires_editer_objet_charger($objet,$id_objet,0,0,'','');
59
60 $publiable = true;
61 $statuts = lister_statuts_proposes($desc);
62 // tester si on a le droit de publier, si un statut publie existe
63 if (isset($statuts['publie'])){
64 if (!autoriser('instituer', $objet, $id_objet, null, array('statut'=>'publie'))){
65 if ($v['statut'] == 'publie')
66 $editable = false;
67 else
68 $publiable = false;
69 }
70 }
71 $valeurs = array(
72 'editable' => $editable,
73 'statut' => $v['statut'],
74 '_objet' => $objet,
75 '_id_objet' => $id_objet,
76 '_statuts' => lister_statuts_proposes($desc, $editable?$publiable:true),
77 '_publiable' => $publiable,
78 '_label' => isset($desc['texte_changer_statut'])?$desc['texte_changer_statut']:'texte_article_statut',
79 '_aide' => isset($desc['aide_changer_statut'])?$desc['aide_changer_statut']:'',
80 '_hidden' => "<input type='hidden' name='statut_old' value='".$v['statut']."' />",
81 );
82
83 #if (!count($valeurs['statuts']))
84 return $valeurs;
85 }
86
87 /**
88 * Verifier #FORMULAIRE_INSTITUER_OBJET
89 * @param string $objet
90 * @param int $id_objet
91 * @param string $retour
92 * @return array
93 */
94 function formulaires_instituer_objet_verifier_dist($objet,$id_objet,$retour="",$editable = true){
95 $erreurs = array();
96 // charger le contenu de l'objet
97 // dont son champ statut
98 $v = formulaires_editer_objet_charger($objet,$id_objet,0,0,'','');
99
100 if ($v['statut']!==_request('statut_old'))
101 $erreurs['statut'] = _T('instituer_erreur_statut_a_change');
102 else {
103 $table = table_objet_sql($objet);
104 $desc = lister_tables_objets_sql($table);
105
106 $publiable = true;
107 if (isset($v['id_rubrique'])
108 AND !autoriser('publierdans', 'rubrique', $v['id_rubrique'])) {
109 $publiable = false;
110 }
111 $l = lister_statuts_proposes($desc, $publiable);
112 $statut = _request('statut');
113 if (!isset($l[$statut])
114 OR !autoriser('instituer',$objet,$id_objet,'',array('statut'=>$statut)))
115 $erreurs['statut'] = _T('instituer_erreur_statut_non_autorise');
116 }
117
118 return $erreurs;
119 }
120
121 /**
122 * Traiter #FORMULAIRE_INSTITUER_OBJET
123 * @param string $objet
124 * @param int $id_objet
125 * @param string $retour
126 * @return array
127 */
128 function formulaires_instituer_objet_traiter_dist($objet,$id_objet,$retour="",$editable = true){
129
130 $c = array('statut' => _request('statut'));
131 // si on a envoye une 'date_posterieure', l'enregistrer
132 // todo dans le HTML
133 if ($d = _request('date_posterieure'))
134 $c['date'] = $d;
135
136
137 include_spip('action/editer_objet');
138 if ($err=objet_instituer($objet, $id_objet, $c))
139 $res = array('message_erreur'=>$err);
140 else {
141 $res = array('message_ok'=>_T('info_modification_enregistree'));
142 if ($retour)
143 $res['redirect'] = $retour;
144 set_request('statut');
145 set_request('date_posterieure');
146 }
147
148 return $res;
149 }