153 lines
5.7 KiB
PHP
153 lines
5.7 KiB
PHP
|
<?php
|
|||
|
|
|||
|
/***************************************************************************\
|
|||
|
* SPIP, Systeme de publication pour l'internet *
|
|||
|
* *
|
|||
|
* Copyright (c) 2001-2019 *
|
|||
|
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
|
|||
|
* *
|
|||
|
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
|
|||
|
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
|
|||
|
\***************************************************************************/
|
|||
|
|
|||
|
/**
|
|||
|
* Gestion des actions sécurisées
|
|||
|
*
|
|||
|
* @package SPIP\Core\Actions
|
|||
|
**/
|
|||
|
|
|||
|
if (!defined('_ECRIRE_INC_VERSION')) {
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* Retourne une URL ou un formulaire securisé
|
|||
|
*
|
|||
|
* @uses inc_securiser_action_dist()
|
|||
|
*
|
|||
|
* @param string $action
|
|||
|
* Nom du fichier/action appelé (dans le répertoire action)
|
|||
|
* @param string $arg
|
|||
|
* Arguments pour l'action sécurisée
|
|||
|
* @param string $redirect
|
|||
|
* Adresse de redirection souhaitée à la fin du bon déroulement de l’action
|
|||
|
* @param bool|int|string $mode
|
|||
|
* - -1 : renvoyer action, arg et hash sous forme de array()
|
|||
|
* - true ou false : renvoyer une url, avec `&` (false) ou `&` (true)
|
|||
|
* - string : renvoyer un formulaire
|
|||
|
* @param string|int $att
|
|||
|
* - id_auteur pour lequel générer l'action en mode url ou array()
|
|||
|
* - attributs du formulaire en mode formulaire
|
|||
|
* @param bool $public
|
|||
|
* @return array|string
|
|||
|
* URL, code HTML du formulaire ou tableau (action, arg, hash)
|
|||
|
*/
|
|||
|
function generer_action_auteur($action, $arg, $redirect = '', $mode = false, $att = '', $public = false) {
|
|||
|
$securiser_action = charger_fonction('securiser_action', 'inc');
|
|||
|
|
|||
|
return $securiser_action($action, $arg, $redirect, $mode, $att, $public);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* Génère une URL ou un formulaire dirigé vers un fichier action (action/xx.php)
|
|||
|
*
|
|||
|
* Le génère à condition que $mode="texte".
|
|||
|
*
|
|||
|
* @uses generer_action_auteur()
|
|||
|
*
|
|||
|
* @api
|
|||
|
* @param string $action
|
|||
|
* Nom du fichier action/xx.php
|
|||
|
* @param string $arg
|
|||
|
* Argument passé à l'action, qui sera récupéré par la fonction
|
|||
|
* `securiser_action()`
|
|||
|
* @param string $ret
|
|||
|
* Nom du script exec sur lequel on revient après l'action (redirection),
|
|||
|
* que l'on peut récupérer dans une fonction d'action par `_request('redirect')`
|
|||
|
* @param string $gra
|
|||
|
* Arguments transmis au script exec de retour `arg1=yy&arg2=zz`
|
|||
|
* @param bool|string|int $mode
|
|||
|
* - -1 : renvoyer action, arg et hash sous forme de array()
|
|||
|
* - true ou false : renvoyer une url, avec `&` (false) ou `&` (true)
|
|||
|
* - string : renvoyer un formulaire
|
|||
|
* @param string $atts ?
|
|||
|
* @param bool $public
|
|||
|
* true produit une URL d'espace public
|
|||
|
* false (par défaut) produit une URL d'espace privé
|
|||
|
* @return string
|
|||
|
* Code HTML du formulaire
|
|||
|
*/
|
|||
|
function redirige_action_auteur($action, $arg, $ret, $gra = '', $mode = false, $atts = '', $public = false) {
|
|||
|
$r = ($public ? _DIR_RESTREINT_ABS : _DIR_RESTREINT) . generer_url_ecrire($ret, $gra, true, true);
|
|||
|
|
|||
|
return generer_action_auteur($action, $arg, $r, $mode, $atts, $public);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* Retourne une URL ou un formulaire sécurisé en méthode POST
|
|||
|
*
|
|||
|
* @param string $action
|
|||
|
* Nom du fichier/action appelé (dans le répertoire action)
|
|||
|
* @param string $arg
|
|||
|
* Arguments pour l'action sécurisée
|
|||
|
* @param string $ret
|
|||
|
* Adresse de redirection souhaitée à la fin du bon déroulement de l’action
|
|||
|
* @param string $gra
|
|||
|
* Arguments à transmettre, tel que `arg1=yy&arg2=zz`
|
|||
|
* @param bool|int|string $corps
|
|||
|
* - -1 : renvoyer action, arg et hash sous forme de array()
|
|||
|
* - true ou false : renvoyer une url, avec `&` (false) ou `&` (true)
|
|||
|
* - string : renvoyer un formulaire
|
|||
|
* @param string|int $att
|
|||
|
* - id_auteur pour lequel générer l'action en mode url ou array()
|
|||
|
* - attributs du formulaire en mode formulaire
|
|||
|
* @return array|string
|
|||
|
* URL, code HTML du formulaire ou tableau (action, arg, hash)
|
|||
|
*/
|
|||
|
function redirige_action_post($action, $arg, $ret, $gra, $corps, $att = '') {
|
|||
|
$r = _DIR_RESTREINT . generer_url_ecrire($ret, $gra, false, true);
|
|||
|
|
|||
|
return generer_action_auteur($action, $arg, $r, $corps, $att . " method='post'");
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* Fonction de formatage du contenu renvoyé en ajax
|
|||
|
*
|
|||
|
* @param string $corps
|
|||
|
* @param string $content_type
|
|||
|
* permet de definir le type de contenu renvoye.
|
|||
|
* Si rien de précisé, ou si true c'est "text/html" avec un entete xml en plus.
|
|||
|
* La valeur speciale false fournit text/html sans entete xml. Elle equivaut a
|
|||
|
* passer "text/html" comme $content_type
|
|||
|
*/
|
|||
|
function ajax_retour($corps, $content_type = null) {
|
|||
|
$xml = false;
|
|||
|
if (is_null($content_type) or $content_type === true) {
|
|||
|
$xml = true;
|
|||
|
$content_type = 'text/html';
|
|||
|
} elseif (!$content_type or !is_string($content_type) or strpos($content_type, '/') === false) {
|
|||
|
$content_type = 'text/html';
|
|||
|
}
|
|||
|
|
|||
|
$e = '';
|
|||
|
if (isset($_COOKIE['spip_admin'])
|
|||
|
and ((_request('var_mode') == 'debug') or !empty($GLOBALS['tableau_des_temps']))
|
|||
|
) {
|
|||
|
$e = erreur_squelette();
|
|||
|
}
|
|||
|
if (isset($GLOBALS['transformer_xml']) or (isset($GLOBALS['exec']) and $GLOBALS['exec'] == 'valider_xml')) {
|
|||
|
$debut = _DOCTYPE_ECRIRE
|
|||
|
. '<html><head><title>Debug Spip Ajax</title></head>'
|
|||
|
. "<body><div>\n\n"
|
|||
|
. "<!-- %%%%%%%%%%%%%%%%%%% Ajax %%%%%%%%%%%%%%%%%%% -->\n";
|
|||
|
$fin = '</div></body></html>';
|
|||
|
} else {
|
|||
|
$c = $GLOBALS['meta']['charset'];
|
|||
|
header('Content-Type: ' . $content_type . '; charset=' . $c);
|
|||
|
$debut = (($xml and strlen(trim($corps))) ? '<' . "?xml version='1.0' encoding='" . $c . "'?" . ">\n" : '');
|
|||
|
$fin = '';
|
|||
|
}
|
|||
|
echo $debut, $corps, $fin, $e;
|
|||
|
}
|