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 / list-posts-in-space.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 10 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 10 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
list-posts-in-space.php
203 lines
1 <?php
2 /**
3 * ListPostsInSpace.
4 * php version 5.6
5 *
6 * @category ListPostsInSpace
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 * ListPostsInSpace
22 *
23 * @category ListPostsInSpace
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 ListPostsInSpace 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_list_posts_in_space';
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' => __( 'List Posts in a Specific Space', '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'] ) : 10;
89
90 if ( ! $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 $posts = $this->get_space_posts( $space_id, $limit );
99 if ( empty( $posts ) ) {
100 return [
101 'status' => 'success',
102 'message' => 'No posts found in the specified space.',
103 'posts' => [],
104 ];
105 }
106
107 return [
108 'status' => 'success',
109 'message' => 'Posts fetched successfully from space.',
110 'posts' => $posts,
111 'space_id' => $space_id,
112 'total_found' => count( $posts ),
113 ];
114 } catch ( Exception $e ) {
115 return [
116 'status' => 'error',
117 'message' => 'Error fetching posts: ' . $e->getMessage(),
118 ];
119 }
120 }
121
122 /**
123 * Check if space ID is valid.
124 *
125 * @param int $space_id Space ID.
126 *
127 * @return bool
128 */
129 private function is_valid_space( $space_id ) {
130 global $wpdb;
131 $space = $wpdb->get_row( $wpdb->prepare( "SELECT ID FROM {$wpdb->prefix}fcom_spaces WHERE ID = %d", $space_id ) );
132 return (bool) $space;
133 }
134
135 /**
136 * Get posts from a specific space.
137 *
138 * @param int $space_id Space ID.
139 * @param int $limit Limit number of posts.
140 *
141 * @return array
142 */
143 private function get_space_posts( $space_id, $limit = 10 ) {
144 global $wpdb;
145
146 $space_id = (int) $space_id;
147 $limit = max( 1, min( 100, (int) $limit ) );
148
149 $feeds = $wpdb->get_results( $wpdb->prepare( "SELECT f.* FROM {$wpdb->prefix}fcom_posts f WHERE f.space_id = %d AND f.status = 'published' ORDER BY f.created_at DESC LIMIT %d", $space_id, $limit ), ARRAY_A );
150
151 if ( ! $feeds ) {
152 return [];
153 }
154
155 $posts = [];
156 foreach ( $feeds as $feed ) {
157 $user = get_userdata( $feed['user_id'] );
158 $posts[] = [
159 'id' => $feed['id'],
160 'title' => ! empty( $feed['title'] ) ? $feed['title'] : '',
161 'message' => ! empty( $feed['message'] ) ? $feed['message'] : '',
162 'type' => ! empty( $feed['type'] ) ? $feed['type'] : 'feed',
163 'space_id' => $feed['space_id'],
164 'user_id' => $feed['user_id'],
165 'author_name' => $user ? $user->display_name : '',
166 'author_email' => $user ? $user->user_email : '',
167 'status' => $feed['status'],
168 'created_at' => $feed['created_at'],
169 'updated_at' => $feed['updated_at'],
170 'permalink' => $this->get_post_permalink( $feed['id'] ),
171 ];
172 }
173
174 return $posts;
175 }
176
177 /**
178 * Get post permalink.
179 *
180 * @param int $post_id Post ID.
181 *
182 * @return string
183 */
184 private function get_post_permalink( $post_id ) {
185 if ( class_exists( '\FluentCommunity\App\Models\Feed' ) ) {
186 try {
187 $feed = \FluentCommunity\App\Models\Feed::find( $post_id );
188 if ( $feed && is_object( $feed ) && method_exists( $feed, 'getPermalink' ) ) {
189 return $feed->getPermalink();
190 }
191 } catch ( Exception $e ) {
192 // Fallback if FluentCommunity model is not available.
193 unset( $e );
194 }
195 }
196
197 return home_url( "/community/feed/{$post_id}" );
198 }
199
200 }
201
202 ListPostsInSpace::get_instance();
203