upskill-event-manager/includes/class-hvac-settings.php
bengizmo f0edd05369 feat: Implement trainer approval workflow with status management
- Add trainer status system (pending, approved, active, inactive, disabled)
- Create access control system based on trainer status
- Refactor Master Dashboard with enhanced trainer table
  - Add status column and filtering
  - Implement search and pagination
  - Add bulk status update functionality
- Create status pages for pending and disabled trainers
- Implement approval workflow with email notifications
- Add email template management to settings page
- Include comprehensive test suite (unit, integration, E2E)

This allows Master Trainers to manage trainer accounts, approve new registrations,
and control access based on account status. Trainers must be approved before
accessing dashboard features.

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-28 12:38:34 -03:00

158 lines
No EOL
5.2 KiB
PHP

<?php
/**
* Handles plugin settings and options
*/
if (!defined('ABSPATH')) {
exit;
}
class HVAC_Settings {
public function __construct() {
add_action('admin_menu', array($this, 'add_admin_menu'));
add_action('admin_init', array($this, 'register_settings'));
add_action('admin_enqueue_scripts', array($this, 'enqueue_admin_scripts'));
}
public function add_admin_menu() {
// Add main menu page
add_menu_page(
__('HVAC Community Events', 'hvac-ce'),
__('HVAC Community Events', 'hvac-ce'),
'manage_options',
'hvac-community-events',
array($this, 'options_page'),
'dashicons-calendar-alt',
30
);
// Add settings submenu
add_submenu_page(
'hvac-community-events',
__('Settings', 'hvac-ce'),
__('Settings', 'hvac-ce'),
'manage_options',
'hvac-community-events',
array($this, 'options_page')
);
// Add dashboard submenu
add_submenu_page(
'hvac-community-events',
__('Dashboard', 'hvac-ce'),
__('Dashboard', 'hvac-ce'),
'manage_options',
'hvac-ce-dashboard',
array($this, 'dashboard_page')
);
// Add trainer login link submenu
$training_login_url = home_url('training-login');
add_submenu_page(
'hvac-community-events',
__('Trainer Login', 'hvac-ce'),
__('Trainer Login', 'hvac-ce'),
'manage_options',
$training_login_url,
null
);
}
public function register_settings() {
register_setting('hvac_ce_options', 'hvac_ce_options');
add_settings_section(
'hvac_ce_main',
__('HVAC Community Events Settings', 'hvac-ce'),
array($this, 'settings_section_callback'),
'hvac-ce'
);
add_settings_field(
'notification_emails',
__('Trainer Notification Emails', 'hvac-ce'),
array($this, 'notification_emails_callback'),
'hvac-ce',
'hvac_ce_main'
);
}
public function settings_section_callback() {
echo '<p>' . __('Configure settings for HVAC Community Events', 'hvac-ce') . '</p>';
}
public function notification_emails_callback() {
$options = get_option('hvac_ce_options');
echo '<input type="text" name="hvac_ce_options[notification_emails]" value="' .
esc_attr($options['notification_emails'] ?? '') . '" class="regular-text">';
echo '<p class="description">' .
__('Comma-separated list of emails to notify when new trainers register', 'hvac-ce') . '</p>';
}
public function options_page() {
$active_tab = isset( $_GET['tab'] ) ? sanitize_text_field( $_GET['tab'] ) : 'general';
$tabs = array(
'general' => __( 'General Settings', 'hvac-ce' ),
);
// Allow other classes to add tabs
$tabs = apply_filters( 'hvac_ce_settings_tabs', $tabs );
?>
<div class="wrap">
<h1><?php esc_html_e('HVAC Community Events Settings', 'hvac-ce'); ?></h1>
<h2 class="nav-tab-wrapper">
<?php foreach ( $tabs as $tab_key => $tab_label ): ?>
<a href="?page=hvac-community-events&tab=<?php echo esc_attr( $tab_key ); ?>"
class="nav-tab <?php echo $active_tab === $tab_key ? 'nav-tab-active' : ''; ?>">
<?php echo esc_html( $tab_label ); ?>
</a>
<?php endforeach; ?>
</h2>
<?php if ( $active_tab === 'general' ): ?>
<form method="post" action="options.php">
<?php
settings_fields('hvac_ce_options');
do_settings_sections('hvac-ce');
submit_button();
?>
</form>
<?php else: ?>
<?php do_action( 'hvac_ce_settings_content', $active_tab ); ?>
<?php endif; ?>
</div>
<?php
}
/**
* Dashboard page callback
*/
public function dashboard_page() {
// Load the admin dashboard class
if (!class_exists('HVAC_Admin_Dashboard')) {
require_once HVAC_CE_PLUGIN_DIR . 'includes/admin/class-admin-dashboard.php';
}
$dashboard = new HVAC_Admin_Dashboard();
$dashboard->render_page();
}
/**
* Enqueue admin scripts and styles
*/
public function enqueue_admin_scripts($hook) {
// Only load on HVAC admin pages
if (strpos($hook, 'hvac-community-events') !== false) {
// Add inline script to make trainer login link open in new tab
$script = "
jQuery(document).ready(function($) {
// Find the trainer login menu link and make it open in new tab
$('a[href*=\"training-login\"]').attr('target', '_blank');
});
";
wp_add_inline_script('jquery', $script);
}
}
}