diff --git a/inc/functions.php b/inc/functions.php index b90abe1b..cec25137 100644 --- a/inc/functions.php +++ b/inc/functions.php @@ -104,13 +104,13 @@ return $theme; } - function rebuildTheme() { + function rebuildTheme($action) { $query = query("SELECT `value` AS `theme` FROM `theme_settings` WHERE `name` = 'theme'") or error(db_error()); if($theme = $query->fetch()) { // A theme is installed $theme = loadThemeConfig($theme['theme']); - $theme['build_function'](themeSettings()); + $theme['build_function']($action, themeSettings()); } } @@ -799,10 +799,16 @@ $content .= '
'; break; case 6: - $content .= ''; + if(!empty($value)) + $content .= ''; + else + $content .= ''; break; case 7: - $content .= ''; + if(!empty($value)) + $content .= ''; + else + $content .= ''; break; case 8: $content .= '
'; diff --git a/mod.php b/mod.php index 8a27a44d..14bed8d1 100644 --- a/mod.php +++ b/mod.php @@ -304,7 +304,15 @@ $query->execute() or error(db_error($query)); // Build theme - $theme['build_function'](themeSettings()); + rebuildTheme('all'); + + echo Element('page.html', Array( + 'config'=>$config, + 'title'=>'Installed "' . htmlentities($theme['name']) . '"', + 'body'=>'

Successfully installed and built theme.

', + 'mod'=>true + ) + ); } else { $body = '
'; @@ -481,7 +489,7 @@ $query->bindValue(':id', $match[1], PDO::PARAM_INT); $query->execute() or error(db_error($query)); - rebuildTheme(); + rebuildTheme('news'); header('Location: ?/news', true, $config['redirect_http']); } elseif(preg_match('/^\/news$/', $query)) { @@ -504,7 +512,7 @@ $query->bindValue(':body', $_POST['body']); $query->execute() or error(db_error($query)); - rebuildTheme(); + rebuildTheme('news'); } $body .= '
New post' . @@ -1197,6 +1205,8 @@ $query->bindValue(':id', $board['id'], PDO::PARAM_INT); $query->execute() or error(db_error($query)); + rebuildTheme('boards'); + header('Location: ?/', true, $config['redirect_http']); } else { if(isset($_POST['title']) && isset($_POST['subtitle'])) { @@ -1211,6 +1221,8 @@ $query->bindValue(':id', $board['id'], PDO::PARAM_INT); $query->execute() or error(db_error($query)); + rebuildTheme('boards'); + openBoard($board['uri']); } @@ -1364,7 +1376,7 @@ $body = '

Rebuilding…

'; $body .= 'Regenerating theme files…
'; - rebuildTheme(); + rebuildTheme('all'); $body .= 'Generating Javascript file…
'; buildJavascript(); @@ -1510,6 +1522,8 @@ // Build the board buildIndex(); + rebuildTheme('boards'); + header('Location: ?/board/' . $board['uri'], true, $config['redirect_http']); } else { diff --git a/templates/homepage/basic/theme.php b/templates/homepage/basic/theme.php index 1251cfff..6a6f0bfa 100644 --- a/templates/homepage/basic/theme.php +++ b/templates/homepage/basic/theme.php @@ -25,16 +25,22 @@ // Unique function name for building everything $theme['build_function'] = 'basic_build'; - function basic_build($settings) { - Basic::build($settings); + function basic_build($action, $settings) { + // Possible values for $action: + // - all (rebuild everything, initialization) + // - news (news has been updated) + // - boards (board list changed) + + Basic::build($action, $settings); } // Wrap functions in a class so they don't interfere with normal Tinyboard operations class Basic { - public static function build($settings) { + public static function build($action, $settings) { global $config; - file_put_contents($config['dir']['home'] . $config['file_index'], Basic::homepage($settings)); + if($action == 'all' || $action == 'news') + file_put_contents($config['dir']['home'] . $config['file_index'], Basic::homepage($settings)); } // Build news page diff --git a/templates/homepage/frameset/theme.php b/templates/homepage/frameset/theme.php index 8b96402d..6c82f0b1 100644 --- a/templates/homepage/frameset/theme.php +++ b/templates/homepage/frameset/theme.php @@ -28,18 +28,28 @@ Users never have to leave the homepage; they can do all their browsing from the // Unique function name for building everything $theme['build_function'] = 'frameset_build'; - function frameset_build($settings) { - Frameset::build($settings); + function frameset_build($action, $settings) { + // Possible values for $action: + // - all (rebuild everything, initialization) + // - news (news has been updated) + // - boards (board list changed) + + Frameset::build($action, $settings); } // Wrap functions in a class so they don't interfere with normal Tinyboard operations class Frameset { - public static function build($settings) { + public static function build($action, $settings) { global $config; - file_put_contents($config['dir']['home'] . $config['file_index'], Frameset::homepage($settings)); - file_put_contents($config['dir']['home'] . 'sidebar.html', Frameset::sidebar($settings)); - file_put_contents($config['dir']['home'] . 'news.html', Frameset::news($settings)); + if($action == 'all') + file_put_contents($config['dir']['home'] . $config['file_index'], Frameset::homepage($settings)); + + if($action == 'all' || $action == 'boards') + file_put_contents($config['dir']['home'] . 'sidebar.html', Frameset::sidebar($settings)); + + if($action == 'all' || $action == 'news') + file_put_contents($config['dir']['home'] . 'news.html', Frameset::news($settings)); } // Build homepage diff --git a/templates/homepage/frameset/thumb.png b/templates/homepage/frameset/thumb.png index fd912d1a..df18a8e9 100644 Binary files a/templates/homepage/frameset/thumb.png and b/templates/homepage/frameset/thumb.png differ