HEX
Server: LiteSpeed
System: Linux premium263.web-hosting.com 4.18.0-553.50.1.lve.el8.x86_64 #1 SMP Thu Apr 17 19:10:24 UTC 2025 x86_64
User: eastcjee (525)
PHP: 8.2.31
Disabled: NONE
Upload Files
File: /home/eastcjee/londonribeyesteak.co.uk/wp-content/plugins/members/admin/class-role-export.php
<?php
/**
 * Handles role export.
 *
 * @package    Members
 * @subpackage Admin
 * @author     The MemberPress Team
 * @copyright  Copyright (c) 2009 - 2018, The MemberPress Team
 * @link       https://members-plugin.com/
 * @license    http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
 */
namespace Members\Admin;

defined('ABSPATH') || exit;

/**
 * Class that handles exporting roles and settings to a JSON file.
 *
 * @since  3.3.0
 * @access public
 */
final class Role_Export {

	/**
	 * Schema version written to the export JSON `meta.schema_version` field.
	 *
	 * @since 3.4.0
	 */
	const SCHEMA_VERSION = 1;

	/**
	 * Holds the instances of this class.
	 *
	 * @since  3.3.0
	 * @access private
	 * @var    object
	 */
	private static $instance;

	/**
	 * Sets up initial actions.
	 *
	 * @since  3.3.0
	 * @access public
	 * @return void
	 */
	public function __construct() {

		add_action( 'admin_post_members_export_roles', array( $this, 'handle_export' ) );
	}

	/**
	 * Handles the "Export All" request via the header button.
	 *
	 * @since  3.3.0
	 * @access public
	 * @return void
	 */
	public function handle_export() {

		check_admin_referer( 'members_export_roles' );

		if ( ! current_user_can( 'list_roles' ) ) {
			wp_die( esc_html__( 'You do not have permission to export roles.', 'members' ) );
		}

		$this->generate_export();
	}

	/**
	 * Handles a selective bulk export. Called from Roles::load().
	 *
	 * @since  3.4.0
	 * @access public
	 * @param  array  $role_slugs  Array of sanitized role slugs to export.
	 * @return void
	 */
	public function handle_selective_export( $role_slugs ) {

		if ( ! current_user_can( 'list_roles' ) ) {
			wp_die( esc_html__( 'You do not have permission to export roles.', 'members' ) );
		}

		$this->generate_export( $role_slugs );
	}

	/**
	 * Generates and sends the JSON export file as a download.
	 *
	 * @since  3.4.0
	 * @access private
	 * @param  array  $role_slugs  Array of role slugs to export. Empty means all roles.
	 * @return void
	 */
	private function generate_export( $role_slugs = array() ) {

		global $wp_roles;

		// Build roles array.
		$roles = array();

		foreach ( $wp_roles->roles as $slug => $role_data ) {

			if ( ! empty( $role_slugs ) && ! in_array( $slug, $role_slugs, true ) ) {
				continue;
			}

			$roles[ $slug ] = array(
				'name'         => $slug,
				'label'        => $role_data['name'],
				'capabilities' => $role_data['capabilities'],
			);
		}

		$file_headers = get_file_data( members_plugin()->dir . 'members.php', array( 'Version' => 'Version' ) );

		// Build export data. Only include settings for full (non-selective) exports.
		$data = array(
			'meta' => array(
				'plugin'         => 'members',
				'schema_version' => self::SCHEMA_VERSION,
				'version'        => ! empty( $file_headers['Version'] ) ? $file_headers['Version'] : '',
				'export_date'    => gmdate( 'c' ),
				'site_url'       => site_url(),
				'wp_version'     => get_bloginfo( 'version' ),
			),
			'roles'    => $roles,
			'settings' => empty( $role_slugs ) ? get_option( 'members_settings', members_get_default_settings() ) : array(),
		);

		// Send file download.
		$filename = 'members-roles-export-' . gmdate( 'Y-m-d-His' ) . '.json';

		nocache_headers();
		header( 'Content-Type: application/json; charset=utf-8' );
		header( 'Content-Disposition: attachment; filename="' . $filename . '"' );

		echo wp_json_encode( $data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE );
		exit;
	}

	/**
	 * Returns the instance.
	 *
	 * @since  3.3.0
	 * @access public
	 * @return object
	 */
	public static function get_instance() {

		if ( ! self::$instance )
			self::$instance = new self;

		return self::$instance;
	}
}

Role_Export::get_instance();