/
MenuAction.php
99 lines (78 loc) · 1.99 KB
/
MenuAction.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
<?php
/**
* Created by PhpStorm.
* User: kkeiper1103
* Date: 10/13/2015
* Time: 12:01 PM
*/
namespace WpJsonApi\Actions;
use League\Plates\Engine;
use Symfony\Component\HttpFoundation\Request;
use WpJsonApi\Message;
use WpJsonApi\Settings;
class MenuAction implements ActionInterface
{
/**
* @var Engine
*/
private $engine;
/**
* @var Settings
*/
private $settings;
/**
* @param Engine $engine
* @param Settings $settings
*/
public function __construct(Engine $engine, Settings $settings) {
$this->engine = $engine;
$this->settings = $settings;
}
/**
* Hook code to be run
*
* @return mixed
*/
public function __invoke()
{
$page_title = "WP Json API Options";
$menu_title = "WP Json API";
$capability = "manage_options";
$menu_slug = "wp-json-api";
add_options_page(
$page_title, $menu_title,
$capability, $menu_slug,
[$this, "render"]
);
}
/**
* @return void
*/
public function render() {
if( strtoupper($_SERVER['REQUEST_METHOD']) === "POST" ) {
$this->processPost();
}
echo $this->engine->render("settings/form", [
"title" => "Api Settings",
"settings" => $this->settings
]);
}
/**
*
*/
protected function processPost() {
$nonce = $_REQUEST['_wpnonce'];
// if the nonce doesn't verify, bail
if( wp_verify_nonce($nonce, "json_api_settings") === false ) {
echo new Message(Message::ERROR, "Nonce Didn't Validate! Settings Not Saved.");
return;
}
// start saving the settings
foreach($_POST['settings'] as $key => $value) {
$this->settings->set($key, $value);
}
// now just save the settings
$this->settings->save();
echo new Message(Message::UPDATED, "Settings Successfully Saved!");
}
}