Skip to content

Commit 173c907

Browse files
github-36: support default settings
1 parent a91a9d2 commit 173c907

File tree

4 files changed

+149
-18
lines changed

4 files changed

+149
-18
lines changed

src/Plugin.php

Lines changed: 52 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -81,20 +81,29 @@ private function fetchSettings() {
8181
trim($options['client_side_access_token']) :
8282
'',
8383

84-
'environment' => (!empty($options['environment'])) ?
85-
esc_attr(trim($options['environment'])) :
86-
'',
87-
8884
'logging_level' => (!empty($options['logging_level'])) ?
8985
esc_attr(trim($options['logging_level'])) :
9086
Settings::DEFAULT_LOGGING_LEVEL
9187
);
9288

9389
foreach (\Rollbar\Config::listOptions() as $option) {
9490

95-
$settings[$option] = (!empty($options[$option])) ?
96-
esc_attr(trim($options[$option])) :
97-
'';
91+
$value = $options[$option];
92+
93+
if (!empty($value)) {
94+
95+
if (is_string($value)) {
96+
$value = esc_attr(trim($value));
97+
} else if (is_array($value)) {
98+
// TODO: convert array to PHP code
99+
$value = $value;
100+
}
101+
102+
} else {
103+
$value = $this->getDefaultOption($option);
104+
}
105+
106+
$settings[$option] = $value;
98107

99108
}
100109

@@ -261,6 +270,42 @@ public function buildJsConfig()
261270

262271
return $rollbarJsConfig;
263272
}
273+
274+
public function updateSettings(array $settings)
275+
{
276+
$option = get_option('rollbar_wp');
277+
278+
$option = array_merge($option, $settings);
279+
280+
foreach ($settings as $setting => $value) {
281+
$this->settings[$setting] = $value;
282+
}
283+
284+
update_option('rollbar_wp', $option);
285+
}
286+
287+
public function restoreDefaults()
288+
{
289+
$settings = array();
290+
291+
foreach (\Rollbar\Config::listOptions() as $option) {
292+
$settings[$option] = $this->getDefaultOption($option);
293+
}
294+
295+
$this->updateSettings($settings);
296+
}
297+
298+
public function getDefaultOption($setting)
299+
{
300+
$defaults = \Rollbar\Defaults::get();
301+
$method = lcfirst(str_replace('_', '', ucwords($setting, '_')));
302+
303+
if (method_exists($defaults, $method)) {
304+
return $defaults->$method();
305+
}
306+
307+
return null;
308+
}
264309
}
265310

266311
\add_action( 'plugins_loaded', '\Rollbar\Wordpress\Plugin::load' );

src/Settings.php

Lines changed: 71 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ public static function init() {
3333
$instance = self::instance();
3434
\add_action('admin_menu', array(&$instance, 'addAdminMenu'));
3535
\add_action('admin_init', array(&$instance, 'addSettings'));
36-
3736
\add_action('admin_enqueue_scripts', function($hook) {
3837

3938
if ($hook != 'settings_page_rollbar_wp') {
@@ -82,7 +81,17 @@ public static function init() {
8281
);
8382
\wp_enqueue_style('RollbarWordpressSettings');
8483
});
84+
85+
\add_action('init', array(get_called_class(), 'registerSession'));
8586

87+
\add_action('admin_post_rollbar_wp_restore_defaults', array(get_called_class(), 'restoreDefaultsAction'));
88+
}
89+
90+
public static function registerSession()
91+
{
92+
if( !session_id() ) {
93+
session_start();
94+
}
8695
}
8796

8897
function addAdminMenu()
@@ -252,7 +261,16 @@ function accessTokenRender()
252261

253262
function optionsPage()
254263
{
255-
264+
265+
if (isset($_SESSION['rollbar_wp_flash_message'])) {
266+
?>
267+
<div class="<?php echo $_SESSION['rollbar_wp_flash_message']['type']; ?> notice is-dismissable">
268+
<p><?php echo $_SESSION['rollbar_wp_flash_message']['message']; ?></p>
269+
</div>
270+
<?php
271+
unset($_SESSION['rollbar_wp_flash_message']);
272+
}
273+
256274
?>
257275
<form action='options.php' method='post'>
258276

@@ -267,16 +285,27 @@ function optionsPage()
267285
<?php
268286
\submit_button();
269287
?>
270-
271-
<button
272-
type="button"
273-
class="button button-secondary"
274-
name="test-logging"
275-
id="rollbar_wp_test_logging">
276-
Send test message to Rollbar
277-
</button>
278288

279289
</form>
290+
291+
<form action="<?php echo esc_url( admin_url('admin-post.php') ); ?>" method="post">
292+
<input type="hidden" name="action" value="rollbar_wp_restore_defaults" />
293+
<input
294+
type="submit"
295+
class="button button-secondary"
296+
name="restore-defaults"
297+
id="rollbar_wp_restore_defaults"
298+
value="Restore defaults"
299+
/>
300+
</form>
301+
302+
<button
303+
type="button"
304+
class="button button-secondary"
305+
name="test-logging"
306+
id="rollbar_wp_test_logging">
307+
Send test message to Rollbar
308+
</button>
280309
<?php
281310
}
282311

@@ -298,6 +327,38 @@ private function parseOptionDetails($option)
298327

299328
return $desc;
300329
}
330+
331+
public function getDefaultSetting($setting)
332+
{
333+
$defaults = \Rollbar\Defaults::get();
334+
$method = lcfirst(str_replace('_', '', ucwords($setting, '_')));
335+
336+
if (method_exists($defaults, $method)) {
337+
return $defaults->$method();
338+
}
339+
340+
return null;
341+
}
342+
343+
public static function restoreDefaultsAction()
344+
{
345+
\Rollbar\Wordpress\Plugin::instance()->restoreDefaults();
346+
347+
self::flashRedirect(
348+
"updated",
349+
__("Default Rollbar settings restored.", "rollbar")
350+
);
351+
}
352+
353+
public static function flashRedirect($type, $message)
354+
{
355+
$_SESSION['rollbar_wp_flash_message'] = array(
356+
"type" => $type,
357+
"message" => $message
358+
);
359+
360+
wp_redirect(admin_url('/options-general.php?page=rollbar_wp'));
361+
}
301362
}
302363

303364
?>

src/UI.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ public function getIncludedErrnoDescriptions($value)
193193
'base_api_url' => self::SETTING_INPUT_TYPE_SKIP,
194194
'branch' => self::SETTING_INPUT_TYPE_TEXT,
195195
'capture_error_stacktraces' => self::SETTING_INPUT_TYPE_BOOLEAN,
196-
'checkIgnore' => self::SETTING_INPUT_TYPE_PHP,
196+
'check_ignore' => self::SETTING_INPUT_TYPE_PHP,
197197
'code_version' => self::SETTING_INPUT_TYPE_TEXT,
198198
'custom' => self::SETTING_INPUT_TYPE_PHP,
199199
'enable_utf8_sanitization' => self::SETTING_INPUT_TYPE_BOOLEAN,

tests/SettingsTest.php

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php
2+
namespace Rollbar\Wordpress\Tests;
3+
4+
use Rollbar\Payload\Level;
5+
6+
/**
7+
* Class SettingsTest
8+
*
9+
* @package Rollbar\Wordpress\Tests
10+
*/
11+
class SettingsTest extends BaseTestCase {
12+
13+
private $subject;
14+
15+
public function setUp()
16+
{
17+
$this->subject = \Rollbar\Wordpress\Settings::instance();
18+
}
19+
20+
public function testGetDefaultSetting()
21+
{
22+
$this->assertEquals('production', $this->subject->getDefaultSetting('environment'));
23+
$this->assertTrue($this->subject->getDefaultSetting('capture_error_stacktraces'));
24+
}
25+
}

0 commit comments

Comments
 (0)