doHooks(); } return self::$instance; } private function doHooks() { add_action( 'wp_ajax_yaymail_send_mail', array( $this, 'sendTestMail' ) ); add_action( 'wp_ajax_yaymail_install_plugin', array( $this, 'ajax_install_plugin' ) ); add_action( 'wp_ajax_yaymail_save_mail', array( $this, 'saveTemplate' ) ); add_action( 'wp_ajax_yaymail_parse_template', array( new Shortcodes(), 'templateParser' ) ); add_action( 'wp_ajax_yaymail_copy_mail', array( $this, 'copyTemplate' ) ); add_action( 'wp_ajax_yaymail_reset_template', array( $this, 'resetTemplate' ) ); add_action( 'wp_ajax_yaymail_review', array( $this, 'reviewYayMail' ) ); add_action( 'wp_ajax_yaymail_export_all_template', array( $this, 'exportAllTemplate' ) ); add_action( 'wp_ajax_yaymail_import_template', array( $this, 'importAllTemplate' ) ); add_action( 'wp_ajax_yaymail_enable_disable_template', array( $this, 'enableDisableTempalte' ) ); add_action( 'wp_ajax_yaymail_general_setting', array( $this, 'generalSettings' ) ); add_action( 'wp_ajax_yaymail_get_coupons', array( $this, 'yaymail_get_coupons' ) ); add_action( 'wp_ajax_yaymail_get_products', array( $this, 'yaymail_get_products' ) ); add_action( 'wp_ajax_yaymail_get_product_skus', array( $this, 'yaymail_get_product_skus' ) ); add_action( 'wp_ajax_yaymail_get_products_by_ids', array( $this, 'yaymail_get_products_by_ids' ) ); add_action( 'wp_ajax_yaymail_get_product_skus_by_ids', array( $this, 'yaymail_get_product_skus_by_ids' ) ); } private function __construct() {} public function exportAllTemplate() { try { // 1. check nonce Helper::checkNonce(); // 2. download $template_export = CustomPostType::getTemplateExport(); $fileName = 'yaymail_all-customize-email-templates_' . gmdate( 'm-d-Y' ) . '.json'; header( 'Content-Type: application/json' ); header( 'Content-Disposition: attachment; filename="' . $fileName . '";' ); $response_object = array( 'result' => $template_export, 'fileName' => $fileName, 'mess' => __( 'Export successfully.', 'yaymail' ), ); wp_send_json_success( $response_object ); } catch ( \Exception $ex ) { LogHelper::getMessageException( $ex, true ); } catch ( \Error $ex ) { LogHelper::getMessageException( $ex, true ); } } public static function getHtmlByElements( $postID, $args = array() ) { $updateElement = new UpdateElement(); $yaymail_elements = get_post_meta( $postID, '_yaymail_elements', true ); $yaymail_elements = $updateElement->merge_new_props_to_elements( $yaymail_elements ); $yaymail_settings = get_option( 'yaymail_settings' ); $emailBackgroundColor = get_post_meta( $postID, '_email_backgroundColor_settings', true ) ? get_post_meta( $postID, '_email_backgroundColor_settings', true ) : '#ECECEC'; $general_attrs = array( 'tableWidth' => str_replace( 'px', '', $yaymail_settings['container_width'] ) ); $yaymail_template = get_post_meta( $postID, '_yaymail_template', true ); $html = ' '; $html .= ''; foreach ( $yaymail_elements as $key => $element ) { // add shortcode params $reg_pattern = '/\[([a-z0-9A-Z_]+)\]/'; if ( isset( $element['settingRow']['content'] ) ) { $content = $element['settingRow']['content']; $contentTitle = isset( $element['settingRow']['contentTitle'] ) ? $element['settingRow']['contentTitle'] : ''; // Add $atts for content if has shortcode preg_match_all( $reg_pattern, $content, $result ); if ( ! empty( $result[0] ) ) { foreach ( $result[0] as $key => $shortcode ) { $textcolor = isset( $element['settingRow']['textColor'] ) ? ' textcolor=' . $element['settingRow']['textColor'] : ''; $bordercolor = isset( $element['settingRow']['borderColor'] ) ? ' bordercolor=' . $element['settingRow']['borderColor'] : ''; $titlecolor = isset( $element['settingRow']['titleColor'] ) ? ' titlecolor=' . $element['settingRow']['titleColor'] : ''; $fontfamily = isset( $element['settingRow']['family'] ) ? ' fontfamily=' . str_replace( ' ', '', str_replace( array( '\'', '"' ), '', $element['settingRow']['family'] ) ) : ''; $newshortcode = substr( $shortcode, 0, -1 ); $newshortcode .= $textcolor . $bordercolor . $titlecolor . $fontfamily . ']'; $content = str_replace( $shortcode, $newshortcode, $content ); } $element['settingRow']['content'] = $content; } // Add $atts for contentTitle if has shortcode if ( $contentTitle ) { preg_match_all( $reg_pattern, $contentTitle, $result ); if ( ! empty( $result[0] ) ) { foreach ( $result[0] as $key => $shortcode ) { $textcolor = isset( $element['settingRow']['textColor'] ) ? ' textcolor=' . $element['settingRow']['textColor'] : ''; $bordercolor = isset( $element['settingRow']['borderColor'] ) ? ' bordercolor=' . $element['settingRow']['borderColor'] : ''; $titlecolor = isset( $element['settingRow']['titleColor'] ) ? ' titlecolor=' . $element['settingRow']['titleColor'] : ''; $fontfamily = isset( $element['settingRow']['family'] ) ? ' fontfamily=' . str_replace( ' ', '', str_replace( array( '\'', '"' ), '', $element['settingRow']['family'] ) ) : ''; $newshortcode = substr( $shortcode, 0, -1 ); $newshortcode .= $textcolor . $bordercolor . $titlecolor . $fontfamily . ']'; $contentTitle = str_replace( $shortcode, $newshortcode, $contentTitle ); } $element['settingRow']['contentTitle'] = $contentTitle; } } // Add $atts for content of shipment tracking if has shortcode if ( '[yaymail_order_meta:_wc_shipment_tracking_items]' === $content ) { $shortcode = $content; $textcolor = isset( $element['settingRow']['textColor'] ) ? ' textcolor=' . $element['settingRow']['textColor'] : ''; $bordercolor = isset( $element['settingRow']['borderColor'] ) ? ' bordercolor=' . $element['settingRow']['borderColor'] : ''; $titlecolor = isset( $element['settingRow']['titleColor'] ) ? ' titlecolor=' . $element['settingRow']['titleColor'] : ''; $fontfamily = isset( $element['settingRow']['family'] ) ? ' fontfamily=' . str_replace( ' ', '', str_replace( array( '\'', '"' ), '', $element['settingRow']['family'] ) ) : ''; $newshortcode = substr( $shortcode, 0, -1 ); $newshortcode .= $textcolor . $bordercolor . $titlecolor . $fontfamily . ']'; $content = str_replace( $shortcode, $newshortcode, $content ); $element['settingRow']['content'] = $content; } } ob_start(); if ( isset( $element['settingRow']['arrConditionLogic'] ) ) { if ( ! empty( $element['settingRow']['arrConditionLogic'] ) ) { $conditional_Logic = apply_filters( 'yaymail_addon_for_conditional_logic', false, $args, $element['settingRow'] ); if ( $conditional_Logic ) { do_action( 'Yaymail' . $element['type'], $args, $element['settingRow'], $general_attrs, $element['id'], $postID, $isInColumns = false ); } } else { if ( 'OneColumn' === $element['type'] || 'TwoColumns' === $element['type'] || 'ThreeColumns' === $element['type'] || 'FourColumns' === $element['type'] ) { for ( $column = 1; $column <= 4; $column++ ) { if ( isset( $element['settingRow'][ 'column' . $column ] ) ) { foreach ( $element['settingRow'][ 'column' . $column ] as $column_key => $column_element ) { if ( isset( $column_element['settingRow']['arrConditionLogic'] ) && ! empty( $column_element['settingRow']['arrConditionLogic'] ) ) { $conditional_Logic = apply_filters( 'yaymail_addon_for_conditional_logic', false, $args, $column_element['settingRow'] ); if ( ! $conditional_Logic ) { unset( $element['settingRow'][ 'column' . $column ][ $column_key ] ); } } } } } } do_action( 'Yaymail' . $element['type'], $args, $element['settingRow'], $general_attrs, $element['id'], $postID, $isInColumns = false ); } } else { do_action( 'Yaymail' . $element['type'], $args, $element['settingRow'], $general_attrs, $element['id'], $postID, $isInColumns = false ); } $el_html = ob_get_clean(); if ( '' !== $el_html ) { $html .= ''; } $html .= $el_html; } $html .= '
'; $el_html .= '
'; return $html; } public function ajax_install_plugin() { try { $nonce = isset( $_POST['nonce'] ) ? sanitize_text_field( $_POST['nonce'] ) : ''; if ( ! wp_verify_nonce( $nonce, 'email-nonce' ) ) { wp_send_json_error( array( 'mess' => __( 'Nonce is invalid', 'yaymail' ) ) ); } else { $installed = $this->pluginInstaller( 'yaysmtp' ); if ( false === $installed ) { wp_send_json_error( array( 'message' => $installed ) ); } try { $result = activate_plugin( 'yaysmtp/yay-smtp.php' ); if ( is_wp_error( $result ) ) { throw new \Exception( $result->get_error_message() ); } wp_send_json_success( array( 'sendMailSucc' => $result, 'mess' => __( 'Plugin installation successful.', 'yaymail' ), ) ); } catch ( \Exception $e ) { throw new \Exception( $e->getMessage() ); } } } catch ( \Exception $ex ) { LogHelper::getMessageException( $ex, true ); } catch ( \Error $ex ) { LogHelper::getMessageException( $ex, true ); } } public function pluginInstaller( $slug ) { require_once ABSPATH . 'wp-admin/includes/plugin-install.php'; require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; require_once ABSPATH . 'wp-admin/includes/class-wp-ajax-upgrader-skin.php'; require_once ABSPATH . 'wp-admin/includes/class-plugin-upgrader.php'; $api = plugins_api( 'plugin_information', array( 'slug' => $slug, 'fields' => array( 'short_description' => false, 'sections' => false, 'requires' => false, 'rating' => false, 'ratings' => false, 'downloaded' => false, 'last_updated' => false, 'added' => false, 'tags' => false, 'compatibility' => false, 'homepage' => false, 'donate_link' => false, ), ) ); $skin = new \WP_Ajax_Upgrader_Skin(); $upgrader = new \Plugin_Upgrader( $skin ); try { $result = $upgrader->install( $api->download_link ); if ( is_wp_error( $result ) ) { throw new \Exception( $result->get_error_message() ); } return true; } catch ( \Exception $e ) { throw new \Exception( $e->getMessage() ); } return false; } // html output of mail must to map with html output in single-mail-template.php public function sendTestMail() { try { $nonce = isset( $_POST['nonce'] ) ? sanitize_text_field( $_POST['nonce'] ) : ''; if ( ! wp_verify_nonce( $nonce, 'email-nonce' ) ) { wp_send_json_error( array( 'mess' => __( 'Nonce is invalid', 'yaymail' ) ) ); } else { if ( isset( $_POST['order_id'] ) && isset( $_POST['template'] ) && isset( $_POST['email_address'] ) ) { // Helper::checkNonce(); $template = sanitize_text_field( $_POST['template'] ); $email_address = sanitize_email( $_POST['email_address'] ); // check email if ( ! is_email( $email_address ) ) { wp_send_json_error( array( 'mess' => __( 'Invalid email format!', 'yaymail' ) ) ); } if ( CustomPostType::postIDByTemplate( $template ) ) { update_user_meta( get_current_user_id(), 'yaymail_default_email_test', $email_address ); $customShortcode = new Shortcodes( $template, sanitize_text_field( $_POST['order_id'] ), false ); if ( sanitize_text_field( $_POST['order_id'] ) !== 'sampleOrder' ) { $order_id = intval( sanitize_text_field( $_POST['order_id'] ) ); $WC_order = new \WC_Order( $order_id ); } $postID = CustomPostType::postIDByTemplate( $template ); if ( in_array( $template, array( 'new_order', 'cancelled_order', 'failed_order' ) ) ) { $customShortcode->setOrderId( $order_id, true ); } else { $customShortcode->setOrderId( $order_id, false ); } $customShortcode->shortCodesOrderDefined(); if ( isset( $WC_order ) ) { $html = self::getHtmlByElements( $postID, array( 'order' => $WC_order ) ); } else { $html = self::getHtmlByElements( $postID, array( 'order' => 'SampleOrder' ) ); } $html = html_entity_decode( $html, ENT_QUOTES, 'UTF-8' ); $headers = "Content-Type: text/html\r\n"; $sendMail = \WC_Emails::instance(); $subjectEmail = $this->getSubjectEmail( $sendMail, $template ); // $email_admin = get_bloginfo('admin_email'); if ( ! empty( $email_address ) ) { $sendMailSucc = $sendMail->send( $email_address, $subjectEmail, $html, $headers, array() ); wp_send_json_success( array( 'sendMailSucc' => $sendMailSucc, 'mess' => __( 'Email has been sent.', 'yaymail' ), ) ); } } else { wp_send_json_error( array( 'mess' => __( 'Template not Exists!.', 'yaymail' ) ) ); } } } wp_send_json_error( array( 'mess' => __( 'Error send mail!', 'yaymail' ) ) ); } catch ( \Exception $ex ) { LogHelper::getMessageException( $ex, true ); } catch ( \Error $ex ) { LogHelper::getMessageException( $ex, true ); } } public function getSubjectEmail( $wc_emails, $template ) { $subject = __( 'Email Test', 'yaymail' ); foreach ( $wc_emails->emails as $email => $item ) { if ( $item->id == $template ) { if ( 'customer_invoice' == $template ) { $subject = Helper::getCustomerInvoiceSubject( $wc_emails->emails[ $email ] ); if ( ! empty( $subject ) ) { return $subject; } } elseif ( 'new_booking' == $template ) { $subject = Helper::getNewBookingSubject( $wc_emails->emails[ $email ] ); if ( ! empty( $subject ) ) { return $subject; } } elseif ( 'customer_payment_retry' == $template ) { $subject = Helper::getNewBookingSubject( $wc_emails->emails[ $email ] ); if ( ! empty( $subject ) ) { return $subject; } } elseif ( 'Dokan_Email_Booking_New' == $template ) { $subject = $wc_emails->emails[ $email ]->subject; if ( ! empty( $subject ) ) { return $subject; } } else { if ( ! empty( $wc_emails->emails[ $email ]->subject ) ) { $subject = $wc_emails->emails[ $email ]->subject; if ( ! empty( $subject ) ) { return $subject; } } } } } return $subject; } public function sanitize( $var ) { // Prevent XSS $list_elements = Helper::preventXSS( $var['emailContents'] ); return wp_kses_post_deep( $list_elements ); } public function saveTemplate() { try { $nonce = isset( $_POST['nonce'] ) ? sanitize_text_field( $_POST['nonce'] ) : ''; if ( ! wp_verify_nonce( $nonce, 'email-nonce' ) ) { wp_send_json_error( array( 'mess' => __( 'Nonce is invalid', 'yaymail' ) ) ); } else { if ( isset( $_POST['template'] ) ) { // Helper::checkNonce(); $emailBackgroundColor = isset( $_POST['emailBackgroundColor'] ) ? sanitize_text_field( $_POST['emailBackgroundColor'] ) : 'rgb(236, 236, 236)'; $emailTextLinkColor = isset( $_POST['emailTextLinkColor'] ) ? sanitize_text_field( $_POST['emailTextLinkColor'] ) : '#7f54b3'; $titleShipping = isset( $_POST['titleShipping'] ) ? sanitize_text_field( $_POST['titleShipping'] ) : 'Shipping Address'; $titleBilling = isset( $_POST['titleBilling'] ) ? sanitize_text_field( $_POST['titleBilling'] ) : 'Billing Address'; $orderTitle = ( isset( $_POST['orderTitle'] ) && is_array( $_POST['orderTitle'] ) ) ? array_map( 'sanitize_text_field', wp_unslash( $_POST['orderTitle'] ) ) : array(); $orderItemsDownloadTitle = ( isset( $_POST['orderItemsDownloadTitle'] ) && is_array( $_POST['orderItemsDownloadTitle'] ) ) ? array_map( 'sanitize_text_field', wp_unslash( $_POST['orderItemsDownloadTitle'] ) ) : array(); $template = sanitize_text_field( $_POST['template'] ); $updateElement = new UpdateElement(); $setDefaultLogo = isset( $_POST['setDefaultLogo'] ) ? 'true' == sanitize_text_field( $_POST['setDefaultLogo'] ) ? true : false : false; $setDefaultFooter = isset( $_POST['setDefaultFooter'] ) ? 'true' == sanitize_text_field( $_POST['setDefaultFooter'] ) ? true : false : false; if ( isset( $_POST['emailContents'] ) ) { $emailContents = $this->sanitize( $_POST ); $emailContents = $updateElement->merge_new_props_to_elements( $emailContents ); } else { $emailContents = array(); } foreach ( $emailContents as $key => $value ) { if ( 'TwoColumns' == $value['type'] || 'ThreeColumns' == $value['type'] || 'FourColumns' == $value['type'] ) { if ( ! array_key_exists( 'column1', $emailContents[ $key ]['settingRow'] ) ) { $emailContents[ $key ]['settingRow']['column1'] = array(); } if ( ! array_key_exists( 'column2', $emailContents[ $key ]['settingRow'] ) ) { $emailContents[ $key ]['settingRow']['column2'] = array(); } if ( ( 'ThreeColumns' == $value['type'] || 'FourColumns' == $value['type'] ) && ! array_key_exists( 'column3', $emailContents[ $key ]['settingRow'] ) ) { $emailContents[ $key ]['settingRow']['column3'] = array(); } if ( 'FourColumns' == $value['type'] && ! array_key_exists( 'column4', $emailContents[ $key ]['settingRow'] ) ) { $emailContents[ $key ]['settingRow']['column4'] = array(); } } } if ( CustomPostType::postIDByTemplate( $template ) ) { $postID = CustomPostType::postIDByTemplate( $template ); if ( empty( $orderTitle ) ) { $orderTitle = Helper::OrderItemsTitle(); } if ( empty( $orderItemsDownloadTitle ) ) { $orderItemsDownloadTitle = Helper::OrderItemsDownloadsTitle(); } update_post_meta( $postID, '_yaymail_elements', $emailContents ); update_post_meta( $postID, '_email_backgroundColor_settings', $emailBackgroundColor ); update_post_meta( $postID, '_yaymail_email_textLinkColor_settings', $emailTextLinkColor ); update_post_meta( $postID, '_email_title_shipping', $titleShipping ); update_post_meta( $postID, '_email_title_billing', $titleBilling ); update_post_meta( $postID, '_yaymail_email_order_item_title', $orderTitle ); update_post_meta( $postID, '_yaymail_email_order_item_download_title', $orderItemsDownloadTitle ); // Change default logo $default_logo = array( 'set_default' => (bool) $setDefaultLogo, ); if ( 'true' == $setDefaultLogo ) { $posts = CustomPostType::getListPostTemplate(); foreach ( $emailContents as $key => $element ) { if ( 'Logo' == $element['type'] ) { $logoDefault = $element['settingRow']; break; } } if ( count( $posts ) > 0 && isset( $logoDefault ) ) { foreach ( $posts as $post ) { $yaymail_elements = get_post_meta( $post->ID, '_yaymail_elements', true ); foreach ( $yaymail_elements as $key => $element ) { if ( 'Logo' == $element['type'] ) { $yaymail_elements[ $key ]['settingRow'] = wp_parse_args( $logoDefault, $yaymail_elements[ $key ]['settingRow'] ); } } update_post_meta( $post->ID, '_yaymail_elements', $yaymail_elements ); } } } update_option( 'yaymail_settings_default_logo', $default_logo ); // Change default footer $default_footer = array( 'set_default' => (bool) $setDefaultFooter, ); if ( 'true' == $setDefaultFooter ) { $posts = CustomPostType::getListPostTemplate(); foreach ( $emailContents as $key => $element ) { if ( 'ElementText' == $element['type'] && 'Footer' == $element['nameElement'] ) { $footerDefault = $element['settingRow']; break; } } if ( count( $posts ) > 0 && isset( $footerDefault ) ) { foreach ( $posts as $post ) { $yaymail_elements = get_post_meta( $post->ID, '_yaymail_elements', true ); foreach ( $yaymail_elements as $key => $element ) { if ( 'ElementText' == $element['type'] && 'Footer' == $element['nameElement'] ) { $yaymail_elements[ $key ]['settingRow'] = wp_parse_args( $footerDefault, $yaymail_elements[ $key ]['settingRow'] ); } } update_post_meta( $post->ID, '_yaymail_elements', $yaymail_elements ); } } } update_option( 'yaymail_settings_default_footer', $default_footer ); wp_send_json_success( array( 'mess' => __( 'Email has been saved.', 'yaymail' ), 'orderTitle' => $orderTitle, 'orderItemsDownloadTitle' => $orderItemsDownloadTitle, ) ); } else { wp_send_json_error( array( 'mess' => __( 'Template not Exists!.', 'yaymail' ) ) ); } } wp_send_json_error( array( 'mess' => __( 'Error save data.', 'yaymail' ) ) ); } } catch ( \Exception $ex ) { LogHelper::getMessageException( $ex, true ); } catch ( \Error $ex ) { LogHelper::getMessageException( $ex, true ); } } public function copyTemplate() { try { $nonce = isset( $_POST['nonce'] ) ? sanitize_text_field( $_POST['nonce'] ) : ''; if ( ! wp_verify_nonce( $nonce, 'email-nonce' ) ) { wp_send_json_error( array( 'mess' => __( 'Nonce is invalid', 'yaymail' ) ) ); } else { if ( isset( $_POST['copy_to'] ) && isset( $_POST['copy_from'] ) ) { Helper::checkNonce(); $copyTo = sanitize_text_field( $_POST['copy_to'] ); $copyFrom = sanitize_text_field( $_POST['copy_from'] ); if ( CustomPostType::postIDByTemplate( $copyFrom ) ) { $postID = CustomPostType::postIDByTemplate( $copyFrom ); $emailContentsFrom = get_post_meta( $postID, '_yaymail_elements', true ); $emailBackgroundColor = get_post_meta( $postID, '_email_backgroundColor_settings', true ) ? get_post_meta( $postID, '_email_backgroundColor_settings', true ) : 'rgb(236, 236, 236)'; $emailTextLinkColor = get_post_meta( $postID, '_yaymail_email_textLinkColor_settings', true ) ? get_post_meta( $postID, '_yaymail_email_textLinkColor_settings', true ) : '#7f54b3'; $titleShipping = isset( $_POST['titleShipping'] ) ? sanitize_text_field( $_POST['titleShipping'] ) : 'Shipping Address'; $titleBilling = isset( $_POST['titleBilling'] ) ? sanitize_text_field( $_POST['titleBilling'] ) : 'Billing Address'; $orderTitle = isset( $_POST['orderTitle'] ) ? array_map( 'sanitize_text_field', wp_unslash( $_POST['orderTitle'] ) ) : array(); $orderItemsDownloadTitle = ( isset( $_POST['orderItemsDownloadTitle'] ) && is_array( $_POST['orderItemsDownloadTitle'] ) ) ? array_map( 'sanitize_text_field', wp_unslash( $_POST['orderItemsDownloadTitle'] ) ) : array(); if ( CustomPostType::postIDByTemplate( $copyTo ) ) { $idTo = CustomPostType::postIDByTemplate( $copyTo ); update_post_meta( $idTo, '_yaymail_elements', $emailContentsFrom ); update_post_meta( $idTo, '_email_backgroundColor_settings', $emailBackgroundColor ); update_post_meta( $idTo, '_yaymail_email_textLinkColor_settings', $emailTextLinkColor ); update_post_meta( $idTo, '_email_title_shipping', $titleShipping ); update_post_meta( $idTo, '_email_title_billing', $titleBilling ); update_post_meta( $idTo, '_yaymail_email_order_item_title', $orderTitle ); update_post_meta( $idTo, '_yaymail_email_order_item_download_title', $orderItemsDownloadTitle ); wp_send_json_success( array( 'mess' => __( 'Copied Template successfully.', 'yaymail' ), 'data' => $emailContentsFrom, ) ); } else { wp_send_json_error( array( 'mess' => __( 'Template not Exists!.', 'yaymail' ) ) ); } } else { wp_send_json_error( array( 'mess' => __( 'Template not Exists!.', 'yaymail' ) ) ); } } wp_send_json_error( array( 'mess' => __( 'Error save data.', 'yaymail' ) ) ); } } catch ( \Exception $ex ) { LogHelper::getMessageException( $ex, true ); } catch ( \Error $ex ) { LogHelper::getMessageException( $ex, true ); } } public function reviewYayMail() { try { $nonce = isset( $_POST['nonce'] ) ? sanitize_text_field( $_POST['nonce'] ) : ''; if ( ! wp_verify_nonce( $nonce, 'email-nonce' ) ) { wp_send_json_error( array( 'mess' => __( 'Nonce is invalid', 'yaymail' ) ) ); } else { if ( isset( $_POST['review'] ) ) { $yaymail_review = update_option( 'yaymail_review', true ); wp_send_json_success( array( 'value' => $yaymail_review, ) ); } wp_send_json_error( array( 'mess' => __( 'Error Reset Template!', 'yaymail' ) ) ); } } catch ( \Exception $ex ) { LogHelper::getMessageException( $ex, true ); } catch ( \Error $ex ) { LogHelper::getMessageException( $ex, true ); } } public function resetTemplate() { try { $nonce = isset( $_POST['nonce'] ) ? sanitize_text_field( $_POST['nonce'] ) : ''; if ( ! wp_verify_nonce( $nonce, 'email-nonce' ) ) { wp_send_json_error( array( 'mess' => __( 'Nonce is invalid', 'yaymail' ) ) ); } else { if ( isset( $_POST['template'] ) ) { // Helper::checkNonce(); $reset = sanitize_text_field( $_POST['template'] ); $templateEmail = \YayMail\Templates\Templates::getInstance(); $templates = $templateEmail::getList(); $orderItemsTitle = Helper::OrderItemsTitle(); $orderItemsDownloadsTitle = Helper::OrderItemsDownloadsTitle(); if ( 'all' == $reset ) { foreach ( $templates as $key => $template ) { if ( CustomPostType::postIDByTemplate( $key ) ) { $postID = CustomPostType::postIDByTemplate( $key ); update_post_meta( $postID, '_yaymail_elements', json_decode( $template['elements'], true ) ); update_post_meta( $postID, '_email_backgroundColor_settings', 'rgb(236, 236, 236)' ); update_post_meta( $postID, '_yaymail_email_textLinkColor_settings', '#7f54b3' ); update_post_meta( $postID, '_email_title_shipping', __( 'Shipping Address', 'yaymail' ) ); update_post_meta( $postID, '_email_title_billing', __( 'Billing Address', 'yaymail' ) ); update_post_meta( $postID, '_yaymail_email_order_item_title', $orderItemsTitle ); update_post_meta( $postID, '_yaymail_email_order_item_download_title', $orderItemsDownloadsTitle ); } } if ( get_option( 'yaymail_settings' ) ) { $yaymail_settings = get_option( 'yaymail_settings' ); $yaymail_settings['container_width'] = '605px'; $yaymail_settings['direction_rtl'] = 'ltr'; update_option( 'yaymail_settings', $yaymail_settings ); } wp_send_json_success( array( 'mess' => __( 'Template reset successfully.', 'yaymail' ) ) ); } else { if ( CustomPostType::postIDByTemplate( $reset ) && isset( $templates[ $reset ] ) ) { $postID = CustomPostType::postIDByTemplate( $reset ); update_post_meta( $postID, '_yaymail_elements', json_decode( $templates[ $reset ]['elements'], true ) ); update_post_meta( $postID, '_email_backgroundColor_settings', 'rgb(236, 236, 236)' ); update_post_meta( $postID, '_yaymail_email_textLinkColor_settings', '#7f54b3' ); update_post_meta( $postID, '_email_title_shipping', __( 'Shipping Address', 'yaymail' ) ); update_post_meta( $postID, '_email_title_billing', __( 'Billing Address', 'yaymail' ) ); update_post_meta( $postID, '_yaymail_email_order_item_title', $orderItemsTitle ); update_post_meta( $postID, '_yaymail_email_order_item_download_title', $orderItemsDownloadsTitle ); wp_send_json_success( array( 'mess' => __( 'Template reset successfully.', 'yaymail' ) ) ); } else { wp_send_json_error( array( 'mess' => __( 'Template not Exists!.', 'yaymail' ) ) ); } } } wp_send_json_error( array( 'mess' => __( 'Error Reset Template!', 'yaymail' ) ) ); } } catch ( \Exception $ex ) { LogHelper::getMessageException( $ex, true ); } catch ( \Error $ex ) { LogHelper::getMessageException( $ex, true ); } } public function importAllTemplate() { try { Helper::checkNonce(); if ( isset( $_FILES['file']['type'] ) ) { if ( 'application/json' == $_FILES['file']['type'] ) { if ( ! empty( $_FILES['file']['tmp_name'] ) ) { $fileJson = sanitize_text_field( $_FILES['file']['tmp_name'] ); global $wp_filesystem; if ( empty( $wp_filesystem ) ) { require_once ABSPATH . '/wp-admin/includes/file.php'; WP_Filesystem(); } $data = $wp_filesystem->get_contents( $fileJson ); $data = json_decode( $data, true ); $dataImports = $data['yaymailTemplateExport']; $versionOld = $data['yaymail_version']; $versionCurrent = YAYMAIL_VERSION; /* check key in settingRow whether or not it exists. note: case when add setting row for element. */ if ( $versionOld != $versionCurrent ) { $element = new DefaultElement(); $defaultDataElements = $element->defaultDataElement; foreach ( $defaultDataElements as $defaultelement ) { foreach ( $dataImports as $keyTemplate => $templateImport ) { foreach ( $templateImport['_yaymail_elements'] as $keyElem => $elemImport ) { if ( $defaultelement['type'] == $elemImport['type'] ) { /* @@@ add key default for element */ $keyEleDefaus = array(); $keyEleDefaus = array_diff_key( $defaultelement, $elemImport ); if ( count( $keyEleDefaus ) > 0 ) { $dataImports[ $keyTemplate ]['_yaymail_elements'][ $keyElem ] = array_merge( $elemImport, $keyEleDefaus ); } /* add key default for setting row note: when add a field in setting row */ $propSettings = array(); $propSettings = array_diff_key( $defaultelement['settingRow'], $elemImport['settingRow'] ); $lenPropSettings = count( $propSettings ); if ( $lenPropSettings > 0 ) { $result = array(); $result = array_merge( $elemImport['settingRow'], $propSettings ); $dataImports[ $keyTemplate ]['_yaymail_elements'][ $keyElem ]['settingRow'] = $result; } /* remove Key not needed for setting row note: when deleting a field in setting row */ } } } } } $flag = false; if ( count( $dataImports ) > 0 ) { foreach ( $dataImports as $key => $value ) { if ( isset( $value['_yaymail_elements'] ) ) { $template = $value['_yaymail_template']; $template_language = $value['_yaymail_template_language']; if ( CustomPostType::postIDByTemplateLanguage( $template, $template_language ) ) { $pID = CustomPostType::postIDByTemplateLanguage( $template, $template_language ); update_post_meta( $pID, '_yaymail_elements', $value['_yaymail_elements'] ); } else { $array = array( 'mess' => '', 'post_date' => current_time( 'Y-m-d H:i:s' ), 'post_type' => 'yaymail_template', 'post_status' => 'publish', '_yaymail_template' => $template, '_yaymail_elements' => $value['_yaymail_elements'], ); if ( '' !== $value['_yaymail_template_language'] ) { $array['_yaymail_template_language'] = $value['_yaymail_template_language']; } $insert = CustomPostType::insert( $array ); } $flag = true; } } } if ( ! $flag ) { wp_send_json_error( array( 'mess' => __( 'Import Failed.', 'yaymail' ) ) ); } wp_send_json_success( array( 'mess' => __( 'Imported successfully.', 'yaymail' ) ) ); } else { wp_send_json_error( array( 'mess' => __( 'File not found.', 'yaymail' ) ) ); } } else { wp_send_json_error( array( 'mess' => __( 'File not correct format.', 'yaymail' ) ) ); } } wp_send_json_error( array( 'mess' => __( 'Please upload 1 file to import.', 'yaymail' ) ) ); } catch ( \Exception $ex ) { LogHelper::getMessageException( $ex, true ); } catch ( \Error $ex ) { LogHelper::getMessageException( $ex, true ); } } public function enableDisableTempalte() { try { $nonce = isset( $_POST['nonce'] ) ? sanitize_text_field( $_POST['nonce'] ) : ''; if ( ! wp_verify_nonce( $nonce, 'email-nonce' ) ) { wp_send_json_error( array( 'mess' => __( 'Nonce is invalid', 'yaymail' ) ) ); } else { if ( isset( $_POST['settings'] ) ) { // Helper::checkNonce(); $settingDefault = CustomPostType::templateEnableDisable(); $listTemplates = ! empty( $settingDefault ) ? array_keys( $settingDefault ) : array(); $settingCurrent = array_map( 'sanitize_text_field', wp_unslash( $_POST['settings'] ) ); if ( ! empty( $listTemplates ) ) { foreach ( $settingCurrent as $key => $value ) { if ( in_array( $key, $listTemplates ) ) { update_post_meta( $settingDefault[ $key ]['post_id'], '_yaymail_status', $value ); } } } wp_send_json_success( array( 'mess' => __( 'Settings saved.', 'yaymail' ) ) ); } wp_send_json_error( array( 'mess' => __( 'Settings Failed!.', 'yaymail' ) ) ); } } catch ( \Exception $ex ) { LogHelper::getMessageException( $ex, true ); } catch ( \Error $ex ) { LogHelper::getMessageException( $ex, true ); } } public function generalSettings() { try { $nonce = isset( $_POST['nonce'] ) ? sanitize_text_field( $_POST['nonce'] ) : ''; if ( ! wp_verify_nonce( $nonce, 'email-nonce' ) ) { wp_send_json_error( array( 'mess' => __( 'Nonce is invalid', 'yaymail' ) ) ); } else { if ( isset( $_POST['settings'] ) ) { $setting = array_map( 'sanitize_text_field', wp_unslash( $_POST['settings'] ) ); $yaymail_direction = $setting['direction_rtl']; isset( $yaymail_direction ) ? update_option( 'yaymail_direction', $yaymail_direction ) : update_option( 'yaymail_direction', 'ltr' ); $setting['custom_css'] = wp_kses_post( isset( $_POST['settings']['custom_css'] ) ? $_POST['settings']['custom_css'] : '' ); update_option( 'yaymail_settings', $setting ); wp_send_json_success( array( 'mess' => __( 'Settings saved.', 'yaymail' ) ) ); } wp_send_json_error( array( 'mess' => __( 'Settings Failed!.', 'yaymail' ) ) ); } } catch ( \Exception $ex ) { LogHelper::getMessageException( $ex, true ); } catch ( \Error $ex ) { LogHelper::getMessageException( $ex, true ); } } public function yaymail_get_coupons() { try { $nonce = isset( $_POST['nonce'] ) ? sanitize_text_field( $_POST['nonce'] ) : ''; if ( ! wp_verify_nonce( $nonce, 'email-nonce' ) ) { wp_send_json_error( array( 'mess' => __( 'Nonce is invalid', 'yaymail' ) ) ); } else { $size = 20; $num = isset( $_POST['num'] ) ? sanitize_text_field( $_POST['num'] ) : 1; $offset = ( +$num - 1 ) * $size; $limit = $size + 1; $search_string = isset( $_POST['searchString'] ) ? sanitize_text_field( $_POST['searchString'] ) : null; $args = array( 'post_type' => 'shop_coupon', 'post_status' => 'publish', 'posts_per_page' => $limit, 'orderby' => 'post_title', 'order' => 'ASC', 'offset' => $offset, ); if ( $search_string ) { $args['s'] = $search_string; } $query = new \WP_Query( $args ); $coupon_codes = wp_list_pluck( $query->posts, 'post_title' ); $has_more = false; if ( count( $coupon_codes ) == ( $limit ) ) { $has_more = true; array_splice( $coupon_codes, -1 ); } $response_object = array( 'mess' => __( 'get successfully.', 'yaymail' ), 'couponCodes' => str_replace( '-', ' ', $coupon_codes ), 'hasMore' => $has_more, 'num' => $num, 'searchString' => $search_string, ); wp_send_json_success( $response_object ); } } catch ( \Exception $ex ) { LogHelper::getMessageException( $ex, true ); } catch ( \Error $ex ) { LogHelper::getMessageException( $ex, true ); } } public function yaymail_get_products() { try { $nonce = isset( $_POST['nonce'] ) ? sanitize_text_field( $_POST['nonce'] ) : ''; if ( ! wp_verify_nonce( $nonce, 'email-nonce' ) ) { wp_send_json_error( array( 'mess' => __( 'Nonce is invalid', 'yaymail' ) ) ); } else { $size = 20; $num = isset( $_POST['num'] ) ? sanitize_text_field( $_POST['num'] ) : 1; $offset = ( +$num - 1 ) * $size; $search_string = isset( $_POST['searchString'] ) ? sanitize_text_field( $_POST['searchString'] ) : null; $args = array( 'post_type' => 'product', 'post_status' => 'publish', 'posts_per_page' => $size + 1, 'offset' => $offset, 's' => $search_string, 'orderby' => 'post_title', 'order' => 'ASC', ); $products_query = new \WP_Query( $args ); $products = array(); foreach ( $products_query->posts as $post ) { $product = new stdClass(); $product->id = (string) $post->ID; $product->name = get_the_title( $post ); $products[] = $product; } $has_more = false; if ( count( $products ) == ( $size + 1 ) ) { $has_more = true; array_splice( $products, -1 ); } $response_object = array( 'mess' => __( 'get successfully.', 'yaymail' ), 'products' => $products, 'hasMore' => $has_more, 'num' => $num, 'searchString' => $search_string, ); wp_send_json_success( $response_object ); } } catch ( \Exception $ex ) { LogHelper::getMessageException( $ex, true ); } catch ( \Error $ex ) { LogHelper::getMessageException( $ex, true ); } } public function yaymail_get_product_skus() { try { $nonce = isset( $_POST['nonce'] ) ? sanitize_text_field( $_POST['nonce'] ) : ''; if ( ! wp_verify_nonce( $nonce, 'email-nonce' ) ) { wp_send_json_error( array( 'mess' => __( 'Nonce is invalid', 'yaymail' ) ) ); } else { $size = 20; $num = isset( $_POST['num'] ) ? sanitize_text_field( $_POST['num'] ) : 1; $offset = ( +$num - 1 ) * $size; $search_string = isset( $_POST['searchString'] ) ? sanitize_text_field( $_POST['searchString'] ) : null; $args = array( 'post_type' => array( 'product', 'product_variation' ), 'post_status' => 'publish', 'meta_key' => '_sku', 'orderby' => 'meta_value', 'order' => 'ASC', 'posts_per_page' => $size + 1, 'offset' => $offset, // this is a custom argument, used to search for either meta_value or post_title '_meta_or_title' => $search_string, 'meta_query' => array( array( 'key' => '_sku', 'value' => $search_string, 'compare' => 'LIKE', ), array( 'key' => '_sku', 'compare' => 'DISTINCT', ), ), ); $products_query = new \WP_Query( $args ); $product_skus = array(); if ( $products_query->have_posts() ) { while ( $products_query->have_posts() ) { $products_query->the_post(); $id = get_the_ID(); $sku_value = get_post_meta( $id, '_sku', true ); $name = get_the_title(); if ( ! empty( $sku_value ) ) { $product_skus[] = array( 'id' => (string) $id, 'name' => $name, 'sku' => $sku_value, ); } } wp_reset_postdata(); } $has_more = false; if ( count( $product_skus ) == ( $size + 1 ) ) { $has_more = true; array_splice( $product_skus, -1 ); } $response_object = array( 'mess' => __( 'get successfully.', 'yaymail' ), 'productSkus' => $product_skus, 'hasMore' => $has_more, 'num' => $num, 'searchString' => $search_string, ); wp_send_json_success( $response_object ); } } catch ( \Exception $ex ) { LogHelper::getMessageException( $ex, true ); } catch ( \Error $ex ) { LogHelper::getMessageException( $ex, true ); } } public function yaymail_get_products_by_ids() { try { $nonce = isset( $_POST['nonce'] ) ? sanitize_text_field( $_POST['nonce'] ) : ''; if ( ! wp_verify_nonce( $nonce, 'email-nonce' ) ) { wp_send_json_error( array( 'mess' => __( 'Nonce is invalid', 'yaymail' ) ) ); } else { $ids = isset( $_POST['ids'] ) ? array_map( 'sanitize_text_field', $_POST['ids'] ) : null; if ( null == $ids ) { wp_send_json_error( array( 'mess' => 'ID list is empty', ) ); return; } $args = array( 'post_type' => 'product', 'post_status' => 'publish', 'post__in' => $ids, 'posts_per_page' => -1, // Retrieve all matching products ); $products_query = new \WP_Query( $args ); $products = array(); foreach ( $products_query->posts as $post ) { $product = new stdClass(); $product->id = (string) $post->ID; $product->name = get_the_title( $post ); $products[] = $product; } $response_object = array( 'mess' => __( 'get successfully.', 'yaymail' ), 'products' => $products, ); wp_send_json_success( $response_object ); } } catch ( \Exception $ex ) { LogHelper::getMessageException( $ex, true ); } catch ( \Error $ex ) { LogHelper::getMessageException( $ex, true ); } } public function yaymail_get_product_skus_by_ids() { try { $nonce = isset( $_POST['nonce'] ) ? sanitize_text_field( $_POST['nonce'] ) : ''; if ( ! wp_verify_nonce( $nonce, 'email-nonce' ) ) { wp_send_json_error( array( 'mess' => __( 'Nonce is invalid', 'yaymail' ) ) ); } else { $ids = isset( $_POST['ids'] ) ? array_map( 'sanitize_text_field', $_POST['ids'] ) : null; if ( null == $ids ) { wp_send_json_error( array( 'mess' => 'ID list is empty', ) ); return; } $args = array( 'post_type' => array( 'product', 'product_variation' ), 'post_status' => 'publish', 'meta_query' => array( array( 'key' => '_sku', 'compare' => 'DISTINCT', ), ), // 'meta_key' => '_sku', 'post__in' => $ids, 'posts_per_page' => -1, // Retrieve all matching products ); $products_query = new \WP_Query( $args ); $product_skus = array(); if ( $products_query->have_posts() ) { while ( $products_query->have_posts() ) { $products_query->the_post(); $id = get_the_ID(); $sku_value = get_post_meta( $id, '_sku', true ); $name = get_the_title(); if ( ! empty( $sku_value ) ) { $product_skus[] = array( 'id' => (string) $id, 'name' => $name, 'sku' => $sku_value, ); } } wp_reset_postdata(); } $response_object = array( 'mess' => __( 'get successfully.', 'yaymail' ), 'productSkus' => $product_skus, ); wp_send_json_success( $response_object ); } } catch ( \Exception $ex ) { LogHelper::getMessageException( $ex, true ); } catch ( \Error $ex ) { LogHelper::getMessageException( $ex, true ); } } }