initAllowed(); if (!in_array($service_name, $this->allowed)) { return; } $this->service_name = $service_name; if ($registrar) { $this->registrar = $registrar; } $this->config = $registrar->getIntegration($service_name); } protected function initAllowed():void { $allowed = []; if (Site::hasIntegration('gmb')) { $allowed['gmb'] = 'Google My Business'; } if (Site::hasIntegration('facebook')) { $allowed['facebook'] = 'Facebook'; } if (Site::hasIntegration('square')) { $allowed['square'] = 'Square'; } if (Site::hasIntegration('instagram')) { $allowed['instagram'] = 'Instagram'; } if (Site::hasIntegration('bluesky')) { $allowed['bluesky'] = 'BlueSky'; } if (Site::hasIntegration('helcim')) { $allowed['helcim'] = 'Helcim'; } $this->allowed = $allowed; } public function addIntegrationFields():void { $fields = $this->getIntegrationFields(); foreach ($fields as $fieldName => $fieldConfig) { $this->registrar->fields()->addField($fieldName, $fieldConfig); } } public function getIntegrationFields():array { $fields = [ 'share_to_'.$this->service_name => [ 'type' => 'true_false', 'label' => 'Share To '.$this->allowed[$this->service_name], 'section' => 'sync', ] ]; if ($this->config->getUpdate()){ $fields['_keep_synced_'.$this->service_name] = [ 'type' => 'true_false', 'label' => 'Keep Synced with '.$this->allowed[$this->service_name], 'section' => 'sync', 'condition' => [ 'field' => 'share_to_'.$this->service_name, 'value' => 1, 'operator' => '==' ] ]; $fields["_{$this->service_name}_item_id"] = [ 'type' => 'text', 'label' => $this->allowed[$this->service_name].' ID', 'section' => 'sync', 'hidden' => true, ]; $fields["_{$this->service_name}_shared_at"] = [ 'type' => 'datetime', 'label' => $this->allowed[$this->service_name].' Shared at:', 'section' => 'sync', 'hidden' => true, ]; $fields["_{$this->service_name}_last_sync"] = [ 'type' => 'datetime', 'label' => $this->allowed[$this->service_name].' Last Sync', 'section' => 'sync', 'hidden' => true ]; $fields["_{$this->service_name}_sync_status"] = [ 'type' => 'select', 'label' => 'Sync Status', 'options' => [ 'synced' => 'Synced', 'pending' => 'Pending', 'failed' => 'Failed', 'unpublished' => 'Unpublished', 'scheduled' => 'Scheduled' ], 'section' => 'sync', 'hidden' => true, ]; } if ($this->config->getCanSchedule()) { $fields['schedule_'.$this->service_name] = [ 'type' => 'datetime', 'label' => 'Schedule for later?', 'condition' => [ 'field' => 'share_to_'.$this->service_name, 'operator' => '==', 'value' => 1 ] ]; } $additional = JVB()->connect($this->service_name)->getAdditionalFields($this->config->getContentType()); if (!empty($additional)) { $fields = array_merge($fields, $additional); } return $fields; } }