Added Facebook verification code API
authorThierry Florac <tflorac@ulthar.net>
Tue, 13 Jul 2021 08:01:21 +0200
changeset 576 998a3b7cac64
parent 575 d9128c1432af
child 577 0dcaf3effcac
Added Facebook verification code API
src/pyams_skin/extension.py
src/pyams_skin/interfaces/__init__.py
src/pyams_skin/interfaces/extension.py
src/pyams_skin/locales/fr/LC_MESSAGES/pyams_skin.mo
src/pyams_skin/locales/fr/LC_MESSAGES/pyams_skin.po
src/pyams_skin/locales/pyams_skin.pot
src/pyams_skin/metas.py
--- a/src/pyams_skin/extension.py	Tue Jul 13 08:00:55 2021 +0200
+++ b/src/pyams_skin/extension.py	Tue Jul 13 08:01:21 2021 +0200
@@ -15,7 +15,8 @@
 from persistent import Persistent
 from zope.schema.fieldproperty import FieldProperty
 
-from pyams_skin.interfaces.extension import GOOGLE_ANALYTICS_INFO_KEY, GOOGLE_TAGS_INFO_KEY, IGoogleAnalyticsInfo, \
+from pyams_skin.interfaces.extension import FACEBOOK_INFO_KEY, GOOGLE_ANALYTICS_INFO_KEY, \
+    GOOGLE_TAGS_INFO_KEY, IFacebookSiteInfo, IGoogleAnalyticsInfo, \
     IGoogleTagManagerInfo, IUserReportInfo, USER_REPORT_INFO_KEY
 from pyams_utils.adapter import adapter_config, get_annotation_adapter
 from pyams_utils.factory import factory_config
@@ -78,3 +79,18 @@
     """User report settings factory"""
     return get_annotation_adapter(context, USER_REPORT_INFO_KEY, IUserReportInfo,
                                   notify=False, locate=False)
+
+
+@factory_config(IFacebookSiteInfo)
+class FacebookSiteInfo(Persistent):
+    """Facebook site verification"""
+
+    enabled = FieldProperty(IFacebookSiteInfo['enabled'])
+    verification_code = FieldProperty(IFacebookSiteInfo['verification_code'])
+
+
+@adapter_config(context=ISiteRoot, provides=IFacebookSiteInfo)
+def facebook_info_factory(context):
+    """Facebook site info factory"""
+    return get_annotation_adapter(context, FACEBOOK_INFO_KEY, IFacebookSiteInfo,
+                                  notify=False, locate=False)
--- a/src/pyams_skin/interfaces/__init__.py	Tue Jul 13 08:00:55 2021 +0200
+++ b/src/pyams_skin/interfaces/__init__.py	Tue Jul 13 08:01:21 2021 +0200
@@ -66,7 +66,8 @@
     skin_parent = Attribute("Skin parent (local or inherited)")
 
     skin = Choice(title=_("Custom graphic theme"),
-                  description=_("This theme will be used to handle graphic design (colors and images)"),
+                  description=_("This theme will be used to handle graphic design (colors and "
+                                "images)"),
                   vocabulary='PyAMS user skins',
                   required=False)
 
@@ -83,16 +84,18 @@
                                required=False)
 
     custom_stylesheet = FileField(title=_("Custom stylesheet"),
-                                  description=_("This custom stylesheet will be used to override selected theme styles"),
+                                  description=_("This custom stylesheet will be used to override "
+                                                "selected theme styles"),
                                   required=False)
 
     editor_stylesheet = FileField(title=_("Editor stylesheet"),
-                                  description=_("Styles defined into this stylesheet will be available into HTML editor"),
+                                  description=_("Styles defined into this stylesheet will be "
+                                                "available into HTML editor"),
                                   required=False)
 
     custom_script = FileField(title=_("Custom script"),
-                              description=_("This custom javascript file will be used to add dynamic features to "
-                                            "selected theme"),
+                              description=_("This custom javascript file will be used to add "
+                                            "dynamic features to selected theme"),
                               required=False)
 
 
--- a/src/pyams_skin/interfaces/extension.py	Tue Jul 13 08:00:55 2021 +0200
+++ b/src/pyams_skin/interfaces/extension.py	Tue Jul 13 08:01:21 2021 +0200
@@ -27,7 +27,10 @@
                            ACTIVATED_ON_BACK: _("Back-office only"),
                            ACTIVATED_ON_BOTH: _("Front-office and back-office")}
 
-ACTIVATION_MODES = SimpleVocabulary([SimpleTerm(k, title=v) for k, v in ACTIVATION_MODES_LABELS.items()])
+ACTIVATION_MODES = SimpleVocabulary([
+    SimpleTerm(k, title=v)
+    for k, v in ACTIVATION_MODES_LABELS.items()
+])
 
 GOOGLE_TAGS_INFO_KEY = 'pyams_skin.tagmanager_info'
 
@@ -41,12 +44,14 @@
                    default=False)
 
     on_accepted_cookie = Bool(title=_("Activate only if not rejected cookies?"),
-                              description=_("If 'no', plug-in will be activated without waiting for accepted cookies"),
+                              description=_("If 'no', plug-in will be activated without waiting "
+                                            "for accepted cookies"),
                               required=False,
                               default=False)
 
     cookie_name = TextLine(title=_("Cookie name"),
-                           description=_("Name of cookie checked to verify if cookies have been rejected"),
+                           description=_("Name of cookie checked to verify if cookies have been "
+                                         "rejected"),
                            required=False)
 
     rejected_cookie_value = TextLine(title=_("Rejected cookie value"),
@@ -59,7 +64,8 @@
             raise Invalid(_("You must specify cookie name and reject value !!"))
 
     container_id = TextLine(title=_("Container ID"),
-                            description=_("Google Tag Manager container ID (may start with 'GTM-')"),
+                            description=_("Google Tag Manager container ID (may start with "
+                                          "'GTM-')"),
                             required=False)
 
     activation_mode = Choice(title=_("Activation mode"),
@@ -85,12 +91,14 @@
                    default=False)
 
     on_accepted_cookie = Bool(title=_("Activate only if not rejected cookies?"),
-                              description=_("If 'no', plug-in will be activated without waiting for accepted cookies"),
+                              description=_("If 'no', plug-in will be activated without waiting "
+                                            "for accepted cookies"),
                               required=False,
                               default=False)
 
     cookie_name = TextLine(title=_("Cookie name"),
-                           description=_("Name of cookie checked to verify if cookies have been rejected"),
+                           description=_("Name of cookie checked to verify if cookies have been "
+                                         "rejected"),
                            required=False)
 
     rejected_cookie_value = TextLine(title=_("Rejected cookie value"),
@@ -125,12 +133,14 @@
                    default=False)
 
     on_accepted_cookie = Bool(title=_("Activate only if not rejected cookies?"),
-                              description=_("If 'no', plug-in will be activated without waiting for accepted cookies"),
+                              description=_("If 'no', plug-in will be activated without waiting "
+                                            "for accepted cookies"),
                               required=False,
                               default=False)
 
     cookie_name = TextLine(title=_("Cookie name"),
-                           description=_("Name of cookie checked to verify if cookies have been rejected"),
+                           description=_("Name of cookie checked to verify if cookies have been "
+                                         "rejected"),
                            required=False)
 
     rejected_cookie_value = TextLine(title=_("Rejected cookie value"),
@@ -143,7 +153,8 @@
             raise Invalid(_("You must specify cookie name and reject value !!"))
 
     account_id = TextLine(title=_("Account ID"),
-                          description=_("UserReport account ID, available in 'initSite' code snippet"),
+                          description=_("UserReport account ID, available in 'initSite' code "
+                                        "snippet"),
                           required=False)
 
     activation_mode = Choice(title=_("Activation mode"),
@@ -151,3 +162,20 @@
                              vocabulary=ACTIVATION_MODES,
                              default=ACTIVATED_ON_BOTH,
                              required=True)
+
+
+FACEBOOK_INFO_KEY = 'pyams_skin.facebook_info'
+
+
+class IFacebookSiteInfo(Interface):
+    """Facebook site account info"""
+
+    enabled = Bool(title=_("Facebook site integration?"),
+                   description=_("Is Facebbok integration code activated?"),
+                   required=True,
+                   default=False)
+
+    verification_code = TextLine(title=_("Verification code"),
+                                 description=_("Verification code is available in "
+                                               "Facebook's \"Meta Tag Verification\" tool..."),
+                                 required=False)
Binary file src/pyams_skin/locales/fr/LC_MESSAGES/pyams_skin.mo has changed
--- a/src/pyams_skin/locales/fr/LC_MESSAGES/pyams_skin.po	Tue Jul 13 08:00:55 2021 +0200
+++ b/src/pyams_skin/locales/fr/LC_MESSAGES/pyams_skin.po	Tue Jul 13 08:01:21 2021 +0200
@@ -5,7 +5,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE 1.0\n"
-"POT-Creation-Date: 2019-01-16 23:38+0100\n"
+"POT-Creation-Date: 2021-07-06 14:56+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -15,11 +15,15 @@
 "Content-Transfer-Encoding: 8bit\n"
 "Generated-By: Lingua 3.8\n"
 
-#: src/pyams_skin/container.py:71
+#: src/pyams_skin/skin.py:218
+msgid "PyAMS base skin"
+msgstr "Skin PyAMS par défaut"
+
+#: src/pyams_skin/container.py:75
 msgid "No provided object_name argument!"
 msgstr "Argument 'object_name' non fourni !"
 
-#: src/pyams_skin/container.py:84
+#: src/pyams_skin/container.py:88
 msgid "Given element name doesn't exist!"
 msgstr "L'élément indiqué n'existe pas !"
 
@@ -55,9 +59,188 @@
 msgid "Delete object"
 msgstr "Supprimer l'objet"
 
-#: src/pyams_skin/skin.py:202
-msgid "PyAMS base skin"
-msgstr "Skin PyAMS par défaut"
+#: src/pyams_skin/interfaces/configuration.py:33
+#: src/pyams_skin/interfaces/configuration.py:67
+msgid "Title"
+msgstr "Titre"
+
+#: src/pyams_skin/interfaces/configuration.py:34
+msgid "Application title displayed in title bar"
+msgstr "Titre de l'application affiché dans la barre de menu"
+
+#: src/pyams_skin/interfaces/configuration.py:37
+#: src/pyams_skin/interfaces/configuration.py:71
+msgid "Short title"
+msgstr "Titre court"
+
+#: src/pyams_skin/interfaces/configuration.py:38
+#: src/pyams_skin/interfaces/configuration.py:72
+msgid "Application short title visible as title prefix"
+msgstr "Titre court de l'application affiché en préfixe du titre"
+
+#: src/pyams_skin/interfaces/configuration.py:44
+msgid "Description"
+msgstr "Méta-description"
+
+#: src/pyams_skin/interfaces/configuration.py:45
+msgid "Main application description"
+msgstr ""
+"La méta-description du site est 'masquée' dans les en-têtes des pages HTML ; "
+"mais on peut la retrouver, par exemple, dans les listes de résultats des "
+"moteurs de recherche."
+
+#: src/pyams_skin/interfaces/configuration.py:48
+msgid "Author"
+msgstr "Auteur"
+
+#: src/pyams_skin/interfaces/configuration.py:49
+msgid "Public author name"
+msgstr "Nom public de l'auteur"
+
+#: src/pyams_skin/interfaces/configuration.py:52
+#: src/pyams_skin/interfaces/configuration.py:86
+msgid "Icon"
+msgstr "Icône"
+
+#: src/pyams_skin/interfaces/configuration.py:53
+#: src/pyams_skin/interfaces/configuration.py:87
+msgid "Browser favourite icon"
+msgstr "Icône des favoris"
+
+#: src/pyams_skin/interfaces/configuration.py:56
+#: src/pyams_skin/interfaces/configuration.py:90
+msgid "Logo"
+msgstr "Logo"
+
+#: src/pyams_skin/interfaces/configuration.py:57
+#: src/pyams_skin/interfaces/configuration.py:91
+msgid "Image containing application logo"
+msgstr "Image contenant le logo de l'application ou du site"
+
+#: src/pyams_skin/interfaces/configuration.py:68
+msgid "Application title visible in back-office"
+msgstr "Titre de l'application affiché dans la barre de menu"
+
+#: src/pyams_skin/interfaces/configuration.py:78
+msgid "Login header"
+msgstr "En-tête de connexion"
+
+#: src/pyams_skin/interfaces/configuration.py:79
+msgid "This reStructuredText text will be displayed in login page header"
+msgstr ""
+"Ce texte au format reStructuredText sera affiché en en-tête de la fenêtre de "
+"connexion"
+
+#: src/pyams_skin/interfaces/configuration.py:82
+msgid "Login footer"
+msgstr "Pied de page de connexion"
+
+#: src/pyams_skin/interfaces/configuration.py:83
+msgid "This reStructuredText text will be displayed in login page footer"
+msgstr ""
+"Ce texte au format reStructuredText sera affiché en pied de la fenêtre de "
+"connexion"
+
+#: src/pyams_skin/interfaces/configuration.py:94
+msgid "Login logo"
+msgstr "Logo de connexion"
+
+#: src/pyams_skin/interfaces/configuration.py:95
+msgid "Image containing application logo for login form"
+msgstr ""
+"Image contenant le logo de l'application ou du site affiché sur la page de "
+"connexion"
+
+#: src/pyams_skin/interfaces/configuration.py:98
+msgid "Display title icon?"
+msgstr "Afficher les icônes de titre ?"
+
+#: src/pyams_skin/interfaces/configuration.py:99
+msgid "Should icons be displayed into content's title area ?"
+msgstr ""
+"Les icônes associées aux en-têtes de pages doivent-elles être affichées ?"
+
+#: src/pyams_skin/interfaces/configuration.py:103
+msgid "Display shared tool title?"
+msgstr "Afficher le titre des outils ?"
+
+#: src/pyams_skin/interfaces/configuration.py:104
+msgid "Should shared tool title be displayed into shared content's title area?"
+msgstr ""
+"Le titre des outils partagés doit-il être affiché dans les en-têtes de "
+"pages ?"
+
+#: src/pyams_skin/interfaces/__init__.py:56
+msgid "Inherit parent skin?"
+msgstr "Hériter du thème du parent ?"
+
+#: src/pyams_skin/interfaces/__init__.py:57
+msgid "Should we reuse parent skin?"
+msgstr "Si 'oui', le même thème que celui du niveau parent sera utilisé"
+
+#: src/pyams_skin/interfaces/__init__.py:61
+msgid "Don't inherit parent skin?"
+msgstr "Ne pas hériter du thème du parent ?"
+
+#: src/pyams_skin/interfaces/__init__.py:62
+msgid "Should we override parent skin?"
+msgstr "Si 'non', le même thème que celui du niveau parent sera utilisé"
+
+#: src/pyams_skin/interfaces/__init__.py:68
+msgid "Custom graphic theme"
+msgstr "Choisir un thème spécifique"
+
+#: src/pyams_skin/interfaces/__init__.py:69
+msgid "This theme will be used to handle graphic design (colors and images)"
+msgstr ""
+"Ce thème sera utilisé pour prendre en charge le modèle de présentation "
+"(palette de couleurs et images)"
+
+#: src/pyams_skin/interfaces/__init__.py:81
+msgid "Container class"
+msgstr "Classe du conteneur"
+
+#: src/pyams_skin/interfaces/__init__.py:82
+msgid "Main page container class"
+msgstr "Classe CSS du conteneur principal de la page"
+
+#: src/pyams_skin/interfaces/__init__.py:85
+msgid "Custom stylesheet"
+msgstr "Feuille de style personnalisée"
+
+#: src/pyams_skin/interfaces/__init__.py:86
+msgid "This custom stylesheet will be used to override selected theme styles"
+msgstr ""
+"Cette feuille de style pourra être utilisée pour surcharger les styles "
+"proposés par le thème graphique sélectionné"
+
+#: src/pyams_skin/interfaces/__init__.py:89
+msgid "Editor stylesheet"
+msgstr "Feuille de style éditeur HTML"
+
+#: src/pyams_skin/interfaces/__init__.py:90
+msgid "Styles defined into this stylesheet will be available into HTML editor"
+msgstr ""
+"Les styles définis dans cette feuille de style seront accessibles aux "
+"contributeurs au sein de l'éditeur HTML ; consultez la documentation pour "
+"connaître les contraintes qui s'appliquent"
+
+#: src/pyams_skin/interfaces/__init__.py:93
+msgid "Custom script"
+msgstr "Script additionnel"
+
+#: src/pyams_skin/interfaces/__init__.py:94
+msgid ""
+"This custom javascript file will be used to add dynamic features to selected "
+"theme"
+msgstr ""
+"Ce fichier javascript pourra ajouter des fonctionnalités supplémentaires à "
+"celles proposées par le thème graphique sélectionné"
+
+#: src/pyams_skin/interfaces/__init__.py:76
+msgid "You must select a custom skin or inherit from parent!"
+msgstr ""
+"Vous devez choisir un thème spécifique ou hériter de celui du niveau parent"
 
 #: src/pyams_skin/interfaces/viewlet.py:264
 msgid "&lt;i class=&#39;fa fa-refresh fa-spin&#39;&gt;&lt;/i&gt;"
@@ -200,180 +383,14 @@
 msgid "You must specify cookie name and reject value !!"
 msgstr "Vous devez indiquer le nom du cookie et sa valeur de rejet !"
 
-#: src/pyams_skin/interfaces/configuration.py:33
-#: src/pyams_skin/interfaces/configuration.py:67
-msgid "Title"
-msgstr "Titre"
-
-#: src/pyams_skin/interfaces/configuration.py:34
-msgid "Application title displayed in title bar"
-msgstr "Titre de l'application affiché dans la barre de menu"
-
-#: src/pyams_skin/interfaces/configuration.py:37
-#: src/pyams_skin/interfaces/configuration.py:71
-msgid "Short title"
-msgstr "Titre court"
-
-#: src/pyams_skin/interfaces/configuration.py:38
-#: src/pyams_skin/interfaces/configuration.py:72
-msgid "Application short title visible as title prefix"
-msgstr "Titre court de l'application affiché en préfixe du titre"
-
-#: src/pyams_skin/interfaces/configuration.py:44
-msgid "Description"
-msgstr "Méta-description"
-
-#: src/pyams_skin/interfaces/configuration.py:45
-msgid "Main application description"
-msgstr ""
-"La méta-description du site est 'masquée' dans les en-têtes des pages HTML ; "
-"mais on peut la retrouver, par exemple, dans les listes de résultats des "
-"moteurs de recherche."
-
-#: src/pyams_skin/interfaces/configuration.py:48
-msgid "Author"
-msgstr "Auteur"
-
-#: src/pyams_skin/interfaces/configuration.py:49
-msgid "Public author name"
-msgstr "Nom public de l'auteur"
-
-#: src/pyams_skin/interfaces/configuration.py:52
-#: src/pyams_skin/interfaces/configuration.py:86
-msgid "Icon"
-msgstr "Icône"
-
-#: src/pyams_skin/interfaces/configuration.py:53
-#: src/pyams_skin/interfaces/configuration.py:87
-msgid "Browser favourite icon"
-msgstr "Icône des favoris"
-
-#: src/pyams_skin/interfaces/configuration.py:56
-#: src/pyams_skin/interfaces/configuration.py:90
-msgid "Logo"
-msgstr "Logo"
-
-#: src/pyams_skin/interfaces/configuration.py:57
-#: src/pyams_skin/interfaces/configuration.py:91
-msgid "Image containing application logo"
-msgstr "Image contenant le logo de l'application ou du site"
-
-#: src/pyams_skin/interfaces/configuration.py:68
-msgid "Application title visible in back-office"
-msgstr "Titre de l'application affiché dans la barre de menu"
-
-#: src/pyams_skin/interfaces/configuration.py:78
-msgid "Login header"
-msgstr "En-tête de connexion"
-
-#: src/pyams_skin/interfaces/configuration.py:79
-msgid "This reStructuredText text will be displayed in login page header"
-msgstr ""
-"Ce texte au format reStructuredText sera affiché en en-tête de la fenêtre de "
-"connexion"
-
-#: src/pyams_skin/interfaces/configuration.py:82
-msgid "Login footer"
-msgstr "Pied de page de connexion"
-
-#: src/pyams_skin/interfaces/configuration.py:83
-msgid "This reStructuredText text will be displayed in login page footer"
-msgstr ""
-"Ce texte au format reStructuredText sera affiché en pied de la fenêtre de "
-"connexion"
-
-#: src/pyams_skin/interfaces/configuration.py:94
-msgid "Login logo"
-msgstr "Logo de connexion"
+#: src/pyams_skin/templates/header.pt:5
+msgid "Back to previous page"
+msgstr "Revenir à la page précédente"
 
-#: src/pyams_skin/interfaces/configuration.py:95
-msgid "Image containing application logo for login form"
-msgstr ""
-"Image contenant le logo de l'application ou du site affiché sur la page de "
-"connexion"
-
-#: src/pyams_skin/interfaces/configuration.py:98
-msgid "Display title icon?"
-msgstr "Afficher les icônes de titre ?"
-
-#: src/pyams_skin/interfaces/configuration.py:99
-msgid "Should icons be displayed into content's title area ?"
-msgstr ""
-"Les icônes associées aux en-têtes de pages doivent-elles être affichées ?"
-
-#: src/pyams_skin/interfaces/configuration.py:103
-msgid "Display shared tool title?"
-msgstr "Afficher le titre des outils ?"
-
-#: src/pyams_skin/interfaces/configuration.py:104
-msgid "Should shared tool title be displayed into shared content's title area?"
-msgstr ""
-"Le titre des outils partagés doit-il être affiché dans les en-têtes de "
-"pages ?"
-
-#: src/pyams_skin/interfaces/__init__.py:55
-msgid "Inherit parent skin?"
-msgstr "Hériter du thème du parent ?"
-
-#: src/pyams_skin/interfaces/__init__.py:56
-msgid "Should we reuse parent skin?"
-msgstr "Si 'oui', le même thème que celui du niveau parent sera utilisé"
-
-#: src/pyams_skin/interfaces/__init__.py:60
-msgid "Don't inherit parent skin?"
-msgstr "Ne pas hériter du thème du parent ?"
-
-#: src/pyams_skin/interfaces/__init__.py:61
-msgid "Should we override parent skin?"
-msgstr "Si 'non', le même thème que celui du niveau parent sera utilisé"
-
-#: src/pyams_skin/interfaces/__init__.py:67
-msgid "Custom graphic theme"
-msgstr "Choisir un thème spécifique"
-
-#: src/pyams_skin/interfaces/__init__.py:68
-msgid "This theme will be used to handle graphic design (colors and images)"
-msgstr ""
-"Ce thème sera utilisé pour prendre en charge le modèle de présentation "
-"(palette de couleurs et images)"
-
-#: src/pyams_skin/interfaces/__init__.py:80
-msgid "Custom stylesheet"
-msgstr "Feuille de style personnalisée"
-
-#: src/pyams_skin/interfaces/__init__.py:81
-msgid "This custom stylesheet will be used to override selected theme styles"
-msgstr ""
-"Cette feuille de style pourra être utilisée pour surcharger les styles "
-"proposés par le thème graphique sélectionné"
-
-#: src/pyams_skin/interfaces/__init__.py:84
-msgid "Editor stylesheet"
-msgstr "Feuille de style éditeur HTML"
-
-#: src/pyams_skin/interfaces/__init__.py:85
-msgid "Styles defined into this stylesheet will be available into HTML editor"
-msgstr ""
-"Les styles définis dans cette feuille de style seront accessibles aux "
-"contributeurs au sein de l'éditeur HTML ; consultez la documentation pour "
-"connaître les contraintes qui s'appliquent"
-
-#: src/pyams_skin/interfaces/__init__.py:88
-msgid "Custom script"
-msgstr "Script additionnel"
-
-#: src/pyams_skin/interfaces/__init__.py:89
-msgid ""
-"This custom javascript file will be used to add dynamic features to selected "
-"theme"
-msgstr ""
-"Ce fichier javascript pourra ajouter des fonctionnalités supplémentaires à "
-"celles proposées par le thème graphique sélectionné"
-
-#: src/pyams_skin/interfaces/__init__.py:75
-msgid "You must select a custom skin or inherit from parent!"
-msgstr ""
-"Vous devez choisir un thème spécifique ou hériter de celui du niveau parent"
+#: src/pyams_skin/viewlet/activity/__init__.py:45
+#, python-format
+msgid "Last update: {0}"
+msgstr "Dernière mise à jour : {0}"
 
 #: src/pyams_skin/viewlet/toolbar/__init__.py:106
 msgid "Add..."
@@ -387,19 +404,10 @@
 msgid "Other actions..."
 msgstr "Autres actions..."
 
-#: src/pyams_skin/viewlet/activity/__init__.py:45
-#, python-format
-msgid "Last update: {0}"
-msgstr "Dernière mise à jour : {0}"
-
 #: src/pyams_skin/viewlet/breadcrumb/breadcrumbs.pt:4
 msgid "Label"
 msgstr "Libellé"
 
-#: src/pyams_skin/templates/header.pt:5
-msgid "Back to previous page"
-msgstr "Revenir à la page précédente"
-
 #~ msgid "Search..."
 #~ msgstr "Rechercher..."
 
--- a/src/pyams_skin/locales/pyams_skin.pot	Tue Jul 13 08:00:55 2021 +0200
+++ b/src/pyams_skin/locales/pyams_skin.pot	Tue Jul 13 08:01:21 2021 +0200
@@ -1,12 +1,12 @@
 #
 # SOME DESCRIPTIVE TITLE
 # This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, 2019.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2021.
 #, fuzzy
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE 1.0\n"
-"POT-Creation-Date: 2019-01-16 23:38+0100\n"
+"POT-Creation-Date: 2021-07-06 14:56+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -16,11 +16,15 @@
 "Content-Transfer-Encoding: 8bit\n"
 "Generated-By: Lingua 3.10.dev0\n"
 
-#: ./src/pyams_skin/container.py:71
+#: ./src/pyams_skin/skin.py:218
+msgid "PyAMS base skin"
+msgstr ""
+
+#: ./src/pyams_skin/container.py:75
 msgid "No provided object_name argument!"
 msgstr ""
 
-#: ./src/pyams_skin/container.py:84
+#: ./src/pyams_skin/container.py:88
 msgid "Given element name doesn't exist!"
 msgstr ""
 
@@ -56,8 +60,165 @@
 msgid "Delete object"
 msgstr ""
 
-#: ./src/pyams_skin/skin.py:202
-msgid "PyAMS base skin"
+#: ./src/pyams_skin/interfaces/configuration.py:33
+#: ./src/pyams_skin/interfaces/configuration.py:67
+msgid "Title"
+msgstr ""
+
+#: ./src/pyams_skin/interfaces/configuration.py:34
+msgid "Application title displayed in title bar"
+msgstr ""
+
+#: ./src/pyams_skin/interfaces/configuration.py:37
+#: ./src/pyams_skin/interfaces/configuration.py:71
+msgid "Short title"
+msgstr ""
+
+#: ./src/pyams_skin/interfaces/configuration.py:38
+#: ./src/pyams_skin/interfaces/configuration.py:72
+msgid "Application short title visible as title prefix"
+msgstr ""
+
+#: ./src/pyams_skin/interfaces/configuration.py:44
+msgid "Description"
+msgstr ""
+
+#: ./src/pyams_skin/interfaces/configuration.py:45
+msgid "Main application description"
+msgstr ""
+
+#: ./src/pyams_skin/interfaces/configuration.py:48
+msgid "Author"
+msgstr ""
+
+#: ./src/pyams_skin/interfaces/configuration.py:49
+msgid "Public author name"
+msgstr ""
+
+#: ./src/pyams_skin/interfaces/configuration.py:52
+#: ./src/pyams_skin/interfaces/configuration.py:86
+msgid "Icon"
+msgstr ""
+
+#: ./src/pyams_skin/interfaces/configuration.py:53
+#: ./src/pyams_skin/interfaces/configuration.py:87
+msgid "Browser favourite icon"
+msgstr ""
+
+#: ./src/pyams_skin/interfaces/configuration.py:56
+#: ./src/pyams_skin/interfaces/configuration.py:90
+msgid "Logo"
+msgstr ""
+
+#: ./src/pyams_skin/interfaces/configuration.py:57
+#: ./src/pyams_skin/interfaces/configuration.py:91
+msgid "Image containing application logo"
+msgstr ""
+
+#: ./src/pyams_skin/interfaces/configuration.py:68
+msgid "Application title visible in back-office"
+msgstr ""
+
+#: ./src/pyams_skin/interfaces/configuration.py:78
+msgid "Login header"
+msgstr ""
+
+#: ./src/pyams_skin/interfaces/configuration.py:79
+msgid "This reStructuredText text will be displayed in login page header"
+msgstr ""
+
+#: ./src/pyams_skin/interfaces/configuration.py:82
+msgid "Login footer"
+msgstr ""
+
+#: ./src/pyams_skin/interfaces/configuration.py:83
+msgid "This reStructuredText text will be displayed in login page footer"
+msgstr ""
+
+#: ./src/pyams_skin/interfaces/configuration.py:94
+msgid "Login logo"
+msgstr ""
+
+#: ./src/pyams_skin/interfaces/configuration.py:95
+msgid "Image containing application logo for login form"
+msgstr ""
+
+#: ./src/pyams_skin/interfaces/configuration.py:98
+msgid "Display title icon?"
+msgstr ""
+
+#: ./src/pyams_skin/interfaces/configuration.py:99
+msgid "Should icons be displayed into content's title area ?"
+msgstr ""
+
+#: ./src/pyams_skin/interfaces/configuration.py:103
+msgid "Display shared tool title?"
+msgstr ""
+
+#: ./src/pyams_skin/interfaces/configuration.py:104
+msgid "Should shared tool title be displayed into shared content's title area?"
+msgstr ""
+
+#: ./src/pyams_skin/interfaces/__init__.py:56
+msgid "Inherit parent skin?"
+msgstr ""
+
+#: ./src/pyams_skin/interfaces/__init__.py:57
+msgid "Should we reuse parent skin?"
+msgstr ""
+
+#: ./src/pyams_skin/interfaces/__init__.py:61
+msgid "Don't inherit parent skin?"
+msgstr ""
+
+#: ./src/pyams_skin/interfaces/__init__.py:62
+msgid "Should we override parent skin?"
+msgstr ""
+
+#: ./src/pyams_skin/interfaces/__init__.py:68
+msgid "Custom graphic theme"
+msgstr ""
+
+#: ./src/pyams_skin/interfaces/__init__.py:69
+msgid "This theme will be used to handle graphic design (colors and images)"
+msgstr ""
+
+#: ./src/pyams_skin/interfaces/__init__.py:81
+msgid "Container class"
+msgstr ""
+
+#: ./src/pyams_skin/interfaces/__init__.py:82
+msgid "Main page container class"
+msgstr ""
+
+#: ./src/pyams_skin/interfaces/__init__.py:85
+msgid "Custom stylesheet"
+msgstr ""
+
+#: ./src/pyams_skin/interfaces/__init__.py:86
+msgid "This custom stylesheet will be used to override selected theme styles"
+msgstr ""
+
+#: ./src/pyams_skin/interfaces/__init__.py:89
+msgid "Editor stylesheet"
+msgstr ""
+
+#: ./src/pyams_skin/interfaces/__init__.py:90
+msgid "Styles defined into this stylesheet will be available into HTML editor"
+msgstr ""
+
+#: ./src/pyams_skin/interfaces/__init__.py:93
+msgid "Custom script"
+msgstr ""
+
+#: ./src/pyams_skin/interfaces/__init__.py:94
+msgid ""
+"This custom javascript file will be used to add dynamic features to selected "
+"theme"
+msgstr ""
+
+#: ./src/pyams_skin/interfaces/__init__.py:76
+msgid "You must select a custom skin or inherit from parent!"
 msgstr ""
 
 #: ./src/pyams_skin/interfaces/viewlet.py:264
@@ -192,157 +353,13 @@
 msgid "You must specify cookie name and reject value !!"
 msgstr ""
 
-#: ./src/pyams_skin/interfaces/configuration.py:33
-#: ./src/pyams_skin/interfaces/configuration.py:67
-msgid "Title"
-msgstr ""
-
-#: ./src/pyams_skin/interfaces/configuration.py:34
-msgid "Application title displayed in title bar"
-msgstr ""
-
-#: ./src/pyams_skin/interfaces/configuration.py:37
-#: ./src/pyams_skin/interfaces/configuration.py:71
-msgid "Short title"
-msgstr ""
-
-#: ./src/pyams_skin/interfaces/configuration.py:38
-#: ./src/pyams_skin/interfaces/configuration.py:72
-msgid "Application short title visible as title prefix"
-msgstr ""
-
-#: ./src/pyams_skin/interfaces/configuration.py:44
-msgid "Description"
-msgstr ""
-
-#: ./src/pyams_skin/interfaces/configuration.py:45
-msgid "Main application description"
-msgstr ""
-
-#: ./src/pyams_skin/interfaces/configuration.py:48
-msgid "Author"
-msgstr ""
-
-#: ./src/pyams_skin/interfaces/configuration.py:49
-msgid "Public author name"
-msgstr ""
-
-#: ./src/pyams_skin/interfaces/configuration.py:52
-#: ./src/pyams_skin/interfaces/configuration.py:86
-msgid "Icon"
-msgstr ""
-
-#: ./src/pyams_skin/interfaces/configuration.py:53
-#: ./src/pyams_skin/interfaces/configuration.py:87
-msgid "Browser favourite icon"
-msgstr ""
-
-#: ./src/pyams_skin/interfaces/configuration.py:56
-#: ./src/pyams_skin/interfaces/configuration.py:90
-msgid "Logo"
-msgstr ""
-
-#: ./src/pyams_skin/interfaces/configuration.py:57
-#: ./src/pyams_skin/interfaces/configuration.py:91
-msgid "Image containing application logo"
-msgstr ""
-
-#: ./src/pyams_skin/interfaces/configuration.py:68
-msgid "Application title visible in back-office"
-msgstr ""
-
-#: ./src/pyams_skin/interfaces/configuration.py:78
-msgid "Login header"
-msgstr ""
-
-#: ./src/pyams_skin/interfaces/configuration.py:79
-msgid "This reStructuredText text will be displayed in login page header"
-msgstr ""
-
-#: ./src/pyams_skin/interfaces/configuration.py:82
-msgid "Login footer"
-msgstr ""
-
-#: ./src/pyams_skin/interfaces/configuration.py:83
-msgid "This reStructuredText text will be displayed in login page footer"
+#: ./src/pyams_skin/templates/header.pt:5
+msgid "Back to previous page"
 msgstr ""
 
-#: ./src/pyams_skin/interfaces/configuration.py:94
-msgid "Login logo"
-msgstr ""
-
-#: ./src/pyams_skin/interfaces/configuration.py:95
-msgid "Image containing application logo for login form"
-msgstr ""
-
-#: ./src/pyams_skin/interfaces/configuration.py:98
-msgid "Display title icon?"
-msgstr ""
-
-#: ./src/pyams_skin/interfaces/configuration.py:99
-msgid "Should icons be displayed into content's title area ?"
-msgstr ""
-
-#: ./src/pyams_skin/interfaces/configuration.py:103
-msgid "Display shared tool title?"
-msgstr ""
-
-#: ./src/pyams_skin/interfaces/configuration.py:104
-msgid "Should shared tool title be displayed into shared content's title area?"
-msgstr ""
-
-#: ./src/pyams_skin/interfaces/__init__.py:55
-msgid "Inherit parent skin?"
-msgstr ""
-
-#: ./src/pyams_skin/interfaces/__init__.py:56
-msgid "Should we reuse parent skin?"
-msgstr ""
-
-#: ./src/pyams_skin/interfaces/__init__.py:60
-msgid "Don't inherit parent skin?"
-msgstr ""
-
-#: ./src/pyams_skin/interfaces/__init__.py:61
-msgid "Should we override parent skin?"
-msgstr ""
-
-#: ./src/pyams_skin/interfaces/__init__.py:67
-msgid "Custom graphic theme"
-msgstr ""
-
-#: ./src/pyams_skin/interfaces/__init__.py:68
-msgid "This theme will be used to handle graphic design (colors and images)"
-msgstr ""
-
-#: ./src/pyams_skin/interfaces/__init__.py:80
-msgid "Custom stylesheet"
-msgstr ""
-
-#: ./src/pyams_skin/interfaces/__init__.py:81
-msgid "This custom stylesheet will be used to override selected theme styles"
-msgstr ""
-
-#: ./src/pyams_skin/interfaces/__init__.py:84
-msgid "Editor stylesheet"
-msgstr ""
-
-#: ./src/pyams_skin/interfaces/__init__.py:85
-msgid "Styles defined into this stylesheet will be available into HTML editor"
-msgstr ""
-
-#: ./src/pyams_skin/interfaces/__init__.py:88
-msgid "Custom script"
-msgstr ""
-
-#: ./src/pyams_skin/interfaces/__init__.py:89
-msgid ""
-"This custom javascript file will be used to add dynamic features to selected "
-"theme"
-msgstr ""
-
-#: ./src/pyams_skin/interfaces/__init__.py:75
-msgid "You must select a custom skin or inherit from parent!"
+#: ./src/pyams_skin/viewlet/activity/__init__.py:45
+#, python-format
+msgid "Last update: {0}"
 msgstr ""
 
 #: ./src/pyams_skin/viewlet/toolbar/__init__.py:106
@@ -357,15 +374,6 @@
 msgid "Other actions..."
 msgstr ""
 
-#: ./src/pyams_skin/viewlet/activity/__init__.py:45
-#, python-format
-msgid "Last update: {0}"
-msgstr ""
-
 #: ./src/pyams_skin/viewlet/breadcrumb/breadcrumbs.pt:4
 msgid "Label"
 msgstr ""
-
-#: ./src/pyams_skin/templates/header.pt:5
-msgid "Back to previous page"
-msgstr ""
--- a/src/pyams_skin/metas.py	Tue Jul 13 08:00:55 2021 +0200
+++ b/src/pyams_skin/metas.py	Tue Jul 13 08:01:21 2021 +0200
@@ -19,7 +19,7 @@
 
 from pyams_i18n.interfaces import II18n
 from pyams_skin.interfaces.configuration import IConfiguration
-from pyams_skin.interfaces.extension import IGoogleAnalyticsInfo
+from pyams_skin.interfaces.extension import IFacebookSiteInfo, IGoogleAnalyticsInfo
 from pyams_skin.interfaces.metas import IHTMLContentMetas, IMetaHeader
 from pyams_skin.layer import IPyAMSUserLayer
 from pyams_utils.adapter import ContextRequestViewAdapter, adapter_config
@@ -199,3 +199,22 @@
     def get_metas(self):
         info = IGoogleAnalyticsInfo(self.request.root)
         yield ContentMeta('google-site-verification', info.verification_code)
+
+
+@adapter_config(name='facebook-verification',
+                context=(Interface, IPyAMSUserLayer, Interface),
+                provides=IHTMLContentMetas)
+class FacebookVerificationCodeMetasAdapter(ContextRequestViewAdapter):
+    """Facebook verification code meta adapter"""
+
+    order = 12
+
+    def __new__(cls, context, request, view):
+        info = IFacebookSiteInfo(request.root)
+        if not (info.enabled and info.verification_code):
+            return None
+        return ContextRequestViewAdapter.__new__(cls)
+
+    def get_metas(self):
+        info = IFacebookSiteInfo(self.request.root)
+        yield ContentMeta('facebook-domain-verification', info.verification_code)