PluginProbe ʕ •ᴥ•ʔ
OttoKit: All-in-One Automation Platform / 1.1.32
OttoKit: All-in-One Automation Platform v1.1.32
1.1.32 1.1.31 1.1.30 1.1.29 1.1.28 1.1.27 1.1.9 trunk 1.0.10 1.0.11 1.0.12 1.0.13 1.0.14 1.0.15 1.0.16 1.0.17 1.0.18 1.0.19 1.0.20 1.0.21 1.0.22 1.0.23 1.0.24 1.0.25 1.0.26 1.0.27 1.0.28 1.0.29 1.0.30 1.0.31 1.0.32 1.0.33 1.0.34 1.0.35 1.0.36 1.0.37 1.0.38 1.0.39 1.0.40 1.0.41 1.0.42 1.0.43 1.0.44 1.0.45 1.0.46 1.0.47 1.0.48 1.0.49 1.0.50 1.0.51 1.0.52 1.0.53 1.0.54 1.0.55 1.0.56 1.0.57 1.0.58 1.0.59 1.0.60 1.0.61 1.0.62 1.0.63 1.0.64 1.0.65 1.0.66 1.0.67 1.0.68 1.0.69 1.0.7 1.0.70 1.0.71 1.0.72 1.0.73 1.0.74 1.0.75 1.0.76 1.0.77 1.0.78 1.0.79 1.0.8 1.0.80 1.0.81 1.0.82 1.0.83 1.0.84 1.0.85 1.0.86 1.0.87 1.0.88 1.0.89 1.0.9 1.0.90 1.1.0 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.14 1.1.15 1.1.16 1.1.17 1.1.18 1.1.19 1.1.2 1.1.20 1.1.21 1.1.22 1.1.23 1.1.24 1.1.25 1.1.26 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8
suretriggers / src / Integrations / fluentcommunity / actions / fetch-members.php
suretriggers / src / Integrations / fluentcommunity / actions Last commit date
add-user-to-course.php 1 year ago add-user-to-space.php 1 year ago create-lesson-in-course.php 9 months ago create-new-post-feed.php 1 year ago fetch-members.php 6 months ago get-all-courses-list.php 1 year ago get-all-spaces-list.php 1 year ago like-post.php 6 months ago list-course-sections.php 9 months ago list-posts-in-space.php 6 months ago remove-user-from-course.php 1 year ago remove-user-from-space.php 1 year ago reply-to-post.php 7 months ago
fetch-members.php
280 lines
1 <?php
2 /**
3 * FetchMembers.
4 * php version 5.6
5 *
6 * @category FetchMembers
7 * @package SureTriggers
8 * @author BSF <username@example.com>
9 * @license https://www.gnu.org/licenses/gpl-3.0.html GPLv3
10 * @link https://www.brainstormforce.com/
11 * @since 1.0.0
12 */
13
14 namespace SureTriggers\Integrations\FluentCommunity\Actions;
15
16 use Exception;
17 use SureTriggers\Integrations\AutomateAction;
18 use SureTriggers\Traits\SingletonLoader;
19
20 /**
21 * FetchMembers
22 *
23 * @category FetchMembers
24 * @package SureTriggers
25 * @author BSF <username@example.com>
26 * @license https://www.gnu.org/licenses/gpl-3.0.html GPLv3
27 * @link https://www.brainstormforce.com/
28 * @since 1.0.0
29 */
30 class FetchMembers extends AutomateAction {
31
32 /**
33 * Integration type.
34 *
35 * @var string
36 */
37 public $integration = 'FluentCommunity';
38
39 /**
40 * Action name.
41 *
42 * @var string
43 */
44 public $action = 'fc_fetch_members';
45
46 use SingletonLoader;
47
48 /**
49 * Register a action.
50 *
51 * @param array $actions actions.
52 * @return array
53 */
54 public function register( $actions ) {
55
56 $actions[ $this->integration ][ $this->action ] = [
57 'label' => __( 'Fetch Members', 'suretriggers' ),
58 'action' => $this->action,
59 'function' => [ $this, 'action_listener' ],
60 ];
61
62 return $actions;
63
64 }
65
66 /**
67 * Action listener.
68 *
69 * @param int $user_id user_id.
70 * @param int $automation_id automation_id.
71 * @param array $fields fields.
72 * @param array $selected_options selected_options.
73 *
74 * @return array|void
75 *
76 * @throws Exception Exception.
77 */
78 public function _action_listener( $user_id, $automation_id, $fields, $selected_options ) {
79
80 if ( ! defined( 'FLUENT_COMMUNITY_PLUGIN_VERSION' ) ) {
81 return [
82 'status' => 'error',
83 'message' => 'FluentCommunity plugin is not active.',
84 ];
85 }
86
87 $space_id = isset( $selected_options['space_id'] ) ? (int) sanitize_text_field( $selected_options['space_id'] ) : 0;
88 $limit = isset( $selected_options['limit'] ) ? (int) sanitize_text_field( $selected_options['limit'] ) : 50;
89
90 if ( $space_id && ! $this->is_valid_space( $space_id ) ) {
91 return [
92 'status' => 'error',
93 'message' => 'Invalid or non-existent Space ID.',
94 ];
95 }
96
97 try {
98 $members = $this->get_members( $space_id, $limit );
99
100 if ( empty( $members ) ) {
101 return [
102 'status' => 'success',
103 'message' => $space_id ? 'No members found in the specified space.' : 'No members found in the community.',
104 'members' => [],
105 ];
106 }
107
108 return [
109 'status' => 'success',
110 'message' => 'Members fetched successfully.',
111 'members' => $members,
112 'space_id' => ! empty( $space_id ) ? $space_id : 'all',
113 'total_found' => count( $members ),
114 ];
115 } catch ( Exception $e ) {
116 return [
117 'status' => 'error',
118 'message' => 'Error fetching members: ' . $e->getMessage(),
119 ];
120 }
121 }
122
123 /**
124 * Check if space ID is valid.
125 *
126 * @param int $space_id Space ID.
127 *
128 * @return bool
129 */
130 private function is_valid_space( $space_id ) {
131 global $wpdb;
132 $space = $wpdb->get_row( $wpdb->prepare( "SELECT ID FROM {$wpdb->prefix}fcom_spaces WHERE ID = %d", $space_id ) );
133 return (bool) $space;
134 }
135
136 /**
137 * Get members from community or specific space.
138 *
139 * @param int $space_id Space ID (0 for all community members).
140 * @param int $limit Limit number of members.
141 *
142 * @return array
143 */
144 private function get_members( $space_id = 0, $limit = 50 ) {
145 global $wpdb;
146
147 $space_id = (int) $space_id;
148 $limit = max( 1, min( 200, (int) $limit ) );
149
150 if ( $space_id ) {
151 $results = $this->get_space_members_data( $space_id, $limit );
152 } else {
153 $results = $this->get_community_members_data( $limit );
154 }
155
156 if ( ! $results ) {
157 return [];
158 }
159
160 $members = [];
161 foreach ( $results as $result ) {
162 $member = [
163 'user_id' => $result['ID'],
164 'display_name' => $result['display_name'],
165 'email' => $result['user_email'],
166 'registered' => $result['user_registered'],
167 ];
168
169 if ( $space_id ) {
170 $member['role'] = ! empty( $result['role'] ) ? $result['role'] : '';
171 $member['membership_status'] = $result['membership_status'];
172 $member['joined_at'] = $result['joined_at'];
173 }
174
175 $member['profile_url'] = $this->get_member_profile_url( $result['ID'] );
176
177 $members[] = $member;
178 }
179
180 return $members;
181 }
182
183 /**
184 * Get member profile URL.
185 *
186 * @param int $user_id User ID.
187 *
188 * @return string
189 */
190 private function get_member_profile_url( $user_id ) {
191 if ( class_exists( '\FluentCommunity\App\Services\Helper' ) ) {
192 try {
193 $user = get_user_by( 'ID', $user_id );
194 if ( $user ) {
195 return \FluentCommunity\App\Services\Helper::baseUrl( 'profile/' . $user->user_nicename );
196 }
197 } catch ( Exception $e ) {
198 // Fallback if FluentCommunity helper is not available.
199 unset( $e );
200 }
201 }
202
203 return home_url( "/community/profile/{$user_id}" );
204 }
205
206 /**
207 * Get space members data without direct users table access.
208 *
209 * @param int $space_id Space ID.
210 * @param int $limit Limit.
211 *
212 * @return array
213 */
214 private function get_space_members_data( $space_id, $limit ) {
215 global $wpdb;
216
217
218 $space_users = $wpdb->get_results( $wpdb->prepare( "SELECT su.user_id, su.role, su.status as membership_status, su.created_at as joined_at FROM {$wpdb->prefix}fcom_space_user su WHERE su.space_id = %d ORDER BY su.created_at DESC LIMIT %d", $space_id, $limit ), ARRAY_A );
219
220
221 $results = [];
222 foreach ( $space_users as $space_user ) {
223 $user = get_userdata( $space_user['user_id'] );
224 if ( $user ) {
225 $results[] = [
226 'ID' => $user->ID,
227 'display_name' => $user->display_name,
228 'user_email' => $user->user_email,
229 'user_registered' => $user->user_registered,
230 'role' => $space_user['role'],
231 'membership_status' => $space_user['membership_status'],
232 'joined_at' => $space_user['joined_at'],
233 ];
234 }
235 }
236
237 return $results;
238 }
239
240 /**
241 * Get community members data without direct users table access.
242 *
243 * @param int $limit Limit.
244 *
245 * @return array
246 */
247 private function get_community_members_data( $limit ) {
248 global $wpdb;
249
250 $space_users = $wpdb->get_results(
251 $wpdb->prepare(
252 "SELECT DISTINCT su.user_id
253 FROM {$wpdb->prefix}fcom_space_user su
254 WHERE su.status = 'active'
255 LIMIT %d",
256 $limit
257 ),
258 ARRAY_A
259 );
260
261 $results = [];
262 foreach ( $space_users as $space_user ) {
263 $user = get_userdata( $space_user['user_id'] );
264 if ( $user ) {
265 $results[] = [
266 'ID' => $user->ID,
267 'display_name' => $user->display_name,
268 'user_email' => $user->user_email,
269 'user_registered' => $user->user_registered,
270 ];
271 }
272 }
273
274 return $results;
275 }
276
277 }
278
279 FetchMembers::get_instance();
280