1 | <?php |
||
2 | |||
3 | declare( strict_types=1 ); |
||
4 | |||
5 | /** |
||
6 | * Implementation of BladeOne for the PinkCrab Perique frameworks Renderable interface |
||
7 | * |
||
8 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||
9 | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||
10 | * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
||
11 | * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
||
12 | * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||
13 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||
14 | * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
||
15 | * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
||
16 | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||
17 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||
18 | * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||
19 | * |
||
20 | * @author Glynn Quelch <[email protected]> |
||
21 | * @license http://www.opensource.org/licenses/mit-license.html MIT License |
||
22 | * @package PinkCrab\BladeOne_Provider |
||
23 | */ |
||
24 | |||
25 | namespace PinkCrab\BladeOne; |
||
26 | |||
27 | use Dice\Dice; |
||
28 | use eftec\bladeone\BladeOne; |
||
29 | use PinkCrab\Perique\Application\Hooks; |
||
30 | use PinkCrab\BladeOne\BladeOne_Provider; |
||
31 | use PinkCrab\BladeOne\PinkCrab_BladeOne; |
||
32 | use PinkCrab\Perique\Application\Config; |
||
33 | use PinkCrab\Perique\Interfaces\Renderable; |
||
34 | use PinkCrab\Perique\Services\View\PHP_Engine; |
||
35 | use PinkCrab\BladeOne\Abstract_BladeOne_Config; |
||
36 | |||
37 | class BladeOne_Bootstrap { |
||
38 | |||
39 | /** |
||
40 | * Sets the rules for bladeone and unsets the default PHP_Engine for rendering |
||
41 | * |
||
42 | * @param string $template_path |
||
43 | * @param string|null $compiled_path |
||
44 | * @param int $mode |
||
45 | * @param class-string|BladeOne $blade |
||
0 ignored issues
–
show
Documentation
Bug
introduced
by
![]() |
|||
46 | * @return void |
||
47 | */ |
||
48 | public static function use( $template_path = null, ?string $compiled_path = null, int $mode = 0, $blade = null ) { |
||
49 | |||
50 | add_filter( |
||
51 | Hooks::APP_INIT_SET_DI_RULES, |
||
52 | function( $rules ) use ( $template_path, $compiled_path, $mode, $blade ) { |
||
53 | |||
54 | // Unset the global PHP_Engine useage. |
||
55 | if ( array_key_exists( '*', $rules ) |
||
56 | && array_key_exists( 'substitutions', $rules['*'] ) |
||
57 | && array_key_exists( Renderable::class, $rules['*']['substitutions'] ) |
||
58 | && is_a( $rules['*']['substitutions'][ Renderable::class ], PHP_Engine::class ) ) { |
||
59 | |||
60 | // If template path is not set, get from renderable. |
||
61 | if ( is_null( $template_path ) ) { |
||
62 | $template_path = $rules['*']['substitutions'][ Renderable::class ]->base_view_path(); |
||
63 | } |
||
64 | unset( $rules['*']['substitutions'][ Renderable::class ] ); |
||
65 | } |
||
66 | |||
67 | // If there is no compiled path, set to to uploads. |
||
68 | if ( is_null( $compiled_path ) ) { |
||
69 | $wp_upload_dir = wp_upload_dir(); |
||
70 | $compiled_path = sprintf( '%1$s%2$scompiled%2$sblade', $wp_upload_dir['basedir'], \DIRECTORY_SEPARATOR ); |
||
71 | } |
||
72 | |||
73 | // Get the version of Blade to start. |
||
74 | $blade = self::get_blade_instance( $blade ); |
||
75 | |||
76 | $rules[ BladeOne_Provider::class ] = array( |
||
77 | 'substitutions' => array( |
||
78 | PinkCrab_BladeOne::class => new $blade( $template_path, $compiled_path, $mode ), |
||
79 | ), |
||
80 | 'call' => array( |
||
81 | array( 'allow_pipe', array() ), |
||
82 | ), |
||
83 | ); |
||
84 | |||
85 | $rules[ Renderable::class ] = array( |
||
86 | 'instanceOf' => BladeOne_Provider::class, |
||
87 | 'shared' => true, |
||
88 | ); |
||
89 | |||
90 | $rules[ Abstract_BladeOne_Config::class ] = array( |
||
91 | 'call' => array( |
||
92 | array( 'set_renderable', array( array( Dice::INSTANCE => Renderable::class ) ) ), |
||
93 | ), |
||
94 | ); |
||
95 | |||
96 | return $rules; |
||
97 | } |
||
98 | ); |
||
99 | } |
||
100 | |||
101 | /** |
||
102 | * Gets the class used for bladeone instance |
||
103 | * |
||
104 | * @param mixed $blade |
||
105 | * @return class-string |
||
0 ignored issues
–
show
|
|||
106 | */ |
||
107 | protected static function get_blade_instance( $blade ): string { |
||
108 | // If we have a populated instance of BladeOne, get the full class name. |
||
109 | if ( is_object( $blade ) && is_a( $blade, PinkCrab_BladeOne::class ) ) { |
||
110 | $blade = get_class( $blade ); |
||
111 | } |
||
112 | |||
113 | if ( is_string( $blade ) && is_a( $blade, PinkCrab_BladeOne::class, true ) ) { |
||
114 | return $blade; |
||
115 | } |
||
116 | |||
117 | return PinkCrab_BladeOne::class; |
||
118 | } |
||
119 | } |
||
120 |