PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 3.0.0-beta1
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v3.0.0-beta1
4.7.0 4.6.6 4.6.5 4.6.4 4.6.3 4.6.2 4.6.1 4.6.0 4.5.1 4.5.0 4.4.2 4.4.1 4.4.0 4.3.3 4.3.2 4.3.1 4.3.0 4.2.3 4.2.2 4.2.1 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.14 1.1.15 1.1.16 1.1.17 1.1.18 1.1.19 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8 1.1.9 1.10.0 1.10.1 1.10.2 1.10.3 1.10.4 1.11.0 1.11.1 1.11.2 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.4.0 1.4.1 1.4.2 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.9.0 1.9.1 1.9.2 1.9.3 1.9.4 1.9.5 2.0.0 2.0.1 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.10.0 2.10.1 2.11.0 2.11.1 2.11.2 2.11.3 2.11.4 2.12.0 2.13.0 2.14.0 2.14.1 2.15.0 2.15.1 2.16.0 2.16.1 2.16.2 2.16.3 2.17.0 2.17.1 2.17.2 2.18.0 2.19.0 2.19.2 2.19.3 2.19.4 2.2.0 2.2.1 2.20.0 2.20.1 2.20.2 2.20.3 2.20.4 2.20.5 2.20.6 2.21.0 2.22.0 2.22.1 2.23.0 2.24.0 2.25.0 2.25.1 2.25.2 2.26.0 2.27.0 2.27.1 2.28.0 2.29.0 2.29.1 2.29.2 2.29.3 2.29.4 2.3.0 2.3.1 2.30.0 2.31.0 2.31.1 2.31.2 2.31.3 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.40.0 2.40.1 2.5.0 2.5.1 2.5.2 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.8.2 2.8.3 2.8.4 2.9.0 3.0.0 3.0.0-RC1 3.0.0-RC2 3.0.0-beta1 3.0.0-beta2 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.10.0 3.10.1 3.11.0 3.12.0 3.13.0 3.13.1 3.13.2 3.13.3 3.13.4 3.14.0 3.15.0 3.15.1 3.15.2 3.15.3 3.15.4 3.15.5 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.16.6 3.16.7 3.16.8 3.17.0 3.17.1 3.17.2 3.17.3 3.17.4 3.17.5 3.17.6 3.18.0 3.19.0 3.19.1 3.19.2 3.2.0 3.2.1 3.2.2 3.20.0 3.20.1 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.4.3 3.5.0 3.5.1 3.5.2 3.5.3 3.6.0 3.6.1 3.6.2 3.7.0 3.7.1 3.7.2 3.7.3 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.9.0 4.0.0 4.0.1 4.0.2 4.0.3 trunk 4.1.0 0.2.19.1 4.1.1 1.0.0 4.2.0 1.0.1 1.0.2
surecart / app / src / WordPress / Templates / TemplatesService.php
surecart / app / src / WordPress / Templates Last commit date
BlockTemplatesService.php 2 years ago CollectionTemplateService.php 2 years ago TemplatesService.php 2 years ago TemplatesServiceProvider.php 2 years ago UpsellTemplatesService.php 2 years ago
TemplatesService.php
200 lines
1 <?php
2
3
4 namespace SureCart\WordPress\Templates;
5
6 /**
7 * The template service.
8 */
9 class TemplatesService {
10 /**
11 * The service container.
12 *
13 * @var array
14 */
15 private $container;
16
17 /**
18 * The template file/name associations.
19 *
20 * @var array
21 */
22 private $templates = [];
23
24 /**
25 * The post type for the templates.
26 *
27 * @var string
28 */
29 private $post_type = '';
30
31 /**
32 * SureCart plugin slug
33 *
34 * This is used to save templates to the DB which are stored against this value in the wp_terms table.
35 *
36 * @var string
37 */
38 const PLUGIN_SLUG = 'surecart/surecart';
39
40 /**
41 * Get things going.
42 *
43 * @param array $container The service container.
44 * @param array $templates The template file/name associations.
45 * @param string $post_type The post type for the templates.
46 */
47 public function __construct( $container, $templates, $post_type ) {
48 $this->container = $container;
49 $this->templates = $templates;
50 $this->post_type = $post_type;
51 }
52
53 /**
54 * Bootstrap actions and filters.
55 *
56 * @return void
57 */
58 public function bootstrap() {
59 add_filter( 'theme_' . $this->post_type . '_templates', [ $this, 'addTemplates' ] );
60 add_filter( 'template_include', [ $this, 'includeTemplate' ], 9 );
61 add_filter( 'body_class', [ $this, 'bodyClass' ] );
62 add_action( 'init', [ $this, 'registerMeta' ] );
63 }
64
65 /**
66 * Add surecart_current_product to list of query vars.
67 *
68 * @param array $vars The query vars.
69 * @return array
70 */
71 public function addCurrentProductQueryVar( $vars ) {
72 $vars[] = 'surecart_current_product';
73 return $vars;
74 }
75
76 /**
77 * Register any template meta we need.
78 */
79 public function registerMeta() {
80 register_meta(
81 'post',
82 '_surecart_dashboard_logo_width',
83 [
84 'auth_callback' => function ( $allowed, $meta_key, $object_id, $user_id, $cap, $caps ) {
85 return current_user_can( 'edit_post', $object_id );
86 },
87 'default' => '180px',
88 'show_in_rest' => true,
89 'single' => true,
90 'type' => 'string',
91 ]
92 );
93
94 foreach ( [
95 'show_logo',
96 'navigation_orders',
97 'navigation_subscriptions',
98 'navigation_downloads',
99 'navigation_billing',
100 'navigation_account',
101 ] as $toggle ) {
102 register_meta(
103 'post',
104 '_surecart_dashboard_' . $toggle,
105 [
106 'auth_callback' => function ( $allowed, $meta_key, $object_id, $user_id, $cap, $caps ) {
107 return current_user_can( 'edit_post', $object_id );
108 },
109 'default' => true,
110 'show_in_rest' => true,
111 'single' => true,
112 'type' => 'boolean',
113 ]
114 );
115 }
116 }
117
118 /**
119 * Is one of our templates active?
120 *
121 * @return boolean
122 */
123 public function isTemplateActive() {
124 $template = get_page_template_slug();
125 return false !== $template && array_key_exists( $template, $this->templates );
126 }
127
128 /**
129 * Add the templates. to the existing templates.
130 *
131 * @param array $posts_templates Existing templates.
132 *
133 * @return array
134 */
135 public function addTemplates( $posts_templates ) {
136 return array_merge( $posts_templates, $this->templates );
137 }
138
139 /**
140 * Include the template if it is set.
141 *
142 * @param string $template Template url.
143 *
144 * @return string
145 */
146 public function includeTemplate( $template ) {
147 global $post;
148 $id = $post->ID ?? null;
149
150 if ( ! is_singular( $this->post_type ) ) {
151 return $template;
152 }
153
154 if ( wp_is_block_theme() ) {
155 return $template;
156 }
157
158 // check for product and use the template id.
159 $product = get_query_var( 'surecart_current_product' );
160
161 if ( ! empty( $product->metadata->wp_template_id ) ) {
162 $page_template = $product->metadata->wp_template_id;
163 } else {
164 $page_template = get_post_meta( $id, '_wp_page_template', true );
165 }
166
167 // if the set template does not match one of these templates.
168 if ( empty( $page_template ) || false === strpos( $page_template, '.php' ) ) {
169 return $template;
170 }
171
172 $file = trailingslashit( $this->container[ SURECART_CONFIG_KEY ]['app_core']['path'] ) . '/templates/' . $page_template;
173
174 // Return file if it exists.
175 if ( file_exists( $file ) ) {
176 return $file;
177 }
178
179 return $template;
180 }
181
182 /**
183 * Add to the body class if it's our template.
184 *
185 * @param array $body_class Array of body class names.
186 *
187 * @return array
188 */
189 public function bodyClass( $body_class ) {
190 $template = get_page_template_slug();
191
192 if ( false !== $template && $this->isTemplateActive() ) {
193 $body_class[] = 'surecart-template';
194 $body_class[] = 'surecart-template-' . get_template();
195 }
196
197 return $body_class;
198 }
199 }
200