HEX
Server: Apache/2
System: Linux vpslll9m.sdns.vn 4.18.0-553.22.1.el8_10.x86_64 #1 SMP Tue Sep 24 05:16:59 EDT 2024 x86_64
User: thuexe247c (1044)
PHP: 7.4.33
Disabled: exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Upload Files
File: /home/thuexe247c/public_html/wp-content/plugins/webmaster-user-role/includes/module-woocommerce.php
<?php
class SCD_WooCommerce extends SCD_Base_Module {

	public $plugin;

	function __construct( $plugin ) {
		$this->plugin = $plugin;
		$this->hooks();
	}

	/**
	 * Register hooks
	 */
	private function hooks() {
		if ( empty( $this->is_active() ) ) {
			return;
		}

		/**
		 * Add module section to schema
		 */
		add_filter( 'simple_client_dashboard/config/sections', array( $this, 'settings_section' ) );

		if ( $this->should_filter_capabilities() ) {
			add_filter( 'td_webmaster_capabilities', array( $this, 'capabilities' ) );
		}

		if ( $this->should_register_settings_access_hooks() ) {
			$this->register_settings_access_hooks();
		}
	}

	/**
	 * Register role related hooks
	 */
	private function register_settings_access_hooks() {
		add_action( 'wp_user_dashboard_setup', array( $this, 'woocommerce_hide_orders_widget' ) );
		add_action( 'wp_dashboard_setup', array( $this, 'woocommerce_hide_orders_widget' ) );
	}

	function is_active() {
		return ( class_exists( 'WooCommerce' ) );
	}

	function settings_section( $sections ) {
		$section = array(
			'title'    => __( 'WooCommerce', 'webmaster-user-role' ),
			'dashicon' => 'dashicons dashicons-cart',
			'id'       => 'woocommerce',
			'active'   => true,
			'fields'   => array(
				array(
					'id'       => 'webmaster_caps_woocommerce_caps',
					'type'     => 'checkbox',
					'title'    => __( 'WooCommerce Capabilities', 'webmaster-user-role' ),
					'subtitle' => __( 'Webmaster (Admin) users can', 'webmaster-user-role' ),

					'options'  => array(
						'manage_woocommerce'       => __( 'Manage WooCommerce Settings', 'webmaster-user-role' ),
						'edit_view_products'       => __( 'Edit & View Products', 'webmaster-user-role' ),
						'edit_shop_coupons'        => __( 'Edit & View Coupons', 'webmaster-user-role' ),
						'edit_shop_orders'         => __( 'Edit & View Orders', 'webmaster-user-role' ),
						'edit_shop_payments'       => __( 'Edit & View Payments', 'webmaster-user-role' ),
						'edit_shop_discounts'      => __( 'Edit & View Discounts', 'webmaster-user-role' ),
						'view_woocommerce_reports' => __( 'View Reports', 'webmaster-user-role' ),
					),

					'default'  => array(
						'manage_woocommerce'       => '1',
						'edit_view_products'       => '1',
						'edit_shop_coupons'        => '1',
						'edit_shop_orders'         => '1',
						'edit_shop_payments'       => '1',
						'edit_shop_discounts'      => '1',
						'view_woocommerce_reports' => '1',

					),
				),
			),
		);

		$sections[] = $this->filter_section( $section );
		return $sections;
	} //end settings_section function

	function capabilities( $capabilities ) {

		// Get Config
		$webmaster_user_role_config = $this->plugin->settings->get();
		if ( ! is_array( $webmaster_user_role_config ) || empty( $webmaster_user_role_config['webmaster_caps_woocommerce_caps'] ) ) {
			return $capabilities;
		}

		// This is still needed to completey hide the Product page menu item when edit_view_products is falsy
		$capabilities['moderate_comments'] = (int) $webmaster_user_role_config['webmaster_caps_woocommerce_caps']['edit_view_products'];

		/* Add WooCommerce Capabilities */
		$woo_caps = $this->get_woocommerce_capabilities();
		foreach ( $woo_caps as $woo_cap_key => $woo_cap_array ) {
			foreach ( $woo_cap_array as $key => $woo_cap ) {
				$currentCap               = $this->get_setting_capability_map( $woo_cap_key, $webmaster_user_role_config['webmaster_caps_woocommerce_caps'] );
				$capabilities[ $woo_cap ] = $currentCap;
			}
		}

		return $capabilities;
	}

	function woocommerce_hide_orders_widget() {

		$webmaster_user_role_config = $this->plugin->settings->get();
		if ( ! is_array( $webmaster_user_role_config ) || ! Simple_Client_Dashboard::current_user_is_webmaster() ) {
			return;
		}

		if ( empty( $webmaster_user_role_config['webmaster_caps_woocommerce_caps']['edit_shop_orders'] )
			|| empty( $webmaster_user_role_config['webmaster_caps_woocommerce_caps']['view_woocommerce_reports'] )
		) {
			remove_meta_box( 'woocommerce_dashboard_status', 'dashboard', 'normal' );
		}
	} //end hide_orders_widget


	public function get_woocommerce_capabilities() {
		$capabilities = array();

		// Core
		$capabilities['manage_woocommerce']       = array(
			'manage_woocommerce',
		);
		$capabilities['view_woocommerce_reports'] = array(
			'view_woocommerce_reports',
		);

		$capability_types = array( 'product', 'shop_order', 'shop_coupon', 'shop_payment', 'shop_discount' );

		foreach ( $capability_types as $capability_type ) {

			$capabilities[ $capability_type ] = array(
				// Post type
				"edit_{$capability_type}",
				"read_{$capability_type}",
				"delete_{$capability_type}",
				"edit_{$capability_type}s",
				"edit_others_{$capability_type}s",
				"publish_{$capability_type}s",
				"read_private_{$capability_type}s",
				"delete_{$capability_type}s",
				"delete_private_{$capability_type}s",
				"delete_published_{$capability_type}s",
				"delete_others_{$capability_type}s",
				"edit_private_{$capability_type}s",
				"edit_published_{$capability_type}s",

				// Stats
				"view_{$capability_type}_stats",
				"import_{$capability_type}s",

				// Terms
				"manage_{$capability_type}_terms",
				"edit_{$capability_type}_terms",
				"delete_{$capability_type}_terms",
				"assign_{$capability_type}_terms",
			);
		}

		return $capabilities;
	}

	private function get_setting_capability_map( $key, $config ) {
		$mapping = array(
			'manage_woocommerce'       => 'manage_woocommerce',
			'product'                  => 'edit_view_products',
			'shop_coupon'              => 'edit_shop_coupons',
			'shop_order'               => 'edit_shop_orders',
			'shop_payment'             => 'edit_shop_payments',
			'shop_discount'            => 'edit_shop_discounts',
			'view_woocommerce_reports' => 'view_woocommerce_reports',
		);

		return (int) $config[ $mapping[ $key ] ];
	}
}