Dépôt officiel du core SPIP * Anciennement présent sur svn://trac.rezo.net/spip * Les plugins-dist faisant partie de la distribution SPIP sont présents dans https://git.spip.net/SPIP/[nom du plugin dist] https://www.spip.net
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

202 lines
5.6 KiB

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