PluginProbe
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More / 4.06.03
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More v4.06.03
6.35 6.34 6.33.1 6.33 6.32.1 6.32 6.31 6.25 6.25.1 6.26 6.26.1 6.27 6.28 6.29 6.3 6.3.1 6.3.2 6.30 6.4 6.4.1 6.4.2 6.5 6.5.1 6.5.2 6.5.3 All 141 releases
formidable / classes / models / FrmInbox.php

FrmInbox.php in Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More 4.06.03, at classes/models/FrmInbox.php

273 lines 6.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * @since 4.05
4 */
5 class FrmInbox extends FrmFormApi {
6
7 protected $cache_key;
8
9 private $option = 'frm_inbox';
10
11 private $messages = false;
12
13 public function __construct( $for_parent = null ) {
14 $this->set_cache_key();
15 $this->set_messages();
16 }
17
18 /**
19 * @since 4.05
20 */
21 protected function set_cache_key() {
22 $this->cache_key = 'frm_inbox_cache';
23 }
24
25 /**
26 * @since 4.05
27 */
28 protected function api_url() {
29 return 'https://formidableforms.com/wp-json/inbox/v1/message/';
30 }
31
32 /**
33 * @since 4.05
34 */
35 public function get_messages( $filter = false ) {
36 $messages = $this->messages;
37 if ( $filter === 'filter' ) {
38 $this->filter_messages( $messages );
39 }
40 return $messages;
41 }
42
43 /**
44 * @since 4.05
45 */
46 public function set_messages() {
47 $this->messages = get_option( $this->option );
48 if ( empty( $this->messages ) ) {
49 $this->messages = array();
50 }
51
52 $this->add_api_messages();
53
54 /**
55 * Messages are in an array.
56 */
57 $this->messages = apply_filters( 'frm_inbox', $this->messages );
58 }
59
60 /**
61 * @since 4.05
62 */
63 private function add_api_messages() {
64 $api = $this->get_api_info();
65 if ( empty( $api ) ) {
66 return;
67 }
68
69 foreach ( $api as $message ) {
70 $this->add_message( $message );
71 }
72 }
73
74 /**
75 * @param array $message
76 */
77 public function add_message( $message ) {
78 if ( isset( $this->messages[ $message['key'] ] ) && ! isset( $message['force'] ) ) {
79 // Don't replace messages unless required.
80 return;
81 }
82
83 if ( isset( $this->messages[ $message['key'] ] ) ) {
84 // Move up and mark as new.
85 unset( $this->messages[ $message['key'] ] );
86 }
87
88 $this->fill_message( $message );
89 $this->messages[ $message['key'] ] = $message;
90
91 $this->update_list();
92
93 $this->clean_messages();
94 }
95
96 private function fill_message( &$message ) {
97 $defaults = array(
98 'time' => time(),
99 'message' => '',
100 'subject' => '',
101 'icon' => 'frm_tooltip_icon',
102 'cta' => '',
103 'expires' => false,
104 'who' => 'all', // use 'free', 'personal', 'business', 'elite', 'grandfathered'
105 'type' => '',
106 );
107
108 $message = array_merge( $defaults, $message );
109
110 $message['created'] = $message['time'];
111 unset( $message['time'] );
112 }
113
114 private function clean_messages() {
115 $removed = false;
116 foreach ( $this->messages as $t => $message ) {
117 $read = isset( $message['read'] ) && ! empty( $message['read'] ) && isset( $message['read'][ get_current_user_id() ] ) && $message['read'][ get_current_user_id() ] < strtotime( '-1 month' );
118 $dismissed = isset( $message['dismissed'] ) && ! empty( $message['dismissed'] ) && isset( $message['dismissed'][ get_current_user_id() ] ) && $message['dismissed'][ get_current_user_id() ] < strtotime( '-1 week' );
119 $expired = $this->is_expired( $message );
120 if ( $read || $expired || $dismissed ) {
121 unset( $this->messages[ $t ] );
122 $removed = true;
123 }
124 }
125
126 if ( $removed ) {
127 $this->update_list();
128 }
129 }
130
131 private function filter_messages( &$messages ) {
132 $user_id = get_current_user_id();
133 foreach ( $messages as $k => $message ) {
134 $dismissed = isset( $message['dismissed'] ) && isset( $message['dismissed'][ $user_id ] );
135 if ( $this->is_expired( $message ) || $dismissed ) {
136 unset( $messages[ $k ] );
137 } elseif ( ! $this->is_for_user( $message ) ) {
138 unset( $messages[ $k ] );
139 }
140 }
141 $messages = apply_filters( 'frm_filter_inbox', $messages );
142 }
143
144 private function is_expired( $message ) {
145 return isset( $message['expires'] ) && ! empty( $message['expires'] ) && $message['expires'] < time();
146 }
147
148 /**
149 * Show different messages for different accounts.
150 */
151 private function is_for_user( $message ) {
152 if ( ! isset( $message['who'] ) || $message['who'] === 'all' ) {
153 return true;
154 }
155
156 return in_array( $this->get_user_type(), (array) $message['who'] );
157 }
158
159 private function get_user_type() {
160 if ( ! FrmAppHelper::pro_is_installed() ) {
161 return 'free';
162 }
163
164 return FrmAddonsController::license_type();
165 }
166
167 /**
168 * @param string $key
169 */
170 public function mark_read( $key ) {
171 if ( ! isset( $this->messages[ $key ] ) ) {
172 return;
173 }
174
175 if ( ! isset( $this->messages[ $key ]['read'] ) ) {
176 $this->messages[ $key ]['read'] = array();
177 }
178 $this->messages[ $key ]['read'][ get_current_user_id() ] = time();
179
180 $this->update_list();
181 }
182
183 /**
184 * @param string $key
185 *
186 * @since 4.05.02
187 */
188 public function mark_unread( $key ) {
189 $is_read = isset( $this->messages[ $key ] ) && isset( $this->messages[ $key ]['read'] ) && isset( $this->messages[ $key ]['read'][ get_current_user_id() ] );
190 if ( $is_read ) {
191 unset( $this->messages[ $key ]['read'][ get_current_user_id() ] );
192 $this->update_list();
193 }
194 }
195
196 /**
197 * @param string $key
198 */
199 public function dismiss( $key ) {
200 if ( $key === 'all' ) {
201 $this->dismiss_all();
202 return;
203 }
204
205 if ( ! isset( $this->messages[ $key ] ) ) {
206 return;
207 }
208
209 if ( ! isset( $this->messages[ $key ]['dismissed'] ) ) {
210 $this->messages[ $key ]['dismissed'] = array();
211 }
212 $this->messages[ $key ]['dismissed'][ get_current_user_id() ] = time();
213
214 $this->update_list();
215 }
216
217 /**
218 * @since 4.06
219 */
220 private function dismiss_all() {
221 $user_id = get_current_user_id();
222 foreach ( $this->messages as $key => $message ) {
223 if ( ! isset( $message['dismissed'] ) ) {
224 $this->messages[ $key ]['dismissed'] = array();
225 }
226
227 if ( ! isset( $message['dismissed'][ $user_id ] ) ) {
228 $this->messages[ $key ]['dismissed'][ $user_id ] = time();
229 }
230 }
231 $this->update_list();
232 }
233
234 public function unread() {
235 $messages = $this->get_messages( 'filter' );
236 $user_id = get_current_user_id();
237 foreach ( $messages as $t => $message ) {
238 if ( isset( $message['read'] ) && isset( $message['read'][ $user_id ] ) ) {
239 unset( $messages[ $t ] );
240 }
241 }
242 return $messages;
243 }
244
245 public function unread_html() {
246 $html = '';
247 $count = count( $this->unread() );
248 if ( $count ) {
249 $html = ' <span class="update-plugins frm_inbox_count"><span class="plugin-count">' . absint( $count ) . '</span></span>';
250
251 /**
252 * @since 4.06.01
253 */
254 $html = apply_filters( 'frm_inbox_badge', $html );
255 }
256 return $html;
257 }
258
259 /**
260 * @since 4.05.02
261 */
262 public function remove( $key ) {
263 if ( isset( $this->messages[ $key ] ) ) {
264 unset( $this->messages[ $key ] );
265 $this->update_list();
266 }
267 }
268
269 private function update_list() {
270 update_option( $this->option, $this->messages, 'no' );
271 }
272 }
273