Completed
Push — develop ( 4145c9...286694 )
by Paul
04:35
created

Controller::afterSetupTheme()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 22
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 22
rs 9.2
c 0
b 0
f 0
cc 2
eloc 16
nc 2
nop 0
1
<?php
2
3
namespace GeminiLabs\Castor;
4
5
use GeminiLabs\Castor\Facades\Development;
6
use GeminiLabs\Castor\Facades\Template;
7
use GeminiLabs\Castor\Facades\Theme;
8
use GeminiLabs\Castor\Facades\Utility;
9
use WP_Customize_Manager;
10
11
class Controller
12
{
13
	/**
14
	 * @return void
15
	 * @action after_setup_theme
16
	 */
17
	public function afterSetupTheme()
18
	{
19
		add_editor_style( Theme::assetUri( 'css/editor.css' ));
20
		add_theme_support( 'customize-selective-refresh-widgets' );
21
		add_theme_support( 'html5', ['caption', 'comment-form', 'comment-list', 'gallery', 'search-form'] );
22
		add_theme_support( 'post-thumbnails' );
23
		add_theme_support( 'soil-clean-up' );
24
		add_theme_support( 'soil-jquery-cdn' );
25
		add_theme_support( 'soil-nav-walker' );
26
		add_theme_support( 'soil-nice-search' );
27
		add_theme_support( 'soil-relative-urls' );
28
		add_theme_support( 'title-tag' );
29
		load_theme_textdomain( 'castor', Theme::paths( 'dir.template' ) . '/languages' );
30
31
		$menus = apply_filters( 'castor/register/nav_menus', [
32
			'main_menu' => __( 'Main Menu', 'castor' ),
33
		]);
34
35
		foreach( $menus as $location => $description ) {
36
			register_nav_menu( $location, $description );
37
		}
38
	}
39
40
	/**
41
	 * @return array
42
	 * @filter body_class
43
	 */
44
	public function filterBodyClasses( array $classes )
45
	{
46
		if( Theme::displaySidebar() ) {
47
			$classes[] = 'has-sidebar';
48
		}
49
		return array_keys( array_flip( $classes ));
50
	}
51
52
	/**
53
	 * @return string
54
	 * @filter login_headertitle
55
	 */
56
	public function filterLoginTitle()
57
	{
58
		return get_bloginfo( 'name' );
59
	}
60
61
	/**
62
	 * @return string
63
	 * @filter login_headerurl
64
	 */
65
	public function filterLoginUrl()
66
	{
67
		return get_bloginfo( 'url' );
68
	}
69
70
	/**
71
	 * @return string
72
	 * @filter template_include
73
	 */
74
	public function filterTemplate( $template )
75
	{
76
		if( is_string( $template )) {
77
			$template = Template::setLayout( $template );
78
			Development::storeTemplatePath( $template );
79
		}
80
		return $template;
81
	}
82
83
	/**
84
	 * @return array
85
	 * @filter {$type}_template_hierarchy
86
	 */
87
	public function filterTemplateHierarchy( array $templates )
88
	{
89
		return array_map( function( $template ) {
90
			return Utility::startWith( 'templates/', $template );
91
		}, $templates );
92
	}
93
94
	/**
95
	 * @return void
96
	 * @action admin_head
97
	 * @action login_head
98
	 */
99
	public function loadAdminFavicon()
100
	{
101
		if( file_exists( Theme::assetPath( 'favicon/favicon-admin.ico' ))) {
102
			printf( '<link rel="shortcut icon" href="%s">', Theme::assetUri( 'favicon/favicon-admin.ico' ));
103
		}
104
	}
105
106
	/**
107
	 * @return void
108
	 * @action login_head
109
	 */
110
	public function login()
111
	{
112
		if( file_exists( Theme::assetPath( 'css/login.css' ))) {
113
			printf( '<link rel="stylesheet" href="%s">', Theme::assetUri( 'css/login.css' ));
114
		}
115
	}
116
117
	/**
118
	 * @return void
119
	 * @action admin_enqueue_scripts
120
	 */
121
	public function registerAdminAssets()
122
	{
123 View Code Duplication
		if( file_exists( Theme::assetPath( 'css/admin.css' ))) {
1 ignored issue
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
124
			wp_enqueue_style( 'castor/admin.css',
125
				Theme::assetUri( 'css/admin.css' ),
126
				apply_filters( 'castor/enqueue/admin/css/deps', [] ),
127
				null
128
			);
129
		}
130 View Code Duplication
		if( file_exists( Theme::assetPath( 'css/admin.js' ))) {
1 ignored issue
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
131
			wp_enqueue_script( 'castor/admin.js',
132
				Theme::assetUri( 'js/admin.js' ),
133
				apply_filters( 'castor/enqueue/admin/js/deps', [] ),
134
				null,
135
				true
136
			);
137
		}
138
	}
139
140
	/**
141
	 * @return void
142
	 * @action wp_enqueue_scripts
143
	 */
144
	public function registerAssets()
145
	{
146
		wp_enqueue_style( 'castor/main.css',
147
			Theme::assetUri( 'css/main.css' ),
148
			apply_filters( 'castor/enqueue/css/deps', [] ),
149
			null
150
		);
151
		wp_enqueue_script( 'castor/main.js',
152
			Theme::assetUri( 'js/main.js' ),
153
			apply_filters( 'castor/enqueue/js/deps', [] ),
154
			null,
155
			true
156
		);
157
		wp_localize_script( 'castor/main.js', apply_filters( 'castor/enqueue/js/localize/variable', 'globals' ),
158
			apply_filters( 'castor/enqueue/js/localize/variables', [
159
				'ajax' => admin_url( 'admin-ajax.php' ),
160
			])
161
		);
162
	}
163
164
	/**
165
	 * @return void
166
	 * @action customize_register
167
	 */
168
	public function registerCustomizer( WP_Customize_Manager $manager )
169
	{
170
		$manager->get_setting( 'blogname' )->transport = 'postMessage';
171
		$manager->selective_refresh->add_partial( 'blogname', [
172
			'selector'        => '.brand',
173
			'render_callback' => function() {
174
				bloginfo( 'name' );
175
			},
176
		]);
177
	}
178
179
	/**
180
	 * @return void
181
	 * @action customize_preview_init
182
	 */
183
	public function registerCustomizerAssets()
184
	{
185
		wp_enqueue_script( 'castor/customizer.js', Theme::assetUri( 'js/customizer.js' ), ['customize-preview'], null, true );
186
	}
187
188
	/**
189
	 * @return void
190
	 * @action widgets_init
191
	 */
192
	public function registerSidebars()
193
	{
194
		$defaults = apply_filters( 'castor/register/sidebars/defaults', [
195
			'before_widget' => '<div class="widget %1$s %2$s">',
196
			'after_widget'  => '</div>',
197
			'before_title'  => '<h4>',
198
			'after_title'   => '</h4>',
199
		]);
200
201
		$sidebars = apply_filters( 'castor/register/sidebars', [
202
			'sidebar-primary' => __( 'Primary Sidebar', 'castor' ),
203
			'sidebar-footer'  => __( 'Footer Widgets', 'castor' ),
204
		]);
205
206
		foreach( $sidebars as $id => $name ) {
207
			register_sidebar([
208
				'id'   => $id,
209
				'name' => $name,
210
			] + $defaults );
211
		}
212
	}
213
}
214