HEX
Server: Apache
System: Linux uws7-179.cafe24.com 3.10.0-1160.119.1p.el7.x86_64 #1 SMP Thu Sep 11 14:15:01 KST 2025 x86_64
User: medikors (1589)
PHP: 7.3.1p1
Disabled: mysql_pconnect
Upload Files
File: /medikors/www/wp-content/plugins/buttonizer-multifunctional-button/app/Api/Buttons/ApiButtons.php
<?php
/* 
 * SOFTWARE LICENSE INFORMATION
 * 
 * Copyright (c) 2017 Buttonizer, all rights reserved.
 * 
 * This file is part of Buttonizer
 * 
 * For detailed information regarding to the licensing of
 * this software, please review the license.txt or visit:
 * https://buttonizer.pro/license/
 */

namespace Buttonizer\Api\Buttons;

use Buttonizer\Utils\Maintain;

/**
 * Buttons API
 * 
 * @endpoint /wp-json/buttonizer/buttons
 * @methods GET POST
 */
class ApiButtons {
    private $_settings = null;

    /**
     * Register route
     */
    public function registerRoute() {
        register_rest_route('buttonizer', '/buttons', [
            [
                'methods'  => ['GET'],
                'args' => [
                    'qpu' => [
                        'required' => false,
                        "type" => "number"
                    ],
                    'preview' => [
                        'required' => false,
                        "type" => "boolean"
                    ],
                    'data' => [
                        'required' => true,
                        "type" => "object"
                    ],
                ],
                'callback' => [$this, 'get'],
                'permission_callback' => '__return_true'
            ],
            [
                'methods'  => ['POST'],
                'args' => [
                    'data' => [
                        'required' => true,
                        'type' => "array",
                        'items' => [
                            'type' => 'object'
                        ]
                    ],
                    'nonce' => [
                        'validate_callback' => function($value) {
                            return wp_verify_nonce($value, 'wp_rest');
                        },        
                        'required' => true
                    ],        
                ],
                'callback' => [$this, 'post'],
                'permission_callback' => function() {
                    return Maintain::hasPermission();
                }
            ]
        ]);
    }

    /**
     * Get frontend data
     */
    public function get($isNoAjaxRequest = false) {
        // Check if it's not in preview so it won't migrate twice in the dashboard.
        if(!isset($_GET['preview']) || (isset($_GET['preview']) && $_GET['preview'] != true)) {
            $this->_settings = get_option("buttonizer_settings");
            
            // Migrate if we need to do that
            if(!isset($this->_settings['migration_version']))
            {
                (new \Buttonizer\Utils\Update())->run();
            }
            else if ($this->_settings['migration_version'] !== BUTTONIZER_LAST_MIGRATION) {
                (new \Buttonizer\Utils\Update())->selfMigrate($this->_settings['migration_version']);
            }
        }

        // Allow XHR requests from subdomains
        if(!$isNoAjaxRequest && isset($this->_settings['allow_subdomains']) && $this->_settings['allow_subdomains'] == 'true' && isset($_SERVER['HTTP_ORIGIN'])) {
            $siteUrl = parse_url(get_site_url());
            $currentUrl = parse_url($_SERVER['HTTP_ORIGIN']);

            if(isset($siteUrl['host']) && isset($currentUrl['host']) && $siteUrl['host'] === substr($currentUrl['host'], strlen($currentUrl['host']) - strlen($siteUrl['host']))) {
                header("Access-Control-Allow-Origin: " . $_SERVER['HTTP_ORIGIN']);
            }
        }

        return [
            'plugin' => 'buttonizer',
            'status' => 'success',
            'result' => (new \Buttonizer\Frontend\Buttonizer($isNoAjaxRequest))->returnArray(),
            'warning' => \Buttonizer\Frontend\Buttonizer::getLogs(),
            'premium' => ButtonizerLicense()->can_use_premium_code()
        ];
    }

    /**
     * Save dashboard button data 
     */
    public function post($request) {
        $data = json_decode($request->get_body(), true);

        // Data read correctly?
        if(!json_last_error() === JSON_ERROR_NONE) {
            return new \WP_Error('rest_invalid_data', 'The data couldn\'t be converted.', [ 
                'status' => 400 
            ]);
        }

        // Register settings
        register_setting('buttonizer', 'buttonizer_buttons');
        register_setting('buttonizer', 'buttonizer_has_changes');

        // Save buttons
        update_option('buttonizer_buttons', $data['data']);
        update_option('buttonizer_has_changes', true);

        return [
            'status' => 'success'
        ];
    }
}