Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
File Manager
/
wp-content
/
plugins
/
jet-engine
/
includes
/
modules
/
forms
/
gateways
:
manager.php
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?php namespace Jet_Engine\Gateways; class Manager { /** * A reference to an instance of this class. * * @since 1.0.0 * @access private * @var object */ private static $instance = null; private $_gateways = false; public $message = null; public $data = null; /** * Register gateways components */ public function __construct() { add_action( 'jet-engine/forms/editor/meta-boxes', array( $this, 'register_gateways_metabox' ) ); add_action( 'jet-engine/forms/editor/assets', array( $this, 'register_gateways_assets' ) ); add_action( 'jet-engine/forms/editor/save-meta', array( $this, 'save_gateways_meta' ) ); $this->get_gateways(); if ( isset( $_GET['jet_gateway'] ) ) { add_action( 'wp_loaded', array( $this, 'catch_payment_result' ) ); } add_action( 'add_meta_boxes', array( $this, 'maybe_register_gateway_meta' ) ); add_action( 'jet-engine/elementor-views/dynamic-tags/register', array( $this, 'register_elementor_tags' ) ); add_filter( 'jet-engine/forms/handler/has-gateways', array( $this, 'check_form_gateways' ), 10, 2 ); } /** * Register new payment-related dynamic tags * * @param [type] $dynamic_tags [description] * @return [type] [description] */ public function register_elementor_tags( $dynamic_tags ) { require_once jet_engine()->modules->modules_path( 'forms/gateways/elementor-tag.php' ); $dynamic_tags->register_tag( '\Jet_Engine\Gateways\Message_Tag' ); } /** * Apply macros in string * * @return [type] [description] */ public function apply_macros( $string = null ) { return preg_replace_callback( '/%(.*?)%/', function( $matches ) { switch ( $matches[1] ) { case 'gateway_amount': $amount = ! empty( $this->data['amount'] ) ? $this->data['amount'] : false; return ! empty( $amount ) ? $amount['value'] . ' ' . $amount['currency_code'] : ''; case 'gateway_status': return ! empty( $this->data['status'] ) ? $this->data['status'] : ''; default: $form_data = ! empty( $this->data['form_data'] ) ? $this->data['form_data'] : array(); return ! empty( $form_data[ $matches[1] ] ) ? $form_data[ $matches[1] ] : ''; } }, $string ); } /** * Maybe register gateway meta box for order posts * * @return [type] [description] */ public function maybe_register_gateway_meta() { $post_id = get_the_ID(); $data = get_post_meta( $post_id, '_jet_gateway_data', true ); if ( empty( $data ) ) { return; } add_meta_box( 'jet-engine-payment', __( 'Payment settings', 'jet-engine' ), array( $this, 'render_meta_box' ), get_post_type(), 'side', 'default', $data ); } public function add_data( $data ) { $this->data = $data; } public function add_message( $message ) { $this->message = $message; if ( ! $this->data || ! isset( $this->data['form_id'] ) ) { return; } $form_id = $this->data['form_id']; add_filter( 'jet-engine/forms/pre-render/' . $form_id, function( $res ) use ( $form_id ) { echo $this->apply_macros( $this->message, $form_id ); return true; } ); } /** * Catch processed payment results * * @return [type] [description] */ public function catch_payment_result() { do_action( 'jet-engine/forms/gateways/success/' . $_GET['jet_gateway'] ); $token = $_GET['token']; } /** * Render payment metabox * * @param [type] $post_id [description] * @param [type] $metabox [description] * @return [type] [description] */ public function render_meta_box( $post_id, $metabox ) { $data = $metabox['args']; echo '<table>'; $this->iterate_data( $data ); echo '</table>'; } /** * Iterate array data to show in meta box * * @param [type] $data [description] * @param string $tag [description] * @return [type] [description] */ public function iterate_data( $data, $tag = 'tr' ) { $row = ( 'tr' === $tag ) ? 'tr' : 'div'; $title = ( 'tr' === $tag ) ? 'td' : 'b'; $val = ( 'tr' === $tag ) ? 'td' : 'span'; $sep = ( 'tr' === $tag ) ? '' : ': '; foreach ( $data as $key => $value ) { if ( 'form_id' === $key ) { $key = 'form'; $url = get_edit_post_link( $value ); $value = sprintf( '<a href="%1$s" target="_blank">%2$s</a>', $url, get_the_title( $value ) ); } echo '<' . $row . '>'; echo '<' . $title . ' valign="top">'; echo $key . $sep; echo '</' . $title . '>'; echo '<' . $val . '>'; if ( ! is_array( $value ) ) { if ( 'form_id' ) echo $value; } else { $this->iterate_data( $value, 'div' ); } echo '</' . $val . '>'; echo '<' . $row . '>'; } } /** * Save gateways related meta * * @return [type] [description] */ public function save_gateways_meta( $post_id ) { $data = isset( $_POST['_gateways'] ) ? $_POST['_gateways'] : json_encode( array() ); update_post_meta( $post_id, '_gateways', wp_slash( $data ) ); } /** * Returns all registered gateways * * @return [type] [description] */ public function get_gateways() { if ( false === $this->_gateways ) { require_once jet_engine()->modules->modules_path( 'forms/gateways/paypal.php' ); $gateways = apply_filters( 'jet-engine/forms/gateways/register', array( new PayPal() ) ); foreach ( $gateways as $gateway ) { $this->_gateways[ $gateway->get_id() ] = $gateway; } } return $this->_gateways; } /** * Register gateways metabox * * @return [type] [description] */ public function register_gateways_metabox( $editor ) { $gateways = $this->get_gateways(); ob_start(); include jet_engine()->get_template( 'forms/admin/gateways.php' ); $content = ob_get_clean(); $gateways_settings = apply_filters( 'jet-engine/forms/booking/messages-settings', array( '_gateways' => array( 'type' => 'html', 'html' => $content, ) ) ); new \Cherry_X_Post_Meta( array( 'id' => 'gatewys-settings', 'title' => __( 'Gateways Settings', 'jet-engine' ), 'page' => array( $editor->manager->slug() ), 'context' => 'normal', 'priority' => 'high', 'callback_args' => false, 'builder_cb' => array( $editor, 'get_builder' ), 'fields' => $gateways_settings, ) ); } public function register_gateways_assets( $editor ) { wp_enqueue_script( 'jet-engine-forms-gateways', jet_engine()->plugin_url( 'assets/js/admin/forms-gateways.js' ), array( 'jquery' ), jet_engine()->get_version(), true ); wp_localize_script( 'jet-engine-forms-gateways', 'JetEngineGatewaysSettings', array( 'gateways' => $this->get_form_gateways(), ) ); } /** * Returns gatewyas config for current form * * @param [type] $post_id [description] * @return [type] [description] */ public function get_form_gateways( $post_id = null ) { if ( ! $post_id ) { $post_id = get_the_ID(); } $default = array( 'gateway' => 'none', 'post_type' => '', ); $meta = get_post_meta( $post_id, '_gateways', true ); if ( ! $meta || ! is_array( $meta ) ) { return $default; } else { return array_merge( $default, $meta ); } } /** * Check form gateways * * @return [type] [description] */ public function check_form_gateways( $res, $form_id ) { $gateways = $this->get_form_gateways( $form_id ); if ( ! empty( $gateways ) && 'none' !== $gateways['gateway'] ) { return true; } else { return false; } } /** * Returns the instance. * * @since 1.0.0 * @access public * @return object */ public static function instance() { // If the single instance hasn't been set, set it now. if ( null == self::$instance ) { self::$instance = new self; } return self::$instance; } }