summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorczaks <marcin@6irc.net>2015-04-03 05:57:39 +0200
committerczaks <marcin@6irc.net>2015-04-03 05:57:39 +0200
commite2731113404bda42ee506e29b6927165b7576f61 (patch)
tree112563313aae51cf2708e0449eac7868869d37bc
parent61d2729a40e8249fef8b3c0c584a9b5f7ae0777c (diff)
sitemap theme for smart_build
-rw-r--r--smart_build.php9
-rw-r--r--templates/themes/sitemap/theme.php47
2 files changed, 36 insertions, 20 deletions
diff --git a/smart_build.php b/smart_build.php
index fb467233..43734e4f 100644
--- a/smart_build.php
+++ b/smart_build.php
@@ -105,6 +105,11 @@ function sb_recent() {
return true;
}
+function sb_sitemap() {
+ rebuildTheme("sitemap", "all");
+ return true;
+}
+
$entrypoints = array();
$entrypoints['/%b/'] = 'sb_board';
@@ -130,6 +135,7 @@ $entrypoints['/*/'] = 'sb_ukko';
$entrypoints['/*/index.html'] = 'sb_ukko';
$entrypoints['/recent.html'] = 'sb_recent';
$entrypoints['/%b/catalog.html'] = 'sb_catalog';
+$entrypoints['/sitemap.xml'] = 'sb_sitemap';
$reached = false;
@@ -185,6 +191,9 @@ if ($reached) {
elseif (preg_match('/\.js$/', $request)) {
header("Content-Type", "text/javascript; charset=utf-8");
}
+ elseif (preg_match('/\.xml$/', $request)) {
+ header("Content-Type", "application/xml");
+ }
else {
header("Content-Type", "text/html; charset=utf-8");
}
diff --git a/templates/themes/sitemap/theme.php b/templates/themes/sitemap/theme.php
index 41a7f304..52779d53 100644
--- a/templates/themes/sitemap/theme.php
+++ b/templates/themes/sitemap/theme.php
@@ -10,30 +10,37 @@
// - boards (board list changed)
// - post (a post has been made)
// - thread (a thread has been made)
+
+ if ($action != 'all') {
+ if ($action != 'post-thread' && $action != 'post-delete')
+ return;
- if ($action != 'post-thread' && $action != 'post-delete')
- return;
-
- if (isset($settings['regen_time']) && $settings['regen_time'] > 0) {
- if ($last_gen = @filemtime($settings['path'])) {
- if (time() - $last_gen < (int)$settings['regen_time'])
- return; // Too soon
+ if (isset($settings['regen_time']) && $settings['regen_time'] > 0) {
+ if ($last_gen = @filemtime($settings['path'])) {
+ if (time() - $last_gen < (int)$settings['regen_time'])
+ return; // Too soon
+ }
}
}
+
+ if ($config['smart_build']) {
+ file_unlink($settings['path']);
+ }
+ else {
+ $boards = explode(' ', $settings['boards']);
- $boards = explode(' ', $settings['boards']);
-
- $threads = array();
+ $threads = array();
- foreach ($boards as $board) {
- $query = query(sprintf("SELECT `id`, `id` AS `thread_id`, `slug`, (SELECT `time` FROM ``posts_%s`` WHERE `thread` = `thread_id` OR `id` = `thread_id` ORDER BY `time` DESC LIMIT 1) AS `lastmod` FROM ``posts_%s`` WHERE `thread` IS NULL", $board, $board)) or error(db_error());
- $threads[$board] = $query->fetchAll(PDO::FETCH_ASSOC);
- }
+ foreach ($boards as $board) {
+ $query = query(sprintf("SELECT `id`, `id` AS `thread_id`, `slug`, (SELECT `time` FROM ``posts_%s`` WHERE `thread` = `thread_id` OR `id` = `thread_id` ORDER BY `time` DESC LIMIT 1) AS `lastmod` FROM ``posts_%s`` WHERE `thread` IS NULL", $board, $board)) or error(db_error());
+ $threads[$board] = $query->fetchAll(PDO::FETCH_ASSOC);
+ }
- file_write($settings['path'], Element('themes/sitemap/sitemap.xml', Array(
- 'settings' => $settings,
- 'config' => $config,
- 'threads' => $threads,
- 'boards' => $boards,
- )));
+ file_write($settings['path'], Element('themes/sitemap/sitemap.xml', Array(
+ 'settings' => $settings,
+ 'config' => $config,
+ 'threads' => $threads,
+ 'boards' => $boards,
+ )));
+ }
}