false, // Can share new posts to the service 'update' => false, // Can update already-shared posts 'delete' => false, // Can remove posts from the service ]; /** * @var array // Post types that can be synced (e.g., ['artwork', 'tattoo']): usually built by Registrar.php if the integration name exists as a key in [ 'integrations' => []] */ protected array $syncPostTypes = []; /** * @var array Taxonomies that can be synced (e.g., ['category', 'section']): usually built by Registrar.php if the integration name exists as a key in [ 'integrations' => []] */ protected array $syncTaxonomies = []; /** * @var array User roles that can be synced (e.g., ['customer']): usually built by Registrar.php if the integration name exists as a key in [ 'integrations' => []] */ protected array $syncUsers = []; /** * @var array Integration's specific content types. Set by child classes' setContentTypes */ protected array $contentTypes = []; /** * Check if integration is properly configured */ public function isSetUp(): bool { return !empty($this->loadCredentials()); } public function loadCredentials():array { return Auth::getInstance()->getCredentials($this->service_name, $this->userID); } protected function logError(string $method, string $message, array $context = []):void { $context['service'] = $this->service_name; JVB()->error()->log('['.self::class.']'.$method, $message, $context); } protected function getReturnURL():string { //If we are on the main admin page, we want to go back to our Integrations page on admin //If we are on the custom dashboard, we want to go back to that dashboard page return is_admin() ? admin_url('admin.php?page=jvb-integrations') : get_home_url(null, '/dash/integrations/'); } protected function determineOptionPage():string { return is_admin() ? admin_url('admin.php?page=jvb-integrations-'.$this->service_name) : get_home_url(null, '/dash/integrations/'.$this->service_name.'/'); } protected function outputIcon(string $icon):string { if (is_admin()) { $icons = IconsManager::for('admin'); return $icons->getRawSvg($icon); } return jvbDashIcon($icon); } protected function initializeRateLimiters():void { $key = $this->service_name; if (!is_null($this->userID)) { $key .= '_'.$this->userID; } if ($this->hasRequests && !isset($this->requestLimiter) && !is_null($this->oauthLimiter)) { $this->requestLimiter = new RateLimits($key); } if ($this->hasOAuth && !isset($this->oauthLimiter) && !is_null($this->oauthLimiter)) { $key .= '_oauth'; $this->oauthLimiter = new RateLimits($key, ['s' => 1,'m' => 10, 'h' => 100]); } } public function response(bool $success, string $message, array $data = []):array { $response = [ 'success' => $success, 'message' => $message ]; if (!empty($data)) { $response['data'] = $data; } return $response; } }