mirror of
https://github.com/sbrl/Pepperminty-Wiki.git
synced 2024-11-26 05:32:59 +00:00
Finish implementing the watchlist backend. Now to test it!
This commit is contained in:
parent
f7ee581709
commit
85fb5cd6c1
1 changed files with 38 additions and 4 deletions
|
@ -15,6 +15,7 @@ register_module([
|
||||||
* @apiParam {string} format The format to return the watchlist in.
|
* @apiParam {string} format The format to return the watchlist in.
|
||||||
*
|
*
|
||||||
* @apiError WatchlistsDisabled Watchlists are disabled because the watchlists_enable setting is set to false.
|
* @apiError WatchlistsDisabled Watchlists are disabled because the watchlists_enable setting is set to false.
|
||||||
|
* @apiError NotLoggedIn You aren't logged in, so you can't edit your watchlist (only logged in users have a watchlist).
|
||||||
* @apiError NoEmailAddress The currently logged in user doesn't have an email address specified in their account.
|
* @apiError NoEmailAddress The currently logged in user doesn't have an email address specified in their account.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -96,16 +97,21 @@ register_module([
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @api {get} ?action=watchlist-edit&do={do_verb} Edit your watchlist
|
* @api {get} ?action=watchlist-edit&do={do_verb}[&page={pagename}][&returnto=url] Edit your watchlist
|
||||||
* @apiName WatchlistEdit
|
* @apiName WatchlistEdit
|
||||||
* @apiGroup Settings
|
* @apiGroup Settings
|
||||||
* @apiPermission User
|
* @apiPermission User
|
||||||
*
|
*
|
||||||
* TODO: Finish filling this out
|
* TODO: Finish filling this out
|
||||||
* @apiParam {string} string The string to hash.
|
* @apiParam {string} pagename The name of the page to operate on.
|
||||||
* @apiParam {boolean} raw Whether to return the hashed password as a raw string instead of as part of an HTML page.
|
* @apiParam {string} do The thing to do. Supported verbs: add, remove, clear. The first 2 require the page GET parameter to be specified, but the clear verb doesn't (as it clears the entire list).
|
||||||
|
* @apiParam {string} returnto Optional. Specifies a URL to redirect to (with the http status code 302) upon success.
|
||||||
*
|
*
|
||||||
* @apiError ParamNotFound The string parameter was not specified.
|
* @apiError WatchlistsDisabled Watchlists are disabled because the watchlists_enable setting is set to false.
|
||||||
|
* @apiError NotLoggedIn You aren't logged in, so you can't edit your watchlist (only logged in users have a watchlist).
|
||||||
|
* @apiError NoEmailAddress The currently logged in user doesn't have an email address specified in their account.
|
||||||
|
* @apiError DoVerbNotRecognised The specified do verb was not recognised. Supported verbs: add, remove, clear (a canonical list is returned with this error).
|
||||||
|
* @apiError PageNotFound The page name was not found in your watchlist.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -135,22 +141,50 @@ register_module([
|
||||||
header("x-problem: no-email-address-in-user-preferences");
|
header("x-problem: no-email-address-in-user-preferences");
|
||||||
exit(page_renderer::render_main("No email address specified -$settings->sitename", "<p>You are logged in, but have not specified an email address to send notifications to. Try specifying one in your <a href='?action=user-preferences'>user preferences</a> and then coming back here.</p>"));
|
exit(page_renderer::render_main("No email address specified -$settings->sitename", "<p>You are logged in, but have not specified an email address to send notifications to. Try specifying one in your <a href='?action=user-preferences'>user preferences</a> and then coming back here.</p>"));
|
||||||
}
|
}
|
||||||
|
// The thing we should do.
|
||||||
$do = $_GET["do"] ?? "null";
|
$do = $_GET["do"] ?? "null";
|
||||||
|
// The location we should redirect to after doing it successfully, if anywhere
|
||||||
|
$returnto = $_GET["returnto"] ?? null;
|
||||||
|
|
||||||
|
// If the watchlist doesn't exist, create it
|
||||||
|
// Note that saving this isn't essential - so we don't bother unless we perform some other action too.
|
||||||
if(!is_array($env->user_data->watchlist))
|
if(!is_array($env->user_data->watchlist))
|
||||||
$env->user_data->watchlist = [];
|
$env->user_data->watchlist = [];
|
||||||
|
|
||||||
switch($do) {
|
switch($do) {
|
||||||
case "add":
|
case "add":
|
||||||
|
// Add the new page to the watchlist
|
||||||
$env->user_data->watchlist[] = $env->page;
|
$env->user_data->watchlist[] = $env->page;
|
||||||
|
// Sort the list
|
||||||
$collator = new Collator();
|
$collator = new Collator();
|
||||||
$collator->sort($env->user_data->watchlist, SORT_NATURAL | SORT_FLAG_CASE);
|
$collator->sort($env->user_data->watchlist, SORT_NATURAL | SORT_FLAG_CASE);
|
||||||
|
// Save back to disk
|
||||||
|
save_settings();
|
||||||
break;
|
break;
|
||||||
|
case "remove":
|
||||||
|
$index = array_search($env->page, $env->user_data->watchlist);
|
||||||
|
if($index === false) {
|
||||||
|
http_response_code(400);
|
||||||
|
exit(page_renderer::render_main("Watchlist item not found - Error - $settings->sitename", "<p>Oops! The page with the name <em>".htmlentities($env->page)."</em> isn't currently on your watchlist, so it couldn't be removed. Perhaps you already removed it?</p>
|
||||||
|
<p>Try going <a href='?action=watchlist'>back to your watchlist</a>.</p>"));
|
||||||
|
}
|
||||||
|
array_splice($env->user_data->watchlist, $index, 1);
|
||||||
|
save_settings();
|
||||||
|
break;
|
||||||
|
case "clear":
|
||||||
|
$env->user_data->watchlist = [];
|
||||||
|
save_settings();
|
||||||
default:
|
default:
|
||||||
http_response_code(400);
|
http_response_code(400);
|
||||||
header("content-type: text/plain");
|
header("content-type: text/plain");
|
||||||
exit("Error: The do verb '$do' wasn't recognised. Current verbs supported: add, remove, clear");
|
exit("Error: The do verb '$do' wasn't recognised. Current verbs supported: add, remove, clear");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if($redirect) {
|
||||||
|
http_response_code(302);
|
||||||
|
header("location: $returnto");
|
||||||
|
}
|
||||||
|
exit(page_renderer::render_main("Watchlist update successful", "<p>Your watchlist was updated successful. <a href='".htmlentities($returnto)."'>Click here</a> to return to your previous page.</p>"));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
]);
|
]);
|
||||||
|
|
Loading…
Reference in a new issue