Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 27
0.00% covered (danger)
0.00%
0 / 20
CRAP
0.00% covered (danger)
0.00%
0 / 1
Jetpack_Simple_Payments
0.00% covered (danger)
0.00%
0 / 24
0.00% covered (danger)
0.00%
0 / 20
552
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getInstance
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 get_instance
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
20
 init_hook_action
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 enqueue_frontend_assets
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 setup_paypal_checkout_button
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 remove_auto_paragraph_from_product_description
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 get_blog_id
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 is_enabled_jetpack_simple_payments
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 parse_shortcode
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 output_admin_warning
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 output_purchase_box
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 output_shortcode
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 allow_rest_api_types
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 allow_sync_post_meta
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 register_meta_fields_in_rest_api
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 sanitize_currency
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 sanitize_price
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 setup_cpts
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 is_valid
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
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
10use Automattic\Jetpack\Paypal_Payments\Simple_Payments as PayPal_Simple_Payments;
11
12if ( ! defined( 'ABSPATH' ) ) {
13    exit( 0 );
14}
15
16/**
17 * Jetpack_Simple_Payments
18 */
19class 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
273PayPal_Simple_Payments::get_instance();