| | |
| | | |
| | | use JVBase\registrar\config\Integration; |
| | | use JVBase\registrar\Registrar; |
| | | use JVBase\utility\Features; |
| | | use JVBase\base\Site; |
| | | |
| | | if (!defined('ABSPATH')) { |
| | | exit; |
| | |
| | | |
| | | class AddIntegrationFields { |
| | | protected string $service_name; |
| | | protected Registrar $registrar; |
| | | private Registrar $registrar; |
| | | protected Integration $config; |
| | | protected array $allowed; |
| | | |
| | | public function __construct(string $service_name, ?Registrar $registrar = null) { |
| | | $this->initAllowed(); |
| | | if (!in_array($service_name, $this->allowed)) { |
| | | if (!array_key_exists($service_name, $this->allowed)) { |
| | | return; |
| | | } |
| | | |
| | |
| | | |
| | | $this->config = $registrar->getIntegration($service_name); |
| | | |
| | | add_action('jvb_define_integrations', [$this, 'addIntegrationFields'],20); |
| | | } |
| | | protected function initAllowed():void |
| | | { |
| | | $allowed = []; |
| | | if (Features::hasIntegration('gmb')) { |
| | | if (Site::hasIntegration('gmb')) { |
| | | $allowed['gmb'] = 'Google My Business'; |
| | | } |
| | | if (Features::hasIntegration('facebook')) { |
| | | if (Site::hasIntegration('facebook')) { |
| | | $allowed['facebook'] = 'Facebook'; |
| | | } |
| | | if (Features::hasIntegration('square')) { |
| | | if (Site::hasIntegration('square')) { |
| | | $allowed['square'] = 'Square'; |
| | | } |
| | | if (Features::hasIntegration('instagram')) { |
| | | if (Site::hasIntegration('instagram')) { |
| | | $allowed['instagram'] = 'Instagram'; |
| | | } |
| | | if (Features::hasIntegration('bluesky')) { |
| | | if (Site::hasIntegration('bluesky')) { |
| | | $allowed['bluesky'] = 'BlueSky'; |
| | | } |
| | | if (Features::hasIntegration('helcim')) { |
| | | if (Site::hasIntegration('helcim')) { |
| | | $allowed['helcim'] = 'Helcim'; |
| | | } |
| | | $this->allowed = $allowed; |
| | |
| | | public function addIntegrationFields():void |
| | | { |
| | | $fields = $this->getIntegrationFields(); |
| | | // error_log('[AddIntegrationFields] adding fields for '.$this->service_name.': '.print_r($fields, true)); |
| | | foreach ($fields as $fieldName => $fieldConfig) { |
| | | $this->registrar->fields()->addField($fieldName, $fieldConfig); |
| | | } |
| | |
| | | |
| | | public function getIntegrationFields():array |
| | | { |
| | | if ($this->registrar && $this->registrar->getType() === 'user' && $this->config->isCustomer()) { |
| | | return JVB()->connect($this->service_name)->getAdditionalFields('customer'); |
| | | } |
| | | $fields = [ |
| | | 'share_to_'.$this->service_name => [ |
| | | 'type' => 'true_false', |
| | | 'label' => 'Share To '.$this->allowed[$this->service_name], |
| | | 'section' => 'sync', |
| | | 'default' => 1 |
| | | ] |
| | | ]; |
| | | if ($this->config->getUpdate()){ |
| | |
| | | 'field' => 'share_to_'.$this->service_name, |
| | | 'value' => 1, |
| | | 'operator' => '==' |
| | | ] |
| | | ], |
| | | 'default' => 1, |
| | | ]; |
| | | |
| | | $fields["_{$this->service_name}_item_id"] = [ |
| | |
| | | } |
| | | |
| | | if ($this->config->getCanSchedule()) { |
| | | $fields['schedule_'.$this->service_name] = [ |
| | | $fields['_'.$this->service_name.'_scheduled_at'] = [ |
| | | 'type' => 'datetime', |
| | | 'label' => 'Schedule for later?', |
| | | 'condition' => [ |
| | | 'field' => 'share_to_'.$this->service_name, |
| | | 'operator' => '==', |
| | | 'value' => 1 |
| | | ] |
| | | ], |
| | | 'default' => 1, |
| | | ]; |
| | | } |
| | | $additional = JVB()->connect($this->service_name)->getAdditionalFields($this->config->getContentType()); |