PluginProbe
Better Payment – Instant Payments, Donations, Fundraising with Subscriptions & More / trunk
Better Payment – Instant Payments, Donations, Fundraising with Subscriptions & More vtrunk
2.3.4 2.3.3 2.3.2 2.3.1 2.3.0 2.2.2 2.2.1 2.2.0 2.1.2 2.1.1 trunk 0.0.1 0.0.2 0.0.3 0.0.4 0.0.5 0.0.6 0.0.7 1.0.0 1.0.1 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 All 66 releases
better-payment / includes / Admin / Elementor / EL_Integration.php

EL_Integration.php in Better Payment – Instant Payments, Donations, Fundraising with Subscriptions & More trunk, at includes/Admin/Elementor/EL_Integration.php

174 lines 6.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Better_Payment\Lite\Admin\Elementor;
4
5 use Better_Payment\Lite\Admin\DB;
6 use Better_Payment\Lite\Admin\Elementor\Form_Actions\Payment_Amount_Field;
7 use Better_Payment\Lite\Admin\Elementor\Form_Actions\Payment_Amount_Integration;
8 use Better_Payment\Lite\Admin\Elementor\Form_Actions\Paypal_Integration;
9 use Better_Payment\Lite\Admin\Elementor\Form_Actions\Stripe_Integration;
10 use Better_Payment\Lite\Admin\Elementor\Form_Actions\Paystack_Integration;
11 use Better_Payment\Lite\Classes\Handler;
12 use Better_Payment\Lite\Traits\Helper;
13
14 use function Better_Payment\Lite\Classes\better_payment_dd;
15
16 /**
17 * Exit if accessed directly
18 */
19 if (!defined('ABSPATH')) {
20 exit;
21 }
22
23 /**
24 * The elementor integration class
25 *
26 * @since 0.0.1
27 */
28 class EL_Integration {
29
30 use Helper;
31
32 private $payment_amount = 'payment_amount';
33
34 /**
35 * Init
36 *
37 * @since 0.0.1
38 */
39 public function init() {
40 add_action( 'elementor/widgets/register', array( $this, 'register_widget' ) );
41 add_action( 'elementor/widgets/register', [ $this, 'elementor_form_integration' ], 10 );
42 add_action( 'elementor-pro/forms/pre_render', [ $this, 'elementor_pro_form_response' ], 10, 2 );
43 add_action( 'wp_enqueue_scripts', [ $this, 'conditional_enqueue_assets' ] );
44
45 $this->bp_init_widget_usage();
46 }
47
48 /**
49 * Register widget
50 *
51 * @since 0.0.1
52 */
53 public function register_widget( $widgets_manager ) {
54 $bp_admin_saved_settings = DB::get_settings();
55 $is_user_dashboard_enabled = isset( $bp_admin_saved_settings['better_payment_settings_general_general_user_dashboard'] ) && 'yes' === sanitize_text_field( $bp_admin_saved_settings['better_payment_settings_general_general_user_dashboard'] ) ? 1 : 0;
56 $is_fundraising_campaign_enabled = isset( $bp_admin_saved_settings['better_payment_settings_general_general_fundraising_campaign'] ) && 'yes' === sanitize_text_field( $bp_admin_saved_settings['better_payment_settings_general_general_fundraising_campaign'] ) ? 1 : 0;
57 $widgets_manager->register_widget_type( new Better_Payment_Widget() );
58
59 if ( $is_fundraising_campaign_enabled ) {
60 $widgets_manager->register_widget_type( new Fundraising_Campaign_Widget() );
61 }
62
63 if ( $is_user_dashboard_enabled ) {
64 $widgets_manager->register_widget_type( new User_Dashboard() );
65 }
66 }
67
68 /**
69 * Elementor form integration
70 *
71 * @since 0.0.1
72 */
73 public function elementor_form_integration() {
74 if(!defined('ELEMENTOR_PRO_VERSION')){
75 return false;
76 }
77
78 wp_enqueue_style( 'better-payment-common-style' );
79
80 \ElementorPro\Modules\Forms\Module::instance()->add_form_action( 'better-payment', new Payment_Amount_Integration() );
81 \ElementorPro\Modules\Forms\Module::instance()->add_form_action( 'PayPal', new Paypal_Integration() );
82 \ElementorPro\Modules\Forms\Module::instance()->add_form_action( 'Stripe', new Stripe_Integration() );
83 \ElementorPro\Modules\Forms\Module::instance()->add_form_action( 'Paystack', new Paystack_Integration() );
84 \ElementorPro\Modules\Forms\Module::instance()->add_form_field_type( 'payment_amount', new Payment_Amount_Field() );
85 }
86
87 /**
88 * Elementor pro form response
89 *
90 * @since 0.0.1
91 */
92 public function elementor_pro_form_response( $settings, $obj ) {
93 wp_enqueue_style( 'better-payment-el' );
94 $response = Handler::manage_response( $settings, $obj->get_id() );
95 if ( $response ) {
96 $obj->add_render_attribute( 'form', 'style', 'display:none' );
97 return false;
98 }
99 }
100
101 /**
102 * Conditionally enqueue assets on pages with Elementor forms
103 *
104 * @since 0.0.1
105 */
106 public function conditional_enqueue_assets() {
107 // Only run on frontend
108 if ( is_admin() ) {
109 return;
110 }
111
112 if ( ! defined( 'ELEMENTOR_PRO_VERSION' ) || ! \Elementor\Plugin::$instance->documents->get( get_the_ID() ) ) {
113 return;
114 }
115
116 $document = \Elementor\Plugin::$instance->documents->get( get_the_ID() );
117 if ( ! $document ) {
118 return;
119 }
120
121 $elements_data = $document->get_elements_data();
122 if ( $this->has_better_payment_form( $elements_data ) ) {
123 wp_enqueue_style( 'better-payment-el' );
124 wp_enqueue_style( 'bp-icon-front' );
125 wp_enqueue_style( 'better-payment-style' );
126 wp_enqueue_style( 'better-payment-common-style' );
127 wp_enqueue_style( 'better-payment-admin-style' );
128
129 wp_enqueue_script( 'better-payment-common-script' );
130 wp_enqueue_script( 'better-payment' );
131 }
132 }
133
134 /**
135 * Recursively check if page has forms with Better Payment
136 *
137 * @param array $elements
138 * @return bool
139 */
140 private function has_better_payment_form( $elements ) {
141 foreach ( $elements as $element ) {
142 if ( isset( $element['widgetType'] ) && $element['widgetType'] === 'form' ) {
143 $settings = isset( $element['settings'] ) ? $element['settings'] : [];
144
145 // Check submit actions
146 $submit_actions = isset( $settings['submit_actions'] ) ? $settings['submit_actions'] : [];
147 if ( is_array( $submit_actions ) ) {
148 $better_payment_actions = [ 'better-payment', 'PayPal', 'Stripe', 'Paystack' ];
149 if ( !empty( array_intersect( $submit_actions, $better_payment_actions ) ) ) {
150 return true;
151 }
152 }
153
154 // Check payment amount field
155 if ( isset( $settings['better_payment_payment_amount_enable'] ) &&
156 $settings['better_payment_payment_amount_enable'] === 'yes' ) {
157 return true;
158 }
159 }
160
161 // Check nested elements
162 if ( isset( $element['elements'] ) && is_array( $element['elements'] ) ) {
163 if ( $this->has_better_payment_form( $element['elements'] ) ) {
164 return true;
165 }
166 }
167 }
168
169 return false;
170 }
171
172 }
173
174