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.
 
 
 

165 lines
3.7 KiB

<?php
/**
* Utilisations de pipelines
*
* @package SPIP\Compagnon\Pipelines
**/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Ajoute les aides du compagnon sur le pipeline affiche milieu
*
* @pipeline affiche_milieu
*
* @param array $flux
* Données du pipeline
* @return array
* Données du pipeline
**/
function compagnon_affiche_milieu($flux) {
return compagnonage($flux, 'affiche_milieu');
}
/**
* Ajoute les aides du compagnon sur le pipeline affiche gauche
*
* @pipeline affiche_gauche
*
* @param array $flux
* Données du pipeline
* @return array
* Données du pipeline
**/
function compagnon_affiche_gauche($flux) {
return compagnonage($flux, 'affiche_gauche');
}
/**
* Ajoute les aides du compagnon sur le pipeline affiche droite
*
* @pipeline affiche_droite
*
* @param array $flux
* Données du pipeline
* @return array
* Données du pipeline
**/
function compagnon_affiche_droite($flux) {
return compagnonage($flux, 'affiche_droite');
}
/**
* Ajoute l'aide du compagnon dans un pipeline
*
* Les aides sont ajoutées
* - si la config le permet
* - si l'aide n'a pas déjà été validée par le visiteur
*
* @pipeline_appel compagnon_messages
*
* @param array $flux
* Flux d'informations transmises au pipeline
* @param string $pipeline
* Nom du pipeline d'origine
* @return array $flux
* Le flux éventuellement complété de l'aide du compagnon
**/
function compagnonage($flux, $pipeline) {
// pas de compagnon souhaite ?
include_spip('inc/config');
if (lire_config('compagnon/config/activer') == 'non') {
return $flux;
}
$moi = $GLOBALS['visiteur_session'];
$deja_vus = lire_config('compagnon/' . $moi['id_auteur']);
// si cet auteur ne veut rien voir… bah… pas la peine de continuer
if (isset($deja_vus['all']) and $deja_vus['all']) {
return $flux;
}
$flux['args']['pipeline'] = $pipeline;
$flux['args']['deja_vus'] = $deja_vus;
$aides = pipeline('compagnon_messages', ['args' => $flux['args'], 'data' => []]);
if (!$aides) {
return $flux;
}
$ajouts = '';
foreach ($aides as $aide) {
// restreindre l'affichage par statut d'auteur
$ok = true;
if (isset($aide['statuts']) and $statuts = $aide['statuts']) {
$ok = false;
if (!is_array($statuts)) {
$statuts = [$statuts];
}
if (in_array('webmestre', $statuts) and ($moi['webmestre'] == 'oui')) {
$ok = true;
} elseif (in_array($moi['statut'], $statuts)) {
$ok = true;
}
}
// si c'est ok, mais que l'auteur a deja lu ca. On s'arrete.
if ($ok and is_array($deja_vus) and isset($deja_vus[$aide['id']]) and $deja_vus[$aide['id']]) {
$ok = false;
}
if ($ok) {
// demande d'un squelette
if (isset($aide['inclure']) and $inclure = $aide['inclure']) {
unset($aide['inclure']);
$ajout = recuperer_fond($inclure, array_merge($flux['args'], $aide), ['ajax' => true]);
} // sinon les textes sont fournis
else {
$ajout = recuperer_fond('compagnon/_boite', $aide, ['ajax' => true]);
}
$ajouts .= $ajout;
}
}
// ajout de nos trouvailles
if ($ajouts) {
$twinkle = find_in_path('prive/javascript/jquery.twinkle.js');
$ajouts .= <<<JS
<script type="text/javascript">
jQuery.getScript('$twinkle',function(){
jQuery(function(){
var options = {
"effect": "drop",
"effectOptions": {
"color": "rgba(255,96,96,1)",
"radius": 50
}
};
jQuery('.compagnon .target').each(function(){
var target = jQuery(this).attr('data-target');
var delay = 0;
jQuery(this).mousemove(function(){
if (!delay) {
delay=1; setTimeout(function(){delay=0;}, 800);
jQuery(target).twinkle(options);
}
});
});
});
});
</script>
JS;
$flux['data'] = $ajouts . $flux['data'];
}
return $flux;
}