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

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