"Settings GUI", "version" => "0.1", "author" => "Starbeamrainbowlabs", "description" => "The module everyone has been waiting for! Adds a web based gui that lets mods change the wiki settings.", "id" => "feature-guiconfig", "code" => function() { global $settings; /** * @api {get} ?action=configure Get a page to change the global wiki settings * @apiName ConfigureSettings * @apiGroup Utility * @apiPermission Moderator */ /* * ██████ ██████ ███ ██ ███████ ██ ██████ ██ ██ ██████ ███████ * ██ ██ ██ ████ ██ ██ ██ ██ ██ ██ ██ ██ ██ * ██ ██ ██ ██ ██ ██ █████ ██ ██ ███ ██ ██ ██████ █████ * ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ * ██████ ██████ ██ ████ ██ ██ ██████ ██████ ██ ██ ███████ */ add_action("configure", function() { global $settings, $env, $guiConfig; if(!$env->is_admin) { $errorMessage = "

You don't have permission to change $settings->sitename's master settings.

\n"; if(!$env->is_logged_in) $errorMessage .= "

You could try logging in.

"; else $errorMessage .= "

You could try logging out and then logging in again with a different account that has the appropriate privileges..

"; exit(page_renderer::render_main("Error - $settings->sitename", $errorMessage)); } $content = "

Master Control Panel

\n"; $content .= "

This page lets you configure $settings->sitename's master settings. Please be careful - you can break things easily on this page if you're not careful!

\n"; $content .= "

Mouse over the name of each setting to see a description of what it does.

\n"; $content .= "
\n"; foreach($guiConfig as $configKey => $configData) { // Don't display the site secret~! // Apparently it got lost in translation, but I'll be re-adding // it again at some point I'm sure - so support for it is // included here. if($configKey == "sitesecret") continue; $reverse = false; $inputControl = ""; $label = ""; switch($configData->type) { case "url": case "email": case "number": case "text": $inputControl = ""; break; case "textarea": $inputControl = ""; break; case "checkbox": $reverse = true; $inputControl = "$configKey ? " checked" : "") . " />"; break; default: $label = ""; $inputControl = "

Sorry! The $configKey setting isn't editable yet through the gui. Please try editing peppermint.json for the time being.

"; break; } $content .= "
\n\t"; $content .= $reverse ? "$inputControl\n\t$label" : "$label\n\t$inputControl"; $content .= "\n
\n"; } $content .= ""; $content .= "
\n"; exit(page_renderer::render_main("Master Control Panel - $settings->sitename", $content)); }); /** * @api {post} ?action=configure-save Save changes to the global wiki settings * @apiName ConfigureSettings * @apiGroup Utility * @apiPermission Moderator */ /* * ██████ ██████ ███ ██ ███████ ██ ██████ ██ ██ ██████ ███████ * ██ ██ ██ ████ ██ ██ ██ ██ ██ ██ ██ ██ ██ * ██ ██ ██ ██ ██ ██ █████ ██ ██ ███ ██ ██ ██████ █████ █████ * ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ * ██████ ██████ ██ ████ ██ ██ ██████ ██████ ██ ██ ███████ * ███████ █████ ██ ██ ███████ * ██ ██ ██ ██ ██ ██ * ███████ ███████ ██ ██ █████ * ██ ██ ██ ██ ██ ██ * ███████ ██ ██ ████ ███████ */ add_action("configure-save", function () { global $env, $settings, $paths, $defaultCSS; // If the user isn't an admin, then the regular configuration page will display an appropriate error if(!$env->is_admin) { http_response_code(307); header("location: ?action=configure"); exit(); } // Build a new settings object $newSettings = new stdClass(); foreach($settings as $configKey => $rawValue) { $configValue = $rawValue; if(isset($_POST[$configKey])) { $decodedConfigValue = json_decode($_POST[$configKey]); if(json_last_error() === JSON_ERROR_NONE) $configValue = $decodedConfigValue; else $configValue = $_POST[$configKey]; // Convert boolean settings to a boolean, since POST // parameters don't decode correctly. if(is_bool($settings->$configKey)) $configValue = in_array($configValue, [ 1, "on"], true) ? true : false; // If the CSS hasn't changed, then we can replace it with // 'auto' - this will ensure that upon update the new // default CSS will be used. Also make sure we ignore line // ending nonsense & differences here, since they really // don't matter if($configKey === "css" && str_replace("\r\n", "\n", $defaultCSS) === str_replace("\r\n", "\n", $configValue)) $configValue = "auto"; } $newSettings->$configKey = $configValue; } // Take a backup of the current settings file rename($paths->settings_file, "$paths->settings_file.bak"); // Save the new settings file file_put_contents($paths->settings_file, json_encode($newSettings, JSON_PRETTY_PRINT)); $content = "

Master settings updated sucessfully

\n"; $content .= "

$settings->sitename's master settings file has been updated successfully. A backup of the original settings has been created under the name peppermint.json.bak, just in case. You can go back and continue editing the master settings file, or you can go to the " . htmlentities($settings->defaultpage) . ".

\n"; $content .= "

For reference, the newly generated master settings file is as follows:

\n"; $content .= "\n"; exit(page_renderer::render_main("Master Settings Updated - $settings->sitename", $content)); }); add_help_section("800-raw-page-content", "Viewing Raw Page Content", "

Although you can use the edit page to view a page's source, you can also ask $settings->sitename to send you the raw page source and nothing else. This feature is intented for those who want to automate their interaction with $settings->sitename.

To use this feature, navigate to the page for which you want to see the source, and then alter the action parameter in the url's query string to be raw. If the action parameter doesn't exist, add it. Note that when used on an file's page this action will return the source of the description and not the file itself.

"); } ]); ?>