[SPIP] v3.2.1-->v3.2.2
[lhc/web/www.git] / www / ecrire / inc / actions.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 actions sécurisées
15 *
16 * @package SPIP\Core\Actions
17 **/
18
19 if (!defined('_ECRIRE_INC_VERSION')) {
20 return;
21 }
22
23 /**
24 * Retourne une URL ou un formulaire securisé
25 *
26 * @uses inc_securiser_action_dist()
27 *
28 * @param string $action
29 * Nom du fichier/action appelé (dans le répertoire action)
30 * @param string $arg
31 * Arguments pour l'action sécurisée
32 * @param string $redirect
33 * Adresse de redirection souhaitée à la fin du bon déroulement de l’action
34 * @param bool|int|string $mode
35 * - -1 : renvoyer action, arg et hash sous forme de array()
36 * - true ou false : renvoyer une url, avec `&amp;` (false) ou `&` (true)
37 * - string : renvoyer un formulaire
38 * @param string|int $att
39 * - id_auteur pour lequel générer l'action en mode url ou array()
40 * - attributs du formulaire en mode formulaire
41 * @param bool $public
42 * @return array|string
43 * URL, code HTML du formulaire ou tableau (action, arg, hash)
44 */
45 function generer_action_auteur($action, $arg, $redirect = '', $mode = false, $att = '', $public = false) {
46 $securiser_action = charger_fonction('securiser_action', 'inc');
47
48 return $securiser_action($action, $arg, $redirect, $mode, $att, $public);
49 }
50
51 /**
52 * Génère une URL ou un formulaire dirigé vers un fichier action (action/xx.php)
53 *
54 * Le génère à condition que $mode="texte".
55 *
56 * @uses generer_action_auteur()
57 *
58 * @api
59 * @param string $action
60 * Nom du fichier action/xx.php
61 * @param string $arg
62 * Argument passé à l'action, qui sera récupéré par la fonction
63 * `securiser_action()`
64 * @param string $ret
65 * Nom du script exec sur lequel on revient après l'action (redirection),
66 * que l'on peut récupérer dans une fonction d'action par `_request('redirect')`
67 * @param string $gra
68 * Arguments transmis au script exec de retour `arg1=yy&arg2=zz`
69 * @param bool|string|int $mode
70 * - -1 : renvoyer action, arg et hash sous forme de array()
71 * - true ou false : renvoyer une url, avec `&amp;` (false) ou `&` (true)
72 * - string : renvoyer un formulaire
73 * @param string $atts ?
74 * @param bool $public
75 * true produit une URL d'espace public
76 * false (par défaut) produit une URL d'espace privé
77 * @return string
78 * Code HTML du formulaire
79 */
80 function redirige_action_auteur($action, $arg, $ret, $gra = '', $mode = false, $atts = '', $public = false) {
81 $r = ($public ? _DIR_RESTREINT_ABS : _DIR_RESTREINT) . generer_url_ecrire($ret, $gra, true, true);
82
83 return generer_action_auteur($action, $arg, $r, $mode, $atts, $public);
84 }
85
86 /**
87 * Retourne une URL ou un formulaire sécurisé en méthode POST
88 *
89 * @param string $action
90 * Nom du fichier/action appelé (dans le répertoire action)
91 * @param string $arg
92 * Arguments pour l'action sécurisée
93 * @param string $ret
94 * Adresse de redirection souhaitée à la fin du bon déroulement de l’action
95 * @param string $gra
96 * Arguments à transmettre, tel que `arg1=yy&arg2=zz`
97 * @param bool|int|string $corps
98 * - -1 : renvoyer action, arg et hash sous forme de array()
99 * - true ou false : renvoyer une url, avec `&amp;` (false) ou `&` (true)
100 * - string : renvoyer un formulaire
101 * @param string|int $att
102 * - id_auteur pour lequel générer l'action en mode url ou array()
103 * - attributs du formulaire en mode formulaire
104 * @return array|string
105 * URL, code HTML du formulaire ou tableau (action, arg, hash)
106 */
107 function redirige_action_post($action, $arg, $ret, $gra, $corps, $att = '') {
108 $r = _DIR_RESTREINT . generer_url_ecrire($ret, $gra, false, true);
109
110 return generer_action_auteur($action, $arg, $r, $corps, $att . " method='post'");
111 }
112
113
114 /**
115 * Fonction de formatage du contenu renvoyé en ajax
116 *
117 * @param string $corps
118 * @param string $content_type
119 * permet de definir le type de contenu renvoye.
120 * Si rien de précisé, ou si true c'est "text/html" avec un entete xml en plus.
121 * La valeur speciale false fournit text/html sans entete xml. Elle equivaut a
122 * passer "text/html" comme $content_type
123 */
124 function ajax_retour($corps, $content_type = null) {
125 $xml = false;
126 if (is_null($content_type) or $content_type === true) {
127 $xml = true;
128 $content_type = 'text/html';
129 } elseif (!$content_type or !is_string($content_type) or strpos($content_type, '/') === false) {
130 $content_type = 'text/html';
131 }
132
133 $e = '';
134 if (isset($_COOKIE['spip_admin'])
135 and ((_request('var_mode') == 'debug') or !empty($GLOBALS['tableau_des_temps']))
136 ) {
137 $e = erreur_squelette();
138 }
139 if (isset($GLOBALS['transformer_xml']) or (isset($GLOBALS['exec']) and $GLOBALS['exec'] == 'valider_xml')) {
140 $debut = _DOCTYPE_ECRIRE
141 . '<html><head><title>Debug Spip Ajax</title></head>'
142 . "<body><div>\n\n"
143 . "<!-- %%%%%%%%%%%%%%%%%%% Ajax %%%%%%%%%%%%%%%%%%% -->\n";
144 $fin = '</div></body></html>';
145 } else {
146 $c = $GLOBALS['meta']['charset'];
147 header('Content-Type: ' . $content_type . '; charset=' . $c);
148 $debut = (($xml and strlen(trim($corps))) ? '<' . "?xml version='1.0' encoding='" . $c . "'?" . ">\n" : '');
149 $fin = '';
150 }
151 echo $debut, $corps, $fin, $e;
152 }