PluginProbe ʕ •ᴥ•ʔ
Paid Membership Plugin, Ecommerce, User Registration Form, Login Form, User Profile & Restrict Content – ProfilePress / trunk
Paid Membership Plugin, Ecommerce, User Registration Form, Login Form, User Profile & Restrict Content – ProfilePress vtrunk
4.16.18 4.16.17 4.16.16 trunk 1.0 1.0.1 1.0.2 1.1 1.1.1 1.1.2 1.1.3 1.1.4 1.1.5 1.1.5a 1.1.6 1.1.7 1.2 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.3 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.4 1.4.1 1.4.2 1.5 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.7 1.7.1 1.7.2 1.8 1.8.1 1.8.10 1.8.2 1.8.3 1.8.4 1.8.5 1.8.6 1.8.7 1.8.8 1.8.9 1.9 1.9.1 1.9.10 1.9.11 1.9.12 1.9.13 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.1.9 2.2.10 2.2.11 2.2.12 2.2.13 2.2.14 2.2.15 2.2.16 2.2.2 2.2.5 2.2.6 2.2.7 2.2.8 2.2.9 3.0 3.1 3.1.1 3.1.10 3.1.11 3.1.12 3.1.13 3.1.14 3.1.15 3.1.16 3.1.17 3.1.18 3.1.19 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.1.7 3.1.8 3.1.9 3.2.0 3.2.1 3.2.10 3.2.11 3.2.12 3.2.13 3.2.14 3.2.15 3.2.16 3.2.2 3.2.3 3.2.4 3.2.5 3.2.6 3.2.7 3.2.8 3.2.9 4.0.0 4.0.1 4.0.2 4.0.3 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4 4.10.0 4.10.1 4.10.2 4.10.3 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.13.3 4.13.4 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.15.0 4.15.1 4.15.10 4.15.11 4.15.12 4.15.13 4.15.14 4.15.15 4.15.16 4.15.17 4.15.18 4.15.19 4.15.2 4.15.20 4.15.20.1 4.15.21 4.15.22 4.15.23 4.15.24 4.15.25 4.15.3 4.15.4 4.15.5 4.15.6 4.15.7 4.15.8 4.15.9 4.16.0 4.16.1 4.16.10 4.16.11 4.16.12 4.16.13 4.16.14 4.16.15 4.16.2 4.16.3 4.16.4 4.16.5 4.16.6 4.16.7 4.16.8 4.16.9 4.2.0 4.3.0 4.3.1 4.3.2 4.4.0 4.4.1 4.5.0 4.5.1 4.5.2 4.5.3 4.5.4 4.5.5 4.6.0 4.7.0 4.8.0 4.9.0
wp-user-avatar / src / ContentProtection / NavMenuProtection.php
wp-user-avatar / src / ContentProtection Last commit date
Frontend 3 months ago views 1 year ago CapabilityCheck.php 3 years ago ConditionCallbacks.php 3 years ago ConditionalBlocksIntegration.php 3 years ago ContentConditions.php 7 months ago ElementorDisplayCondition.php 1 month ago ElementorRestriction.php 3 years ago Init.php 1 month ago NavMenuProtection.php 3 years ago SettingsPage.php 1 year ago WPListTable.php 1 year ago index.php 5 years ago
NavMenuProtection.php
136 lines
1 <?php
2
3 namespace ProfilePress\Core\ContentProtection;
4
5 use ProfilePress\Core\Membership\Models\Customer\CustomerFactory;
6 use ProfilePress\Core\Membership\Repositories\PlanRepository;
7
8 class NavMenuProtection
9 {
10 public function __construct()
11 {
12 add_action('plugins_loaded', [$this, 'init'], 20);
13 }
14
15 public function init()
16 {
17 if (class_exists('\Nav_Menu_Roles')) {
18 add_filter('nav_menu_roles', [$this, 'new_roles']);
19 add_filter('nav_menu_roles_item_visibility', [$this, 'item_visibility'], 10, 2);
20 }
21 }
22
23 /*
24 * Add custom roles to Nav Menu Roles menu options
25 *
26 * @param array $roles An array of all available roles, by default is global $wp_roles
27 * @return array
28 */
29 function new_roles($roles)
30 {
31 return array_merge($this->get_roles_wrapper(), $roles);
32 }
33
34
35 /*
36 * Change visibility of each menu item.
37 *
38 * NMR settings can be "in" (all logged in), "out" (all logged out) or an array of specific roles
39 *
40 * @param bool $visible
41 * @param object $item The menu item object. Nav Menu Roles adds its info to $item->roles
42 * @return boolean
43 */
44 function item_visibility($visible, $item)
45 {
46 if ( ! $visible && isset($item->roles) && is_array($item->roles)) {
47
48 // Get the plugin-specific roles for this menu item.
49 $roles = $this->get_relevant_roles_wrapper($item->roles);
50
51 if (count($roles) > 0) {
52
53 // Only need to look through the relevant roles.
54 foreach ($roles as $role) {
55
56 // Test if the current user has the specific plan membership.
57 if ($this->current_user_can_wrapper($role)) {
58 $visible = true;
59 break;
60 } else {
61 $visible = false;
62 }
63 }
64
65 }
66
67 }
68
69 return $visible;
70 }
71
72 /*-----------------------------------------------------------------------------------*/
73 /* Helper Functions */
74 /*-----------------------------------------------------------------------------------*/
75
76 /*
77 * Get the plugin-specific "roles" returned in an array, with ID => Name key pairs
78 *
79 * @return array
80 */
81 function get_roles_wrapper()
82 {
83 $roles = array();
84
85 $plans = PlanRepository::init()->retrieveAll();
86
87 if ( ! empty($plans)) {
88
89 foreach ($plans as $plan) {
90 $roles['ppress_membership_' . $plan->id] = sprintf('%s (ProfilePress %s)', $plan->name, esc_html__('Plan', 'wp-user-avatar'));
91 }
92 }
93
94 return $roles;
95 }
96
97 /*
98 * Get the plugin-specific "roles" relevant to this menu item
99 *
100 * @return array
101 */
102 function get_relevant_roles_wrapper($roles = array())
103 {
104 return preg_grep('/^ppress_membership_*/', $roles);
105 }
106
107 /*
108 * Check the current user has plugin-specific level capability
109 *
110 * @param string $role_id | The ID of the "role" with a plugin-specific prefix
111 *
112 * @return bool
113 */
114 function current_user_can_wrapper($role_id = false)
115 {
116 $user_id = get_current_user_id();
117
118 if ( ! $user_id || ! $role_id) return false;
119
120 $role_id = str_replace('ppress_membership_', '', $role_id);
121
122 return CustomerFactory::fromUserId($user_id)->has_active_subscription($role_id);
123 }
124
125 public static function get_instance()
126 {
127 static $instance = null;
128
129 if (is_null($instance)) {
130 $instance = new self();
131 }
132
133 return $instance;
134 }
135 }
136