PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 1.4.0
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v1.4.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 / Models / Form.php
surecart / app / src / Models Last commit date
Traits 3 years ago AbandonedCheckout.php 3 years ago AbandonedCheckoutProtocol.php 3 years ago Account.php 3 years ago AccountPortalSession.php 3 years ago Activation.php 3 years ago ApiToken.php 3 years ago BalanceTransaction.php 3 years ago Brand.php 3 years ago Bump.php 3 years ago Charge.php 3 years ago Checkout.php 3 years ago Collection.php 3 years ago Component.php 3 years ago Coupon.php 3 years ago Customer.php 3 years ago CustomerLink.php 3 years ago CustomerNotificationProtocol.php 3 years ago DatabaseModel.php 3 years ago Download.php 3 years ago Event.php 3 years ago Form.php 3 years ago Integration.php 3 years ago Invoice.php 3 years ago License.php 3 years ago LineItem.php 3 years ago ManualPaymentMethod.php 3 years ago Media.php 3 years ago Model.php 3 years ago ModelInterface.php 3 years ago Order.php 3 years ago OrderProtocol.php 3 years ago PaymentIntent.php 3 years ago PaymentMethod.php 3 years ago Period.php 3 years ago PortalProtocol.php 3 years ago PortalSession.php 3 years ago Price.php 3 years ago Processor.php 3 years ago Product.php 3 years ago ProductGroup.php 3 years ago Promotion.php 3 years ago Purchase.php 3 years ago Refund.php 3 years ago Statistic.php 3 years ago Subscription.php 3 years ago SubscriptionProtocol.php 3 years ago TaxProtocol.php 3 years ago TaxRegistration.php 3 years ago TaxZone.php 3 years ago Upload.php 3 years ago User.php 3 years ago VerificationCode.php 3 years ago Webhook.php 3 years ago
Form.php
202 lines
1 <?php
2
3 namespace SureCart\Models;
4
5 use SureCart\Models\Product;
6
7 /**
8 * Checkout form class
9 */
10 class Form {
11 /**
12 * Holds the form post.
13 *
14 * @var \WP_Post;
15 */
16 protected $post;
17
18 /**
19 * Get the post
20 *
21 * @param [type] $id
22 */
23 final public function __construct( $id = 0 ) {
24 $this->post = get_post( $id );
25 }
26
27 /**
28 * The form's post type
29 *
30 * @return string The post type.
31 */
32 protected function getPostType() {
33 // TODO: get this from registration.
34 return 'sc_form';
35 }
36
37 /**
38 * Get the stored product choices
39 *
40 * @param int|WP_Post $id Post object or id.
41 * @return array
42 */
43 protected function getPriceIds( $id ) {
44 $this->post = get_post( $id );
45 $blocks = parse_blocks( $this->post->post_content );
46 return $this->getNested( $blocks, 'price_id' );
47 }
48
49 /**
50 * Get a form's attribute
51 *
52 * @param string $attribute Attribute name.
53 * @return mixed
54 */
55 public function getAttribute( $attribute ) {
56 $blocks = parse_blocks( $this->post->post_content );
57 $form_block = $blocks[0] ?? false;
58 if ( ! $form_block || 'surecart/form' !== $form_block['blockName'] ) {
59 return '';
60 }
61 return $form_block['attrs'][ $attribute ] ?? null;
62 }
63
64 /**
65 * Get the form's mode
66 *
67 * @param int|WP_Post $id Post object or id.
68 * @return string
69 */
70 protected function getMode( $id ) {
71 $this->post = get_post( $id );
72 $blocks = parse_blocks( $this->post->post_content );
73 $form_block = $blocks[0] ?? false;
74 if ( ! $form_block || 'surecart/form' !== $form_block['blockName'] ) {
75 return '';
76 }
77 return $form_block['attrs']['mode'] ?? 'live';
78 }
79
80 /**
81 * Get nested values from an array
82 *
83 * @param array $array Array to search.
84 * @param string $nested_key Nested key to search for.
85 * @return array
86 */
87 protected function getNested( array $array, $nested_key ) {
88 $return = array();
89 array_walk_recursive(
90 $array,
91 function( $a, $key ) use ( &$return, $nested_key ) {
92 if ( $nested_key === $key ) {
93 $return[] = $a;
94 }
95 }
96 );
97 return $return;
98 }
99
100 /**
101 * Get the form's products.
102 *
103 * @param int|WP_Post Block post id.
104 */
105 protected function getProducts( $id ) {
106 $ids = $this->getPriceIds( $id );
107 // no products.
108 if ( empty( $ids ) ) {
109 return [];
110 }
111
112 // get prices with their product
113 $prices = Price::where(
114 [
115 'ids' => $ids,
116 ]
117 )->with( [ 'product' ] )->get();
118
119 $products = [];
120 foreach ( $prices as $price ) {
121 $products[] = $price->product;
122 }
123 return $products;
124 }
125
126 protected function getPosts( $id ) {
127 $blocks = $this->searchBlocks( $id );
128 $shortcodes = $this->searchShortcodes( $id );
129 return array_merge( $blocks, $shortcodes );
130 }
131
132 public function searchBlocks( $id ) {
133 return get_posts(
134 [
135 's' => '<!-- wp:surecart/checkout-form {"id":' . (int) $id,
136 'sentence' => 1,
137 'post_type' => 'any',
138 'per_page' => -1,
139 ]
140 );
141 }
142
143 public function searchShortcodes( $id ) {
144 return get_posts(
145 [
146 's' => '[sc_form id=' . (int) $id,
147 'sentence' => 1,
148 'post_type' => 'any',
149 'per_page' => -1,
150 ]
151 );
152 }
153
154 /**
155 * Get blocks from the posts.
156 *
157 * @param array $posts Array of posts.
158 * @return array Array of blocks.
159 */
160 public function getBlocksFromPosts( $posts ) {
161 $blocks = [];
162 foreach ( $posts as $post ) {
163 $parsed_blocks = parse_blocks( $post->post_content );
164 $blocks = array_merge( $blocks, $this->findCheckoutBlocks( $parsed_blocks, $post ) );
165 }
166 return array_filter( $blocks );
167 }
168
169 /**
170 * Find our checkout block.
171 *
172 * @param array $post_blocks Blocks array.
173 * @param \WP_Post $post_object Post object.
174 * @return array
175 */
176 public function findCheckoutBlocks( $post_blocks, \WP_Post $post_object ) {
177 $blocks = [];
178 foreach ( $post_blocks as $block ) {
179 if ( 'surecart/checkout-form' === $block['blockName'] ) {
180 $block['post'] = $post_object;
181 $blocks[] = $block;
182 } elseif ( ! empty( $block['innerBlocks'] ) ) {
183 $blocks = array_merge( $blocks, $this->findCheckoutBlocks( $block['innerBlocks'], $post_object ) );
184 }
185 }
186
187 return array_filter( $blocks );
188 }
189
190 /**
191 * Static Facade Accessor
192 *
193 * @param string $method Method to call.
194 * @param mixed $params Method params.
195 *
196 * @return mixed
197 */
198 public static function __callStatic( $method, $params ) {
199 return call_user_func_array( [ new static(), $method ], $params );
200 }
201 }
202