module.php
4.4 KB
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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
<?php
abstract class ameModule {
protected $tabSlug = '';
protected $tabTitle = '';
protected $tabOrder = 10;
protected $moduleId = '';
protected $moduleDir = '';
protected $settingsFormAction = '';
/**
* @var WPMenuEditor
*/
protected $menuEditor;
public function __construct($menuEditor) {
$this->menuEditor = $menuEditor;
if ( class_exists('ReflectionClass', false) ) {
//This should never throw an exception since the current class must exist for this constructor to be run.
$reflector = new ReflectionClass(get_class($this));
$this->moduleDir = dirname($reflector->getFileName());
$this->moduleId = basename($this->moduleDir);
}
if ( !$this->isEnabledForRequest() ) {
return;
}
add_action('admin_menu_editor-register_scripts', array($this, 'registerScripts'));
//Register the module tab.
if ( ($this->tabSlug !== '') && is_string($this->tabSlug) ) {
add_action('admin_menu_editor-tabs', array($this, 'addTab'), $this->tabOrder);
add_action('admin_menu_editor-section-' . $this->tabSlug, array($this, 'displaySettingsPage'));
add_action('admin_menu_editor-enqueue_scripts-' . $this->tabSlug, array($this, 'enqueueTabScripts'));
add_action('admin_menu_editor-enqueue_styles-' . $this->tabSlug, array($this, 'enqueueTabStyles'));
//Optionally, handle settings form submission.
if ( $this->settingsFormAction !== '' ) {
add_action(
'admin_menu_editor-page_action-' . $this->settingsFormAction,
array($this, '_processAction')
);
}
}
}
/**
* Does this module need to do anything for the current request?
*
* For example, some modules work in the normal dashboard but not in the network admin.
* Other modules don't need to run during AJAX requests or when WP is running Cron jobs.
*/
protected function isEnabledForRequest() {
return true;
}
public function addTab($tabs) {
$tabs[$this->tabSlug] = !empty($this->tabTitle) ? $this->tabTitle : $this->tabSlug;
return $tabs;
}
public function displaySettingsPage() {
$this->menuEditor->display_settings_page_header();
if ( !$this->outputMainTemplate() ) {
printf(
"[ %1\$s : Module \"%2\$s\" doesn't have a primary template. ]",
esc_html(__METHOD__),
esc_html($this->moduleId)
);
}
$this->menuEditor->display_settings_page_footer();
}
protected function getTabUrl($queryParameters = array()) {
$queryParameters = array_merge(
array('sub_section' => $this->tabSlug),
$queryParameters
);
return $this->menuEditor->get_plugin_page_url($queryParameters);
}
protected function outputMainTemplate() {
return $this->outputTemplate($this->moduleId);
}
protected function outputTemplate($name) {
$templateFile = $this->moduleDir . '/' . $name . '-template.php';
if ( file_exists($templateFile) ) {
$moduleTabUrl = $this->getTabUrl();
$templateVariables = $this->getTemplateVariables($name);
if ( !empty($templateVariables) ) {
extract($templateVariables, EXTR_SKIP);
}
require $templateFile;
return true;
}
return false;
}
protected function getTemplateVariables($templateName) {
//Override this method to pass variables to a template.
return array();
}
public function registerScripts() {
//Override this method to register scripts.
}
public function enqueueTabScripts() {
//Override this method to add scripts to the $this->tabSlug tab.
}
public function enqueueTabStyles() {
//Override this method to add stylesheets to the $this->tabSlug tab.
}
/**
* @access private
* @param array $post
*/
public function _processAction($post = array()) {
check_admin_referer($this->settingsFormAction);
$this->handleSettingsForm($post);
}
public function handleSettingsForm($post = array()) {
//Override this method to process a form submitted from the module's tab.
}
protected function getScopedOption($name, $defaultValue = null) {
if ( $this->menuEditor->get_plugin_option('menu_config_scope') === 'site' ) {
return get_option($name, $defaultValue);
} else {
return get_site_option($name, $defaultValue);
}
}
protected function setScopedOption($name, $value, $autoload = null) {
if ( $this->menuEditor->get_plugin_option('menu_config_scope') === 'site' ) {
update_option($name, $value, $autoload);
} else {
WPMenuEditor::atomic_update_site_option($name, $value);
}
}
public function getModuleId() {
return $this->moduleId;
}
public function getTabTitle() {
return $this->tabTitle;
}
}