Post Expirator - Version 1.6

Version Description

Fixed invalid html Fixed i18n issues with dates Fixed problem when using "Network Activate" - reworked plugin activation process Replaced "Upgrade" tab with new "Diagnostics" tab Reworked expire logic to limit the number of sql queries needed Added debugging

Download this release

Release Info

Developer axelseaa
Plugin Icon 128x128 Post Expirator
Version 1.6
Comparing to
See all releases

Code changes from version 1.5.4 to 1.6

Files changed (5) hide show
  1. languages/post-expirator.pot +192 -75
  2. post-expirator-debug.php +65 -0
  3. post-expirator.php +297 -164
  4. readme.txt +21 -3
  5. style.css +14 -0
languages/post-expirator.pot CHANGED
@@ -2,9 +2,9 @@
2
  # This file is distributed under the same license as the Post Expirator package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Post Expirator 1.5.4\n"
6
  "Report-Msgid-Bugs-To: http://wordpress.org/tag/post-expirator\n"
7
- "POT-Creation-Date: 2012-05-02 11:50:32+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
@@ -12,160 +12,172 @@ msgstr ""
12
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13
  "Language-Team: LANGUAGE <LL@li.org>\n"
14
 
15
- #: post-expirator.php:18
 
 
 
 
 
 
 
 
 
 
 
 
16
  msgid "l F jS, Y"
17
  msgstr ""
18
 
19
- #: post-expirator.php:19
20
  msgid "g:ia"
21
  msgstr ""
22
 
23
- #: post-expirator.php:20
24
  msgid "Post expires at EXPIRATIONTIME on EXPIRATIONDATE"
25
  msgstr ""
26
 
27
- #: post-expirator.php:44
28
  msgid "Once a Minute"
29
  msgstr ""
30
 
31
- #: post-expirator.php:56
32
- msgid "Post Expirator cron schedules need to be reset"
33
  msgstr ""
34
 
35
- #: post-expirator.php:58
36
  msgid "Click here to reset"
37
  msgstr ""
38
 
39
- #: post-expirator.php:156
40
  msgid "Expires"
41
  msgstr ""
42
 
43
- #: post-expirator.php:172
44
  msgid "Never"
45
  msgstr ""
46
 
47
- #. #-#-#-#-# plugin.pot (Post Expirator 1.5.4) #-#-#-#-#
48
  #. Plugin Name of the plugin/theme
49
- #: post-expirator.php:184 post-expirator.php:186 post-expirator.php:436
50
  msgid "Post Expirator"
51
  msgstr ""
52
 
53
- #: post-expirator.php:218
54
  msgid "Enable Post Expiration"
55
  msgstr ""
56
 
57
- #: post-expirator.php:220
58
  msgid "Year"
59
  msgstr ""
60
 
61
- #: post-expirator.php:221
62
  msgid "Month"
63
  msgstr ""
64
 
65
- #: post-expirator.php:222
66
  msgid "Day"
67
  msgstr ""
68
 
69
- #: post-expirator.php:251
70
  msgid "Hour"
71
  msgstr ""
72
 
73
- #: post-expirator.php:252
74
  msgid "Minute"
75
  msgstr ""
76
 
77
- #: post-expirator.php:262
78
- msgid "H"
79
- msgstr ""
80
-
81
- #: post-expirator.php:273
82
  msgid "Expiration Categories"
83
  msgstr ""
84
 
85
- #: post-expirator.php:283
86
  msgid ""
87
  "Setting an expiration category will change the category at expiration time, "
88
  "and override the default post action"
89
  msgstr ""
90
 
91
- #: post-expirator.php:408 post-expirator.php:436
92
- msgid "Post Expirator Options"
93
  msgstr ""
94
 
95
- #: post-expirator.php:411
96
- msgid "General Settings"
 
 
 
 
97
  msgstr ""
98
 
99
- #: post-expirator.php:412 post-expirator.php:687
100
- msgid "Upgrade"
101
  msgstr ""
102
 
103
- #: post-expirator.php:456
104
  msgid "Saved Options!"
105
  msgstr ""
106
 
107
- #: post-expirator.php:517
108
  msgid ""
109
  "The post expirator plugin sets a custom meta value, and then optionally "
110
  "allows you to select if you want the post changed to a draft status or "
111
  "deleted when it expires."
112
  msgstr ""
113
 
114
- #: post-expirator.php:520
115
  msgid "Valid [postexpirator] attributes:"
116
  msgstr ""
117
 
118
- #: post-expirator.php:522
119
  msgid "type - defaults to full - valid options are full,date,time"
120
  msgstr ""
121
 
122
- #: post-expirator.php:523
123
  msgid ""
124
  "dateformat - format set here will override the value set on the settings page"
125
  msgstr ""
126
 
127
- #: post-expirator.php:524
128
  msgid ""
129
  "timeformat - format set here will override the value set on the settings page"
130
  msgstr ""
131
 
132
- #: post-expirator.php:528
133
  msgid "Defaults"
134
  msgstr ""
135
 
136
- #: post-expirator.php:531
137
  msgid "Set Post To:"
138
  msgstr ""
139
 
140
- #: post-expirator.php:534 post-expirator.php:545
141
  msgid "Draft"
142
  msgstr ""
143
 
144
- #: post-expirator.php:535 post-expirator.php:546
145
  msgid "Delete"
146
  msgstr ""
147
 
148
- #: post-expirator.php:538
149
  msgid ""
150
  "Select whether the post should be deleted or changed to a draft at "
151
  "expiration time."
152
  msgstr ""
153
 
154
- #: post-expirator.php:542
155
  msgid "Set Page To:"
156
  msgstr ""
157
 
158
- #: post-expirator.php:549
159
  msgid ""
160
  "Select whether the page should be deleted or changed to a draft at "
161
  "expiration time."
162
  msgstr ""
163
 
164
- #: post-expirator.php:553
165
  msgid "Date Format:"
166
  msgstr ""
167
 
168
- #: post-expirator.php:557
169
  msgid ""
170
  "The default format to use when displaying the expiration date within a post "
171
  "using the [postexpirator] shortcode or within the footer. For information "
@@ -173,11 +185,11 @@ msgid ""
173
  "function.date.php\" target=\"_blank\">PHP Date Function</a>."
174
  msgstr ""
175
 
176
- #: post-expirator.php:561
177
  msgid "Time Format:"
178
  msgstr ""
179
 
180
- #: post-expirator.php:565
181
  msgid ""
182
  "The default format to use when displaying the expiration time within a post "
183
  "using the [postexpirator] shortcode or within the footer. For information "
@@ -185,107 +197,212 @@ msgid ""
185
  "function.date.php\" target=\"_blank\">PHP Date Function</a>."
186
  msgstr ""
187
 
188
- #: post-expirator.php:569
189
  msgid "Category Expiration"
190
  msgstr ""
191
 
192
- #: post-expirator.php:572
193
  msgid "Enable Post Expiration to Category?"
194
  msgstr ""
195
 
196
- #: post-expirator.php:574 post-expirator.php:603
197
  msgid "Enabled"
198
  msgstr ""
199
 
200
- #: post-expirator.php:575 post-expirator.php:604
201
  msgid "Disabled"
202
  msgstr ""
203
 
204
- #: post-expirator.php:577
205
  msgid "This will enable or disable the ability to expire a post to a category."
206
  msgstr ""
207
 
208
- #: post-expirator.php:581
209
  msgid "Default Expiration Category"
210
  msgstr ""
211
 
212
- #: post-expirator.php:592
213
  msgid "Set's the default expiration category for the post."
214
  msgstr ""
215
 
216
- #: post-expirator.php:597
217
  msgid "Post Footer Display"
218
  msgstr ""
219
 
220
- #: post-expirator.php:598
221
  msgid ""
222
  "Enabling this below will display the expiration date automatically at the "
223
  "end of any post which is set to expire."
224
  msgstr ""
225
 
226
- #: post-expirator.php:601
227
  msgid "Show in post footer?"
228
  msgstr ""
229
 
230
- #: post-expirator.php:606
231
  msgid ""
232
  "This will enable or disable displaying the post expiration date in the post "
233
  "footer."
234
  msgstr ""
235
 
236
- #: post-expirator.php:610
237
  msgid "Footer Contents:"
238
  msgstr ""
239
 
240
- #: post-expirator.php:614
241
  msgid ""
242
  "Enter the text you would like to appear at the bottom of every post that "
243
  "will expire. The following placeholders will be replaced with the post "
244
  "expiration date in the following format:"
245
  msgstr ""
246
 
247
- #: post-expirator.php:623
248
  msgid "Footer Style:"
249
  msgstr ""
250
 
251
- #: post-expirator.php:626
252
  msgid "This post will expire on"
253
  msgstr ""
254
 
255
- #: post-expirator.php:628
256
  msgid "The inline css which will be used to style the footer text."
257
  msgstr ""
258
 
259
- #: post-expirator.php:633
260
  msgid "Save"
261
  msgstr ""
262
 
263
- #: post-expirator.php:676
264
- msgid "Cron Schedules Reset!"
265
  msgstr ""
266
 
267
- #: post-expirator.php:681
 
 
 
 
 
 
 
 
 
 
 
 
268
  msgid "OK"
269
  msgstr ""
270
 
271
- #: post-expirator.php:683
272
  msgid "RESET NEEDED"
273
  msgstr ""
274
 
275
- #: post-expirator.php:690
276
- msgid "Reset Cron Schedules:"
277
  msgstr ""
278
 
279
- #: post-expirator.php:692
 
 
 
 
 
 
 
 
280
  msgid "Reset"
281
  msgstr ""
282
 
283
- #: post-expirator.php:693
284
  msgid "Status:"
285
  msgstr ""
286
 
287
- #: post-expirator.php:695
288
- msgid "Resets the cron scheduler and removes any old or stray entries."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
289
  msgstr ""
290
 
291
  #. Plugin URI of the plugin/theme
2
  # This file is distributed under the same license as the Post Expirator package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Post Expirator 1.6\n"
6
  "Report-Msgid-Bugs-To: http://wordpress.org/tag/post-expirator\n"
7
+ "POT-Creation-Date: 2012-06-19 02:54:45+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
12
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13
  "Language-Team: LANGUAGE <LL@li.org>\n"
14
 
15
+ #: post-expirator-debug.php:48
16
+ msgid "Debugging table is currently empty."
17
+ msgstr ""
18
+
19
+ #: post-expirator-debug.php:52
20
+ msgid "Timestamp"
21
+ msgstr ""
22
+
23
+ #: post-expirator-debug.php:53
24
+ msgid "Message"
25
+ msgstr ""
26
+
27
+ #: post-expirator.php:20
28
  msgid "l F jS, Y"
29
  msgstr ""
30
 
31
+ #: post-expirator.php:21
32
  msgid "g:ia"
33
  msgstr ""
34
 
35
+ #: post-expirator.php:22
36
  msgid "Post expires at EXPIRATIONTIME on EXPIRATIONDATE"
37
  msgstr ""
38
 
39
+ #: post-expirator.php:43
40
  msgid "Once a Minute"
41
  msgstr ""
42
 
43
+ #: post-expirator.php:55
44
+ msgid "Post Expirator cron events need to be reset. "
45
  msgstr ""
46
 
47
+ #: post-expirator.php:57
48
  msgid "Click here to reset"
49
  msgstr ""
50
 
51
+ #: post-expirator.php:135
52
  msgid "Expires"
53
  msgstr ""
54
 
55
+ #: post-expirator.php:151
56
  msgid "Never"
57
  msgstr ""
58
 
59
+ #. #-#-#-#-# plugin.pot (Post Expirator 1.6) #-#-#-#-#
60
  #. Plugin Name of the plugin/theme
61
+ #: post-expirator.php:163 post-expirator.php:165 post-expirator.php:398
62
  msgid "Post Expirator"
63
  msgstr ""
64
 
65
+ #: post-expirator.php:197
66
  msgid "Enable Post Expiration"
67
  msgstr ""
68
 
69
+ #: post-expirator.php:199
70
  msgid "Year"
71
  msgstr ""
72
 
73
+ #: post-expirator.php:200
74
  msgid "Month"
75
  msgstr ""
76
 
77
+ #: post-expirator.php:201
78
  msgid "Day"
79
  msgstr ""
80
 
81
+ #: post-expirator.php:233
82
  msgid "Hour"
83
  msgstr ""
84
 
85
+ #: post-expirator.php:234
86
  msgid "Minute"
87
  msgstr ""
88
 
89
+ #: post-expirator.php:256
 
 
 
 
90
  msgid "Expiration Categories"
91
  msgstr ""
92
 
93
+ #: post-expirator.php:266
94
  msgid ""
95
  "Setting an expiration category will change the category at expiration time, "
96
  "and override the default post action"
97
  msgstr ""
98
 
99
+ #: post-expirator.php:368
100
+ msgid "General Settings"
101
  msgstr ""
102
 
103
+ #: post-expirator.php:369
104
+ msgid "Diagnostics"
105
+ msgstr ""
106
+
107
+ #: post-expirator.php:370
108
+ msgid "View Debug Logs"
109
  msgstr ""
110
 
111
+ #: post-expirator.php:381 post-expirator.php:398
112
+ msgid "Post Expirator Options"
113
  msgstr ""
114
 
115
+ #: post-expirator.php:418
116
  msgid "Saved Options!"
117
  msgstr ""
118
 
119
+ #: post-expirator.php:479
120
  msgid ""
121
  "The post expirator plugin sets a custom meta value, and then optionally "
122
  "allows you to select if you want the post changed to a draft status or "
123
  "deleted when it expires."
124
  msgstr ""
125
 
126
+ #: post-expirator.php:482
127
  msgid "Valid [postexpirator] attributes:"
128
  msgstr ""
129
 
130
+ #: post-expirator.php:484
131
  msgid "type - defaults to full - valid options are full,date,time"
132
  msgstr ""
133
 
134
+ #: post-expirator.php:485
135
  msgid ""
136
  "dateformat - format set here will override the value set on the settings page"
137
  msgstr ""
138
 
139
+ #: post-expirator.php:486
140
  msgid ""
141
  "timeformat - format set here will override the value set on the settings page"
142
  msgstr ""
143
 
144
+ #: post-expirator.php:490
145
  msgid "Defaults"
146
  msgstr ""
147
 
148
+ #: post-expirator.php:493
149
  msgid "Set Post To:"
150
  msgstr ""
151
 
152
+ #: post-expirator.php:496 post-expirator.php:507
153
  msgid "Draft"
154
  msgstr ""
155
 
156
+ #: post-expirator.php:497 post-expirator.php:508
157
  msgid "Delete"
158
  msgstr ""
159
 
160
+ #: post-expirator.php:500
161
  msgid ""
162
  "Select whether the post should be deleted or changed to a draft at "
163
  "expiration time."
164
  msgstr ""
165
 
166
+ #: post-expirator.php:504
167
  msgid "Set Page To:"
168
  msgstr ""
169
 
170
+ #: post-expirator.php:511
171
  msgid ""
172
  "Select whether the page should be deleted or changed to a draft at "
173
  "expiration time."
174
  msgstr ""
175
 
176
+ #: post-expirator.php:515
177
  msgid "Date Format:"
178
  msgstr ""
179
 
180
+ #: post-expirator.php:519
181
  msgid ""
182
  "The default format to use when displaying the expiration date within a post "
183
  "using the [postexpirator] shortcode or within the footer. For information "
185
  "function.date.php\" target=\"_blank\">PHP Date Function</a>."
186
  msgstr ""
187
 
188
+ #: post-expirator.php:523
189
  msgid "Time Format:"
190
  msgstr ""
191
 
192
+ #: post-expirator.php:527
193
  msgid ""
194
  "The default format to use when displaying the expiration time within a post "
195
  "using the [postexpirator] shortcode or within the footer. For information "
197
  "function.date.php\" target=\"_blank\">PHP Date Function</a>."
198
  msgstr ""
199
 
200
+ #: post-expirator.php:531
201
  msgid "Category Expiration"
202
  msgstr ""
203
 
204
+ #: post-expirator.php:534
205
  msgid "Enable Post Expiration to Category?"
206
  msgstr ""
207
 
208
+ #: post-expirator.php:536 post-expirator.php:565
209
  msgid "Enabled"
210
  msgstr ""
211
 
212
+ #: post-expirator.php:537 post-expirator.php:566
213
  msgid "Disabled"
214
  msgstr ""
215
 
216
+ #: post-expirator.php:539
217
  msgid "This will enable or disable the ability to expire a post to a category."
218
  msgstr ""
219
 
220
+ #: post-expirator.php:543
221
  msgid "Default Expiration Category"
222
  msgstr ""
223
 
224
+ #: post-expirator.php:554
225
  msgid "Set's the default expiration category for the post."
226
  msgstr ""
227
 
228
+ #: post-expirator.php:559
229
  msgid "Post Footer Display"
230
  msgstr ""
231
 
232
+ #: post-expirator.php:560
233
  msgid ""
234
  "Enabling this below will display the expiration date automatically at the "
235
  "end of any post which is set to expire."
236
  msgstr ""
237
 
238
+ #: post-expirator.php:563
239
  msgid "Show in post footer?"
240
  msgstr ""
241
 
242
+ #: post-expirator.php:568
243
  msgid ""
244
  "This will enable or disable displaying the post expiration date in the post "
245
  "footer."
246
  msgstr ""
247
 
248
+ #: post-expirator.php:572
249
  msgid "Footer Contents:"
250
  msgstr ""
251
 
252
+ #: post-expirator.php:576
253
  msgid ""
254
  "Enter the text you would like to appear at the bottom of every post that "
255
  "will expire. The following placeholders will be replaced with the post "
256
  "expiration date in the following format:"
257
  msgstr ""
258
 
259
+ #: post-expirator.php:585
260
  msgid "Footer Style:"
261
  msgstr ""
262
 
263
+ #: post-expirator.php:588
264
  msgid "This post will expire on"
265
  msgstr ""
266
 
267
+ #: post-expirator.php:590
268
  msgid "The inline css which will be used to style the footer text."
269
  msgstr ""
270
 
271
+ #: post-expirator.php:595
272
  msgid "Save"
273
  msgstr ""
274
 
275
+ #: post-expirator.php:655
276
+ msgid "Cron Events Reset! (Reload page to remove warning)"
277
  msgstr ""
278
 
279
+ #: post-expirator.php:658
280
+ msgid "Debugging Disabled"
281
+ msgstr ""
282
+
283
+ #: post-expirator.php:661
284
+ msgid "Debugging Enabled"
285
+ msgstr ""
286
+
287
+ #: post-expirator.php:666
288
+ msgid "Debugging Table Emptied"
289
+ msgstr ""
290
+
291
+ #: post-expirator.php:670 post-expirator.php:674
292
  msgid "OK"
293
  msgstr ""
294
 
295
+ #: post-expirator.php:671
296
  msgid "RESET NEEDED"
297
  msgstr ""
298
 
299
+ #: post-expirator.php:675
300
+ msgid "ERROR WITH FILTER"
301
  msgstr ""
302
 
303
+ #: post-expirator.php:681
304
+ msgid "Cron Settings"
305
+ msgstr ""
306
+
307
+ #: post-expirator.php:684
308
+ msgid "Reset Cron Event:"
309
+ msgstr ""
310
+
311
+ #: post-expirator.php:686
312
  msgid "Reset"
313
  msgstr ""
314
 
315
+ #: post-expirator.php:687 post-expirator.php:695
316
  msgid "Status:"
317
  msgstr ""
318
 
319
+ #: post-expirator.php:689
320
+ msgid "Resets the cron event and removes any old or stray entries."
321
+ msgstr ""
322
+
323
+ #: post-expirator.php:693
324
+ msgid "Reset Cron Schedule:"
325
+ msgstr ""
326
+
327
+ #: post-expirator.php:697
328
+ msgid "Displays the cron minute schedule status for post expirator."
329
+ msgstr ""
330
+
331
+ #: post-expirator.php:702
332
+ msgid "Advanced Diagnostics"
333
+ msgstr ""
334
+
335
+ #: post-expirator.php:705
336
+ msgid "Post Expirator Debug Logging:"
337
+ msgstr ""
338
+
339
+ #: post-expirator.php:709
340
+ msgid "Status: Enabled"
341
+ msgstr ""
342
+
343
+ #: post-expirator.php:710
344
+ msgid "Disable Debugging"
345
+ msgstr ""
346
+
347
+ #: post-expirator.php:712
348
+ msgid "Status: Disabled"
349
+ msgstr ""
350
+
351
+ #: post-expirator.php:713
352
+ msgid "Enable Debugging"
353
+ msgstr ""
354
+
355
+ #: post-expirator.php:721
356
+ msgid "Purge Debug Log:"
357
+ msgstr ""
358
+
359
+ #: post-expirator.php:723
360
+ msgid "Purge Debug Log"
361
+ msgstr ""
362
+
363
+ #: post-expirator.php:727
364
+ msgid "Current Cron Schedule:"
365
+ msgstr ""
366
+
367
+ #: post-expirator.php:729
368
+ msgid ""
369
+ "The below table will show all currently scheduled cron events with the next "
370
+ "run time."
371
+ msgstr ""
372
+
373
+ #: post-expirator.php:730
374
+ msgid ""
375
+ "Single site (non multisite) users should see an event named "
376
+ "expirationdate_delete with a schedule of postexpiratorminute."
377
+ msgstr ""
378
+
379
+ #: post-expirator.php:731
380
+ msgid ""
381
+ "Multisite users should see an event named expirationdate_delete_blogid "
382
+ "(where the blogid is replaced with the numeric id of the blog) with a "
383
+ "schedule of postexpiratorminute"
384
+ msgstr ""
385
+
386
+ #: post-expirator.php:734
387
+ msgid "Date"
388
+ msgstr ""
389
+
390
+ #: post-expirator.php:735
391
+ msgid "Event"
392
+ msgstr ""
393
+
394
+ #: post-expirator.php:736
395
+ msgid "Schedule"
396
+ msgstr ""
397
+
398
+ #: post-expirator.php:737
399
+ msgid "Interval (seconds)"
400
+ msgstr ""
401
+
402
+ #: post-expirator.php:763
403
+ msgid ""
404
+ "Below is a dump of the debugging table, this should be useful for "
405
+ "troubleshooting."
406
  msgstr ""
407
 
408
  #. Plugin URI of the plugin/theme
post-expirator-debug.php ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class postExpiratorDebug {
4
+
5
+ function __construct() {
6
+ global $wpdb;
7
+ $this->debug_table = $wpdb->prefix . 'postexpirator_debug';
8
+ $this->createDBTable();
9
+ }
10
+
11
+ /**
12
+ * Create Database Table to store debugging information if it does not already exist.
13
+ */
14
+ private function createDBTable() {
15
+ global $wpdb;
16
+
17
+ if ($wpdb->get_var("SHOW TABLES LIKE '".$this->debug_table."'") != $this->debug_table) {
18
+ $sql = "CREATE TABLE `".$this->debug_table."` (
19
+ `id` INT(9) NOT NULL AUTO_INCREMENT PRIMARY KEY,
20
+ `timestamp` TIMESTAMP NOT NULL,
21
+ `blog` INT(9) NOT NULL,
22
+ `message` text NOT NULL
23
+ );";
24
+ require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
25
+ dbDelta($sql);
26
+ }
27
+ }
28
+
29
+ public function removeDBTable() {
30
+ global $wpdb;
31
+ $wpdb->query($wpdb->prepare("DROP TABLE IF EXISTS ".$this->debug_table));
32
+ }
33
+
34
+ public function save($data) {
35
+ global $wpdb;
36
+ if (is_multisite()) {
37
+ global $current_blog;
38
+ $blog = $current_blog->blog_id;
39
+ } else $blog = 0;
40
+ $sql = "INSERT INTO `{$this->debug_table}` (`timestamp`,`message`,`blog`) VALUES (FROM_UNIXTIME({$data['timestamp']}),'{$data['message']}','$blog')";
41
+ $wpdb->query($wpdb->prepare($sql));
42
+ }
43
+
44
+ public function getTable() {
45
+ global $wpdb;
46
+ $results = $wpdb->get_results($wpdb->prepare("SELECT * FROM {$this->debug_table} ORDER BY `id` DESC"));
47
+ if (empty($results)) {
48
+ print '<p>'.__('Debugging table is currently empty.','post-expirator').'</p>';
49
+ return;
50
+ }
51
+ print '<table class="post-expirator-debug">';
52
+ print '<tr><th class="post-expirator-timestamp">'.__('Timestamp','post-expirator').'</th>';
53
+ print '<th>'.__('Message','post-expirator').'</th></tr>';
54
+ foreach ($results as $result) {
55
+ print '<tr><td>'.$result->timestamp.'</td>';
56
+ print '<td>'.$result->message.'</td></tr>';
57
+ }
58
+ print '</table>';
59
+ }
60
+
61
+ public function purge() {
62
+ global $wpdb;
63
+ $wpdb->query($wpdb->prepare("TRUNCATE TABLE {$this->debug_table}"));
64
+ }
65
+ }
post-expirator.php CHANGED
@@ -4,12 +4,14 @@ Plugin Name: Post Expirator
4
  Plugin URI: http://wordpress.org/extend/plugins/post-expirator/
5
  Description: Allows you to add an expiration date (minute) to posts which you can configure to either delete the post, change it to a draft, or update the post categories at expiration time.
6
  Author: Aaron Axelsen
7
- Version: 1.5.4
8
  Author URI: http://postexpirator.tuxdocs.net/
9
  Translation: Thierry (http://palijn.info)
10
  Text Domain: post-expirator
11
  */
12
 
 
 
13
  /* Load translation, if it exists */
14
  $plugin_dir = basename(dirname(__FILE__));
15
  load_plugin_textdomain( 'post-expirator', null, $plugin_dir.'/languages/' );
@@ -22,10 +24,7 @@ $expirationdateDefaultFooterStyle = 'font-style: italic;';
22
 
23
  // Detect WPMU/MultiSite
24
  function postExpirator_is_wpmu() {
25
- if (function_exists('is_multisite'))
26
- return is_multisite();
27
- else
28
- return file_exists(ABSPATH."/wpmu-settings.php");
29
  }
30
 
31
  // Timezone Setup
@@ -51,10 +50,10 @@ add_filter('cron_schedules','postExpiratorAddCronMinutes');
51
  * Add admin notice hook if cron schedule needs to be reset
52
  */
53
  function postExpirationAdminNotice() {
54
- if (postExpiratorCronStatus() === false) {
55
- echo '<div class="error fade" style="background-color:red;"><p><strong>';
56
- _e('Post Expirator cron schedules need to be reset','post-expirator');
57
- echo('<a href="'.admin_url('options-general.php?page=post-expirator.php&tab=upgrade').'" style="color: blue;">');
58
  _e('Click here to reset','post-expirator');
59
  echo('</a></strong></p></div>');
60
  }
@@ -68,11 +67,28 @@ function expirationdate_delete_expired_posts() {
68
  global $wpdb;
69
  postExpiratorTimezoneSetup();
70
  $time_delete = time();
71
- $result = $wpdb->get_results('select post_id, meta_value from ' . $wpdb->postmeta . ' as postmeta, '.$wpdb->posts.' as posts where postmeta.post_id = posts.ID AND posts.post_status = "publish" AND postmeta.meta_key = "expiration-date" AND postmeta.meta_value <= "' . $time_delete . '"');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
72
  if (!empty($result)) foreach ($result as $a) {
73
  // Check to see if already proccessed
74
- $processed = $wpdb->get_var('select meta_value from ' . $wpdb->postmeta . ' as postmeta, '.$wpdb->posts.' as posts where postmeta.post_id = posts.ID AND posts.ID = '.$a->post_id.' AND postmeta.meta_key = "_expiration-date-processed"');
75
- if (!empty($processed) && $processed == 1) continue;
76
 
77
  $post_result = $wpdb->get_var('select post_type from ' . $wpdb->posts .' where ID = '. $a->post_id);
78
  if ($post_result == 'post') {
@@ -88,72 +104,35 @@ function expirationdate_delete_expired_posts() {
88
  $cat = get_post_meta($a->post_id,'_expiration-date-category');
89
  if (($catEnabled === false || $catEnabled == 1) && (isset($cat) && !empty($cat[0]))) {
90
  wp_update_post(array('ID' => $a->post_id, 'post_category' => $cat[0]));
 
91
  } else {
92
- if ($expiredStatus == 'delete')
93
  wp_delete_post($a->post_id);
94
- else {
 
95
  wp_update_post(array('ID' => $a->post_id, 'post_status' => 'draft'));
96
  delete_post_meta($a->post_id, 'expiration-date');
97
  update_post_meta($a->post_id, 'expiration-date', $a->meta_value);
 
98
  }
99
  }
100
 
101
  // Mark as Processed
102
  update_post_meta($a->post_id, '_expiration-date-processed', 1);
 
103
  }
 
104
  }
105
  if (postExpirator_is_wpmu())
106
  add_action ('expirationdate_delete_'.$current_blog->blog_id, 'expirationdate_delete_expired_posts');
107
  else
108
  add_action ('expirationdate_delete', 'expirationdate_delete_expired_posts');
109
 
110
- /**
111
- * Called at plugin activation
112
- */
113
- function expirationdate_activate () {
114
- global $current_blog,$expirationdateDefaultDateFormat,$expirationdateDefaultTimeFormat,$expirationdateDefaultFooterContents,$expirationdateDefaultFooterStyle;
115
- update_option('expirationdateExpiredPostStatus','Draft');
116
- update_option('expirationdateExpiredPageStatus','Draft');
117
- update_option('expirationdateDefaultDateFormat',$expirationdateDefaultDateFormat);
118
- update_option('expirationdateDefaultTimeFormat',$expirationdateDefaultTimeFormat);
119
- update_option('expirationdateFooterContents',$expirationdateDefaultFooterContents);
120
- update_option('expirationdateFooterStyle',$expirationdateDefaultFooterStyle);
121
- update_option('expirationdateDisplayFooter',0);
122
- update_option('expirationdateCategory',1);
123
- postExpiratorTimezoneSetup();
124
-
125
- if (postExpirator_is_wpmu())
126
- wp_schedule_event(mktime(date('H'),0,0,date('m'),date('d'),date('Y')), 'postexpiratorminute', 'expirationdate_delete_'.$current_blog->blog_id);
127
- else
128
- wp_schedule_event(mktime(date('H'),0,0,date('m'),date('d'),date('Y')), 'postexpiratorminute', 'expirationdate_delete');
129
- }
130
- register_activation_hook (__FILE__, 'expirationdate_activate');
131
-
132
- /**
133
- * Called at plugin deactivation
134
- */
135
- function expirationdate_deactivate () {
136
- global $current_blog;
137
- delete_option('expirationdateExpiredPostStatus');
138
- delete_option('expirationdateExpiredPageStatus');
139
- delete_option('expirationdateDefaultDateFormat');
140
- delete_option('expirationdateDefaultTimeFormat');
141
- delete_option('expirationdateDisplayFooter');
142
- delete_option('expirationdateFooterContents');
143
- delete_option('expirationdateFooterStyle');
144
- delete_option('expirationdateCategory');
145
- if (postExpirator_is_wpmu())
146
- wp_clear_scheduled_hook('expirationdate_delete_'.$current_blog->blog_id);
147
- else
148
- wp_clear_scheduled_hook('expirationdate_delete');
149
- }
150
- register_deactivation_hook (__FILE__, 'expirationdate_deactivate');
151
-
152
  /**
153
  * adds an 'Expires' column to the post display table.
154
  */
155
  function expirationdate_add_column ($columns) {
156
- $columns['expirationdate'] = __('Expires','post-expirator').'<br/><span style="font-size: 0.8em; font-weight: normal;">(YYYY/MM/DD HH:MM)</span>';
157
  return $columns;
158
  }
159
  add_filter ('manage_posts_columns', 'expirationdate_add_column');
@@ -200,7 +179,7 @@ function expirationdate_meta_box($post) {
200
  $defaulthour = date('H');
201
  $defaultyear = date('Y');
202
  $defaultminute = date('i');
203
- $disabled = 'disabled="disabled"';
204
  $categories = get_option('expirationdateCategoryDefaults');
205
  } else {
206
  $defaultmonth = date('F',$expirationdatets);
@@ -217,53 +196,57 @@ function expirationdate_meta_box($post) {
217
  $rv[] = '<p><input type="checkbox" name="enable-expirationdate" id="enable-expirationdate" value="checked"'.$enabled.' onclick="expirationdate_ajax_add_meta(\'enable-expirationdate\')" />';
218
  $rv[] = '<label for="enable-expirationdate">'.__('Enable Post Expiration','post-expirator').'</label></p>';
219
  $rv[] = '<table><tr>';
220
- $rv[] = '<th style="text-align: left;">'.__('Year','post-expirator').'</th>';
221
- $rv[] = '<th style="text-align: left;">'.__('Month','post-expirator').'</th>';
222
- $rv[] = '<th style="text-align: left;">'.__('Day','post-expirator').'</th>';
223
  $rv[] = '</tr><tr>';
224
  $rv[] = '<td>';
225
- $rv[] = '<select name="expirationdate_year" id="expirationdate_year"'.$disabled.'>';
226
- $currentyear = date('Y');
227
- if ($defaultyear < $currentyear)
228
- $currentyear = $defaultyear;
229
- for($i = $currentyear; $i < $currentyear + 8; $i++) {
230
- if ($i == $defaultyear)
231
- $selected = ' selected="selected"';
232
- else
233
- $selected = '';
234
- $rv[] = '<option'.$selected.'>'.($i).'</option>';
235
- }
236
- $rv[] = '</select>';
 
237
  $rv[] = '</td><td>';
238
- $rv[] = '<select name="expirationdate_month" id="expirationdate_month"'.$disabled.'>';
239
- for($i = 1; $i <= 12; $i++) {
240
- if ($defaultmonth == date('F',mktime(0, 0, 0, $i, 1, date("Y"))))
241
- $selected = ' selected="selected"';
242
- else
243
- $selected = '';
244
- $rv[] = '<option value="'.date('m',mktime(0, 0, 0, $i, 1, date("Y"))).'"'.$selected.'>'.__(date(__('F','post-expirator'),mktime(0, 0, 0, $i, 1, date("Y"))),'post-expirator').'</option>';
245
- }
 
 
246
  $rv[] = '</select>';
247
  $rv[] = '</td><td>';
248
- $rv[] = '<input type="text" id="expirationdate_day" name="expirationdate_day" value="'.$defaultday.'" size="2"'.$disabled.' />,';
249
  $rv[] = '</td></tr><tr>';
250
- $rv[] = '<th style="text-align: left;"></th>';
251
- $rv[] = '<th style="text-align: left;">'.__('Hour','post-expirator').'('.date('T',mktime(0, 0, 0, $i, 1, date("Y"))).')</th>';
252
- $rv[] = '<th style="text-align: left;">'.__('Minute','post-expirator').'</th>';
253
- $rv[] = '</tr><tr>';
254
  $rv[] = '<td>@</td><td>';
255
- /* $rv[] = '<input type="text" id="expirationdate_hour" name="expirationdate_hour" value="'.$defaulthour.'" size="2"'.$disabled.' />'; */
256
- $rv[] = '<select name="expirationdate_hour" id="expirationdate_hour"'.$disabled.'>';
257
- for($i = 1; $i <= 24; $i++) {
258
- if ($defaulthour == date('H',mktime($i, 0, 0, date("n"), date("j"), date("Y"))))
259
- $selected = ' selected="selected"';
260
- else
261
- $selected = '';
262
- $rv[] = '<option value="'.date('H',mktime($i, 0, 0, date("n"), date("j"), date("Y"))).'"'.$selected.'>'.date(__('H','post-expirator'),mktime($i, 0, 0, date("n"), date("j"), date("Y"))).'</option>';
263
- }
264
- $rv[] = '</td><td>';
265
- $rv[] = '<input type="text" id="expirationdate_minute" name="expirationdate_minute" value="'.$defaultminute.'" size="2"'.$disabled.' />';
266
- $rv[] = '<input type="hidden" name="expirationdate_formcheck" value="true" />';
 
267
  $rv[] = '</td></tr></table>';
268
  echo implode("\n",$rv);
269
 
@@ -285,32 +268,15 @@ function expirationdate_meta_box($post) {
285
  echo '<div id="expirationdate_ajax_result"></div>';
286
  }
287
 
288
- /**
289
- * PHP Code to be executed by ajax function call - currently nothing happens
290
- */
291
- function expirationdate_ajax_process() {
292
- // Gather Values
293
- $enable = $_POST['enable'];
294
-
295
- die(0);
296
- }
297
- add_action ('wp_ajax_expirationdate_ajax','expirationdate_ajax_process');
298
-
299
-
300
  /**
301
  * Add's ajax javascript
302
  */
303
  function expirationdate_js_admin_header() {
304
- // use JavaScript SACK library for Ajax
305
- wp_print_scripts( array( 'sack' ));
306
-
307
  // Define custom JavaScript function
308
  ?>
309
  <script type="text/javascript">
310
  //<![CDATA[
311
  function expirationdate_ajax_add_meta(expireenable) {
312
- var mysack = new sack("<?php expirationdate_get_blog_url(); ?>wp-admin/admin-ajax.php");
313
-
314
  var expire = document.getElementById(expireenable);
315
 
316
  if (expire.checked == true) {
@@ -339,21 +305,13 @@ function expirationdate_ajax_add_meta(expireenable) {
339
  var enable = 'false';
340
  }
341
 
342
- mysack.execute = 1;
343
- mysack.method = 'POST';
344
- mysack.setVar( "action", "expirationdate_ajax" );
345
- mysack.setVar( "enable", enable );
346
- mysack.encVar( "cookie", document.cookie, false );
347
- mysack.onError = function() { alert('Ajax error in enabling post expiration' )};
348
- mysack.runAJAX();
349
-
350
  return true;
351
  }
352
  //]]>
353
  </script>
354
  <?php
355
  }
356
- add_action('admin_print_scripts', 'expirationdate_js_admin_header' );
357
 
358
  /**
359
  * Get correct URL (HTTP or HTTPS)
@@ -405,11 +363,11 @@ add_action('save_post','expirationdate_update_post_meta');
405
  * Build the menu for the options page
406
  */
407
  function postExpiratorMenuTabs($tab) {
408
- echo '<h2>'.__('Post Expirator Options','post-expirator').'</h2>';
409
  echo '<p>';
410
  if (empty($tab)) $tab = 'general';
411
  echo '<a href="'.admin_url('options-general.php?page=post-expirator.php&tab=general').'"'.($tab == 'general' ? ' style="font-weight: bold; text-decoration:none;"' : '').'>'.__('General Settings','post-expirator').'</a> | ';
412
- echo '<a href="'.admin_url('options-general.php?page=post-expirator.php&tab=upgrade').'"'.($tab == 'upgrade' ? ' style="font-weight: bold; text-decoration:none;"' : '').'>'.__('Upgrade','post-expirator').'</a>';
 
413
  echo '</p><hr/>';
414
  }
415
 
@@ -420,11 +378,15 @@ function postExpiratorMenu() {
420
  $tab = $_GET['tab'];
421
 
422
  echo '<div class="wrap">';
 
 
423
  postExpiratorMenuTabs($tab);
424
  if (empty($tab) || $tab == 'general') {
425
  postExpiratorMenuGeneral();
426
- } elseif ($tab == 'upgrade') {
427
- postExpiratorMenuUpgrade();
 
 
428
  }
429
  echo '</div>';
430
  }
@@ -552,7 +514,7 @@ function postExpiratorMenuGeneral() {
552
  <tr valign-"top">
553
  <th scope="row"><label for="expired-default-date-format"><?php _e('Date Format:','post-expirator');?></label></th>
554
  <td>
555
- <input type="text" name="expired-default-date-format" id="expired-default-date-format" value="<?php echo $expirationdateDefaultDateFormat ?>" size="25" /> (<?php echo date("$expirationdateDefaultDateFormat") ?>)
556
  <br/>
557
  <?php _e('The default format to use when displaying the expiration date within a post using the [postexpirator] shortcode or within the footer. For information on valid formatting options, see: <a href="http://us2.php.net/manual/en/function.date.php" target="_blank">PHP Date Function</a>.','post-expirator'); ?>
558
  </td>
@@ -560,7 +522,7 @@ function postExpiratorMenuGeneral() {
560
  <tr valign-"top">
561
  <th scope="row"><label for="expired-default-time-format"><?php _e('Time Format:','post-expirator');?></label></th>
562
  <td>
563
- <input type="text" name="expired-default-time-format" id="expired-default-time-format" value="<?php echo $expirationdateDefaultTimeFormat ?>" size="25" /> (<?php echo date("$expirationdateDefaultTimeFormat") ?>)
564
  <br/>
565
  <?php _e('The default format to use when displaying the expiration time within a post using the [postexpirator] shortcode or within the footer. For information on valid formatting options, see: <a href="http://us2.php.net/manual/en/function.date.php" target="_blank">PHP Date Function</a>.','post-expirator'); ?>
566
  </td>
@@ -613,9 +575,9 @@ function postExpiratorMenuGeneral() {
613
  <br/>
614
  <?php _e('Enter the text you would like to appear at the bottom of every post that will expire. The following placeholders will be replaced with the post expiration date in the following format:','post-expirator');?>
615
  <ul>
616
- <li>EXPIRATIONFULL -> <?php echo date("$expirationdateDefaultDateFormat $expirationdateDefaultTimeFormat") ?></li>
617
- <li>EXPIRATIONDATE -> <?php echo date("$expirationdateDefaultDateFormat") ?></li>
618
- <li>EXPIRATIONTIME -> <?php echo date("$expirationdateDefaultTimeFormat") ?></li>
619
  </ul>
620
  </td>
621
  </tr>
@@ -623,7 +585,7 @@ function postExpiratorMenuGeneral() {
623
  <th scope="row"><label for="expired-footer-style"><?php _e('Footer Style:','post-expirator');?></label></th>
624
  <td>
625
  <input type="text" name="expired-footer-style" id="expired-footer-style" value="<?php echo $expirationdateFooterStyle ?>" size="25" />
626
- (<span style="<?php echo $expirationdateFooterStyle ?>"><?php _e('This post will expire on','post-expirator');?> <?php echo date("$expirationdateDefaultDateFormat $expirationdateDefaultTimeFormat"); ?></span>)
627
  <br/>
628
  <?php _e('The inline css which will be used to style the footer text.','post-expirator');?>
629
  </td>
@@ -636,63 +598,159 @@ function postExpiratorMenuGeneral() {
636
  <?php
637
  }
638
 
639
- function postExpiratorCronStatus() {
640
- $names = array('expirationdate_delete','expirationdate_delete_');
641
  // WPMU
642
  if (postExpirator_is_wpmu()) {
643
  global $current_blog;
644
  $names[] = 'expirationdate_delete_'.$current_blog->blog_id;
 
 
645
  }
 
646
  $results = array();
647
  foreach ( $names as $name ) {
648
- array_push($results,wp_get_schedule($name));
649
  }
650
 
651
- foreach ( $results as $result ) {
 
 
652
  if ($result == 'hourly') return false;
653
  }
654
  return true;
655
  }
656
 
 
 
 
 
 
 
 
 
 
 
657
  /**
658
- * Reset all cron schedules for Post Expirator Plugin
659
  */
660
- function postExpiratorResetCron() {
661
- postExpiratorTimezoneSetup();
662
- if (postExpirator_is_wpmu()) {
 
 
 
 
663
  global $current_blog;
664
- wp_clear_scheduled_hook('expirationdate_delete_'.$current_blog->blog_id);
665
- wp_schedule_event(mktime(date('H'),0,0,date('m'),date('d'),date('Y')), 'postexpiratorminute', 'expirationdate_delete_'.$current_blog->blog_id);
666
- } else {
667
- wp_clear_scheduled_hook('expirationdate_delete');
668
- wp_clear_scheduled_hook('expirationdate_delete_');
669
- wp_schedule_event(mktime(date('H'),0,0,date('m'),date('d'),date('Y')), 'postexpiratorminute', 'expirationdate_delete');
670
  }
671
  }
672
 
673
- function postExpiratorMenuUpgrade() {
674
- if (isset($_POST['reset-cron-schedules'])) {
675
- postExpiratorResetCron();
676
- echo "<div id='message' class='updated fade'><p>"; _e('Cron Schedules Reset!','post-expirator'); echo "</p></div>";
 
 
 
 
 
 
 
 
 
 
 
677
  }
678
 
679
- $status = postExpiratorCronStatus();
680
- if ($status)
681
- $cronstatus = '<span style="color:green">'.__('OK','post-expirator').'</span>';
682
- else
683
- $cronstatus = '<span style="color:red">'.__('RESET NEEDED','post-expirator').'</span>';
 
 
 
 
684
 
685
  ?>
686
  <form method="post" id="postExpiratorMenuUpgrade">
687
- <h3><?php _e('Upgrade','post-expirator');?></h3>
688
  <table class="form-table">
689
  <tr valign-"top">
690
- <th scope="row"><label for="reset-cron-schedules"><?php _e('Reset Cron Schedules:','post-expirator');?></label></th>
691
  <td>
692
- <input type="submit" name="reset-cron-schedules" id="reset-cron-schedules" value="<?php _e('Reset','post-expirator');?>" />
693
  <?php _e('Status:','post-expirator');?> <?php echo $cronstatus; ?>
694
  <br/>
695
- <?php _e('Resets the cron scheduler and removes any old or stray entries.','post-expirator');?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
696
  </td>
697
  </tr>
698
  </table>
@@ -700,6 +758,12 @@ function postExpiratorMenuUpgrade() {
700
  <?php
701
  }
702
 
 
 
 
 
 
 
703
 
704
  // [postexpirator format="l F jS, Y g:ia" tz="foo"]
705
  function postexpirator_shortcode($atts) {
@@ -781,9 +845,9 @@ function postexpirator_add_footer($text) {
781
  'EXPIRATIONTIME'
782
  );
783
  $replace = array(
784
- date("$dateformat $timeformat",$expirationdatets),
785
- date("$dateformat",$expirationdatets),
786
- date("$timeformat",$expirationdatets)
787
  );
788
 
789
  $add_to_footer = '<p style="'.$expirationdateFooterStyle.'">'.str_replace($search,$replace,$expirationdateFooterContents).'</p>';
@@ -791,6 +855,15 @@ function postexpirator_add_footer($text) {
791
  }
792
  add_action('the_content','postexpirator_add_footer',0);
793
 
 
 
 
 
 
 
 
 
 
794
  /**
795
  * Add Stylesheet
796
  */
@@ -805,6 +878,66 @@ function postexpirator_css() {
805
  }
806
  add_action('admin_init','postexpirator_css');
807
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
808
  class Walker_PostExpirator_Category_Checklist extends Walker {
809
  var $tree_type = 'category';
810
  var $db_fields = array ('parent' => 'parent', 'id' => 'term_id'); //TODO: decouple this
4
  Plugin URI: http://wordpress.org/extend/plugins/post-expirator/
5
  Description: Allows you to add an expiration date (minute) to posts which you can configure to either delete the post, change it to a draft, or update the post categories at expiration time.
6
  Author: Aaron Axelsen
7
+ Version: 1.6
8
  Author URI: http://postexpirator.tuxdocs.net/
9
  Translation: Thierry (http://palijn.info)
10
  Text Domain: post-expirator
11
  */
12
 
13
+ define('POSTEXPIRATOR_VERSION','1.6');
14
+
15
  /* Load translation, if it exists */
16
  $plugin_dir = basename(dirname(__FILE__));
17
  load_plugin_textdomain( 'post-expirator', null, $plugin_dir.'/languages/' );
24
 
25
  // Detect WPMU/MultiSite
26
  function postExpirator_is_wpmu() {
27
+ return is_multisite();
 
 
 
28
  }
29
 
30
  // Timezone Setup
50
  * Add admin notice hook if cron schedule needs to be reset
51
  */
52
  function postExpirationAdminNotice() {
53
+ if (postExpiratorCronEventStatus() === false) {
54
+ echo '<div class="error fade post-expirator-adminnotice"><p><strong>';
55
+ _e('Post Expirator cron events need to be reset. ','post-expirator');
56
+ echo('<a href="'.admin_url('options-general.php?page=post-expirator.php&tab=diagnostics').'" style="color: blue;">');
57
  _e('Click here to reset','post-expirator');
58
  echo('</a></strong></p></div>');
59
  }
67
  global $wpdb;
68
  postExpiratorTimezoneSetup();
69
  $time_delete = time();
70
+ $sql = 'select post_id, meta_value from ' . $wpdb->postmeta . ' as postmeta, '.$wpdb->posts.' as posts where postmeta.post_id = posts.ID AND posts.post_status = "publish" AND postmeta.meta_key = "expiration-date" AND postmeta.meta_value <= "' . $time_delete . '"';
71
+ $result = $wpdb->get_results($sql);
72
+
73
+ $debugEnabled = postExpiratorDebugEnabled();
74
+ if ($debugEnabled) {
75
+ // Load Debug Class
76
+ require_once(plugin_dir_path(__FILE__).'post-expirator-debug.php');
77
+
78
+ $debug = new postExpiratorDebug();
79
+ $startts = mktime();
80
+ $debug->save(array('timestamp' => $startts,'message' => 'START'));
81
+ $debug->save(array('timestamp' => $startts,'message' => 'SQL EXPIRE: '.$sql));
82
+ }
83
+
84
+ $processsql = 'select post_id from '.$wpdb->postmeta.' where meta_key = "_expiration-date-processed" AND meta_value = "1"';
85
+ if ($debugEnabled) $debug->save(array('timestamp' => mktime(),'message' => 'SQL PROCESSED: '.$processsql));
86
+ $processresult = $wpdb->get_col($processsql);
87
+ if ($debugEnabled) $debug->save(array('timestamp' => mktime(),'message' => 'PROCESSED POST IDS: '.print_r($processresult,true)));
88
+
89
  if (!empty($result)) foreach ($result as $a) {
90
  // Check to see if already proccessed
91
+ if (in_array($a->post_id,$processresult)) continue;
 
92
 
93
  $post_result = $wpdb->get_var('select post_type from ' . $wpdb->posts .' where ID = '. $a->post_id);
94
  if ($post_result == 'post') {
104
  $cat = get_post_meta($a->post_id,'_expiration-date-category');
105
  if (($catEnabled === false || $catEnabled == 1) && (isset($cat) && !empty($cat[0]))) {
106
  wp_update_post(array('ID' => $a->post_id, 'post_category' => $cat[0]));
107
+ if ($debugEnabled) $debug->save(array('timestamp' => mktime(),'message' => 'EXPIRE: ID:'.$a->post_id.' CATEGORY:'.print_r($cat[0],true)));
108
  } else {
109
+ if ($expiredStatus == 'delete') {
110
  wp_delete_post($a->post_id);
111
+ if ($debugEnabled) $debug->save(array('timestamp' => mktime(),'message' => 'EXPIRE: ID:'.$a->post_id.' DELETE'));
112
+ } else {
113
  wp_update_post(array('ID' => $a->post_id, 'post_status' => 'draft'));
114
  delete_post_meta($a->post_id, 'expiration-date');
115
  update_post_meta($a->post_id, 'expiration-date', $a->meta_value);
116
+ if ($debugEnabled) $debug->save(array('timestamp' => mktime(),'message' => 'EXPIRE: ID:'.$a->post_id.' DRAFT'));
117
  }
118
  }
119
 
120
  // Mark as Processed
121
  update_post_meta($a->post_id, '_expiration-date-processed', 1);
122
+ if ($debugEnabled) $debug->save(array('timestamp' => mktime(),'message' => 'PROCESSED: ID:'.$a->post_id));
123
  }
124
+ if ($debugEnabled) $debug->save(array('timestamp' => mktime(),'message' => 'END - DURATION: '.(mktime() - $startts)));
125
  }
126
  if (postExpirator_is_wpmu())
127
  add_action ('expirationdate_delete_'.$current_blog->blog_id, 'expirationdate_delete_expired_posts');
128
  else
129
  add_action ('expirationdate_delete', 'expirationdate_delete_expired_posts');
130
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
131
  /**
132
  * adds an 'Expires' column to the post display table.
133
  */
134
  function expirationdate_add_column ($columns) {
135
+ $columns['expirationdate'] = __('Expires','post-expirator').'<br/><span class="post-expirator-addcolumn">(YYYY/MM/DD HH:MM)</span>';
136
  return $columns;
137
  }
138
  add_filter ('manage_posts_columns', 'expirationdate_add_column');
179
  $defaulthour = date('H');
180
  $defaultyear = date('Y');
181
  $defaultminute = date('i');
182
+ $disabled = ' disabled="disabled"';
183
  $categories = get_option('expirationdateCategoryDefaults');
184
  } else {
185
  $defaultmonth = date('F',$expirationdatets);
196
  $rv[] = '<p><input type="checkbox" name="enable-expirationdate" id="enable-expirationdate" value="checked"'.$enabled.' onclick="expirationdate_ajax_add_meta(\'enable-expirationdate\')" />';
197
  $rv[] = '<label for="enable-expirationdate">'.__('Enable Post Expiration','post-expirator').'</label></p>';
198
  $rv[] = '<table><tr>';
199
+ $rv[] = '<th style="text-align: left;">'.__('Year','post-expirator').'</th>';
200
+ $rv[] = '<th style="text-align: left;">'.__('Month','post-expirator').'</th>';
201
+ $rv[] = '<th style="text-align: left;">'.__('Day','post-expirator').'</th>';
202
  $rv[] = '</tr><tr>';
203
  $rv[] = '<td>';
204
+ $rv[] = '<select name="expirationdate_year" id="expirationdate_year"'.$disabled.'>';
205
+ $currentyear = date('Y');
206
+
207
+ if ($defaultyear < $currentyear) $currentyear = $defaultyear;
208
+
209
+ for($i = $currentyear; $i < $currentyear + 8; $i++) {
210
+ if ($i == $defaultyear)
211
+ $selected = ' selected="selected"';
212
+ else
213
+ $selected = '';
214
+ $rv[] = '<option'.$selected.'>'.($i).'</option>';
215
+ }
216
+ $rv[] = '</select>';
217
  $rv[] = '</td><td>';
218
+ $rv[] = '<select name="expirationdate_month" id="expirationdate_month"'.$disabled.'>';
219
+
220
+ for($i = 1; $i <= 12; $i++) {
221
+ if ($defaultmonth == date('F',mktime(0, 0, 0, $i, 1, date("Y"))))
222
+ $selected = ' selected="selected"';
223
+ else
224
+ $selected = '';
225
+ $rv[] = '<option value="'.date('m',mktime(0, 0, 0, $i, 1, date("Y"))).'"'.$selected.'>'.date_i18n('F',mktime(0, 0, 0, $i, 1, date("Y"))).'</option>';
226
+ }
227
+
228
  $rv[] = '</select>';
229
  $rv[] = '</td><td>';
230
+ $rv[] = '<input type="text" id="expirationdate_day" name="expirationdate_day" value="'.$defaultday.'" size="2"'.$disabled.' />,';
231
  $rv[] = '</td></tr><tr>';
232
+ $rv[] = '<th style="text-align: left;"></th>';
233
+ $rv[] = '<th style="text-align: left;">'.__('Hour','post-expirator').'('.date('T',mktime(0, 0, 0, $i, 1, date("Y"))).')</th>';
234
+ $rv[] = '<th style="text-align: left;">'.__('Minute','post-expirator').'</th>';
235
+ $rv[] = '</tr><tr>';
236
  $rv[] = '<td>@</td><td>';
237
+ $rv[] = '<select name="expirationdate_hour" id="expirationdate_hour"'.$disabled.'>';
238
+
239
+ for($i = 1; $i <= 24; $i++) {
240
+ if ($defaulthour == date('H',mktime($i, 0, 0, date("n"), date("j"), date("Y"))))
241
+ $selected = ' selected="selected"';
242
+ else
243
+ $selected = '';
244
+ $rv[] = '<option value="'.date('H',mktime($i, 0, 0, date("n"), date("j"), date("Y"))).'"'.$selected.'>'.date_i18n('H',mktime($i, 0, 0, date("n"), date("j"), date("Y"))).'</option>';
245
+ }
246
+
247
+ $rv[] = '</select></td><td>';
248
+ $rv[] = '<input type="text" id="expirationdate_minute" name="expirationdate_minute" value="'.$defaultminute.'" size="2"'.$disabled.' />';
249
+ $rv[] = '<input type="hidden" name="expirationdate_formcheck" value="true" />';
250
  $rv[] = '</td></tr></table>';
251
  echo implode("\n",$rv);
252
 
268
  echo '<div id="expirationdate_ajax_result"></div>';
269
  }
270
 
 
 
 
 
 
 
 
 
 
 
 
 
271
  /**
272
  * Add's ajax javascript
273
  */
274
  function expirationdate_js_admin_header() {
 
 
 
275
  // Define custom JavaScript function
276
  ?>
277
  <script type="text/javascript">
278
  //<![CDATA[
279
  function expirationdate_ajax_add_meta(expireenable) {
 
 
280
  var expire = document.getElementById(expireenable);
281
 
282
  if (expire.checked == true) {
305
  var enable = 'false';
306
  }
307
 
 
 
 
 
 
 
 
 
308
  return true;
309
  }
310
  //]]>
311
  </script>
312
  <?php
313
  }
314
+ add_action('admin_head', 'expirationdate_js_admin_header' );
315
 
316
  /**
317
  * Get correct URL (HTTP or HTTPS)
363
  * Build the menu for the options page
364
  */
365
  function postExpiratorMenuTabs($tab) {
 
366
  echo '<p>';
367
  if (empty($tab)) $tab = 'general';
368
  echo '<a href="'.admin_url('options-general.php?page=post-expirator.php&tab=general').'"'.($tab == 'general' ? ' style="font-weight: bold; text-decoration:none;"' : '').'>'.__('General Settings','post-expirator').'</a> | ';
369
+ echo '<a href="'.admin_url('options-general.php?page=post-expirator.php&tab=diagnostics').'"'.($tab == 'diagnostics' ? ' style="font-weight: bold; text-decoration:none;"' : '').'>'.__('Diagnostics','post-expirator').'</a>';
370
+ echo ' | <a href="'.admin_url('options-general.php?page=post-expirator.php&tab=viewdebug').'"'.($tab == 'viewdebug' ? ' style="font-weight: bold; text-decoration:none;"' : '').'>'.__('View Debug Logs','post-expirator').'</a>';
371
  echo '</p><hr/>';
372
  }
373
 
378
  $tab = $_GET['tab'];
379
 
380
  echo '<div class="wrap">';
381
+ echo '<h2>'.__('Post Expirator Options','post-expirator').'</h2>';
382
+
383
  postExpiratorMenuTabs($tab);
384
  if (empty($tab) || $tab == 'general') {
385
  postExpiratorMenuGeneral();
386
+ } elseif ($tab == 'diagnostics') {
387
+ postExpiratorMenuDiagnostics();
388
+ } elseif ($tab == 'viewdebug') {
389
+ postExpiratorMenuViewdebug();
390
  }
391
  echo '</div>';
392
  }
514
  <tr valign-"top">
515
  <th scope="row"><label for="expired-default-date-format"><?php _e('Date Format:','post-expirator');?></label></th>
516
  <td>
517
+ <input type="text" name="expired-default-date-format" id="expired-default-date-format" value="<?php echo $expirationdateDefaultDateFormat ?>" size="25" /> (<?php echo date_i18n("$expirationdateDefaultDateFormat") ?>)
518
  <br/>
519
  <?php _e('The default format to use when displaying the expiration date within a post using the [postexpirator] shortcode or within the footer. For information on valid formatting options, see: <a href="http://us2.php.net/manual/en/function.date.php" target="_blank">PHP Date Function</a>.','post-expirator'); ?>
520
  </td>
522
  <tr valign-"top">
523
  <th scope="row"><label for="expired-default-time-format"><?php _e('Time Format:','post-expirator');?></label></th>
524
  <td>
525
+ <input type="text" name="expired-default-time-format" id="expired-default-time-format" value="<?php echo $expirationdateDefaultTimeFormat ?>" size="25" /> (<?php echo date_i18n("$expirationdateDefaultTimeFormat") ?>)
526
  <br/>
527
  <?php _e('The default format to use when displaying the expiration time within a post using the [postexpirator] shortcode or within the footer. For information on valid formatting options, see: <a href="http://us2.php.net/manual/en/function.date.php" target="_blank">PHP Date Function</a>.','post-expirator'); ?>
528
  </td>
575
  <br/>
576
  <?php _e('Enter the text you would like to appear at the bottom of every post that will expire. The following placeholders will be replaced with the post expiration date in the following format:','post-expirator');?>
577
  <ul>
578
+ <li>EXPIRATIONFULL -> <?php echo date_i18n("$expirationdateDefaultDateFormat $expirationdateDefaultTimeFormat") ?></li>
579
+ <li>EXPIRATIONDATE -> <?php echo date_i18n("$expirationdateDefaultDateFormat") ?></li>
580
+ <li>EXPIRATIONTIME -> <?php echo date_i18n("$expirationdateDefaultTimeFormat") ?></li>
581
  </ul>
582
  </td>
583
  </tr>
585
  <th scope="row"><label for="expired-footer-style"><?php _e('Footer Style:','post-expirator');?></label></th>
586
  <td>
587
  <input type="text" name="expired-footer-style" id="expired-footer-style" value="<?php echo $expirationdateFooterStyle ?>" size="25" />
588
+ (<span style="<?php echo $expirationdateFooterStyle ?>"><?php _e('This post will expire on','post-expirator');?> <?php echo date_i18n("$expirationdateDefaultDateFormat $expirationdateDefaultTimeFormat"); ?></span>)
589
  <br/>
590
  <?php _e('The inline css which will be used to style the footer text.','post-expirator');?>
591
  </td>
598
  <?php
599
  }
600
 
601
+ function postExpiratorCronEventStatus() {
602
+ $names = array();
603
  // WPMU
604
  if (postExpirator_is_wpmu()) {
605
  global $current_blog;
606
  $names[] = 'expirationdate_delete_'.$current_blog->blog_id;
607
+ } else {
608
+ $names[] = 'expirationdate_delete';
609
  }
610
+
611
  $results = array();
612
  foreach ( $names as $name ) {
613
+ if (wp_get_schedule($name) !== false) array_push($results,wp_get_schedule($name));
614
  }
615
 
616
+ if (empty($results)) return false;
617
+
618
+ foreach ( $results as $result ) {
619
  if ($result == 'hourly') return false;
620
  }
621
  return true;
622
  }
623
 
624
+ function postExpiratorCronScheduleStatus() {
625
+ $schedules = wp_get_schedules();
626
+
627
+ if (isset($schedules['postexpiratorminute'])) {
628
+ if ($schedules['postexpiratorminute']['interval'] == '60')
629
+ return true;
630
+ }
631
+ return false;
632
+ }
633
+
634
  /**
635
+ * Reset all cron events for Post Expirator Plugin
636
  */
637
+ function postExpiratorResetCronEvent() {
638
+ postExpiratorTimezoneSetup();
639
+
640
+ wp_clear_scheduled_hook('expirationdate_delete');
641
+ wp_clear_scheduled_hook('expirationdate_delete_');
642
+
643
+ if (postExpirator_is_wpmu()) {
644
  global $current_blog;
645
+ wp_clear_scheduled_hook('expirationdate_delete_'.$current_blog->blog_id);
646
+ wp_schedule_event(mktime(date('H'),0,0,date('m'),date('d'),date('Y')), 'postexpiratorminute', 'expirationdate_delete_'.$current_blog->blog_id);
647
+ } else {
648
+ wp_schedule_event(mktime(date('H'),0,0,date('m'),date('d'),date('Y')), 'postexpiratorminute', 'expirationdate_delete');
 
 
649
  }
650
  }
651
 
652
+ function postExpiratorMenuDiagnostics() {
653
+ if (isset($_POST['reset-cron-event'])) {
654
+ postExpiratorResetCronEvent();
655
+ echo "<div id='message' class='updated fade'><p>"; _e('Cron Events Reset! (Reload page to remove warning)','post-expirator'); echo "</p></div>";
656
+ } elseif (isset($_POST['debugging-disable'])) {
657
+ update_option('expirationdateDebug',0);
658
+ echo "<div id='message' class='updated fade'><p>"; _e('Debugging Disabled','post-expirator'); echo "</p></div>";
659
+ } elseif (isset($_POST['debugging-enable'])) {
660
+ update_option('expirationdateDebug',1);
661
+ echo "<div id='message' class='updated fade'><p>"; _e('Debugging Enabled','post-expirator'); echo "</p></div>";
662
+ } elseif (isset($_POST['purge-debug'])) {
663
+ require_once(plugin_dir_path(__FILE__).'post-expirator-debug.php');
664
+ $debug = new postExpiratorDebug();
665
+ $debug->purge();
666
+ echo "<div id='message' class='updated fade'><p>"; _e('Debugging Table Emptied','post-expirator'); echo "</p></div>";
667
  }
668
 
669
+ $status = postExpiratorCronEventStatus();
670
+ if ($status) $cronstatus = '<span style="color:green">'.__('OK','post-expirator').'</span>';
671
+ else $cronstatus = '<span style="color:red">'.__('RESET NEEDED','post-expirator').'</span>';
672
+
673
+ $schedule = postExpiratorCronScheduleStatus();
674
+ if ($schedule) $cronschedulestatus = '<span style="color:green">'.__('OK','post-expirator').'</span>';
675
+ else $cronschedulestatus = '<span style="color:red">'.__('ERROR WITH FILTER','post-expirator').'</span>';
676
+
677
+ $debug = postExpiratorDebugEnabled();
678
 
679
  ?>
680
  <form method="post" id="postExpiratorMenuUpgrade">
681
+ <h3><?php _e('Cron Settings','post-expirator');?></h3>
682
  <table class="form-table">
683
  <tr valign-"top">
684
+ <th scope="row"><label for="reset-cron-event"><?php _e('Reset Cron Event:','post-expirator');?></label></th>
685
  <td>
686
+ <input type="submit" name="reset-cron-event" id="reset-cron-event" value="<?php _e('Reset','post-expirator');?>" />
687
  <?php _e('Status:','post-expirator');?> <?php echo $cronstatus; ?>
688
  <br/>
689
+ <?php _e('Resets the cron event and removes any old or stray entries.','post-expirator');?>
690
+ </td>
691
+ </tr>
692
+ <tr valign-"top">
693
+ <th scope="row"><label for="reset-cron-schedule"><?php _e('Reset Cron Schedule:','post-expirator');?></label></th>
694
+ <td>
695
+ <?php _e('Status:','post-expirator');?> <?php echo $cronschedulestatus; ?>
696
+ <br/>
697
+ <?php _e('Displays the cron minute schedule status for post expirator.','post-expirator');?>
698
+ </td>
699
+ </tr>
700
+ </table>
701
+
702
+ <h3><?php _e('Advanced Diagnostics','post-expirator');?></h3>
703
+ <table class="form-table">
704
+ <tr valign-"top">
705
+ <th scope="row"><label for="postexpirator-log"><?php _e('Post Expirator Debug Logging:','post-expirator');?></label></th>
706
+ <td>
707
+ <?php
708
+ if ($debug) {
709
+ echo __('Status: Enabled','post-expirator').'<br/>';
710
+ echo '<input type="submit" name="debugging-disable" id="debugging-disable" value="'.__('Disable Debugging','post-expirator').'" />';
711
+ } else {
712
+ echo __('Status: Disabled','post-expirator').'<br/>';
713
+ echo '<input type="submit" name="debugging-enable" id="debugging-enable" value="'.__('Enable Debugging','post-expirator').'" />';
714
+ }
715
+ ?>
716
+ <br/>
717
+ <a href="<?php echo admin_url('options-general.php?page=post-expirator.php&tab=viewdebug') ?>">View Debug Logs</a>
718
+ </td>
719
+ </tr>
720
+ <tr valign-"top">
721
+ <th scope="row"><?php _e('Purge Debug Log:','post-expirator');?></th>
722
+ <td>
723
+ <input type="submit" name="purge-debug" id="purge-debug" value="<?php _e('Purge Debug Log','post-expirator');?>" />
724
+ </td>
725
+ </tr/>
726
+ <tr valign-"top">
727
+ <th scope="row"><label for="cron-schedule"><?php _e('Current Cron Schedule:','post-expirator');?></label></th>
728
+ <td>
729
+ <?php _e('The below table will show all currently scheduled cron events with the next run time.','post-expirator');?><br/>
730
+ <?php _e('Single site (non multisite) users should see an event named expirationdate_delete with a schedule of postexpiratorminute.','post-expirator');?><br/>
731
+ <?php if (postExpirator_is_wpmu()) _e('Multisite users should see an event named expirationdate_delete_blogid (where the blogid is replaced with the numeric id of the blog) with a schedule of postexpiratorminute','post-expirator');?>
732
+ <table>
733
+ <tr>
734
+ <th><?php _e('Date','post-expirator');?></th>
735
+ <th><?php _e('Event','post-expirator');?></th>
736
+ <th><?php _e('Schedule','post-expirator');?></th>
737
+ <th><?php _e('Interval (seconds)','post-expirator');?></th>
738
+ </tr>
739
+ <?php
740
+ $cron = _get_cron_array();
741
+ foreach ($cron as $key=>$value) {
742
+ foreach ($value as $eventkey=>$eventvalue) {
743
+ print '<tr>';
744
+ print '<td>'.date_i18n('r',$key).'</td>';
745
+ print '<td>'.$eventkey.'</td>';
746
+ $arrkey = array_keys($eventvalue);
747
+ print '<td>'.$eventvalue[$arrkey[0]]['schedule'].'</td>';
748
+ print '<td>'.$eventvalue[$arrkey[0]]['interval'].'</td>';
749
+ print '</tr>';
750
+ }
751
+ }
752
+ ?>
753
+ </table>
754
  </td>
755
  </tr>
756
  </table>
758
  <?php
759
  }
760
 
761
+ function postExpiratorMenuViewdebug() {
762
+ require_once(plugin_dir_path(__FILE__).'post-expirator-debug.php');
763
+ print "<p>".__('Below is a dump of the debugging table, this should be useful for troubleshooting.','post-expirator')."</p>";
764
+ $debug = new postExpiratorDebug();
765
+ $debug->getTable();
766
+ }
767
 
768
  // [postexpirator format="l F jS, Y g:ia" tz="foo"]
769
  function postexpirator_shortcode($atts) {
845
  'EXPIRATIONTIME'
846
  );
847
  $replace = array(
848
+ date_i18n("$dateformat $timeformat",$expirationdatets),
849
+ date_i18n("$dateformat",$expirationdatets),
850
+ date_i18n("$timeformat",$expirationdatets)
851
  );
852
 
853
  $add_to_footer = '<p style="'.$expirationdateFooterStyle.'">'.str_replace($search,$replace,$expirationdateFooterContents).'</p>';
855
  }
856
  add_action('the_content','postexpirator_add_footer',0);
857
 
858
+ /**
859
+ * Check for Debug
860
+ */
861
+ function postExpiratorDebugEnabled() {
862
+ $debug = get_option('expirationdateDebug');
863
+ if ($debug == 1) return true;
864
+ return false;
865
+ }
866
+
867
  /**
868
  * Add Stylesheet
869
  */
878
  }
879
  add_action('admin_init','postexpirator_css');
880
 
881
+ /**
882
+ * Post Expirator Activation/Upgrade
883
+ */
884
+ function postexpirator_upgrade() {
885
+ // Check for current version, if not exists, run activation
886
+ $version = get_option('postexpiratorVersion');
887
+ if ($version === false) { //not installed, run default activation
888
+ postexpirator_activate();
889
+ update_option('postexpiratorVersion',POSTEXPIRATOR_VERSION);
890
+ }
891
+ }
892
+ add_action('admin_init','postexpirator_upgrade');
893
+
894
+ /**
895
+ * Called at plugin activation
896
+ */
897
+ function postexpirator_activate () {
898
+ global $current_blog,$expirationdateDefaultDateFormat,$expirationdateDefaultTimeFormat,$expirationdateDefaultFooterContents,$expirationdateDefaultFooterStyle;
899
+ if (get_option('expirationdateExpiredPostStatus') === false) update_option('expirationdateExpiredPostStatus','Draft');
900
+ if (get_option('expirationdateExpiredPageStatus') === false) update_option('expirationdateExpiredPageStatus','Draft');
901
+ if (get_option('expirationdateDefaultDateFormat') === false) update_option('expirationdateDefaultDateFormat',$expirationdateDefaultDateFormat);
902
+ if (get_option('expirationdateDefaultTimeFormat') === false) update_option('expirationdateDefaultTimeFormat',$expirationdateDefaultTimeFormat);
903
+ if (get_option('expirationdateFooterContents') === false) update_option('expirationdateFooterContents',$expirationdateDefaultFooterContents);
904
+ if (get_option('expirationdateFooterStyle') === false) update_option('expirationdateFooterStyle',$expirationdateDefaultFooterStyle);
905
+ if (get_option('expirationdateDisplayFooter') === false) update_option('expirationdateDisplayFooter',0);
906
+ if (get_option('expirationdateCategory') === false) update_option('expirationdateCategory',1);
907
+ if (get_option('expirationdateDebug') === false) update_option('expirationdateDebug',0);
908
+ postExpiratorTimezoneSetup();
909
+
910
+ if (postExpirator_is_wpmu())
911
+ wp_schedule_event(mktime(date('H'),0,0,date('m'),date('d'),date('Y')), 'postexpiratorminute', 'expirationdate_delete_'.$current_blog->blog_id);
912
+ else
913
+ wp_schedule_event(mktime(date('H'),0,0,date('m'),date('d'),date('Y')), 'postexpiratorminute', 'expirationdate_delete');
914
+ }
915
+
916
+ /**
917
+ * Called at plugin deactivation
918
+ */
919
+ function expirationdate_deactivate () {
920
+ global $current_blog;
921
+ delete_option('expirationdateExpiredPostStatus');
922
+ delete_option('expirationdateExpiredPageStatus');
923
+ delete_option('expirationdateDefaultDateFormat');
924
+ delete_option('expirationdateDefaultTimeFormat');
925
+ delete_option('expirationdateDisplayFooter');
926
+ delete_option('expirationdateFooterContents');
927
+ delete_option('expirationdateFooterStyle');
928
+ delete_option('expirationdateCategory');
929
+ delete_option('expirationdateDebug');
930
+ delete_option('postexpiratorVersion');
931
+ if (postExpirator_is_wpmu())
932
+ wp_clear_scheduled_hook('expirationdate_delete_'.$current_blog->blog_id);
933
+ else
934
+ wp_clear_scheduled_hook('expirationdate_delete');
935
+ require_once(plugin_dir_path(__FILE__).'post-expirator-debug.php');
936
+ $debug = new postExpiratorDebug();
937
+ $debug->removeDbTable();
938
+ }
939
+ register_deactivation_hook (__FILE__, 'expirationdate_deactivate');
940
+
941
  class Walker_PostExpirator_Category_Checklist extends Walker {
942
  var $tree_type = 'category';
943
  var $db_fields = array ('parent' => 'parent', 'id' => 'term_id'); //TODO: decouple this
readme.txt CHANGED
@@ -1,9 +1,9 @@
1
  === Post Expirator ===
2
  Contributors: axelseaa
3
  Tags: expire, posts, pages, schedule
4
- Requires at least: 3.0
5
- Tested up to: 3.3.2
6
- Stable tag: 1.5.4
7
 
8
  Allows you to add an expiration date to posts which you can configure to either delete the post, change it to a draft, or update the
9
  post categories.
@@ -45,6 +45,16 @@ This section describes how to install the plugin and get it working.
45
 
46
  == Changelog ==
47
 
 
 
 
 
 
 
 
 
 
 
48
  **Version 1.5.4**
49
 
50
  * Cleaned up deprecated function calls
@@ -123,6 +133,14 @@ NOTE: After upgrading, you may need to reset the cron schedules. Following onsc
123
 
124
  == Upgrade Notice ==
125
 
 
 
 
 
 
 
 
 
126
  = 1.5.4 =
127
  Cleaned up deprecated function calls
128
 
1
  === Post Expirator ===
2
  Contributors: axelseaa
3
  Tags: expire, posts, pages, schedule
4
+ Requires at least: 3.2
5
+ Tested up to: 3.4
6
+ Stable tag: 1.6
7
 
8
  Allows you to add an expiration date to posts which you can configure to either delete the post, change it to a draft, or update the
9
  post categories.
45
 
46
  == Changelog ==
47
 
48
+ **Version 1.6**
49
+
50
+ * Fixed invalid html
51
+ * Fixed i18n issues with dates
52
+ * Fixed problem when using "Network Activate" - reworked plugin activation process
53
+ * Replaced "Upgrade" tab with new "Diagnostics" tab
54
+ * Reworked expire logic to limit the number of sql queries needed
55
+ * Added debugging
56
+ * Various code cleanup
57
+
58
  **Version 1.5.4**
59
 
60
  * Cleaned up deprecated function calls
133
 
134
  == Upgrade Notice ==
135
 
136
+ = 1.6 =
137
+ Fixed invalid html
138
+ Fixed i18n issues with dates
139
+ Fixed problem when using "Network Activate" - reworked plugin activation process
140
+ Replaced "Upgrade" tab with new "Diagnostics" tab
141
+ Reworked expire logic to limit the number of sql queries needed
142
+ Added debugging
143
+
144
  = 1.5.4 =
145
  Cleaned up deprecated function calls
146
 
style.css CHANGED
@@ -1,3 +1,10 @@
 
 
 
 
 
 
 
1
  #post-expirator-cat-list {
2
  max-width: 250px;
3
  }
@@ -7,3 +14,10 @@
7
  #post-expirator-cat-list ul ul {
8
  margin-left: 18px;
9
  }
 
 
 
 
 
 
 
1
+ .post-expirator-adminnotice {
2
+ background-color: red;
3
+ }
4
+ .post-expirator-addcolumn {
5
+ font-size: 0.8em;
6
+ font-weight: normal;
7
+ }
8
  #post-expirator-cat-list {
9
  max-width: 250px;
10
  }
14
  #post-expirator-cat-list ul ul {
15
  margin-left: 18px;
16
  }
17
+ .post-expirator-debug th {
18
+ font-weight: bold;
19
+ border-bottom: 1px solid black;
20
+ }
21
+ .post-expirator-timestamp {
22
+ width: 150px;
23
+ }