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