upskill-event-manager/includes/certificates/class-certificate-installer.php
bengizmo 37f4180e1c feat: Add massive missing plugin infrastructure to repository
🚨 CRITICAL: Fixed deployment blockers by adding missing core directories:

**Community System (CRITICAL)**
- includes/community/ - Login_Handler and all community classes
- templates/community/ - Community login forms

**Certificate System (CRITICAL)**
- includes/certificates/ - 8+ certificate classes and handlers
- templates/certificates/ - Certificate reports and generation templates

**Core Individual Classes (CRITICAL)**
- includes/class-hvac-event-summary.php
- includes/class-hvac-trainer-profile-manager.php
- includes/class-hvac-master-dashboard-data.php
- Plus 40+ other individual HVAC classes

**Major Feature Systems (HIGH)**
- includes/database/ - Training leads database tables
- includes/find-trainer/ - Find trainer directory and MapGeo integration
- includes/google-sheets/ - Google Sheets integration system
- includes/zoho/ - Complete Zoho CRM integration
- includes/communication/ - Communication templates system

**Template Infrastructure**
- templates/attendee/, templates/email-attendees/
- templates/event-summary/, templates/status/
- templates/template-parts/ - Shared template components

**Impact:**
- 70+ files added covering 10+ missing directories
- Resolves ALL deployment blockers and feature breakdowns
- Plugin activation should now work correctly
- Multi-machine deployment fully supported

🔧 Generated with Claude Code

Co-Authored-By: Ben Reed <ben@tealmaker.com>
2025-08-11 13:30:11 -03:00

195 lines
No EOL
5.7 KiB
PHP

<?php
/**
* Certificate Installer Class
*
* Handles the creation and updating of certificate-related database tables.
*
* @package HVAC_Community_Events
* @subpackage Certificates
*/
// Exit if accessed directly
if (!defined('ABSPATH')) {
exit;
}
/**
* Certificate Installer class.
*
* Creates and updates database tables for certificate functionality.
*
* @since 1.0.0
*/
class HVAC_Certificate_Installer {
/**
* The single instance of the class.
*
* @var HVAC_Certificate_Installer
*/
protected static $_instance = null;
/**
* Main HVAC_Certificate_Installer Instance.
*
* Ensures only one instance of HVAC_Certificate_Installer is loaded or can be loaded.
*
* @return HVAC_Certificate_Installer - Main instance.
*/
public static function instance() {
if (is_null(self::$_instance)) {
self::$_instance = new self();
}
return self::$_instance;
}
/**
* Current database version.
*
* @var string
*/
private $db_version = '1.0.0';
/**
* Create the tables needed for certificates.
*
* @return void
*/
public function create_tables() {
global $wpdb;
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
$charset_collate = $wpdb->get_charset_collate();
$table_name = $wpdb->prefix . 'hvac_certificates';
// Create the certificates table
$sql = "CREATE TABLE $table_name (
certificate_id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
event_id BIGINT(20) UNSIGNED NOT NULL,
attendee_id BIGINT(20) UNSIGNED NOT NULL,
user_id BIGINT(20) UNSIGNED DEFAULT NULL,
certificate_number VARCHAR(50) NOT NULL,
file_path VARCHAR(255) NOT NULL,
png_path VARCHAR(255) DEFAULT NULL,
date_generated DATETIME NOT NULL,
generated_by BIGINT(20) UNSIGNED NOT NULL,
revoked TINYINT(1) NOT NULL DEFAULT 0,
revoked_date DATETIME DEFAULT NULL,
revoked_by BIGINT(20) UNSIGNED DEFAULT NULL,
revoked_reason TEXT DEFAULT NULL,
email_sent TINYINT(1) NOT NULL DEFAULT 0,
email_sent_date DATETIME DEFAULT NULL,
PRIMARY KEY (certificate_id),
UNIQUE KEY event_attendee (event_id, attendee_id),
KEY event_id (event_id),
KEY attendee_id (attendee_id),
KEY user_id (user_id),
KEY certificate_number (certificate_number),
KEY revoked (revoked)
) $charset_collate;";
dbDelta($sql);
// Set the version option
update_option('hvac_certificates_db_version', $this->db_version);
// Create certificate options
if (false === get_option('hvac_certificate_counter')) {
add_option('hvac_certificate_counter', 0);
}
if (false === get_option('hvac_certificate_prefix')) {
add_option('hvac_certificate_prefix', 'HVAC-');
}
if (false === get_option('hvac_certificate_storage_path')) {
// Default path is within wp-content/uploads/hvac-certificates
add_option('hvac_certificate_storage_path', 'hvac-certificates');
}
// Create the certificate storage directory
$this->create_certificates_directory();
}
/**
* Create certificates directory if it doesn't exist.
*
* @return bool True if directory exists or was created, false otherwise.
*/
public function create_certificates_directory() {
$upload_dir = wp_upload_dir();
$cert_dir = $upload_dir['basedir'] . '/' . get_option('hvac_certificate_storage_path', 'hvac-certificates');
// Create directory if it doesn't exist
if (!file_exists($cert_dir)) {
wp_mkdir_p($cert_dir);
}
// Create .htaccess file to protect directory
if (file_exists($cert_dir) && !file_exists($cert_dir . '/.htaccess')) {
$htaccess_content = "# Disable directory browsing
Options -Indexes
# Deny access to php files
<FilesMatch \"\.(php|php5|phtml|php7)$\">
Order Allow,Deny
Deny from all
</FilesMatch>
# Allow PDF downloads only via WordPress
<FilesMatch \"\.(pdf)$\">
Order Allow,Deny
Deny from all
</FilesMatch>
# Restrict direct access
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^" . get_site_url() . " [NC]
RewriteRule \\.(pdf)$ - [NC,F,L]
</IfModule>";
file_put_contents($cert_dir . '/.htaccess', $htaccess_content);
}
return file_exists($cert_dir);
}
/**
* Check if the certificate tables exist and are up to date.
*
* @return bool True if tables are up to date, false otherwise.
*/
public function check_tables() {
global $wpdb;
$installed_version = get_option('hvac_certificates_db_version');
$table_name = $wpdb->prefix . 'hvac_certificates';
// Check if table exists
$table_exists = $wpdb->get_var("SHOW TABLES LIKE '$table_name'") === $table_name;
// If table doesn't exist or version is different, create/update tables
if (!$table_exists || $installed_version !== $this->db_version) {
$this->create_tables();
return false;
}
return true;
}
/**
* Upgrade routine for database tables.
*
* @return void
*/
public function maybe_upgrade() {
$installed_version = get_option('hvac_certificates_db_version');
// If installed version is different from current version, run upgrade
if ($installed_version !== $this->db_version) {
$this->create_tables();
}
}
}