Diff: STRATO-apps/wordpress_03/app/wp-content/plugins/tutor/ecommerce/Ecommerce.php

Keine Baseline-Datei – Diff nur gegen leer.
Zur Liste
1 -
1 + <?php
2 + /**
3 + * Main class to handle tutor native e-commerce.
4 + *
5 + * @package Tutor\Ecommerce
6 + * @author Themeum <support@themeum.com>
7 + * @link https://themeum.com
8 + * @since 3.0.0
9 + */
10 +
11 + namespace Tutor\Ecommerce;
12 +
13 + use TUTOR\Course;
14 + use Tutor\Ecommerce\PaymentHandler;
15 + use TUTOR\Input;
16 + use Tutor\Models\CouponModel;
17 + use Tutor\PaymentGateways\Configs\PaypalConfig;
18 + use Tutor\PaymentGateways\GatewayFactory;
19 + use Tutor\PaymentGateways\PaypalGateway;
20 +
21 + if ( ! defined( 'ABSPATH' ) ) {
22 + exit;
23 + }
24 +
25 + /**
26 + * Class Ecommerce
27 + *
28 + * @since 3.0.0
29 + */
30 + class Ecommerce {
31 +
32 + /**
33 + * Native ecommerce engin
34 + *
35 + * @since 3.0.0
36 + *
37 + * @var string
38 + */
39 + const MONETIZE_BY = 'tutor';
40 +
41 + /**
42 + * Construct function to initialize e-commerce classes
43 + *
44 + * @since 3.0.0
45 + *
46 + * @since 3.6.0 Global variable added
47 + *
48 + * @param bool $register_hooks register hooks.
49 + */
50 + public function __construct( $register_hooks = true ) {
51 +
52 + if ( ! $register_hooks ) {
53 + return;
54 + }
55 +
56 + add_filter( 'tutor_monetization_options', array( $this, 'add_monetization_option' ) );
57 +
58 + new Settings();
59 + new Tax();
60 + // Include currency file.
61 + require_once tutor()->path . 'ecommerce/currency.php';
62 +
63 + if ( ! tutor_utils()->is_monetize_by_tutor() ) {
64 + return;
65 + }
66 +
67 + add_action( 'save_post_' . tutor()->course_post_type, array( $this, 'save_price' ), 10, 2 );
68 +
69 + new AdminMenu();
70 + new CartController();
71 + new CheckoutController();
72 + new OrderController();
73 + new OrderActivitiesController();
74 + new CouponController();
75 + new BillingController();
76 + new HooksHandler();
77 + new EmailController();
78 + new PaymentHandler();
79 +
80 + // Globals.
81 + add_action(
82 + 'init',
83 + function() {
84 + $GLOBALS['tutor_coupon_apply_err_msg'] = ( new CouponModel() )->get_coupon_failed_error_msg( 'not_applicable' );
85 + }
86 + );
87 + }
88 +
89 + /**
90 + * Save course price and course sale price.
91 + *
92 + * @since 3.0.0
93 + *
94 + * @param int $post_ID course ID.
95 + * @param mixed $post course details.
96 + *
97 + * @return void
98 + */
99 + public function save_price( $post_ID, $post ) {
100 + if ( ! tutor_utils()->is_monetize_by_tutor() ) {
101 + return;
102 + }
103 +
104 + $course_price = Input::post( 'course_price', 0, Input::TYPE_NUMERIC );
105 + $sale_price = Input::post( 'course_sale_price', 0, Input::TYPE_NUMERIC );
106 +
107 + if ( $course_price ) {
108 + update_post_meta( $post_ID, Course::COURSE_PRICE_META, $course_price );
109 + }
110 +
111 + if ( Input::has( 'course_sale_price' ) ) {
112 + update_post_meta( $post_ID, Course::COURSE_SALE_PRICE_META, $sale_price );
113 + }
114 + }
115 +
116 + /**
117 + * Add monetization option.
118 + *
119 + * @since 3.0.0
120 + *
121 + * @param array $arr options.
122 + *
123 + * @return array
124 + */
125 + public function add_monetization_option( $arr ) {
126 + $arr[ self::MONETIZE_BY ] = __( 'Native', 'tutor' );
127 + return array_reverse( $arr );
128 + }
129 +
130 + /**
131 + * Create & return payment gateway object
132 + *
133 + * Return instance expose setup_payment_and_redirect & get_webhook_data
134 + * methods for creating payments.
135 + *
136 + * @since 3.0.0
137 + *
138 + * @param string $gateway Reference class of gateway.
139 + *
140 + * @throws \Exception Throw exception if error occur.
141 + *
142 + * @return GatewayBase
143 + */
144 + public static function get_payment_gateway_object( string $gateway ) {
145 + try {
146 + return GatewayFactory::create( $gateway );
147 + } catch ( \Throwable $th ) {
148 + throw new \Exception( $th->getMessage() );
149 + }
150 + }
151 +
152 + /**
153 + * Get payment gateways with reference class
154 + *
155 + * @since 3.0.0
156 + *
157 + * @param string $gateway gateway name.
158 + *
159 + * @return array|null
160 + */
161 + public static function payment_gateways_with_ref( $gateway = null ) {
162 + $arr = array(
163 + 'paypal' => array(
164 + 'gateway_class' => PaypalGateway::class,
165 + 'config_class' => PaypalConfig::class,
166 + ),
167 + );
168 +
169 + $arr = apply_filters( 'tutor_payment_gateways_with_class', $arr );
170 +
171 + return is_null( $gateway ) ? $arr : $arr[ $gateway ] ?? null;
172 + }
173 +
174 + /**
175 + * Check if a payment gateway configured
176 + *
177 + * @since 1.0.0
178 + *
179 + * @param string $gateway_slug Payment gateway name.
180 + *
181 + * @return bool
182 + */
183 + public static function is_payment_gateway_configured( $gateway_slug ) {
184 + $payment_settings = Settings::get_payment_gateway_settings( $gateway_slug );
185 + if ( isset( $payment_settings['is_manual'] ) && $payment_settings['is_manual'] ) {
186 + return true;
187 + }
188 +
189 + $gateway_ref = self::payment_gateways_with_ref( $gateway_slug );
190 + if ( $gateway_ref ) {
191 + try {
192 + $gateway_obj = self::get_payment_gateway_object( $gateway_ref['gateway_class'] );
193 + $config_class = $gateway_obj->get_config_class();
194 + return ( new $config_class() )->is_configured();
195 + } catch ( \Throwable $th ) {
196 + return false;
197 + }
198 + }
199 +
200 + return false;
201 + }
202 +
203 + /**
204 + * Get error message for unfinished payment method
205 + *
206 + * @since 3.0.0
207 + *
208 + * @param string $payment_method payment method name.
209 + *
210 + * @return string error message for incomplete payment method setup.
211 + */
212 + public static function get_incomplete_payment_setup_error_message( $payment_method ) {
213 + /* translators: %s: payment gateway */
214 + return sprintf( __( '%s payment method is not configured properly. Please contact with site administrator!', 'tutor' ), ucfirst( $payment_method ) );
215 + }
216 +
217 + /**
218 + * Get payment method label.
219 + *
220 + * @since 3.0.0
221 + *
222 + * @param string $payment_method payment method name.
223 + *
224 + * @return string
225 + */
226 + public static function get_payment_method_label( $payment_method ) {
227 + $payment_method_labels = array(
228 + 'paypal' => __( 'PayPal', 'tutor' ),
229 + );
230 +
231 + $payment_method_labels = apply_filters( 'tutor_payment_method_labels', $payment_method_labels );
232 +
233 + return $payment_method_labels[ $payment_method ] ?? ucfirst( $payment_method );
234 + }
235 + }
236 +