<?php
|
namespace JVBase\integrations;
|
|
use Closure;
|
|
if (!defined('ABSPATH')) {
|
exit;
|
}
|
|
class AdminActions
|
{
|
public string $slug;
|
public string $name;
|
public string $label;
|
public ?string $icon = null;
|
public string|Closure $permission = 'manage_options';
|
public Closure $callback;
|
public string $confirm = '';
|
|
public function __construct(string $name, callable $callback)
|
{
|
$this->name = $name;
|
$this->setSlug();
|
}
|
|
public function setSlug(?string $slug = null):void
|
{
|
if (is_null($slug)) {
|
$slug = $this->name;
|
}
|
$this->slug = $this->sanitizeSlug($slug);
|
}
|
protected function sanitizeSlug(string $slug):string
|
{
|
return str_replace('-','_',sanitize_title($slug));
|
}
|
public function getSlug():string
|
{
|
return $this->slug;
|
}
|
|
public function setIcon(string $icon):void
|
{
|
$this->icon = $icon;
|
}
|
public function getIcon():string|null
|
{
|
return $this->icon;
|
}
|
|
public function setLabel(string $label):void
|
{
|
$this->label = $label;
|
}
|
public function getLabel():string
|
{
|
if (isset($this->label)) {
|
return $this->label;
|
}
|
return $this->name;
|
}
|
|
public function setCallback(callable $callback):void
|
{
|
$this->callback = Closure::fromCallable($callback);
|
}
|
public function handleCallback(?array $data = null):mixed
|
{
|
if (is_callable($this->callback)) {
|
return ($this->callback)($data);
|
}
|
error_log('[AdminActions]::handleCallback No callback set for '.$this->name. ' action');
|
return false;
|
}
|
|
public function setPermission(string $permission):void
|
{
|
$this->permission = $permission;
|
}
|
public function checkPermission():bool
|
{
|
if (is_string($this->permission)) {
|
return current_user_can($this->permission);
|
} else if (is_callable($this->permission)) {
|
return ($this->permission)();
|
}
|
error_log('Check Permission failed as no permission set. '.print_r([
|
'permission' => $this->permission,
|
], true));
|
return false;
|
}
|
|
public function setConfirm(string $confirm):void
|
{
|
$this->confirm = $confirm;
|
}
|
public function getConfirm():string
|
{
|
return $this->confirm;
|
}
|
public function getName():string
|
{
|
return $this->name;
|
}
|
}
|