a ton of wiki improvements

This commit is contained in:
Shish 2009-07-28 09:40:37 +01:00
parent d02c803d60
commit 2fce06d8e8
3 changed files with 172 additions and 35 deletions

View File

@ -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"));
}
}
}

View File

@ -1,12 +1,114 @@
<?php
class WikiTest extends SCoreWebTestCase {
function testWiki() {
$this->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();
}
}
?>

View File

@ -51,7 +51,7 @@ class WikiTheme extends Themelet {
$lock = "";
}
return "
<form action='".make_link("wiki/$u_title", "save=on")."' method='POST'>
<form action='".make_link("wiki_admin/save")."' method='POST'>
<input type='hidden' name='title' value='$h_title'>
<input type='hidden' name='revision' value='$i_revision'>
<textarea name='body' style='width: 100%' rows='20'>".html_escape($page->body)."</textarea>
@ -68,9 +68,30 @@ class WikiTheme extends Themelet {
send_event($tfe);
global $user;
$edit = Wiki::can_edit($user, $page) ?
"[<a href='".make_link("wiki/{$page->title}", "edit=on")."'>edit</a>] " :
$edit = "<table><tr>";
$edit .= Wiki::can_edit($user, $page) ?
"
<td><form action='".make_link("wiki_admin/edit")."' method='POST'>
<input type='hidden' name='title' value='".html_escape($page->title)."'>
<input type='hidden' name='revision' value='".int_escape($page->revision)."'>
<input type='submit' value='Edit'>
</form></td>
" :
"";
if($user->is_admin()) {
$edit .= "
<td><form action='".make_link("wiki_admin/delete_revision")."' method='POST'>
<input type='hidden' name='title' value='".html_escape($page->title)."'>
<input type='hidden' name='revision' value='".int_escape($page->revision)."'>
<input type='submit' value='Delete This Version'>
</form></td>
<td><form action='".make_link("wiki_admin/delete_all")."' method='POST'>
<input type='hidden' name='title' value='".html_escape($page->title)."'>
<input type='submit' value='Delete All'>
</form></td>
";
}
$edit .= "</tr></table>";
return "
<div class='wiki-page'>