Hi Felix,
Here is the update:
<?php
use \MainWP\Dashboard\MainWP_DB;
class ADECUpdatesReport {
public static $sections = array(
array(
'name' => 'section.adec_plugin_updates',
'desc' => 'Liste les plugins ayant une mise à jour disponible',
),
array(
'name' => 'section.adec_tpl_updates',
'desc' => 'Liste les templates ayant une mise à jour disponible',
),
);
public static $navTokenGroups = array(
'sections' => 'Sections',
'adec_plugin_updates' => 'Plugins updates',
'adec_tpl_updates' => 'Templates updates',
'adec_tokens' => 'Autres tokens',
);
public static $pluginsTokens = array(
array(
'name' => 'plugin.name',
'desc' => 'Nom du plugin',
),
array(
'name' => 'plugin.current_version',
'desc' => 'Version actuelle du plugin',
),
array(
'name' => 'plugin.new_version',
'desc' => 'Nouvelle version disponible',
),
);
public static $tplTokens = array(
array(
'name' => 'template.name',
'desc' => 'Nom du template',
),
array(
'name' => 'template.current_version',
'desc' => 'Version actuelle du template',
),
array(
'name' => 'template.new_version',
'desc' => 'Nouvelle version du template',
),
);
public static $otherTokens = array(
array(
'name' => 'core.version_status',
'desc' => 'Texte WP Core a jour ou pas',
),
array(
'name' => 'translations.updates',
'desc' => 'Liste les mises à jour traductions disponibles',
),
);
public static function addADECNavGroup( $tokens_groups ) {
$tokens_groups['adec_tokens'] = 'ADEC Tokens';
return $tokens_groups;
}
public static function getWebsiteUpdatesList( $site_id ) {
$website = MainWP_DB::instance()->get_website_by_id( $site_id );
$wp_upgrades = json_decode( MainWP_DB::instance()->get_website_option( $website, 'wp_upgrades' ), true );
$plugin_upgrades = json_decode( $website->plugin_upgrades, true );
$theme_upgrades = json_decode( $website->theme_upgrades, true );
$translation_upgrades = json_decode( $website->translation_upgrades, true );
$result = array(
'wp_core' => $wp_upgrades,
'plugins' => $plugin_upgrades,
'themes' => $theme_upgrades,
'translation' => $translation_upgrades,
);
return $result;
}
public static function replaceTemplateTokens( $txt, $tpl ) {
$tokens = array(
'[template.name]' => $tpl['Name'],
'[template.current_version]' => $tpl['Version'],
'[template.new_version]' => ( ! empty( $tpl['update'] ) ) ? $tpl['update']['new_version'] : '',
);
$r = $txt;
foreach ( $tokens as $token => $val ) {
$r = str_replace( $token, $val, $r );
}
return $r;
}
public static function replacePluginTokens( $txt, $plugin ) {
$tokens = array(
'[plugin.name]' => $plugin['Name'],
'[plugin.current_version]' => $plugin['Version'],
'[plugin.new_version]' => ( ! empty( $plugin['update'] ) ) ? $plugin['update']['new_version'] : '',
);
$r = $txt;
foreach ( $tokens as $token => $val ) {
$r = str_replace( $token, $val, $r );
}
return $r;
}
}
function addTokenGroups( $tokens ) {
// Add sections
foreach ( ADECUpdatesReport::$sections as $section ) {
$tokens['adec_tokens']['sections'][] = $section;
}
// Add sections groups
foreach ( ADECUpdatesReport::$navTokenGroups as $group_slug => $group_name ) {
$tokens['adec_tokens']['nav_group_tokens'][ $group_slug ] = $group_name;
}
// Add plugins tokens
foreach ( ADECUpdatesReport::$pluginsTokens as $tokenData ) {
$tokens['adec_tokens']['adec_plugin_updates'][] = $tokenData;
}
// Add templates tokens
foreach ( ADECUpdatesReport::$tplTokens as $tokenData ) {
$tokens['adec_tokens']['adec_tpl_updates'][] = $tokenData;
}
foreach ( ADECUpdatesReport::$otherTokens as $tokenData ) {
$tokens['adec_tokens']['adec_tokens'][] = $tokenData;
}
return $tokens;
}
add_filter( 'mainwp_client_reports_tokens_groups', 'addTokenGroups' );
add_filter( 'mainwp_pro_reports_tokens_groups', 'addTokenGroups' );
// Add main nav group
add_filter( 'mainwp_client_reports_tokens_nav_top', array( 'ADECUpdatesReport', 'addADECNavGroup' ) );
add_filter( 'mainwp_pro_reports_tokens_nav_top', array( 'ADECUpdatesReport', 'addADECNavGroup' ) );
// token values
add_filter( 'mainwp_client_reports_custom_tokens', 'ADEC_custom_reports_custom_tokens', 10, 3 );
add_filter( 'mainwp_pro_reports_custom_tokens', 'ADEC_custom_reports_custom_tokens', 10, 4 );
function ADEC_custom_reports_custom_tokens( $tokens_values, $report, $site, $templ_content = '' ) {
$updates = ADECUpdatesReport::getWebsiteUpdatesList( $site['id'] );
// CORE UPDATE TOKEN
$tokens_values['[core.version_status]'] = ( empty( $updates['wp_core'] ) )
? '✅ Le core est à jour'
: "⚠️ Le core n'est pas à jour. (Version actuelle : " . $updates['wp_core']['current'] . '. Nouvelle version : <b>' . $updates['wp_core']['new'] . '</b>)';
// CUSTOM LOOP TEMPLATES UPDATES
$updates_regex = '/(\[section\.adec_tpl_updates\])(.*?)(\[\/section\.adec_tpl_updates\])/is';
if ( preg_match_all( $updates_regex, $templ_content, $matches ) ) {
$section_content = '';
if ( empty( $updates['themes'] ) ) {
$section_content = ' ✅ <b>Tous les thèmes sont à jour</b><br>';
} else {
$replaced_content = '⚠️ <b>Des mises à jour de thèmes sont disponibles</b><br>';
foreach ( $updates['themes'] as $tpl ) {
$replaced_content .= ADECUpdatesReport::replaceTemplateTokens( $matches[2][0], $tpl );
}
$section_content = $replaced_content;
}
$body = str_replace(
array( '[section.adec_tpl_updates]', '[/section.adec_tpl_updates]' ),
'',
$templ_content
);
$body = str_replace( $matches[2], $section_content, $body );
$templ_content = $body;
}
// CUSTOM LOOP PLUGINS UPDATES
$updates_regex = '/(\[section\.adec_plugin_updates\])(.*?)(\[\/section\.adec_plugin_updates\])/is';
if ( preg_match_all( $updates_regex, $templ_content, $matches ) ) {
$section_content = '';
if ( empty( $updates['plugins'] ) ) {
$section_content = ' ✅ <b>Tous les plugins sont à jour</b><br>';
} else {
$replaced_content = '⚠️ <b>Des mises à jour de plugins sont disponibles</b><br>';
foreach ( $updates['plugins'] as $plug ) {
$replaced_content .= ADECUpdatesReport::replacePluginTokens( $matches[2][0], $plug );
}
$section_content = $replaced_content;
}
$body = str_replace(
array( '[section.adec_plugin_updates]', '[/section.adec_plugin_updates]' ),
'',
$templ_content
);
$body = str_replace( $matches[2], $section_content, $body );
$templ_content = $body;
}
// TRANSLATIONS UPDATES TOKEN
$translation_txt .= '';
if ( empty( $updates['translation'] ) ) {
$translation_txt .= ' ✅ Toutes les traductions sont à jour';
} else {
foreach ( $updates['translation'] as $trans ) {
$translation_txt .= 'Une mise à jour de traduction (<b>' . $trans['language'] . '</b>) est disponible pour <b>' . $trans['name'] . ' ' . $trans['version'] . '</b><br>';
}
}
$tokens_values['[translations.updates]'] = $translation_txt;
return $tokens_values;
}