-
Notifications
You must be signed in to change notification settings - Fork 0
/
AdminNotice.php
145 lines (118 loc) · 3.75 KB
/
AdminNotice.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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
<?php
class AdminNotice
{
/**
* This method will be used to register
* our custom settings admin page
*/
public function init()
{
// Register page
add_action('network_admin_menu', [$this, 'createSettingsPage']);
// Update settings
add_action('network_admin_menu', [$this, 'save']);
// Show notice
add_action( 'admin_notices', [$this, 'showNotice']);
// Add custom CSS
add_action( 'admin_enqueue_scripts', [$this, 'adminCss']);
}
/**
* Set custom settings page.
*
* @return $this
*/
public function createSettingsPage()
{
add_menu_page('Admin Notice', 'Admin Notice', 'create_sites', 'admin_notice', [$this, 'renderSettingsPage'], 'dashicons-warning');
return $this;
}
/**
* Parses the content of the settings page.
*/
public function renderSettingsPage()
{
require_once 'views/settings-page.php';
}
/**
* Check for post submission
* and save settings when required
*/
public function save()
{
if(isset($_POST['submit'])) {
// verify authentication (nonce)
if(! isset($_POST['td_admin_notice_nonce'])) return;
// verify authentication (nonce)
if(! wp_verify_nonce($_POST['td_admin_notice_nonce'], 'td_admin_notice_nonce')) return;
return $this->updateSettings();
}
}
/**
* Update the admin notice settings.
*/
public function updateSettings()
{
$settings = [];
if(isset($_POST['tdan_admin_notice_msg'])) {
$settings['tdan_admin_notice_msg'] = $_POST['tdan_admin_notice_msg'];
}
if(isset($_POST['tdan_admin_notice_priority'])) {
$settings['tdan_admin_notice_priority'] = $_POST['tdan_admin_notice_priority'];
}
if(isset($_POST['tdan_admin_notice_enable'])) {
$settings['tdan_admin_notice_enable'] = $_POST['tdan_admin_notice_enable'];
}
if($settings) {
// update new settings
update_site_option('td_admin_notice_settings', $settings);
} else {
// empty settings, revert back to default
delete_site_option('td_admin_notice_settings');
}
$this->updated = true;
}
/**
* Get settings
*
* @param $setting string optional setting name
* @return array|null
*/
public function getSettings($setting = '')
{
global $my_plugin_settings;
if(isset($my_plugin_settings)) {
if($setting) {
return isset($my_plugin_settings[$setting]) ? $my_plugin_settings[$setting] : null;
}
return $my_plugin_settings;
}
$my_plugin_settings = wp_parse_args(get_site_option('td_admin_notice_settings'), array(
'tdan_admin_notice_msg' => null,
'tdan_admin_notice_priority' => null,
'tdan_admin_notice_enable' => null,
));
if($setting) {
return isset($my_plugin_settings[$setting]) ? $my_plugin_settings[$setting] : null;
}
return $my_plugin_settings;
}
/**
* Show the notification to all users.
*/
public function showNotice()
{
$message = $this->getSettings('tdan_admin_notice_msg');
$enabled = $this->getSettings('tdan_admin_notice_enable');
$priority = $this->getSettings('tdan_admin_notice_priority');
if($message !== '' && $enabled === 'true') {
include __DIR__ . '/views/notice.php';
}
}
/**
* Add custom css
*/
public function adminCss()
{
wp_enqueue_style( 'td-admin-notice-styles', plugin_dir_url( __FILE__ ) . '/css/admin-notice.css');
}
}