Sindbad~EG File Manager
<?php
namespace FluentForm\App\Http\Controllers;
use FluentForm\App\Helpers\IntegrationManagerHelper;
use FluentForm\Framework\Foundation\App;
use FluentForm\Framework\Helpers\ArrayHelper;
abstract class IntegrationManagerController extends IntegrationManagerHelper
{
protected $app = null;
protected $subscriber = null;
protected $title = '';
protected $description = '';
protected $integrationKey = '';
protected $optionKey = '';
protected $settingsKey = '';
protected $priority = 11;
public $logo = '';
public $hasGlobalMenu = true;
public $category = 'crm';
public $disableGlobalSettings = 'no';
public function __construct($app, $title, $integrationKey, $optionKey, $settingsKey, $priority = 11)
{
if (!$app) {
$app = App::getInstance();
}
$this->app = $app;
$this->title = $title;
$this->integrationKey = $integrationKey;
$this->optionKey = $optionKey;
$this->settingsKey = $settingsKey;
$this->priority = $priority;
parent::__construct(
$this->settingsKey, $app->request->get('form_id', false), true
);
}
public function registerAdminHooks()
{
$isEnabled = $this->isEnabled();
add_filter('fluentform/global_addons', function ($addons) use ($isEnabled) {
$addons[$this->integrationKey] = [
'title' => $this->title,
'category' => $this->category,
'disable_global_settings' => $this->disableGlobalSettings,
'description' => $this->description,
'config_url' => ('yes' != $this->disableGlobalSettings) ? admin_url('admin.php?page=fluent_forms_settings#general-' . $this->integrationKey . '-settings') : '',
'logo' => $this->logo,
'enabled' => ($isEnabled) ? 'yes' : 'no',
];
return $addons;
}, $this->priority, 1);
if (!$isEnabled) {
return;
}
$this->registerNotificationHooks();
// Global Settings Here
if ($this->hasGlobalMenu) {
add_filter('fluentform/global_settings_components', [$this, 'addGlobalMenu']);
add_filter('fluentform/global_integration_settings_' . $this->integrationKey, [$this, 'getGlobalSettings'],
$this->priority, 1);
add_filter('fluentform/global_integration_fields_' . $this->integrationKey, [$this, 'getGlobalFields'],
$this->priority, 1);
add_action('fluentform/save_global_integration_settings_' . $this->integrationKey,
[$this, 'saveGlobalSettings'], $this->priority, 1);
}
add_filter('fluentform/global_notification_types', [$this, 'addNotificationType'], $this->priority);
add_filter('fluentform/get_available_form_integrations', [$this, 'pushIntegration'], $this->priority, 2);
add_filter('fluentform/global_notification_feed_' . $this->settingsKey, [$this, 'setFeedAttributes'], 10, 2);
add_filter('fluentform/get_integration_defaults_' . $this->integrationKey, [$this, 'getIntegrationDefaults'],
10, 2);
add_filter('fluentform/get_integration_settings_fields_' . $this->integrationKey, [$this, 'getSettingsFields'],
10, 2);
add_filter('fluentform/get_integration_merge_fields_' . $this->integrationKey, [$this, 'getMergeFields'], 10,
3);
add_filter('fluentform/save_integration_settings_' . $this->integrationKey, [$this, 'setMetaKey'], 10, 2);
add_filter('fluentform/get_integration_values_' . $this->integrationKey, [$this, 'prepareIntegrationFeed'], 10,
3);
}
public function registerNotificationHooks()
{
if ($this->isConfigured()) {
add_filter('fluentform/global_notification_active_types', [$this, 'addActiveNotificationType'], $this->priority);
add_action('fluentform/integration_notify_' . $this->settingsKey, [$this, 'notify'], $this->priority, 4);
}
}
public function notify($feed, $formData, $entry, $form)
{
// Each integration have to implement this notify method
return;
}
public function addGlobalMenu($setting)
{
$setting[$this->integrationKey] = [
'hash' => 'general-' . $this->integrationKey . '-settings',
'component' => 'general-integration-settings',
'settings_key' => $this->integrationKey,
'title' => $this->title,
];
return $setting;
}
public function addNotificationType($types)
{
$types[] = $this->settingsKey;
return $types;
}
public function addActiveNotificationType($types)
{
$types[$this->settingsKey] = $this->integrationKey;
return $types;
}
public function getGlobalSettings($settings)
{
return $settings;
}
public function saveGlobalSettings($settings)
{
return $settings;
}
public function getGlobalFields($fields)
{
return $fields;
}
public function setMetaKey($data)
{
$data['meta_key'] = $this->settingsKey;
return $data;
}
public function prepareIntegrationFeed($setting, $feed, $formId)
{
$defaults = $this->getIntegrationDefaults([], $formId);
foreach ($setting as $settingKey => $settingValue) {
if ('true' == $settingValue) {
$setting[$settingKey] = true;
} elseif ('false' == $settingValue) {
$setting[$settingKey] = false;
} elseif ('conditionals' == $settingKey) {
if ('true' == $settingValue['status']) {
$settingValue['status'] = true;
} elseif ('false' == $settingValue['status']) {
$settingValue['status'] = false;
}
$setting['conditionals'] = $settingValue;
}
}
if (!empty($setting['list_id'])) {
$setting['list_id'] = (string)$setting['list_id'];
}
return wp_parse_args($setting, $defaults);
}
abstract public function getIntegrationDefaults($settings, $formId);
abstract public function pushIntegration($integrations, $formId);
abstract public function getSettingsFields($settings, $formId);
abstract public function getMergeFields($list, $listId, $formId);
public function setFeedAttributes($feed, $formId)
{
$feed['provider'] = $this->integrationKey;
$feed['provider_logo'] = $this->logo;
return $feed;
}
public function isConfigured()
{
$globalStatus = $this->getApiSettings();
return $globalStatus && $globalStatus['status'];
}
public function isEnabled()
{
return (new \FluentForm\App\Services\Integrations\GlobalIntegrationService())->isEnabled($this->integrationKey);
}
public function getApiSettings()
{
$settings = get_option($this->optionKey);
if (!$settings || empty($settings['status'])) {
$settings = [
'apiKey' => '',
'status' => false,
];
}
return $settings;
}
protected function getSelectedTagIds(
$data,
$inputData,
$simpleKey = 'tag_ids',
$routingId = 'tag_ids_selection_type',
$routersKey = 'tag_routers'
) {
$routing = ArrayHelper::get($data, $routingId, 'simple');
if (!$routing || 'simple' == $routing) {
return ArrayHelper::get($data, $simpleKey, []);
}
$routers = ArrayHelper::get($data, $routersKey);
if (empty($routers)) {
return [];
}
return $this->evaluateRoutings($routers, $inputData);
}
protected function evaluateRoutings($routings, $inputData)
{
$validInputs = [];
foreach ($routings as $routing) {
$inputValue = ArrayHelper::get($routing, 'input_value');
if (!$inputValue) {
continue;
}
$condition = [
'conditionals' => [
'status' => true,
'is_test' => true,
'type' => 'any',
'conditions' => [
$routing,
],
],
];
if (\FluentForm\App\Services\ConditionAssesor::evaluate($condition, $inputData)) {
$validInputs[] = $inputValue;
}
}
return $validInputs;
}
}
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists