spip_nursit/ecrire/inc/actions.php
2023-06-01 17:30:12 +02:00

152 lines
5.7 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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;
}