diff --git a/contrib/wiki/main.php b/contrib/wiki/main.php index cb9fe833..73d6c22f 100644 --- a/contrib/wiki/main.php +++ b/contrib/wiki/main.php @@ -64,39 +64,53 @@ class Wiki extends SimpleExtension { } $content = $this->get_page($title); + $this->theme->display_page($page, $content, $this->get_page("wiki:sidebar")); + } + else if($event->page_matches("wiki_admin/edit")) { + $content = $this->get_page($_POST['title']); + $this->theme->display_page_editor($page, $content); + } + else if($event->page_matches("wiki_admin/save")) { + $title = $_POST['title']; + $rev = int_escape($_POST['revision']); + $body = $_POST['body']; + $lock = $user->is_admin() && isset($_POST['lock']) && ($_POST['lock'] == "on"); - // save the POST data as the page - if(isset($_GET['save']) && $_GET['save'] == "on") { - $title = $_POST['title']; - $rev = int_escape($_POST['revision']); - $body = $_POST['body']; - $lock = isset($_POST['lock']) && ($_POST['lock'] == "on"); + if($this->can_edit($user, $this->get_page($title))) { + $wikipage = $this->get_page($title); + $wikipage->rev = $rev; + $wikipage->body = $body; + $wikipage->locked = $lock; + send_event(new WikiUpdateEvent($user, $wikipage)); - if($this->can_edit($user, $this->get_page($title))) { - $wikipage = $this->get_page($title); - $wikipage->rev = $rev; - $wikipage->body = $body; - $wikipage->locked = $user->is_admin() ? $lock : false; - send_event(new WikiUpdateEvent($user, $wikipage)); - - $u_title = url_escape($title); - - $page->set_mode("redirect"); - $page->set_redirect(make_link("wiki/$u_title")); - } - else { - $this->theme->display_permission_denied($page); - } + $u_title = url_escape($title); + $page->set_mode("redirect"); + $page->set_redirect(make_link("wiki/$u_title")); } - - // edit - else if(isset($_GET['edit']) && $_GET['edit'] == "on") { - $this->theme->display_page_editor($page, $content); - } - - // default: display the page else { - $this->theme->display_page($page, $content, $this->get_page("wiki:sidebar")); + $this->theme->display_permission_denied($page); + } + } + else if($event->page_matches("wiki_admin/delete_revision")) { + if($user->is_admin()) { + global $database; + $database->Execute( + "DELETE FROM wiki_pages WHERE title=? AND revision=?", + array($_POST["title"], $_POST["revision"])); + $u_title = url_escape($_POST["title"]); + $page->set_mode("redirect"); + $page->set_redirect(make_link("wiki/$u_title")); + } + } + else if($event->page_matches("wiki_admin/delete_all")) { + if($user->is_admin()) { + global $database; + $database->Execute( + "DELETE FROM wiki_pages WHERE title=?", + array($_POST["title"])); + $u_title = url_escape($_POST["title"]); + $page->set_mode("redirect"); + $page->set_redirect(make_link("wiki/$u_title")); } } } diff --git a/contrib/wiki/test.php b/contrib/wiki/test.php index 0f3ed439..3b888e54 100644 --- a/contrib/wiki/test.php +++ b/contrib/wiki/test.php @@ -1,12 +1,114 @@ log_in_as_admin(); + function testIndex() { $this->get_page("wiki"); $this->assertTitle("Index"); + $this->assertText("This is a default page"); + } + + function testAccess() { + foreach(array("anon", "user", "admin") as $user) { + foreach(array(false, true) as $allowed) { + // admin has no settings to set + if($user != "admin") { + $this->log_in_as_admin(); + $this->get_page("setup"); + $this->setField("_config_wiki_edit_$user", $allowed); + $this->click("Save Settings"); + $this->log_out(); + } + + if($user == "user") {$this->log_in_as_user();} + if($user == "admin") {$this->log_in_as_admin();} + + $this->get_page("wiki/test"); + $this->assertTitle("test"); + $this->assertText("This is a default page"); + if($allowed || $user == "admin") { + $this->click("Edit"); + $this->assertText("Editor"); + } + else { + $this->click("Edit"); + $this->assertNoText("Editor"); + } + + if($user == "user" || $user == "admin") {$this->log_out();} + } + } + } + + function testLock() { + $this->log_in_as_admin(); + $this->get_page("setup"); + $this->setField("_config_wiki_Edit_anon", false); + $this->setField("_config_wiki_Edit_user", true); + $this->click("Save Settings"); + + $this->get_page("wiki/test_locked"); + $this->assertTitle("test_locked"); + $this->assertText("This is a default page"); + $this->click("Edit"); + $this->setField("body", "test_locked content"); + $this->setField("lock", true); + $this->click("Save"); $this->log_out(); - # FIXME: needs a ton of tests... + $this->log_in_as_user(); + $this->get_page("wiki/test_locked"); + $this->assertTitle("test_locked"); + $this->assertText("test_locked content"); + $this->assertNoText("Edit"); + $this->log_out(); + + $this->get_page("wiki/test_locked"); + $this->assertTitle("test_locked"); + $this->assertText("test_locked content"); + $this->assertNoText("Edit"); + + $this->log_in_as_admin(); + $this->get_page("wiki/test_locked"); + $this->click("Delete All"); + $this->log_out(); + } + + function testDefault() { + $this->log_in_as_admin(); + $this->get_page("wiki/wiki:default"); + $this->assertTitle("wiki:default"); + $this->assertText("This is a default page"); + $this->click("Edit"); + $this->setField("body", "Empty page! Fill it!"); + $this->click("Save"); + + $this->get_page("wiki/something"); + $this->assertText("Empty page! Fill it!"); + + $this->get_page("wiki/wiki:default"); + $this->click("Delete All"); + $this->log_out(); + } + + function testRevisions() { + $this->log_in_as_admin(); + $this->get_page("wiki/test"); + $this->assertTitle("test"); + $this->assertText("This is a default page"); + $this->click("Edit"); + $this->setField("body", "Mooooo 1"); + $this->click("Save"); + $this->assertText("Mooooo 1"); + $this->assertText("Revision 1"); + $this->click("Edit"); + $this->setField("body", "Mooooo 2"); + $this->click("Save"); + $this->assertText("Mooooo 2"); + $this->assertText("Revision 2"); + $this->click("Delete This Version"); + $this->assertText("Mooooo 1"); + $this->assertText("Revision 1"); + $this->click("Delete All"); + $this->log_out(); } } ?> diff --git a/contrib/wiki/theme.php b/contrib/wiki/theme.php index 23a6d511..84960bd3 100644 --- a/contrib/wiki/theme.php +++ b/contrib/wiki/theme.php @@ -51,7 +51,7 @@ class WikiTheme extends Themelet { $lock = ""; } return " -