PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 2.13.0
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v2.13.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 / Controllers / Web / BasePageController.php
surecart / app / src / Controllers / Web Last commit date
.gitkeep 3 years ago BasePageController.php 2 years ago BuyPageController.php 2 years ago CollectionPageController.php 2 years ago DashboardController.php 3 years ago ProductPageController.php 2 years ago PurchaseController.php 3 years ago SubscriptionsController.php 3 years ago WebhookController.php 2 years ago
BasePageController.php
173 lines
1 <?php
2
3 declare(strict_types=1);
4
5 namespace SureCart\Controllers\Web;
6
7 /**
8 * Base Page Controller Abstract class.
9 */
10 abstract class BasePageController {
11 /**
12 * Specified model.
13 *
14 * @var object
15 */
16 protected $model;
17
18 /**
19 * Set the model.
20 *
21 * @param object $model Model, eg- Product, ProductCollection.
22 *
23 * @return void
24 */
25 protected function setModel( $model ): void {
26 $this->model = $model;
27 }
28
29 /**
30 * Enqueue scripts.
31 * Add data for specific store by overriding this method.
32 *
33 * @return void
34 */
35 public function scripts() {
36 \SureCart::assets()->enqueueComponents();
37 wp_localize_script(
38 'surecart-components',
39 'sc',
40 [
41 'store' => (object) [],
42 ]
43 );
44 }
45
46 /**
47 * Handle fetching error.
48 *
49 * @param \WP_Error $wp_error WP Error.
50 *
51 * @return void
52 */
53 public function handleError( \WP_Error $wp_error ): void {
54 $data = (array) $wp_error->get_error_data();
55 if ( 404 === ( $data['status'] ?? null ) ) {
56 $this->notFound();
57 }
58
59 wp_die( esc_html( implode( ' ', $wp_error->get_error_messages() ) ) );
60 }
61
62 /**
63 * Handle not found error.
64 *
65 * @return void
66 */
67 public function notFound(): void {
68 global $wp_query;
69 $wp_query->set_404();
70 status_header( 404 );
71 get_template_part( 404 );
72 exit();
73 }
74
75 /**
76 * Handle filters.
77 *
78 * @return void
79 */
80 public function filters(): void {
81 // set the document title.
82 add_filter( 'document_title_parts', [ $this, 'documentTitle' ] );
83 // disallow pre title filter.
84 add_filter( 'pre_get_document_title', [ $this, 'disallowPreTitle' ], 214748364 );
85 // add scripts.
86 add_action( 'wp_enqueue_scripts', [ $this, 'scripts' ] );
87 // preload image.
88 add_action( 'wp_head', [ $this, 'preloadImage' ] );
89 // maybe add json schema.
90 add_action( 'wp_head', [ $this, 'displaySchema' ] );
91 // add meta title and description.
92 add_action( 'wp_head', [ $this, 'addSeoMetaData' ] );
93 }
94
95 /**
96 * Add meta title and description.
97 *
98 * @return void
99 */
100 public function addSeoMetaData(): void {
101 ?>
102 <!-- Primary Meta -->
103 <meta name="title" content="<?php echo esc_attr( sanitize_text_field( $this->model->page_title ) ); ?>">
104 <meta name="description" content="<?php echo esc_attr( sanitize_text_field( $this->model->meta_description ) ); ?>">
105
106 <!-- Open Graph -->
107 <meta property="og:locale" content="<?php echo esc_attr( get_locale() ); ?>" />
108 <meta property="og:type" content="website" />
109 <meta property="og:title" content="<?php echo esc_attr( $this->model->page_title ); ?>" />
110 <meta property="og:description" content="<?php echo esc_attr( sanitize_text_field( $this->model->meta_description ) ); ?>" />
111 <meta property="og:url" content="<?php echo esc_url( $this->model->permalink ); ?>" />
112 <meta property="og:site_name" content="<?php bloginfo( 'name' ); ?>" />
113 <?php if ( ! empty( $this->model->getImageUrl( 800 ) ) ) { ?>
114 <meta property="og:image" content="<?php echo esc_url( $this->model->getImageUrl( 800 ) ); ?>" />
115 <?php } ?>
116 <?php
117 }
118
119 /**
120 * Display the JSON Schema.
121 *
122 * @return void
123 */
124 public function displaySchema(): void {
125 $schema = $this->model->getJsonSchemaArray() ?? [];
126
127 if ( empty( $schema ) ) {
128 return;
129 }
130 ?>
131 <script type="application/ld+json"><?php echo wp_json_encode( $schema ); ?></script>
132 <?php
133 }
134
135 /**
136 * Preload the product image.
137 *
138 * @return void
139 */
140 public function preloadImage(): void {
141 if ( empty( $this->model->image_url ) ) {
142 return;
143 }
144 ?>
145 <link rel="preload" href="<?php echo esc_url( $this->model->image_url ); ?>" as="image">
146 <?php
147 }
148
149 /**
150 * Update the document title name to match the model[eg-product] name.
151 *
152 * @param array $parts The parts of the document title.
153 */
154 public function documentTitle( $parts ): array {
155 $parts['title'] = esc_html( sanitize_text_field( $this->model->page_title ?? $parts['title'] ) );
156 return $parts;
157 }
158
159 /**
160 * Disallow the pre title.
161 *
162 * @param string $title The title.
163 *
164 * @return string
165 */
166 public function disallowPreTitle( $title ): string {
167 if ( ! empty( $this->model->id ) ) {
168 return '';
169 }
170 return $title;
171 }
172 }
173