PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 3.0.3
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v3.0.3
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
218 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 return array_merge( $posts_templates, $this->templates );
155 }
156
157 /**
158 * Include the template if it is set.
159 *
160 * @param string $template Template url.
161 *
162 * @return string
163 */
164 public function includeTemplate( $template ) {
165 global $post;
166 $id = $post->ID ?? null;
167
168 if ( ! is_singular( $this->post_type ) ) {
169 return $template;
170 }
171
172 if ( wp_is_block_theme() ) {
173 return $template;
174 }
175
176 // check for product and use the template id.
177 $product = get_query_var( 'surecart_current_product' );
178
179 if ( ! empty( $product->metadata->wp_template_id ) ) {
180 $page_template = $product->metadata->wp_template_id;
181 } else {
182 $page_template = get_post_meta( $id, '_wp_page_template', true );
183 }
184
185 // if the set template does not match one of these templates.
186 if ( empty( $page_template ) || false === strpos( $page_template, '.php' ) ) {
187 return $template;
188 }
189
190 $file = trailingslashit( $this->container[ SURECART_CONFIG_KEY ]['app_core']['path'] ) . '/templates/' . $page_template;
191
192 // Return file if it exists.
193 if ( file_exists( $file ) ) {
194 return $file;
195 }
196
197 return $template;
198 }
199
200 /**
201 * Add to the body class if it's our template.
202 *
203 * @param array $body_class Array of body class names.
204 *
205 * @return array
206 */
207 public function bodyClass( $body_class ) {
208 $template = get_page_template_slug();
209
210 if ( false !== $template && $this->isTemplateActive() ) {
211 $body_class[] = 'surecart-template';
212 $body_class[] = 'surecart-template-' . get_template();
213 }
214
215 return $body_class;
216 }
217 }
218