HEX
Server: Apache
System: Linux webm013.cluster123.gra.hosting.ovh.net 6.18.42-ovh-vps-grsec-zfs+ #1 SMP PREEMPT_DYNAMIC Wed Aug 5 15:59:48 CEST 2026 x86_64
User: lesanew (165608)
PHP: 8.3.31
Disabled: _dyuweyrj4,_dyuweyrj4r,dl
Upload Files
File: /home/lesanew/www/wp-content/plugins/neobeat-core/inc/core-dashboard/core-dashboard.php
<?php

if ( ! class_exists( 'NeoBeatCoreDashboard' ) ) {
	class NeoBeatCoreDashboard {
		private static $instance;

		private $sub_pages = array();
		private $validation_url = 'https://api.qodeinteractive.com/purchase-code-validation.php';
		public $licence_field = 'neobeat_purchase_info';
		public $import_field = 'neobeat_import_params';

		function __construct() {
			// Order of hooks is important, dashboard_add_page method needs to be at the end
			add_action( 'admin_menu', array( &$this, 'register_sub_pages' ) );
			add_action( 'wp_enqueue_scripts', array( &$this, 'enqueue_styles' ) );
			add_action( 'admin_menu', array( &$this, 'dashboard_add_page' ) );
			
			add_action( 'neobeat_core_action_on_deactivation', array( &$this, 'remove_redirect' ) );

			if ( get_option( 'neobeat_core_activated_first_time' ) === 'yes' ) {
				add_action( 'neobeat_core_action_plugin_loaded', array( &$this, 'page_welcome_redirect' ) );
			}
			
			add_action( 'after_setup_theme', array( $this, 'load_files' ) );
		}
		
		public static function get_instance() {
			
			if ( is_null( self::$instance ) ) {
				self::$instance = new self();
			}
			
			return self::$instance;
		}

		public function set_sub_pages( NeoBeatCoreSubPage $sub_page ) {
			$this->sub_pages[ $sub_page->get_base() ] = $sub_page;
		}

		function get_sub_pages() {
			return $this->sub_pages;
		}
		
		function load_files() {
			include_once NEOBEAT_CORE_INC_PATH . '/core-dashboard/rest/include.php';
			include_once NEOBEAT_CORE_INC_PATH . '/core-dashboard/registration-rest.php';
			include_once NEOBEAT_CORE_INC_PATH . '/core-dashboard/theme-validation.php';
			include_once NEOBEAT_CORE_INC_PATH . '/core-dashboard/sub-pages/sub-page.php';

			foreach ( glob( NEOBEAT_CORE_INC_PATH . '/core-dashboard/sub-pages/*/load.php' ) as $subpages ) {
				include_once $subpages;
			}
		}

		function dashboard_add_page() {

			$page = add_menu_page(
				esc_html__( 'NeoBeat Dashboard', 'neobeat-core' ),
				esc_html__( 'NeoBeat Dashboard', 'neobeat-core' ),
				'administrator',
				'neobeat_core_dashboard',
				array( &$this, 'load_dashboard_template' ),
				NEOBEAT_CORE_INC_URL_PATH . '/core-dashboard/assets/img/admin-logo-icon.png',
				998
			);

			add_action( 'load-' . $page, array( &$this, 'load_admin_css' ) );
			
			foreach ( $this->get_sub_pages() as $sub_page => $sub_page_value ) {
				$sub_page_instance = add_submenu_page(
					'neobeat_core_dashboard',
					$sub_page_value->get_title(),
					$sub_page_value->get_title(),
					'administrator',
					$sub_page,
					array( $sub_page_value, 'render' )
				);

				add_action( 'load-' . $sub_page_instance, array( &$this, 'load_admin_css' ) );
			}
		}

		function load_dashboard_template() {
			$params                 = array();
			$params['theme_name']   = qode_framework_is_installed( 'theme' ) ? esc_html( wp_get_theme()->get( 'Name' ) ) : esc_html__( 'Qode Interactive', 'neobeat-core' );
			$params['system_info']  = NeoBeatCoreSystemInfoPage::get_instance()->get_system_info();
			$params['info']         = $this->purchased_code_info();
			$params['is_activated'] = ! empty( $this->get_purchased_code() );

			neobeat_core_template_part( 'core-dashboard', 'templates/core-dashboard', '', $params );
		}
		
		public function register_sub_pages() {
			$sub_pages = apply_filters( 'neobeat_core_filter_add_welcome_sub_page', $icons = array() );
			
			if ( ! empty( $sub_pages ) ) {
				foreach ( $sub_pages as $sub_page ) {
					$this->set_sub_pages( new $sub_page() );
				}
			}
		}

		function load_admin_css() {
			add_action( 'admin_enqueue_scripts', array( &$this, 'enqueue_styles' ) );
			add_action( 'admin_enqueue_scripts', array( &$this, 'enqueue_scripts' ) );
		}

		function enqueue_styles() {
			wp_enqueue_style( 'select2', QODE_FRAMEWORK_INC_URL_PATH . '/common/assets/plugins/select2/select2.min.css' );
			wp_enqueue_style( 'neobeat-core-dashboard-style', NEOBEAT_CORE_INC_URL_PATH . '/core-dashboard/assets/css/core-dashboard.min.css' );
		}

		function enqueue_scripts() {
			wp_enqueue_script( 'select2', QODE_FRAMEWORK_INC_URL_PATH . '/common/assets/plugins/select2/select2.full.min.js', array(), false, true );
			wp_enqueue_script( 'neobeat-core-dashboard-script', NEOBEAT_CORE_INC_URL_PATH . '/core-dashboard/assets/js/modules/core-dashboard.js', array(), false, true );
			$global_variables = apply_filters( 'neobeat_core_filter_dashboard_js_global_variables', array() );

			wp_localize_script( 'neobeat-core-dashboard-script', 'qodefCoreDashboardGlobalVars', array(
				'vars' => $global_variables,
			) );
		}

		function remove_redirect() {
			delete_transient( '_neobeat_core_welcome_page_redirect' );
		}

		function page_welcome_redirect() {
			$redirect = get_transient( '_neobeat_core_welcome_page_redirect' );
			
			if ( empty( $redirect ) ) {
				set_transient( '_neobeat_core_welcome_page_redirect', 1, 31536000 );
				
				wp_safe_redirect( add_query_arg( array( 'page' => 'neobeat_core_dashboard' ), esc_url( admin_url( 'admin.php' ) ) ) );
			}
		}

		function theme_validation() {
			$is_theme_active = qode_framework_is_installed( 'theme' );
			qode_framework_get_ajax_status( 'success', '', array( 'is_theme_active' => $is_theme_active ) );
		}

		function purchase_code_registration() {

			if ( ! isset( $_POST ) || empty( $_POST ) ) {
				return esc_html__( 'All fields are empty', 'neobeat-core' );
			} else {
				switch ( $_POST['options']['action'] ):
					case 'register':
						$this->register_purchase_code( $_POST['options']['post'] );
						break;
					case 'deregister':
						$this->deregister_purchase_code();
						break;
				endswitch;
			}

			wp_die();
		}

		function register_purchase_code() {
			$data        = array();
			$data_string = $_POST['options']['post'];
			parse_str( $data_string, $data );

			if ( empty( $data['purchase_code'] ) || empty( $data['email'] ) ) {
				qode_framework_get_ajax_status( 'error', esc_html__( 'Purchase Code and Email are empty', 'neobeat-core' ), array(
					'purchase_code' => false,
					'email'         => false
				) );
			} elseif ( empty( $data['purchase_code'] ) ) {
				qode_framework_get_ajax_status( 'error', esc_html__( 'Purchase Code is empty', 'neobeat-core' ), array( 'purchase_code' => false ) );
			} elseif ( empty( $data['email'] ) ) {
				qode_framework_get_ajax_status( 'error', esc_html__( 'Email is empty', 'neobeat-core' ), array( 'email' => false ) );
			}

			$url = add_query_arg( array(
				'purchase_code' => rtrim($data['purchase_code']),
				'email'         => $data['email'],
				'profile'       => NEOBEAT_CORE_PROFILE_SLUG . '-themes',
				'demo_url'      => esc_url( get_site_url() ),
				'action'        => 'register'
			), $this->validation_url );

			$json = $this->api_connection( $url );

			if ( isset( $json['success'] ) && $json['success'] ) {

				update_option( $this->licence_field, $json['data']['validation'] );
				update_option( $this->import_field, $json['data']['import'] );
				qode_framework_get_ajax_status( 'success', $this->response_codes( $json['response_code'] ) );

			} elseif ( isset( $json['message'] ) && ! $json['success'] && ( isset( $json['data']['error'] ) && $json['data']['error'] == 404 ) ) {

				qode_framework_get_ajax_status( 'error', $this->response_codes( $json['response_code'] ), array( 'purchase_code' => false ) );

			} elseif ( isset( $json['message'] ) && ! $json['success'] && ( isset( $json['data']['error'] ) && $json['data']['error'] == 'used' ) ) {

				qode_framework_get_ajax_status( 'error', $this->response_codes( $json['response_code'], $json['data'] ), array( 'already_used' => true ) );

			} elseif ( isset( $json['message'] ) && ! $json['success'] ) {

				qode_framework_get_ajax_status( 'error', $this->response_codes( $json['response_code'] ) );
			}
		}

		function deregister_purchase_code() {
			$code = $this->get_purchased_code();

			$url = add_query_arg( array(
				'purchase_code' => $code,
				'action'        => 'deregister',
				'profile'       => NEOBEAT_CORE_PROFILE_SLUG . '-themes',
			), $this->validation_url );
			$json = $this->api_connection( $url );

			if ( $json['success'] ) {
				delete_option( $this->licence_field );
				delete_option( $this->import_field );
				qode_framework_get_ajax_status( 'success', $this->response_codes( $json['response_code'] ) );
			} else {
				qode_framework_get_ajax_status( 'error', $this->response_codes( $json['response_code'] ) );
			}
		}

		function check_purchase_code( $demo ) {
			$code = $this->get_purchased_code();

			$url = add_query_arg( array(
				'purchase_code' => $code,
				'action'        => 'check',
				'profile'       => NEOBEAT_CORE_PROFILE_SLUG . '-themes',
				'demo'          => $demo
			), $this->validation_url );

			$json = $this->api_connection( $url );

			if ( $json['success'] ) {
				return true;
			} else {
				return false;
			}
		}

		function get_purchased_code_data() {
			return get_option( $this->licence_field );
		}

		function purchased_code_info() {
			$info = $this->get_purchased_code_data();

			if ( $info && ! empty( $info ) ) {
				return $info;
			} else {
				return false;
			}
		}

		function get_purchased_code() {
			$info = $this->purchased_code_info();

			if ( is_array( $info ) && isset( $info['purchase_code'] ) ) {
				return $info['purchase_code'];
			}

			return '';
		}

		function get_code() {
			$code = $this->get_purchased_code();
			if ( empty( $code ) && ( in_array( getenv( 'REMOTE_ADDR' ), array( '127.0.0.1', '::1' ), true ) || strpos( getenv( 'HTTP_HOST' ), 'qodeinteractive' ) !== false ) ) {
				$code = true;
			}
			return $code;
		}

		public function is_theme_registered() {
			$code = $this->get_code();
			return qode_framework_is_installed('theme') && $code;
		}

		function get_import_params() {
			$params = get_option( $this->import_field );

			if ( is_array( $params ) && count( $params ) > 0 ) {
				return $params;
			}

			return false;
		}

		function api_connection( $url ) {
			$response = wp_remote_get(
				$url,
				array(
					'user-agent' => 'WordPress/' . get_bloginfo( 'version' ) . '; ' . esc_url( home_url( '/' ) ),
					'timeout'    => 30
				)
			);

			if ( is_wp_error( $response ) ) {
				return $response;
			}

			$response_code = wp_remote_retrieve_response_code( $response );
			if ( 200 !== intval( $response_code ) ) {
				return new WP_Error( 'bad_request', esc_html__( 'Bad request', 'neobeat-core' ) );
			}

			$json = json_decode( wp_remote_retrieve_body( $response ), true );

			if ( empty( $json ) || ! is_array( $json ) ) {
				return new WP_Error( 'invalid_response', esc_html__( 'Invalid Response', 'neobeat-core' ) );
			}

			return $json;
		}

		function response_codes( $code, $data = array() ) {

			$message = '';

			switch ( $code ):

				case 200:
					$message = esc_html__( 'Failed to validate code due to an error', 'neobeat-core' );
					break;
				case 400:
					$message = esc_html__( 'Parameter or argument in the request was invalid', 'neobeat-core' );
					break;
				case 401:
					$message = esc_html__( 'The authorization header is missing. Verify that your code is correct.', 'neobeat-core' );
					break;
				case 403:
					$message = esc_html__( 'Personal token is incorrect or does not have the required permission(s)', 'neobeat-core' );
					break;
				case 404:
					$message = esc_html__( 'The purchase code is invalid', 'neobeat-core' );
					break;
				case 601:
					$message = esc_html__( 'You successfully activated theme', 'neobeat-core' );
					break;
				case 602:
					$message = esc_html__( 'Code is valid', 'neobeat-core' );
					break;
				case 603:
					$message = esc_html__( 'You successfully added demo', 'neobeat-core' );
					break;
				case 604:
					$message = esc_html__( 'You successfully deregister theme', 'neobeat-core' );
					break;
				case 650:
					$registered_url = '';
					if ( ! empty( $data ) && isset( $data['registered_url'] ) && ! empty( $data['registered_url'] ) ) {
						$registered_url = ' - ' . esc_url( $data['registered_url'] );
					}
					$message = sprintf(
						esc_html__( 'This code was already used to register another domain%s. Please deregister your code there so that you can use it for registering here.', 'neobeat-core' ),
						$registered_url
					);
					break;
				case 651:
					$message = esc_html__( 'Error occurred during activation', 'neobeat-core' );
					break;
				case 652:
					$message = esc_html__( 'Code is invalid', 'neobeat-core' );
					break;
				case 653:
					$message = esc_html__( 'Error occurred during adding', 'neobeat-core' );
					break;
				case 654:
					$message = esc_html__( 'Error occurred during deactivation', 'neobeat-core' );
					break;
			endswitch;

			return $message;
		}
	}
	
	NeoBeatCoreDashboard::get_instance();
}