Files
roi-theme/wp-content/plugins/wp-marketing-automations/includes/api/autonami/class-bwfan-api-get-automation-stats.php
root a22573bf0b Commit inicial - WordPress Análisis de Precios Unitarios
- WordPress core y plugins
- Tema Twenty Twenty-Four configurado
- Plugin allow-unfiltered-html.php simplificado
- .gitignore configurado para excluir wp-config.php y uploads

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-03 21:04:30 -06:00

153 lines
6.6 KiB
PHP
Executable File

<?php
class BWFAN_API_Get_Automation_stats extends BWFAN_API_Base {
public static $ins;
public static function get_instance() {
if ( null === self::$ins ) {
self::$ins = new self();
}
return self::$ins;
}
public $total_count = 0;
public $count_data = 0;
public function __construct() {
parent::__construct();
$this->method = WP_REST_Server::READABLE;
$this->route = '/automations-stats';
}
public function process_api_call() {
$automation_ids = isset( $this->args['automation_ids'] ) ? $this->args['automation_ids'] : [];
$version = $this->get_sanitized_arg( 'version', 'text_field' );
$ids = implode( ',', array_filter( $automation_ids ) );
if ( 2 === absint( $version ) ) {
$data = [];
$cached_key = 'bwfan_automation_v2_stats';
$force = filter_input( INPUT_GET, 'force' );
$exp = BWFAN_Common::get_admin_analytics_cache_lifespan();
/** Get active, paused, completed and failed count for v2 automations */
if ( 'false' === $force ) {
$stats = get_transient( $cached_key );
if ( ! empty( $stats ) ) {
$automation_ids = array_filter( $automation_ids, function ( $id ) use ( $stats ) {
return ! array_key_exists( $id, $stats );
} );
if ( count( $automation_ids ) > 0 ) {
sort( $automation_ids );
}
$data = $stats;
}
}
if ( is_array( $automation_ids ) && count( $automation_ids ) > 0 ) {
$active_automation = BWFAN_Model_Automation_Contact::get_active_count( $automation_ids, 'active' );
$complete_automation = BWFAN_Model_Automation_Complete_Contact::get_automation_complete_contact_count( $ids );
$failed_automation = BWFAN_Model_Automation_Contact::get_active_count( $automation_ids, BWFAN_Automation_Controller::$STATUS_FAILED );
$paused_automation = BWFAN_Model_Automation_Contact::get_active_count( $automation_ids, BWFAN_Automation_Controller::$STATUS_PAUSED );
$active_aids = empty( $active_automation ) ? [] : array_column( $active_automation, 'aid' );
$complete_aids = empty( $complete_automation ) ? [] : array_column( $complete_automation, 'aid' );
$failed_aids = empty( $failed_automation ) ? [] : array_column( $failed_automation, 'aid' );
$paused_aids = empty( $paused_automation ) ? [] : array_column( $paused_automation, 'aid' );
foreach ( $automation_ids as $aid ) {
$active_index = array_search( $aid, $active_aids );
$complete_index = array_search( $aid, $complete_aids );
$failed_index = array_search( $aid, $failed_aids );
$paused_index = array_search( $aid, $paused_aids );
$data[ $aid ] = [
'active' => ( false !== $active_index && isset( $active_automation[ $active_index ]['count'] ) ) ? $active_automation[ $active_index ]['count'] : 0,
'complete' => ( false !== $complete_index && isset( $complete_automation[ $complete_index ]['count'] ) ) ? $complete_automation[ $complete_index ]['count'] : 0,
'failed' => ( false !== $failed_index && isset( $failed_automation[ $failed_index ]['count'] ) ) ? $failed_automation[ $failed_index ]['count'] : 0,
'paused' => ( false !== $paused_index && isset( $paused_automation[ $paused_index ]['count'] ) ) ? $paused_automation[ $paused_index ]['count'] : 0,
];
}
BWFAN_Common::validate_scheduled_recurring_actions();
set_transient( $cached_key, $data, $exp );
}
return $this->success_response( $data, __( 'Automations found', 'wp-marketing-automations' ) );
}
/** For v1 automations */
$data = $this->get_v1_automations_count( $automation_ids );
return $this->success_response( $data, __( 'Automations found', 'wp-marketing-automations' ) );
}
/**
* Get all scheduled and paused task count
*
* @param $automation_ids
*
* @return array
*/
public function get_v1_automations_count( $automation_ids ) {
global $wpdb;
$data = [];
$cached_key = 'bwfan_automation_v1_stats';
$force = filter_input( INPUT_GET, 'force' );
$exp = BWFAN_Common::get_admin_analytics_cache_lifespan();
if ( 'false' === $force ) {
$stats = get_transient( $cached_key );
if ( ! empty( $stats ) ) {
$automation_ids = array_filter( $automation_ids, function ( $id ) use ( $stats ) {
return ! array_key_exists( $id, $stats );
} );
if ( count( $automation_ids ) > 0 ) {
sort( $automation_ids );
}
$data = $stats;
}
}
if ( is_array( $automation_ids ) && count( $automation_ids ) > 0 ) {
$ids = implode( ',', array_filter( $automation_ids ) );
$tasks_table = "{$wpdb->prefix}bwfan_tasks";
$tasks_query = "SELECT `automation_id`, count(`ID`) AS `total_scheduled`, `status` FROM $tasks_table WHERE `automation_id` IN ($ids) GROUP BY `automation_id`, `status`";
$tasks = $wpdb->get_results( $tasks_query, ARRAY_A ); //phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$total_tasks = array();
foreach ( $tasks as $automation_tasks ) {
$status = absint( $automation_tasks['status'] ) === 1 ? 'paused' : 'scheduled';
if ( absint( $automation_tasks['automation_id'] ) ) {
$total_tasks[ $status ][ absint( $automation_tasks['automation_id'] ) ] = $automation_tasks['total_scheduled'];
}
}
/** Get completed and failed task count */
$logs_table = "{$wpdb->prefix}bwfan_logs";
$logs_query = "SELECT `automation_id`, count(`ID`) AS `total_logs`, `status` FROM $logs_table WHERE `automation_id` IN ($ids) AND `status` IN (0, 1) GROUP BY `automation_id`, `status`";
$logs = $wpdb->get_results( $logs_query, ARRAY_A ); //phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$total_logs = array();
foreach ( $logs as $automation_logs ) {
$status = absint( $automation_logs['status'] ) === 1 ? 'completed' : 'failed';
if ( absint( $automation_logs['automation_id'] ) ) {
$total_logs[ $status ][ absint( $automation_logs['automation_id'] ) ] = $automation_logs;
}
}
foreach ( $automation_ids as $id ) {
$data[ $id ]['scheduled'] = isset( $total_tasks['scheduled'][ $id ] ) ? $total_tasks['scheduled'][ $id ] : 0;
$data[ $id ]['paused'] = isset( $total_tasks['paused'][ $id ] ) ? $total_tasks['paused'][ $id ] : 0;
$data[ $id ]['completed'] = isset( $total_logs['completed'][ $id ]['total_logs'] ) ? $total_logs['completed'][ $id ]['total_logs'] : 0;
$data[ $id ]['failed'] = isset( $total_logs['failed'][ $id ]['total_logs'] ) ? $total_logs['failed'][ $id ]['total_logs'] : 0;
}
set_transient( $cached_key, $data, $exp );
}
return $data;
}
}
BWFAN_API_Loader::register( 'BWFAN_API_Get_Automation_stats' );