Passed
Push — master ( 16abb1...e52611 )
by Paul
04:03
created

EnqueuePublicAssets::getValidationStrings()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 15
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
cc 1
eloc 12
nc 1
nop 0
dl 0
loc 15
ccs 0
cts 15
cp 0
crap 2
rs 9.8666
c 0
b 0
f 0
1
<?php
2
3
namespace GeminiLabs\SiteReviews\Handlers;
4
5
use GeminiLabs\SiteReviews\Application;
6
use GeminiLabs\SiteReviews\Database\OptionManager;
7
use GeminiLabs\SiteReviews\Modules\Style;
8
use GeminiLabs\SiteReviews\Modules\Validator;
9
10
class EnqueuePublicAssets
11
{
12
	/**
13
	 * @return void
14
	 */
15
	public function handle()
16
	{
17
		$this->enqueueAssets();
18
		$this->enqueuePolyfillService();
19
		$this->enqueueRecaptchaScript();
20
		$this->inlineStyles();
21
		$this->localizeAssets();
22
	}
23
24
	/**
25
	 * @return void
26
	 */
27
	public function enqueueAssets()
28
	{
29
		if( apply_filters( 'site-reviews/assets/css', true )) {
30
			wp_enqueue_style(
31
				Application::ID,
32
				$this->getStylesheet(),
33
				[],
34
				glsr()->version
35
			);
36
		}
37
		if( apply_filters( 'site-reviews/assets/js', true )) {
38
			$dependencies = apply_filters( 'site-reviews/assets/polyfill', true )
39
				? [Application::ID.'/polyfill']
40
				: [];
41
			$dependencies = apply_filters( 'site-reviews/enqueue/public/dependencies', $dependencies );
42
			wp_enqueue_script(
43
				Application::ID,
44
				glsr()->url( 'assets/scripts/'.Application::ID.'.js' ),
45
				$dependencies,
46
				glsr()->version,
47
				true
48
			);
49
		}
50
	}
51
52
	/**
53
	 * @return void
54
	 */
55
	public function enqueuePolyfillService()
56
	{
57
		if( !apply_filters( 'site-reviews/assets/polyfill', true ))return;
58
		wp_enqueue_script(
59
			Application::ID.'/polyfill',
60
			'https://cdn.polyfill.io/v2/polyfill.js?features=Element.prototype.closest,Element.prototype.dataset,Event&flags=gated',
61
			[],
62
			glsr()->version
63
		);
64
	}
65
66
	/**
67
	 * @return void
68
	 */
69
	public function enqueueRecaptchaScript()
70
	{
71
		if( glsr( OptionManager::class )->get( 'settings.submissions.recaptcha.integration' ) != 'custom' )return;
72
		$language = apply_filters( 'site-reviews/recaptcha/language', get_locale() );
73
		wp_enqueue_script( Application::ID.'/google-recaptcha', add_query_arg([
74
			'hl' => $language,
75
			'onload' => 'glsr_render_recaptcha',
76
			'render' => 'explicit',
77
		], 'https://www.google.com/recaptcha/api.js' ));
78
		$inlineScript = file_get_contents( glsr()->path( 'assets/scripts/recaptcha.js' ));
79
		wp_add_inline_script( Application::ID.'/google-recaptcha', $inlineScript, 'before' );
80
	}
81
82
	/**
83
	 * @return void
84
	 */
85
	public function inlineStyles()
86
	{
87
		$inlineStylesheetPath = glsr()->path( 'assets/styles/inline-styles.css' );
88
		if( !apply_filters( 'site-reviews/assets/css', true ))return;
89
		if( !file_exists( $inlineStylesheetPath )) {
90
			glsr_log()->error( 'Inline stylesheet is missing: '.$inlineStylesheetPath );
91
			return;
92
		}
93
		$inlineStylesheetValues = glsr()->config( 'inline-styles' );
94
		$stylesheet = str_replace(
95
			array_keys( $inlineStylesheetValues ),
96
			array_values( $inlineStylesheetValues ),
97
			file_get_contents( $inlineStylesheetPath )
98
		);
99
		wp_add_inline_style( Application::ID, $stylesheet );
100
	}
101
102
	/**
103
	 * @return void
104
	 */
105
	public function localizeAssets()
106
	{
107
		$variables = [
108
			'action' => Application::PREFIX.'action',
109
			'ajaxpagination' => $this->getFixedSelectorsForPagination(),
110
			'ajaxurl' => admin_url( 'admin-ajax.php' ),
111
			'validationconfig' => $this->getValidationConfig(),
112
			'validationstrings' => glsr( Validator::class )->strings(),
113
		];
114
		$variables = apply_filters( 'site-reviews/enqueue/public/localize', $variables );
115
		wp_localize_script( Application::ID, 'GLSR', $variables );
116
	}
117
118
	/**
119
	 * @return array
120
	 */
121
	protected function getFixedSelectorsForPagination()
122
	{
123
		$selectors = ['#wpadminbar','.site-navigation-fixed'];
124
		return apply_filters( 'site-reviews/localize/pagination/selectors', $selectors );
125
	}
126
127
	/**
128
	 * @return string
129
	 */
130
	protected function getStylesheet()
131
	{
132
		$currentStyle = glsr( Style::class )->style;
133
		return file_exists( glsr()->path( 'assets/styles/custom/'.$currentStyle.'.css' ))
134
			? glsr()->url( 'assets/styles/custom/'.$currentStyle.'.css' )
135
			: glsr()->url( 'assets/styles/'.Application::ID.'.css' );
136
	}
137
138
	/**
139
	 * @return array
140
	 */
141
	protected function getValidationConfig()
142
	{
143
		$defaults = [
144
			'error_tag' => 'div',
145
			'error_tag_class' => 'glsr-field-error',
146
			'field_class' => 'glsr-field',
147
			'field_error_class' => 'glsr-has-error',
148
			'input_error_class' => 'glsr-is-invalid',
149
			'input_success_class' => 'glsr-is-valid',
150
		];
151
		$config = array_merge( $defaults, array_filter( glsr( Style::class )->validation ));
152
		return apply_filters( 'site-reviews/localize/validation/config', $config );
153
	}
154
}
155