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