PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 4.5.0
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v4.5.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 / UpsellPageController.php
surecart / app / src / Controllers / Web Last commit date
.gitkeep 3 years ago BasePageController.php 1 year ago BuyPageController.php 4 months ago CheckoutFormsController.php 2 years ago DashboardController.php 4 months ago PurchaseController.php 3 years ago SubscriptionsController.php 3 years ago UpsellPageController.php 1 year ago WebhookController.php 2 years ago
UpsellPageController.php
169 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 \SureCart::currency()->convert( true );
28 }
29
30 /**
31 * We don't wamt to index the upsell page.
32 *
33 * @return void
34 */
35 public function addSeoMetaData(): void {
36 ?>
37 <meta name="robots" content="noindex" />
38 <?php
39 }
40
41 /**
42 * Add edit links
43 *
44 * @param \WP_Admin_bar $wp_admin_bar The admin bar.
45 *
46 * @return void
47 */
48 public function addEditUpsellLink( $wp_admin_bar ) {
49 if ( empty( $this->model->id ) ) {
50 return;
51 }
52 $wp_admin_bar->add_node(
53 [
54 'id' => 'edit',
55 'title' => __( 'Edit Upsell Funnel', 'surecart' ),
56 'href' => esc_url( \SureCart::getUrl()->edit( 'upsell', $this->model->upsell_funnel ) ),
57 ]
58 );
59 }
60
61 /**
62 * Show the product page
63 *
64 * @param \SureCartCore\Requests\RequestInterface $request Request.
65 * @param \SureCartCore\View $view View.
66 * @param string $id The id of the product.
67 * @return function
68 */
69 public function show( $request, $view ) {
70 // fetch the upsell.
71 $this->model = \SureCart\Models\Upsell::with( [ 'price' ] )->find( get_query_var( 'sc_upsell_id' ) );
72 if ( is_wp_error( $this->model ) ) {
73 return $this->handleError( $this->model );
74 }
75
76 // does not exist on checkout.
77 if ( empty( $this->model->price->product ) ) {
78 return $this->notFound();
79 }
80
81 // this is typically cached.
82 $this->product = \SureCart\Models\Product::with( [ 'image', 'prices', 'product_medias', 'product_media.media', 'variants', 'variant_options' ] )->find( $this->model->price->product );
83
84 // Stop if the product is not found.
85 if ( empty( $this->product ) ) {
86 return $this->notFound();
87 }
88
89 // Set the product page id.
90 set_query_var( 'surecart_current_product', $this->product );
91
92 // add the filters.
93 $this->filters();
94
95 // Set initial state.
96 sc_initial_state(
97 [
98 'product' => [
99 // we need to force the selected price.
100 $this->product->id => $this->product->getInitialPageState( [ 'selectedPrice' => $this->model->price->toArray() ] ),
101 ],
102 'upsell' => [
103 'product' => $this->product,
104 'upsell' => $this->model,
105 'form_id' => (int) $request->query( 'sc_form_id' ) ?? null,
106 'checkout_id' => esc_attr( $request->query( 'sc_checkout_id' ) ?? null ),
107 'text' => $this->getCheckoutText( (int) $request->query( 'sc_form_id' ) ?? '' ),
108 'success_url' => esc_url( $this->getCheckoutSuccessUrl( (int) $request->query( 'sc_form_id' ) ?? '' ) ),
109 ],
110 ]
111 );
112
113 // handle block theme.
114 if ( wp_is_block_theme() ) {
115 global $_wp_current_template_content;
116 $_wp_current_template_content = get_block_template( $this->model->template_id )->content ?? '';
117 }
118
119 // include the default view.
120 include $view;
121
122 return \SureCart::response();
123 }
124
125 /**
126 * Get the checkout success text.
127 *
128 * @return array
129 */
130 public function getCheckoutText( int $form_id ) {
131 $form = get_post( $form_id );
132
133 if ( is_wp_error( $form ) || empty( $form ) ) {
134 return '';
135 }
136
137 $block = wp_get_first_block( parse_blocks( $form->post_content ), 'surecart/form' );
138 $attributes = $block['attrs'] ?? [];
139
140 return array_filter(
141 [
142 'success' => array_filter( $attributes['success_text'] ?? [] ),
143 ]
144 );
145 }
146
147 /**
148 * Get the success url by form id.
149 *
150 * @param int $form_id Checkout form id.
151 * @return string The success url.
152 */
153 public function getCheckoutSuccessUrl( int $form_id ): string {
154 $form = get_post( $form_id );
155
156 if ( is_wp_error( $form ) || empty( $form ) ) {
157 return '';
158 }
159
160 $block = wp_get_first_block( parse_blocks( $form->post_content ), 'surecart/form' );
161
162 if ( empty( $block ) || empty( $block['attrs']['success_url'] ) ) {
163 return '';
164 }
165
166 return $block['attrs']['success_url'];
167 }
168 }
169