From f6234b4f43b26c124e85748f0a331db57d4f4586 Mon Sep 17 00:00:00 2001 From: divinatus <milykim@hotmail.fr> Date: Mon, 5 Feb 2024 15:06:29 +0100 Subject: [PATCH] =?UTF-8?q?AJout=20d=C3=A9pendances=20M=C3=A9ta+=20et=20sq?= =?UTF-8?q?uelette=20par=20rubrique?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../metasplus/CHANGELOG.md | 11 + design_system_dependences/metasplus/TODO.md | 19 ++ .../formulaires/configurer_metasplus.php | 49 +++++ .../metasplus/inclure/metasplus/auteur.html | 9 + .../metasplus/inclure/metasplus/dist.html | 207 ++++++++++++++++++ .../inclure/metasplus/evenement.html | 8 + .../metasplus/inclure/metasplus/inc-dist.html | 186 ++++++++++++++++ .../metasplus/lang/metasplus.xml | 12 + .../metasplus/lang/metasplus_en.php | 34 +++ .../metasplus/lang/metasplus_fr.php | 32 +++ .../metasplus/lang/paquet-metasplus.xml | 12 + .../metasplus/lang/paquet-metasplus_en.php | 15 ++ .../metasplus/lang/paquet-metasplus_fr.php | 13 ++ .../metasplus/metasplus_administrations.php | 70 ++++++ .../metasplus/metasplus_autorisations.php | 44 ++++ .../metasplus/metasplus_fonctions.php | 161 ++++++++++++++ .../metasplus_identifier_contexte.html | 16 ++ .../metasplus/metasplus_pipelines.php | 148 +++++++++++++ .../metasplus/opengraph-150.png | Bin 0 -> 10808 bytes .../metasplus/opengraph-xx.svg | 5 + .../metasplus/paquet.xml | 25 +++ .../contenu/configurer_metasplus.html | 4 + .../squelettes/contenu/metasplus_previsu.html | 57 +++++ .../inclure/metasplus_bouton_previsu.html | 18 ++ .../spip/images/metasplus_previsu-16.png | Bin 0 -> 1437 bytes .../spip/images/metasplus_previsu-24.png | Bin 0 -> 10610 bytes .../spip/images/metasplus_previsu-32.png | Bin 0 -> 1889 bytes .../spip/images/metasplus_previsu-xx.svg | 6 + .../squelettes_par_rubrique/.gitignore | 7 + .../squelettes_par_rubrique/composer.json | 18 ++ .../lang/paquet-squelettes_par_rubrique.xml | 61 ++++++ .../paquet-squelettes_par_rubrique_de.php | 15 ++ .../paquet-squelettes_par_rubrique_en.php | 15 ++ .../paquet-squelettes_par_rubrique_eo.php | 15 ++ .../paquet-squelettes_par_rubrique_es.php | 15 ++ .../paquet-squelettes_par_rubrique_fa.php | 15 ++ .../paquet-squelettes_par_rubrique_fr.php | 13 ++ .../paquet-squelettes_par_rubrique_fr_fem.php | 15 ++ .../paquet-squelettes_par_rubrique_fr_tu.php | 15 ++ .../paquet-squelettes_par_rubrique_it.php | 15 ++ .../paquet-squelettes_par_rubrique_lb.php | 15 ++ .../paquet-squelettes_par_rubrique_nl.php | 15 ++ ...quet-squelettes_par_rubrique_oc_ni_mis.php | 15 ++ .../paquet-squelettes_par_rubrique_pt.php | 15 ++ .../paquet-squelettes_par_rubrique_pt_br.php | 15 ++ .../paquet-squelettes_par_rubrique_ru.php | 15 ++ .../paquet-squelettes_par_rubrique_sk.php | 15 ++ .../paquet-squelettes_par_rubrique_uk.php | 15 ++ .../squelettes_par_rubrique/paquet.xml | 15 ++ .../squelettes_par_rubrique/phpcs.xml.dist | 15 ++ .../phpstan-baseline.neon | 12 + .../squelettes_par_rubrique/phpstan.neon.dist | 12 + .../squelettes_par_rubrique-xx.svg | 5 + .../squelettes_par_rubrique_options.php | 107 +++++++++ 54 files changed, 1666 insertions(+) create mode 100644 design_system_dependences/metasplus/CHANGELOG.md create mode 100644 design_system_dependences/metasplus/TODO.md create mode 100644 design_system_dependences/metasplus/formulaires/configurer_metasplus.php create mode 100644 design_system_dependences/metasplus/inclure/metasplus/auteur.html create mode 100644 design_system_dependences/metasplus/inclure/metasplus/dist.html create mode 100644 design_system_dependences/metasplus/inclure/metasplus/evenement.html create mode 100644 design_system_dependences/metasplus/inclure/metasplus/inc-dist.html create mode 100644 design_system_dependences/metasplus/lang/metasplus.xml create mode 100644 design_system_dependences/metasplus/lang/metasplus_en.php create mode 100644 design_system_dependences/metasplus/lang/metasplus_fr.php create mode 100644 design_system_dependences/metasplus/lang/paquet-metasplus.xml create mode 100644 design_system_dependences/metasplus/lang/paquet-metasplus_en.php create mode 100644 design_system_dependences/metasplus/lang/paquet-metasplus_fr.php create mode 100644 design_system_dependences/metasplus/metasplus_administrations.php create mode 100644 design_system_dependences/metasplus/metasplus_autorisations.php create mode 100644 design_system_dependences/metasplus/metasplus_fonctions.php create mode 100644 design_system_dependences/metasplus/metasplus_identifier_contexte.html create mode 100644 design_system_dependences/metasplus/metasplus_pipelines.php create mode 100644 design_system_dependences/metasplus/opengraph-150.png create mode 100644 design_system_dependences/metasplus/opengraph-xx.svg create mode 100644 design_system_dependences/metasplus/paquet.xml create mode 100644 design_system_dependences/metasplus/prive/squelettes/contenu/configurer_metasplus.html create mode 100644 design_system_dependences/metasplus/prive/squelettes/contenu/metasplus_previsu.html create mode 100644 design_system_dependences/metasplus/prive/squelettes/inclure/metasplus_bouton_previsu.html create mode 100644 design_system_dependences/metasplus/prive/themes/spip/images/metasplus_previsu-16.png create mode 100644 design_system_dependences/metasplus/prive/themes/spip/images/metasplus_previsu-24.png create mode 100644 design_system_dependences/metasplus/prive/themes/spip/images/metasplus_previsu-32.png create mode 100644 design_system_dependences/metasplus/prive/themes/spip/images/metasplus_previsu-xx.svg create mode 100644 design_system_dependences/squelettes_par_rubrique/.gitignore create mode 100644 design_system_dependences/squelettes_par_rubrique/composer.json create mode 100644 design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique.xml create mode 100644 design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_de.php create mode 100644 design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_en.php create mode 100644 design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_eo.php create mode 100644 design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_es.php create mode 100644 design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_fa.php create mode 100644 design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_fr.php create mode 100644 design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_fr_fem.php create mode 100644 design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_fr_tu.php create mode 100644 design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_it.php create mode 100644 design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_lb.php create mode 100644 design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_nl.php create mode 100644 design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_oc_ni_mis.php create mode 100644 design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_pt.php create mode 100644 design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_pt_br.php create mode 100644 design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_ru.php create mode 100644 design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_sk.php create mode 100644 design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_uk.php create mode 100644 design_system_dependences/squelettes_par_rubrique/paquet.xml create mode 100644 design_system_dependences/squelettes_par_rubrique/phpcs.xml.dist create mode 100644 design_system_dependences/squelettes_par_rubrique/phpstan-baseline.neon create mode 100644 design_system_dependences/squelettes_par_rubrique/phpstan.neon.dist create mode 100644 design_system_dependences/squelettes_par_rubrique/squelettes_par_rubrique-xx.svg create mode 100644 design_system_dependences/squelettes_par_rubrique/squelettes_par_rubrique_options.php diff --git a/design_system_dependences/metasplus/CHANGELOG.md b/design_system_dependences/metasplus/CHANGELOG.md new file mode 100644 index 0000000..335371f --- /dev/null +++ b/design_system_dependences/metasplus/CHANGELOG.md @@ -0,0 +1,11 @@ +# Changelog + +## 2.4.5 - 2023-06-15 + +### Added + +- Un changelog + +### Fixed + +- #24 Notice php en moins, à piori levée sur la page d'accueil \ No newline at end of file diff --git a/design_system_dependences/metasplus/TODO.md b/design_system_dependences/metasplus/TODO.md new file mode 100644 index 0000000..71f3b5e --- /dev/null +++ b/design_system_dependences/metasplus/TODO.md @@ -0,0 +1,19 @@ +# Plugin Métas+ : choses à faire + +## Open graph + +### Propriétés + +article:section : rubriques + +## Twitter + +### propriétés + +twitter:site : en fonction des plugins installés, il y a peut-être moyen de renseigner le compte twitter + + +## Dublin Core + +Lire la doc ! +Prendre le plugin dublin core comme référence aussi. \ No newline at end of file diff --git a/design_system_dependences/metasplus/formulaires/configurer_metasplus.php b/design_system_dependences/metasplus/formulaires/configurer_metasplus.php new file mode 100644 index 0000000..48a2148 --- /dev/null +++ b/design_system_dependences/metasplus/formulaires/configurer_metasplus.php @@ -0,0 +1,49 @@ +<?php +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} + +function formulaires_configurer_metasplus_charger_dist() { + // Chargement automatique + $valeurs = cvtconf_formulaires_configurer_recense('configurer_metasplus', array()); + + // Compat bigup + $valeurs['_bigup_rechercher_fichiers'] = true; + + return $valeurs; +} + +function formulaires_configurer_metasplus_traiter_dist() { + + include_spip('inc/cvt_configurer'); + //refuser_traiter_formulaire_ajax(); + + $retours = array(); + + // Enregistrement de l'image + if ($documents = $_FILES) { + $mode = 'auto'; + include_spip('action/editer_liens'); + $ajouter_document = charger_fonction('ajouter_documents', 'action'); + if ( + $document = $ajouter_document(0, $documents, null, 0, $mode) + and $id_document = intval($document[0]) + ) { + sql_updateq('spip_documents',array('statut' => 'publie'), 'id_document='.intval($id_document)); + set_request('id_doc_logo',$id_document); + } + } + + // Enregistrement de la configuration + $trace = cvtconf_formulaires_configurer_enregistre('configurer_metasplus', array()); + $retours['message_ok'] = _T('config_info_enregistree') . $trace; + + // Si on traite le logo, on force une redirection + if (isset($id_document)) { + $retours['redirect'] = parametre_url(self(), 'id_document', $id_document, '&'); + } + + $retours['editable'] = true; + + return $retours; +} diff --git a/design_system_dependences/metasplus/inclure/metasplus/auteur.html b/design_system_dependences/metasplus/inclure/metasplus/auteur.html new file mode 100644 index 0000000..1c729e2 --- /dev/null +++ b/design_system_dependences/metasplus/inclure/metasplus/auteur.html @@ -0,0 +1,9 @@ +[(#REM) + + Métas+ : variante pour les auteurs + +] +<INCLURE{fond=inclure/metasplus/dist, + og-type=profile, + desc=#INFO_BIO{auteur,#ENV{id_auteur}}, + env} /> \ No newline at end of file diff --git a/design_system_dependences/metasplus/inclure/metasplus/dist.html b/design_system_dependences/metasplus/inclure/metasplus/dist.html new file mode 100644 index 0000000..4ba9e60 --- /dev/null +++ b/design_system_dependences/metasplus/inclure/metasplus/dist.html @@ -0,0 +1,207 @@ +[(#ENV{var_mode}|=={debug}|oui)#HTTP_HEADER{Content-Type:text/html}][(#ENV{debug}|oui)#HTTP_HEADER{Content-Type:text/plain}] +[(#REM) + + Métas+ : ce squelette génère les métas pour Dublin Core, Open Graph et Twitter. + + Pour déboguer sur spip.php?page=inclure/metasplus/dist : + - var_mode=debug pour le débug normal (sql, etc.) + - debug=oui pour avoir un simple retour texte + + Il s'agit du squelette par défaut inclus automatiquement dans le <head>, il tente de générer au mieux les informations des pages. + + Ce squelette récupére les valeurs *brutes* sans appliquer aucun filtre comme |textebrut, |attribut_html ou autre. + Ces filtres sont appliqués en aval dans le squelette inclus : inc-dist.tml + + On peut lui transmettre certaines valeurs à prendre en priorité par rapport à la récupération automatique. + + Il est possible de créer des variantes pour des pages précises : inclure/metasplus/{page}.html + Plusieurs possibilités pour le contenu des variantes : + - vide = pas de métas (voir aussi la constante _METASPLUS_PAGES_EXCLUES) + - inclure ce squelette en ne transmettant *que* les paramètres à modifier + - inclure inc-dist.html en transmettant *tous* les paramètres + - tout faire à la main + + Précisions : + - Sur une page d'objet, on met og-type = article par défaut + - Sur une page lambda, on omet volontairement le titre et la description puisqu'on ne les connait pas, twitter et facebook se rabattent sur les metas <title> et <description>. + + Format des logos : https://goo.gl/L4StmD + - Twitter : taille min 440 x 220 + taille recommandée 506 x 253 + taille max 1024 x 512 + poids max 5 Mo + ratio 2:1 + - Facebook : pas de taille min + taille recommandée > 600 x 315 ou 1200 x 630 (hidpi) + poids max 8 Mo + ratio 1.91:1 + + Contexte : + - type-page + - objet + - id_objet + - id_patate + + Paramètres : + - debug : 'Oui' quand on débogue le squelette + spip.php?page=inclure/metasplus/dist&objet=truc&id_objet=N&debug=oui + - titre : Titre de la ressource + - desc : Description + - langue : Langue au format iso. ex. fr + - territoire : Complète la langue pour former le duet langue_territoire, ex. UK + Si rien n'est renseigné, on tente un lang_LANG + - date : Date de publication au format Y-m-d + - maj : Date de mise à jour au format Y-m-d + - url : URL de la ressource + - auteurs : Soit un tableau linéaires + Soit des auteurs séparés par des virgules + - logos : Soit un tableau de tableaux associatifs avec URL et alt + #LISTE{#ARRAY{url,...,alt...},#ARRAY{url,...,alt...}} + Soit des URLs séparées par des virgules + - mots : Soit un tableau linéaire + Soit des mots-clés séparés par des virgules + - og-type : (open graph) Type de la ressource : article, profile, book, etc. + - dc-type : (dublin core) Type de la ressource : Text, Event, PhysicalObject, etc. + + Paramètres dépréciés : + - auteur => auteurs + - logo => logos + - lang => langue +] + +[(#REM) + + ======================================= + 1. Récupération automatique des valeurs + ======================================= + +] + +[(#REM) + + Cas 1 : Page d'un objet éditorial + +] +<BOUCLE_objet(CONDITION) {si #ENV{objet}|et{#ENV{id_objet}}}> +#SET{og-type_auto, article} +#SET{dc-type_auto, Text} +#SET{titre_auto, #INFO_TITRE{#ENV{objet},#ENV{id_objet}}|concat{" – ",#NOM_SITE_SPIP}} +#SET{desc_auto, #INFO_INTRODUCTION{#ENV{objet},#ENV{id_objet}} + |sinon{#INFO_DESCRIPTIF{#ENV{objet},#ENV{id_objet}}} + |sinon{#INFO_CHAPO{#ENV{objet},#ENV{id_objet}}} + |sinon{#INFO_TEXTE{#ENV{objet},#ENV{id_objet}}}} +#SET{url_auto, #INFO_URL{#ENV{objet},#ENV{id_objet}}} +#SET{date_auto, #INFO_DATE{#ENV{objet},#ENV{id_objet}}} +#SET{maj_auto, #INFO_MAJ{#ENV{objet},#ENV{id_objet}}} +#SET{langue_auto, #INFO_LANG{#ENV{objet},#ENV{id_objet}}|sinon{#LANG}} +#SET{territoire_auto, ''} + +[(#REM) Les auteurs ] +#SET{auteurs_auto,#ARRAY} +<BOUCLE_auteurs_objet(AUTEURS) + {objet} + {id_objet} + {par nom} + {si #ENV{auteurs}|non} + {si #CONFIG{metasplus/masquer_auteurs}|non} +> +#SET{auteurs_auto, #GET{auteurs_auto}|push{#NOM}} +</BOUCLE_auteurs_objet> +#SET{auteurs_auto, #NOM_SITE_SPIP} +<//B_auteurs_objet> + +[(#REM) Les mots-clés ] +#SET{mots_auto,#ARRAY} +<BOUCLE_mots_objet(MOTS) + {objet} + {id_objet} + {par titre} + {si #ENV{mots}|non} +> +#SET{mots_auto, #GET{mots_auto}|push{#TITRE}} +</BOUCLE_mots_objet> + +[(#REM) Les images : logo de l'objet puis images liées ] +<BOUCLE_logo_objet(CONDITION){si #ENV{logos}|non}> +#SET{id_rubrique,#INFO_ID_RUBRIQUE{#ENV{objet},#ENV{id_objet}}} +#SET{logo_objet, #ENV{objet}|id_table_objet|quete_logo{on,#ENV{id_objet},#GET{id_rubrique,0},0}} +#SET{logos_auto, #GET{logo_objet}|?{#LISTE{#ARRAY{url,#GET{logo_objet/src}}},#ARRAY}} +#SET{fichier_logo,#GET{logo_objet/src}|replace{#VAL{_NOM_PERMANENTS_ACCESSIBLES}|constant}|replace{'\.\./'}|supprimer_timestamp} +#SET{par,#SPIP_VERSION|floatval|>{3.1}|?{rang_lien,largeur}} +#SET{defaut_tri,#ARRAY{ + rang_lien, 1, + largeur, -1, +}} +<BOUCLE_images_objet(DOCUMENTS) + {objet} + {id_objet} + {media = image} + {extension != svg} + {fichier != #GET{fichier_logo}} + {tri #GET{par}, #GET{defaut_tri}} + {0,#GET{logos_auto}|?{2,3}} + {!par largeur} + {tout} +> +#SET{logos_auto, #GET{logos_auto}|push{#ARRAY{ + url, #FICHIER, + alt, #TITRE|sinon{#DESCRIPTIF}|couper{80}, +}}} +</BOUCLE_images_objet> +</BOUCLE_logo_objet> +</BOUCLE_objet> + + +[(#REM) + + Cas 2 : Page lambda + +] +#SET{og-type_auto, website} +#SET{dc-type_auto, Text} +#SET{titre_auto, #ENV{type-page,sommaire}|=={sommaire}|?{#NOM_SITE_SPIP|concat{" - ",#SLOGAN_SITE_SPIP}}} +#SET{desc_auto, #ENV{type-page,sommaire}|=={sommaire}|?{#DESCRIPTIF_SITE_SPIP}} +#SET{url_auto, #ENV{type-page,sommaire}|=={sommaire}|?{#URL_SITE_SPIP,#URL_PAGE{#ENV{type-page}}}} +#SET{date_auto, #DATE} +#SET{maj_auto, ''} +#SET{langue_auto, #LANG} +#SET{territoire_auto, ''} +#SET{auteurs_auto, #NOM_SITE_SPIP} +#SET{mots_auto, ''} +<//B_objet> + +[(#REM) + + Cas 1 et 2 : compléments + Pas de logo ? On prend celui configuré par défaut, sinon celui du site + +] +[(#ENV{logos}|non|et{#GET{logos_auto}|non}|oui) +#SET{logos_auto,#INFO_FICHIER{document,#CONFIG{metasplus/id_doc_logo}}|sinon{#LOGO_SITE_SPIP|extraire_attribut{src}}} +] + +[(#REM) + + ==================== + 2. Code des metas + ==================== + +] +<INCLURE{ + fond=inclure/metasplus/inc-dist, + titre=#ENV{titre,#GET{titre_auto}}, + desc=#ENV{desc,#GET{desc_auto}}, + url=#ENV{url,#GET{url_auto}}, + date=#ENV{date,#GET{date_auto}}, + maj=#ENV{maj,#GET{maj_auto}}, + langue=#ENV{langue,#GET{langue_auto}}, + territoire=#ENV{territoire,#GET{territoire_auto}}, + og-type=#ENV{og-type,#GET{og-type_auto}}, + dc-type=#ENV{dc-type,#GET{dc-type_auto}}, + logos=#ENV{logos,#GET{logos_auto}}, + auteurs=#ENV{auteurs,#GET{auteurs_auto}}, + mots=#ENV{mots,#GET{mots_auto}}, + env, +}/> + +#FILTRE{trim} diff --git a/design_system_dependences/metasplus/inclure/metasplus/evenement.html b/design_system_dependences/metasplus/inclure/metasplus/evenement.html new file mode 100644 index 0000000..5033f6d --- /dev/null +++ b/design_system_dependences/metasplus/inclure/metasplus/evenement.html @@ -0,0 +1,8 @@ +[(#REM) + + Métas+ : variante pour les évènements + +] +<INCLURE{fond=inclure/metasplus/dist, + dc-type=Event, + env} /> \ No newline at end of file diff --git a/design_system_dependences/metasplus/inclure/metasplus/inc-dist.html b/design_system_dependences/metasplus/inclure/metasplus/inc-dist.html new file mode 100644 index 0000000..8dd8be9 --- /dev/null +++ b/design_system_dependences/metasplus/inclure/metasplus/inc-dist.html @@ -0,0 +1,186 @@ +[(#REM) + + Métas+ : ce squelette contient le code des métas pour Dublin Core, Open Graph et Twitter. + Ici aucune requête SQL, on doit recevoir toutes les données. + Il est inclus dans inclure/metasplus/dist.html, voir ce dernier pour les explications et les paramètres. + +] +[(#REM) + + + ============================================ + 1) Normalisation et vérification des valeurs + ============================================ + + +] +#SET{titre, #ENV{titre}|trim|html_entity_decode|supprimer_tags|textebrut} +#SET{desc, #ENV{desc}|trim|html_entity_decode|supprimer_tags|textebrut} +#SET{url, #ENV{url}|trim} +#SET{date, #ENV{date}|trim} +#SET{maj, #ENV{maj}|trim} +#SET{lang, #ENV{langue}|trim} +#SET{og-type, #ENV{og-type}|trim} +#SET{dc-type, #ENV{dc-type}|trim} +#SET{territoire, #ENV{territoire}|=={en}|?{uk,#ENV{territoire,#ENV{langue}}}|strtoupper|trim} +#SET{locale, #ENV{langue}|concat{_,#GET{territoire}}|trim} +#SET{couper, 200} +#SET{dimensions, #ARRAY{ + opengraph, 1200:630, + twitter, 506:253, +}} +[(#REM) + auteurs +] +#SET{auteurs,#ARRAY} +<BOUCLE_normaliser_auteurs(DATA){source table, #ENV{auteurs}|is_array|?{#ENV{auteurs},#ENV{auteurs}|explode{','}}|array_filter}> +#SET{auteurs,#GET{auteurs}|push{#VALEUR|trim|html_entity_decode|supprimer_tags|textebrut}} +</BOUCLE_normaliser_auteurs> +[(#REM) + mots-clés +] +#SET{mots,#ARRAY} +<BOUCLE_normaliser_mots(DATA){source table, #ENV{mots}|is_array|?{#ENV{mots},#ENV{mots}|explode{','}}|array_filter}> +#SET{mots,#GET{mots}|push{#VALEUR|trim|html_entity_decode|supprimer_tags|textebrut}} +</BOUCLE_normaliser_mots> +[(#REM) + Logos +] +#SET{logos,#ARRAY} +<BOUCLE_normaliser_logos(DATA){source table, #ENV{logos}|is_array|?{#ENV{logos},#ENV{logos}|explode{','}}|array_filter}> +#SET{valeur,#VALEUR|is_array|?{ + #ARRAY{ + url, #VAL{#VALEUR{url}|supprimer_timestamp}, + alt, #VAL{#VALEUR{alt}|trim|supprimer_tags|textebrut}, + }, + #ARRAY{url,#VALEUR|supprimer_timestamp} +}|array_filter} +[(#CHEMIN{#GET{valeur/url}}|oui) +#SET{logos,#GET{logos}|push{#GET{valeur}}} +] +</BOUCLE_normaliser_logos> +[(#REM) + + + ============================ + 2) Affichage des métadonnées + ============================ + + +] +[(#REM) + + =========== + Dublin Core + =========== + + http://dublincore.org + +] +<BOUCLE_dublincore(CONDITION) {si #CONFIG{metasplus/dublincore}}> +<!-- Dublin Core --> +<link rel="schema.DC" href="https://purl.org/dc/elements/1.1/" /> +<link rel="schema.DCTERMS" href="https://purl.org/dc/terms/" /> +<meta name="DC.Format" content="text/html" /> +[<meta name="DC.Type" content="(#GET{dc-type})" />] +[<meta name="DC.Language" content="(#GET{lang})" />] +[<meta name="DC.Title" lang="#GET{lang}" content="(#GET{titre}|attribut_html)" />] +[<meta name="DC.Description.Abstract" lang="#GET{lang}" content="(#GET{desc}|couper{#GET{couper},'…'}|attribut_html)" />] +[<meta name="DC.Date" content="(#GET{date}|affdate{Y-m-d})" />] +[<meta name="DC.Date.Modified" content="(#GET{maj}|affdate{Y-m-d})" />] +[<meta name="DC.Identifier" content="(#GET{url}|url_absolue)" />] +[<meta name="DC.Publisher" content="(#NOM_SITE_SPIP|attribut_html)" />] +[<meta name="DC.Source" content="(#URL_SITE_SPIP)" />] +<BOUCLE_auteurs_dublincore(DATA){source table, #GET{auteurs}}> +[<meta name="DC.Creator" content="(#VALEUR|attribut_html)" />] +</BOUCLE_auteurs_dublincore> +<BOUCLE_mots_dublincore(DATA) {source table, #GET{mots}}> +[<meta name="DC.Subject" content="(#VALEUR|attribut_html)" />] +</BOUCLE_mots_dublincore> +</BOUCLE_dublincore> +[(#REM) + + ========== + Open Graph + ========== + + http://ogp.me + https://developers.facebook.com/docs/sharing/opengraph/object-properties + https://developers.facebook.com/docs/sharing/webmasters/images + https://developers.facebook.com/tools/debug/ + +] +<BOUCLE_opengraph(CONDITION) {si #CONFIG{metasplus/opengraph}}> +<!-- Open Graph --> +[(#GET{logos}|count|oui) +<meta property="og:rich_attachment" content="true" /> +] +[<meta property="og:site_name" content="(#NOM_SITE_SPIP|attribut_html)" />] +[<meta property="og:type" content="(#GET{og-type}|attribut_html)" />] +[<meta property="og:title" content="(#GET{titre}|attribut_html)" />] +[<meta property="og:locale" content="(#GET{locale})" />] +[<meta property="og:url" content="(#GET{url}|url_absolue)" />] +[<meta property="og:description" content="(#GET{desc}|couper{#GET{couper},'…'}|attribut_html)" />] +#SET{largeur,#GET{dimensions/opengraph}|explode{:}|table_valeur{0}} +#SET{hauteur,#GET{dimensions/opengraph}|explode{:}|table_valeur{1}} +<BOUCLE_logos_opengraph(DATA) {source table, #GET{logos}}> +#SET{src, #VALEUR{url}|image_recadre{#GET{dimensions/opengraph},-,focus} + |image_reduire{#GET{largeur},#GET{hauteur}} + |extraire_attribut{src} + |sinon{#VALEUR{url}} + |supprimer_timestamp} +[(#VAL{finfo_file}|function_exists|oui) +#SET{finfo,#EVAL{FILEINFO_MIME_TYPE}|finfo_open} +#SET{mimetype,#GET{finfo}|finfo_file{#GET{src}}} +] +[<meta property="og:image" content="(#GET{src}|url_absolue)" />] +[<meta property="og:image:width" content="(#GET{src}|largeur)" />] +[<meta property="og:image:height" content="(#GET{src}|hauteur)" />] +[<meta property="og:image:type" content="(#GET{mimetype})" />] +[<meta property="og:image:alt" content="(#VALEUR{alt}|couper{80}|attribut_html)" />] +</BOUCLE_logos_opengraph> +<BOUCLE_article_opengraph(CONDITION) {si #GET{og-type}|=={article}}> +[<meta property="article:published_time" content="(#GET{date}|affdate{Y-m-d})" />] +[<meta property="article:modified_time" content="(#GET{maj}|affdate{Y-m-d})" />] +<BOUCLE_auteurs_opengraph(DATA){source table, #GET{auteurs}}> +[<meta property="article:author" content="(#VALEUR|attribut_html)" />] +</BOUCLE_auteurs_opengraph> +<BOUCLE_mots_opengraph(DATA) {source table, #GET{mots}}> +[<meta property="article:tag" content="(#VALEUR|attribut_html)" />] +</BOUCLE_mots_opengraph> +</BOUCLE_article_opengraph> +[(#REM) Si plugin facebook, on envoie la méta fb:app_id ] +[<meta property="fb:app_id" content="(#CONFIG{facebook/cle})" />] +</BOUCLE_opengraph> +[(#REM) + + ============ + Twitter Card + ============ + + https://dev.twitter.com/cards/types/summary + https://dev.twitter.com/cards/types/summary-large-image + https://cards-dev.twitter.com/validator + +] +<BOUCLE_twitter(CONDITION) {si #CONFIG{metasplus/twitter}}> +<!-- Twitter Card --> +<meta name="twitter:card" content="[(#GET{logos}|count|?{summary_large_image,summary})]" /> +[<meta name="twitter:title" content="(#GET{titre}|attribut_html)" />] +[<meta name="twitter:description" content="(#GET{desc}|couper{#GET{couper},'…'}|attribut_html)" />] +<meta name="twitter:dnt" content="on" /> +[<meta name="twitter:url" content="(#GET{url}|url_absolue)" />] +#SET{largeur,#GET{dimensions/twitter}|explode{:}|table_valeur{0}} +#SET{hauteur,#GET{dimensions/twitter}|explode{:}|table_valeur{1}} +<BOUCLE_images_twitter(DATA) {source table, #GET{logos}} {0,1}> +#SET{src, #VALEUR{url}|image_recadre{#GET{dimensions/twitter},-,focus} + |image_reduire{#GET{largeur},#GET{hauteur}} + |extraire_attribut{src} + |sinon{#VALEUR{url}} + |timestamp} +[<meta name="twitter:image" content="(#GET{src}|url_absolue)" />] +[<meta property="twitter:image:alt" content="(#VALEUR{alt}|couper{80}|attribut_html)" />] +</BOUCLE_images_twitter> +</BOUCLE_twitter> + +#FILTRE{trim} diff --git a/design_system_dependences/metasplus/lang/metasplus.xml b/design_system_dependences/metasplus/lang/metasplus.xml new file mode 100644 index 0000000..8c288b6 --- /dev/null +++ b/design_system_dependences/metasplus/lang/metasplus.xml @@ -0,0 +1,12 @@ +<traduction + module="metasplus" + id="metasplus--metasplus-23d39" + gestionnaire="salvatore" + url="https://trad.spip.net" + source="https://git.spip.net/spip-contrib-extensions/metasplus.git" + reference="fr"> + <langue code="en" url="https://trad.spip.net/tradlang_module/metasplus?lang_cible=en" total="15" traduits="15" relire="0" modifs="0" nouveaux="0" pourcent="100.00"> + <traducteur nom="raphael" lien="https://trad.spip.net/auteur/raphael-7042" /> + </langue> + <langue code="fr" url="https://trad.spip.net/tradlang_module/metasplus?lang_cible=fr" total="15" traduits="15" relire="0" modifs="0" nouveaux="0" pourcent="100.00" /> +</traduction> diff --git a/design_system_dependences/metasplus/lang/metasplus_en.php b/design_system_dependences/metasplus/lang/metasplus_en.php new file mode 100644 index 0000000..34b808a --- /dev/null +++ b/design_system_dependences/metasplus/lang/metasplus_en.php @@ -0,0 +1,34 @@ +<?php +// This is a SPIP language file -- Ceci est un fichier langue de SPIP +// extrait automatiquement de https://trad.spip.net/tradlang_module/metasplus?lang_cible=en +// ** ne pas modifier le fichier ** + +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} + +$GLOBALS[$GLOBALS['idx_lang']] = array( + + // E + 'explication_id_doc_logo' => 'Allows you to use an image of your choice instead of the SPIP site logo (properties "og:image" and "twitter:image", recommended format: 1,91:1)', + 'explication_masquer_auteurs' => 'Check this option if you do not want to publish the names of the content writers: the site name will be used instead.', + + // I + 'icone_previsu' => 'Meta+ Overview', + 'icone_previsu_title' => 'Overview of Dublin Core, Open Graph and Twitter metadata.', + + // L + 'label_case_masquer_auteurs' => 'Use the name of the site as the author of the content', + 'label_dublincore' => 'Dublin Core', + 'label_masquer_auteurs' => 'Authors', + 'label_opengraph' => 'Open Graph', + 'label_previsu_fond' => 'Background used', + 'label_previsu_objet' => 'Editorial object', + 'label_reseaux' => 'Check the meta to be included', + 'label_twitter' => 'Twitter', + 'logo_bis' => 'Site image', + + // T + 'titre_config_metasplus' => 'Configure Meta +', + 'titre_previsu' => 'Overview of Dublin Core, Open Graph and Twitter metadata.' +); diff --git a/design_system_dependences/metasplus/lang/metasplus_fr.php b/design_system_dependences/metasplus/lang/metasplus_fr.php new file mode 100644 index 0000000..7e7e541 --- /dev/null +++ b/design_system_dependences/metasplus/lang/metasplus_fr.php @@ -0,0 +1,32 @@ +<?php +// This is a SPIP language file -- Ceci est un fichier langue de SPIP +// Fichier source, a modifier dans https://git.spip.net/spip-contrib-extensions/metasplus.git +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} + +$GLOBALS[$GLOBALS['idx_lang']] = array( + + // E + 'explication_id_doc_logo' => 'Permet d’utiliser une image de votre choix à la place du logo du site SPIP (propriétés "og:image" et "twitter:image", format conseillé : 1,91:1)', + 'explication_masquer_auteurs' => 'Cochez cette option si vous ne souhaitez pas diffuser le nom des rédacteurs des contenus : le nom du site sera utilisé à la place.', + + // I + 'icone_previsu' => 'Aperçu des métas+', + 'icone_previsu_title' => 'Aperçu des métadonnées Dublin Core, Open Graph et Twitter.', + + // L + 'label_case_masquer_auteurs' => 'Utiliser le nom du site comme auteur des contenus', + 'label_dublincore' => 'Dublin Core', + 'label_masquer_auteurs' => 'Auteurs', + 'label_opengraph' => 'Open Graph', + 'label_previsu_fond' => 'Fond utilisé', + 'label_previsu_objet' => 'Objet éditorial', + 'label_reseaux' => 'Cochez les métas à inclure', + 'label_twitter' => 'Twitter', + 'logo_bis' => 'Image du site', + + // T + 'titre_config_metasplus' => 'Configurer Métas +', + 'titre_previsu' => 'Aperçu des métadonnées Dublin Core, Open Graph et Twitter.' +); diff --git a/design_system_dependences/metasplus/lang/paquet-metasplus.xml b/design_system_dependences/metasplus/lang/paquet-metasplus.xml new file mode 100644 index 0000000..2387ee3 --- /dev/null +++ b/design_system_dependences/metasplus/lang/paquet-metasplus.xml @@ -0,0 +1,12 @@ +<traduction + module="paquet-metasplus" + id="paquet-metasplus--metasplus-23d39" + gestionnaire="salvatore" + url="https://trad.spip.net" + source="https://git.spip.net/spip-contrib-extensions/metasplus.git" + reference="fr"> + <langue code="en" url="https://trad.spip.net/tradlang_module/paquet-metasplus?lang_cible=en" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00"> + <traducteur nom="raphael" lien="https://trad.spip.net/auteur/raphael-7042" /> + </langue> + <langue code="fr" url="https://trad.spip.net/tradlang_module/paquet-metasplus?lang_cible=fr" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00" /> +</traduction> diff --git a/design_system_dependences/metasplus/lang/paquet-metasplus_en.php b/design_system_dependences/metasplus/lang/paquet-metasplus_en.php new file mode 100644 index 0000000..8463b8c --- /dev/null +++ b/design_system_dependences/metasplus/lang/paquet-metasplus_en.php @@ -0,0 +1,15 @@ +<?php +// This is a SPIP language file -- Ceci est un fichier langue de SPIP +// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-metasplus?lang_cible=en +// ** ne pas modifier le fichier ** + +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} + +$GLOBALS[$GLOBALS['idx_lang']] = array( + + // M + 'metasplus_description' => 'Improve the indexing of your articles in search engines and their display on social networks with Dublin Core, Open Graph and Twitter Card metadata.', + 'metasplus_slogan' => 'Metadata for Open Graph, Duclin Core and Twitter' +); diff --git a/design_system_dependences/metasplus/lang/paquet-metasplus_fr.php b/design_system_dependences/metasplus/lang/paquet-metasplus_fr.php new file mode 100644 index 0000000..66cf875 --- /dev/null +++ b/design_system_dependences/metasplus/lang/paquet-metasplus_fr.php @@ -0,0 +1,13 @@ +<?php +// This is a SPIP language file -- Ceci est un fichier langue de SPIP +// Fichier source, a modifier dans https://git.spip.net/spip-contrib-extensions/metasplus.git +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} + +$GLOBALS[$GLOBALS['idx_lang']] = array( + + // M + 'metasplus_description' => 'Améliorez l’indexation de vos articles dans les moteurs et leur affichage sur les réseaux sociaux grâce aux métadonnées Dublin Core, Open Graph et Twitter Card.', + 'metasplus_slogan' => 'Métadonnées pour Open Graph, Duclin Core et Twitter' +); diff --git a/design_system_dependences/metasplus/metasplus_administrations.php b/design_system_dependences/metasplus/metasplus_administrations.php new file mode 100644 index 0000000..50ced8d --- /dev/null +++ b/design_system_dependences/metasplus/metasplus_administrations.php @@ -0,0 +1,70 @@ +<?php +/** + * Fichier gérant l'installation et désinstallation du plugin Métas+ + * + * @plugin Métas+ + * @copyright 2018 + * @author Tetue, Erational, Tcharlss + * @licence GNU/GPL + * @package SPIP\Metas+\Installation + */ + +// Sécurité +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} + + +/** + * Fonction d'installation et de mise à jour du plugin Métas+. + * + * @param string $nom_meta_base_version + * Nom de la meta informant de la version du schéma de données du plugin installé dans SPIP + * @param string $version_cible + * Version du schéma de données dans ce plugin (déclaré dans paquet.xml) + * @return void +**/ +function metasplus_upgrade($nom_meta_base_version, $version_cible) { + $maj = array(); + + // 1ère installation : passe la config en opt-in + $maj['create'] = array( + array('metasplus_maj_create'), + ); + + include_spip('base/upgrade'); + maj_plugin($nom_meta_base_version, $version_cible, $maj); +} + + +/** + * Fonction de désinstallation du plugin Métas+. + * + * @param string $nom_meta_base_version + * Nom de la meta informant de la version du schéma de données du plugin installé dans SPIP + * @return void +**/ +function metasplus_vider_tables($nom_meta_base_version) { + effacer_meta($nom_meta_base_version); +} + + +/** + * Fonction privée pour la mise à jour create (1ère installation) + * On passe la config des protocoles en opt-in + * + * @return Void + */ +function metasplus_maj_create(){ + include_spip('inc/config'); + $config = lire_config('metasplus'); + $protocoles = array('dublincore', 'opengraph', 'twitter'); + foreach($protocoles as $protocole) { + if (empty($config[$protocole])) { + $config[$protocole] = 'on'; + } else { + unset($config[$protocole]); + } + } + ecrire_config('metasplus', $config); +} \ No newline at end of file diff --git a/design_system_dependences/metasplus/metasplus_autorisations.php b/design_system_dependences/metasplus/metasplus_autorisations.php new file mode 100644 index 0000000..4cc69cc --- /dev/null +++ b/design_system_dependences/metasplus/metasplus_autorisations.php @@ -0,0 +1,44 @@ +<?php +/** + * Définit les autorisations du plugin Métas+ + * + * @plugin Métas+ + * @copyright 2016-2018 + * @author Tetue, Erational, Tcharlss + * @licence GNU/GPL + * @package SPIP\Metas+\Autorisations + */ + +// Sécurité +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} + + +/** + * Fonction d'appel pour le pipeline + * @pipeline autoriser */ +function metasplus_autoriser() { +} + + +/** + * Autorisation de prévisualiser les métas+ d'un objet + * + * Il faut être admin et avoir le droit de modifier l'objet + * + * @param string $faire Action demandée + * @param string $type Type d'objet sur lequel appliquer l'action + * @param int $id Identifiant de l'objet + * @param array $qui Description de l'auteur demandant l'autorisation + * @param array $opt Options de cette autorisation + * @return bool true s'il a le droit, false sinon +**/ +function autoriser_previsualiser_metasplus_dist($faire, $type, $id, $qui, $opt){ + + $is_admin = ($qui['statut'] == '0minirezo'); + $autoriser_modifier = autoriser('modifier', $type, $id, $qui, $opt); + $autoriser = ($is_admin and $autoriser_modifier); + + return $autoriser; +} \ No newline at end of file diff --git a/design_system_dependences/metasplus/metasplus_fonctions.php b/design_system_dependences/metasplus/metasplus_fonctions.php new file mode 100644 index 0000000..d73bd73 --- /dev/null +++ b/design_system_dependences/metasplus/metasplus_fonctions.php @@ -0,0 +1,161 @@ +<?php +/** + * Fonctions utiles au plugin Métas+ + * + * @plugin Métas+ + * @copyright 2016-2018 + * @author Tetue, Erational, Tcharlss + * @licence GNU/GPL + * @package SPIP\Metas+\Fonctions + */ + +/** + * Retrouver le contexte d'après l'URL : type de page, objet éventuel + * + * @Note + * Il n'est pas recommandé d'utiliser $GLOBALS['contexte], + * donc on utilise la fonction qui décode l'URL + * et retourne un tableau linéaire avec les bonnes infos : + * [0] => page (le fond) + * [1][id_patate] => identifiant si page d'un objet + * [1][erreur] => erreur éventuelle (404) + * + * @param string $url + * @return array + * Tableau associatif : + * array{ + * type-page: string (type de page), + * erreur: bool (true si page ou décodage en erreur), + * objet: string (type d'objet éventuel), + * id_objet: int (numéro d'objet éventuel), + * id_patate: int (numéro d'objet éventuel) + * } + */ +function metasplus_identifier_contexte($url) { + + // Decoder_url nous donne quelques infos sur la page actuelle + // type-page n'est rempli que pour les objets éditoriaux + $decoder_url = charger_fonction('decoder_url', 'urls'); + $decodage = $decoder_url($url); + $type_page = (!empty($decodage[0]) ? $decodage[0] : ''); + $erreur = (isset($decodage[1]['erreur']) ? true : false); + + // On retourne au minimum le type de page et l'erreur + $contexte = array( + 'type-page' => $type_page, + 'erreur' => $erreur, + ); + + // On complète les infos pour repérer la page d'accueil, les pages autonomes, + // et donner des choses complémentaires sur l'éventuel objet. + if (!$erreur) { + + // S'agit-il d'une page autonome ? (?page=truc) + $query_page = (defined('_SPIP_PAGE') ? _SPIP_PAGE : 'page'); + $page_autonome = _request($query_page); + + // Soit c'est la page d'un objet + if ($type_page) { + include_spip('base/objets'); + $cle_objet = id_table_objet($type_page); + $id_objet = (isset($decodage[1][$cle_objet]) ? intval($decodage[1][$cle_objet]) : 0); + if ($id_objet) { + $contexte['objet'] = $type_page; + $contexte['id_objet'] = $id_objet; + $contexte[$cle_objet] = $id_objet; // ça peut servir + } + + // Soit c'est une page autonome ?page=truc + } elseif ($page_autonome) { + $contexte['type-page'] = $page_autonome; + + // Soit c'est la page d'accueil + } else { + $contexte['type-page'] = 'sommaire'; + + // Exception pour le plugin multidomaines : on est dans une rubrique + // TODO : faire un pipeline + if (test_plugin_actif('multidomaines')) { + $multidomaines = lire_config('multidomaines'); + foreach ($multidomaines as $id_rubrique => $domaine) { + if ($domaine['url'] && rtrim($url, '/') == $domaine['url']) { + $contexte['type-page'] = 'rubrique'; + $contexte['erreur'] = false; + $contexte['objet'] = 'rubrique'; + $contexte['id_objet'] = $id_rubrique; + $contexte['id_article'] = $id_rubrique; + $contexte['url'] = $url; + } + } + } + } + } + + return $contexte; +} + + +/** + * Sélectionner le squelette des métadonnées pour un type de page + * + * On cherche dans l'ordre : + * + * - 1) inclure/metaplus/<type-page>-<composition>.html + * - 2) inclure/metaplus/<type-page>.html + * - 3) inclure/metaplus/dist.html + * + * @param array $contexte + * Contexte de la page, avec le type de page, le type d'objet etc. + * @return string + * Le fond + */ +function metasplus_selectionner_fond($contexte) { + + include_spip('inc/utils'); + + $fond = ''; + $type_page = (!empty($contexte['type-page']) ? $contexte['type-page'] : ''); + $objet = (!empty($contexte['objet']) ? $contexte['objet'] : ''); + $id_objet = (!empty($contexte['id_objet']) ? intval($contexte['id_objet']) : ''); + $composition = ''; + $racine = 'inclure/metasplus/'; + $fond_defaut = $racine . 'dist'; + $fond_page = $racine . $type_page; + $fond_composition = ''; + + if ( + test_plugin_actif('compositions') + and $objet + and $id_objet + and include_spip('compositions_fonctions') + and $composition = compositions_determiner($objet, $id_objet) + ) { + $fond_composition = $fond_page . '-' . $composition; + } + + // En priorité, le fond de la composition du type de page + if ($composition and find_in_path($fond_composition.'.html')) { + $fond = $fond_composition; + // Sinon le fond du type de page + } elseif (find_in_path($fond_page.'.html')) { + $fond = $fond_page; + // Sinon le fond générique + } elseif (find_in_path($fond_defaut.'.html')) { + $fond = $fond_defaut; + } + + return $fond; +} + +/** + * @param array $args + * @param \Spip\Bigup\Formulaire $formulaire + * @return \Spip\Bigup\Formulaire + */ +function inc_bigup_medias_formulaire_configurer_metasplus_dist($args, $formulaire) { + $formulaire->preparer_input_class( + 'bigup', // 'file' pour rendre automatique. + ['previsualiser' => true] + ); + return $formulaire; +} diff --git a/design_system_dependences/metasplus/metasplus_identifier_contexte.html b/design_system_dependences/metasplus/metasplus_identifier_contexte.html new file mode 100644 index 0000000..40f1cf8 --- /dev/null +++ b/design_system_dependences/metasplus/metasplus_identifier_contexte.html @@ -0,0 +1,16 @@ +[(#REM) + + Squelette technique pour retrouver le contexte correspondant à une URL. + Cf. pipeline affichage_final + + Renvoie le contexte sous forme de tableau associatif sérialisé : + - type-page : le type de la page + - objet : le type d'objet le cas échéant + - id_objet : son identifiant + - id_patate : idem, mais avec le nom de sa clé primaire + - erreur : 'true' si la page est en erreur + + Paramètres : + - url : url à décoder, par défaut l'url courante. + +][(#ENV{url,#SELF}|url_absolue|metasplus_identifier_contexte|serialize)] \ No newline at end of file diff --git a/design_system_dependences/metasplus/metasplus_pipelines.php b/design_system_dependences/metasplus/metasplus_pipelines.php new file mode 100644 index 0000000..e2b5db7 --- /dev/null +++ b/design_system_dependences/metasplus/metasplus_pipelines.php @@ -0,0 +1,148 @@ +<?php +/** + * Utilisations de pipelines par le plugin Métas+ + * + * @plugin Métas+ + * @copyright 2016-2018 + * @author Tetue, Erational, Tcharlss + * @licence GNU/GPL + * @package SPIP\Metas+\Pipelines + */ + +// Sécurité +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} + + +/** + * Effectuer des traitements juste avant l'envoi des pages publiques. + * + * => Ajout des métadonnéess Open Graph, Dublin Core et Twitter + * dans le <head> public de certaines pages. + * + * @Note : on retrouve les informations du contexte de la page + * au moyen d'un squelette pour bénéficier de la mise en cache + * et éviter des requêtes SQL à chaque hit via decoder_url(). + * + * @uses metasplus_identifier_contexte() + * @uses metasplus_selectionner_fond() + * + * @param $flux + * @return mixed + */ +function metasplus_affichage_final($flux) { + + include_spip('inc/config'); + include_spip('inc/utils'); // pour self() + + // Tests préliminaires avant d'inclure éventuellement les métas + if ( + // C'est du HTML et on est pas dans le privé + $GLOBALS['html'] + and !test_espace_prive() + // Il y a un <head> + and $pos_head = strpos($flux, '</head>') + // Au moins un protocole est activé + and $config = lire_config('metasplus') + and !empty($config) + // Le contexte est retrouvé + and $url = self() + and $contexte = recuperer_fond('metasplus_identifier_contexte', array('url' => $url)) + // On est pas en var_mode=inclure (plantage de unserialize) + and !strpos( $contexte, 'inclure_blocs') + and is_array($contexte = unserialize($contexte)) + // On a une page sans erreur + and !empty($contexte['type-page']) + and $contexte['erreur'] === false + // La page n'est pas exclue + and is_array($pages_exclues = ( + (defined('_METASPLUS_PAGES_EXCLUES') and _METASPLUS_PAGES_EXCLUES) ? + explode(',', _METASPLUS_PAGES_EXCLUES) : + array() + )) + and (!in_array($contexte['type-page'], $pages_exclues)) + // Ce n'est pas une page d'un pseudo fichier (ex. robots.txt.html) + and !strpos($contexte['type-page'], '.') + ) { + + // Trouver le squelette à utiliser + include_spip('metasplus_fonctions'); + $fond = metasplus_selectionner_fond($contexte); + + // Si le squelette n'est pas vide, on ajoute son contenu à la fin du head + // On complète avec le contexte par défaut qui peut contenir des query strings et cie + $contexte_defaut = ((isset($GLOBALS['contexte']) and is_array($GLOBALS['contexte'])) ? $GLOBALS['contexte'] : array()); + $full_contexte = array_merge($contexte_defaut, $contexte); + if ( + $fond + and $metas = recuperer_fond($fond, $full_contexte) + ) { + $metas = "<!-- Plugin Métas + -->\n$metas\n"; + $flux = substr_replace($flux, $metas, $pos_head, 0); + } + } + + return $flux; +} + + +/** + * pipeline post_edition pour supprimer la meta metasplus/id_doc_logo + * quand on supprime l'image dans le formulaire de configuration + * + * @param $flux + * @return $flux + * @author tofulm + */ +function metasplus_post_edition($flux) { + if ( + isset($flux['args']['table']) + and $flux['args']['table'] === 'spip_documents' + and isset($flux['args']['operation']) + and $flux['args']['operation'] === 'supprimer_document' + and isset($flux['args']['action']) + and $flux['args']['action'] === 'supprimer_document' + and include_spip('inc/config') + and $flux['args']['id_objet'] == lire_config('metasplus/id_doc_logo') + ) { + effacer_config('metasplus/id_doc_logo'); + } + return $flux; +} + + +/** + * Gérer les informations affichées dans l’espace privé + * dans le cadre d’information des objets SPIP + * + * => Ajout du bouton de prévisualisation des métas+ + * + * @param $flux + * @return $flux + * @author tofulm + */ +function metasplus_boite_infos($flux) { + + if ( + $objet = $flux['args']['type'] + and $id_objet = $flux['args']['id'] + and autoriser('previsualiser_metasplus', $objet, $id_objet) + and objet_info($objet,'page') + ) { + include_spip('base/objets'); + include_spip('inc/filtres'); + $type_page = objet_info($objet, 'page'); + $id_table_objet = id_table_objet($objet); + $contexte = array( + 'type-page' => $type_page, + 'objet' => $objet, + 'id_objet' => $id_objet, + $id_table_objet => $id_objet, + ); + $fond_previsu = recuperer_fond('prive/squelettes/inclure/metasplus_bouton_previsu', $contexte); + $flux['data'] .= $fond_previsu; + } + + return $flux; +} diff --git a/design_system_dependences/metasplus/opengraph-150.png b/design_system_dependences/metasplus/opengraph-150.png new file mode 100644 index 0000000000000000000000000000000000000000..2bb1c2e0cb5e6ed187a2e9d513da943bd955c307 GIT binary patch literal 10808 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 literal 0 HcmV?d00001 diff --git a/design_system_dependences/metasplus/opengraph-xx.svg b/design_system_dependences/metasplus/opengraph-xx.svg new file mode 100644 index 0000000..c788af7 --- /dev/null +++ b/design_system_dependences/metasplus/opengraph-xx.svg @@ -0,0 +1,5 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" width="64" height="64"> + <path d="M57.2 41.1c-.9 0-1.7.2-2.4.5-.3-.2-.5-.4-1-.6V19.4L31.9 6.7 13.6 17.5l-.9-.6c0-3.2-2.6-5.8-5.8-5.8C3.6 11.2 1 13.8 1 17s2.6 5.8 5.8 5.8c.9 0 1.7-.2 2.4-.5.3.2.7.4.9.5v21.8L32 57.3l18.5-10.8c.3.2.5.3.8.5 0 3.2 2.6 5.8 5.8 5.8 3.2 0 5.8-2.6 5.8-5.8.1-3.3-2.5-5.9-5.7-5.9" fill="#b8c6c9"/> + <path d="M32 53.7l18.7-10.9V21.3L32 10.4l-18.7 11v21.4L32 53.7m27.8-6.8c0 1.5-1.2 2.7-2.6 2.7-1.5 0-2.6-1.2-2.6-2.7 0-1.5 1.2-2.7 2.6-2.7 1.4.1 2.6 1.3 2.6 2.7M4.2 17c0-1.5 1.2-2.7 2.6-2.7 1.5 0 2.6 1.2 2.6 2.7s-1.2 2.7-2.6 2.7-2.6-1.2-2.6-2.7" fill="#759bc5"/> + <path d="M57.2 48.5c-.9 0-1.6-.7-1.6-1.6 0-.9.7-1.6 1.6-1.6.9 0 1.6.7 1.6 1.6 0 .9-.7 1.6-1.6 1.6zm-21.6 1.8c1.7-2.5 3.8-6.1 5-10.4 2.7.6 5.2 1.4 7.9 2.8l-12.9 7.6zM22.5 25.6c-.4 1.7-.7 3.6-.8 5.6h-7.5v-8.6c2.8 1.4 5.6 2.4 8.3 3zm-15.7-7c-.9 0-1.6-.7-1.6-1.6 0-.9.7-1.6 1.6-1.6.9 0 1.6.7 1.6 1.6 0 .9-.7 1.6-1.6 1.6zM28 14c-1.7 2.4-3.7 5.8-5 10-2.5-.5-4.9-1.4-7.4-2.7L28 14zm4.7 23.5v-2c1.4-.3 2.5-1.3 2.8-2.7h4.9c-.1 1.8-.3 3.6-.7 5.2-2.2-.3-4.5-.5-7-.5zm0 1.7c2.4 0 4.5.2 6.5.5-1.7 5.5-4.7 9.9-6.5 12V39.2zm-9.7 1c1.2 4.1 3.2 7.5 5 9.9l-12.7-7.3c1.5-.8 4.2-1.8 7.7-2.6zm5.5-7.4c.3 1.3 1.4 2.4 2.7 2.7v2c-2.4 0-4.8.3-7.2.7-.4-1.7-.7-3.5-.7-5.4h5.2zm2.7-6.3v2c-1.3.3-2.4 1.3-2.7 2.7h-5.2c.1-1.9.3-3.6.7-5.3 2.2.3 4.6.5 7.2.6zm0-13.1v11.3c-2.5 0-4.7-.2-6.7-.5 1.7-5.6 4.9-9.9 6.7-11.9v1.1zm9.4 10.5c-1.3-4.2-3.3-7.7-5-10.1l13 7.6c-1.6.6-4.3 1.7-8 2.5zm-7.9-10.5v-1.1c1.7 2.1 4.8 6.3 6.5 11.9-2.1.4-4.3.6-6.5.6V13.4zM32 33.9c-1.1 0-1.9-.9-1.9-1.9 0-1.1.9-1.9 1.9-1.9 1.1 0 1.9.9 1.9 1.9 0 1-.9 1.9-1.9 1.9zm-.8 17.9c-1.8-2-5-6.2-6.7-11.9 2.2-.4 4.4-.6 6.7-.7v12.6zm4.3-20.7c-.3-1.3-1.4-2.4-2.8-2.7v-2c2.3 0 4.6-.2 6.9-.6.4 1.7.7 3.5.7 5.3h-4.8zm13.9 0h-7.7c-.1-2-.4-3.8-.8-5.6 4-.8 7.1-2 8.5-2.8v8.4zm-35.1 1.7h7.5c.1 2 .3 3.9.7 5.7-3.8.8-6.5 2-8.2 2.8v-8.5zM41 38.3c.4-1.7.6-3.6.7-5.5h7.8v8.6c-2.7-1.5-5.6-2.5-8.5-3.1zm16.2 4.9c-1 0-1.9.4-2.6 1-1-.6-2-1.2-3-1.7V20.7L31.9 9.2l-18.5 11c-1-.6-2-1.2-3.1-1.8.1-.4.2-.8.2-1.2 0-2-1.7-3.7-3.7-3.7s-3.7 1.7-3.7 3.7 1.7 3.7 3.7 3.7c1 0 1.8-.4 2.5-1 1 .6 2.1 1.2 2.8 1.7v22L31.9 55l18.8-11 3 1.8c-.1.4-.2.8-.2 1.2 0 2 1.7 3.7 3.7 3.7s3.7-1.7 3.7-3.7-1.7-3.8-3.7-3.8z" fill="#343532"/> +</svg> diff --git a/design_system_dependences/metasplus/paquet.xml b/design_system_dependences/metasplus/paquet.xml new file mode 100644 index 0000000..50cdd2c --- /dev/null +++ b/design_system_dependences/metasplus/paquet.xml @@ -0,0 +1,25 @@ +<paquet + prefix="metasplus" + categorie="divers" + version="2.4.5" + schema="1.0.0" + etat="stable" + compatibilite="[3.1.0;4.2.*]" + logo="opengraph-150.png" + documentation="https://contrib.spip.net/4969" +> + + <nom>Métas +</nom> + <!-- Métadonnées pour booster vos articles --> + + <auteur lien="http://spip.tetue.net">tetue</auteur> + <auteur lien="https://www.erational.org">erational</auteur> + <auteur lien="https://www.bravecassine.com">tcharlss</auteur> + + <pipeline nom="affichage_final" inclure="metasplus_pipelines.php" /> + <pipeline nom="post_edition" inclure="metasplus_pipelines.php" /> + <pipeline nom="boite_infos" inclure="metasplus_pipelines.php" /> + <pipeline nom="autoriser" inclure="metasplus_autorisations.php" /> + + <utilise nom="composition" compatibilite="[3.7.0;[" /> +</paquet> diff --git a/design_system_dependences/metasplus/prive/squelettes/contenu/configurer_metasplus.html b/design_system_dependences/metasplus/prive/squelettes/contenu/configurer_metasplus.html new file mode 100644 index 0000000..f47fb93 --- /dev/null +++ b/design_system_dependences/metasplus/prive/squelettes/contenu/configurer_metasplus.html @@ -0,0 +1,4 @@ +[(#AUTORISER{configurer,metasplus}|sinon_interdire_acces)] +<div class="ajax"> +#FORMULAIRE_CONFIGURER_METASPLUS +</div> \ No newline at end of file diff --git a/design_system_dependences/metasplus/prive/squelettes/contenu/metasplus_previsu.html b/design_system_dependences/metasplus/prive/squelettes/contenu/metasplus_previsu.html new file mode 100644 index 0000000..20dfe2c --- /dev/null +++ b/design_system_dependences/metasplus/prive/squelettes/contenu/metasplus_previsu.html @@ -0,0 +1,57 @@ +[(#REM) + + Page de prévisualisation des métadonnées d'un objet éditorial + + Paramètres : + **obligatoire + + - **page : type de page + - **objet : type d'objet + - **id_objet : id de l'objet + - **id_patate : id de l'objet + +] +#SET{cle_objet, #ENV{objet}|id_table_objet} +#SET{contexte, #ARRAY{type-page,#ENV{page},objet,#ENV{objet},id_objet,#ENV{id_objet}}} +#SET{fond, #GET{contexte}|metasplus_selectionner_fond} +#SET{texte_objet, #ENV{objet}|objet_info{texte_objet}|_T} +#SET{redirect, #ENV{id_objet}|generer_url_entite{#ENV{objet}}} + +<h1 class="grostitre"><:metasplus:titre_previsu:></h1> + +<p class="notice">Dans cette prévisualisation, les URLs pointent vers le privé, mais rassurez-vous, elles sont correctes dans les pages publiques.</p> + +#BOITE_OUVRIR{'',info} +[(#GET{redirect}|icone_verticale{[(#ENV{objet}|objet_info{texte_retour}|_T)],#ENV{objet}|objet_info{icone_objet},'',right retour metasplus})] +<dl> + <dt><:metasplus:label_previsu_objet:> :</dt> + <dd> + <:titre_cadre_numero_objet{objet=#GET{texte_objet}}|spip_strtolower|ucfirst|replace{':',''}:>[(#ENV{id_objet})][ : « (#INFO_TITRE{#ENV{objet},#ENV{id_objet}}) »] + </dd> + <dt><:metasplus:label_previsu_fond:> :</dt> + <dd><code>#GET{fond}.html</code></dd> +</dl> +#BOITE_FERMER + +#BOITE_OUVRIR{'',simple metasplus} +[(#PLUGIN{coloration_code}|non)<pre><code>] +[(#GET{fond}|recuperer_fond{ + #ARRAY{ + type-page,#ENV{page}, + objet,#ENV{objet}, + id_objet,#ENV{id_objet}, + #GET{cle_objet},#ENV{id_objet}, + }} + |appliquer_filtre{ + #PLUGIN{coloration_code}|?{coloration_code_color,htmlentities}, + #PLUGIN{coloration_code}|?{spip,#EVAL{null}} + } + |replace{'^\s+',''} +)] +[(#PLUGIN{coloration_code}|non)</code></pre>] +#BOITE_FERMER + +<style> + code.html {display:block;overflow-x:auto} + .box.simple.metasplus{overflow-x:auto} +</style> \ No newline at end of file diff --git a/design_system_dependences/metasplus/prive/squelettes/inclure/metasplus_bouton_previsu.html b/design_system_dependences/metasplus/prive/squelettes/inclure/metasplus_bouton_previsu.html new file mode 100644 index 0000000..1d830d6 --- /dev/null +++ b/design_system_dependences/metasplus/prive/squelettes/inclure/metasplus_bouton_previsu.html @@ -0,0 +1,18 @@ +[(#REM) + + Lien de prévisualisation des métas+ + + Nb : hack pas joli pour ajouter la classe mediabox sur le lien. +] + +[(#URL_ECRIRE{metasplus_previsu} + |parametre_url{page,#ENV{type-page}} + |parametre_url{objet,#ENV{objet}} + |parametre_url{id_objet,#ENV{id_objet}} + |parametre_url{var_zajax,contenu} + |icone_horizontale{ + <:metasplus:icone_previsu:>, + 'metasplus_previsu-24', + } + |inserer_attribut{title,<:metasplus:icone_previsu_title:>} + |replace{'<a','<a class="mediabox"'})] \ No newline at end of file diff --git a/design_system_dependences/metasplus/prive/themes/spip/images/metasplus_previsu-16.png b/design_system_dependences/metasplus/prive/themes/spip/images/metasplus_previsu-16.png new file mode 100644 index 0000000000000000000000000000000000000000..58dfec6e3fbb3a189d56bc3570e99d20d8da1012 GIT binary patch literal 1437 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7BuiW)N`mv#O3D+9QW+dm z@{>{(JaZG%Q-e|yQz{EjrrIztFe_z-M3hAM`dB6B=jtVb)aX^@7BGN-jeSKyVsdtB zi9%9pdS;%j()-=}l@u~lY?Z=IeGPmIoKrJ0J*tXQgRA^PlB=?lEmM^2?G$V(tSWK~ za#KqZ6)JLb@`|l0Y?Z*~TICg6frRyy6u?SKvTc<hj*9RNP;kyKN>wn`Gtf;oFf&vz zGto0NF|ahT)KM@pFf`CNG}1RP*EKY-GBvj{FjRm7B|8P1qLehNAQv~NT}3Hrwn`Z# zB?VUc`sL;2dgaD?`9<mahL)C=`UXb&Mn<|tDQUXJm3bwJ6}oxF$}kgLQj3#|G7CyF z^YauyCMG83mzLNnDM5{`$Sr^yn^z1CrsVuw{ffi_eM3D1ke48S%`Nct#ji9s7p}Uv zBq$Z(UaSTehg24%>IbD3=a&{Grv{~_DTCZpVC7ttnpl!w6q28x0}I7~jQo=P;*9(P z1?ON>Jwt`?%)FHR@?x-hUtcTFyyB9?yyR3*7h9!@+ycGK%oHnUS64?%M@uJDOAA*+ zLsuh57Xvd#b7vD1Lo-K9Cld>pUYGpj(%jU%5}4i;gkEQydO=A66dYDAsYRJ(sVQzn z`MC;UFI#2ec8euW^PqZDaJ$73r(S(K1si=(#3DsBOeo034a5YeNl^N<Q$QsA)Vvg1 zr6MJJyW>%u*BKa?1U+3GLn>|^3HHtq4ivG?fA-YaQ(g0NulMvOjk_K5x0GB~i4b(u z)l%9qW!nmCd(oH2Tm_f#My!>8#h%RO;??UE8=|uA&7v?@@0BY$q^C}p;5W;v^8MGd zCdN(L-s1BTE6(hFf4BJgozEQtOs^Z8N}J+N`}N)KdHZ<IZbqf~`yZBR9_CV9u<BPt z=v3yGHSZRmdpP;{u75K>CjPtnFRAjQK&a?t%|#Vw<oEqM^yj;f8uw+7rI#x#|H{ps z>sj+J@aUcGi)R0ij5{>ZmUH=Jna6udLz~;$qBJ;cr5r6BE+%bp;ATsZV0%=>Ql-)p zVbYTtJ<0Rh;_BOpw{zSkxz`FRM+w~AZC>!Zip_VUMP47zNz*pr<NVI~mlFJZ9tQqn z)w?g{?j!d0#y-i?W8#096i?Rt3Xu<5dH2TD3}>U6$NJ`S&Pd}^eATf$;allK_b!gv zjB96`H5G4ctkS#SByyL1_rlj!8oU;_7KcT<<*w|yw@>b7oow{Bt-Uu&+Zwp`%>1pi z{BYL}qi-%28)okA*!*0-qyIDaqW_N?X3VU8{#-)b&MVcM=k7`CJJF)~ueN+No|bwr zqc3@5(8MIO-<J7{jkmJ@WID6a=X%DwpV2(`tF^8*y>W5;GH+*z-!-mNOhM94S~Gv2 zFF7aWr&2#h!$y1;-_+O>W~;(dU%g8BzryCv?QZL~fa?kWC)L<j%0JnE|ClHv8-rS- VpySOIiY}l6)6><@Wt~$(698nG7Q+Al literal 0 HcmV?d00001 diff --git a/design_system_dependences/metasplus/prive/themes/spip/images/metasplus_previsu-24.png b/design_system_dependences/metasplus/prive/themes/spip/images/metasplus_previsu-24.png new file mode 100644 index 0000000000000000000000000000000000000000..7b89999d3051ade0e7a6ba4543a86167e1f671c4 GIT binary patch literal 10610 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 literal 0 HcmV?d00001 diff --git a/design_system_dependences/metasplus/prive/themes/spip/images/metasplus_previsu-32.png b/design_system_dependences/metasplus/prive/themes/spip/images/metasplus_previsu-32.png new file mode 100644 index 0000000000000000000000000000000000000000..d33340feba4612d8fd013ae1e61094c636b90d1c GIT binary patch literal 1889 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 literal 0 HcmV?d00001 diff --git a/design_system_dependences/metasplus/prive/themes/spip/images/metasplus_previsu-xx.svg b/design_system_dependences/metasplus/prive/themes/spip/images/metasplus_previsu-xx.svg new file mode 100644 index 0000000..2faeff8 --- /dev/null +++ b/design_system_dependences/metasplus/prive/themes/spip/images/metasplus_previsu-xx.svg @@ -0,0 +1,6 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" width="64" height="64"> + <path fill="#fff" d="M49.7 18.5H4.9v27h44.8l9-13.5z"/> + <path fill="#666" d="M2.9 49.4H51.8l10.9-16.3c.4-.7.4-1.5 0-2.1L51.8 14.6H2.9c-1.1 0-1.9.9-1.9 1.9v31c0 1 .9 1.9 1.9 1.9zm2-30.9h44.8l9 13.5-9 13.5H4.9v-27z"/> + <path fill="#666" d="M47.4 35.7c2.1 0 3.7-1.7 3.7-3.7s-1.7-3.7-3.7-3.7c-2.1 0-3.7 1.7-3.7 3.7s1.7 3.7 3.7 3.7z"/> + <path fill="#1d83d4" d="M29.4 29.6l-1.5 4.8H32l-.9 4.2h-4.6l-1.6 5h-4.6l1.6-5h-4l-1.6 5h-4.6l1.6-5H9l.9-4.2h4.6l1.5-4.8h-4.1l.9-4.2h4.6l1.6-5h4.7l-1.6 5h4l1.6-5h4.6l-1.6 5H35l-.9 4.2h-4.7zm-4.6 0h-4l-1.5 4.8h4l1.5-4.8z" /> +</svg> diff --git a/design_system_dependences/squelettes_par_rubrique/.gitignore b/design_system_dependences/squelettes_par_rubrique/.gitignore new file mode 100644 index 0000000..f6fb500 --- /dev/null +++ b/design_system_dependences/squelettes_par_rubrique/.gitignore @@ -0,0 +1,7 @@ +/vendor/ +/composer.phar +/composer.lock +/phpcs.xml +/phpstan.neon +/.php_cs.cache +/.php_cs.txt diff --git a/design_system_dependences/squelettes_par_rubrique/composer.json b/design_system_dependences/squelettes_par_rubrique/composer.json new file mode 100644 index 0000000..2163e8d --- /dev/null +++ b/design_system_dependences/squelettes_par_rubrique/composer.json @@ -0,0 +1,18 @@ +{ + "require": { + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.1", + "phpstan/phpstan": "^1.4", + "spip/coding-standards": "^1.2" + }, + "config": { + "allow-plugins": { + "dealerdirect/phpcodesniffer-composer-installer": true + }, + "platform": { + "php": "7.4.27" + } + } +} diff --git a/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique.xml b/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique.xml new file mode 100644 index 0000000..583b8f8 --- /dev/null +++ b/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique.xml @@ -0,0 +1,61 @@ +<traduction + module="paquet-squelettes_par_rubrique" + id="paquet-squelettes_par_rubrique--squelettes_par_rubrique-5b74d" + gestionnaire="salvatore" + url="https://trad.spip.net" + source="https://git.spip.net/spip/squelettes_par_rubrique.git" + reference="fr"> + <langue code="ar" url="https://trad.spip.net/tradlang_module/paquet-squelettes_par_rubrique?lang_cible=ar" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00"> + <traducteur nom="George" lien="https://trad.spip.net/auteur/جورج-قندلفت" /> + </langue> + <langue code="de" url="https://trad.spip.net/tradlang_module/paquet-squelettes_par_rubrique?lang_cible=de" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00"> + <traducteur nom="klaus++" lien="https://trad.spip.net/auteur/klaus" /> + </langue> + <langue code="en" url="https://trad.spip.net/tradlang_module/paquet-squelettes_par_rubrique?lang_cible=en" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00"> + <traducteur nom="kent1" lien="https://trad.spip.net/auteur/kent1" /> + </langue> + <langue code="eo" url="https://trad.spip.net/tradlang_module/paquet-squelettes_par_rubrique?lang_cible=eo" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00"> + <traducteur nom="gpl" lien="https://trad.spip.net/auteur/gpl" /> + </langue> + <langue code="es" url="https://trad.spip.net/tradlang_module/paquet-squelettes_par_rubrique?lang_cible=es" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00"> + <traducteur nom="dani" lien="https://trad.spip.net/auteur/dani" /> + </langue> + <langue code="fa" url="https://trad.spip.net/tradlang_module/paquet-squelettes_par_rubrique?lang_cible=fa" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00"> + <traducteur nom="Davood Hossein" lien="https://trad.spip.net/auteur/davood-hossein" /> + </langue> + <langue code="fr" url="https://trad.spip.net/tradlang_module/paquet-squelettes_par_rubrique?lang_cible=fr" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00" /> + <langue code="fr_fem" url="https://trad.spip.net/tradlang_module/paquet-squelettes_par_rubrique?lang_cible=fr_fem" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00"> + <traducteur nom="denisb" lien="https://trad.spip.net/auteur/denisb" /> + </langue> + <langue code="fr_tu" url="https://trad.spip.net/tradlang_module/paquet-squelettes_par_rubrique?lang_cible=fr_tu" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00"> + <traducteur nom="Cerf" lien="https://trad.spip.net/auteur/cerf" /> + </langue> + <langue code="it" url="https://trad.spip.net/tradlang_module/paquet-squelettes_par_rubrique?lang_cible=it" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00"> + <traducteur nom="phante" lien="https://trad.spip.net/auteur/phante" /> + </langue> + <langue code="lb" url="https://trad.spip.net/tradlang_module/paquet-squelettes_par_rubrique?lang_cible=lb" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00"> + <traducteur nom="Jim Wanderscheid" lien="https://trad.spip.net/auteur/jwander" /> + </langue> + <langue code="nl" url="https://trad.spip.net/tradlang_module/paquet-squelettes_par_rubrique?lang_cible=nl" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00"> + <traducteur nom="Suske" lien="https://trad.spip.net/auteur/suske" /> + </langue> + <langue code="oc_ni_mis" url="https://trad.spip.net/tradlang_module/paquet-squelettes_par_rubrique?lang_cible=oc_ni_mis" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00"> + <traducteur nom="sylvain" lien="https://trad.spip.net/auteur/sylvain" /> + </langue> + <langue code="pt" url="https://trad.spip.net/tradlang_module/paquet-squelettes_par_rubrique?lang_cible=pt" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00"> + <traducteur nom="Cláudia Anjos Lopes" lien="https://trad.spip.net/auteur/claudia_a_lopes" /> + </langue> + <langue code="pt_br" url="https://trad.spip.net/tradlang_module/paquet-squelettes_par_rubrique?lang_cible=pt_br" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00"> + <traducteur nom="Ricardo Porto" lien="https://trad.spip.net/auteur/ricardo-porto" /> + </langue> + <langue code="ru" url="https://trad.spip.net/tradlang_module/paquet-squelettes_par_rubrique?lang_cible=ru" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00"> + <traducteur nom="olly" lien="https://trad.spip.net/auteur/olly" /> + <traducteur nom="Serge Markitanenko" lien="https://trad.spip.net/auteur/serge-markitanenko" /> + </langue> + <langue code="sk" url="https://trad.spip.net/tradlang_module/paquet-squelettes_par_rubrique?lang_cible=sk" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00"> + <traducteur nom="jaro" lien="https://trad.spip.net/auteur/jaro" /> + </langue> + <langue code="uk" url="https://trad.spip.net/tradlang_module/paquet-squelettes_par_rubrique?lang_cible=uk" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00"> + <traducteur nom="olly" lien="https://trad.spip.net/auteur/olly" /> + </langue> +</traduction> diff --git a/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_de.php b/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_de.php new file mode 100644 index 0000000..35f8d3b --- /dev/null +++ b/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_de.php @@ -0,0 +1,15 @@ +<?php +// This is a SPIP language file -- Ceci est un fichier langue de SPIP +// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-squelettes_par_rubrique?lang_cible=de +// ** ne pas modifier le fichier ** + +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} + +$GLOBALS[$GLOBALS['idx_lang']] = array( + + // S + 'squelettes_par_rubrique_description' => 'Unterstützung der Skelette mit Rubriknummer und/oder Sprachcode als Namenszusatz: (-23.html, =23.html, et .en.html)', + 'squelettes_par_rubrique_slogan' => 'Unterstützung von Skeletten mit Namenszusatz in SPIP' +); diff --git a/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_en.php b/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_en.php new file mode 100644 index 0000000..57fc9f0 --- /dev/null +++ b/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_en.php @@ -0,0 +1,15 @@ +<?php +// This is a SPIP language file -- Ceci est un fichier langue de SPIP +// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-squelettes_par_rubrique?lang_cible=en +// ** ne pas modifier le fichier ** + +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} + +$GLOBALS[$GLOBALS['idx_lang']] = array( + + // S + 'squelettes_par_rubrique_description' => 'Support of suffixed templates by section number and/or by language code : (-23.html, =23.html, and .en.html)', + 'squelettes_par_rubrique_slogan' => 'Support of suffixed templates in SPIP' +); diff --git a/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_eo.php b/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_eo.php new file mode 100644 index 0000000..a855683 --- /dev/null +++ b/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_eo.php @@ -0,0 +1,15 @@ +<?php +// This is a SPIP language file -- Ceci est un fichier langue de SPIP +// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-squelettes_par_rubrique?lang_cible=eo +// ** ne pas modifier le fichier ** + +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} + +$GLOBALS[$GLOBALS['idx_lang']] = array( + + // S + 'squelettes_par_rubrique_description' => 'Subteno por la skeletoj sufiksitaj per rubrikonumero kaj lingvokodo (ekz., -23.html, =23.html, kaj .eo.html)', + 'squelettes_par_rubrique_slogan' => 'Subteno por la sufiksitaj skeletoj en SPIP' +); diff --git a/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_es.php b/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_es.php new file mode 100644 index 0000000..b284f04 --- /dev/null +++ b/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_es.php @@ -0,0 +1,15 @@ +<?php +// This is a SPIP language file -- Ceci est un fichier langue de SPIP +// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-squelettes_par_rubrique?lang_cible=es +// ** ne pas modifier le fichier ** + +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} + +$GLOBALS[$GLOBALS['idx_lang']] = array( + + // S + 'squelettes_par_rubrique_description' => 'Implementación de esqueletos con sufijo por numero de sección y/o por código de idioma: (-23.html, =23.html, y .en.html)', + 'squelettes_par_rubrique_slogan' => 'Implementación de esqueletos con sufijos de SPIP' +); diff --git a/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_fa.php b/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_fa.php new file mode 100644 index 0000000..17fff10 --- /dev/null +++ b/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_fa.php @@ -0,0 +1,15 @@ +<?php +// This is a SPIP language file -- Ceci est un fichier langue de SPIP +// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-squelettes_par_rubrique?lang_cible=fa +// ** ne pas modifier le fichier ** + +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} + +$GLOBALS[$GLOBALS['idx_lang']] = array( + + // S + 'squelettes_par_rubrique_description' => 'پشتيبان اسكلتهاي پسوندي توسط تعدادي بخش و/يا توسط كدر زبان : (-23.html, =23.html, et .en.html) ', + 'squelettes_par_rubrique_slogan' => 'پشتيباني از اسكليتهاي پسوندي در اسپيپ ' +); diff --git a/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_fr.php b/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_fr.php new file mode 100644 index 0000000..50895ed --- /dev/null +++ b/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_fr.php @@ -0,0 +1,13 @@ +<?php +// This is a SPIP language file -- Ceci est un fichier langue de SPIP +// Fichier source, a modifier dans https://git.spip.net/spip/squelettes_par_rubrique.git +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} + +$GLOBALS[$GLOBALS['idx_lang']] = array( + + // S + 'squelettes_par_rubrique_description' => 'Support des squelettes suffixés par numéro de rubrique et/ou par code de langue : (-23.html, =23.html, et .en.html)', + 'squelettes_par_rubrique_slogan' => 'Support des squelettes suffixés dans SPIP' +); diff --git a/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_fr_fem.php b/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_fr_fem.php new file mode 100644 index 0000000..88200c2 --- /dev/null +++ b/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_fr_fem.php @@ -0,0 +1,15 @@ +<?php +// This is a SPIP language file -- Ceci est un fichier langue de SPIP +// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-squelettes_par_rubrique?lang_cible=fr_fem +// ** ne pas modifier le fichier ** + +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} + +$GLOBALS[$GLOBALS['idx_lang']] = array( + + // S + 'squelettes_par_rubrique_description' => 'Support des squelettes suffixés par numéro de rubrique et/ou par code de langue : (-23.html, =23.html, et .en.html)', + 'squelettes_par_rubrique_slogan' => 'Support des squelettes suffixés dans SPIP' +); diff --git a/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_fr_tu.php b/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_fr_tu.php new file mode 100644 index 0000000..1aba5b0 --- /dev/null +++ b/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_fr_tu.php @@ -0,0 +1,15 @@ +<?php +// This is a SPIP language file -- Ceci est un fichier langue de SPIP +// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-squelettes_par_rubrique?lang_cible=fr_tu +// ** ne pas modifier le fichier ** + +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} + +$GLOBALS[$GLOBALS['idx_lang']] = array( + + // S + 'squelettes_par_rubrique_description' => 'Support des squelettes suffixés par numéro de rubrique et/ou par code de langue : (-23.html, =23.html, et .en.html)', + 'squelettes_par_rubrique_slogan' => 'Support des squelettes suffixés dans SPIP' +); diff --git a/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_it.php b/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_it.php new file mode 100644 index 0000000..e63e032 --- /dev/null +++ b/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_it.php @@ -0,0 +1,15 @@ +<?php +// This is a SPIP language file -- Ceci est un fichier langue de SPIP +// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-squelettes_par_rubrique?lang_cible=it +// ** ne pas modifier le fichier ** + +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} + +$GLOBALS[$GLOBALS['idx_lang']] = array( + + // S + 'squelettes_par_rubrique_description' => 'Supporto dei modelli con suffisso numero di sezione e/o il codice della lingua: (-23.html, =23.html, et .en.html)', + 'squelettes_par_rubrique_slogan' => 'Supporto di modelli con suffisso in SPIP' +); diff --git a/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_lb.php b/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_lb.php new file mode 100644 index 0000000..4f74a23 --- /dev/null +++ b/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_lb.php @@ -0,0 +1,15 @@ +<?php +// This is a SPIP language file -- Ceci est un fichier langue de SPIP +// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-squelettes_par_rubrique?lang_cible=lb +// ** ne pas modifier le fichier ** + +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} + +$GLOBALS[$GLOBALS['idx_lang']] = array( + + // S + 'squelettes_par_rubrique_description' => 'Ënnerstëtzung vun de Skeletter mat engem Suffix fir d’Rubrik an/oder d’Sprooch: (-23.html, =23.html, an .en.html)', + 'squelettes_par_rubrique_slogan' => 'Ënnerstëtzung fir Skeletter mat Suffix am SPIP' +); diff --git a/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_nl.php b/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_nl.php new file mode 100644 index 0000000..5f83309 --- /dev/null +++ b/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_nl.php @@ -0,0 +1,15 @@ +<?php +// This is a SPIP language file -- Ceci est un fichier langue de SPIP +// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-squelettes_par_rubrique?lang_cible=nl +// ** ne pas modifier le fichier ** + +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} + +$GLOBALS[$GLOBALS['idx_lang']] = array( + + // S + 'squelettes_par_rubrique_description' => 'Ondersteuning van de suffix ingewijden skeletten (met rubrieknummers en / of taal-code: -23.html, =23.html en .en.html)', + 'squelettes_par_rubrique_slogan' => 'Ondersteuning van suffix ingewijden skeletten in SPIP ' +); diff --git a/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_oc_ni_mis.php b/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_oc_ni_mis.php new file mode 100644 index 0000000..119b61e --- /dev/null +++ b/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_oc_ni_mis.php @@ -0,0 +1,15 @@ +<?php +// This is a SPIP language file -- Ceci est un fichier langue de SPIP +// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-squelettes_par_rubrique?lang_cible=oc_ni_mis +// ** ne pas modifier le fichier ** + +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} + +$GLOBALS[$GLOBALS['idx_lang']] = array( + + // S + 'squelettes_par_rubrique_description' => 'Supouòrt dei esquèletrou sufissat per un nùmero de rùbrica e/o per un code de lenga : (-23.html, =23.html, e .en.html)', + 'squelettes_par_rubrique_slogan' => 'Supouòrt dei esquèletrou sufissat en SPIP' +); diff --git a/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_pt.php b/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_pt.php new file mode 100644 index 0000000..84c9043 --- /dev/null +++ b/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_pt.php @@ -0,0 +1,15 @@ +<?php +// This is a SPIP language file -- Ceci est un fichier langue de SPIP +// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-squelettes_par_rubrique?lang_cible=pt +// ** ne pas modifier le fichier ** + +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} + +$GLOBALS[$GLOBALS['idx_lang']] = array( + + // S + 'squelettes_par_rubrique_description' => 'Apoio dos modelos com sufixo por número de rubrica e/ou por código de idioma : (-23.html, =23.html, et .en.html)', + 'squelettes_par_rubrique_slogan' => 'Apoio de modelos com sufixo em SPIP' +); diff --git a/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_pt_br.php b/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_pt_br.php new file mode 100644 index 0000000..1318e64 --- /dev/null +++ b/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_pt_br.php @@ -0,0 +1,15 @@ +<?php +// This is a SPIP language file -- Ceci est un fichier langue de SPIP +// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-squelettes_par_rubrique?lang_cible=pt_br +// ** ne pas modifier le fichier ** + +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} + +$GLOBALS[$GLOBALS['idx_lang']] = array( + + // S + 'squelettes_par_rubrique_description' => 'Suporte aos gabaritos com sufixo do númeor da seção e/ou por código de idioma: (-23.html, =23.html, et .en.html)', + 'squelettes_par_rubrique_slogan' => 'Suporte aos gabaritos com sufixo do SPIP' +); diff --git a/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_ru.php b/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_ru.php new file mode 100644 index 0000000..e6ce756 --- /dev/null +++ b/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_ru.php @@ -0,0 +1,15 @@ +<?php +// This is a SPIP language file -- Ceci est un fichier langue de SPIP +// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-squelettes_par_rubrique?lang_cible=ru +// ** ne pas modifier le fichier ** + +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} + +$GLOBALS[$GLOBALS['idx_lang']] = array( + + // S + 'squelettes_par_rubrique_description' => 'Позволяет задавать отдельные шаблоны по номеру раздела, статьи, а также языковой версии: (-23.html, =23.html, и .en.html)', + 'squelettes_par_rubrique_slogan' => 'Номерные шаблоны для SPIP' +); diff --git a/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_sk.php b/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_sk.php new file mode 100644 index 0000000..262b2f9 --- /dev/null +++ b/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_sk.php @@ -0,0 +1,15 @@ +<?php +// This is a SPIP language file -- Ceci est un fichier langue de SPIP +// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-squelettes_par_rubrique?lang_cible=sk +// ** ne pas modifier le fichier ** + +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} + +$GLOBALS[$GLOBALS['idx_lang']] = array( + + // S + 'squelettes_par_rubrique_description' => 'Podpora šablón pripojených vo forme prípony podľa čísla rubriky a/lebo kódu jazyka: (-23.html, =23.html a .en.html)', + 'squelettes_par_rubrique_slogan' => 'Podpora pripojených šablón v SPIPe' +); diff --git a/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_uk.php b/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_uk.php new file mode 100644 index 0000000..1ef9544 --- /dev/null +++ b/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_uk.php @@ -0,0 +1,15 @@ +<?php +// This is a SPIP language file -- Ceci est un fichier langue de SPIP +// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-squelettes_par_rubrique?lang_cible=uk +// ** ne pas modifier le fichier ** + +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} + +$GLOBALS[$GLOBALS['idx_lang']] = array( + + // S + 'squelettes_par_rubrique_description' => 'Дозволяє задавати окремі шаблони за номером рубріки, статті, а також мовної версії: (-23.html, =23.html, и .en.html)', + 'squelettes_par_rubrique_slogan' => 'Шаблони за номерами для SPIP' +); diff --git a/design_system_dependences/squelettes_par_rubrique/paquet.xml b/design_system_dependences/squelettes_par_rubrique/paquet.xml new file mode 100644 index 0000000..feda398 --- /dev/null +++ b/design_system_dependences/squelettes_par_rubrique/paquet.xml @@ -0,0 +1,15 @@ +<paquet + prefix="squelettes_par_rubrique" + categorie="outil" + version="2.0.1" + etat="stable" + compatibilite="[4.1.0;4.2.*]" + logo="squelettes_par_rubrique-32.png" + documentation="https://www.spip.net/3445" +> + + <nom>Squelettes par Rubrique</nom> + <!-- Support des squelettes suffixés dans SPIP --> + + <auteur>Collectif SPIP</auteur> +</paquet> diff --git a/design_system_dependences/squelettes_par_rubrique/phpcs.xml.dist b/design_system_dependences/squelettes_par_rubrique/phpcs.xml.dist new file mode 100644 index 0000000..d75d301 --- /dev/null +++ b/design_system_dependences/squelettes_par_rubrique/phpcs.xml.dist @@ -0,0 +1,15 @@ +<?xml version="1.0"?> +<ruleset> + <file>.</file> + <exclude-pattern>vendor/*</exclude-pattern> + <exclude-pattern>lang/*</exclude-pattern> + <exclude-pattern>lib/*</exclude-pattern> + + <rule ref="SPIP41"/> + + <config name="ignore_warnings_on_exit" value="1"/> + <arg name="cache" value=".php_cs.cache"/> + <arg name="report-full" value=".php_cs.txt"/> + <arg name="report-summary"/> + <arg value="s"/> +</ruleset> diff --git a/design_system_dependences/squelettes_par_rubrique/phpstan-baseline.neon b/design_system_dependences/squelettes_par_rubrique/phpstan-baseline.neon new file mode 100644 index 0000000..36f4dac --- /dev/null +++ b/design_system_dependences/squelettes_par_rubrique/phpstan-baseline.neon @@ -0,0 +1,12 @@ +parameters: + ignoreErrors: + - + message: "#^Function lang_select not found\\.$#" + count: 2 + path: squelettes_par_rubrique_options.php + + - + message: "#^Function quete_parent not found\\.$#" + count: 1 + path: squelettes_par_rubrique_options.php + diff --git a/design_system_dependences/squelettes_par_rubrique/phpstan.neon.dist b/design_system_dependences/squelettes_par_rubrique/phpstan.neon.dist new file mode 100644 index 0000000..9cd9a27 --- /dev/null +++ b/design_system_dependences/squelettes_par_rubrique/phpstan.neon.dist @@ -0,0 +1,12 @@ +includes: + - phpstan-baseline.neon + +parameters: + paths: + - . + excludePaths: + analyseAndScan: + - vendor + - lang + - lib + level: 0 diff --git a/design_system_dependences/squelettes_par_rubrique/squelettes_par_rubrique-xx.svg b/design_system_dependences/squelettes_par_rubrique/squelettes_par_rubrique-xx.svg new file mode 100644 index 0000000..f26c948 --- /dev/null +++ b/design_system_dependences/squelettes_par_rubrique/squelettes_par_rubrique-xx.svg @@ -0,0 +1,5 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" width="64" height="64"> + <path fill="#fff" d="M30.8 18.6v-5.3H10.7V56h48V18.6z"/> + <path d="M26.8 50.6h-16V13.3h14.9l5.3 5.3h22.5v10.7h5.3V16c0-1.5-1.2-2.7-2.7-2.7h-23L27.8 8H8c-1.5 0-2.7 1.2-2.7 2.7v42.6C5.3 54.8 6.5 56 8 56h18.8v-5.4z" fill="#666"/> + <path d="M55.2 44.6l-1.9 6.1h5.2l-1.1 5.4h-5.9l-2 6.3h-5.9l2-6.3h-5.1l-2 6.3h-5.9l2-6.3h-5.3l1.1-5.4h5.9l1.9-6.1H33l1.1-5.4H40l2-6.3h6l-2 6.3h5.1l2-6.3H59l-2 6.3h5.3l-1.1 5.4h-6zm-5.9 0h-5.1l-1.9 6.1h5.1l1.9-6.1z" fill="#1d83d4"/> +</svg> \ No newline at end of file diff --git a/design_system_dependences/squelettes_par_rubrique/squelettes_par_rubrique_options.php b/design_system_dependences/squelettes_par_rubrique/squelettes_par_rubrique_options.php new file mode 100644 index 0000000..01ec0f9 --- /dev/null +++ b/design_system_dependences/squelettes_par_rubrique/squelettes_par_rubrique_options.php @@ -0,0 +1,107 @@ +<?php + +/***************************************************************************\ + * SPIP, Système de publication pour l'internet * + * * + * Copyright © avec tendresse depuis 2001 * + * Arnaud Martin, Antoine Pitrou, Philippe Rivière, Emmanuel Saint-James * + * * + * Ce programme est un logiciel libre distribué sous licence GNU/GPL. * + * Pour plus de détails voir le fichier COPYING.txt ou l'aide en ligne. * +\***************************************************************************/ + +/** + * Déclarations de pipelines + * + * @package SPIP\SquelettesParRubrique\Pipelines + **/ +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} + +if (!isset($GLOBALS['spip_pipeline']['styliser'])) { + $GLOBALS['spip_pipeline']['styliser'] = ''; +} + +// Ajoute à la fin du pipeline styliser la recherche de squelettes par rubriques et par langue +$GLOBALS['spip_pipeline']['styliser'] .= '||squelettes_par_rubrique_styliser_par_rubrique|squelettes_par_rubrique_styliser_par_langue'; + +/** + * Cherche un squelette par rubrique squelette-XX.html ou squelette=XX.html + * + * Options de recherche de squelette par le styliseur, appelé par le pipeline 'styliser' + * + * @pipeline styliser + * + * @param array $flux Données du pipeline + * @return array Données du pipeline + */ +function squelettes_par_rubrique_styliser_par_rubrique($flux) { + + // uniquement si un squelette a ete trouve + if ($squelette = $flux['data']) { + $ext = $flux['args']['ext']; + + // On selectionne, dans l'ordre : + // fond=10 + if ($id_rubrique = $flux['args']['id_rubrique']) { + $f = "$squelette=$id_rubrique"; + if (@file_exists("$f.$ext")) { + $squelette = $f; + } else { + $maxiter = 10000; // on ne remonte pas au dela en profondeur + // fond-10 fond-<rubriques parentes> + do { + $f = "$squelette-$id_rubrique"; + if (@file_exists("$f.$ext")) { + $squelette = $f; + break; + } + } while ( + $maxiter-- + and $id_rubrique = quete_parent($id_rubrique) + // se proteger des references circulaires + and $id_rubrique != $flux['args']['id_rubrique'] + ); + } + // sauver le squelette + $flux['data'] = $squelette; + } + } + + return $flux; +} + + +/** + * Cherche l'existence un squelette par langue squelette.en.html + * + * Options de recherche de squelette par le styliseur, appelé par le pipeline 'styliser' + * + * @pipeline styliser + * + * @param array $flux Données du pipeline + * @return array Données du pipeline + */ +function squelettes_par_rubrique_styliser_par_langue($flux) { + + // uniquement si un squelette a ete trouve + if ($squelette = $flux['data']) { + $ext = $flux['args']['ext']; + + // Affiner par lang + if ($lang = $flux['args']['lang']) { + $l = lang_select($lang); + $f = "$squelette." . $GLOBALS['spip_lang']; + if ($l) { + lang_select(); + } + if (@file_exists("$f.$ext")) { + // sauver le squelette + $flux['data'] = $f; + } + } + } + + return $flux; +} -- GitLab