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