Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00% covered (danger)
0.00%
0 / 1
85.71% covered (success)
85.71%
6 / 7
CRAP
90.32% covered (success)
90.32%
28 / 31
Assets
0.00% covered (danger)
0.00%
0 / 1
85.71% covered (success)
85.71%
6 / 7
11
96.55% covered (success)
96.55%
28 / 29
 name
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
2 / 2
 init
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
3 / 3
 register_login_styles
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
3 / 3
 enqueue_login_styles
100.00% covered (success)
100.00%
1 / 1
3
100.00% covered (success)
100.00%
8 / 8
 register_script
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
4 / 4
 register_style
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
4 / 4
 get_file_version
0.00% covered (danger)
0.00%
0 / 1
3.07
80.00% covered (success)
80.00%
4 / 5
1<?php
2/**
3 * Assets class.
4 *
5 * This will manage the assets file (css/js)
6 * for adding style and JS functionality.
7 *
8 * @package RtCamp\GoogleLogin
9 * @since   1.0.0
10 */
11
12declare( strict_types=1 );
13
14namespace RtCamp\GoogleLogin\Modules;
15
16use RtCamp\GoogleLogin\Interfaces\Module as ModuleInterface;
17use function RtCamp\GoogleLogin\plugin;
18
19/**
20 * Class Assets
21 *
22 * @package RtCamp\GoogleLogin\Modules
23 */
24class Assets implements ModuleInterface {
25
26    /**
27     * Module name.
28     *
29     * @return string
30     */
31    public function name(): string {
32        return 'assets';
33    }
34
35    /**
36     * Initialize the assets file
37     *
38     * @return void
39     */
40    public function init(): void {
41        add_action( 'login_enqueue_scripts', [ $this, 'enqueue_login_styles' ] );
42    }
43
44    /**
45     * Register style/script for Login Page.
46     *
47     * @action login_enqueue_scripts
48     *
49     * @return void
50     */
51    public function register_login_styles(): void {
52        $this->register_style( 'login-with-google', 'build/css/login.css' );
53    }
54
55    /**
56     * Enqueue the login stylesheet.
57     *
58     * @return void
59     */
60    public function enqueue_login_styles(): void {
61        /**
62         * If style is not registered, register it.
63         */
64        if ( ! wp_style_is( 'login-with-google', 'registered' ) ) {
65            $this->register_login_styles();
66        }
67
68        if ( ! wp_script_is( 'login-with-google-script', 'registered' ) ) {
69            $this->register_script( 'login-with-google-script', 'build/js/login.js' );
70        }
71
72        wp_enqueue_script( 'login-with-google-script' );
73        wp_enqueue_style( 'login-with-google' );
74    }
75
76    /**
77     * Register a new script.
78     *
79     * @param  string           $handle    Name of the script. Should be unique.
80     * @param  string|bool      $file      script file, path of the script relative to the assets/build/ directory.
81     * @param  array            $deps      Optional. An array of registered script handles this script depends on. Default empty array.
82     * @param  string|bool|null $ver       Optional. String specifying script version number, if not set, filetime will be used as version number.
83     * @param  bool             $in_footer Optional. Whether to enqueue the script before </body> instead of in the <head>.
84     *                                     Default 'false'.
85     * @return bool Whether the script has been registered. True on success, false on failure.
86     */
87    public function register_script( $handle, $file, $deps = [], $ver = false, $in_footer = true ) {
88        $src     = sprintf( '%1$sassets/%2$s', plugin()->url, $file );
89        $version = $this->get_file_version( $file, $ver );
90
91        return wp_register_script( $handle, $src, $deps, $version, $in_footer );
92    }
93
94    /**
95     * Register a CSS stylesheet.
96     *
97     * @param string           $handle Name of the stylesheet. Should be unique.
98     * @param string|bool      $file   style file, path of the script relative to the assets/build/ directory.
99     * @param array            $deps   Optional. An array of registered stylesheet handles this stylesheet depends on. Default empty array.
100     * @param string|bool|null $ver    Optional. String specifying script version number, if not set, filetime will be used as version number.
101     * @param string           $media  Optional. The media for which this stylesheet has been defined.
102     *                                 Default 'all'. Accepts media types like 'all', 'print' and 'screen', or media queries like
103     *                                 '(orientation: portrait)' and '(max-width: 640px)'.
104     *
105     * @return bool Whether the style has been registered. True on success, false on failure.
106     */
107    public function register_style( $handle, $file, $deps = [], $ver = false, $media = 'all' ) {
108        $src     = sprintf( '%1$sassets/%2$s', plugin()->url, $file );
109        $version = $this->get_file_version( $file, $ver );
110
111        return wp_register_style( $handle, $src, $deps, $version, $media );
112    }
113
114    /**
115     * Get file version.
116     *
117     * @param string             $file File path.
118     * @param int|string|boolean $ver  File version.
119     *
120     * @return bool|false|int
121     */
122    private function get_file_version( $file, $ver = false ) {
123        if ( ! empty( $ver ) ) {
124            return $ver;
125        }
126
127        $file_path = sprintf( '%s/%s', plugin()->assets_dir, $file );
128
129        return file_exists( $file_path ) ? filemtime( $file_path ) : false;
130    }
131}