PluginProbe ʕ •ᴥ•ʔ
MailPoet – Newsletters, Email Marketing, and Automation / 5.36.0
MailPoet – Newsletters, Email Marketing, and Automation v5.36.0
5.36.0 5.35.1 5.35.0 5.34.3 5.34.2 5.34.1 5.34.0 5.33.1 5.33.0 5.32.0 5.31.0 5.30.0 5.29.0 5.28.1 5.28.0 5.27.0 5.26.0 5.26.1 5.25.0 5.24.0 4.43.0 4.43.1 4.44.0 4.44.1 4.45.0 4.46.0 4.47.0 4.48.0 4.48.1 4.48.2 4.49.0 4.49.1 4.5.0 4.5.1 4.5.2 4.50.0 4.50.1 4.51.0 4.51.1 4.51.2 4.52.0 4.53.0 4.54.0 4.55.0 4.56.0 4.57.0 4.58.0 4.58.1 4.58.2 4.6.0 4.6.1 4.6.2 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 5.0.0 5.0.1 5.0.2 5.1.0 5.1.1 5.10.0 5.10.1 5.11.0 5.12.0 5.12.1 5.12.10 5.12.11 5.12.12 5.12.13 5.12.2 5.12.3 5.12.4 5.12.5 5.12.6 5.12.7 5.12.8 5.12.9 5.13.0 5.13.1 5.13.2 5.14.0 5.14.1 5.14.2 5.14.3 5.15.0 5.15.1 5.16.0 5.16.1 5.16.2 5.16.3 5.16.4 5.17.0 5.17.1 5.17.2 5.17.3 5.17.4 5.17.5 5.17.6 5.18.0 5.19.0 5.2.0 5.2.1 5.2.2 5.2.3 5.20.0 5.21.0 5.21.1 5.21.2 5.21.3 5.22.0 5.22.1 5.22.2 5.22.3 5.22.4 5.23.0 5.23.1 5.23.2 5.3.0 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.3.6 5.3.7 5.4.0 5.4.1 5.4.2 5.5.0 5.5.1 5.5.2 5.6.0 5.6.1 5.6.2 5.6.3 5.6.4 5.7.0 5.7.1 5.8.0 5.8.1 5.9.0 3.0.0-beta.15 3.7.1 3.0.0-beta.16 3.7.2 3.0.0-beta.17 3.7.3 3.0.0-beta.18 3.7.4 3.0.0-beta.19 3.7.5 3.0.0-beta.2 3.7.6 3.0.0-beta.20 3.7.8 3.0.0-beta.21 3.70.0 3.0.0-beta.22 3.71.0 3.0.0-beta.23 3.71.1 3.0.0-beta.23.1 3.71.2 3.0.0-beta.23.2 3.71.3 3.0.0-beta.24 3.72.0 3.0.0-beta.25 3.73.0 3.0.0-beta.26 3.73.1 3.0.0-beta.27 3.73.2 3.0.0-beta.28 3.74.0 3.0.0-beta.29 3.74.1 3.0.0-beta.3 3.74.2 3.0.0-beta.30 3.74.3 3.0.0-beta.31 3.75.0 3.0.0-beta.32 3.75.1 3.0.0-beta.33 3.76.0 3.0.0-beta.33.1 3.77.0 3.0.0-beta.34.0.0 3.77.1 3.0.0-beta.36.0.0 3.78.0 3.0.0-beta.36.0.1 3.79.0 3.0.0-beta.36.2.0 3.8 3.0.0-beta.36.3.0 3.8.1 3.0.0-beta.36.3.1 3.8.2 3.0.0-beta.37.0.0 3.8.3 3.0.0-beta.4 3.8.4 3.0.0-beta.5 3.8.5 3.0.0-beta.6 3.8.6 3.0.0-beta.7 3.80.0 3.0.0-beta.7.1 3.81.0 3.0.0-beta.8 3.82.0 3.0.0-beta.9 3.83.0 3.0.0-rc.1.0.0 3.84.0 3.0.0-rc.1.0.1 3.84.1 3.0.0-rc.1.0.2 3.85.0 3.0.0-rc.1.0.3 3.85.1 3.0.0-rc.1.0.4 3.86.0 3.0.0-rc.2.0.0 3.87.0 3.0.0-rc.2.0.1 3.87.1 3.0.0-rc.2.0.2 3.87.2 3.0.0-rc.2.0.3 3.88.0 3.0.1 3.88.1 3.0.2 3.88.2 3.0.3 3.89.0 3.0.4 3.89.1 3.0.5 3.89.2 3.0.6 3.89.3 3.0.7 3.89.4 3.0.8 3.9.0 3.0.9 3.9.1 3.1.0 3.90.0 3.10 3.90.1 3.10.1 3.90.2 3.100.0 3.91.0 3.100.1 3.91.1 3.100.2 3.92.0 3.101.0 3.92.1 3.101.1 3.93.0 3.102.0 3.93.1 3.102.1 3.94.0 3.103.0 3.95.0 3.103.1 3.95.1 3.11.0 3.96.0 3.11.1 3.96.1 3.11.2 3.97.0 3.11.3 3.98.0 3.11.4 3.98.1 3.11.5 3.99.0 3.12.0 3.99.1 3.12.1 4.0.0 3.13.0 4.0.1 3.14.0 4.1.0 3.14.1 4.1.1 3.15.0 4.10.0 3.16.0 4.11.0 3.16.1 4.11.1 3.16.2 4.12.0 3.16.3 4.12.1 3.17.0 4.12.2 3.17.1 4.13.0 3.17.2 4.14.0 3.18.0 4.15.0 3.18.1 4.16.0 3.18.2 4.17.0 3.19.0 4.17.1 3.19.1 4.18.0 3.19.2 4.18.1 3.19.3 4.19.0 3.2.0 4.2.0 3.2.1 4.20.0 3.2.2 4.20.1 3.2.3 4.20.2 3.2.4 4.21.0 3.2.5 4.22.0 3.20.0 4.22.1 3.21.0 4.22.2 3.21.1 4.23.0 3.22.0 4.24.0 3.23.0 4.25.0 3.23.1 4.26.0 3.23.2 4.26.1 3.24.0 4.27.0 3.25.0 4.28.0 3.25.1 4.29.0 3.26.0 4.3.0 3.26.1 4.3.1 3.27.0 4.30.0 3.28.0 4.31.0 3.29.0 4.31.1 3.3.0 4.32.0 3.3.1 4.33.0 3.3.2 4.34.0 3.3.3 4.35.0 3.3.4 4.35.1 3.3.5 4.36.0 3.3.6 4.37.0 3.30.0 4.38.0 3.31.0 4.39.0 3.31.1 4.4.0 3.32.0 4.40.0 3.32.1 4.41.0 3.32.2 4.41.1 3.33.0 4.41.2 3.34.0 4.41.3 3.34.1 4.42.0 3.34.2 4.42.1 3.34.3 3.34.4 3.35.0 3.35.1 3.35.3 3.35.4 3.36.0 3.37.0 3.37.1 3.37.2 3.37.3 3.38.0 3.38.1 3.39.0 3.39.1 3.39.2 3.4.0 3.4.1 3.4.2 3.4.3 3.4.4 3.40.0 3.40.1 3.41.0 3.41.1 3.41.2 3.42.0 3.42.1 3.42.2 3.42.3 3.43.0 3.43.1 3.44.0 3.45.0 3.45.1 3.46.0 3.46.1 3.46.10 3.46.11 3.46.12 3.46.13 3.46.14 3.46.2 3.46.3 3.46.4 3.46.5 3.46.6 3.46.7 3.46.8 3.46.9 3.47.0 3.47.1 3.47.10 3.47.11 3.47.2 3.47.3 3.47.5 3.47.6 3.47.7 3.47.9 3.48.0 3.48.1 3.49.0 3.49.1 3.5.0 3.5.1 3.50.0 3.51.0 3.51.1 3.51.2 3.52.0 3.53.0 3.54.0 3.54.1 3.54.2 3.54.3 3.55.0 3.55.1 3.56.0 3.56.1 3.56.2 3.57.0 3.57.1 3.58.0 3.59.0 3.59.1 3.59.2 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.6.5 3.6.6 3.6.7 3.60.0 3.60.1 3.60.10 3.60.11 3.60.12 3.60.2 3.60.3 3.60.4 3.60.6 3.60.7 3.60.8 3.60.9 3.61.0 3.62.0 3.62.1 3.63.0 3.64.0 3.64.1 3.64.2 3.64.3 3.65.0 trunk 3.65.1 3.0.0 3.66.0 3.0.0-beta.1 3.67.0 3.0.0-beta.10 3.67.1 3.0.0-beta.11 3.68.0 3.0.0-beta.12 3.69.0 3.0.0-beta.13 3.69.1 3.0.0-beta.14 3.7.0
mailpoet / vendor / woocommerce / action-scheduler / classes / data-stores / ActionScheduler_wpCommentLogger.php
mailpoet / vendor / woocommerce / action-scheduler / classes / data-stores Last commit date
ActionScheduler_DBLogger.php 1 year ago ActionScheduler_DBStore.php 1 year ago ActionScheduler_HybridStore.php 1 year ago ActionScheduler_wpCommentLogger.php 1 year ago ActionScheduler_wpPostStore.php 1 year ago ActionScheduler_wpPostStore_PostStatusRegistrar.php 4 years ago ActionScheduler_wpPostStore_PostTypeRegistrar.php 1 year ago ActionScheduler_wpPostStore_TaxonomyRegistrar.php 1 year ago index.php 3 years ago
ActionScheduler_wpCommentLogger.php
153 lines
1 <?php
2 if (!defined('ABSPATH')) exit;
3 class ActionScheduler_wpCommentLogger extends ActionScheduler_Logger {
4 const AGENT = 'ActionScheduler';
5 const TYPE = 'action_log';
6 public function log( $action_id, $message, ?DateTime $date = null ) {
7 if ( empty( $date ) ) {
8 $date = as_get_datetime_object();
9 } else {
10 $date = as_get_datetime_object( clone $date );
11 }
12 $comment_id = $this->create_wp_comment( $action_id, $message, $date );
13 return $comment_id;
14 }
15 protected function create_wp_comment( $action_id, $message, DateTime $date ) {
16 $comment_date_gmt = $date->format( 'Y-m-d H:i:s' );
17 ActionScheduler_TimezoneHelper::set_local_timezone( $date );
18 $comment_data = array(
19 'comment_post_ID' => $action_id,
20 'comment_date' => $date->format( 'Y-m-d H:i:s' ),
21 'comment_date_gmt' => $comment_date_gmt,
22 'comment_author' => self::AGENT,
23 'comment_content' => $message,
24 'comment_agent' => self::AGENT,
25 'comment_type' => self::TYPE,
26 );
27 return wp_insert_comment( $comment_data );
28 }
29 public function get_entry( $entry_id ) {
30 $comment = $this->get_comment( $entry_id );
31 if ( empty( $comment ) || self::TYPE !== $comment->comment_type ) {
32 return new ActionScheduler_NullLogEntry();
33 }
34 $date = as_get_datetime_object( $comment->comment_date_gmt );
35 ActionScheduler_TimezoneHelper::set_local_timezone( $date );
36 return new ActionScheduler_LogEntry( $comment->comment_post_ID, $comment->comment_content, $date );
37 }
38 public function get_logs( $action_id ) {
39 $status = 'all';
40 $logs = array();
41 if ( get_post_status( $action_id ) === 'trash' ) {
42 $status = 'post-trashed';
43 }
44 $comments = get_comments(
45 array(
46 'post_id' => $action_id,
47 'orderby' => 'comment_date_gmt',
48 'order' => 'ASC',
49 'type' => self::TYPE,
50 'status' => $status,
51 )
52 );
53 foreach ( $comments as $c ) {
54 $entry = $this->get_entry( $c );
55 if ( ! empty( $entry ) ) {
56 $logs[] = $entry;
57 }
58 }
59 return $logs;
60 }
61 protected function get_comment( $comment_id ) {
62 return get_comment( $comment_id );
63 }
64 public function filter_comment_queries( $query ) {
65 foreach ( array( 'ID', 'parent', 'post_author', 'post_name', 'post_parent', 'type', 'post_type', 'post_id', 'post_ID' ) as $key ) {
66 if ( ! empty( $query->query_vars[ $key ] ) ) {
67 return; // don't slow down queries that wouldn't include action_log comments anyway.
68 }
69 }
70 $query->query_vars['action_log_filter'] = true;
71 add_filter( 'comments_clauses', array( $this, 'filter_comment_query_clauses' ), 10, 2 );
72 }
73 public function filter_comment_query_clauses( $clauses, $query ) {
74 if ( ! empty( $query->query_vars['action_log_filter'] ) ) {
75 $clauses['where'] .= $this->get_where_clause();
76 }
77 return $clauses;
78 }
79 public function filter_comment_feed( $where, $query ) {
80 if ( is_comment_feed() ) {
81 $where .= $this->get_where_clause();
82 }
83 return $where;
84 }
85 protected function get_where_clause() {
86 global $wpdb;
87 return sprintf( " AND {$wpdb->comments}.comment_type != '%s'", self::TYPE );
88 }
89 public function filter_comment_count( $stats, $post_id ) {
90 global $wpdb;
91 if ( 0 === $post_id ) {
92 $stats = $this->get_comment_count();
93 }
94 return $stats;
95 }
96 protected function get_comment_count() {
97 global $wpdb;
98 $stats = get_transient( 'as_comment_count' );
99 if ( ! $stats ) {
100 $stats = array();
101 $count = $wpdb->get_results( "SELECT comment_approved, COUNT( * ) AS num_comments FROM {$wpdb->comments} WHERE comment_type NOT IN('order_note','action_log') GROUP BY comment_approved", ARRAY_A );
102 $total = 0;
103 $stats = array();
104 $approved = array(
105 '0' => 'moderated',
106 '1' => 'approved',
107 'spam' => 'spam',
108 'trash' => 'trash',
109 'post-trashed' => 'post-trashed',
110 );
111 foreach ( (array) $count as $row ) {
112 // Don't count post-trashed toward totals.
113 if ( 'post-trashed' !== $row['comment_approved'] && 'trash' !== $row['comment_approved'] ) {
114 $total += $row['num_comments'];
115 }
116 if ( isset( $approved[ $row['comment_approved'] ] ) ) {
117 $stats[ $approved[ $row['comment_approved'] ] ] = $row['num_comments'];
118 }
119 }
120 $stats['total_comments'] = $total;
121 $stats['all'] = $total;
122 foreach ( $approved as $key ) {
123 if ( empty( $stats[ $key ] ) ) {
124 $stats[ $key ] = 0;
125 }
126 }
127 $stats = (object) $stats;
128 set_transient( 'as_comment_count', $stats );
129 }
130 return $stats;
131 }
132 public function delete_comment_count_cache() {
133 delete_transient( 'as_comment_count' );
134 }
135 public function init() {
136 add_action( 'action_scheduler_before_process_queue', array( $this, 'disable_comment_counting' ), 10, 0 );
137 add_action( 'action_scheduler_after_process_queue', array( $this, 'enable_comment_counting' ), 10, 0 );
138 parent::init();
139 add_action( 'pre_get_comments', array( $this, 'filter_comment_queries' ), 10, 1 );
140 add_action( 'wp_count_comments', array( $this, 'filter_comment_count' ), 20, 2 ); // run after WC_Comments::wp_count_comments() to make sure we exclude order notes and action logs.
141 add_action( 'comment_feed_where', array( $this, 'filter_comment_feed' ), 10, 2 );
142 // Delete comments count cache whenever there is a new comment or a comment status changes.
143 add_action( 'wp_insert_comment', array( $this, 'delete_comment_count_cache' ) );
144 add_action( 'wp_set_comment_status', array( $this, 'delete_comment_count_cache' ) );
145 }
146 public function disable_comment_counting() {
147 wp_defer_comment_counting( true );
148 }
149 public function enable_comment_counting() {
150 wp_defer_comment_counting( false );
151 }
152 }
153