'optionpage',
'plural' => 'optionpages',
'screen' => isset($args['screen']) ? $args['screen'] : null,
'ajax' => false
]);
}
public function column_default($item, $columnName)
{
switch ($columnName) {
case 'pages':
return $item[$columnName];
case 'position':
return $item[$columnName];
// case 'menu_type':
// return $item[$columnName];
default:
return print_r($item, true);
}
}
public function column_title($item)
{
$actions = [
'edit' => sprintf('Edit', SubpageEdit::SLUG, $item['ID']),
'delete' => sprintf(
'',
$_REQUEST['page'],
'delete',
$item['ID'],
wp_create_nonce($item['ID'])
)
];
// $actions = [
// 'edit' => sprintf('Edit', SubpageEdit::SLUG, $item['ID']),
// 'delete' => sprintf(
// 'Delete',
// $_REQUEST['page'],
// 'delete',
// $item['ID'],
// wp_create_nonce($item['ID'])
// ),
// ];
return sprintf(
'%s%s',
SubpageEdit::SLUG,
$item['ID'],
$item['title'],
$this->row_actions($actions)
);
}
public function column_cb($item)
{
return sprintf('', $this->_args['singular'], $item['ID']);
}
public function get_columns()
{
return [
// 'cb' => '',
'title' => 'Menu Title',
'position' => 'Position',
'pages' => 'Pages',
// 'menu_type' => 'Menu type'
];
}
protected function get_views()
{
return [
'all' => 'All',
'published' => 'Published',
'trashed' => 'Trashed'
];
}
public function get_sortable_columns()
{
return [
'title' => ['title', false],
'pages' => ['pages', false],
'position' => ['position', true]
];
}
public function get_bulk_actions()
{
return [
// 'delete' => 'Delete'
];
}
private function bulkActionDeleteArray()
{
if ('delete' !== $this->current_action() || !isset($_REQUEST['optionpage']) || !isset($_REQUEST['_wpnonce'])) {
return;
}
list($nonce, $ids) = [$_REQUEST['_wpnonce'], $_REQUEST['optionpage']];
if (!wp_verify_nonce($nonce, 'bulk-' . $this->_args['plural'])) {
return;
}
$ids = Collection::make($ids);
$ids->map(function ($id) {
return Data::getOptionNamesFromSettingPagesById($id)->all();
})->flatten(1)->map(function ($optionName) {
return delete_option($optionName);
});
$ids->map(function ($id) {
return DB::deleteRowById($id);
});
// session_start();
// $_SESSION['aop_pages_deleted'] = true;
// $_SESSION['aop_pages_deleted_multiple'] = true;
// vardumper($_SESSION);
// wp_redirect(SubpageMaster::url());
// exit;
// return Plugin::redirectTo(SubpageMaster::url());
//https://example.test/wp-admin/admin.php?page=admin_options_pages_master&_wpnonce=34c8cc7cfa&_wp_http_referer=%2Fwp-admin%2Fadmin.php%3Fpage%3Dadmin_options_pages_master&action=delete&paged=1&optionpage%5B0%5D=33&optionpage%5B1%5D=34&action2=-1
//https://example.test/wp-admin/admin.php?page=admin_options_pages_master&action=delete&optionpage=35&nonce=fb1e3f204d
}
private function bulkActionDeleteSingle()
{
if ('delete' !== $this->current_action() || !isset($_REQUEST['optionpage']) || !isset($_REQUEST['nonce'])) {
return;
}
// vardumper($_REQUEST);
// list($nonce, $id) = [$_REQUEST['nonce'], $_REQUEST['optionpage']];
// if (!wp_verify_nonce($_REQUEST['nonce'], $id)) {
// return;
// }
// $optionNames = Data::getOptionNamesFromSettingPagesById($id);
// $optionNames->map(function ($optionName) {
// return delete_option($optionName);
// });
// DB::deleteRowById($id);
// return Plugin::redirectTo(SubpageMaster::url());
}
public function processBulkActions()
{
$this->bulkActionDeleteArray();
// $this->bulkActionDeleteSingle();
}
public function prepare_items()
{
$recordsPerPage = 20;
$this->_column_headers = [
$this->get_columns(),
[],
$this->get_sortable_columns()
];
$this->processBulkActions();
$data = Data::listTableData()->all();
$usortReorder = function ($a, $b) {
$orderby = (!empty($_REQUEST['orderby'])) ? $_REQUEST['orderby'] : 'position';
$order = (!empty($_REQUEST['order'])) ? $_REQUEST['order'] : 'asc';
if ($a[$orderby] === $b[$orderby]) {
return 0;
}
if ($order === 'asc') {
return ($a[$orderby] < $b[$orderby]) ? -1 : 1;
}
return ($a[$orderby] > $b[$orderby]) ? -1 : 1;
};
usort($data, $usortReorder);
$totalItems = count($data);
$this->items = array_slice($data, (($this->get_pagenum() - 1) * $recordsPerPage), $recordsPerPage);
$this->set_pagination_args([
'total_items' => $totalItems,
'per_page' => $recordsPerPage,
'total_pages' => ceil($totalItems / $recordsPerPage)
]);
}
}