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.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 1 year ago BuyPageController.php 1 year ago CheckoutFormsController.php 2 years ago DashboardController.php 1 year ago PurchaseController.php 3 years ago SubscriptionsController.php 3 years ago UpsellPageController.php 1 year ago WebhookController.php 2 years ago
BasePageController.php
158 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 // add meta title and description.
90 add_action( 'wp_head', [ $this, 'addSeoMetaData' ] );
91 }
92
93 /**
94 * Add meta title and description.
95 *
96 * @return void
97 */
98 public function addSeoMetaData(): void {
99 ?>
100 <!-- Primary Meta -->
101 <meta name="title" content="<?php echo esc_attr( sanitize_text_field( $this->model->page_title ) ); ?>">
102 <meta name="description" content="<?php echo esc_attr( sanitize_text_field( $this->model->meta_description ) ); ?>">
103
104 <!-- Canonical -->
105 <link rel="canonical" href="<?php echo esc_url( $this->model->permalink ); ?>">
106
107 <!-- Open Graph -->
108 <meta property="og:locale" content="<?php echo esc_attr( get_locale() ); ?>" />
109 <meta property="og:type" content="website" />
110 <meta property="og:title" content="<?php echo esc_attr( $this->model->page_title ); ?>" />
111 <meta property="og:description" content="<?php echo esc_attr( sanitize_text_field( $this->model->meta_description ) ); ?>" />
112 <meta property="og:url" content="<?php echo esc_url( $this->model->permalink ); ?>" />
113 <meta property="og:site_name" content="<?php bloginfo( 'name' ); ?>" />
114 <?php if ( ! empty( $this->model->getImageUrl( 800 ) ) ) { ?>
115 <meta property="og:image" content="<?php echo esc_url( $this->model->getImageUrl( 800 ) ); ?>" />
116 <?php } ?>
117 <?php
118 }
119
120 /**
121 * Preload the product image.
122 *
123 * @return void
124 */
125 public function preloadImage(): void {
126 if ( empty( $this->model->image_url ) ) {
127 return;
128 }
129 ?>
130 <link rel="preload" href="<?php echo esc_url( $this->model->image_url ); ?>" as="image">
131 <?php
132 }
133
134 /**
135 * Update the document title name to match the model[eg-product] name.
136 *
137 * @param array $parts The parts of the document title.
138 */
139 public function documentTitle( $parts ): array {
140 $parts['title'] = esc_html( sanitize_text_field( $this->model->page_title ?? $parts['title'] ) );
141 return $parts;
142 }
143
144 /**
145 * Disallow the pre title.
146 *
147 * @param string $title The title.
148 *
149 * @return string
150 */
151 public function disallowPreTitle( $title ) {
152 if ( ! empty( $this->model->id ) ) {
153 return '';
154 }
155 return $title;
156 }
157 }
158