1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/spip_ynh.git synced 2024-09-03 20:25:59 +02:00
spip_ynh/sources/ecrire/inc/pipelines.php
2015-04-28 17:10:23 +02:00

238 lines
6.9 KiB
PHP

<?php
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2014 *
* 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. *
\***************************************************************************/
/**
* Fonctions déclarées dans des pipelines (espace public)
*
* @package SPIP\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
* car cela empêche un double appel (multi calcul en cache cool,
* ou erreur de l'espace privé)
*
* @see f_jQuery_prive()
* @link http://doc.spip.org/@f_jQuery
*
* @param string $texte Contenu qui sera inséré dans le head HTML
* @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.form.js',
'javascript/jquery.autosave.js',
'javascript/jquery.placeholder-label.js',
'javascript/ajaxCallback.js',
'javascript/jquery.cookie.js'
));
foreach (array_unique($jquery_plugins) as $script)
if ($script = find_in_path($script))
$x .= "\n<script src=\"$script\" type=\"text/javascript\"></script>\n";
$texte = $x.$texte;
return $texte;
}
/**
* 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
*
* @param string $texte Contenu de la page envoyée au navigateur
* @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');
return surligner_mots($texte, $rech);
}
/**
* 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
*
* @param string $texte Contenu de la page envoyée au navigateur
* @return string Contenu de la page envoyée au navigateur
**/
function f_tidy ($texte) {
/**
* Indentation à faire ?
*
* - true : actif.
* - false par défaut.
*/
global $xhtml;
if ($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($xhtml)) $xhtml ='tidy';
if (!$f = charger_fonction($xhtml, 'inc', true)) {
spip_log("tidy absent, l'indenteur SPIP le remplace");
$f = charger_fonction('sax', 'xml');
}
return $f($texte);
}
return $texte;
}
/**
* Offre #INSERT_HEAD sur tous les squelettes (bourrin)
*
* À activer dans mes_options via :
* $GLOBALS['spip_pipeline']['affichage_final'] .= '|f_insert_head';
*
* Ajoute le contenu du pipeline insert head dans la page HTML
* si cela n'a pas été fait.
*
* @param string $texte Contenu de la page envoyée au navigateur
* @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;
}
/**
* Insérer au besoin les boutons admins
*
* Cette fonction est appelée par le pipeline affichage_final
*
* @param string $texte Contenu de la page envoyée au navigateur
* @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')
. ">"
. _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;
}
/**
* 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
*
* @see f_afficher_blocs_ecrire()
*
* @param array $flux Description et contenu de l'inclusion
* @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);
}
/**
* Gérer le lancement du cron si des tâches sont en attente
*
* Cette fonction est appelée par le pipeline affichage_final
*
* @param string $texte Contenu de la page envoyée au navigateur
* @return string Contenu de la page envoyée au navigateur
*/
function f_queue(&$texte){
// eviter une inclusion si rien a faire
if (_request('action')=='cron'
OR queue_sleep_time_to_next_job()
OR defined('_DEBUG_BLOCK_QUEUE')){
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 !$GLOBALS['html'])
return $texte;
// 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
$texte .= $code;
return $texte;
}
?>