apply_filters('wu_current_get_site_param', 'site'), 'customer' => apply_filters('wu_current_get_customer_param', 'customer'), 'membership' => apply_filters('wu_current_get_membership_param', 'membership'), ]; return wu_get_isset($params, $type, $type); } /** * Returns the URL to manage a site/customer on the front-end or back end. * * @since 2.0.0 * * @param int $id The site ID. * @param string $type The type. Can be either site or customer. * @return string */ public static function get_manage_url($id, $type = 'site') { // Uses hash instead of the ID. $site_hash = \WP_Ultimo\Helpers\Hash::encode($id, $type); if ( ! is_admin()) { $current_url = rtrim((string) wu_get_current_url(), '/'); $url_param = self::param_key($type); /* * Check if the current URL already has a site parameter and remove it. */ if (str_contains($current_url, '/' . $url_param . '/')) { $current_url = preg_replace('/\/' . $url_param . '\/(.+)/', '/', $current_url); } $pretty_url = $current_url . '/' . $url_param . '/' . $site_hash; $manage_site_url = get_option('permalink_structure') ? $pretty_url : add_query_arg($url_param, $site_hash); } else { $manage_site_url = get_admin_url($id); } /** * Allow developers to modify the manage site URL parameters. * * @since 2.0.9 * * @param string $manage_site_url The manage site URL. * @param int $id The site ID. * @param string $site_hash The site hash. * @return string The modified manage URL. */ return apply_filters("wu_current_{$type}_get_manage_url", $manage_site_url, $id, $site_hash); } /** * Loads the current site and makes it available. * * @since 2.0.0 * @return void */ public function load_currents(): void { $site = false; /** * On the front-end, we need to check for url overrides. */ if ( ! is_admin()) { /* * By default, we'll use the `site` parameter. */ $site_url_param = self::param_key('site'); $site_hash = wu_request($site_url_param, get_query_var('site_hash')); $site_from_url = wu_get_site_by_hash($site_hash); if ($site_from_url) { $this->site_set_via_request = true; $site = $site_from_url; } } else { $site = wu_get_current_site(); } if ($site) { $this->set_site($site); } $customer = wu_get_current_customer(); /** * On the front-end, we need to check for url overrides. */ if ( ! is_admin()) { /* * By default, we'll use the `site` parameter. */ $customer_url_param = self::param_key('customer'); $customer_from_url = wu_get_customer(wu_request($customer_url_param, 0)); if ($customer_from_url) { $this->customer_set_via_request = true; $customer = $customer_from_url; } } $this->set_customer($customer); $membership = false; /* * By default, we'll use the `membership` parameter. */ $membership_url_param = self::param_key('membership'); $membership_hash = wu_request($membership_url_param, get_query_var('membership_hash')); if ($membership_hash) { $this->membership_set_via_request = true; $membership = wu_get_membership_by_hash($membership_hash); } elseif ($site) { $membership = $site->get_membership(); } if ($customer && ! $membership) { $memberships = (array) $customer->get_memberships(); $membership = wu_get_isset($memberships, 0, false); } $this->set_membership($membership); } /** * Get the current site instance. * * @since 2.0.0 * @return \WP_Ultimo\Models\Site */ public function get_site() { return $this->site; } /** * Set the current site instance. * * @since 2.0.0 * @param \WP_Ultimo\Models\Site $site The current site instance. * @return void */ public function set_site($site): void { /** * Allow developers to modify the default behavior and set * the current site differently. * * @since 2.0.9 * * @param \WP_Ultimo\Models\Site $site The current site to set. * @param self The Current class instance. * @return \WP_Ultimo\Models\Site */ $site = apply_filters('wu_current_set_site', $site, $this); $this->site = $site; } /** * Get wether or not the site was set via request. * * @since 2.0.0 * @return boolean */ public function is_site_set_via_request() { return $this->site_set_via_request; } /** * Get the current customer instance. * * @since 2.0.0 * @return \WP_Ultimo\Models\Customer */ public function get_customer() { return $this->customer; } /** * Set the current customer instance. * * @since 2.0.0 * @param \WP_Ultimo\Models\Customer $customer The current customer instance. * @return void */ public function set_customer($customer): void { /** * Allow developers to modify the default behavior and set * the current customer differently. * * @since 2.0.9 * * @param \WP_Ultimo\Models\Customer $customer The current customer to set. * @param self The Current class instance. * @return \WP_Ultimo\Models\Customer */ $customer = apply_filters('wu_current_set_customer', $customer, $this); $this->customer = $customer; } /** * Get the current membership instance. * * @since 2.0.18 * @return \WP_Ultimo\Models\Membership */ public function get_membership() { return $this->membership; } /** * Set the current membership instance. * * @since 2.0.18 * @param \WP_Ultimo\Models\Membership $membership The current membership instance. * @return void */ public function set_membership($membership): void { /** * Allow developers to modify the default behavior and set * the current membership differently. * * @since 2.0.18 * * @param \WP_Ultimo\Models\Membership $membership The current membership to set. * @param self The Current class instance. * @return \WP_Ultimo\Models\Membership */ $membership = apply_filters('wu_current_set_membership', $membership, $this); $this->membership = $membership; } /** * Get wether or not the membership was set via request. * * @since 2.0.18 * @return boolean */ public function is_membership_set_via_request() { return $this->membership_set_via_request; } }