'sodino_rule',
'plural' => 'sodino_rules',
'ajax' => false,
]);
$this->repository = $repository;
}
public function get_columns() {
return [
'cb' => '',
'name' => __('عنوان قانون', 'sodino'),
'condition_type' => __('شرط', 'sodino'),
'action_value' => __('عملیات', 'sodino'),
'enabled' => __('وضعیت', 'sodino'),
'actions' => __('عملیات', 'sodino'),
];
}
protected function get_sortable_columns() {
return [
'name' => ['name', true],
];
}
protected function column_cb($item) {
return sprintf('', $item->id);
}
public function get_bulk_actions() {
return [
'delete' => __('حذف گروهی', 'sodino'),
];
}
public function column_actions($item) {
$edit_url = admin_url('admin.php?page=sodino-add-rule&action=edit&id=' . $item->id);
$delete_url = wp_nonce_url(admin_url('admin.php?page=sodino-rules&action=delete&id=' . $item->id), 'delete_rule');
return sprintf(
'%s | %s',
esc_url($edit_url),
esc_html__('ویرایش', 'sodino'),
esc_url($delete_url),
esc_js(__('آیا از حذف این قانون مطمئن هستید؟', 'sodino')),
esc_html__('حذف', 'sodino')
);
}
public function column_name($item) {
$edit_url = admin_url('admin.php?page=sodino-add-rule&action=edit&id=' . $item->id);
$title = sprintf('%s', esc_url($edit_url), esc_html($item->name));
return $title;
}
public function column_condition_type($item) {
$labels = [
'user_type' => __('نوع کاربر', 'sodino'),
'product_category' => __('دستهبندی محصول', 'sodino'),
'product_ids' => __('محصولات خاص', 'sodino'),
'cart_total_min' => __('حداقل مبلغ سبد', 'sodino'),
'cart_total_max' => __('حداکثر مبلغ سبد', 'sodino'),
'cart_item_count_min' => __('حداقل تعداد سبد', 'sodino'),
'cart_item_count_max' => __('حداکثر تعداد سبد', 'sodino'),
];
$type = $labels[$item->condition_type] ?? $item->condition_type;
return esc_html(sprintf('%s: %s', $type, $item->condition_value));
}
public function column_action_value($item) {
$labels = [
'discount_percent' => __('درصد تخفیف', 'sodino'),
'discount_fixed' => __('تخفیف ثابت', 'sodino'),
'set_price' => __('قیمت ثابت', 'sodino'),
'free_shipping' => __('ارسال رایگان', 'sodino'),
];
$type = $labels[$item->action_type] ?? $item->action_type;
return esc_html(sprintf('%s: %s', $type, $item->action_value));
}
public function column_enabled($item) {
return $item->enabled ? __('فعال', 'sodino') : __('غیرفعال', 'sodino');
}
public function column_default($item, $column_name) {
switch ($column_name) {
case 'name':
case 'condition_type':
case 'action_value':
case 'enabled':
case 'actions':
return '';
default:
return '';
}
}
public function prepare_items() {
$columns = $this->get_columns();
$hidden = [];
$sortable = $this->get_sortable_columns();
$this->_column_headers = [$columns, $hidden, $sortable];
$this->process_bulk_action();
$all_items = $this->repository->getAll();
$current_page = $this->get_pagenum();
$total_items = count($all_items);
$this->items = array_slice($all_items, ($current_page - 1) * $this->items_per_page, $this->items_per_page);
$this->set_pagination_args([
'total_items' => $total_items,
'per_page' => $this->items_per_page,
'total_pages' => ceil($total_items / $this->items_per_page),
]);
}
public function process_bulk_action() {
if ('delete' === $this->current_action()) {
$rule_ids = isset($_POST['rule_ids']) ? array_map('intval', $_POST['rule_ids']) : [];
if (!empty($rule_ids) && check_admin_referer('bulk-' . $this->_args['plural'])) {
foreach ($rule_ids as $id) {
$this->repository->delete($id);
}
}
}
}
}