added additional plugins
This commit is contained in:
parent
c85895d306
commit
00e60ec1b7
132 changed files with 27514 additions and 0 deletions
|
|
@ -0,0 +1,241 @@
|
|||
<?php
|
||||
/**
|
||||
* Dashboard page functionality.
|
||||
*
|
||||
* @package WPFMJ
|
||||
* @subpackage WPFMJ/admin
|
||||
*/
|
||||
|
||||
class WPFMJ_Dashboard {
|
||||
|
||||
/**
|
||||
* Add menu page.
|
||||
*/
|
||||
public function add_menu_page() {
|
||||
add_menu_page(
|
||||
__('Mailjet Automations', 'wpforms-mailjet-automation'),
|
||||
__('Mailjet Automations', 'wpforms-mailjet-automation'),
|
||||
'manage_options',
|
||||
'wpfmj-dashboard',
|
||||
array($this, 'render_dashboard'),
|
||||
'dashicons-email-alt',
|
||||
30
|
||||
);
|
||||
|
||||
add_submenu_page(
|
||||
'wpfmj-dashboard',
|
||||
__('All Automations', 'wpforms-mailjet-automation'),
|
||||
__('All Automations', 'wpforms-mailjet-automation'),
|
||||
'manage_options',
|
||||
'wpfmj-dashboard',
|
||||
array($this, 'render_dashboard')
|
||||
);
|
||||
|
||||
add_submenu_page(
|
||||
'wpfmj-dashboard',
|
||||
__('Add New Automation', 'wpforms-mailjet-automation'),
|
||||
__('Add New', 'wpforms-mailjet-automation'),
|
||||
'manage_options',
|
||||
'wpfmj-add-new',
|
||||
array($this, 'render_wizard')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Render dashboard page.
|
||||
*/
|
||||
public function render_dashboard() {
|
||||
// Verify user has proper capabilities
|
||||
if (!current_user_can('manage_options')) {
|
||||
wp_die(__('You do not have sufficient permissions to access this page.', 'wpforms-mailjet-automation'));
|
||||
}
|
||||
?>
|
||||
<div class="wrap">
|
||||
<h1 class="wp-heading-inline"><?php esc_html_e('Mailjet Automations', 'wpforms-mailjet-automation'); ?></h1>
|
||||
<a href="<?php echo esc_url(admin_url('admin.php?page=wpfmj-add-new')); ?>" class="page-title-action">
|
||||
<?php esc_html_e('Add New', 'wpforms-mailjet-automation'); ?>
|
||||
</a>
|
||||
<hr class="wp-header-end">
|
||||
|
||||
<div id="wpfmj-dashboard-root"></div>
|
||||
|
||||
<div id="wpfmj-dashboard-loading" style="padding: 40px; text-align: center;">
|
||||
<span class="spinner is-active" style="float: none; margin: 0 auto;"></span>
|
||||
<p><?php esc_html_e('Loading automations...', 'wpforms-mailjet-automation'); ?></p>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
// Render dashboard table
|
||||
jQuery(document).ready(function($) {
|
||||
function loadDashboard() {
|
||||
$.ajax({
|
||||
url: wpfmjData.ajaxUrl,
|
||||
type: 'POST',
|
||||
data: {
|
||||
action: 'wpfmj_get_dashboard_data',
|
||||
nonce: wpfmjData.ajaxNonce
|
||||
},
|
||||
success: function(response) {
|
||||
$('#wpfmj-dashboard-loading').hide();
|
||||
if (response.success) {
|
||||
renderTable(response.data);
|
||||
} else {
|
||||
var errorMessage = $('<div>').text(response.data).html();
|
||||
$('#wpfmj-dashboard-root').html('<div class="notice notice-error"><p>' + errorMessage + '</p></div>');
|
||||
}
|
||||
},
|
||||
error: function() {
|
||||
$('#wpfmj-dashboard-loading').hide();
|
||||
$('#wpfmj-dashboard-root').html('<div class="notice notice-error"><p>Failed to load automations.</p></div>');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function renderTable(automations) {
|
||||
if (automations.length === 0) {
|
||||
$('#wpfmj-dashboard-root').html(
|
||||
'<div class="wpfmj-empty-state" style="text-align: center; padding: 60px 20px;">' +
|
||||
'<p style="font-size: 18px; color: #666; margin-bottom: 20px;">No automations yet. Create your first automation to get started!</p>' +
|
||||
'<a href="' + wpfmjData.ajaxUrl.replace('admin-ajax.php', 'admin.php?page=wpfmj-add-new') + '" class="button button-primary button-large">Create Automation</a>' +
|
||||
'</div>'
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
var html = '<table class="wp-list-table widefat fixed striped">';
|
||||
html += '<thead><tr>';
|
||||
html += '<th>Title</th>';
|
||||
html += '<th>Form</th>';
|
||||
html += '<th>Status</th>';
|
||||
html += '<th>Errors</th>';
|
||||
html += '<th>Created</th>';
|
||||
html += '<th>Actions</th>';
|
||||
html += '</tr></thead><tbody>';
|
||||
|
||||
automations.forEach(function(automation) {
|
||||
var statusClass = automation.status === 'publish' ? 'active' : 'inactive';
|
||||
var statusText = automation.status === 'publish' ? 'Active' : 'Paused';
|
||||
var errorBadge = automation.error_count > 0 ? '<span class="wpfmj-error-badge">' + parseInt(automation.error_count) + '</span>' : '—';
|
||||
|
||||
// Escape data for safe HTML output
|
||||
var title = $('<div>').text(automation.title).html();
|
||||
var formName = $('<div>').text(automation.form_name).html();
|
||||
var automationId = parseInt(automation.id);
|
||||
|
||||
html += '<tr>';
|
||||
html += '<td><strong>' + title + '</strong></td>';
|
||||
html += '<td>' + formName + '</td>';
|
||||
html += '<td><span class="wpfmj-status-badge wpfmj-status-' + statusClass + '">' + statusText + '</span></td>';
|
||||
html += '<td>' + errorBadge + '</td>';
|
||||
html += '<td>' + new Date(automation.created).toLocaleDateString() + '</td>';
|
||||
html += '<td>';
|
||||
html += '<a href="admin.php?page=wpfmj-add-new&edit=' + automationId + '" class="button button-small">Edit</a> ';
|
||||
html += '<button class="button button-small wpfmj-toggle-btn" data-id="' + automationId + '" data-status="' + automation.status + '">' + (automation.status === 'publish' ? 'Pause' : 'Activate') + '</button> ';
|
||||
html += '<button class="button button-small button-link-delete wpfmj-delete-btn" data-id="' + automationId + '">Delete</button>';
|
||||
html += '</td>';
|
||||
html += '</tr>';
|
||||
});
|
||||
|
||||
html += '</tbody></table>';
|
||||
$('#wpfmj-dashboard-root').html(html);
|
||||
}
|
||||
|
||||
// Use event delegation to prevent memory leaks
|
||||
// Unbind previous handlers before binding new ones
|
||||
$('#wpfmj-dashboard-root').off('click', '.wpfmj-toggle-btn').on('click', '.wpfmj-toggle-btn', function() {
|
||||
var btn = $(this);
|
||||
var id = btn.data('id');
|
||||
toggleAutomation(id, btn);
|
||||
});
|
||||
|
||||
$('#wpfmj-dashboard-root').off('click', '.wpfmj-delete-btn').on('click', '.wpfmj-delete-btn', function() {
|
||||
var id = $(this).data('id');
|
||||
if (confirm('Are you sure you want to delete this automation? This cannot be undone.')) {
|
||||
deleteAutomation(id);
|
||||
}
|
||||
});
|
||||
|
||||
function toggleAutomation(id, btn) {
|
||||
btn.prop('disabled', true);
|
||||
$.ajax({
|
||||
url: wpfmjData.ajaxUrl,
|
||||
type: 'POST',
|
||||
data: {
|
||||
action: 'wpfmj_toggle_automation',
|
||||
nonce: wpfmjData.ajaxNonce,
|
||||
id: id
|
||||
},
|
||||
success: function(response) {
|
||||
if (response.success) {
|
||||
loadDashboard();
|
||||
} else {
|
||||
var errorMessage = $('<div>').text(response.data).html();
|
||||
alert('Error: ' + errorMessage);
|
||||
btn.prop('disabled', false);
|
||||
}
|
||||
},
|
||||
error: function() {
|
||||
alert('Failed to toggle automation');
|
||||
btn.prop('disabled', false);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function deleteAutomation(id) {
|
||||
$.ajax({
|
||||
url: wpfmjData.ajaxUrl,
|
||||
type: 'POST',
|
||||
data: {
|
||||
action: 'wpfmj_delete_automation',
|
||||
nonce: wpfmjData.ajaxNonce,
|
||||
id: id
|
||||
},
|
||||
success: function(response) {
|
||||
if (response.success) {
|
||||
loadDashboard();
|
||||
} else {
|
||||
var errorMessage = $('<div>').text(response.data).html();
|
||||
alert('Error: ' + errorMessage);
|
||||
}
|
||||
},
|
||||
error: function() {
|
||||
alert('Failed to delete automation');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
loadDashboard();
|
||||
});
|
||||
</script>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
|
||||
/**
|
||||
* Render wizard page.
|
||||
*/
|
||||
public function render_wizard() {
|
||||
// Verify user has proper capabilities
|
||||
if (!current_user_can('manage_options')) {
|
||||
wp_die(__('You do not have sufficient permissions to access this page.', 'wpforms-mailjet-automation'));
|
||||
}
|
||||
|
||||
$edit_id = isset($_GET['edit']) ? intval($_GET['edit']) : 0;
|
||||
|
||||
// If editing, verify the post exists and user can edit it
|
||||
if ($edit_id) {
|
||||
$post = get_post($edit_id);
|
||||
if (!$post || $post->post_type !== 'wpfmj_automation') {
|
||||
wp_die(__('Invalid automation ID.', 'wpforms-mailjet-automation'));
|
||||
}
|
||||
}
|
||||
|
||||
$page_title = $edit_id ? __('Edit Automation', 'wpforms-mailjet-automation') : __('Add New Automation', 'wpforms-mailjet-automation');
|
||||
?>
|
||||
<div class="wrap">
|
||||
<h1><?php echo esc_html($page_title); ?></h1>
|
||||
<div id="wpfmj-wizard-root"></div>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue