HEX
Server: Apache
System: FreeBSD www860.sakura.ne.jp 13.0-RELEASE-p14 FreeBSD 13.0-RELEASE-p14 #2: Mon Dec 9 13:54:55 JST 2024 root@www5301.sakura.ne.jp:/usr/obj/usr/src/amd64.amd64/sys/GENERIC amd64
User: yoyo0427 (1306)
PHP: 8.3.8
Disabled: NONE
Upload Files
File: /home/yoyo0427/www/www.yn-artspace.com/wp-content/plugins/telsender/clasess/TelsenderWc.php
<?php

namespace pechenki\Telsender\clasess;

if ( ! defined( 'ABSPATH' ) ) {
    exit;
}
/**
 * Class TelsenderWc
 * @package pechenki\Telsender\clasess
 */
class TelsenderWc
{
    /**
     * @var $replace :array
     * @var $order :object
     * @var $order_id :integer
     * @var $status_accses :array
     */

    public $replace = array();

    public $order;
    public $order_id;
    public $status_accses = array();

    /**
     * TelsenderWc constructor.
     * @param integer $order_id
     */
    function __construct(int $order_id)
    {
        $this->order = wc_get_order($order_id);
        $this->order_id = $order_id;
        add_filter('tscf_filter_codetemplate', array($this, 'tscf_dew_temlate'), 10, 2);

    }

    /**
     * @param string $str
     * @return string
     */
    public function getBillingDetails(string $str): string
    {
        $this->decodeShortcode($str);
        $pr = $this->Products();
        $str = str_replace(array_keys($pr), array_values($pr), $str);
        return str_replace(array_keys($this->replace), array_values($this->replace), $str);
    }

    /**
     * @return bool
     */
    public function isStatusAccsec(): bool
    {
        $list = $this->status_accses;
        $status = 'wc-' . $this->order->status;
        if (in_array($status, $list)) {
            return true;
        }
        return false;
    }


    /**
     * @param string $str
     */
    private function decodeShortcode(string $str)

    {

        $re = '/\{.+?}/m';
        preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
        array_walk_recursive($matches, function ($item, $key) {

            $ed = explode('-', preg_replace('/\{|\}/', '', $item));


            if (count($ed) > 1) {

                $this->replace[$item] = (string)$this->order->data[$ed[0]][$ed[1]];


            } else {

                $res = trim(preg_replace('/\{|\}/', '', $item));

                if (key_exists($res,$this->order->data)) {
                    $_result = $this->order->data[$res];


                }else{
                    $_result = null;
                }
                if ($_result) {
                    $this->replace[$item] = $_result;
                } else {
                    $this->replace[$item] = $this->order->get_meta($res) ?: '';
                }


            }

        });


        $this->replace = apply_filters('tscf_filter_codetemplate', $this->replace, $this->order_id);
    }

    /**
     * @return array
     */
    public function Products(): array
    {
        $items = $this->order->get_items();
        $curents = get_woocommerce_currency_symbol();

        $product = '';
        $product_v2 = '';
        $product_v3  = '';
        foreach ($items as $item) {

            $metaProduct = $item->get_formatted_meta_data();
            $metaText = '';

            foreach ($metaProduct as $key => $value) {
                $metaText .= $value->display_key . ' : ' . $value->value . chr(10);
            }

            $product_item = $item->get_product();
            if ($product_item) {
                $sku = $product_item->get_sku();
                $product .= $item['name'] . ' x' . $item['quantity'] . ' ' . $item['total'] . $curents . chr(10);
                $product_v2 .= $item['name'] . ' x' . $item['quantity'] . ' ' . $item['total'] . $curents . ' sku(' . $sku . ')' . chr(10);
                $product_v3 .= $item['name'] . ' x' . $item['quantity'] . ' ' . $item['total'] . $curents . ' ' . $metaText . chr(10);
            }

        }

        $return['{products}'] = $product;
        $return['{products_v2}'] = $product_v2;
        $return['{products_v3}'] = $product_v3;


        $shop = $this->order->get_items('shipping');
        if ($shop) {
            $shipping = end($shop)->get_data();
            $return['{shipping_method_title}'] = $shipping['method_title'];
        }

        return $return;
    }

    /**
     * @param array $replace
     * @return array
     */

    public function tscf_dew_temlate(array $replace): array
    {

        $replace['{order_n}'] = $this->order_id;
        $replace['{order_date}'] = wp_date('Y-m-d');
        $replace['{order_time}'] = wp_date('G:i:s');
        return $replace;
    }

}