Passed
Push — master ( a74976...b3d616 )
by Paul
03:42
created

SettingsController   A

Complexity

Total Complexity 12

Size/Duplication

Total Lines 74
Duplicated Lines 0 %

Test Coverage

Coverage 11.43%

Importance

Changes 0
Metric Value
eloc 28
dl 0
loc 74
ccs 4
cts 35
cp 0.1143
rs 10
c 0
b 0
f 0
wmc 12

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 14 3
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
		if( !is_array( $input )) {
20
			$input = ['settings' => []];
21
		}
22
		if( key( $input ) == 'settings' ) {
23
			$options = array_replace_recursive( glsr( OptionManager::class )->all(), $input );
24
			$options = $this->sanitizeGeneral( $input, $options );
25
			$options = $this->sanitizeSubmissions( $input, $options );
26
			$options = $this->sanitizeTranslations( $input, $options );
27
			glsr( Notice::class )->addSuccess( __( 'Settings updated.', 'site-reviews' ));
28
			return $options;
29
		}
30
		return $input;
31
	}
32
33
	/**
34
	 * @return void
35
	 * @action admin_init
36
	 */
37 1
	public function registerSettings()
38
	{
39 1
		register_setting( Application::ID.'-settings', OptionManager::databaseKey(), [
40 1
			'sanitize_callback' => [$this, 'callbackRegisterSettings'],
41
		]);
42 1
	}
43
44
	/**
45
	 * @return array
46
	 */
47
	protected function sanitizeGeneral( array $input, array $options )
48
	{
49
		if( trim( $input['settings']['general']['notification_message'] ) == '' ) {
50
			$options['settings']['general']['notification_message'] = glsr()->defaults['settings']['general']['notification_message'];
51
		}
52
		return $options;
53
	}
54
55
	/**
56
	 * @return array
57
	 */
58
	protected function sanitizeSubmissions( array $input, array $options )
59
	{
60
		$inputForm = $input['settings']['submissions'];
61
		$options['settings']['submissions']['required'] = isset( $inputForm['required'] )
62
			? $inputForm['required']
63
			: [];
64
		return $options;
65
	}
66
67
	/**
68
	 * @return array
69
	 */
70
	protected function sanitizeTranslations( array $input, array $options )
71
	{
72
		if( isset( $input['settings']['strings'] )) {
73
			$options['settings']['strings'] = array_values( array_filter( $input['settings']['strings'] ));
74
			array_walk( $options['settings']['strings'], function( &$string ) {
75
				if( isset( $string['s2'] )) {
76
					$string['s2'] = wp_strip_all_tags( $string['s2'] );
77
				}
78
				if( isset( $string['p2'] )) {
79
					$string['p2'] = wp_strip_all_tags( $string['p2'] );
80
				}
81
			});
82
		}
83
		return $options;
84
	}
85
}
86