"Page editor", "version" => "0.10", "author" => "Starbeamrainbowlabs", "description" => "Allows you to edit pages by adding the edit and save actions. You should probably include this one.", "id" => "page-edit", "code" => function() { /* * _ _ _ * ___ __| (_) |_ * / _ \/ _` | | __| * | __/ (_| | | |_ * \___|\__,_|_|\__| * %edit% */ add_action("edit", function() { global $pageindex, $settings, $env; $filename = "$env->page.md"; $page = $env->page; $creatingpage = !isset($pageindex->$page); if((isset($_GET["newpage"]) and $_GET["newpage"] == "true") or $creatingpage) { $title = "Creating $env->page"; } else { $title = "Editing $env->page"; } $pagetext = ""; if(isset($pageindex->$page)) { $pagetext = file_get_contents($filename); } if((!$env->is_logged_in and !$settings->anonedits) or // if we aren't logged in and anonymous edits are disbled !$settings->editing or// or editing is disabled ($pageindex->$page->protect and !$env->is_admin) // the page is protected and the user isn't an admin ) { if(!$creatingpage) { // The page already exists - let the user view the page source exit(page_renderer::render_main("Viewing source for $env->page", "

$settings->sitename does not allow anonymous users to make edits. If you are in fact logged in, then this page is probably protected, and you aren't an administrator or moderator. You can view the source of $env->page below, but you can't edit it.

")); } else { http_response_code(404); exit(page_renderer::render_main("404 - $env->page", "

The page $env->page does not exist, but you do not have permission to create it.

If you haven't already, perhaps you should try logging in.

")); } } $content = "

$title

"; if(!$env->is_logged_in and $settings->anonedits) { $content .= "

Warning: You are not logged in! Your IP address may be recorded.

"; } $content .= "

$settings->editing_message

"; exit(page_renderer::render_main("$title - $settings->sitename", $content)); }); /* * * ___ __ ___ _____ * / __|/ _` \ \ / / _ \ * \__ \ (_| |\ V / __/ * |___/\__,_| \_/ \___| * %save% */ add_action("save", function() { global $pageindex, $settings, $env, $save_preprocessors; if(!$settings->editing) { header("location: index.php?page=$env->page"); exit(page_renderer::render_main("Error saving edit", "

Editing is currently disabled on this wiki.

")); } if(!$env->is_logged_in and !$settings->anonedits) { http_response_code(403); header("refresh: 5; url=index.php?page=$env->page"); exit("You are not logged in, so you are not allowed to save pages on $settings->sitename. Redirecting in 5 seconds...."); } $page = $env->page; if($pageindex->$page->protect and !$env->is_admin) { http_response_code(403); header("refresh: 5; url=index.php?page=$env->page"); exit("$env->page is protected, and you aren't logged in as an administrastor or moderator. Your edit was not saved. Redirecting in 5 seconds..."); } if(!isset($_POST["content"])) { http_response_code(400); header("refresh: 5; url=index.php?page=$env->page"); exit("Bad request: No content specified."); } // Make sure that the directory in which the page needs to be saved exists if(!is_dir(dirname("$env->page.md"))) { // Recursively create the directory if needed mkdir(dirname("$env->page.md"), null, true); } $pagedata = htmlentities($_POST["content"], ENT_QUOTES); // Execute all the preprocessors foreach($save_preprocessors as $func) { $func($pagedata); } if(file_put_contents("$env->page.md", $pagedata) !== false) { $page = $env->page; // Make sure that this page's parents exist check_subpage_parents($page); //update the page index if(!isset($pageindex->$page)) { $pageindex->$page = new stdClass(); $pageindex->$page->filename = "$env->page.md"; } $pageindex->$page->size = strlen($_POST["content"]); $pageindex->$page->lastmodified = time(); if($env->is_logged_in) $pageindex->$page->lasteditor = utf8_encode($env->user); else $pageindex->$page->lasteditor = utf8_encode("anonymous"); file_put_contents("./pageindex.json", json_encode($pageindex, JSON_PRETTY_PRINT)); if(isset($_GET["newpage"])) http_response_code(201); else http_response_code(200); header("location: index.php?page=$env->page&edit_status=success"); exit(); } else { http_response_code(507); exit(page_renderer::render_main("Error saving page - $settings->sitename", "

$settings->sitename failed to write your changes to the disk. Your changes have not been saved, but you might be able to recover your edit by pressing the back button in your browser.

Please tell the administrator of this wiki (" . $settings->admindetails["name"] . ") about this problem.

")); } }); } ]); ?>