Test Failed
Push — master ( 87eb8d...25783a )
by Paul
03:58
created

SettingsController   A

Complexity

Total Complexity 13

Size/Duplication

Total Lines 78
Duplicated Lines 0 %

Test Coverage

Coverage 10.53%

Importance

Changes 0
Metric Value
eloc 31
dl 0
loc 78
ccs 4
cts 38
cp 0.1053
rs 10
c 0
b 0
f 0
wmc 13

5 Methods

Rating   Name   Duplication   Size   Complexity  
A sanitizeGeneral() 0 6 2
A registerSettings() 0 4 1
A sanitizeTranslations() 0 14 4
A callbackRegisterSettings() 0 18 4
A sanitizeSubmissions() 0 7 2
1
<?php
2
3
namespace GeminiLabs\SiteReviews\Controllers;
4
5
use GeminiLabs\SiteReviews\Application;
6
use GeminiLabs\SiteReviews\Controllers\Controller;
7
use GeminiLabs\SiteReviews\Database\OptionManager;
8
use GeminiLabs\SiteReviews\Modules\Notice;
9
10
class SettingsController extends Controller
11
{
12
	/**
13
	 * @param mixed $input
14
	 * @return array
15
	 * @callback register_setting
16
	 */
17
	public function callbackRegisterSettings( $input )
18
	{
19
		static $triggered = false;
20
		if( $triggered === true ) {
21
			return $input;
22
		}
23
		$triggered = true;
24
		if( !is_array( $input )) {
25
			$input = ['settings' => []];
26
		}
27
		if( key( $input ) == 'settings' ) {
28
			glsr( Notice::class )->addSuccess( __( 'Settings updated.', 'site-reviews' ));
29
		}
30
		$options = array_replace_recursive( glsr( OptionManager::class )->all(), $input );
31
		$options = $this->sanitizeGeneral( $input, $options );
32
		$options = $this->sanitizeSubmissions( $input, $options );
33
		$options = $this->sanitizeTranslations( $input, $options );
34
		return $options;
35
	}
36
37
	/**
38
	 * @return void
39
	 * @action admin_init
40
	 */
41 1
	public function registerSettings()
42
	{
43 1
		register_setting( Application::ID.'-settings', OptionManager::databaseKey(), [
44 1
			'sanitize_callback' => [$this, 'callbackRegisterSettings'],
45
		]);
46 1
	}
47
48
	/**
49
	 * @return array
50
	 */
51
	protected function sanitizeGeneral( array $input, array $options )
52
	{
53
		if( trim( $input['settings']['general']['notification_message'] ) == '' ) {
54
			$options['settings']['general']['notification_message'] = glsr()->defaults['settings']['general']['notification_message'];
55
		}
56
		return $options;
57
	}
58
59
	/**
60
	 * @return array
61
	 */
62
	protected function sanitizeSubmissions( array $input, array $options )
63
	{
64
		$inputForm = $input['settings']['submissions'];
65
		$options['settings']['submissions']['required'] = isset( $inputForm['required'] )
66
			? $inputForm['required']
67
			: [];
68
		return $options;
69
	}
70
71
	/**
72
	 * @return array
73
	 */
74
	protected function sanitizeTranslations( array $input, array $options )
75
	{
76
		if( isset( $input['settings']['strings'] )) {
77
			$options['settings']['strings'] = array_values( array_filter( $input['settings']['strings'] ));
78
			array_walk( $options['settings']['strings'], function( &$string ) {
79
				if( isset( $string['s2'] )) {
80
					$string['s2'] = wp_strip_all_tags( $string['s2'] );
81
				}
82
				if( isset( $string['p2'] )) {
83
					$string['p2'] = wp_strip_all_tags( $string['p2'] );
84
				}
85
			});
86
		}
87
		return $options;
88
	}
89
}
90