PluginProbe
Meow Gallery / 5.5.6
Meow Gallery v5.5.6
5.5.6 5.5.5 5.5.4 5.5.3 5.5.2 5.5.1 5.5.0 5.4.9 5.4.8 5.4.7 4.1.5 4.1.6 4.1.7 4.1.8 4.1.9 4.2.0 4.2.1 4.2.2 4.2.3 4.2.4 4.2.5 4.2.6 4.2.7 4.2.8 4.2.9 All 158 releases
← All changes | common/ratings.php +169 -97 4.2.5 → 5.5.6 View file →
@@ -1,114 +1,186 @@
1 1 <?php
2 2
3 -if ( !class_exists( 'MeowCommon_Ratings' ) ) {
3 +if ( !class_exists( 'MeowKit_MGL_Ratings' ) ) {
4 4
5 - class MeowCommon_Ratings {
5 + class MeowKit_MGL_Ratings {
6 + public $mainfile; // plugin main file (media-file-renamer.php)
7 + public $domain; // domain used for translation (media-file-renamer)
8 + public $prefix; // used for many things (filters, options, etc)
9 + public $ignored_domains = [ 'mwai-*' ];
6 10
7 - public $mainfile; // plugin main file (media-file-renamer.php)
8 - public $domain; // domain used for translation (media-file-renamer)
9 - public $prefix; // used for many things (filters, options, etc)
11 + public function __construct( $prefix, $mainfile, $domain ) {
12 + $this->mainfile = $mainfile;
13 + $this->domain = $domain;
14 + $this->prefix = $prefix;
10 15
11 - public function __construct( $prefix, $mainfile, $domain ) {
12 - $this->mainfile = $mainfile;
13 - $this->domain = $domain;
14 - $this->prefix = $prefix;
16 + if ( array_search( $this->domain, $this->ignored_domains ) !== false ) {
17 + return;
18 + }
19 + foreach ( $this->ignored_domains as $ignored_domain ) {
20 + if ( strpos( $ignored_domain, '*' ) !== false ) {
21 + $ignored_domain = str_replace( '*', '', $ignored_domain );
22 + if ( strpos( $this->domain, $ignored_domain ) !== false ) {
23 + return;
24 + }
25 + }
26 + }
15 27
16 - register_activation_hook( $mainfile, array( $this, 'show_meowapps_create_rating_date' ) );
17 -
28 + // Add the hooks
29 + register_activation_hook( $mainfile, [ $this, 'show_meowapps_create_rating_date' ] );
18 30 if ( is_admin() ) {
19 31 $rating_date = $this->create_rating_date();
20 32 if ( time() > $rating_date ) {
21 - add_action( 'admin_notices', array( $this, 'admin_notices_rating' ) );
33 + add_action( 'admin_notices', [ $this, 'admin_notices_rating' ] );
34 + add_filter( 'safe_style_css', function ( $styles ) {
35 + $styles[] = 'display';
36 + return $styles;
37 + } );
22 38 }
23 39 }
24 - }
40 + }
25 41
26 - function show_meowapps_create_rating_date() {
27 - delete_option( 'meowapps_hide_meowapps' );
28 - $this->create_rating_date();
29 - }
42 + public function show_meowapps_create_rating_date() {
43 + delete_option( 'meowapps_hide_meowapps' );
44 + $this->create_rating_date();
45 + }
30 46
31 - function create_rating_date() {
32 - $rating_date = get_option( $this->prefix . '_rating_date' );
33 - if ( empty( $rating_date ) ) {
34 - $two_weeks = strtotime( '+2 weeks' );
35 - $three_weeks = strtotime( '+3 weeks' );
36 - $rating_date = mt_rand( $two_weeks, $three_weeks );
37 - update_option( $this->prefix . '_rating_date', $rating_date, false );
38 - }
39 - return $rating_date;
40 - }
47 + public function create_rating_date() {
48 + $rating_date = get_option( $this->prefix . '_rating_date' );
49 + if ( empty( $rating_date ) ) {
50 + $two_weeks = strtotime( '+2 weeks' );
51 + $three_weeks = strtotime( '+3 weeks' );
52 + $rating_date = mt_rand( $two_weeks, $three_weeks );
53 + update_option( $this->prefix . '_rating_date', $rating_date, false );
54 + }
55 + return $rating_date;
56 + }
41 57
42 - function admin_notices_rating() {
43 - if ( isset( $_POST[$this->prefix . '_remind_me'] ) ) {
44 - $two_weeks = strtotime( '+2 weeks' );
45 - $six_weeks = strtotime( '+6 weeks' );
46 - $future_date = mt_rand( $two_weeks, $six_weeks );
47 - update_option( $this->prefix . '_rating_date', $future_date, false );
48 - return;
49 - }
50 - else if ( isset( $_POST[$this->prefix . '_never_remind_me'] ) ) {
51 - $twenty_years = strtotime( '+5 years' );
52 - update_option( $this->prefix . '_rating_date', $twenty_years, false );
53 - return;
54 - }
55 - else if ( isset( $_POST[$this->prefix . '_did_it'] ) ) {
56 - $twenty_years = strtotime( '+10 years' );
57 - update_option( $this->prefix . '_rating_date', $twenty_years, false );
58 - return;
59 - }
60 - $rating_date = get_option( $this->prefix . '_rating_date' );
61 - $html = '<div class="notice notice-success" data-rating-date="' . date( 'Y-m-d', $rating_date ) . '">';
62 - $html .= '<p style="font-size: 100%;">';
63 - $html .= sprintf(
64 - // translators: %1$s is a plugin nicename, %2$s is a short url (slug)
65 - __( 'You have been using <b>%1$s</b> for some time now. Thank you! Could you kindly share your opinion with me, along with, maybe, features you would like to see implemented? Then, please <a style="font-weight: bold; color: #b926ff;" target="_blank" href="https://wordpress.org/support/plugin/%2$s/reviews/?rate=5#new-post">write a little review</a>. That will also bring me joy and motivation! I will get back to you :)', $this->domain ),
66 - $this->nice_name_from_file( $this->mainfile ),
67 - $this->nice_short_url_from_file( $this->mainfile )
68 - );
69 - $html .= '<p>
70 - <form method="post" action="" style="float: right;">
71 - <input type="hidden" name="' . $this->prefix . '_never_remind_me" value="true">
72 - <input type="submit" name="submit" id="submit" class="button button-red" value="'
73 - . __( 'Never remind me!', $this->domain ) . '">
74 - </form>
75 - <form method="post" action="" style="float: right; margin-right: 10px;">
76 - <input type="hidden" name="' . $this->prefix . '_remind_me" value="true">
77 - <input type="submit" name="submit" id="submit" class="button button-primary" value="'
78 - . __( 'Remind me in a few weeks...', $this->domain ) . '">
79 - </form>
80 - <form method="post" action="" style="float: right; margin-right: 10px;">
81 - <input type="hidden" name="' . $this->prefix . '_did_it" value="true">
82 - <input type="submit" name="submit" id="submit" class="button button-primary" value="'
83 - . __( 'Yes, I did it!', $this->domain ) . '">
84 - </form>
85 - <div style="clear: both;"></div>
86 - </p>';
87 - $html .= '</div>';
88 - wp_kses_post( $html );
89 - }
58 + public function admin_notices_rating() {
59 + // Verify the nonce before acting on any of the review-notice buttons (CSRF protection).
60 + $nonce_ok = isset( $_POST[ $this->prefix . '_rating_nonce' ] )
61 + && wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST[ $this->prefix . '_rating_nonce' ] ) ), $this->prefix . '_rating' );
62 + if ( $nonce_ok && isset( $_POST[$this->prefix . '_remind_me'] ) ) {
63 + $two_weeks = strtotime( '+2 weeks' );
64 + $six_weeks = strtotime( '+6 weeks' );
65 + $future_date = mt_rand( $two_weeks, $six_weeks );
66 + update_option( $this->prefix . '_rating_date', $future_date, false );
67 + return;
68 + }
69 + else if ( $nonce_ok && isset( $_POST[$this->prefix . '_never_remind_me'] ) ) {
70 + $twenty_years = strtotime( '+5 years' );
71 + update_option( $this->prefix . '_rating_date', $twenty_years, false );
72 + return;
73 + }
74 + else if ( $nonce_ok && isset( $_POST[$this->prefix . '_did_it'] ) ) {
75 + $twenty_years = strtotime( '+100 years' );
76 + update_option( $this->prefix . '_rating_date', $twenty_years, false );
77 + return;
78 + }
79 + $rating_date = get_option( $this->prefix . '_rating_date' );
80 + $html = wp_kses_post( '<div class="notice notice-success" data-rating-date="' .
81 + date( 'Y-m-d', $rating_date ) . '">' );
82 + $esc_nice_name = esc_attr( $this->nice_name_from_file( $this->mainfile ) );
83 + if ( $esc_nice_name === 'Wp Retina 2x Pro' ) {
84 + $esc_nice_name = 'Perfect Images';
85 + }
86 + else if ( $esc_nice_name === 'Wp Retina 2x' ) {
87 + $esc_nice_name = 'Perfect Images';
88 + }
89 + else if ( $esc_nice_name === 'Ai Engine Pro' ) {
90 + $esc_nice_name = 'AI Engine';
91 + }
92 + $esc_short_url = esc_attr( $this->nice_short_url_from_file( $this->mainfile ) );
93 + $escaped_prefix = $this->prefix;
94 + $rating_nonce = esc_attr( wp_create_nonce( $this->prefix . '_rating' ) );
95 + $html .= '<p style="font-size: 100%;">';
96 + // Translators: %1$s is a plugin nicename, %2$s is a short url (slug)
97 + $url = 'https://wordpress.org/support/plugin/' . $esc_short_url . '/reviews/';
98 + $html .= sprintf(
99 + __( '<h2 style="margin: 0" class="title">You have been using <b>%1$s</b> for some time now. Thank you! 💕</h2><p>If you have a minute, can you write a <b><a target="_blank" href="' . $url . '">little review</a></b> for me? That would <b>really</b> bring me joy and motivation! 💫 <br />Don\'t hesitate to <b>share your feature requests</b> with the review, I always check them and try my best.</p>
100 + ', $this->domain ),
101 + $esc_nice_name
102 + );
103 + $html .= '<div style="padding: 5px 0 12px 0; display: flex; align-items: center;">';
104 + $html .= '<a target="_blank" class="button button-primary" style="margin-right: 10px;" href="' . $url . '">
105 + ✏️ Write Review
106 + </a>
107 + <form method="post" action="" style="margin-right: 10px;">
108 + <input type="hidden" name="' . $escaped_prefix . '_did_it" value="true"><input type="hidden" name="' . $escaped_prefix . '_rating_nonce" value="' . $rating_nonce . '">
109 + <input type="submit" name="submit" id="submit" class="button button-secondary" value="'
110 + . __( '✌️ Done!', $this->domain ) . '">
111 + </form>
90 112
91 - function nice_short_url_from_file( $file ) {
92 - $info = pathinfo( $file );
93 - if ( !empty( $info ) ) {
94 - $info['filename'] = str_replace( '-pro', '', $info['filename'] );
95 - return $info['filename'];
96 - }
97 - return "";
98 - }
113 + <div style="flex: auto;"></div>
99 114
100 - function nice_name_from_file( $file ) {
101 - $info = pathinfo( $file );
102 - if ( !empty( $info ) ) {
103 - if ( $info['filename'] == 'wplr-sync' ) {
104 - return "Photo Engine";
105 - }
106 - $info['filename'] = str_replace( '-', ' ', $info['filename'] );
107 - $file = ucwords( $info['filename'] );
108 - }
109 - return $file;
110 - }
111 - }
115 + <form method="post" action="" style="margin-right: 10px;">
116 + <input type="hidden" name="' . $escaped_prefix . '_remind_me" value="true"><input type="hidden" name="' . $escaped_prefix . '_rating_nonce" value="' . $rating_nonce . '">
117 + <input type="submit" name="submit" id="submit" class="button button-secondary" value="'
118 + . __( '⏰ Remind me later', $this->domain ) . '">
119 + </form>
120 +
121 + <form method="post" action="">
122 + <input type="hidden" name="' . $escaped_prefix . '_never_remind_me" value="true"><input type="hidden" name="' . $escaped_prefix . '_rating_nonce" value="' . $rating_nonce . '">
123 + <input type="submit" name="submit" id="submit" class="button-link" style="font-size: small;" value="'
124 + . __( 'Hide', $this->domain ) . '">
125 + </form>
126 + </div>';
127 + $html .= '</div>';
128 + echo wp_kses( $html, [
129 + 'div' => [
130 + 'class' => [],
131 + 'data-rating-date' => [],
132 + 'style' => [],
133 + ],
134 + 'p' => [
135 + 'style' => [],
136 + ],
137 + 'h2' => [
138 + 'class' => [],
139 + 'style' => []
140 + ],
141 + 'b' => [],
142 + 'br' => [],
143 + 'a' => [
144 + 'href' => [],
145 + 'target' => [],
146 + 'class' => [],
147 + 'style' => [],
148 + ],
149 + 'form' => [
150 + 'method' => [],
151 + 'action' => [],
152 + 'class' => [],
153 + 'style' => [],
154 + ],
155 + 'input' => [
156 + 'type' => [],
157 + 'name' => [],
158 + 'value' => [],
159 + 'id' => [],
160 + 'class' => [],
161 + ],
162 + ] );
163 + }
164 +
165 + public function nice_short_url_from_file( $file ) {
166 + $info = pathinfo( $file );
167 + if ( !empty( $info ) ) {
168 + $info['filename'] = str_replace( '-pro', '', $info['filename'] );
169 + return $info['filename'];
170 + }
171 + return '';
172 + }
173 +
174 + public function nice_name_from_file( $file ) {
175 + $info = pathinfo( $file );
176 + if ( !empty( $info ) ) {
177 + if ( $info['filename'] == 'wplr-sync' ) {
178 + return 'Photo Engine';
179 + }
180 + $info['filename'] = str_replace( '-', ' ', $info['filename'] );
181 + $file = ucwords( $info['filename'] );
182 + }
183 + return $file;
184 + }
185 + }
112 186 }
113 -
114 -?>