| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519 |
- <?php if ( ! defined( 'ABSPATH' ) ) exit;
- /**
- * Class NF_Admin_Menus_Submissions
- */
- final class NF_Admin_Menus_Submissions extends NF_Abstracts_Submenu
- {
- /**
- * @var string
- */
- public $parent_slug = 'ninja-forms';
- /**
- * @var string
- */
- public $page_title = 'Submissions';
- /**
- * @var string
- */
- public $menu_slug = 'edit.php?post_type=nf_sub';
- /**
- * @var null
- */
- public $function = NULL;
- /**
- * Constructor
- */
- public function __construct()
- {
- parent::__construct();
- add_filter( 'manage_nf_sub_posts_columns', array( $this, 'change_columns' ) );
- add_action( 'manage_posts_custom_column', array( $this, 'custom_columns' ), 10, 2 );
- add_filter('months_dropdown_results', array( $this, 'remove_filter_show_all_dates' ), 9999 );
- add_action( 'restrict_manage_posts', array( $this, 'add_filters' ) );
- add_filter( 'parse_query', array( $this, 'table_filter' ) );
- add_filter( 'posts_clauses', array( $this, 'search' ), 20, 1 );
- add_filter( 'bulk_actions-edit-nf_sub', array( $this, 'remove_bulk_edit' ) );
- add_action( 'admin_footer-edit.php', array( $this, 'bulk_admin_footer' ) );
- add_action( 'load-edit.php', array( $this, 'export_listen' ) );
- add_action('admin_head', array( $this, 'hide_page_title_action' ) );
- add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
- // This will only run on our post type.
- add_action( 'views_edit-nf_sub', array( $this, 'change_views' ) );
- }
- /**
- * Change Views
- * WordPress hook that modifies the links on our submissions CPT to allow
- * users to switch between completed and trashed submissions.
- * @since 3.2.17
- *
- * @param $views The views that are associated with this CPT.
- * $views[ 'view' ]
- * @return array Returns modified views to allow our users access to the trash.
- */
- public function change_views( $views )
- {
- // Remove our unused views.
- unset( $views[ 'mine' ] );
- unset( $views[ 'publish' ] );
- // If the Form ID is not empty...
- if( ! empty( $_GET[ 'form_id' ] ) ) {
- // ...populate the rest of the query string.
- $form_id = '&form_id=' . $_GET[ 'form_id' ] . '&nf_form_filter&paged=1';
- } else {
- // ...otherwise send in an empty string.
- $form_id = '';
- }
- // Build our new views.
- $views[ 'all' ] = '<a href="' . admin_url( 'edit.php?post_status=all&post_type=nf_sub' ) . $form_id . '">'
- . __( 'Completed', 'ninja-forms' ) . '</a>';
- $views[ 'trash' ] = '<a href="' . admin_url( 'edit.php?post_status=trash&post_type=nf_sub' ) . $form_id . '">'
- . __( 'Trashed', 'ninja-forms' ) . '</a>';
- // Checks to make sure we have a post status.
- if( ! empty( $_GET[ 'post_status' ] ) ) {
- // Depending on the domain set the value to plain text.
- if ( 'all' == $_GET[ 'post_status' ] ) {
- $views[ 'all' ] = __( 'Completed', 'ninja-forms' );
- } else if ( 'trash' == $_GET[ 'post_status' ] ) {
- $views[ 'trash' ] = __( 'Trashed', 'ninja-forms' );
- }
- }
- return $views;
- }
- public function get_page_title()
- {
- return __( 'Submissions', 'ninja-forms' );
- }
- /**
- * Display
- */
- public function display()
- {
- // This section intentionally left blank.
- }
- /**
- * enqueue scripts here
- */
- public function enqueue_scripts() {
- // let's check and make sure we're on the submissions page.
- $test = strpos( $_SERVER[ 'REQUEST_URI' ], '/wp-admin/edit.php' );
- if( isset( $_GET[ 'post_type' ] ) && 'nf_sub' == $_GET[ 'post_type' ]
- && -1 < strpos( $_SERVER[ 'REQUEST_URI' ], '/wp-admin/edit.php' )
- ) {
- wp_enqueue_style( 'nf-admin-settings', Ninja_Forms::$url . 'assets/css/admin-settings.css' );
- wp_register_script( 'ninja_forms_admin_submissions',
- Ninja_Forms::$url . 'assets/js/admin-submissions.js', array( 'jquery' ), false, true );
- wp_enqueue_script( 'ninja_forms_admin_submissions' );
- }
- }
- /**
- * Change Columns
- *
- * @return array
- */
- public function change_columns()
- {
- $form_id = ( isset( $_GET['form_id'] ) ) ? $_GET['form_id'] : FALSE;
- if( ! $form_id ) return array();
- static $cols;
- if( $cols ) return $cols;
- $cols = array(
- 'cb' => '<input type="checkbox" />',
- 'seq_num' => __( '#', 'ninja-forms' ),
- );
- $fields = Ninja_Forms()->form( $form_id )->get_fields();
- $hidden_field_types = apply_filters( 'ninja_forms_sub_hidden_field_types', array() );
- foreach( $fields as $field ){
-
- if ( is_null( $field ) ) continue;
- if( in_array( $field->get_setting( 'type' ), $hidden_field_types ) ) continue;
- if ( $field->get_setting( 'admin_label' ) ) {
- $cols[ 'field_' . $field->get_id() ] = $field->get_setting( 'admin_label' );
- } else {
- $cols[ 'field_' . $field->get_id() ] = $field->get_setting( 'label' );
- }
- }
- $cols[ 'sub_date' ] = __( 'Date', 'ninja-forms' );
- return $cols;
- }
- /**
- * Custom Columns
- *
- * @param $column
- * @param $sub_id
- */
- public function custom_columns( $column, $sub_id )
- {
- $sub = Ninja_Forms()->form()->get_sub( $sub_id );
- switch( $column ){
- case 'seq_num':
- echo $this->custom_columns_seq_num( $sub );
- break;
- case 'sub_date':
- echo $this->custom_columns_sub_date( $sub );
- break;
- default:
- echo $this->custom_columns_field( $sub, $column );
- }
- }
- /**
- * Remove Filter: Show All Dates
- *
- * @param $months
- * @return array
- */
- public function remove_filter_show_all_dates( $months )
- {
- if( ! isset( $_GET[ 'post_type' ] ) || 'nf_sub' != $_GET[ 'post_type' ] ) return $months;
- // Returning an empty array should hide the dropdown.
- return array();
- }
- /**
- * Add Filters
- *
- * @return bool
- */
- public function add_filters()
- {
- global $typenow;
- // Bail if we aren't in our submission custom post type.
- if ( $typenow != 'nf_sub' ) return false;
- $forms = Ninja_Forms()->form()->get_forms();
- $form_options = array();
- foreach( $forms as $form ){
- $form_options[ $form->get_id() ] = $form->get_setting( 'title' );
- }
- $form_options = apply_filters( 'ninja_forms_submission_filter_form_options', $form_options );
- asort($form_options);
- if( isset( $_GET[ 'form_id' ] ) ) {
- $form_selected = $_GET[ 'form_id' ];
- } else {
- $form_selected = 0;
- }
- if( isset( $_GET[ 'begin_date' ] ) ) {
- $begin_date = $_GET[ 'begin_date' ];
- } else {
- $begin_date = '';
- }
- if( isset( $_GET[ 'end_date' ] ) ) {
- $end_date = $_GET[ 'end_date' ];
- } else {
- $end_date = '';
- }
- Ninja_Forms::template( 'admin-menu-subs-filter.html.php', compact( 'form_options', 'form_selected', 'begin_date', 'end_date' ) );
- wp_enqueue_script('jquery-ui-datepicker');
- wp_enqueue_style( 'jquery-ui-datepicker', Ninja_Forms::$url .'deprecated/assets/css/jquery-ui-fresh.min.css' );
- }
- public function table_filter( $query )
- {
- global $pagenow;
- if( $pagenow != 'edit.php' || ! is_admin() || ! isset( $query->query['post_type'] ) || 'nf_sub' != $query->query['post_type'] || ! is_main_query() ) return;
- $vars = &$query->query_vars;
- $form_id = ( ! empty( $_GET['form_id'] ) ) ? $_GET['form_id'] : 0;
- $vars = $this->table_filter_by_form( $vars, $form_id );
- $vars = $this->table_filter_by_date( $vars );
- $vars = apply_filters( 'ninja_forms_sub_table_qv', $vars, $form_id );
- }
- public function search( $pieces ) {
- global $typenow;
- // filter to select search query
- if ( is_search() && is_admin() && $typenow == 'nf_sub' && isset ( $_GET['s'] ) ) {
- global $wpdb;
- $keywords = explode(' ', get_query_var('s'));
- $query = "";
- foreach ($keywords as $word) {
- $query .= " (mypm1.meta_value LIKE '%{$word}%') OR ";
- }
- if (!empty($query)) {
- // Escape place holders for the where clause.
- $pieces[ 'where' ] = $wpdb->remove_placeholder_escape( $pieces[ 'where' ] );
- // add to where clause
- $pieces[ 'where' ] = str_replace("((({$wpdb->posts}.post_title LIKE '%", "({$query}(({$wpdb->posts}.post_title LIKE '%", $pieces[ 'where' ]);
- $pieces[ 'join' ] = $pieces[ 'join' ] . " INNER JOIN {$wpdb->postmeta} AS mypm1 ON ({$wpdb->posts}.ID = mypm1.post_id)";
- }
- }
- return ( $pieces );
- }
- public function remove_bulk_edit( $actions ) {
- unset( $actions['edit'] );
- return $actions;
- }
- public function bulk_admin_footer() {
- global $post_type;
- if ( ! is_admin() )
- return false;
- if( $post_type == 'nf_sub' && isset ( $_REQUEST['post_status'] ) && $_REQUEST['post_status'] == 'all' ) {
- ?>
- <script type="text/javascript">
- jQuery(document).ready(function() {
- jQuery('<option>').val('export').text('<?php _e('Export', 'ninja-forms')?>').appendTo("select[name='action']");
- jQuery('<option>').val('export').text('<?php _e('Export', 'ninja-forms')?>').appendTo("select[name='action2']");
- <?php
- if ( ( isset ( $_POST['action'] ) && $_POST['action'] == 'export' ) || ( isset ( $_POST['action2'] ) && $_POST['action2'] == 'export' ) ) {
- ?>
- setInterval(function(){
- jQuery( "select[name='action'" ).val( '-1' );
- jQuery( "select[name='action2'" ).val( '-1' );
- jQuery( '#posts-filter' ).submit();
- },5000);
- <?php
- }
- if ( isset ( $_REQUEST['form_id'] ) && ! empty ( $_REQUEST['form_id'] ) ) {
- $redirect = urlencode( remove_query_arg( array( 'download_all', 'download_file' ) ) );
- $url = admin_url( 'admin.php?page=nf-processing&action=download_all_subs&form_id=' . absint( $_REQUEST['form_id'] ) . '&redirect=' . $redirect );
- $url = esc_url( $url );
- ?>
- var button = '<a href="<?php echo $url; ?>" class=<?php __( "button-secondary nf-download-all", 'ninja-forms' ) ;?> . '>' . <?php echo __( 'Download All Submissions', 'ninja-forms' ); ?></a>';
- // jQuery( '#doaction2' ).after( button );
- <?php
- }
- if ( isset ( $_REQUEST['download_all'] ) && $_REQUEST['download_all'] != '' ) {
- $redirect = esc_url_raw( add_query_arg( array( 'download_file' => esc_html( $_REQUEST['download_all'] ) ) ) );
- $redirect = remove_query_arg( array( 'download_all' ), $redirect );
- ?>
- document.location.href = "<?php echo $redirect; ?>";
- <?php
- }
- ?>
- });
- </script>
- <?php
- }
- }
- public function export_listen()
- {
- // Bail if we aren't in the admin
- if (!is_admin())
- return false;
- if (!isset ($_REQUEST['form_id']) || empty ($_REQUEST['form_id'])) {
- return false;
- }
- if (isset ($_REQUEST['export_single']) && !empty($_REQUEST['export_single'])) {
- Ninja_Forms()->sub(esc_html($_REQUEST['export_single']))->export();
- }
- if ((isset ($_REQUEST['action']) && $_REQUEST['action'] == 'export') || (isset ($_REQUEST['action2']) && $_REQUEST['action2'] == 'export')) {
- $sub_ids = array();
- if (isset($_REQUEST['post'])) {
- $sub_ids = WPN_Helper::esc_html($_REQUEST['post']);
- }
- Ninja_Forms()->form( $_REQUEST['form_id'] )->export_subs( $sub_ids );
- }
- if (isset ($_REQUEST['download_file']) && !empty($_REQUEST['download_file'])) {
- // Open our download all file
- $filename = esc_html($_REQUEST['download_file']);
- $upload_dir = wp_upload_dir();
- $file_path = trailingslashit($upload_dir['path']) . $filename . '.csv';
- if (file_exists($file_path)) {
- $myfile = file_get_contents($file_path);
- } else {
- $redirect = esc_url_raw(remove_query_arg(array('download_file', 'download_all')));
- wp_redirect($redirect);
- die();
- }
- unlink($file_path);
- $form_name = Ninja_Forms()->form(absint($_REQUEST['form_id']))->get()->get_setting('title');
- $form_name = sanitize_title($form_name);
- $today = date('Y-m-d', current_time('timestamp'));
- $filename = apply_filters('ninja_forms_download_all_filename', $form_name . '-all-subs-' . $today);
- header('Content-type: application/csv');
- header('Content-Disposition: attachment; filename="' . $filename . '.csv"');
- header('Pragma: no-cache');
- header('Expires: 0');
- echo $myfile;
- die();
- }
- }
- public function hide_page_title_action()
- {
- // If we are on our the nf_sub post type then....
- if( ( isset( $_GET[ 'post_type' ] ) && 'nf_sub' == $_GET[ 'post_type'] ) ||
- 'nf_sub' == get_post_type() ) {
- // ...then hiding the "Add New" button on the CPT page.
- echo '<style type="text/css">.page-title-action, .view-mode{display: none;}</style>';
- }
- }
- /*
- * PRIVATE METHODS
- */
- /**
- * Custom Columns: ID
- *
- * @param $sub
- * @return mixed
- */
- private function custom_columns_seq_num( $sub )
- {
- return $sub->get_seq_num();
- }
- /**
- * Custom Columns: Submission Date
- *
- * @param $sub
- * @return mixed
- */
- private function custom_columns_sub_date( $sub )
- {
- // Grab the date and time format options
- $date_format = get_option( 'date_format' );
- $time_format = get_option( 'time_format' );
- // Get the sub dates using the date and time formats.
- return $sub->get_sub_date( $date_format . ' ' . $time_format );
- }
- /**
- * Custom Columns: Field
- *
- * @param $sub
- * @param $column
- * @return bool
- */
- private function custom_columns_field( $sub, $column )
- {
- if( FALSE === strpos( $column, 'field_' ) ) return FALSE;
- $field_id = str_replace( 'field_', '', $column );
- return $sub->get_field_value( $field_id );
- }
- private function table_filter_by_form( $vars, $form_id )
- {
- if ( ! isset ( $vars['meta_query'] ) ) {
- $vars['meta_query'] = array(
- array(
- 'key' => '_form_id',
- 'value' => $form_id,
- 'compare' => '=',
- ),
- );
- }
- return $vars;
- }
- private function table_filter_by_date( $vars )
- {
- if( empty( $_GET[ 'begin_date' ] ) || empty( $_GET[ 'end_date' ] ) ) return $vars;
- $begin_date = $_GET[ 'begin_date' ];
- $end_date = $_GET[ 'end_date' ];
- // Include submissions on the end_date.
- $end_date = date( 'm/d/Y', strtotime( '+1 day', strtotime( $end_date ) ) );
- if ( ! isset ( $vars['date_query'] ) ) {
- $vars['date_query'] = array(
- 'after' => $begin_date,
- 'before' => $end_date,
- 'inclusive' => true,
- );
- }
- return $vars;
- }
- public function get_capability()
- {
- return apply_filters( 'ninja_forms_admin_submissions_capabilities', $this->capability );
- }
- }
|