/home/bonphmya/liebeszauber-magie.de/wp-content/plugins/aioseo-index-now/app/Api/Settings.php
<?php
namespace AIOSEO\Plugin\Addon\IndexNow\Api;

// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

/**
 * Handles all setting related endpoints.
 *
 * @since 1.0.0
 */
class Settings {
	/**
	 * Save options from the front-end.
	 *
	 * @NOTE: This function is run via a special hook inside the main settings API class.
	 *
	 * @since 1.0.0
	 *
	 * @param  \WP_REST_Request $request The request
	 * @return \WP_REST_Request          The request.
	 */
	public static function saveChanges( $request ) {
		$body    = $request->get_json_params();
		$options = ! empty( $body['indexNowOptions'] ) ? $body['indexNowOptions'] : [];

		if ( empty( $options ) ) {
			return;
		}

		aioseoIndexNow()->options->sanitizeAndSave( $options );

		return $request;
	}

	/**
	 * Export settings.
	 *
	 * @since 1.0.0
	 *
	 * @param  \WP_REST_Request  $request  The REST Request.
	 * @param  \WP_REST_Response $response The parent response.
	 * @return \WP_REST_Response           The response.
	 */
	public static function exportSettings( $request, $response ) {
		if ( ! aioseo()->access->hasCapability( 'aioseo_page_general_settings' ) ) {
			return $response;
		}

		$body     = $request->get_json_params();
		$settings = ! empty( $body['settings'] ) ? $body['settings'] : [];

		if ( in_array( 'webmasterTools', $settings, true ) ) {
			$response->data['settings']['settings']['webmasterTools']['indexNow'] = aioseoIndexNow()->options->all();
		}

		return $response;
	}

	/**
	 * Imports settings.
	 *
	 * @since 1.0.0
	 *
	 * @param  \WP_REST_Request  $request  The REST Request.
	 * @param  \WP_REST_Response $response The REST Request.
	 * @return \WP_REST_Response           The response.
	 */
	public static function importSettings( $request, $response ) {
		if ( ! aioseo()->access->hasCapability( 'aioseo_page_general_settings' ) ) {
			return $response;
		}

		$file = $request->get_file_params()['file'];
		if (
			empty( $file['tmp_name'] ) ||
			empty( $file['type'] ) ||
			'application/json' !== $file['type']
		) {
			return $response;
		}

		$contents = aioseo()->core->fs->getContents( $file['tmp_name'] );

		// Since this could be any file, we need to pretend like every variable here is missing.
		$contents = json_decode( $contents, true );
		if ( empty( $contents ) ) {
			return $response;
		}

		if ( isset( $contents['settings']['webmasterTools']['indexNow'] ) ) {
			aioseoIndexNow()->options->sanitizeAndSave( $contents['settings']['webmasterTools']['indexNow'] );
		}

		return $response;
	}

	/**
	 * Reset settings.
	 *
	 * @since 1.0.0
	 *
	 * @param  \WP_REST_Request  $request  The REST Request.
	 * @param  \WP_REST_Response $response The REST Request.
	 * @return \WP_REST_Response           The response.
	 */
	public static function resetSettings( $request, $response ) {
		if ( ! aioseo()->access->hasCapability( 'aioseo_link_assistant_settings' ) ) {
			return $response;
		}

		$body     = $request->get_json_params();
		$settings = ! empty( $body['settings'] ) ? $body['settings'] : [];

		foreach ( $settings as $setting ) {
			switch ( $setting ) {
				case 'webmasterTools':
					aioseoIndexNow()->options->reset();
					break;
			}
		}

		return $response;
	}

	/**
	 * Generate a new API key.
	 *
	 * @since 1.0.0
	 *
	 * @return \WP_REST_Response The response.
	 */
	public static function generateApiKey() {
		// First generate the key.
		$apiKey = aioseoIndexNow()->helpers->generateApiKey();

		// Now, let's update the option.
		aioseoIndexNow()->options->indexNow->apiKey = $apiKey;

		return new \WP_REST_Response( [
			'success' => true,
			'key'     => $apiKey
		], 200 );
	}

	/**
	 * Get an API key or generate one if missing.
	 *
	 * @since 1.0.0
	 *
	 * @return \WP_REST_Response The response.
	 */
	public static function getApiKey() {
		$apiKey = aioseoIndexNow()->options->indexNow->apiKey;
		if ( empty( $apiKey ) ) {
			$apiKey = aioseoIndexNow()->helpers->generateApiKey();

			// Now set the key.
			aioseoIndexNow()->options->indexNow->apiKey = $apiKey;
		}

		return new \WP_REST_Response( [
			'success' => true,
			'key'     => $apiKey
		], 200 );
	}
}