<?php // Restrict who can access this script. /*$permitted_ips = array( '12.34.56.78' ); if ( false == in_array($_SERVER['REMOTE_ADDR'], $permitted_ips) ) { header( 'HTTP/1.0 403 Forbidden' ); die(); }*/ header('HTTP/1.1 200 OK'); define('WP_USE_THEMES', false); /** Loads the WordPress Environment */ require( dirname( __FILE__ ) . '/wp-blog-header.php' ); ?> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Ninja Forms Submissions</title> <style>table, th, td { border: 1px solid #ccc; border-collapse: collapse; } /* Based on blueprintcss.org */ table { margin-bottom: 1.4em; width: 100%; } th { font-weight: bold; } thead th { background: #c3d9ff; } th, td, caption { padding: 0.5em; } tbody tr:nth-child(even) td, tbody tr.even td { background-color: #f1f1f1; } tfoot { font-style: italic; } </style> </head> <body> <?php // Retrieve the submissions for the specified number of days. $end_date = '2019-11-04'; $num_days = 7; $start_date_time = strtotime( $end_date ) - ( $num_days * DAY_IN_SECONDS ); $start_date = date( 'Y-m-d', $start_date_time ); $forms = Ninja_Forms()->form()->get_forms(); foreach ( $forms as $form ) { $form_id = $form->get_id(); echo '<h2>', $form->get_setting( 'title' ), '</h2>'; // Get the form's fields and their internal name (key) and external name (label). $form_fields = Ninja_Forms()->form( $form_id )->get_fields(); $key_to_fieldname = array(); foreach ( $form_fields as $form_field ) { $key_to_fieldname[ $form_field->get_setting( 'key' ) ] = $form_field->get_setting( 'label' ); } // Remove unneeded fields as there won't be any data in them (or they aren't needed in this script). $unneeded_fields = array( 'submit', 'hr', ); foreach ( $unneeded_fields as $unneeded_field ) { unset( $key_to_fieldname[ $unneeded_field ] ); } // Prepare the query - all submissions for the specified form, oldest first. $args = array( 'posts_per_page' => -1, 'post_type' => 'nf_sub', 'order' => 'ASC', 'meta_query' => array( array( 'key' => '_form_id', 'value' => $form_id, ), ), 'date_query' => array( 'after' => $start_date, 'before' => $end_date, 'inclusive' => true, ), 'fields' => 'ids', // Just return IDs as get_sub() will get more info. ); $submissions = array(); $submissions = get_posts( $args ); if ( $submissions ) { echo '<table><thead><tr><th>Sequence</th><th>Submission Date</th><th>', implode( '</th><th>', array_values( $key_to_fieldname ) ), '</th></tr></thead><tbody>'; foreach ( $submissions as $submission_id ) { $submission = Ninja_Forms()->form()->get_sub( $submission_id ); echo '<tr><td>', $submission_id, '</td><td>', $submission->get_sub_date( 'd/m/Y H:i' ), '</td>'; foreach ( $form_fields as $field ) { // TODO: Consider creating an array of the field key, id and type outside // this loop to reduce the number of calls to the Ninja Forms API. $field_key = $field->get_setting( 'key' ); // Could exclude fields based on their type. //$field_type = $field->get_setting( 'type' ); if ( !array_key_exists( $field_key, $key_to_fieldname ) ) { continue; } $field_class = Ninja_Forms()->fields[ $field->get_setting( 'type' ) ]; echo '<td>', $submission->get_field_value( $field->get_id() ), '</td>'; } echo '</tr>'; } echo '</tbody></table>'; } else { echo '<p>No submissions in the specified date range.</p>'; } } ?> </body> </html>