PluginProbe
Customize WordPress Emails and Alerts – Better Notifications for WP / 1.3.3
Customize WordPress Emails and Alerts – Better Notifications for WP v1.3.3
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.3, at bnfw.php

410 lines 11.5 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 emails to your users for different WordPress notifications.
6 * Version: 1.3.3
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( 'future_to_publish' , array( $this, 'publish_post' ) );
103 add_action( 'pending_to_publish' , array( $this, 'publish_post' ) );
104 add_action( 'publish_to_publish' , array( $this, 'update_post' ) );
105 add_action( 'init' , array( $this, 'custom_post_type_hooks' ), 100 );
106 add_action( 'create_term' , array( $this, 'create_term' ), 10, 3 );
107
108 add_action( 'comment_post' , array( $this, 'comment_post' ) );
109 add_action( 'trackback_post' , array( $this, 'trackback_post' ) );
110 add_action( 'pingback_post' , array( $this, 'pingback_post' ) );
111
112 add_action( 'user_register' , array( $this, 'user_register' ) );
113 add_action( 'user_register' , array( $this, 'welcome_email' ) );
114
115 add_action( 'lostpassword_post' , array( $this, 'on_lost_password' ) );
116 add_filter( 'retrieve_password_title' , array( $this, 'change_password_email_title' ) );
117 add_filter( 'retrieve_password_message' , array( $this, 'change_password_email_message' ), 10, 4 );
118
119 add_filter( 'plugin_action_links' , array( $this, 'plugin_action_links' ), 10, 4 );
120 }
121
122 /**
123 * Setup hooks for custom post types.
124 *
125 * @since 1.2
126 */
127 function custom_post_type_hooks() {
128 $post_types = get_post_types( array( 'public' => true ), 'names' );
129 $post_types = array_diff( $post_types, array( BNFW_Notification::POST_TYPE ) );
130
131 foreach ( $post_types as $post_type ) {
132 add_action( 'pending_' . $post_type, array( $this, 'on_post_pending' ), 10, 2 );
133 add_action( 'future_' . $post_type, array( $this, 'on_post_scheduled' ), 10, 2 );
134 }
135 }
136
137 /**
138 * importer
139 */
140 public function activate() {
141 require_once dirname( __FILE__ ) . '/includes/import.php';
142 $importer = new BNFW_Import;
143 $importer->import();
144 }
145
146 /**
147 * Add 'Settings' link below BNFW in Plugins list.
148 *
149 * @since 1.0
150 * @param unknown $links
151 * @param unknown $file
152 * @return unknown
153 */
154 public function plugin_action_links( $links, $file ) {
155 $plugin_file = 'bnfw/bnfw.php';
156 if ( $file == $plugin_file ) {
157 $settings_link = '<a href="' . admin_url( 'admin.php?page=bnfw-settings' ) . '">' . 'Settings' . '</a>';
158 array_unshift( $links, $settings_link );
159 }
160 return $links;
161 }
162
163 /**
164 * When a new term is created.
165 *
166 * @since 1.0
167 * @param int $term_id
168 * @param int $tt_id
169 * @param string $taxonomy
170 */
171 public function create_term( $term_id, $tt_id, $taxonomy ) {
172 $this->send_notification( 'newterm-' . $taxonomy, $term_id );
173 }
174
175 /**
176 * Fires when a post is created for the first time.
177 *
178 * @since 1.3.1
179 * @param int $post_id Post ID
180 * @param object $post Post object
181 * @param bool $update Whether it was an update
182 */
183 public function insert_post( $post_id, $post, $update ) {
184 $this->publish_post( $post );
185 }
186
187 /**
188 * Fires when a post is created for the first time.
189 *
190 * @since 1.0
191 * @param object $post Post Object
192 */
193 function publish_post( $post ) {
194 $post_id = $post->ID;
195 $post_type = $post->post_type;
196
197 if ( BNFW_Notification::POST_TYPE != $post_type ) {
198 $this->send_notification( 'new-' . $post_type, $post_id );
199 }
200 }
201
202 /**
203 * Fires when a post is updated.
204 *
205 * @since 1.0
206 * @param unknown $post
207 */
208 function update_post( $post ) {
209 $post_id = $post->ID;
210 $post_type = $post->post_type;
211
212 if ( BNFW_Notification::POST_TYPE != $post_type ) {
213 $this->send_notification( 'update-' . $post_type, $post_id );
214 }
215 }
216
217 /**
218 * Fires when a post is pending for review.
219 *
220 * @since 1.1
221 * @param int $post_id Post ID
222 * @param object $post Post object
223 */
224 function on_post_pending( $post_id, $post ) {
225 $post_type = $post->post_type;
226
227 if ( BNFW_Notification::POST_TYPE != $post_type ) {
228 $this->send_notification( 'pending-' . $post_type, $post_id );
229 }
230 }
231
232 /**
233 * Fires when a post is scheduled.
234 *
235 * @since 1.1.5
236 * @param int $post_id Post ID
237 * @param object $post Post object
238 */
239 function on_post_scheduled( $post_id, $post ) {
240 $post_type = $post->post_type;
241
242 if ( BNFW_Notification::POST_TYPE != $post_type ) {
243 $this->send_notification( 'future-' . $post_type, $post_id );
244 }
245 }
246
247 /**
248 * Send notification for new comments
249 *
250 * @since 1.0
251 * @param int $comment_id
252 */
253 function comment_post( $comment_id ) {
254 $the_comment = get_comment( $comment_id );
255 if ( $this->can_send_comment_notification( $the_comment ) ) {
256 $post = get_post( $the_comment->comment_post_ID );
257 $notification_type = 'new-comment'; // old notification name
258 if ( 'post' != $post->post_type ) {
259 $notification_type = 'comment-' . $post->post_type;
260 }
261 $this->send_notification( $notification_type, $comment_id );
262
263 // comment reply notification.
264 if ( $the_comment->comment_parent > 0 ) {
265 $notifications = $this->notifier->get_notifications( 'reply-comment' );
266 if ( count( $notifications ) > 0 ) {
267 $parent = get_comment( $the_comment->comment_parent );
268 if ( $parent->comment_author_email != $the_comment->comment_author_email ) {
269 foreach ( $notifications as $notification ) {
270 $this->engine->send_comment_reply_email( $this->notifier->read_settings( $notification->ID ), $the_comment, $parent );
271 }
272 }
273 }
274 }
275 }
276 }
277
278 /**
279 * Send notification for new trackback
280 *
281 * @since 1.0
282 * @param unknown $comment_id
283 */
284 function trackback_post( $comment_id ) {
285 $the_comment = get_comment( $comment_id );
286 if ( $this->can_send_comment_notification( $the_comment ) ) {
287 $this->send_notification( 'new-trackback', $comment_id );
288 }
289 }
290
291 /**
292 * Send notification for new pingbacks
293 *
294 * @since 1.0
295 * @param unknown $comment_id
296 */
297 function pingback_post( $comment_id ) {
298 $the_comment = get_comment( $comment_id );
299 if ( $this->can_send_comment_notification( $the_comment ) ) {
300 $this->send_notification( 'new-pingback', $comment_id );
301 }
302 }
303
304 /**
305 * Send notification for lost password.
306 *
307 * @since 1.0
308 */
309 function on_lost_password() {
310 $user = get_user_by( 'login', trim( $_POST['user_login'] ) );
311 if ( $user ) {
312 $this->send_notification( 'admin-password', $user->ID );
313 }
314 }
315
316 /**
317 * Change the title of the password reset email that is sent to the user.
318 *
319 * @since 1.1
320 */
321 public function change_password_email_title( $title ) {
322 $notifications = $this->notifier->get_notifications( 'user-password' );
323 if ( count( $notifications ) > 0 ) {
324 // Ideally there should be only one notification for this type.
325 // If there are multiple notification then we will read data about only the last one
326 $setting = $this->notifier->read_settings( end( $notifications )->ID );
327 return $setting['subject'];
328 }
329
330 return $title;
331 }
332
333 /**
334 * Change the message of the password reset email.
335 *
336 * @since 1.1
337 */
338 public function change_password_email_message( $message, $key, $user_login, $user_data ) {
339 $notifications = $this->notifier->get_notifications( 'user-password' );
340 if ( count( $notifications ) > 0 ) {
341 // Ideally there should be only one notification for this type.
342 // If there are multiple notification then we will read data about only the last one
343 $setting = $this->notifier->read_settings( end( $notifications )->ID );
344
345 return $this->engine->handle_password_reset_shortcodes( $setting, $key, $user_login, $user_data );
346 }
347
348 return $message;
349 }
350
351 /**
352 * Send notification for new uses.
353 *
354 * @since 1.0
355 * @param unknown $user_id
356 */
357 function user_register( $user_id ) {
358 $this->send_notification( 'admin-user', $user_id );
359 }
360
361 /**
362 * New User - Welcome email
363 *
364 * @since 1.1
365 * @param int $user_id New user id
366 */
367 function welcome_email( $user_id ) {
368 $notifications = $this->notifier->get_notifications( 'welcome-email' );
369 foreach ( $notifications as $notification ) {
370 $this->engine->send_registration_email( $this->notifier->read_settings( $notification->ID ), get_userdata( $user_id ) );
371 }
372 }
373
374 /**
375 * Send notification based on type and ref id
376 *
377 * @access private
378 * @since 1.0
379 * @param unknown $type
380 * @param unknown $ref_id
381 */
382 private function send_notification( $type, $ref_id ) {
383 $notifications = $this->notifier->get_notifications( $type );
384 foreach ( $notifications as $notification ) {
385 $this->engine->send_notification( $this->notifier->read_settings( $notification->ID ), $ref_id );
386 }
387 }
388
389 /**
390 * Can send comment notification or not
391 *
392 * @since 1.0
393 * @param unknown $comment
394 * @return unknown
395 */
396 private function can_send_comment_notification( $comment ) {
397 // Returns false if the comment is marked as spam AND admin has enabled suppression of spam
398 $suppress_spam = get_option( 'bnfw_suppress_spam' );
399 if ( '1' === $suppress_spam && ( 0 === strcmp( $comment->comment_approved, 'spam' ) ) ) {
400 return false;
401 }
402 return true;
403 }
404 }
405
406 /* ------------------------------------------------------------------------ *
407 * Fire up the plugin
408 * ------------------------------------------------------------------------ */
409 BNFW::factory();
410