diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0f2fe10 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +llmdumper.php +.llmdump \ No newline at end of file diff --git a/admin/controller/payment/hutko.php b/admin/controller/payment/hutko.php index 0b0b708..da11582 100644 --- a/admin/controller/payment/hutko.php +++ b/admin/controller/payment/hutko.php @@ -7,7 +7,6 @@ class Hutko extends \Opencart\System\Engine\Controller { public function index(): void { $this->load->language('extension/hutko/payment/hutko'); - $this->document->setTitle($this->language->get('heading_title')); $data['breadcrumbs'] = []; @@ -24,28 +23,16 @@ class Hutko extends \Opencart\System\Engine\Controller { 'href' => $this->url->link('extension/hutko/payment/hutko', 'user_token=' . $this->session->data['user_token']) ]; - // Save action $data['save'] = $this->url->link('extension/hutko/payment/hutko.save', 'user_token=' . $this->session->data['user_token']); $data['back'] = $this->url->link('marketplace/extension', 'user_token=' . $this->session->data['user_token'] . '&type=payment'); - // Configuration Fields + // Config fields $fields = [ - 'payment_hutko_merchant_id', - 'payment_hutko_secret_key', - 'payment_hutko_shipping_include', - 'payment_hutko_shipping_product_name', - 'payment_hutko_shipping_product_code', - 'payment_hutko_new_order_status_id', - 'payment_hutko_success_status_id', - 'payment_hutko_declined_status_id', - 'payment_hutko_expired_status_id', - 'payment_hutko_refunded_status_id', - 'payment_hutko_include_discount_to_total', - 'payment_hutko_status', - 'payment_hutko_sort_order', - 'payment_hutko_geo_zone_id', - 'payment_hutko_total', - 'payment_hutko_save_logs' + 'payment_hutko_merchant_id', 'payment_hutko_secret_key', 'payment_hutko_shipping_include', + 'payment_hutko_shipping_product_name', 'payment_hutko_shipping_product_code', + 'payment_hutko_new_order_status_id', 'payment_hutko_success_status_id', 'payment_hutko_declined_status_id', + 'payment_hutko_expired_status_id', 'payment_hutko_refunded_status_id', 'payment_hutko_include_discount_to_total', + 'payment_hutko_status', 'payment_hutko_sort_order', 'payment_hutko_geo_zone_id', 'payment_hutko_total', 'payment_hutko_save_logs' ]; foreach ($fields as $field) { @@ -53,9 +40,11 @@ class Hutko extends \Opencart\System\Engine\Controller { } // Defaults - if (is_null($data['payment_hutko_shipping_product_name'])) $data['payment_hutko_shipping_product_name'] = 'Package material'; - if (is_null($data['payment_hutko_shipping_product_code'])) $data['payment_hutko_shipping_product_code'] = '0_0_1'; + if (is_null($data['payment_hutko_shipping_product_name'])) $data['payment_hutko_shipping_product_name'] = 'Shipping'; + if (is_null($data['payment_hutko_shipping_product_code'])) $data['payment_hutko_shipping_product_code'] = 'SHIPPING_001'; if (is_null($data['payment_hutko_total'])) $data['payment_hutko_total'] = '0.01'; + if (is_null($data['payment_hutko_shipping_include'])) $data['payment_hutko_shipping_include'] = 1; + if (is_null($data['payment_hutko_include_discount_to_total'])) $data['payment_hutko_include_discount_to_total'] = 1; $this->load->model('localisation/order_status'); $data['order_statuses'] = $this->model_localisation_order_status->getOrderStatuses(); @@ -64,7 +53,7 @@ class Hutko extends \Opencart\System\Engine\Controller { $data['geo_zones'] = $this->model_localisation_geo_zone->getGeoZones(); $data['log_content'] = $this->displayLastDayLog(); - + $data['header'] = $this->load->controller('common/header'); $data['column_left'] = $this->load->controller('common/column_left'); $data['footer'] = $this->load->controller('common/footer'); @@ -74,14 +63,12 @@ class Hutko extends \Opencart\System\Engine\Controller { public function save(): void { $this->load->language('extension/hutko/payment/hutko'); - $json = []; if (!$this->user->hasPermission('modify', 'extension/hutko/payment/hutko')) { $json['error']['warning'] = $this->language->get('error_permission'); } - // Validation if (empty($this->request->post['payment_hutko_merchant_id']) || !is_numeric($this->request->post['payment_hutko_merchant_id'])) { $json['error']['payment_hutko_merchant_id'] = $this->language->get('error_merchant_id_numeric'); } @@ -104,83 +91,128 @@ class Hutko extends \Opencart\System\Engine\Controller { public function install(): void { $this->load->model('extension/hutko/payment/hutko'); $this->model_extension_hutko_payment_hutko->install(); - - // OC4 Event Registration + + // Register Event $this->load->model('setting/event'); - $event_code = 'hutko_order_info'; - $event_trigger = 'admin/view/sale/order_info/after'; - $event_action = 'extension/hutko/payment/hutko.order_info'; + // Remove if exists to prevent duplicates + $this->model_setting_event->deleteEventByCode('hutko_order_info'); - // OC 4.0.2.0 introduced the array signature for addEvent - if (version_compare(VERSION, '4.0.2.0', '>=')) { - $this->model_setting_event->addEvent([ - 'code' => $event_code, - 'description' => 'Hutko Payment Info Panel', - 'trigger' => $event_trigger, - 'action' => $event_action, - 'status' => 1, - 'sort_order' => 0 - ]); - } else { - // Legacy argument style for 4.0.0.0 - 4.0.1.x - $this->model_setting_event->addEvent($event_code, $event_trigger, $event_action, 1, 0); + $event_data = [ + 'code' => 'hutko_order_info', + 'description' => 'Hutko Payment Info Panel', + 'trigger' => 'admin/view/sale/order_info/after', + 'action' => 'extension/hutko/payment/hutko.order_info', + 'status' => 1, + 'sort_order' => 1 + ]; + + if (version_compare(VERSION, '4.0.0.0', '>=')) { + // OC 4.0.2.0+ uses array, older 4.0.x uses params. + // We try array first (modern way). + try { + $this->model_setting_event->addEvent($event_data); + } catch (\Exception $e) { + // Fallback for older 4.0.0.0 versions + $this->model_setting_event->addEvent('hutko_order_info', 'admin/view/sale/order_info/after', 'extension/hutko/payment/hutko.order_info', 1, 1); + } } } public function uninstall(): void { - $this->load->model('extension/hutko/payment/hutko'); - $this->model_extension_hutko_payment_hutko->uninstall(); - $this->load->model('setting/event'); $this->model_setting_event->deleteEventByCode('hutko_order_info'); } - // Event Handler for Admin Order View + /** + * Event handler: Injects the Hutko panel into Order Info page + */ public function order_info(string &$route, array &$args, string &$output): void { - if (!isset($args['order_id'])) return; + $order_id = isset($args['order_id']) ? (int)$args['order_id'] : 0; + if (!$order_id) return; $this->load->model('sale/order'); - $order_info = $this->model_sale_order->getOrder((int)$args['order_id']); + $order_info = $this->model_sale_order->getOrder($order_id); + + // Check if payment method is Hutko (code can vary slightly depending on how it was saved) + if ($order_info && isset($order_info['payment_code']) && + ($order_info['payment_code'] == 'hutko' || $order_info['payment_code'] == 'hutko.hutko')) { - // FIX: Check if payment_code exists and matches either 'hutko' or 'hutko.hutko' - if ($order_info && isset($order_info['payment_code']) && ($order_info['payment_code'] == 'hutko' || $order_info['payment_code'] == 'hutko.hutko')) { $this->load->language('extension/hutko/payment/hutko'); $this->load->model('extension/hutko/payment/hutko'); - $hutko_order = $this->model_extension_hutko_payment_hutko->getHutkoOrder((int)$args['order_id']); + $hutko_order = $this->model_extension_hutko_payment_hutko->getHutkoOrder($order_id); - $data['hutko_transaction_ref'] = $hutko_order['hutko_transaction_ref'] ?? ''; - $data['order_id'] = (int)$args['order_id']; + // Prepare Data $data['user_token'] = $this->session->data['user_token']; + $data['order_id'] = $order_id; + $data['hutko_transaction_ref'] = $hutko_order['hutko_transaction_ref'] ?? ''; - // URLs for AJAX actions - $data['refund_url'] = $this->url->link('extension/hutko/payment/hutko.refund', 'user_token=' . $this->session->data['user_token']); + // URLs + $data['refund_url'] = $this->url->link('extension/hutko/payment/hutko.refund', 'user_token=' . $this->session->data['user_token'] . '&order_id=' . $order_id); $data['status_url'] = $this->url->link('extension/hutko/payment/hutko.status', 'user_token=' . $this->session->data['user_token']); - // Language Data + // Translations $data['text_payment_information'] = $this->language->get('text_payment_information'); $data['text_hutko_transaction_ref_label'] = $this->language->get('text_hutko_transaction_ref_label'); - $data['hutko_transaction_ref_display'] = $data['hutko_transaction_ref'] ?: $this->language->get('text_not_available'); - $data['text_not_available'] = $this->language->get('text_not_available'); - $data['text_hutko_refund_title'] = $this->language->get('text_hutko_refund_title'); + $data['text_hutko_status_title'] = $this->language->get('text_hutko_status_title'); $data['entry_refund_amount'] = $this->language->get('entry_refund_amount'); $data['entry_refund_comment'] = $this->language->get('entry_refund_comment'); $data['button_hutko_refund'] = $this->language->get('button_hutko_refund'); - $data['text_confirm_refund'] = $this->language->get('text_confirm_refund'); - - $data['text_hutko_status_title'] = $this->language->get('text_hutko_status_title'); $data['button_hutko_status_check'] = $this->language->get('button_hutko_status_check'); + $data['text_confirm_refund'] = $this->language->get('text_confirm_refund'); + $data['text_not_available'] = $this->language->get('text_not_available'); + $data['text_loading'] = $this->language->get('text_loading'); - $content = $this->load->view('extension/hutko/payment/hutko_order', $data); + $data['hutko_transaction_ref_display'] = $data['hutko_transaction_ref'] ?: $data['text_not_available']; - // Inject content before the History tab/card - $pos = strpos($output, '
{{ log_content }}
+ {# Logs Tab #}
+ | {{ text_hutko_transaction_ref_label }} | +{{ text_hutko_transaction_ref_label }} | {{ hutko_transaction_ref_display }} |
' + data + '
' + data + '