'; echo '

' . __( 'AI Content Wizard - Statistics', 'ai-content-wizard' ) . '

'; // Форма фильтрации по периоду echo '
'; // Сохраняем параметр страницы, если он есть if ( isset( $_GET['page'] ) ) { echo ''; } echo ''; $selected = isset( $_GET['time_filter'] ) ? sanitize_text_field( $_GET['time_filter'] ) : 'all'; echo ''; // Поля для произвольного периода $custom_start = isset( $_GET['custom_start'] ) ? sanitize_text_field( $_GET['custom_start'] ) : ''; $custom_end = isset( $_GET['custom_end'] ) ? sanitize_text_field( $_GET['custom_end'] ) : ''; // Если выбран custom, не задаём inline-стиль (он будет задан через класс), иначе скрываем блок $custom_display = ($selected === 'custom') ? '' : 'display:none;'; echo '
'; echo '
'; echo ''; echo ''; echo ''; echo ''; echo '
'; echo '
'; echo ''; echo '
'; // JS для переключения отображения полей произвольного периода echo ""; // Определение временного интервала для фильтрации $date_condition_posts = ''; $date_condition_plan = ''; $start_date = ''; $end_date = ''; if ( $selected === 'week' ) { $start_date = date( 'Y-m-d', strtotime( '-7 days' ) ); $end_date = date( 'Y-m-d' ); } elseif ( $selected === 'month' ) { $start_date = date( 'Y-m-d', strtotime( '-1 month' ) ); $end_date = date( 'Y-m-d' ); } elseif ( $selected === 'year' ) { $start_date = date( 'Y-m-d', strtotime( '-1 year' ) ); $end_date = date( 'Y-m-d' ); } elseif ( $selected === 'custom' ) { if ( ! empty( $custom_start ) && ! empty( $custom_end ) ) { $start_date = $custom_start; $end_date = $custom_end; } } if ( $start_date && $end_date ) { // Для логов статей (поле generation_time) $date_condition_posts = $wpdb->prepare( "WHERE DATE(generation_time) BETWEEN %s AND %s", $start_date, $end_date ); // Для логов контент-планов (поле date) $date_condition_plan = $wpdb->prepare( "WHERE DATE(`date`) BETWEEN %s AND %s", $start_date, $end_date ); } $statistics = array(); // Имена таблиц логов $posts_logs_table = $wpdb->prefix . 'ai_content_wizard_posts_logs'; $content_plan_logs_table = $wpdb->prefix . 'ai_content_wizard_content_plan_logs'; // Получаем логи генерации статей с учётом фильтра $posts_logs_query = "SELECT * FROM $posts_logs_table "; if ( $date_condition_posts ) { $posts_logs_query .= $date_condition_posts; } $posts_logs = $wpdb->get_results( $posts_logs_query, ARRAY_A ); // Получаем логи контент-планов с учётом фильтра $content_plan_logs_query = "SELECT * FROM $content_plan_logs_table "; if ( $date_condition_plan ) { $content_plan_logs_query .= $date_condition_plan; } $content_plan_logs = $wpdb->get_results( $content_plan_logs_query, ARRAY_A ); // Обрабатываем логи генерации статей foreach ( $posts_logs as $log ) { $date = date( 'Y-m-d', strtotime( $log['generation_time'] ) ); $type = __( 'Article Generation', 'ai-content-wizard' ); if ( ! isset( $statistics[ $date ][ $type ] ) ) { $statistics[ $date ][ $type ] = array( 'count' => 0, 'total_cost' => 0 ); } $statistics[ $date ][ $type ]['count']++; $statistics[ $date ][ $type ]['total_cost'] += floatval( $log['total_cost'] ); } // Обрабатываем логи контент-планов foreach ( $content_plan_logs as $log ) { $date = date( 'Y-m-d', strtotime( $log['date'] ) ); $type = __( 'Content Plan', 'ai-content-wizard' ); if ( ! isset( $statistics[ $date ][ $type ] ) ) { $statistics[ $date ][ $type ] = array( 'count' => 0, 'total_cost' => 0 ); } $statistics[ $date ][ $type ]['count']++; $statistics[ $date ][ $type ]['total_cost'] += floatval( $log['total_cost'] ); } // Сортируем статистику по дате (от новых к старым) krsort( $statistics ); // Вывод статистики в виде таблицы echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; $grand_total_count = 0; $grand_total_cost = 0; foreach ( $statistics as $date => $types ) { $daily_total_count = 0; $daily_total_cost = 0; foreach ( $types as $type => $data ) { echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; $daily_total_count += $data['count']; $daily_total_cost += $data['total_cost']; } // Итог за день echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; $grand_total_count += $daily_total_count; $grand_total_cost += $daily_total_cost; } // Итог за выбранный период echo ''; echo ''; echo ''; echo ''; echo ''; echo '
' . __( 'Date', 'ai-content-wizard' ) . '' . __( 'Type', 'ai-content-wizard' ) . '' . __( 'Count', 'ai-content-wizard' ) . '' . __( 'Total Cost', 'ai-content-wizard' ) . '
' . esc_html( $date ) . '' . esc_html( $type ) . '' . intval( $data['count'] ) . '$' . number_format( $data['total_cost'], 2 ) . '
' . esc_html( $date ) . '' . __( 'Daily Total', 'ai-content-wizard' ) . '' . intval( $daily_total_count ) . '$' . number_format( $daily_total_cost, 2 ) . '
' . __( 'Grand Total', 'ai-content-wizard' ) . '' . intval( $grand_total_count ) . '$' . number_format( $grand_total_cost, 2 ) . '
'; echo ''; }