a ton of wiki improvements
This commit is contained in:
parent
d02c803d60
commit
2fce06d8e8
@ -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"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
@ -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'>
|
||||
|
Loading…
x
Reference in New Issue
Block a user