Remplace l'api opengraph par un sélecteur

This commit is contained in:
Fred Tempez 2023-08-12 21:34:38 +02:00
parent ce1c3a852a
commit a667b0370d
9 changed files with 128 additions and 52 deletions

View File

@ -6,7 +6,8 @@
- Améliore la gestion de la base de données et la génération du fichier de journalisation, stockage des données JSON, forçage au format objet. - Améliore la gestion de la base de données et la génération du fichier de journalisation, stockage des données JSON, forçage au format objet.
- Erreurs fictives pendant la mise à jour en ligne, améliorations du dialogue AJAX entre PHP et JQUERY avec un affichage précis des erreurs. - Erreurs fictives pendant la mise à jour en ligne, améliorations du dialogue AJAX entre PHP et JQUERY avec un affichage précis des erreurs.
- L'ajout d'une langue de contenu initialise les données de la langue. - L'ajout d'une langue de contenu initialise les données de la langue.
- Format d'image avif si supporté par la version installée de php;. - Format d'image avif si supporté par la version installée de php.
- Remplacement du service ScreenShot API par un sélecteur manuel ; affiche les paramètres d'images recommandées et ceux de l'image sélectionnée.
# Corrections # Corrections
- Correction de bugs mineurs dans la sauvegarde et la suppression des modules installés. - Correction de bugs mineurs dans la sauvegarde et la suppression des modules installés.
- Problèmes de mise à jour depuis les versions 11. - Problèmes de mise à jour depuis les versions 11.

View File

@ -824,11 +824,33 @@ class layout extends common
*/ */
public function showMetaImage() public function showMetaImage()
{ {
$items = '<meta property="og:image" content="' . helper::baseUrl(false) . self::FILE_DIR . 'source/screenshot.jpg" />'; $imagePath = self::FILE_DIR . 'source/' . $this->getData(['config', 'seo', 'openGraphImage']);
$items .= '<meta property="og:image:type" content="image/jpeg" />'; if (
$items .= '<meta property="og:image:width" content="1200" />'; $this->getData(['config', 'seo', 'openGraphImage'])
$items .= '<meta property="og:image:height" content="627" />'; && file_exists($imagePath)
echo $items; ) {
$typeMime = exif_imagetype($imagePath);
switch ($typeMime) {
case IMAGETYPE_JPEG:
$typeMime = 'image/jpeg';
break;
case IMAGETYPE_PNG:
$typeMime = 'image/png';
break;
default:
// Type incorrect
return;
}
$imageSize = getimagesize($imagePath);
$wide = $imageSize[0];
$height = $imageSize[1];
//Sortie
$items = '<meta property="og:image" content="' . helper::baseUrl(false) . self::FILE_DIR . 'source/' . $this->getData(['config', 'seo', 'openGraphImage']) . '" />';
$items .= '<meta property="og:image:type" content="' . $typeMime . '" />';
$items .= '<meta property="og:image:width" content="' . $wide . '" />';
$items .= '<meta property="og:image:height" content="' . $height . '" />';
echo $items;
}
} }
/** /**

View File

@ -1061,6 +1061,9 @@ if ($this->getData(['core', 'dataVersion']) < 13000) {
} }
$_SESSION['ZWII_CONTENT'] = $currentlanguage; $_SESSION['ZWII_CONTENT'] = $currentlanguage;
// Supprime la clé OpenOgraph
$this->deleteData(['config', 'seo', 'keyApi']);
// Mise à jour // Mise à jour
$this->setData(['core', 'dataVersion', 13000]); $this->setData(['core', 'dataVersion', 13000]);
} }

View File

@ -204,6 +204,8 @@ class config extends common
public static $onlineVersion = ''; public static $onlineVersion = '';
public static $updateButtonText = 'Réinstaller'; public static $updateButtonText = 'Réinstaller';
public static $imageOpenGraph = [];
/** /**
* Génére les fichiers pour les crawlers * Génére les fichiers pour les crawlers
* Sitemap compressé et non compressé * Sitemap compressé et non compressé
@ -299,8 +301,6 @@ class config extends common
} }
} }
// Traitement des données reçues valides. // Traitement des données reçues valides.
if (!empty($token) && $data !== false) { if (!empty($token) && $data !== false) {
$data = json_decode($data, true); $data = json_decode($data, true);
@ -365,12 +365,7 @@ class config extends common
'state' => false 'state' => false
]); ]);
} }
// Lire le contenu de l'archive dans le tableau files
/*
for ($i = 0; $i < $zip->numFiles; $i++) {
$stat = $zip->statIndex($i);
$files[] = (basename($stat['name']));
}*/
// Extraction de l'archive dans un dossier temporaire // Extraction de l'archive dans un dossier temporaire
$tmpDir = uniqid(8); $tmpDir = uniqid(8);
$success = $zip->extractTo(self::TEMP_DIR . $tmpDir); $success = $zip->extractTo(self::TEMP_DIR . $tmpDir);
@ -488,7 +483,7 @@ class config extends common
], ],
'seo' => [ 'seo' => [
'robots' => $this->getInput('seoRobots', helper::FILTER_BOOLEAN), 'robots' => $this->getInput('seoRobots', helper::FILTER_BOOLEAN),
'keyApi' => $this->getInput('seoKeyApi', helper::FILTER_STRING_SHORT), 'openGraphImage' => $this->getInput('seoOpenGraphImage', helper::FILTER_STRING_SHORT),
], ],
'connect' => [ 'connect' => [
'attempt' => $this->getInput('connectAttempt', helper::FILTER_INT), 'attempt' => $this->getInput('connectAttempt', helper::FILTER_INT),
@ -598,6 +593,47 @@ class config extends common
self::$updateDelay[$key] = $key === 86400 ? $value . ' ' . helper::translate('jour') : $value . ' ' . helper::translate('jours'); self::$updateDelay[$key] = $key === 86400 ? $value . ' ' . helper::translate('jour') : $value . ' ' . helper::translate('jours');
} }
// Paramètres de l'image OpenGraph
$imagePath = self::FILE_DIR . 'source/' . $this->getData(['config', 'seo', 'openGraphImage']);
// Par défaut
self::$imageOpenGraph['type'] = '';
self::$imageOpenGraph['size'] = '';
self::$imageOpenGraph['wide'] = '';
self::$imageOpenGraph['height'] = '';
self::$imageOpenGraph['ratio'] = 0;
if (
$this->getData(['config', 'seo', 'openGraphImage'])
&& file_exists($imagePath)
) {
// Infos sur l'image Open Graph
$typeMime = exif_imagetype($imagePath);
switch ($typeMime) {
case IMAGETYPE_JPEG:
$typeMime = 'jpeg';
break;
case IMAGETYPE_PNG:
$typeMime = 'png';
break;
}
self::$imageOpenGraph['type'] = $typeMime;
$imageSize = getimagesize($imagePath);
self::$imageOpenGraph['wide'] = $imageSize[0];
self::$imageOpenGraph['height'] = $imageSize[1];
self::$imageOpenGraph['ratio'] = self::$imageOpenGraph['wide'] / self::$imageOpenGraph['height'];
self::$imageOpenGraph['size'] = filesize($imagePath);
$tailleEnOctets = filesize($imagePath);
if ($tailleEnOctets >= 1024 * 1024) {
// Si la taille est supérieure ou égale à 1 Mo, afficher en mégaoctets
self::$imageOpenGraph['size'] = round($tailleEnOctets / (1024 * 1024), 2) . ' Mo';
} else {
// Sinon, afficher en kilooctets
self::$imageOpenGraph['size'] = round($tailleEnOctets / 1024, 2) . ' Ko';
}
}
// Valeurs en sortie // Valeurs en sortie
$this->addOutput([ $this->addOutput([
'title' => helper::translate('Configuration'), 'title' => helper::translate('Configuration'),

View File

@ -11,33 +11,47 @@
</span>--> </span>-->
</h4> </h4>
<div class="row"> <div class="row">
<div class="col7"> <div class="col6">
<div class="row"> <div class="row">
<div class="col12"> <div class="col12">
<?php echo template::text('seoKeyApi', [ <?php echo template::file('seoOpenGraphImage', [
'label' => 'Clé de l\'API <a href="https://app.screenshotapi.net/" target="_blank">ScreenShotApi</a>', 'language' => $this->getData(['user', $this->getUser('id'), 'language']),
'value' => $this->getData(['config', 'seo', 'keyApi']), 'label' => 'Image Open Graph',
'help' => 'Créez un compte gratuit, recopier la clé , puis valider le formulaire avant de cliquer sur le bouton de génération' 'value' => $this->getData(['config', 'seo', 'openGraphImage']),
'type' => 1,
'help' => sprintf('%s : JPG - PNG<br />', helper::translate('Format')) .
sprintf('%s : 1200 x 630 pixels<br />', helper::translate('Dimensions minimales')) .
sprintf('%s : 1.91:1<br />', helper::translate('Ratio')) .
sprintf('%s : %s, %s<br />', helper::translate('Taille maximale du fichier'), helper::translate('5 Mo pour les images JPEG'), helper::translate('1 Mo pour les images PNG'))
]); ?> ]); ?>
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col6 offset3"> <div class="col10 textAlignCenter">
<?php echo template::button('socialMetaImage', [ <?php if( $module::$imageOpenGraph['type']): ?>
'href' => helper::baseUrl() . 'config/configMetaImage', <p>
'value' => 'Générer une capture Open Graph' <?php echo sprintf('%s : %s ', helper::translate('Format'), $module::$imageOpenGraph['type']); ?>
]); ?> </p>
<p>
<?php echo sprintf('%s : %s x %s pixels', helper::translate('Dimensions minimales'), $module::$imageOpenGraph['wide'], $module::$imageOpenGraph['height'] ); ?>
</p>
<p>
<?php echo sprintf('%s : %s' , helper::translate('Ratio'), round($module::$imageOpenGraph['ratio'], 2)); ?>
</p>
<p>
<?php echo sprintf('%s : %s', helper::translate('Taille'), $module::$imageOpenGraph['size']); ?>
</p>
<?php endif; ?>
</div> </div>
</div> </div>
</div> </div>
<div class="col5"> <div class="col6">
<?php if (file_exists(self::FILE_DIR . 'source/screenshot.jpg')): ?> <?php if (
<div class="row"> $this->getData(['config', 'seo', 'openGraphImage']) &&
<div class="col8 offset2 textAlignCenter"> file_exists(self::FILE_DIR . 'source/' . $this->getData(['config', 'seo', 'openGraphImage']))
<img src="<?php echo helper::baseUrl(false) . self::FILE_DIR . 'source/screenshot.jpg'; ?>" ): ?>
data-tippy-content="Cette capture d'écran est nécessaire aux partages sur les réseaux sociaux. Elle est régénérée lorsque le fichier 'screenshot.jpg' est effacé du gestionnaire de fichiers." /> <img
</div> src="<?php echo self::FILE_DIR . 'source/' . $this->getData(['config', 'seo', 'openGraphImage']); ?>" />
</div>
<?php endif; ?> <?php endif; ?>
</div> </div>
</div> </div>

View File

@ -29,7 +29,7 @@ class init extends common
], ],
'seo' => [ 'seo' => [
'robots' => true, 'robots' => true,
'keyApi' => 'XXXXXXX-XXXXXXX-XXXXXXX-XXXXXXX' 'openGraphImage' => 'screenshot.jpg'
], ],
'connect' => [ 'connect' => [
'timeout' => 600, 'timeout' => 600,
@ -286,15 +286,15 @@ class init extends common
'language' => [ 'language' => [
"fr_FR" => [ "fr_FR" => [
"version" => 13000, "version" => 13000,
"date" => 1691352286 "date" => 1691858227
], ],
"es" => [ "es" => [
"version" => 13000, "version" => 13000,
"date" => 1691352286 "date" => 1691858227
], ],
"en_EN" => [ "en_EN" => [
"version" => 13000, "version" => 13000,
"date" => 1691352286 "date" => 1691858227
] ]
], ],
'profil' => [ 'profil' => [

View File

@ -136,8 +136,6 @@
"Chiffres": "Numbers", "Chiffres": "Numbers",
"Cible": "Target", "Cible": "Target",
"Cliquez sur une zone afin d'accéder à ses options de personnalisation.": "Click on an area to access its customization options.", "Cliquez sur une zone afin d'accéder à ses options de personnalisation.": "Click on an area to access its customization options.",
"Clé de l'API <a href=\"https://app.screenshotapi.net/\" target=\"_blank\">ScreenShotApi</a>": "API key <a href=\"https://app.screenshotapi.net/\" target=\"_blank\">ScreenShotApi</a>",
"Clé de l'API <a href='https://app.screenshotapi.net/' target='_blank'>ScreenShotApi</a>": "API key <a href='https://app.screenshotapi.net/' target='_blank'>ScreenShotApi</a>",
"Commentaire": "Comment", "Commentaire": "Comment",
"Complète": "Complete", "Complète": "Complete",
"Compte administrateur": "Administrator account", "Compte administrateur": "Administrator account",
@ -180,7 +178,6 @@
"Couleur visible en l'absence d'une image.<br />Le curseur horizontal règle le niveau de transparence.": "Visible color in the absence of an image. <br /> The horizontal cursor regulates the level of transparency.", "Couleur visible en l'absence d'une image.<br />Le curseur horizontal règle le niveau de transparence.": "Visible color in the absence of an image. <br /> The horizontal cursor regulates the level of transparency.",
"Couleur visible en l'absence d'une image.<br />Le curseur horizontal règle le niveau de transparence. La couleur du texte est automatique.": "Visible color in the absence of an image. <br /> The horizontal cursor regulates the level of transparency. The color of the text is automatic.", "Couleur visible en l'absence d'une image.<br />Le curseur horizontal règle le niveau de transparence. La couleur du texte est automatique.": "Visible color in the absence of an image. <br /> The horizontal cursor regulates the level of transparency. The color of the text is automatic.",
"Couleurs": "Colors", "Couleurs": "Colors",
"Créez un compte gratuit, recopier la clé , puis valider le formulaire avant de cliquer sur le bouton de génération": "Create a free account, copy the key, then validate the form before clicking the generation button",
"Dans le site": "Into the site", "Dans le site": "Into the site",
"Dans quelle langue utiliserez-vous Zwii ?": "In which language will you use Zwii?", "Dans quelle langue utiliserez-vous Zwii ?": "In which language will you use Zwii?",
"Date": "Date", "Date": "Date",
@ -322,7 +319,6 @@
"L'archive a été déposée dans le gestionnaire de fichiers. Les archives inférieures à la version 9 ne sont pas acceptées.": "The archive was deposited in the file manager. Archives below version 9 are not accepted.", "L'archive a été déposée dans le gestionnaire de fichiers. Les archives inférieures à la version 9 ne sont pas acceptées.": "The archive was deposited in the file manager. Archives below version 9 are not accepted.",
"L'identifiant est défini lors de la création du compte, il ne peut pas être modifié.": "The identifier is defined when creating the account, it cannot be changed.", "L'identifiant est défini lors de la création du compte, il ne peut pas être modifié.": "The identifier is defined when creating the account, it cannot be changed.",
"La carte du site a été mise à jour": "The site card has been updated", "La carte du site a été mise à jour": "The site card has been updated",
"La clé de l'API ne peut pas être vide": "The key to the API cannot be empty",
"La copie de sauvegarde du fichier htaccess n'a pas été restaurée !": "Backup copy of htaccess file has not been restored!", "La copie de sauvegarde du fichier htaccess n'a pas été restaurée !": "Backup copy of htaccess file has not been restored!",
"La description d'une page participe à son référencement, chaque page doit disposer d'une description différente.": "The description of a page participates in its referencing, each page must have a different description.", "La description d'une page participe à son référencement, chaque page doit disposer d'une description différente.": "The description of a page participates in its referencing, each page must have a different description.",
"La page %s est ouverte par l'utilisateur %s": "Page %s opened by user %s", "La page %s est ouverte par l'utilisateur %s": "Page %s opened by user %s",
@ -675,5 +671,9 @@
"Édition du profil %s": "Edit Profile %s", "Édition du profil %s": "Edit Profile %s",
"Éléments": "Items", "Éléments": "Items",
"Étendu sur la page": "Spread across the page", "Étendu sur la page": "Spread across the page",
"Étiquettes des pages spéciales": "Special pages labels" "Étiquettes des pages spéciales": "Special pages labels",
"Dimensions minimales": "Minimum dimensions",
"Taille maximale du fichier": "Maximum file size",
"5 Mo pour les images JPEG": "5 MB for JPEG images",
"1 Mo pour les images PNG": "1 MB for PNG images"
} }

View File

@ -136,8 +136,6 @@
"Chiffres": "Cifras", "Chiffres": "Cifras",
"Cible": "Objetivo", "Cible": "Objetivo",
"Cliquez sur une zone afin d'accéder à ses options de personnalisation.": "Haga clic en un área para acceder a sus opciones de personalización.", "Cliquez sur une zone afin d'accéder à ses options de personnalisation.": "Haga clic en un área para acceder a sus opciones de personalización.",
"Clé de l'API <a href=\"https://app.screenshotapi.net/\" target=\"_blank\">ScreenShotApi</a>": "Clave API <a href=",
"Clé de l'API <a href='https://app.screenshotapi.net/' target='_blank'>ScreenShotApi</a>": "Clave API <a href='https://app.screenshotapi.net/' target='_blank'>ScreenShotApi</a>",
"Commentaire": "Comentario", "Commentaire": "Comentario",
"Complète": "sin truncar", "Complète": "sin truncar",
"Compte administrateur": "Cuenta de administrador", "Compte administrateur": "Cuenta de administrador",
@ -180,7 +178,6 @@
"Couleur visible en l'absence d'une image.<br />Le curseur horizontal règle le niveau de transparence.": "Color visible en ausencia de una imagen.<br />El control deslizante horizontal ajusta el nivel de transparencia.", "Couleur visible en l'absence d'une image.<br />Le curseur horizontal règle le niveau de transparence.": "Color visible en ausencia de una imagen.<br />El control deslizante horizontal ajusta el nivel de transparencia.",
"Couleur visible en l'absence d'une image.<br />Le curseur horizontal règle le niveau de transparence. La couleur du texte est automatique.": "Color visible en ausencia de una imagen.<br />El control deslizante horizontal ajusta el nivel de transparencia. El color del texto es automático.", "Couleur visible en l'absence d'une image.<br />Le curseur horizontal règle le niveau de transparence. La couleur du texte est automatique.": "Color visible en ausencia de una imagen.<br />El control deslizante horizontal ajusta el nivel de transparencia. El color del texto es automático.",
"Couleurs": "Colores", "Couleurs": "Colores",
"Créez un compte gratuit, recopier la clé , puis valider le formulaire avant de cliquer sur le bouton de génération": "Cree una cuenta gratuita, copie la clave, luego valide el formulario antes de hacer clic en el botón generar",
"Dans le site": "En el sitio", "Dans le site": "En el sitio",
"Dans quelle langue utiliserez-vous Zwii ?": "¿En qué idioma usará Zwii?", "Dans quelle langue utiliserez-vous Zwii ?": "¿En qué idioma usará Zwii?",
"Date": "fecha", "Date": "fecha",
@ -322,7 +319,6 @@
"L'archive a été déposée dans le gestionnaire de fichiers. Les archives inférieures à la version 9 ne sont pas acceptées.": "El archivo ha sido depositado en el administrador de archivos. No se aceptan archivos inferiores a la versión 9.", "L'archive a été déposée dans le gestionnaire de fichiers. Les archives inférieures à la version 9 ne sont pas acceptées.": "El archivo ha sido depositado en el administrador de archivos. No se aceptan archivos inferiores a la versión 9.",
"L'identifiant est défini lors de la création du compte, il ne peut pas être modifié.": "El identificador se define al crear la cuenta, no se puede modificar.", "L'identifiant est défini lors de la création du compte, il ne peut pas être modifié.": "El identificador se define al crear la cuenta, no se puede modificar.",
"La carte du site a été mise à jour": "El mapa del sitio ha sido actualizado.", "La carte du site a été mise à jour": "El mapa del sitio ha sido actualizado.",
"La clé de l'API ne peut pas être vide": "La clave API no puede estar vacía",
"La copie de sauvegarde du fichier htaccess n'a pas été restaurée !": "¡La copia de seguridad del archivo htaccess no ha sido restaurada!", "La copie de sauvegarde du fichier htaccess n'a pas été restaurée !": "¡La copia de seguridad del archivo htaccess no ha sido restaurada!",
"La description d'une page participe à son référencement, chaque page doit disposer d'une description différente.": "La descripción de una página participa en su referenciación, cada página debe tener una descripción diferente.", "La description d'une page participe à son référencement, chaque page doit disposer d'une description différente.": "La descripción de una página participa en su referenciación, cada página debe tener una descripción diferente.",
"La page %s est ouverte par l'utilisateur %s": "La página %s ha sido abierta por el usuario %s", "La page %s est ouverte par l'utilisateur %s": "La página %s ha sido abierta por el usuario %s",
@ -675,5 +671,9 @@
"Édition du profil %s": "Edición del perfil %s", "Édition du profil %s": "Edición del perfil %s",
"Éléments": "Elementos", "Éléments": "Elementos",
"Étendu sur la page": "Extendido en la página", "Étendu sur la page": "Extendido en la página",
"Étiquettes des pages spéciales": "Etiquetas de páginas especiales" "Étiquettes des pages spéciales": "Etiquetas de páginas especiales",
"Dimensions minimales": "Dimensiones mínimas",
"Taille maximale du fichier": "Tamaño máximo de archivo",
"5 Mo pour les images JPEG": "5 MB para imágenes JPEG",
"1 Mo pour les images PNG": "1 MB para imágenes PNG"
} }

View File

@ -136,8 +136,6 @@
"Chiffres": "", "Chiffres": "",
"Cible": "", "Cible": "",
"Cliquez sur une zone afin d'accéder à ses options de personnalisation.": "", "Cliquez sur une zone afin d'accéder à ses options de personnalisation.": "",
"Clé de l'API <a href=\"https://app.screenshotapi.net/\" target=\"_blank\">ScreenShotApi</a>": "",
"Clé de l'API <a href='https://app.screenshotapi.net/' target='_blank'>ScreenShotApi</a>": "",
"Commentaire": "", "Commentaire": "",
"Complète": "", "Complète": "",
"Compte administrateur": "", "Compte administrateur": "",
@ -180,7 +178,6 @@
"Couleur visible en l'absence d'une image.<br />Le curseur horizontal règle le niveau de transparence.": "", "Couleur visible en l'absence d'une image.<br />Le curseur horizontal règle le niveau de transparence.": "",
"Couleur visible en l'absence d'une image.<br />Le curseur horizontal règle le niveau de transparence. La couleur du texte est automatique.": "", "Couleur visible en l'absence d'une image.<br />Le curseur horizontal règle le niveau de transparence. La couleur du texte est automatique.": "",
"Couleurs": "", "Couleurs": "",
"Créez un compte gratuit, recopier la clé , puis valider le formulaire avant de cliquer sur le bouton de génération": "",
"Dans le site": "", "Dans le site": "",
"Dans quelle langue utiliserez-vous Zwii ?": "", "Dans quelle langue utiliserez-vous Zwii ?": "",
"Date": "", "Date": "",
@ -322,7 +319,6 @@
"L'archive a été déposée dans le gestionnaire de fichiers. Les archives inférieures à la version 9 ne sont pas acceptées.": "", "L'archive a été déposée dans le gestionnaire de fichiers. Les archives inférieures à la version 9 ne sont pas acceptées.": "",
"L'identifiant est défini lors de la création du compte, il ne peut pas être modifié.": "", "L'identifiant est défini lors de la création du compte, il ne peut pas être modifié.": "",
"La carte du site a été mise à jour": "", "La carte du site a été mise à jour": "",
"La clé de l'API ne peut pas être vide": "",
"La copie de sauvegarde du fichier htaccess n'a pas été restaurée !": "", "La copie de sauvegarde du fichier htaccess n'a pas été restaurée !": "",
"La description d'une page participe à son référencement, chaque page doit disposer d'une description différente.": "", "La description d'une page participe à son référencement, chaque page doit disposer d'une description différente.": "",
"La page %s est ouverte par l'utilisateur %s": "", "La page %s est ouverte par l'utilisateur %s": "",
@ -675,5 +671,9 @@
"Édition du profil %s": "", "Édition du profil %s": "",
"Éléments": "", "Éléments": "",
"Étendu sur la page": "", "Étendu sur la page": "",
"Étiquettes des pages spéciales": "" "Étiquettes des pages spéciales": "",
"Dimensions minimales": "",
"Taille maximale du fichier": "",
"5 Mo pour les images JPEG": "",
"1 Mo pour les images PNG": ""
} }