'form_entry', 'plural' => 'form_entries', 'ajax' => false ]); } public function get_columns() { return [ 'cb' => '', 'id' => __('ID', 'advanced-widget-kit-for-elementor'), 'form_name' => __('Form Name', 'advanced-widget-kit-for-elementor'), 'submitted_at' => __('Submitted', 'advanced-widget-kit-for-elementor'), 'status' => __('Status', 'advanced-widget-kit-for-elementor'), 'user_ip' => __('IP Address', 'advanced-widget-kit-for-elementor'), 'actions' => __('Actions', 'advanced-widget-kit-for-elementor'), ]; } public function get_sortable_columns() { return [ 'id' => ['id', true], 'submitted_at' => ['submitted_at', false], 'status' => ['status', false], ]; } public function column_default($item, $column_name) { switch ($column_name) { case 'id': case 'form_id': case 'user_ip': case 'status': return esc_html($item[$column_name]); case 'submitted_at': return esc_html(get_date_from_gmt($item[$column_name])); default: return print_r($item, true); } } public function column_cb($item) { return sprintf( '', $item['id'] ); } public function column_actions($item) { $actions = [ 'view' => sprintf( '%s', esc_url(add_query_arg(['action' => 'view', 'entry' => $item['id']])), __('View', 'advanced-widget-kit-for-elementor') ), 'delete' => sprintf( '%s', esc_url(wp_nonce_url(add_query_arg(['action' => 'delete', 'entry' => $item['id']]), 'delete_entry_' . $item['id'])), esc_attr__('Are you sure you want to delete this entry?', 'advanced-widget-kit-for-elementor'), __('Delete', 'advanced-widget-kit-for-elementor') ), ]; return implode(' | ', $actions); } public function prepare_items() { global $wpdb; $table_name = $wpdb->prefix . 'awke_form_entries'; // Set up pagination $per_page = 20; $current_page = $this->get_pagenum(); $total_items = (int) $wpdb->get_var("SELECT COUNT(id) FROM $table_name") ?: 0; // Set up sorting $orderby = isset($_REQUEST['orderby']) ? trim($_REQUEST['orderby']) : 'submitted_at'; $order = isset($_REQUEST['order']) ? trim($_REQUEST['order']) : 'DESC'; // Set up search $search = isset($_REQUEST['s']) ? trim($_REQUEST['s']) : ''; $where = ''; if (!empty($search)) { $where = $wpdb->prepare( " WHERE form_id LIKE %s OR field_data LIKE %s OR user_ip LIKE %s", '%' . $wpdb->esc_like($search) . '%', '%' . $wpdb->esc_like($search) . '%', '%' . $wpdb->esc_like($search) . '%' ); } // Get the data $sql = "SELECT * FROM $table_name $where ORDER BY $orderby $order LIMIT %d OFFSET %d"; $this->items = $wpdb->get_results( $wpdb->prepare($sql, $per_page, ($current_page - 1) * $per_page), ARRAY_A ); // Set up pagination $this->set_pagination_args([ 'total_items' => $total_items, 'per_page' => $per_page, 'total_pages' => ceil($total_items / $per_page) ]); $this->_column_headers = [ $this->get_columns(), [], $this->get_sortable_columns() ]; } public function get_bulk_actions() { return [ 'bulk-delete' => __('Delete', 'advanced-widget-kit-for-elementor'), 'bulk-mark-read' => __('Mark as Read', 'advanced-widget-kit-for-elementor'), 'bulk-mark-unread' => __('Mark as Unread', 'advanced-widget-kit-for-elementor'), ]; } public function process_bulk_action() { global $wpdb; $table_name = $wpdb->prefix . 'awke_form_entries'; if ('bulk-delete' === $this->current_action()) { $entry_ids = isset($_POST['bulk-delete']) ? array_map('intval', $_POST['bulk-delete']) : []; if (!empty($entry_ids)) { foreach ($entry_ids as $id) { if (check_admin_referer('bulk-' . $this->_args['plural'])) { $wpdb->delete($table_name, ['id' => $id], ['%d']); } } wp_redirect(add_query_arg()); exit; } } if ('bulk-mark-read' === $this->current_action() || 'bulk-mark-unread' === $this->current_action()) { $entry_ids = isset($_POST['bulk-delete']) ? array_map('intval', $_POST['bulk-delete']) : []; $status = ('bulk-mark-read' === $this->current_action()) ? 'read' : 'unread'; if (!empty($entry_ids)) { foreach ($entry_ids as $id) { if (check_admin_referer('bulk-' . $this->_args['plural'])) { $wpdb->update( $table_name, ['status' => $status], ['id' => $id], ['%s'], ['%d'] ); } } wp_redirect(add_query_arg()); exit; } } } }