prepare( "WHERE DATE(date) BETWEEN %s AND %s", $start_date, $end_date ); $logs_date_condition_article = $wpdb->prepare( "WHERE DATE(generation_time) BETWEEN %s AND %s", $start_date, $end_date ); } else { $logs_date_condition_content = ''; $logs_date_condition_article = ''; } // Сохраним в глобальные переменные для использования в функциях вывода $GLOBALS['logs_date_condition_content'] = $logs_date_condition_content; $GLOBALS['logs_date_condition_article'] = $logs_date_condition_article; // Собираем GET-параметры фильтра для пагинации и табов $filter_params = "&time_filter=" . urlencode( $selected ); if ( $selected === 'custom' ) { $filter_params .= "&custom_start=" . urlencode( $custom_start ) . "&custom_end=" . urlencode( $custom_end ); } echo '
'; echo '

' . esc_html__( 'AI Content Wizard - Logs', 'ai-content-wizard' ) . '

'; // Форма фильтрации echo '
'; if ( isset( $_GET['page'] ) ) { echo ''; } echo ''; echo ''; // Поля для произвольного периода $custom_display = ( $selected === 'custom' ) ? '' : 'display:none;'; echo '
'; echo '
'; echo ''; echo ''; echo ''; echo ''; echo '
'; echo '
'; echo ''; echo '
'; // JS для переключения полей произвольного периода echo ""; // Получаем общее количество записей для каждого таба $content_total = $wpdb->get_var( "SELECT COUNT(*) FROM " . $wpdb->prefix . "ai_content_wizard_content_plan_logs " . $GLOBALS['logs_date_condition_content'] ); $article_total = $wpdb->get_var( "SELECT COUNT(*) FROM " . $wpdb->prefix . "ai_content_wizard_posts_logs " . $GLOBALS['logs_date_condition_article'] ); // Заголовок табов с кнопками и блоком количества записей echo '
'; echo '
'; echo ''; echo ''; echo '
'; echo '
'; /* translators: %d — общее количество записей. */ echo sprintf( esc_html__( 'Total Records: %d', 'ai-content-wizard' ), intval( $content_total ) ); echo '
'; echo '
'; // Содержимое табов (без отдельного вывода количества записей) echo '
'; echo '
'; echo '

' . esc_html__( 'Content Plan Logs', 'ai-content-wizard' ) . '

'; ai_content_wizard_display_logs( $filter_params ); echo '
'; echo '
'; echo ''; ?> '; } function ai_content_wizard_display_logs( $filter_params = '' ) { global $wpdb; $table_name = $wpdb->prefix . 'ai_content_wizard_content_plan_logs'; // Пагинация $per_page = 20; $current_page = isset( $_GET['content_plan_log_page'] ) ? max( 1, intval( $_GET['content_plan_log_page'] ) ) : 1; $offset = ( $current_page - 1 ) * $per_page; // Общее количество записей $total_records = $wpdb->get_var( "SELECT COUNT(*) FROM $table_name " . $GLOBALS['logs_date_condition_content'] ); // Получаем записи с фильтром и пагинацией $query = "SELECT * FROM $table_name " . $GLOBALS['logs_date_condition_content'] . " ORDER BY date DESC LIMIT %d OFFSET %d"; $logs = $wpdb->get_results( $wpdb->prepare( $query, $per_page, $offset ), ARRAY_A ); if ( ! $logs ) { echo "

" . esc_html__( 'No Content Plan Logs available.', 'ai-content-wizard' ) . "

"; return; } echo ""; echo ""; echo ""; foreach ( $logs as $log ) { echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; } echo "
" . esc_html__( 'Date', 'ai-content-wizard' ) . " " . esc_html__( 'Type', 'ai-content-wizard' ) . " " . esc_html__( 'Text Model', 'ai-content-wizard' ) . " " . esc_html__( 'Total Articles', 'ai-content-wizard' ) . " " . esc_html__( 'Interval', 'ai-content-wizard' ) . " " . esc_html__( 'Period', 'ai-content-wizard' ) . " " . esc_html__( 'Language', 'ai-content-wizard' ) . " " . esc_html__( 'Categories', 'ai-content-wizard' ) . " " . esc_html__( 'Total Cost', 'ai-content-wizard' ) . "
" . esc_html( $log['date'] ) . "" . esc_html( $log['type'] ) . "" . esc_html( $log['text_model'] ) . "" . esc_html( $log['total_articles'] ) . "" . esc_html( $log['interval_days'] ) . "" . esc_html( $log['period_days'] ) . "" . esc_html( $log['language'] ) . "" . esc_html( $log['categories'] ) . "$" . number_format( $log['total_cost'], 2 ) . "
"; // Пагинация $total_pages = ceil( $total_records / $per_page ); if ( $total_pages > 1 ) { echo ''; } } function ai_content_wizard_display_article_logs( $filter_params = '' ) { global $wpdb; $table_name = $wpdb->prefix . 'ai_content_wizard_posts_logs'; // Пагинация $per_page = 20; $current_page = isset( $_GET['log_page'] ) ? max( 1, intval( $_GET['log_page'] ) ) : 1; $offset = ( $current_page - 1 ) * $per_page; // Общее количество записей $total_records = $wpdb->get_var( "SELECT COUNT(*) FROM $table_name " . $GLOBALS['logs_date_condition_article'] ); // Получаем записи с фильтром и пагинацией $query = "SELECT * FROM $table_name " . $GLOBALS['logs_date_condition_article'] . " ORDER BY generation_time DESC LIMIT %d OFFSET %d"; $logs = $wpdb->get_results( $wpdb->prepare( $query, $per_page, $offset ), ARRAY_A ); if ( ! $logs ) { echo "

" . esc_html__( 'No Post Generation Logs available.', 'ai-content-wizard' ) . "

"; return; } echo ""; echo ""; echo ""; foreach ( $logs as $log ) { echo ""; echo ""; // Post ID с ссылкой на редактирование $edit_post_url = admin_url( 'post.php?post=' . intval( $log['post_id'] ) . '&action=edit' ); echo ""; echo ""; echo ""; echo ""; // Title с ссылкой на пост $post_url = get_permalink( $log['post_id'] ); echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; } echo "
" . esc_html__( 'Generation Time', 'ai-content-wizard' ) . " " . esc_html__( 'Post ID', 'ai-content-wizard' ) . " " . esc_html__( 'Type', 'ai-content-wizard' ) . " " . esc_html__( 'Category', 'ai-content-wizard' ) . " " . esc_html__( 'Publish Time', 'ai-content-wizard' ) . " " . esc_html__( 'Title', 'ai-content-wizard' ) . " " . esc_html__( 'Keyword', 'ai-content-wizard' ) . " " . esc_html__( 'Language', 'ai-content-wizard' ) . " " . esc_html__( 'Text Model', 'ai-content-wizard' ) . " " . esc_html__( 'Image Model', 'ai-content-wizard' ) . " " . esc_html__( 'Image Cost', 'ai-content-wizard' ) . " " . esc_html__( 'Text Cost', 'ai-content-wizard' ) . " " . esc_html__( 'Total Cost', 'ai-content-wizard' ) . "
" . esc_html( $log['generation_time'] ) . "" . intval( $log['post_id'] ) . "" . esc_html( $log['type'] ) . "" . esc_html( $log['category'] ) . "" . esc_html( $log['publish_time'] ) . "" . esc_html( $log['title'] ) . "" . esc_html( $log['keyword'] ) . "" . esc_html( $log['language'] ) . "" . esc_html( $log['text_model'] ) . "" . esc_html( $log['image_model'] ) . "$" . number_format( $log['image_cost'], 3 ) . "$" . number_format( $log['text_cost'], 3 ) . "$" . number_format( $log['total_cost'], 3 ) . "
"; // Пагинация $total_pages = ceil( $total_records / $per_page ); if ( $total_pages > 1 ) { echo ''; } }