PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 2.6.1
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v2.6.1
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 / BuyPageController.php
surecart / app / src / Controllers / Web Last commit date
.gitkeep 3 years ago BuyPageController.php 2 years ago DashboardController.php 3 years ago ProductPageController.php 3 years ago ProductTypePageController.php 3 years ago PurchaseController.php 3 years ago SubscriptionsController.php 3 years ago WebhookController.php 2 years ago
BuyPageController.php
200 lines
1 <?php
2 namespace SureCart\Controllers\Web;
3
4 use SureCart\Support\Currency;
5
6 /**
7 * Handles webhooks
8 */
9 class BuyPageController extends ProductTypePageController {
10 /**
11 * Handle filters.
12 *
13 * @return void
14 */
15 public function filters() {
16 parent::filters();
17 // do not persist the cart for this page.
18 add_filter( 'surecart-components/scData', [ $this, 'doNotPersistCart' ], 10, 2 );
19 // add styles.
20 add_action( 'wp_enqueue_scripts', [ $this, 'styles' ] );
21 // add scripts.
22 add_action( 'wp_enqueue_scripts', [ $this, 'scripts' ] );
23 }
24
25 /**
26 * Preload the image above the fold.
27 *
28 * @return void
29 */
30 public function preloadImage() {
31 if ( empty( $this->product->product_medias->data ) || is_wp_error( $this->product->product_medias->data ) ) {
32 return;
33 }
34 $product_media = $this->product->product_medias->data[0];
35 ?>
36 <link rel="preload" fetchpriority="high" as="image" href="<?php echo esc_url( $product_media->getUrl( 450 ) ); ?>">
37 <?php
38 }
39
40 /**
41 * Add edit links
42 *
43 * @param \WP_Admin_bar $wp_admin_bar The admin bar.
44 *
45 * @return void
46 */
47 public function addEditProductLink( $wp_admin_bar ) {
48 if ( empty( $this->product->id ) ) {
49 return;
50 }
51 $wp_admin_bar->add_node(
52 [
53 'id' => 'edit',
54 'title' => __( 'Edit Product', 'surecart' ),
55 'href' => esc_url( \SureCart::getUrl()->edit( 'product', $this->product->id ) ),
56 ]
57 );
58 }
59
60 /**
61 * Show the product page
62 *
63 * @param \SureCartCore\Requests\RequestInterface $request Request.
64 * @param \SureCartCore\View $view View.
65 * @param string $id The id of the product.
66 * @return function
67 */
68 public function show( $request, $view, $id ) {
69 $id = get_query_var( 'sc_checkout_product_id' );
70
71 // fetch the product by id/slug.
72 $this->product = \SureCart\Models\Product::with( [ 'image', 'prices', 'product_medias', 'product_media.media' ] )->find( $id );
73 if ( is_wp_error( $this->product ) ) {
74 return $this->handleError( $this->product );
75 }
76
77 // if this buy page is not enabled, check read permissions.
78 if ( ! $this->product->buyLink()->isEnabled() && ! current_user_can( 'read_sc_products' ) ) {
79 return $this->notFound();
80 }
81
82 // slug changed or we are using the id, redirect.
83 if ( $this->product->slug !== $id ) {
84 return \SureCart::redirect()->to( esc_url_raw( \SureCart::routeUrl( 'product', [ 'id' => $this->product->slug ] ) ) );
85 }
86
87 // get active prices.
88 $active_prices = $this->product->activePrices();
89
90 // must have at least one active price.
91 if ( empty( $active_prices[0] ) ) {
92 return $this->notFound();
93 }
94
95 // prevent 404 redirects by 3rd party plugins.
96 $_SERVER['REQUEST_URI'] = $request->getUrl();
97
98 // add the filters.
99 $this->filters();
100
101 // render the view.
102 return \SureCart::view( 'web/buy' )->with(
103 [
104 'product' => $this->product,
105 'prices' => $active_prices,
106 'selected_price' => $active_prices[0] ?? null,
107 'terms_text' => $this->termsText(),
108 'mode' => $this->product->buyLink()->getMode(),
109 'store_name' => \SureCart::account()->name ?? get_bloginfo(),
110 'logo_url' => \SureCart::account()->brand->logo_url,
111 'logo_width' => \SureCart::settings()->get( 'buy_link_logo_width', '180px' ),
112 'user' => wp_get_current_user(),
113 'logout_link' => wp_logout_url( $request->getUrl() ),
114 'dashboard_link' => \SureCart::pages()->url( 'dashboard' ),
115 'enabled' => $this->product->buyLink()->isEnabled(),
116 'show_logo' => $this->product->buyLink()->templatePartEnabled( 'logo' ),
117 'show_terms' => $this->product->buyLink()->templatePartEnabled( 'terms' ),
118 'show_image' => $this->product->buyLink()->templatePartEnabled( 'image' ),
119 'show_description' => $this->product->buyLink()->templatePartEnabled( 'description' ),
120 'show_coupon' => $this->product->buyLink()->templatePartEnabled( 'coupon' ),
121 ]
122 );
123 }
124
125 /**
126 * Enqueue styles.
127 *
128 * @return void
129 */
130 public function styles() {
131 wp_enqueue_style(
132 'surecart/instant-checkout',
133 trailingslashit( \SureCart::core()->assets()->getUrl() ) . 'dist/templates/instant-checkout.css',
134 [],
135 filemtime( trailingslashit( plugin_dir_path( SURECART_PLUGIN_FILE ) ) . 'dist/templates/instant-checkout.css' ),
136 );
137
138 // add recaptcha if enabled.
139 if ( \SureCart::settings()->recaptcha()->isEnabled() ) {
140 wp_enqueue_script( 'surecart-google-recaptcha' );
141 }
142 }
143
144 /**
145 * Generate the terms html.
146 *
147 * @return string
148 */
149 public function termsText() {
150 $terms_url = \SureCart::account()->portal_protocol->terms_url;
151 $privacy_url = \SureCart::account()->portal_protocol->privacy_url;
152
153 if ( ! empty( $terms_url ) && ! empty( $privacy_url ) ) {
154 return sprintf(
155 // translators: %1$1s is the store name, %2$2s is the opening anchor tag, %3$3s is the closing anchor tag, %4$4s is the opening anchor tag, %5$5s is the closing anchor tag.
156 __( "I agree to %1$1s's %2$2sTerms%3$3s and %4$4sPrivacy Policy%5$5s", 'surecart' ),
157 esc_html( \SureCart::account()->name ),
158 '<a href="' . esc_url( $terms_url ) . '" target="_blank">',
159 '</a>',
160 '<a href="' . esc_url( $privacy_url ) . '" target="_blank">',
161 '</a>'
162 );
163 }
164
165 if ( $terms_url ) {
166 return sprintf(
167 // translators: %1$1s is the store name, %2$2s is the opening anchor tag, %3$3s is the closing anchor tag.
168 __( "I agree to %1$1s's %2$2sTerms%3$3s", 'surecart' ),
169 esc_html( \SureCart::account()->name ),
170 '<a href="' . esc_url( $terms_url ) . '" target="_blank">',
171 '</a>'
172 );
173 }
174
175 if ( $privacy_url ) {
176 return sprintf(
177 // translators: %1$1s is the store name, %2$2s is the opening anchor tag, %3$3s is the closing anchor tag.
178 __( "I agree to %1$1s's %2$2sPrivacy Policy%3$3s", 'surecart' ),
179 esc_html( \SureCart::account()->name ),
180 '<a href="' . esc_url( $privacy_url ) . '" target="_blank">',
181 '</a>'
182 );
183 }
184
185 return '';
186 }
187
188 /**
189 * Do not persist the cart on the buy page.
190 *
191 * @param array $data ScData array.
192 *
193 * @return array
194 */
195 public function doNotPersistCart( $data ) {
196 $data['do_not_persist_cart'] = true;
197 return $data;
198 }
199 }
200