Application   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 81
Duplicated Lines 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
eloc 44
c 2
b 0
f 0
dl 0
loc 81
rs 10
wmc 6

5 Methods

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