Dépôt officiel du core SPIP * Copie possible par svn sur svn://trac.rezo.net/spip * Les svn:externals sont présent dans https://git.spip.net/SPIP/[nom du plugin dist]
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.

282 lines
7.6 KiB

<?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. *
\***************************************************************************/
/**
10 years ago
* Fonctions déclarées dans des pipelines (espace public)
*
* @package SPIP\Core\Pipelines
**/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
if (test_espace_prive()) {
include_spip('inc/pipelines_ecrire');
}
/**
* Inserer jQuery et ses plugins
*
* La fonction ajoute les balises scripts dans le texte qui appelent
* les scripts jQuery ainsi que certains de ses plugins. La liste
* des js chargée peut être complété par le pipeline 'jquery_plugins'
*
* Cette fonction est appelée par le pipeline insert_head
*
* @internal
* Ne pas vérifier ici qu'on ne doublonne pas `#INSERT_HEAD`
10 years ago
* car cela empêche un double appel (multi calcul en cache cool,
* ou erreur de l'espace privé)
*
* @see f_jQuery_prive()
* @pipeline insert_head
* @pipeline_appel jquery_plugins
*
* @param string $texte Contenu qui sera inséré dans le head HTML
10 years ago
* @return string Contenu qui sera inséré dans le head HTML
**/
function f_jQuery($texte) {
$x = '';
$jquery_plugins = pipeline('jquery_plugins',
array(
'javascript/jquery.js',
'javascript/jquery-migrate-3.2.0.js',
'javascript/jquery.form.js',
'javascript/jquery.autosave.js',
'javascript/jquery.placeholder-label.js',
'javascript/ajaxCallback.js',
'javascript/js.cookie.js',
'javascript/jquery.cookie.js'
));
foreach (array_unique($jquery_plugins) as $script) {
if ($script = find_in_path(supprimer_timestamp($script))) {
$script = timestamp($script);
$x .= "\n<script src=\"$script\" type=\"text/javascript\"></script>\n";
}
}
$texte = $x . $texte;
return $texte;
}
10 years ago
/**
* Traiter var_recherche ou le referrer pour surligner les mots
*
* Surligne les mots de la recherche (si var_recherche est présent)
* ou des réferers (si la constante _SURLIGNE_RECHERCHE_REFERERS est
* définie à true) dans un texte HTML
*
* Cette fonction est appelée par le pipeline affichage_final
*
* @pipeline affichage_final
*
* @param string $texte Contenu de la page envoyée au navigateur
10 years ago
* @return string Contenu de la page envoyée au navigateur
**/
function f_surligne($texte) {
if (!$GLOBALS['html']) {
return $texte;
}
$rech = _request('var_recherche');
if (!$rech
and (!defined('_SURLIGNE_RECHERCHE_REFERERS')
or !_SURLIGNE_RECHERCHE_REFERERS
or !isset($_SERVER['HTTP_REFERER']))
) {
return $texte;
}
include_spip('inc/surligne');
if (isset($_SERVER['HTTP_REFERER'])) {
$_SERVER['HTTP_REFERER'] = preg_replace(',[^\w\,/#&;-]+,', ' ', $_SERVER['HTTP_REFERER']);
}
if ($rech){
$rech = preg_replace(',[^\w\,/#&;-]+,', ' ', $rech);
}
return surligner_mots($texte, $rech);
}
10 years ago
/**
* Indente un code HTML
*
* Indente et valide un code HTML si la globale 'xhtml' est
* définie à true.
*
* Cette fonction est appelée par le pipeline affichage_final
*
* @pipeline affichage_final
*
* @param string $texte Contenu de la page envoyée au navigateur
10 years ago
* @return string Contenu de la page envoyée au navigateur
**/
function f_tidy($texte) {
10 years ago
/**
* Indentation à faire ?
*
* - true : actif.
* - false par défaut.
*/
if ($GLOBALS['xhtml'] # tidy demande
and $GLOBALS['html'] # verifie que la page avait l'entete text/html
and strlen($texte)
and !headers_sent()
) {
# Compatibilite ascendante
if (!is_string($GLOBALS['xhtml'])) {
$GLOBALS['xhtml'] = 'tidy';
}
if (!$f = charger_fonction($GLOBALS['xhtml'], 'inc', true)) {
spip_log("tidy absent, l'indenteur SPIP le remplace");
$f = charger_fonction('sax', 'xml');
}
return $f($texte);
}
return $texte;
}
10 years ago
/**
* Offre `#INSERT_HEAD` sur tous les squelettes (bourrin)
10 years ago
*
* À activer dans mes_options via :
* `$GLOBALS['spip_pipeline']['affichage_final'] .= '|f_insert_head';`
10 years ago
*
* Ajoute le contenu du pipeline insert head dans la page HTML
* si cela n'a pas été fait.
*
* @pipeline_appel insert_head
*
* @param string $texte Contenu de la page envoyée au navigateur
10 years ago
* @return string Contenu de la page envoyée au navigateur
**/
function f_insert_head($texte) {
if (!$GLOBALS['html']) {
return $texte;
}
include_spip('public/admin'); // pour strripos
($pos = stripos($texte, '</head>'))
|| ($pos = stripos($texte, '<body>'))
|| ($pos = 0);
if (false === strpos(substr($texte, 0, $pos), '<!-- insert_head -->')) {
$insert = "\n" . pipeline('insert_head', '<!-- f_insert_head -->') . "\n";
$texte = substr_replace($texte, $insert, $pos, 0);
}
return $texte;
}
10 years ago
/**
* Insérer au besoin les boutons admins
*
10 years ago
* Cette fonction est appelée par le pipeline affichage_final
*
* @pipeline affichage_final
* @uses affiche_boutons_admin()
*
* @param string $texte Contenu de la page envoyée au navigateur
10 years ago
* @return string Contenu de la page envoyée au navigateur
**/
function f_admin($texte) {
if (defined('_VAR_PREVIEW') and _VAR_PREVIEW and $GLOBALS['html']) {
include_spip('inc/filtres'); // pour http_img_pack
$x = "<div class='spip-previsu' "
. http_style_background('preview-32.png', '', 32)
. ">"
. _T('previsualisation')
. "</div>";
if (!$pos = stripos($texte, '</body>')) {
$pos = strlen($texte);
}
$texte = substr_replace($texte, $x, $pos, 0);
}
if (isset($GLOBALS['affiche_boutons_admin']) and $GLOBALS['affiche_boutons_admin']) {
include_spip('public/admin');
$texte = affiche_boutons_admin($texte);
}
if (_request('var_mode') == 'noajax') {
$texte = preg_replace(',(class=[\'"][^\'"]*)ajax([^\'"]*[\'"]),Uims', "\\1\\2", $texte);
}
return $texte;
}
10 years ago
/**
* Actions sur chaque inclusion
*
* Appelle f_afficher_blocs_ecrire() sur les inclusions dans l'espace privé.
* Ne change rien dans l'espace public.
*
* Cette fonction est appelée par le pipeline recuperer_fond
10 years ago
*
* @uses f_afficher_blocs_ecrire()
* @pipeline recuperer_fond
*
* @param array $flux Description et contenu de l'inclusion
10 years ago
* @return array $flux Description et contenu de l'inclusion
**/
function f_recuperer_fond($flux) {
if (!test_espace_prive()) {
return $flux;
}
return f_afficher_blocs_ecrire($flux);
}
Intégration d'une gestion de files de taches (initialement le plugin job_queue) en remplacement du système de cron periodique La declaration de taches periodiques reste identique a auparavant (pipeline taches_generales_cron) La balise #SPIP_CRON disparait, remplacee par un declenchement en fin de hit uniquement quand une tache est en attente. Pour le declenchement, on utilise preferentiellement un socket, et a defaut une image background comme avant. Lors d'un appel, le sequenceur execute autant de taches en attente que possible, dans la limite d'un temps donné. Des appels concurents peuvent se jouer, mais chaque tache est executee une unique fois par une seule instance. L'unicité de l'execution est garantie par un sql_delete. SI jamais le nombre de taches en attente depasse un seuil (10000 par defaut) la file est purgee par un appel en fin de hit, synchrone. Une page d'aministration est accesible aux administrateurs depuis le menu maintenance. L'API est /** * Ajout d'une tache dans la file d'attente * * @param $function * The function name to call. * @param $description * A human-readable description of the queued job. * @param $arguments * Optional array of arguments to pass to the function. * @param $file * Optional file path which needs to be included for $fucntion. * @param $no_duplicate * If TRUE, do not add the job to the queue if one with the same function and * arguments already exists. * @param $time * time for starting the job. If 0, job will start as soon as possible * @param $priority * -10 (low priority) to +10 (high priority), 0 is the default * @return int * id of job */ function job_queue_add($function, $description, $arguments = array(), $file = '', $no_duplicate = FALSE, $time=0, $priority=0) /** * Supprimer une tache de la file d'attente * @param int $id_job * id of jonb to delete * @return bool */ function job_queue_remove($id_job) /** * Associer une tache a un/des objets de SPIP * @param int $id_job * id of job to link * @param array $objets * can be a simple array('objet'=>'article','id_objet'=>23) * or an array of simple array to link multiples objet in one time */ function job_queue_link($id_job,$objets)
12 years ago
10 years ago
/**
* Gérer le lancement du cron si des tâches sont en attente
*
* @pipeline affichage_final
* @uses queue_sleep_time_to_next_job()
* @uses queue_affichage_cron()
*
* @param string $texte Contenu de la page envoyée au navigateur
10 years ago
* @return string Contenu de la page envoyée au navigateur
*/
function f_queue($texte) {
Intégration d'une gestion de files de taches (initialement le plugin job_queue) en remplacement du système de cron periodique La declaration de taches periodiques reste identique a auparavant (pipeline taches_generales_cron) La balise #SPIP_CRON disparait, remplacee par un declenchement en fin de hit uniquement quand une tache est en attente. Pour le declenchement, on utilise preferentiellement un socket, et a defaut une image background comme avant. Lors d'un appel, le sequenceur execute autant de taches en attente que possible, dans la limite d'un temps donné. Des appels concurents peuvent se jouer, mais chaque tache est executee une unique fois par une seule instance. L'unicité de l'execution est garantie par un sql_delete. SI jamais le nombre de taches en attente depasse un seuil (10000 par defaut) la file est purgee par un appel en fin de hit, synchrone. Une page d'aministration est accesible aux administrateurs depuis le menu maintenance. L'API est /** * Ajout d'une tache dans la file d'attente * * @param $function * The function name to call. * @param $description * A human-readable description of the queued job. * @param $arguments * Optional array of arguments to pass to the function. * @param $file * Optional file path which needs to be included for $fucntion. * @param $no_duplicate * If TRUE, do not add the job to the queue if one with the same function and * arguments already exists. * @param $time * time for starting the job. If 0, job will start as soon as possible * @param $priority * -10 (low priority) to +10 (high priority), 0 is the default * @return int * id of job */ function job_queue_add($function, $description, $arguments = array(), $file = '', $no_duplicate = FALSE, $time=0, $priority=0) /** * Supprimer une tache de la file d'attente * @param int $id_job * id of jonb to delete * @return bool */ function job_queue_remove($id_job) /** * Associer une tache a un/des objets de SPIP * @param int $id_job * id of job to link * @param array $objets * can be a simple array('objet'=>'article','id_objet'=>23) * or an array of simple array to link multiples objet in one time */ function job_queue_link($id_job,$objets)
12 years ago
// eviter une inclusion si rien a faire
if (_request('action') == 'cron'
or queue_sleep_time_to_next_job() > 0
or defined('_DEBUG_BLOCK_QUEUE')
) {
Intégration d'une gestion de files de taches (initialement le plugin job_queue) en remplacement du système de cron periodique La declaration de taches periodiques reste identique a auparavant (pipeline taches_generales_cron) La balise #SPIP_CRON disparait, remplacee par un declenchement en fin de hit uniquement quand une tache est en attente. Pour le declenchement, on utilise preferentiellement un socket, et a defaut une image background comme avant. Lors d'un appel, le sequenceur execute autant de taches en attente que possible, dans la limite d'un temps donné. Des appels concurents peuvent se jouer, mais chaque tache est executee une unique fois par une seule instance. L'unicité de l'execution est garantie par un sql_delete. SI jamais le nombre de taches en attente depasse un seuil (10000 par defaut) la file est purgee par un appel en fin de hit, synchrone. Une page d'aministration est accesible aux administrateurs depuis le menu maintenance. L'API est /** * Ajout d'une tache dans la file d'attente * * @param $function * The function name to call. * @param $description * A human-readable description of the queued job. * @param $arguments * Optional array of arguments to pass to the function. * @param $file * Optional file path which needs to be included for $fucntion. * @param $no_duplicate * If TRUE, do not add the job to the queue if one with the same function and * arguments already exists. * @param $time * time for starting the job. If 0, job will start as soon as possible * @param $priority * -10 (low priority) to +10 (high priority), 0 is the default * @return int * id of job */ function job_queue_add($function, $description, $arguments = array(), $file = '', $no_duplicate = FALSE, $time=0, $priority=0) /** * Supprimer une tache de la file d'attente * @param int $id_job * id of jonb to delete * @return bool */ function job_queue_remove($id_job) /** * Associer une tache a un/des objets de SPIP * @param int $id_job * id of job to link * @param array $objets * can be a simple array('objet'=>'article','id_objet'=>23) * or an array of simple array to link multiples objet in one time */ function job_queue_link($id_job,$objets)
12 years ago
return $texte;
}
include_spip('inc/queue');
$code = queue_affichage_cron();
// si rien a afficher
// ou si on est pas dans une page html, on ne sait rien faire de mieux
if (!$code or !isset($GLOBALS['html']) or !$GLOBALS['html']) {
Intégration d'une gestion de files de taches (initialement le plugin job_queue) en remplacement du système de cron periodique La declaration de taches periodiques reste identique a auparavant (pipeline taches_generales_cron) La balise #SPIP_CRON disparait, remplacee par un declenchement en fin de hit uniquement quand une tache est en attente. Pour le declenchement, on utilise preferentiellement un socket, et a defaut une image background comme avant. Lors d'un appel, le sequenceur execute autant de taches en attente que possible, dans la limite d'un temps donné. Des appels concurents peuvent se jouer, mais chaque tache est executee une unique fois par une seule instance. L'unicité de l'execution est garantie par un sql_delete. SI jamais le nombre de taches en attente depasse un seuil (10000 par defaut) la file est purgee par un appel en fin de hit, synchrone. Une page d'aministration est accesible aux administrateurs depuis le menu maintenance. L'API est /** * Ajout d'une tache dans la file d'attente * * @param $function * The function name to call. * @param $description * A human-readable description of the queued job. * @param $arguments * Optional array of arguments to pass to the function. * @param $file * Optional file path which needs to be included for $fucntion. * @param $no_duplicate * If TRUE, do not add the job to the queue if one with the same function and * arguments already exists. * @param $time * time for starting the job. If 0, job will start as soon as possible * @param $priority * -10 (low priority) to +10 (high priority), 0 is the default * @return int * id of job */ function job_queue_add($function, $description, $arguments = array(), $file = '', $no_duplicate = FALSE, $time=0, $priority=0) /** * Supprimer une tache de la file d'attente * @param int $id_job * id of jonb to delete * @return bool */ function job_queue_remove($id_job) /** * Associer une tache a un/des objets de SPIP * @param int $id_job * id of job to link * @param array $objets * can be a simple array('objet'=>'article','id_objet'=>23) * or an array of simple array to link multiples objet in one time */ function job_queue_link($id_job,$objets)
12 years ago
return $texte;
}
Intégration d'une gestion de files de taches (initialement le plugin job_queue) en remplacement du système de cron periodique La declaration de taches periodiques reste identique a auparavant (pipeline taches_generales_cron) La balise #SPIP_CRON disparait, remplacee par un declenchement en fin de hit uniquement quand une tache est en attente. Pour le declenchement, on utilise preferentiellement un socket, et a defaut une image background comme avant. Lors d'un appel, le sequenceur execute autant de taches en attente que possible, dans la limite d'un temps donné. Des appels concurents peuvent se jouer, mais chaque tache est executee une unique fois par une seule instance. L'unicité de l'execution est garantie par un sql_delete. SI jamais le nombre de taches en attente depasse un seuil (10000 par defaut) la file est purgee par un appel en fin de hit, synchrone. Une page d'aministration est accesible aux administrateurs depuis le menu maintenance. L'API est /** * Ajout d'une tache dans la file d'attente * * @param $function * The function name to call. * @param $description * A human-readable description of the queued job. * @param $arguments * Optional array of arguments to pass to the function. * @param $file * Optional file path which needs to be included for $fucntion. * @param $no_duplicate * If TRUE, do not add the job to the queue if one with the same function and * arguments already exists. * @param $time * time for starting the job. If 0, job will start as soon as possible * @param $priority * -10 (low priority) to +10 (high priority), 0 is the default * @return int * id of job */ function job_queue_add($function, $description, $arguments = array(), $file = '', $no_duplicate = FALSE, $time=0, $priority=0) /** * Supprimer une tache de la file d'attente * @param int $id_job * id of jonb to delete * @return bool */ function job_queue_remove($id_job) /** * Associer une tache a un/des objets de SPIP * @param int $id_job * id of job to link * @param array $objets * can be a simple array('objet'=>'article','id_objet'=>23) * or an array of simple array to link multiples objet in one time */ function job_queue_link($id_job,$objets)
12 years ago
// inserer avant le </body> fermant si on peut, a la fin de la page sinon
if (($p = strpos($texte, '</body>')) !== false) {
$texte = substr($texte, 0, $p) . $code . substr($texte, $p);
} else {
Intégration d'une gestion de files de taches (initialement le plugin job_queue) en remplacement du système de cron periodique La declaration de taches periodiques reste identique a auparavant (pipeline taches_generales_cron) La balise #SPIP_CRON disparait, remplacee par un declenchement en fin de hit uniquement quand une tache est en attente. Pour le declenchement, on utilise preferentiellement un socket, et a defaut une image background comme avant. Lors d'un appel, le sequenceur execute autant de taches en attente que possible, dans la limite d'un temps donné. Des appels concurents peuvent se jouer, mais chaque tache est executee une unique fois par une seule instance. L'unicité de l'execution est garantie par un sql_delete. SI jamais le nombre de taches en attente depasse un seuil (10000 par defaut) la file est purgee par un appel en fin de hit, synchrone. Une page d'aministration est accesible aux administrateurs depuis le menu maintenance. L'API est /** * Ajout d'une tache dans la file d'attente * * @param $function * The function name to call. * @param $description * A human-readable description of the queued job. * @param $arguments * Optional array of arguments to pass to the function. * @param $file * Optional file path which needs to be included for $fucntion. * @param $no_duplicate * If TRUE, do not add the job to the queue if one with the same function and * arguments already exists. * @param $time * time for starting the job. If 0, job will start as soon as possible * @param $priority * -10 (low priority) to +10 (high priority), 0 is the default * @return int * id of job */ function job_queue_add($function, $description, $arguments = array(), $file = '', $no_duplicate = FALSE, $time=0, $priority=0) /** * Supprimer une tache de la file d'attente * @param int $id_job * id of jonb to delete * @return bool */ function job_queue_remove($id_job) /** * Associer une tache a un/des objets de SPIP * @param int $id_job * id of job to link * @param array $objets * can be a simple array('objet'=>'article','id_objet'=>23) * or an array of simple array to link multiples objet in one time */ function job_queue_link($id_job,$objets)
12 years ago
$texte .= $code;
}
Intégration d'une gestion de files de taches (initialement le plugin job_queue) en remplacement du système de cron periodique La declaration de taches periodiques reste identique a auparavant (pipeline taches_generales_cron) La balise #SPIP_CRON disparait, remplacee par un declenchement en fin de hit uniquement quand une tache est en attente. Pour le declenchement, on utilise preferentiellement un socket, et a defaut une image background comme avant. Lors d'un appel, le sequenceur execute autant de taches en attente que possible, dans la limite d'un temps donné. Des appels concurents peuvent se jouer, mais chaque tache est executee une unique fois par une seule instance. L'unicité de l'execution est garantie par un sql_delete. SI jamais le nombre de taches en attente depasse un seuil (10000 par defaut) la file est purgee par un appel en fin de hit, synchrone. Une page d'aministration est accesible aux administrateurs depuis le menu maintenance. L'API est /** * Ajout d'une tache dans la file d'attente * * @param $function * The function name to call. * @param $description * A human-readable description of the queued job. * @param $arguments * Optional array of arguments to pass to the function. * @param $file * Optional file path which needs to be included for $fucntion. * @param $no_duplicate * If TRUE, do not add the job to the queue if one with the same function and * arguments already exists. * @param $time * time for starting the job. If 0, job will start as soon as possible * @param $priority * -10 (low priority) to +10 (high priority), 0 is the default * @return int * id of job */ function job_queue_add($function, $description, $arguments = array(), $file = '', $no_duplicate = FALSE, $time=0, $priority=0) /** * Supprimer une tache de la file d'attente * @param int $id_job * id of jonb to delete * @return bool */ function job_queue_remove($id_job) /** * Associer une tache a un/des objets de SPIP * @param int $id_job * id of job to link * @param array $objets * can be a simple array('objet'=>'article','id_objet'=>23) * or an array of simple array to link multiples objet in one time */ function job_queue_link($id_job,$objets)
12 years ago
return $texte;
}