PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.2.0
GiveWP – Donation Plugin and Fundraising Platform v2.2.0
4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / includes / class-give-comment.php
give / includes Last commit date
admin 7 years ago api 7 years ago deprecated 7 years ago donors 7 years ago emails 7 years ago forms 7 years ago gateways 7 years ago libraries 7 years ago payments 7 years ago actions.php 7 years ago ajax-functions.php 7 years ago class-give-async-process.php 8 years ago class-give-background-updater.php 7 years ago class-give-cache.php 7 years ago class-give-cli-commands.php 8 years ago class-give-comment.php 7 years ago class-give-cron.php 8 years ago class-give-db-donor-meta.php 8 years ago class-give-db-donors.php 7 years ago class-give-db-form-meta.php 8 years ago class-give-db-logs-meta.php 8 years ago class-give-db-logs.php 7 years ago class-give-db-meta.php 7 years ago class-give-db-payment-meta.php 7 years ago class-give-db-sequential-ordering.php 7 years ago class-give-db-sessions.php 7 years ago class-give-db.php 8 years ago class-give-donate-form.php 8 years ago class-give-donor-wall-widget.php 7 years ago class-give-donor.php 7 years ago class-give-email-access.php 8 years ago class-give-html-elements.php 7 years ago class-give-license-handler.php 7 years ago class-give-logging.php 8 years ago class-give-readme-parser.php 8 years ago class-give-roles.php 8 years ago class-give-scripts.php 7 years ago class-give-session.php 7 years ago class-give-stats.php 8 years ago class-give-template-loader.php 8 years ago class-give-tooltips.php 8 years ago class-give-translation.php 8 years ago class-notices.php 7 years ago country-functions.php 8 years ago currency-functions.php 7 years ago error-tracking.php 8 years ago filters.php 7 years ago formatting.php 7 years ago import-functions.php 7 years ago install.php 7 years ago login-register.php 8 years ago misc-functions.php 7 years ago plugin-compatibility.php 8 years ago post-types.php 8 years ago price-functions.php 7 years ago process-donation.php 7 years ago shortcodes.php 7 years ago template-functions.php 8 years ago user-functions.php 7 years ago
class-give-comment.php
483 lines
1 <?php
2
3 /**
4 * Class for managing comments
5 *
6 * @package Give
7 * @subpackage Classes/Give_Cache
8 * @copyright Copyright (c) 2018, WordImpress
9 * @license https://opensource.org/licenses/gpl-license GNU Public License
10 * @since 2.2.0
11 */
12 class Give_Comment {
13 /**
14 * Instance.
15 *
16 * @since 2.2.0
17 * @access private
18 * @var
19 */
20 static private $instance;
21
22 /**
23 * Comment Types.
24 *
25 * @since 2.2.0
26 * @access private
27 * @var array
28 */
29 private $comment_types;
30
31 /**
32 * Singleton pattern.
33 *
34 * @since 2.2.0
35 * @access private
36 */
37 private function __construct() {
38 }
39
40
41 /**
42 * Get instance.
43 *
44 * @since 2.2.0
45 * @access pu
46 * @return Give_Comment
47 */
48 public static function get_instance() {
49 if ( null === static::$instance ) {
50 self::$instance = new static();
51 self::$instance->init();
52 }
53
54 return self::$instance;
55 }
56
57 /**
58 * Initialize
59 *
60 * @since 2.2.0
61 * @access private
62 */
63 private function init() {
64 /**
65 * Filter the comment type
66 *
67 * @since 2.2.0
68 */
69 $this->comment_types = apply_filters(
70 'give_comment_type',
71 self::get_comment_types( array( 'payment', 'donor' ) )
72 );
73
74 add_action( 'pre_get_comments', array( $this, 'hide_comments' ), 10 );
75 add_filter( 'comments_clauses', array( $this, 'hide_comments_pre_wp_41' ), 10, 1 );
76 add_filter( 'comment_feed_where', array( $this, 'hide_comments_from_feeds' ), 10, 1 );
77 add_filter( 'wp_count_comments', array( $this, 'remove_comments_from_comment_counts' ), 10, 2 );
78 add_filter( 'get_comment_author', array( $this, '__get_comment_author' ), 10, 3 );
79 }
80
81 /**
82 * Insert/Update comment
83 *
84 * @since 2.2.0
85 * @access public
86 *
87 * @param int $id Payment|Donor ID.
88 * @param string $note Comment Text
89 * @param string $comment_type Value can ve donor|payment
90 * @param array $comment_args Comment arguments
91 *
92 * @return int|WP_Error
93 */
94 public static function add( $id, $note, $comment_type, $comment_args = array() ) {
95 // Bailout
96 if ( empty( $id ) || empty( $note ) || empty( $comment_type ) ) {
97 return new WP_Error( 'give_invalid_required_param', __( 'This comment has invalid ID or comment text or cooment type', 'give' ) );
98 }
99
100 $is_existing_comment = array_key_exists( 'comment_ID', $comment_args ) && ! empty( $comment_args['comment_ID'] );
101 $action_type = $is_existing_comment ? 'update' : 'insert';
102
103 /**
104 * Fires before inserting/updating payment|donor comment.
105 *
106 * @param int $id Payment|Donor ID.
107 * @param string $note Comment text.
108 *
109 * @since 1.0
110 */
111 do_action( "give_pre_{$action_type}_{$comment_type}_note", $id, $note );
112
113 $comment_args = wp_parse_args(
114 $comment_args,
115 array(
116 'comment_post_ID' => $id,
117 'comment_content' => $note,
118 'user_id' => is_admin() ? get_current_user_id() : 0,
119 'comment_date' => current_time( 'mysql' ),
120 'comment_date_gmt' => current_time( 'mysql', 1 ),
121 'comment_approved' => 1,
122 'comment_parent' => 0,
123 'comment_author' => '',
124 'comment_author_IP' => '',
125 'comment_author_url' => '',
126 'comment_author_email' => '',
127 'comment_type' => "give_{$comment_type}_note",
128
129 )
130 );
131
132
133 // Check comment max length.
134 $error = wp_check_comment_data_max_lengths( $comment_args );
135 if( is_wp_error( $error ) ) {
136 return $error;
137 }
138
139 // Remove moderation emails when comment posted.
140 remove_action( 'comment_post', 'wp_new_comment_notify_moderator' );
141 remove_action( 'comment_post', 'wp_new_comment_notify_postauthor' );
142
143 $comment_id = $is_existing_comment
144 ? wp_update_comment( $comment_args )
145 : wp_new_comment( $comment_args, true );
146
147 // Add moderation emails when comment posted.
148 add_action( 'comment_post', 'wp_new_comment_notify_moderator' );
149 add_action( 'comment_post', 'wp_new_comment_notify_postauthor' );
150
151 update_comment_meta( $comment_id, "_give_{$comment_type}_id", $id );
152
153 /**
154 * Fires after payment|donor comment inserted/updated.
155 *
156 * @param int $comment_id Comment ID.
157 * @param int $id Payment|Donor ID.
158 * @param string $note Comment text.
159 *
160 * @since 1.0
161 */
162 do_action( "give_{$action_type}_{$comment_type}_note", $comment_id, $id, $note );
163
164 return $comment_id;
165 }
166
167
168 /**
169 * Delete comment
170 *
171 * @since 2.2.0
172 * @access public
173 *
174 * @param int $comment_id The comment ID to delete.
175 * @param int $id The payment|Donor ID the note is connected to.
176 * @param string $comment_type Value can ve donor|payment.
177 *
178 * @since 1.0
179 *
180 * @return bool True on success, false otherwise.
181 */
182 public static function delete( $comment_id, $id, $comment_type ) {
183 $ret = false;
184
185 // Bailout
186 if ( empty( $id ) || empty( $comment_id ) || empty( $comment_type ) ) {
187 return $ret;
188 }
189
190 /**
191 * Fires before deleting donation note.
192 *
193 * @param int $comment_id Comment ID.
194 * @param int $id Payment|Donor ID.
195 *
196 * @since 1.0
197 */
198 do_action( "give_pre_delete_{$comment_type}_note", $comment_id, $id );
199
200 $ret = wp_delete_comment( $comment_id, true );
201
202 /**
203 * Fires after donation note deleted.
204 *
205 * @param int $comment_id Note ID.
206 * @param int $id Payment|Donor ID.
207 * @param bool $ret Flag to check if comment deleted or not.
208 *
209 * @since 1.0
210 */
211 do_action( "give_post_delete_{$comment_type}_note", $comment_id, $id, $ret );
212
213 return $ret;
214 }
215
216
217 /**
218 * Get comments
219 *
220 * @since 2.2.0
221 * @access public
222 *
223 * @param int $id
224 * @param string $comment_type
225 * @param array $comment_args
226 * @param string $search
227 *
228 * @return array
229 */
230 public static function get( $id, $comment_type, $comment_args = array(), $search = '' ) {
231 $comments = array();
232
233 // Set default meta_query value.
234 if ( ! isset( $comment_args['meta_query'] ) ) {
235 $comment_args['meta_query'] = array();
236 }
237
238 // Bailout
239 if ( empty( $id ) || empty( $comment_type ) ) {
240 return $comments;
241 }
242
243 remove_action( 'pre_get_comments', array( self::$instance, 'hide_comments' ), 10 );
244 remove_filter( 'comments_clauses', array( self::$instance, 'hide_comments_pre_wp_41' ), 10 );
245
246 switch ( $comment_type ) {
247 case 'payment':
248 $comment_args['meta_query'] = ! empty( $comment_args['meta_query'] )
249 ? $comment_args['meta_query']
250 : array(
251 array(
252 'key' => '_give_donor_id',
253 'compare' => 'NOT EXISTS'
254 )
255 );
256
257 $comments = get_comments( wp_parse_args(
258 $comment_args,
259 array(
260 'post_id' => $id,
261 'order' => 'ASC',
262 'search' => $search,
263 'type' => 'give_payment_note'
264 )
265 ) );
266 break;
267
268 case 'donor':
269 $comment_args['meta_query'] = ! empty( $comment_args['meta_query'] )
270 ? $comment_args['meta_query']
271 : array(
272 array(
273 'key' => "_give_{$comment_type}_id",
274 'value' => $id
275 )
276 );
277
278 $comments = get_comments( wp_parse_args(
279 $comment_args,
280 array(
281 'order' => 'ASC',
282 'search' => $search,
283 'type' => 'give_donor_note'
284 )
285 ) );
286 break;
287 }
288
289 add_action( 'pre_get_comments', array( self::$instance, 'hide_comments' ), 10, 1 );
290 add_filter( 'comments_clauses', array( self::$instance, 'hide_comments_pre_wp_41' ), 10, 1 );
291
292 return $comments;
293 }
294
295 /**
296 * Exclude comments from showing in Recent
297 * Comments widgets
298 *
299 * @since 2.2.0
300 * @access public
301 *
302 * @param object $query WordPress Comment Query Object.
303 *
304 * @return void
305 */
306 public function hide_comments( $query ) {
307 if ( version_compare( floatval( get_bloginfo( 'version' ) ), '4.1', '>=' ) ) {
308 $types = isset( $query->query_vars['type__not_in'] ) ? $query->query_vars['type__not_in'] : array();
309 if ( ! is_array( $types ) ) {
310 $types = array( $types );
311 }
312
313 $types = array_filter( array_merge( $types, $this->comment_types ) );
314
315 $query->query_vars['type__not_in'] = $types;
316 }
317 }
318
319 /**
320 * Exclude notes (comments) from showing in Recent Comments widgets
321 *
322 * @since 2.2.0
323 * @access public
324 *
325 * @param array $clauses Comment clauses for comment query.
326 *
327 * @return array $clauses Updated comment clauses.
328 */
329 public function hide_comments_pre_wp_41( $clauses ) {
330 if ( version_compare( floatval( get_bloginfo( 'version' ) ), '4.1', '<' ) ) {
331 foreach ( $this->comment_types as $comment_type ) {
332 $clauses['where'] .= " AND comment_type != \"{$comment_type}\"";
333 }
334 }
335
336 return $clauses;
337 }
338
339 /**
340 * Exclude notes (comments) from showing in comment feeds
341 *
342 * @since 2.2.0
343 * @access public
344 *
345 * @param string $where
346 *
347 * @return string $where
348 */
349 public function hide_comments_from_feeds( $where ) {
350 global $wpdb;
351
352 foreach ( $this->comment_types as $comment_type ) {
353 $where .= $wpdb->prepare( ' AND comment_type!=%s', $comment_type );
354 }
355
356 return $where;
357 }
358
359 /**
360 * Remove Give Comments from the wp_count_comments function
361 *
362 * @since 2.2.0
363 * @access public
364 *
365 * @param array $stats (empty from core filter).
366 * @param int $post_id Post ID.
367 *
368 * @return array|object Array of comment counts.
369 */
370 public function remove_comments_from_comment_counts( $stats, $post_id ) {
371 global $wpdb;
372
373 $post_id = (int) $post_id;
374
375 if ( apply_filters( 'give_count_payment_notes_in_comments', false ) ) {
376 return $stats;
377 }
378
379 $stats = Give_Cache::get_group( "comments-{$post_id}", 'counts' );
380
381 // Return result from cache.
382 if ( ! is_null( $stats ) ) {
383 return $stats;
384 }
385
386 $where = 'WHERE';
387
388 foreach ( $this->comment_types as $index => $comment_type ) {
389 $where .= ( $index ? ' AND ' : ' ' ) . "comment_type != \"{$comment_type}\"";
390 }
391
392 if ( $post_id > 0 ) {
393 $where .= $wpdb->prepare( ' AND comment_post_ID = %d', $post_id );
394 }
395
396 $count = $wpdb->get_results(
397 "
398 SELECT comment_approved, COUNT( * ) AS num_comments
399 FROM {$wpdb->comments} {$where}
400 GROUP BY comment_approved
401 ",
402 ARRAY_A
403 );
404
405 $total = 0;
406 $approved = array(
407 '0' => 'moderated',
408 '1' => 'approved',
409 'spam' => 'spam',
410 'trash' => 'trash',
411 'post-trashed' => 'post-trashed',
412 );
413
414 foreach ( (array) $count as $row ) {
415 // Don't count post-trashed toward totals.
416 if ( 'post-trashed' != $row['comment_approved'] && 'trash' != $row['comment_approved'] ) {
417 $total += $row['num_comments'];
418 }
419 if ( isset( $approved[ $row['comment_approved'] ] ) ) {
420 $stats[ $approved[ $row['comment_approved'] ] ] = $row['num_comments'];
421 }
422 }
423
424 $stats['total_comments'] = $stats['all'] = $total;
425 foreach ( $approved as $key ) {
426 if ( empty( $stats[ $key ] ) ) {
427 $stats[ $key ] = 0;
428 }
429 }
430
431 $stats = (object) $stats;
432
433 Give_Cache::set_group( "comments-{$post_id}", $stats, 'counts' );
434
435 return $stats;
436 }
437
438 /**
439 * Get donor name
440 *
441 * @since 2.2.0
442 * @access public
443 *
444 * @param string $author
445 * @param int $comment_id
446 * @param WP_Comment $comment
447 *
448 * @return mixed
449 */
450 public function __get_comment_author( $author, $comment_id, $comment ) {
451 if ( in_array( $comment->comment_type, $this->comment_types ) ) {
452 switch ( $comment->comment_type ) {
453 case 'give_payment_note':
454 if ( get_comment_meta( $comment_id, '_give_donor_id', true ) ) {
455 $author = give_get_donor_name_by( $comment->comment_post_ID );
456 }
457 }
458 }
459
460 return $author;
461 }
462
463
464 /**
465 * Get comment types
466 *
467 * @since 2.2.0
468 * @access public
469 *
470 * @param array @comment_types
471 *
472 * @return array
473 */
474 public static function get_comment_types( $comment_types ) {
475 $_comment_types = array();
476 foreach ( $comment_types as $comment_type ) {
477 $_comment_types[] = "give_{$comment_type}_note";
478 }
479
480 return $_comment_types;
481 }
482 }
483