get_charset_collate(); $create[] = "CREATE TABLE `{$wpdb->base_prefix}formipay_notification_log` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `user_id` int, `customer_id` int, `order_id` int, `recipient_type` text, `media` text, `notification_data` longtext, `status` text, `meta_data` text, PRIMARY KEY (`id`) ) $charset_collate;"; require_once ABSPATH . 'wp-admin/includes/upgrade.php'; dbDelta($create); } public function insert_notification_data($args) { $args = wp_parse_args( $args, [ 'order_id' => 0, 'recipient_type' => 'admin', 'media' => 'email', 'notification_data' => [], 'status' => 'pending', 'meta_data' => [] ] ); global $wpdb; $table = $wpdb->prefix . 'formipay_notification_log'; $insert_data = [ 'order_id' => intval($args['order_id']), 'recipient_type' => sanitize_text_field($args['recipient_type']), 'media' => sanitize_text_field($args['media']), 'notification_data' => maybe_serialize($args['notification_data']), 'status' => sanitize_text_field($args['status']), 'meta_data' => maybe_serialize($args['meta_data']) ]; if($args['order_id'] > 0){ // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery $wpdb->insert($table, $insert_data); return $wpdb->insert_id; } return false; } public function get_notification_data_by_id($notification_id) { global $wpdb; $table = $wpdb->prefix . 'formipay_notification_log'; // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching $get = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM %i WHERE `id` = %d", $table, $notification_id ) ); return $get; } public function update_notification_data($notification_id, $args) { $recent_data = $this->get_notification_data_by_id($notification_id); $args = wp_parse_args( $args, [ 'order_id' => $recent_data->order_id, 'recipient_type' => $recent_data->recipient_type, 'media' => $recent_data->media, 'notification_data' => maybe_unserialize($recent_data->notification_data), 'status' => $recent_data->status, 'meta_data' => maybe_unserialize($recent_data->meta_data) ] ); global $wpdb; $table_name = $wpdb->prefix . 'formipay_notification_log'; $new_args = [ 'order_id' => intval($args['order_id']), 'recipient_type' => sanitize_text_field($args['recipient_type']), 'media' => sanitize_text_field($args['media']), 'notification_data' => maybe_serialize($args['notification_data']), 'status' => sanitize_text_field($args['status']), 'meta_data' => maybe_serialize($args['meta_data']) ]; $where = [ 'id' => $notification_id ]; // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching $update = $wpdb->update( $table_name, $new_args, $where ); return $update; } public function global_settings_general($fields) { $medias = apply_filters('formipay/notification/media', ['email'] ); $notification_fields = [ 'notification_type_group' => [ 'type' => 'group_title', 'label' => __( 'Notification Type', 'formipay'), 'group' => 'started', ], ]; foreach($medias as $key => $media){ $notification_fields['notification_'.$media.'_active'] = [ 'type' => 'checkbox', 'label' => sprintf( __( '%s Notification', 'formipay'), ucfirst($media) ), 'value' => true ]; } $last_notification_field = count($notification_fields) - 1; $notification_fields[$last_notification_field]['group'] = 'ended'; $notification_fields['notification_email_sender_group_header'] = [ 'type' => 'group_title', 'label' => __( 'Email Settings', 'formipay'), 'group' => 'started', 'dependency' => [ 'key' => 'notification_email_active', 'value' => 'not_empty' ] ]; foreach($medias as $key => $media){ $notification_fields['notification_'.$media.'_admin_recipient'] = [ 'type' => 'text', // translators: %s is the media type name. 'label' => sprintf( __( 'Admin\'s %s', 'formipay'), ucfirst($media) ), 'dependency' => [ 'key' => 'notification_email_active', 'value' => 'not_empty' ] ]; } $notification_fields['notification_name_admin_recipient'] = [ 'type' => 'text', 'label' => __( 'Admin\'s Name', 'formipay'), 'dependency' => [ 'key' => 'notification_email_active', 'value' => 'not_empty' ] ]; $notification_fields['notification_email_logo'] = [ 'type' => 'image', 'label' => __('Logo Image', 'formipay'), 'dependency' => [ 'key' => 'notification_email_active', 'value' => 'not_empty' ] ]; $notification_fields['notification_email_footer'] = [ 'type' => 'tinymce', 'label' => __( 'Email Footer', 'formipay'), 'dependency' => [ 'key' => 'notification_email_active', 'value' => 'not_empty' ] ]; $notification_fields['notification_email_footer_links'] = [ 'type' => 'repeater', 'label' => __( 'Icon Links', 'formipay' ), 'fields' => [ 'type' => [ 'type' => 'select', 'label' => __( 'Type', 'formipay' ), 'is_group_title' => true, 'options' => [ 'dribbble' => 'Dribbble', 'facebook' => 'Facebook', 'facebook-messenger' => 'Messenger', 'github' => 'Github', 'instagram' => 'Instagram', 'link' => 'Link', 'linkedin' => 'Linkedin', 'pinterest' => 'Pinterest', 'telegram' => 'Telegram', 'tiktok' => 'Tiktok', 'whatsapp' => 'WhatsApp', 'wordpress' => 'WordPress', 'x' => 'X' ], ], 'link' => [ 'type' => 'text', 'label' => __( 'URL', 'formipay' ) ] ], 'group' => 'ended', 'dependency' => [ 'key' => 'notification_email_active', 'value' => 'not_empty' ] ]; $fields = array_merge($fields, $notification_fields); return $fields; } public function add_menu_on_global_setting($fields) { $hints = formipay_editor_hints(); $statuses = formipay_order_status_list(); $medias = apply_filters('formipay/notification/media', ['email'] ); $notification_fields = []; // access link $notification_fields['notification_email_access_link_group'] = [ 'type' => 'group_title', 'label' => __( 'Access Link', 'formipay' ), 'description' => __( 'This notification type is for responding request for access when people visit the thankyou page that contain any of your digital access (including files and URLs)', 'formipay' ), 'group' => 'started', 'submenu' => __( 'Access Link', 'formipay' ), 'dependency' => [ 'key' => 'notification_email_active', 'value' => 'not_empty', 'section' => 'General' ] ]; $notification_fields['notification_email_access_link_title'] = [ 'type' => 'text', 'label' => __( 'Title', 'formipay' ), 'value' => __( 'Your New Purchased Access Link', 'formipay' ), 'submenu' => __( 'Access Link', 'formipay' ), 'dependency' => [ 'key' => 'notification_email_active', 'value' => 'not_empty', 'section' => 'General' ] ]; $notification_fields['notification_email_access_link_content'] = [ 'type' => 'tinymce', 'label' => __( 'Content', 'formipay' ), 'hints' => [ 'buyer_name' => __( 'Buyer Name', 'formipay' ), 'order_id' => __( 'Order ID', 'formipay' ), 'access_button' => __( 'Access Button', 'formipay' ), 'access_link' => __( 'Access Link', 'formipay' ), ], 'submenu' => __( 'Access Link', 'formipay' ), 'value' => '
Hello {{buyer_name}},
Anyone request to access your purchase order ID {{order_id}}. Here is the new access link:
{{access_button}}
Here is the raw link if there is issue with the button:
{{access_link}}
Do not give access to others to make sure your purcase safe. Please ignore this email if it was not you.
Best regards,
Your E-commerce Team
', 'group' => 'ended', 'dependency' => [ 'key' => 'notification_email_active', 'value' => 'not_empty', 'section' => 'General' ] ]; foreach($statuses as $key => $status){ $status_key = str_replace('-', '_', $key); $notification_fields['notification_email_admin_'.$status_key.'_group_header'] = [ 'type' => 'group_title', // translators: %s is the status of order. 'label' => sprintf( __( 'Email Notification Admin (%s)', 'formipay' ), $status), 'group' => 'started', 'submenu' => esc_html($status), 'dependency' => [ 'key' => 'notification_email_active', 'value' => 'not_empty', 'section' => 'General' ] ]; $notification_fields['notification_email_admin_'.$status_key.'_toggle'] = [ 'type' => 'checkbox', 'label' => __('Activate', 'formipay'), 'submenu' => esc_html($status), 'dependency' => [ 'key' => 'notification_email_active', 'value' => 'not_empty', 'section' => 'General' ] ]; $notification_fields['notification_email_admin_'.$status_key.'_title'] = [ 'type' => 'text', 'label' => __( 'Title', 'formipay' ), 'submenu' => esc_html($status), 'dependency' => [ [ 'key' => 'notification_email_admin_'.$status_key.'_toggle', 'value' => 'not_empty' ], [ 'key' => 'notification_email_active', 'value' => 'not_empty', 'section' => 'General' ] ], 'dependencies' => '&&' ]; $notification_fields['notification_email_admin_'.$status_key.'_content'] = [ 'type' => 'tinymce', 'label' => __( 'Content', 'formipay' ), 'hints' => [ 'order_details' => __( 'Order Details', 'formipay' ), 'order_items' => __( 'Order Items', 'formipay' ), 'buyer_details' => __( 'Buyer Details', 'formipay' ), 'buyer_name' => __( 'Buyer Name', 'formipay' ), 'order_id' => __( 'Order ID', 'formipay' ), 'order_status' => __( 'Order Status', 'formipay' ), 'payment_timeout' => __( 'Payment Timeout', 'formipay' ) ], 'submenu' => esc_html($status), 'dependency' => [ [ 'key' => 'notification_email_admin_'.$status_key.'_toggle', 'value' => 'not_empty' ], [ 'key' => 'notification_email_active', 'value' => 'not_empty', 'section' => 'General' ] ], 'dependencies' => '&&', 'group' => 'ended', ]; $notification_fields['notification_email_buyer_'.$status_key.'_group_header'] = [ 'type' => 'group_title', // translators: %s is the status of order. 'label' => sprintf( __( 'Email Notification Buyer (%s)', 'formipay' ), $status), 'group' => 'started', 'submenu' => esc_html($status), 'description' => __( 'Email notification for buyer only available if your form is contain email field type', 'formipay'), ]; $notification_fields['notification_email_buyer_'.$status_key.'_toggle'] = [ 'type' => 'checkbox', 'label' => __('Activate', 'formipay'), 'submenu' => esc_html($status), 'dependency' => [ 'key' => 'notification_email_active', 'value' => 'not_empty', 'section' => 'General' ] ]; $notification_fields['notification_email_buyer_'.$status_key.'_title'] = [ 'type' => 'text', 'label' => __( 'Title', 'formipay' ), 'submenu' => esc_html($status), 'dependency' => [ [ 'key' => 'notification_email_buyer_'.$status_key.'_toggle', 'value' => 'not_empty' ], [ 'key' => 'notification_email_active', 'value' => 'not_empty', 'section' => 'General' ] ], 'dependencies' => '&&' ]; $notification_fields['notification_email_buyer_'.$status_key.'_content'] = [ 'type' => 'tinymce', 'label' => __( 'Content', 'formipay' ), 'hints' => [ 'order_details' => __( 'Order Details', 'formipay' ), 'order_items' => __( 'Order Items', 'formipay' ), 'buyer_details' => __( 'Buyer Details', 'formipay' ), 'buyer_name' => __( 'Buyer Name', 'formipay' ), 'order_id' => __( 'Order ID', 'formipay' ), 'order_status' => __( 'Order Status', 'formipay' ), 'payment_timeout' => __( 'Payment Timeout', 'formipay' ) ], 'submenu' => esc_html($status), 'dependency' => [ [ 'key' => 'notification_email_buyer_'.$status_key.'_toggle', 'value' => 'not_empty' ], [ 'key' => 'notification_email_active', 'value' => 'not_empty', 'section' => 'General' ] ], 'dependencies' => '&&', 'group' => 'ended', ]; $notification_fields = apply_filters('formipay/settings/notification/fields/'.$status_key, $notification_fields); } $fields['notification'] = [ 'name' => __('Notification', 'formipay'), 'fields' => $notification_fields ]; return $fields; } public function add_menu_on_product_setting($fields) { $notification_fields = []; $hints = formipay_editor_hints(); $statuses = formipay_order_status_list(); foreach($statuses as $key => $status){ $status_key = str_replace('-', '_', $key); $notification_fields['product_notification_email_buyer_'.$status_key.'_group_header'] = [ 'type' => 'group_title', // translators: %s is the status of order. 'label' => sprintf( __( 'Email Notification Buyer (%s)', 'formipay' ), $status), 'group' => 'started', 'description' => __( 'Email notification for buyer only available if your form is contain email field type', 'formipay'), ]; $notification_fields['product_notification_email_buyer_'.$status_key.'_toggle'] = [ 'type' => 'checkbox', 'label' => __('Replace Content', 'formipay'), ]; $notification_fields['product_notification_email_buyer_'.$status_key.'_content'] = [ 'type' => 'tinymce', 'label' => __( 'Email Content', 'formipay' ), 'hints' => $hints, 'dependency' => [ 'key' => 'product_notification_email_buyer_'.$status_key.'_toggle', 'value' => 'not_empty' ], 'group' => 'ended', ]; $notification_fields = apply_filters('formipay/product/notification/fields/', $notification_fields, $status_key); } $fields['formipay_form_settings']['notification'] = [ 'name' => __('Notification', 'formipay'), 'fields' => $notification_fields ]; return $fields; } public function order_trigger($order_data) { $medias = apply_filters('formipay/notification/media', ['email'] ); $order_status = $order_data['status']; if(!empty($medias)){ foreach($medias as $media){ do_action( 'formipay/notification/order/'.$media, $order_data ); } } } public function access_trigger($order_data) { $medias = apply_filters('formipay/notification/media', ['email'] ); if(!empty($medias)){ foreach($medias as $media){ do_action( 'formipay/notification/access/'.$media, $order_data ); } } } }