Post Expirator - Version 2.0.0

Version Description

This is a major update of the core functions of this plugin. All current plugins and settings should be upgraded to the new formats and work as expected. Any posts currently schedule to be expirated in the future will be automatically upgraded to the new format.

Download this release

Release Info

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

Code changes from version 1.6.2 to 2.0.0

languages/post-expirator.pot CHANGED
@@ -1,195 +1,149 @@
1
- # Copyright (C) 2012 Post Expirator
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-07-26 03:34:46+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
11
- "PO-Revision-Date: 2012-MO-DA HO:MI+ZONE\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:23
28
  msgid "l F jS, Y"
29
  msgstr ""
30
 
31
- #: post-expirator.php:24
32
  msgid "g:ia"
33
  msgstr ""
34
 
35
- #: post-expirator.php:25
36
  msgid "Post expires at EXPIRATIONTIME on EXPIRATIONDATE"
37
  msgstr ""
38
 
39
- #: post-expirator.php:53
40
- msgid "Once a Minute"
41
- msgstr ""
42
-
43
- #: post-expirator.php:62
44
  msgid "Settings"
45
  msgstr ""
46
 
47
- #: post-expirator.php:75
48
- msgid "Cron Events Reset!"
49
- msgstr ""
50
-
51
- #: post-expirator.php:79
52
- msgid "Post Expirator cron events need to be reset. "
53
- msgstr ""
54
-
55
- #: post-expirator.php:81
56
- msgid "Click here to reset"
57
- msgstr ""
58
-
59
- #: post-expirator.php:159
60
  msgid "Expires"
61
  msgstr ""
62
 
63
- #: post-expirator.php:175
64
  msgid "Never"
65
  msgstr ""
66
 
67
- #. #-#-#-#-# plugin.pot (Post Expirator 1.6) #-#-#-#-#
68
  #. Plugin Name of the plugin/theme
69
- #: post-expirator.php:187 post-expirator.php:189 post-expirator.php:465
70
  msgid "Post Expirator"
71
  msgstr ""
72
 
73
- #: post-expirator.php:238
74
  msgid "Enable Post Expiration"
75
  msgstr ""
76
 
77
- #: post-expirator.php:241
78
  msgid "The published date/time will be used as the expiration value"
79
  msgstr ""
80
 
81
- #: post-expirator.php:244
82
  msgid "Year"
83
  msgstr ""
84
 
85
- #: post-expirator.php:245
86
  msgid "Month"
87
  msgstr ""
88
 
89
- #: post-expirator.php:246
90
  msgid "Day"
91
  msgstr ""
92
 
93
- #: post-expirator.php:278
94
  msgid "Hour"
95
  msgstr ""
96
 
97
- #: post-expirator.php:279
98
  msgid "Minute"
99
  msgstr ""
100
 
101
- #: post-expirator.php:302
102
- msgid "Expiration Categories"
103
  msgstr ""
104
 
105
- #: post-expirator.php:312
106
- msgid ""
107
- "Setting an expiration category will change the category at expiration time, "
108
- "and override the default post action"
109
  msgstr ""
110
 
111
- #: post-expirator.php:435
112
  msgid "General Settings"
113
  msgstr ""
114
 
115
- #: post-expirator.php:436
 
 
 
 
116
  msgid "Diagnostics"
117
  msgstr ""
118
 
119
- #: post-expirator.php:437
120
  msgid "View Debug Logs"
121
  msgstr ""
122
 
123
- #: post-expirator.php:448 post-expirator.php:465
124
  msgid "Post Expirator Options"
125
  msgstr ""
126
 
127
- #: post-expirator.php:489
128
  msgid "Saved Options!"
129
  msgstr ""
130
 
131
- #: post-expirator.php:526
132
  msgid ""
133
  "The post expirator plugin sets a custom meta value, and then optionally "
134
  "allows you to select if you want the post changed to a draft status or "
135
  "deleted when it expires."
136
  msgstr ""
137
 
138
- #: post-expirator.php:529
139
  msgid "Valid [postexpirator] attributes:"
140
  msgstr ""
141
 
142
- #: post-expirator.php:531
143
  msgid "type - defaults to full - valid options are full,date,time"
144
  msgstr ""
145
 
146
- #: post-expirator.php:532
147
  msgid ""
148
  "dateformat - format set here will override the value set on the settings page"
149
  msgstr ""
150
 
151
- #: post-expirator.php:533
152
  msgid ""
153
  "timeformat - format set here will override the value set on the settings page"
154
  msgstr ""
155
 
156
- #: post-expirator.php:537
157
- msgid "Defaults"
158
- msgstr ""
159
-
160
- #: post-expirator.php:540
161
- msgid "Set Post To:"
162
- msgstr ""
163
-
164
- #: post-expirator.php:543 post-expirator.php:554
165
- msgid "Draft"
166
- msgstr ""
167
-
168
- #: post-expirator.php:544 post-expirator.php:555
169
- msgid "Delete"
170
- msgstr ""
171
-
172
- #: post-expirator.php:547
173
- msgid ""
174
- "Select whether the post should be deleted or changed to a draft at "
175
- "expiration time."
176
- msgstr ""
177
-
178
- #: post-expirator.php:551
179
- msgid "Set Page To:"
180
- msgstr ""
181
-
182
- #: post-expirator.php:558
183
- msgid ""
184
- "Select whether the page should be deleted or changed to a draft at "
185
- "expiration time."
186
- msgstr ""
187
-
188
- #: post-expirator.php:562
189
  msgid "Date Format:"
190
  msgstr ""
191
 
192
- #: post-expirator.php:566
193
  msgid ""
194
  "The default format to use when displaying the expiration date within a post "
195
  "using the [postexpirator] shortcode or within the footer. For information "
@@ -197,11 +151,11 @@ msgid ""
197
  "function.date.php\" target=\"_blank\">PHP Date Function</a>."
198
  msgstr ""
199
 
200
- #: post-expirator.php:570
201
  msgid "Time Format:"
202
  msgstr ""
203
 
204
- #: post-expirator.php:574
205
  msgid ""
206
  "The default format to use when displaying the expiration time within a post "
207
  "using the [postexpirator] shortcode or within the footer. For information "
@@ -209,245 +163,229 @@ msgid ""
209
  "function.date.php\" target=\"_blank\">PHP Date Function</a>."
210
  msgstr ""
211
 
212
- #: post-expirator.php:578
213
- msgid "Cron Schedule:"
214
- msgstr ""
215
-
216
- #: post-expirator.php:588
217
- msgid "By default set to \"postexpiratorminute\" which fires every minute."
218
- msgstr ""
219
-
220
- #: post-expirator.php:592
221
  msgid "Default Date/Time Duration:"
222
  msgstr ""
223
 
224
- #: post-expirator.php:595
225
  msgid "None"
226
  msgstr ""
227
 
228
- #: post-expirator.php:596
229
  msgid "Custom"
230
  msgstr ""
231
 
232
- #: post-expirator.php:597
233
  msgid "Post/Page Publish Time"
234
  msgstr ""
235
 
236
- #: post-expirator.php:600
237
  msgid ""
238
  "Set the default expiration date to be used when creating new posts and "
239
  "pages. Defaults to none."
240
  msgstr ""
241
 
242
- #: post-expirator.php:605
243
  msgid ""
244
  "Set the custom value to use for the default expiration date. For "
245
  "information on formatting, see <a href=\"http://php.net/manual/en/function."
246
  "strtotime.php\">PHP strtotime function</a>."
247
  msgstr ""
248
 
249
- #: post-expirator.php:610
250
  msgid "Category Expiration"
251
  msgstr ""
252
 
253
- #: post-expirator.php:613
254
- msgid "Enable Post Expiration to Category?"
255
- msgstr ""
256
-
257
- #: post-expirator.php:615 post-expirator.php:644
258
- msgid "Enabled"
259
- msgstr ""
260
-
261
- #: post-expirator.php:616 post-expirator.php:645
262
- msgid "Disabled"
263
- msgstr ""
264
-
265
- #: post-expirator.php:618
266
- msgid "This will enable or disable the ability to expire a post to a category."
267
- msgstr ""
268
-
269
- #: post-expirator.php:622
270
  msgid "Default Expiration Category"
271
  msgstr ""
272
 
273
- #: post-expirator.php:633
274
  msgid "Set's the default expiration category for the post."
275
  msgstr ""
276
 
277
- #: post-expirator.php:638
278
  msgid "Post Footer Display"
279
  msgstr ""
280
 
281
- #: post-expirator.php:639
282
  msgid ""
283
  "Enabling this below will display the expiration date automatically at the "
284
  "end of any post which is set to expire."
285
  msgstr ""
286
 
287
- #: post-expirator.php:642
288
  msgid "Show in post footer?"
289
  msgstr ""
290
 
291
- #: post-expirator.php:647
 
 
 
 
 
 
 
 
292
  msgid ""
293
  "This will enable or disable displaying the post expiration date in the post "
294
  "footer."
295
  msgstr ""
296
 
297
- #: post-expirator.php:651
298
  msgid "Footer Contents:"
299
  msgstr ""
300
 
301
- #: post-expirator.php:655
302
  msgid ""
303
  "Enter the text you would like to appear at the bottom of every post that "
304
  "will expire. The following placeholders will be replaced with the post "
305
  "expiration date in the following format:"
306
  msgstr ""
307
 
308
- #: post-expirator.php:664
309
  msgid "Footer Style:"
310
  msgstr ""
311
 
312
- #: post-expirator.php:667
313
  msgid "This post will expire on"
314
  msgstr ""
315
 
316
- #: post-expirator.php:669
317
  msgid "The inline css which will be used to style the footer text."
318
  msgstr ""
319
 
320
- #: post-expirator.php:674
321
  msgid "Save Changes"
322
  msgstr ""
323
 
324
- #: post-expirator.php:724
325
- msgid "Debugging Disabled"
326
- msgstr ""
327
-
328
- #: post-expirator.php:727
329
- msgid "Debugging Enabled"
330
  msgstr ""
331
 
332
- #: post-expirator.php:732
333
- msgid "Debugging Table Emptied"
334
- msgstr ""
335
-
336
- #: post-expirator.php:736 post-expirator.php:740
337
- msgid "OK"
338
- msgstr ""
339
-
340
- #: post-expirator.php:737
341
- msgid "RESET NEEDED"
342
- msgstr ""
343
-
344
- #: post-expirator.php:741
345
- msgid "ERROR WITH FILTER"
346
  msgstr ""
347
 
348
- #: post-expirator.php:747
349
- msgid "Cron Settings"
350
  msgstr ""
351
 
352
- #: post-expirator.php:750
353
- msgid "Reset Cron Event:"
354
  msgstr ""
355
 
356
- #: post-expirator.php:752
357
- msgid "Reset"
358
  msgstr ""
359
 
360
- #: post-expirator.php:753 post-expirator.php:761
361
- msgid "Status:"
362
  msgstr ""
363
 
364
- #: post-expirator.php:755
365
- msgid "Resets the cron event and removes any old or stray entries."
366
  msgstr ""
367
 
368
- #: post-expirator.php:759
369
- msgid "Reset Cron Schedule:"
370
  msgstr ""
371
 
372
- #: post-expirator.php:763
373
- msgid "Displays the cron minute schedule status for post expirator."
374
  msgstr ""
375
 
376
- #: post-expirator.php:768
377
  msgid "Advanced Diagnostics"
378
  msgstr ""
379
 
380
- #: post-expirator.php:771
381
  msgid "Post Expirator Debug Logging:"
382
  msgstr ""
383
 
384
- #: post-expirator.php:775
385
  msgid "Status: Enabled"
386
  msgstr ""
387
 
388
- #: post-expirator.php:776
389
  msgid "Disable Debugging"
390
  msgstr ""
391
 
392
- #: post-expirator.php:778
393
  msgid "Status: Disabled"
394
  msgstr ""
395
 
396
- #: post-expirator.php:779
397
  msgid "Enable Debugging"
398
  msgstr ""
399
 
400
- #: post-expirator.php:787
401
  msgid "Purge Debug Log:"
402
  msgstr ""
403
 
404
- #: post-expirator.php:789
405
  msgid "Purge Debug Log"
406
  msgstr ""
407
 
408
- #: post-expirator.php:793
409
  msgid "Current Cron Schedule:"
410
  msgstr ""
411
 
412
- #: post-expirator.php:795
413
  msgid ""
414
  "The below table will show all currently scheduled cron events with the next "
415
  "run time."
416
  msgstr ""
417
 
418
- #: post-expirator.php:798
419
- msgid ""
420
- "There should be an event named expirationdate_delete_blogid (where the "
421
- "blogid is replaced with the numeric id of the blog) with a schedule of %s."
422
- msgstr ""
423
-
424
- #: post-expirator.php:800
425
- msgid ""
426
- "There should be an event named expirationdate_delete with a schedule of %s."
427
- msgstr ""
428
-
429
- #: post-expirator.php:805
430
  msgid "Date"
431
  msgstr ""
432
 
433
- #: post-expirator.php:806
434
  msgid "Event"
435
  msgstr ""
436
 
437
- #: post-expirator.php:807
438
- msgid "Schedule"
439
  msgstr ""
440
 
441
- #: post-expirator.php:808
442
- msgid "Interval (seconds)"
443
  msgstr ""
444
 
445
- #: post-expirator.php:834
446
  msgid ""
447
  "Below is a dump of the debugging table, this should be useful for "
448
  "troubleshooting."
449
  msgstr ""
450
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
451
  #. Plugin URI of the plugin/theme
452
  msgid "http://wordpress.org/extend/plugins/post-expirator/"
453
  msgstr ""
1
+ # Copyright (C) 2013 Post Expirator
2
  # This file is distributed under the same license as the Post Expirator package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Post Expirator 2.0.0\n"
6
  "Report-Msgid-Bugs-To: http://wordpress.org/tag/post-expirator\n"
7
+ "POT-Creation-Date: 2013-03-09 22:46:54+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
11
+ "PO-Revision-Date: 2013-MO-DA HO:MI+ZONE\n"
12
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13
  "Language-Team: LANGUAGE <LL@li.org>\n"
14
 
15
+ #: post-expirator-debug.php:47
16
  msgid "Debugging table is currently empty."
17
  msgstr ""
18
 
19
+ #: post-expirator-debug.php:51
20
  msgid "Timestamp"
21
  msgstr ""
22
 
23
+ #: post-expirator-debug.php:52
24
  msgid "Message"
25
  msgstr ""
26
 
27
+ #: post-expirator.php:22
28
  msgid "l F jS, Y"
29
  msgstr ""
30
 
31
+ #: post-expirator.php:23
32
  msgid "g:ia"
33
  msgstr ""
34
 
35
+ #: post-expirator.php:24
36
  msgid "Post expires at EXPIRATIONTIME on EXPIRATIONDATE"
37
  msgstr ""
38
 
39
+ #: post-expirator.php:33
 
 
 
 
40
  msgid "Settings"
41
  msgstr ""
42
 
43
+ #: post-expirator.php:51
 
 
 
 
 
 
 
 
 
 
 
 
44
  msgid "Expires"
45
  msgstr ""
46
 
47
+ #: post-expirator.php:65
48
  msgid "Never"
49
  msgstr ""
50
 
51
+ #. #-#-#-#-# plugin.pot (Post Expirator 2.0.0) #-#-#-#-#
52
  #. Plugin Name of the plugin/theme
53
+ #: post-expirator.php:77 post-expirator.php:79 post-expirator.php:562
54
  msgid "Post Expirator"
55
  msgstr ""
56
 
57
+ #: post-expirator.php:150
58
  msgid "Enable Post Expiration"
59
  msgstr ""
60
 
61
+ #: post-expirator.php:153
62
  msgid "The published date/time will be used as the expiration value"
63
  msgstr ""
64
 
65
+ #: post-expirator.php:156
66
  msgid "Year"
67
  msgstr ""
68
 
69
+ #: post-expirator.php:157
70
  msgid "Month"
71
  msgstr ""
72
 
73
+ #: post-expirator.php:158
74
  msgid "Day"
75
  msgstr ""
76
 
77
+ #: post-expirator.php:190
78
  msgid "Hour"
79
  msgstr ""
80
 
81
+ #: post-expirator.php:191
82
  msgid "Minute"
83
  msgstr ""
84
 
85
+ #: post-expirator.php:211
86
+ msgid "How to expire"
87
  msgstr ""
88
 
89
+ #: post-expirator.php:222
90
+ msgid "Expiration Categories"
 
 
91
  msgstr ""
92
 
93
+ #: post-expirator.php:529
94
  msgid "General Settings"
95
  msgstr ""
96
 
97
+ #: post-expirator.php:530 post-expirator.php:623
98
+ msgid "Defaults"
99
+ msgstr ""
100
+
101
+ #: post-expirator.php:531
102
  msgid "Diagnostics"
103
  msgstr ""
104
 
105
+ #: post-expirator.php:532
106
  msgid "View Debug Logs"
107
  msgstr ""
108
 
109
+ #: post-expirator.php:543 post-expirator.php:562
110
  msgid "Post Expirator Options"
111
  msgstr ""
112
 
113
+ #: post-expirator.php:581
114
  msgid "Saved Options!"
115
  msgstr ""
116
 
117
+ #: post-expirator.php:612
118
  msgid ""
119
  "The post expirator plugin sets a custom meta value, and then optionally "
120
  "allows you to select if you want the post changed to a draft status or "
121
  "deleted when it expires."
122
  msgstr ""
123
 
124
+ #: post-expirator.php:615
125
  msgid "Valid [postexpirator] attributes:"
126
  msgstr ""
127
 
128
+ #: post-expirator.php:617
129
  msgid "type - defaults to full - valid options are full,date,time"
130
  msgstr ""
131
 
132
+ #: post-expirator.php:618
133
  msgid ""
134
  "dateformat - format set here will override the value set on the settings page"
135
  msgstr ""
136
 
137
+ #: post-expirator.php:619
138
  msgid ""
139
  "timeformat - format set here will override the value set on the settings page"
140
  msgstr ""
141
 
142
+ #: post-expirator.php:626
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
143
  msgid "Date Format:"
144
  msgstr ""
145
 
146
+ #: post-expirator.php:630
147
  msgid ""
148
  "The default format to use when displaying the expiration date within a post "
149
  "using the [postexpirator] shortcode or within the footer. For information "
151
  "function.date.php\" target=\"_blank\">PHP Date Function</a>."
152
  msgstr ""
153
 
154
+ #: post-expirator.php:634
155
  msgid "Time Format:"
156
  msgstr ""
157
 
158
+ #: post-expirator.php:638
159
  msgid ""
160
  "The default format to use when displaying the expiration time within a post "
161
  "using the [postexpirator] shortcode or within the footer. For information "
163
  "function.date.php\" target=\"_blank\">PHP Date Function</a>."
164
  msgstr ""
165
 
166
+ #: post-expirator.php:642
 
 
 
 
 
 
 
 
167
  msgid "Default Date/Time Duration:"
168
  msgstr ""
169
 
170
+ #: post-expirator.php:645
171
  msgid "None"
172
  msgstr ""
173
 
174
+ #: post-expirator.php:646
175
  msgid "Custom"
176
  msgstr ""
177
 
178
+ #: post-expirator.php:647
179
  msgid "Post/Page Publish Time"
180
  msgstr ""
181
 
182
+ #: post-expirator.php:650
183
  msgid ""
184
  "Set the default expiration date to be used when creating new posts and "
185
  "pages. Defaults to none."
186
  msgstr ""
187
 
188
+ #: post-expirator.php:655
189
  msgid ""
190
  "Set the custom value to use for the default expiration date. For "
191
  "information on formatting, see <a href=\"http://php.net/manual/en/function."
192
  "strtotime.php\">PHP strtotime function</a>."
193
  msgstr ""
194
 
195
+ #: post-expirator.php:660
196
  msgid "Category Expiration"
197
  msgstr ""
198
 
199
+ #: post-expirator.php:663
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
200
  msgid "Default Expiration Category"
201
  msgstr ""
202
 
203
+ #: post-expirator.php:674
204
  msgid "Set's the default expiration category for the post."
205
  msgstr ""
206
 
207
+ #: post-expirator.php:679
208
  msgid "Post Footer Display"
209
  msgstr ""
210
 
211
+ #: post-expirator.php:680
212
  msgid ""
213
  "Enabling this below will display the expiration date automatically at the "
214
  "end of any post which is set to expire."
215
  msgstr ""
216
 
217
+ #: post-expirator.php:683
218
  msgid "Show in post footer?"
219
  msgstr ""
220
 
221
+ #: post-expirator.php:685 post-expirator.php:772
222
+ msgid "Enabled"
223
+ msgstr ""
224
+
225
+ #: post-expirator.php:686 post-expirator.php:773
226
+ msgid "Disabled"
227
+ msgstr ""
228
+
229
+ #: post-expirator.php:688
230
  msgid ""
231
  "This will enable or disable displaying the post expiration date in the post "
232
  "footer."
233
  msgstr ""
234
 
235
+ #: post-expirator.php:692
236
  msgid "Footer Contents:"
237
  msgstr ""
238
 
239
+ #: post-expirator.php:696
240
  msgid ""
241
  "Enter the text you would like to appear at the bottom of every post that "
242
  "will expire. The following placeholders will be replaced with the post "
243
  "expiration date in the following format:"
244
  msgstr ""
245
 
246
+ #: post-expirator.php:705
247
  msgid "Footer Style:"
248
  msgstr ""
249
 
250
+ #: post-expirator.php:708
251
  msgid "This post will expire on"
252
  msgstr ""
253
 
254
+ #: post-expirator.php:710
255
  msgid "The inline css which will be used to style the footer text."
256
  msgstr ""
257
 
258
+ #: post-expirator.php:715 post-expirator.php:783
259
  msgid "Save Changes"
260
  msgstr ""
261
 
262
+ #: post-expirator.php:743
263
+ msgid "Default Expiration Values"
 
 
 
 
264
  msgstr ""
265
 
266
+ #: post-expirator.php:745
267
+ msgid ""
268
+ "Use the values below to set the default actions/values to be used for each "
269
+ "for the corresponding post types. These values can all be overwridden when "
270
+ "creating/editing the post/page."
 
 
 
 
 
 
 
 
 
271
  msgstr ""
272
 
273
+ #: post-expirator.php:761
274
+ msgid "How to expire:"
275
  msgstr ""
276
 
277
+ #: post-expirator.php:766
278
+ msgid "Select the default expire action for the post type."
279
  msgstr ""
280
 
281
+ #: post-expirator.php:770
282
+ msgid "Auto-Enable?"
283
  msgstr ""
284
 
285
+ #: post-expirator.php:775
286
+ msgid "Select whether the post expirator is enabled for all new posts."
287
  msgstr ""
288
 
289
+ #: post-expirator.php:792
290
+ msgid "Debugging Disabled"
291
  msgstr ""
292
 
293
+ #: post-expirator.php:795
294
+ msgid "Debugging Enabled"
295
  msgstr ""
296
 
297
+ #: post-expirator.php:800
298
+ msgid "Debugging Table Emptied"
299
  msgstr ""
300
 
301
+ #: post-expirator.php:806
302
  msgid "Advanced Diagnostics"
303
  msgstr ""
304
 
305
+ #: post-expirator.php:809
306
  msgid "Post Expirator Debug Logging:"
307
  msgstr ""
308
 
309
+ #: post-expirator.php:813
310
  msgid "Status: Enabled"
311
  msgstr ""
312
 
313
+ #: post-expirator.php:814
314
  msgid "Disable Debugging"
315
  msgstr ""
316
 
317
+ #: post-expirator.php:816
318
  msgid "Status: Disabled"
319
  msgstr ""
320
 
321
+ #: post-expirator.php:817
322
  msgid "Enable Debugging"
323
  msgstr ""
324
 
325
+ #: post-expirator.php:825
326
  msgid "Purge Debug Log:"
327
  msgstr ""
328
 
329
+ #: post-expirator.php:827
330
  msgid "Purge Debug Log"
331
  msgstr ""
332
 
333
+ #: post-expirator.php:831
334
  msgid "Current Cron Schedule:"
335
  msgstr ""
336
 
337
+ #: post-expirator.php:833
338
  msgid ""
339
  "The below table will show all currently scheduled cron events with the next "
340
  "run time."
341
  msgstr ""
342
 
343
+ #: post-expirator.php:837
 
 
 
 
 
 
 
 
 
 
 
344
  msgid "Date"
345
  msgstr ""
346
 
347
+ #: post-expirator.php:838
348
  msgid "Event"
349
  msgstr ""
350
 
351
+ #: post-expirator.php:839
352
+ msgid "Arguments / Schedule"
353
  msgstr ""
354
 
355
+ #: post-expirator.php:864
356
+ msgid "Single Event"
357
  msgstr ""
358
 
359
+ #: post-expirator.php:885
360
  msgid ""
361
  "Below is a dump of the debugging table, this should be useful for "
362
  "troubleshooting."
363
  msgstr ""
364
 
365
+ #: post-expirator.php:1146
366
+ msgid "Draft"
367
+ msgstr ""
368
+
369
+ #: post-expirator.php:1147
370
+ msgid "Delete"
371
+ msgstr ""
372
+
373
+ #: post-expirator.php:1148
374
+ msgid "Private"
375
+ msgstr ""
376
+
377
+ #: post-expirator.php:1149
378
+ msgid "Category: Replace"
379
+ msgstr ""
380
+
381
+ #: post-expirator.php:1150
382
+ msgid "Category: Add"
383
+ msgstr ""
384
+
385
+ #: post-expirator.php:1151
386
+ msgid "Category: Remove"
387
+ msgstr ""
388
+
389
  #. Plugin URI of the plugin/theme
390
  msgid "http://wordpress.org/extend/plugins/post-expirator/"
391
  msgstr ""
post-expirator-debug.php CHANGED
@@ -28,7 +28,7 @@ class postExpiratorDebug {
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) {
@@ -37,13 +37,12 @@ class postExpiratorDebug {
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;
@@ -60,6 +59,6 @@ class postExpiratorDebug {
60
 
61
  public function purge() {
62
  global $wpdb;
63
- $wpdb->query($wpdb->prepare("TRUNCATE TABLE {$this->debug_table}"));
64
  }
65
  }
28
 
29
  public function removeDBTable() {
30
  global $wpdb;
31
+ $wpdb->query('DROP TABLE IF EXISTS '.$this->debug_table);
32
  }
33
 
34
  public function save($data) {
37
  global $current_blog;
38
  $blog = $current_blog->blog_id;
39
  } else $blog = 0;
40
+ $wpdb->query($wpdb->prepare('INSERT INTO '.$this->debug_table.' (`timestamp`,`message`,`blog`) VALUES (FROM_UNIXTIME(%d),%s,%s)',time(),$data['message'],$blog));
 
41
  }
42
 
43
  public function getTable() {
44
  global $wpdb;
45
+ $results = $wpdb->get_results("SELECT * FROM {$this->debug_table} ORDER BY `id` DESC");
46
  if (empty($results)) {
47
  print '<p>'.__('Debugging table is currently empty.','post-expirator').'</p>';
48
  return;
59
 
60
  public function purge() {
61
  global $wpdb;
62
+ $wpdb->query("TRUNCATE TABLE {$this->debug_table}");
63
  }
64
  }
post-expirator.php CHANGED
@@ -4,7 +4,7 @@ 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.6.2
8
  Author URI: http://postexpirator.tuxdocs.net/
9
  Translation: Thierry (http://palijn.info)
10
  Text Domain: post-expirator
@@ -17,46 +17,16 @@ function postExpirator_init() {
17
  }
18
  add_action('plugins_loaded', 'postExpirator_init');
19
 
20
-
21
  // Default Values
22
- define('POSTEXPIRATOR_VERSION','1.6.2');
23
  define('POSTEXPIRATOR_DATEFORMAT',__('l F jS, Y','post-expirator'));
24
  define('POSTEXPIRATOR_TIMEFORMAT',__('g:ia','post-expirator'));
25
  define('POSTEXPIRATOR_FOOTERCONTENTS',__('Post expires at EXPIRATIONTIME on EXPIRATIONDATE','post-expirator'));
26
  define('POSTEXPIRATOR_FOOTERSTYLE','font-style: italic;');
27
- define('POSTEXPIRATOR_POSTSTATUS','Draft');
28
- define('POSTEXPIRATOR_PAGESTATUS','Draft');
29
  define('POSTEXPIRATOR_FOOTERDISPLAY','0');
30
- define('POSTEXPIRATOR_CATEGORY','1');
31
- define('POSTEXPIRATOR_AUTOENABLE','0');
32
- define('POSTEXPIRATOR_DEBUG','0');
33
- define('POSTEXPIRATOR_CRONSCHEDULE','postexpiratorminute');
34
  define('POSTEXPIRATOR_EXPIREDEFAULT','null');
35
 
36
- // Detect WPMU/MultiSite
37
- function postExpirator_is_wpmu() {
38
- return is_multisite();
39
- }
40
-
41
- // Timezone Setup
42
- function postExpiratorTimezoneSetup() {
43
- if ( !$timezone_string = get_option( 'timezone_string' ) ) {
44
- return false;
45
- }
46
-
47
- @date_default_timezone_set($timezone_string);
48
- }
49
-
50
- // Add cron interval of 60 seconds
51
- function postExpiratorAddCronMinutes($array) {
52
- $array['postexpiratorminute'] = array(
53
- 'interval' => 60,
54
- 'display' => __('Once a Minute','post-expirator')
55
- );
56
- return $array;
57
- }
58
- add_filter('cron_schedules','postExpiratorAddCronMinutes');
59
-
60
  function postExpirator_plugin_action_links($links, $file) {
61
  $this_plugin = basename(plugin_dir_url(__FILE__)) . '/post-expirator.php';
62
  if($file == $this_plugin) {
@@ -66,99 +36,19 @@ function postExpirator_plugin_action_links($links, $file) {
66
  }
67
  add_filter('plugin_action_links', 'postExpirator_plugin_action_links', 10, 2);
68
 
69
-
70
  /**
71
  * Add admin notice hook if cron schedule needs to be reset
72
  */
73
  function postExpirationAdminNotice() {
74
- if (isset($_POST['reset-cron-event']) || (isset($_GET['reset']) && $_GET['reset'] == 'cron')) {
75
- postExpiratorResetCronEvent();
76
- echo "<div id='message' class='updated fade'><p>"; _e('Cron Events Reset!','post-expirator'); echo "</p></div>";
77
- }
78
- if (postExpiratorCronEventStatus() === false) {
79
- echo '<div class="error fade post-expirator-adminnotice"><p><strong>';
80
- _e('Post Expirator cron events need to be reset. ','post-expirator');
81
- echo('<a href="'.admin_url('options-general.php?page=post-expirator.php&tab=diagnostics&reset=cron').'" style="color: blue;">');
82
- _e('Click here to reset','post-expirator');
83
- echo('</a></strong></p></div>');
84
- }
85
  }
86
  add_action('admin_notices','postExpirationAdminNotice');
87
 
88
- /**
89
- * Function that does the actual deleting - called by wp_cron
90
- */
91
- function expirationdate_delete_expired_posts() {
92
- global $wpdb;
93
- postExpiratorTimezoneSetup();
94
- $time_delete = time();
95
- $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 . '"';
96
- $result = $wpdb->get_results($sql);
97
-
98
- $debugEnabled = postExpiratorDebugEnabled();
99
- if ($debugEnabled) {
100
- // Load Debug Class
101
- require_once(plugin_dir_path(__FILE__).'post-expirator-debug.php');
102
-
103
- $debug = new postExpiratorDebug();
104
- $startts = time();
105
- $debug->save(array('timestamp' => $startts,'message' => 'START'));
106
- $debug->save(array('timestamp' => $startts,'message' => 'SQL EXPIRE: '.$sql));
107
- }
108
-
109
- $processsql = 'select post_id from '.$wpdb->postmeta.' where meta_key = "_expiration-date-processed" AND meta_value = "1"';
110
- if ($debugEnabled) $debug->save(array('timestamp' => time(),'message' => 'SQL PROCESSED: '.$processsql));
111
- $processresult = $wpdb->get_col($processsql);
112
- if ($debugEnabled) $debug->save(array('timestamp' => time(),'message' => 'PROCESSED POST IDS: '.print_r($processresult,true)));
113
-
114
- if (!empty($result)) foreach ($result as $a) {
115
- // Check to see if already proccessed
116
- if (in_array($a->post_id,$processresult)) continue;
117
-
118
- $post_result = $wpdb->get_var('select post_type from ' . $wpdb->posts .' where ID = '. $a->post_id);
119
- if ($post_result == 'post') {
120
- $expiredStatus = strtolower(get_option('expirationdateExpiredPostStatus',POSTEXPIRATOR_POSTSTATUS));
121
- } else if ($post_result == 'page') {
122
- $expiredStatus = strtolower(get_option('expirationdateExpiredPageStatus',POSTEXPIRATOR_PAGESTATUS));
123
- } else {
124
- $expiredStatus = 'draft';
125
- }
126
-
127
- // Check to see if expiration category is enabled and set - otherwise, proceed as normal
128
- $catEnabled = get_option('expirationdateCategory');
129
- $cat = get_post_meta($a->post_id,'_expiration-date-category');
130
- if (($catEnabled === false || $catEnabled == 1) && (isset($cat) && !empty($cat[0]))) {
131
- wp_update_post(array('ID' => $a->post_id, 'post_category' => $cat[0]));
132
- if ($debugEnabled) $debug->save(array('timestamp' => time(),'message' => 'EXPIRE: ID:'.$a->post_id.' CATEGORY:'.print_r($cat[0],true)));
133
- } else {
134
- if ($expiredStatus == 'delete') {
135
- wp_delete_post($a->post_id);
136
- if ($debugEnabled) $debug->save(array('timestamp' => time(),'message' => 'EXPIRE: ID:'.$a->post_id.' DELETE'));
137
- } else {
138
- wp_update_post(array('ID' => $a->post_id, 'post_status' => 'draft'));
139
- delete_post_meta($a->post_id, 'expiration-date');
140
- update_post_meta($a->post_id, 'expiration-date', $a->meta_value);
141
- if ($debugEnabled) $debug->save(array('timestamp' => time(),'message' => 'EXPIRE: ID:'.$a->post_id.' DRAFT'));
142
- }
143
- }
144
-
145
- // Mark as Processed
146
- update_post_meta($a->post_id, '_expiration-date-processed', 1);
147
- if ($debugEnabled) $debug->save(array('timestamp' => time(),'message' => 'PROCESSED: ID:'.$a->post_id));
148
- }
149
- if ($debugEnabled) $debug->save(array('timestamp' => time(),'message' => 'END - DURATION: '.(time() - $startts)));
150
- }
151
- if (postExpirator_is_wpmu()) {
152
- global $current_blog;
153
- add_action ('expirationdate_delete_'.$current_blog->blog_id, 'expirationdate_delete_expired_posts');
154
- } else
155
- add_action ('expirationdate_delete', 'expirationdate_delete_expired_posts');
156
-
157
  /**
158
  * adds an 'Expires' column to the post display table.
159
  */
160
  function expirationdate_add_column ($columns) {
161
- $columns['expirationdate'] = __('Expires','post-expirator').'<br/><span class="post-expirator-addcolumn">(YYYY/MM/DD HH:MM)</span>';
162
  return $columns;
163
  }
164
  add_filter ('manage_posts_columns', 'expirationdate_add_column');
@@ -168,13 +58,11 @@ add_filter ('manage_pages_columns', 'expirationdate_add_column');
168
  * fills the 'Expires' column of the post display table.
169
  */
170
  function expirationdate_show_value ($column_name) {
171
- global $wpdb, $post;
172
  $id = $post->ID;
173
  if ($column_name === 'expirationdate') {
174
- postExpiratorTimezoneSetup();
175
- $query = "SELECT meta_value FROM $wpdb->postmeta WHERE meta_key = \"expiration-date\" AND post_id=$id";
176
- $ed = $wpdb->get_var($query);
177
- echo ($ed ? date('Y/m/d H:i',$ed) : __("Never",'post-expirator'));
178
  }
179
  }
180
  add_action ('manage_posts_custom_column', 'expirationdate_show_value');
@@ -197,48 +85,64 @@ add_action ('add_meta_boxes','expirationdate_meta_custom');
197
  */
198
  function expirationdate_meta_box($post) {
199
  // Get default month
200
- postExpiratorTimezoneSetup();
201
- $expirationdatets = get_post_meta($post->ID,'expiration-date',true);
202
  $default = '';
 
203
  if (empty($expirationdatets)) {
 
 
204
  $default = get_option('expirationdateDefaultDate',POSTEXPIRATOR_EXPIREDEFAULT);
205
  if ($default == 'null') {
206
- $defaultmonth = date('F');
207
- $defaultday = date('d');
208
- $defaulthour = date('H');
209
- $defaultyear = date('Y');
210
- $defaultminute = date('i');
211
 
212
  } elseif ($default == 'custom') {
213
  $custom = get_option('expirationdateDefaultDateCustom');
214
  if ($custom === false) $ts = time();
215
- else $ts = strtotime($custom);
216
- $defaultmonth = date('F',$ts);
217
- $defaultday = date('d',$ts);
218
- $defaulthour = date('H',$ts);
219
- $defaultyear = date('Y',$ts);
220
- $defaultminute = date('i',$ts);
221
-
 
 
 
 
 
 
222
  }
223
 
224
  $enabled = '';
225
  $disabled = ' disabled="disabled"';
226
  $categories = get_option('expirationdateCategoryDefaults');
227
 
228
- $expiredauto = get_option('expirationdateAutoEnabled',POSTEXPIRATOR_AUTOENABLE);
229
- if ($expiredauto === true || $expiredauto == 1) {
 
 
 
230
  $enabled = ' checked="checked"';
231
  $disabled='';
232
  }
233
  } else {
234
- $defaultmonth = date('F',$expirationdatets);
235
- $defaultday = date('d',$expirationdatets);
236
- $defaultyear = date('Y',$expirationdatets);
237
- $defaulthour = date('H',$expirationdatets);
238
- $defaultminute = date('i',$expirationdatets);
239
- $enabled = ' checked="checked"';
240
- $disabled = '';
241
- $categories = get_post_meta($post->ID,'_expiration-date-category',true);
 
 
 
 
242
  }
243
 
244
  $rv = array();
@@ -271,11 +175,11 @@ function expirationdate_meta_box($post) {
271
  $rv[] = '<select name="expirationdate_month" id="expirationdate_month"'.$disabled.'>';
272
 
273
  for($i = 1; $i <= 12; $i++) {
274
- if ($defaultmonth == date('F',mktime(0, 0, 0, $i, 1, date("Y"))))
275
  $selected = ' selected="selected"';
276
  else
277
  $selected = '';
278
- $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>';
279
  }
280
 
281
  $rv[] = '</select>';
@@ -283,18 +187,18 @@ function expirationdate_meta_box($post) {
283
  $rv[] = '<input type="text" id="expirationdate_day" name="expirationdate_day" value="'.$defaultday.'" size="2"'.$disabled.' />,';
284
  $rv[] = '</td></tr><tr>';
285
  $rv[] = '<th style="text-align: left;"></th>';
286
- $rv[] = '<th style="text-align: left;">'.__('Hour','post-expirator').'('.date('T',mktime(0, 0, 0, $i, 1, date("Y"))).')</th>';
287
  $rv[] = '<th style="text-align: left;">'.__('Minute','post-expirator').'</th>';
288
  $rv[] = '</tr><tr>';
289
  $rv[] = '<td>@</td><td>';
290
  $rv[] = '<select name="expirationdate_hour" id="expirationdate_hour"'.$disabled.'>';
291
 
292
  for($i = 1; $i <= 24; $i++) {
293
- if ($defaulthour == date('H',mktime($i, 0, 0, date("n"), date("j"), date("Y"))))
294
  $selected = ' selected="selected"';
295
  else
296
  $selected = '';
297
- $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>';
298
  }
299
 
300
  $rv[] = '</select></td><td>';
@@ -304,9 +208,17 @@ function expirationdate_meta_box($post) {
304
  $rv[] = '<input type="hidden" name="expirationdate_formcheck" value="true" />';
305
  echo implode("\n",$rv);
306
 
307
- $catEnabled = get_option('expirationdateCategory');
308
- if (($post->post_type != 'page') && ($catEnabled === false || $catEnabled == 1)) {
309
- $args = array('hide_empty' => 0,'orderby' => 'name','hierarchical' => 0);
 
 
 
 
 
 
 
 
310
  echo '<br/>'.__('Expiration Categories','post-expirator').':<br/>';
311
 
312
  echo '<div class="wp-tab-panel" id="post-expirator-cat-list">';
@@ -316,8 +228,7 @@ function expirationdate_meta_box($post) {
316
  wp_terms_checklist(0, array( 'taxonomy' => 'category', 'walker' => $walker, 'selected_cats' => $categories, 'checked_ontop' => false ) );
317
  echo '</ul>';
318
  echo '</div>';
319
-
320
- echo '<p class="howto">'.__('Setting an expiration category will change the category at expiration time, and override the default post action','post-expirator').'.</p>';
321
  }
322
  echo '<div id="expirationdate_ajax_result"></div>';
323
  }
@@ -336,12 +247,13 @@ function expirationdate_ajax_add_meta(expireenable) {
336
  if (expire.checked == true) {
337
  var enable = 'true';
338
  if (document.getElementById('expirationdate_month')) {
339
- document.getElementById('expirationdate_month').disabled = false;
340
  document.getElementById('expirationdate_day').disabled = false;
341
  document.getElementById('expirationdate_year').disabled = false;
342
  document.getElementById('expirationdate_hour').disabled = false;
343
  document.getElementById('expirationdate_minute').disabled = false;
344
  }
 
345
  var cats = document.getElementsByName('expirationdate_category[]');
346
  var max = cats.length;
347
  for (var i=0; i<max; i++) {
@@ -355,6 +267,7 @@ function expirationdate_ajax_add_meta(expireenable) {
355
  document.getElementById('expirationdate_hour').disabled = true;
356
  document.getElementById('expirationdate_minute').disabled = true;
357
  }
 
358
  var cats = document.getElementsByName('expirationdate_category[]');
359
  var max = cats.length;
360
  for (var i=0; i<max; i++) {
@@ -365,6 +278,17 @@ function expirationdate_ajax_add_meta(expireenable) {
365
 
366
  return true;
367
  }
 
 
 
 
 
 
 
 
 
 
 
368
  function expirationdate_toggle_defaultdate(id) {
369
  if (id.options[id.selectedIndex].value == 'custom') {
370
  jQuery('#expired-custom-container').show();
@@ -383,7 +307,7 @@ add_action('admin_head', 'expirationdate_js_admin_header' );
383
  * Get correct URL (HTTP or HTTPS)
384
  */
385
  function expirationdate_get_blog_url() {
386
- if (postExpirator_is_wpmu())
387
  echo network_home_url('/');
388
  else
389
  echo home_url('/');
@@ -393,47 +317,209 @@ function expirationdate_get_blog_url() {
393
  * Called when post is saved - stores expiration-date meta value
394
  */
395
  function expirationdate_update_post_meta($id) {
 
 
 
 
 
 
 
 
 
396
  if (!isset($_POST['expirationdate_formcheck']))
397
- return false;
398
 
399
- $default = get_option('expirationdateDefaultDate',POSTEXPIRATOR_EXPIREDEFAULT);
400
- if ($default == 'publish') {
401
- $month = $_POST['mm'];
402
- $day = $_POST['jj'];
403
- $year = $_POST['aa'];
404
- $hour = $_POST['hh'];
405
- $minute = $_POST['mn'];
406
- } else {
407
- $month = $_POST['expirationdate_month'];
408
- $day = $_POST['expirationdate_day'];
409
- $year = $_POST['expirationdate_year'];
410
- $hour = $_POST['expirationdate_hour'];
411
- $minute = $_POST['expirationdate_minute'];
412
- }
413
- $category = isset($_POST['expirationdate_category']) ? $_POST['expirationdate_category'] : 0;
414
  if (isset($_POST['enable-expirationdate'])) {
415
- postExpiratorTimezoneSetup();
416
- // Format Date
417
- $ts = mktime($hour,$minute,0,$month,$day,$year);
418
-
419
- // Update Post Meta
420
- delete_post_meta($id, '_expiration-date-category');
421
- delete_post_meta($id, 'expiration-date');
422
- update_post_meta($id, 'expiration-date', $ts);
423
-
424
- $catEnabled = get_option('expirationdateCategory');
425
- if ((isset($category) && !empty($category)) && ($catEnabled === false || $catEnabled == 1)) {
426
- if (!empty($category)) update_post_meta($id, '_expiration-date-category', $category);
 
427
  }
428
- update_post_meta($id, '_expiration-date-processed', 0);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
429
  } else {
430
- delete_post_meta($id, 'expiration-date');
431
- delete_post_meta($id, '_expiration-date-category');
432
- delete_post_meta($id, '_expiration-date-processed');
433
  }
434
  }
435
  add_action('save_post','expirationdate_update_post_meta');
436
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
437
  /**
438
  * Build the menu for the options page
439
  */
@@ -441,6 +527,7 @@ function postExpiratorMenuTabs($tab) {
441
  echo '<p>';
442
  if (empty($tab)) $tab = 'general';
443
  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> | ';
 
444
  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>';
445
  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>';
446
  echo '</p><hr/>';
@@ -458,6 +545,8 @@ function postExpiratorMenu() {
458
  postExpiratorMenuTabs($tab);
459
  if (empty($tab) || $tab == 'general') {
460
  postExpiratorMenuGeneral();
 
 
461
  } elseif ($tab == 'diagnostics') {
462
  postExpiratorMenuDiagnostics();
463
  } elseif ($tab == 'viewdebug') {
@@ -470,7 +559,7 @@ function postExpiratorMenu() {
470
  * Hook's to add plugin page menu
471
  */
472
  function postExpiratorPluginMenu() {
473
- add_submenu_page('options-general.php',__('Post Expirator Options','post-expirator'),__('Post Expirator','post-expirator'),'edit_plugins',basename(__FILE__),'postExpiratorMenu');
474
  }
475
  add_action('admin_menu', 'postExpiratorPluginMenu');
476
 
@@ -480,37 +569,25 @@ add_action('admin_menu', 'postExpiratorPluginMenu');
480
  function postExpiratorMenuGeneral() {
481
 
482
  if (isset($_POST['expirationdateSave']) && $_POST['expirationdateSave']) {
483
- update_option('expirationdateExpiredPostStatus',$_POST['expired-post-status']);
484
- update_option('expirationdateExpiredPageStatus',$_POST['expired-page-status']);
485
  update_option('expirationdateDefaultDateFormat',$_POST['expired-default-date-format']);
486
  update_option('expirationdateDefaultTimeFormat',$_POST['expired-default-time-format']);
487
  update_option('expirationdateDisplayFooter',$_POST['expired-display-footer']);
488
  update_option('expirationdateFooterContents',$_POST['expired-footer-contents']);
489
  update_option('expirationdateFooterStyle',$_POST['expired-footer-style']);
490
- update_option('expirationdateCategory',$_POST['expired-category']);
491
- update_option('expirationdateCategoryDefaults',$_POST['expirationdate_category']);
492
- update_option('expirationdateCronSchedule',$_POST['expired-default-cron-schedule']);
493
  update_option('expirationdateDefaultDate',$_POST['expired-default-expiration-date']);
494
- update_option('expirationdateAutoEnabled',$_POST['expired-auto-enable']);
495
  if ($_POST['expired-custom-expiration-date']) update_option('expirationdateDefaultDateCustom',$_POST['expired-custom-expiration-date']);
496
- postExpiratorResetCronEvent();
497
  echo "<div id='message' class='updated fade'><p>";
498
  _e('Saved Options!','post-expirator');
499
  echo "</p></div>";
500
  }
501
- postExpiratorTimezoneSetup();
502
 
503
  // Get Option
504
- $expirationdateExpiredPostStatus = get_option('expirationdateExpiredPostStatus',POSTEXPIRATOR_POSTSTATUS);
505
- $expirationdateExpiredPageStatus = get_option('expirationdateExpiredPageStatus',POSTEXPIRATOR_PAGESTATUS);
506
  $expirationdateDefaultDateFormat = get_option('expirationdateDefaultDateFormat',POSTEXPIRATOR_DATEFORMAT);
507
  $expirationdateDefaultTimeFormat = get_option('expirationdateDefaultTimeFormat',POSTEXPIRATOR_TIMEFORMAT);
508
- $expiredcategory = get_option('expirationdateCategory',POSTEXPIRATOR_CATEGORY);
509
- $expiredauto = get_option('expirationdateAutoEnabled',POSTEXPIRATOR_AUTOENABLE);
510
  $expireddisplayfooter = get_option('expirationdateDisplayFooter',POSTEXPIRATOR_FOOTERDISPLAY);
511
  $expirationdateFooterContents = get_option('expirationdateFooterContents',POSTEXPIRATOR_FOOTERCONTENTS);
512
  $expirationdateFooterStyle = get_option('expirationdateFooterStyle',POSTEXPIRATOR_FOOTERSTYLE);
513
- $expirationdateCronSchedule = get_option('expirationdateCronSchedule',POSTEXPIRATOR_CRONSCHEDULE);
514
  $expirationdateDefaultDate = get_option('expirationdateDefaultDate',POSTEXPIRATOR_EXPIREDEFAULT);
515
  $expirationdateDefaultDateCustom = get_option('expirationdateDefaultDateCustom');
516
 
@@ -530,13 +607,6 @@ function postExpiratorMenuGeneral() {
530
  else if ($expiredcategory == 1)
531
  $expiredcategoryenabled = 'checked="checked"';
532
 
533
- $expiredautoenabled = '';
534
- $expiredautodisabled = '';
535
- if ($expiredauto == 0)
536
- $expiredautodisabled = 'checked="checked"';
537
- else if ($expiredauto == 1)
538
- $expiredautoenabled= 'checked="checked"';
539
-
540
  ?>
541
  <p>
542
  <?php _e('The post expirator plugin sets a custom meta value, and then optionally allows you to select if you want the post changed to a draft status or deleted when it expires.','post-expirator'); ?>
@@ -552,37 +622,6 @@ function postExpiratorMenuGeneral() {
552
  <form method="post" id="expirationdate_save_options">
553
  <h3><?php _e('Defaults','post-expirator'); ?></h3>
554
  <table class="form-table">
555
- <tr valign-"top">
556
- <th scope="row"><label for="expired-post-status"><?php _e('Set Post To:','post-expirator'); ?></label></th>
557
- <td>
558
- <select name="expired-post-status" id="expired-post-status">
559
- <option <?php if ($expirationdateExpiredPostStatus == 'Draft'){ echo 'selected="selected"';} ?> value="Draft"><?php _e('Draft','post-expirator');?></option>
560
- <option <?php if ($expirationdateExpiredPostStatus == 'Delete'){ echo 'selected="selected"';} ?> value="Delete"><?php _e('Delete','post-expirator');?></option>
561
- </select>
562
- <br/>
563
- <?php _e('Select whether the post should be deleted or changed to a draft at expiration time.','post-expirator');?>
564
- </td>
565
- </tr>
566
- <tr valign-"top">
567
- <th scope="row"><label for="expired-page-status"><?php _e('Set Page To:','post-expirator');?></label></th>
568
- <td>
569
- <select name="expired-page-status" id="expired-page-status">
570
- <option<?php if ($expirationdateExpiredPageStatus == 'Draft'){ echo ' selected="selected"';}?> value="Draft"><?php _e('Draft','post-expirator');?></option>
571
- <option<?php if ($expirationdateExpiredPageStatus == 'Delete'){ echo ' selected="selected"';}?> value="Delete"><?php _e('Delete','post-expirator');?></option>
572
- </select>
573
- <br/>
574
- <?php _e('Select whether the page should be deleted or changed to a draft at expiration time.','post-expirator');?>
575
- </td>
576
- </tr>
577
- <tr valign-"top">
578
- <th scope="row"><label for="expired-auto-enable"><?php _e('Auto-Enable Post Expirator:','post-expirator');?></label></th>
579
- <td>
580
- <input type="radio" name="expired-auto-enable" id="expired-auto-enable-true" value="1" <?php echo $expiredautoenabled ?>/> <label for="expired-auto-enable-true"><?php _e('Enabled','post-expirator');?></label>
581
- <input type="radio" name="expired-auto-enable" id="expired-auto-enable-false" value="0" <?php echo $expiredautodisabled ?>/> <label for="expired-auto-enable-false"><?php _e('Disabled','post-expirator');?></label>
582
- <br/>
583
- <?php _e('Select whether the post expirator is enabled for all new posts.','post-expirator');?>
584
- </td>
585
- </tr>
586
  <tr valign-"top">
587
  <th scope="row"><label for="expired-default-date-format"><?php _e('Date Format:','post-expirator');?></label></th>
588
  <td>
@@ -599,20 +638,6 @@ function postExpiratorMenuGeneral() {
599
  <?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'); ?>
600
  </td>
601
  </tr>
602
- <tr valign-"top">
603
- <th scope="row"><label for="expired-default-cron-schedule"><?php _e('Cron Schedule:','post-expirator');?></label></th>
604
- <td>
605
- <select name="expired-default-cron-schedule" id="expired-default-cron-schedule">
606
- <?php $schedules = wp_get_schedules();
607
- foreach ($schedules as $key=>$value) {
608
- $selected = ($key == $expirationdateCronSchedule) ? ' selected="selected"' : '';
609
- echo '<option value="'.$key.'"'.$selected.'>'.$value['display'].' ('.$key.') </option>';
610
- } ?>
611
- </select>
612
- <br/>
613
- <?php _e('By default set to "postexpiratorminute" which fires every minute.','post-expirator'); ?>
614
- </td>
615
- </tr>
616
  <tr valign-"top">
617
  <th scope="row"><label for="expired-default-expiration-date"><?php _e('Default Date/Time Duration:','post-expirator');?></label></th>
618
  <td>
@@ -634,15 +659,6 @@ function postExpiratorMenuGeneral() {
634
  </table>
635
  <h3><?php _e('Category Expiration','post-expirator');?></h3>
636
  <table class="form-table">
637
- <tr valign-"top">
638
- <th scope="row"><?php _e('Enable Post Expiration to Category?','post-expirator');?></th>
639
- <td>
640
- <input type="radio" name="expired-category" id="expired-category-true" value="1" <?php echo $expiredcategoryenabled ?>/> <label for="expired-category-true"><?php _e('Enabled','post-expirator');?></label>
641
- <input type="radio" name="expired-category" id="expired-category-false" value="0" <?php echo $expiredcategorydisabled ?>/> <label for="expired-category-false"><?php _e('Disabled','post-expirator');?></label>
642
- <br/>
643
- <?php _e('This will enable or disable the ability to expire a post to a category.','post-expirator');?>
644
- </td>
645
- </tr>
646
  <tr valign-"top">
647
  <th scope="row"><?php _e('Default Expiration Category','post-expirator');?>:</th>
648
  <td>
@@ -702,45 +718,72 @@ function postExpiratorMenuGeneral() {
702
  <?php
703
  }
704
 
705
- function postExpiratorCronEventStatus() {
706
- $names = array();
707
- // WPMU
708
- if (postExpirator_is_wpmu()) {
709
- global $current_blog;
710
- $name = 'expirationdate_delete_'.$current_blog->blog_id;
711
- } else {
712
- $name = 'expirationdate_delete';
713
- }
714
-
715
- $expirationdateCronSchedule = get_option('expirationdateCronSchedule',POSTEXPIRATOR_CRONSCHEDULE);
716
- if (wp_get_schedule($name) != $expirationdateCronSchedule) return false;
717
 
718
- return true;
719
- }
 
 
 
 
 
 
 
720
 
721
- function postExpiratorCronScheduleStatus() {
722
- $schedules = wp_get_schedules();
723
- if (isset($schedules['postexpiratorminute'])) {
724
- if ($schedules['postexpiratorminute']['interval'] == '60')
725
- return true;
726
  }
727
- return false;
728
- }
729
-
730
- /**
731
- * Reset all cron events for Post Expirator Plugin
732
- */
733
- function postExpiratorResetCronEvent() {
734
- wp_clear_scheduled_hook('expirationdate_delete');
735
- wp_clear_scheduled_hook('expirationdate_delete_');
736
 
737
- if (postExpirator_is_wpmu()) {
738
- global $current_blog;
739
- wp_clear_scheduled_hook('expirationdate_delete_'.$current_blog->blog_id);
740
- wp_schedule_event(current_time('timestamp'), get_option('expirationdateCronSchedule',POSTEXPIRATOR_CRONSCHEDULE), 'expirationdate_delete_'.$current_blog->blog_id);
741
- } else {
742
- wp_schedule_event(current_time('timestamp'), get_option('expirationdateCronSchedule',POSTEXPIRATOR_CRONSCHEDULE), 'expirationdate_delete');
743
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
744
  }
745
 
746
  function postExpiratorMenuDiagnostics() {
@@ -757,46 +800,16 @@ function postExpiratorMenuDiagnostics() {
757
  echo "<div id='message' class='updated fade'><p>"; _e('Debugging Table Emptied','post-expirator'); echo "</p></div>";
758
  }
759
 
760
- $status = postExpiratorCronEventStatus();
761
- if ($status) $cronstatus = '<span style="color:green">'.__('OK','post-expirator').'</span>';
762
- else $cronstatus = '<span style="color:red">'.__('RESET NEEDED','post-expirator').'</span>';
763
-
764
- $schedule = postExpiratorCronScheduleStatus();
765
- if ($schedule) $cronschedulestatus = '<span style="color:green">'.__('OK','post-expirator').'</span>';
766
- else $cronschedulestatus = '<span style="color:red">'.__('ERROR WITH FILTER','post-expirator').'</span>';
767
-
768
- $debug = postExpiratorDebugEnabled();
769
-
770
  ?>
771
  <form method="post" id="postExpiratorMenuUpgrade">
772
- <h3><?php _e('Cron Settings','post-expirator');?></h3>
773
- <table class="form-table">
774
- <tr valign-"top">
775
- <th scope="row"><label for="reset-cron-event"><?php _e('Reset Cron Event:','post-expirator');?></label></th>
776
- <td>
777
- <input type="submit" class="button" name="reset-cron-event" id="reset-cron-event" value="<?php _e('Reset','post-expirator');?>" />
778
- <?php _e('Status:','post-expirator');?> <?php echo $cronstatus; ?>
779
- <br/>
780
- <?php _e('Resets the cron event and removes any old or stray entries.','post-expirator');?>
781
- </td>
782
- </tr>
783
- <tr valign-"top">
784
- <th scope="row"><label for="reset-cron-schedule"><?php _e('Reset Cron Schedule:','post-expirator');?></label></th>
785
- <td>
786
- <?php _e('Status:','post-expirator');?> <?php echo $cronschedulestatus; ?>
787
- <br/>
788
- <?php _e('Displays the cron minute schedule status for post expirator.','post-expirator');?>
789
- </td>
790
- </tr>
791
- </table>
792
-
793
  <h3><?php _e('Advanced Diagnostics','post-expirator');?></h3>
794
  <table class="form-table">
795
  <tr valign-"top">
796
  <th scope="row"><label for="postexpirator-log"><?php _e('Post Expirator Debug Logging:','post-expirator');?></label></th>
797
  <td>
798
  <?php
799
- if ($debug) {
800
  echo __('Status: Enabled','post-expirator').'<br/>';
801
  echo '<input type="submit" class="button" name="debugging-disable" id="debugging-disable" value="'.__('Disable Debugging','post-expirator').'" />';
802
  } else {
@@ -818,19 +831,12 @@ function postExpiratorMenuDiagnostics() {
818
  <th scope="row"><label for="cron-schedule"><?php _e('Current Cron Schedule:','post-expirator');?></label></th>
819
  <td>
820
  <?php _e('The below table will show all currently scheduled cron events with the next run time.','post-expirator');?><br/>
821
- <?php
822
- if (postExpirator_is_wpmu())
823
- printf(__('There should be an event named expirationdate_delete_blogid (where the blogid is replaced with the numeric id of the blog) with a schedule of %s.','post-expirator'),'<em>'.get_option('expirationdateCronSchedule',POSTEXPIRATOR_CRONSCHEDULE).'</em>');
824
- else
825
- printf(__('There should be an event named expirationdate_delete with a schedule of %s.','post-expirator'),'<em>'.get_option('expirationdateCronSchedule',POSTEXPIRATOR_CRONSCHEDULE.'</em>'));
826
- ?><br/>
827
 
828
  <table>
829
  <tr>
830
- <th><?php _e('Date','post-expirator');?></th>
831
- <th><?php _e('Event','post-expirator');?></th>
832
- <th><?php _e('Schedule','post-expirator');?></th>
833
- <th><?php _e('Interval (seconds)','post-expirator');?></th>
834
  </tr>
835
  <?php
836
  $cron = _get_cron_array();
@@ -840,8 +846,28 @@ function postExpiratorMenuDiagnostics() {
840
  print '<td>'.date_i18n('r',$key).'</td>';
841
  print '<td>'.$eventkey.'</td>';
842
  $arrkey = array_keys($eventvalue);
843
- print '<td>'.$eventvalue[$arrkey[0]]['schedule'].'</td>';
844
- print '<td>'.$eventvalue[$arrkey[0]]['interval'].'</td>';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
845
  print '</tr>';
846
  }
847
  }
@@ -865,14 +891,14 @@ function postExpiratorMenuViewdebug() {
865
  function postexpirator_shortcode($atts) {
866
  global $post;
867
 
868
- $expirationdatets = get_post_meta($post->ID,'expiration-date',true);
869
  if (empty($expirationdatets))
870
  return false;
871
 
872
  extract(shortcode_atts(array(
873
  'dateformat' => get_option('expirationdateDefaultDateFormat',POSTEXPIRATOR_DATEFORMAT),
874
  'timeformat' => get_option('expirationdateDefaultTimeFormat',POSTEXPIRATOR_TIMEFORMAT),
875
- 'type' => full,
876
  'tz' => date('T')
877
  ), $atts));
878
 
@@ -893,8 +919,7 @@ function postexpirator_shortcode($atts) {
893
  else if ($type == 'time')
894
  $format = $timeformat;
895
 
896
- postExpiratorTimezoneSetup();
897
- return date("$format",$expirationdatets);
898
  }
899
  add_shortcode('postexpirator', 'postexpirator_shortcode');
900
 
@@ -906,7 +931,7 @@ function postexpirator_add_footer($text) {
906
  if ($displayFooter === false || $displayFooter == 0)
907
  return $text;
908
 
909
- $expirationdatets = get_post_meta($post->ID,'expiration-date',true);
910
  if (!is_numeric($expirationdatets))
911
  return $text;
912
 
@@ -915,16 +940,15 @@ function postexpirator_add_footer($text) {
915
  $expirationdateFooterContents = get_option('expirationdateFooterContents',POSTEXPIRATOR_FOOTERCONTENTS);
916
  $expirationdateFooterStyle = get_option('expirationdateFooterStyle',POSTEXPIRATOR_FOOTERSTYLE);
917
 
918
- postExpiratorTimezoneSetup();
919
  $search = array(
920
  'EXPIRATIONFULL',
921
  'EXPIRATIONDATE',
922
  'EXPIRATIONTIME'
923
  );
924
  $replace = array(
925
- date_i18n("$dateformat $timeformat",$expirationdatets),
926
- date_i18n("$dateformat",$expirationdatets),
927
- date_i18n("$timeformat",$expirationdatets)
928
  );
929
 
930
  $add_to_footer = '<p style="'.$expirationdateFooterStyle.'">'.str_replace($search,$replace,$expirationdateFooterContents).'</p>';
@@ -935,12 +959,19 @@ add_action('the_content','postexpirator_add_footer',0);
935
  /**
936
  * Check for Debug
937
  */
938
- function postExpiratorDebugEnabled() {
939
  $debug = get_option('expirationdateDebug');
940
- if ($debug == 1) return true;
941
- return false;
 
 
 
 
 
 
942
  }
943
 
 
944
  /**
945
  * Add Stylesheet
946
  */
@@ -959,21 +990,60 @@ add_action('admin_init','postexpirator_css');
959
  * Post Expirator Activation/Upgrade
960
  */
961
  function postexpirator_upgrade() {
 
962
  // Check for current version, if not exists, run activation
963
  $version = get_option('postexpiratorVersion');
964
  if ($version === false) { //not installed, run default activation
965
  postexpirator_activate();
966
  update_option('postexpiratorVersion',POSTEXPIRATOR_VERSION);
967
- } elseif ($version !== POSTEXPIRATOR_VERSION) {
968
- switch (POSTEXPIRATOR_VERSION) {
969
- case '1.6.1':
970
- update_option('postexpiratorVersion',POSTEXPIRATOR_VERSION);
971
- update_option('expirationdateDefaultDate',POSTEXPIRATOR_EXPIREDEFAULT);
972
- break;
973
- case '1.6.2':
974
- update_option('postexpiratorVersion',POSTEXPIRATOR_VERSION);
975
- update_option('expirationdateAutoEnabled',POSTEXPIRATOR_AUTOENABLE);
976
- break;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
977
  }
978
  }
979
  }
@@ -983,22 +1053,13 @@ add_action('admin_init','postexpirator_upgrade');
983
  * Called at plugin activation
984
  */
985
  function postexpirator_activate () {
986
- if (get_option('expirationdateExpiredPostStatus') === false) update_option('expirationdateExpiredPostStatus',POSTEXPIRATOR_POSTSTATUS);
987
- if (get_option('expirationdateExpiredPageStatus') === false) update_option('expirationdateExpiredPageStatus',POSTEXPIRATOR_PAGESTATUS);
988
  if (get_option('expirationdateDefaultDateFormat') === false) update_option('expirationdateDefaultDateFormat',POSTEXPIRATOR_DATEFORMAT);
989
  if (get_option('expirationdateDefaultTimeFormat') === false) update_option('expirationdateDefaultTimeFormat',POSTEXPIRATOR_TIMEFORMAT);
990
  if (get_option('expirationdateFooterContents') === false) update_option('expirationdateFooterContents',POSTEXPIRATOR_FOOTERCONTENTS);
991
  if (get_option('expirationdateFooterStyle') === false) update_option('expirationdateFooterStyle',POSTEXPIRATOR_FOOTERSTYLE);
992
  if (get_option('expirationdateDisplayFooter') === false) update_option('expirationdateDisplayFooter',POSTEXPIRATOR_FOOTERDISPLAY);
993
- if (get_option('expirationdateCategory') === false) update_option('expirationdateCategory',POSTEXPIRATOR_CATEGORY);
994
- if (get_option('expirationdateDebug') === false) update_option('expirationdateDebug',POSTEXPIRATOR_DEBUG);
995
  if (get_option('expirationdateDefaultDate') === false) update_option('expirationdateDefaultDate',POSTEXPIRATOR_EXPIREDEFAULT);
996
-
997
- if (postExpirator_is_wpmu()) {
998
- global $current_blog;
999
- wp_schedule_event(current_time('timestamp'), get_option('expirationdateCronSchedule',POSTEXPIRATOR_CRONSCHEDULE), 'expirationdate_delete_'.$current_blog->blog_id);
1000
- } else
1001
- wp_schedule_event(current_time('timestamp'), get_option('expirationdateCronSchedule',POSTEXPIRATOR_CRONSCHEDULE), 'expirationdate_delete');
1002
  }
1003
 
1004
  /**
@@ -1021,7 +1082,10 @@ function expirationdate_deactivate () {
1021
  delete_option('expirationdateDefaultDate');
1022
  delete_option('expirationdateDefaultDateCustom');
1023
  delete_option('expirationdateAutoEnabled');
1024
- if (postExpirator_is_wpmu())
 
 
 
1025
  wp_clear_scheduled_hook('expirationdate_delete_'.$current_blog->blog_id);
1026
  else
1027
  wp_clear_scheduled_hook('expirationdate_delete');
@@ -1058,11 +1122,50 @@ class Walker_PostExpirator_Category_Checklist extends Walker {
1058
 
1059
  $name = 'expirationdate_category';
1060
 
1061
- $class = in_array( $category->term_id, $popular_cats ) ? ' class="popular-category"' : '';
1062
- $output .= "\n<li id='{$taxonomy}-{$category->term_id}'$class>" . '<label class="selectit"><input value="' . $category->term_id . '" type="checkbox" name="'.$name.'[]" id="in-'.$taxonomy.'-' . $category->term_id . '"' . checked( in_array( $category->term_id, $selected_cats ), true, false ) . disabled( empty( $args['disabled'] ), false, false ) . ' '.$this->disabled.'/> ' . esc_html( apply_filters('the_category', $category->name )) . '</label>';
1063
  }
1064
 
1065
  function end_el(&$output, $category, $depth, $args) {
1066
  $output .= "</li>\n";
1067
  }
1068
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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: 2.0.0
8
  Author URI: http://postexpirator.tuxdocs.net/
9
  Translation: Thierry (http://palijn.info)
10
  Text Domain: post-expirator
17
  }
18
  add_action('plugins_loaded', 'postExpirator_init');
19
 
 
20
  // Default Values
21
+ define('POSTEXPIRATOR_VERSION','2.0.0-rc1');
22
  define('POSTEXPIRATOR_DATEFORMAT',__('l F jS, Y','post-expirator'));
23
  define('POSTEXPIRATOR_TIMEFORMAT',__('g:ia','post-expirator'));
24
  define('POSTEXPIRATOR_FOOTERCONTENTS',__('Post expires at EXPIRATIONTIME on EXPIRATIONDATE','post-expirator'));
25
  define('POSTEXPIRATOR_FOOTERSTYLE','font-style: italic;');
 
 
26
  define('POSTEXPIRATOR_FOOTERDISPLAY','0');
27
+ define('POSTEXPIRATOR_DEBUGDEFAULT','0');
 
 
 
28
  define('POSTEXPIRATOR_EXPIREDEFAULT','null');
29
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
30
  function postExpirator_plugin_action_links($links, $file) {
31
  $this_plugin = basename(plugin_dir_url(__FILE__)) . '/post-expirator.php';
32
  if($file == $this_plugin) {
36
  }
37
  add_filter('plugin_action_links', 'postExpirator_plugin_action_links', 10, 2);
38
 
 
39
  /**
40
  * Add admin notice hook if cron schedule needs to be reset
41
  */
42
  function postExpirationAdminNotice() {
43
+ // Currently not used
 
 
 
 
 
 
 
 
 
 
44
  }
45
  add_action('admin_notices','postExpirationAdminNotice');
46
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
47
  /**
48
  * adds an 'Expires' column to the post display table.
49
  */
50
  function expirationdate_add_column ($columns) {
51
+ $columns['expirationdate'] = __('Expires','post-expirator');
52
  return $columns;
53
  }
54
  add_filter ('manage_posts_columns', 'expirationdate_add_column');
58
  * fills the 'Expires' column of the post display table.
59
  */
60
  function expirationdate_show_value ($column_name) {
61
+ global $post;
62
  $id = $post->ID;
63
  if ($column_name === 'expirationdate') {
64
+ $ed = get_post_meta($id,'_expiration-date',true);
65
+ echo ($ed ? postexpirator_get_date_from_gmt(date('Y-m-d H:i:s',$ed),get_option('date_format').' '.get_option('time_format')) : __("Never",'post-expirator'));
 
 
66
  }
67
  }
68
  add_action ('manage_posts_custom_column', 'expirationdate_show_value');
85
  */
86
  function expirationdate_meta_box($post) {
87
  // Get default month
88
+ $expirationdatets = get_post_meta($post->ID,'_expiration-date',true);
89
+ $firstsave = get_post_meta($post->ID,'_expiration-date-status',true);
90
  $default = '';
91
+ $expireType = '';
92
  if (empty($expirationdatets)) {
93
+ $defaults = get_option('expirationdateDefaults'.ucfirst($post->post_type));
94
+
95
  $default = get_option('expirationdateDefaultDate',POSTEXPIRATOR_EXPIREDEFAULT);
96
  if ($default == 'null') {
97
+ $defaultmonth = date_i18n('m');
98
+ $defaultday = date_i18n('d');
99
+ $defaulthour = date_i18n('H');
100
+ $defaultyear = date_i18n('Y');
101
+ $defaultminute = date_i18n('i');
102
 
103
  } elseif ($default == 'custom') {
104
  $custom = get_option('expirationdateDefaultDateCustom');
105
  if ($custom === false) $ts = time();
106
+ else {
107
+ $tz = get_option('timezone_string');
108
+ if ( $tz ) date_default_timezone_set( $tz );
109
+
110
+ $ts = gmmktime() + (strtotime($custom) - time());
111
+
112
+ if ( $tz ) date_default_timezone_set('UTC');
113
+ }
114
+ $defaultmonth = postexpirator_get_date_from_gmt(date_i18n('Y-m-d H:i:s',$ts),'m');
115
+ $defaultday = postexpirator_get_date_from_gmt(date_i18n('Y-m-d H:i:s',$ts),'d');
116
+ $defaultyear = postexpirator_get_date_from_gmt(date_i18n('Y-m-d H:i:s',$ts),'Y');;
117
+ $defaulthour = postexpirator_get_date_from_gmt(date_i18n('Y-m-d H:i:s',$ts),'H');
118
+ $defaultminute = postexpirator_get_date_from_gmt(date_i18n('Y-m-d H:i:s',$ts),'i');
119
  }
120
 
121
  $enabled = '';
122
  $disabled = ' disabled="disabled"';
123
  $categories = get_option('expirationdateCategoryDefaults');
124
 
125
+ if (isset($defaults['expireType'])) {
126
+ $expireType = $defaults['expireType'];
127
+ }
128
+
129
+ if (isset($defaults['autoEnable']) && ($firstsave !== 'saved') && ($defaults['autoEnable'] === true || $defaults['autoEnable'] == 1)) {
130
  $enabled = ' checked="checked"';
131
  $disabled='';
132
  }
133
  } else {
134
+ $defaultmonth = postexpirator_get_date_from_gmt(date_i18n('Y-m-d H:i:s',$expirationdatets),'m');
135
+ $defaultday = postexpirator_get_date_from_gmt(date_i18n('Y-m-d H:i:s',$expirationdatets),'d');
136
+ $defaultyear = postexpirator_get_date_from_gmt(date_i18n('Y-m-d H:i:s',$expirationdatets),'Y');
137
+ $defaulthour = postexpirator_get_date_from_gmt(date_i18n('Y-m-d H:i:s',$expirationdatets),'H');
138
+ $defaultminute = postexpirator_get_date_from_gmt(date_i18n('Y-m-d H:i:s',$expirationdatets),'i');
139
+ $enabled = ' checked="checked"';
140
+ $disabled = '';
141
+ $opts = get_post_meta($post->ID,'_expiration-date-options',true);
142
+ if (isset($opts['expireType'])) {
143
+ $expireType = $opts['expireType'];
144
+ }
145
+ $categories = isset($opts['category']) ? $opts['category'] : false;
146
  }
147
 
148
  $rv = array();
175
  $rv[] = '<select name="expirationdate_month" id="expirationdate_month"'.$disabled.'>';
176
 
177
  for($i = 1; $i <= 12; $i++) {
178
+ if ($defaultmonth == date_i18n('m',mktime(0, 0, 0, $i, 1, date_i18n('Y'))))
179
  $selected = ' selected="selected"';
180
  else
181
  $selected = '';
182
+ $rv[] = '<option value="'.date_i18n('m',mktime(0, 0, 0, $i, 1, date_i18n('Y'))).'"'.$selected.'>'.date_i18n('F',mktime(0, 0, 0, $i, 1, date_i18n('Y'))).'</option>';
183
  }
184
 
185
  $rv[] = '</select>';
187
  $rv[] = '<input type="text" id="expirationdate_day" name="expirationdate_day" value="'.$defaultday.'" size="2"'.$disabled.' />,';
188
  $rv[] = '</td></tr><tr>';
189
  $rv[] = '<th style="text-align: left;"></th>';
190
+ $rv[] = '<th style="text-align: left;">'.__('Hour','post-expirator').'('.date_i18n('T',mktime(0, 0, 0, $i, 1, date_i18n('Y'))).')</th>';
191
  $rv[] = '<th style="text-align: left;">'.__('Minute','post-expirator').'</th>';
192
  $rv[] = '</tr><tr>';
193
  $rv[] = '<td>@</td><td>';
194
  $rv[] = '<select name="expirationdate_hour" id="expirationdate_hour"'.$disabled.'>';
195
 
196
  for($i = 1; $i <= 24; $i++) {
197
+ if ($defaulthour == date_i18n('H',mktime($i, 0, 0, date_i18n('n'), date_i18n('j'), date_i18n('Y'))))
198
  $selected = ' selected="selected"';
199
  else
200
  $selected = '';
201
+ $rv[] = '<option value="'.date_i18n('H',mktime($i, 0, 0, date_i18n('n'), date_i18n('j'), date_i18n('Y'))).'"'.$selected.'>'.date_i18n('H',mktime($i, 0, 0, date_i18n('n'), date_i18n('j'), date_i18n('Y'))).'</option>';
202
  }
203
 
204
  $rv[] = '</select></td><td>';
208
  $rv[] = '<input type="hidden" name="expirationdate_formcheck" value="true" />';
209
  echo implode("\n",$rv);
210
 
211
+ echo '<br/>'.__('How to expire','post-expirator').': ';
212
+ echo _postExpiratorExpireType(array('name'=>'expirationdate_expiretype','selected'=>$expireType,'disabled'=>$disabled,'onchange' => 'expirationdate_toggle_category(this)'));
213
+ echo '<br/>';
214
+
215
+ if ($post->post_type != 'page') {
216
+ if (isset($expireType) && ($expireType == 'category' || $expireType == 'category-add' || $expireType == 'category-remove')) {
217
+ $catdisplay = 'block';
218
+ } else {
219
+ $catdisplay = 'none';
220
+ }
221
+ echo '<div id="expired-category-selection" style="display: '.$catdisplay.'">';
222
  echo '<br/>'.__('Expiration Categories','post-expirator').':<br/>';
223
 
224
  echo '<div class="wp-tab-panel" id="post-expirator-cat-list">';
228
  wp_terms_checklist(0, array( 'taxonomy' => 'category', 'walker' => $walker, 'selected_cats' => $categories, 'checked_ontop' => false ) );
229
  echo '</ul>';
230
  echo '</div>';
231
+ echo '</div>';
 
232
  }
233
  echo '<div id="expirationdate_ajax_result"></div>';
234
  }
247
  if (expire.checked == true) {
248
  var enable = 'true';
249
  if (document.getElementById('expirationdate_month')) {
250
+ document.getElementById('expirationdate_month').disabled = false;
251
  document.getElementById('expirationdate_day').disabled = false;
252
  document.getElementById('expirationdate_year').disabled = false;
253
  document.getElementById('expirationdate_hour').disabled = false;
254
  document.getElementById('expirationdate_minute').disabled = false;
255
  }
256
+ document.getElementById('expirationdate_expiretype').disabled = false;
257
  var cats = document.getElementsByName('expirationdate_category[]');
258
  var max = cats.length;
259
  for (var i=0; i<max; i++) {
267
  document.getElementById('expirationdate_hour').disabled = true;
268
  document.getElementById('expirationdate_minute').disabled = true;
269
  }
270
+ document.getElementById('expirationdate_expiretype').disabled = true;
271
  var cats = document.getElementsByName('expirationdate_category[]');
272
  var max = cats.length;
273
  for (var i=0; i<max; i++) {
278
 
279
  return true;
280
  }
281
+ function expirationdate_toggle_category(id) {
282
+ if (id.options[id.selectedIndex].value == 'category') {
283
+ jQuery('#expired-category-selection').show();
284
+ } else if (id.options[id.selectedIndex].value == 'category-add') {
285
+ jQuery('#expired-category-selection').show(); //TEMP
286
+ } else if (id.options[id.selectedIndex].value == 'category-remove') {
287
+ jQuery('#expired-category-selection').show(); //TEMP
288
+ } else {
289
+ jQuery('#expired-category-selection').hide();
290
+ }
291
+ }
292
  function expirationdate_toggle_defaultdate(id) {
293
  if (id.options[id.selectedIndex].value == 'custom') {
294
  jQuery('#expired-custom-container').show();
307
  * Get correct URL (HTTP or HTTPS)
308
  */
309
  function expirationdate_get_blog_url() {
310
+ if (is_multisite())
311
  echo network_home_url('/');
312
  else
313
  echo home_url('/');
317
  * Called when post is saved - stores expiration-date meta value
318
  */
319
  function expirationdate_update_post_meta($id) {
320
+ // don't run the echo if this is an auto save
321
+ if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE )
322
+ return;
323
+
324
+ // don't run the echo if the function is called for saving revision.
325
+ $posttype = get_post_type($id);
326
+ if ( $posttype == 'revision' )
327
+ return;
328
+
329
  if (!isset($_POST['expirationdate_formcheck']))
330
+ return;
331
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
332
  if (isset($_POST['enable-expirationdate'])) {
333
+ $default = get_option('expirationdateDefaultDate',POSTEXPIRATOR_EXPIREDEFAULT);
334
+ if ($default == 'publish') {
335
+ $month = intval($_POST['mm']);
336
+ $day = intval($_POST['jj']);
337
+ $year = intval($_POST['aa']);
338
+ $hour = intval($_POST['hh']);
339
+ $minute = intval($_POST['mn']);
340
+ } else {
341
+ $month = intval($_POST['expirationdate_month']);
342
+ $day = intval($_POST['expirationdate_day']);
343
+ $year = intval($_POST['expirationdate_year']);
344
+ $hour = intval($_POST['expirationdate_hour']);
345
+ $minute = intval($_POST['expirationdate_minute']);
346
  }
347
+ $category = isset($_POST['expirationdate_category']) ? $_POST['expirationdate_category'] : 0;
348
+
349
+ $opts = array();
350
+ $ts = get_gmt_from_date("$year-$month-$day $hour:$minute:0",'U');
351
+
352
+ // Schedule/Update Expiration
353
+ $opts['expireType'] = $_POST['expirationdate_expiretype'];
354
+ $opts['id'] = $id;
355
+
356
+ if ($opts['expireType'] == 'category' || $opts['expireType'] == 'category-add' || $opts['expireType'] == 'category-remove') {
357
+ if (isset($category) && !empty($category)) {
358
+ if (!empty($category)) {
359
+ $opts['category'] = $category;
360
+ }
361
+ }
362
+ }
363
+
364
+ _scheduleExpiratorEvent($id,$ts,$opts);
365
  } else {
366
+ _unscheduleExpiratorEvent($id);
 
 
367
  }
368
  }
369
  add_action('save_post','expirationdate_update_post_meta');
370
 
371
+ function _scheduleExpiratorEvent($id,$ts,$opts) {
372
+ $debug = postExpiratorDebug(); //check for/load debug
373
+
374
+ if (wp_next_scheduled('postExpiratorExpire',array($id)) !== false) {
375
+ wp_clear_scheduled_hook('postExpiratorExpire',array($id)); //Remove any existing hooks
376
+ if (POSTEXPIRATOR_DEBUG) $debug->save(array('message' => $id.' -> UNSCHEDULED'));
377
+ }
378
+
379
+ wp_schedule_single_event($ts,'postExpiratorExpire',array($id));
380
+ if (POSTEXPIRATOR_DEBUG) $debug->save(array('message' => $id.' -> SCHEDULED at '.date_i18n('r',$ts).' '.'('.$ts.') with options '.print_r($opts,true)));
381
+
382
+ // Update Post Meta
383
+ update_post_meta($id, '_expiration-date', $ts);
384
+ update_post_meta($id, '_expiration-date-options', $opts);
385
+ update_post_meta($id, '_expiration-date-status','saved');
386
+ }
387
+
388
+ function _unscheduleExpiratorEvent($id) {
389
+ $debug = postExpiratorDebug(); // check for/load debug
390
+ delete_post_meta($id, '_expiration-date');
391
+ delete_post_meta($id, '_expiration-date-options');
392
+
393
+ // Delete Scheduled Expiration
394
+ if (wp_next_scheduled('postExpiratorExpire',array($id)) !== false) {
395
+ wp_clear_scheduled_hook('postExpiratorExpire',array($id)); //Remove any existing hooks
396
+ if (POSTEXPIRATOR_DEBUG) $debug->save(array('message' => $id.' -> UNSCHEDULED'));
397
+ }
398
+ update_post_meta($id, '_expiration-date-status','saved');
399
+ }
400
+
401
+ /**
402
+ * The new expiration function, to work with single scheduled events.
403
+ *
404
+ * This was designed to hopefully be more flexible for future tweaks/modifications to the architecture.
405
+ *
406
+ * @param array $opts - options to pass into the expiration process, in key/value format
407
+ */
408
+ function postExpiratorExpire($id) {
409
+ $debug = postExpiratorDebug(); //check for/load debug
410
+
411
+ if (empty($id)) {
412
+ if (POSTEXPIRATOR_DEBUG) $debug->save(array('message' => 'No Post ID found - exiting'));
413
+ return false;
414
+ }
415
+
416
+ if (is_null(get_post($id))) {
417
+ if (POSTEXPIRATOR_DEBUG) $debug->save(array('message' => $id.' -> Post does not exist - exiting'));
418
+ return false;
419
+ }
420
+
421
+ $postoptions = get_post_meta($id,'_expiration-date-options',true);
422
+ extract($postoptions);
423
+
424
+ // Check for default expire only if not passed in
425
+ if (empty($expireType)) {
426
+ $posttype = get_post_type($id);
427
+ if ($posttype == 'page') {
428
+ $expireType = strtolower(get_option('expirationdateExpiredPageStatus',POSTEXPIRATOR_PAGESTATUS));
429
+ } elseif ($posttype == 'post') {
430
+ $expireType = strtolower(get_option('expirationdateExpiredPostStatus','Draft'));
431
+ } else {
432
+ $expireType = apply_filters('postexpirator_custom_posttype_expire', $expireType, $posttype); //hook to set defaults for custom post types
433
+ }
434
+ }
435
+
436
+ // Remove KSES - wp_cron runs as an unauthenticated user, which will by default trigger kses filtering,
437
+ // even if the post was published by a admin user. It is fairly safe here to remove the filter call since
438
+ // we are only changing the post status/meta information and not touching the content.
439
+ kses_remove_filters();
440
+
441
+ // Do Work
442
+ if ($expireType == 'draft') {
443
+ if (wp_update_post(array('ID' => $id, 'post_status' => 'draft')) == 0) {
444
+ if (POSTEXPIRATOR_DEBUG) $debug->save(array('message' => $id.' -> FAILED '.$expireType.' '.print_r($postoptions,true)));
445
+ } else {
446
+ if (POSTEXPIRATOR_DEBUG) $debug->save(array('message' => $id.' -> PROCESSED '.$expireType.' '.print_r($postoptions,true)));
447
+ }
448
+ } elseif ($expireType == 'private') {
449
+ if (wp_update_post(array('ID' => $id, 'post_status' => 'private')) == 0) {
450
+ if (POSTEXPIRATOR_DEBUG) $debug->save(array('message' => $id.' -> FAILED '.$expireType.' '.print_r($postoptions,true)));
451
+ } else {
452
+ if (POSTEXPIRATOR_DEBUG) $debug->save(array('message' => $id.' -> PROCESSED '.$expireType.' '.print_r($postoptions,true)));
453
+ }
454
+ } elseif ($expireType == 'delete') {
455
+ if (wp_delete_post($id) === false) {
456
+ if (POSTEXPIRATOR_DEBUG) $debug->save(array('message' => $id.' -> FAILED '.$expireType.' '.print_r($postoptions,true)));
457
+ } else {
458
+ if (POSTEXPIRATOR_DEBUG) $debug->save(array('message' => $id.' -> PROCESSED '.$expireType.' '.print_r($postoptions,true)));
459
+ }
460
+ } elseif ($expireType == 'category') {
461
+ if (!empty($category)) {
462
+ if (wp_update_post(array('ID' => $id, 'post_category' => $category)) == 0) {
463
+ if (POSTEXPIRATOR_DEBUG) $debug->save(array('message' => $id.' -> FAILED '.$expireType.' '.print_r($postoptions,true)));
464
+ } else {
465
+ if (POSTEXPIRATOR_DEBUG) {
466
+ $debug->save(array('message' => $id.' -> PROCESSED '.$expireType.' '.print_r($postoptions,true)));
467
+ $debug->save(array('message' => $id.' -> CATEGORIES REPLACED '.print_r(_postExpiratorGetCatNames($category),true)));
468
+ $debug->save(array('message' => $id.' -> CATEGORIES COMPLETE '.print_r(_postExpiratorGetCatNames($category),true)));
469
+ }
470
+ }
471
+ } else {
472
+ if (POSTEXPIRATOR_DEBUG) $debug->save(array('message' => $id.' -> CATEGORIES MISSING '.$expireType.' '.print_r($postoptions,true)));
473
+ }
474
+ } elseif ($expireType == 'category-add') {
475
+ if (!empty($category)) {
476
+ $cats = wp_get_post_categories($id);
477
+ $merged = array_merge($cats,$category);
478
+ if (wp_update_post(array('ID' => $id, 'post_category' => $merged)) == 0) {
479
+ if (POSTEXPIRATOR_DEBUG) $debug->save(array('message' => $id.' -> FAILED '.$expireType.' '.print_r($postoptions,true)));
480
+ } else {
481
+ if (POSTEXPIRATOR_DEBUG) {
482
+ $debug->save(array('message' => $id.' -> PROCESSED '.$expireType.' '.print_r($postoptions,true)));
483
+ $debug->save(array('message' => $id.' -> CATEGORIES ADDED '.print_r(_postExpiratorGetCatNames($category),true)));
484
+ $debug->save(array('message' => $id.' -> CATEGORIES COMPLETE '.print_r(_postExpiratorGetCatNames($merged),true)));
485
+ }
486
+ }
487
+ } else {
488
+ if (POSTEXPIRATOR_DEBUG) $debug->save(array('message' => $id.' -> CATEGORIES MISSING '.$expireType.' '.print_r($postoptions,true)));
489
+ }
490
+ } elseif ($expireType == 'category-remove') {
491
+ if (!empty($category)) {
492
+ $cats = wp_get_post_categories($id);
493
+ $merged = array();
494
+ foreach ($cats as $cat) {
495
+ if (!in_array($cat,$category)) {
496
+ $merged[] = $cat;
497
+ }
498
+ }
499
+ if (wp_update_post(array('ID' => $id, 'post_category' => $merged)) == 0) {
500
+ if (POSTEXPIRATOR_DEBUG) $debug->save(array('message' => $id.' -> FAILED '.$expireType.' '.print_r($postoptions,true)));
501
+ } else {
502
+ if (POSTEXPIRATOR_DEBUG) {
503
+ $debug->save(array('message' => $id.' -> PROCESSED '.$expireType.' '.print_r($postoptions,true)));
504
+ $debug->save(array('message' => $id.' -> CATEGORIES REPLACED '.print_r(_postExpiratorGetCatNames($category),true)));
505
+ $debug->save(array('message' => $id.' -> CATEGORIES COMPLETE '.print_r(_postExpiratorGetCatNames($merged),true)));
506
+ }
507
+ }
508
+ } else {
509
+ if (POSTEXPIRATOR_DEBUG) $debug->save(array('message' => $id.' -> CATEGORIES MISSING '.$expireType.' '.print_r($postoptions,true)));
510
+ }
511
+ }
512
+ }
513
+ add_action('postExpiratorExpire','postExpiratorExpire');
514
+
515
+ function _postExpiratorGetCatNames($cats) {
516
+ $out = array();
517
+ foreach ($cats as $cat) {
518
+ $out[$cat] = get_the_category_by_id($cat);
519
+ }
520
+ return $out;
521
+ }
522
+
523
  /**
524
  * Build the menu for the options page
525
  */
527
  echo '<p>';
528
  if (empty($tab)) $tab = 'general';
529
  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> | ';
530
+ echo '<a href="'.admin_url('options-general.php?page=post-expirator.php&tab=defaults').'"'.($tab == 'defaults' ? ' style="font-weight: bold; text-decoration:none;"' : '').'>'.__('Defaults','post-expirator').'</a> | ';
531
  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>';
532
  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>';
533
  echo '</p><hr/>';
545
  postExpiratorMenuTabs($tab);
546
  if (empty($tab) || $tab == 'general') {
547
  postExpiratorMenuGeneral();
548
+ } elseif ($tab == 'defaults') {
549
+ postExpiratorMenuDefaults();
550
  } elseif ($tab == 'diagnostics') {
551
  postExpiratorMenuDiagnostics();
552
  } elseif ($tab == 'viewdebug') {
559
  * Hook's to add plugin page menu
560
  */
561
  function postExpiratorPluginMenu() {
562
+ add_submenu_page('options-general.php',__('Post Expirator Options','post-expirator'),__('Post Expirator','post-expirator'),'manage_options',basename(__FILE__),'postExpiratorMenu');
563
  }
564
  add_action('admin_menu', 'postExpiratorPluginMenu');
565
 
569
  function postExpiratorMenuGeneral() {
570
 
571
  if (isset($_POST['expirationdateSave']) && $_POST['expirationdateSave']) {
 
 
572
  update_option('expirationdateDefaultDateFormat',$_POST['expired-default-date-format']);
573
  update_option('expirationdateDefaultTimeFormat',$_POST['expired-default-time-format']);
574
  update_option('expirationdateDisplayFooter',$_POST['expired-display-footer']);
575
  update_option('expirationdateFooterContents',$_POST['expired-footer-contents']);
576
  update_option('expirationdateFooterStyle',$_POST['expired-footer-style']);
577
+ if (isset($_POST['expirationdate_category'])) update_option('expirationdateCategoryDefaults',$_POST['expirationdate_category']);
 
 
578
  update_option('expirationdateDefaultDate',$_POST['expired-default-expiration-date']);
 
579
  if ($_POST['expired-custom-expiration-date']) update_option('expirationdateDefaultDateCustom',$_POST['expired-custom-expiration-date']);
 
580
  echo "<div id='message' class='updated fade'><p>";
581
  _e('Saved Options!','post-expirator');
582
  echo "</p></div>";
583
  }
 
584
 
585
  // Get Option
 
 
586
  $expirationdateDefaultDateFormat = get_option('expirationdateDefaultDateFormat',POSTEXPIRATOR_DATEFORMAT);
587
  $expirationdateDefaultTimeFormat = get_option('expirationdateDefaultTimeFormat',POSTEXPIRATOR_TIMEFORMAT);
 
 
588
  $expireddisplayfooter = get_option('expirationdateDisplayFooter',POSTEXPIRATOR_FOOTERDISPLAY);
589
  $expirationdateFooterContents = get_option('expirationdateFooterContents',POSTEXPIRATOR_FOOTERCONTENTS);
590
  $expirationdateFooterStyle = get_option('expirationdateFooterStyle',POSTEXPIRATOR_FOOTERSTYLE);
 
591
  $expirationdateDefaultDate = get_option('expirationdateDefaultDate',POSTEXPIRATOR_EXPIREDEFAULT);
592
  $expirationdateDefaultDateCustom = get_option('expirationdateDefaultDateCustom');
593
 
607
  else if ($expiredcategory == 1)
608
  $expiredcategoryenabled = 'checked="checked"';
609
 
 
 
 
 
 
 
 
610
  ?>
611
  <p>
612
  <?php _e('The post expirator plugin sets a custom meta value, and then optionally allows you to select if you want the post changed to a draft status or deleted when it expires.','post-expirator'); ?>
622
  <form method="post" id="expirationdate_save_options">
623
  <h3><?php _e('Defaults','post-expirator'); ?></h3>
624
  <table class="form-table">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
625
  <tr valign-"top">
626
  <th scope="row"><label for="expired-default-date-format"><?php _e('Date Format:','post-expirator');?></label></th>
627
  <td>
638
  <?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'); ?>
639
  </td>
640
  </tr>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
641
  <tr valign-"top">
642
  <th scope="row"><label for="expired-default-expiration-date"><?php _e('Default Date/Time Duration:','post-expirator');?></label></th>
643
  <td>
659
  </table>
660
  <h3><?php _e('Category Expiration','post-expirator');?></h3>
661
  <table class="form-table">
 
 
 
 
 
 
 
 
 
662
  <tr valign-"top">
663
  <th scope="row"><?php _e('Default Expiration Category','post-expirator');?>:</th>
664
  <td>
718
  <?php
719
  }
720
 
721
+ function postExpiratorMenuDefaults() {
722
+ $debug = postExpiratorDebug();
723
+ $types = get_post_types(array('_builtin' => false));
724
+ array_unshift($types,'post','page');
 
 
 
 
 
 
 
 
725
 
726
+ if (isset($_POST['expirationdateSaveDefaults'])) {
727
+ $defaults = array();
728
+ foreach ($types as $type) {
729
+ if (isset($_POST['expirationdate_expiretype-'.$type])) {
730
+ $defaults[$type]['expireType'] = $_POST['expirationdate_expiretype-'.$type];
731
+ }
732
+ if (isset($_POST['expirationdate_autoenable-'.$type])) {
733
+ $defaults[$type]['autoEnable'] = intval($_POST['expirationdate_autoenable-'.$type]);
734
+ }
735
 
736
+ //Save Settings
737
+ update_option('expirationdateDefaults'.ucfirst($type),$defaults[$type]);
738
+ }
 
 
739
  }
 
 
 
 
 
 
 
 
 
740
 
741
+ ?>
742
+ <form method="post">
743
+ <h3><?php _e('Default Expiration Values','post-expirator');?></h3>
744
+ <p>
745
+ <?php _e('Use the values below to set the default actions/values to be used for each for the corresponding post types. These values can all be overwridden when creating/editing the post/page.','post-expirator'); ?>
746
+ </p>
747
+ <?php
748
+ foreach ($types as $type) {
749
+ $defaults = get_option('expirationdateDefaults'.ucfirst($type));
750
+ if (isset($defaults['autoEnable']) && $defaults['autoEnable'] == 1) {
751
+ $expiredautoenabled = 'checked = "checked"';
752
+ $expiredautodisabled = '';
753
+ } else {
754
+ $expiredautoenabled = '';
755
+ $expiredautodisabled = 'checked = "checked"';
756
+ }
757
+ print '<h4>Expiration values for: '.$type.'</h4>';
758
+ ?>
759
+ <table class="form-table">
760
+ <tr valign-"top">
761
+ <th scope="row"><label for="expirationdate_expiretype-<?php echo $type ?>"><?php _e('How to expire:','post-expirator'); ?></label></th>
762
+ <td>
763
+ <?php echo _postExpiratorExpireType(array('name'=>'expirationdate_expiretype-'.$type,'selected' => $defaults['expireType'])); ?>
764
+ </select>
765
+ <br/>
766
+ <?php _e('Select the default expire action for the post type.','post-expirator');?>
767
+ </td>
768
+ </tr>
769
+ <tr valign-"top">
770
+ <th scope="row"><label for="expirationdate_autoenable-<?php echo $type ?>"><?php _e('Auto-Enable?','post-expirator');?></label></th>
771
+ <td>
772
+ <input type="radio" name="expirationdate_autoenable-<?php echo $type ?>" id="expirationdate_autoenable-true-<?php echo $type ?>" value="1" <?php echo $expiredautoenabled ?>/> <label for="expired-auto-enable-true"><?php _e('Enabled','post-expirator');?></label>
773
+ <input type="radio" name="expirationdate_autoenable-<?php echo $type ?>" id="expirationdate_autoenable-false-<?php echo $type ?>" value="0" <?php echo $expiredautodisabled ?>/> <label for="expired-auto-enable-false"><?php _e('Disabled','post-expirator');?></label>
774
+ <br/>
775
+ <?php _e('Select whether the post expirator is enabled for all new posts.','post-expirator');?>
776
+ </td>
777
+ </tr>
778
+ </table>
779
+ <?php
780
+ }
781
+ ?>
782
+ <p class="submit">
783
+ <input type="submit" name="expirationdateSaveDefaults" class="button-primary" value="<?php _e('Save Changes','post-expirator');?>" />
784
+ </p>
785
+ </form>
786
+ <?php
787
  }
788
 
789
  function postExpiratorMenuDiagnostics() {
800
  echo "<div id='message' class='updated fade'><p>"; _e('Debugging Table Emptied','post-expirator'); echo "</p></div>";
801
  }
802
 
803
+ $debug = postExpiratorDebug();
 
 
 
 
 
 
 
 
 
804
  ?>
805
  <form method="post" id="postExpiratorMenuUpgrade">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
806
  <h3><?php _e('Advanced Diagnostics','post-expirator');?></h3>
807
  <table class="form-table">
808
  <tr valign-"top">
809
  <th scope="row"><label for="postexpirator-log"><?php _e('Post Expirator Debug Logging:','post-expirator');?></label></th>
810
  <td>
811
  <?php
812
+ if (POSTEXPIRATOR_DEBUG) {
813
  echo __('Status: Enabled','post-expirator').'<br/>';
814
  echo '<input type="submit" class="button" name="debugging-disable" id="debugging-disable" value="'.__('Disable Debugging','post-expirator').'" />';
815
  } else {
831
  <th scope="row"><label for="cron-schedule"><?php _e('Current Cron Schedule:','post-expirator');?></label></th>
832
  <td>
833
  <?php _e('The below table will show all currently scheduled cron events with the next run time.','post-expirator');?><br/>
 
 
 
 
 
 
834
 
835
  <table>
836
  <tr>
837
+ <th style="width: 200px;"><?php _e('Date','post-expirator');?></th>
838
+ <th style="width: 200px;"><?php _e('Event','post-expirator');?></th>
839
+ <th style="width: 500px;"><?php _e('Arguments / Schedule','post-expirator');?></th>
 
840
  </tr>
841
  <?php
842
  $cron = _get_cron_array();
846
  print '<td>'.date_i18n('r',$key).'</td>';
847
  print '<td>'.$eventkey.'</td>';
848
  $arrkey = array_keys($eventvalue);
849
+ print '<td>';
850
+ foreach ($arrkey as $eventguid) {
851
+ print '<table><tr>';
852
+ if (empty($eventvalue[$eventguid]['args'])) {
853
+ print '<td>No Arguments</td>';
854
+ } else {
855
+ print '<td>';
856
+ $args = array();
857
+ foreach ($eventvalue[$eventguid]['args'] as $key=>$value) {
858
+ $args[] = "$key => $value";
859
+ }
860
+ print implode("<br/>\n",$args);
861
+ print '</td>';
862
+ }
863
+ if (empty($eventvalue[$eventguid]['schedule'])) {
864
+ print '<td>'.__('Single Event','post-expirator').'</td>';
865
+ } else {
866
+ print '<td>'.$eventvalue[$eventguid]['schedule'].' ('.$eventvalue[$eventguid]['interval'].')</td>';
867
+ }
868
+ print '</tr></table>';
869
+ }
870
+ print '</td>';
871
  print '</tr>';
872
  }
873
  }
891
  function postexpirator_shortcode($atts) {
892
  global $post;
893
 
894
+ $expirationdatets = get_post_meta($post->ID,'_expiration-date',true);
895
  if (empty($expirationdatets))
896
  return false;
897
 
898
  extract(shortcode_atts(array(
899
  'dateformat' => get_option('expirationdateDefaultDateFormat',POSTEXPIRATOR_DATEFORMAT),
900
  'timeformat' => get_option('expirationdateDefaultTimeFormat',POSTEXPIRATOR_TIMEFORMAT),
901
+ 'type' => 'full',
902
  'tz' => date('T')
903
  ), $atts));
904
 
919
  else if ($type == 'time')
920
  $format = $timeformat;
921
 
922
+ return postexpirator_get_date_from_gmt(date_i18n('Y-m-d H:i:s',$expirationdatets),$format);
 
923
  }
924
  add_shortcode('postexpirator', 'postexpirator_shortcode');
925
 
931
  if ($displayFooter === false || $displayFooter == 0)
932
  return $text;
933
 
934
+ $expirationdatets = get_post_meta($post->ID,'_expiration-date',true);
935
  if (!is_numeric($expirationdatets))
936
  return $text;
937
 
940
  $expirationdateFooterContents = get_option('expirationdateFooterContents',POSTEXPIRATOR_FOOTERCONTENTS);
941
  $expirationdateFooterStyle = get_option('expirationdateFooterStyle',POSTEXPIRATOR_FOOTERSTYLE);
942
 
 
943
  $search = array(
944
  'EXPIRATIONFULL',
945
  'EXPIRATIONDATE',
946
  'EXPIRATIONTIME'
947
  );
948
  $replace = array(
949
+ postexpirator_get_date_from_gmt(date_i18n('Y-m-d H:i:s',$expirationdatets),"$dateformat $timeformat"),
950
+ postexpirator_get_date_from_gmt(date_i18n('Y-m-d H:i:s',$expirationdatets),$dateformat),
951
+ postexpirator_get_date_from_gmt(date_i18n('Y-m-d H:i:s',$expirationdatets),$timeformat)
952
  );
953
 
954
  $add_to_footer = '<p style="'.$expirationdateFooterStyle.'">'.str_replace($search,$replace,$expirationdateFooterContents).'</p>';
959
  /**
960
  * Check for Debug
961
  */
962
+ function postExpiratorDebug() {
963
  $debug = get_option('expirationdateDebug');
964
+ if ($debug == 1) {
965
+ define('POSTEXPIRATOR_DEBUG',1);
966
+ require_once(plugin_dir_path(__FILE__).'post-expirator-debug.php'); // Load Class
967
+ return new postExpiratorDebug();
968
+ } else {
969
+ define('POSTEXPIRATOR_DEBUG',0);
970
+ return false;
971
+ }
972
  }
973
 
974
+
975
  /**
976
  * Add Stylesheet
977
  */
990
  * Post Expirator Activation/Upgrade
991
  */
992
  function postexpirator_upgrade() {
993
+
994
  // Check for current version, if not exists, run activation
995
  $version = get_option('postexpiratorVersion');
996
  if ($version === false) { //not installed, run default activation
997
  postexpirator_activate();
998
  update_option('postexpiratorVersion',POSTEXPIRATOR_VERSION);
999
+ } else {
1000
+ if (version_compare($version,'1.6.1') == -1) {
1001
+ update_option('postexpiratorVersion',POSTEXPIRATOR_VERSION);
1002
+ update_option('expirationdateDefaultDate',POSTEXPIRATOR_EXPIREDEFAULT);
1003
+ }
1004
+
1005
+ if (version_compare($version,'1.6.2') == -1) {
1006
+ update_option('postexpiratorVersion',POSTEXPIRATOR_VERSION);
1007
+ }
1008
+
1009
+ if (version_compare($version,'2.0.0-rc1') == -1) {
1010
+ global $wpdb;
1011
+
1012
+ // Schedule Events/Migrate Config
1013
+ $results = $wpdb->get_results($wpdb->prepare('select post_id, meta_value from ' . $wpdb->postmeta . ' as postmeta, '.$wpdb->posts.' as posts where postmeta.post_id = posts.ID AND postmeta.meta_key = %s AND postmeta.meta_value >= %d','expiration-date',time()));
1014
+ foreach ($results as $result) {
1015
+ wp_schedule_single_event($result->meta_value,'postExpiratorExpire',array($result->post_id));
1016
+ $opts = array();
1017
+ $opts['id'] = $result->post_id;
1018
+ $posttype = get_post_type($result->post_id);
1019
+ if ($posttype == 'page') {
1020
+ $opts['expireType'] = strtolower(get_option('expirationdateExpiredPageStatus','Draft'));
1021
+ } else {
1022
+ $opts['expireType'] = strtolower(get_option('expirationdateExpiredPostStatus','Draft'));
1023
+ }
1024
+
1025
+ $cat = get_post_meta($result->post_id,'_expiration-date-category',true);
1026
+ if ((isset($cat) && !empty($cat))) {
1027
+ $opts['category'] = $cat;
1028
+ $opts['expireType'] = 'category';
1029
+ }
1030
+ update_post_meta($result->post_id,'_expiration-date-options',$opts);
1031
+ }
1032
+
1033
+ // update meta key to new format
1034
+ $wpdb->query($wpdb->prepare("UPDATE $wpdb->postmeta SET meta_key = %s WHERE meta_key = %s",'_expiration-date','expiration-date'));
1035
+
1036
+ // migrate defaults
1037
+ $pagedefault = get_option('expirationdateExpiredPageStatus');
1038
+ $postdefault = get_option('expirationdateExpiredPostStatus');
1039
+ if ($pagedefault) update_option('expirationdateDefaultsPage',array('expireType' => $pagedefault));
1040
+ if ($postdefault) update_option('expirationdateDefaultsPost',array('expireType' => $postdefault));
1041
+
1042
+ delete_option('expirationdateCronSchedule');
1043
+ delete_option('expirationdateAutoEnabled');
1044
+ delete_option('expirationdateExpiredPageStatus');
1045
+ delete_option('expirationdateExpiredPostStatus');
1046
+ update_option('postexpiratorVersion',POSTEXPIRATOR_VERSION);
1047
  }
1048
  }
1049
  }
1053
  * Called at plugin activation
1054
  */
1055
  function postexpirator_activate () {
 
 
1056
  if (get_option('expirationdateDefaultDateFormat') === false) update_option('expirationdateDefaultDateFormat',POSTEXPIRATOR_DATEFORMAT);
1057
  if (get_option('expirationdateDefaultTimeFormat') === false) update_option('expirationdateDefaultTimeFormat',POSTEXPIRATOR_TIMEFORMAT);
1058
  if (get_option('expirationdateFooterContents') === false) update_option('expirationdateFooterContents',POSTEXPIRATOR_FOOTERCONTENTS);
1059
  if (get_option('expirationdateFooterStyle') === false) update_option('expirationdateFooterStyle',POSTEXPIRATOR_FOOTERSTYLE);
1060
  if (get_option('expirationdateDisplayFooter') === false) update_option('expirationdateDisplayFooter',POSTEXPIRATOR_FOOTERDISPLAY);
1061
+ if (get_option('expirationdateDebug') === false) update_option('expirationdateDebug',POSTEXPIRATOR_DEBUGDEFAULT);
 
1062
  if (get_option('expirationdateDefaultDate') === false) update_option('expirationdateDefaultDate',POSTEXPIRATOR_EXPIREDEFAULT);
 
 
 
 
 
 
1063
  }
1064
 
1065
  /**
1082
  delete_option('expirationdateDefaultDate');
1083
  delete_option('expirationdateDefaultDateCustom');
1084
  delete_option('expirationdateAutoEnabled');
1085
+ delete_option('expirationdateDefaultsPage');
1086
+ delete_option('expirationdateDefaultsPost');
1087
+ ## what about custom post types? - how to cleanup?
1088
+ if (is_multisite())
1089
  wp_clear_scheduled_hook('expirationdate_delete_'.$current_blog->blog_id);
1090
  else
1091
  wp_clear_scheduled_hook('expirationdate_delete');
1122
 
1123
  $name = 'expirationdate_category';
1124
 
1125
+ $class = in_array( $category->term_id, $popular_cats ) ? ' class="expirator-category"' : '';
1126
+ $output .= "\n<li id='expirator-{$taxonomy}-{$category->term_id}'$class>" . '<label class="selectit"><input value="' . $category->term_id . '" type="checkbox" name="'.$name.'[]" id="expirator-in-'.$taxonomy.'-' . $category->term_id . '"' . checked( in_array( $category->term_id, $selected_cats ), true, false ) . disabled( empty( $args['disabled'] ), false, false ) . ' '.$this->disabled.'/> ' . esc_html( apply_filters('the_category', $category->name )) . '</label>';
1127
  }
1128
 
1129
  function end_el(&$output, $category, $depth, $args) {
1130
  $output .= "</li>\n";
1131
  }
1132
  }
1133
+
1134
+ function _postExpiratorExpireType($opts) {
1135
+ if (empty($opts)) return false;
1136
+
1137
+ extract($opts);
1138
+ if (!isset($name)) return false;
1139
+ if (!isset($id)) $id = $name;
1140
+ if (!isset($disabled)) $disabled = '';
1141
+ if (!isset($onchange)) $onchange = '';
1142
+ if (!isset($type)) $type = '';
1143
+
1144
+ $rv = array();
1145
+ $rv[] = '<select name="'.$name.'" id="'.$id.'"'.$disabled.' onchange="'.$onchange.'">';
1146
+ $rv[] = '<option value="draft" '. ($selected == 'draft' ? 'selected="selected"' : '') . '>'.__('Draft','post-expirator').'</option>';
1147
+ $rv[] = '<option value="delete" '. ($selected == 'delete' ? 'selected="selected"' : '') . '>'.__('Delete','post-expirator').'</option>';
1148
+ $rv[] = '<option value="private" '. ($selected == 'private' ? 'selected="selected"' : '') . '>'.__('Private','post-expirator').'</option>';
1149
+ $rv[] = '<option value="category" '. ($selected == 'category' ? 'selected="selected"' : '') . '>'.__('Category: Replace','post-expirator').'</option>';
1150
+ $rv[] = '<option value="category-add" '. ($selected == 'category-add' ? 'selected="selected"' : '') . '>'.__('Category: Add','post-expirator').'</option>';
1151
+ $rv[] = '<option value="category-remove" '. ($selected == 'category-remove' ? 'selected="selected"' : '') . '>'.__('Category: Remove','post-expirator').'</option>';
1152
+ $rv[] = '</select>';
1153
+ return implode("<br/>/n",$rv);
1154
+ }
1155
+
1156
+ /**
1157
+ * TEMPORARY FUNCTION UNTIL TICKET 20328 IS FIXED
1158
+ */
1159
+ function postexpirator_get_date_from_gmt($string,$format = 'Y-m-d H:i:s') {
1160
+ $tz = get_option('timezone_string');
1161
+ if ( $tz ) {
1162
+ $datetime = new DateTime( $string , new DateTimeZone('UTC') );
1163
+ $datetime->setTimezone( new DateTimeZone($tz) );
1164
+ $string_localtime = $datetime->format($format);
1165
+ } else {
1166
+ preg_match('#([0-9]{1,4})-([0-9]{1,2})-([0-9]{1,2}) ([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})#', $string, $matches);
1167
+ $string_time = gmmktime($matches[4], $matches[5], $matches[6], $matches[2], $matches[3], $matches[1]);
1168
+ $string_localtime = gmdate($format, $string_time + get_option('gmt_offset')*3600);
1169
+ }
1170
+ return $string_localtime;
1171
+ }
readme.txt CHANGED
@@ -2,8 +2,8 @@
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.2
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.
@@ -47,6 +47,25 @@ This section describes how to install the plugin and get it working.
47
 
48
  == Changelog ==
49
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
50
  **Version 1.6.2**
51
 
52
  * Added the ability to configure the post expirator to be enabled by default for all new posts
@@ -150,6 +169,9 @@ NOTE: After upgrading, you may need to reset the cron schedules. Following onsc
150
 
151
  == Upgrade Notice ==
152
 
 
 
 
153
  = 1.6.1 =
154
  Tweaked error messages, added option to allow user to select cron schedule and set default exiration duration
155
 
2
  Contributors: axelseaa
3
  Tags: expire, posts, pages, schedule
4
  Requires at least: 3.2
5
+ Tested up to: 3.5.1
6
+ Stable tag: 2.0.0
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.
47
 
48
  == Changelog ==
49
 
50
+ **Version 2.0.0**
51
+
52
+ This is a major update of the core functions of this plugin. All current plugins and settings should be upgraded to the new formats and work as expected. Any posts currently schedule to be expirated in the future will be automatically upgraded to the new format.
53
+
54
+ * New: Improved debug calls and logging
55
+ * New: Added the ability to expire to a "private" post
56
+ * New: Added the ability to expire by adding or removing categories. The old way of doing things is now known as replacing categories
57
+ * New: Revamped the expiration process - the plugin no longer runs on an minute, hourly, or other schedule. Each expiration event schedules a unique event to run, conserving system resources and making things more efficient
58
+ * New: The type of expiration event can be selected for each post, directly from the post editing screen
59
+ * New: Ability to set defaults for each post type (including custom posts)
60
+ * New: Renamed expiration-date meta value to _expiration-date
61
+ * New: Revamped timezone handling to be more correct with WordPress standards and fix conflicts with other plugins
62
+ * New: 'Expires' column on post display table now uses the default date/time formats set for the blog
63
+ * Fix: Removed kses filter calls when then schedule task runs that was causing code entered as unfiltered_html to be removed
64
+ * Fix: Updated some calls of date to now use date_i18n
65
+ * Fix: Most (if not all) php error/warnings should be addressed
66
+ * Fix: Updated wpdb calls in the debug class to use wpdb_prepare correctly
67
+ * Fix: Changed menu capability option from "edit_plugin" to "manage_options"
68
+
69
  **Version 1.6.2**
70
 
71
  * Added the ability to configure the post expirator to be enabled by default for all new posts
169
 
170
  == Upgrade Notice ==
171
 
172
+ = 2.0.0 =
173
+ This is a major update of the core functions of this plugin. All current plugins and settings should be upgraded to the new formats and work as expected. Any posts currently schedule to be expirated in the future will be automatically upgraded to the new format.
174
+
175
  = 1.6.1 =
176
  Tweaked error messages, added option to allow user to select cron schedule and set default exiration duration
177
 
screenshot-1.png CHANGED
Binary file
screenshot-2.png CHANGED
Binary file
screenshot-3.png CHANGED
Binary file