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