Skip to content

Commit

Permalink
v 2.25.1
Browse files Browse the repository at this point in the history
- Add links to plugin dependencies.
  • Loading branch information
Darklg committed Jul 25, 2024
1 parent ec85e1f commit c3b742e
Show file tree
Hide file tree
Showing 11 changed files with 317 additions and 217 deletions.
48 changes: 48 additions & 0 deletions inc/WPUBaseToolbox/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,3 +35,51 @@ echo $this->basetoolbox->get_form_html('form_edit_note', array(
)
));
```

### Get user IP

```php
$anonymized = false;
echo $this->basetoolbox->get_user_ip($anonymized);
```

### Handle plugin dependencies

```php
$this->basetoolbox->check_plugins_dependencies(array(
'wpuoptions' => array(
'path' => 'wpuoptions/wpuoptions.php',
'url' => 'https://github.com/WordPressUtilities/wpuoptions',
'name' => 'WPU Options'
),
'wputaxometas' => array(
'path' => 'wputaxometas/wputaxometas.php',
'url' => 'https://github.com/WordPressUtilities/wputaxometas',
'name' => 'WPU Taxo Metas'
)
));
```

### Array helpers

#### Get a value from an array

```php

$data = array(
'key1' => 'value1',
'key2' => 'value2'
);

# Get HTML attributes from an array
echo $this->basetoolbox->array_to_html_attributes($data);

# Create an HTML table from an array
echo $this->basetoolbox->array_to_html_table($data);

# Export an array as a JSON file
$this->basetoolbox->export_array_to_json($data, 'filename');

# Export an array as a CSV file
$this->basetoolbox->export_array_to_csv($data, 'filename');
```
74 changes: 52 additions & 22 deletions inc/WPUBaseToolbox/WPUBaseToolbox.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
/*
Class Name: WPU Base Toolbox
Description: Cool helpers for WordPress Plugins
Version: 0.15.0
Version: 0.16.0
Class URI: https://github.com/WordPressUtilities/wpubaseplugin
Author: Darklg
Author URI: https://darklg.me/
Expand All @@ -15,7 +15,7 @@
defined('ABSPATH') || die;

class WPUBaseToolbox {
private $plugin_version = '0.15.0';
private $plugin_version = '0.16.0';
private $args = array();
private $missing_plugins = array();
private $default_module_args = array(
Expand Down Expand Up @@ -501,39 +501,40 @@ function export_array_clean_for_csv($data) {
/* Array to JSON
-------------------------- */

public function export_array_to_json($data, $name) {
if (!isset($data[0])) {
public function export_array_to_json($array, $name) {
if (!isset($array[0])) {
return;
}
/* Correct headers */
header('Content-type: application/json');
header('Content-Disposition: attachment; filename=' . $name . '.json');
header('Pragma: no-cache');

echo json_encode($data);
echo json_encode($array);
die;
}

/* Array to CSV
-------------------------- */

public function export_array_to_csv($data, $name) {
if (!isset($data[0])) {
public function export_array_to_csv($array, $name) {
if (!isset($array[0])) {
return;
}

$data = $this->export_array_clean_for_csv($data);
$array = $this->export_array_clean_for_csv($array);

/* Correct headers */
header('Content-Type: application/csv');
header('Content-Disposition: attachment; filename=' . $name . '.csv');
header('Pragma: no-cache');

$all_keys = array_keys($data[0]);
$all_keys = array_keys($array[0]);

/* Build and send CSV */
$output = fopen("php://output", 'w');
fputcsv($output, $all_keys);
foreach ($data as $item) {
foreach ($array as $item) {
fputcsv($output, $item);
}
fclose($output);
Expand Down Expand Up @@ -588,18 +589,26 @@ function check_plugins_dependencies($plugins = array()) {

foreach ($plugins as $plugin) {

$plugin['path'] = is_array($plugin['path']) ? $plugin['path'] : array($plugin['path']);

// Check if plugin is active
$has_plugin = is_plugin_active($plugin['path']) || is_plugin_active_for_network($plugin['path']);

/* Get active must-use plugins list */
$mu_plugins_path = array(
WPMU_PLUGIN_DIR,
WPMU_PLUGIN_DIR . '/wpu'
);
foreach ($mu_plugins_path as $mu_plugins_dir) {
if (is_dir($mu_plugins_dir) && file_exists($mu_plugins_dir . '/' . $plugin['path'])) {
$has_plugin = false;

foreach ($plugin['path'] as $plugin_path) {
if (is_plugin_active($plugin_path) || is_plugin_active_for_network($plugin_path)) {
$has_plugin = true;
break;
}

/* Get active must-use plugins list */
$mu_plugins_path = array(
WPMU_PLUGIN_DIR,
WPMU_PLUGIN_DIR . '/wpu'
);
foreach ($mu_plugins_path as $mu_plugins_dir) {
if (is_dir($mu_plugins_dir) && file_exists($mu_plugins_dir . '/' . $plugin_path)) {
$has_plugin = true;
break;
}
}
}

Expand All @@ -616,9 +625,30 @@ function check_plugins_dependencies($plugins = array()) {
}

public function set_error_missing_plugins() {
foreach ($this->missing_plugins as $plugin) {
echo '<div class="error"><p>' . sprintf(__('The plugin <b>%s</b> depends on the <b>%s</b> plugin. Please install and activate it.', __NAMESPACE__), $this->args['plugin_name'], $plugin['name']) . '</p></div>';

if (!$this->missing_plugins) {
return;
}

echo '<div class="error">';
if (count($this->missing_plugins) > 1) {
echo '<p>' . sprintf(__('The plugin <b>%s</b> depends on the following plugins. Please install and activate them:', __NAMESPACE__), $this->args['plugin_name']) . '</p><ul>';
foreach ($this->missing_plugins as $plugin) {
echo '<li>- ' . $this->get_missing_plugin_display_name($plugin) . '</li>';
}
echo '</ul>';
} else {
echo '<p>' . sprintf(__('The plugin <b>%s</b> depends on the <b>%s</b> plugin. Please install and activate it.', __NAMESPACE__), $this->args['plugin_name'], $this->get_missing_plugin_display_name($this->missing_plugins[0])) . '</p>';
}
echo '</div>';
}

function get_missing_plugin_display_name($plugin) {
$name = $plugin['name'];
if (isset($plugin['url'])) {
$name = '<a target="_blank" rel="noopener" href="' . $plugin['url'] . '">' . $name . '</a>';
}
return $name;
}

}
2 changes: 1 addition & 1 deletion lang/wpuseo-fr_FR.l10n.php
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
<?php
return ['domain'=>NULL,'plural-forms'=>NULL,'messages'=>['Submit'=>'Envoyer','Previous'=>'Précédent','Next'=>'Suivant','No'=>'Non','Yes'=>'Oui','The field “%s” is required'=>'Le champ « %s » est obligatoire','The field “%s” should be an email'=>'Le champ « %s » doit être un email','The plugin <b>%s</b> depends on the <b>%s</b> plugin. Please install and activate it.'=>'Le plugin <b>%s</b> dépend du plugin <b>%s</b>. Merci de l’installer et de l’activer.','Enhance SEO : Clean title, Nice metas, GDPR friendly Analytics.'=>'Amélioration du référencement : Title propre, Belles métas, Analytics RGPD-friendly.','SEO Details'=>'Détails SEO','SEO Details - Twitter'=>'Détails SEO - Twitter','SEO Details - Facebook'=>'Détails SEO - Facebook','Page title'=>'Titre de la page','Page description'=>'Description de la page','Hide'=>'Masquer','Hide from search engines'=>'Masquer des moteurs de recherche','Image'=>'Image','Twitter:title'=>'Twitter:title','Twitter:description'=>'Twitter:description','Twitter:Image'=>'Twitter:Image','OG:Title'=>'OG:Title','OG:Description'=>'OG:Description','Og:Image'=>'Og:Image','Main'=>'Principal','Homepage'=>'Page d\'accueil','Title separator'=>'Séparateur de titre','Between site name and site description, or page name and site name'=>'Entre le nom du site et la description du site, ou le nom de la page et le nom du site','Site name before page title'=>'Nom du site avant le titre de la page','Meta keyword min length'=>'Longueur minimale d’un meta keyword','Default SEO Thumbnail'=>'Miniature SEO par défaut','If not filled, the current theme screenshot will be used'=>'S’il n’est pas rempli, la capture d’écran du thème en cours sera utilisée','Hide title prefix'=>'Masquer le préfixe du titre','Meta description'=>'Meta description','Meta keywords'=>'Meta keywords','Site verification ID'=>'ID de vérification de site','Use the content attribute of the validation meta tag'=>'Utilisez l’attribut contenu de la balise meta de validation','Custom JS Code'=>'Code JS personnalisé','Custom tracking code : Plugged to cookie notice if enabled. No HTML !'=>'Code de suivi personnalisé : branché au Cookie Notice s’il est activé. Pas de HTML !','%s content'=>'Contenu de %s','Content of the %s file'=>'Contenu du fichier %s','Google Analytics ID'=>'Google Analytics ID','Enable Analytics for logged-in users'=>'Activer Analytics pour les utilisateurs connectés','Enable anonymizeIp for Analytics'=>'Activer anonymizeIp pour Analytics','Cookie expiration for Analytics (in sec)'=>'Expiration des cookies pour Analytics (en sec)','If not filled, will use Google’s default value.'=>'S’il n’est pas rempli, la valeur par défaut de Google sera utilisée.','Enable Facebook metas'=>'Activer les metas Facebook','FB:Admins ID'=>'FB:Admins ID','FB:App ID'=>'FB:App ID','FB:Pixel ID'=>'FB:Pixel ID','Enable FB:Pixel for logged-in users'=>'Activer FB:Pixel pour les utilisateurs connectés','OG:Image'=>'OG:Image','OG:Title Home'=>'OG:Title de la page d’accueil','OG:Description Home'=>'OG:Description de la page d’accueil','Enable Twitter metas'=>'Activer les metas Twitter','Twitter site @username'=>'Twitter @username du site','Twitter ads ID'=>'Twitter ads ID','Twitter:Card format'=>'Twitter:Card format','Title Home'=>'Titre Accueil','Description Home'=>'Description de la page d’accueil','Enable Cookie Notice'=>'Activer le Cookie Notice','Track before cookie check'=>'Suivi avant la vérification des cookies','For test purposes only : do not use in production !'=>'Pour les tests seulement : ne pas utiliser en production !','Banner text'=>'Texte de la bannière','"Accept" button text'=>'Texte bouton « Accepter »','"Refuse" button text'=>'Texte bouton « Refuser »','Display "refuse" button'=>'Afficher le bouton « refuser »','Duration of choice (in days)'=>'Durée du choix (en jours)','Support DoNotTrack'=>'Support de DoNotTrack','Twitter'=>'Twitter','Facebook'=>'Facebook','404 Error'=>'Erreur 404','Search results for "%s"'=>'Résultats de recherche pour "%s"','Archive'=>'Archive','Tag:'=>'Tag :','Category:'=>'Catégorie :','Author:'=>'Auteur :','Year:'=>'Année :','Y'=>'Y','Month:'=>'Mois :','F Y'=>'F Y','Day:'=>'Jour :','F j, Y'=>'j F Y','a certified GDPR plugin'=>'un plugin RGPD certifié','This website uses cookies to ensure you get the best experience on our website.'=>'Ce site utilise des cookies pour vous garantir la meilleure expérience utilisateur.','Accept'=>'Accepter','Refuse'=>'Refuser','Title tag content'=>'Contenu de la balise title','Meta description content'=>'Contenu de la méta-description','Twitter Title'=>'Titre Twitter','Twitter Description'=>'Description Twitter','Twitter Image'=>'Image Twitter','Facebook og:title'=>'Facebook og:title','Facebook og:description'=>'Facebook og:description','Facebook og:image'=>'Facebook og:image','Preview'=>'Aperçu','Save post to display updated values'=>'Enregistrer la publication pour afficher les valeurs mises à jour','Edit in site options to display updated values'=>'Modifier dans les options du site pour afficher les valeurs mises à jour'],'language'=>'fr_FR','x-generator'=>'Poedit 3.4.4'];
return ['domain'=>NULL,'plural-forms'=>NULL,'messages'=>['Submit'=>'Envoyer','Previous'=>'Précédent','Next'=>'Suivant','No'=>'Non','Yes'=>'Oui','The field “%s” is required'=>'Le champ « %s » est obligatoire','The field “%s” should be an email'=>'Le champ « %s » doit être un email','The plugin <b>%s</b> depends on the following plugins. Please install and activate them:'=>'Le plugin <b>%s</b> dépend des plugins suivants. Veuillez les installer et les activer :','The plugin <b>%s</b> depends on the <b>%s</b> plugin. Please install and activate it.'=>'Le plugin <b>%s</b> dépend du plugin <b>%s</b>. Merci de l’installer et de l’activer.','Enhance SEO : Clean title, Nice metas, GDPR friendly Analytics.'=>'Amélioration du référencement : Title propre, Belles métas, Analytics RGPD-friendly.','SEO Details'=>'Détails SEO','SEO Details - Twitter'=>'Détails SEO - Twitter','SEO Details - Facebook'=>'Détails SEO - Facebook','Page title'=>'Titre de la page','Page description'=>'Description de la page','Hide'=>'Masquer','Hide from search engines'=>'Masquer des moteurs de recherche','Image'=>'Image','Twitter:title'=>'Twitter:title','Twitter:description'=>'Twitter:description','Twitter:Image'=>'Twitter:Image','OG:Title'=>'OG:Title','OG:Description'=>'OG:Description','Og:Image'=>'Og:Image','Main'=>'Principal','Homepage'=>'Page d\'accueil','Title separator'=>'Séparateur de titre','Between site name and site description, or page name and site name'=>'Entre le nom du site et la description du site, ou le nom de la page et le nom du site','Site name before page title'=>'Nom du site avant le titre de la page','Meta keyword min length'=>'Longueur minimale d’un meta keyword','Default SEO Thumbnail'=>'Miniature SEO par défaut','If not filled, the current theme screenshot will be used'=>'S’il n’est pas rempli, la capture d’écran du thème en cours sera utilisée','Hide title prefix'=>'Masquer le préfixe du titre','Meta description'=>'Meta description','Meta keywords'=>'Meta keywords','Site verification ID'=>'ID de vérification de site','Use the content attribute of the validation meta tag'=>'Utilisez l’attribut contenu de la balise meta de validation','Custom JS Code'=>'Code JS personnalisé','Custom tracking code : Plugged to cookie notice if enabled. No HTML !'=>'Code de suivi personnalisé : branché au Cookie Notice s’il est activé. Pas de HTML !','%s content'=>'Contenu de %s','Content of the %s file'=>'Contenu du fichier %s','Google Analytics ID'=>'Google Analytics ID','Enable Analytics for logged-in users'=>'Activer Analytics pour les utilisateurs connectés','Enable anonymizeIp for Analytics'=>'Activer anonymizeIp pour Analytics','Cookie expiration for Analytics (in sec)'=>'Expiration des cookies pour Analytics (en sec)','If not filled, will use Google’s default value.'=>'S’il n’est pas rempli, la valeur par défaut de Google sera utilisée.','Enable Facebook metas'=>'Activer les metas Facebook','FB:Admins ID'=>'FB:Admins ID','FB:App ID'=>'FB:App ID','FB:Pixel ID'=>'FB:Pixel ID','Enable FB:Pixel for logged-in users'=>'Activer FB:Pixel pour les utilisateurs connectés','OG:Image'=>'OG:Image','OG:Title Home'=>'OG:Title de la page d’accueil','OG:Description Home'=>'OG:Description de la page d’accueil','Enable Twitter metas'=>'Activer les metas Twitter','Twitter site @username'=>'Twitter @username du site','Twitter ads ID'=>'Twitter ads ID','Twitter:Card format'=>'Twitter:Card format','Title Home'=>'Titre Accueil','Description Home'=>'Description de la page d’accueil','Enable Cookie Notice'=>'Activer le Cookie Notice','Track before cookie check'=>'Suivi avant la vérification des cookies','For test purposes only : do not use in production !'=>'Pour les tests seulement : ne pas utiliser en production !','Banner text'=>'Texte de la bannière','"Accept" button text'=>'Texte bouton « Accepter »','"Refuse" button text'=>'Texte bouton « Refuser »','Display "refuse" button'=>'Afficher le bouton « refuser »','Duration of choice (in days)'=>'Durée du choix (en jours)','Support DoNotTrack'=>'Support de DoNotTrack','Twitter'=>'Twitter','Facebook'=>'Facebook','404 Error'=>'Erreur 404','Search results for "%s"'=>'Résultats de recherche pour "%s"','Archive'=>'Archive','Tag:'=>'Tag :','Category:'=>'Catégorie :','Author:'=>'Auteur :','Year:'=>'Année :','Y'=>'Y','Month:'=>'Mois :','F Y'=>'F Y','Day:'=>'Jour :','F j, Y'=>'j F Y','a certified GDPR plugin'=>'un plugin RGPD certifié','This website uses cookies to ensure you get the best experience on our website.'=>'Ce site utilise des cookies pour vous garantir la meilleure expérience utilisateur.','Accept'=>'Accepter','Refuse'=>'Refuser','Title tag content'=>'Contenu de la balise title','Meta description content'=>'Contenu de la méta-description','Twitter Title'=>'Titre Twitter','Twitter Description'=>'Description Twitter','Twitter Image'=>'Image Twitter','Facebook og:title'=>'Facebook og:title','Facebook og:description'=>'Facebook og:description','Facebook og:image'=>'Facebook og:image','Preview'=>'Aperçu','Save post to display updated values'=>'Enregistrer la publication pour afficher les valeurs mises à jour','Edit in site options to display updated values'=>'Modifier dans les options du site pour afficher les valeurs mises à jour'],'language'=>'fr_FR','x-generator'=>'Poedit 3.4.4'];
Binary file modified lang/wpuseo-fr_FR.mo
Binary file not shown.
Loading

0 comments on commit c3b742e

Please sign in to comment.