/** * Save the API connection of a service and retrieve account settings markup. * * Called via the fl_ajax_fl_builder_connect_service action. * * @since 1.5.4 * @return string The JSON encoded response. */ public static function connect_service() { $saved_services = FLBuilderModel::get_services(); $post_data = FLBuilderModel::get_post_data(); $response = array('error' => false, 'html' => ''); // Validate the service data. if (!isset($post_data['service']) || empty($post_data['service'])) { $response['error'] = _x('Error: Missing service type.', 'Third party service such as MailChimp.', 'fl-builder'); } else { if (!isset($post_data['fields']) || 0 === count($post_data['fields'])) { $response['error'] = _x('Error: Missing service data.', 'Connection data such as an API key.', 'fl-builder'); } else { if (!isset($post_data['fields']['service_account']) || empty($post_data['fields']['service_account'])) { $response['error'] = _x('Error: Missing account name.', 'Account name for a third party service such as MailChimp.', 'fl-builder'); } } } // Get the service data. $service = $post_data['service']; $service_account = $post_data['fields']['service_account']; // Does this account already exist? if (isset($saved_services[$service][$service_account])) { $response['error'] = _x('Error: An account with that name already exists.', 'Account name for a third party service such as MailChimp.', 'fl-builder'); } // Try to connect to the service. if (!$response['error']) { $instance = self::get_service_instance($service); $connection = $instance->connect($post_data['fields']); if ($connection['error']) { $response['error'] = $connection['error']; } else { FLBuilderModel::update_services($service, $service_account, $connection['data']); $response['html'] = self::render_account_settings($service, $service_account); } } // Return the response. echo json_encode($response); die; }