PluginProbe
Restrict User Access – Ultimate Membership & Content Protection / 2.7
Restrict User Access – Ultimate Membership & Content Protection v2.7
trunk 1.3 2.0 2.1.3 2.2.3 2.3.2 2.4 2.4.1 2.4.2 2.4.3 2.5 2.6 2.6.1 2.7 2.7.1 2.8 2.8.1
restrict-user-access / api / functions.php

functions.php in Restrict User Access – Ultimate Membership & Content Protection 2.7, at api/functions.php

164 lines 3.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * @package Restrict User Access
4 * @author Joachim Jensen <joachim@dev.institute>
5 * @license GPLv3
6 * @copyright 2024 by Joachim Jensen
7 */
8
9 /**
10 * @since 1.1
11 * @param WP_User|int|null $user null or omit for current user
12 * @return RUA_User_Interface
13 */
14 function rua_get_user($user = null)
15 {
16 if (is_null($user) && is_user_logged_in()) {
17 $user = wp_get_current_user();
18 }
19
20 if (!($user instanceof WP_User)) {
21 $user = new WP_User($user);
22 }
23
24 return new RUA_User($user);
25 }
26
27 /**
28 * @since 2.1
29 * @param WP_Post|int $post
30 * @return RUA_Level_Interface
31 * @throws Exception
32 */
33 function rua_get_level($post)
34 {
35 if (is_numeric($post)) {
36 $post = WP_Post::get_instance($post);
37 }
38
39 if (!($post instanceof WP_Post)) {
40 throw new Exception();
41 }
42
43 return new RUA_Level($post);
44 }
45
46 /**
47 * @since 2.1
48 * @param RUA_Level_Interface|WP_Post|int $level
49 * @param RUA_User_Interface|WP_User|int|null $user null or omit for current user
50 * @return RUA_User_Level_Interface
51 * @throws Exception
52 */
53 function rua_get_user_level($level, $user = null)
54 {
55 _deprecated_function(__FUNCTION__, '2.5', 'rua_get_user_levels()');
56
57 if (!($level instanceof RUA_Level_Interface)) {
58 $level = rua_get_level($level);
59 }
60 if (!($user instanceof RUA_User_Interface)) {
61 $user = rua_get_user($user);
62 }
63 return $user->level_memberships()->get($level->get_id());
64 }
65
66 /**
67 * @param RUA_User_Interface|WP_User|int|null $user null or omit for current user
68 * @return RUA_Collection
69 */
70 function rua_get_user_levels($user)
71 {
72 if (!($user instanceof RUA_User_Interface)) {
73 $user = rua_get_user($user);
74 }
75
76 $user_levels = new RUA_Collection();
77 if($user->get_id() === 0) {
78 return $user_levels;
79 }
80
81 $entities = _rua_get_comments([
82 'user_id' => $user->get_id()
83 ]);
84
85 foreach ($entities as $entity) {
86 $user_level = new RUA_User_Level($entity);
87 $user_level->refresh();
88 $user_levels->put($user_level->get_level_id(), $user_level);
89 }
90 return $user_levels;
91 }
92
93 /**
94 * @param RUA_Level_Interface|WP_Post|int $level
95 * @param array $query
96 * @return RUA_Collection
97 * @throws Exception
98 */
99 function rua_get_level_members($level, $query = [])
100 {
101 if (!($level instanceof RUA_Level_Interface)) {
102 $level = rua_get_level($level);
103 }
104
105 $query['post_id'] = $level->get_id();
106 $entities = _rua_get_comments($query);
107
108 $user_levels = new RUA_Collection();
109 foreach ($entities as $entity) {
110 $user_level = new RUA_User_Level($entity);
111 $user_level->refresh();
112 $user_levels->put($user_level->get_user_id(), $user_level);
113 }
114 return $user_levels;
115 }
116
117 /**
118 * @since 0.9
119 * @param string $name
120 * @return WP_Post|bool
121 */
122 function rua_get_level_by_name($name)
123 {
124 return RUA_App::instance()->level_manager->get_level_by_name($name);
125 }
126
127 /**
128 * @since 0.13
129 * @param int $level_id
130 * @param bool $hierarchical
131 * @return array
132 */
133 function rua_get_level_caps($level_id, $hierarchical = false)
134 {
135 $levels = [$level_id];
136 if ($hierarchical) {
137 $levels = array_merge($levels, get_post_ancestors((int) $level_id));
138 $levels = array_reverse($levels);
139 }
140 $caps = RUA_App::instance()->level_manager->get_levels_caps($levels);
141 return $caps;
142 }
143
144 /**
145 * @internal
146 * @param $args
147 * @return int|int[]|WP_Comment[]
148 */
149 function _rua_get_comments($args)
150 {
151 $args = array_merge([
152 'status' => [RUA_User_Level::STATUS_ACTIVE, RUA_User_Level::STATUS_EXPIRED],
153 'orderby' => false,
154 //ensures polylang and other plugins dont add filters
155 'post__in' => array_keys(RUA_App::instance()->get_levels())
156 ], $args);
157 $args['type'] = RUA_User_Level::ENTITY_TYPE;
158
159 add_filter('wpml_is_comment_query_filtered', '__return_false', PHP_INT_MAX);
160 $comments = get_comments($args);
161 remove_filter('wpml_is_comment_query_filtered', '__return_false', PHP_INT_MAX);
162 return $comments;
163 }
164