176 lines
8.8 KiB
PHP
176 lines
8.8 KiB
PHP
<?php
|
|
/**
|
|
* The Pro Plugins tab for plugin settings.
|
|
*
|
|
* @package SEO_Pro_Stack
|
|
* @subpackage SEO_Pro_Stack/Admin/Settings/Tabs
|
|
*/
|
|
|
|
// If this file is called directly, abort.
|
|
if (!defined('ABSPATH')) {
|
|
exit;
|
|
}
|
|
|
|
/**
|
|
* The Pro Plugins tab for plugin settings.
|
|
*/
|
|
class SEOProStack_Tab_Pro_Plugins {
|
|
|
|
/**
|
|
* Render the tab content.
|
|
*/
|
|
public function render() {
|
|
?>
|
|
<div class="seoprostack-settings-content tab-content" id="pro-plugins">
|
|
<div class="seoprostack-setting-section">
|
|
<h2><?php esc_html_e('Premium WordPress Plugins', 'seoprostack'); ?></h2>
|
|
<p class="description"><?php esc_html_e('These premium plugins enhance your WordPress site with advanced features and functionality.', 'seoprostack'); ?></p>
|
|
|
|
<div class="seoprostack-plugin-filters" id="seoprostack-plugin-filters">
|
|
<a href="#" class="button current" data-category="all"><?php esc_html_e('All', 'seoprostack'); ?></a>
|
|
<a href="#" class="button" data-category="seo"><?php esc_html_e('SEO', 'seoprostack'); ?></a>
|
|
<a href="#" class="button" data-category="performance"><?php esc_html_e('Performance', 'seoprostack'); ?></a>
|
|
<a href="#" class="button" data-category="analytics"><?php esc_html_e('Analytics', 'seoprostack'); ?></a>
|
|
</div>
|
|
|
|
<div class="seoprostack-loading" style="text-align: center; padding: 30px; display: none;">
|
|
<span class="spinner is-active"></span>
|
|
<p><?php esc_html_e('Loading plugins...', 'seoprostack'); ?></p>
|
|
</div>
|
|
|
|
<div class="seoprostack-plugin-list" id="seoprostack-plugin-list">
|
|
<!-- Plugins will be loaded here via AJAX -->
|
|
</div>
|
|
|
|
<div class="seoprostack-no-plugins" style="display: none;">
|
|
<p><?php esc_html_e('No plugins found matching your criteria.', 'seoprostack'); ?></p>
|
|
</div>
|
|
</div>
|
|
|
|
<script type="text/javascript">
|
|
jQuery(document).ready(function($) {
|
|
// Function to load plugins
|
|
function loadProPlugins(category) {
|
|
var $container = $('#seoprostack-plugin-list');
|
|
var $loading = $('.seoprostack-loading');
|
|
var $noPlugins = $('.seoprostack-no-plugins');
|
|
|
|
// Reset container and show loading
|
|
$container.empty();
|
|
$noPlugins.hide();
|
|
$loading.show();
|
|
|
|
// Make AJAX request
|
|
$.ajax({
|
|
url: seoProStack.ajaxurl,
|
|
type: 'POST',
|
|
data: {
|
|
action: 'seoprostack_get_pro_plugins',
|
|
category: category,
|
|
nonce: seoProStack.nonce
|
|
},
|
|
success: function(response) {
|
|
$loading.hide();
|
|
|
|
if (response.success && response.data.plugins && response.data.plugins.length > 0) {
|
|
// Render plugins
|
|
$.each(response.data.plugins, function(index, plugin) {
|
|
var $pluginCard = $('<div class="seoprostack-plugin-card" />');
|
|
|
|
// Plugin header
|
|
var $header = $('<div class="seoprostack-plugin-header" />');
|
|
$header.append('<h3>' + plugin.name + '</h3>');
|
|
$header.append('<span class="seoprostack-plugin-version">v' + plugin.version + '</span>');
|
|
$pluginCard.append($header);
|
|
|
|
// Plugin content
|
|
var $content = $('<div class="seoprostack-plugin-content" />');
|
|
$content.append('<p>' + plugin.description + '</p>');
|
|
|
|
// Plugin actions
|
|
var $actions = $('<div class="seoprostack-plugin-actions" />');
|
|
|
|
if (plugin.status === 'installed') {
|
|
if (plugin.active) {
|
|
$actions.append('<span class="button button-disabled">Active</span>');
|
|
} else {
|
|
$actions.append('<a href="#" class="button activate-plugin" data-plugin="' + plugin.path + '">Activate</a>');
|
|
}
|
|
} else {
|
|
$actions.append('<a href="' + plugin.url + '" class="button button-primary" target="_blank">Get Plugin</a>');
|
|
}
|
|
|
|
$content.append($actions);
|
|
$pluginCard.append($content);
|
|
|
|
// Add card to container
|
|
$container.append($pluginCard);
|
|
});
|
|
} else {
|
|
$noPlugins.show();
|
|
}
|
|
},
|
|
error: function() {
|
|
$loading.hide();
|
|
$noPlugins.show();
|
|
}
|
|
});
|
|
}
|
|
|
|
// Handle category filter clicks
|
|
$('#seoprostack-plugin-filters a').on('click', function(e) {
|
|
e.preventDefault();
|
|
|
|
// Update active filter
|
|
$('#seoprostack-plugin-filters a').removeClass('current');
|
|
$(this).addClass('current');
|
|
|
|
// Load plugins
|
|
var category = $(this).data('category');
|
|
loadProPlugins(category);
|
|
});
|
|
|
|
// Load initial plugins
|
|
loadProPlugins('all');
|
|
|
|
// Delegate plugin activation
|
|
$(document).on('click', '.activate-plugin', function(e) {
|
|
e.preventDefault();
|
|
|
|
var $button = $(this);
|
|
var pluginPath = $button.data('plugin');
|
|
|
|
$button.text('Activating...').addClass('updating-message');
|
|
|
|
$.ajax({
|
|
url: seoProStack.ajaxurl,
|
|
type: 'POST',
|
|
data: {
|
|
action: 'seoprostack_activate_plugin',
|
|
plugin: pluginPath,
|
|
nonce: seoProStack.nonce
|
|
},
|
|
success: function(response) {
|
|
if (response.success) {
|
|
$button.removeClass('updating-message')
|
|
.removeClass('activate-plugin')
|
|
.addClass('button-disabled')
|
|
.text('Active')
|
|
.prop('disabled', true);
|
|
} else {
|
|
$button.removeClass('updating-message').text('Activate');
|
|
alert(response.data.message || 'Error activating plugin');
|
|
}
|
|
},
|
|
error: function() {
|
|
$button.removeClass('updating-message').text('Activate');
|
|
alert('Error connecting to server');
|
|
}
|
|
});
|
|
});
|
|
});
|
|
</script>
|
|
</div>
|
|
<?php
|
|
}
|
|
}
|