config = $config; } } // }}} /* SetupBuildingEvent {{{ * * Sent when the setup page is ready to be added to */ class SetupBuildingEvent extends Event { var $panel; public function SetupBuildingEvent(SetupPanel $panel) { $this->panel = $panel; } public function get_panel() { return $this->panel; } } // }}} /* SetupPanel {{{ * */ class SetupPanel { var $blocks = array(); public function add_block(SetupBlock $block) { $this->blocks[] = $block; } } // }}} /* SetupBlock {{{ * */ class SetupBlock extends Block { var $header; var $body; public function SetupBlock($title) { $this->header = $title; $this->section = "main"; $this->position = 50; } public function add_label($text) { $this->body .= $text; } public function add_text_option($name, $label=null) { global $config; $val = html_escape($config->get_string($name)); if(!is_null($label)) { $this->body .= ""; } $this->body .= "\n"; $this->body .= "\n"; } public function add_longtext_option($name, $label=null) { global $config; $val = html_escape($config->get_string($name)); if(!is_null($label)) { $this->body .= ""; } $rows = max(3, min(10, count(explode("\n", $val)))); $this->body .= "\n"; $this->body .= "\n"; } public function add_bool_option($name, $label=null) { global $config; $checked = $config->get_bool($name) ? " checked" : ""; if(!is_null($label)) { $this->body .= ""; } $this->body .= "\n"; $this->body .= "\n"; } // public function add_hidden_option($name, $label=null) { // global $config; // $val = $config->get_string($name); // $this->body .= ""; // } public function add_int_option($name, $label=null) { global $config; $val = html_escape($config->get_string($name)); if(!is_null($label)) { $this->body .= ""; } $this->body .= "\n"; $this->body .= "\n"; } public function add_shorthand_int_option($name, $label=null) { global $config; $val = to_shorthand_int($config->get_string($name)); if(!is_null($label)) { $this->body .= ""; } $this->body .= "\n"; $this->body .= "\n"; } public function add_choice_option($name, $options, $label=null) { global $config; $current = $config->get_string($name); if(!is_null($label)) { $this->body .= ""; } $html = ""; $this->body .= "\n"; $this->body .= $html; } public function add_multichoice_option($name, $options, $label=null) { global $config; $current = $config->get_array($name); if(!is_null($label)) { $this->body .= ""; } $html = ""; $this->body .= "\n"; $this->body .= "\n"; // setup page auto-layout counts
tags $this->body .= $html; } } // }}} class Setup extends Extension { public function onInitExt(InitExtEvent $event) { global $config; $config->set_default_string("title", "Shimmie"); $config->set_default_string("front_page", "post/list"); $config->set_default_string("main_page", "post/list"); $config->set_default_string("theme", "default"); $config->set_default_bool("word_wrap", true); $config->set_default_bool("comment_captcha", false); // Automatic caching is disabled by default $config->set_default_string("autocache_location", "data/cache"); $config->set_default_bool("autocache_css", false); $config->set_default_bool("autocache_jss", false); $config->set_default_bool("autocache_min_css", false); $config->set_default_bool("autocache_min_js", false); } public function onPageRequest(PageRequestEvent $event) { global $config, $page, $user; if($event->page_matches("nicetest")) { $page->set_mode("data"); $page->set_data("ok"); } if($event->page_matches("setup")) { if(!$user->can("change_setting")) { $this->theme->display_permission_denied(); } else { if($event->get_arg(0) == "save" && $user->check_auth_token()) { send_event(new ConfigSaveEvent($config)); $config->save(); $page->set_mode("redirect"); $page->set_redirect(make_link("setup")); } else if($event->get_arg(0) == "advanced") { $this->theme->display_advanced($page, $config->values); } else { $panel = new SetupPanel(); send_event(new SetupBuildingEvent($panel)); $this->theme->display_page($page, $panel); } } } } public function onSetupBuilding(SetupBuildingEvent $event) { $themes = array(); foreach(glob("themes/*") as $theme_dirname) { $name = str_replace("themes/", "", $theme_dirname); $human = str_replace("_", " ", $name); $human = ucwords($human); $themes[$human] = $name; } if(isset($_SERVER["HTTP_HOST"])) { $host = $_SERVER["HTTP_HOST"]; } else { $host = $_SERVER["SERVER_NAME"]; if($_SERVER["SERVER_PORT"] != "80") { $host .= ":" . $_SERVER["SERVER_PORT"]; } } $full = "http://" . $host . $_SERVER["PHP_SELF"]; $test_url = str_replace("/index.php", "/nicetest", $full); $nicescript = ""; $sb = new SetupBlock("General"); $sb->position = 0; $sb->add_text_option("title", "Site title: "); $sb->add_text_option("front_page", "
Front page: "); $sb->add_text_option("main_page", "
Main page: "); $sb->add_text_option("contact_link", "
Contact URL: "); $sb->add_choice_option("theme", $themes, "
Theme: "); //$sb->add_multichoice_option("testarray", array("a" => "b", "c" => "d"), "
Test Array: "); $sb->add_bool_option("nice_urls", "
Nice URLs: "); $sb->add_label("(Javascript inactive, can't test!)$nicescript"); $event->panel->add_block($sb); $sb = new SetupBlock("Remote API Integration"); $sb->add_label("Akismet"); $sb->add_text_option("comment_wordpress_key", "
API key: "); $sb->add_label( "
 
ReCAPTCHA"); $sb->add_text_option("api_recaptcha_privkey", "
Private key: "); $sb->add_text_option("api_recaptcha_pubkey", "
Public key: "); $event->panel->add_block($sb); // Options for Automatic Caching & Minifying $minifyscript = ""; $sb = new SetupBlock("Automatic Caching of CSS & JS"); $sb->add_text_option("autocache_location", "Location: "); $sb->add_label("
This location needs to be writeable by the webserver."); $sb->add_bool_option("autocache_css", "
Automatic caching of CSS: "); $sb->add_bool_option("autocache_js", "
Automatic caching of JS: "); $sb->add_bool_option("autocache_min_css", "
Minimize CSS files: "); $sb->add_bool_option("autocache_min_js", "
Minimize JS files: "); $sb->add_label("
Minifying currently not supported.$minifyscript"); $event->panel->add_block($sb); } public function onConfigSave(ConfigSaveEvent $event) { global $config; foreach($_POST as $_name => $junk) { if(substr($_name, 0, 6) == "_type_") { $name = substr($_name, 6); $type = $_POST["_type_$name"]; $value = isset($_POST["_config_$name"]) ? $_POST["_config_$name"] : null; switch($type) { case "string": $config->set_string($name, $value); break; case "int": $config->set_int($name, $value); break; case "bool": $config->set_bool($name, $value); break; case "array": $config->set_array($name, $value); break; } } } log_warning("setup", "Configuration updated"); } public function onUserBlockBuilding(UserBlockBuildingEvent $event) { global $user; if($user->can("change_setting")) { $event->add_link("Board Config", make_link("setup")); } } } ?>