config = $config; } } // }}} /* SetupBuildingEvent {{{ * * Sent when the setup page is ready to be added to */ class SetupBuildingEvent extends Event { var $panel; public function SetupBuildingEvent($panel) { $this->panel = $panel; } public function get_panel() { return $this->panel; } } // }}} /* SetupPanel {{{ * */ class SetupPanel { var $blocks = array(); public function add_block($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 .= ""; } $this->body .= "\n"; $this->body .= "\n"; // setup page auto-layout counts
tags $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 SimpleExtension { public function onInitExt($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("base_href", "./index.php?q="); $config->set_default_string("theme", "default"); $config->set_default_bool("use_autodate", true); $config->set_default_bool("word_wrap", true); $config->set_default_string("use_autodate", "F j, Y"); } public function onPageRequest($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->is_admin()) { $this->theme->display_permission_denied($page); } else { if($event->get_arg(0) == "save") { 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($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; } $full = "http://" . $_SERVER["SERVER_NAME"] . $_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); } public function onConfigSave($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_info("setup", "Configuration updated"); } public function onUserBlockBuilding($event) { global $user; if($user->is_admin()) { $event->add_link("Board Config", make_link("setup")); } } } ?>