PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.0-beta
Jetpack – WP Security, Backup, Speed, & Growth v16.0-beta
16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / modules / simple-payments / simple-payments.php
jetpack / modules / simple-payments Last commit date
paypal-express-checkout.js 1 year ago simple-payments.css 7 months ago simple-payments.php 7 months ago
simple-payments.php
274 lines
1 <?php // phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
2 /**
3 * Simple Payments lets users embed a PayPal button fully integrated with wpcom to sell products on the site.
4 * This is not a proper module yet, because not all the pieces are in place. Until everything is shipped, it can be turned
5 * into module that can be enabled/disabled.
6 *
7 * @package automattic/jetpack
8 */
9
10 use Automattic\Jetpack\Paypal_Payments\Simple_Payments as PayPal_Simple_Payments;
11
12 if ( ! defined( 'ABSPATH' ) ) {
13 exit( 0 );
14 }
15
16 /**
17 * Jetpack_Simple_Payments
18 */
19 class Jetpack_Simple_Payments {
20 // These have to be under 20 chars because that is CPT limit.
21
22 /**
23 * Post type order.
24 *
25 * @var string
26 */
27 public static $post_type_order = 'jp_pay_order';
28
29 /**
30 * Post type product.
31 *
32 * @var string
33 */
34 public static $post_type_product = 'jp_pay_product';
35
36 /**
37 * Define simple payment shortcode.
38 *
39 * @var string
40 */
41 public static $shortcode = 'simple-payment';
42
43 /**
44 * Define simple payment CSS prefix.
45 *
46 * @var string
47 */
48 public static $css_classname_prefix = 'jetpack-simple-payments';
49
50 /**
51 * Which plan the user is on.
52 *
53 * @var string value_bundle or jetpack_premium
54 */
55 public static $required_plan;
56
57 /**
58 * Instance of the class.
59 *
60 * @var Jetpack_Simple_Payments
61 */
62 private static $instance;
63
64 /**
65 * Construction function.
66 */
67 private function __construct() {}
68
69 /**
70 * Original singleton.
71 *
72 * @todo Remove this when nothing calles getInstance anymore.
73 */
74 public static function getInstance() { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName.MethodNameInvalid
75 return self::get_instance();
76 }
77
78 /**
79 * Create instance of class.
80 */
81 public static function get_instance() {
82 if ( ! self::$instance ) {
83 self::$instance = new self();
84 self::$instance->init_hook_action();
85 self::$required_plan = ( defined( 'IS_WPCOM' ) && IS_WPCOM ) ? 'value_bundle' : 'jetpack_premium';
86 }
87 return self::$instance;
88 }
89
90 /**
91 * Actions that are run on init.
92 */
93 public function init_hook_action() {
94 return PayPal_Simple_Payments::get_instance()->init_hook_action();
95 }
96
97 /**
98 * Enqueue the static assets needed in the frontend.
99 */
100 public function enqueue_frontend_assets() {
101 return PayPal_Simple_Payments::get_instance()->enqueue_frontend_assets();
102 }
103
104 /**
105 * Add an inline script for setting up the PayPal checkout button.
106 *
107 * @param int $id Product ID.
108 * @param int $dom_id ID of the DOM element with the purchase message.
109 * @param boolean $is_multiple Whether multiple items of the same product can be purchased.
110 */
111 public function setup_paypal_checkout_button( $id, $dom_id, $is_multiple ) {
112 return PayPal_Simple_Payments::get_instance()->setup_paypal_checkout_button( $id, $dom_id, $is_multiple );
113 }
114
115 /**
116 * Remove auto paragraph from product description.
117 *
118 * @param string $content - the content of the post.
119 */
120 public function remove_auto_paragraph_from_product_description( $content ) {
121 return PayPal_Simple_Payments::get_instance()->remove_auto_paragraph_from_product_description( $content );
122 }
123
124 /** Return the blog ID */
125 public function get_blog_id() {
126 return PayPal_Simple_Payments::get_instance()->get_blog_id();
127 }
128
129 /**
130 * Used to check whether Simple Payments are enabled for given site.
131 *
132 * @return bool True if Simple Payments are enabled, false otherwise.
133 */
134 public function is_enabled_jetpack_simple_payments() {
135 return PayPal_Simple_Payments::is_enabled_jetpack_simple_payments();
136 }
137
138 /**
139 * Creates the content from a shortcode
140 *
141 * @param array $attrs Shortcode attributes.
142 * @param mixed $content unused.
143 *
144 * @return string|void
145 */
146 public function parse_shortcode( $attrs, $content = false ) {
147 return PayPal_Simple_Payments::get_instance()->parse_shortcode( $attrs, $content );
148 }
149
150 /**
151 * Output an admin warning if user can't use Pay with PayPal.
152 *
153 * @param array $data unused.
154 */
155 public function output_admin_warning( $data ) {
156 return PayPal_Simple_Payments::get_instance()->output_admin_warning( $data );
157 }
158
159 /**
160 * Get the HTML output to use as PayPal purchase box.
161 *
162 * @param string $dom_id ID of the DOM element with the purchase message.
163 * @param boolean $is_multiple Whether multiple items of the same product can be purchased.
164 *
165 * @return string
166 */
167 public function output_purchase_box( $dom_id, $is_multiple ) {
168 return PayPal_Simple_Payments::get_instance()->output_purchase_box( $dom_id, $is_multiple );
169 }
170
171 /**
172 * Get the HTML output to replace the `simple-payments` shortcode.
173 *
174 * @param array $data Product data.
175 * @return string
176 */
177 public function output_shortcode( $data ) {
178 return PayPal_Simple_Payments::get_instance()->output_shortcode( $data );
179 }
180
181 /**
182 * Allows custom post types to be used by REST API.
183 *
184 * @param array $post_types - the allows post types.
185 * @see hook 'rest_api_allowed_post_types'
186 * @return array
187 */
188 public function allow_rest_api_types( $post_types ) {
189 return PayPal_Simple_Payments::get_instance()->allow_rest_api_types( $post_types );
190 }
191
192 /**
193 * Merge $post_meta with additional meta information.
194 *
195 * @param array $post_meta - the post's meta information.
196 */
197 public function allow_sync_post_meta( $post_meta ) {
198 return PayPal_Simple_Payments::get_instance()->allow_sync_post_meta( $post_meta );
199 }
200
201 /**
202 * Enable Simple payments custom meta values for access through the REST API.
203 * Field's value will be exposed on a .meta key in the endpoint response,
204 * and WordPress will handle setting up the callbacks for reading and writing
205 * to that meta key.
206 *
207 * @link https://developer.wordpress.org/rest-api/extending-the-rest-api/modifying-responses/
208 */
209 public function register_meta_fields_in_rest_api() {
210 return PayPal_Simple_Payments::get_instance()->register_meta_fields_in_rest_api();
211 }
212
213 /**
214 * Sanitize three-character ISO-4217 Simple payments currency
215 *
216 * List has to be in sync with list at the block's client side and widget's backend side:
217 *
218 * @param array $currency - list of currencies.
219 * @link https://github.com/Automattic/jetpack/blob/31efa189ad223c0eb7ad085ac0650a23facf9ef5/extensions/blocks/simple-payments/constants.js#L9-L39
220 * @link https://github.com/Automattic/jetpack/blob/31efa189ad223c0eb7ad085ac0650a23facf9ef5/modules/widgets/simple-payments.php#L19-L44
221 *
222 * Currencies should be supported by PayPal:
223 * @link https://developer.paypal.com/docs/api/reference/currency-codes/
224 *
225 * Indian Rupee (INR) not supported because at the time of the creation of this file
226 * because it's limited to in-country PayPal India accounts only.
227 * Discussion: https://github.com/Automattic/wp-calypso/pull/28236
228 */
229 public static function sanitize_currency( $currency ) {
230 return PayPal_Simple_Payments::sanitize_currency( $currency );
231 }
232
233 /**
234 * Sanitize price:
235 *
236 * Positive integers and floats
237 * Supports two decimal places.
238 * Maximum length: 10.
239 *
240 * See `price` from PayPal docs:
241 *
242 * @link https://developer.paypal.com/docs/api/orders/v1/#definition-item
243 *
244 * @param string $price - the price we want to sanitize.
245 * @return null|string
246 */
247 public static function sanitize_price( $price ) {
248 return PayPal_Simple_Payments::sanitize_price( $price );
249 }
250
251 /**
252 * Sets up the custom post types for the module.
253 */
254 public function setup_cpts() {
255 return PayPal_Simple_Payments::get_instance()->setup_cpts();
256 }
257
258 /**
259 * Validate the block attributes
260 *
261 * @param array $attrs The block attributes, expected to contain:
262 * * email - an email address.
263 * * price - a float between 0.01 and 9999999999.99.
264 * * productId - the ID of the product being paid for.
265 *
266 * @return bool
267 */
268 public function is_valid( $attrs ) {
269 return PayPal_Simple_Payments::get_instance()->is_valid( $attrs );
270 }
271 }
272
273 PayPal_Simple_Payments::get_instance();
274