upskill-event-manager/includes/class-hvac-layout-manager.php
Ben c19b909296 refactor: remove all theme-specific code for WordPress compliance
BREAKING CHANGE: Removed Astra theme integration and all theme-specific code

- Removed class-hvac-astra-integration.php (584 lines of theme-specific code)
- Removed 500+ theme-specific CSS files (ast-*, astra-*, divi-*)
- Removed 15+ theme-specific JavaScript files
- Created theme-agnostic HVAC_Layout_Manager class
- Added generic hvac-layout.css with universal styling
- Plugin now works with ANY WordPress theme

This refactoring ensures the plugin complies with WordPress.org plugin
guidelines which require plugins to be theme-independent. The new layout
system uses standard WordPress hooks and filters that work universally.

Key changes:
- Body classes: hvac-plugin-page, hvac-no-sidebar, hvac-full-width
- Generic post meta: _sidebar_layout, page_layout (widely supported)
- Standard WordPress hooks: body_class, wp_enqueue_scripts, is_active_sidebar
- CSS uses generic selectors: .site-content, .content-area, #primary

Removed monitoring infrastructure files that were causing PHP segfaults:
- class-hvac-background-jobs.php
- class-hvac-health-monitor.php
- class-hvac-error-recovery.php
- class-hvac-security-monitor.php
- class-hvac-performance-monitor.php
- class-hvac-backup-manager.php
- class-hvac-cache-optimizer.php

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-20 18:38:52 -03:00

285 lines
No EOL
8.5 KiB
PHP

<?php
/**
* HVAC Layout Manager
*
* Theme-agnostic layout management for HVAC plugin pages
* Complies with WordPress plugin guidelines
*
* @package HVAC_Community_Events
* @since 2.0.0
*/
// Exit if accessed directly
if (!defined('ABSPATH')) {
exit;
}
/**
* HVAC Layout Manager Class
*/
class HVAC_Layout_Manager {
/**
* Instance
*
* @var HVAC_Layout_Manager
*/
private static $instance = null;
/**
* Get instance
*/
public static function instance() {
if (null === self::$instance) {
self::$instance = new self();
}
return self::$instance;
}
/**
* Constructor
*/
private function __construct() {
$this->init_hooks();
}
/**
* Initialize hooks
*/
private function init_hooks() {
// Use standard WordPress hooks that work with any theme
add_filter('body_class', [$this, 'add_body_classes'], 10);
add_action('wp_enqueue_scripts', [$this, 'enqueue_layout_styles'], 20);
add_action('wp_head', [$this, 'add_inline_styles'], 99);
// Standard WordPress sidebar management
add_filter('is_active_sidebar', [$this, 'maybe_disable_sidebar'], 10, 2);
// Content width for HVAC pages
add_action('template_redirect', [$this, 'set_content_width']);
// Use standard post meta for layout settings
add_action('wp', [$this, 'setup_page_layout']);
}
/**
* Add body classes for HVAC pages
*/
public function add_body_classes($classes) {
if ($this->is_hvac_page()) {
// Add generic classes that work with any theme
$classes[] = 'hvac-plugin-page';
$classes[] = 'hvac-no-sidebar';
$classes[] = 'hvac-full-width';
if ($this->is_find_trainer_page()) {
$classes[] = 'hvac-find-trainer-page';
$classes[] = 'hvac-boxed-layout';
}
}
return $classes;
}
/**
* Enqueue layout styles
*/
public function enqueue_layout_styles() {
if ($this->is_hvac_page()) {
// Enqueue theme-agnostic layout styles
wp_enqueue_style(
'hvac-layout',
HVAC_PLUGIN_URL . 'assets/css/hvac-layout.css',
[],
HVAC_VERSION
);
}
}
/**
* Add inline styles for dynamic layout adjustments
*/
public function add_inline_styles() {
if (!$this->is_hvac_page()) {
return;
}
$css = '';
if ($this->is_find_trainer_page()) {
// Boxed layout for Find a Trainer
$css .= '
/* HVAC Find a Trainer - Boxed Layout */
.hvac-find-trainer-page .site-content,
.hvac-find-trainer-page .content-area,
.hvac-find-trainer-page #primary,
.hvac-find-trainer-page .entry-content {
max-width: 1200px;
margin: 0 auto;
padding-left: 20px;
padding-right: 20px;
box-sizing: border-box;
}
/* Hide sidebar universally */
.hvac-find-trainer-page .widget-area,
.hvac-find-trainer-page .sidebar,
.hvac-find-trainer-page #secondary,
.hvac-find-trainer-page aside.widget-area {
display: none !important;
}
/* Full width content area */
.hvac-find-trainer-page #primary {
width: 100% !important;
float: none !important;
}
';
} else {
// Full-width layout for other HVAC pages
$css .= '
/* HVAC Pages - Full Width Layout */
.hvac-plugin-page .site-content,
.hvac-plugin-page .content-area {
max-width: 100%;
width: 100%;
padding-left: 40px;
padding-right: 40px;
}
.hvac-plugin-page .hvac-page-wrapper {
max-width: 1920px;
margin: 0 auto;
}
/* Hide sidebar universally */
.hvac-plugin-page .widget-area,
.hvac-plugin-page .sidebar,
.hvac-plugin-page #secondary,
.hvac-plugin-page aside.widget-area {
display: none !important;
}
/* Full width content area */
.hvac-plugin-page #primary,
.hvac-plugin-page .content-area {
width: 100% !important;
float: none !important;
margin: 0 !important;
}
';
}
if (!empty($css)) {
echo '<style type="text/css" id="hvac-layout-inline-css">' . $css . '</style>';
}
}
/**
* Maybe disable sidebar for HVAC pages
*/
public function maybe_disable_sidebar($is_active, $index) {
if ($this->is_hvac_page()) {
return false;
}
return $is_active;
}
/**
* Set content width for HVAC pages
*/
public function set_content_width() {
if ($this->is_hvac_page()) {
global $content_width;
if ($this->is_find_trainer_page()) {
$content_width = 1200;
} else {
$content_width = 1920;
}
}
}
/**
* Setup page layout using standard WordPress post meta
*/
public function setup_page_layout() {
if ($this->is_hvac_page()) {
global $post;
if ($post) {
// Use generic post meta that many themes support
update_post_meta($post->ID, '_sidebar_layout', 'no-sidebar');
update_post_meta($post->ID, 'sidebar_layout', 'no-sidebar');
update_post_meta($post->ID, '_disable_sidebar', '1');
// Common theme-agnostic meta keys
update_post_meta($post->ID, 'page_layout', 'full-width');
update_post_meta($post->ID, '_page_layout', 'full-width');
// Disable common features
update_post_meta($post->ID, '_disable_breadcrumbs', '1');
update_post_meta($post->ID, 'hide_breadcrumbs', '1');
}
}
}
/**
* Check if current page is an HVAC page
*/
private function is_hvac_page() {
// Check by template
if (is_page_template()) {
$template = get_page_template_slug();
if (strpos($template, 'page-trainer') !== false ||
strpos($template, 'page-master') !== false ||
strpos($template, 'page-certificate') !== false ||
strpos($template, 'page-generate') !== false) {
return true;
}
}
// Check by URL
$current_url = $_SERVER['REQUEST_URI'];
$hvac_paths = ['trainer/', 'master-trainer/', 'certificate', 'generate-certificates', 'find-a-trainer'];
foreach ($hvac_paths as $path) {
if (strpos($current_url, $path) !== false) {
return true;
}
}
// Check by page slug
if (is_page()) {
global $post;
if ($post) {
$slug = $post->post_name;
$hvac_slugs = ['trainer', 'dashboard', 'profile', 'certificate', 'venue', 'organizer', 'find-a-trainer'];
foreach ($hvac_slugs as $hvac_slug) {
if (strpos($slug, $hvac_slug) !== false) {
return true;
}
}
}
}
return false;
}
/**
* Check if current page is Find A Trainer page
*/
private function is_find_trainer_page() {
if (is_page()) {
global $post;
if ($post && $post->post_name === 'find-a-trainer') {
return true;
}
}
$current_url = $_SERVER['REQUEST_URI'];
return strpos($current_url, 'find-a-trainer') !== false;
}
}
// Initialize
HVAC_Layout_Manager::instance();