HEX
Server: LiteSpeed
System: Linux cpir1.prohostdns.com 4.18.0-553.123.2.lve.el8.x86_64 #1 SMP Thu May 7 23:17:13 UTC 2026 x86_64
User: pelakir (2976)
PHP: 8.2.31
Disabled: exec, shell_exec, system, passthru, proc_open, proc_close, proc_terminate, proc_get_status, popen, pclose, pcntl_exec
Upload Files
File: //home/pelakir/www/wp-content/plugins/persian-woocommerce-shipping/includes/admin/class-tapin.php
<?php
/**
 * Developer : MahdiY
 * Web Site  : MahdiY.IR
 * E-Mail    : M@hdiY.IR
 */

class PWS_Settings_Tapin extends PWS_Settings {

	protected static $_instance = null;

	public static function instance() {

		if ( is_null( self::$_instance ) ) {
			self::$_instance = new self();
		}

		return self::$_instance;
	}

	public function get_sections(): array {
		return [
			[
				'id'    => 'pws_tapin',
				'title' => 'همگانی',
			],
			[
				'id'    => 'pws_tipax',
				'title' => 'تیپاکس',
			],
			[
				'id'    => 'pws_alonomic',
				'title' => 'الونومیک',
			],
		];
	}

	public function get_fields(): array {

		if ( PWS_Tapin::is_enable() ) {

			$shop = PWS_Tapin::shop();;

			if ( ! isset( $shop['title'] ) ) {
				$shop = '<span style="color: red;">اطلاعات فروشگاه بارگذاری نشده است و ممکن است هزینه های ارسال بطور دقیق محاسبه نشود.</span>';
			} else {

				$services = PWS_Tapin::services();

				$shop = sprintf(
					'%s | %s %s | نرخ خدمات: %s | اطلاعات %d شهر بارگذاری شد.',
					$shop['title'],
					PWS()::get_state( $shop['province_code'] ),
					PWS()::get_city( $shop['city_code'] ),
					wc_price( $shop['total_price'], [ 'currency' => 'IRR' ] ),
					count( $services )
				);

				$shop = "اطلاعات فروشگاه: <span style='color: seagreen'>{$shop}</span>";
			}

		} else {
			$shop = '';
		}

		$host_ip = $_SERVER['SERVER_ADDR'] ?? '-';

		if ( isset( $_GET['tapin_check_ip'] ) ) {
			$response = wp_remote_get( 'https://icanhazip.com' );
			$host_ip  = wp_remote_retrieve_body( $response );
		}

		if ( ( $_GET['page'] ?? null ) == 'pws-tapin' ) {
			do_action( 'pws_state_city_updated' );
		}

		$box_sizes = PWS_Tapin::box_sizes();

		unset( $box_sizes[11] );
		unset( $box_sizes[12] );
		unset( $box_sizes[13] );

		return [
			'pws_tapin'    => [
				[
					'name' => 'banner',
					'desc' => '<a href="https://l.nabik.net/tapin?utm_source=pws-banner" target="_blank"><img src="' . PWS_URL . 'assets/images/tapin.jpg" style="width: 100%;"></a>',
					'type' => 'html',
				],
				[
					'label'   => 'فعالسازی تاپین',
					'name'    => 'enable',
					'default' => '0',
					'type'    => 'checkbox',
					'desc'    => 'در صورت فعالسازی پیشخوان مجازی تاپین، لیست استان ها و شهرها از وب سرویس های این سامانه بارگذاری می شود.',
				],
				[
					'label'   => 'نمایش اعتبار تاپین',
					'name'    => 'show_credit',
					'default' => '0',
					'type'    => 'checkbox',
					'desc'    => 'اعتبار پنل تاپین در منو بالا مدیریت نمایش داده می شود.',
				],
				[
					'label'   => 'رند کردن هزینه پست',
					'name'    => 'roundup_price',
					'default' => 1,
					'type'    => 'checkbox',
					'desc'    => 'هزینه‌های پست بر مبنای ۱۰۰۰ ریال رند به بالا می‌شود.',
				],
				[
					'label'   => 'عنوان محصول',
					'name'    => 'product_title',
					'default' => null,
					'type'    => 'text',
					'desc'    => 'در صورتی که این فیلد را پر کنید، بجای نام محصول، این متن برای عنوان محصول به تاپین ارسال می‌شود.',
				],
				[
					'label'   => 'نوع مرسوله پیشفرض',
					'name'    => 'content_type',
					'default' => 1,
					'type'    => 'select',
					'desc'    => 'بسته‌های تاپین به صورت پیشفرض با این نوع ثبت می‌شوند. (در بخش ویرایش سفارش، برای هر سفارش قابل تغییر و شخصی سازی است)',
					'options' => [
						1 => 'عادی',
						2 => 'شکستنی',
						3 => 'مایعات',
					],
				],
				[
					'label'   => 'حجم مرسوله پیشفرض',
					'name'    => 'box_size',
					'default' => 1,
					'type'    => 'select',
					'desc'    => 'نرخ‌نامه پستی به صورت پیشفرض براساس این حجم محاسبه می‌شود. (در بخش ویرایش سفارش، برای هر سفارش قابل تغییر و شخصی سازی است)',
					'options' => $box_sizes,
				],
				[
					'label'   => 'وضعیت ثبت مرسوله',
					'name'    => 'register_type',
					'default' => 1,
					'type'    => 'select',
					'options' => [
						1 => 'آماده به پرینت',
						2 => 'آماده به ارسال',
					],
					'desc'    => 'بسته‌ها در کدام وضعیت در تاپین ثبت شوند؟',
				],
				[
					'label'   => 'درگاه پست',
					'name'    => 'gateway',
					'default' => 'tapin',
					'type'    => 'select',
					'desc'    => 'در صورتی که فروشگاه کتاب است، پست کتاب و در غیر اینصورت پست تاپین را انتخاب کنید.',
					'options' => [
						'tapin'      => 'پست تاپین - tapin.ir',
						'posteketab' => 'پست کتاب - posteketab.com',
					],
				],
				[
					'label'   => 'توکن',
					'name'    => 'token',
					'default' => '',
					'type'    => 'text',
					'desc'    => 'توکن خود را از <a href="https://my.tapin.ir/" target="_blank">پیشخوان مجازی تاپین</a> دریافت کنید. آدرس آی.پی شما: ' . esc_attr( $host_ip ),
				],
				[
					'label'   => 'شناسه فروشگاه',
					'name'    => 'shop_id',
					'default' => '',
					'type'    => 'text',
					'desc'    => $shop,
				],
				[
					'name' => 'notes',
					'desc' => 'نکات:<ol>
<li>پست پیشتاز بسته با حداکثر وزن ۳۰ کیلوگرم را می پذیرد.</li>
<li>بیمه غرامت پست برای محصولات با حداکثر ارزش ۱۰۰ میلیون تومان پرداخت می شود.</li>
</ol>',
					'type' => 'html',
				],
			],
			'pws_tipax'    => [
				[
					'name' => 'notes',
					'desc' => sprintf( 'نکات:<ol>
<li>سرویس تیپاکس در حال حاضر بسته‌های بین ۵۰ گرم تا ۳۰ کیلوگرم را می‌پذیرد.</li>
<li>سرویس تیپاکس بسته‌های به ارزش ۴۰۰ هزار تا حداکثر ۶۰ میلیون تومان را می‌پذیرد.</li>
<li>نمایندگی‌های دریافت سفارش‌ها در لینک روبرو قابل مشاهده هستند: https://map.tapin.ir/accept-tipax</li>
<li style="display: %s">این امکان فقط در <a href="%s" target="_blank">نسخه حرفه‌ای</a> فعال می‌باشد.</li>
</ol>', defined( 'PWS_PRO_VERSION' ) ? 'none' : '', PWS()->pws_pro_url( 'tipax' ) ),
					'type' => 'html',
				],
				[
					'label'   => 'نوع جمع‌آوری',
					'name'    => 'pickup_type',
					'default' => 20,
					'type'    => 'select',
					'desc'    => 'جمع‌آوری در محل مشتری برای بیشتر از ۱۰ بسته انجام می‌شود.',
					'options' => [
						10 => 'جمع‌آوری در محل مشتری',
						20 => 'جمع‌آوری در نمایندگی',
					],
				],
				[
					'label'   => 'نوع تحویل',
					'name'    => 'delivery_type',
					'default' => 10,
					'type'    => 'select',
					'options' => [
						10 => 'تحویل در محل مشتری',
						20 => 'تحویل در نمایندگی',
					],
				],
			],
			'pws_alonomic' => [
				[
					'name' => 'notes',
					'desc' => sprintf( 'نکات:<ol>
<li>سرویس الونومیک بسته‌های داخل کارتن پستی اندازه ۱ تا ۶ را حمل می‌کند.</li>
<li>جمع‌آوری بسته‌ها از محل فروشگاه برای حداقل ۱۰ بسته انجام می‌شود.</li>
<li>الونومیک سرویس‌های Same-Day و Next-Day با نرخ یکسان ارائه می‌کند.</li>
<li>این سرویس صرفا ارسال به مناطق ۲۲ گانه شهر تهران را پشتیبانی می‌کند.</li>
<li style="display: %s">این امکان فقط در <a href="%s" target="_blank">نسخه حرفه‌ای</a> فعال می‌باشد.</li>
</ol>', defined( 'PWS_PRO_VERSION' ) ? 'none' : '', PWS()->pws_pro_url( 'tipax' ) ),
					'type' => 'html',
				],
			],
		];
	}

	public static function output() {

		$instance = self::instance();

		echo '<div class="wrap">';

		$instance->show_navigation();
		$instance->show_forms();

		echo '</div>';
	}
}