PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 4.5.0
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v4.5.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 1 year ago CollectionTemplateService.php 1 year ago TemplatesService.php 1 year ago TemplatesServiceProvider.php 1 year ago UpsellTemplatesService.php 1 year ago
TemplatesService.php
222 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( 'template_include', [ $this, 'fixFSEDashboardTemplate' ] );
62 add_filter( 'body_class', [ $this, 'bodyClass' ] );
63 add_action( 'init', [ $this, 'registerMeta' ] );
64 }
65
66 /**
67 * Fix the dashboard template.
68 *
69 * @param string $template The template.
70 * @return string
71 */
72 public function fixFSEDashboardTemplate( $template ) {
73 if ( ! empty( get_the_ID() ) ) {
74 $saved_template = get_post_meta( get_the_ID(), '_wp_page_template', true );
75 if ( strpos( $saved_template, 'template-surecart-dashboard' ) !== false ) {
76 return plugin_dir_path( SURECART_PLUGIN_FILE ) . 'templates/pages/template-surecart-dashboard.php';
77 }
78 }
79 return $template;
80 }
81
82 /**
83 * Add surecart_current_product to list of query vars.
84 *
85 * @param array $vars The query vars.
86 * @return array
87 */
88 public function addCurrentProductQueryVar( $vars ) {
89 $vars[] = 'surecart_current_product';
90 return $vars;
91 }
92
93 /**
94 * Register any template meta we need.
95 */
96 public function registerMeta() {
97 register_meta(
98 'post',
99 '_surecart_dashboard_logo_width',
100 [
101 'auth_callback' => function ( $allowed, $meta_key, $object_id, $user_id, $cap, $caps ) {
102 return current_user_can( 'edit_post', $object_id );
103 },
104 'default' => '180px',
105 'show_in_rest' => true,
106 'single' => true,
107 'type' => 'string',
108 ]
109 );
110
111 foreach ( [
112 'show_logo',
113 'navigation_orders',
114 'navigation_invoices',
115 'navigation_subscriptions',
116 'navigation_downloads',
117 'navigation_billing',
118 'navigation_account',
119 ] as $toggle ) {
120 register_meta(
121 'post',
122 '_surecart_dashboard_' . $toggle,
123 [
124 'auth_callback' => function ( $allowed, $meta_key, $object_id, $user_id, $cap, $caps ) {
125 return current_user_can( 'edit_post', $object_id );
126 },
127 'default' => true,
128 'show_in_rest' => true,
129 'single' => true,
130 'type' => 'boolean',
131 ]
132 );
133 }
134 }
135
136 /**
137 * Is one of our templates active?
138 *
139 * @return boolean
140 */
141 public function isTemplateActive() {
142 $template = get_page_template_slug();
143 return false !== $template && array_key_exists( $template, $this->templates );
144 }
145
146 /**
147 * Add the templates. to the existing templates.
148 *
149 * @param array $posts_templates Existing templates.
150 *
151 * @return array
152 */
153 public function addTemplates( $posts_templates ) {
154 $translations['pages/template-surecart-blank.php'] = esc_html__( 'SureCart', 'surecart' );
155 $translations['pages/template-surecart-dashboard.php'] = esc_html__( 'SureCart Customer Dashboard', 'surecart' );
156 $translations['pages/template-surecart-product.php'] = esc_html__( 'SureCart Layout', 'surecart' );
157
158 return array_merge( $posts_templates, $this->templates );
159 }
160
161 /**
162 * Include the template if it is set.
163 *
164 * @param string $template Template url.
165 *
166 * @return string
167 */
168 public function includeTemplate( $template ) {
169 global $post;
170 $id = $post->ID ?? null;
171
172 if ( ! is_singular( $this->post_type ) ) {
173 return $template;
174 }
175
176 if ( wp_is_block_theme() ) {
177 return $template;
178 }
179
180 // check for product and use the template id.
181 $product = sc_get_product();
182
183 if ( ! empty( $product->metadata->wp_template_id ) ) {
184 $page_template = $product->metadata->wp_template_id;
185 } else {
186 $page_template = get_post_meta( $id, '_wp_page_template', true );
187 }
188
189 // if the set template does not match one of these templates.
190 if ( empty( $page_template ) || false === strpos( $page_template, '.php' ) ) {
191 return $template;
192 }
193
194 $file = trailingslashit( $this->container[ SURECART_CONFIG_KEY ]['app_core']['path'] ) . '/templates/' . $page_template;
195
196 // Return file if it exists.
197 if ( file_exists( $file ) ) {
198 return $file;
199 }
200
201 return $template;
202 }
203
204 /**
205 * Add to the body class if it's our template.
206 *
207 * @param array $body_class Array of body class names.
208 *
209 * @return array
210 */
211 public function bodyClass( $body_class ) {
212 $template = get_page_template_slug();
213
214 if ( false !== $template && $this->isTemplateActive() ) {
215 $body_class[] = 'surecart-template';
216 $body_class[] = 'surecart-template-' . get_template();
217 }
218
219 return $body_class;
220 }
221 }
222