Compare commits

...

132 Commits

Author SHA1 Message Date
Pierretux 2e60c6c306 build: v1.5.1 4 weeks ago
Pierretux 6a39549a4b Merge pull request 'issue_30' (#31) from issue_30 into master
Reviewed-on: #31
4 weeks ago
RealET b46dd135e0 style : suivre les bonnes pratique pour produire une CSS statique 4 weeks ago
RealET 58a9a60a1f fix #30 : un warning PHP en moins (dans le squelette) 4 weeks ago
Pierretux d499fcc11c chore: il faut mettre des datas ici et plus des data 3 months ago
paidge caaafd8074 Mise à jour de 'paquet.xml'
compatibilité SPIP 4.2
3 months ago
Pierretux 8fabf09480 v1.5.0 4 months ago
Pierretux 093c465d80 build : gestion de eulerian et améliorations sur les surcharges d'un site 4 months ago
Pierretux bd67568e4d Si on utilise le service atinternet, bien mettre en base l'url du service et plus que l'id 4 months ago
Pierretux ec072df761 Pour les services qui ont une section "More" dans le script, on peut géré cette partie en fournissant un fichier service/nom_service.html qui sera pris en compte 4 months ago
Pierretux 189390032a afficher les saisies dans le php avant le traitement, plus logique 4 months ago
Pierretux 1c1e048fc4 unset le service concerné pour ne pas le garder en mémoire suite au renommage 4 months ago
Pierretux 48ea9b4ac8 Fix #29 : Notice en moins sur php 8.1 4 months ago
Pierre KUHN 273589b13a build : maj des modeles suite à la Maj de la lib 4 months ago
Pierre KUHN 3e8e80f4db build : Maj librairie TAC 4 months ago
Pierre KUHN eee9bd8753 fix : quand on utilise le service atinternet mettre l'url dans la meta, ordre alpha pour les services 4 months ago
pierrekuhn87 e1c9665538 Merge branch 'master' of https://git.spip.net/spip-contrib-extensions/tarteaucitron 7 months ago
pierrekuhn87 af07a204d5 v1.4.2 : quand on utilise le porte plume, ne pas mettre 2 fois tac_ 7 months ago
pierrekuhn87 4172c047a7 v1.4.2 : quand on utilise le porte plume, ne pas mettre 2 fois tac_ 7 months ago
Salvatore 75c44eab7b [Salvatore] [source:lang/ tarteaucitron] Export depuis https://trad.spip.net de la langue fr
[Salvatore] [source:lang/ tarteaucitron] Mise a jour du bilan depuis https://trad.spip.net
7 months ago
pierrekuhn87 6d89f84bab v1.4.1 : Mise à jour de Tarteaucitron en 1.9.9 7 months ago
Salvatore 683d8a590a [Salvatore] [source:lang/ tarteaucitron] Export depuis https://trad.spip.net de la langue de
[Salvatore] [source:lang/ tarteaucitron] Export depuis https://trad.spip.net de la langue fr
[Salvatore] [source:lang/ tarteaucitron] Mise a jour du bilan depuis https://trad.spip.net
8 months ago
Salvatore c11a6acfe9 [Salvatore] [source:lang/ paquet-tarteaucitron] Export depuis https://trad.spip.net de la langue de
[Salvatore] [source:lang/ paquet-tarteaucitron] Export depuis https://trad.spip.net de la langue fr
[Salvatore] [source:lang/ paquet-tarteaucitron] Mise a jour du bilan depuis https://trad.spip.net
8 months ago
pierrekuhn87 34c44ec508 fin de ligne vide on supprime 8 months ago
Salvatore f0f9dda9f6 [Salvatore] [source:lang/ tarteaucitron] Export depuis https://trad.spip.net de la langue de
[Salvatore] [source:lang/ tarteaucitron] Export depuis https://trad.spip.net de la langue fr
[Salvatore] [source:lang/ tarteaucitron] Mise a jour du bilan depuis https://trad.spip.net
8 months ago
Salvatore 1c9108ea44 [Salvatore] [source:lang/ paquet-tarteaucitron] Export depuis https://trad.spip.net de la langue de
[Salvatore] [source:lang/ paquet-tarteaucitron] Export depuis https://trad.spip.net de la langue fr
[Salvatore] [source:lang/ paquet-tarteaucitron] Mise a jour du bilan depuis https://trad.spip.net
8 months ago
pierrekuhn87 4c50fc1a70 Merge branch 'master' of https://git.spip.net/spip-contrib-extensions/tarteaucitron 8 months ago
pierrekuhn87 538311dfd4 V1.4.0 8 months ago
Pierretux 40fcec44f3 Merge pull request 'Mise à jour / Configuration des services' (#28) from dev/bogue_services into master
Reviewed-on: #28
8 months ago
pierrekuhn87 b9285dfd88 Merge branch 'dev/maj_lib_197' 8 months ago
Pierretux f7342ae508 Merge pull request 'Config de base' (#27) from dev/bogue_config into master
Reviewed-on: #27
8 months ago
klaus++ 4a9a0e49c6 [Salvatore] [source:lang/ tarteaucitron] Export depuis https://trad.spip.net de la langue de
[Salvatore] [source:lang/ tarteaucitron] Mise a jour du bilan depuis https://trad.spip.net
9 months ago
klaus++ 8eebf6b147 [Salvatore] [source:lang/ paquet-tarteaucitron] Export depuis https://trad.spip.net de la langue de
[Salvatore] [source:lang/ paquet-tarteaucitron] Mise a jour du bilan depuis https://trad.spip.net
9 months ago
pierrekuhn87 3554c00f78 cela ne sert plus 9 months ago
pierrekuhn87 26297c5f8a Mise à jour des services sur un update du plugins sans les ptac_pX qui pouvait changer 9 months ago
Pierre KUHN 413cb14ab4 Quand les services de la lib sont mis à jour : rajout d'un input pour une nouvelle valeur et que l'on utilise déjà un service, on ne pouvait pas le mettre à jour sans le supprimer donc on repasse par le fichier json pour avec la liste des params à mettre à jour. 9 months ago
Pierre KUHN 299bda87b9 Mise à jour des services et on ne garde pas le nom du service avec un id dans la configuration des services car quand la lib rajoute un service cela change les numéro donc on perds la config 9 months ago
Pierre KUHN 4285631b4e mise en page du code 9 months ago
Pierre KUHN 7a2a522f2f On fait le _request sur le $name pour ave le bon service, le replace posait plus de problème que de l'aide en fonction des services. 9 months ago
Pierre KUHN 080975be61 Quand on mets à jour le plugins, on supprime les services sans valeur sinon il reste en base et ne sont pas visible dans la liste des services actifs
Rajouter le ptac_ qui semble sur tout les services désormait.
9 months ago
Pierre KUHN 0780154ab5 La mise à jour des services ne fonctionne pas, on corrige les name des input pour que cela soit fonctionnel + corrige le pipeline pour que les infos soit bien utiliser. 9 months ago
Pierre KUHN 7ca9b972ec Dans le commit 383674f0d7, on passe de twice à both dans le formulaire, en faire de même dans l'installation. 9 months ago
pierrekuhn87 354181a480 maj librairie 1.9.7 11 months ago
Paidge c85da131e3 UP de version 1 year ago
Paidge e928506c56 MAJ de la lib TAC 1 year ago
Pierre-Jean CHANCELLIER ba8711f7cb fix issue #23 : ajout de guillemets autour de cookieDomain 1 year ago
Salvatore 2d540a0013 [Salvatore] [source:lang/ tarteaucitron] Export depuis https://trad.spip.net de la langue de
[Salvatore] [source:lang/ tarteaucitron] Export depuis https://trad.spip.net de la langue fr
[Salvatore] [source:lang/ tarteaucitron] Mise a jour du bilan depuis https://trad.spip.net
2 years ago
paidge 2935475919 mise à jour de la doc 2 years ago
paidge f25027888c meilleure gestion des icônes dans le porte-plume 2 years ago
paidge b811de0142 suppression du pipeline saisies_verifier dans paquet.xml 2 years ago
paidge 5e90243518 saisie personnalisée pour l'upload de l'icône 2 years ago
paidge fe4899a8cc meilleure utilisation du pipeline saisies_verifier 2 years ago
paidge 1fb1c95710 surcharge de la saisie INPUT + utilisation de l'API verifier 2 years ago
paidge e4f9eacbd9 ajout d'une saisie pour l'upload de l'icône + amélioration de la mise en page 2 years ago
paidge 4e9689dd11 suppression de la dépendance à CVTupload 2 years ago
paidge 0f48c3e24d Remplacement du sélecteur de document par un input['file'] 2 years ago
paidge 2477469b46 amélioration du CSS custom 2 years ago
paidge d80109e174 Amélioration du CSS de la bannière TarteAuCitron lorsque les services sont regroupés 2 years ago
paidge c5086040d6 ajout des paramètres closePopup et groupServices 2 years ago
Chancellier Pierre-Jean 8f322b8a5a Ajout des explications pour les modèles 2 years ago
Chancellier Pierre-Jean 02dd431dde amélioration de la génération des modèles pour certains services 2 years ago
Chancellier Pierre-Jean 4193cd5361 tarteaucitron_actif() était KO + amélioration des modèles 2 years ago
Chancellier Pierre-Jean 0d58131e3a Mise à jour des explications dans le back-office 2 years ago
Chancellier Pierre-Jean a8c05f89e7 Gestion des services spécifiques (facebook video) 2 years ago
Chancellier Pierre-Jean eb93edf929 Mise à jour du README 2 years ago
Chancellier Pierre-Jean 92df54af6d Mise à jour de la lib TarteAuCitron 2 years ago
Chancellier Pierre-Jean 5b83a42ed5 Meilleure gestion des services en fonction de leur type 2 years ago
Chancellier Pierre-Jean fea2d75431 Abandon des squelettes pour insérer le JS 2 years ago
Chancellier Pierre-Jean c59a432d53 quelques corrections 2 years ago
Chancellier Pierre-Jean f62a479c0d correction : les services sans paramètres n'étaient plus affichés 2 years ago
Chancellier Pierre-Jean 4213a40512 gestion auto des services avec plusieurs paramètres 2 years ago
Chancellier Pierre-Jean a569f5fe5e ajout auto des input pour les APIkey + écriture des modèles dans le dossier du plugin en attendant une solution 2 years ago
Chancellier Pierre-Jean 31e7647ab6 Amélioration de l'upgrade() 2 years ago
Chancellier Pierre-Jean 383674f0d7 gestion de l'upgrade 2 years ago
Chancellier Pierre-Jean a501d9d706 quelques oublis de renommage avec le namespace 2 years ago
Chancellier Pierre-Jean 31d18de482 renommer le exec avec le spacename 2 years ago
Chancellier Pierre-Jean ed9e3b66a5 écrire dans le dossier squelettes à la racine du site 2 years ago
Chancellier Pierre-Jean 540441bafd New feature : Ajouter des services 2 years ago
Pierretux d46fc7ad6b Maj de la librairie v1.9.5 : accessibilité et nouveaux services 2 years ago
Pierretux 7f9ee0d7a1 V1.2.10 2 years ago
Pierretux fa7b344d09 affichage final pour les page en html et non les flux rss par ex 2 years ago
Pierretux 7d12b2d291 Maj de la lib tarteaucitron 20210509 2 years ago
Pierretux cdffea5ae2 #12 Merger vers Master 2 years ago
jeanmarie fba54b2f72 V1.2.9 suite à #17 2 years ago
paidge e4c753c85e Nom du cookie par défaut
Prend en compte le nom du cookie par défaut si celui-ci n'a pas été paramétré.
2 years ago
Pierre KUHN 32d824f0e7 #16 : ne pas mettre ! car on veut que les page avec du html 2 years ago
Pierre KUHN a28a1f6fbb #16 : ne pas avoir les infos sur les pages RSS par exemple 2 years ago
Pierre KUHN e99a3e1bea Close #18 : Balise fermante double 2 years ago
Salvatore cd7f1d444b [Salvatore] [source:lang/ tarteaucitron] Export depuis https://trad.spip.net de la langue de
[Salvatore] [source:lang/ tarteaucitron] Export depuis https://trad.spip.net de la langue fr
[Salvatore] [source:lang/ tarteaucitron] Mise a jour du bilan depuis https://trad.spip.net
2 years ago
paidge 1f0450e9b1 Merge pull request 'ajout options avancees' (#15) from dev/cfg_avancee into master
Reviewed-on: #15
2 years ago
Chancellier Pierre-Jean d0575fb858 ajout options avancees 2 years ago
paidge 6164fa8ec1 Mise en place d'onglets dans l'espace privé
Suite à [cette demande sur SPIP contrib](https://contrib.spip.net/Tarteaucitron-5292#comment508768), voici ma première contribution pour préparer l'insertion de nouvelles options de configuration.

J'ai mis en place les onglets pour l’espace privé.
J’ai remplacé les boutons radio par des checkbox et des select.
j’ai remplacé certaines chaînes de caractères en « dur » par des chaînes de langue
j’ai ajouté l’option « Middle » pour « orientation ».
j’ai mis « handleBrowserDNTRequest » sur « true » par défaut au lieu de false. Cette option prend en compte le Do Not Track du navigateur si le visieur l'a activé (pourquoi lui demander si il accepte les cookies alors qu'il a déjà spécifié que non dans son navigateur ?).

Co-authored-by: Chancellier Pierre-Jean <pierre-jean.chancellier@univ-lehavre.fr>
Reviewed-on: #13
Co-authored-by: paidge <paidge@noreply.git.spip.net>
Co-committed-by: paidge <paidge@noreply.git.spip.net>
2 years ago
Pierre KUHN 767424a23d menu : le bon item de langue et image 16px qui manquait (j'ai pas le transparent) 2 years ago
Salvatore 8447795753 [Salvatore] [source:lang/ tarteaucitron] Export depuis https://trad.spip.net de la langue de
[Salvatore] [source:lang/ tarteaucitron] Export depuis https://trad.spip.net de la langue fr
[Salvatore] [source:lang/ tarteaucitron] Mise a jour du bilan depuis https://trad.spip.net
2 years ago
Salvatore 37649590f0 [Salvatore] [source:lang/ paquet-tarteaucitron] Export depuis https://trad.spip.net de la langue de
[Salvatore] [source:lang/ paquet-tarteaucitron] Export depuis https://trad.spip.net de la langue fr
[Salvatore] [source:lang/ paquet-tarteaucitron] Mise a jour du bilan depuis https://trad.spip.net
2 years ago
Akilia 48efe8da5d Ajout d'un lien de configuration dans le menu Squelettes
+ compat avec SPIP 4
Up de z
2 years ago
Akilia f2ae4c3396 Configuration : réorganisation des champs dans les fieldsets
+ correction et  amélioration des chaines de langues
2 years ago
Akilia 560a69c52d pétouilles ur le SVG 2 years ago
peetdu 97dd116740 Merge pull request 'Rajout des services pour twitter dans les cookies' (#11) from dev/services_twitter into master
Reviewed-on: #11
2 years ago
Salvatore aa8cd69568 [Salvatore] [source:lang/ tarteaucitron] Export depuis https://trad.spip.net de la langue fr
[Salvatore] [source:lang/ tarteaucitron] Mise a jour du bilan depuis https://trad.spip.net
2 years ago
peetdu 54b85e0e03 Merge pull request 'Rajout dans la configuration du plugins la possibilité de pouvoir surcharger un premier texte "alertBigPrivacy"' (#5) from dev/surcharge_lang into master
Reviewed-on: #5
2 years ago
cam.lafit 0be5ff36f2 Supporter les champs multi
* On ne passe pas par |propre pour ne pas ajouter de balisage inutile
* |texte_script s'occupe de formater pour js
* |typo extrait la partie multi si nécessaire et applique le formatage de base (propre allégé)
2 years ago
pierrekuhn87 c9f95321cb oubli dans le commit précédent 2 years ago
pierrekuhn87 7c6832e0d0 on rajoute 2 item de langue dans la configuration qui surcharge la lib du plugins 2 years ago
pierrekuhn87 e66f3acffb Rajout dans la configuration du plugins la possibilité de pouvoir surcharger un premier texte "alertBigPrivacy" 2 years ago
Pierre KUHN c165cff667 Rajout des services pour twitter dans les cookies 2 years ago
pierrekuhn87 458d27c551 V1.2.7 : Mise à jour de la lib 20210422 2 years ago
klaus++ 172bdc8f18 [Salvatore] [source:lang/ tarteaucitron] Export depuis https://trad.spip.net de la langue de
[Salvatore] [source:lang/ tarteaucitron] Mise a jour du bilan depuis https://trad.spip.net
2 years ago
klaus++ 5fcab4ecc2 [Salvatore] [source:lang/ paquet-tarteaucitron] Export depuis https://trad.spip.net de la langue de
[Salvatore] [source:lang/ paquet-tarteaucitron] Mise a jour du bilan depuis https://trad.spip.net
2 years ago
peetdu bee67752b6 Merge pull request 'Utiliser l'objet de l'environnement :' (#8) from dev/info_objet into master
Reviewed-on: #8
2 years ago
Maïeul 3063dee284 Saisies : datas->data 2 years ago
pierrekuhn87 b9f522f64f V1.2.5 : Mise à jour de la librairie, correction d'une faute d'orthographe dans la config 2 years ago
peetdu b4bf4150c1 Merge pull request 'Utiliser la langue du site : https://contrib.spip.net/Tarteaucitron-5292#comment507694' (#9) from dev/forcelanguage into master
Reviewed-on: #9
2 years ago
peetdu 0cb56644fc Merge pull request 'Mise à jour de la librairie au tag 1.8.4' (#6) from dev/maj_lib_20201110 into master
Reviewed-on: #6
2 years ago
pierrekuhn87 38b96e9ef8 Utiliser la langue du site : https://contrib.spip.net/Tarteaucitron-5292#comment507694 2 years ago
pierrekuhn87 9a7f8114b2 pas de notice si on est sur le sommaire par exemple 2 years ago
pierrekuhn87 1f87548d87 Utiliser l'objet de l'environnement :
Le besoin est de pouvoir surcharger certain service en fonctionne de la page ou l'on se trouve pour des trackers particulier (ex : campagne sur un article spécifique)
on passe donc maintenant dans le code l'objet et l'id afin de pouvoir surcharger la suite
2 years ago
pierrekuhn87 b8c0845f5e Mise à jour de la librairie au tag 1.8.4 2 years ago
Maïeul 09f8f0e9ec éviter les fatals erreurs
https://contrib.spip.net/Tarteaucitron-5292#comment507306
2 years ago
Salvatore f36aea4774 [Salvatore] [source:lang/ paquet-tarteaucitron] Export depuis https://trad.spip.net de la langue fr
[Salvatore] [source:lang/ paquet-tarteaucitron] Mise a jour du bilan depuis https://trad.spip.net
2 years ago
klaus++ 449b39e653 [Salvatore] [source:lang/ paquet-tarteaucitron] Export depuis https://trad.spip.net de la langue de 2 years ago
Salvatore d50ab860f4 [Salvatore] [source:lang/ tarteaucitron] Export depuis https://trad.spip.net de la langue fr
[Salvatore] [source:lang/ tarteaucitron] Mise a jour du bilan depuis https://trad.spip.net
2 years ago
pierrekuhn87 04cdf52659 Notice en moins 2 years ago
Akilia 06bbb726ba Up de z suite au PR 4 fusionné 2 years ago
peetdu d2fd3977bb Merge pull request 'Les services plus simples' (#4) from dev/opti_services into master
Reviewed-on: #4
2 years ago
pierrekuhn87 62a27d698c Quand on utilise plusieurs services, on n' a pas beson d'avoir plusieurs fois <script></script> dans le code de la page 2 years ago
Akilia f21856863c Ré-écriture de certaines explications 2 years ago
Akilia 945da0ca14 Nécessite Saisies 3 years ago
Akilia 62edad1e47 Oups...virer les debug 3 years ago
Akilia 372cc18b76 Ne nécessite plus Zcore
+ petits corrections dans chaînes de langues
3 years ago
Akilia b58a97bb27 Gestion complète du bouton Cookie : si affiché, on peut aussi le placer où l'on veut (BottomRight, BottomLeft, TopRight and TopLeft)
+ Chaîne de langue
3 years ago
Akilia 1ee086fe55 Configuration : ajout de la gestion de l'affichage de l'icône "cookie" 3 years ago

@ -0,0 +1,7 @@
# Changelog
## 1.4.1 - 2022-10-24
### Changed
- Mise à jour de Tarteaucitron en 1.9.9

@ -671,4 +671,4 @@ into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>.
<https://www.gnu.org/licenses/why-not-lgpl.html>.

@ -3,4 +3,15 @@ Portage pour SPIP de la solution de gestion de consentement aux cookies Tarteauc
Voir https://www.cnil.fr/fr/solutions-centralisees-de-recueil-de-consentement-aux-cookies-les-gestionnaires-de-tag
La documentation est ici : https://contrib.spip.net/Tarteaucitron-5292
La documentation est ici : https://contrib.spip.net/Tarteaucitron-5292
## Ajouter un service
1. Rendez-vous sur ***ecrire/?exec=configurer_services*** pour rechercher votre service et l'activer. Au besoin, renseignez les paramètres nécessaires dans la liste des services activés
2. Recherchez votre service sur https://tarteaucitron.io/fr/install/ (Etape 3 : ajouter les services) et pensez à supprimer le marqueur du service dans vos squelettes s'il est présent. Si le marqueur est situé dans du contenu éditorial (le texte d'un article par exemple), passez à la suite.
### Marqueurs situés dans du contenu éditorial
Vous pouvez ajouter le marqueur de certains services dans du contenu éditorial grâce aux modèles fournis par le plugin (voir le dossier ***/modeles*** du plugin). Si l'entrée n'existe pas dans le porte-plume, il suffit de créer une icône carrée de 17px de côté dans ***/squelettes/icones_barre/tac_mon_modele.png***. Si des articles antérieurs contiennent des iframes pour ces services, il faut traiter le contenu éditorial ancien.
#### Traiter du contenu édiorial ancien
Pour traiter du contenu ancien, adaptez le fichier ***action/tarteaucitron_nettoyer_iframes.php*** en fonction de vos besoins et appelez-le via le bouton de l'onglet technique (***ecrire/?exec=configurer_technique***) ou directement par l'url ***spip.php?action=tarteaucitron_nettoyer_iframes***. Il s'agit d'une adaptation du script présent dans le plugin **oembed**.

@ -0,0 +1,52 @@
<?php
/**
* Plugin TarteAuCitron
* Licence GPL3
*
*/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Active un service
* appelé avec ?action=tarteaucitron_activer_service&service=service
* autorisé pour les seuls webmestres
*/
function action_tarteaucitron_activer_service_dist() {
include_spip('inc/autoriser');
if (!autoriser('webmestre')) {
die('Pas autorise');
}
include_spip('inc/tarteaucitron');
$service = _request('service');
$list_services = tarteaucitron_liste_services();
if (!array_key_exists($service,$list_services)) {
die('Service inexistant');
}
if ($list_services[$service]['statut']=='actif') {
die('Service déjà actif');
}
include_spip('inc/config');
$services_actifs = lire_config("tarteaucitron/services");
$services_actifs[$service] = array();
$json_source = find_in_path('json/services.json');
$json = file_get_contents($json_source);
$parsed_json = json_decode($json);
$params = $parsed_json->{$service}->{'params'};
foreach($params as $param) {
$services_actifs[$service][$param] = substr($param,5);
}
ecrire_config("tarteaucitron/services/", $services_actifs);
}

@ -0,0 +1,43 @@
<?php
/**
* Plugin TarteAuCitron
* Licence GPL3
*
*/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Désactive un service
* appelé avec ?action=tarteaucitron_desactiver_service&service=service
* autorisé pour les seuls webmestres
*/
function action_tarteaucitron_desactiver_service_dist() {
include_spip('inc/autoriser');
if (!autoriser('webmestre')) {
die('Pas autorise');
}
include_spip('inc/tarteaucitron');
$service = _request('service');
$list_services = tarteaucitron_liste_services();
if (!array_key_exists($service,$list_services)) {
die('Service inexistant');
}
if ($list_services[$service]['statut']=='inactif') {
die('Service déjà inactif');
}
include_spip('inc/config');
$services_actifs = lire_config("tarteaucitron/services");
unset($services_actifs[$service]);
ecrire_config("tarteaucitron/services", $services_actifs);
}

@ -0,0 +1,251 @@
<?php
/**
* Plugin TarteAuCitron
* Licence GPL3
*
*/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Conversion des iframe en modèles pour TarteAuCitron
* appelé avec ?action=tarteaucitron_nettoyer_iframes
* autorisé pour les seuls webmestres
*/
function action_tarteaucitron_nettoyer_iframes_dist() {
include_spip('inc/autoriser');
include_spip('inc/filtres');
include_spip('action/editer_objet');
if (!autoriser('webmestre')) {
die('Pas autorise');
}
echo '<h1>Conversion des &lt;iframe&gt;</h1>';
$simu = true;
if (_request('modif')) {
$simu = false;
}
if ($simu) {
echo "<p><strong>mode SIMULATION</strong> (ajoutez &modif=1 dans l'url pour modifier les contenus)</p>";
}
$tables = array(
'spip_articles' => array('descriptif', 'chapo', 'texte', 'ps'),
);
foreach ($tables as $table => $champs) {
$objet = objet_type($table);
foreach ($champs as $champ) {
$primary = id_table_objet($table);
$res = sql_select("$primary,$champ", $table, "$champ LIKE '%iframe%' OR $champ LIKE '%object%'");
while ($row = sql_fetch($res)) {
$pre = "$primary=" . $row[$primary] . ":$champ:";
$texte = $row[$champ];
$iframes = extraire_balises($texte, 'iframe');
if (count($iframes)) {
foreach ($iframes as $iframe) {
$url = '';
$src = extraire_attribut($iframe, 'src');
if (strncmp($src, '//', 2)==0) {
$src = 'http:' . $src;
}
if (strpos($iframe, 'youtube')!==false) {
if (strpos($src, '/embed/')!==false) {
$url = str_replace('?', '&', $src);
$url = str_replace('/embed/videoseries&', '/playlist?', $url);
$url = str_replace('/embed/', '/watch?v=', $url);
$url = str_replace('&feature=player_embedded', '', $url);
preg_match('%(?:youtube(?:-nocookie)?\.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)([^"&?/ ]{11})%i', $url, $match);
$url = "<tac_youtube|id=" . $match[1] . ">";
echo "$pre Youtube " . entites_html($url) . "<br />";
}
if (!$url) {
var_dump($row);
var_dump(entites_html($iframe));
die('youtube inconnue');
}
} elseif (strpos($iframe, 'dailymotion')!==false) {
if (strpos($src, '/embed/')!==false) {
$url = str_replace('/embed/', '/', $src);
$url = explode('?', $url);
$url = reset($url);
$url = "<tac_dailymotion|id=" . strtok(basename($url), '_') . ">";
echo "$pre DailyMotion" . entites_html($url) . "<br />";
}
if (!$url) {
var_dump($row);
var_dump($iframe);
die('dailymotion inconnue');
}
} elseif (strpos($iframe, 'player.vimeo')!==false) {
if (strpos($src, '/video/')!==false) {
$url = str_replace('/video/', '/', $src);
$url = str_replace('player.vimeo', 'vimeo', $url);
$url = explode('?', $url);
$url = reset($url);
preg_match('%https?:\/\/(?:www\.|player\.)?vimeo.com\/(?:channels\/(?:\w+\/)?|groups\/([^\/]*)\/videos\/|album\/(\d+)\/video\/|video\/|)(\d+)(?:$|\/|\?)%i', $url, $match);
$url = "<tac_vimeo|id=" . $match[3] . ">";
echo "$pre Vimeo " . entites_html($url) . "<br />";
}
if (!$url) {
var_dump($row);
var_dump($iframe);
die('vimeo inconnue');
}
} /*elseif (strpos($iframe, 'soundcloud') !== false) {
// un peu complique :
// il faut faire une requete oembed sur l'url api, avec iframe=false
// pour recuperer du html avec un lien vers la page soundcloud
parse_str(end(explode('?', $src)), $args);
$api_url = $args['url'];
include_spip('inc/oembed');
include_spip('inc/distant');
$provider = oembed_verifier_provider($api_url);
$data_url = parametre_url(url_absolue($provider['endpoint'], url_de_base()), 'url', $api_url, '&');
$data_url = parametre_url($data_url, 'format', 'json', '&');
$data_url = parametre_url($data_url, 'iframe', 'false', '&');
$json = recuperer_page($data_url);
$json = json_decode($json, true);
$link = extraire_balise($json['html'], 'a');
if ($url = extraire_attribut($link, 'href')) {
echo "$pre SoundCloud $url<br />";
}
if (!$url) {
var_dump($row);
var_dump($iframe);
die('soundcloud inconnue');
}
} */ elseif (strpos($iframe, 'www.google.com/calendar') !== false) {
if (strpos($src, '/embed')!==false) {
preg_match('#(src=)(\w+)$#', $src, $match);
$url = "<tac_gagenda|id=" . $match[2] . ">";
echo "$pre Google Agenda " . entites_html($url) . "<br />";
}
} elseif (strpos($iframe, 'www.canal-u.tv/video') !== false) {
if (strpos($src, '/embed')!==false) {
preg_match('#(/embed.1/)(.+)(\?)#', $src, $match);
$url = "<tac_canalu|id=" . $match[2] . ">";
$divs = extraire_balises($texte, 'div');
foreach ($divs as $div) {
if (strpos($div, $match[2])!==false) {
$iframe = $div;
}
}
echo "$pre Canal-U.tv " . entites_html($url) . "<br />";
}
} elseif (strpos($iframe, 'webtv.normandie-univ.fr') !== false) {
if (strpos($src, '/permalink/')!==false) {
preg_match('#(/permalink/)(\w+)(/iframe)#', $src, $match);
$url = "<tac_webtvnu|id=" . $match[2] . ">";
echo "$pre WebTV Normandie Université " . entites_html($url) . "<br />";
}
} else {
echo "$pre iframe inconnue : " . entites_html($iframe) . '<br />';
}
if ($url) {
$texte = str_replace($iframe, "\n\n" . $url . "\n\n", $texte);
if (preg_match(',<center>\s*' . preg_quote($url, ',') . '.*</center>,Uims', $texte, $m)) {
$texte = str_replace($m[0], "\n\n" . $url . "\n\n", $texte);
}
$texte = preg_replace(',\s+' . preg_quote($url, ',') . '\s+,ims', "\n\n" . $url . "\n\n", $texte);
}
}
if ($texte!==$row[$champ]) {
echo "$pre Corrige $champ <br />";
if (!$simu) {
echo "$pre Corrige $champ <br />";
objet_modifier($objet, $row[$primary], array($champ => $texte));
} else {
echo "SIMU : $pre Corrige $champ <br />";
}
}
}
$objects = extraire_balises($texte, 'object');
if (count($objects)) {
foreach ($objects as $object) {
$url = '';
$src = extraire_attribut($object, 'data');
if (strncmp($src, '//', 2)==0) {
$src = 'http:' . $src;
}
if (strpos($src, 'youtube')!==false) {
if (strpos($src, '/v/')!==false) {
$url = str_replace('?', '&', $src);
$url = str_replace('/v/', '/watch?v=', $url);
} elseif (strpos($src, '/embed/')!==false) {
$url = str_replace('?', '&', $src);
$url = str_replace('/embed/', '/watch?v=', $url);
}
if (!$url) {
var_dump($row);
var_dump(entites_html($object));
die('youtube inconnue');
} else {
preg_match('%(?:youtube(?:-nocookie)?\.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)([^"&?/ ]{11})%i', $url, $match);
$url = "<tac_youtube|id=" . $match[1] . ">";
echo "$pre Youtube " . entites_html($url) . "<br />";
}
} elseif (strpos($src, 'dailymotion')!==false) {
if (strpos($src, '/swf/video/')!==false) {
$url = str_replace('/swf/video/', '/video/', $src);
$url = explode('?', $url);
$url = reset($url);
} elseif (strpos($src, '/swf/')!==false) {
$url = str_replace('/swf/', '/video/', $src);
$url = explode('?', $url);
$url = reset($url);
}
if (!$url) {
var_dump($row);
var_dump($object);
die('dailymotion inconnue');
} else {
$url = "<tac_dailymotion|id=" . strtok(basename($url), '_') . ">";
echo "$pre DailyMotion" . entites_html($url) . "<br />";
}
} elseif (strpos($src, 'vimeo.com')!==false) {
if (strpos($src, 'moogaloop')!==false
and $id = parametre_url($src, 'clip_id')) {
$url = "https://vimeo.com/$id";
} elseif (strpos($src, '/video/')!==false) {
$url = $src;
}
if (!$url) {
var_dump($row);
var_dump(entites_html($object));
die('vimeo inconnue');
} else {
preg_match('%https?:\/\/(?:www\.|player\.)?vimeo.com\/(?:channels\/(?:\w+\/)?|groups\/([^\/]*)\/videos\/|album\/(\d+)\/video\/|video\/|)(\d+)(?:$|\/|\?)%i', $url, $match);
$url = "<tac_vimeo|id=" . $match[3] . ">";
echo "$pre Vimeo " . entites_html($url) . "<br />";
}
} else {
echo "$pre object inconnue : " . entites_html($object) . '<br />';
}
if ($url) {
$texte = str_replace($object, "\n\n" . $url . "\n\n", $texte);
if (preg_match(',<center>\s*' . preg_quote($url, ',') . '.*</center>,Uims', $texte, $m)) {
$texte = str_replace($m[0], "\n\n" . $url . "\n\n", $texte);
}
$texte = preg_replace(',\s+' . preg_quote($url, ',') . '\s+,ims', "\n\n" . $url . "\n\n", $texte);
}
}
if ($texte!==$row[$champ]) {
if (!$simu) {
echo "$pre Corrige $champ <br />";
objet_modifier($objet, $row[$primary], array($champ => $texte));
} else {
echo "SIMU : $pre Corrige $champ <br />";
}
}
}
}
}
}
}

@ -0,0 +1,181 @@
<?php
/**
* Plugin TarteAuCitron
* Licence GPL3
*
*/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Mise à jour du fichier services/services.html
* appelé avec ?action=tarteaucitron_referencer_services
* autorisé pour les seuls webmestres
*/
function action_tarteaucitron_referencer_services_dist() {
include_spip('inc/autoriser');
if (!autoriser('webmestre')) {
die('Pas autorise');
}
$list_services = array();
$services_specifiques = array();
if ($lines=file(find_in_path('lib/tarteaucitron/tarteaucitron.services.js'))) {
$i=0;
foreach($lines as $line) {
if(preg_match('/^tarteaucitron\.services\.(\w+)/', $line, $matches)) {
$service = $matches[1];
$list_services[$service] = array();
$list_services[$service]['hasModele'] = false;
$list_services[$service]['params'] = array();
if (preg_match('/["\']?type["\']?: ["\'](\w+)["\'],/', $lines[$i+2], $matches)) {
$type = $matches[1];
$list_services[$service]['type'] = $type;
}
}
$i++;
}
}
$tarteaucitron_url = 'https://tarteaucitron.io/fr/install/';
$html = file_get_contents($tarteaucitron_url);
$doc = new DOMDocument('1.0', 'UTF-8');
$internalErrors = libxml_use_internal_errors(true);
$doc->loadHTML($html);
libxml_use_internal_errors($internalErrors);
foreach($list_services as $service => $prop) {
$div_service = $doc->getElementById('s_' . $service);
if (!empty($div_service)) {
$id = $div_service->lastChild->attributes['id']->value;
$div_code = $doc->getElementById('m' . $id);
$span_list = $div_code->getElementsByTagName('span');
$nb_items = $span_list->length;
$k = 0;
$is_modele_found = false;
$is_service_hidden = in_array($list_services[$service]['type'],array('support','analytic'));
if (!$is_service_hidden) {
// Gestion des services spécifiques
switch ($service) {
case 'facebook':
$list_services[$service]['hasModele'] = true;
$list_services[$service]['params_modele']['facebook_video'][] = 'video_id';
$services_specifiques[] = $service;
break;
default :
$list_services[$service]['params_modele'] = array();
break;
}
}
// Pour chaque span.code
for($i=0; $i<$nb_items; $i++) {
$span = $span_list->item($i);
$class_attr = $span->attributes->getNamedItem("class");
if ((!is_null($class_attr)) && ($class_attr->nodeValue=='code')) {
$k++;
// Récupère le code JS pour activer le service
if ($k==1) {
$param_list = $span->getElementsByTagName('b');
$nb_params = $param_list->length;
$j = $nb_params -1;
while ($j > -1) {
$param = $param_list[$j];
$nom_param = "ptac_" . str_replace(" ","_",$param->textContent);
$newelement = $doc->createTextNode("'" . $nom_param . "'");
$span->replaceChild($newelement,$param);
array_unshift($list_services[$service]['params'],$nom_param);
$j--;
}
$s = $span->getElementsByTagName('s');
$span->removeChild($s[0]);
$script = trim(strip_tags($span->nodeValue));
$script = preg_replace('/(\n\s+)/', "\n", $script);
$script = str_replace("''","'",$script);
$list_services[$service]['JS'] = $script;
// Récupère le modèle HTML
} elseif (($i!=$nb_items-1) && (!$is_modele_found)) {
$is_modele_found = true;
$pattern = array();
$param_list = $span->getElementsByTagName('b');
$nb_params = $param_list->length;
$j = $nb_params -1;
while ($j > -1) {
$param = $param_list[$j];
$nom_param = str_replace(" ","_",$param->textContent);
// Si le paramètre contient des valeurs entre parenthèses comme (true | false), on les enlève
if (preg_match('/(_\(.+\))/',$nom_param,$matches)) {
$nom_param = str_replace($matches[1],"", $nom_param);
}
if ($is_service_hidden) {
$nom_param = "ptac_" . $nom_param;
if (!in_array($nom_param,$list_services[$service]['params'])) {
array_unshift($list_services[$service]['params'],$nom_param);
}
} else {
array_unshift($list_services[$service]['params_modele'],$nom_param);
$nom_param = "(#ENV{" . $nom_param . "})";
$pattern[] = '/(\s?[\w\-.]*\s?[=:]?\s?[\'\"]?' . quotemeta($nom_param) . '[\'\"]?\w*[,;]?)/';
}
$newelement = $doc->createTextNode($nom_param);
$span->replaceChild($newelement,$param);
$j--;
}
$script = trim($span->nodeValue);
if (!$is_service_hidden) {
// On ajoute les crochets pour la syntaxe SPIP
$script = preg_replace($pattern,'[${1}]',$script);
}
$script = preg_replace('/(\n\s+)/', "\n", $script);
$script = str_replace("''","'",$script);
if ($is_service_hidden) {
$script = strip_tags($script);
$list_services[$service]['JS'] = $script . "\n" . $list_services[$service]['JS'];
} elseif (!in_array($service,$services_specifiques)) {
$list_services[$service]['hasModele'] = true;
$fichier_modele = _DIR_PLUGIN_TARTEAUCITRON . "modeles/tac_" . $service . ".html";
file_put_contents($fichier_modele, $script);
}
}
}
}
// Supprimer les clés qui sont des tableaux vides
foreach($list_services[$service] as $prop => $value) {
if ((is_array($list_services[$service][$prop])) && (empty($list_services[$service][$prop]))) {
unset($list_services[$service][$prop]);
}
}
} else {
unset($list_services[$service]);
}
}
// Création du JSON avec les services, leur type, leur(s) paramètre(s) et le code JS associé
$file_json = find_in_path('json/services.json');
if (file_put_contents($file_json, json_encode($list_services))) {
echo "Opération réussie !<br>";
echo "Le fichier <b>" . $file_json . "</b> a été mis à jour.";
} else {
echo "Erreur lors de l'écriture du fichier " . $file_json . ".";
}
}

@ -0,0 +1,30 @@
<?php
/**
* Plugin TarteAuCitron
* Licence GPL3
*
*/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Retourne la lise des services avec leur type et leur statut (installe/desinstalle)
* au format json
* appelé avec ?exec=tarteaucitron_liste_services
*/
function exec_tarteaucitron_liste_services_dist() {
include_spip('inc/tarteaucitron');
include_spip('inc/autoriser');
if (!autoriser('webmestre')) {
die('Pas autorise');
}
header('Content-Type: application/json');
$list_services = tarteaucitron_liste_services();
echo json_encode($list_services);
}

@ -0,0 +1,86 @@
<div id="formulaire_#FORM"" class="formulaire_spip formulaire_configurer formulaire_#FORM">
<div class="box__header">
<h3><:tarteaucitron:cfg_titre_ajouter_services:></h3>
</div>
<div>
<ol class="explication">
<:tarteaucitron:cfg_explication:>
</ol>
<div class="editer-groupe">
<div class="editer editer_searchService obligatoire saisie_input editer_even">
<label class="label" for="champ_searchService"><:tarteaucitron:cfg_titre_recherche_services:></label>
<input type="text" name="searchService" class="text" id="champ_searchService" value="" required="required" placeholder="<:tarteaucitron:cfg_titre_placeholder_recherche_services:>" autocomplete="off">
</div>
</div>
<div class="image_loading"></div>
<fieldset>
<legend><:tarteaucitron:cfg_titre_result_recherche_services:></legend>
<div id="tac_results"></div>
</fieldset>
</div>
</div>
<script>
var tac_url = '?exec=tarteaucitron_liste_services',
oldValue = ''
services = {};
$('#formulaire_#FORM').animateLoading();
$.ajax({
url: tac_url,
dataType: 'json',
success: (data) => {
services = data
},
complete: () => {
$('#formulaire_#FORM').endLoading(true)
}
});
// Appliquer un délai à l'exécution d'une fonction
function delay(fn, ms) {
let timer = 0
return function(...args) {
clearTimeout(timer)
timer = setTimeout(fn.bind(this, ...args), ms || 0)
}
}
// Fonction de recherche
function rechService(search) {
if (!search) {
$('#tac_results').html('')
return false
}
var html = '<ul class="liste-items">'
jQuery.each(services, function(service, prop) {
var status = ''
var properties = Object.entries(prop)
jQuery.each(properties, function(i,property) {
if (property[0]=='statut') {
status = property[1]
}
})
if (service.toLowerCase().indexOf(search) >= 0) {
var btn_texte = (status=='inactif') ? '<:tarteaucitron:cfg_installer:>' : '<:tarteaucitron:cfg_desinstaller:>'
var action = (status=='inactif') ? 'tarteaucitron_activer_service' : 'tarteaucitron_desactiver_service'
html += '<li class="item">' + service + '<a href="?action=' + action + '&service=' + service + '&redirect=?exec=configurer_services" class="btn">' + btn_texte + '</a></li>'
}
});
html += '</ul>'
$('#tac_results').html(html)
}
// On actualise les résultats de recherche à chaque modification
$('#champ_searchService').keyup(delay((e) => {
if (e.target.value == oldValue) {
e.preventDefault()
return false
}
oldValue = e.target.value
rechService(e.target.value)
}, 250));
</script>

@ -1,24 +1,25 @@
<div class="formulaire_spip formulaire_configurer formulaire_#FORM">
<h3 class="titrem"><:tarteaucitron:cfg_titre_bandeau:></h3>
[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
<form method="post" action="#ENV{action}">
<div>
#ACTION_FORMULAIRE{#ENV{action}}
<div class="editer-groupe">
[(#SAISIE{radio, highprivacy, label=<:tarteaucitron:cfg_afficher_bandeau:>, explication=<:tarteaucitron:cfg_afficher_bandeau_explication:>, defaut=true, datas=[(#ARRAY{true,Oui,false,Non})]})]
[(#SAISIE{radio, orientation, label=<:tarteaucitron:cfg_placement_bandeau:>, defaut=top, datas=[(#ARRAY{top,Haut,bottom,Bas})]})]
[(#SAISIE{radio, acceptallcta, label=<:tarteaucitron:cfg_btn_accetpall:>, explication=<:tarteaucitron:cfg_btn_accetpall_explication:>, defaut=true, datas=[(#ARRAY{true,Oui,false,Non})]})]
[(#SAISIE{input, readmoreLink, label=<:tarteaucitron:cfg_readmoreLink:>, explication=<:tarteaucitron:cfg_readmoreLink_explication:>, defaut=cookiespolicy})]
</div>
<div>
#ACTION_FORMULAIRE{#ENV{action}}
<fieldset>
<legend><:tarteaucitron:legend_bandeau_principal:></legend>
<div class="editer-groupe">
[(#SAISIE{checkbox, highprivacy, label=<:tarteaucitron:cfg_afficher_bandeau:>, explication=<:tarteaucitron:cfg_afficher_bandeau_explication:>, attention=<:tarteaucitron:cfg_afficher_bandeau_attention:>, data=[(#ARRAY{true,<:item_oui:>})]})]
[(#SAISIE{selection, orientation, option_intro=<:tarteaucitron:cfg_choose_option:>, label=<:tarteaucitron:cfg_placement_bandeau:>, defaut=middle, data=[(#ARRAY{top,<:tarteaucitron:cfg_bandeau_haut_page:>,middle,<:tarteaucitron:cfg_bandeau_milieu:>,bottom,<:tarteaucitron:cfg_bandeau_bas_page:>})]})]
[(#SAISIE{radio, boutons, label=<:tarteaucitron:cfg_btn_accetpall:>, explication=<:tarteaucitron:cfg_btn_accetpall_explication:>, attention=<:tarteaucitron:cfg_btn_accetpall_attention:>, data=[(#ARRAY{none,<:tarteaucitron:cfg_btn_aucun:>,both,<:tarteaucitron:cfg_btn_deux:>,acceptallonly,<:tarteaucitron:cfg_btn_acceptonly:>})]})]
[(#SAISIE{textarea, lang_alertBigPrivacy, label=<:tarteaucitron:cfg_text_alertbigprivacy:>, explication=<:tarteaucitron:cfg_text_alertbigprivacy_explication:>, rows=2})]
[(#SAISIE{checkbox, closePopup, label=<:tarteaucitron:cfg_close_popup:>, explication=<:tarteaucitron:cfg_close_popup_explication:>, data=[(#ARRAY{true,<:item_oui:>})]})]
</div>
</fieldset>
<input type="hidden" name="_meta_casier" value="tarteaucitron" />
<p class="boutons"><span class="image_loading">&nbsp;</span><input type="submit" class="submit" value="<:bouton_enregistrer:>" /></p>
</div>
<input type="hidden" name="_meta_casier" value="tarteaucitron" />
<p class="boutons"><span class="image_loading">&nbsp;</span><input type="submit" class="submit" value="<:bouton_enregistrer:>" /></p>
</div>
</form>
</div>
</div>

@ -0,0 +1,20 @@
<div class="formulaire_spip formulaire_configurer formulaire_#FORM">
[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
<form method="post" action="#ENV{action}" enctype="multipart/form-data">
<div>
#ACTION_FORMULAIRE{#ENV{action}}
<fieldset>
<legend><:tarteaucitron:legend_cookie:></legend>
<p class="explication"><:tarteaucitron:cfg_btn_showIcon_explication:></p>
<div class="editer-groupe">
#GENERER_SAISIES{#ENV{_saisies}}
</div>
</fieldset>
<p class="boutons"><span class="image_loading">&nbsp;</span><input type="submit" class="submit" value="<:bouton_enregistrer:>" /></p>
</div>
</form>
</div>

@ -0,0 +1,167 @@
<?php
if (!defined('_ECRIRE_INC_VERSION')) return;
// Nécessaire pour bigup
/**
* @param array $args
* @param \Spip\Bigup\Formulaire $formulaire
* @return \Spip\Bigup\Formulaire
*/
function inc_bigup_medias_formulaire_configurer_tarteaucitron_ouverture_dist($args, $formulaire) {
$formulaire->preparer_input_class(
'bigup',
['previsualiser' => true, 'editer_class' => '']
);
return $formulaire;
}
function formulaires_configurer_tarteaucitron_ouverture_charger_dist() {
// Nécessaire pour bigup
$valeurs['_bigup_rechercher_fichiers'] = true;
return $valeurs;
}
function formulaires_configurer_tarteaucitron_ouverture_verifier_dist() {
$erreurs = array();
if (!empty($_FILES['upload_icon'])) {
$file = $_FILES['upload_icon'];
$verifier = charger_fonction('verifier', 'inc/');
$options_verif = array(
'mime' => 'image_web',
'hauteur_max' => 50,
'largeur_max' => 50
);
if ($erreur = $verifier($file, 'fichiers', $options_verif)) {
$erreurs['upload_icon'] = $erreur;
$dest = $file['tmp_name'];
if (file_exists($dest)) {
@unlink($dest);
}
}
}
return $erreurs;
}
function formulaires_configurer_tarteaucitron_ouverture_traiter_dist() {
include_spip('inc/cvt_configurer');
$retours = [
'message_ok' => _T('config_info_enregistree'),
'editable' => true,
];
// On garde en mémoire l'existant (l'API vide sinon)
if ($icone_actuelle = lire_config('tarteaucitron/icon')) {
set_request('icon', $icone_actuelle);
}
// On enregistre la nouvelle configuration
$trace = cvtconf_formulaires_configurer_enregistre('configurer_tarteaucitron_ouverture', array());
// On vérifie si on supprime l'image existante
if (_request("supprimer_upload_icon")) {
ecrire_config('tarteaucitron/icon', '');
if ($icone_actuelle) {
@unlink($icone_actuelle);
}
// On vérifie si on envoie une nouvelle image
} elseif (!empty($_FILES['upload_icon'])) {
include_spip('action/ajouter_documents');
$file = $_FILES['upload_icon'];
$extension = pathinfo($file['name'], PATHINFO_EXTENSION);
$extension = corriger_extension(strtolower($extension));
$dest_name = 'tarteaucitron_icon.' . $extension;
$dest = _DIR_IMG . $dest_name;
include_spip('inc/documents');
if ($chemin = deplacer_fichier_upload($file['tmp_name'],$dest)) {
if ($icone_actuelle != $dest) {
@unlink($icone_actuelle);
}
ecrire_config('tarteaucitron/icon', $dest);
} else {
$retours['message_ok'] = '';
$retours['message_erreur'] = _T('texte_inc_meta_1', array('fichier' => $dest_name)) . ' ' .
_T('texte_inc_meta_2') . ' ' .
_T('texte_inc_meta_3', array('repertoire' => _DIR_IMG));
}
}
// Cette partie est vraiment nécessaire ?
include_spip('inc/invalideur');
suivre_invalideur('1'); # tout effacer
return $retours;
}
function formulaires_configurer_tarteaucitron_ouverture_saisies_dist() {
$saisies = array(
array(
'saisie' => 'selection',
'options' => array(
'nom' => 'ouverture',
'option_intro' => '<:tarteaucitron:cfg_aucun:>',
'label' => '<:tarteaucitron:cfg_ouverture_type:>',
'defaut' => '',
'datas' => array(
'image' => '<:tarteaucitron:cfg_image:>',
'alertSmall' => '<:tarteaucitron:cfg_small_alert:>'
)
)
),
array(
'saisie' => 'selection',
'options' => array(
'nom' => 'iconPosition',
'label' => '<:tarteaucitron:cfg_iconposition:>',
'cacher_option_intro' => 'oui',
'defaut' => 'BottomRight',
'datas' => array(
'BottomRight' => '<:tarteaucitron:cfg_position_bd:>',
'BottomLeft' => '<:tarteaucitron:cfg_position_bg:>',
'TopRight' => '<:tarteaucitron:cfg_position_hd:>',
'TopLeft' => '<:tarteaucitron:cfg_position_hg:>'
),
'afficher_si' => '@ouverture@ == "image"'
)
),
array(
'saisie' => 'tac_upload',
'options' => array(
'nom' => 'upload_icon',
'type' => 'file',
'attributs' => "accept=image/*",
'class' => 'bigup',
'label' => '<:tarteaucitron:cfg_icon:>',
'explication' => '<:tarteaucitron:cfg_icon_explication:>',
'afficher_si' => '@ouverture@ == "image"',
'src_img' => lire_config('tarteaucitron/icon')
)
),
array(
'saisie' => 'checkbox',
'options' => array(
'nom' => 'cookieslist',
'label' => '<:tarteaucitron:cfg_cookieslist:>',
'explication' => '<:tarteaucitron:cfg_cookieslist_explication:>',
'datas' => array(
'true' => '<:item_oui:>'
),
'afficher_si' => '@ouverture@ == "alertSmall"'
)
),
array(
'saisie' => 'hidden',
'options' => array(
'nom' => '_meta_casier',
'defaut' => 'tarteaucitron'
)
)
);
return $saisies;
}

@ -0,0 +1,20 @@
<div class="formulaire_spip formulaire_configurer formulaire_#FORM">
[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
<form method="post" action="#ENV{action}">
<div>
#ACTION_FORMULAIRE{#ENV{action}}
<fieldset>
<legend><:tarteaucitron:legend_cookies_management_panel:></legend>
<div class="editer-groupe">
#GENERER_SAISIES{#ENV{_saisies}}
</div>
</fieldset>
<p class="boutons"><span class="image_loading">&nbsp;</span><input type="submit" class="submit" value="<:bouton_enregistrer:>" /></p>
</div>
</form>
</div>

@ -0,0 +1,83 @@
<?php
if (!defined('_ECRIRE_INC_VERSION')) return;
/**
* Un simple formulaire de config,
* on a juste à déclarer les saisies
**/
function formulaires_configurer_tarteaucitron_panneau_saisies_dist() {
// $saisies est un tableau décrivant les saisies à afficher dans le formulaire de configuration
$saisies = array(
array(
'saisie' => 'textarea',
'options' => array(
'nom' => 'lang_disclaimer',
'label' => '<:tarteaucitron:cfg_text_disclaimer:>',
'explication' => '<:tarteaucitron:cfg_text_disclaimer_explication:>',
'rows' => 3
)
),
array(
'saisie' => 'checkbox',
'options' => array(
'nom' => 'mandatory',
'label' => '<:tarteaucitron:cfg_mandatory:>',
'explication' => '<:tarteaucitron:cfg_mandatory_explication:>',
'datas' => array(
'true' => '<:item_oui:>'
)
)
),
array(
'saisie' => 'checkbox',
'options' => array(
'nom' => 'moreInfoLink',
'label' => '<:tarteaucitron:cfg_moreinfolink:>',
'datas' => array(
'true' => '<:item_oui:>'
)
)
),
array(
'saisie' => 'input',
'options' => array(
'nom' => 'readmoreLink',
'label' => '<:tarteaucitron:cfg_readmorelink:>',
'explication' => '<:tarteaucitron:cfg_readmorelink_explication:>',
'afficher_si' => '@moreInfoLink@ == "true"'
)
),
array(
'saisie' => 'checkbox',
'options' => array(
'nom' => 'groupServices',
'label' => '<:tarteaucitron:cfg_group_services:>',
'explication' => '<:tarteaucitron:cfg_group_services_explication:>',
'datas' => array(
'true' => '<:item_oui:>'
)
)
),
array(
'saisie' => 'checkbox',
'options' => array(
'nom' => 'removeCredit',
'label' => '<:tarteaucitron:cfg_remove_credit:>',
'explication' => '<:tarteaucitron:cfg_remove_credit_explication:>',
'attention' => '<:tarteaucitron:cfg_remove_credit_attention:>',
'datas' => array(
'true' => '<:item_oui:>'
)
)
),
array(
'saisie' => 'hidden',
'options' => array(
'nom' => '_meta_casier',
'defaut' => 'tarteaucitron'
)
)
);
return $saisies;
}

@ -1,33 +1,16 @@
<div class="formulaire_spip formulaire_configurer formulaire_#FORM">
<h3 class="titrem"><:tarteaucitron:cfg_titre_ajouter_services:></h3>
<div id="formulaire_#FORM" class="formulaire_spip formulaire_configurer formulaire_#FORM">
<div class="box__header">
<h3><:tarteaucitron:cfg_titre_activation_services:></h3>
</div>
[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
<form method="post" action="#ENV{action}">
<div>
#ACTION_FORMULAIRE{#ENV{action}}
<fieldset>
<legend>Services Google</legend>
[(#REM) Gtag : voir à ce propos
https://developers.google.com/analytics/devguides/collection/gtagjs/
et https://juliencoquet.com/en/2017/09/11/switch-google-analytics-global-site-tag/][
(#SAISIE{input, gtag, label=Google global site tag (gtag.js), explication=Replace GA_MEASUREMENT_ID with the ID of the Google Analytics property to which you want to send data, placeholder=GA_MEASUREMENT_ID})]
[(#SAISIE{input, gmap, label=Google Map API Key, explication=Enter your Google Map API Key, placeholder=API KEY})]
</fieldset>
<fieldset>
<legend>Services Facebook</legend>
[(#SAISIE{checkbox, fb, label=Boutons de Like et Partage Facebook, datas=[(#ARRAY{fb,fb})]})]
[(#SAISIE{input, fb_pixel, label=Facebook Pixel, explication=Enter your FacebookPixel ID, placeholder=YOUR_ID})]
</fieldset>
<input type="hidden" name="_meta_casier" value="tarteaucitron/services" />
<p class="boutons"><span class="image_loading">&nbsp;</span><input type="submit" class="submit" value="<:bouton_enregistrer:>" /></p>
</div>
<div>
#ACTION_FORMULAIRE
<div class="editer-groupe">
#GENERER_SAISIES{#ENV{_saisies}}
</div>
<p class="boutons"><span class="image_loading">&nbsp;</span><input type="submit" class="submit" value="<:bouton_enregistrer:>" /></p>
</div>
</form>
</div>
</div>

@ -0,0 +1,127 @@
<?php
if (!defined('_ECRIRE_INC_VERSION')) return;
include_spip('inc/tarteaucitron');
function formulaires_configurer_tarteaucitron_services_saisies_dist() {
$saisies = [];
$json_source = find_in_path('json/services.json');
$json = file_get_contents($json_source);
$parsed_json = json_decode($json);
$types_actifs = tarteaucitron_liste_types_actifs();
foreach($types_actifs as $type => $liste_services) {
$fieldset = array(
'saisie' => 'fieldset',
'options' => array(
'nom' => $type,
'label' => $type,
'pliable' => 'oui',
'plie' => 'oui'
)
);
foreach($liste_services as $service => $params) {
$has_modele = $parsed_json->{$service}->{'hasModele'};
$fieldset['saisies'][] = array(
'saisie' => 'checkbox',
'options' => array(
'nom' => $service . '_actif',
'disable' => 'oui',
'datas' => array(
$service => $service
),
'defaut' => array($service)
)
);
if ($has_modele) {
$liste_modeles = scandir(_DIR_PLUGIN_TARTEAUCITRON . "modeles");
$modeles = '';
foreach($liste_modeles as $nom_fichier) {
if (preg_match('/^tac_' . $service . '(_\w+)?.html$/',$nom_fichier)) {
$modeles .= $nom_fichier . ', ';
}
}
$modeles = '(' . substr($modeles, 0, -2) . ')';
$fieldset['saisies'][] = array(
'saisie' => 'explication',
'options' => array(
'nom' => $service . '_hasmodele',
'titre' => _T('tarteaucitron:cfg_display_service', array('service' => $service)),
'texte' => _T('tarteaucitron:cfg_ajouter_modele', array('modeles' => $modeles))
)
);
}
$i = 0;
foreach($params as $param) {
$param = substr($param,5);
$defaut = is_array($service) ? $service : $service.'/'.$param;
$fieldset['saisies'][] = array(
'saisie' => 'input',
'options' => array(
'nom' => $param,
'label' => $param,
'explication' => _T('tarteaucitron:cfg_parametre_service', array('service' => $service)),
'placeholder' => $param,
'defaut' => lire_config('tarteaucitron/services/'.$defaut),
'obligatoire' => 'oui'
)
);
$i++;
}
}
$saisies[] = $fieldset;
}
return $saisies;
}
function formulaires_configurer_tarteaucitron_services_charger_dist() {
$valeurs = array();
$services_actifs = lire_config('tarteaucitron/services', array());
foreach($services_actifs as $service => $params) {
if (!empty($params)) {
foreach($params as $name => $value) {
$valeurs[$service] = $value;
}
}
}
return $valeurs;
}
function formulaires_configurer_tarteaucitron_services_traiter_dist() {
$ret = array();
$services_actifs = lire_config('tarteaucitron/services', array());
$json_source = find_in_path('json/services.json');
$json = file_get_contents($json_source);
$parsed_json = json_decode($json);
foreach($services_actifs as $service => $params) {
if (isset($parsed_json->{$service}->{'params'}) and $params = $parsed_json->{$service}->{'params'}) {
$i = 0;
foreach($params as $name => $value) {
$valeur_saisie = _request(substr($value,5));
$valeur_saisie = is_null($valeur_saisie) ? '' : $valeur_saisie;
$services_actifs[$service][substr($value,5)] = $valeur_saisie;
$i++;
}
}
}
if (ecrire_config('tarteaucitron/services',$services_actifs)) {
$ret['message_ok'] = _T('config_info_enregistree');
} else {
$ret['message_erreur'] = _T('erreur_technique_enregistrement_impossible');
}
$ret['editable'] = true;
return $ret;
}