Passed
Push — develop ( c6dd2a...1f8334 )
by Paul
03:38
created

Application::init()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 23
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 16
nc 2
nop 0
dl 0
loc 23
rs 9.0856
c 0
b 0
f 0
1
<?php
2
3
namespace GeminiLabs\Castor;
4
5
use GeminiLabs\Castor\AliasLoader;
6
use GeminiLabs\Castor\Container;
7
use GeminiLabs\Castor\Facade;
8
9
final class Application extends Container
10
{
11
	public $assets;
12
13
	public function __construct()
14
	{
15
		$this->assets = sprintf( '%s/assets/', dirname( __DIR__ ));
16
		Facade::clearResolvedInstances();
17
		Facade::setFacadeApplication( $this );
18
		$this->registerAliases();
19
		$this->registerBindings();
20
	}
21
22
	public function init()
23
	{
24
		$controller = $this->make( 'Controller' );
25
26
		// Action hooks
27
		add_action( 'after_setup_theme',      [$controller, 'afterSetupTheme'], 20 );
28
		add_action( 'login_head',             [$controller, 'loadAdminFavicon'] );
29
		add_action( 'admin_head',             [$controller, 'loadAdminFavicon'] );
30
		add_action( 'login_head',             [$controller, 'login'] );
31
		add_action( 'admin_enqueue_scripts',  [$controller, 'registerAdminAssets'] );
32
		add_action( 'wp_enqueue_scripts',     [$controller, 'registerAssets'] );
33
		add_action( 'customize_register',     [$controller, 'registerCustomizer'] );
34
		add_action( 'customize_preview_init', [$controller, 'registerCustomizerAssets'] );
35
		add_action( 'widgets_init',           [$controller, 'registerSidebars'] );
36
37
		// Filter hooks
38
		add_filter( 'body_class',             [$controller, 'filterBodyClasses'] );
39
		add_filter( 'template_include',       [$controller, 'filterTemplate'] );
40
		add_filter( 'login_headertitle',      [$controller, 'filterLoginTitle'] );
41
		add_filter( 'login_headerurl',        [$controller, 'filterLoginUrl'] );
42
43
		foreach( $this->getTemplateTypes() as $type ) {
44
			add_filter( "{$type}_template_hierarchy", [$controller, 'filterTemplateHierarchy'] );
45
		}
46
	}
47
48
	/**
49
	 * @return void
50
	 */
51
	public function registerAliases()
52
	{
53
		$aliases = [
54
			'Development' => Facades\Development::class,
55
			'Log'         => Facades\Log::class,
56
			'Media'       => Facades\Media::class,
57
			'PostMeta'    => Facades\PostMeta::class,
58
			'Render'      => Facades\Render::class,
59
			'SiteMeta'    => Facades\SiteMeta::class,
60
			'Template'    => Facades\Template::class,
61
			'Theme'       => Facades\Theme::class,
62
			'Utility'     => Facades\Utility::class,
63
		];
64
		$aliases = apply_filters( 'castor/register/aliases', $aliases );
65
		AliasLoader::getInstance( $aliases )->register();
66
	}
67
68
	/**
69
	 * @return void
70
	 */
71
	public function registerBindings()
72
	{
73
		$this->bind( Helpers\Log::class, function() {
74
			return new Helpers\Log( trailingslashit( get_stylesheet_directory() ).'castor-debug.log' );
75
		});
76
	}
77
78
	/**
79
	 * @return array
80
	 */
81
	protected function getTemplateTypes()
82
	{
83
		return [
84
			'404', 'archive', 'attachment', 'author', 'category', 'date',
85
			'embed', 'frontpage', 'home', 'index', 'page', 'paged',
86
			'search', 'single', 'singular', 'tag', 'taxonomy',
87
		];
88
	}
89
}
90