view = $view;
$this->settings = Settings::getInstance();
add_filter('manage_posts_columns', [$this, 'column'], 10000);
add_filter('manage_pages_columns', [$this, 'column'], 10000);
add_action('manage_posts_custom_column', [$this, 'data'], 10, 2);
add_action('manage_pages_custom_column', [$this, 'data'], 10, 2);
if (current_user_can(Constants::SET_CONTENT)) {
add_action('init', [$this, 'actions']);
}
}
/**
* Register column
*
* @param array $columns
* @return array
*/
public function column($columns)
{
global $typenow;
$disable = array_key_exists($typenow, $this->settings->disable ?: []);
if (!$disable) {
$columns['age_gate'] = ' Age Gate';
}
return $columns;
}
/**
* Output custom column
*
* @param string $column
* @param int $postId
* @return void
*/
public function data($column, $postId)
{
if ($column !== 'age_gate') {
return;
}
echo $this->view->addData(['content' => new Content($postId)])->render('post/list-column'); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
}
/**
* Register bulk actions on post types
*
* @return void
*/
public function actions()
{
$postTypes = get_post_types(
[
'public' => true
]
);
foreach ($postTypes as $postType) {
$settings = Settings::getInstance();
$disable = array_key_exists($postType, $settings->disable ?: []);
if (!$disable) {
add_filter('bulk_actions-edit-' . $postType, function ($actions) {
$actions['age_gate_restrict'] = esc_html__('Age Gate: Restrict', 'age-gate');
$actions['age_gate_unrestrict'] = esc_html__('Age Gate: Unrestrict', 'age-gate');
return $actions;
});
add_filter('handle_bulk_actions-edit-' . $postType, [$this, 'actionHandler'], 10, 3);
}
}
}
/**
* Handle bulk assigning
*
* @param string $redirect
* @param string $action
* @param array $posts
* @return string
*/
public function actionHandler($redirect, $action, $posts)
{
if (!in_array($action, ['age_gate_restrict', 'age_gate_unrestrict'] )) {
return $redirect;
}
if (!current_user_can(Constants::SET_CONTENT)) {
return $redirect;
}
switch ($action) {
case 'age_gate_restrict':
$this->bulk('restrict', $posts);
break;
case 'age_gate_unrestrict':
$this->bulk('bypass', $posts);
break;
}
return $redirect;
}
/**
* Apply the bulk update
*
* @param string $action
* @param array $posts
* @return void
*/
private function bulk(string $action, array $posts) : void
{
$settings = Settings::getInstance();
switch ($action) {
case 'restrict':
foreach ($posts as $postId) {
if ($settings->type === 'selected') {
update_post_meta($postId, Constants::META_RESTRICT, 1);
} else {
delete_post_meta($postId, Constants::META_BYPASS);
}
}
break;
case 'bypass':
foreach ($posts as $postId) {
if ($settings->type === 'selected') {
delete_post_meta($postId, Constants::META_RESTRICT);
} else {
update_post_meta($postId, Constants::META_BYPASS, 1);
}
}
break;
}
}
}