Subscribe To Comments Reloaded - Version 1.0

Version Description

  • First beta release
Download this release

Release Info

Developer coolmann
Plugin Icon 128x128 Subscribe To Comments Reloaded
Version 1.0
Comparing to
See all releases

Version 1.0

LICENSE.txt ADDED
@@ -0,0 +1,340 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ GNU GENERAL PUBLIC LICENSE
2
+ Version 2, June 1991
3
+
4
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
5
+ 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
6
+ Everyone is permitted to copy and distribute verbatim copies
7
+ of this license document, but changing it is not allowed.
8
+
9
+ Preamble
10
+
11
+ The licenses for most software are designed to take away your
12
+ freedom to share and change it. By contrast, the GNU General Public
13
+ License is intended to guarantee your freedom to share and change free
14
+ software--to make sure the software is free for all its users. This
15
+ General Public License applies to most of the Free Software
16
+ Foundation's software and to any other program whose authors commit to
17
+ using it. (Some other Free Software Foundation software is covered by
18
+ the GNU Library General Public License instead.) You can apply it to
19
+ your programs, too.
20
+
21
+ When we speak of free software, we are referring to freedom, not
22
+ price. Our General Public Licenses are designed to make sure that you
23
+ have the freedom to distribute copies of free software (and charge for
24
+ this service if you wish), that you receive source code or can get it
25
+ if you want it, that you can change the software or use pieces of it
26
+ in new free programs; and that you know you can do these things.
27
+
28
+ To protect your rights, we need to make restrictions that forbid
29
+ anyone to deny you these rights or to ask you to surrender the rights.
30
+ These restrictions translate to certain responsibilities for you if you
31
+ distribute copies of the software, or if you modify it.
32
+
33
+ For example, if you distribute copies of such a program, whether
34
+ gratis or for a fee, you must give the recipients all the rights that
35
+ you have. You must make sure that they, too, receive or can get the
36
+ source code. And you must show them these terms so they know their
37
+ rights.
38
+
39
+ We protect your rights with two steps: (1) copyright the software, and
40
+ (2) offer you this license which gives you legal permission to copy,
41
+ distribute and/or modify the software.
42
+
43
+ Also, for each author's protection and ours, we want to make certain
44
+ that everyone understands that there is no warranty for this free
45
+ software. If the software is modified by someone else and passed on, we
46
+ want its recipients to know that what they have is not the original, so
47
+ that any problems introduced by others will not reflect on the original
48
+ authors' reputations.
49
+
50
+ Finally, any free program is threatened constantly by software
51
+ patents. We wish to avoid the danger that redistributors of a free
52
+ program will individually obtain patent licenses, in effect making the
53
+ program proprietary. To prevent this, we have made it clear that any
54
+ patent must be licensed for everyone's free use or not licensed at all.
55
+
56
+ The precise terms and conditions for copying, distribution and
57
+ modification follow.
58
+
59
+ GNU GENERAL PUBLIC LICENSE
60
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
61
+
62
+ 0. This License applies to any program or other work which contains
63
+ a notice placed by the copyright holder saying it may be distributed
64
+ under the terms of this General Public License. The "Program", below,
65
+ refers to any such program or work, and a "work based on the Program"
66
+ means either the Program or any derivative work under copyright law:
67
+ that is to say, a work containing the Program or a portion of it,
68
+ either verbatim or with modifications and/or translated into another
69
+ language. (Hereinafter, translation is included without limitation in
70
+ the term "modification".) Each licensee is addressed as "you".
71
+
72
+ Activities other than copying, distribution and modification are not
73
+ covered by this License; they are outside its scope. The act of
74
+ running the Program is not restricted, and the output from the Program
75
+ is covered only if its contents constitute a work based on the
76
+ Program (independent of having been made by running the Program).
77
+ Whether that is true depends on what the Program does.
78
+
79
+ 1. You may copy and distribute verbatim copies of the Program's
80
+ source code as you receive it, in any medium, provided that you
81
+ conspicuously and appropriately publish on each copy an appropriate
82
+ copyright notice and disclaimer of warranty; keep intact all the
83
+ notices that refer to this License and to the absence of any warranty;
84
+ and give any other recipients of the Program a copy of this License
85
+ along with the Program.
86
+
87
+ You may charge a fee for the physical act of transferring a copy, and
88
+ you may at your option offer warranty protection in exchange for a fee.
89
+
90
+ 2. You may modify your copy or copies of the Program or any portion
91
+ of it, thus forming a work based on the Program, and copy and
92
+ distribute such modifications or work under the terms of Section 1
93
+ above, provided that you also meet all of these conditions:
94
+
95
+ a) You must cause the modified files to carry prominent notices
96
+ stating that you changed the files and the date of any change.
97
+
98
+ b) You must cause any work that you distribute or publish, that in
99
+ whole or in part contains or is derived from the Program or any
100
+ part thereof, to be licensed as a whole at no charge to all third
101
+ parties under the terms of this License.
102
+
103
+ c) If the modified program normally reads commands interactively
104
+ when run, you must cause it, when started running for such
105
+ interactive use in the most ordinary way, to print or display an
106
+ announcement including an appropriate copyright notice and a
107
+ notice that there is no warranty (or else, saying that you provide
108
+ a warranty) and that users may redistribute the program under
109
+ these conditions, and telling the user how to view a copy of this
110
+ License. (Exception: if the Program itself is interactive but
111
+ does not normally print such an announcement, your work based on
112
+ the Program is not required to print an announcement.)
113
+
114
+ These requirements apply to the modified work as a whole. If
115
+ identifiable sections of that work are not derived from the Program,
116
+ and can be reasonably considered independent and separate works in
117
+ themselves, then this License, and its terms, do not apply to those
118
+ sections when you distribute them as separate works. But when you
119
+ distribute the same sections as part of a whole which is a work based
120
+ on the Program, the distribution of the whole must be on the terms of
121
+ this License, whose permissions for other licensees extend to the
122
+ entire whole, and thus to each and every part regardless of who wrote it.
123
+
124
+ Thus, it is not the intent of this section to claim rights or contest
125
+ your rights to work written entirely by you; rather, the intent is to
126
+ exercise the right to control the distribution of derivative or
127
+ collective works based on the Program.
128
+
129
+ In addition, mere aggregation of another work not based on the Program
130
+ with the Program (or with a work based on the Program) on a volume of
131
+ a storage or distribution medium does not bring the other work under
132
+ the scope of this License.
133
+
134
+ 3. You may copy and distribute the Program (or a work based on it,
135
+ under Section 2) in object code or executable form under the terms of
136
+ Sections 1 and 2 above provided that you also do one of the following:
137
+
138
+ a) Accompany it with the complete corresponding machine-readable
139
+ source code, which must be distributed under the terms of Sections
140
+ 1 and 2 above on a medium customarily used for software interchange; or,
141
+
142
+ b) Accompany it with a written offer, valid for at least three
143
+ years, to give any third party, for a charge no more than your
144
+ cost of physically performing source distribution, a complete
145
+ machine-readable copy of the corresponding source code, to be
146
+ distributed under the terms of Sections 1 and 2 above on a medium
147
+ customarily used for software interchange; or,
148
+
149
+ c) Accompany it with the information you received as to the offer
150
+ to distribute corresponding source code. (This alternative is
151
+ allowed only for noncommercial distribution and only if you
152
+ received the program in object code or executable form with such
153
+ an offer, in accord with Subsection b above.)
154
+
155
+ The source code for a work means the preferred form of the work for
156
+ making modifications to it. For an executable work, complete source
157
+ code means all the source code for all modules it contains, plus any
158
+ associated interface definition files, plus the scripts used to
159
+ control compilation and installation of the executable. However, as a
160
+ special exception, the source code distributed need not include
161
+ anything that is normally distributed (in either source or binary
162
+ form) with the major components (compiler, kernel, and so on) of the
163
+ operating system on which the executable runs, unless that component
164
+ itself accompanies the executable.
165
+
166
+ If distribution of executable or object code is made by offering
167
+ access to copy from a designated place, then offering equivalent
168
+ access to copy the source code from the same place counts as
169
+ distribution of the source code, even though third parties are not
170
+ compelled to copy the source along with the object code.
171
+
172
+ 4. You may not copy, modify, sublicense, or distribute the Program
173
+ except as expressly provided under this License. Any attempt
174
+ otherwise to copy, modify, sublicense or distribute the Program is
175
+ void, and will automatically terminate your rights under this License.
176
+ However, parties who have received copies, or rights, from you under
177
+ this License will not have their licenses terminated so long as such
178
+ parties remain in full compliance.
179
+
180
+ 5. You are not required to accept this License, since you have not
181
+ signed it. However, nothing else grants you permission to modify or
182
+ distribute the Program or its derivative works. These actions are
183
+ prohibited by law if you do not accept this License. Therefore, by
184
+ modifying or distributing the Program (or any work based on the
185
+ Program), you indicate your acceptance of this License to do so, and
186
+ all its terms and conditions for copying, distributing or modifying
187
+ the Program or works based on it.
188
+
189
+ 6. Each time you redistribute the Program (or any work based on the
190
+ Program), the recipient automatically receives a license from the
191
+ original licensor to copy, distribute or modify the Program subject to
192
+ these terms and conditions. You may not impose any further
193
+ restrictions on the recipients' exercise of the rights granted herein.
194
+ You are not responsible for enforcing compliance by third parties to
195
+ this License.
196
+
197
+ 7. If, as a consequence of a court judgment or allegation of patent
198
+ infringement or for any other reason (not limited to patent issues),
199
+ conditions are imposed on you (whether by court order, agreement or
200
+ otherwise) that contradict the conditions of this License, they do not
201
+ excuse you from the conditions of this License. If you cannot
202
+ distribute so as to satisfy simultaneously your obligations under this
203
+ License and any other pertinent obligations, then as a consequence you
204
+ may not distribute the Program at all. For example, if a patent
205
+ license would not permit royalty-free redistribution of the Program by
206
+ all those who receive copies directly or indirectly through you, then
207
+ the only way you could satisfy both it and this License would be to
208
+ refrain entirely from distribution of the Program.
209
+
210
+ If any portion of this section is held invalid or unenforceable under
211
+ any particular circumstance, the balance of the section is intended to
212
+ apply and the section as a whole is intended to apply in other
213
+ circumstances.
214
+
215
+ It is not the purpose of this section to induce you to infringe any
216
+ patents or other property right claims or to contest validity of any
217
+ such claims; this section has the sole purpose of protecting the
218
+ integrity of the free software distribution system, which is
219
+ implemented by public license practices. Many people have made
220
+ generous contributions to the wide range of software distributed
221
+ through that system in reliance on consistent application of that
222
+ system; it is up to the author/donor to decide if he or she is willing
223
+ to distribute software through any other system and a licensee cannot
224
+ impose that choice.
225
+
226
+ This section is intended to make thoroughly clear what is believed to
227
+ be a consequence of the rest of this License.
228
+
229
+ 8. If the distribution and/or use of the Program is restricted in
230
+ certain countries either by patents or by copyrighted interfaces, the
231
+ original copyright holder who places the Program under this License
232
+ may add an explicit geographical distribution limitation excluding
233
+ those countries, so that distribution is permitted only in or among
234
+ countries not thus excluded. In such case, this License incorporates
235
+ the limitation as if written in the body of this License.
236
+
237
+ 9. The Free Software Foundation may publish revised and/or new versions
238
+ of the General Public License from time to time. Such new versions will
239
+ be similar in spirit to the present version, but may differ in detail to
240
+ address new problems or concerns.
241
+
242
+ Each version is given a distinguishing version number. If the Program
243
+ specifies a version number of this License which applies to it and "any
244
+ later version", you have the option of following the terms and conditions
245
+ either of that version or of any later version published by the Free
246
+ Software Foundation. If the Program does not specify a version number of
247
+ this License, you may choose any version ever published by the Free Software
248
+ Foundation.
249
+
250
+ 10. If you wish to incorporate parts of the Program into other free
251
+ programs whose distribution conditions are different, write to the author
252
+ to ask for permission. For software which is copyrighted by the Free
253
+ Software Foundation, write to the Free Software Foundation; we sometimes
254
+ make exceptions for this. Our decision will be guided by the two goals
255
+ of preserving the free status of all derivatives of our free software and
256
+ of promoting the sharing and reuse of software generally.
257
+
258
+ NO WARRANTY
259
+
260
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
261
+ FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
262
+ OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
263
+ PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
264
+ OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
265
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
266
+ TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
267
+ PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
268
+ REPAIR OR CORRECTION.
269
+
270
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
271
+ WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
272
+ REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
273
+ INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
274
+ OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
275
+ TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
276
+ YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
277
+ PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
278
+ POSSIBILITY OF SUCH DAMAGES.
279
+
280
+ END OF TERMS AND CONDITIONS
281
+
282
+ How to Apply These Terms to Your New Programs
283
+
284
+ If you develop a new program, and you want it to be of the greatest
285
+ possible use to the public, the best way to achieve this is to make it
286
+ free software which everyone can redistribute and change under these terms.
287
+
288
+ To do so, attach the following notices to the program. It is safest
289
+ to attach them to the start of each source file to most effectively
290
+ convey the exclusion of warranty; and each file should have at least
291
+ the "copyright" line and a pointer to where the full notice is found.
292
+
293
+ <one line to give the program's name and a brief idea of what it does.>
294
+ Copyright (C) <year> <name of author>
295
+
296
+ This program is free software; you can redistribute it and/or modify
297
+ it under the terms of the GNU General Public License as published by
298
+ the Free Software Foundation; either version 2 of the License, or
299
+ (at your option) any later version.
300
+
301
+ This program is distributed in the hope that it will be useful,
302
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
303
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
304
+ GNU General Public License for more details.
305
+
306
+ You should have received a copy of the GNU General Public License
307
+ along with this program; if not, write to the Free Software
308
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
309
+
310
+
311
+ Also add information on how to contact you by electronic and paper mail.
312
+
313
+ If the program is interactive, make it output a short notice like this
314
+ when it starts in an interactive mode:
315
+
316
+ Gnomovision version 69, Copyright (C) year name of author
317
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
318
+ This is free software, and you are welcome to redistribute it
319
+ under certain conditions; type `show c' for details.
320
+
321
+ The hypothetical commands `show w' and `show c' should show the appropriate
322
+ parts of the General Public License. Of course, the commands you use may
323
+ be called something other than `show w' and `show c'; they could even be
324
+ mouse-clicks or menu items--whatever suits your program.
325
+
326
+ You should also get your employer (if you work as a programmer) or your
327
+ school, if any, to sign a "copyright disclaimer" for the program, if
328
+ necessary. Here is a sample; alter the names:
329
+
330
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
331
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
332
+
333
+ <signature of Ty Coon>, 1 April 1989
334
+ Ty Coon, President of Vice
335
+
336
+ This General Public License does not permit incorporating your program into
337
+ proprietary programs. If your program is a subroutine library, you may
338
+ consider it more useful to permit linking proprietary applications with the
339
+ library. If this is what you want to do, use the GNU Library General
340
+ Public License instead of this License.
langs/subscribe-reloaded-it_IT.mo ADDED
Binary file
langs/subscribe-reloaded-it_IT.po ADDED
@@ -0,0 +1,808 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: WP Slim Stat 2.0\n"
4
+ "Report-Msgid-Bugs-To: \n"
5
+ "POT-Creation-Date: 2010-09-30 13:40-0500\n"
6
+ "PO-Revision-Date: 2010-09-30 13:43-0500\n"
7
+ "Last-Translator: Camu <info@duechiacchiere.it>\n"
8
+ "Language-Team: due chiacchiere <info@duechiacchiere.it>\n"
9
+ "MIME-Version: 1.0\n"
10
+ "Content-Type: text/plain; charset=UTF-8\n"
11
+ "Content-Transfer-Encoding: 8bit\n"
12
+ "X-Poedit-Language: Italian\n"
13
+ "X-Poedit-Country: ITALY\n"
14
+ "X-Poedit-KeywordsList: __;_e\n"
15
+ "X-Poedit-Basepath: .\n"
16
+ "Plural-Forms: s\n"
17
+ "X-Poedit-SearchPath-0: .\n"
18
+
19
+ #: options.php:46
20
+ #: options.php:106
21
+ msgid "Management Page ID"
22
+ msgstr "ID Pagina di gestione"
23
+
24
+ #: options.php:47
25
+ #: options.php:114
26
+ msgid "Autopurge requests"
27
+ msgstr "Pulizia DB"
28
+
29
+ #: options.php:48
30
+ #: options.php:122
31
+ msgid "Sender name"
32
+ msgstr "Nome del mittente"
33
+
34
+ #: options.php:49
35
+ #: options.php:130
36
+ msgid "Sender email address"
37
+ msgstr "Indirizzo email mittente"
38
+
39
+ #: options.php:50
40
+ #: options.php:138
41
+ msgid "Notification subject"
42
+ msgstr "Oggetto della notifica"
43
+
44
+ #: options.php:51
45
+ #: options.php:146
46
+ msgid "Notification message"
47
+ msgstr "Contenuto della notifica"
48
+
49
+ #: options.php:52
50
+ #: options.php:154
51
+ msgid "Checkbox label"
52
+ msgstr "Descrizione del checkbox"
53
+
54
+ #: options.php:53
55
+ #: options.php:162
56
+ msgid "Checked by default"
57
+ msgstr "Spuntato per default"
58
+
59
+ #: options.php:54
60
+ #: options.php:173
61
+ msgid "Subscribed label"
62
+ msgstr "Descrizione per gli iscritti"
63
+
64
+ #: options.php:55
65
+ #: options.php:181
66
+ msgid "Awaiting label"
67
+ msgstr "Notifiche in attesa"
68
+
69
+ #: options.php:56
70
+ #: options.php:189
71
+ msgid "Author label"
72
+ msgstr "Descrizione per l'autore"
73
+
74
+ #: options.php:57
75
+ #: options.php:197
76
+ msgid "Enable double check"
77
+ msgstr "Attiva doppia conferma"
78
+
79
+ #: options.php:58
80
+ #: options.php:208
81
+ msgid "Double check subject"
82
+ msgstr "Oggetto doppia conferma"
83
+
84
+ #: options.php:59
85
+ #: options.php:216
86
+ msgid "Double check message"
87
+ msgstr "Contenuto doppia conferma"
88
+
89
+ #: options.php:60
90
+ #: options.php:224
91
+ msgid "Management subject"
92
+ msgstr "Oggetto email di gestione"
93
+
94
+ #: options.php:61
95
+ #: options.php:232
96
+ msgid "Management message"
97
+ msgstr "Contenuto email di gestione"
98
+
99
+ #: options.php:67
100
+ msgid "Your settings have been successfully updated."
101
+ msgstr "La configurazione &egrave; stata aggiornata con successo."
102
+
103
+ #: options.php:74
104
+ msgid "There was an error updating the following fields:"
105
+ msgstr "Si &egrave; verificato un errore nell'aggiornamento dei seguenti campi:"
106
+
107
+ #: options.php:101
108
+ msgid "Subscribe to Comments"
109
+ msgstr "Sottoscrivi i commenti"
110
+
111
+ #: options.php:110
112
+ msgid "The ID (<strong>not the permalink!</strong>) of the management page you created."
113
+ msgstr "L'ID (<strong>non il permalink!</strong>) della pagina di gestione che hai creato."
114
+
115
+ #: options.php:118
116
+ msgid "Delete pending subscriptions (not confirmed) after X days. Zero disables this feature."
117
+ msgstr "Cancella le iscrizioni non confermate dopo X giorni. Zero disabilita la funzione."
118
+
119
+ #: options.php:126
120
+ msgid "Name to use for the \"from\" field when sending a new notification to the user."
121
+ msgstr "Nome da usare nel campo From quando il sistema invia una notifica all'utente."
122
+
123
+ #: options.php:134
124
+ msgid "Email address to use for the \"from\" field when sending a new notification to the user."
125
+ msgstr "Indirizzo email da usare nel campo From."
126
+
127
+ #: options.php:142
128
+ msgid "Subject of the notification email. Allowed tag: [post_title]"
129
+ msgstr "Oggetto dell'email di notifica. Tag consentito: [post_title]"
130
+
131
+ #: options.php:150
132
+ msgid "Content of the notification email. Allowed tags: [post_title], [comment_permalink], [comment_author], [comment_content], [post_permalink], [manager_link]"
133
+ msgstr "Contenuto del messaggio di notifica. Tag consentiti: [post_title], [comment_permalink], [comment_author], [comment_content], [post_permalink], [manager_link]"
134
+
135
+ #: options.php:158
136
+ msgid "Text to show next to the checkbox added to the comment form. Allowed tag: [subscribe_link]"
137
+ msgstr "Testo da mostrare accanto al checkbox mostrato nel modulo del commento. Tag consentito: [subscribe_link]"
138
+
139
+ #: options.php:164
140
+ #: options.php:199
141
+ msgid "Yes"
142
+ msgstr "Si"
143
+
144
+ #: options.php:165
145
+ #: options.php:200
146
+ msgid "No"
147
+ msgstr "No"
148
+
149
+ #: options.php:169
150
+ msgid "Send a notification email to confirm the subscription (to avoid addresses misuse)"
151
+ msgstr "Invia una email per confermare l'iscrizione ad un dato articolo (per evitare l'uso scorretto di indirizzi email di terzi)"
152
+
153
+ #: options.php:177
154
+ msgid "Text to show to those users who are already subscribed. Allowed tag: [manager_link]"
155
+ msgstr "Testo da mostrare agli utenti gi&agrave; iscritti ad una discussione. Tag consentito: [manager_link]"
156
+
157
+ #: options.php:185
158
+ msgid "Text to show to those users who are already subscribed, but haven't clicked on the confirmation link yet. Allowed tag: [manager_link]"
159
+ msgstr "Testo da mostrare agli utenti gi&agrave; iscritti ad una discussione, ma che non hanno ancora cliccato sul link di conferma. Tag consentito: [manager_link]"
160
+
161
+ #: options.php:193
162
+ msgid "Text to show to the author, to manage subscriptions to a given post. Allowed tag: [manager_link]"
163
+ msgstr "Testo da mostrare agli utenti gi&agrave; iscritti ad una discussione. Tag consentito: [manager_link]"
164
+
165
+ #: options.php:204
166
+ msgid "Send a notification email to confirm the subscription (to avoid addresses misuse)."
167
+ msgstr "Invia una email per confermare l'iscrizione ad un dato articolo (per evitare l'uso scorretto di indirizzi email di terzi)."
168
+
169
+ #: options.php:212
170
+ msgid "Subject of the confirmation email. Allowed tag: [post_title]"
171
+ msgstr "Oggetto dell'email di notifica. Tag consentito: [post_title]"
172
+
173
+ #: options.php:220
174
+ msgid "Content of the confirmation email. Allowed tags: [post_permalink], [confirm_link], [post_title], [manager_link]"
175
+ msgstr "Contenuto dell'email di conferma. Tag consentiti: [post_permalink], [confirm_link], [post_title], [manager_link]"
176
+
177
+ #: options.php:228
178
+ msgid "Subject of the mail sent to those who request to access their management page. Allowed tag: [blog_name]"
179
+ msgstr "Oggetto della mail inviata a coloro che richiedono di poter gestire le proprie sottoscrizioni. Tag consentito: [blog_name]"
180
+
181
+ #: options.php:236
182
+ msgid "Content of the management email. Allowed tags: [blog_name], [manager_link]"
183
+ msgstr "Contenuto dell'email di gestione. Tag consentiti: [blog_name],[manager_link]"
184
+
185
+ #: options.php:240
186
+ msgid "Save Changes"
187
+ msgstr "Salva le opzioni"
188
+
189
+ #: subscribe-to-comments-reloaded.php:104
190
+ msgid "There is a new comment to [post_title]"
191
+ msgstr "Nuovo commento per [post_title]"
192
+
193
+ #: subscribe-to-comments-reloaded.php:105
194
+ msgid ""
195
+ "There is a new comment to [post_title].\n"
196
+ "Comment Link: [comment_permalink]\n"
197
+ "Author: [comment_author]\n"
198
+ "Comment:\n"
199
+ "[comment_content]\n"
200
+ "\n"
201
+ "Permalink: [post_permalink]\n"
202
+ "Manage your subscriptions: [manager_link]"
203
+ msgstr ""
204
+ "L'utente [comment_author] ha lasciato un nuovo commento a ' [post_title]':\n"
205
+ "[comment_permalink]\n"
206
+ "\n"
207
+ "Commento:\n"
208
+ "[comment_content]\n"
209
+ "\n"
210
+ "Permalink: [post_permalink]\n"
211
+ "Gestisci le tue iscrizioni: [manager_link]"
212
+
213
+ #: subscribe-to-comments-reloaded.php:113
214
+ msgid "Notify me of followup comments via e-mail. You can also <a href='[subscribe_link]'>subscribe</a> without commenting."
215
+ msgstr "Ricevi un avviso se ci sono nuovi commenti. Oppure <a href='[subscribe_link]'>iscriviti</a> senza commentare."
216
+
217
+ #: subscribe-to-comments-reloaded.php:115
218
+ msgid "You are subscribed to this entry. <a href='[manager_link]'>Manage</a> your subscriptions."
219
+ msgstr "Sei gi&agrave; iscritto a quest'articolo. Se vuoi, puoi <a href='[manager_link]'>gestire</a> il tuo profilo."
220
+
221
+ #: subscribe-to-comments-reloaded.php:116
222
+ msgid "Your subscription to this entry needs to be confirmed. <a href='[manager_link]'>Manage your subscriptions</a>."
223
+ msgstr "La tua iscrizione &egrave; in attesa di conferma. Se vuoi, puoi <a href='[manager_link]'>gestire</a> il tuo profilo."
224
+
225
+ #: subscribe-to-comments-reloaded.php:117
226
+ msgid "You are the author of this entry. <a href='[manager_link]'>Manage</a> its subscriptions."
227
+ msgstr "Sei l'autore di quest'articolo. Gestisci gli utenti <a href='[manager_link]'>iscritti</a> alla discussione."
228
+
229
+ #: subscribe-to-comments-reloaded.php:119
230
+ msgid "Please confirm your subscribtion to [post_title]"
231
+ msgstr "Conferma la tua iscrizione a [post_title]"
232
+
233
+ #: subscribe-to-comments-reloaded.php:120
234
+ msgid ""
235
+ "You have requested to be notified every time a new comment is added to:\n"
236
+ "[post_permalink]\n"
237
+ "\n"
238
+ "Please confirm your request by clicking on this link:\n"
239
+ "[confirm_link]"
240
+ msgstr ""
241
+ "Abbiamo ricevuto una richiesta di iscrizione al nostro servizio automatizzato di notifiche, per l'articolo:\n"
242
+ "[post_permalink]\n"
243
+ "\n"
244
+ "Per confermare, clicca sul collegamento qui di seguito:\n"
245
+ "[confirm_link]\n"
246
+ "\n"
247
+ "Se credi di aver ricevuto questo messaggio per errore, ti preghiamo di rispondere all'email per contattare l'amministratore."
248
+
249
+ #: subscribe-to-comments-reloaded.php:127
250
+ msgid "Manage your subscriptions on [blog_name]"
251
+ msgstr "Gestisci le tue sottoscrizioni su [blog_name]"
252
+
253
+ #: subscribe-to-comments-reloaded.php:128
254
+ msgid ""
255
+ "You have requested to manage your subscriptions to the articles on [blog_name]. Follow this link to access your personal page:\n"
256
+ "[manager_link]"
257
+ msgstr ""
258
+ "Hai richiesto di poter gestire le tue sottoscrizioni agli articoli su [blog_name]. Clicca sul link qui di seguito per accedere alla tua area riservata:\n"
259
+ "[manager_link]"
260
+
261
+ #: templates/author.php:30
262
+ msgid "Subscriptions have been successfully updated. In order to cancel or suspend more notifications, select the corresponding checkbox(es) and click on the button at the end of the list."
263
+ msgstr "Le tue sottoscrizioni sono state correttamente aggiornate. Se desideri disdire o sospendere ulteriori notifiche, spunta la casella corrispondente all'articolo e clicca sul pusante in fondo alla lista."
264
+
265
+ #: templates/author.php:33
266
+ msgid "You can manage the subscriptions to your articles on this page. 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."
267
+ msgstr "Tramite questa pagina puoi gestire le tue sottoscrizioni al mio blog. Se desideri disdire o sospendere una o pi&ugrave; notifiche, spunta le caselle corrispondenti agli articoli e clicca sul pusante in fondo alla lista."
268
+
269
+ #: templates/author.php:39
270
+ #: templates/user.php:37
271
+ msgid "Please remember: this operation cannot be undone. Are you sure you want to proceed?"
272
+ msgstr "Ricorda: questa operazione non pu&ograve; essere annullata. Confermi di voler procedere?"
273
+
274
+ #: templates/author.php:44
275
+ msgid "Title"
276
+ msgstr "Titolo"
277
+
278
+ #: templates/author.php:56
279
+ #: templates/user.php:49
280
+ msgid "Legend: Y: subscribed, N: suspended, C: awaiting confirmation"
281
+ msgstr "Legenda: Y: iscritto, N: notifiche sospese, C: in attesa di conferma"
282
+
283
+ #: templates/author.php:57
284
+ #: templates/user.php:50
285
+ msgid "Action:"
286
+ msgstr "Azione:"
287
+
288
+ #: templates/author.php:57
289
+ #: templates/user.php:50
290
+ msgid "Delete"
291
+ msgstr "Rimuovi"
292
+
293
+ #: templates/author.php:58
294
+ #: templates/user.php:51
295
+ msgid "Suspend"
296
+ msgstr "Sospendi"
297
+
298
+ #: templates/author.php:59
299
+ #: templates/user.php:52
300
+ msgid "Resume"
301
+ msgstr "Riattiva"
302
+
303
+ #: templates/author.php:60
304
+ #: templates/user.php:53
305
+ msgid "Select all"
306
+ msgstr "Seleziona tutti"
307
+
308
+ #: templates/author.php:61
309
+ #: templates/user.php:54
310
+ msgid "Invert selection"
311
+ msgstr "Inverti la selezione"
312
+
313
+ #: templates/author.php:62
314
+ #: templates/user.php:55
315
+ msgid "Update subscriptions"
316
+ msgstr "Aggiorna sottoscrizioni"
317
+
318
+ #: templates/author.php:66
319
+ #: templates/user.php:59
320
+ msgid "Sorry, no subscriptions found."
321
+ msgstr "Spiacente, nessuna sottoscrizione trovata."
322
+
323
+ #: templates/author.php:73
324
+ msgid "Filters"
325
+ msgstr "Filtri"
326
+
327
+ #: templates/author.php:76
328
+ msgid "If you know the ID of a post you want to manage, enter it in the field here below to see a list of email addresses subscribed to it"
329
+ msgstr "Se conosci l'ID dell'articolo che vuoi gestire, inseriscilo nel campo qui di seguito per accedere alla relativa lista di indirizzi email iscritti alla discussione"
330
+
331
+ #: templates/author.php:77
332
+ msgid "Search post ID"
333
+ msgstr "Cerca ID"
334
+
335
+ #: templates/author.php:83
336
+ msgid "If you know the email address you want to manage, enter it in the field here below to see a list of articles this reader is currently watching"
337
+ msgstr "Se conosci l'indirizzo email che vuoi gestire, inseriscilo nel campo qui di seguito per accedere alla relativa lista di articoli che sta attualmente seguendo"
338
+
339
+ #: templates/author.php:84
340
+ msgid "Search email"
341
+ msgstr "Cerca email"
342
+
343
+ #: templates/confirm.php:17
344
+ msgid "Your subscription has been successfully confirmed. Thank you for using our notification service. Now you will receive a message every time someone posts a new comment to"
345
+ msgstr "La tua iscrizione &egrave; stata confermata con successo. Grazie per aver usato il nostro servizio di notifica. Da ora in poi riceverai un messaggio ogni volta che qualcuno lascia un commento per:"
346
+
347
+ #: templates/request-management-link.php:46
348
+ #, php-format
349
+ msgid "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. In the meanwhile, feel free to go back to <a href='%s'>%s</a>."
350
+ msgstr "Grazie per aver usato il servizio di notifica di questo blog. La tua richiesta &egrave; stata completata, e dovresti ricevere una mail fra pochi minuti. Al suo interno troverai il link personalizzato per accedere alla tua area di gestione. Nel frattempo puoi tornare a: <a href='%s'>%s</a>."
351
+
352
+ #: templates/request-management-link.php:53
353
+ msgid "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."
354
+ msgstr "Al fine di gestire le tue sottoscrizioni, inserisci il tuo indirizzo email nel campo qui di seguito. Ti sar&agrave; inviato un messaggio contenente il link per accedere alla tua area riservata."
355
+
356
+ #: templates/request-management-link.php:56
357
+ #: templates/subscribe.php:53
358
+ msgid "Email"
359
+ msgstr "Email"
360
+
361
+ #: templates/request-management-link.php:57
362
+ #: templates/subscribe.php:54
363
+ msgid "Send"
364
+ msgstr "Invia"
365
+
366
+ #: templates/subscribe.php:26
367
+ #: templates/subscribe.php:27
368
+ msgid "New subscription to"
369
+ msgstr "Nuova sottoscrizione per"
370
+
371
+ #: templates/subscribe.php:27
372
+ msgid "User:"
373
+ msgstr "Utente:"
374
+
375
+ #: templates/subscribe.php:38
376
+ #, php-format
377
+ msgid "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. In the meanwhile, you can go back to <a href='%s'>%s</a>."
378
+ msgstr "Grazie per aver usato il servizio di notifica di questo blog. Al fine di completare la tua richiesta, ti &egrave; stata inviata una email di conferma. Segui le semplici istruzioni per verificare la tua identit&agrave;. Nel frattempo puoi tornare a: <a href='%s'>%s</a>."
379
+
380
+ #: templates/subscribe.php:42
381
+ #, php-format
382
+ msgid "Thank you for using our subscription service. Your request has been completed, and you are now subscribed to <a href='%s'>%s</a>. You will receive a notification email every time a new comment to this article is approved and posted by the administrator."
383
+ msgstr "Grazie per aver usato il servizio di notifica di questo blog. La tua richiesta &egrave; stata completata, e sei ora iscritto a <a href='%s'>%s</a>. Riceverai una notifica ogni volta che un nuovo commento a quell'articolo viene approvato e pubblicato dall'amministratore del sito."
384
+
385
+ #: templates/subscribe.php:50
386
+ #, php-format
387
+ msgid "You can follow the discussion on <strong>%s</strong> without having to leave a comment. Cool, huh? Just enter your email address in the form here below and you're all set."
388
+ msgstr "Puoi seguire la discussione su <strong>%s</strong> senza dover lasciare un commento. Bello, no? Ti basta inserire il tuo indirizzo email nel campo qui sotto e premere invio, al resto pensa il sistema."
389
+
390
+ #: templates/user.php:28
391
+ msgid "Your subscriptions have been successfully updated. In order to cancel or suspend more notifications, select the corresponding checkbox(es) and click on the button at the end of the list. You are currently subscribed to:"
392
+ msgstr "Le tue sottoscrizioni sono state correttamente aggiornate. Se desideri disdire o sospendere ulteriori notifiche, spunta la casella corrispondente all'articolo e clicca sul pusante in fondo alla lista. Al momento, risulti iscritto a:"
393
+
394
+ #: templates/user.php:31
395
+ msgid "You can manage your subscriptions to the article of this blog on this page. 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:"
396
+ msgstr "Tramite questa pagina puoi gestire le tue sottoscrizioni al mio blog. Se desideri disdire o sospendere una o pi&ugrave; notifiche, spunta le caselle corrispondenti agli articoli e clicca sul pusante in fondo alla lista. Al momento, risulti iscritto a:"
397
+
398
+ #~ msgid "\"From\" name"
399
+ #~ msgstr "Nome del mittente"
400
+
401
+ #~ msgid "Dashboard"
402
+ #~ msgstr "Bacheca"
403
+
404
+ #~ msgid "Visitors"
405
+ #~ msgstr "Visitatori"
406
+
407
+ #~ msgid "Traffic Sources"
408
+ #~ msgstr "Sorgenti di traffico"
409
+
410
+ #~ msgid "Content"
411
+ #~ msgstr "Contenuto"
412
+
413
+ #~ msgid "Raw Data"
414
+ #~ msgstr "Dati grezzi"
415
+
416
+ #~ msgid "World Map"
417
+ #~ msgstr "Mappa"
418
+
419
+ #~ msgid "Custom Reports"
420
+ #~ msgstr "Rapporti personali"
421
+
422
+ #~ msgid "Current filters:"
423
+ #~ msgstr "Filtri attivi:"
424
+
425
+ #~ msgid "Filter pageviews where"
426
+ #~ msgstr "Filtra accessi in cui:"
427
+
428
+ #~ msgid "Browser"
429
+ #~ msgstr "Browser"
430
+
431
+ #~ msgid "Browser version"
432
+ #~ msgstr "Versione Browser"
433
+
434
+ #~ msgid "CSS version"
435
+ #~ msgstr "Versione CSS"
436
+
437
+ #~ msgid "Country Code"
438
+ #~ msgstr "Codice Paese"
439
+
440
+ #~ msgid "Domain"
441
+ #~ msgstr "Dominio"
442
+
443
+ #~ msgid "IP"
444
+ #~ msgstr "IP"
445
+
446
+ #~ msgid "Keywords"
447
+ #~ msgstr "Parola chiave"
448
+
449
+ #~ msgid "Language Code"
450
+ #~ msgstr "Codice Lingua"
451
+
452
+ #~ msgid "Operating System"
453
+ #~ msgstr "Sistema operativo"
454
+
455
+ #~ msgid "Permalink"
456
+ #~ msgstr "Permalink"
457
+
458
+ #~ msgid "Referer"
459
+ #~ msgstr "Riferimento"
460
+
461
+ #~ msgid "Screen Resolution"
462
+ #~ msgstr "Risoluzione schermo"
463
+
464
+ #~ msgid "Post Author"
465
+ #~ msgstr "Autore articolo"
466
+
467
+ #~ msgid "Is equal to"
468
+ #~ msgstr "Uguale a"
469
+
470
+ #~ msgid "Contains"
471
+ #~ msgstr "Contiene"
472
+
473
+ #~ msgid "Does not contain"
474
+ #~ msgstr "Non contiene"
475
+
476
+ #~ msgid "Starts with"
477
+ #~ msgstr "Inizia con"
478
+
479
+ #~ msgid "Ends with"
480
+ #~ msgstr "Finisce per"
481
+
482
+ #~ msgid "Filter by date"
483
+ #~ msgstr "Filtra per data"
484
+
485
+ #~ msgid "Day"
486
+ #~ msgstr "Giorno"
487
+
488
+ #~ msgid "Month"
489
+ #~ msgstr "Mese"
490
+
491
+ #~ msgid "Year"
492
+ #~ msgstr "Anno"
493
+
494
+ #~ msgid "days"
495
+ #~ msgstr "giorni"
496
+
497
+ #~ msgid "Go"
498
+ #~ msgstr "Vai"
499
+
500
+ #~ msgid "reset"
501
+ #~ msgstr "annulla"
502
+
503
+ #~ msgid "Pageviews by day - Click on a day for hourly metrics"
504
+ #~ msgstr ""
505
+ #~ "Pagine al giorno - Clicca su un giorno per vedere il dettaglio orario"
506
+
507
+ #~ msgid "Pageviews by hour"
508
+ #~ msgstr "Accessi orari"
509
+
510
+ #~ msgid "No data to display"
511
+ #~ msgstr "Nessun dato da visualizzare"
512
+
513
+ #~ msgid "About WP-SlimStat"
514
+ #~ msgstr "Informazioni su WP-SlimStat"
515
+
516
+ #~ msgid "Total Hits"
517
+ #~ msgstr "Totale accessi"
518
+
519
+ #~ msgid "Data Size"
520
+ #~ msgstr "Dimensione DB"
521
+
522
+ #~ msgid "Tracking Active"
523
+ #~ msgstr "Tracciamento attivo"
524
+
525
+ #~ msgid "Summary for"
526
+ #~ msgstr "Panoramica del"
527
+
528
+ #~ msgid "this period"
529
+ #~ msgstr "periodo"
530
+
531
+ #~ msgid "Pageviews"
532
+ #~ msgstr "Accessi"
533
+
534
+ #~ msgid "Unique IPs"
535
+ #~ msgstr "IP unici"
536
+
537
+ #~ msgid "Avg Pageviews"
538
+ #~ msgstr "Media accessi"
539
+
540
+ #~ msgid "On"
541
+ #~ msgstr "Il"
542
+
543
+ #~ msgid "Last Month"
544
+ #~ msgstr "Mese scorso"
545
+
546
+ #~ msgid "User agents"
547
+ #~ msgstr "User agents"
548
+
549
+ #~ msgid "Popular pages of all time"
550
+ #~ msgstr "Pagine in assoluto pi&ugrave; popolari"
551
+
552
+ #~ msgid "Open %s in a new window"
553
+ #~ msgstr "Apri %s in una nuova finestra"
554
+
555
+ #~ msgid "More"
556
+ #~ msgstr "Dettagli"
557
+
558
+ #~ msgid "Recent Keywords"
559
+ #~ msgstr "Parole chiave recenti"
560
+
561
+ #~ msgid "Recent Countries"
562
+ #~ msgstr "Paesi recenti"
563
+
564
+ #~ msgid "c-"
565
+ #~ msgstr "c-"
566
+
567
+ #~ msgid "Traffic Sources Overview"
568
+ #~ msgstr "Panoramica sorgenti di traffico"
569
+
570
+ #~ msgid "Human Visits by day - Click on a day for hourly metrics"
571
+ #~ msgstr ""
572
+ #~ "Visite umane al giorno - Clicca su un giorno per vedere il dettaglio "
573
+ #~ "orario"
574
+
575
+ #~ msgid "Human Visits by hour"
576
+ #~ msgstr "Visite umane per ogni ora"
577
+
578
+ #~ msgid "Human visits"
579
+ #~ msgstr "Visitatori umani"
580
+
581
+ #~ msgid "One time visitors"
582
+ #~ msgstr "Una sola visita"
583
+
584
+ #~ msgid "Bounce rate"
585
+ #~ msgstr "Tasso di rimbalzo"
586
+
587
+ #~ msgid "Bots"
588
+ #~ msgstr "Bot"
589
+
590
+ #~ msgid "Pages per visit"
591
+ #~ msgstr "Pagine per visita"
592
+
593
+ #~ msgid "Longest visit"
594
+ #~ msgstr "Visita pi&ugrave; lunga"
595
+
596
+ #~ msgid "Languages"
597
+ #~ msgstr "Lingue"
598
+
599
+ #~ msgid "l-"
600
+ #~ msgstr "l-"
601
+
602
+ #~ msgid "Languages - Just Visitors"
603
+ #~ msgstr "Lingue - Solo visitatori"
604
+
605
+ #~ msgid "IP Addresses and Domains"
606
+ #~ msgstr "Indirizzi IP e Domini"
607
+
608
+ #~ msgid "Recent Browsers"
609
+ #~ msgstr "Browser recenti"
610
+
611
+ #~ msgid "Operating Systems"
612
+ #~ msgstr "Sistemi operativi"
613
+
614
+ #~ msgid "Browsers and Operating Systems"
615
+ #~ msgstr "Browser e Sistemi operativi"
616
+
617
+ #~ msgid "Screen Resolutions"
618
+ #~ msgstr "Risoluzioni schermo"
619
+
620
+ #~ msgid "Screen Resolutions with colordepth"
621
+ #~ msgstr "Risoluzioni schermo e colori"
622
+
623
+ #~ msgid "Plugins"
624
+ #~ msgstr "Plugin"
625
+
626
+ #~ msgid "Flash"
627
+ #~ msgstr "Flash"
628
+
629
+ #~ msgid "Silverlight"
630
+ #~ msgstr "Silverlight"
631
+
632
+ #~ msgid "Acrobat"
633
+ #~ msgstr "Acrobat"
634
+
635
+ #~ msgid "Java"
636
+ #~ msgstr "Java"
637
+
638
+ #~ msgid "Media Player"
639
+ #~ msgstr "Media Player"
640
+
641
+ #~ msgid "Real Player"
642
+ #~ msgstr "Real Player"
643
+
644
+ #~ msgid "Top Countries"
645
+ #~ msgstr "Panoramica dei Paesi"
646
+
647
+ #~ msgid "Details about Recent Visits"
648
+ #~ msgstr "Dettagli sulle visite recenti"
649
+
650
+ #~ msgid "Direct visit to"
651
+ #~ msgstr "Visita diretta a"
652
+
653
+ #~ msgid "Traffic Sources by day - Click on a day for hourly metrics"
654
+ #~ msgstr ""
655
+ #~ "Sorgenti di traffico al giorno - Clicca su un giorno per vedere il "
656
+ #~ "dettaglio orario"
657
+
658
+ #~ msgid "Traffic Sources by hour"
659
+ #~ msgstr "Sorgenti di traffico orarie"
660
+
661
+ #~ msgid "Unique Referers"
662
+ #~ msgstr "Sorgenti uniche"
663
+
664
+ #~ msgid "Direct Visits"
665
+ #~ msgstr "Visite dirette"
666
+
667
+ #~ msgid "Unique Pages Referred"
668
+ #~ msgstr "Pagine uniche riferite"
669
+
670
+ #~ msgid "Recent bouncing pages"
671
+ #~ msgstr "Pagine di rimbalzo"
672
+
673
+ #~ msgid "Unique Internal"
674
+ #~ msgstr "Ricerche interne"
675
+
676
+ #~ msgid "Top Keywords"
677
+ #~ msgstr "Parole chiave principali"
678
+
679
+ #~ msgid "Countries for"
680
+ #~ msgstr "Paesi del"
681
+
682
+ #~ msgid "Traffic Sources for"
683
+ #~ msgstr "Sorgenti di traffico del"
684
+
685
+ #~ msgid "Sites for"
686
+ #~ msgstr "Siti del"
687
+
688
+ #~ msgid "Recent Keywords &raquo; Pages"
689
+ #~ msgstr "Parole chiave &raquo; Pagine"
690
+
691
+ #~ msgid "Open referer in a new window"
692
+ #~ msgstr "Apri il riferimento in una nuova finestra"
693
+
694
+ #~ msgid ""
695
+ #~ "Average pageviews per visit by day - Click on a day for hourly metrics"
696
+ #~ msgstr ""
697
+ #~ "Pagine al giorno - Clicca su un giorno per vedere il dettaglio orario"
698
+
699
+ #~ msgid "Average pageviews per visit by hour"
700
+ #~ msgstr "Media oraria delle pagine per visita"
701
+
702
+ #~ msgid "Recent Contents"
703
+ #~ msgstr "Contenuti recenti"
704
+
705
+ #~ msgid "Recent Feeds"
706
+ #~ msgstr "Feed recenti"
707
+
708
+ #~ msgid "Popular pages for"
709
+ #~ msgstr "Pagine popolari del"
710
+
711
+ #~ msgid "Recent 404 pages"
712
+ #~ msgstr "Pagine 404 recenti"
713
+
714
+ #~ msgid "Recent Internal Searches"
715
+ #~ msgstr "Ricerche interne"
716
+
717
+ #~ msgid "Top Exit Pages for"
718
+ #~ msgstr "Pagine d'uscita del"
719
+
720
+ #~ msgid "Recent Outbound Links"
721
+ #~ msgstr "Link in uscita"
722
+
723
+ #~ msgid "Recent Downloads"
724
+ #~ msgstr "Download recenti"
725
+
726
+ #~ msgid "Order by"
727
+ #~ msgstr "Ordina per"
728
+
729
+ #~ msgid "Country"
730
+ #~ msgstr "Paese"
731
+
732
+ #~ msgid "Date/Time"
733
+ #~ msgstr "Data/Ora"
734
+
735
+ #~ msgid "Language"
736
+ #~ msgstr "Lingua"
737
+
738
+ #~ msgid "Select sorting"
739
+ #~ msgstr "Scegli ordine"
740
+
741
+ #~ msgid "Ascending"
742
+ #~ msgstr "Crescente"
743
+
744
+ #~ msgid "Descending"
745
+ #~ msgstr "Decrescente"
746
+
747
+ #~ msgid "Starting from record #"
748
+ #~ msgstr "A partire dalla riga n."
749
+
750
+ #~ msgid "&laquo; Previous"
751
+ #~ msgstr "&laquo; Precedenti"
752
+
753
+ #~ msgid "Next &raquo;"
754
+ #~ msgstr "Successivi &raquo;"
755
+
756
+ #~ msgid "No records found"
757
+ #~ msgstr "Nessun record trovato"
758
+
759
+ #~ msgid "Records: %d - %d. Order by: %s %s"
760
+ #~ msgstr "Righe: %d - %d. Ordinamento: %s %s"
761
+
762
+ #~ msgid "N/A"
763
+ #~ msgstr "N/D"
764
+
765
+ #~ msgid "Date and time"
766
+ #~ msgstr "Data e ora"
767
+
768
+ #~ msgid "Direct visit"
769
+ #~ msgstr "Visita diretta"
770
+
771
+ #~ msgid ""
772
+ #~ "World Map - Values represent the percentage of hits coming from that "
773
+ #~ "Country"
774
+ #~ msgstr ""
775
+ #~ "Mappa del mondo - I valori rappresentano le visite in percentuale "
776
+ #~ "provenienti da ogni Paese"
777
+
778
+ #~ msgid "Pluggable custom reports"
779
+ #~ msgstr "Rapporti personalizzati"
780
+
781
+ #~ msgid ""
782
+ #~ "Yes, you can! Create and view your personalized analytics for WP "
783
+ #~ "SlimStat. In order to do this, just write a new plugin that fetches the "
784
+ #~ "desired information from the database and then hook it to the action "
785
+ #~ "<code>wp_slimstat_custom_report</code>. A demo plugin comes with the "
786
+ #~ "package. It shows how to write custom reports in 5 minutes. You can find "
787
+ #~ "it inside the plugin&apos;s folder: <code>wp-slimstat-custom-report-demo."
788
+ #~ "php</code>. For more information, visit my <a href=\"http://lab."
789
+ #~ "duechiacchiere.it/\" target=\"_blank\">support forum</a>."
790
+ #~ msgstr ""
791
+ #~ "Si, si pu&ograve;! Creare e vedere le proprie statistiche personalizzate "
792
+ #~ "per WP SlimStat. Per far questo, ti basta scrivere un nuovo plugin che "
793
+ #~ "preleva le informazioni desiderate dal database, per poi agganciarlo al "
794
+ #~ "codice <code>wp_slimstat_custom_report</code>. Un esempio &egrave; "
795
+ #~ "incluso con la distribuzione. Mostra come scrivere rapporti "
796
+ #~ "personalizzati in 5 minuti. Lo trovi nella cartella del plugin: <code>wp-"
797
+ #~ "slimstat-custom-report-demo.php</code>. Per ulteriori informazioni, "
798
+ #~ "visita il mio <a href=\"http://lab.duechiacchiere.it/\" target=\"_blank"
799
+ #~ "\">forum di supporto</a>."
800
+
801
+ #~ msgid "Domains"
802
+ #~ msgstr "Domini"
803
+
804
+ #~ msgid "Visits"
805
+ #~ msgstr "Visite"
806
+
807
+ #~ msgid "Unique Visits"
808
+ #~ msgstr "Visite uniche"
options.php ADDED
@@ -0,0 +1,242 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // Avoid direct access to this piece of code
4
+ if (!function_exists('current_user_can') || !current_user_can('manage_options')){
5
+ header('Location: /');
6
+ exit;
7
+ }
8
+
9
+ function subscribe_reloaded_update_option( $_option, $_value, $_type ){
10
+ if (!isset($_value)) return true;
11
+ switch($_type){
12
+ case 'yesno':
13
+ if ($_value=='yes' || $_value=='no'){
14
+ update_option($_option, $_value);
15
+ return true;
16
+ }
17
+
18
+ break;
19
+ case 'integer':
20
+ update_option($_option, abs(intval($_value)));
21
+
22
+ return true;
23
+ break;
24
+
25
+ default:
26
+ update_option($_option, str_replace('"', "'", $_value));
27
+ return true;
28
+ break;
29
+ }
30
+
31
+ return false;
32
+ }
33
+
34
+ function subscribe_reloaded_get_option($_option, $_default){
35
+ $value = get_option($_option, $_default);
36
+ return stripslashes($value);
37
+ }
38
+
39
+ // Load localization files
40
+ load_plugin_textdomain('subscribe-reloaded', WP_PLUGIN_DIR .'/subscribe-to-comments-reloaded/langs', '/subscribe-to-comments-reloaded/langs');
41
+
42
+ // Update options
43
+ if (isset($_POST['options'])){
44
+
45
+ $faulty_fields = '';
46
+ if (isset($_POST['options']['manager_page']) && !subscribe_reloaded_update_option('subscribe_reloaded_manager_page', $_POST['options']['manager_page'], 'text')) $faulty_fields = __('Management Page ID','subscribe-reloaded').', ';
47
+ if (isset($_POST['options']['purge_days']) && !subscribe_reloaded_update_option('subscribe_reloaded_purge_days', $_POST['options']['purge_days'], 'integer')) $faulty_fields = __('Autopurge requests','subscribe-reloaded').', ';
48
+ if (isset($_POST['options']['from_name']) && !subscribe_reloaded_update_option('subscribe_reloaded_from_name', $_POST['options']['from_name'], 'text')) $faulty_fields = __('Sender name','subscribe-reloaded').', ';
49
+ if (isset($_POST['options']['from_email']) && !subscribe_reloaded_update_option('subscribe_reloaded_from_email', $_POST['options']['from_email'], 'text')) $faulty_fields = __('Sender email address','subscribe-reloaded').', ';
50
+ if (isset($_POST['options']['notification_subject']) && !subscribe_reloaded_update_option('subscribe_reloaded_notification_subject', $_POST['options']['notification_subject'], 'text')) $faulty_fields = __('Notification subject','subscribe-reloaded').', ';
51
+ if (isset($_POST['options']['notification_content']) && !subscribe_reloaded_update_option('subscribe_reloaded_notification_content', $_POST['options']['notification_content'], 'text')) $faulty_fields = __('Notification message','subscribe-reloaded').', ';
52
+ if (isset($_POST['options']['checkbox_label']) && !subscribe_reloaded_update_option('subscribe_reloaded_checkbox_label', $_POST['options']['checkbox_label'], 'text')) $faulty_fields = __('Checkbox label','subscribe-reloaded').', ';
53
+ if (isset($_POST['options']['checked_by_default']) && !subscribe_reloaded_update_option('subscribe_reloaded_checked_by_default', $_POST['options']['checked_by_default'], 'yesno')) $faulty_fields = __('Checked by default','subscribe-reloaded').', ';
54
+ if (isset($_POST['options']['subscribed_label']) && !subscribe_reloaded_update_option('subscribe_reloaded_subscribed_label', $_POST['options']['subscribed_label'], 'text')) $faulty_fields = __('Subscribed label','subscribe-reloaded').', ';
55
+ if (isset($_POST['options']['subscribed_waiting_label']) && !subscribe_reloaded_update_option('subscribe_reloaded_subscribed_waiting_label', $_POST['options']['subscribed_waiting_label'], 'text')) $faulty_fields = __('Awaiting label','subscribe-reloaded').', ';
56
+ if (isset($_POST['options']['author_label']) && !subscribe_reloaded_update_option('subscribe_reloaded_author_label', $_POST['options']['author_label'], 'text')) $faulty_fields = __('Author label','subscribe-reloaded').', ';
57
+ if (isset($_POST['options']['enable_double_check']) && !subscribe_reloaded_update_option('subscribe_reloaded_enable_double_check', $_POST['options']['enable_double_check'], 'yesno')) $faulty_fields = __('Enable double check','subscribe-reloaded').', ';
58
+ if (isset($_POST['options']['double_check_subject']) && !subscribe_reloaded_update_option('subscribe_reloaded_double_check_subject', $_POST['options']['double_check_subject'], 'text')) $faulty_fields = __('Double check subject','subscribe-reloaded').', ';
59
+ if (isset($_POST['options']['double_check_content']) && !subscribe_reloaded_update_option('subscribe_reloaded_double_check_content', $_POST['options']['double_check_content'], 'text')) $faulty_fields = __('Double check message','subscribe-reloaded').', ';
60
+ if (isset($_POST['options']['management_subject']) && !subscribe_reloaded_update_option('subscribe_reloaded_management_subject', $_POST['options']['management_subject'], 'text')) $faulty_fields = __('Management subject','subscribe-reloaded').', ';
61
+ if (isset($_POST['options']['management_content']) && !subscribe_reloaded_update_option('subscribe_reloaded_management_content', $_POST['options']['management_content'], 'text')) $faulty_fields = __('Management message','subscribe-reloaded').', ';
62
+
63
+ // Display an alert in the admin interface if something went wrong
64
+ echo '<div class="updated fade"><p>';
65
+ if (empty($faulty_fields)){
66
+ if (empty($message_to_show)){
67
+ _e('Your settings have been successfully updated.','subscribe-reloaded');
68
+ }
69
+ else{
70
+ echo $message_to_show;
71
+ }
72
+ }
73
+ else{
74
+ _e('There was an error updating the following fields:','subscribe-reloaded');
75
+ echo ' <strong>'.substr($faulty_fields,0,-2).'</strong>';
76
+ }
77
+ echo "</p></div>\n";
78
+ }
79
+ // Reload the new options
80
+ $subscribe_reloaded_options = array();
81
+ $subscribe_reloaded_options['manager_page'] = subscribe_reloaded_get_option('subscribe_reloaded_manager_page', '');
82
+ $subscribe_reloaded_options['purge_days'] = subscribe_reloaded_get_option('subscribe_reloaded_purge_days', '0');
83
+ $subscribe_reloaded_options['from_name'] = subscribe_reloaded_get_option('subscribe_reloaded_from_name', 'admin');
84
+ $subscribe_reloaded_options['from_email'] = subscribe_reloaded_get_option('subscribe_reloaded_from_email', get_bloginfo('admin_email'));
85
+ $subscribe_reloaded_options['notification_subject'] = subscribe_reloaded_get_option('subscribe_reloaded_notification_subject', 'There is a new comment on the post [post_title]');
86
+ $subscribe_reloaded_options['notification_content'] = subscribe_reloaded_get_option('subscribe_reloaded_notification_content', '');
87
+ $subscribe_reloaded_options['checkbox_label'] = subscribe_reloaded_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.");
88
+ $subscribe_reloaded_options['checked_by_default'] = subscribe_reloaded_get_option('subscribe_reloaded_checked_by_default', 'no');
89
+ $subscribe_reloaded_options['subscribed_label'] = subscribe_reloaded_get_option('subscribe_reloaded_subscribed_label', "You are subscribed to this entry. <a href='[manager_link]'>Manage your subscriptions</a>.");
90
+ $subscribe_reloaded_options['subscribed_waiting_label'] = subscribe_reloaded_get_option('subscribe_reloaded_subscribed_waiting_label', "Your subscription to this entry needs to be confirmed. <a href='[manager_link]'>Manage your subscriptions</a>.");
91
+ $subscribe_reloaded_options['author_label'] = subscribe_reloaded_get_option('subscribe_reloaded_author_label', "You are the author of this entry. <a href='[manager_link]'>Manage its subscriptions</a>.");
92
+ $subscribe_reloaded_options['enable_double_check'] = subscribe_reloaded_get_option('subscribe_reloaded_enable_double_check', 'no');
93
+ $subscribe_reloaded_options['double_check_subject'] = subscribe_reloaded_get_option('subscribe_reloaded_double_check_subject', 'Please confirm your subscribtion to [post_title]');
94
+ $subscribe_reloaded_options['double_check_content'] = subscribe_reloaded_get_option('subscribe_reloaded_double_check_content', '');
95
+ $subscribe_reloaded_options['management_subject'] = subscribe_reloaded_get_option('subscribe_reloaded_management_subject', 'Manage your subscriptions on [blog_name]');
96
+ $subscribe_reloaded_options['management_content'] = subscribe_reloaded_get_option('subscribe_reloaded_management_content', '');
97
+
98
+ ?>
99
+
100
+ <div class="wrap">
101
+ <h2><?php _e('Subscribe to Comments', 'subscribe-reloaded') ?></h2>
102
+ <form action="admin.php?page=subscribe-to-comments-reloaded/options.php" method="post">
103
+ <table class="form-table <?php echo $wp_locale->text_direction ?>">
104
+ <tbody>
105
+ <tr valign="top">
106
+ <th scope="row" rowspan="2"><label for="manager_page"><?php _e('Management Page ID','subscribe-reloaded') ?></label></th>
107
+ <td style="padding-bottom:0"><input type="text" name="options[manager_page]" id="manager_page" value="<?php echo $subscribe_reloaded_options['manager_page']; ?>" size="10"></td>
108
+ </tr>
109
+ <tr>
110
+ <td class="description" style="padding-top:0"><?php _e('The ID (<strong>not the permalink!</strong>) of the management page you created.','subscribe-reloaded'); ?></td>
111
+ </tr>
112
+
113
+ <tr valign="top">
114
+ <th scope="row" rowspan="2"><label for="purge_days"><?php _e('Autopurge requests','subscribe-reloaded') ?></label></th>
115
+ <td style="padding-bottom:0"><input type="text" name="options[purge_days]" id="purge_days" value="<?php echo $subscribe_reloaded_options['purge_days']; ?>" size="10"> days</td>
116
+ </tr>
117
+ <tr>
118
+ <td class="description" style="padding-top:0"><?php _e("Delete pending subscriptions (not confirmed) after X days. Zero disables this feature.",'subscribe-reloaded'); ?></td>
119
+ </tr>
120
+
121
+ <tr valign="top">
122
+ <th scope="row" rowspan="2"><label for="from_name"><?php _e('Sender name','subscribe-reloaded') ?></label></th>
123
+ <td style="padding-bottom:0"><input type="text" name="options[from_name]" id="from_name" value="<?php echo $subscribe_reloaded_options['from_name']; ?>" size="50"></td>
124
+ </tr>
125
+ <tr>
126
+ <td class="description" style="padding-top:0"><?php _e('Name to use for the "from" field when sending a new notification to the user.','subscribe-reloaded'); ?></td>
127
+ </tr>
128
+
129
+ <tr valign="top">
130
+ <th scope="row" rowspan="2"><label for="from_email"><?php _e('Sender email address','subscribe-reloaded') ?></label></th>
131
+ <td style="padding-bottom:0"><input type="text" name="options[from_email]" id="from_email" value="<?php echo $subscribe_reloaded_options['from_email']; ?>" size="50"></td>
132
+ </tr>
133
+ <tr>
134
+ <td class="description" style="padding-top:0"><?php _e('Email address to use for the "from" field when sending a new notification to the user.','subscribe-reloaded'); ?></td>
135
+ </tr>
136
+
137
+ <tr valign="top">
138
+ <th scope="row" rowspan="2"><label for="notification_subject"><?php _e('Notification subject','subscribe-reloaded') ?></label></th>
139
+ <td style="padding-bottom:0"><input type="text" name="options[notification_subject]" id="notification_subject" value="<?php echo $subscribe_reloaded_options['notification_subject']; ?>" size="70"></td>
140
+ </tr>
141
+ <tr>
142
+ <td class="description" style="padding-top:0"><?php _e('Subject of the notification email. Allowed tag: [post_title]','subscribe-reloaded'); ?></td>
143
+ </tr>
144
+
145
+ <tr valign="top">
146
+ <th scope="row" rowspan="2"><label for="notification_content"><?php _e('Notification message','subscribe-reloaded') ?></label></th>
147
+ <td style="padding-bottom:0"><textarea name="options[notification_content]" id="notification_content" cols="70" rows="5"><?php echo $subscribe_reloaded_options['notification_content']; ?></textarea></td>
148
+ </tr>
149
+ <tr>
150
+ <td class="description" style="padding-top:0"><?php _e('Content of the notification email. Allowed tags: [post_title], [comment_permalink], [comment_author], [comment_content], [post_permalink], [manager_link]','subscribe-reloaded'); ?></td>
151
+ </tr>
152
+
153
+ <tr valign="top">
154
+ <th scope="row" rowspan="2"><label for="checkbox_label"><?php _e('Checkbox label','subscribe-reloaded') ?></label></th>
155
+ <td style="padding-bottom:0"><input type="text" name="options[checkbox_label]" id="checkbox_label" value="<?php echo $subscribe_reloaded_options['checkbox_label']; ?>" size="70"></td>
156
+ </tr>
157
+ <tr>
158
+ <td class="description" style="padding-top:0"><?php _e('Text to show next to the checkbox added to the comment form. Allowed tag: [subscribe_link]','subscribe-reloaded'); ?></td>
159
+ </tr>
160
+
161
+ <tr valign="top">
162
+ <th scope="row" rowspan="2"><label for="checked_by_default"><?php _e('Checked by default','subscribe-reloaded') ?></label></th>
163
+ <td>
164
+ <input type="radio" name="options[checked_by_default]" id="checked_by_default" value="yes"<?php echo ($subscribe_reloaded_options['checked_by_default'] == 'yes')?' checked="checked"':''; ?>> <?php _e('Yes','subscribe-reloaded') ?> &nbsp; &nbsp; &nbsp;
165
+ <input type="radio" name="options[checked_by_default]" value="no" <?php echo ($subscribe_reloaded_options['checked_by_default'] == 'no')?' checked="checked"':''; ?>> <?php _e('No','subscribe-reloaded') ?>
166
+ </td>
167
+ </tr>
168
+ <tr>
169
+ <td class="description" style="padding-top:0"><?php _e('Send a notification email to confirm the subscription (to avoid addresses misuse)','subscribe-reloaded'); ?></td>
170
+ </tr>
171
+
172
+ <tr valign="top">
173
+ <th scope="row" rowspan="2"><label for="subscribed_label"><?php _e('Subscribed label','subscribe-reloaded') ?></label></th>
174
+ <td style="padding-bottom:0"><input type="text" name="options[subscribed_label]" id="subscribed_label" value="<?php echo $subscribe_reloaded_options['subscribed_label']; ?>" size="70"></td>
175
+ </tr>
176
+ <tr>
177
+ <td class="description" style="padding-top:0"><?php _e('Text to show to those users who are already subscribed. Allowed tag: [manager_link]','subscribe-reloaded'); ?></td>
178
+ </tr>
179
+
180
+ <tr valign="top">
181
+ <th scope="row" rowspan="2"><label for="subscribed_waiting_label"><?php _e('Awaiting label','subscribe-reloaded') ?></label></th>
182
+ <td style="padding-bottom:0"><input type="text" name="options[subscribed_waiting_label]" id="subscribed_waiting_label" value="<?php echo $subscribe_reloaded_options['subscribed_waiting_label']; ?>" size="70"></td>
183
+ </tr>
184
+ <tr>
185
+ <td class="description" style="padding-top:0"><?php _e("Text to show to those users who are already subscribed, but haven't clicked on the confirmation link yet. Allowed tag: [manager_link]",'subscribe-reloaded'); ?></td>
186
+ </tr>
187
+
188
+ <tr valign="top">
189
+ <th scope="row" rowspan="2"><label for="author_label"><?php _e('Author label','subscribe-reloaded') ?></label></th>
190
+ <td style="padding-bottom:0"><input type="text" name="options[author_label]" id="author_label" value="<?php echo $subscribe_reloaded_options['author_label']; ?>" size="70"></td>
191
+ </tr>
192
+ <tr>
193
+ <td class="description" style="padding-top:0"><?php _e('Text to show to the author, to manage subscriptions to a given post. Allowed tag: [manager_link]','subscribe-reloaded'); ?></td>
194
+ </tr>
195
+
196
+ <tr valign="top">
197
+ <th scope="row" rowspan="2"><label for="enable_double_check"><?php _e('Enable double check','subscribe-reloaded') ?></label></th>
198
+ <td>
199
+ <input type="radio" name="options[enable_double_check]" id="enable_double_check" value="yes"<?php echo ($subscribe_reloaded_options['enable_double_check'] == 'yes')?' checked="checked"':''; ?>> <?php _e('Yes','subscribe-reloaded') ?> &nbsp; &nbsp; &nbsp;
200
+ <input type="radio" name="options[enable_double_check]" value="no" <?php echo ($subscribe_reloaded_options['enable_double_check'] == 'no')?' checked="checked"':''; ?>> <?php _e('No','subscribe-reloaded') ?>
201
+ </td>
202
+ </tr>
203
+ <tr>
204
+ <td class="description" style="padding-top:0"><?php _e('Send a notification email to confirm the subscription (to avoid addresses misuse).','subscribe-reloaded'); ?></td>
205
+ </tr>
206
+
207
+ <tr valign="top">
208
+ <th scope="row" rowspan="2"><label for="double_check_subject"><?php _e('Double check subject','subscribe-reloaded') ?></label></th>
209
+ <td style="padding-bottom:0"><input type="text" name="options[double_check_subject]" id="double_check_subject" value="<?php echo $subscribe_reloaded_options['double_check_subject']; ?>" size="70"></td>
210
+ </tr>
211
+ <tr>
212
+ <td class="description" style="padding-top:0"><?php _e('Subject of the confirmation email. Allowed tag: [post_title]','subscribe-reloaded'); ?></td>
213
+ </tr>
214
+
215
+ <tr valign="top">
216
+ <th scope="row" rowspan="2"><label for="double_check_content"><?php _e('Double check message','subscribe-reloaded') ?></label></th>
217
+ <td style="padding-bottom:0"><textarea name="options[double_check_content]" id="double_check_content" cols="70" rows="5"><?php echo $subscribe_reloaded_options['double_check_content']; ?></textarea></td>
218
+ </tr>
219
+ <tr>
220
+ <td class="description" style="padding-top:0"><?php _e('Content of the confirmation email. Allowed tags: [post_permalink], [confirm_link], [post_title], [manager_link]','subscribe-reloaded'); ?></td>
221
+ </tr>
222
+
223
+ <tr valign="top">
224
+ <th scope="row" rowspan="2"><label for="management_subject"><?php _e('Management subject','subscribe-reloaded') ?></label></th>
225
+ <td style="padding-bottom:0"><input type="text" name="options[management_subject]" id="management_subject" value="<?php echo $subscribe_reloaded_options['management_subject']; ?>" size="70"></td>
226
+ </tr>
227
+ <tr>
228
+ <td class="description" style="padding-top:0"><?php _e('Subject of the mail sent to those who request to access their management page. Allowed tag: [blog_name]','subscribe-reloaded'); ?></td>
229
+ </tr>
230
+
231
+ <tr valign="top">
232
+ <th scope="row" rowspan="2"><label for="management_content"><?php _e('Management message','subscribe-reloaded') ?></label></th>
233
+ <td style="padding-bottom:0"><textarea name="options[management_content]" id="management_content" cols="70" rows="5"><?php echo $subscribe_reloaded_options['management_content']; ?></textarea></td>
234
+ </tr>
235
+ <tr>
236
+ <td class="description" style="padding-top:0"><?php _e('Content of the management email. Allowed tags: [blog_name], [manager_link]','subscribe-reloaded'); ?></td>
237
+ </tr>
238
+ </tbody>
239
+ </table>
240
+ <p class="submit"><input type="submit" value="<?php _e('Save Changes') ?>" class="button-primary" name="Submit"></p>
241
+ </form>
242
+ </div>
readme.txt ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ === Subscribe To Comments Reloaded ===
2
+
3
+ Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=Z732JS7KQ6RRL&lc=US&item_name=Subscribe%20To%20Comments%20Reloaded&currency_code=USD&bn=PP%2dDonationsBF%3abtn_donate_SM%2egif%3aNonHosted
4
+ Tags: subscribe, comments, notification, subscription, manage, double check-in, follow, commenting
5
+ Requires at least: 2.9.2
6
+ Tested up to: 3.0.1
7
+ Stable tag: 1.0
8
+
9
+ == Description ==
10
+ 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, block all notifications, or even change their notification e-mail address! It solves most of the issues present in Mark Jaquith's version, using the latest Wordpress features and functionality. Plus, it introduces a double check-in mechanism, that requires users to confirm their subscription clicking on a link they will receive via email.
11
+
12
+ ## Requirements
13
+ * Wordpress 2.9 or higher
14
+ * PHP 5.1 or higher
15
+ * MySQL 5.x or higher
16
+ * At least 5 MB of free web space
17
+ * At least 5 MB of free DB space
18
+
19
+ ## Main Features
20
+ * Does not modify Wordpress system tables anymore
21
+ * Imports Subscribe To Comments data
22
+ * Management page is now easier to create and adapts to EVERY layout existing out there
23
+ * If you decide to uninstall this plugin, no crap will be left around in your DB, I promise!
24
+ * Source code is easier to read and update, and its size is almost halved (you're welcome, providers!)
25
+ * Messages are fully customizable, no poEdit required
26
+ * Fully localizable in your language (please contribute!)
27
+ * Uses WP timezone settings and date formatting
28
+
29
+ == Installation ==
30
+
31
+ 0. If you are using Subscribe To Comments by Mark Jaquith, disable it
32
+ 1. Upload the entire folder and all the subfolders to your Wordpress plugins' folder
33
+ 2. Activate it
34
+ 3. Create a new page whose content is the error message shown to the user is something goes wrong
35
+ 4. Write down the ID of this new page
36
+ 5. Go to Settings > Subscribe to Comments and enter the ID in the first field
37
+ 6. Customize all the messages to fit your needs
38
+
39
+
40
+ == Changelog ==
41
+
42
+ = 1.0 =
43
+ * First beta release
subscribe-to-comments-reloaded.php ADDED
@@ -0,0 +1,503 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Plugin Name: Subscribe to Comments Reloaded
4
+ Version: 1.0
5
+ Plugin URI: http://www.duechiacchiere.it/
6
+ Description: Subscribe to Comments with Double-Opt-In
7
+ Author: camu
8
+ Author URI: http://www.duechiacchiere.it/
9
+ */
10
+
11
+ // Avoid direct access to this piece of code
12
+ if (strpos($_SERVER['SCRIPT_FILENAME'], basename(__FILE__))){
13
+ header('Location: /');
14
+ exit;
15
+ }
16
+
17
+ function subscribe_reloaded_show(){
18
+ global $post;
19
+
20
+ $manager_link = get_permalink(get_option('subscribe_reloaded_manager_page', ''));
21
+ if (strpos($manager_link, '?') !== false)
22
+ $manager_link = "$manager_link&amp;srp=$post->ID";
23
+ else
24
+ $manager_link = "$manager_link?srp=$post->ID";
25
+
26
+ $wp_subscribe_reloaded = new wp_subscribe_reloaded();
27
+ if ($wp_subscribe_reloaded->is_author($post->post_author)){ // when the second parameter is empty, cookie value will be used
28
+ echo str_replace('[manager_link]', $manager_link,
29
+ stripslashes(get_option('subscribe_reloaded_author_label', "You are the author of this entry. <a href='[manager_link]'>Manage its subscriptions</a>.")));
30
+ }
31
+ elseif($wp_subscribe_reloaded->is_user_subscribed($post->ID, '', 'Y')){
32
+ echo str_replace('[manager_link]', $manager_link,
33
+ stripslashes(get_option('subscribe_reloaded_subscribed_label', "You are subscribed to this entry. <a href='[manager_link]'>Manage your subscriptions</a>.")));
34
+ }
35
+ elseif($wp_subscribe_reloaded->is_user_subscribed($post->ID, '', 'C')){
36
+ echo str_replace('[manager_link]', $manager_link,
37
+ stripslashes(get_option('subscribe_reloaded_subscribed_waiting_label', "Your subscription to this entry needs to be confirmed. <a href='[manager_link]'>Manage your subscriptions</a>.")));
38
+ }
39
+ else{
40
+ $checked_by_default = get_option('subscribe_reloaded_checked_by_default', 'no');
41
+ $checkbox_label = str_replace('[subscribe_link]', "$manager_link&amp;sra=s",
42
+ 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.")));
43
+ echo "<input type='checkbox' name='subscribe-reloaded' id='subscribe-reloaded' value='yes'".(($checked_by_default == 'yes')?" checked='checked'":'')." /> $checkbox_label";
44
+ }
45
+ }
46
+
47
+ class wp_subscribe_reloaded {
48
+
49
+ // Function: __construct
50
+ // Description: Constructor -- Sets things up.
51
+ // Input: none
52
+ // Output: none
53
+ public function __construct(){
54
+ global $table_prefix;
55
+
56
+ // We use a bunch of tables to store data
57
+ $this->table_subscriptions = $table_prefix . 'subscribe_reloaded';
58
+ $this->salt = defined('NONCE_KEY')?NONCE_KEY:'please create a unique key in your wp-config.php';
59
+ }
60
+ // end __construct
61
+
62
+ // Function: activate
63
+ // Description: Creates tables, imports data, etc...
64
+ // Input: none
65
+ // Output: none
66
+ public function activate(){
67
+ global $wpdb;
68
+
69
+ // Load localization files
70
+ load_plugin_textdomain('subscribe-reloaded', WP_PLUGIN_DIR .'/subscribe-to-comments-reloaded/langs', '/subscribe-to-comments-reloaded/langs');
71
+
72
+ // Table that stores the actual data about subscribers
73
+ $subscriptions_table_sql = "
74
+ CREATE TABLE IF NOT EXISTS `$this->table_subscriptions` (
75
+ `email` VARCHAR(255) NOT NULL DEFAULT '',
76
+ `status` enum('Y','C','N') NOT NULL DEFAULT 'N',
77
+ `post_ID` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
78
+ `dt` TIMESTAMP(10) NOT NULL DEFAULT CURRENT_TIMESTAMP,
79
+ PRIMARY KEY `subscription` (`email`,`post_ID`),
80
+ INDEX (`email`)
81
+ )";
82
+ $this->_create_table($subscriptions_table_sql, $this->table_subscriptions);
83
+
84
+ // Import the information collected by the OLD plugin, if needed
85
+ $result = $wpdb->get_row("DESC $wpdb->comments comment_subscribe", ARRAY_A);
86
+ if (is_array($result)){
87
+ $import_sql = "
88
+ INSERT INTO `$this->table_subscriptions` (`email`,`status`,`post_ID`,`dt`)
89
+ SELECT `comment_author_email`, `comment_subscribe`, `comment_post_ID`, `comment_date`
90
+ FROM $wpdb->comments
91
+ WHERE `comment_author_email` LIKE '%@%.%'
92
+ GROUP BY `comment_author_email`, `comment_post_ID`
93
+ ";
94
+ $wpdb->query($import_sql);
95
+
96
+ // Remove the old data
97
+ $wpdb->query("ALTER TABLE $wpdb->comments DROP COLUMN `comment_subscribe`");
98
+ }
99
+
100
+ add_option('subscribe_reloaded_manager_page', '', '', 'no');
101
+ add_option('subscribe_reloaded_purge_days', '30', '', 'no');
102
+ add_option('subscribe_reloaded_from_name', 'admin', '', 'no');
103
+ add_option('subscribe_reloaded_from_email', get_bloginfo('admin_email'), '', 'no');
104
+ add_option('subscribe_reloaded_notification_subject', __('There is a new comment to [post_title]','subscribe-reloaded'), '', 'no');
105
+ add_option('subscribe_reloaded_notification_content', __('There is a new comment to [post_title].
106
+ Comment Link: [comment_permalink]
107
+ Author: [comment_author]
108
+ Comment:
109
+ [comment_content]
110
+
111
+ Permalink: [post_permalink]
112
+ Manage your subscriptions: [manager_link]','subscribe-reloaded'), '', 'no');
113
+ 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');
114
+ add_option('subscribe_reloaded_checked_by_default', 'no', '', 'no');
115
+ add_option('subscribe_reloaded_subscribed_label', __("You are subscribed to this entry. <a href='[manager_link]'>Manage</a> your subscriptions.",'subscribe-reloaded'), '', 'no');
116
+ add_option('subscribe_reloaded_subscribed_waiting_label', __("Your subscription to this entry needs to be confirmed. <a href='[manager_link]'>Manage your subscriptions</a>.",'subscribe-reloaded'), '', 'no');
117
+ add_option('subscribe_reloaded_author_label', __("You are the author of this entry. <a href='[manager_link]'>Manage</a> its subscriptions.",'subscribe-reloaded'), '', 'no');
118
+ add_option('subscribe_reloaded_enable_double_check', 'no', '', 'no');
119
+ add_option('subscribe_reloaded_double_check_subject', __('Please confirm your subscribtion to [post_title]','subscribe-reloaded'), '', 'no');
120
+ add_option('subscribe_reloaded_double_check_content', __('You have requested to be notified every time a new comment is added to:
121
+ [post_permalink]
122
+
123
+ Please confirm your request by clicking on this link:
124
+ [confirm_link]','subscribe-reloaded'), '', 'no');
125
+
126
+
127
+ add_option('subscribe_reloaded_management_subject', __('Manage your subscriptions on [blog_name]','subscribe-reloaded'));
128
+ 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:
129
+ [manager_link]','subscribe-reloaded'));
130
+
131
+ // Schedule the autopurge hook
132
+ if (!wp_next_scheduled('subscribe_reloaded_purge'))
133
+ wp_schedule_event(time(), 'daily', 'subscribe_reloaded_purge');
134
+ }
135
+ // end activate
136
+
137
+ // Function: deactivate
138
+ // Description: Performs some clean-up maintenance (disable cron job).
139
+ // Input: none
140
+ // Output: none
141
+ public function deactivate() {
142
+
143
+ // Unschedule the autopurge hook
144
+ if (wp_next_scheduled('subscribe_reloaded_purge') > 0)
145
+ wp_clear_scheduled_hook('subscribe_reloaded_purge');
146
+ }
147
+ // end deactivate
148
+
149
+ // Function: subscribe_reloaded_purge
150
+ // Description: Removes old entries from the database
151
+ // Input: none
152
+ // Output: none
153
+ public function subscribe_reloaded_purge() {
154
+ global $wpdb;
155
+
156
+ if (($autopurge_interval = intval(get_option('subscribe_reloaded_purge_days', 0))) <= 0) return;
157
+
158
+ // Delete old entries
159
+ $delete_sql = "DELETE FROM `$this->table_subscriptions` WHERE `dt` <= DATE_SUB(NOW(), INTERVAL $autopurge_interval day)";
160
+ $wpdb->query($delete_sql);
161
+ }
162
+ // end subscribe_reloaded_purge
163
+
164
+ // Function: confirmation_email
165
+ // Description: Sends the confirmation message to a given user
166
+ // Input: email, post_id (to retrieve its title and permalink), comment_id
167
+ // Output: none
168
+ public function confirmation_email($_email = '', $_post_ID = 0){
169
+ // Retrieve the options from the database
170
+ $from_name = get_option('subscribe_reloaded_from_name', 'admin');
171
+ $from_email = get_option('subscribe_reloaded_from_email', get_bloginfo('admin_email'));
172
+ $subject = stripslashes(get_option('subscribe_reloaded_double_check_subject', 'Please confirm your subscribtion to [post_title]'));
173
+ $message = stripslashes(get_option('subscribe_reloaded_double_check_content', ''));
174
+ $manager_link = get_permalink(get_option('subscribe_reloaded_manager_page', ''));
175
+ $clean_email = urlencode($this->clean_email($_email));
176
+ $subscriber_salt = md5($this->salt.$clean_email);
177
+
178
+ if (strpos($manager_link, '?') !== false){
179
+ $confirm_link = "$manager_link&sre=$clean_email&srk=$subscriber_salt&srp=$_post_ID&sra=c";
180
+ $manager_link = "$manager_link&sre=$clean_email&srk=$subscriber_salt";
181
+ }
182
+ else{
183
+ $confirm_link = "$manager_link?sre=$clean_email&srk=$subscriber_salt&srp=$_post_ID&sra=c";
184
+ $manager_link = "$manager_link?sre=$clean_email&srk=$subscriber_salt";
185
+ }
186
+
187
+ $headers = "MIME-Version: 1.0\n";
188
+ $headers .= "From: $from_name <$from_email>\n";
189
+ $headers .= "Content-Type: text/plain; charset=".get_bloginfo('charset')."\n";
190
+
191
+ $post = get_post($_post_ID);
192
+ $post_permalink = get_permalink($_post_ID);
193
+
194
+ // Replace tags with their actual values
195
+ $subject = str_replace('[post_title]', $post->post_title, $subject);
196
+ $message = str_replace('[post_title]', $post->post_title, $message);
197
+ $message = str_replace('[post_permalink]', $post_permalink, $message);
198
+ $message = str_replace('[confirm_link]', $confirm_link, $message);
199
+ $message = str_replace('[manager_link]', $manager_link, $message);
200
+
201
+ wp_mail($clean_email, $subject, $message, $headers);
202
+ }
203
+ // end confirmation_email
204
+
205
+ // Function: new_comment_posted
206
+ // Description: Deletes a row in the subscriptions' table
207
+ // Input: post_id, email
208
+ // Output: none
209
+ public function new_comment_posted($_comment_ID = 0, $_comment_status = 0){
210
+ global $wpdb;
211
+
212
+ // Retrieve the information about the new comment
213
+ $info = $wpdb->get_row("SELECT `comment_post_ID`, `comment_author_email` FROM $wpdb->comments WHERE `comment_ID` = '$_comment_ID' AND `comment_approved` = 1 LIMIT 1", OBJECT);
214
+ $subscribed_emails = array();
215
+
216
+ // Send a notification to all the users subscribed to this post
217
+ if (!empty($info)){
218
+ $subscribed_emails = $this->_get_subscriptions($info->comment_post_ID, 'Y');
219
+ foreach($subscribed_emails as $a_email){
220
+ // Skip the user who posted this new comment
221
+ if ($a_email != $info->comment_author_email) $this->_notify_user($a_email, $info->comment_post_ID, $_comment_ID);
222
+ }
223
+ }
224
+
225
+ // Did this visitor request to be subscribed to the discussion? (and s/he is not subscribed)
226
+ if (!empty($_POST['subscribe-reloaded']) && $_POST['subscribe-reloaded'] == 'yes' && is_array($subscribed_emails)){
227
+
228
+ // Are we using double check-in?
229
+ $enable_double_check = get_option('subscribe_reloaded_enable_double_check', 'no');
230
+ if ($enable_double_check == 'yes' && !$this->is_user_subscribed($info->comment_post_ID, $info->comment_author_email, 'C')){
231
+ $this->add_subscription($info->comment_author_email, 'C', $info->comment_post_ID);
232
+ $this->confirmation_email($info->comment_author_email, $info->comment_post_ID);
233
+ }
234
+ elseif(!$this->is_user_subscribed($info->comment_post_ID, $info->comment_author_email, 'Y')){
235
+ $this->add_subscription($info->comment_author_email, 'Y', $info->comment_post_ID);
236
+ }
237
+ }
238
+ return $_comment_ID;
239
+ }
240
+ // end new_comment_posted
241
+
242
+ // Function: subscribe_reloaded_manage
243
+ // Description: Displays the appropriate management page
244
+ // Input: default page content
245
+ // Output: appropriate page content
246
+ public function subscribe_reloaded_manage($_content = ''){
247
+ global $post;
248
+
249
+ $manager_page_id = get_option('subscribe_reloaded_manager_page', '0');
250
+ if (empty($post) || ($post->ID != $manager_page_id) || (strpos($_SERVER['REQUEST_URI'],get_permalink($manager_page_id)) !== false) ) return $_content;
251
+
252
+ $post_ID = !empty($_POST['srp'])?intval($_POST['srp']):(!empty($_GET['srp'])?intval($_GET['srp']):0);
253
+
254
+ // Is the post_id passed in the query string valid?
255
+ $target_post = get_post($post_ID);
256
+ if (($post_ID > 0) && !is_object($target_post)){
257
+ return $_content;
258
+ }
259
+
260
+ $action = !empty($_POST['sra'])?$_POST['sra']:(!empty($_GET['sra'])?$_GET['sra']:0);
261
+ $email = !empty($_POST['sre'])?urldecode($_POST['sre']):(!empty($_GET['sre'])?urldecode($_GET['sre']):0);
262
+ $key = !empty($_POST['srk'])?$_POST['srk']:(!empty($_GET['srk'])?$_GET['srk']:0);
263
+
264
+ // Subscribe without commenting
265
+ if (!empty($action) && ($action == 's') && ($post_ID > 0)){
266
+ include(WP_PLUGIN_DIR.'/subscribe-to-comments-reloaded/templates/subscribe.php');
267
+ return '';
268
+ }
269
+
270
+ // Management page for post authors
271
+ if (($post_ID > 0) && $this->is_author($target_post->post_author)){
272
+ include(WP_PLUGIN_DIR.'/subscribe-to-comments-reloaded/templates/author.php');
273
+ return '';
274
+ }
275
+
276
+ // Confirm your subscription (double check-in)
277
+ if ( ($post_ID > 0) && !empty($email) && !empty($key) && !empty($action) &&
278
+ $this->is_user_subscribed($post_ID, $email, 'C') &&
279
+ $this->_is_valid_key($key, $email) &&
280
+ ($action = 'c') ){
281
+ include(WP_PLUGIN_DIR.'/subscribe-to-comments-reloaded/templates/confirm.php');
282
+ return '';
283
+ }
284
+
285
+ // Manage your subscriptions (user)
286
+ if ( !empty($email) && ((!empty($key) && $this->_is_valid_key($key, $email)) || current_user_can('manage_options')) ){
287
+ include(WP_PLUGIN_DIR.'/subscribe-to-comments-reloaded/templates/user.php');
288
+ return '';
289
+ }
290
+
291
+ // Get the management link in your email
292
+ if (!empty($_COOKIE['comment_author_email_'. COOKIEHASH])){
293
+ include(WP_PLUGIN_DIR.'/subscribe-to-comments-reloaded/templates/request-management-link.php');
294
+ return '';
295
+ }
296
+
297
+ return $_content;
298
+ }
299
+ // end subscribe_reloaded_manage
300
+
301
+ // Function: add_subscription
302
+ // Description: Adds a new row to the table
303
+ // Input: email, status, post_id
304
+ // Output: none
305
+ public function add_subscription($_email, $_status, $_post_ID){
306
+ global $wpdb;
307
+
308
+ // Using Wordpress local time
309
+ $dt = date_i18n('Y-m-d H:i:s');
310
+
311
+ $clean_email = $this->clean_email($_email);
312
+ $wpdb->query("INSERT IGNORE INTO $this->table_subscriptions (`email`, `status`, `post_ID`, `dt`) VALUES ('$clean_email', '$_status', '$_post_ID', '$dt')");
313
+ }
314
+ // end add_subscription
315
+
316
+ // Function: delete_subscription
317
+ // Description: Deletes a row in the subscriptions' table
318
+ // Input: post_id, email
319
+ // Output: none
320
+ public function delete_subscription($_post_ID = '', $_email = ''){
321
+ global $wpdb;
322
+
323
+ $sql = "DELETE FROM $this->table_subscriptions WHERE `post_ID` = '$_post_ID'".(!empty($_email)?" AND `email` = '$_email'":'');
324
+ $wpdb->query( $sql );
325
+ }
326
+ // end delete_subscription
327
+
328
+ // Function: is_user_subscribed
329
+ // Description: Checks if a given email address is subscribed to a post
330
+ // Input: post_id
331
+ // Output: boolean
332
+ public function is_user_subscribed($_post_ID = 0, $_email = '', $_status = 'Y'){
333
+
334
+ if ((empty($_COOKIE['comment_author_email_'. COOKIEHASH]) && empty($_email)) || empty($_post_ID)) return false;
335
+
336
+ $subscribed_emails = $this->_get_subscriptions($_post_ID, $_status);
337
+ $user_email = empty($_email)?urldecode($_COOKIE['comment_author_email_'. COOKIEHASH]):$_email;
338
+
339
+ if (in_array($user_email, $subscribed_emails)) return true;
340
+ return false;
341
+ }
342
+ // end is_user_subscribed
343
+
344
+ // Function: is_author
345
+ // Description: Checks if current logged in user is the author of this post
346
+ // Input: author ID
347
+ // Output: boolean
348
+ public function is_author($_post_author){
349
+ global $current_user;
350
+ return (!empty($current_user) && (($_post_author == $current_user->ID) || current_user_can('manage_options')));
351
+ }
352
+ // end is_author
353
+
354
+ // Function: clean_email
355
+ // Description: Returns an email address where some possible 'offending' strings have been removed
356
+ // Input: email
357
+ // Output: none
358
+ public function clean_email($_email){
359
+ $offending_strings = array(
360
+ "/to\:/i",
361
+ "/from\:/i",
362
+ "/bcc\:/i",
363
+ "/cc\:/i",
364
+ "/content\-transfer\-encoding\:/i",
365
+ "/content\-type\:/i",
366
+ "/mime\-version\:/i"
367
+ );
368
+ return htmlspecialchars(stripslashes(strip_tags(preg_replace($offending_strings, '', $_email))));
369
+ }
370
+ // end clean_email
371
+
372
+ // Function: add_config_menu
373
+ // Description: Adds a new entry in the admin menu, to manage this plugin's options
374
+ // Input: none
375
+ // Output: none
376
+ public function add_config_menu( $_s ) {
377
+ global $current_user;
378
+
379
+ if (current_user_can('manage_options')){
380
+ add_options_page( 'Subscribe to Comments', 'Subscribe to Comments', 'manage_options', WP_PLUGIN_DIR.'/subscribe-to-comments-reloaded/options.php' );
381
+ }
382
+ return $_s;
383
+ }
384
+ // end add_config_menu
385
+
386
+ // Function: _create_table
387
+ // Description: Creates a table in the database
388
+ // Input: SQL with the structure of the table to be created, name of the table
389
+ // Output: boolean to detect if table was created
390
+ private function _create_table($_sql = '', $_tablename = ''){
391
+ global $wpdb;
392
+
393
+ $wpdb->query( $_sql );
394
+
395
+ // Let's make sure this table was actually created
396
+ foreach ( $wpdb->get_col("SHOW TABLES", 0) as $a_table ){
397
+ if ( $a_table == $_tablename ) {
398
+ return true;
399
+ }
400
+ }
401
+ return false;
402
+ }
403
+ // end _create_table
404
+
405
+ // Function: _is_valid_key
406
+ // Description: Checks if a key is valid for a given email address
407
+ // Input: key, email
408
+ // Output: boolean
409
+ private function _is_valid_key($_key, $_email){
410
+ return (md5($this->salt.$_email) == $_key);
411
+ }
412
+ // end _is_valid_key
413
+
414
+ // Function: _notify_user
415
+ // Description: Sends the notification message to a given user
416
+ // Input: email, post_id (to retrieve its title and permalink), comment_id
417
+ // Output: none
418
+ private function _notify_user($_email = '', $_post_ID = 0, $_comment_ID = 0){
419
+ // Retrieve the options from the database
420
+ $from_name = get_option('subscribe_reloaded_from_name', 'admin');
421
+ $from_email = get_option('subscribe_reloaded_from_email', get_bloginfo('admin_email'));
422
+ $subject = stripslashes(get_option('subscribe_reloaded_notification_subject', 'There is a new comment on the post [post_title]'));
423
+ $message = stripslashes(get_option('subscribe_reloaded_notification_content', ''));
424
+ $manager_link = get_permalink(get_option('subscribe_reloaded_manager_page', ''));
425
+ $clean_email = urlencode($this->clean_email($_email));
426
+ $subscriber_salt = md5($this->salt.$clean_email);
427
+ if (strpos($manager_link, '?') !== false){
428
+ $manager_link = "$manager_link&sre=".urlencode($clean_email)."&srk=$subscriber_salt";
429
+ }
430
+ else{
431
+ $manager_link = "$manager_link?sre=".urlencode($clean_email)."&srk=$subscriber_salt";
432
+ }
433
+
434
+ $headers = "MIME-Version: 1.0\n";
435
+ $headers .= "From: $from_name <$from_email>\n";
436
+ $headers .= "Content-Type: text/plain; charset=".get_bloginfo('charset')."\n";
437
+
438
+ $post = get_post($_post_ID);
439
+ $comment = get_comment($_comment_ID);
440
+ $post_permalink = get_permalink( $_post_ID );
441
+ $comment_permalink = get_comment_link($_comment_ID);
442
+
443
+ // Replace tags with their actual values
444
+ $subject = str_replace('[post_title]', $post->post_title, $subject);
445
+ $message = str_replace('[post_title]', $post->post_title, $message);
446
+ $message = str_replace('[post_permalink]', $post_permalink, $message);
447
+ $message = str_replace('[comment_permalink]', $comment_permalink, $message);
448
+ $message = str_replace('[comment_author]', $comment->comment_author, $message);
449
+ $message = str_replace('[comment_content]', $comment->comment_content, $message);
450
+ $message = str_replace('[manager_link]', $manager_link, $message);
451
+
452
+ wp_mail($clean_email, $subject, $message, $headers);
453
+ }
454
+ // end _notify_user
455
+
456
+ // Function: _get_subscriptions
457
+ // Description: Retrieves a list of emails subscribed to this post
458
+ // Input: post_id
459
+ // Output: array of email addresses
460
+ private function _get_subscriptions($_post_ID = 0, $_status = 'Y'){
461
+ global $wpdb;
462
+ $flat_result = array();
463
+
464
+ $result = $wpdb->get_results("SELECT DISTINCT `email` FROM $this->table_subscriptions WHERE `post_ID` = '$_post_ID' AND `status` = '$_status'", ARRAY_N);
465
+ if (is_array($result)){
466
+ foreach($result as $a_result){
467
+ $flat_result[] = $a_result[0];
468
+ }
469
+ }
470
+
471
+ return $flat_result;
472
+ }
473
+ // end _get_subscriptions
474
+ }
475
+ // end of class declaration
476
+
477
+ // Ok, let's use every tool we defined here above
478
+ $wp_subscribe_reloaded = new wp_subscribe_reloaded();
479
+
480
+ // Initialization routine that should be executed on activation/deactivation
481
+ register_activation_hook( __FILE__, array( &$wp_subscribe_reloaded, 'activate' ) );
482
+ register_deactivation_hook( __FILE__, array( &$wp_subscribe_reloaded, 'deactivate' ) );
483
+
484
+ // Add appropriate entries in the admin menu
485
+ add_action( 'admin_menu', array( &$wp_subscribe_reloaded, 'add_config_menu' ) );
486
+
487
+ // What to do when a new comment is posted
488
+ add_action('comment_post', array( &$wp_subscribe_reloaded, 'new_comment_posted' ) );
489
+
490
+ // Add user's subscription after a pending comment is approved
491
+ // add_action('wp_set_comment_status', create_function('$a', 'global $sg_subscribe; sg_subscribe_start(); return $sg_subscribe->send_notifications($a);'));
492
+
493
+ // Remove subscriptions attached to a post that is being deleted
494
+ add_action( 'delete_post', array( &$wp_subscribe_reloaded, 'delete_subscription' ) );
495
+
496
+ // Provide content for the management page using WP filters
497
+ add_filter('the_content', array( &$wp_subscribe_reloaded, 'subscribe_reloaded_manage' ), 50);
498
+
499
+ // Show the checkbox - You can manually override this by adding the corresponding function in your template
500
+ add_action('comment_form', 'subscribe_reloaded_show');
501
+
502
+ // Create a hook to use with the daily cron job
503
+ add_action('subscribe_reloaded_purge', array( &$wp_slimstat,'subscribe_reloaded_purge') );
templates/author.php ADDED
@@ -0,0 +1,87 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ // Avoid direct access to this piece of code
3
+ if (strpos($_SERVER['SCRIPT_FILENAME'], basename(__FILE__))){
4
+ header('Location: /');
5
+ exit;
6
+ }
7
+
8
+ // Load localization files
9
+ load_plugin_textdomain('subscribe-reloaded', WP_PLUGIN_DIR .'/subscribe-to-comments-reloaded/langs', '/subscribe-to-comments-reloaded/langs');
10
+ $wp_subscribe_reloaded = new wp_subscribe_reloaded();
11
+ global $wpdb;
12
+
13
+ $clean_post_id = !empty($_POST['srp'])?intval($_POST['srp']):(!empty($_GET['srp'])?intval($_GET['srp']):0);
14
+
15
+ if (!empty($_POST['email_list']) && !empty($_POST['action_type'])){
16
+ $email_list = implode("','", $_POST['email_list']);
17
+ switch($_POST['action_type']){
18
+ case 'd':
19
+ $wpdb->query("DELETE FROM $wp_subscribe_reloaded->table_subscriptions WHERE `email` IN ('$email_list') AND `post_ID` = '$clean_post_id'");
20
+ break;
21
+ case 's':
22
+ $wpdb->query("UPDATE $wp_subscribe_reloaded->table_subscriptions SET `status` = 'N' WHERE `email` IN ('$email_list') AND `post_ID` = '$clean_post_id'");
23
+ break;
24
+ case 'a':
25
+ $wpdb->query("UPDATE $wp_subscribe_reloaded->table_subscriptions SET `status` = 'Y' WHERE `email` IN ('$email_list') AND `post_ID` = '$clean_post_id'");
26
+ break;
27
+ default:
28
+ break;
29
+ }
30
+ echo '<p>'.__("Subscriptions have been successfully updated. In order to cancel or suspend more notifications, select the corresponding checkbox(es) and click on the button at the end of the list.", 'subscribe-reloaded').'</p>';
31
+ }
32
+ else{
33
+ echo '<p>'.__("You can manage the subscriptions to your articles on this page. 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').'</p>';
34
+ }
35
+
36
+ ?>
37
+
38
+ <form action="<?php echo htmlspecialchars($_SERVER['REQUEST_URI']) ?>" method="post" id="email_list_form"
39
+ onsubmit="return confirm('<?php _e('Please remember: this operation cannot be undone. Are you sure you want to proceed?', 'subscribe-reloaded') ?>')">
40
+ <fieldset>
41
+ <?php
42
+ $subscriptions = $wpdb->get_results("SELECT `email`, `status`, `dt` FROM $wp_subscribe_reloaded->table_subscriptions WHERE `post_ID` = '$clean_post_id' ORDER BY `dt` ASC, `email` ASC", OBJECT);
43
+ if (is_array($subscriptions) && !empty($subscriptions)){
44
+ $title = __('Title','subscribe-reloaded').': <strong>'.get_the_title($clean_post_id).'</strong>';
45
+ echo "<p>$title</p>";
46
+ echo '<ul>';
47
+ foreach($subscriptions as $i => $a_subscription){
48
+ $subscriber_salt = md5($wp_subscribe_reloaded->salt.$a_subscription->email);
49
+ $manager_link = get_permalink(get_option('subscribe_reloaded_manager_page', ''));
50
+ if (strpos($manager_link, '?') !== false)
51
+ $manager_link = "$manager_link&sre=".urlencode($a_subscription->email)."&srk=$subscriber_salt";
52
+ else
53
+ $manager_link = "$manager_link?sre=".urlencode($a_subscription->email)."&srk=$subscriber_salt";
54
+ echo "<li><input type='checkbox' name='email_list[]' value='{$a_subscription->email}' id='e_$i'/> <label for='e_$i'><a href='$manager_link'>$a_subscription->email</a> - $a_subscription->dt</label> [$a_subscription->status]</li>\n";
55
+ }
56
+ echo '</ul><p>'.__('Legend: Y: subscribed, N: suspended, C: awaiting confirmation','subscribe-reloaded').'</p>';
57
+ echo '<p>'.__('Action:','subscribe-reloaded').' <input type="radio" name="action_type" value="d" id="action_type_delete" /> <label for="action_type_delete">'.__('Delete','subscribe-reloaded').'</label> &nbsp;&nbsp;&nbsp;&nbsp; ';
58
+ echo '<input type="radio" name="action_type" value="s" id="action_type_suspend" checked="checked" /> <label for="action_type_suspend">'.__('Suspend','subscribe-reloaded').'</label> &nbsp;&nbsp;&nbsp;&nbsp; ';
59
+ echo '<input type="radio" name="action_type" value="a" id="action_type_activate" /> <label for="action_type_activate">'.__('Resume','subscribe-reloaded').'</label></p>';
60
+ echo '<p><input type="button" class="subscribe-form-button" onclick="t=document.getElementById(\'email_list_form\').elements;for(i in t) t[i].checked=1" value="'.__('Select all','subscribe-reloaded').'" />';
61
+ echo '<input type="button" class="subscribe-form-button" onclick="t=document.getElementById(\'email_list_form\').elements;for(i in t)if(t[i].checked==1){t[i].checked=0} else{t[i].checked=1}" value="'.__('Invert selection','subscribe-reloaded').'" />';
62
+ echo '<input type="submit" class="subscribe-form-button" value="'.__('Update subscriptions','subscribe-reloaded').'" /><input type="hidden" name="srp" value="'.$clean_post_id.'"/></p>';
63
+
64
+ }
65
+ else{
66
+ echo '<p>'.__('Sorry, no subscriptions found.','subscribe-reloaded').'</p>';
67
+ }
68
+ ?>
69
+ </fieldset>
70
+ </form>
71
+
72
+ <?php if (current_user_can('manage_options')): ?>
73
+ <h3><?php _e('Filters','subscribe-reloaded') ?></h3>
74
+ <form action="<?php echo get_permalink(get_option('subscribe_reloaded_manager_page', '')) ?>" method="post" id="change_post_id">
75
+ <fieldset>
76
+ <p><?php _e('If you know the ID of a post you want to manage, enter it in the field here below to see a list of email addresses subscribed to it','subscribe-reloaded') ?>
77
+ <br/><input type="text" size="10" name="srp" value="" /> <input type="submit" class="subscribe-form-button" value="<?php _e('Search post ID','subscribe-reloaded') ?>" /></p>
78
+ </fieldset>
79
+ </form>
80
+
81
+ <form action="<?php echo get_permalink(get_option('subscribe_reloaded_manager_page', '')) ?>" method="post" id="filter_email_address">
82
+ <fieldset>
83
+ <p><?php _e('If you know the email address you want to manage, enter it in the field here below to see a list of articles this reader is currently watching','subscribe-reloaded') ?>
84
+ <br/><input type="text" size="40" name="sre" value="" /> <input type="submit" class="subscribe-form-button" value="<?php _e('Search email','subscribe-reloaded') ?>" /></p>
85
+ </fieldset>
86
+ </form>
87
+ <?php endif; // current_user_can('manage_options') ?>
templates/confirm.php ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ // Avoid direct access to this piece of code
3
+ if (strpos($_SERVER['SCRIPT_FILENAME'], basename(__FILE__))){
4
+ header('Location: /');
5
+ exit;
6
+ }
7
+
8
+ // Load localization files
9
+ global $wpdb;
10
+ load_plugin_textdomain('subscribe-reloaded', WP_PLUGIN_DIR .'/subscribe-to-comments-reloaded/langs', '/subscribe-to-comments-reloaded/langs');
11
+ $wp_subscribe_reloaded = new wp_subscribe_reloaded();
12
+ $clean_post_id = intval($_GET['srp']);
13
+ $clean_email = urldecode($wp_subscribe_reloaded->clean_email($_GET['sre']));
14
+ $post = get_post($clean_post_id);
15
+
16
+ $wpdb->query("UPDATE $wp_subscribe_reloaded->table_subscriptions SET `status` = 'Y' WHERE `email` = '$clean_email' AND `post_ID` = '$clean_post_id'");
17
+ echo '<p>'.__("Your subscription has been successfully confirmed. Thank you for using our notification service. Now you will receive a message every time someone posts a new comment to", 'subscribe-reloaded')." $post->post_title</p>";
18
+
19
+ ?>
templates/request-management-link.php ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ // Avoid direct access to this piece of code
3
+ if (strpos($_SERVER['SCRIPT_FILENAME'], basename(__FILE__))){
4
+ header('Location: /');
5
+ exit;
6
+ }
7
+
8
+ // Load localization files
9
+ load_plugin_textdomain('subscribe-reloaded', WP_PLUGIN_DIR .'/subscribe-to-comments-reloaded/langs', '/subscribe-to-comments-reloaded/langs');
10
+
11
+ // Is the post_id passed in the query string valid?
12
+ $post_ID = !empty($_GET['srp'])?intval($_GET['srp']):0;
13
+ $post = get_post($post_ID);
14
+ if (($post_ID > 0) && !is_object($post)){
15
+ return '';
16
+ }
17
+ if (!empty($_POST['subscribe_reloaded_email'])){
18
+ $wp_subscribe_reloaded = new wp_subscribe_reloaded();
19
+
20
+ // Send management link
21
+ $from_name = get_option('subscribe_reloaded_from_name', 'admin');
22
+ $from_email = get_option('subscribe_reloaded_from_email', get_bloginfo('admin_email'));
23
+ $subject = stripslashes(get_option('subscribe_reloaded_management_subject', 'Manage your subscriptions on [blog_name]'));
24
+ $message = stripslashes(get_option('subscribe_reloaded_management_content', ''));
25
+ $manager_link = get_permalink(get_option('subscribe_reloaded_manager_page', ''));
26
+ $clean_email = $wp_subscribe_reloaded->clean_email($_POST['subscribe_reloaded_email']);
27
+ $subscriber_salt = md5($wp_subscribe_reloaded->salt.$clean_email);
28
+
29
+ $headers = "MIME-Version: 1.0\n";
30
+ $headers .= "From: $from_name <$from_email>\n";
31
+ $headers .= "Content-Type: text/plain; charset=".get_bloginfo('charset')."\n";
32
+
33
+ if (strpos($manager_link, '?') !== false)
34
+ $manager_link = "$manager_link&sre=".urlencode($clean_email)."&srk=$subscriber_salt";
35
+ else
36
+ $manager_link = "$manager_link?sre=".urlencode($clean_email)."&srk=$subscriber_salt";
37
+
38
+ // Replace tags with their actual values
39
+ $subject = str_replace('[blog_name]', get_bloginfo('name'), $subject);
40
+ $message = str_replace('[blog_name]', get_bloginfo('name'), $message);
41
+ $message = str_replace('[manager_link]', $manager_link, $message);
42
+
43
+ wp_mail($clean_email, $subject, $message, $headers);
44
+
45
+ echo '<p>';
46
+ printf(__("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. In the meanwhile, feel free to go back to <a href='%s'>%s</a>.", 'subscribe-reloaded'), get_permalink($post_ID), $post->post_title);
47
+ echo '</p>';
48
+
49
+ return '';
50
+ }
51
+ ?>
52
+
53
+ <p><?php _e("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'); ?></p>
54
+ <form action="<?php echo $_SERVER['REQUEST_URI'] ?>" method="post" onsubmit="if(this.subscribe_reloaded_email.value=='' || his.subscribe_reloaded_email.value.indexOf('@')==0) return false">
55
+ <fieldset>
56
+ <p><label for="subscribe_reloaded_email"><?php _e('Email','subscribe-reloaded') ?></label> <input type="text" class="subscribe-form-field" name="subscribe_reloaded_email" value="<?php echo isset($_COOKIE['comment_author_email_'.COOKIEHASH])?$_COOKIE['comment_author_email_'.COOKIEHASH]:'email'; ?>" size="22"/>
57
+ <input name="submit" type="submit" class="subscribe-form-button" value="<?php _e('Send','subscribe-reloaded') ?>" /></p>
58
+ </fieldset>
59
+ </form>
templates/subscribe.php ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ // Avoid direct access to this piece of code
3
+ if (strpos($_SERVER['SCRIPT_FILENAME'], basename(__FILE__))){
4
+ header('Location: /');
5
+ exit;
6
+ }
7
+
8
+ // Load localization files
9
+ load_plugin_textdomain('subscribe-reloaded', WP_PLUGIN_DIR .'/subscribe-to-comments-reloaded/langs', '/subscribe-to-comments-reloaded/langs');
10
+
11
+ // Is the post_id passed in the query string valid?
12
+ $post_ID = !empty($_GET['srp'])?intval($_GET['srp']):0;
13
+ $post = get_post($post_ID);
14
+ if (($post_ID > 0) && !is_object($post)){
15
+ return '';
16
+ }
17
+ if (!empty($_POST['subscribe_reloaded_email'])){
18
+ $wp_subscribe_reloaded = new wp_subscribe_reloaded();
19
+ $enable_double_check = get_option('subscribe_reloaded_enable_double_check', 'no');
20
+
21
+ // Send a message to the administrator
22
+ $from_name = get_option('subscribe_reloaded_from_name', 'admin');
23
+ $from_email = get_option('subscribe_reloaded_from_email', get_bloginfo('admin_email'));
24
+ $clean_email = $wp_subscribe_reloaded->clean_email($_POST['subscribe_reloaded_email']);
25
+
26
+ $subject = __('New subscription to','subscribe-reloaded')." $post->post_title";
27
+ $message = __('New subscription to','subscribe-reloaded')." $post->post_title\n".__('User:','subscribe-reloaded')." $clean_email";
28
+
29
+ $headers = "MIME-Version: 1.0\n";
30
+ $headers .= "From: $from_name <$from_email>\n";
31
+ $headers .= "Content-Type: text/plain; charset=".get_bloginfo('charset')."\n";
32
+ wp_mail(get_bloginfo('admin_email'), $subject, $message, $headers);
33
+
34
+ echo '<p>';
35
+ if ($enable_double_check == 'yes'){
36
+ $wp_subscribe_reloaded->add_subscription($_POST['subscribe_reloaded_email'], 'C', $post_ID);
37
+ $this->confirmation_email($_POST['subscribe_reloaded_email'], $post_ID);
38
+ printf(__("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. In the meanwhile, you can go back to <a href='%s'>%s</a>.", 'subscribe-reloaded'), get_permalink($post_ID), $post->post_title);
39
+ }
40
+ else {
41
+ $this->add_subscription($_POST['subscribe_reloaded_email'], 'Y', $post_ID);
42
+ printf(__("Thank you for using our subscription service. Your request has been completed, and you are now subscribed to <a href='%s'>%s</a>. You will receive a notification email every time a new comment to this article is approved and posted by the administrator.", 'subscribe-reloaded'), get_permalink($post_ID), $post->post_title);
43
+ }
44
+ echo '</p>';
45
+
46
+ return '';
47
+ }
48
+ ?>
49
+
50
+ <p><?php printf(__("You can follow the discussion on <strong>%s</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'), $post->post_title); ?></p>
51
+ <form action="<?php echo $_SERVER['REQUEST_URI'] ?>" method="post" onsubmit="if(this.subscribe_reloaded_email.value=='' || his.subscribe_reloaded_email.value.indexOf('@')==0) return false">
52
+ <fieldset>
53
+ <p><label for="subscribe_reloaded_email"><?php _e('Email','subscribe-reloaded') ?></label> <input type="text" class="subscribe-form-field" name="subscribe_reloaded_email" value="<?php echo isset($_COOKIE['comment_author_email_'.COOKIEHASH])?$_COOKIE['comment_author_email_'.COOKIEHASH]:'email'; ?>" size="22"/>
54
+ <input name="submit" type="submit" class="subscribe-form-button" value="<?php _e('Send','subscribe-reloaded') ?>" /></p>
55
+ </fieldset>
56
+ </form>
templates/user.php ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ // Avoid direct access to this piece of code
3
+ if (strpos($_SERVER['SCRIPT_FILENAME'], basename(__FILE__))){
4
+ header('Location: /');
5
+ exit;
6
+ }
7
+
8
+ // Load localization files
9
+ load_plugin_textdomain('subscribe-reloaded', WP_PLUGIN_DIR .'/subscribe-to-comments-reloaded/langs', '/subscribe-to-comments-reloaded/langs');
10
+ $wp_subscribe_reloaded = new wp_subscribe_reloaded();
11
+ global $wpdb;
12
+
13
+ if (!empty($_POST['post_list']) && !empty($_POST['action_type'])){
14
+ $post_list = implode("','", $_POST['post_list']);
15
+ switch($_POST['action_type']){
16
+ case 'd':
17
+ $wpdb->query("DELETE FROM $wp_subscribe_reloaded->table_subscriptions WHERE `post_ID` IN ('$post_list')");
18
+ break;
19
+ case 's':
20
+ $wpdb->query("UPDATE $wp_subscribe_reloaded->table_subscriptions SET `status` = 'N' WHERE `post_ID` IN ('$post_list')");
21
+ break;
22
+ case 'a':
23
+ $wpdb->query("UPDATE $wp_subscribe_reloaded->table_subscriptions SET `status` = 'Y' WHERE `post_ID` IN ('$post_list')");
24
+ break;
25
+ default:
26
+ break;
27
+ }
28
+ echo '<p>'.__("Your subscriptions have been successfully updated. In order to cancel or suspend 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').'</p>';
29
+ }
30
+ else{
31
+ echo '<p>'.__("You can manage your subscriptions to the article of this blog on this page. 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').'</p>';
32
+ }
33
+
34
+ ?>
35
+
36
+ <form action="<?php echo htmlspecialchars($_SERVER['REQUEST_URI']) ?>" method="post" id="post_list_form"
37
+ onsubmit="return confirm('<?php _e('Please remember: this operation cannot be undone. Are you sure you want to proceed?', 'subscribe-reloaded') ?>')">
38
+ <fieldset>
39
+ <?php
40
+ $clean_email = !empty($_POST['sre'])?$wp_subscribe_reloaded->clean_email($_POST['sre']):(!empty($_GET['sre'])?$wp_subscribe_reloaded->clean_email($_GET['sre']):'');
41
+ $subscriptions = $wpdb->get_results("SELECT `status`, `post_ID`, `dt` FROM $wp_subscribe_reloaded->table_subscriptions WHERE `email` = '$clean_email' ORDER BY `status` ASC, `post_ID` ASC", OBJECT);
42
+ if (is_array($subscriptions) && !empty($subscriptions)){
43
+ echo '<ul>';
44
+ foreach($subscriptions as $a_subscription){
45
+ $permalink = get_permalink($a_subscription->post_ID);
46
+ $title = get_the_title($a_subscription->post_ID);
47
+ echo "<li><input type='checkbox' name='post_list[]' value='{$a_subscription->post_ID}' id='post_{$a_subscription->post_ID}'/> <label for='post_{$a_subscription->post_ID}'><a href='$permalink'>$title</a></label> [{$a_subscription->status}]</li>\n";
48
+ }
49
+ echo '</ul><p>'.__('Legend: Y: subscribed, N: suspended, C: awaiting confirmation','subscribe-reloaded').'</p>';
50
+ echo '<p>'.__('Action:','subscribe-reloaded').' <input type="radio" name="action_type" value="d" id="action_type_delete" /> <label for="action_type_delete">'.__('Delete','subscribe-reloaded').'</label> &nbsp;&nbsp;&nbsp;&nbsp; ';
51
+ echo '<input type="radio" name="action_type" value="s" id="action_type_suspend" checked="checked" /> <label for="action_type_suspend">'.__('Suspend','subscribe-reloaded').'</label> &nbsp;&nbsp;&nbsp;&nbsp; ';
52
+ echo '<input type="radio" name="action_type" value="a" id="action_type_activate" /> <label for="action_type_activate">'.__('Resume','subscribe-reloaded').'</label></p>';
53
+ echo '<p><input type="button" class="subscribe-form-button" onclick="t=document.getElementById(\'post_list_form\').elements;for(i in t) t[i].checked=1" value="'.__('Select all','subscribe-reloaded').'" />';
54
+ echo '<input type="button" class="subscribe-form-button" onclick="t=document.getElementById(\'post_list_form\').elements;for(i in t)if(t[i].checked==1){t[i].checked=0} else{t[i].checked=1}" value="'.__('Invert selection','subscribe-reloaded').'" />';
55
+ echo '<input type="submit" class="subscribe-form-button" value="'.__('Update subscriptions','subscribe-reloaded').'" /></p>';
56
+
57
+ }
58
+ else{
59
+ echo '<p>'.__('Sorry, no subscriptions found.','subscribe-reloaded').'</p>';
60
+ }
61
+ ?>
62
+ </fieldset>
63
+ </form>
uninstall.php ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ global $wpdb, $table_prefix;
4
+
5
+ // Goodbye data...
6
+ $wpdb->query("DROP TABLE IF EXISTS `{$table_prefix}subscribe_reloaded`");
7
+
8
+ // Goodbye options...
9
+ delete_option('subscribe_reloaded_manager_page');
10
+ delete_option('subscribe_reloaded_from_name');
11
+ delete_option('subscribe_reloaded_from_email');
12
+ delete_option('subscribe_reloaded_notification_subject');
13
+ delete_option('subscribe_reloaded_notification_content');
14
+ delete_option('subscribe_reloaded_checkbox_label');
15
+ delete_option('subscribe_reloaded_checked_by_default');
16
+ delete_option('subscribe_reloaded_subscribed_label');
17
+ delete_option('subscribe_reloaded_subscribed_waiting_label');
18
+ delete_option('subscribe_reloaded_author_label');
19
+ delete_option('subscribe_reloaded_enable_double_check');
20
+ delete_option('subscribe_reloaded_double_check_subject');
21
+ delete_option('subscribe_reloaded_double_check_content');
22
+ delete_option('subscribe_reloaded_management_subject');
23
+ delete_option('subscribe_reloaded_management_content');
24
+
25
+ // Remove scheduled autopurge events
26
+ wp_clear_scheduled_hook('subscribe_reloaded_purge');
27
+
28
+ ?>