<?php
|
namespace JVBase\registrar\helpers;
|
|
use JVBase\registrar\config\Integration;
|
use JVBase\registrar\Registrar;
|
use JVBase\base\Site;
|
|
if (!defined('ABSPATH')) {
|
exit;
|
}
|
|
class AddIntegrationFields {
|
protected string $service_name;
|
private Registrar $registrar;
|
protected Integration $config;
|
protected array $allowed;
|
|
public function __construct(string $service_name, ?Registrar $registrar = null) {
|
$this->initAllowed();
|
if (!array_key_exists($service_name, $this->allowed)) {
|
return;
|
}
|
|
$this->service_name = $service_name;
|
if ($registrar) {
|
$this->registrar = $registrar;
|
}
|
|
$this->config = $registrar->getIntegration($service_name);
|
|
add_action('jvb_define_integrations', [$this, 'addIntegrationFields'],20);
|
}
|
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();
|
// 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
|
{
|
$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;
|
}
|
}
|