Version Description
= v140220 =
Security Fix; PLEASE UPGRADE IMMEDIATELY. v140219 fixes an XSS/CSRF vulnerability that was discovered by Tom Adams and reported by a WordPress Plugin Repository moderator.
Download this release
Release Info
Developer | reedyseth |
Plugin | Subscribe To Comments Reloaded |
Version | 140220 |
Comparing to | |
See all releases |
Code changes from version 140219 to 140220
- options/index.php +91 -90
- readme.txt +183 -179
- subscribe-to-comments-reloaded.php +1575 -1575
options/index.php
CHANGED
@@ -1,90 +1,91 @@
|
|
1 |
-
<?php
|
2 |
-
// Avoid direct access to this piece of code
|
3 |
-
if ( ! function_exists( 'is_admin' ) || ! is_admin() ) {
|
4 |
-
header( 'Location: /' );
|
5 |
-
exit;
|
6 |
-
}
|
7 |
-
|
8 |
-
function subscribe_reloaded_update_option( $_option = '', $_value = '', $_type = '' ) {
|
9 |
-
if ( ! isset( $_value ) ) {
|
10 |
-
return true;
|
11 |
-
}
|
12 |
-
|
13 |
-
// Prevent XSS/CSRF attacks
|
14 |
-
$_value = esc_attr( $_value );
|
15 |
-
|
16 |
-
switch ( $_type ) {
|
17 |
-
case 'yesno':
|
18 |
-
if ( $_value == 'yes' || $_value == 'no' ) {
|
19 |
-
update_option( 'subscribe_reloaded_' . $_option, $_value );
|
20 |
-
|
21 |
-
return true;
|
22 |
-
}
|
23 |
-
break;
|
24 |
-
|
25 |
-
case 'integer':
|
26 |
-
update_option( 'subscribe_reloaded_' . $_option, abs( intval( $_value ) ) );
|
27 |
-
|
28 |
-
return true;
|
29 |
-
break;
|
30 |
-
|
31 |
-
case 'text-no-encode':
|
32 |
-
update_option( 'subscribe_reloaded_' . $_option, $_value );
|
33 |
-
|
34 |
-
return true;
|
35 |
-
break;
|
36 |
-
|
37 |
-
default:
|
38 |
-
update_option( 'subscribe_reloaded_' . $_option, htmlentities( $_value, ENT_COMPAT, 'UTF-8' ) );
|
39 |
-
|
40 |
-
return true;
|
41 |
-
break;
|
42 |
-
}
|
43 |
-
|
44 |
-
return false;
|
45 |
-
}
|
46 |
-
|
47 |
-
function subscribe_reloaded_get_option( $_option = '', $_default = '' ) {
|
48 |
-
$value = get_option( 'subscribe_reloaded_' . $_option, $_default );
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
__( '
|
60 |
-
__( '
|
61 |
-
__( '
|
62 |
-
__( '
|
63 |
-
__( '
|
64 |
-
)
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
<
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
echo
|
82 |
-
echo
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
|
1 |
+
<?php
|
2 |
+
// Avoid direct access to this piece of code
|
3 |
+
if ( ! function_exists( 'is_admin' ) || ! is_admin() ) {
|
4 |
+
header( 'Location: /' );
|
5 |
+
exit;
|
6 |
+
}
|
7 |
+
|
8 |
+
function subscribe_reloaded_update_option( $_option = '', $_value = '', $_type = '' ) {
|
9 |
+
if ( ! isset( $_value ) ) {
|
10 |
+
return true;
|
11 |
+
}
|
12 |
+
|
13 |
+
// Prevent XSS/CSRF attacks
|
14 |
+
$_value = esc_attr( $_value );
|
15 |
+
|
16 |
+
switch ( $_type ) {
|
17 |
+
case 'yesno':
|
18 |
+
if ( $_value == 'yes' || $_value == 'no' ) {
|
19 |
+
update_option( 'subscribe_reloaded_' . $_option, $_value );
|
20 |
+
|
21 |
+
return true;
|
22 |
+
}
|
23 |
+
break;
|
24 |
+
|
25 |
+
case 'integer':
|
26 |
+
update_option( 'subscribe_reloaded_' . $_option, abs( intval( $_value ) ) );
|
27 |
+
|
28 |
+
return true;
|
29 |
+
break;
|
30 |
+
|
31 |
+
case 'text-no-encode':
|
32 |
+
update_option( 'subscribe_reloaded_' . $_option, $_value );
|
33 |
+
|
34 |
+
return true;
|
35 |
+
break;
|
36 |
+
|
37 |
+
default:
|
38 |
+
update_option( 'subscribe_reloaded_' . $_option, htmlentities( $_value, ENT_COMPAT, 'UTF-8' ) );
|
39 |
+
|
40 |
+
return true;
|
41 |
+
break;
|
42 |
+
}
|
43 |
+
|
44 |
+
return false;
|
45 |
+
}
|
46 |
+
|
47 |
+
function subscribe_reloaded_get_option( $_option = '', $_default = '' ) {
|
48 |
+
$value = get_option( 'subscribe_reloaded_' . $_option, $_default );
|
49 |
+
$value = html_entity_decode( stripslashes( $value ), ENT_COMPAT, 'UTF-8' );
|
50 |
+
|
51 |
+
return stripslashes( $value );
|
52 |
+
}
|
53 |
+
|
54 |
+
// Load localization files
|
55 |
+
load_plugin_textdomain( 'subscribe-reloaded', false, dirname( plugin_basename( __FILE__ ) ) . '/langs/' );
|
56 |
+
|
57 |
+
// Define the panels
|
58 |
+
$array_panels = array(
|
59 |
+
__( 'Manage subscriptions', 'subscribe-reloaded' ),
|
60 |
+
__( 'Comment Form', 'subscribe-reloaded' ),
|
61 |
+
__( 'Management Page', 'subscribe-reloaded' ),
|
62 |
+
__( 'Notifications', 'subscribe-reloaded' ),
|
63 |
+
__( 'Options', 'subscribe-reloaded' ),
|
64 |
+
__( 'You can help', 'subscribe-reloaded' )
|
65 |
+
);
|
66 |
+
|
67 |
+
// What panel to display
|
68 |
+
$current_panel = empty( $_GET['subscribepanel'] ) ? 1 : intval( $_GET['subscribepanel'] );
|
69 |
+
|
70 |
+
// Text direction
|
71 |
+
if ( $wp_locale->text_direction != 'ltr' ) {
|
72 |
+
$array_panels = array_reverse( $array_panels, true );
|
73 |
+
}
|
74 |
+
|
75 |
+
?>
|
76 |
+
<div class="wrap">
|
77 |
+
<div id="subscribe-to-comments-icon" class="icon32 <?php echo $wp_locale->text_direction ?>"></div>
|
78 |
+
<h2 class="medium">
|
79 |
+
<?php
|
80 |
+
foreach ( $array_panels as $a_panel_id => $a_panel_details ) {
|
81 |
+
echo '<a class="nav-tab nav-tab';
|
82 |
+
echo ( $current_panel == $a_panel_id + 1 ) ? '-active' : '-inactive';
|
83 |
+
echo '" href="options-general.php?page=subscribe-to-comments-reloaded/options/index.php&subscribepanel=' . ( $a_panel_id + 1 ) . '">' . $a_panel_details . '</a>';
|
84 |
+
}
|
85 |
+
?>
|
86 |
+
</h2>
|
87 |
+
|
88 |
+
<?php if ( is_readable( WP_PLUGIN_DIR . "/subscribe-to-comments-reloaded/options/panel$current_panel.php" ) ) {
|
89 |
+
require_once WP_PLUGIN_DIR . "/subscribe-to-comments-reloaded/options/panel$current_panel.php";
|
90 |
+
} ?>
|
91 |
+
</div>
|
readme.txt
CHANGED
@@ -1,179 +1,183 @@
|
|
1 |
-
=== Subscribe To Comments Reloaded ===
|
2 |
-
Author: camu, Reedyseth, andreasbo, raamdev
|
3 |
-
Contributors: coolmann, Reedyseth, raamdev
|
4 |
-
Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=XF86X93FDCGYA&lc=US&item_name=Datasoft%20Engineering&item_number=DI%2dSTCR¤cy_code=USD&bn=PP%2dDonationsBF%3abtn_donate_LG%2egif%3aNonHosted
|
5 |
-
Tags: subscribe, comments, notification, subscription, manage, double check-in, follow, commenting
|
6 |
-
Requires at least: 2.9.2
|
7 |
-
Tested up to: 3.8.1
|
8 |
-
Stable tag:
|
9 |
-
|
10 |
-
Subscribe to Comments Reloaded allows commenters to sign up for e-mail notifications of subsequent replies.
|
11 |
-
|
12 |
-
== Description ==
|
13 |
-
Subscribe to Comments Reloaded is a robust plugin that enables commenters to sign up for e-mail notification of subsequent entries. The plugin includes a full-featured subscription manager that your commenters can use to unsubscribe to certain posts or suspend all notifications. It solves most of the issues that affect Mark Jaquith's version, using the latest Wordpress features and functionality. Plus, allows administrators to enable a double opt-in mechanism, requiring users to confirm their subscription clicking on a link they will receive via email.
|
14 |
-
|
15 |
-
## Requirements
|
16 |
-
* Wordpress 2.9.2 or higher
|
17 |
-
* PHP 5.1 or higher
|
18 |
-
* MySQL 5.x or higher
|
19 |
-
|
20 |
-
## Main Features
|
21 |
-
* Does not modify Wordpress core tables
|
22 |
-
* Easily manage and search among your subscriptions
|
23 |
-
* Imports Mark Jaquith's Subscribe To Comments (and its clones) data
|
24 |
-
* Messages are fully customizable, no poEdit required (and you can use HTML!)
|
25 |
-
* Disable subscriptions for specific posts
|
26 |
-
* Compatible with [Fluency Admin](http://deanjrobinson.com/projects/fluency-admin/) and [QTranslate](http://wordpress.org/extend/plugins/qtranslate/)
|
27 |
-
|
28 |
-
== Installation ==
|
29 |
-
|
30 |
-
1. If you are using Subscribe To Comments by Mark Jaquith, disable it (no need to uninstall it, though)
|
31 |
-
2. Upload the entire folder and all the subfolders to your Wordpress plugins' folder
|
32 |
-
3. Activate it
|
33 |
-
5. Customize the Permalink value under Settings > Subscribe to Comments > Management Page > Management URL. It **must** reflect your permalinks' structure
|
34 |
-
5. If you don't see the checkbox to subscribe, you will have to manually edit your template, and add `<?php if (function_exists('subscribe_reloaded_show')) subscribe_reloaded_show(); ?>` somewhere in your `comments.php`
|
35 |
-
6. If you're upgrading from a previous version, please **make sure to deactivate/activate** StCR
|
36 |
-
|
37 |
-
== Frequently Asked Questions ==
|
38 |
-
|
39 |
-
= Aaargh! Were did all my subscriptions go? =
|
40 |
-
No panic. If you upgraded from 1.6 or earlier to 2.0+, you need to deactivate/activate StCR, in order to update the DB structure
|
41 |
-
|
42 |
-
= How do I create a 'real' management page? =
|
43 |
-
Please refer to [this page](http://lab.duechiacchiere.it/index.php?topic=71.0) for a detailed step-by-step description on how to do that
|
44 |
-
|
45 |
-
= Can I customize the layout of the management page? =
|
46 |
-
Yes, each HTML tag has a CSS class or ID that you can use to change its position or look-and-feel
|
47 |
-
|
48 |
-
= How do I disable subscriptions for a given post? =
|
49 |
-
Add a custom field called `stcr_disable_subscriptions` to it, with value 'yes'
|
50 |
-
|
51 |
-
= How do I add the management page URL to my posts? =
|
52 |
-
Use the shortcode `[subscribe-url]`, or use the following code in your theme:
|
53 |
-
`if(function_exists('subscribe_reloaded_show')) echo '<a href="'.do_shortcode('[subscribe-url]').'">Subscribe</a>";`
|
54 |
-
|
55 |
-
= Can I move the subscription checkbox to another position? =
|
56 |
-
Yes! Just disable the corresponding option under Settings > Comment Form and then add the following code where you want to display the checkbox:
|
57 |
-
`<?php if (function_exists('subscribe_reloaded_show')) subscribe_reloaded_show(); ?>`
|
58 |
-
|
59 |
-
== Screenshots ==
|
60 |
-
|
61 |
-
1. Manage your subscriptions
|
62 |
-
2. Use your own messages to interact with your users
|
63 |
-
3. Configure the Virtual Management page
|
64 |
-
4. Customize the notification messages
|
65 |
-
5. Customize the plugin's behavior
|
66 |
-
|
67 |
-
== Upgrade Notice ==
|
68 |
-
|
69 |
-
=
|
70 |
-
|
71 |
-
**Security Fix; PLEASE UPGRADE IMMEDIATELY**. v140219 fixes an XSS/CSRF vulnerability that was discovered by Tom Adams and reported by a WordPress Plugin Repository moderator.
|
72 |
-
|
73 |
-
== Changelog ==
|
74 |
-
|
75 |
-
=
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
*
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
*
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
*
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
* **
|
99 |
-
* **
|
100 |
-
* **
|
101 |
-
*
|
102 |
-
*
|
103 |
-
*
|
104 |
-
*
|
105 |
-
* New plugin
|
106 |
-
*
|
107 |
-
*
|
108 |
-
*
|
109 |
-
|
110 |
-
|
111 |
-
*
|
112 |
-
*
|
113 |
-
|
114 |
-
= 2.0.
|
115 |
-
*
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
*
|
120 |
-
|
121 |
-
= 2.0.
|
122 |
-
*
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
*
|
127 |
-
|
128 |
-
|
129 |
-
*
|
130 |
-
*
|
131 |
-
*
|
132 |
-
|
133 |
-
|
134 |
-
*
|
135 |
-
*
|
136 |
-
|
137 |
-
|
138 |
-
*
|
139 |
-
*
|
140 |
-
*
|
141 |
-
|
142 |
-
|
143 |
-
*
|
144 |
-
*
|
145 |
-
|
146 |
-
|
147 |
-
*
|
148 |
-
* Added:
|
149 |
-
* Added:
|
150 |
-
* Added:
|
151 |
-
* Added: new
|
152 |
-
* Added:
|
153 |
-
*
|
154 |
-
*
|
155 |
-
*
|
156 |
-
*
|
157 |
-
*
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
*
|
171 |
-
*
|
172 |
-
*
|
173 |
-
*
|
174 |
-
*
|
175 |
-
*
|
176 |
-
*
|
177 |
-
*
|
178 |
-
*
|
179 |
-
*
|
|
|
|
|
|
|
|
1 |
+
=== Subscribe To Comments Reloaded ===
|
2 |
+
Author: camu, Reedyseth, andreasbo, raamdev
|
3 |
+
Contributors: coolmann, Reedyseth, raamdev
|
4 |
+
Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=XF86X93FDCGYA&lc=US&item_name=Datasoft%20Engineering&item_number=DI%2dSTCR¤cy_code=USD&bn=PP%2dDonationsBF%3abtn_donate_LG%2egif%3aNonHosted
|
5 |
+
Tags: subscribe, comments, notification, subscription, manage, double check-in, follow, commenting
|
6 |
+
Requires at least: 2.9.2
|
7 |
+
Tested up to: 3.8.1
|
8 |
+
Stable tag: 140220
|
9 |
+
|
10 |
+
Subscribe to Comments Reloaded allows commenters to sign up for e-mail notifications of subsequent replies.
|
11 |
+
|
12 |
+
== Description ==
|
13 |
+
Subscribe to Comments Reloaded is a robust plugin that enables commenters to sign up for e-mail notification of subsequent entries. The plugin includes a full-featured subscription manager that your commenters can use to unsubscribe to certain posts or suspend all notifications. It solves most of the issues that affect Mark Jaquith's version, using the latest Wordpress features and functionality. Plus, allows administrators to enable a double opt-in mechanism, requiring users to confirm their subscription clicking on a link they will receive via email.
|
14 |
+
|
15 |
+
## Requirements
|
16 |
+
* Wordpress 2.9.2 or higher
|
17 |
+
* PHP 5.1 or higher
|
18 |
+
* MySQL 5.x or higher
|
19 |
+
|
20 |
+
## Main Features
|
21 |
+
* Does not modify Wordpress core tables
|
22 |
+
* Easily manage and search among your subscriptions
|
23 |
+
* Imports Mark Jaquith's Subscribe To Comments (and its clones) data
|
24 |
+
* Messages are fully customizable, no poEdit required (and you can use HTML!)
|
25 |
+
* Disable subscriptions for specific posts
|
26 |
+
* Compatible with [Fluency Admin](http://deanjrobinson.com/projects/fluency-admin/) and [QTranslate](http://wordpress.org/extend/plugins/qtranslate/)
|
27 |
+
|
28 |
+
== Installation ==
|
29 |
+
|
30 |
+
1. If you are using Subscribe To Comments by Mark Jaquith, disable it (no need to uninstall it, though)
|
31 |
+
2. Upload the entire folder and all the subfolders to your Wordpress plugins' folder
|
32 |
+
3. Activate it
|
33 |
+
5. Customize the Permalink value under Settings > Subscribe to Comments > Management Page > Management URL. It **must** reflect your permalinks' structure
|
34 |
+
5. If you don't see the checkbox to subscribe, you will have to manually edit your template, and add `<?php if (function_exists('subscribe_reloaded_show')) subscribe_reloaded_show(); ?>` somewhere in your `comments.php`
|
35 |
+
6. If you're upgrading from a previous version, please **make sure to deactivate/activate** StCR
|
36 |
+
|
37 |
+
== Frequently Asked Questions ==
|
38 |
+
|
39 |
+
= Aaargh! Were did all my subscriptions go? =
|
40 |
+
No panic. If you upgraded from 1.6 or earlier to 2.0+, you need to deactivate/activate StCR, in order to update the DB structure
|
41 |
+
|
42 |
+
= How do I create a 'real' management page? =
|
43 |
+
Please refer to [this page](http://lab.duechiacchiere.it/index.php?topic=71.0) for a detailed step-by-step description on how to do that
|
44 |
+
|
45 |
+
= Can I customize the layout of the management page? =
|
46 |
+
Yes, each HTML tag has a CSS class or ID that you can use to change its position or look-and-feel
|
47 |
+
|
48 |
+
= How do I disable subscriptions for a given post? =
|
49 |
+
Add a custom field called `stcr_disable_subscriptions` to it, with value 'yes'
|
50 |
+
|
51 |
+
= How do I add the management page URL to my posts? =
|
52 |
+
Use the shortcode `[subscribe-url]`, or use the following code in your theme:
|
53 |
+
`if(function_exists('subscribe_reloaded_show')) echo '<a href="'.do_shortcode('[subscribe-url]').'">Subscribe</a>";`
|
54 |
+
|
55 |
+
= Can I move the subscription checkbox to another position? =
|
56 |
+
Yes! Just disable the corresponding option under Settings > Comment Form and then add the following code where you want to display the checkbox:
|
57 |
+
`<?php if (function_exists('subscribe_reloaded_show')) subscribe_reloaded_show(); ?>`
|
58 |
+
|
59 |
+
== Screenshots ==
|
60 |
+
|
61 |
+
1. Manage your subscriptions
|
62 |
+
2. Use your own messages to interact with your users
|
63 |
+
3. Configure the Virtual Management page
|
64 |
+
4. Customize the notification messages
|
65 |
+
5. Customize the plugin's behavior
|
66 |
+
|
67 |
+
== Upgrade Notice ==
|
68 |
+
|
69 |
+
= v140220 =
|
70 |
+
|
71 |
+
**Security Fix; PLEASE UPGRADE IMMEDIATELY**. v140219 fixes an XSS/CSRF vulnerability that was discovered by Tom Adams and reported by a WordPress Plugin Repository moderator.
|
72 |
+
|
73 |
+
== Changelog ==
|
74 |
+
|
75 |
+
= v140220 =
|
76 |
+
|
77 |
+
**Bug Fix**. Fixes an encoding bug that broke HTML output after patching XSS vulnerability. If you started seeing raw HTML output at the bottom of your comment forms after upgrading to v140219, this update should fix that.
|
78 |
+
|
79 |
+
= v140219 =
|
80 |
+
|
81 |
+
* **Security Fix; PLEASE UPGRADE IMMEDIATELY**. Fixes XSS/CSRF vulnerability that was discovered by Tom Adams and reported by a WordPress Plugin Repository moderator.
|
82 |
+
* **Translations**. Updated French translation (thanks to Jean-Michel MEYER).
|
83 |
+
* Improvements to translation support (thanks to Carlos Alberto Lopez Perez).
|
84 |
+
* Add trailing slash to comment-subscriptions page to avoid unnecessary redirections (thanks to Carlos Alberto Lopez Perez).
|
85 |
+
|
86 |
+
= v140204 =
|
87 |
+
|
88 |
+
* **New Feature**. There is a new Option that Sets the default Subscription Type when the Chechbox 'Checked by default' is enable *Settings -> Subscribe to Comments -> Comment Form -> Default Checkbox Value*.
|
89 |
+
* Corrected reference to the language translation files. If you find something fuzzy please open a Issue on GitHub <https://github.com/stcr/subscribe-to-comments-reloaded/issues/new?title=Bug%20Report:%20%3Cshort%20description%3E&labels=bug>
|
90 |
+
|
91 |
+
= v140129 =
|
92 |
+
|
93 |
+
* **Bug Fix**. Fixed `Notice: Undefined variable: post_id` that was sometimes causing issues with creating a new subscription when WordPres Debug mode was enabled. See: <https://github.com/stcr/subscribe-to-comments-reloaded/issues/2>
|
94 |
+
* Added missing `.mo` files for translations in `lang/`. See: <https://github.com/stcr/subscribe-to-comments-reloaded/issues/13>
|
95 |
+
|
96 |
+
= v140128 =
|
97 |
+
|
98 |
+
* **New Feature**. There is now an option to BCC the admin on all Notifications. This is very useful when troubleshooting email delivery issues.
|
99 |
+
* **New Option**. There is a new 'HTMLify links in emails' Option. When using HTML emails for messages you can now choose to have StCR automatically HTMLify the links for you (*Settings -> Subscribe to Comments -> Options -> HTMLify links in emails*). You can, of course, leave this option disabled and add your own HTML to the messages if you prefer.
|
100 |
+
* **New Option**. There is a new 'default subscription type' Option. If you're using Advanced subscriptions, you can now specify the Advanced default subscription type ("None", "All new comments", or "Replies to this comment") in *Settings -> Subscribe to Comments -> Comment Form -> Advanced default*. This will be the default option shown on the comment form.
|
101 |
+
* **Bug Fix**. Paragraph tags are now properly added to the comment content when sending HTML emails with `[comment_content]`
|
102 |
+
* **Bug Fix**. Partial fix for the broken Subscribe to Replies Only feature. The Replies Only feature has not been working as intended. Instead of only receiving notificaitons for replies to their own comment, subscribers were receiving notifications for all new comments on the post. This fix makes sure they only receiving replies to their own comment thread.
|
103 |
+
* **Bug Fix**. Fix duplicate `MIME-Version` header bug resulting in unsent emails. Fixes a bug where using StCR with other plugins, like WP-Mail-SMTP, results in a quiet duplicate header error. `wp_mail()` already takes care of setting the `MIME-Version` header so this doesn't need to be done again.
|
104 |
+
* **Bug Fix**. Fixed `Fatal Error: Cannot redeclare class Helper` when visiting the `[subscribe_link]`. See also: <http://wordpress.org/support/topic/bug-fatal-error-in-classeshelperclassphp>
|
105 |
+
* New import routine for WP Comment Subscriptions plugin. If subscription data and options are found for WP Comment Subscriptions, StCR will import those upon activation. Options and data are only imported if there is no existing StCR subscription data.
|
106 |
+
* New admin notices to improve messaging and indicate when data is imported from an existing plugin.
|
107 |
+
* New `stcr_confirmation_email_message` hook to modify the message that is sent to confirm a subscription. (Thanks to ziofix!)
|
108 |
+
* New `stcr_notify_user_message` hook to modify the notification message that is sent to a user. (Thanks to ziofix!)
|
109 |
+
* New plugin versioning format of YYMMDD.
|
110 |
+
* Plugin development is now actively happening over at the new GitHub Repository for Subscribe to Comments Reloaded. If you have a bug to report or want to make a feature request, please post a new Issue over at GitHub. If you're a programmer, you're welcome to submit a Pull Request! See: <https://github.com/stcr/subscribe-to-comments-reloaded>
|
111 |
+
* Added WPML language configuration file.
|
112 |
+
* Added Raam Dev (`raamdev`) to the contributors list.
|
113 |
+
|
114 |
+
= 2.0.6 =
|
115 |
+
* Updated: Updated the contact information on every laguage file, some links were missing.
|
116 |
+
* Fixed: The Spanish translation had some missing text.
|
117 |
+
|
118 |
+
= 2.0.5 =
|
119 |
+
* Added: Since the authorship of the plugin has changed I added the correct information of the contact in order to have a faster response to the issues.
|
120 |
+
|
121 |
+
= 2.0.4 =
|
122 |
+
* Added: Dutch translation fixes provided by [Martijn Chel](http://www.martijnchel.com)
|
123 |
+
* Fixed: There was vulnerability in the form where the URI was added.
|
124 |
+
|
125 |
+
= 2.0.3 =
|
126 |
+
* I would like to thank Andreas for contributing to the project and fixing some issues with the plugin
|
127 |
+
|
128 |
+
= 2.0.2 =
|
129 |
+
* Added: option to automatically subscribe authors to their posts (improves Wordpress' default alert system, thank you [Julius](http://wordpress.org/support/topic/plugin-subscribe-to-comments-reloaded-does-the-post-author-automatically-get-subscribed-to-comments))
|
130 |
+
* Added: number of subscriptions per post in the Posts page
|
131 |
+
* Added: Serbian and Indonesian localization (thank you [Anna](http://www.sneg.iz.rs/) and [The Masked Cat](http://themaskedcat.tk))
|
132 |
+
* Fixed: bug in daily purge SQL command
|
133 |
+
* Fixed: bug with international characters (thank you Pascal)
|
134 |
+
* Updated: you can now edit a single subscription's status without having to change the email address
|
135 |
+
* Updated: more localizations are now up-to-date, thank you!
|
136 |
+
|
137 |
+
= 2.0.1 =
|
138 |
+
* Maintenance release: 2.0 shipped with a bunch of annoying bugs, sorry about that!
|
139 |
+
* Added: option to not subscribe in 'advanced mode' (thank you [LincolnAdams](http://wordpress.org/support/topic/replies-only-broken))
|
140 |
+
* Added: subscriptions count for each post (All Posts panel)
|
141 |
+
* Added: option to disable the virtual management page, for those [having problems](http://lab.duechiacchiere.it/index.php?topic=71.0) with their theme
|
142 |
+
* Fixed: subscriptions to replies only were not working properly, fixed (thank you [LincolnAdams](http://wordpress.org/support/topic/replies-only-broken))
|
143 |
+
* Fixed: some warning popping up with WP_DEBUG mode enabled
|
144 |
+
* Updated: most localizations are now up-to-date, thank you everybody!
|
145 |
+
|
146 |
+
= 2.0 =
|
147 |
+
* StCR does not use a separate table anymore, making it fully compatible with Wordpress 'network' environments! YAY!
|
148 |
+
* Added: option to prevent StCR from adding the subscription checkbox to the comment form (useful for those who want to display the box in different place on the page)
|
149 |
+
* Added: you can now disable subscriptions on specific posts, by adding a custom filed `stcr_disable_subscriptions` set to 'yes'
|
150 |
+
* Added: double opt-in is only required once, users with at least one active subscription will automatically get approved
|
151 |
+
* Added: administrators can add new subscriptions on-the-fly
|
152 |
+
* Added: if Akismet is detected, it will now be used to check those who subscribe without commenting
|
153 |
+
* Added: new shortcode to add the management page URL to your posts/widgets (thank you [Greg](http://wordpress.org/support/topic/plugin-subscribe-to-comments-reloaded-plugin-does-not-create-table))
|
154 |
+
* Added: option to enable "advanced" subscription mode, where users can choose what kind of subscription they want to activate (all, replies only)
|
155 |
+
* Added: new localizations
|
156 |
+
* Added: security checks when uninstalling the plugin
|
157 |
+
* Updated: reorganized and polished the CSS classes and ID's on the management page
|
158 |
+
* Updated: registered users are not required to confirm their subscriptions anymore (if double opt-in is enabled)
|
159 |
+
* Fixed: a problem with Gmail addresses containing a + sign in them
|
160 |
+
* Fixed: a bug with HTML attributes in the field "custom HTML for the checkbox" (thank you [travelvice](http://wordpress.org/support/topic/custom-html-quotes-problem-php-ecape-characters))
|
161 |
+
* Fixed: a bug causing some themes to not display the management page
|
162 |
+
|
163 |
+
== Language Localization ==
|
164 |
+
|
165 |
+
Subscribe to Comments Reloaded can speak your language! If you want to provide a localized file in your
|
166 |
+
language, use the template files (.pot) you'll find inside the `langs` folder,
|
167 |
+
and [contact me](http://behstant.com/negocio/contact.php) once your
|
168 |
+
localization is ready. Currently, we support the following languages:
|
169 |
+
|
170 |
+
* Danish - [Torben Bendixen](http://www.freelancekonsulenten.dk/)
|
171 |
+
* Dutch - [Martijn Chel](http://mcpnetwork.nl/),[Muratje](http://www.muromedia.nl/)
|
172 |
+
* French - [Anthony](http://imnotgeek.com/), Goormand, Maxime
|
173 |
+
* German - [derhenry](http://www.derhenry.net/2010/subscribe-to-comments-reloaded/), [Stefan](http://www.beedy.de/)
|
174 |
+
* Indonesian - [The Masked Cat](http://themaskedcat.tk)
|
175 |
+
* Italian - myself
|
176 |
+
* Norwegian - [Odd Henriksen](http://www.oddhenriksen.net/)
|
177 |
+
* Polish - [Robert Koeseling](http://www.katalogpodkastow.pl), [Filip Cierpich](http://keepmind.eu/)
|
178 |
+
* Portuguese, Brazil - [Ronaldo Richieri](http://richieri.com), [ClassiNoiva](http://www.classinoiva.com.br), [Luciano](http://litemind.com/)
|
179 |
+
* Portuguese, Portugal
|
180 |
+
* Russian - [Marika Bukvonka](http://violetnotes.com)
|
181 |
+
* Serbian - [Anna Swedziol](http://www.sneg.iz.rs/)
|
182 |
+
* Spanish - [TodoWordPress team](http://www.todowp.org/), [Juan Luis Perez](http://www.juanluperez.com/)
|
183 |
+
* Turkish - [MaD, Kali](http://www.dusunsel.com/)
|
subscribe-to-comments-reloaded.php
CHANGED
@@ -1,1575 +1,1575 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Plugin Name: Subscribe to Comments Reloaded
|
4 |
-
|
5 |
-
Version:
|
6 |
-
Stable tag:
|
7 |
-
Requires at least: 2.9.2
|
8 |
-
Tested up to: 3.8.1
|
9 |
-
|
10 |
-
Plugin URI: http://wordpress.org/extend/plugins/subscribe-to-comments-reloaded/
|
11 |
-
Description: Subscribe to Comments Reloaded is a robust plugin that enables commenters to sign up for e-mail notifications. It includes a full-featured subscription manager that your commenters can use to unsubscribe to certain posts or suspend all notifications.
|
12 |
-
Contributors: camu, Reedyseth, andreasbo, raamdev
|
13 |
-
Author: camu, Reedyseth, Raam Dev
|
14 |
-
*/
|
15 |
-
|
16 |
-
// Avoid direct access to this piece of code
|
17 |
-
if ( ! function_exists( 'add_action' ) ) {
|
18 |
-
header( 'Location: /' );
|
19 |
-
exit;
|
20 |
-
}
|
21 |
-
|
22 |
-
/**
|
23 |
-
* Displays the checkbox to allow visitors to subscribe
|
24 |
-
*/
|
25 |
-
function subscribe_reloaded_show() {
|
26 |
-
global $post, $wp_subscribe_reloaded;
|
27 |
-
$checkbox_subscription_type;
|
28 |
-
|
29 |
-
$is_disabled = get_post_meta( $post->ID, 'stcr_disable_subscriptions', true );
|
30 |
-
if ( ! empty( $is_disabled ) ) {
|
31 |
-
return $_comment_ID;
|
32 |
-
}
|
33 |
-
|
34 |
-
$show_subscription_box = true;
|
35 |
-
$html_to_show = '';
|
36 |
-
$user_link = get_bloginfo( 'url' ) . get_option( 'subscribe_reloaded_manager_page', '' );
|
37 |
-
|
38 |
-
if ( function_exists( 'qtrans_convertURL' ) ) {
|
39 |
-
$user_link = qtrans_convertURL( $user_link );
|
40 |
-
}
|
41 |
-
|
42 |
-
$manager_link = ( strpos( $user_link, '?' ) !== false ) ? "$user_link&srp=$post->ID" : "$user_link?srp=$post->ID";
|
43 |
-
|
44 |
-
// Load localization files
|
45 |
-
load_plugin_textdomain( 'subscribe-reloaded', false, dirname( plugin_basename( __FILE__ ) ) . '/langs/' );
|
46 |
-
|
47 |
-
if ( $wp_subscribe_reloaded->is_user_subscribed( $post->ID, '', 'C' ) ) {
|
48 |
-
$html_to_show = str_replace(
|
49 |
-
'[manager_link]', $user_link,
|
50 |
-
__( html_entity_decode( stripslashes( get_option( 'subscribe_reloaded_subscribed_waiting_label', "Your subscription to this post needs to be confirmed. <a href='[manager_link]'>Manage your subscriptions</a>." ) ), ENT_COMPAT, 'UTF-8' ), 'subscribe-reloaded' )
|
51 |
-
);
|
52 |
-
$show_subscription_box = false;
|
53 |
-
} elseif ( $wp_subscribe_reloaded->is_user_subscribed( $post->ID, '' ) ) {
|
54 |
-
$html_to_show = str_replace(
|
55 |
-
'[manager_link]', $user_link,
|
56 |
-
__( html_entity_decode( stripslashes( get_option( 'subscribe_reloaded_subscribed_label', "You are subscribed to this post. <a href='[manager_link]'>Manage</a> your subscriptions." ) ), ENT_COMPAT, 'UTF-8' ), 'subscribe-reloaded' )
|
57 |
-
);
|
58 |
-
$show_subscription_box = false;
|
59 |
-
}
|
60 |
-
|
61 |
-
if ( $wp_subscribe_reloaded->is_author( $post->post_author ) ) { // when the second parameter is empty, cookie value will be used
|
62 |
-
if ( get_option( 'subscribe_reloaded_admin_subscribe', 'no' ) == 'no' ) {
|
63 |
-
$show_subscription_box = false;
|
64 |
-
}
|
65 |
-
$html_to_show .= str_replace(
|
66 |
-
'[manager_link]', $manager_link,
|
67 |
-
__( html_entity_decode( stripslashes( get_option( 'subscribe_reloaded_author_label', "You can <a href='[manager_link]'>manage the subscriptions</a> of this post." ) ), ENT_COMPAT, 'UTF-8' ), 'subscribe-reloaded' )
|
68 |
-
);
|
69 |
-
}
|
70 |
-
|
71 |
-
if ( $show_subscription_box ) {
|
72 |
-
$checkbox_label = str_replace(
|
73 |
-
'[subscribe_link]', "$manager_link&sra=s",
|
74 |
-
__( html_entity_decode( stripslashes( get_option( 'subscribe_reloaded_checkbox_label', "Notify me of followup comments via e-mail. You can also <a href='[subscribe_link]'>subscribe</a> without commenting." ) ), ENT_COMPAT, 'UTF-8' ), 'subscribe-reloaded' )
|
75 |
-
);
|
76 |
-
$checkbox_inline_style = get_option( 'subscribe_reloaded_checkbox_inline_style', 'width:30px' );
|
77 |
-
if ( ! empty( $checkbox_inline_style ) ) {
|
78 |
-
$checkbox_inline_style = " style='$checkbox_inline_style'";
|
79 |
-
}
|
80 |
-
$checkbox_html_wrap = html_entity_decode( stripslashes( get_option( 'subscribe_reloaded_checkbox_html', '' ) ), ENT_COMPAT, 'UTF-8' );
|
81 |
-
if ( get_option( 'subscribe_reloaded_enable_advanced_subscriptions', 'no' ) == 'no' ) {
|
82 |
-
switch ( get_option('subscribe_reloaded_checked_by_default_value') ) {
|
83 |
-
case '0':
|
84 |
-
$checkbox_subscription_type = 'yes';
|
85 |
-
break;
|
86 |
-
case '1':
|
87 |
-
$checkbox_subscription_type = 'replies';
|
88 |
-
break;
|
89 |
-
}
|
90 |
-
$checkbox_field = "<input$checkbox_inline_style type='checkbox' name='subscribe-reloaded' id='subscribe-reloaded' value='$checkbox_subscription_type'" . ( ( get_option( 'subscribe_reloaded_checked_by_default', 'no' ) == 'yes' ) ? " checked='checked'" : '' ) . " />";
|
91 |
-
} else {
|
92 |
-
$checkbox_field = "<select name='subscribe-reloaded' id='subscribe-reloaded'>
|
93 |
-
<option value='none'" . ( ( get_option( 'subscribe_reloaded_default_subscription_type' ) === '0' ) ? "selected='selected'" : '' ) . ">" . __( "Don't subscribe", 'subscribe-reloaded' ) . "</option>
|
94 |
-
<option value='yes'" . ( ( get_option( 'subscribe_reloaded_default_subscription_type' ) === '1' ) ? "selected='selected'" : '' ) . ">" . __( "All", 'subscribe-reloaded' ) . "</option>
|
95 |
-
<option value='replies'" . ( ( get_option( 'subscribe_reloaded_default_subscription_type' ) === '2' ) ? "selected='selected'" : '' ) . ">" . __( "Replies to my comments", 'subscribe-reloaded' ) . "</option>
|
96 |
-
</select>";
|
97 |
-
}
|
98 |
-
if ( empty( $checkbox_html_wrap ) ) {
|
99 |
-
$html_to_show = "$checkbox_field <label for='subscribe-reloaded'>$checkbox_label</label>" . $html_to_show;
|
100 |
-
} else {
|
101 |
-
$checkbox_html_wrap = str_replace( '[checkbox_field]', $checkbox_field, $checkbox_html_wrap );
|
102 |
-
$html_to_show = str_replace( '[checkbox_label]', $checkbox_label, $checkbox_html_wrap ) . $html_to_show;
|
103 |
-
}
|
104 |
-
}
|
105 |
-
if ( function_exists( 'qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage' ) ) {
|
106 |
-
$html_to_show = qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage( $html_to_show );
|
107 |
-
}
|
108 |
-
echo "<!-- BEGIN: subscribe to comments reloaded
|
109 |
-
}
|
110 |
-
|
111 |
-
// Show the checkbox - You can manually override this by adding the corresponding function in your template
|
112 |
-
if ( get_option( 'subscribe_reloaded_show_subscription_box', 'yes' ) == 'yes' ) {
|
113 |
-
add_action( 'comment_form', 'subscribe_reloaded_show' );
|
114 |
-
}
|
115 |
-
|
116 |
-
class wp_subscribe_reloaded {
|
117 |
-
|
118 |
-
public $current_version = '
|
119 |
-
|
120 |
-
/**
|
121 |
-
* Constructor -- Sets things up.
|
122 |
-
*/
|
123 |
-
public function __construct() {
|
124 |
-
$this->salt = defined( 'NONCE_KEY' ) ? NONCE_KEY : 'please create a unique key in your wp-config.php';
|
125 |
-
|
126 |
-
// What to do when a new comment is posted
|
127 |
-
add_action( 'comment_post', array( &$this, 'new_comment_posted' ), 12, 2 );
|
128 |
-
|
129 |
-
// Provide content for the management page using WP filters
|
130 |
-
if ( ! is_admin() ) {
|
131 |
-
$manager_page_permalink = get_option( 'subscribe_reloaded_manager_page', '/comment-subscriptions/' );
|
132 |
-
if ( function_exists( 'qtrans_convertURL' ) ) {
|
133 |
-
$manager_page_permalink = qtrans_convertURL( $manager_page_permalink );
|
134 |
-
}
|
135 |
-
if ( empty( $manager_page_permalink ) ) {
|
136 |
-
$manager_page_permalink = get_option( 'subscribe_reloaded_manager_page', '/comment-subscriptions/' );
|
137 |
-
}
|
138 |
-
if ( ( strpos( $_SERVER["REQUEST_URI"], $manager_page_permalink ) !== false ) && get_option( 'subscribe_reloaded_manager_page_enabled', 'yes' ) == 'yes' ) {
|
139 |
-
add_filter( 'the_posts', array( &$this, 'subscribe_reloaded_manage' ), 10, 2 );
|
140 |
-
}
|
141 |
-
|
142 |
-
// Create a hook to use with the daily cron job
|
143 |
-
add_action( 'subscribe_reloaded_purge', array( &$this, 'subscribe_reloaded_purge' ) );
|
144 |
-
} else {
|
145 |
-
// Initialization routines that should be executed on activation/deactivation
|
146 |
-
register_activation_hook( __FILE__, array( &$this, 'activate' ) );
|
147 |
-
register_deactivation_hook( __FILE__, array( &$this, 'deactivate' ) );
|
148 |
-
|
149 |
-
// Hook for WPMU - New blog created
|
150 |
-
add_action( 'wpmu_new_blog', array( &$this, 'new_blog' ), 10, 1 );
|
151 |
-
|
152 |
-
// Remove subscriptions attached to a post that is being deleted
|
153 |
-
add_action( 'delete_post', array( &$this, 'delete_subscriptions' ), 10, 2 );
|
154 |
-
|
155 |
-
// Monitor actions on existing comments
|
156 |
-
add_action( 'deleted_comment', array( &$this, 'comment_deleted' ) );
|
157 |
-
add_action( 'wp_set_comment_status', array( &$this, 'comment_status_changed' ) );
|
158 |
-
|
159 |
-
// Subscribe post authors, if the case
|
160 |
-
if ( get_option( 'subscribe_reloaded_notify_authors', 'no' ) == 'yes' ) {
|
161 |
-
add_action( 'publish_post', array( &$this, 'subscribe_post_author' ) );
|
162 |
-
}
|
163 |
-
|
164 |
-
// Add a new column to the Edit Comments panel
|
165 |
-
add_filter( 'manage_edit-comments_columns', array( &$this, 'add_column_header' ) );
|
166 |
-
add_filter( 'manage_posts_columns', array( &$this, 'add_column_header' ) );
|
167 |
-
add_action( 'manage_comments_custom_column', array( &$this, 'add_comment_column' ) );
|
168 |
-
add_action( 'manage_posts_custom_column', array( &$this, 'add_post_column' ) );
|
169 |
-
|
170 |
-
// Add appropriate entries in the admin menu
|
171 |
-
add_action( 'admin_menu', array( &$this, 'add_config_menu' ) );
|
172 |
-
add_action(
|
173 |
-
'admin_print_styles-subscribe-to-comments-reloaded/options/index.php', array(
|
174 |
-
&$this,
|
175 |
-
'add_options_stylesheet'
|
176 |
-
)
|
177 |
-
);
|
178 |
-
add_action( 'admin_print_styles-edit-comments.php', array( &$this, 'add_post_comments_stylesheet' ) );
|
179 |
-
add_action( 'admin_print_styles-edit.php', array( &$this, 'add_post_comments_stylesheet' ) );
|
180 |
-
|
181 |
-
// Admin notices
|
182 |
-
add_action( 'admin_init', array( &$this, 'admin_init' ) );
|
183 |
-
add_action( 'admin_notices', array( &$this, 'admin_notices' ) );
|
184 |
-
|
185 |
-
// Contextual help
|
186 |
-
add_action( 'contextual_help', array( &$this, 'contextual_help' ), 10, 3 );
|
187 |
-
|
188 |
-
// Shortcodes to use the management URL sitewide
|
189 |
-
add_shortcode( 'subscribe-url', array( &$this, 'subscribe_url_shortcode' ) );
|
190 |
-
|
191 |
-
// Settings link for plugin on plugins page
|
192 |
-
add_filter( 'plugin_action_links', array( &$this, 'plugin_settings_link' ), 10, 2 );
|
193 |
-
}
|
194 |
-
}
|
195 |
-
|
196 |
-
// end __construct
|
197 |
-
|
198 |
-
public function admin_init() {
|
199 |
-
|
200 |
-
$version = get_option( 'subscribe_reloaded_version' );
|
201 |
-
if ( $version != $this->current_version ) {
|
202 |
-
// Do whatever upgrades needed here.
|
203 |
-
update_option( 'subscribe_reloaded_version', $this->current_version );
|
204 |
-
}
|
205 |
-
}
|
206 |
-
|
207 |
-
public function admin_notices() {
|
208 |
-
if ( $notices = get_option( 'subscribe_reloaded_deferred_admin_notices' ) ) {
|
209 |
-
foreach ( $notices as $notice ) {
|
210 |
-
echo $notice;
|
211 |
-
}
|
212 |
-
delete_option( 'subscribe_reloaded_deferred_admin_notices' );
|
213 |
-
}
|
214 |
-
}
|
215 |
-
|
216 |
-
/**
|
217 |
-
* Support for WP MU network activations (experimental)
|
218 |
-
*/
|
219 |
-
public function activate() {
|
220 |
-
global $wpdb;
|
221 |
-
|
222 |
-
if ( function_exists( 'is_multisite' ) && is_multisite() && isset( $_GET['networkwide'] ) && ( $_GET['networkwide'] == 1 ) ) {
|
223 |
-
$blogids = $wpdb->get_col(
|
224 |
-
$wpdb->prepare(
|
225 |
-
"
|
226 |
-
SELECT blog_id
|
227 |
-
FROM $wpdb->blogs
|
228 |
-
WHERE site_id = %d
|
229 |
-
AND deleted = 0
|
230 |
-
AND spam = 0", $wpdb->siteid
|
231 |
-
)
|
232 |
-
);
|
233 |
-
|
234 |
-
foreach ( $blogids as $blog_id ) {
|
235 |
-
switch_to_blog( $blog_id );
|
236 |
-
$this->_activate();
|
237 |
-
}
|
238 |
-
restore_current_blog();
|
239 |
-
} else {
|
240 |
-
$this->_activate();
|
241 |
-
}
|
242 |
-
}
|
243 |
-
// end activate
|
244 |
-
|
245 |
-
/**
|
246 |
-
* Support for WP MU network activations (experimental)
|
247 |
-
*/
|
248 |
-
public function new_blog( $_blog_id ) {
|
249 |
-
switch_to_blog( $_blog_id );
|
250 |
-
$this->_activate();
|
251 |
-
restore_current_blog();
|
252 |
-
}
|
253 |
-
// end new_blog
|
254 |
-
|
255 |
-
/**
|
256 |
-
* Adds the options to the database and imports the data from other plugins
|
257 |
-
*/
|
258 |
-
private function _activate() {
|
259 |
-
|
260 |
-
// Load localization files
|
261 |
-
load_plugin_textdomain( 'subscribe-reloaded', false, dirname( plugin_basename( __FILE__ ) ) . '/langs/' );
|
262 |
-
|
263 |
-
// Import data from the WP Comment Subscriptions plugin, if needed
|
264 |
-
$this->_import_wpcs_data();
|
265 |
-
|
266 |
-
// Import data from Subscribe to Comments & Co., if needed
|
267 |
-
$this->_import_stc_data();
|
268 |
-
|
269 |
-
// Starting from version 2.0 StCR uses Wordpress' tables to store the information about subscriptions
|
270 |
-
$this->_update_db();
|
271 |
-
|
272 |
-
// Messages related to the management page
|
273 |
-
global $wp_rewrite;
|
274 |
-
|
275 |
-
if ( empty( $wp_rewrite->permalink_structure ) ) {
|
276 |
-
add_option( 'subscribe_reloaded_manager_page', '/?page_id=99999', '', 'no' );
|
277 |
-
} else {
|
278 |
-
add_option( 'subscribe_reloaded_manager_page', '/comment-subscriptions/', '', 'no' );
|
279 |
-
}
|
280 |
-
|
281 |
-
add_option( 'subscribe_reloaded_show_subscription_box', 'yes', '', 'no' );
|
282 |
-
add_option( 'subscribe_reloaded_checked_by_default', 'no', '', 'no' );
|
283 |
-
add_option( 'subscribe_reloaded_enable_advanced_subscriptions', 'no', '', 'no' );
|
284 |
-
add_option( 'subscribe_reloaded_default_subscription_type', '2', '', 'no' );
|
285 |
-
add_option( 'subscribe_reloaded_checked_by_default_value', '0', '', 'no' );
|
286 |
-
add_option( 'subscribe_reloaded_checkbox_inline_style', 'width:30px', '', 'no' );
|
287 |
-
add_option( 'subscribe_reloaded_checkbox_html', "<p class='comment-form-subscriptions'><label for='subscribe-reloaded'>[checkbox_field] [checkbox_label]</label></p>", '', 'no' );
|
288 |
-
add_option( 'subscribe_reloaded_checkbox_label', __( "Notify me of followup comments via e-mail. You can also <a href='[subscribe_link]'>subscribe</a> without commenting.", 'subscribe-reloaded' ), '', 'no' );
|
289 |
-
add_option( 'subscribe_reloaded_subscribed_label', __( "You are subscribed to this post. <a href='[manager_link]'>Manage</a> your subscriptions.", 'subscribe-reloaded' ), '', 'no' );
|
290 |
-
add_option( 'subscribe_reloaded_subscribed_waiting_label', __( "Your subscription to this post needs to be confirmed. <a href='[manager_link]'>Manage your subscriptions</a>.", 'subscribe-reloaded' ), '', 'no' );
|
291 |
-
add_option( 'subscribe_reloaded_author_label', __( "You can <a href='[manager_link]'>manage the subscriptions</a> of this post.", 'subscribe-reloaded' ), '', 'no' );
|
292 |
-
|
293 |
-
add_option( 'subscribe_reloaded_manager_page_enabled', 'yes', '', 'no' );
|
294 |
-
add_option( 'subscribe_reloaded_manager_page_title', __( 'Manage subscriptions', 'subscribe-reloaded' ), '', 'no' );
|
295 |
-
add_option( 'subscribe_reloaded_custom_header_meta', "<meta name='robots' content='noindex,nofollow'>", '', 'no' );
|
296 |
-
add_option( 'subscribe_reloaded_request_mgmt_link', __( 'To manage your subscriptions, please enter your email address here below. We will send you a message containing the link to access your personal management page.', 'subscribe-reloaded' ), '', 'no' );
|
297 |
-
add_option( 'subscribe_reloaded_request_mgmt_link_thankyou', __( 'Thank you for using our subscription service. Your request has been completed, and you should receive an email with the management link in a few minutes.', 'subscribe-reloaded' ), '', 'no' );
|
298 |
-
add_option( 'subscribe_reloaded_subscribe_without_commenting', __( "You can follow the discussion on <strong>[post_title]</strong> without having to leave a comment. Cool, huh? Just enter your email address in the form here below and you're all set.", 'subscribe-reloaded' ), '', 'no' );
|
299 |
-
add_option( 'subscribe_reloaded_subscription_confirmed', __( "Thank you for using our subscription service. Your request has been completed. You will receive a notification email every time a new comment to this article is approved and posted by the administrator.", 'subscribe-reloaded' ), '', 'no' );
|
300 |
-
add_option( 'subscribe_reloaded_subscription_confirmed_dci', __( "Thank you for using our subscription service. In order to confirm your request, please check your email for the verification message and follow the instructions.", 'subscribe-reloaded' ), '', 'no' );
|
301 |
-
add_option( 'subscribe_reloaded_author_text', __( "In order to cancel or suspend one or more notifications, select the corresponding checkbox(es) and click on the button at the end of the list.", 'subscribe-reloaded' ), '', 'no' );
|
302 |
-
add_option( 'subscribe_reloaded_user_text', __( "In order to cancel or suspend one or more notifications, select the corresponding checkbox(es) and click on the button at the end of the list. You are currently subscribed to:", 'subscribe-reloaded' ), '', 'no' );
|
303 |
-
|
304 |
-
add_option( 'subscribe_reloaded_from_name', get_bloginfo( 'name' ), '', 'no' );
|
305 |
-
add_option( 'subscribe_reloaded_from_email', get_bloginfo( 'admin_email' ), '', 'no' );
|
306 |
-
add_option( 'subscribe_reloaded_notification_subject', __( 'There is a new comment to [post_title]', 'subscribe-reloaded' ), '', 'no' );
|
307 |
-
add_option( 'subscribe_reloaded_notification_content', __( "There is a new comment to [post_title].\nComment Link: [comment_permalink]\nAuthor: [comment_author]\nComment:\n[comment_content]\nPermalink: [post_permalink]\nManage your subscriptions: [manager_link]", 'subscribe-reloaded' ), '', 'no' );
|
308 |
-
add_option( 'subscribe_reloaded_double_check_subject', __( 'Please confirm your subscription to [post_title]', 'subscribe-reloaded' ), '', 'no' );
|
309 |
-
add_option( 'subscribe_reloaded_double_check_content', __( "You have requested to be notified every time a new comment is added to:\n[post_permalink]\n\nPlease confirm your request by clicking on this link:\n[confirm_link]", 'subscribe-reloaded' ), '', 'no' );
|
310 |
-
add_option( 'subscribe_reloaded_management_subject', __( 'Manage your subscriptions on [blog_name]', 'subscribe-reloaded' ) );
|
311 |
-
add_option( 'subscribe_reloaded_management_content', __( "You have requested to manage your subscriptions to the articles on [blog_name]. Follow this link to access your personal page:\n[manager_link]", 'subscribe-reloaded' ) );
|
312 |
-
|
313 |
-
add_option( 'subscribe_reloaded_purge_days', '30', '', 'no' );
|
314 |
-
add_option( 'subscribe_reloaded_enable_double_check', 'no', '', 'no' );
|
315 |
-
add_option( 'subscribe_reloaded_notify_authors', 'no', '', 'no' );
|
316 |
-
add_option( 'subscribe_reloaded_enable_html_emails', 'no', '', 'no' );
|
317 |
-
add_option( 'subscribe_reloaded_htmlify_message_links', 'no', '', 'no' );
|
318 |
-
add_option( 'subscribe_reloaded_process_trackbacks', 'no', '', 'no' );
|
319 |
-
add_option( 'subscribe_reloaded_enable_admin_messages', 'no', '', 'no' );
|
320 |
-
add_option( 'subscribe_reloaded_admin_subscribe', 'no', '', 'no' );
|
321 |
-
add_option( 'subscribe_reloaded_admin_bcc', 'no', '', 'no' );
|
322 |
-
|
323 |
-
// Schedule the autopurge hook
|
324 |
-
if ( ! wp_next_scheduled( 'subscribe_reloaded_purge' ) ) {
|
325 |
-
wp_schedule_event( time(), 'daily', 'subscribe_reloaded_purge' );
|
326 |
-
}
|
327 |
-
}
|
328 |
-
// end _activate
|
329 |
-
|
330 |
-
/**
|
331 |
-
* Performs some clean-up maintenance (disable cron job).
|
332 |
-
*/
|
333 |
-
public function deactivate() {
|
334 |
-
global $wpdb;
|
335 |
-
if ( function_exists( 'is_multisite' ) && is_multisite() && isset( $_GET['networkwide'] ) && ( $_GET['networkwide'] == 1 ) ) {
|
336 |
-
$blogids = $wpdb->get_col(
|
337 |
-
$wpdb->prepare(
|
338 |
-
"
|
339 |
-
SELECT blog_id
|
340 |
-
FROM $wpdb->blogs
|
341 |
-
WHERE site_id = %d
|
342 |
-
AND deleted = 0
|
343 |
-
AND spam = 0", $wpdb->siteid
|
344 |
-
)
|
345 |
-
);
|
346 |
-
|
347 |
-
foreach ( $blogids as $blog_id ) {
|
348 |
-
switch_to_blog( $blog_id );
|
349 |
-
wp_clear_scheduled_hook( 'subscribe_reloaded_purge' );
|
350 |
-
}
|
351 |
-
restore_current_blog();
|
352 |
-
} else {
|
353 |
-
wp_clear_scheduled_hook( 'subscribe_reloaded_purge' );
|
354 |
-
}
|
355 |
-
|
356 |
-
delete_option( 'subscribe_reloaded_version' );
|
357 |
-
delete_option( 'subscribe_reloaded_deferred_admin_notices' );
|
358 |
-
}
|
359 |
-
// end deactivate
|
360 |
-
|
361 |
-
/*
|
362 |
-
* Add Settings link to plugin on plugins page
|
363 |
-
*/
|
364 |
-
public function plugin_settings_link( $links, $file ) {
|
365 |
-
if ( $file == 'subscribe-to-comments-reloaded/subscribe-to-comments-reloaded.php' ) {
|
366 |
-
$links['settings'] = sprintf( '<a href="%s"> %s </a>', admin_url( 'options-general.php?page=subscribe-to-comments-reloaded/options/index.php' ), __( 'Settings', 'subscribe-reloaded' ) );
|
367 |
-
}
|
368 |
-
|
369 |
-
return $links;
|
370 |
-
}
|
371 |
-
|
372 |
-
/**
|
373 |
-
* Takes the appropriate action, when a new comment is posted
|
374 |
-
*/
|
375 |
-
public function new_comment_posted( $_comment_ID = 0, $_comment_status = 0 ) {
|
376 |
-
// Retrieve the information about the new comment
|
377 |
-
$info = $this->_get_comment_object( $_comment_ID );
|
378 |
-
|
379 |
-
if ( empty( $info ) || $info->comment_approved == 'spam' ) {
|
380 |
-
return $_comment_ID;
|
381 |
-
}
|
382 |
-
|
383 |
-
// Are subscriptions allowed for this post?
|
384 |
-
$is_disabled = get_post_meta( $info->comment_post_ID, 'stcr_disable_subscriptions', true );
|
385 |
-
if ( ! empty( $is_disabled ) ) {
|
386 |
-
return $_comment_ID;
|
387 |
-
}
|
388 |
-
|
389 |
-
// Process trackbacks and pingbacks?
|
390 |
-
if ( ( get_option( 'subscribe_reloaded_process_trackbacks', 'no' ) == 'no' ) && ( $info->comment_type == 'trackback' || $info->comment_type == 'pingback' ) ) {
|
391 |
-
return $_comment_ID;
|
392 |
-
}
|
393 |
-
|
394 |
-
// Did this visitor request to be subscribed to the discussion? (and s/he is not subscribed)
|
395 |
-
if ( ! empty( $_POST['subscribe-reloaded'] ) && ! empty( $info->comment_author_email ) ) {
|
396 |
-
if ( ! in_array( $_POST['subscribe-reloaded'], array( 'replies', 'digest', 'yes' ) ) ) {
|
397 |
-
return $_comment_ID;
|
398 |
-
}
|
399 |
-
|
400 |
-
switch ( $_POST['subscribe-reloaded'] ) {
|
401 |
-
case 'replies':
|
402 |
-
$status = 'R';
|
403 |
-
break;
|
404 |
-
case 'digest':
|
405 |
-
$status = 'D';
|
406 |
-
break;
|
407 |
-
default:
|
408 |
-
$status = 'Y';
|
409 |
-
break;
|
410 |
-
}
|
411 |
-
|
412 |
-
if ( ! $this->is_user_subscribed( $info->comment_post_ID, $info->comment_author_email ) ) {
|
413 |
-
if ( $this->isDoubleCheckinEnabled( $info ) ) {
|
414 |
-
$this->sendConfirmationEMail( $info );
|
415 |
-
$status = "{$status}C";
|
416 |
-
}
|
417 |
-
$this->add_subscription( $info->comment_post_ID, $info->comment_author_email, $status );
|
418 |
-
|
419 |
-
// If comment is in the moderation queue
|
420 |
-
if ( $info->comment_approved == 0 ) {
|
421 |
-
//don't send notification-emails to all subscribed users
|
422 |
-
return $_comment_ID;
|
423 |
-
}
|
424 |
-
}
|
425 |
-
}
|
426 |
-
|
427 |
-
// Send a notification to all the users subscribed to this post
|
428 |
-
if ( $info->comment_approved == 1 ) {
|
429 |
-
$subscriptions = $this->get_subscriptions(
|
430 |
-
array(
|
431 |
-
'post_id',
|
432 |
-
'status'
|
433 |
-
), array(
|
434 |
-
'equals',
|
435 |
-
'equals'
|
436 |
-
), array(
|
437 |
-
$info->comment_post_ID,
|
438 |
-
'Y'
|
439 |
-
)
|
440 |
-
);
|
441 |
-
if ( ! empty( $info->comment_parent ) ) {
|
442 |
-
$subscriptions = array_merge(
|
443 |
-
$subscriptions, $this->get_subscriptions(
|
444 |
-
'parent', 'equals', array(
|
445 |
-
$info->comment_parent,
|
446 |
-
$info->comment_post_ID
|
447 |
-
)
|
448 |
-
)
|
449 |
-
);
|
450 |
-
}
|
451 |
-
|
452 |
-
foreach ( $subscriptions as $a_subscription ) {
|
453 |
-
// Skip the user who posted this new comment
|
454 |
-
if ( $a_subscription->email != $info->comment_author_email ) {
|
455 |
-
$this->notify_user( $info->comment_post_ID, $a_subscription->email, $_comment_ID );
|
456 |
-
}
|
457 |
-
}
|
458 |
-
}
|
459 |
-
|
460 |
-
// If the case, notify the author
|
461 |
-
if ( get_option( 'subscribe_reloaded_notify_authors', 'no' ) == 'yes' ) {
|
462 |
-
$this->notify_user( $info->comment_post_ID, get_bloginfo( 'admin_email' ), $_comment_ID );
|
463 |
-
}
|
464 |
-
|
465 |
-
return $_comment_ID;
|
466 |
-
}
|
467 |
-
|
468 |
-
// end new_comment_posted
|
469 |
-
|
470 |
-
public function isDoubleCheckinEnabled( $info ) {
|
471 |
-
$approved_subscriptions = $this->get_subscriptions(
|
472 |
-
array(
|
473 |
-
'status',
|
474 |
-
'email'
|
475 |
-
), array(
|
476 |
-
'equals',
|
477 |
-
'equals'
|
478 |
-
), array(
|
479 |
-
'Y',
|
480 |
-
$info->comment_author_email
|
481 |
-
)
|
482 |
-
);
|
483 |
-
if ( ( get_option( 'subscribe_reloaded_enable_double_check', 'no' ) == 'yes' ) && ! is_user_logged_in() && empty( $approved_subscriptions ) ) {
|
484 |
-
return true;
|
485 |
-
} else {
|
486 |
-
return false;
|
487 |
-
}
|
488 |
-
}
|
489 |
-
|
490 |
-
public function sendConfirmationEMail( $info ) {
|
491 |
-
// Retrieve the information about the new comment
|
492 |
-
$this->confirmation_email( $info->comment_post_ID, $info->comment_author_email );
|
493 |
-
}
|
494 |
-
|
495 |
-
/**
|
496 |
-
* Performs the appropriate action when the status of a given comment changes
|
497 |
-
*/
|
498 |
-
public function comment_status_changed( $_comment_ID = 0, $_comment_status = 0 ) {
|
499 |
-
// Retrieve the information about the comment
|
500 |
-
$info = $this->_get_comment_object( $_comment_ID );
|
501 |
-
if ( empty( $info ) ) {
|
502 |
-
return $_comment_ID;
|
503 |
-
}
|
504 |
-
|
505 |
-
switch ( $info->comment_approved ) {
|
506 |
-
case '0': // Unapproved: change the status of the corresponding subscription (if exists) to 'pending'
|
507 |
-
$this->update_subscription_status( $info->comment_post_ID, $info->comment_author_email, 'C' );
|
508 |
-
break;
|
509 |
-
|
510 |
-
case '1': // Approved
|
511 |
-
$this->update_subscription_status( $info->comment_post_ID, $info->comment_author_email, '-C' );
|
512 |
-
$subscriptions = $this->get_subscriptions(
|
513 |
-
array(
|
514 |
-
'post_id',
|
515 |
-
'status'
|
516 |
-
), array(
|
517 |
-
'equals',
|
518 |
-
'equals'
|
519 |
-
), array(
|
520 |
-
$info->comment_post_ID,
|
521 |
-
'Y'
|
522 |
-
)
|
523 |
-
);
|
524 |
-
if ( ! empty( $info->comment_parent ) ) {
|
525 |
-
$subscriptions = array_merge(
|
526 |
-
$subscriptions, $this->get_subscriptions(
|
527 |
-
'parent', 'equals', array(
|
528 |
-
$info->comment_parent,
|
529 |
-
$info->comment_post_ID
|
530 |
-
)
|
531 |
-
)
|
532 |
-
);
|
533 |
-
}
|
534 |
-
|
535 |
-
foreach ( $subscriptions as $a_subscription ) {
|
536 |
-
if ( $a_subscription->email != $info->comment_author_email ) // Skip the user who posted this new comment
|
537 |
-
{
|
538 |
-
$this->notify_user( $info->comment_post_ID, $a_subscription->email, $_comment_ID );
|
539 |
-
}
|
540 |
-
}
|
541 |
-
break;
|
542 |
-
|
543 |
-
case 'trash':
|
544 |
-
case 'spam':
|
545 |
-
$this->comment_deleted( $_comment_ID );
|
546 |
-
break;
|
547 |
-
|
548 |
-
default:
|
549 |
-
break;
|
550 |
-
}
|
551 |
-
|
552 |
-
return $_comment_ID;
|
553 |
-
}
|
554 |
-
// end comment_status
|
555 |
-
|
556 |
-
/**
|
557 |
-
* Performs the appropriate action when a comment is deleted
|
558 |
-
*/
|
559 |
-
public function comment_deleted( $_comment_ID ) {
|
560 |
-
global $wpdb;
|
561 |
-
|
562 |
-
$info = $this->_get_comment_object( $_comment_ID );
|
563 |
-
if ( empty( $info ) ) {
|
564 |
-
return $_comment_ID;
|
565 |
-
}
|
566 |
-
|
567 |
-
// Are there any other approved comments sent by this user?
|
568 |
-
$count_approved_comments = $wpdb->get_var(
|
569 |
-
"
|
570 |
-
SELECT COUNT(*)
|
571 |
-
FROM $wpdb->comments
|
572 |
-
WHERE comment_post_ID = '$info->comment_post_ID' AND comment_author_email = '$info->comment_author_email' AND comment_approved = 1"
|
573 |
-
);
|
574 |
-
if ( intval( $count_approved_comments ) == 0 ) {
|
575 |
-
$this->delete_subscriptions( $info->comment_post_ID, $info->comment_author_email );
|
576 |
-
}
|
577 |
-
|
578 |
-
return $_comment_ID;
|
579 |
-
}
|
580 |
-
// end comment_deleted
|
581 |
-
|
582 |
-
/**
|
583 |
-
* Subscribes the post author, if the corresponding option is set
|
584 |
-
*/
|
585 |
-
public function subscribe_post_author( $_post_ID ) {
|
586 |
-
$new_post = get_post( $_post_ID );
|
587 |
-
$author_email = get_the_author_meta( 'user_email', $new_post->post_author );
|
588 |
-
if ( ! empty( $author_email ) ) {
|
589 |
-
$this->add_subscription( $_post_ID, $author_email, 'Y' );
|
590 |
-
}
|
591 |
-
}
|
592 |
-
// end subscribe_post_author
|
593 |
-
|
594 |
-
/**
|
595 |
-
* Displays the appropriate management page
|
596 |
-
*/
|
597 |
-
public function subscribe_reloaded_manage( $_posts = '', $_query = '' ) {
|
598 |
-
global $current_user;
|
599 |
-
|
600 |
-
if ( ! empty( $_posts ) ) {
|
601 |
-
return $_posts;
|
602 |
-
}
|
603 |
-
|
604 |
-
$post_ID = ! empty( $_POST['srp'] ) ? intval( $_POST['srp'] ) : ( ! empty( $_GET['srp'] ) ? intval( $_GET['srp'] ) : 0 );
|
605 |
-
|
606 |
-
// Is the post_id passed in the query string valid?
|
607 |
-
$target_post = get_post( $post_ID );
|
608 |
-
if ( ( $post_ID > 0 ) && ! is_object( $target_post ) ) {
|
609 |
-
return $_posts;
|
610 |
-
}
|
611 |
-
|
612 |
-
// Load localization files
|
613 |
-
load_plugin_textdomain( 'subscribe-reloaded', false, dirname( plugin_basename( __FILE__ ) ) . '/langs/' );
|
614 |
-
|
615 |
-
$action = ! empty( $_POST['sra'] ) ? $_POST['sra'] : ( ! empty( $_GET['sra'] ) ? $_GET['sra'] : 0 );
|
616 |
-
$key = ! empty( $_POST['srk'] ) ? $_POST['srk'] : ( ! empty( $_GET['srk'] ) ? $_GET['srk'] : 0 );
|
617 |
-
|
618 |
-
$email = $this->clean_email( ! empty( $_POST['sre'] ) ? urldecode( $_POST['sre'] ) : ( ! empty( $_GET['sre'] ) ? $_GET['sre'] : '' ) );
|
619 |
-
if ( empty( $email ) && ! empty( $current_user->user_email ) ) {
|
620 |
-
$email = $this->clean_email( $current_user->user_email );
|
621 |
-
}
|
622 |
-
|
623 |
-
// Subscribe without commenting
|
624 |
-
if ( ! empty( $action ) && ( $action == 's' ) && ( $post_ID > 0 ) ) {
|
625 |
-
$include_post_content = include WP_PLUGIN_DIR . '/subscribe-to-comments-reloaded/templates/subscribe.php';
|
626 |
-
} // Management page for post authors
|
627 |
-
elseif ( ( $post_ID > 0 ) && $this->is_author( $target_post->post_author ) ) {
|
628 |
-
$include_post_content = include WP_PLUGIN_DIR . '/subscribe-to-comments-reloaded/templates/author.php';
|
629 |
-
} // Confirm your subscription (double check-in)
|
630 |
-
elseif ( ( $post_ID > 0 ) && ! empty( $email ) && ! empty( $key ) && ! empty( $action ) &&
|
631 |
-
$this->is_user_subscribed( $post_ID, $email, 'C' ) &&
|
632 |
-
$this->_is_valid_key( $key, $email ) &&
|
633 |
-
( $action == 'c' )
|
634 |
-
) {
|
635 |
-
$include_post_content = include WP_PLUGIN_DIR . '/subscribe-to-comments-reloaded/templates/confirm.php';
|
636 |
-
} // Manage your subscriptions (user)
|
637 |
-
elseif ( ! empty( $email ) && ( ( ! empty( $key ) && $this->_is_valid_key( $key, $email ) ) || current_user_can( 'read' ) ) ) {
|
638 |
-
$include_post_content = include WP_PLUGIN_DIR . '/subscribe-to-comments-reloaded/templates/user.php';
|
639 |
-
}
|
640 |
-
|
641 |
-
if ( empty( $include_post_content ) ) {
|
642 |
-
$include_post_content = include WP_PLUGIN_DIR . '/subscribe-to-comments-reloaded/templates/request-management-link.php';
|
643 |
-
}
|
644 |
-
|
645 |
-
global $wp_query;
|
646 |
-
|
647 |
-
$manager_page_title = html_entity_decode( get_option( 'subscribe_reloaded_manager_page_title', 'Manage subscriptions' ), ENT_COMPAT, 'UTF-8' );
|
648 |
-
if ( function_exists( 'qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage' ) ) {
|
649 |
-
$manager_page_title = qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage( $manager_page_title );
|
650 |
-
}
|
651 |
-
|
652 |
-
$posts[] =
|
653 |
-
(object) array(
|
654 |
-
'ID' => '9999999',
|
655 |
-
'post_author' => '1',
|
656 |
-
'post_date' => '2001-01-01 11:38:56',
|
657 |
-
'post_date_gmt' => '2001-01-01 00:38:56',
|
658 |
-
'post_content' => $include_post_content,
|
659 |
-
'post_title' => $manager_page_title,
|
660 |
-
'post_excerpt' => '',
|
661 |
-
'post_status' => 'publish',
|
662 |
-
'comment_status' => 'closed',
|
663 |
-
'ping_status' => 'closed',
|
664 |
-
'post_password' => '',
|
665 |
-
'to_ping' => '',
|
666 |
-
'pinged' => '',
|
667 |
-
'post_modified' => '2001-01-01 11:00:01',
|
668 |
-
'post_modified_gmt' => '2001-01-01 00:00:01',
|
669 |
-
'post_content_filtered' => '',
|
670 |
-
'post_parent' => '0',
|
671 |
-
'menu_order' => '0',
|
672 |
-
'post_type' => 'page',
|
673 |
-
'post_mime_type' => '',
|
674 |
-
'post_category' => '0',
|
675 |
-
'comment_count' => '0',
|
676 |
-
'filter' => 'raw',
|
677 |
-
'guid' => get_bloginfo( 'url' ) . '/?page_id=9999999',
|
678 |
-
'post_name' => get_bloginfo( 'url' ) . '/?page_id=9999999',
|
679 |
-
'ancestors' => array()
|
680 |
-
);
|
681 |
-
|
682 |
-
// Make WP believe this is a real page, with no comments attached
|
683 |
-
$wp_query->is_page = true;
|
684 |
-
$wp_query->is_single = false;
|
685 |
-
$wp_query->is_home = false;
|
686 |
-
$wp_query->comments = false;
|
687 |
-
|
688 |
-
// Discard 404 errors thrown by other checks
|
689 |
-
unset( $wp_query->query["error"] );
|
690 |
-
$wp_query->query_vars["error"] = "";
|
691 |
-
$wp_query->is_404 = false;
|
692 |
-
|
693 |
-
// Seems like WP adds its own HTML formatting code to the content, we don't need that here
|
694 |
-
remove_filter( 'the_content', 'wpautop' );
|
695 |
-
add_action( 'wp_head', array( &$this, 'add_custom_header_meta' ) );
|
696 |
-
|
697 |
-
return $posts;
|
698 |
-
}
|
699 |
-
// end subscribe_reloaded_manage
|
700 |
-
|
701 |
-
/**
|
702 |
-
* Removes old entries from the database
|
703 |
-
*/
|
704 |
-
public function subscribe_reloaded_purge() {
|
705 |
-
global $wpdb;
|
706 |
-
|
707 |
-
if ( ( $autopurge_interval = intval( get_option( 'subscribe_reloaded_purge_days', 0 ) ) ) <= 0 ) {
|
708 |
-
return true;
|
709 |
-
}
|
710 |
-
|
711 |
-
// Delete old entries
|
712 |
-
$wpdb->query(
|
713 |
-
"
|
714 |
-
DELETE FROM $wpdb->postmeta
|
715 |
-
WHERE meta_key LIKE '\_stcr@\_%'
|
716 |
-
AND STR_TO_DATE(meta_value, '%Y-%m-%d %H:%i:%s') <= DATE_SUB(NOW(), INTERVAL $autopurge_interval DAY) AND meta_value LIKE '%C'"
|
717 |
-
);
|
718 |
-
}
|
719 |
-
// end subscribe_reloaded_purge
|
720 |
-
|
721 |
-
/**
|
722 |
-
* Checks if current logged in user is the author of this post
|
723 |
-
*/
|
724 |
-
public function is_author( $_post_author ) {
|
725 |
-
global $current_user;
|
726 |
-
|
727 |
-
return ! empty( $current_user ) && ( ( $_post_author == $current_user->ID ) || current_user_can( 'manage_options' ) );
|
728 |
-
}
|
729 |
-
// end is_author
|
730 |
-
|
731 |
-
/**
|
732 |
-
* Checks if a given email address is subscribed to a post
|
733 |
-
*/
|
734 |
-
public function is_user_subscribed( $_post_ID = 0, $_email = '', $_status = '' ) {
|
735 |
-
global $current_user;
|
736 |
-
|
737 |
-
if ( ( empty( $current_user->user_email ) && empty( $_COOKIE['comment_author_email_' . COOKIEHASH] ) && empty( $_email ) ) || empty( $_post_ID ) ) {
|
738 |
-
return false;
|
739 |
-
}
|
740 |
-
|
741 |
-
$operator = ( $_status != '' ) ? 'equals' : 'contains';
|
742 |
-
$subscriptions = $this->get_subscriptions(
|
743 |
-
array(
|
744 |
-
'post_id',
|
745 |
-
'status'
|
746 |
-
), array(
|
747 |
-
'equals',
|
748 |
-
$operator
|
749 |
-
), array(
|
750 |
-
$_post_ID,
|
751 |
-
$_status
|
752 |
-
)
|
753 |
-
);
|
754 |
-
|
755 |
-
if ( empty( $_email ) ) {
|
756 |
-
$user_email = ! empty( $current_user->user_email ) ? $current_user->user_email : ( ! empty( $_COOKIE['comment_author_email_' . COOKIEHASH] ) ? stripslashes( esc_attr( $_COOKIE['comment_author_email_' . COOKIEHASH] ) ) : '#undefined#' );
|
757 |
-
} else {
|
758 |
-
$user_email = $_email;
|
759 |
-
}
|
760 |
-
|
761 |
-
foreach ( $subscriptions as $a_subscription ) {
|
762 |
-
if ( $user_email == $a_subscription->email ) {
|
763 |
-
return true;
|
764 |
-
}
|
765 |
-
}
|
766 |
-
|
767 |
-
return false;
|
768 |
-
}
|
769 |
-
// end is_user_subscribed
|
770 |
-
|
771 |
-
/**
|
772 |
-
* Adds a new subscription
|
773 |
-
*/
|
774 |
-
public function add_subscription( $_post_id = 0, $_email = '', $_status = 'Y' ) {
|
775 |
-
global $wpdb;
|
776 |
-
// Does the post exist?
|
777 |
-
$target_post = get_post( $_post_id );
|
778 |
-
if ( ( $_post_id > 0 ) && ! is_object( $target_post ) ) {
|
779 |
-
return;
|
780 |
-
}
|
781 |
-
|
782 |
-
// Filter unwanted statuses
|
783 |
-
if ( ! in_array( $_status, array( 'Y', 'YC', 'R', 'RC', 'C', '-C' ) ) || empty( $_status ) ) {
|
784 |
-
return;
|
785 |
-
}
|
786 |
-
|
787 |
-
// Using Wordpress local time
|
788 |
-
$dt = date_i18n( 'Y-m-d H:i:s' );
|
789 |
-
|
790 |
-
$clean_email = $this->clean_email( $_email );
|
791 |
-
$wpdb->query(
|
792 |
-
$wpdb->prepare(
|
793 |
-
"
|
794 |
-
INSERT IGNORE INTO $wpdb->postmeta (post_id, meta_key, meta_value)
|
795 |
-
SELECT %d, %s, %s
|
796 |
-
FROM DUAL
|
797 |
-
WHERE NOT EXISTS (
|
798 |
-
SELECT post_id
|
799 |
-
FROM $wpdb->postmeta
|
800 |
-
WHERE post_id = %d
|
801 |
-
AND meta_key = %s
|
802 |
-
LIMIT 0,1
|
803 |
-
)", $_post_id, "_stcr@_$clean_email", "$dt|$_status", $_post_id, "_stcr@_$clean_email"
|
804 |
-
)
|
805 |
-
);
|
806 |
-
}
|
807 |
-
// end add_subscription
|
808 |
-
|
809 |
-
/**
|
810 |
-
* Deletes one or more subscriptions from the database
|
811 |
-
*/
|
812 |
-
public function delete_subscriptions( $_post_id = 0, $_email = '' ) {
|
813 |
-
global $wpdb;
|
814 |
-
|
815 |
-
if ( empty( $_post_id ) ) {
|
816 |
-
return 0;
|
817 |
-
}
|
818 |
-
|
819 |
-
$posts_where = '';
|
820 |
-
if ( ! is_array( $_post_id ) ) {
|
821 |
-
$posts_where = "post_id = " . intval( $_post_id );
|
822 |
-
} else {
|
823 |
-
foreach ( $_post_id as $a_post_id ) {
|
824 |
-
$posts_where .= "post_id = '" . intval( $a_post_id ) . "' OR ";
|
825 |
-
}
|
826 |
-
|
827 |
-
$posts_where = substr( $posts_where, 0, - 4 );
|
828 |
-
}
|
829 |
-
|
830 |
-
if ( ! empty( $_email ) ) {
|
831 |
-
$emails_where = '';
|
832 |
-
if ( ! is_array( $_email ) ) {
|
833 |
-
$emails_where = "meta_key = '_stcr@_" . $this->clean_email( $_email ) . "'";
|
834 |
-
} else {
|
835 |
-
foreach ( $_email as $a_email ) {
|
836 |
-
$emails_where .= "meta_key = '_stcr@_" . $this->clean_email( $a_email ) . "' OR ";
|
837 |
-
}
|
838 |
-
|
839 |
-
$emails_where = substr( $emails_where, 0, - 4 );
|
840 |
-
}
|
841 |
-
|
842 |
-
return $wpdb->query( "DELETE FROM $wpdb->postmeta WHERE ($posts_where) AND ($emails_where)" );
|
843 |
-
} else {
|
844 |
-
return $wpdb->query( "DELETE FROM $wpdb->postmeta WHERE meta_key LIKE '\_stcr@\_%' AND ($posts_where)" );
|
845 |
-
}
|
846 |
-
}
|
847 |
-
// end delete_subscriptions
|
848 |
-
|
849 |
-
/**
|
850 |
-
* Updates the status of an existing subscription
|
851 |
-
*/
|
852 |
-
public function update_subscription_status( $_post_id = 0, $_email = '', $_new_status = 'C' ) {
|
853 |
-
global $wpdb;
|
854 |
-
|
855 |
-
// Filter unwanted statuses
|
856 |
-
if ( empty( $_new_status ) || ! in_array( $_new_status, array( 'Y', 'R', 'C', '-C' ) ) || empty( $_email ) ) {
|
857 |
-
return 0;
|
858 |
-
}
|
859 |
-
|
860 |
-
if ( ! empty( $_post_id ) ) {
|
861 |
-
$posts_where = '';
|
862 |
-
if ( ! is_array( $_post_id ) ) {
|
863 |
-
$posts_where = "post_id = " . intval( $_post_id );
|
864 |
-
} else {
|
865 |
-
foreach ( $_post_id as $a_post_id ) {
|
866 |
-
$posts_where .= "post_id = '" . intval( $a_post_id ) . "' OR ";
|
867 |
-
}
|
868 |
-
|
869 |
-
$posts_where = substr( $posts_where, 0, - 4 );
|
870 |
-
}
|
871 |
-
} else { // Mass update subscriptions
|
872 |
-
$posts_where = '1=1';
|
873 |
-
}
|
874 |
-
|
875 |
-
$emails_where = '';
|
876 |
-
if ( ! is_array( $_email ) ) {
|
877 |
-
$emails_where = "meta_key = '_stcr@_" . $this->clean_email( $_email ) . "'";
|
878 |
-
} else {
|
879 |
-
foreach ( $_email as $a_email ) {
|
880 |
-
$emails_where .= "meta_key = '_stcr@_" . $this->clean_email( $a_email ) . "' OR ";
|
881 |
-
}
|
882 |
-
|
883 |
-
$emails_where = substr( $emails_where, 0, - 4 );
|
884 |
-
}
|
885 |
-
|
886 |
-
$meta_length = ( strpos( $_new_status, 'C' ) !== false ) ? 21 : 20;
|
887 |
-
$new_status = ( $_new_status == '-C' ) ? '' : $_new_status;
|
888 |
-
|
889 |
-
return $wpdb->query(
|
890 |
-
"
|
891 |
-
UPDATE $wpdb->postmeta
|
892 |
-
SET meta_value = CONCAT(SUBSTRING(meta_value, 1, $meta_length), '$new_status')
|
893 |
-
WHERE ($posts_where) AND ($emails_where)"
|
894 |
-
);
|
895 |
-
}
|
896 |
-
// end update_subscription_status
|
897 |
-
|
898 |
-
/**
|
899 |
-
* Updates the email address of an existing subscription
|
900 |
-
*/
|
901 |
-
public function update_subscription_email( $_post_id = 0, $_email = '', $_new_email = '' ) {
|
902 |
-
global $wpdb;
|
903 |
-
|
904 |
-
// Nothing to do if the new email hasn't been specified
|
905 |
-
if ( empty( $_email ) || empty( $_new_email ) || strpos( $_new_email, '@' ) == 0 ) {
|
906 |
-
return;
|
907 |
-
}
|
908 |
-
|
909 |
-
$clean_values[] = "_stcr@_" . $this->clean_email( $_new_email );
|
910 |
-
$clean_values[] = "_stcr@_" . $this->clean_email( $_email );
|
911 |
-
$post_where = '';
|
912 |
-
if ( ! empty( $_post_id ) ) {
|
913 |
-
$post_where = ' AND post_id = %d';
|
914 |
-
$clean_values[] = $_post_id;
|
915 |
-
}
|
916 |
-
|
917 |
-
return $wpdb->query(
|
918 |
-
$wpdb->prepare(
|
919 |
-
"
|
920 |
-
UPDATE $wpdb->postmeta
|
921 |
-
SET meta_key = %s
|
922 |
-
WHERE meta_key = %s $post_where", $clean_values
|
923 |
-
)
|
924 |
-
);
|
925 |
-
}
|
926 |
-
// end update_subscription_email
|
927 |
-
|
928 |
-
/**
|
929 |
-
* Retrieves a list of emails subscribed to this post
|
930 |
-
*/
|
931 |
-
public function get_subscriptions( $_search_field = array( 'email' ), $_operator = array( 'equals' ), $_search_value = array( '' ), $_order_by = 'dt', $_order = 'ASC', $_offset = 0, $_limit_results = 0 ) {
|
932 |
-
global $wpdb;
|
933 |
-
|
934 |
-
// Type adjustments
|
935 |
-
$search_fields = ( ! is_array( $_search_field ) ) ? array( $_search_field ) : $_search_field;
|
936 |
-
$operators = ( ! is_array( $_operator ) ) ? array( $_operator ) : $_operator;
|
937 |
-
$search_values = ( ! is_array( $_search_value ) ) ? array( $_search_value ) : $_search_value;
|
938 |
-
|
939 |
-
// Find if exists a 'replies only' subscription for the parent comment
|
940 |
-
if ( $search_fields[0] == 'parent' ) {
|
941 |
-
|
942 |
-
$parent_comment_id = $search_values[0];
|
943 |
-
$comment_post_id = $search_values[1];
|
944 |
-
|
945 |
-
// Get the parent comment author email so we can search for any Replies Only subscriptions
|
946 |
-
$parent_comment_author_email_query = mysql_query( "SELECT `comment_author_email` FROM $wpdb->comments WHERE `comment_ID` = '$parent_comment_id'" );
|
947 |
-
$parent_comment_author_email = mysql_fetch_row( $parent_comment_author_email_query );
|
948 |
-
$parent_comment_author_email = "\_stcr@\_" . $parent_comment_author_email[0];
|
949 |
-
|
950 |
-
// Check if $parent_comment_author_email has any Replies Only (R) subscriptions for $comment_post_id
|
951 |
-
|
952 |
-
/*
|
953 |
-
Heads up: this will return Replies Only subscriptions for a given post, *not* for a given comment.
|
954 |
-
This plugin does not track subscriptions for specific comments but rather for entire posts, so there
|
955 |
-
is no way to figure out if a specific parent comment has a subscription (of any type). To make the
|
956 |
-
Replies Only feature half-work, we check if a parent comment author has *any* Replies Only subscriptions
|
957 |
-
for a given post. If they do, we assume that they must want to get notified of replies to *any* of their
|
958 |
-
comments on *that* post.
|
959 |
-
*/
|
960 |
-
|
961 |
-
return $wpdb->get_results(
|
962 |
-
$wpdb->prepare(
|
963 |
-
"
|
964 |
-
SELECT pm.meta_id, REPLACE(pm.meta_key, '_stcr@_', '') AS email, pm.post_id, SUBSTRING(pm.meta_value, 1, 19) AS dt, SUBSTRING(pm.meta_value, 21) AS status
|
965 |
-
FROM $wpdb->postmeta pm
|
966 |
-
WHERE pm.meta_key LIKE %s
|
967 |
-
AND pm.meta_value LIKE '%%R'
|
968 |
-
AND pm.post_id = %d", $parent_comment_author_email, $comment_post_id
|
969 |
-
), OBJECT
|
970 |
-
);
|
971 |
-
} else {
|
972 |
-
$where_clause = '';
|
973 |
-
foreach ( $search_fields as $a_idx => $a_field ) {
|
974 |
-
$where_clause .= ' AND';
|
975 |
-
$offset_status = ( $a_field == 'status' && $search_values[$a_idx] == 'C' ) ? 22 : 21;
|
976 |
-
switch ( $a_field ) {
|
977 |
-
case 'status':
|
978 |
-
$where_clause .= " SUBSTRING(meta_value, $offset_status)";
|
979 |
-
break;
|
980 |
-
case 'post_id':
|
981 |
-
$where_clause .= ' post_id';
|
982 |
-
break;
|
983 |
-
default:
|
984 |
-
$where_clause .= ' SUBSTRING(meta_key, 8)';
|
985 |
-
}
|
986 |
-
switch ( $operators[$a_idx] ) {
|
987 |
-
case 'equals':
|
988 |
-
$where_clause .= " = %s";
|
989 |
-
$where_values[] = $search_values[$a_idx];
|
990 |
-
break;
|
991 |
-
case 'does not contain':
|
992 |
-
$where_clause .= " NOT LIKE %s";
|
993 |
-
$where_values[] = "%{$search_values[$a_idx]}%";
|
994 |
-
break;
|
995 |
-
case 'starts with':
|
996 |
-
$where_clause .= " LIKE %s";
|
997 |
-
$where_values[] = "${$search_values[$a_idx]}%";
|
998 |
-
break;
|
999 |
-
case 'ends with':
|
1000 |
-
$where_clause .= " LIKE %s";
|
1001 |
-
$where_values[] = "%{$search_values[$a_idx]}";
|
1002 |
-
break;
|
1003 |
-
default: // contains
|
1004 |
-
$where_clause .= " LIKE %s";
|
1005 |
-
$where_values[] = "%{$search_values[$a_idx]}%";
|
1006 |
-
}
|
1007 |
-
}
|
1008 |
-
switch ( $_order_by ) {
|
1009 |
-
case 'status':
|
1010 |
-
$order_by = "status";
|
1011 |
-
break;
|
1012 |
-
case 'email':
|
1013 |
-
$order_by = 'meta_key';
|
1014 |
-
break;
|
1015 |
-
case 'dt':
|
1016 |
-
$order_by = 'dt';
|
1017 |
-
break;
|
1018 |
-
default:
|
1019 |
-
$order_by = 'post_id';
|
1020 |
-
}
|
1021 |
-
$order = ( $_order != 'ASC' && $_order != 'DESC' ) ? 'DESC' : $_order;
|
1022 |
-
|
1023 |
-
// This is the 'official' way to have an offset without a limit
|
1024 |
-
$row_count = ( $_limit_results <= 0 ) ? '18446744073709551610' : $_limit_results;
|
1025 |
-
|
1026 |
-
return $wpdb->get_results(
|
1027 |
-
$wpdb->prepare(
|
1028 |
-
"
|
1029 |
-
SELECT meta_id, REPLACE(meta_key, '_stcr@_', '') AS email, post_id, SUBSTRING(meta_value, 1, 19) AS dt, SUBSTRING(meta_value, 21) AS status
|
1030 |
-
FROM $wpdb->postmeta
|
1031 |
-
WHERE meta_key LIKE '\_stcr@\_%%' $where_clause
|
1032 |
-
ORDER BY $order_by $order
|
1033 |
-
LIMIT $_offset,$row_count", $where_values
|
1034 |
-
), OBJECT
|
1035 |
-
);
|
1036 |
-
}
|
1037 |
-
}
|
1038 |
-
// end get_subscriptions
|
1039 |
-
|
1040 |
-
/**
|
1041 |
-
* Sends a message to confirm a subscription
|
1042 |
-
*/
|
1043 |
-
public function confirmation_email( $_post_ID = 0, $_email = '' ) {
|
1044 |
-
// Retrieve the options from the database
|
1045 |
-
$from_name = stripslashes( get_option( 'subscribe_reloaded_from_name', 'admin' ) );
|
1046 |
-
$from_email = get_option( 'subscribe_reloaded_from_email', get_bloginfo( 'admin_email' ) );
|
1047 |
-
$subject = html_entity_decode( stripslashes( get_option( 'subscribe_reloaded_double_check_subject', 'Please confirm your subscribtion to [post_title]' ) ), ENT_COMPAT, 'UTF-8' );
|
1048 |
-
$message = html_entity_decode( stripslashes( get_option( 'subscribe_reloaded_double_check_content', '' ) ), ENT_COMPAT, 'UTF-8' );
|
1049 |
-
$manager_link = get_bloginfo( 'url' ) . get_option( 'subscribe_reloaded_manager_page', '/comment-subscriptions/' );
|
1050 |
-
if ( function_exists( 'qtrans_convertURL' ) ) {
|
1051 |
-
$manager_link = qtrans_convertURL( $manager_link );
|
1052 |
-
}
|
1053 |
-
|
1054 |
-
$clean_email = $this->clean_email( $_email );
|
1055 |
-
$subscriber_salt = $this->generate_key( $clean_email );
|
1056 |
-
|
1057 |
-
$manager_link .= ( ( strpos( $manager_link, '?' ) !== false ) ? '&' : '?' ) . "sre=" . urlencode( $clean_email ) . "&srk=$subscriber_salt";
|
1058 |
-
$confirm_link = "$manager_link&srp=$_post_ID&sra=c";
|
1059 |
-
|
1060 |
-
$headers = "From: $from_name <$from_email>\n";
|
1061 |
-
$content_type = ( get_option( 'subscribe_reloaded_enable_html_emails', 'no' ) == 'yes' ) ? 'text/html' : 'text/plain';
|
1062 |
-
$headers .= "Content-Type: $content_type; charset=" . get_bloginfo( 'charset' ) . "\n";
|
1063 |
-
|
1064 |
-
$post = get_post( $_post_ID );
|
1065 |
-
$post_permalink = get_permalink( $_post_ID );
|
1066 |
-
|
1067 |
-
// Replace tags with their actual values
|
1068 |
-
$subject = str_replace( '[post_title]', $post->post_title, $subject );
|
1069 |
-
|
1070 |
-
$message = str_replace( '[post_permalink]', $post_permalink, $message );
|
1071 |
-
$message = str_replace( '[confirm_link]', $confirm_link, $message );
|
1072 |
-
$message = str_replace( '[manager_link]', $manager_link, $message );
|
1073 |
-
|
1074 |
-
// QTranslate support
|
1075 |
-
if ( function_exists( 'qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage' ) ) {
|
1076 |
-
$subject = qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage( $subject );
|
1077 |
-
$message = str_replace( '[post_title]', qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage( $post->post_title ), $message );
|
1078 |
-
$message = qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage( $message );
|
1079 |
-
} else {
|
1080 |
-
$message = str_replace( '[post_title]', $post->post_title, $message );
|
1081 |
-
}
|
1082 |
-
$message = apply_filters( 'stcr_confirmation_email_message', $message, $_post_ID, $email );
|
1083 |
-
if ( $content_type == 'text/html' ) {
|
1084 |
-
$message = $this->wrap_html_message( $message, $subject );
|
1085 |
-
}
|
1086 |
-
|
1087 |
-
wp_mail( $clean_email, $subject, $message, $headers );
|
1088 |
-
}
|
1089 |
-
// end confirmation_email
|
1090 |
-
|
1091 |
-
/**
|
1092 |
-
* Sends the notification message to a given user
|
1093 |
-
*/
|
1094 |
-
public function notify_user( $_post_ID = 0, $_email = '', $_comment_ID = 0 ) {
|
1095 |
-
// Retrieve the options from the database
|
1096 |
-
$from_name = html_entity_decode( stripslashes( get_option( 'subscribe_reloaded_from_name', 'admin' ) ), ENT_COMPAT, 'UTF-8' );
|
1097 |
-
$from_email = get_option( 'subscribe_reloaded_from_email', get_bloginfo( 'admin_email' ) );
|
1098 |
-
$subject = html_entity_decode( stripslashes( get_option( 'subscribe_reloaded_notification_subject', 'There is a new comment on the post [post_title]' ) ), ENT_COMPAT, 'UTF-8' );
|
1099 |
-
$message = html_entity_decode( stripslashes( get_option( 'subscribe_reloaded_notification_content', '' ) ), ENT_COMPAT, 'UTF-8' );
|
1100 |
-
$manager_link = get_bloginfo( 'url' ) . get_option( 'subscribe_reloaded_manager_page', '/comment-subscriptions/' );
|
1101 |
-
if ( function_exists( 'qtrans_convertURL' ) ) {
|
1102 |
-
$manager_link = qtrans_convertURL( $manager_link );
|
1103 |
-
}
|
1104 |
-
|
1105 |
-
$clean_email = $this->clean_email( $_email );
|
1106 |
-
$subscriber_salt = $this->generate_key( $clean_email );
|
1107 |
-
|
1108 |
-
$manager_link .= ( ( strpos( $manager_link, '?' ) !== false ) ? '&' : '?' ) . "sre=" . urlencode( $clean_email ) . "&srk=$subscriber_salt";
|
1109 |
-
|
1110 |
-
$headers = "From: $from_name <$from_email>\n";
|
1111 |
-
$content_type = ( get_option( 'subscribe_reloaded_enable_html_emails', 'no' ) == 'yes' ) ? 'text/html' : 'text/plain';
|
1112 |
-
$headers .= "Content-Type: $content_type; charset=" . get_bloginfo( 'charset' ) . "\n";
|
1113 |
-
|
1114 |
-
if ( get_option( 'subscribe_reloaded_admin_bcc', 'no' ) == 'yes' ) {
|
1115 |
-
$headers .= "Bcc: $from_name <$from_email>\n";
|
1116 |
-
}
|
1117 |
-
|
1118 |
-
$post = get_post( $_post_ID );
|
1119 |
-
$comment = get_comment( $_comment_ID );
|
1120 |
-
$post_permalink = get_permalink( $_post_ID );
|
1121 |
-
$comment_permalink = get_comment_link( $_comment_ID );
|
1122 |
-
$comment_reply_permalink = get_permalink( $_post_ID ) . '?replytocom=' . $_comment_ID . '#respond';
|
1123 |
-
|
1124 |
-
$comment_content = $comment->comment_content;
|
1125 |
-
|
1126 |
-
// Add HTML paragraph tags to comment
|
1127 |
-
// See wp-includes/formatting.php for details on the wpautop() function
|
1128 |
-
if ( $content_type == 'text/html' ) {
|
1129 |
-
$comment_content = wpautop( $comment->comment_content );
|
1130 |
-
}
|
1131 |
-
|
1132 |
-
// Replace tags with their actual values
|
1133 |
-
$subject = str_replace( '[post_title]', $post->post_title, $subject );
|
1134 |
-
|
1135 |
-
$message = str_replace( '[post_permalink]', $post_permalink, $message );
|
1136 |
-
$message = str_replace( '[comment_permalink]', $comment_permalink, $message );
|
1137 |
-
$message = str_replace( '[comment_reply_permalink]', $comment_reply_permalink, $message );
|
1138 |
-
$message = str_replace( '[comment_author]', $comment->comment_author, $message );
|
1139 |
-
$message = str_replace( '[comment_content]', $comment_content, $message );
|
1140 |
-
$message = str_replace( '[manager_link]', $manager_link, $message );
|
1141 |
-
|
1142 |
-
// QTranslate support
|
1143 |
-
if ( function_exists( 'qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage' ) ) {
|
1144 |
-
$subject = qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage( $subject );
|
1145 |
-
$message = str_replace( '[post_title]', qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage( $post->post_title ), $message );
|
1146 |
-
$message = qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage( $message );
|
1147 |
-
} else {
|
1148 |
-
$message = str_replace( '[post_title]', $post->post_title, $message );
|
1149 |
-
}
|
1150 |
-
$message = apply_filters( 'stcr_notify_user_message', $message, $_post_ID, $_email, $_comment_ID );
|
1151 |
-
if ( $content_type == 'text/html' ) {
|
1152 |
-
if ( get_option( 'subscribe_reloaded_htmlify_message_links' ) == 'yes' ) {
|
1153 |
-
$message = $this->htmlify_message_links( $message );
|
1154 |
-
}
|
1155 |
-
$message = $this->wrap_html_message( $message, $subject );
|
1156 |
-
}
|
1157 |
-
|
1158 |
-
wp_mail( $clean_email, $subject, $message, $headers );
|
1159 |
-
}
|
1160 |
-
// end notify_user
|
1161 |
-
|
1162 |
-
/**
|
1163 |
-
* Finds all links in text and wraps them with an HTML anchor tag
|
1164 |
-
*
|
1165 |
-
* @param unknown $text
|
1166 |
-
*
|
1167 |
-
* @return string Text with all links wrapped in HTML anchor tags
|
1168 |
-
*
|
1169 |
-
*/
|
1170 |
-
public function htmlify_message_links( $text ) {
|
1171 |
-
return preg_replace( '!(((f|ht)tp(s)?://)[-a-zA-Zа-яА-Я()0-9@:%_+.~#?&;//=]+)!i', '<a href="$1">$1</a>', $text );
|
1172 |
-
}
|
1173 |
-
|
1174 |
-
/**
|
1175 |
-
* Generate a unique key to allow users to manage their subscriptions
|
1176 |
-
*/
|
1177 |
-
public function generate_key( $_email ) {
|
1178 |
-
$day = date_i18n( 'Ymd' );
|
1179 |
-
|
1180 |
-
return md5( $day . $this->salt . $_email );
|
1181 |
-
}
|
1182 |
-
// end generate_key
|
1183 |
-
|
1184 |
-
/**
|
1185 |
-
* Creates the HTML structure to properly handle HTML messages
|
1186 |
-
*/
|
1187 |
-
public function wrap_html_message( $_message = '', $_subject = '' ) {
|
1188 |
-
return "<html><head><title>$_subject</title></head><body>$_message</body></html>";
|
1189 |
-
}
|
1190 |
-
// end _wrap_html_message
|
1191 |
-
|
1192 |
-
/**
|
1193 |
-
* Returns an email address where some possible 'offending' strings have been removed
|
1194 |
-
*/
|
1195 |
-
public function clean_email( $_email ) {
|
1196 |
-
$offending_strings = array(
|
1197 |
-
"/to\:/i",
|
1198 |
-
"/from\:/i",
|
1199 |
-
"/bcc\:/i",
|
1200 |
-
"/cc\:/i",
|
1201 |
-
"/content\-transfer\-encoding\:/i",
|
1202 |
-
"/content\-type\:/i",
|
1203 |
-
"/mime\-version\:/i"
|
1204 |
-
);
|
1205 |
-
|
1206 |
-
return esc_attr( stripslashes( strip_tags( preg_replace( $offending_strings, '', $_email ) ) ) );
|
1207 |
-
}
|
1208 |
-
// end clean_email
|
1209 |
-
|
1210 |
-
/**
|
1211 |
-
* Adds a new entry in the admin menu, to manage this plugin's options
|
1212 |
-
*/
|
1213 |
-
public function add_config_menu( $_s ) {
|
1214 |
-
global $current_user;
|
1215 |
-
|
1216 |
-
if ( current_user_can( 'manage_options' ) ) {
|
1217 |
-
add_options_page( 'Subscribe to Comments', 'Subscribe to Comments', 'manage_options', WP_PLUGIN_DIR . '/subscribe-to-comments-reloaded/options/index.php' );
|
1218 |
-
}
|
1219 |
-
|
1220 |
-
return $_s;
|
1221 |
-
}
|
1222 |
-
// end add_config_menu
|
1223 |
-
|
1224 |
-
/**
|
1225 |
-
* Adds a custom stylesheet file to the admin interface
|
1226 |
-
*/
|
1227 |
-
public function add_options_stylesheet() {
|
1228 |
-
// It looks like WP_PLUGIN_URL doesn't honor the HTTPS setting in wp-config.php
|
1229 |
-
$stylesheet_url = ( is_ssl() ? str_replace( 'http://', 'https://', WP_PLUGIN_URL ) : WP_PLUGIN_URL ) . '/subscribe-to-comments-reloaded/style.css';
|
1230 |
-
wp_register_style( 'subscribe-to-comments', $stylesheet_url );
|
1231 |
-
wp_enqueue_style( 'subscribe-to-comments' );
|
1232 |
-
}
|
1233 |
-
|
1234 |
-
public function add_post_comments_stylesheet() {
|
1235 |
-
// It looks like WP_PLUGIN_URL doesn't honor the HTTPS setting in wp-config.php
|
1236 |
-
$stylesheet_url = ( is_ssl() ? str_replace( 'http://', 'https://', WP_PLUGIN_URL ) : WP_PLUGIN_URL ) . '/subscribe-to-comments-reloaded/post-and-comments.css';
|
1237 |
-
wp_register_style( 'subscribe-to-comments', $stylesheet_url );
|
1238 |
-
wp_enqueue_style( 'subscribe-to-comments' );
|
1239 |
-
}
|
1240 |
-
// end add_stylesheet
|
1241 |
-
|
1242 |
-
/**
|
1243 |
-
* Adds custom HTML code to the HEAD section of the management page
|
1244 |
-
*/
|
1245 |
-
public function add_custom_header_meta() {
|
1246 |
-
echo html_entity_decode( stripslashes( get_option( 'subscribe_reloaded_custom_header_meta', '' ) ), ENT_COMPAT, 'UTF-8' );
|
1247 |
-
}
|
1248 |
-
// end add_custom_header_meta
|
1249 |
-
|
1250 |
-
/**
|
1251 |
-
* Adds a new column header to the Edit Comments panel
|
1252 |
-
*/
|
1253 |
-
public function add_column_header( $_columns ) {
|
1254 |
-
$image_url = ( is_ssl() ? str_replace( 'http://', 'https://', WP_PLUGIN_URL ) : WP_PLUGIN_URL ) . '/subscribe-to-comments-reloaded/images';
|
1255 |
-
$_columns['subscribe-reloaded'] = "<img src='$image_url/subscribe-to-comments-small.png' width='17' height='12' alt='Subscriptions' />";
|
1256 |
-
|
1257 |
-
return $_columns;
|
1258 |
-
}
|
1259 |
-
// end add_comment_column_header
|
1260 |
-
|
1261 |
-
/**
|
1262 |
-
* Adds a new column to the Edit Comments panel
|
1263 |
-
*/
|
1264 |
-
public function add_comment_column( $_column_name ) {
|
1265 |
-
if ( 'subscribe-reloaded' != $_column_name ) {
|
1266 |
-
return;
|
1267 |
-
}
|
1268 |
-
|
1269 |
-
global $comment;
|
1270 |
-
$subscription = $this->get_subscriptions(
|
1271 |
-
array(
|
1272 |
-
'post_id',
|
1273 |
-
'email'
|
1274 |
-
), array(
|
1275 |
-
'equals',
|
1276 |
-
'equals'
|
1277 |
-
), array(
|
1278 |
-
$comment->comment_post_ID,
|
1279 |
-
$comment->comment_author_email
|
1280 |
-
), 'dt', 'DESC', 0, 1
|
1281 |
-
);
|
1282 |
-
if ( count( $subscription ) == 0 ) {
|
1283 |
-
_e( 'No', 'subscribe-reloaded' );
|
1284 |
-
} else {
|
1285 |
-
echo '<a href="options-general.php?page=subscribe-to-comments-reloaded/options/index.php&subscribepanel=1&srf=email&srt=equals&srv=' . urlencode( $comment->comment_author_email ) . '">' . $subscription[0]->status . '</a>';
|
1286 |
-
}
|
1287 |
-
}
|
1288 |
-
// end add_column
|
1289 |
-
|
1290 |
-
/**
|
1291 |
-
* Adds a new column to the Posts management panel
|
1292 |
-
*/
|
1293 |
-
public function add_post_column( $_column_name ) {
|
1294 |
-
if ( 'subscribe-reloaded' != $_column_name ) {
|
1295 |
-
return;
|
1296 |
-
}
|
1297 |
-
|
1298 |
-
global $post;
|
1299 |
-
load_plugin_textdomain( 'subscribe-reloaded', false, dirname( plugin_basename( __FILE__ ) ) . '/langs/' );
|
1300 |
-
echo '<a href="options-general.php?page=subscribe-to-comments-reloaded/options/index.php&subscribepanel=1&srf=post_id&srt=equals&srv=' . $post->ID . '">' . count( $this->get_subscriptions( 'post_id', 'equals', $post->ID ) ) . '</a>';
|
1301 |
-
}
|
1302 |
-
// end add_column
|
1303 |
-
|
1304 |
-
/**
|
1305 |
-
* Contextual help (link to the support forum)
|
1306 |
-
*/
|
1307 |
-
public function contextual_help( $contextual_help, $screen_id, $screen ) {
|
1308 |
-
if ( $screen_id == 'subscribe-to-comments-reloaded/options/index' ) {
|
1309 |
-
load_plugin_textdomain( 'subscribe-reloaded', false, dirname( plugin_basename( __FILE__ ) ) . '/langs/' );
|
1310 |
-
$contextual_help = __( 'Need help on how to use Subscribe to Comments Reloaded? Visit the official', 'subscribe-reloaded' ) . ' <a href="http://wordpress.org/tags/subscribe-to-comments-reloaded?forum_id=10" target="_blank">' . __( 'support forum', 'subscribe-reloaded' ) . '</a>. ';
|
1311 |
-
$contextual_help .= __( 'Feeling generous?', 'subscribe-reloaded' ) . ' <a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=XF86X93FDCGYA&lc=US&item_name=Datasoft%20Engineering&item_number=DI%2dSTCR¤cy_code=USD&bn=PP%2dDonationsBF%3abtn_donate_LG%2egif%3aNonHosted" target="_blank">' . __( 'Donate a few bucks!', 'subscribe-reloaded' ) . '</a>';
|
1312 |
-
}
|
1313 |
-
|
1314 |
-
return $contextual_help;
|
1315 |
-
}
|
1316 |
-
// end contextual_help
|
1317 |
-
|
1318 |
-
/**
|
1319 |
-
* Returns the URL of the management page as a shortcode
|
1320 |
-
*/
|
1321 |
-
public function subscribe_url_shortcode() {
|
1322 |
-
global $post;
|
1323 |
-
$user_link = get_bloginfo( 'url' ) . get_option( 'subscribe_reloaded_manager_page', '' );
|
1324 |
-
if ( function_exists( 'qtrans_convertURL' ) ) {
|
1325 |
-
$user_link = qtrans_convertURL( $user_link );
|
1326 |
-
}
|
1327 |
-
if ( strpos( $user_link, '?' ) !== false ) {
|
1328 |
-
return "$user_link&srp=$post->ID&sra=s";
|
1329 |
-
} else {
|
1330 |
-
return "$user_link?srp=$post->ID&sra=s";
|
1331 |
-
}
|
1332 |
-
}
|
1333 |
-
// end subscribe_url_shortcode
|
1334 |
-
|
1335 |
-
/**
|
1336 |
-
* Copies the information from the stand-alone table to WP's core table
|
1337 |
-
*/
|
1338 |
-
private function _update_db() {
|
1339 |
-
global $wpdb;
|
1340 |
-
$stcr_table = $wpdb->get_col( "SHOW TABLES LIKE '{$wpdb->prefix}subscribe_reloaded'" );
|
1341 |
-
|
1342 |
-
// Perform the import only if the target table does not contain any subscriptions
|
1343 |
-
$count_postmeta_rows = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->postmeta WHERE meta_key LIKE '\_stcr@\_%'" );
|
1344 |
-
if ( ! empty( $stcr_table ) && $count_postmeta_rows == 0 ) {
|
1345 |
-
$wpdb->query(
|
1346 |
-
"
|
1347 |
-
INSERT INTO $wpdb->postmeta (post_id, meta_key, meta_value)
|
1348 |
-
SELECT post_ID, CONCAT('_stcr@_', email), CONCAT(dt, '|Y')
|
1349 |
-
FROM {$wpdb->prefix}subscribe_reloaded
|
1350 |
-
WHERE email LIKE '%@%.%' AND status = 'Y'
|
1351 |
-
GROUP BY email, post_ID"
|
1352 |
-
);
|
1353 |
-
}
|
1354 |
-
}
|
1355 |
-
// end _update_db
|
1356 |
-
|
1357 |
-
/**
|
1358 |
-
* Imports subscription data created with the Subscribe to Comments plugin
|
1359 |
-
*/
|
1360 |
-
private function _import_stc_data() {
|
1361 |
-
global $wpdb;
|
1362 |
-
|
1363 |
-
// Import the information collected by Subscribe to Comments, if needed
|
1364 |
-
$result = $wpdb->get_row( "DESC $wpdb->comments comment_subscribe", ARRAY_A );
|
1365 |
-
|
1366 |
-
// Perform the import only if the target table does not contain any subscriptions
|
1367 |
-
$count_postmeta_rows = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->postmeta WHERE meta_key LIKE '\_stcr@\_%'" );
|
1368 |
-
|
1369 |
-
if ( ! empty( $result ) && is_array( $result ) && $count_postmeta_rows == 0 ) {
|
1370 |
-
$wpdb->query(
|
1371 |
-
"
|
1372 |
-
INSERT INTO $wpdb->postmeta (post_id, meta_key, meta_value)
|
1373 |
-
SELECT comment_post_ID, CONCAT('_stcr@_', comment_author_email), CONCAT(comment_date, '|Y')
|
1374 |
-
FROM $wpdb->comments
|
1375 |
-
WHERE comment_author_email LIKE '%@%.%' AND comment_subscribe = 'Y'
|
1376 |
-
GROUP BY comment_post_ID, comment_author_email"
|
1377 |
-
);
|
1378 |
-
|
1379 |
-
$notices = get_option( 'subscribe_reloaded_deferred_admin_notices', array() );
|
1380 |
-
$notices[] = '<div class="updated"><h3>' . __( 'Important Notice', 'subscribe-reloaded' ) . '</h3>' .
|
1381 |
-
'<p>' . __( 'Comment subscription data from the <strong>Subscribe to Comments</strong> plugin was detected and automatically imported into <strong>Subscribe to Comments Reloaded</strong>.', 'subscribe-reloaded' ) . ( is_plugin_active( 'subscribe-to-comments/subscribe-to-comments.php' ) ? __( ' It is recommended that you now <strong>deactivate</strong> Subscribe to Comments to prevent confusion between the two plugins.', 'subscribe-reloaded' ) : '' ) . '</p>' .
|
1382 |
-
'<p>' . __( 'If you have subscription data from Subscribe to Comments Reloaded < v2.0 that you want to import, you\'ll need to import that data manually, as only one import routine will ever run to prevent data loss.', 'subscribe-reloaded' ) . '</p>' .
|
1383 |
-
'<p>' . __( 'Please visit <a href="options-general.php?page=subscribe-to-comments-reloaded/options/index.php">Settings -> Subscribe to Comments</a> to review your configuration.', 'subscribe-reloaded' ) . '</p></div>';
|
1384 |
-
update_option( 'subscribe_reloaded_deferred_admin_notices', $notices );
|
1385 |
-
}
|
1386 |
-
}
|
1387 |
-
// end _import_stc_data
|
1388 |
-
|
1389 |
-
/**
|
1390 |
-
* Imports options and subscription data created with the WP Comment Subscriptions plugin
|
1391 |
-
*/
|
1392 |
-
private function _import_wpcs_data() {
|
1393 |
-
global $wpdb;
|
1394 |
-
|
1395 |
-
// Import the information collected by WP Comment Subscriptions, if needed
|
1396 |
-
$wpcs_data_count = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->postmeta WHERE meta_key LIKE '\_wpcs@\_%'" );
|
1397 |
-
|
1398 |
-
// Perform the import only if the target table does not contain any subscriptions
|
1399 |
-
$count_postmeta_rows = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->postmeta WHERE meta_key LIKE '\_stcr@\_%'" );
|
1400 |
-
|
1401 |
-
if ( ! empty( $wpcs_data_count ) && $count_postmeta_rows == 0 ) {
|
1402 |
-
$wpdb->query(
|
1403 |
-
"
|
1404 |
-
INSERT INTO $wpdb->postmeta (post_id, meta_key, meta_value)
|
1405 |
-
SELECT post_id, REPLACE(meta_key, '_wpcs@_', '_stcr@_') meta_key, meta_value
|
1406 |
-
FROM $wpdb->postmeta
|
1407 |
-
WHERE meta_key LIKE '%_wpcs@_%'"
|
1408 |
-
);
|
1409 |
-
|
1410 |
-
if ( $option = get_option( 'wp_comment_subscriptions_manager_page' ) ) {
|
1411 |
-
add_option( 'subscribe_reloaded_manager_page', $option );
|
1412 |
-
}
|
1413 |
-
if ( $option = get_option( 'wp_comment_subscriptions_show_subscription_box' ) ) {
|
1414 |
-
add_option( 'subscribe_reloaded_show_subscription_box', $option );
|
1415 |
-
}
|
1416 |
-
if ( $option = get_option( 'wp_comment_subscriptions_checked_by_default' ) ) {
|
1417 |
-
add_option( 'subscribe_reloaded_checked_by_default', $option );
|
1418 |
-
}
|
1419 |
-
if ( $option = get_option( 'wp_comment_subscriptions_enable_advanced_subscriptions' ) ) {
|
1420 |
-
add_option( 'subscribe_reloaded_enable_advanced_subscriptions', $option );
|
1421 |
-
}
|
1422 |
-
if ( $option = get_option( 'wp_comment_subscriptions_checkbox_inline_style' ) ) {
|
1423 |
-
add_option( 'subscribe_reloaded_checkbox_inline_style', $option );
|
1424 |
-
}
|
1425 |
-
if ( $option = get_option( 'wp_comment_subscriptions_checkbox_html' ) ) {
|
1426 |
-
add_option( 'subscribe_reloaded_checkbox_html', $option );
|
1427 |
-
}
|
1428 |
-
if ( $option = get_option( 'wp_comment_subscriptions_checkbox_label' ) ) {
|
1429 |
-
add_option( 'subscribe_reloaded_checkbox_label', $option );
|
1430 |
-
}
|
1431 |
-
if ( $option = get_option( 'wp_comment_subscriptions_subscribed_label' ) ) {
|
1432 |
-
add_option( 'subscribe_reloaded_subscribed_label', $option );
|
1433 |
-
}
|
1434 |
-
if ( $option = get_option( 'wp_comment_subscriptions_subscribed_waiting_label' ) ) {
|
1435 |
-
add_option( 'subscribe_reloaded_subscribed_waiting_label', $option );
|
1436 |
-
}
|
1437 |
-
if ( $option = get_option( 'wp_comment_subscriptions_author_label' ) ) {
|
1438 |
-
add_option( 'subscribe_reloaded_author_label', $option );
|
1439 |
-
}
|
1440 |
-
if ( $option = get_option( 'wp_comment_subscriptions_htmlify_message_links' ) ) {
|
1441 |
-
add_option( 'subscribe_reloaded_htmlify_message_links', $option );
|
1442 |
-
}
|
1443 |
-
|
1444 |
-
if ( $option = get_option( 'wp_comment_subscriptions_manager_page_enabled' ) ) {
|
1445 |
-
add_option( 'subscribe_reloaded_manager_page_enabled', $option );
|
1446 |
-
}
|
1447 |
-
if ( $option = get_option( 'wp_comment_subscriptions_manager_page_title' ) ) {
|
1448 |
-
add_option( 'subscribe_reloaded_manager_page_title', $option );
|
1449 |
-
}
|
1450 |
-
if ( $option = get_option( 'wp_comment_subscriptions_custom_header_meta' ) ) {
|
1451 |
-
add_option( 'subscribe_reloaded_custom_header_meta', $option );
|
1452 |
-
}
|
1453 |
-
if ( $option = get_option( 'wp_comment_subscriptions_request_mgmt_link' ) ) {
|
1454 |
-
add_option( 'subscribe_reloaded_request_mgmt_link', $option );
|
1455 |
-
}
|
1456 |
-
if ( $option = get_option( 'wp_comment_subscriptions_request_mgmt_link_thankyou' ) ) {
|
1457 |
-
add_option( 'subscribe_reloaded_request_mgmt_link_thankyou', $option );
|
1458 |
-
}
|
1459 |
-
if ( $option = get_option( 'wp_comment_subscriptions_subscribe_without_commenting' ) ) {
|
1460 |
-
add_option( 'subscribe_reloaded_subscribe_without_commenting', $option );
|
1461 |
-
}
|
1462 |
-
if ( $option = get_option( 'wp_comment_subscriptions_subscription_confirmed' ) ) {
|
1463 |
-
add_option( 'subscribe_reloaded_subscription_confirmed', $option );
|
1464 |
-
}
|
1465 |
-
if ( $option = get_option( 'wp_comment_subscriptions_subscription_confirmed_dci' ) ) {
|
1466 |
-
add_option( 'subscribe_reloaded_subscription_confirmed_dci', $option );
|
1467 |
-
}
|
1468 |
-
if ( $option = get_option( 'wp_comment_subscriptions_author_text' ) ) {
|
1469 |
-
add_option( 'subscribe_reloaded_author_text', $option );
|
1470 |
-
}
|
1471 |
-
if ( $option = get_option( 'wp_comment_subscriptions_user_text' ) ) {
|
1472 |
-
add_option( 'subscribe_reloaded_user_text', $option );
|
1473 |
-
}
|
1474 |
-
|
1475 |
-
if ( $option = get_option( 'wp_comment_subscriptions_from_name' ) ) {
|
1476 |
-
add_option( 'subscribe_reloaded_from_name', $option );
|
1477 |
-
}
|
1478 |
-
if ( $option = get_option( 'wp_comment_subscriptions_from_email' ) ) {
|
1479 |
-
add_option( 'subscribe_reloaded_from_email', $option );
|
1480 |
-
}
|
1481 |
-
if ( $option = get_option( 'wp_comment_subscriptions_notification_subject' ) ) {
|
1482 |
-
add_option( 'subscribe_reloaded_notification_subject', $option );
|
1483 |
-
}
|
1484 |
-
if ( $option = get_option( 'wp_comment_subscriptions_notification_content' ) ) {
|
1485 |
-
add_option( 'subscribe_reloaded_notification_content', $option );
|
1486 |
-
}
|
1487 |
-
if ( $option = get_option( 'wp_comment_subscriptions_double_check_subject' ) ) {
|
1488 |
-
add_option( 'subscribe_reloaded_double_check_subject', $option );
|
1489 |
-
}
|
1490 |
-
if ( $option = get_option( 'wp_comment_subscriptions_double_check_content' ) ) {
|
1491 |
-
add_option( 'subscribe_reloaded_double_check_content', $option );
|
1492 |
-
}
|
1493 |
-
if ( $option = get_option( 'wp_comment_subscriptions_management_subject' ) ) {
|
1494 |
-
add_option( 'subscribe_reloaded_management_subject', $option );
|
1495 |
-
}
|
1496 |
-
if ( $option = get_option( 'wp_comment_subscriptions_management_content' ) ) {
|
1497 |
-
add_option( 'subscribe_reloaded_management_content', $option );
|
1498 |
-
}
|
1499 |
-
|
1500 |
-
if ( $option = get_option( 'wp_comment_subscriptions_purge_days' ) ) {
|
1501 |
-
add_option( 'subscribe_reloaded_purge_days', $option );
|
1502 |
-
}
|
1503 |
-
if ( $option = get_option( 'wp_comment_subscriptions_enable_double_check' ) ) {
|
1504 |
-
add_option( 'subscribe_reloaded_enable_double_check', $option );
|
1505 |
-
}
|
1506 |
-
if ( $option = get_option( 'wp_comment_subscriptions_notify_authors' ) ) {
|
1507 |
-
add_option( 'subscribe_reloaded_notify_authors', $option );
|
1508 |
-
}
|
1509 |
-
if ( $option = get_option( 'wp_comment_subscriptions_enable_html_emails' ) ) {
|
1510 |
-
add_option( 'subscribe_reloaded_enable_html_emails', $option );
|
1511 |
-
}
|
1512 |
-
if ( $option = get_option( 'wp_comment_subscriptions_process_trackbacks' ) ) {
|
1513 |
-
add_option( 'subscribe_reloaded_process_trackbacks', $option );
|
1514 |
-
}
|
1515 |
-
if ( $option = get_option( 'wp_comment_subscriptions_enable_admin_messages' ) ) {
|
1516 |
-
add_option( 'subscribe_reloaded_enable_admin_messages', $option );
|
1517 |
-
}
|
1518 |
-
if ( $option = get_option( 'wp_comment_subscriptions_admin_subscribe' ) ) {
|
1519 |
-
add_option( 'subscribe_reloaded_admin_subscribe', $option );
|
1520 |
-
}
|
1521 |
-
if ( $option = get_option( 'wp_comment_subscriptions_admin_bcc' ) ) {
|
1522 |
-
add_option( 'subscribe_reloaded_admin_bcc', $option );
|
1523 |
-
}
|
1524 |
-
|
1525 |
-
$notices = get_option( 'subscribe_reloaded_deferred_admin_notices', array() );
|
1526 |
-
$notices[] = '<div class="updated"><h3>' . __( 'Important Notice', 'subscribe-reloaded' ) . '</h3>' .
|
1527 |
-
'<p>' . __( 'Plugin options and comment subscription data from the <strong>WP Comment Subscriptions</strong> plugin were detected and automatically imported into <strong>Subscribe to Comments Reloaded</strong>.', 'subscribe-reloaded' ) . ( is_plugin_active( 'wp-comment-subscriptions/wp-comment-subscriptions.php' ) ? __( ' It is recommended that you now <strong>deactivate</strong> WP Comment Subscriptions to prevent confusion between the two plugins.', 'subscribe-reloaded' ) : '' ) . '</p>' .
|
1528 |
-
'<p>' . __( 'If you have subscription data from another plugin (such as Subscribe to Comments or Subscribe to Comments Reloaded < v2.0) that you want to import, you\'ll need to import that data manually, as only one import routine will ever run to prevent data loss.', 'subscribe-reloaded' ) . '</p>' .
|
1529 |
-
'<p>' . __( '<strong>Note:</strong> If you were previously using the <code>wp_comment_subscriptions_show()</code> function or the <code>[wpcs-subscribe-url]</code> shortcode, you\'ll need to replace those with <code>subscribe_reloaded_show()</code> and <code>[subscribe-url]</code> respectively.', 'subscribe-reloaded' ) . '</p>' .
|
1530 |
-
'<p>' . __( 'Please visit <a href="options-general.php?page=subscribe-to-comments-reloaded/options/index.php">Settings -> Subscribe to Comments</a> to review your configuration.', 'subscribe-reloaded' ) . '</p></div>';
|
1531 |
-
update_option( 'subscribe_reloaded_deferred_admin_notices', $notices );
|
1532 |
-
}
|
1533 |
-
}
|
1534 |
-
// end _import_wpcs_data
|
1535 |
-
|
1536 |
-
/**
|
1537 |
-
* Retrieves the comment information from the databse
|
1538 |
-
*/
|
1539 |
-
private function _get_comment_object( $_comment_ID ) {
|
1540 |
-
global $wpdb;
|
1541 |
-
|
1542 |
-
return $wpdb->get_row(
|
1543 |
-
$wpdb->prepare(
|
1544 |
-
"
|
1545 |
-
SELECT comment_post_ID, comment_author_email, comment_approved, comment_type, comment_parent
|
1546 |
-
FROM $wpdb->comments
|
1547 |
-
WHERE comment_ID = %d LIMIT 1", $_comment_ID
|
1548 |
-
), OBJECT
|
1549 |
-
);
|
1550 |
-
}
|
1551 |
-
// end _get_comment_object
|
1552 |
-
|
1553 |
-
/**
|
1554 |
-
* Checks if a key is valid for a given email address
|
1555 |
-
*/
|
1556 |
-
private function _is_valid_key( $_key, $_email ) {
|
1557 |
-
return $this->generate_key( $_email ) == $_key;
|
1558 |
-
}
|
1559 |
-
// end _is_valid_key
|
1560 |
-
}
|
1561 |
-
|
1562 |
-
// end of class declaration
|
1563 |
-
|
1564 |
-
// Bootstrap the whole thing
|
1565 |
-
$wp_subscribe_reloaded = new wp_subscribe_reloaded();
|
1566 |
-
// Set a cookie if the user just subscribed without commenting
|
1567 |
-
$subscribe_to_comments_action = ! empty( $_POST['sra'] ) ? $_POST['sra'] : ( ! empty( $_GET['sra'] ) ? $_GET['sra'] : 0 );
|
1568 |
-
$subscribe_to_comments_post_ID = ! empty( $_POST['srp'] ) ? intval( $_POST['srp'] ) : ( ! empty( $_GET['srp'] ) ? intval( $_GET['srp'] ) : 0 );
|
1569 |
-
|
1570 |
-
if ( ! empty( $subscribe_to_comments_action ) && ! empty( $_POST['subscribe_reloaded_email'] ) &&
|
1571 |
-
( $subscribe_to_comments_action == 's' ) && ( $subscribe_to_comments_post_ID > 0 )
|
1572 |
-
) {
|
1573 |
-
$subscribe_to_comments_clean_email = $wp_subscribe_reloaded->clean_email( $_POST['subscribe_reloaded_email'] );
|
1574 |
-
setcookie( 'comment_author_email' . COOKIEHASH, $subscribe_to_comments_clean_email, time() + 1209600, '/' );
|
1575 |
-
}
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
Plugin Name: Subscribe to Comments Reloaded
|
4 |
+
|
5 |
+
Version: 140220
|
6 |
+
Stable tag: 140220
|
7 |
+
Requires at least: 2.9.2
|
8 |
+
Tested up to: 3.8.1
|
9 |
+
|
10 |
+
Plugin URI: http://wordpress.org/extend/plugins/subscribe-to-comments-reloaded/
|
11 |
+
Description: Subscribe to Comments Reloaded is a robust plugin that enables commenters to sign up for e-mail notifications. It includes a full-featured subscription manager that your commenters can use to unsubscribe to certain posts or suspend all notifications.
|
12 |
+
Contributors: camu, Reedyseth, andreasbo, raamdev
|
13 |
+
Author: camu, Reedyseth, Raam Dev
|
14 |
+
*/
|
15 |
+
|
16 |
+
// Avoid direct access to this piece of code
|
17 |
+
if ( ! function_exists( 'add_action' ) ) {
|
18 |
+
header( 'Location: /' );
|
19 |
+
exit;
|
20 |
+
}
|
21 |
+
|
22 |
+
/**
|
23 |
+
* Displays the checkbox to allow visitors to subscribe
|
24 |
+
*/
|
25 |
+
function subscribe_reloaded_show() {
|
26 |
+
global $post, $wp_subscribe_reloaded;
|
27 |
+
$checkbox_subscription_type;
|
28 |
+
|
29 |
+
$is_disabled = get_post_meta( $post->ID, 'stcr_disable_subscriptions', true );
|
30 |
+
if ( ! empty( $is_disabled ) ) {
|
31 |
+
return $_comment_ID;
|
32 |
+
}
|
33 |
+
|
34 |
+
$show_subscription_box = true;
|
35 |
+
$html_to_show = '';
|
36 |
+
$user_link = get_bloginfo( 'url' ) . get_option( 'subscribe_reloaded_manager_page', '' );
|
37 |
+
|
38 |
+
if ( function_exists( 'qtrans_convertURL' ) ) {
|
39 |
+
$user_link = qtrans_convertURL( $user_link );
|
40 |
+
}
|
41 |
+
|
42 |
+
$manager_link = ( strpos( $user_link, '?' ) !== false ) ? "$user_link&srp=$post->ID" : "$user_link?srp=$post->ID";
|
43 |
+
|
44 |
+
// Load localization files
|
45 |
+
load_plugin_textdomain( 'subscribe-reloaded', false, dirname( plugin_basename( __FILE__ ) ) . '/langs/' );
|
46 |
+
|
47 |
+
if ( $wp_subscribe_reloaded->is_user_subscribed( $post->ID, '', 'C' ) ) {
|
48 |
+
$html_to_show = str_replace(
|
49 |
+
'[manager_link]', $user_link,
|
50 |
+
__( html_entity_decode( stripslashes( get_option( 'subscribe_reloaded_subscribed_waiting_label', "Your subscription to this post needs to be confirmed. <a href='[manager_link]'>Manage your subscriptions</a>." ) ), ENT_COMPAT, 'UTF-8' ), 'subscribe-reloaded' )
|
51 |
+
);
|
52 |
+
$show_subscription_box = false;
|
53 |
+
} elseif ( $wp_subscribe_reloaded->is_user_subscribed( $post->ID, '' ) ) {
|
54 |
+
$html_to_show = str_replace(
|
55 |
+
'[manager_link]', $user_link,
|
56 |
+
__( html_entity_decode( stripslashes( get_option( 'subscribe_reloaded_subscribed_label', "You are subscribed to this post. <a href='[manager_link]'>Manage</a> your subscriptions." ) ), ENT_COMPAT, 'UTF-8' ), 'subscribe-reloaded' )
|
57 |
+
);
|
58 |
+
$show_subscription_box = false;
|
59 |
+
}
|
60 |
+
|
61 |
+
if ( $wp_subscribe_reloaded->is_author( $post->post_author ) ) { // when the second parameter is empty, cookie value will be used
|
62 |
+
if ( get_option( 'subscribe_reloaded_admin_subscribe', 'no' ) == 'no' ) {
|
63 |
+
$show_subscription_box = false;
|
64 |
+
}
|
65 |
+
$html_to_show .= str_replace(
|
66 |
+
'[manager_link]', $manager_link,
|
67 |
+
__( html_entity_decode( stripslashes( get_option( 'subscribe_reloaded_author_label', "You can <a href='[manager_link]'>manage the subscriptions</a> of this post." ) ), ENT_COMPAT, 'UTF-8' ), 'subscribe-reloaded' )
|
68 |
+
);
|
69 |
+
}
|
70 |
+
|
71 |
+
if ( $show_subscription_box ) {
|
72 |
+
$checkbox_label = str_replace(
|
73 |
+
'[subscribe_link]', "$manager_link&sra=s",
|
74 |
+
__( html_entity_decode( stripslashes( get_option( 'subscribe_reloaded_checkbox_label', "Notify me of followup comments via e-mail. You can also <a href='[subscribe_link]'>subscribe</a> without commenting." ) ), ENT_COMPAT, 'UTF-8' ), 'subscribe-reloaded' )
|
75 |
+
);
|
76 |
+
$checkbox_inline_style = get_option( 'subscribe_reloaded_checkbox_inline_style', 'width:30px' );
|
77 |
+
if ( ! empty( $checkbox_inline_style ) ) {
|
78 |
+
$checkbox_inline_style = " style='$checkbox_inline_style'";
|
79 |
+
}
|
80 |
+
$checkbox_html_wrap = html_entity_decode( stripslashes( get_option( 'subscribe_reloaded_checkbox_html', '' ) ), ENT_COMPAT, 'UTF-8' );
|
81 |
+
if ( get_option( 'subscribe_reloaded_enable_advanced_subscriptions', 'no' ) == 'no' ) {
|
82 |
+
switch ( get_option('subscribe_reloaded_checked_by_default_value') ) {
|
83 |
+
case '0':
|
84 |
+
$checkbox_subscription_type = 'yes';
|
85 |
+
break;
|
86 |
+
case '1':
|
87 |
+
$checkbox_subscription_type = 'replies';
|
88 |
+
break;
|
89 |
+
}
|
90 |
+
$checkbox_field = "<input$checkbox_inline_style type='checkbox' name='subscribe-reloaded' id='subscribe-reloaded' value='$checkbox_subscription_type'" . ( ( get_option( 'subscribe_reloaded_checked_by_default', 'no' ) == 'yes' ) ? " checked='checked'" : '' ) . " />";
|
91 |
+
} else {
|
92 |
+
$checkbox_field = "<select name='subscribe-reloaded' id='subscribe-reloaded'>
|
93 |
+
<option value='none'" . ( ( get_option( 'subscribe_reloaded_default_subscription_type' ) === '0' ) ? "selected='selected'" : '' ) . ">" . __( "Don't subscribe", 'subscribe-reloaded' ) . "</option>
|
94 |
+
<option value='yes'" . ( ( get_option( 'subscribe_reloaded_default_subscription_type' ) === '1' ) ? "selected='selected'" : '' ) . ">" . __( "All", 'subscribe-reloaded' ) . "</option>
|
95 |
+
<option value='replies'" . ( ( get_option( 'subscribe_reloaded_default_subscription_type' ) === '2' ) ? "selected='selected'" : '' ) . ">" . __( "Replies to my comments", 'subscribe-reloaded' ) . "</option>
|
96 |
+
</select>";
|
97 |
+
}
|
98 |
+
if ( empty( $checkbox_html_wrap ) ) {
|
99 |
+
$html_to_show = "$checkbox_field <label for='subscribe-reloaded'>$checkbox_label</label>" . $html_to_show;
|
100 |
+
} else {
|
101 |
+
$checkbox_html_wrap = str_replace( '[checkbox_field]', $checkbox_field, $checkbox_html_wrap );
|
102 |
+
$html_to_show = str_replace( '[checkbox_label]', $checkbox_label, $checkbox_html_wrap ) . $html_to_show;
|
103 |
+
}
|
104 |
+
}
|
105 |
+
if ( function_exists( 'qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage' ) ) {
|
106 |
+
$html_to_show = qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage( $html_to_show );
|
107 |
+
}
|
108 |
+
echo "<!-- BEGIN: subscribe to comments reloaded -->" . html_entity_decode( stripslashes( $html_to_show ), ENT_QUOTES, 'UTF-8' ) ."<!-- END: subscribe to comments reloaded -->";
|
109 |
+
}
|
110 |
+
|
111 |
+
// Show the checkbox - You can manually override this by adding the corresponding function in your template
|
112 |
+
if ( get_option( 'subscribe_reloaded_show_subscription_box', 'yes' ) == 'yes' ) {
|
113 |
+
add_action( 'comment_form', 'subscribe_reloaded_show' );
|
114 |
+
}
|
115 |
+
|
116 |
+
class wp_subscribe_reloaded {
|
117 |
+
|
118 |
+
public $current_version = '140220';
|
119 |
+
|
120 |
+
/**
|
121 |
+
* Constructor -- Sets things up.
|
122 |
+
*/
|
123 |
+
public function __construct() {
|
124 |
+
$this->salt = defined( 'NONCE_KEY' ) ? NONCE_KEY : 'please create a unique key in your wp-config.php';
|
125 |
+
|
126 |
+
// What to do when a new comment is posted
|
127 |
+
add_action( 'comment_post', array( &$this, 'new_comment_posted' ), 12, 2 );
|
128 |
+
|
129 |
+
// Provide content for the management page using WP filters
|
130 |
+
if ( ! is_admin() ) {
|
131 |
+
$manager_page_permalink = get_option( 'subscribe_reloaded_manager_page', '/comment-subscriptions/' );
|
132 |
+
if ( function_exists( 'qtrans_convertURL' ) ) {
|
133 |
+
$manager_page_permalink = qtrans_convertURL( $manager_page_permalink );
|
134 |
+
}
|
135 |
+
if ( empty( $manager_page_permalink ) ) {
|
136 |
+
$manager_page_permalink = get_option( 'subscribe_reloaded_manager_page', '/comment-subscriptions/' );
|
137 |
+
}
|
138 |
+
if ( ( strpos( $_SERVER["REQUEST_URI"], $manager_page_permalink ) !== false ) && get_option( 'subscribe_reloaded_manager_page_enabled', 'yes' ) == 'yes' ) {
|
139 |
+
add_filter( 'the_posts', array( &$this, 'subscribe_reloaded_manage' ), 10, 2 );
|
140 |
+
}
|
141 |
+
|
142 |
+
// Create a hook to use with the daily cron job
|
143 |
+
add_action( 'subscribe_reloaded_purge', array( &$this, 'subscribe_reloaded_purge' ) );
|
144 |
+
} else {
|
145 |
+
// Initialization routines that should be executed on activation/deactivation
|
146 |
+
register_activation_hook( __FILE__, array( &$this, 'activate' ) );
|
147 |
+
register_deactivation_hook( __FILE__, array( &$this, 'deactivate' ) );
|
148 |
+
|
149 |
+
// Hook for WPMU - New blog created
|
150 |
+
add_action( 'wpmu_new_blog', array( &$this, 'new_blog' ), 10, 1 );
|
151 |
+
|
152 |
+
// Remove subscriptions attached to a post that is being deleted
|
153 |
+
add_action( 'delete_post', array( &$this, 'delete_subscriptions' ), 10, 2 );
|
154 |
+
|
155 |
+
// Monitor actions on existing comments
|
156 |
+
add_action( 'deleted_comment', array( &$this, 'comment_deleted' ) );
|
157 |
+
add_action( 'wp_set_comment_status', array( &$this, 'comment_status_changed' ) );
|
158 |
+
|
159 |
+
// Subscribe post authors, if the case
|
160 |
+
if ( get_option( 'subscribe_reloaded_notify_authors', 'no' ) == 'yes' ) {
|
161 |
+
add_action( 'publish_post', array( &$this, 'subscribe_post_author' ) );
|
162 |
+
}
|
163 |
+
|
164 |
+
// Add a new column to the Edit Comments panel
|
165 |
+
add_filter( 'manage_edit-comments_columns', array( &$this, 'add_column_header' ) );
|
166 |
+
add_filter( 'manage_posts_columns', array( &$this, 'add_column_header' ) );
|
167 |
+
add_action( 'manage_comments_custom_column', array( &$this, 'add_comment_column' ) );
|
168 |
+
add_action( 'manage_posts_custom_column', array( &$this, 'add_post_column' ) );
|
169 |
+
|
170 |
+
// Add appropriate entries in the admin menu
|
171 |
+
add_action( 'admin_menu', array( &$this, 'add_config_menu' ) );
|
172 |
+
add_action(
|
173 |
+
'admin_print_styles-subscribe-to-comments-reloaded/options/index.php', array(
|
174 |
+
&$this,
|
175 |
+
'add_options_stylesheet'
|
176 |
+
)
|
177 |
+
);
|
178 |
+
add_action( 'admin_print_styles-edit-comments.php', array( &$this, 'add_post_comments_stylesheet' ) );
|
179 |
+
add_action( 'admin_print_styles-edit.php', array( &$this, 'add_post_comments_stylesheet' ) );
|
180 |
+
|
181 |
+
// Admin notices
|
182 |
+
add_action( 'admin_init', array( &$this, 'admin_init' ) );
|
183 |
+
add_action( 'admin_notices', array( &$this, 'admin_notices' ) );
|
184 |
+
|
185 |
+
// Contextual help
|
186 |
+
add_action( 'contextual_help', array( &$this, 'contextual_help' ), 10, 3 );
|
187 |
+
|
188 |
+
// Shortcodes to use the management URL sitewide
|
189 |
+
add_shortcode( 'subscribe-url', array( &$this, 'subscribe_url_shortcode' ) );
|
190 |
+
|
191 |
+
// Settings link for plugin on plugins page
|
192 |
+
add_filter( 'plugin_action_links', array( &$this, 'plugin_settings_link' ), 10, 2 );
|
193 |
+
}
|
194 |
+
}
|
195 |
+
|
196 |
+
// end __construct
|
197 |
+
|
198 |
+
public function admin_init() {
|
199 |
+
|
200 |
+
$version = get_option( 'subscribe_reloaded_version' );
|
201 |
+
if ( $version != $this->current_version ) {
|
202 |
+
// Do whatever upgrades needed here.
|
203 |
+
update_option( 'subscribe_reloaded_version', $this->current_version );
|
204 |
+
}
|
205 |
+
}
|
206 |
+
|
207 |
+
public function admin_notices() {
|
208 |
+
if ( $notices = get_option( 'subscribe_reloaded_deferred_admin_notices' ) ) {
|
209 |
+
foreach ( $notices as $notice ) {
|
210 |
+
echo $notice;
|
211 |
+
}
|
212 |
+
delete_option( 'subscribe_reloaded_deferred_admin_notices' );
|
213 |
+
}
|
214 |
+
}
|
215 |
+
|
216 |
+
/**
|
217 |
+
* Support for WP MU network activations (experimental)
|
218 |
+
*/
|
219 |
+
public function activate() {
|
220 |
+
global $wpdb;
|
221 |
+
|
222 |
+
if ( function_exists( 'is_multisite' ) && is_multisite() && isset( $_GET['networkwide'] ) && ( $_GET['networkwide'] == 1 ) ) {
|
223 |
+
$blogids = $wpdb->get_col(
|
224 |
+
$wpdb->prepare(
|
225 |
+
"
|
226 |
+
SELECT blog_id
|
227 |
+
FROM $wpdb->blogs
|
228 |
+
WHERE site_id = %d
|
229 |
+
AND deleted = 0
|
230 |
+
AND spam = 0", $wpdb->siteid
|
231 |
+
)
|
232 |
+
);
|
233 |
+
|
234 |
+
foreach ( $blogids as $blog_id ) {
|
235 |
+
switch_to_blog( $blog_id );
|
236 |
+
$this->_activate();
|
237 |
+
}
|
238 |
+
restore_current_blog();
|
239 |
+
} else {
|
240 |
+
$this->_activate();
|
241 |
+
}
|
242 |
+
}
|
243 |
+
// end activate
|
244 |
+
|
245 |
+
/**
|
246 |
+
* Support for WP MU network activations (experimental)
|
247 |
+
*/
|
248 |
+
public function new_blog( $_blog_id ) {
|
249 |
+
switch_to_blog( $_blog_id );
|
250 |
+
$this->_activate();
|
251 |
+
restore_current_blog();
|
252 |
+
}
|
253 |
+
// end new_blog
|
254 |
+
|
255 |
+
/**
|
256 |
+
* Adds the options to the database and imports the data from other plugins
|
257 |
+
*/
|
258 |
+
private function _activate() {
|
259 |
+
|
260 |
+
// Load localization files
|
261 |
+
load_plugin_textdomain( 'subscribe-reloaded', false, dirname( plugin_basename( __FILE__ ) ) . '/langs/' );
|
262 |
+
|
263 |
+
// Import data from the WP Comment Subscriptions plugin, if needed
|
264 |
+
$this->_import_wpcs_data();
|
265 |
+
|
266 |
+
// Import data from Subscribe to Comments & Co., if needed
|
267 |
+
$this->_import_stc_data();
|
268 |
+
|
269 |
+
// Starting from version 2.0 StCR uses Wordpress' tables to store the information about subscriptions
|
270 |
+
$this->_update_db();
|
271 |
+
|
272 |
+
// Messages related to the management page
|
273 |
+
global $wp_rewrite;
|
274 |
+
|
275 |
+
if ( empty( $wp_rewrite->permalink_structure ) ) {
|
276 |
+
add_option( 'subscribe_reloaded_manager_page', '/?page_id=99999', '', 'no' );
|
277 |
+
} else {
|
278 |
+
add_option( 'subscribe_reloaded_manager_page', '/comment-subscriptions/', '', 'no' );
|
279 |
+
}
|
280 |
+
|
281 |
+
add_option( 'subscribe_reloaded_show_subscription_box', 'yes', '', 'no' );
|
282 |
+
add_option( 'subscribe_reloaded_checked_by_default', 'no', '', 'no' );
|
283 |
+
add_option( 'subscribe_reloaded_enable_advanced_subscriptions', 'no', '', 'no' );
|
284 |
+
add_option( 'subscribe_reloaded_default_subscription_type', '2', '', 'no' );
|
285 |
+
add_option( 'subscribe_reloaded_checked_by_default_value', '0', '', 'no' );
|
286 |
+
add_option( 'subscribe_reloaded_checkbox_inline_style', 'width:30px', '', 'no' );
|
287 |
+
add_option( 'subscribe_reloaded_checkbox_html', "<p class='comment-form-subscriptions'><label for='subscribe-reloaded'>[checkbox_field] [checkbox_label]</label></p>", '', 'no' );
|
288 |
+
add_option( 'subscribe_reloaded_checkbox_label', __( "Notify me of followup comments via e-mail. You can also <a href='[subscribe_link]'>subscribe</a> without commenting.", 'subscribe-reloaded' ), '', 'no' );
|
289 |
+
add_option( 'subscribe_reloaded_subscribed_label', __( "You are subscribed to this post. <a href='[manager_link]'>Manage</a> your subscriptions.", 'subscribe-reloaded' ), '', 'no' );
|
290 |
+
add_option( 'subscribe_reloaded_subscribed_waiting_label', __( "Your subscription to this post needs to be confirmed. <a href='[manager_link]'>Manage your subscriptions</a>.", 'subscribe-reloaded' ), '', 'no' );
|
291 |
+
add_option( 'subscribe_reloaded_author_label', __( "You can <a href='[manager_link]'>manage the subscriptions</a> of this post.", 'subscribe-reloaded' ), '', 'no' );
|
292 |
+
|
293 |
+
add_option( 'subscribe_reloaded_manager_page_enabled', 'yes', '', 'no' );
|
294 |
+
add_option( 'subscribe_reloaded_manager_page_title', __( 'Manage subscriptions', 'subscribe-reloaded' ), '', 'no' );
|
295 |
+
add_option( 'subscribe_reloaded_custom_header_meta', "<meta name='robots' content='noindex,nofollow'>", '', 'no' );
|
296 |
+
add_option( 'subscribe_reloaded_request_mgmt_link', __( 'To manage your subscriptions, please enter your email address here below. We will send you a message containing the link to access your personal management page.', 'subscribe-reloaded' ), '', 'no' );
|
297 |
+
add_option( 'subscribe_reloaded_request_mgmt_link_thankyou', __( 'Thank you for using our subscription service. Your request has been completed, and you should receive an email with the management link in a few minutes.', 'subscribe-reloaded' ), '', 'no' );
|
298 |
+
add_option( 'subscribe_reloaded_subscribe_without_commenting', __( "You can follow the discussion on <strong>[post_title]</strong> without having to leave a comment. Cool, huh? Just enter your email address in the form here below and you're all set.", 'subscribe-reloaded' ), '', 'no' );
|
299 |
+
add_option( 'subscribe_reloaded_subscription_confirmed', __( "Thank you for using our subscription service. Your request has been completed. You will receive a notification email every time a new comment to this article is approved and posted by the administrator.", 'subscribe-reloaded' ), '', 'no' );
|
300 |
+
add_option( 'subscribe_reloaded_subscription_confirmed_dci', __( "Thank you for using our subscription service. In order to confirm your request, please check your email for the verification message and follow the instructions.", 'subscribe-reloaded' ), '', 'no' );
|
301 |
+
add_option( 'subscribe_reloaded_author_text', __( "In order to cancel or suspend one or more notifications, select the corresponding checkbox(es) and click on the button at the end of the list.", 'subscribe-reloaded' ), '', 'no' );
|
302 |
+
add_option( 'subscribe_reloaded_user_text', __( "In order to cancel or suspend one or more notifications, select the corresponding checkbox(es) and click on the button at the end of the list. You are currently subscribed to:", 'subscribe-reloaded' ), '', 'no' );
|
303 |
+
|
304 |
+
add_option( 'subscribe_reloaded_from_name', get_bloginfo( 'name' ), '', 'no' );
|
305 |
+
add_option( 'subscribe_reloaded_from_email', get_bloginfo( 'admin_email' ), '', 'no' );
|
306 |
+
add_option( 'subscribe_reloaded_notification_subject', __( 'There is a new comment to [post_title]', 'subscribe-reloaded' ), '', 'no' );
|
307 |
+
add_option( 'subscribe_reloaded_notification_content', __( "There is a new comment to [post_title].\nComment Link: [comment_permalink]\nAuthor: [comment_author]\nComment:\n[comment_content]\nPermalink: [post_permalink]\nManage your subscriptions: [manager_link]", 'subscribe-reloaded' ), '', 'no' );
|
308 |
+
add_option( 'subscribe_reloaded_double_check_subject', __( 'Please confirm your subscription to [post_title]', 'subscribe-reloaded' ), '', 'no' );
|
309 |
+
add_option( 'subscribe_reloaded_double_check_content', __( "You have requested to be notified every time a new comment is added to:\n[post_permalink]\n\nPlease confirm your request by clicking on this link:\n[confirm_link]", 'subscribe-reloaded' ), '', 'no' );
|
310 |
+
add_option( 'subscribe_reloaded_management_subject', __( 'Manage your subscriptions on [blog_name]', 'subscribe-reloaded' ) );
|
311 |
+
add_option( 'subscribe_reloaded_management_content', __( "You have requested to manage your subscriptions to the articles on [blog_name]. Follow this link to access your personal page:\n[manager_link]", 'subscribe-reloaded' ) );
|
312 |
+
|
313 |
+
add_option( 'subscribe_reloaded_purge_days', '30', '', 'no' );
|
314 |
+
add_option( 'subscribe_reloaded_enable_double_check', 'no', '', 'no' );
|
315 |
+
add_option( 'subscribe_reloaded_notify_authors', 'no', '', 'no' );
|
316 |
+
add_option( 'subscribe_reloaded_enable_html_emails', 'no', '', 'no' );
|
317 |
+
add_option( 'subscribe_reloaded_htmlify_message_links', 'no', '', 'no' );
|
318 |
+
add_option( 'subscribe_reloaded_process_trackbacks', 'no', '', 'no' );
|
319 |
+
add_option( 'subscribe_reloaded_enable_admin_messages', 'no', '', 'no' );
|
320 |
+
add_option( 'subscribe_reloaded_admin_subscribe', 'no', '', 'no' );
|
321 |
+
add_option( 'subscribe_reloaded_admin_bcc', 'no', '', 'no' );
|
322 |
+
|
323 |
+
// Schedule the autopurge hook
|
324 |
+
if ( ! wp_next_scheduled( 'subscribe_reloaded_purge' ) ) {
|
325 |
+
wp_schedule_event( time(), 'daily', 'subscribe_reloaded_purge' );
|
326 |
+
}
|
327 |
+
}
|
328 |
+
// end _activate
|
329 |
+
|
330 |
+
/**
|
331 |
+
* Performs some clean-up maintenance (disable cron job).
|
332 |
+
*/
|
333 |
+
public function deactivate() {
|
334 |
+
global $wpdb;
|
335 |
+
if ( function_exists( 'is_multisite' ) && is_multisite() && isset( $_GET['networkwide'] ) && ( $_GET['networkwide'] == 1 ) ) {
|
336 |
+
$blogids = $wpdb->get_col(
|
337 |
+
$wpdb->prepare(
|
338 |
+
"
|
339 |
+
SELECT blog_id
|
340 |
+
FROM $wpdb->blogs
|
341 |
+
WHERE site_id = %d
|
342 |
+
AND deleted = 0
|
343 |
+
AND spam = 0", $wpdb->siteid
|
344 |
+
)
|
345 |
+
);
|
346 |
+
|
347 |
+
foreach ( $blogids as $blog_id ) {
|
348 |
+
switch_to_blog( $blog_id );
|
349 |
+
wp_clear_scheduled_hook( 'subscribe_reloaded_purge' );
|
350 |
+
}
|
351 |
+
restore_current_blog();
|
352 |
+
} else {
|
353 |
+
wp_clear_scheduled_hook( 'subscribe_reloaded_purge' );
|
354 |
+
}
|
355 |
+
|
356 |
+
delete_option( 'subscribe_reloaded_version' );
|
357 |
+
delete_option( 'subscribe_reloaded_deferred_admin_notices' );
|
358 |
+
}
|
359 |
+
// end deactivate
|
360 |
+
|
361 |
+
/*
|
362 |
+
* Add Settings link to plugin on plugins page
|
363 |
+
*/
|
364 |
+
public function plugin_settings_link( $links, $file ) {
|
365 |
+
if ( $file == 'subscribe-to-comments-reloaded/subscribe-to-comments-reloaded.php' ) {
|
366 |
+
$links['settings'] = sprintf( '<a href="%s"> %s </a>', admin_url( 'options-general.php?page=subscribe-to-comments-reloaded/options/index.php' ), __( 'Settings', 'subscribe-reloaded' ) );
|
367 |
+
}
|
368 |
+
|
369 |
+
return $links;
|
370 |
+
}
|
371 |
+
|
372 |
+
/**
|
373 |
+
* Takes the appropriate action, when a new comment is posted
|
374 |
+
*/
|
375 |
+
public function new_comment_posted( $_comment_ID = 0, $_comment_status = 0 ) {
|
376 |
+
// Retrieve the information about the new comment
|
377 |
+
$info = $this->_get_comment_object( $_comment_ID );
|
378 |
+
|
379 |
+
if ( empty( $info ) || $info->comment_approved == 'spam' ) {
|
380 |
+
return $_comment_ID;
|
381 |
+
}
|
382 |
+
|
383 |
+
// Are subscriptions allowed for this post?
|
384 |
+
$is_disabled = get_post_meta( $info->comment_post_ID, 'stcr_disable_subscriptions', true );
|
385 |
+
if ( ! empty( $is_disabled ) ) {
|
386 |
+
return $_comment_ID;
|
387 |
+
}
|
388 |
+
|
389 |
+
// Process trackbacks and pingbacks?
|
390 |
+
if ( ( get_option( 'subscribe_reloaded_process_trackbacks', 'no' ) == 'no' ) && ( $info->comment_type == 'trackback' || $info->comment_type == 'pingback' ) ) {
|
391 |
+
return $_comment_ID;
|
392 |
+
}
|
393 |
+
|
394 |
+
// Did this visitor request to be subscribed to the discussion? (and s/he is not subscribed)
|
395 |
+
if ( ! empty( $_POST['subscribe-reloaded'] ) && ! empty( $info->comment_author_email ) ) {
|
396 |
+
if ( ! in_array( $_POST['subscribe-reloaded'], array( 'replies', 'digest', 'yes' ) ) ) {
|
397 |
+
return $_comment_ID;
|
398 |
+
}
|
399 |
+
|
400 |
+
switch ( $_POST['subscribe-reloaded'] ) {
|
401 |
+
case 'replies':
|
402 |
+
$status = 'R';
|
403 |
+
break;
|
404 |
+
case 'digest':
|
405 |
+
$status = 'D';
|
406 |
+
break;
|
407 |
+
default:
|
408 |
+
$status = 'Y';
|
409 |
+
break;
|
410 |
+
}
|
411 |
+
|
412 |
+
if ( ! $this->is_user_subscribed( $info->comment_post_ID, $info->comment_author_email ) ) {
|
413 |
+
if ( $this->isDoubleCheckinEnabled( $info ) ) {
|
414 |
+
$this->sendConfirmationEMail( $info );
|
415 |
+
$status = "{$status}C";
|
416 |
+
}
|
417 |
+
$this->add_subscription( $info->comment_post_ID, $info->comment_author_email, $status );
|
418 |
+
|
419 |
+
// If comment is in the moderation queue
|
420 |
+
if ( $info->comment_approved == 0 ) {
|
421 |
+
//don't send notification-emails to all subscribed users
|
422 |
+
return $_comment_ID;
|
423 |
+
}
|
424 |
+
}
|
425 |
+
}
|
426 |
+
|
427 |
+
// Send a notification to all the users subscribed to this post
|
428 |
+
if ( $info->comment_approved == 1 ) {
|
429 |
+
$subscriptions = $this->get_subscriptions(
|
430 |
+
array(
|
431 |
+
'post_id',
|
432 |
+
'status'
|
433 |
+
), array(
|
434 |
+
'equals',
|
435 |
+
'equals'
|
436 |
+
), array(
|
437 |
+
$info->comment_post_ID,
|
438 |
+
'Y'
|
439 |
+
)
|
440 |
+
);
|
441 |
+
if ( ! empty( $info->comment_parent ) ) {
|
442 |
+
$subscriptions = array_merge(
|
443 |
+
$subscriptions, $this->get_subscriptions(
|
444 |
+
'parent', 'equals', array(
|
445 |
+
$info->comment_parent,
|
446 |
+
$info->comment_post_ID
|
447 |
+
)
|
448 |
+
)
|
449 |
+
);
|
450 |
+
}
|
451 |
+
|
452 |
+
foreach ( $subscriptions as $a_subscription ) {
|
453 |
+
// Skip the user who posted this new comment
|
454 |
+
if ( $a_subscription->email != $info->comment_author_email ) {
|
455 |
+
$this->notify_user( $info->comment_post_ID, $a_subscription->email, $_comment_ID );
|
456 |
+
}
|
457 |
+
}
|
458 |
+
}
|
459 |
+
|
460 |
+
// If the case, notify the author
|
461 |
+
if ( get_option( 'subscribe_reloaded_notify_authors', 'no' ) == 'yes' ) {
|
462 |
+
$this->notify_user( $info->comment_post_ID, get_bloginfo( 'admin_email' ), $_comment_ID );
|
463 |
+
}
|
464 |
+
|
465 |
+
return $_comment_ID;
|
466 |
+
}
|
467 |
+
|
468 |
+
// end new_comment_posted
|
469 |
+
|
470 |
+
public function isDoubleCheckinEnabled( $info ) {
|
471 |
+
$approved_subscriptions = $this->get_subscriptions(
|
472 |
+
array(
|
473 |
+
'status',
|
474 |
+
'email'
|
475 |
+
), array(
|
476 |
+
'equals',
|
477 |
+
'equals'
|
478 |
+
), array(
|
479 |
+
'Y',
|
480 |
+
$info->comment_author_email
|
481 |
+
)
|
482 |
+
);
|
483 |
+
if ( ( get_option( 'subscribe_reloaded_enable_double_check', 'no' ) == 'yes' ) && ! is_user_logged_in() && empty( $approved_subscriptions ) ) {
|
484 |
+
return true;
|
485 |
+
} else {
|
486 |
+
return false;
|
487 |
+
}
|
488 |
+
}
|
489 |
+
|
490 |
+
public function sendConfirmationEMail( $info ) {
|
491 |
+
// Retrieve the information about the new comment
|
492 |
+
$this->confirmation_email( $info->comment_post_ID, $info->comment_author_email );
|
493 |
+
}
|
494 |
+
|
495 |
+
/**
|
496 |
+
* Performs the appropriate action when the status of a given comment changes
|
497 |
+
*/
|
498 |
+
public function comment_status_changed( $_comment_ID = 0, $_comment_status = 0 ) {
|
499 |
+
// Retrieve the information about the comment
|
500 |
+
$info = $this->_get_comment_object( $_comment_ID );
|
501 |
+
if ( empty( $info ) ) {
|
502 |
+
return $_comment_ID;
|
503 |
+
}
|
504 |
+
|
505 |
+
switch ( $info->comment_approved ) {
|
506 |
+
case '0': // Unapproved: change the status of the corresponding subscription (if exists) to 'pending'
|
507 |
+
$this->update_subscription_status( $info->comment_post_ID, $info->comment_author_email, 'C' );
|
508 |
+
break;
|
509 |
+
|
510 |
+
case '1': // Approved
|
511 |
+
$this->update_subscription_status( $info->comment_post_ID, $info->comment_author_email, '-C' );
|
512 |
+
$subscriptions = $this->get_subscriptions(
|
513 |
+
array(
|
514 |
+
'post_id',
|
515 |
+
'status'
|
516 |
+
), array(
|
517 |
+
'equals',
|
518 |
+
'equals'
|
519 |
+
), array(
|
520 |
+
$info->comment_post_ID,
|
521 |
+
'Y'
|
522 |
+
)
|
523 |
+
);
|
524 |
+
if ( ! empty( $info->comment_parent ) ) {
|
525 |
+
$subscriptions = array_merge(
|
526 |
+
$subscriptions, $this->get_subscriptions(
|
527 |
+
'parent', 'equals', array(
|
528 |
+
$info->comment_parent,
|
529 |
+
$info->comment_post_ID
|
530 |
+
)
|
531 |
+
)
|
532 |
+
);
|
533 |
+
}
|
534 |
+
|
535 |
+
foreach ( $subscriptions as $a_subscription ) {
|
536 |
+
if ( $a_subscription->email != $info->comment_author_email ) // Skip the user who posted this new comment
|
537 |
+
{
|
538 |
+
$this->notify_user( $info->comment_post_ID, $a_subscription->email, $_comment_ID );
|
539 |
+
}
|
540 |
+
}
|
541 |
+
break;
|
542 |
+
|
543 |
+
case 'trash':
|
544 |
+
case 'spam':
|
545 |
+
$this->comment_deleted( $_comment_ID );
|
546 |
+
break;
|
547 |
+
|
548 |
+
default:
|
549 |
+
break;
|
550 |
+
}
|
551 |
+
|
552 |
+
return $_comment_ID;
|
553 |
+
}
|
554 |
+
// end comment_status
|
555 |
+
|
556 |
+
/**
|
557 |
+
* Performs the appropriate action when a comment is deleted
|
558 |
+
*/
|
559 |
+
public function comment_deleted( $_comment_ID ) {
|
560 |
+
global $wpdb;
|
561 |
+
|
562 |
+
$info = $this->_get_comment_object( $_comment_ID );
|
563 |
+
if ( empty( $info ) ) {
|
564 |
+
return $_comment_ID;
|
565 |
+
}
|
566 |
+
|
567 |
+
// Are there any other approved comments sent by this user?
|
568 |
+
$count_approved_comments = $wpdb->get_var(
|
569 |
+
"
|
570 |
+
SELECT COUNT(*)
|
571 |
+
FROM $wpdb->comments
|
572 |
+
WHERE comment_post_ID = '$info->comment_post_ID' AND comment_author_email = '$info->comment_author_email' AND comment_approved = 1"
|
573 |
+
);
|
574 |
+
if ( intval( $count_approved_comments ) == 0 ) {
|
575 |
+
$this->delete_subscriptions( $info->comment_post_ID, $info->comment_author_email );
|
576 |
+
}
|
577 |
+
|
578 |
+
return $_comment_ID;
|
579 |
+
}
|
580 |
+
// end comment_deleted
|
581 |
+
|
582 |
+
/**
|
583 |
+
* Subscribes the post author, if the corresponding option is set
|
584 |
+
*/
|
585 |
+
public function subscribe_post_author( $_post_ID ) {
|
586 |
+
$new_post = get_post( $_post_ID );
|
587 |
+
$author_email = get_the_author_meta( 'user_email', $new_post->post_author );
|
588 |
+
if ( ! empty( $author_email ) ) {
|
589 |
+
$this->add_subscription( $_post_ID, $author_email, 'Y' );
|
590 |
+
}
|
591 |
+
}
|
592 |
+
// end subscribe_post_author
|
593 |
+
|
594 |
+
/**
|
595 |
+
* Displays the appropriate management page
|
596 |
+
*/
|
597 |
+
public function subscribe_reloaded_manage( $_posts = '', $_query = '' ) {
|
598 |
+
global $current_user;
|
599 |
+
|
600 |
+
if ( ! empty( $_posts ) ) {
|
601 |
+
return $_posts;
|
602 |
+
}
|
603 |
+
|
604 |
+
$post_ID = ! empty( $_POST['srp'] ) ? intval( $_POST['srp'] ) : ( ! empty( $_GET['srp'] ) ? intval( $_GET['srp'] ) : 0 );
|
605 |
+
|
606 |
+
// Is the post_id passed in the query string valid?
|
607 |
+
$target_post = get_post( $post_ID );
|
608 |
+
if ( ( $post_ID > 0 ) && ! is_object( $target_post ) ) {
|
609 |
+
return $_posts;
|
610 |
+
}
|
611 |
+
|
612 |
+
// Load localization files
|
613 |
+
load_plugin_textdomain( 'subscribe-reloaded', false, dirname( plugin_basename( __FILE__ ) ) . '/langs/' );
|
614 |
+
|
615 |
+
$action = ! empty( $_POST['sra'] ) ? $_POST['sra'] : ( ! empty( $_GET['sra'] ) ? $_GET['sra'] : 0 );
|
616 |
+
$key = ! empty( $_POST['srk'] ) ? $_POST['srk'] : ( ! empty( $_GET['srk'] ) ? $_GET['srk'] : 0 );
|
617 |
+
|
618 |
+
$email = $this->clean_email( ! empty( $_POST['sre'] ) ? urldecode( $_POST['sre'] ) : ( ! empty( $_GET['sre'] ) ? $_GET['sre'] : '' ) );
|
619 |
+
if ( empty( $email ) && ! empty( $current_user->user_email ) ) {
|
620 |
+
$email = $this->clean_email( $current_user->user_email );
|
621 |
+
}
|
622 |
+
|
623 |
+
// Subscribe without commenting
|
624 |
+
if ( ! empty( $action ) && ( $action == 's' ) && ( $post_ID > 0 ) ) {
|
625 |
+
$include_post_content = include WP_PLUGIN_DIR . '/subscribe-to-comments-reloaded/templates/subscribe.php';
|
626 |
+
} // Management page for post authors
|
627 |
+
elseif ( ( $post_ID > 0 ) && $this->is_author( $target_post->post_author ) ) {
|
628 |
+
$include_post_content = include WP_PLUGIN_DIR . '/subscribe-to-comments-reloaded/templates/author.php';
|
629 |
+
} // Confirm your subscription (double check-in)
|
630 |
+
elseif ( ( $post_ID > 0 ) && ! empty( $email ) && ! empty( $key ) && ! empty( $action ) &&
|
631 |
+
$this->is_user_subscribed( $post_ID, $email, 'C' ) &&
|
632 |
+
$this->_is_valid_key( $key, $email ) &&
|
633 |
+
( $action == 'c' )
|
634 |
+
) {
|
635 |
+
$include_post_content = include WP_PLUGIN_DIR . '/subscribe-to-comments-reloaded/templates/confirm.php';
|
636 |
+
} // Manage your subscriptions (user)
|
637 |
+
elseif ( ! empty( $email ) && ( ( ! empty( $key ) && $this->_is_valid_key( $key, $email ) ) || current_user_can( 'read' ) ) ) {
|
638 |
+
$include_post_content = include WP_PLUGIN_DIR . '/subscribe-to-comments-reloaded/templates/user.php';
|
639 |
+
}
|
640 |
+
|
641 |
+
if ( empty( $include_post_content ) ) {
|
642 |
+
$include_post_content = include WP_PLUGIN_DIR . '/subscribe-to-comments-reloaded/templates/request-management-link.php';
|
643 |
+
}
|
644 |
+
|
645 |
+
global $wp_query;
|
646 |
+
|
647 |
+
$manager_page_title = html_entity_decode( get_option( 'subscribe_reloaded_manager_page_title', 'Manage subscriptions' ), ENT_COMPAT, 'UTF-8' );
|
648 |
+
if ( function_exists( 'qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage' ) ) {
|
649 |
+
$manager_page_title = qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage( $manager_page_title );
|
650 |
+
}
|
651 |
+
|
652 |
+
$posts[] =
|
653 |
+
(object) array(
|
654 |
+
'ID' => '9999999',
|
655 |
+
'post_author' => '1',
|
656 |
+
'post_date' => '2001-01-01 11:38:56',
|
657 |
+
'post_date_gmt' => '2001-01-01 00:38:56',
|
658 |
+
'post_content' => $include_post_content,
|
659 |
+
'post_title' => $manager_page_title,
|
660 |
+
'post_excerpt' => '',
|
661 |
+
'post_status' => 'publish',
|
662 |
+
'comment_status' => 'closed',
|
663 |
+
'ping_status' => 'closed',
|
664 |
+
'post_password' => '',
|
665 |
+
'to_ping' => '',
|
666 |
+
'pinged' => '',
|
667 |
+
'post_modified' => '2001-01-01 11:00:01',
|
668 |
+
'post_modified_gmt' => '2001-01-01 00:00:01',
|
669 |
+
'post_content_filtered' => '',
|
670 |
+
'post_parent' => '0',
|
671 |
+
'menu_order' => '0',
|
672 |
+
'post_type' => 'page',
|
673 |
+
'post_mime_type' => '',
|
674 |
+
'post_category' => '0',
|
675 |
+
'comment_count' => '0',
|
676 |
+
'filter' => 'raw',
|
677 |
+
'guid' => get_bloginfo( 'url' ) . '/?page_id=9999999',
|
678 |
+
'post_name' => get_bloginfo( 'url' ) . '/?page_id=9999999',
|
679 |
+
'ancestors' => array()
|
680 |
+
);
|
681 |
+
|
682 |
+
// Make WP believe this is a real page, with no comments attached
|
683 |
+
$wp_query->is_page = true;
|
684 |
+
$wp_query->is_single = false;
|
685 |
+
$wp_query->is_home = false;
|
686 |
+
$wp_query->comments = false;
|
687 |
+
|
688 |
+
// Discard 404 errors thrown by other checks
|
689 |
+
unset( $wp_query->query["error"] );
|
690 |
+
$wp_query->query_vars["error"] = "";
|
691 |
+
$wp_query->is_404 = false;
|
692 |
+
|
693 |
+
// Seems like WP adds its own HTML formatting code to the content, we don't need that here
|
694 |
+
remove_filter( 'the_content', 'wpautop' );
|
695 |
+
add_action( 'wp_head', array( &$this, 'add_custom_header_meta' ) );
|
696 |
+
|
697 |
+
return $posts;
|
698 |
+
}
|
699 |
+
// end subscribe_reloaded_manage
|
700 |
+
|
701 |
+
/**
|
702 |
+
* Removes old entries from the database
|
703 |
+
*/
|
704 |
+
public function subscribe_reloaded_purge() {
|
705 |
+
global $wpdb;
|
706 |
+
|
707 |
+
if ( ( $autopurge_interval = intval( get_option( 'subscribe_reloaded_purge_days', 0 ) ) ) <= 0 ) {
|
708 |
+
return true;
|
709 |
+
}
|
710 |
+
|
711 |
+
// Delete old entries
|
712 |
+
$wpdb->query(
|
713 |
+
"
|
714 |
+
DELETE FROM $wpdb->postmeta
|
715 |
+
WHERE meta_key LIKE '\_stcr@\_%'
|
716 |
+
AND STR_TO_DATE(meta_value, '%Y-%m-%d %H:%i:%s') <= DATE_SUB(NOW(), INTERVAL $autopurge_interval DAY) AND meta_value LIKE '%C'"
|
717 |
+
);
|
718 |
+
}
|
719 |
+
// end subscribe_reloaded_purge
|
720 |
+
|
721 |
+
/**
|
722 |
+
* Checks if current logged in user is the author of this post
|
723 |
+
*/
|
724 |
+
public function is_author( $_post_author ) {
|
725 |
+
global $current_user;
|
726 |
+
|
727 |
+
return ! empty( $current_user ) && ( ( $_post_author == $current_user->ID ) || current_user_can( 'manage_options' ) );
|
728 |
+
}
|
729 |
+
// end is_author
|
730 |
+
|
731 |
+
/**
|
732 |
+
* Checks if a given email address is subscribed to a post
|
733 |
+
*/
|
734 |
+
public function is_user_subscribed( $_post_ID = 0, $_email = '', $_status = '' ) {
|
735 |
+
global $current_user;
|
736 |
+
|
737 |
+
if ( ( empty( $current_user->user_email ) && empty( $_COOKIE['comment_author_email_' . COOKIEHASH] ) && empty( $_email ) ) || empty( $_post_ID ) ) {
|
738 |
+
return false;
|
739 |
+
}
|
740 |
+
|
741 |
+
$operator = ( $_status != '' ) ? 'equals' : 'contains';
|
742 |
+
$subscriptions = $this->get_subscriptions(
|
743 |
+
array(
|
744 |
+
'post_id',
|
745 |
+
'status'
|
746 |
+
), array(
|
747 |
+
'equals',
|
748 |
+
$operator
|
749 |
+
), array(
|
750 |
+
$_post_ID,
|
751 |
+
$_status
|
752 |
+
)
|
753 |
+
);
|
754 |
+
|
755 |
+
if ( empty( $_email ) ) {
|
756 |
+
$user_email = ! empty( $current_user->user_email ) ? $current_user->user_email : ( ! empty( $_COOKIE['comment_author_email_' . COOKIEHASH] ) ? stripslashes( esc_attr( $_COOKIE['comment_author_email_' . COOKIEHASH] ) ) : '#undefined#' );
|
757 |
+
} else {
|
758 |
+
$user_email = $_email;
|
759 |
+
}
|
760 |
+
|
761 |
+
foreach ( $subscriptions as $a_subscription ) {
|
762 |
+
if ( $user_email == $a_subscription->email ) {
|
763 |
+
return true;
|
764 |
+
}
|
765 |
+
}
|
766 |
+
|
767 |
+
return false;
|
768 |
+
}
|
769 |
+
// end is_user_subscribed
|
770 |
+
|
771 |
+
/**
|
772 |
+
* Adds a new subscription
|
773 |
+
*/
|
774 |
+
public function add_subscription( $_post_id = 0, $_email = '', $_status = 'Y' ) {
|
775 |
+
global $wpdb;
|
776 |
+
// Does the post exist?
|
777 |
+
$target_post = get_post( $_post_id );
|
778 |
+
if ( ( $_post_id > 0 ) && ! is_object( $target_post ) ) {
|
779 |
+
return;
|
780 |
+
}
|
781 |
+
|
782 |
+
// Filter unwanted statuses
|
783 |
+
if ( ! in_array( $_status, array( 'Y', 'YC', 'R', 'RC', 'C', '-C' ) ) || empty( $_status ) ) {
|
784 |
+
return;
|
785 |
+
}
|
786 |
+
|
787 |
+
// Using Wordpress local time
|
788 |
+
$dt = date_i18n( 'Y-m-d H:i:s' );
|
789 |
+
|
790 |
+
$clean_email = $this->clean_email( $_email );
|
791 |
+
$wpdb->query(
|
792 |
+
$wpdb->prepare(
|
793 |
+
"
|
794 |
+
INSERT IGNORE INTO $wpdb->postmeta (post_id, meta_key, meta_value)
|
795 |
+
SELECT %d, %s, %s
|
796 |
+
FROM DUAL
|
797 |
+
WHERE NOT EXISTS (
|
798 |
+
SELECT post_id
|
799 |
+
FROM $wpdb->postmeta
|
800 |
+
WHERE post_id = %d
|
801 |
+
AND meta_key = %s
|
802 |
+
LIMIT 0,1
|
803 |
+
)", $_post_id, "_stcr@_$clean_email", "$dt|$_status", $_post_id, "_stcr@_$clean_email"
|
804 |
+
)
|
805 |
+
);
|
806 |
+
}
|
807 |
+
// end add_subscription
|
808 |
+
|
809 |
+
/**
|
810 |
+
* Deletes one or more subscriptions from the database
|
811 |
+
*/
|
812 |
+
public function delete_subscriptions( $_post_id = 0, $_email = '' ) {
|
813 |
+
global $wpdb;
|
814 |
+
|
815 |
+
if ( empty( $_post_id ) ) {
|
816 |
+
return 0;
|
817 |
+
}
|
818 |
+
|
819 |
+
$posts_where = '';
|
820 |
+
if ( ! is_array( $_post_id ) ) {
|
821 |
+
$posts_where = "post_id = " . intval( $_post_id );
|
822 |
+
} else {
|
823 |
+
foreach ( $_post_id as $a_post_id ) {
|
824 |
+
$posts_where .= "post_id = '" . intval( $a_post_id ) . "' OR ";
|
825 |
+
}
|
826 |
+
|
827 |
+
$posts_where = substr( $posts_where, 0, - 4 );
|
828 |
+
}
|
829 |
+
|
830 |
+
if ( ! empty( $_email ) ) {
|
831 |
+
$emails_where = '';
|
832 |
+
if ( ! is_array( $_email ) ) {
|
833 |
+
$emails_where = "meta_key = '_stcr@_" . $this->clean_email( $_email ) . "'";
|
834 |
+
} else {
|
835 |
+
foreach ( $_email as $a_email ) {
|
836 |
+
$emails_where .= "meta_key = '_stcr@_" . $this->clean_email( $a_email ) . "' OR ";
|
837 |
+
}
|
838 |
+
|
839 |
+
$emails_where = substr( $emails_where, 0, - 4 );
|
840 |
+
}
|
841 |
+
|
842 |
+
return $wpdb->query( "DELETE FROM $wpdb->postmeta WHERE ($posts_where) AND ($emails_where)" );
|
843 |
+
} else {
|
844 |
+
return $wpdb->query( "DELETE FROM $wpdb->postmeta WHERE meta_key LIKE '\_stcr@\_%' AND ($posts_where)" );
|
845 |
+
}
|
846 |
+
}
|
847 |
+
// end delete_subscriptions
|
848 |
+
|
849 |
+
/**
|
850 |
+
* Updates the status of an existing subscription
|
851 |
+
*/
|
852 |
+
public function update_subscription_status( $_post_id = 0, $_email = '', $_new_status = 'C' ) {
|
853 |
+
global $wpdb;
|
854 |
+
|
855 |
+
// Filter unwanted statuses
|
856 |
+
if ( empty( $_new_status ) || ! in_array( $_new_status, array( 'Y', 'R', 'C', '-C' ) ) || empty( $_email ) ) {
|
857 |
+
return 0;
|
858 |
+
}
|
859 |
+
|
860 |
+
if ( ! empty( $_post_id ) ) {
|
861 |
+
$posts_where = '';
|
862 |
+
if ( ! is_array( $_post_id ) ) {
|
863 |
+
$posts_where = "post_id = " . intval( $_post_id );
|
864 |
+
} else {
|
865 |
+
foreach ( $_post_id as $a_post_id ) {
|
866 |
+
$posts_where .= "post_id = '" . intval( $a_post_id ) . "' OR ";
|
867 |
+
}
|
868 |
+
|
869 |
+
$posts_where = substr( $posts_where, 0, - 4 );
|
870 |
+
}
|
871 |
+
} else { // Mass update subscriptions
|
872 |
+
$posts_where = '1=1';
|
873 |
+
}
|
874 |
+
|
875 |
+
$emails_where = '';
|
876 |
+
if ( ! is_array( $_email ) ) {
|
877 |
+
$emails_where = "meta_key = '_stcr@_" . $this->clean_email( $_email ) . "'";
|
878 |
+
} else {
|
879 |
+
foreach ( $_email as $a_email ) {
|
880 |
+
$emails_where .= "meta_key = '_stcr@_" . $this->clean_email( $a_email ) . "' OR ";
|
881 |
+
}
|
882 |
+
|
883 |
+
$emails_where = substr( $emails_where, 0, - 4 );
|
884 |
+
}
|
885 |
+
|
886 |
+
$meta_length = ( strpos( $_new_status, 'C' ) !== false ) ? 21 : 20;
|
887 |
+
$new_status = ( $_new_status == '-C' ) ? '' : $_new_status;
|
888 |
+
|
889 |
+
return $wpdb->query(
|
890 |
+
"
|
891 |
+
UPDATE $wpdb->postmeta
|
892 |
+
SET meta_value = CONCAT(SUBSTRING(meta_value, 1, $meta_length), '$new_status')
|
893 |
+
WHERE ($posts_where) AND ($emails_where)"
|
894 |
+
);
|
895 |
+
}
|
896 |
+
// end update_subscription_status
|
897 |
+
|
898 |
+
/**
|
899 |
+
* Updates the email address of an existing subscription
|
900 |
+
*/
|
901 |
+
public function update_subscription_email( $_post_id = 0, $_email = '', $_new_email = '' ) {
|
902 |
+
global $wpdb;
|
903 |
+
|
904 |
+
// Nothing to do if the new email hasn't been specified
|
905 |
+
if ( empty( $_email ) || empty( $_new_email ) || strpos( $_new_email, '@' ) == 0 ) {
|
906 |
+
return;
|
907 |
+
}
|
908 |
+
|
909 |
+
$clean_values[] = "_stcr@_" . $this->clean_email( $_new_email );
|
910 |
+
$clean_values[] = "_stcr@_" . $this->clean_email( $_email );
|
911 |
+
$post_where = '';
|
912 |
+
if ( ! empty( $_post_id ) ) {
|
913 |
+
$post_where = ' AND post_id = %d';
|
914 |
+
$clean_values[] = $_post_id;
|
915 |
+
}
|
916 |
+
|
917 |
+
return $wpdb->query(
|
918 |
+
$wpdb->prepare(
|
919 |
+
"
|
920 |
+
UPDATE $wpdb->postmeta
|
921 |
+
SET meta_key = %s
|
922 |
+
WHERE meta_key = %s $post_where", $clean_values
|
923 |
+
)
|
924 |
+
);
|
925 |
+
}
|
926 |
+
// end update_subscription_email
|
927 |
+
|
928 |
+
/**
|
929 |
+
* Retrieves a list of emails subscribed to this post
|
930 |
+
*/
|
931 |
+
public function get_subscriptions( $_search_field = array( 'email' ), $_operator = array( 'equals' ), $_search_value = array( '' ), $_order_by = 'dt', $_order = 'ASC', $_offset = 0, $_limit_results = 0 ) {
|
932 |
+
global $wpdb;
|
933 |
+
|
934 |
+
// Type adjustments
|
935 |
+
$search_fields = ( ! is_array( $_search_field ) ) ? array( $_search_field ) : $_search_field;
|
936 |
+
$operators = ( ! is_array( $_operator ) ) ? array( $_operator ) : $_operator;
|
937 |
+
$search_values = ( ! is_array( $_search_value ) ) ? array( $_search_value ) : $_search_value;
|
938 |
+
|
939 |
+
// Find if exists a 'replies only' subscription for the parent comment
|
940 |
+
if ( $search_fields[0] == 'parent' ) {
|
941 |
+
|
942 |
+
$parent_comment_id = $search_values[0];
|
943 |
+
$comment_post_id = $search_values[1];
|
944 |
+
|
945 |
+
// Get the parent comment author email so we can search for any Replies Only subscriptions
|
946 |
+
$parent_comment_author_email_query = mysql_query( "SELECT `comment_author_email` FROM $wpdb->comments WHERE `comment_ID` = '$parent_comment_id'" );
|
947 |
+
$parent_comment_author_email = mysql_fetch_row( $parent_comment_author_email_query );
|
948 |
+
$parent_comment_author_email = "\_stcr@\_" . $parent_comment_author_email[0];
|
949 |
+
|
950 |
+
// Check if $parent_comment_author_email has any Replies Only (R) subscriptions for $comment_post_id
|
951 |
+
|
952 |
+
/*
|
953 |
+
Heads up: this will return Replies Only subscriptions for a given post, *not* for a given comment.
|
954 |
+
This plugin does not track subscriptions for specific comments but rather for entire posts, so there
|
955 |
+
is no way to figure out if a specific parent comment has a subscription (of any type). To make the
|
956 |
+
Replies Only feature half-work, we check if a parent comment author has *any* Replies Only subscriptions
|
957 |
+
for a given post. If they do, we assume that they must want to get notified of replies to *any* of their
|
958 |
+
comments on *that* post.
|
959 |
+
*/
|
960 |
+
|
961 |
+
return $wpdb->get_results(
|
962 |
+
$wpdb->prepare(
|
963 |
+
"
|
964 |
+
SELECT pm.meta_id, REPLACE(pm.meta_key, '_stcr@_', '') AS email, pm.post_id, SUBSTRING(pm.meta_value, 1, 19) AS dt, SUBSTRING(pm.meta_value, 21) AS status
|
965 |
+
FROM $wpdb->postmeta pm
|
966 |
+
WHERE pm.meta_key LIKE %s
|
967 |
+
AND pm.meta_value LIKE '%%R'
|
968 |
+
AND pm.post_id = %d", $parent_comment_author_email, $comment_post_id
|
969 |
+
), OBJECT
|
970 |
+
);
|
971 |
+
} else {
|
972 |
+
$where_clause = '';
|
973 |
+
foreach ( $search_fields as $a_idx => $a_field ) {
|
974 |
+
$where_clause .= ' AND';
|
975 |
+
$offset_status = ( $a_field == 'status' && $search_values[$a_idx] == 'C' ) ? 22 : 21;
|
976 |
+
switch ( $a_field ) {
|
977 |
+
case 'status':
|
978 |
+
$where_clause .= " SUBSTRING(meta_value, $offset_status)";
|
979 |
+
break;
|
980 |
+
case 'post_id':
|
981 |
+
$where_clause .= ' post_id';
|
982 |
+
break;
|
983 |
+
default:
|
984 |
+
$where_clause .= ' SUBSTRING(meta_key, 8)';
|
985 |
+
}
|
986 |
+
switch ( $operators[$a_idx] ) {
|
987 |
+
case 'equals':
|
988 |
+
$where_clause .= " = %s";
|
989 |
+
$where_values[] = $search_values[$a_idx];
|
990 |
+
break;
|
991 |
+
case 'does not contain':
|
992 |
+
$where_clause .= " NOT LIKE %s";
|
993 |
+
$where_values[] = "%{$search_values[$a_idx]}%";
|
994 |
+
break;
|
995 |
+
case 'starts with':
|
996 |
+
$where_clause .= " LIKE %s";
|
997 |
+
$where_values[] = "${$search_values[$a_idx]}%";
|
998 |
+
break;
|
999 |
+
case 'ends with':
|
1000 |
+
$where_clause .= " LIKE %s";
|
1001 |
+
$where_values[] = "%{$search_values[$a_idx]}";
|
1002 |
+
break;
|
1003 |
+
default: // contains
|
1004 |
+
$where_clause .= " LIKE %s";
|
1005 |
+
$where_values[] = "%{$search_values[$a_idx]}%";
|
1006 |
+
}
|
1007 |
+
}
|
1008 |
+
switch ( $_order_by ) {
|
1009 |
+
case 'status':
|
1010 |
+
$order_by = "status";
|
1011 |
+
break;
|
1012 |
+
case 'email':
|
1013 |
+
$order_by = 'meta_key';
|
1014 |
+
break;
|
1015 |
+
case 'dt':
|
1016 |
+
$order_by = 'dt';
|
1017 |
+
break;
|
1018 |
+
default:
|
1019 |
+
$order_by = 'post_id';
|
1020 |
+
}
|
1021 |
+
$order = ( $_order != 'ASC' && $_order != 'DESC' ) ? 'DESC' : $_order;
|
1022 |
+
|
1023 |
+
// This is the 'official' way to have an offset without a limit
|
1024 |
+
$row_count = ( $_limit_results <= 0 ) ? '18446744073709551610' : $_limit_results;
|
1025 |
+
|
1026 |
+
return $wpdb->get_results(
|
1027 |
+
$wpdb->prepare(
|
1028 |
+
"
|
1029 |
+
SELECT meta_id, REPLACE(meta_key, '_stcr@_', '') AS email, post_id, SUBSTRING(meta_value, 1, 19) AS dt, SUBSTRING(meta_value, 21) AS status
|
1030 |
+
FROM $wpdb->postmeta
|
1031 |
+
WHERE meta_key LIKE '\_stcr@\_%%' $where_clause
|
1032 |
+
ORDER BY $order_by $order
|
1033 |
+
LIMIT $_offset,$row_count", $where_values
|
1034 |
+
), OBJECT
|
1035 |
+
);
|
1036 |
+
}
|
1037 |
+
}
|
1038 |
+
// end get_subscriptions
|
1039 |
+
|
1040 |
+
/**
|
1041 |
+
* Sends a message to confirm a subscription
|
1042 |
+
*/
|
1043 |
+
public function confirmation_email( $_post_ID = 0, $_email = '' ) {
|
1044 |
+
// Retrieve the options from the database
|
1045 |
+
$from_name = stripslashes( get_option( 'subscribe_reloaded_from_name', 'admin' ) );
|
1046 |
+
$from_email = get_option( 'subscribe_reloaded_from_email', get_bloginfo( 'admin_email' ) );
|
1047 |
+
$subject = html_entity_decode( stripslashes( get_option( 'subscribe_reloaded_double_check_subject', 'Please confirm your subscribtion to [post_title]' ) ), ENT_COMPAT, 'UTF-8' );
|
1048 |
+
$message = html_entity_decode( stripslashes( get_option( 'subscribe_reloaded_double_check_content', '' ) ), ENT_COMPAT, 'UTF-8' );
|
1049 |
+
$manager_link = get_bloginfo( 'url' ) . get_option( 'subscribe_reloaded_manager_page', '/comment-subscriptions/' );
|
1050 |
+
if ( function_exists( 'qtrans_convertURL' ) ) {
|
1051 |
+
$manager_link = qtrans_convertURL( $manager_link );
|
1052 |
+
}
|
1053 |
+
|
1054 |
+
$clean_email = $this->clean_email( $_email );
|
1055 |
+
$subscriber_salt = $this->generate_key( $clean_email );
|
1056 |
+
|
1057 |
+
$manager_link .= ( ( strpos( $manager_link, '?' ) !== false ) ? '&' : '?' ) . "sre=" . urlencode( $clean_email ) . "&srk=$subscriber_salt";
|
1058 |
+
$confirm_link = "$manager_link&srp=$_post_ID&sra=c";
|
1059 |
+
|
1060 |
+
$headers = "From: $from_name <$from_email>\n";
|
1061 |
+
$content_type = ( get_option( 'subscribe_reloaded_enable_html_emails', 'no' ) == 'yes' ) ? 'text/html' : 'text/plain';
|
1062 |
+
$headers .= "Content-Type: $content_type; charset=" . get_bloginfo( 'charset' ) . "\n";
|
1063 |
+
|
1064 |
+
$post = get_post( $_post_ID );
|
1065 |
+
$post_permalink = get_permalink( $_post_ID );
|
1066 |
+
|
1067 |
+
// Replace tags with their actual values
|
1068 |
+
$subject = str_replace( '[post_title]', $post->post_title, $subject );
|
1069 |
+
|
1070 |
+
$message = str_replace( '[post_permalink]', $post_permalink, $message );
|
1071 |
+
$message = str_replace( '[confirm_link]', $confirm_link, $message );
|
1072 |
+
$message = str_replace( '[manager_link]', $manager_link, $message );
|
1073 |
+
|
1074 |
+
// QTranslate support
|
1075 |
+
if ( function_exists( 'qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage' ) ) {
|
1076 |
+
$subject = qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage( $subject );
|
1077 |
+
$message = str_replace( '[post_title]', qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage( $post->post_title ), $message );
|
1078 |
+
$message = qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage( $message );
|
1079 |
+
} else {
|
1080 |
+
$message = str_replace( '[post_title]', $post->post_title, $message );
|
1081 |
+
}
|
1082 |
+
$message = apply_filters( 'stcr_confirmation_email_message', $message, $_post_ID, $email );
|
1083 |
+
if ( $content_type == 'text/html' ) {
|
1084 |
+
$message = $this->wrap_html_message( $message, $subject );
|
1085 |
+
}
|
1086 |
+
|
1087 |
+
wp_mail( $clean_email, $subject, $message, $headers );
|
1088 |
+
}
|
1089 |
+
// end confirmation_email
|
1090 |
+
|
1091 |
+
/**
|
1092 |
+
* Sends the notification message to a given user
|
1093 |
+
*/
|
1094 |
+
public function notify_user( $_post_ID = 0, $_email = '', $_comment_ID = 0 ) {
|
1095 |
+
// Retrieve the options from the database
|
1096 |
+
$from_name = html_entity_decode( stripslashes( get_option( 'subscribe_reloaded_from_name', 'admin' ) ), ENT_COMPAT, 'UTF-8' );
|
1097 |
+
$from_email = get_option( 'subscribe_reloaded_from_email', get_bloginfo( 'admin_email' ) );
|
1098 |
+
$subject = html_entity_decode( stripslashes( get_option( 'subscribe_reloaded_notification_subject', 'There is a new comment on the post [post_title]' ) ), ENT_COMPAT, 'UTF-8' );
|
1099 |
+
$message = html_entity_decode( stripslashes( get_option( 'subscribe_reloaded_notification_content', '' ) ), ENT_COMPAT, 'UTF-8' );
|
1100 |
+
$manager_link = get_bloginfo( 'url' ) . get_option( 'subscribe_reloaded_manager_page', '/comment-subscriptions/' );
|
1101 |
+
if ( function_exists( 'qtrans_convertURL' ) ) {
|
1102 |
+
$manager_link = qtrans_convertURL( $manager_link );
|
1103 |
+
}
|
1104 |
+
|
1105 |
+
$clean_email = $this->clean_email( $_email );
|
1106 |
+
$subscriber_salt = $this->generate_key( $clean_email );
|
1107 |
+
|
1108 |
+
$manager_link .= ( ( strpos( $manager_link, '?' ) !== false ) ? '&' : '?' ) . "sre=" . urlencode( $clean_email ) . "&srk=$subscriber_salt";
|
1109 |
+
|
1110 |
+
$headers = "From: $from_name <$from_email>\n";
|
1111 |
+
$content_type = ( get_option( 'subscribe_reloaded_enable_html_emails', 'no' ) == 'yes' ) ? 'text/html' : 'text/plain';
|
1112 |
+
$headers .= "Content-Type: $content_type; charset=" . get_bloginfo( 'charset' ) . "\n";
|
1113 |
+
|
1114 |
+
if ( get_option( 'subscribe_reloaded_admin_bcc', 'no' ) == 'yes' ) {
|
1115 |
+
$headers .= "Bcc: $from_name <$from_email>\n";
|
1116 |
+
}
|
1117 |
+
|
1118 |
+
$post = get_post( $_post_ID );
|
1119 |
+
$comment = get_comment( $_comment_ID );
|
1120 |
+
$post_permalink = get_permalink( $_post_ID );
|
1121 |
+
$comment_permalink = get_comment_link( $_comment_ID );
|
1122 |
+
$comment_reply_permalink = get_permalink( $_post_ID ) . '?replytocom=' . $_comment_ID . '#respond';
|
1123 |
+
|
1124 |
+
$comment_content = $comment->comment_content;
|
1125 |
+
|
1126 |
+
// Add HTML paragraph tags to comment
|
1127 |
+
// See wp-includes/formatting.php for details on the wpautop() function
|
1128 |
+
if ( $content_type == 'text/html' ) {
|
1129 |
+
$comment_content = wpautop( $comment->comment_content );
|
1130 |
+
}
|
1131 |
+
|
1132 |
+
// Replace tags with their actual values
|
1133 |
+
$subject = str_replace( '[post_title]', $post->post_title, $subject );
|
1134 |
+
|
1135 |
+
$message = str_replace( '[post_permalink]', $post_permalink, $message );
|
1136 |
+
$message = str_replace( '[comment_permalink]', $comment_permalink, $message );
|
1137 |
+
$message = str_replace( '[comment_reply_permalink]', $comment_reply_permalink, $message );
|
1138 |
+
$message = str_replace( '[comment_author]', $comment->comment_author, $message );
|
1139 |
+
$message = str_replace( '[comment_content]', $comment_content, $message );
|
1140 |
+
$message = str_replace( '[manager_link]', $manager_link, $message );
|
1141 |
+
|
1142 |
+
// QTranslate support
|
1143 |
+
if ( function_exists( 'qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage' ) ) {
|
1144 |
+
$subject = qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage( $subject );
|
1145 |
+
$message = str_replace( '[post_title]', qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage( $post->post_title ), $message );
|
1146 |
+
$message = qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage( $message );
|
1147 |
+
} else {
|
1148 |
+
$message = str_replace( '[post_title]', $post->post_title, $message );
|
1149 |
+
}
|
1150 |
+
$message = apply_filters( 'stcr_notify_user_message', $message, $_post_ID, $_email, $_comment_ID );
|
1151 |
+
if ( $content_type == 'text/html' ) {
|
1152 |
+
if ( get_option( 'subscribe_reloaded_htmlify_message_links' ) == 'yes' ) {
|
1153 |
+
$message = $this->htmlify_message_links( $message );
|
1154 |
+
}
|
1155 |
+
$message = $this->wrap_html_message( $message, $subject );
|
1156 |
+
}
|
1157 |
+
|
1158 |
+
wp_mail( $clean_email, $subject, $message, $headers );
|
1159 |
+
}
|
1160 |
+
// end notify_user
|
1161 |
+
|
1162 |
+
/**
|
1163 |
+
* Finds all links in text and wraps them with an HTML anchor tag
|
1164 |
+
*
|
1165 |
+
* @param unknown $text
|
1166 |
+
*
|
1167 |
+
* @return string Text with all links wrapped in HTML anchor tags
|
1168 |
+
*
|
1169 |
+
*/
|
1170 |
+
public function htmlify_message_links( $text ) {
|
1171 |
+
return preg_replace( '!(((f|ht)tp(s)?://)[-a-zA-Zа-яА-Я()0-9@:%_+.~#?&;//=]+)!i', '<a href="$1">$1</a>', $text );
|
1172 |
+
}
|
1173 |
+
|
1174 |
+
/**
|
1175 |
+
* Generate a unique key to allow users to manage their subscriptions
|
1176 |
+
*/
|
1177 |
+
public function generate_key( $_email ) {
|
1178 |
+
$day = date_i18n( 'Ymd' );
|
1179 |
+
|
1180 |
+
return md5( $day . $this->salt . $_email );
|
1181 |
+
}
|
1182 |
+
// end generate_key
|
1183 |
+
|
1184 |
+
/**
|
1185 |
+
* Creates the HTML structure to properly handle HTML messages
|
1186 |
+
*/
|
1187 |
+
public function wrap_html_message( $_message = '', $_subject = '' ) {
|
1188 |
+
return "<html><head><title>$_subject</title></head><body>$_message</body></html>";
|
1189 |
+
}
|
1190 |
+
// end _wrap_html_message
|
1191 |
+
|
1192 |
+
/**
|
1193 |
+
* Returns an email address where some possible 'offending' strings have been removed
|
1194 |
+
*/
|
1195 |
+
public function clean_email( $_email ) {
|
1196 |
+
$offending_strings = array(
|
1197 |
+
"/to\:/i",
|
1198 |
+
"/from\:/i",
|
1199 |
+
"/bcc\:/i",
|
1200 |
+
"/cc\:/i",
|
1201 |
+
"/content\-transfer\-encoding\:/i",
|
1202 |
+
"/content\-type\:/i",
|
1203 |
+
"/mime\-version\:/i"
|
1204 |
+
);
|
1205 |
+
|
1206 |
+
return esc_attr( stripslashes( strip_tags( preg_replace( $offending_strings, '', $_email ) ) ) );
|
1207 |
+
}
|
1208 |
+
// end clean_email
|
1209 |
+
|
1210 |
+
/**
|
1211 |
+
* Adds a new entry in the admin menu, to manage this plugin's options
|
1212 |
+
*/
|
1213 |
+
public function add_config_menu( $_s ) {
|
1214 |
+
global $current_user;
|
1215 |
+
|
1216 |
+
if ( current_user_can( 'manage_options' ) ) {
|
1217 |
+
add_options_page( 'Subscribe to Comments', 'Subscribe to Comments', 'manage_options', WP_PLUGIN_DIR . '/subscribe-to-comments-reloaded/options/index.php' );
|
1218 |
+
}
|
1219 |
+
|
1220 |
+
return $_s;
|
1221 |
+
}
|
1222 |
+
// end add_config_menu
|
1223 |
+
|
1224 |
+
/**
|
1225 |
+
* Adds a custom stylesheet file to the admin interface
|
1226 |
+
*/
|
1227 |
+
public function add_options_stylesheet() {
|
1228 |
+
// It looks like WP_PLUGIN_URL doesn't honor the HTTPS setting in wp-config.php
|
1229 |
+
$stylesheet_url = ( is_ssl() ? str_replace( 'http://', 'https://', WP_PLUGIN_URL ) : WP_PLUGIN_URL ) . '/subscribe-to-comments-reloaded/style.css';
|
1230 |
+
wp_register_style( 'subscribe-to-comments', $stylesheet_url );
|
1231 |
+
wp_enqueue_style( 'subscribe-to-comments' );
|
1232 |
+
}
|
1233 |
+
|
1234 |
+
public function add_post_comments_stylesheet() {
|
1235 |
+
// It looks like WP_PLUGIN_URL doesn't honor the HTTPS setting in wp-config.php
|
1236 |
+
$stylesheet_url = ( is_ssl() ? str_replace( 'http://', 'https://', WP_PLUGIN_URL ) : WP_PLUGIN_URL ) . '/subscribe-to-comments-reloaded/post-and-comments.css';
|
1237 |
+
wp_register_style( 'subscribe-to-comments', $stylesheet_url );
|
1238 |
+
wp_enqueue_style( 'subscribe-to-comments' );
|
1239 |
+
}
|
1240 |
+
// end add_stylesheet
|
1241 |
+
|
1242 |
+
/**
|
1243 |
+
* Adds custom HTML code to the HEAD section of the management page
|
1244 |
+
*/
|
1245 |
+
public function add_custom_header_meta() {
|
1246 |
+
echo html_entity_decode( stripslashes( get_option( 'subscribe_reloaded_custom_header_meta', '' ) ), ENT_COMPAT, 'UTF-8' );
|
1247 |
+
}
|
1248 |
+
// end add_custom_header_meta
|
1249 |
+
|
1250 |
+
/**
|
1251 |
+
* Adds a new column header to the Edit Comments panel
|
1252 |
+
*/
|
1253 |
+
public function add_column_header( $_columns ) {
|
1254 |
+
$image_url = ( is_ssl() ? str_replace( 'http://', 'https://', WP_PLUGIN_URL ) : WP_PLUGIN_URL ) . '/subscribe-to-comments-reloaded/images';
|
1255 |
+
$_columns['subscribe-reloaded'] = "<img src='$image_url/subscribe-to-comments-small.png' width='17' height='12' alt='Subscriptions' />";
|
1256 |
+
|
1257 |
+
return $_columns;
|
1258 |
+
}
|
1259 |
+
// end add_comment_column_header
|
1260 |
+
|
1261 |
+
/**
|
1262 |
+
* Adds a new column to the Edit Comments panel
|
1263 |
+
*/
|
1264 |
+
public function add_comment_column( $_column_name ) {
|
1265 |
+
if ( 'subscribe-reloaded' != $_column_name ) {
|
1266 |
+
return;
|
1267 |
+
}
|
1268 |
+
|
1269 |
+
global $comment;
|
1270 |
+
$subscription = $this->get_subscriptions(
|
1271 |
+
array(
|
1272 |
+
'post_id',
|
1273 |
+
'email'
|
1274 |
+
), array(
|
1275 |
+
'equals',
|
1276 |
+
'equals'
|
1277 |
+
), array(
|
1278 |
+
$comment->comment_post_ID,
|
1279 |
+
$comment->comment_author_email
|
1280 |
+
), 'dt', 'DESC', 0, 1
|
1281 |
+
);
|
1282 |
+
if ( count( $subscription ) == 0 ) {
|
1283 |
+
_e( 'No', 'subscribe-reloaded' );
|
1284 |
+
} else {
|
1285 |
+
echo '<a href="options-general.php?page=subscribe-to-comments-reloaded/options/index.php&subscribepanel=1&srf=email&srt=equals&srv=' . urlencode( $comment->comment_author_email ) . '">' . $subscription[0]->status . '</a>';
|
1286 |
+
}
|
1287 |
+
}
|
1288 |
+
// end add_column
|
1289 |
+
|
1290 |
+
/**
|
1291 |
+
* Adds a new column to the Posts management panel
|
1292 |
+
*/
|
1293 |
+
public function add_post_column( $_column_name ) {
|
1294 |
+
if ( 'subscribe-reloaded' != $_column_name ) {
|
1295 |
+
return;
|
1296 |
+
}
|
1297 |
+
|
1298 |
+
global $post;
|
1299 |
+
load_plugin_textdomain( 'subscribe-reloaded', false, dirname( plugin_basename( __FILE__ ) ) . '/langs/' );
|
1300 |
+
echo '<a href="options-general.php?page=subscribe-to-comments-reloaded/options/index.php&subscribepanel=1&srf=post_id&srt=equals&srv=' . $post->ID . '">' . count( $this->get_subscriptions( 'post_id', 'equals', $post->ID ) ) . '</a>';
|
1301 |
+
}
|
1302 |
+
// end add_column
|
1303 |
+
|
1304 |
+
/**
|
1305 |
+
* Contextual help (link to the support forum)
|
1306 |
+
*/
|
1307 |
+
public function contextual_help( $contextual_help, $screen_id, $screen ) {
|
1308 |
+
if ( $screen_id == 'subscribe-to-comments-reloaded/options/index' ) {
|
1309 |
+
load_plugin_textdomain( 'subscribe-reloaded', false, dirname( plugin_basename( __FILE__ ) ) . '/langs/' );
|
1310 |
+
$contextual_help = __( 'Need help on how to use Subscribe to Comments Reloaded? Visit the official', 'subscribe-reloaded' ) . ' <a href="http://wordpress.org/tags/subscribe-to-comments-reloaded?forum_id=10" target="_blank">' . __( 'support forum', 'subscribe-reloaded' ) . '</a>. ';
|
1311 |
+
$contextual_help .= __( 'Feeling generous?', 'subscribe-reloaded' ) . ' <a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=XF86X93FDCGYA&lc=US&item_name=Datasoft%20Engineering&item_number=DI%2dSTCR¤cy_code=USD&bn=PP%2dDonationsBF%3abtn_donate_LG%2egif%3aNonHosted" target="_blank">' . __( 'Donate a few bucks!', 'subscribe-reloaded' ) . '</a>';
|
1312 |
+
}
|
1313 |
+
|
1314 |
+
return $contextual_help;
|
1315 |
+
}
|
1316 |
+
// end contextual_help
|
1317 |
+
|
1318 |
+
/**
|
1319 |
+
* Returns the URL of the management page as a shortcode
|
1320 |
+
*/
|
1321 |
+
public function subscribe_url_shortcode() {
|
1322 |
+
global $post;
|
1323 |
+
$user_link = get_bloginfo( 'url' ) . get_option( 'subscribe_reloaded_manager_page', '' );
|
1324 |
+
if ( function_exists( 'qtrans_convertURL' ) ) {
|
1325 |
+
$user_link = qtrans_convertURL( $user_link );
|
1326 |
+
}
|
1327 |
+
if ( strpos( $user_link, '?' ) !== false ) {
|
1328 |
+
return "$user_link&srp=$post->ID&sra=s";
|
1329 |
+
} else {
|
1330 |
+
return "$user_link?srp=$post->ID&sra=s";
|
1331 |
+
}
|
1332 |
+
}
|
1333 |
+
// end subscribe_url_shortcode
|
1334 |
+
|
1335 |
+
/**
|
1336 |
+
* Copies the information from the stand-alone table to WP's core table
|
1337 |
+
*/
|
1338 |
+
private function _update_db() {
|
1339 |
+
global $wpdb;
|
1340 |
+
$stcr_table = $wpdb->get_col( "SHOW TABLES LIKE '{$wpdb->prefix}subscribe_reloaded'" );
|
1341 |
+
|
1342 |
+
// Perform the import only if the target table does not contain any subscriptions
|
1343 |
+
$count_postmeta_rows = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->postmeta WHERE meta_key LIKE '\_stcr@\_%'" );
|
1344 |
+
if ( ! empty( $stcr_table ) && $count_postmeta_rows == 0 ) {
|
1345 |
+
$wpdb->query(
|
1346 |
+
"
|
1347 |
+
INSERT INTO $wpdb->postmeta (post_id, meta_key, meta_value)
|
1348 |
+
SELECT post_ID, CONCAT('_stcr@_', email), CONCAT(dt, '|Y')
|
1349 |
+
FROM {$wpdb->prefix}subscribe_reloaded
|
1350 |
+
WHERE email LIKE '%@%.%' AND status = 'Y'
|
1351 |
+
GROUP BY email, post_ID"
|
1352 |
+
);
|
1353 |
+
}
|
1354 |
+
}
|
1355 |
+
// end _update_db
|
1356 |
+
|
1357 |
+
/**
|
1358 |
+
* Imports subscription data created with the Subscribe to Comments plugin
|
1359 |
+
*/
|
1360 |
+
private function _import_stc_data() {
|
1361 |
+
global $wpdb;
|
1362 |
+
|
1363 |
+
// Import the information collected by Subscribe to Comments, if needed
|
1364 |
+
$result = $wpdb->get_row( "DESC $wpdb->comments comment_subscribe", ARRAY_A );
|
1365 |
+
|
1366 |
+
// Perform the import only if the target table does not contain any subscriptions
|
1367 |
+
$count_postmeta_rows = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->postmeta WHERE meta_key LIKE '\_stcr@\_%'" );
|
1368 |
+
|
1369 |
+
if ( ! empty( $result ) && is_array( $result ) && $count_postmeta_rows == 0 ) {
|
1370 |
+
$wpdb->query(
|
1371 |
+
"
|
1372 |
+
INSERT INTO $wpdb->postmeta (post_id, meta_key, meta_value)
|
1373 |
+
SELECT comment_post_ID, CONCAT('_stcr@_', comment_author_email), CONCAT(comment_date, '|Y')
|
1374 |
+
FROM $wpdb->comments
|
1375 |
+
WHERE comment_author_email LIKE '%@%.%' AND comment_subscribe = 'Y'
|
1376 |
+
GROUP BY comment_post_ID, comment_author_email"
|
1377 |
+
);
|
1378 |
+
|
1379 |
+
$notices = get_option( 'subscribe_reloaded_deferred_admin_notices', array() );
|
1380 |
+
$notices[] = '<div class="updated"><h3>' . __( 'Important Notice', 'subscribe-reloaded' ) . '</h3>' .
|
1381 |
+
'<p>' . __( 'Comment subscription data from the <strong>Subscribe to Comments</strong> plugin was detected and automatically imported into <strong>Subscribe to Comments Reloaded</strong>.', 'subscribe-reloaded' ) . ( is_plugin_active( 'subscribe-to-comments/subscribe-to-comments.php' ) ? __( ' It is recommended that you now <strong>deactivate</strong> Subscribe to Comments to prevent confusion between the two plugins.', 'subscribe-reloaded' ) : '' ) . '</p>' .
|
1382 |
+
'<p>' . __( 'If you have subscription data from Subscribe to Comments Reloaded < v2.0 that you want to import, you\'ll need to import that data manually, as only one import routine will ever run to prevent data loss.', 'subscribe-reloaded' ) . '</p>' .
|
1383 |
+
'<p>' . __( 'Please visit <a href="options-general.php?page=subscribe-to-comments-reloaded/options/index.php">Settings -> Subscribe to Comments</a> to review your configuration.', 'subscribe-reloaded' ) . '</p></div>';
|
1384 |
+
update_option( 'subscribe_reloaded_deferred_admin_notices', $notices );
|
1385 |
+
}
|
1386 |
+
}
|
1387 |
+
// end _import_stc_data
|
1388 |
+
|
1389 |
+
/**
|
1390 |
+
* Imports options and subscription data created with the WP Comment Subscriptions plugin
|
1391 |
+
*/
|
1392 |
+
private function _import_wpcs_data() {
|
1393 |
+
global $wpdb;
|
1394 |
+
|
1395 |
+
// Import the information collected by WP Comment Subscriptions, if needed
|
1396 |
+
$wpcs_data_count = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->postmeta WHERE meta_key LIKE '\_wpcs@\_%'" );
|
1397 |
+
|
1398 |
+
// Perform the import only if the target table does not contain any subscriptions
|
1399 |
+
$count_postmeta_rows = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->postmeta WHERE meta_key LIKE '\_stcr@\_%'" );
|
1400 |
+
|
1401 |
+
if ( ! empty( $wpcs_data_count ) && $count_postmeta_rows == 0 ) {
|
1402 |
+
$wpdb->query(
|
1403 |
+
"
|
1404 |
+
INSERT INTO $wpdb->postmeta (post_id, meta_key, meta_value)
|
1405 |
+
SELECT post_id, REPLACE(meta_key, '_wpcs@_', '_stcr@_') meta_key, meta_value
|
1406 |
+
FROM $wpdb->postmeta
|
1407 |
+
WHERE meta_key LIKE '%_wpcs@_%'"
|
1408 |
+
);
|
1409 |
+
|
1410 |
+
if ( $option = get_option( 'wp_comment_subscriptions_manager_page' ) ) {
|
1411 |
+
add_option( 'subscribe_reloaded_manager_page', $option );
|
1412 |
+
}
|
1413 |
+
if ( $option = get_option( 'wp_comment_subscriptions_show_subscription_box' ) ) {
|
1414 |
+
add_option( 'subscribe_reloaded_show_subscription_box', $option );
|
1415 |
+
}
|
1416 |
+
if ( $option = get_option( 'wp_comment_subscriptions_checked_by_default' ) ) {
|
1417 |
+
add_option( 'subscribe_reloaded_checked_by_default', $option );
|
1418 |
+
}
|
1419 |
+
if ( $option = get_option( 'wp_comment_subscriptions_enable_advanced_subscriptions' ) ) {
|
1420 |
+
add_option( 'subscribe_reloaded_enable_advanced_subscriptions', $option );
|
1421 |
+
}
|
1422 |
+
if ( $option = get_option( 'wp_comment_subscriptions_checkbox_inline_style' ) ) {
|
1423 |
+
add_option( 'subscribe_reloaded_checkbox_inline_style', $option );
|
1424 |
+
}
|
1425 |
+
if ( $option = get_option( 'wp_comment_subscriptions_checkbox_html' ) ) {
|
1426 |
+
add_option( 'subscribe_reloaded_checkbox_html', $option );
|
1427 |
+
}
|
1428 |
+
if ( $option = get_option( 'wp_comment_subscriptions_checkbox_label' ) ) {
|
1429 |
+
add_option( 'subscribe_reloaded_checkbox_label', $option );
|
1430 |
+
}
|
1431 |
+
if ( $option = get_option( 'wp_comment_subscriptions_subscribed_label' ) ) {
|
1432 |
+
add_option( 'subscribe_reloaded_subscribed_label', $option );
|
1433 |
+
}
|
1434 |
+
if ( $option = get_option( 'wp_comment_subscriptions_subscribed_waiting_label' ) ) {
|
1435 |
+
add_option( 'subscribe_reloaded_subscribed_waiting_label', $option );
|
1436 |
+
}
|
1437 |
+
if ( $option = get_option( 'wp_comment_subscriptions_author_label' ) ) {
|
1438 |
+
add_option( 'subscribe_reloaded_author_label', $option );
|
1439 |
+
}
|
1440 |
+
if ( $option = get_option( 'wp_comment_subscriptions_htmlify_message_links' ) ) {
|
1441 |
+
add_option( 'subscribe_reloaded_htmlify_message_links', $option );
|
1442 |
+
}
|
1443 |
+
|
1444 |
+
if ( $option = get_option( 'wp_comment_subscriptions_manager_page_enabled' ) ) {
|
1445 |
+
add_option( 'subscribe_reloaded_manager_page_enabled', $option );
|
1446 |
+
}
|
1447 |
+
if ( $option = get_option( 'wp_comment_subscriptions_manager_page_title' ) ) {
|
1448 |
+
add_option( 'subscribe_reloaded_manager_page_title', $option );
|
1449 |
+
}
|
1450 |
+
if ( $option = get_option( 'wp_comment_subscriptions_custom_header_meta' ) ) {
|
1451 |
+
add_option( 'subscribe_reloaded_custom_header_meta', $option );
|
1452 |
+
}
|
1453 |
+
if ( $option = get_option( 'wp_comment_subscriptions_request_mgmt_link' ) ) {
|
1454 |
+
add_option( 'subscribe_reloaded_request_mgmt_link', $option );
|
1455 |
+
}
|
1456 |
+
if ( $option = get_option( 'wp_comment_subscriptions_request_mgmt_link_thankyou' ) ) {
|
1457 |
+
add_option( 'subscribe_reloaded_request_mgmt_link_thankyou', $option );
|
1458 |
+
}
|
1459 |
+
if ( $option = get_option( 'wp_comment_subscriptions_subscribe_without_commenting' ) ) {
|
1460 |
+
add_option( 'subscribe_reloaded_subscribe_without_commenting', $option );
|
1461 |
+
}
|
1462 |
+
if ( $option = get_option( 'wp_comment_subscriptions_subscription_confirmed' ) ) {
|
1463 |
+
add_option( 'subscribe_reloaded_subscription_confirmed', $option );
|
1464 |
+
}
|
1465 |
+
if ( $option = get_option( 'wp_comment_subscriptions_subscription_confirmed_dci' ) ) {
|
1466 |
+
add_option( 'subscribe_reloaded_subscription_confirmed_dci', $option );
|
1467 |
+
}
|
1468 |
+
if ( $option = get_option( 'wp_comment_subscriptions_author_text' ) ) {
|
1469 |
+
add_option( 'subscribe_reloaded_author_text', $option );
|
1470 |
+
}
|
1471 |
+
if ( $option = get_option( 'wp_comment_subscriptions_user_text' ) ) {
|
1472 |
+
add_option( 'subscribe_reloaded_user_text', $option );
|
1473 |
+
}
|
1474 |
+
|
1475 |
+
if ( $option = get_option( 'wp_comment_subscriptions_from_name' ) ) {
|
1476 |
+
add_option( 'subscribe_reloaded_from_name', $option );
|
1477 |
+
}
|
1478 |
+
if ( $option = get_option( 'wp_comment_subscriptions_from_email' ) ) {
|
1479 |
+
add_option( 'subscribe_reloaded_from_email', $option );
|
1480 |
+
}
|
1481 |
+
if ( $option = get_option( 'wp_comment_subscriptions_notification_subject' ) ) {
|
1482 |
+
add_option( 'subscribe_reloaded_notification_subject', $option );
|
1483 |
+
}
|
1484 |
+
if ( $option = get_option( 'wp_comment_subscriptions_notification_content' ) ) {
|
1485 |
+
add_option( 'subscribe_reloaded_notification_content', $option );
|
1486 |
+
}
|
1487 |
+
if ( $option = get_option( 'wp_comment_subscriptions_double_check_subject' ) ) {
|
1488 |
+
add_option( 'subscribe_reloaded_double_check_subject', $option );
|
1489 |
+
}
|
1490 |
+
if ( $option = get_option( 'wp_comment_subscriptions_double_check_content' ) ) {
|
1491 |
+
add_option( 'subscribe_reloaded_double_check_content', $option );
|
1492 |
+
}
|
1493 |
+
if ( $option = get_option( 'wp_comment_subscriptions_management_subject' ) ) {
|
1494 |
+
add_option( 'subscribe_reloaded_management_subject', $option );
|
1495 |
+
}
|
1496 |
+
if ( $option = get_option( 'wp_comment_subscriptions_management_content' ) ) {
|
1497 |
+
add_option( 'subscribe_reloaded_management_content', $option );
|
1498 |
+
}
|
1499 |
+
|
1500 |
+
if ( $option = get_option( 'wp_comment_subscriptions_purge_days' ) ) {
|
1501 |
+
add_option( 'subscribe_reloaded_purge_days', $option );
|
1502 |
+
}
|
1503 |
+
if ( $option = get_option( 'wp_comment_subscriptions_enable_double_check' ) ) {
|
1504 |
+
add_option( 'subscribe_reloaded_enable_double_check', $option );
|
1505 |
+
}
|
1506 |
+
if ( $option = get_option( 'wp_comment_subscriptions_notify_authors' ) ) {
|
1507 |
+
add_option( 'subscribe_reloaded_notify_authors', $option );
|
1508 |
+
}
|
1509 |
+
if ( $option = get_option( 'wp_comment_subscriptions_enable_html_emails' ) ) {
|
1510 |
+
add_option( 'subscribe_reloaded_enable_html_emails', $option );
|
1511 |
+
}
|
1512 |
+
if ( $option = get_option( 'wp_comment_subscriptions_process_trackbacks' ) ) {
|
1513 |
+
add_option( 'subscribe_reloaded_process_trackbacks', $option );
|
1514 |
+
}
|
1515 |
+
if ( $option = get_option( 'wp_comment_subscriptions_enable_admin_messages' ) ) {
|
1516 |
+
add_option( 'subscribe_reloaded_enable_admin_messages', $option );
|
1517 |
+
}
|
1518 |
+
if ( $option = get_option( 'wp_comment_subscriptions_admin_subscribe' ) ) {
|
1519 |
+
add_option( 'subscribe_reloaded_admin_subscribe', $option );
|
1520 |
+
}
|
1521 |
+
if ( $option = get_option( 'wp_comment_subscriptions_admin_bcc' ) ) {
|
1522 |
+
add_option( 'subscribe_reloaded_admin_bcc', $option );
|
1523 |
+
}
|
1524 |
+
|
1525 |
+
$notices = get_option( 'subscribe_reloaded_deferred_admin_notices', array() );
|
1526 |
+
$notices[] = '<div class="updated"><h3>' . __( 'Important Notice', 'subscribe-reloaded' ) . '</h3>' .
|
1527 |
+
'<p>' . __( 'Plugin options and comment subscription data from the <strong>WP Comment Subscriptions</strong> plugin were detected and automatically imported into <strong>Subscribe to Comments Reloaded</strong>.', 'subscribe-reloaded' ) . ( is_plugin_active( 'wp-comment-subscriptions/wp-comment-subscriptions.php' ) ? __( ' It is recommended that you now <strong>deactivate</strong> WP Comment Subscriptions to prevent confusion between the two plugins.', 'subscribe-reloaded' ) : '' ) . '</p>' .
|
1528 |
+
'<p>' . __( 'If you have subscription data from another plugin (such as Subscribe to Comments or Subscribe to Comments Reloaded < v2.0) that you want to import, you\'ll need to import that data manually, as only one import routine will ever run to prevent data loss.', 'subscribe-reloaded' ) . '</p>' .
|
1529 |
+
'<p>' . __( '<strong>Note:</strong> If you were previously using the <code>wp_comment_subscriptions_show()</code> function or the <code>[wpcs-subscribe-url]</code> shortcode, you\'ll need to replace those with <code>subscribe_reloaded_show()</code> and <code>[subscribe-url]</code> respectively.', 'subscribe-reloaded' ) . '</p>' .
|
1530 |
+
'<p>' . __( 'Please visit <a href="options-general.php?page=subscribe-to-comments-reloaded/options/index.php">Settings -> Subscribe to Comments</a> to review your configuration.', 'subscribe-reloaded' ) . '</p></div>';
|
1531 |
+
update_option( 'subscribe_reloaded_deferred_admin_notices', $notices );
|
1532 |
+
}
|
1533 |
+
}
|
1534 |
+
// end _import_wpcs_data
|
1535 |
+
|
1536 |
+
/**
|
1537 |
+
* Retrieves the comment information from the databse
|
1538 |
+
*/
|
1539 |
+
private function _get_comment_object( $_comment_ID ) {
|
1540 |
+
global $wpdb;
|
1541 |
+
|
1542 |
+
return $wpdb->get_row(
|
1543 |
+
$wpdb->prepare(
|
1544 |
+
"
|
1545 |
+
SELECT comment_post_ID, comment_author_email, comment_approved, comment_type, comment_parent
|
1546 |
+
FROM $wpdb->comments
|
1547 |
+
WHERE comment_ID = %d LIMIT 1", $_comment_ID
|
1548 |
+
), OBJECT
|
1549 |
+
);
|
1550 |
+
}
|
1551 |
+
// end _get_comment_object
|
1552 |
+
|
1553 |
+
/**
|
1554 |
+
* Checks if a key is valid for a given email address
|
1555 |
+
*/
|
1556 |
+
private function _is_valid_key( $_key, $_email ) {
|
1557 |
+
return $this->generate_key( $_email ) == $_key;
|
1558 |
+
}
|
1559 |
+
// end _is_valid_key
|
1560 |
+
}
|
1561 |
+
|
1562 |
+
// end of class declaration
|
1563 |
+
|
1564 |
+
// Bootstrap the whole thing
|
1565 |
+
$wp_subscribe_reloaded = new wp_subscribe_reloaded();
|
1566 |
+
// Set a cookie if the user just subscribed without commenting
|
1567 |
+
$subscribe_to_comments_action = ! empty( $_POST['sra'] ) ? $_POST['sra'] : ( ! empty( $_GET['sra'] ) ? $_GET['sra'] : 0 );
|
1568 |
+
$subscribe_to_comments_post_ID = ! empty( $_POST['srp'] ) ? intval( $_POST['srp'] ) : ( ! empty( $_GET['srp'] ) ? intval( $_GET['srp'] ) : 0 );
|
1569 |
+
|
1570 |
+
if ( ! empty( $subscribe_to_comments_action ) && ! empty( $_POST['subscribe_reloaded_email'] ) &&
|
1571 |
+
( $subscribe_to_comments_action == 's' ) && ( $subscribe_to_comments_post_ID > 0 )
|
1572 |
+
) {
|
1573 |
+
$subscribe_to_comments_clean_email = $wp_subscribe_reloaded->clean_email( $_POST['subscribe_reloaded_email'] );
|
1574 |
+
setcookie( 'comment_author_email' . COOKIEHASH, $subscribe_to_comments_clean_email, time() + 1209600, '/' );
|
1575 |
+
}
|