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