-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathgenerate.php
132 lines (104 loc) · 3.97 KB
/
generate.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
<?php
use \FeedWriter\RSS2;
chdir(dirname(__FILE__));
require_once('vendor/autoload.php');
//////////////////////////////////////////////////////////////
// Always snap start/end dates to Friday 3pm
if(array_key_exists(2, $argv ?? [])) {
$endDate = new DateTime($argv[2], new DateTimeZone('US/Pacific'));
} else {
$endDate = new DateTime();
$endDate->setTimeZone(new DateTimeZone('US/Pacific'));
if($endDate->format('l') != 'Friday') {
$endDate->modify('next friday');
} else {
if($endDate->format('G') >= 15)
$endDate->modify('next friday');
}
}
$endDate->setTime(14,59,0);
$startDate = clone $endDate;
$startDate->modify('-7 days');
echo $startDate->format('c').' to '.$endDate->format('c')."\n";
$startDate = $startDate->format('U');
$endDate = $endDate->format('U');
//////////////////////////////////////////////////////////////
$date = IndieWeb\DateFormatter::format(date('Y-m-d', $startDate), date('Y-m-d', $endDate), false);
$html = '';
ob_start();
require('generate-header.php');
$html .= ob_get_clean();
ob_start();
require('generate-events-summary.php');
$html .= ob_get_clean();
ob_start();
require('generate-podcasts.php');
$html .= ob_get_clean();
ob_start();
require('generate-indienews.php');
$html .= ob_get_clean();
ob_start();
require('generate-wiki-summary.php');
$html .= ob_get_clean();
// Write the file that will be used as the source for the RSS feed email
$tmpfile = sys_get_temp_dir() . '/IndieWebCamp ' . $date . '.html';
file_put_contents($tmpfile, $html);
// Wrap it in an HTML wrapper for the web archive
ob_start();
require('html-wrapper.php');
$html = ob_get_clean();
$archivefile = Config::$publicPath . date('Y-m-d', $endDate) . '.html';
file_put_contents($archivefile, $html);
// Generate the RSS feed
$feedfile = Config::$publicPath . 'feed.xml';
$feedfileDraft = Config::$publicPath . 'draft.xml';
$feed = new RSS2();
$feed->setTitle('This Week in the IndieWeb');
$feed->setLink('https://indieweb.org/this-week');
$feed->setDescription('See what\'s been happening this week in the IndieWeb');
$feed->setChannelElement('language', 'en-US');
$feed->setDate(date(DATE_RSS));
$feed->setChannelElement('pubDate', date(DATE_RSS));
$item = $feed->createNewItem();
$item->setTitle('This Week in the IndieWeb');
$item->setLink(Config::$baseURL . date('Y-m-d', $endDate) . '.html');
$item->setId(Config::$baseURL . date('Y-m-d', $endDate) . '.html', true);
$item->setDescription(file_get_contents($tmpfile));
$item->setDate(date(DATE_RSS));
$feed->addItem($item);
file_put_contents($feedfileDraft, $feed->generateFeed());
$localtime = new DateTime();
$localtime->setTimeZone(new DateTimeZone('America/Los_Angeles'));
// Send an IRC reminder when this runs at the 0:30 mark
$msg = false;
if(isset($argv) && is_array($argv) && isset($argv[1])) {
$newsletterURL = Config::$baseURL.date('Y-m-d', $endDate).'.html';
switch($argv[1]) {
case 'first':
$msg = 'Just generated the first draft of this week\'s newsletter! '.$newsletterURL.' I\'ll generate a draft again tomorrow, so please add to it before then! https://indieweb.org/this-week#How_to';
break;
case 'draft':
$msg = 'Generated a new draft of the newsletter! '.$newsletterURL;
break;
case 'staging':
$msg = 'Just generated this week\'s newsletter! You still have a few minutes to make changes, and I\'ll re-generate it 10 minutes before it gets sent out at 3pm Pacific time. '.$newsletterURL;
break;
case 'final':
file_put_contents($feedfile, $feed->generateFeed());
$msg = 'Generated the final version of the newsletter! This will be sent out at 3pm Pacific time. '.$newsletterURL;
break;
}
}
if($msg) {
$ch = curl_init(Config::$ircURL);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([
'channel' => Config::$ircChannel,
'content' => $msg
]));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer '.Config::$ircToken
]);
curl_exec($ch);
}