|
Server : Apache System : Linux s1230 5.15.0-139-generic #149~20.04.1 SMP Tue Jul 14 11:21:49 UTC 2026 x86_64 User : p141464 ( 418825) PHP Version : 7.4.33.12 Disable Function : NONE Directory : /html/relaunch-kmu/wp-content/plugins/real-cookie-banner/inc/rest/ |
Upload File : |
<?php
namespace DevOwl\RealCookieBanner\rest;
use DevOwl\RealCookieBanner\Vendor\MatthiasWeb\Utils\Service;
use DevOwl\RealCookieBanner\base\UtilsProvider;
use DevOwl\RealCookieBanner\Core;
use DevOwl\RealCookieBanner\import\Export;
use DevOwl\RealCookieBanner\import\ExportConsent;
use DevOwl\RealCookieBanner\import\Import as RealCookieBannerImport;
use WP_REST_Request;
use WP_REST_Response;
// @codeCoverageIgnoreStart
\defined('ABSPATH') or die('No script kiddies please!');
// Avoid direct file request
// @codeCoverageIgnoreEnd
/**
* Import / Export API
* @internal
*/
class Import
{
use UtilsProvider;
/**
* C'tor.
*/
private function __construct()
{
// Silence is golden.
}
/**
* Register endpoints.
*/
public function rest_api_init()
{
$namespace = Service::getNamespace($this);
\register_rest_route($namespace, '/import', ['methods' => 'POST', 'callback' => [$this, 'routeImport'], 'permission_callback' => [$this, 'permission_callback'], 'args' => ['json' => ['type' => 'string', 'required' => \true, 'validate_callback' => function ($param) {
return \json_decode($param) !== null;
}], 'cookieGroup' => ['type' => 'number', 'required' => \true], 'cookieStatus' => ['type' => 'enum', 'enum' => RealCookieBannerImport::IMPORT_POST_STATI, 'required' => \true], 'cookieSkipExisting' => ['type' => 'boolean', 'default' => \true], 'blockerStatus' => ['type' => 'enum', 'enum' => RealCookieBannerImport::IMPORT_POST_STATI, 'required' => \true], 'blockerSkipExisting' => ['type' => 'boolean', 'default' => \true], 'tcfVendorConfigurationStatus' => ['type' => 'enum', 'enum' => RealCookieBannerImport::IMPORT_POST_STATI, 'required' => \true]]]);
\register_rest_route($namespace, '/export', ['methods' => 'GET', 'callback' => [$this, 'routeExport'], 'permission_callback' => [$this, 'permission_callback'], 'args' => ['download' => ['type' => 'boolean'], 'settings' => ['type' => 'boolean', 'default' => \true], 'cookieGroups' => ['type' => 'boolean', 'default' => \true], 'cookies' => ['type' => 'boolean', 'default' => \true], 'blocker' => ['type' => 'boolean', 'default' => \true], 'tcfVendorConfigurations' => ['type' => 'boolean', 'default' => \false], 'customizeBanner' => ['type' => 'boolean', 'default' => \true]]]);
\register_rest_route($namespace, '/export/consents', ['methods' => 'GET', 'callback' => [$this, 'routeExportConsents'], 'permission_callback' => [$this, 'permission_callback'], 'args' => ['uuid' => ['type' => 'string'], 'from' => ['type' => 'string', 'validate_callback' => function ($param) {
return \strtotime($param) > 0 || empty($param);
}], 'to' => ['type' => 'string', 'validate_callback' => function ($param) {
return \strtotime($param) > 0 || empty($param);
}]]]);
}
/**
* Check if user is allowed to call this service requests.
*/
public function permission_callback()
{
return \current_user_can(Core::MANAGE_MIN_CAPABILITY);
}
/**
* See API docs.
*
* @param WP_REST_Request $request
*
* @api {post} /real-cookie-banner/v1/import Import settings, cookies, groups, ...
* @apiHeader {string} X-WP-Nonce
* @apiParam {string} json
* @apiParam {boolean} cookieGroup
* @apiParam {string='keep','publish','private','draft'} cookieStatus
* @apiParam {string='keep','publish','private','draft'} blockerStatus
* @apiParam {string='keep','publish','private','draft'} tcfVendorConfigurationStatus
* @apiParam {boolean} [cookieSkipExisting=true]
* @apiParam {boolean} [blockerSkipExisting=true]
* @apiName Import
* @apiGroup Import
* @apiVersion 1.0.0
* @apiPermission manage_options
*/
public function routeImport($request)
{
// Prepare importer
$result = RealCookieBannerImport::instance(\json_decode($request->get_param('json'), ARRAY_A));
$result->setCookieGroup($request->get_param('cookieGroup'));
$result->setCookieStatus($request->get_param('cookieStatus'));
$result->setCookieSkipExisting($request->get_param('cookieSkipExisting'));
$result->setBlockerStatus($request->get_param('blockerStatus'));
$result->setBlockerSkipExisting($request->get_param('blockerSkipExisting'));
$result->setTcfVendorConfigurationStatus($request->get_param('tcfVendorConfigurationStatus'));
$result->import();
return new WP_REST_Response(['messages' => $result->getMessages()]);
}
/**
* See API docs.
*
* @param WP_REST_Request $request
*
* @api {get} /real-cookie-banner/v1/export Export as JSON (for consent export see ExportConsent API!)
* @apiHeader {string} X-WP-Nonce
* @apiParam {boolean} [download=false]
* @apiParam {boolean} [settings=true]
* @apiParam {boolean} [cookieGroups=true]
* @apiParam {boolean} [cookies=true]
* @apiParam {boolean} [blocker=true]
* @apiParam {boolean} [tcfVendorConfigurations=true] Since 2.0.0
* @apiParam {boolean} [customizeBanner=true]
* @apiName Export
* @apiGroup Import
* @apiVersion 1.0.0
* @apiPermission manage_options
*/
public function routeExport($request)
{
global $wpdb;
$result = Export::instance();
if ($request->get_param('settings')) {
$result->appendSettings();
$result->appendBannerLinks();
}
if ($request->get_param('cookieGroups')) {
$result->appendCookieGroups();
}
if ($request->get_param('cookies')) {
$result->appendCookies();
}
if ($request->get_param('blocker')) {
$result->appendBlocker();
}
if ($request->get_param('tcfVendorConfigurations')) {
$result->appendTcfVendorConfigurations();
}
if ($request->get_param('customizeBanner')) {
$result->appendCustomizeBanner();
}
$jsonResult = $result->finish();
// Download instead of output
if ($request->get_param('download')) {
$json = \json_encode($jsonResult);
\header('Content-Disposition: attachment; filename="rcb-export-' . \md5($json) . '.json";');
// Not HTML: JSON attachment body (escaping would corrupt the file).
\file_put_contents('php://output', $json);
// Close (wp_die could not be used here because it generates unwanted output)
$wpdb->close();
die;
}
return new WP_REST_Response($jsonResult);
}
/**
* See API docs.
*
* @param WP_REST_Request $request
*
* @api {get} /real-cookie-banner/v1/export/consents Export consents as CSV
* @apiHeader {string} X-WP-Nonce
* @apiParam {string} [uuid]
* @apiParam {string} [from]
* @apiParam {string} [to]
* @apiName ExportConsents
* @apiGroup Import
* @apiVersion 1.0.0
* @apiPermission manage_options
*/
public function routeExportConsents($request)
{
$uuid = $request->get_param('uuid');
$from = $request->get_param('from');
$to = $request->get_param('to');
ExportConsent::instance()->downloadCsv($uuid, $from, $to);
}
/**
* New instance.
*/
public static function instance()
{
return new \DevOwl\RealCookieBanner\rest\Import();
}
}