PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 2.19.4
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v2.19.4
4.7.1 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 / Controllers / Web / BasePageController.php
surecart / app / src / Controllers / Web Last commit date
.gitkeep 4 years ago BasePageController.php 2 years ago BuyPageController.php 2 years ago CollectionPageController.php 2 years ago DashboardController.php 2 years ago ProductPageController.php 2 years ago PurchaseController.php 4 years ago SubscriptionsController.php 4 years ago UpsellPageController.php 2 years ago WebhookController.php 2 years ago
BasePageController.php
176 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 <!-- Canonical -->
107 <link rel="canonical" href="<?php echo esc_url( $this->model->permalink ); ?>">
108
109 <!-- Open Graph -->
110 <meta property="og:locale" content="<?php echo esc_attr( get_locale() ); ?>" />
111 <meta property="og:type" content="website" />
112 <meta property="og:title" content="<?php echo esc_attr( $this->model->page_title ); ?>" />
113 <meta property="og:description" content="<?php echo esc_attr( sanitize_text_field( $this->model->meta_description ) ); ?>" />
114 <meta property="og:url" content="<?php echo esc_url( $this->model->permalink ); ?>" />
115 <meta property="og:site_name" content="<?php bloginfo( 'name' ); ?>" />
116 <?php if ( ! empty( $this->model->getImageUrl( 800 ) ) ) { ?>
117 <meta property="og:image" content="<?php echo esc_url( $this->model->getImageUrl( 800 ) ); ?>" />
118 <?php } ?>
119 <?php
120 }
121
122 /**
123 * Display the JSON Schema.
124 *
125 * @return void
126 */
127 public function displaySchema(): void {
128 $schema = $this->model->getJsonSchemaArray() ?? [];
129
130 if ( empty( $schema ) ) {
131 return;
132 }
133 ?>
134 <script type="application/ld+json"><?php echo wp_json_encode( $schema ); ?></script>
135 <?php
136 }
137
138 /**
139 * Preload the product image.
140 *
141 * @return void
142 */
143 public function preloadImage(): void {
144 if ( empty( $this->model->image_url ) ) {
145 return;
146 }
147 ?>
148 <link rel="preload" href="<?php echo esc_url( $this->model->image_url ); ?>" as="image">
149 <?php
150 }
151
152 /**
153 * Update the document title name to match the model[eg-product] name.
154 *
155 * @param array $parts The parts of the document title.
156 */
157 public function documentTitle( $parts ): array {
158 $parts['title'] = esc_html( sanitize_text_field( $this->model->page_title ?? $parts['title'] ) );
159 return $parts;
160 }
161
162 /**
163 * Disallow the pre title.
164 *
165 * @param string $title The title.
166 *
167 * @return string
168 */
169 public function disallowPreTitle( $title ): string {
170 if ( ! empty( $this->model->id ) ) {
171 return '';
172 }
173 return $title;
174 }
175 }
176