?? GreyFile — Mystic File Browser

Current path: home/webdevt/www/demo2/wp-content/plugins/divi-contact-form-helper/d5/server/Admin/Controllers/



?? Go up: /home/webdevt/www/demo2/wp-content/plugins/divi-contact-form-helper/d5/server/Admin

?? Viewing: ContactFormsListTable.php

<?php

namespace KS_PAC_DCFH\Admin\Controllers;

use WP_List_Table;

class ContactFormsListTable extends WP_List_Table
{
    public string $_page;

    public function __construct($args = [])
    {
        parent::__construct([
            'singular' => __('Contact Form', 'divi-contact-form-helper'),
            'plural' => __('Contact Forms', 'divi-contact-form-helper'),
            'ajax' => false
        ]);
        $this->_page = isset($_GET['page']) ? sanitize_key($_GET['page']) : ''; // phpcs:ignore
    }

    public function prepare_items(): void
    {
        $this->_column_headers = $this->get_column_info();
        $this->process_bulk_action();
        $record = $this->get_record();
        $data = $record['items'] ?? [];
        usort($data, [&$this, 'sort_data']);
        $this->items = $data;
    }

    public function get_record(): array
    {
        $record = [];
        $forms = $this->get_contact_forms();
        if (!empty($forms)) {
            $total_items = 0;
            foreach ($forms as $form_id => $form) {
                ++$total_items;
                $record['items'][] = [
                    'ID' => $form_id,
                    'title' => $form['title'],
                    'entries' => $form['entries'],
                    'max_entries_allowed' => $form['max_entries_allowed'],
                    'views' => $form['views'],
                    'unique_views' => $form['unique_views'],
                    'conversion' => $form['conversion'],
                    'unique_conversion' => $form['unique_conversion'],
                    'last_entry_date' => $form['last_entry_date'],
                    'last_post_id' => $form['last_post_id'],
                    'page_id' => $form['page_id'],
                ];
            }
            $record['total_items'] = $total_items;
        }

        return $record;
    }

    public function get_sortable_columns(): array
    {
        return [
            "title" => ["title", true],
            "entries" => ["entries", true],
            "views" => ["views", true],
            "unique_views" => ["unique_views", true],
            "conversion" => ["conversion", true],
            "unique_conversion" => ["unique_conversion", true],
            "last_entry_date" => ["last_entry_date", true],
        ];
    }

    public function get_columns(): array
    {
        return [
            'cb' => '<input type="checkbox" />',
            'title' => __('Title', 'divi-contact-form-helper'),
            'entries' => __('Entries', 'divi-contact-form-helper'),
            'views' => __('Views', 'divi-contact-form-helper'),
            'unique_views' => __('Unique Views', 'divi-contact-form-helper'),
            'conversion' => __('Conversion', 'divi-contact-form-helper'),
            'unique_conversion' => __('Unique Conversion', 'divi-contact-form-helper'),
            'last_entry_date' => __('Last Entry', 'divi-contact-form-helper'),
            'max_entries_allowed' => __('Max Entries', 'divi-contact-form-helper'),
            'actions_html' => __('Actions', 'divi-contact-form-helper'),
        ];
    }

    public function column_default($item, $column_name)
    {
        switch ($column_name) {
            case 'title':
            case 'entries':
            case 'views':
            case 'unique_views':
            case 'last_entry_date':
                return $item[$column_name];
            case 'conversion':
            case 'unique_conversion':
                return sprintf('%s%%', $item[$column_name]);
            case 'actions_html':
                return $this->action_links($item);
            case 'max_entries_allowed':
                return '-1' === (string)$item[$column_name] ? __('Unlimited', 'divi-contact-form-helper') : $item[$column_name];
            default:
                return null;
        }
    }

    public function column_cb($item)
    {
        return sprintf('<input type="checkbox" name="bulk-action[]" value="%s">', $item['ID']);
    }

    public function no_items(): void
    {
        esc_attr_e('No Record Found In Database.', 'divi-contact-form-helper');
    }

    public function get_bulk_actions(): array
    {
        if (!ks_pac_dcfh_app()->permission_manager()::can_delete_entries()) {
            return [];
        }

        return [
            'bulk-delete-entries' => __('Delete Entries', 'divi-contact-form-helper'),
            'bulk-reset-views' => __('Reset Views', 'divi-contact-form-helper'),
            'bulk-delete-record' => __('Delete Record', 'divi-contact-form-helper')
        ];
    }

    public function process_bulk_action(): void
    {
        if (isset($_GET['_wpnonce']) && !wp_verify_nonce(sanitize_text_field($_GET['_wpnonce']), 'bulk-action-'.$this->_page)) {
            wp_die(esc_html__('The security check failed due to an invalid nonce. Please try again.', 'divi-contact-form-helper'));
        }
        $action = $this->current_action();
        if (!$action) {
            return;
        }
        $bulk_actions = isset($_GET['bulk-action']) ? array_map('sanitize_text_field', $_GET['bulk-action']) : [];
        if (!empty($bulk_actions)) {
            // Delete Entries
            if ('bulk-delete-entries' === $action) {
                global $wpdb;
                // phpcs:disable
                $post_ids = $wpdb->get_col(
                    "SELECT post_id 
         FROM $wpdb->postmeta 
         WHERE meta_key = '_pwh_dcfh_contact_form_id' 
         AND meta_value IN ('".implode("','", array_map('esc_sql', $bulk_actions))."')"
                );
                // phpcs:enable
                if (!empty($post_ids)) {
                    foreach ($post_ids as $post_id) {
                        wp_delete_post($post_id, true);
                    }
                }
            }
            // Reset Views
            if ('bulk-reset-views' === $action) {
                foreach ($bulk_actions as $bulk_action) {
                    ks_pac_dcfh_app()->form_settings_manager()::reset_contact_form_views($bulk_action);
                }
            }
            // Delete Options
            if ('bulk-delete-record' === $action) {
                foreach ($bulk_actions as $bulk_action) {
                    ks_pac_dcfh_app()->form_settings_manager()::delete_contact_form_options($bulk_action);
                }
            }
        }

    }

    private function get_contact_forms(): array
    {
        $data = [];
        $contact_forms = ks_pac_dcfh_app()->general_db_manager()::get_contact_forms();
        if (empty($contact_forms)) {
            return $data;
        }
        foreach ($contact_forms as $contact_form) {
            $contact_form_id = $contact_form['unique_id'];
            $contact_form_title = $contact_form['title'];
            $contact_form_views = $contact_form['views'];
            $contact_form_unique_views = $contact_form['unique_views'];
            $page_id = $contact_form['page_id'];
            $contact_form_max_entries_allowed = $contact_form['max_entries_allowed'];
            $contact_form_entries = $contact_form['total_entries'];
            $last_post_id = ks_pac_dcfh_app()->general_db_manager()::get_contact_form_last_post_id($contact_form_id);
            $contact_form_conversion = (!empty($contact_form_views) && $contact_form_views !== 0)
                ? round(($contact_form_entries / $contact_form_views) * 100, 2)
                : 0;
            $contact_form_unique_conversion = (!empty($contact_form_unique_views) && $contact_form_unique_views !== 0)
                ? round(($contact_form_entries / $contact_form_unique_views) * 100, 2)
                : 0;
            $contact_form_last_entry_date = !empty($last_post_id) ? ks_pac_dcfh_app()->misc_utils()::get_formatted_datetime(get_post_field('post_date', $last_post_id)) : '-';
            $data[$contact_form_id] = [
                'ID' => $contact_form_id,
                'title' => $contact_form_title,
                'views' => $contact_form_views,
                'unique_views' => $contact_form_unique_views,
                'max_entries_allowed' => $contact_form_max_entries_allowed,
                'entries' => $contact_form_entries,
                'conversion' => $contact_form_conversion,
                'unique_conversion' => $contact_form_unique_conversion,
                'last_entry_date' => $contact_form_last_entry_date,
                'last_post_id' => $last_post_id,
                'page_id' => $page_id,
            ];
        }

        return $data;
    }

    private function action_links($item): string
    {
        $contact_form_id = $item['ID'];
        //$last_post_id = $item['last_post_id'];
        $page_id = $item['page_id'];
        $view_entries = add_query_arg(['post_type' => 'pwh_dcfh', 'contact_form_id' => $contact_form_id], admin_url('edit.php'));
        $export_csv = add_query_arg(['post_type' => 'pwh_dcfh', 'page' => 'export_as_csv', 'contact_form_id' => $contact_form_id], admin_url('edit.php'));
        $view_form = '';
        if ($page_id && get_post($page_id)) {
            $view_form = get_the_permalink($page_id);
        }
        $output = '<div class="action-links">';
        $output .= sprintf(' <a href="%s">%s</a>', esc_url($view_entries), __('View Entries', 'divi-contact-form-helper'));
        if (ks_pac_dcfh_app()->permission_manager()::can_export_entries()) {
            $output .= sprintf(' <a href="%s">%s</a>', esc_url($export_csv), __('Export Entries', 'divi-contact-form-helper'));
        }
        if ($view_form) {
            $output .= sprintf(' <a href="%s">%s</a>', esc_url($view_form), __('View Form', 'divi-contact-form-helper'));
        }
        $output .= '</div>';

        return $output;

    }

    private function sort_data($a, $b): int
    {
        // Set defaults
        $orderby = 'title';
        $order = 'asc';
        // phpcs:disable
        if (!empty($_GET['orderby'])) {
            $orderby = sanitize_text_field($_GET['orderby']);
        }
        if (!empty($_GET['order'])) {
            $order = sanitize_text_field($_GET['order']);
        }
        // phpcs:enable
        $result = strcmp($a[$orderby], $b[$orderby]);
        if ($order === 'asc') {
            return $result;
        }

        return -$result;
    }
}


??

??