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
<?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;
}
}