guard() ) { wp_send_json_error( array( 'message' => __( 'Not available.', 'ai-eshop-optimizer' ) ), 403 ); } $res = AIEO_Form_Insights::respondents( isset( $_POST['form_id'] ) ? (int) $_POST['form_id'] : 0, isset( $_POST['field_id'] ) ? sanitize_text_field( wp_unslash( $_POST['field_id'] ) ) : '', isset( $_POST['value'] ) ? sanitize_text_field( wp_unslash( $_POST['value'] ) ) : '', 50, isset( $_POST['offset'] ) ? max( 0, (int) $_POST['offset'] ) : 0 ); if ( is_wp_error( $res ) ) { wp_send_json_error( array( 'message' => $res->get_error_message() ) ); } unset( $res['emails'] ); wp_send_json_success( $res ); } public function export_csv() { if ( ! $this->guard() ) { wp_die( esc_html__( 'Not available.', 'ai-eshop-optimizer' ) ); } check_admin_referer( 'aieo_form_respondents_csv' ); $form_id = isset( $_GET['form_id'] ) ? (int) $_GET['form_id'] : 0; $field_id = isset( $_GET['field_id'] ) ? sanitize_text_field( wp_unslash( $_GET['field_id'] ) ) : ''; $value = isset( $_GET['value'] ) ? sanitize_text_field( wp_unslash( $_GET['value'] ) ) : ''; $res = AIEO_Form_Insights::respondents( $form_id, $field_id, $value, 5000, 0 ); if ( is_wp_error( $res ) ) { wp_die( esc_html( $res->get_error_message() ) ); } nocache_headers(); header( 'Content-Type: text/csv; charset=utf-8' ); header( 'Content-Disposition: attachment; filename="' . sanitize_file_name( 'respondents-' . $form_id . '-' . $value ) . '.csv"' ); $out = fopen( 'php://output', 'w' ); fwrite( $out, chr( 0xEF ) . chr( 0xBB ) . chr( 0xBF ) ); fputcsv( $out, array( 'entry_id', 'date', 'name', 'email' ) ); foreach ( (array) $res['rows'] as $r ) { fputcsv( $out, array( $r['entry_id'], $r['date'], $r['name'], $r['email'] ) ); } fclose( $out ); exit; } public function enqueue_admin_assets() { $css = 'assets/css/aieo-form-insights-admin.css'; wp_enqueue_style( 'aieo-form-insights-admin', plugins_url( $css, AIEO_FILE ), array(), file_exists( AIEO_DIR . $css ) ? (string) filemtime( AIEO_DIR . $css ) : '1' ); } public function render_subtab() { $available = class_exists( 'AIEO_Form_Insights' ) && AIEO_Form_Insights::available(); $forms = $available ? AIEO_Form_Insights::forms() : array(); $form_id = 0; $goals = class_exists( 'AIEO_DMM' ) ? AIEO_DMM::instance()->get_module( 'conversion_goals' ) : null; if ( $available && $goals && method_exists( $goals, 'preferred_insight_form_public' ) ) { $form_id = (int) $goals->preferred_insight_form_public( $forms ); } elseif ( $available && ! empty( $forms ) ) { $first = reset( $forms ); $form_id = isset( $first['id'] ) ? (int) $first['id'] : 0; } $report = null; $error = ''; if ( $form_id > 0 ) { $r = AIEO_Form_Insights::distributions( $form_id ); if ( is_wp_error( $r ) ) { $error = $r->get_error_message(); } else { $report = $r; } } $url = add_query_arg( array( 'page' => AIEO_DMM::MENU_SLUG, 'dmm_tab' => 'conversion_goals' ), admin_url( 'admin.php' ) ); $pointer = wp_kses_post( sprintf( __( 'Choosing which forms count as a conversion is a setting — it lives under %1$sSet Up → Conversion goals%2$s.', 'ai-eshop-optimizer' ), '', '' ) ); $this->render_template( 'form-insights.php', array( 'insight_available' => $available, 'insight_forms' => $forms, 'insight_form_id' => $form_id, 'insight_report' => $report, 'insight_error' => $error, 'nonce' => wp_create_nonce( AIEO_DMM::NONCE_ACTION ), 'ajax' => admin_url( 'admin-ajax.php' ), 'pointer' => $pointer, ) ); } }