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 / UpsellPageController.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
UpsellPageController.php
166 lines
1 <?php
2
3 namespace SureCart\Controllers\Web;
4
5 /**
6 * Handles Upsell Page requests for frontend.
7 */
8 class UpsellPageController extends BasePageController {
9 /**
10 * The product model.
11 *
12 * @var \SureCart\Models\Product
13 */
14 protected $product;
15
16 /**
17 * Handle filters.
18 *
19 * @return void
20 */
21 public function filters(): void {
22 parent::filters();
23
24 // Add edit product link to admin bar.
25 add_action( 'admin_bar_menu', [ $this, 'addEditUpsellLink' ], 99 );
26 }
27
28 /**
29 * We don't wamt to index the upsell page.
30 *
31 * @return void
32 */
33 public function addSeoMetaData(): void { ?>
34 <meta name="robots" content="noindex" />
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 addEditUpsellLink( $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 Upsell Funnel', 'surecart' ),
53 'href' => esc_url( \SureCart::getUrl()->edit( 'upsell', $this->model->upsell_funnel ) ),
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 ) {
67 // fetch the upsell.
68 $this->model = \SureCart\Models\Upsell::with( [ 'price' ] )->find( get_query_var( 'sc_upsell_id' ) );
69 if ( is_wp_error( $this->model ) ) {
70 return $this->handleError( $this->model );
71 }
72
73 // does not exist on checkout.
74 if ( empty( $this->model->price->product ) ) {
75 return $this->notFound();
76 }
77
78 // this is typically cached.
79 $this->product = \SureCart\Models\Product::with( [ 'image', 'prices', 'product_medias', 'product_media.media', 'variants', 'variant_options' ] )->find( $this->model->price->product );
80
81 // Stop if the product is not found.
82 if ( empty( $this->product ) ) {
83 return $this->notFound();
84 }
85
86 // Set the product page id.
87 set_query_var( 'surecart_current_product', $this->product );
88
89 // add the filters.
90 $this->filters();
91
92 // Set initial state.
93 sc_initial_state(
94 [
95 'product' => [
96 // we need to force the selected price.
97 $this->product->id => $this->product->getInitialPageState( [ 'selectedPrice' => $this->model->price ] ),
98 ],
99 'upsell' => [
100 'product' => $this->product,
101 'upsell' => $this->model,
102 'form_id' => (int) $request->query( 'sc_form_id' ) ?? null,
103 'checkout_id' => esc_attr( $request->query( 'sc_checkout_id' ) ?? null ),
104 'text' => $this->getCheckoutText( (int) $request->query( 'sc_form_id' ) ?? '' ),
105 'success_url' => esc_url( $this->getCheckoutSuccessUrl( (int) $request->query( 'sc_form_id' ) ?? '' ) ),
106 ],
107 ]
108 );
109
110 // handle block theme.
111 if ( wp_is_block_theme() ) {
112 global $_wp_current_template_content;
113 $_wp_current_template_content = $this->model->template->content ?? '';
114 }
115
116 // include the default view.
117 include $view;
118
119 return \SureCart::response();
120 }
121
122 /**
123 * Get the checkout success text.
124 *
125 * @return array
126 */
127 public function getCheckoutText( int $form_id ) {
128 $form = get_post( $form_id );
129
130 if ( is_wp_error( $form ) || empty( $form ) ) {
131 return '';
132 }
133
134 $block = wp_get_first_block( parse_blocks( $form->post_content ), 'surecart/form' );
135 $attributes = $block['attrs'] ?? [];
136
137 return array_filter(
138 [
139 'success' => array_filter( $attributes['success_text'] ?? [] ),
140 ]
141 );
142 }
143
144 /**
145 * Get the success url by form id.
146 *
147 * @param int $form_id Checkout form id.
148 * @return string The success url.
149 */
150 public function getCheckoutSuccessUrl( int $form_id ): string {
151 $form = get_post( $form_id );
152
153 if ( is_wp_error( $form ) || empty( $form ) ) {
154 return '';
155 }
156
157 $block = wp_get_first_block( parse_blocks( $form->post_content ), 'surecart/form' );
158
159 if ( empty( $block ) || empty( $block['attrs']['success_url'] ) ) {
160 return '';
161 }
162
163 return $block['attrs']['success_url'];
164 }
165 }
166