Refactor the order and shipment lifecycle across WordPress and Laravel,
improving multi-package handling, payment automation, and frontend
reliability.
- Laravel:
- Rename `package_number` to `package_no` and `description` to
`content_description` in `ShipmentPackage` model and controller.
- Update `PaymentController` to automatically transition approved
shipments to `Processed` status upon successful payment.
- Adjust `OrderPaymentService` to validate against `Approved` status
instead of `PendingPayment`.
- Expose `/countries` endpoint as a public route (unauthenticated).
- Remove obsolete `read_excel.php` utility.
- WordPress (Bridge Plugin & Theme):
- Implement AJAX handler for wallet-based order payments.
- Update `ifnex-order-form.js` to support multi-package input names
and auto-select Iran based on shipment direction.
- Improve error handling and feedback in the order form and country
loading logic.
- Add automatic tracking submission when an `awb` parameter is
present in the URL.
- Update CSS with `!important` flags to ensure correct visibility
of form steps and dashboard elements.
- Implement cache-busting for plugin assets and prevent OPcache
stale files via header controls.
- Optimize theme logo loading with eager loading and explicit
dimensions.
99 lines
5.2 KiB
PHP
99 lines
5.2 KiB
PHP
<?php
|
||
if (function_exists('opcache_reset')) { @opcache_reset(); }
|
||
header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');
|
||
header('Pragma: no-cache');
|
||
/**
|
||
* Plugin Name: IFNEX Logistics Bridge
|
||
* Description: اتصال فرانتاند سایت ایفنکس به API لاراول
|
||
* Version: 1.0
|
||
* Author: VernaSoft group (Kazem Alghasi)
|
||
*/
|
||
|
||
if ( ! defined( 'ABSPATH' ) ) {
|
||
exit;
|
||
}
|
||
|
||
// لود کردن فایلهای پلاگین
|
||
require_once plugin_dir_path( __FILE__ ) . 'includes/api-client.php';
|
||
require_once plugin_dir_path( __FILE__ ) . 'includes/user-bridge.php';
|
||
require_once plugin_dir_path( __FILE__ ) . 'includes/shortcodes.php';
|
||
require_once plugin_dir_path( __FILE__ ) . 'includes/tracking-form.php';
|
||
|
||
// لود کردن استایلهای و اسکریپتهای پلاگین
|
||
add_action('wp_enqueue_scripts', 'ifnex_enqueue_scripts');
|
||
function ifnex_enqueue_scripts() {
|
||
global $post;
|
||
if (is_a($post, 'WP_Post') &&
|
||
(has_shortcode($post->post_content, 'ifnex_tracking_form') ||
|
||
has_shortcode($post->post_content, 'ifnex_wallet_balance') ||
|
||
has_shortcode($post->post_content, 'ifnex_transactions') ||
|
||
has_shortcode($post->post_content, 'ifnex_tracking_status') ||
|
||
has_shortcode($post->post_content, 'ifnex_order_form') ||
|
||
has_shortcode($post->post_content, 'ifnex_user_profile') ||
|
||
has_shortcode($post->post_content, 'ifnex_orders_list') ||
|
||
has_shortcode($post->post_content, 'ifnex_order_detail') ||
|
||
has_shortcode($post->post_content, 'ifnex_order_payment') ||
|
||
has_shortcode($post->post_content, 'ifnex_customer_dashboard'))) {
|
||
wp_enqueue_style('ifnex-bridge-css', plugin_dir_url(__FILE__) . 'assets/css/ifnex-bridge.css', array('ifnex-main'), '2.0.0-' . time());
|
||
wp_enqueue_script('ifnex-order-form-js', plugin_dir_url(__FILE__) . 'assets/js/ifnex-order-form.js', array('jquery'), '2.0.0-' . time(), true);
|
||
}
|
||
}
|
||
|
||
// اضافه کردن لینک به منوی پیشخوان وردپرس
|
||
add_action( 'admin_menu', 'ifnex_plugin_setup_menu' );
|
||
function ifnex_plugin_setup_menu() {
|
||
add_menu_page( 'تنظیمات IFNEX', 'IFNEX', 'manage_options', 'ifnex-settings', 'ifnex_settings_page_html', 'dashicons-location-alt', 30 );
|
||
}
|
||
|
||
function ifnex_settings_page_html() {
|
||
if (isset($_POST['ifnex_api_url']) && check_admin_referer('ifnex_settings_save')) {
|
||
update_option('ifnex_api_url', sanitize_url($_POST['ifnex_api_url']));
|
||
update_option('ifnex_api_key', sanitize_text_field($_POST['ifnex_api_key']));
|
||
update_option('ifnex_bridge_api_key', sanitize_text_field($_POST['ifnex_bridge_api_key'] ?? ''));
|
||
echo '<div class="notice notice-success"><p>تنظیمات ذخیره شد.</p></div>';
|
||
}
|
||
|
||
$api_url = get_option('ifnex_api_url', 'http://localhost:8000/api/v1');
|
||
$api_key = get_option('ifnex_api_key', '');
|
||
$bridge_api_key = get_option('ifnex_bridge_api_key', '');
|
||
?>
|
||
<div class="wrap">
|
||
<h1>تنظیمات IFNEX Logistics Bridge</h1>
|
||
<form method="post">
|
||
<?php wp_nonce_field('ifnex_settings_save'); ?>
|
||
<table class="form-table">
|
||
<tr>
|
||
<th scope="row"><label for="ifnex_api_url">API URL</label></th>
|
||
<td>
|
||
<input type="text" id="ifnex_api_url" name="ifnex_api_url" value="<?php echo esc_attr($api_url); ?>" class="regular-text" placeholder="http://localhost:8000/api/v1">
|
||
<p class="description">آدرس پایه API لاراول</p>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<th scope="row"><label for="ifnex_api_key">API Key (عمومی)</label></th>
|
||
<td>
|
||
<input type="text" id="ifnex_api_key" name="ifnex_api_key" value="<?php echo esc_attr($api_key); ?>" class="regular-text">
|
||
<p class="description">برای APIهای عمومی مثل Tracking</p>
|
||
</td>
|
||
</tr>
|
||
<tr style="background: #fff3cd;">
|
||
<th scope="row"><label for="ifnex_bridge_api_key">🔐 Bridge API Key</label></th>
|
||
<td>
|
||
<input type="text" id="ifnex_bridge_api_key" name="ifnex_bridge_api_key" value="<?php echo esc_attr($bridge_api_key); ?>" class="regular-text">
|
||
<p class="description"><strong>مهم:</strong> باید با مقدار <code>IFNEX_BRIDGE_API_KEY</code> در فایل <code>.env</code> لاراول یکسان باشد.</p>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
<?php submit_button('ذخیره تنظیمات'); ?>
|
||
</form>
|
||
|
||
<hr>
|
||
<h2>راهنمای راهاندازی</h2>
|
||
<ol>
|
||
<li>در فایل <code>.env</code> لاراول، خط <code>IFNEX_BRIDGE_API_KEY=your-secret-key</code> را تنظیم کنید</li>
|
||
<li>همان مقدار را در فیلد "Bridge API Key" بالا وارد کنید</li>
|
||
<li>کاربران وردپرس باید در لاراول با همان ایمیل موجود باشند (از <code>php artisan ifnex:sync-wp-users</code> استفاده کنید)</li>
|
||
</ol>
|
||
</div>
|
||
<?php
|
||
}
|