PluginProbe
Customize WordPress Emails and Alerts – Better Notifications for WP / 1.3.2
Customize WordPress Emails and Alerts – Better Notifications for WP v1.3.2
1.7.1 1.7.2 1.7.3 1.7.4 1.7.5 1.7.6 1.7.7 1.8 1.8.1 1.8.10 1.8.11 1.8.2 1.8.3 1.8.4 1.8.5 1.8.6 1.8.7 1.8.8 1.8.9 1.9 1.9.1 1.9.2 1.9.3 1.9.4 1.9.5 All 81 releases
bnfw / bnfw.php

bnfw.php in Customize WordPress Emails and Alerts – Better Notifications for WP 1.3.2, at bnfw.php

408 lines 11.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Plugin Name: Better Notifications for WordPress
4 * Plugin URI: http://wordpress.org/plugins/bnfw/
5 * Description: Send customisable HTML emails to your users for different WordPress notifications.
6 * Version: 1.3.2
7 * Author: Voltronik
8 * Author URI: http://www.voltronik.co.uk/
9 * Author Email: plugins@voltronik.co.uk
10 * License: GPLv2 or later
11 * License URI: http://www.gnu.org/licenses/gpl-2.0.html
12 * Text Domain: bnfw
13 * Domain Path: languages/
14 */
15
16 /**
17 * Copyright © 2014 Voltronik (plugins@voltronik.co.uk)
18 * This program is free software; you can redistribute it and/or modify
19 * it under the terms of the GNU General Public License, version 2, as
20 * published by the Free Software Foundation.
21 * This program is distributed in the hope that it will be useful,
22 * but WITHOUT ANY WARRANTY; without even the implied warranty of
23 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24 * GNU General Public License for more details.
25 * You should have received a copy of the GNU General Public License
26 * along with this program; if not, write to the Free Software
27 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
28 */
29 class BNFW {
30
31 /**
32 * Constructor.
33 *
34 * @since 1.0
35 */
36 function __construct() {
37 $this->load_textdomain();
38 $this->includes();
39 $this->hooks();
40
41 $this->notifier = new BNFW_Notification;
42 $this->engine = new BNFW_Engine;
43 }
44
45 /**
46 * Factory method to return the instance of the class.
47 *
48 * Makes sure that only one instance is created.
49 *
50 * @return object Instance of the class
51 */
52 public static function factory() {
53 static $instance = false;
54 if ( ! $instance ) {
55 $instance = new self();
56 }
57 return $instance;
58 }
59
60 /**
61 * Loads the plugin language files
62 *
63 * @since 1.0
64 */
65 public function load_textdomain() {
66 // Load localization domain
67 $this->translations = dirname( plugin_basename( __FILE__ ) ) . '/languages/';
68 load_plugin_textdomain( 'bnfw', false, $this->translations );
69 }
70
71 /**
72 * Include required files.
73 *
74 * @since 1.0
75 */
76 public function includes() {
77 // Load Engine and post type
78 require_once 'includes/engine/class-bnfw-engine.php';
79 require_once 'includes/admin/class-bnfw-notification.php';
80 require_once 'includes/overrides.php';
81
82 // Load Admin Pages
83 if ( is_admin() ) {
84 require_once 'includes/admin/bnfw-settings.php';
85 }
86 }
87
88 /**
89 * Register Hooks.
90 *
91 * @since 1.0
92 */
93 public function hooks() {
94 register_activation_hook( __FILE__ , array( $this, 'activate' ) );
95
96 // P2 theme directly inserts the post into db
97 if ( 'P2' == wp_get_theme() ) {
98 add_action( 'wp_insert_post' , array( $this, 'insert_post' ), 10, 3 );
99 }
100
101 add_action( 'draft_to_publish' , array( $this, 'publish_post' ) );
102 add_action( 'publish_to_publish' , array( $this, 'update_post' ) );
103 add_action( 'init' , array( $this, 'custom_post_type_hooks' ), 100 );
104 add_action( 'create_term' , array( $this, 'create_term' ), 10, 3 );
105
106 add_action( 'comment_post' , array( $this, 'comment_post' ) );
107 add_action( 'trackback_post' , array( $this, 'trackback_post' ) );
108 add_action( 'pingback_post' , array( $this, 'pingback_post' ) );
109
110 add_action( 'user_register' , array( $this, 'user_register' ) );
111 add_action( 'user_register' , array( $this, 'welcome_email' ) );
112
113 add_action( 'lostpassword_post' , array( $this, 'on_lost_password' ) );
114 add_filter( 'retrieve_password_title' , array( $this, 'change_password_email_title' ) );
115 add_filter( 'retrieve_password_message' , array( $this, 'change_password_email_message' ), 10, 4 );
116
117 add_filter( 'plugin_action_links' , array( $this, 'plugin_action_links' ), 10, 4 );
118 }
119
120 /**
121 * Setup hooks for custom post types.
122 *
123 * @since 1.2
124 */
125 function custom_post_type_hooks() {
126 $post_types = get_post_types( array( 'public' => true ), 'names' );
127 $post_types = array_diff( $post_types, array( BNFW_Notification::POST_TYPE ) );
128
129 foreach ( $post_types as $post_type ) {
130 add_action( 'pending_' . $post_type, array( $this, 'on_post_pending' ), 10, 2 );
131 add_action( 'future_' . $post_type, array( $this, 'on_post_scheduled' ), 10, 2 );
132 }
133 }
134
135 /**
136 * importer
137 */
138 public function activate() {
139 require_once dirname( __FILE__ ) . '/includes/import.php';
140 $importer = new BNFW_Import;
141 $importer->import();
142 }
143
144 /**
145 * Add 'Settings' link below BNFW in Plugins list.
146 *
147 * @since 1.0
148 * @param unknown $links
149 * @param unknown $file
150 * @return unknown
151 */
152 public function plugin_action_links( $links, $file ) {
153 $plugin_file = 'bnfw/bnfw.php';
154 if ( $file == $plugin_file ) {
155 $settings_link = '<a href="' . admin_url( 'admin.php?page=bnfw-settings' ) . '">' . 'Settings' . '</a>';
156 array_unshift( $links, $settings_link );
157 }
158 return $links;
159 }
160
161 /**
162 * When a new term is created.
163 *
164 * @since 1.0
165 * @param int $term_id
166 * @param int $tt_id
167 * @param string $taxonomy
168 */
169 public function create_term( $term_id, $tt_id, $taxonomy ) {
170 $this->send_notification( 'newterm-' . $taxonomy, $term_id );
171 }
172
173 /**
174 * Fires when a post is created for the first time.
175 *
176 * @since 1.3.1
177 * @param int $post_id Post ID
178 * @param object $post Post object
179 * @param bool $update Whether it was an update
180 */
181 public function insert_post( $post_id, $post, $update ) {
182 $this->publish_post( $post );
183 }
184
185 /**
186 * Fires when a post is created for the first time.
187 *
188 * @since 1.0
189 * @param object $post Post Object
190 */
191 function publish_post( $post ) {
192 $post_id = $post->ID;
193 $post_type = $post->post_type;
194
195 if ( BNFW_Notification::POST_TYPE != $post_type ) {
196 $this->send_notification( 'new-' . $post_type, $post_id );
197 }
198 }
199
200 /**
201 * Fires when a post is updated.
202 *
203 * @since 1.0
204 * @param unknown $post
205 */
206 function update_post( $post ) {
207 $post_id = $post->ID;
208 $post_type = $post->post_type;
209
210 if ( BNFW_Notification::POST_TYPE != $post_type ) {
211 $this->send_notification( 'update-' . $post_type, $post_id );
212 }
213 }
214
215 /**
216 * Fires when a post is pending for review.
217 *
218 * @since 1.1
219 * @param int $post_id Post ID
220 * @param object $post Post object
221 */
222 function on_post_pending( $post_id, $post ) {
223 $post_type = $post->post_type;
224
225 if ( BNFW_Notification::POST_TYPE != $post_type ) {
226 $this->send_notification( 'pending-' . $post_type, $post_id );
227 }
228 }
229
230 /**
231 * Fires when a post is scheduled.
232 *
233 * @since 1.1.5
234 * @param int $post_id Post ID
235 * @param object $post Post object
236 */
237 function on_post_scheduled( $post_id, $post ) {
238 $post_type = $post->post_type;
239
240 if ( BNFW_Notification::POST_TYPE != $post_type ) {
241 $this->send_notification( 'future-' . $post_type, $post_id );
242 }
243 }
244
245 /**
246 * Send notification for new comments
247 *
248 * @since 1.0
249 * @param int $comment_id
250 */
251 function comment_post( $comment_id ) {
252 $the_comment = get_comment( $comment_id );
253 if ( $this->can_send_comment_notification( $the_comment ) ) {
254 $post = get_post( $the_comment->comment_post_ID );
255 $notification_type = 'new-comment'; // old notification name
256 if ( 'post' != $post->post_type ) {
257 $notification_type = 'comment-' . $post->post_type;
258 }
259 $this->send_notification( $notification_type, $comment_id );
260
261 // comment reply notification.
262 if ( $the_comment->comment_parent > 0 ) {
263 $notifications = $this->notifier->get_notifications( 'reply-comment' );
264 if ( count( $notifications ) > 0 ) {
265 $parent = get_comment( $the_comment->comment_parent );
266 if ( $parent->comment_author_email != $the_comment->comment_author_email ) {
267 foreach ( $notifications as $notification ) {
268 $this->engine->send_comment_reply_email( $this->notifier->read_settings( $notification->ID ), $the_comment, $parent );
269 }
270 }
271 }
272 }
273 }
274 }
275
276 /**
277 * Send notification for new trackback
278 *
279 * @since 1.0
280 * @param unknown $comment_id
281 */
282 function trackback_post( $comment_id ) {
283 $the_comment = get_comment( $comment_id );
284 if ( $this->can_send_comment_notification( $the_comment ) ) {
285 $this->send_notification( 'new-trackback', $comment_id );
286 }
287 }
288
289 /**
290 * Send notification for new pingbacks
291 *
292 * @since 1.0
293 * @param unknown $comment_id
294 */
295 function pingback_post( $comment_id ) {
296 $the_comment = get_comment( $comment_id );
297 if ( $this->can_send_comment_notification( $the_comment ) ) {
298 $this->send_notification( 'new-pingback', $comment_id );
299 }
300 }
301
302 /**
303 * Send notification for lost password.
304 *
305 * @since 1.0
306 */
307 function on_lost_password() {
308 $user = get_user_by( 'login', trim( $_POST['user_login'] ) );
309 if ( $user ) {
310 $this->send_notification( 'admin-password', $user->ID );
311 }
312 }
313
314 /**
315 * Change the title of the password reset email that is sent to the user.
316 *
317 * @since 1.1
318 */
319 public function change_password_email_title( $title ) {
320 $notifications = $this->notifier->get_notifications( 'user-password' );
321 if ( count( $notifications ) > 0 ) {
322 // Ideally there should be only one notification for this type.
323 // If there are multiple notification then we will read data about only the last one
324 $setting = $this->notifier->read_settings( end( $notifications )->ID );
325 return $setting['subject'];
326 }
327
328 return $title;
329 }
330
331 /**
332 * Change the message of the password reset email.
333 *
334 * @since 1.1
335 */
336 public function change_password_email_message( $message, $key, $user_login, $user_data ) {
337 $notifications = $this->notifier->get_notifications( 'user-password' );
338 if ( count( $notifications ) > 0 ) {
339 // Ideally there should be only one notification for this type.
340 // If there are multiple notification then we will read data about only the last one
341 $setting = $this->notifier->read_settings( end( $notifications )->ID );
342
343 return $this->engine->handle_password_reset_shortcodes( $setting, $key, $user_login, $user_data );
344 }
345
346 return $message;
347 }
348
349 /**
350 * Send notification for new uses.
351 *
352 * @since 1.0
353 * @param unknown $user_id
354 */
355 function user_register( $user_id ) {
356 $this->send_notification( 'admin-user', $user_id );
357 }
358
359 /**
360 * New User - Welcome email
361 *
362 * @since 1.1
363 * @param int $user_id New user id
364 */
365 function welcome_email( $user_id ) {
366 $notifications = $this->notifier->get_notifications( 'welcome-email' );
367 foreach ( $notifications as $notification ) {
368 $this->engine->send_registration_email( $this->notifier->read_settings( $notification->ID ), get_userdata( $user_id ) );
369 }
370 }
371
372 /**
373 * Send notification based on type and ref id
374 *
375 * @access private
376 * @since 1.0
377 * @param unknown $type
378 * @param unknown $ref_id
379 */
380 private function send_notification( $type, $ref_id ) {
381 $notifications = $this->notifier->get_notifications( $type );
382 foreach ( $notifications as $notification ) {
383 $this->engine->send_notification( $this->notifier->read_settings( $notification->ID ), $ref_id );
384 }
385 }
386
387 /**
388 * Can send comment notification or not
389 *
390 * @since 1.0
391 * @param unknown $comment
392 * @return unknown
393 */
394 private function can_send_comment_notification( $comment ) {
395 // Returns false if the comment is marked as spam AND admin has enabled suppression of spam
396 $suppress_spam = get_option( 'bnfw_suppress_spam' );
397 if ( '1' === $suppress_spam && ( 0 === strcmp( $comment->comment_approved, 'spam' ) ) ) {
398 return false;
399 }
400 return true;
401 }
402 }
403
404 /* ------------------------------------------------------------------------ *
405 * Fire up the plugin
406 * ------------------------------------------------------------------------ */
407 BNFW::factory();
408