'Save Credentials', 'label' => 'Save Changes', 'icon' => 'floppy-disk', 'action' => [$this, 'saveCredentials'] ], [ 'name' => 'Clear Credentials', 'icon' => 'broom', 'action' => [$this, 'clearCredentials'] ], ]; foreach ($actions as $a) { $this->addAction($a['name'], $a['action'], $a['slug']??null, $a['icon']??null, $a['label']??null); } } public function addAction(string $name, callable $callback, ?string $slug = null, ?string $icon = null, ?string $label = null):void { $action = new AdminActions($name, $callback); if (!is_null($slug)) { $action->setSlug($slug); } if (!is_null($icon)) { $action->setIcon($icon); } if (!is_null($label)) { $action->setLabel($label); } $this->actions[$action->getSlug()] = $action; } /** * @param string $action * @param mixed|null $data * @return array [ * 'success' => {bool}, * 'message' => {string} optional message, * 'data' => {mixed} optional data to return * ] */ public function processAction(string $action, mixed $data = null):array { if (!array_key_exists($action, $this->actions)) { $this->logError('processAction', 'Attempted action not setup: '.print_r(['action' => $action, 'service' => $this->service_name], true)); return $this->response(false, 'Attempted action not set up'); } $theAction = $this->actions[$action]; if (!$theAction->checkPermission()) { $this->logError('processAction', 'User has no capabilities to perform this action: '.print_r(['action' => $action, 'service' => $this->service_name], true)); return $this->response(false, 'Insufficient permissions'); } $result = $theAction->handleCallback($data); if (is_wp_error($result)) { $this->logError('processAction', $result->get_error_message()); return $this->response(false, $result->get_error_message()); } return $result; } public function renderConnection(bool $return = false):string { if ($this->userID && !JVB()->userCanConnect($this->service_name, $this->userID)) { return ''; } $credentials = $this->loadCredentials(); $isConnected = !empty($credentials); $meta = ''; if ($isConnected && array_key_exists('updated_at', $credentials) && $credentials['updated_at'] > 0) { $meta = sprintf( '
', human_time_diff($credentials['updated_at']) ); } $form = sprintf( ''; if (!$return) { echo $form; } return $form; } protected function outputActionButtons():string { return sprintf('