Viewing File: /home/eticmes/www/wp-content/plugins/ultimate-post-kit/includes/setup-wizard/views/integration.php
<?php
/**
* Integration Step
*/
namespace UltimatePostKit\SetupWizard;
if (!defined('ABSPATH')) {
exit;
}
// Include the plugin API fetcher and helper
require_once __DIR__ . '/../class-plugin-api-fetcher.php';
require_once __DIR__ . '/../class-plugin-integration-helper.php';
// Function to format date in human-readable format
function format_last_updated($date_string) {
if (empty($date_string)) {
return '';
}
// Try to parse the date
$date = strtotime($date_string);
if ($date === false) {
return $date_string; // Return original if parsing fails
}
// Calculate time difference
$now = time();
$diff = $now - $date;
// Convert to human-readable format
if ($diff < 60) {
return __('just now', 'ultimate-post-kit');
} elseif ($diff < 3600) {
$minutes = floor($diff / 60);
return sprintf(_n('%d minute ago', '%d minutes ago', $minutes, 'ultimate-post-kit'), $minutes);
} elseif ($diff < 86400) {
$hours = floor($diff / 3600);
return sprintf(_n('%d hour ago', '%d hours ago', $hours, 'ultimate-post-kit'), $hours);
} elseif ($diff < 2592000) { // 30 days
$days = floor($diff / 86400);
return sprintf(_n('%d day ago', '%d days ago', $days, 'ultimate-post-kit'), $days);
} elseif ($diff < 31536000) { // 1 year
$months = floor($diff / 2592000);
return sprintf(_n('%d month ago', '%d months ago', $months, 'ultimate-post-kit'), $months);
} else {
$years = floor($diff / 31536000);
return sprintf(_n('%d year ago', '%d years ago', $years, 'ultimate-post-kit'), $years);
}
}
// Function to generate fallback URLs for plugin logos
function get_plugin_fallback_urls($plugin_slug) {
// Handle different plugin slug formats
if (strpos($plugin_slug, '/') !== false) {
// If it's a file path like 'plugin-name/plugin-name.php', extract directory
$plugin_slug_clean = dirname($plugin_slug);
} else {
// If it's just the plugin directory name, use it directly
$plugin_slug_clean = $plugin_slug;
}
// Custom icon URLs for specific plugins that might not be on WordPress.org
$custom_icons = [
'bdthemes-element-pack-lite' => [
'https://ps.w.org/bdthemes-element-pack-lite/assets/icon-256x256.png',
'https://ps.w.org/bdthemes-element-pack-lite/assets/icon-128x128.png',
],
'live-copy-paste' => [
'https://ps.w.org/live-copy-paste/assets/icon-256x256.png',
'https://ps.w.org/live-copy-paste/assets/icon-128x128.png',
],
'spin-wheel' => [
'https://ps.w.org/spin-wheel/assets/icon-256x256.png',
'https://ps.w.org/spin-wheel/assets/icon-128x128.png',
],
'ai-image' => [
'https://ps.w.org/ai-image/assets/icon-256x256.png',
'https://ps.w.org/ai-image/assets/icon-128x128.png',
],
'smart-admin-assistant' => [
'https://ps.w.org/smart-admin-assistant/assets/icon-256x256.png',
'https://ps.w.org/smart-admin-assistant/assets/icon-128x128.png',
],
'website-accessibility' => [
'https://ps.w.org/website-accessibility/assets/icon-256x256.png',
'https://ps.w.org/website-accessibility/assets/icon-128x128.png',
],
];
// Return custom icons if available, otherwise use default WordPress.org URLs
if (isset($custom_icons[$plugin_slug_clean])) {
return $custom_icons[$plugin_slug_clean];
}
return [
"https://ps.w.org/{$plugin_slug_clean}/assets/icon-256x256.gif", // Try GIF first
"https://ps.w.org/{$plugin_slug_clean}/assets/icon-256x256.png", // Then PNG
"https://ps.w.org/{$plugin_slug_clean}/assets/icon-128x128.gif", // Medium GIF
"https://ps.w.org/{$plugin_slug_clean}/assets/icon-128x128.png", // Medium PNG
];
}
// Define plugin slugs to fetch data for
$plugin_slugs = array(
'bdthemes-element-pack-lite',
'bdthemes-prime-slider-lite',
'ultimate-store-kit',
'zoloblocks',
'pixel-gallery',
'live-copy-paste',
'spin-wheel',
'ai-image',
'dark-reader',
'ar-viewer',
'smart-admin-assistant',
'website-accessibility',
// Add more plugin slugs here as needed
);
// Get plugin data using the helper
$upk_plugins = Plugin_Integration_Helper::build_plugin_data($plugin_slugs);
?>
<div class="bdt-wizard-step bdt-setup-wizard-integration" data-step="integration">
<h2><?php esc_html_e('Add More Firepower', 'ultimate-post-kit'); ?></h2>
<p><?php esc_html_e('You can onboard additional powerful plugins to extend your web design capabilities.', 'ultimate-post-kit'); ?></p>
<div class="progress-bar-container">
<div id="plugin-install-progress" class="progress-bar"></div>
</div>
<form method="POST" id="upk-install-plugins">
<div class="bdt-plugin-list">
<?php
foreach ($upk_plugins as $plugin) :
$is_active = is_plugin_active($plugin['slug']);
$is_recommended = $plugin['recommended'] && !$is_active;
?>
<label class="plugin-item" data-slug="<?php echo esc_attr($plugin['slug']); ?>">
<span class="bdt-flex bdt-flex-middle bdt-flex-between bdt-margin-small-bottom">
<span class="bdt-plugin-logo">
<?php
$logo_url = $plugin['logo'] ?? '';
$plugin_name = $plugin['name'] ?? '';
$plugin_slug = $plugin['slug'] ?? '';
if (!empty($logo_url) && filter_var($logo_url, FILTER_VALIDATE_URL)) {
// Show the original logo from API
echo '<img src="' . esc_url($logo_url) . '" alt="' . esc_attr($plugin_name) . '" onerror="this.style.display=\'none\'; this.nextElementSibling.style.display=\'flex\';">';
echo '<div class="default-plugin-icon" style="display:none;">📦</div>';
} else {
// Generate fallback URLs for WordPress.org
// Extract the actual plugin slug from the file path format
$actual_slug = str_replace('.php', '', basename($plugin_slug));
$fallback_urls = get_plugin_fallback_urls($actual_slug);
echo '<img src="' . esc_url($fallback_urls[0]) . '" alt="' . esc_attr($plugin_name) . '" onerror="this.style.display=\'none\'; this.nextElementSibling.style.display=\'flex\';">';
echo '<div class="default-plugin-icon" style="display:none;">📦</div>';
}
?>
</span>
<div class="bdt-plugin-badge-switch-wrap">
<?php if ($is_recommended) : ?>
<span class="recommended-badge"><?php esc_html_e('Recommended', 'ultimate-post-kit'); ?></span>
<?php endif; ?>
<?php if ($is_active) : ?>
<span class="active-badge"><?php esc_html_e('ACTIVE', 'ultimate-post-kit'); ?></span>
<?php endif; ?>
<?php
if (!$is_active) : ?>
<label class="switch">
<input type="checkbox" class="plugin-slider-checkbox" <?php echo wp_kses_post($plugin['recommended']) ? 'checked' : ''; ?>
name="plugins[]<?php echo isset($plugin['slug']) ? wp_kses_post($plugin['slug']) : ''; ?>">
<span class="slider round"></span>
</label>
<?php
endif;
?>
</div>
</span>
<div class="bdt-flex bdt-flex-middle">
<span class="bdt-plugin-name">
<?php echo wp_kses_post($plugin['name']); ?>
</span>
</div>
<!-- <span class="plugin-text">
<?php //echo wp_kses_post($plugin['description']); ?>
</span> -->
<span class="active-installs">
<?php esc_html_e('Active Installs: ', 'ultimate-post-kit');
// echo wp_kses_post($plugin['active_installs'] ?? '0');
if (isset($plugin['active_installs_count']) && $plugin['active_installs_count'] > 0) {
echo ' <span class="installs-count">' . number_format($plugin['active_installs_count']) . '+' . '</span>';
}
?>
</span>
<?php if (isset($plugin['downloaded_formatted']) && !empty($plugin['downloaded_formatted'])): ?>
<span class="downloads"><?php esc_html_e('Downloads: ', 'ultimate-post-kit'); echo wp_kses_post($plugin['downloaded_formatted']); ?></span>
<?php endif; ?>
<div class="rating-section">
<!-- <span class="rating-label"><?php //esc_html_e('Ratings', 'ultimate-post-kit'); ?></span> -->
<div class="wporg-ratings" title="<?php echo esc_attr($plugin['rating'] ?? '0'); ?> out of 5 stars" style="color:var(--wp--preset--color--pomegrade-1, #e26f56);">
<?php
$rating = floatval($plugin['rating'] ?? 0);
$full_stars = floor($rating);
$has_half_star = ($rating - $full_stars) >= 0.5;
$empty_stars = 5 - $full_stars - ($has_half_star ? 1 : 0);
// Full stars
for ($i = 0; $i < $full_stars; $i++) {
echo '<span class="dashicons dashicons-star-filled"></span>';
}
// Half star
if ($has_half_star) {
echo '<span class="dashicons dashicons-star-half"></span>';
}
// Empty stars
for ($i = 0; $i < $empty_stars; $i++) {
echo '<span class="dashicons dashicons-star-empty"></span>';
}
?>
</div>
<span class="rating-text">
<?php echo esc_html($plugin['rating'] ?? '0'); ?> out of 5 stars.
<?php if (isset($plugin['num_ratings']) && $plugin['num_ratings'] > 0): ?>
<span class="rating-count">(<?php echo number_format($plugin['num_ratings']); ?> ratings)</span>
<?php endif; ?>
</span>
</div>
<?php if (isset($plugin['last_updated']) && !empty($plugin['last_updated'])): ?>
<span class="last-updated"><?php esc_html_e('Last Updated: ', 'ultimate-post-kit'); echo esc_html(format_last_updated($plugin['last_updated'])); ?></span>
<?php endif; ?>
</label>
<?php
endforeach; ?>
</div>
<div class="wizard-navigation bdt-margin-top">
<button class="bdt-button bdt-button-primary d-none" type="submit" id="upk-install-plugins-btn">
<?php esc_html_e('Install and Continue', 'ultimate-post-kit'); ?>
</button>
<div class="bdt-close-button bdt-margin-left bdt-wizard-next" data-step="finish"><?php esc_html_e('Skip', 'ultimate-post-kit'); ?></div>
</div>
</form>
<div class="bdt-wizard-navigation">
<button class="bdt-button bdt-button-secondary bdt-wizard-prev" data-step="features">
<span><i class="dashicons dashicons-arrow-left-alt"></i></span>
<?php esc_html_e('Previous Step', 'ultimate-post-kit'); ?>
</button>
</div>
</div>
Back to Directory
File Manager