upskill-event-manager/wordpress-dev/bin/deploy-dashboard-fix-v2.sh
bengizmo 5d45ed594d docs: Update README with event creation testing status 2025-05-19
- Document enhanced event creation testing improvements
- Add Breeze cache clearing script and integration
- Detail form field mapping discoveries
- Note current validation issues with description field
- Include multiple test approaches implemented
- Update error handling and debugging capabilities
2025-05-19 06:55:34 -03:00

301 lines
No EOL
9.5 KiB
Bash
Executable file

#!/bin/bash
# Exit on error
set -e
# Source environment variables
source .env
echo "Deploying dashboard fix to staging..."
# Create backup and upload fix directly via SSH
echo "Creating fix on staging server..."
sshpass -p "$UPSKILL_STAGING_PASS" ssh -o StrictHostKeyChecking=no "$UPSKILL_STAGING_SSH_USER@$UPSKILL_STAGING_IP" "cd $UPSKILL_STAGING_PATH && cat > wp-content/plugins/hvac-community-events/includes/class-hvac-dashboard-data-fixed.php << 'EOF'
<?php
/**
* HVAC Community Events Dashboard Data Handler - Fixed Version
*
* Consistently queries by post_author for trainer's events
*
* @package HVAC_Community_Events
* @subpackage Includes
* @since 1.1.0
*/
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
/**
* Class HVAC_Dashboard_Data
*/
class HVAC_Dashboard_Data {
/**
* The ID of the trainer user.
*
* @var int
*/
private int \$user_id;
/**
* Constructor.
*
* @param int \$user_id The ID of the trainer user.
*/
public function __construct( int \$user_id ) {
\$this->user_id = \$user_id;
}
/**
* Get the total number of events created by the trainer.
*
* @return int
*/
public function get_total_events_count() : int {
\$args = array(
'post_type' => Tribe__Events__Main::POSTTYPE,
'author' => \$this->user_id,
'post_status' => array( 'publish', 'future', 'draft', 'pending', 'private' ),
'posts_per_page' => -1,
'fields' => 'ids',
);
\$query = new WP_Query( \$args );
return (int) \$query->found_posts;
}
/**
* Get the number of upcoming events for the trainer.
*
* @return int
*/
public function get_upcoming_events_count() : int {
\$today = current_time( 'mysql' );
\$args = array(
'post_type' => Tribe__Events__Main::POSTTYPE,
'author' => \$this->user_id, // Use author consistently
'post_status' => array( 'publish', 'future' ),
'posts_per_page' => -1,
'fields' => 'ids',
'meta_query' => array(
array(
'key' => '_EventStartDate',
'value' => \$today,
'compare' => '>=',
'type' => 'DATETIME',
),
),
'orderby' => 'meta_value',
'meta_key' => '_EventStartDate',
'order' => 'ASC',
);
\$query = new WP_Query( \$args );
return (int) \$query->found_posts;
}
/**
* Get the number of past events for the trainer.
*
* @return int
*/
public function get_past_events_count() : int {
\$today = current_time( 'mysql' );
\$args = array(
'post_type' => Tribe__Events__Main::POSTTYPE,
'author' => \$this->user_id, // Use author consistently
'post_status' => array( 'publish', 'private' ),
'posts_per_page' => -1,
'fields' => 'ids',
'meta_query' => array(
array(
'key' => '_EventEndDate',
'value' => \$today,
'compare' => '<',
'type' => 'DATETIME',
),
),
);
\$query = new WP_Query( \$args );
return (int) \$query->found_posts;
}
/**
* Get the total number of tickets sold across all the trainer's events.
*
* @return int
*/
public function get_total_tickets_sold() : int {
\$total_tickets = 0;
\$args = array(
'post_type' => Tribe__Events__Main::POSTTYPE,
'author' => \$this->user_id, // Use author consistently
'post_status' => array( 'publish', 'future', 'draft', 'pending', 'private' ),
'posts_per_page' => -1,
'fields' => 'ids',
);
\$event_ids = get_posts( \$args );
if ( ! empty( \$event_ids ) ) {
foreach ( \$event_ids as \$event_id ) {
\$sold = get_post_meta( \$event_id, '_tribe_tickets_sold', true );
if ( is_numeric( \$sold ) ) {
\$total_tickets += (int) \$sold;
}
}
}
return \$total_tickets;
}
/**
* Get the total revenue generated across all the trainer's events.
*
* @return float
*/
public function get_total_revenue() : float {
\$total_revenue = 0.0;
\$args = array(
'post_type' => Tribe__Events__Main::POSTTYPE,
'author' => \$this->user_id, // Use author consistently
'post_status' => array( 'publish', 'future', 'draft', 'pending', 'private' ),
'posts_per_page' => -1,
'fields' => 'ids',
);
\$event_ids = get_posts( \$args );
if ( ! empty( \$event_ids ) ) {
foreach ( \$event_ids as \$event_id ) {
\$revenue = get_post_meta( \$event_id, '_tribe_revenue_total', true );
if ( is_numeric( \$revenue ) ) {
\$total_revenue += (float) \$revenue;
}
}
}
return \$total_revenue;
}
/**
* Get the annual revenue target set by the trainer.
*
* @return float|null Returns the target as a float, or null if not set.
*/
public function get_annual_revenue_target() : ?float {
\$target = get_user_meta( \$this->user_id, 'annual_revenue_target', true );
return ! empty( \$target ) && is_numeric( \$target ) ? (float) \$target : null;
}
/**
* Get the data needed for the events table on the dashboard.
*
* @param string \$filter_status The status to filter events by.
* @return array An array of event data arrays.
*/
public function get_events_table_data( string \$filter_status = 'all' ) : array {
\$events_data = [];
\$valid_statuses = array( 'publish', 'future', 'draft', 'pending', 'private' );
\$post_status = ( 'all' === \$filter_status || ! in_array( \$filter_status, \$valid_statuses, true ) )
? \$valid_statuses
: array( \$filter_status );
\$args = array(
'post_type' => Tribe__Events__Main::POSTTYPE,
'author' => \$this->user_id, // Use author consistently
'post_status' => \$post_status,
'posts_per_page' => -1,
'orderby' => 'meta_value',
'meta_key' => '_EventStartDate',
'order' => 'DESC',
);
\$query = new WP_Query( \$args );
if ( \$query->have_posts() ) {
while ( \$query->have_posts() ) {
\$query->the_post();
\$event_id = get_the_ID();
// Get Capacity
\$total_capacity = 0;
if ( function_exists( 'tribe_get_tickets' ) ) {
\$tickets = tribe_get_tickets( \$event_id );
if ( \$tickets ) {
foreach ( \$tickets as \$ticket ) {
\$capacity = \$ticket->capacity();
if ( \$capacity === -1 ) {
\$total_capacity = -1;
break;
}
if ( is_numeric( \$capacity ) ) {
\$total_capacity += \$capacity;
}
}
}
}
\$sold = get_post_meta( \$event_id, '_tribe_tickets_sold', true );
\$revenue = get_post_meta( \$event_id, '_tribe_revenue_total', true );
\$events_data[] = array(
'id' => \$event_id,
'status' => get_post_status( \$event_id ),
'name' => get_the_title(),
'link' => get_permalink( \$event_id ),
'start_date_ts' => strtotime( get_post_meta( \$event_id, '_EventStartDate', true ) ),
'organizer_id' => (int) get_post_meta( \$event_id, '_EventOrganizerID', true ),
'capacity' => ( \$total_capacity === -1 ) ? 'Unlimited' : (int) \$total_capacity,
'sold' => is_numeric( \$sold ) ? (int) \$sold : 0,
'revenue' => is_numeric( \$revenue ) ? (float) \$revenue : 0.0,
);
}
wp_reset_postdata();
}
return \$events_data;
}
}
EOF"
# Backup original
echo "Backing up original file..."
sshpass -p "$UPSKILL_STAGING_PASS" ssh -o StrictHostKeyChecking=no "$UPSKILL_STAGING_SSH_USER@$UPSKILL_STAGING_IP" "cd $UPSKILL_STAGING_PATH && cp wp-content/plugins/hvac-community-events/includes/class-hvac-dashboard-data.php wp-content/plugins/hvac-community-events/includes/class-hvac-dashboard-data.php.bak"
# Replace with fixed version
echo "Replacing with fixed version..."
sshpass -p "$UPSKILL_STAGING_PASS" ssh -o StrictHostKeyChecking=no "$UPSKILL_STAGING_SSH_USER@$UPSKILL_STAGING_IP" "cd $UPSKILL_STAGING_PATH && cp wp-content/plugins/hvac-community-events/includes/class-hvac-dashboard-data-fixed.php wp-content/plugins/hvac-community-events/includes/class-hvac-dashboard-data.php"
# Clear cache
echo "Clearing cache..."
sshpass -p "$UPSKILL_STAGING_PASS" ssh -o StrictHostKeyChecking=no "$UPSKILL_STAGING_SSH_USER@$UPSKILL_STAGING_IP" "cd $UPSKILL_STAGING_PATH && wp cache flush"
# Test the fix
echo -e "\nTesting the fix..."
sshpass -p "$UPSKILL_STAGING_PASS" ssh -o StrictHostKeyChecking=no "$UPSKILL_STAGING_SSH_USER@$UPSKILL_STAGING_IP" "cd $UPSKILL_STAGING_PATH && cat > test-dashboard-fix.php << 'EOF'
<?php
require_once('wp-load.php');
\$user_id = get_user_by('login', 'test_trainer')->ID;
echo \"User ID: \$user_id\\n\";
\$dashboard_data = new HVAC_Dashboard_Data(\$user_id);
echo \"Total Events: \" . \$dashboard_data->get_total_events_count() . \"\\n\";
echo \"Upcoming Events: \" . \$dashboard_data->get_upcoming_events_count() . \"\\n\";
echo \"Past Events: \" . \$dashboard_data->get_past_events_count() . \"\\n\";
echo \"Total Tickets: \" . \$dashboard_data->get_total_tickets_sold() . \"\\n\";
echo \"Total Revenue: \" . \$dashboard_data->get_total_revenue() . \"\\n\";
// Check event table data
\$events = \$dashboard_data->get_events_table_data();
echo \"\\nEvents in table: \" . count(\$events) . \"\\n\";
foreach (\$events as \$event) {
echo \" - \" . \$event['name'] . \" (\" . \$event['status'] . \")\\n\";
}
EOF"
sshpass -p "$UPSKILL_STAGING_PASS" ssh -o StrictHostKeyChecking=no "$UPSKILL_STAGING_SSH_USER@$UPSKILL_STAGING_IP" "cd $UPSKILL_STAGING_PATH && php test-dashboard-fix.php"
# Clean up test file
sshpass -p "$UPSKILL_STAGING_PASS" ssh -o StrictHostKeyChecking=no "$UPSKILL_STAGING_SSH_USER@$UPSKILL_STAGING_IP" "cd $UPSKILL_STAGING_PATH && rm test-dashboard-fix.php"
echo -e "\nDashboard fix deployed. You should now see the correct stats at: https://wordpress-974670-5399585.cloudwaysapps.com/hvac-dashboard/"