PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 2.0.0
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v2.0.0
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 / BuyPageController.php
surecart / app / src / Controllers / Web Last commit date
.gitkeep 4 years ago BuyPageController.php 3 years ago DashboardController.php 3 years ago ProductPageController.php 3 years ago ProductTypePageController.php 3 years ago PurchaseController.php 4 years ago SubscriptionsController.php 4 years ago WebhookController.php 3 years ago
BuyPageController.php
195 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
139 /**
140 * Generate the terms html.
141 *
142 * @return string
143 */
144 public function termsText() {
145 $terms_url = \SureCart::account()->portal_protocol->terms_url;
146 $privacy_url = \SureCart::account()->portal_protocol->privacy_url;
147
148 if ( ! empty( $terms_url ) && ! empty( $privacy_url ) ) {
149 return sprintf(
150 // 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.
151 __( "I agree to %1$1s's %2$2sTerms%3$3s and %4$4sPrivacy Policy%5$5s", 'surecart' ),
152 esc_html( \SureCart::account()->name ),
153 '<a href="' . esc_url( $terms_url ) . '" target="_blank">',
154 '</a>',
155 '<a href="' . esc_url( $privacy_url ) . '" target="_blank">',
156 '</a>'
157 );
158 }
159
160 if ( $terms_url ) {
161 return sprintf(
162 // translators: %1$1s is the store name, %2$2s is the opening anchor tag, %3$3s is the closing anchor tag.
163 __( "I agree to %1$1s's %2$2sTerms%3$3s", 'surecart' ),
164 esc_html( \SureCart::account()->name ),
165 '<a href="' . esc_url( $terms_url ) . '" target="_blank">',
166 '</a>'
167 );
168 }
169
170 if ( $privacy_url ) {
171 return sprintf(
172 // translators: %1$1s is the store name, %2$2s is the opening anchor tag, %3$3s is the closing anchor tag.
173 __( "I agree to %1$1s's %2$2sPrivacy Policy%3$3s", 'surecart' ),
174 esc_html( \SureCart::account()->name ),
175 '<a href="' . esc_url( $privacy_url ) . '" target="_blank">',
176 '</a>'
177 );
178 }
179
180 return '';
181 }
182
183 /**
184 * Do not persist the cart on the buy page.
185 *
186 * @param array $data ScData array.
187 *
188 * @return array
189 */
190 public function doNotPersistCart( $data ) {
191 $data['do_not_persist_cart'] = true;
192 return $data;
193 }
194 }
195