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