tradlang_pipelines.php 6,32 Kio
<?php
/**
* Trad-lang v2
* Plugin SPIP de traduction de fichiers de langue
* © Florent Jugla, Fil, kent1
*
* Fichier des pipelines utilisés par le plugin
*
* @package SPIP\Tradlang\Pipelines
*/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Insertion dans le pipelines taches_generales_cron (SPIP)
*
* On ajoute une tache cron toutes les 4 minutes afin de créer les premières révisions des
* tradlang pour éviter de perdre du temps par la suite.
* Une autre tâche CRON "maintenance" toutes les 24h pour diverses opérations.
*
* @param array $taches_generales
* Le tableau des taches à réaliser
* @return array $taches_generales
* Le tableau des taches complété
*/
function tradlang_taches_generales_cron($taches_generales) {
$taches_generales['tradlang_verifier_versions'] = 240;
$taches_generales['tradlang_maintenance'] = 24 * 3600;
return $taches_generales;
}
/**
* Insertion dans le pipeline pre_edition (SPIP)
*
* Ajouter les langues_preferees soumises lors de la soumission du formulaire CVT editer_auteur
* Si quelque chose est sélectionné, on le serialize pour le mettre en base, sinon on serialize un array
* pour toujours avoir quelquechose
*
* @param array $flux
* Le contexte du pipeline
* @return array $flux
* Le contexte du pipeline auquel on a ajouté ce que l'on souhaite
*/
function tradlang_pre_edition($flux) {
if ($flux['args']['table'] == 'spip_auteurs') {
if (is_array($langues_preferees = _request('langues_preferees'))) {
$flux['data']['langues_preferees'] = serialize($langues_preferees);
} else {
$flux['data']['langues_preferees'] = serialize([]);
}
}
return $flux;
}
/**
* Insertion dans le pipeline post_edition (SPIP)
*
* Si configuré comme tel on regénère les fichiers à chaque modification de chaine de langue
* On n'agit que sur les conditions suivantes :
* -* on modifier la table spip_tradlangs
* -* on a activé la sauvegarde locale
* -* on a activé la sauvegarde locale au moment de la post-edition
*
* @param array $flux
* Le contexte du pipeline
* @return array $flux
* Le contexte du pipeline qui n'est jamais modifié
*/
function tradlang_post_edition($flux) {
if ($flux['args']['table'] == 'spip_tradlangs') {
include_spip('inc/config');
$config = lire_config('tradlang');
if (!is_array($config)) {
return $flux;
} elseif (
($config['sauvegarde_locale'] ?? null) === 'on'
&& ($config['sauvegarde_post_edition'] ?? null) === 'on'
) {
include_spip('tradlang_fonctions');
if ($dir_lang = tradlang_dir_lang()) {
$infos = sql_fetsel('lang,module', $flux['args']['table'], 'id_tradlang=' . (int) $flux['args']['id_objet']);
$module = sql_fetsel('*', 'spip_tradlang_modules', 'module=' . sql_quote($infos['module']));
$sauvegarder_module = charger_fonction('tradlang_sauvegarde_module', 'inc');
$sauvegarder_module($module['module'], $infos['lang'], $dir_lang);
}
}
}
return $flux;
}
/**
* Insertion dans le pipeline pre_boucle (SPIP)
*
* Si on est dans la boucle calculer_langues_utilisees (utilisée dans un formulaire de configuration de l'espace privé),
* on ne renvoit pas les langues des tradlangs pour éviter de bloquer ces langues dans la configuration du multilinguisme
*
* @param object $boucle
* @return object $boucle
*/
function tradlang_pre_boucle($boucle) {
$id_table = null;
if (isset($boucle->nom) && $boucle->nom == 'calculer_langues_utilisees' && $boucle->id_boucle == 'tradlangs') {
array_unshift($boucle->where, ["'='", "'$id_table." . "id_tradlang'", "'0'"]);
}
return $boucle;
}
/**
* Insertion dans le pipeline affiche_milieu (SPIP)
*
* Sur la fiche des auteurs, on ajoute la liste des révisions de chaines de l'auteur
*
* @param array $flux
* Le contexte du pipeline
* @return array $flux
* Le contexte modifié si besoin
*/
function tradlang_affiche_milieu($flux) {
if (($flux['args']['exec'] == 'auteur') && ((int) $flux['args']['id_auteur'] > 0)) {
$texte = recuperer_fond(
'prive/objets/liste/versions',
[
'objet' => 'tradlang',
'id_auteur' => (int) $flux['args']['id_auteur']
]
);
$flux['data'] .= $texte;
}
return $flux;
}
/**
* Insertion dans le pipeline editer_contenu_objet (SPIP)
*
* Ajouter un champ langues préférées sur le formulaire CVT editer_auteur
*
* @param array $flux
* @return array
*/
function tradlang_editer_contenu_objet($flux) {
if ($flux['args']['type'] == 'auteur') {
$langue_preferee = recuperer_fond('formulaires/inc-langues_preferees', $flux['args']['contexte']);
$flux['data'] = preg_replace('%(<div class=["\'][^"\']*editer_bio(.*?)</div>)%is', "\n" . $langue_preferee . "\n" . '$1', $flux['data']);
}
return $flux;
}
/**
* Insertion dans le pipeline formulaire_charger (SPIP)
*
* Ajouter la valeur langues_preferees dans la liste des champs de la fiche auteur
*
* @param array $flux
* Le contexte du pipeline
* @return array $flux
* Le contexte du pipeline modifié
*/
function tradlang_formulaire_charger($flux) {
// si le charger a renvoye false ou une chaine, ne rien faire
if (is_array($flux['data']) && $flux['args']['form'] == 'editer_auteur') {
$flux['data']['langues_preferees'] = '';
if ($id_auteur = (int) $flux['data']['id_auteur']) {
$flux['data']['langues_preferees'] = sql_getfetsel('langues_preferees', 'spip_auteurs', 'id_auteur=' . (int) $id_auteur);
}
}
return $flux;
}
/**
* Insertion dans le pipeline forum_objets_depuis_env (Plugin Forum)
* On ajoute la possibilité d'avoir des forums sur les chaines de langue
*
* @param array $array
* @return array $array
*/
function tradlang_forum_objets_depuis_env($array) {
$array['tradlang'] = id_table_objet('tradlang');
return $array;
}
/**
* Insertion dans le pipeline revisions_chercher_label (Plugin révisions)
* Utiliser de bons labels pour nos champs sous révision
*
* @param array $flux
* Le contexte du pipeline
* @return array $flux
* Le contexte du pipeline modifié
*/
function tradlang_revisions_chercher_label($flux) {
if ($flux['args']['objet'] == 'tradlang' && in_array($flux['args']['champ'], ['str', 'traducteur', 'statut'])) {
$flux['data'] = 'tradlang:info_' . $flux['args']['champ'];
}
return $flux;
}
function tradlang_grappes_objets_lies($flux) {
if (is_array($flux) && !isset($flux['tradlang_modules'])) {
$flux['tradlang_modules'] = _T('tradlang:item_groupes_association_modules');
}
return $flux;
}