spip_nursit/ecrire/inc/actions.php

153 lines
5.7 KiB
PHP
Raw Permalink Normal View History

2023-06-01 15:30:12 +00:00
<?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 laction
* @param bool|int|string $mode
* - -1 : renvoyer action, arg et hash sous forme de array()
* - true ou false : renvoyer une url, avec `&amp;` (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 `&amp;` (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 laction
* @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 `&amp;` (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;
}