oont-contents/plugins/aramex-shipping-woocommerce/includes/shipment/class-aramex-woocommerce-bulk-printlabel.php
2025-02-08 15:10:23 +01:00

245 lines
No EOL
9.7 KiB
PHP

<?php
/*
Plugin Name: Aramex Shipping WooCommerce
Plugin URI: https://aramex.com
Description: Aramex Shipping WooCommerce plugin
Version: 1.0.0
Author: aramex.com
Author URI: https://www.aramex.com/solutions-services/developers-solutions-center
License: GPL2
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain: aramex
Domain Path: /languages
*/
include_once __DIR__ . '../../core/class-aramex-helper.php';
$plugin_dir = WP_PLUGIN_DIR . '/aramex-shipping-woocommerce';
require_once $plugin_dir . '/vendor/autoload.php';
/**
* Controller for Printing label
*/
class Aramex_Bulk_Printlabel_Method extends Aramex_Helper
{
/**
* Starting method
*
* @return mixed|string|void
*/
public function run()
{
check_admin_referer('aramex-shipment-check' . wp_get_current_user()->user_email);
$info = $this->getInfo(wp_create_nonce('aramex-shipment-check' . wp_get_current_user()->user_email));
$post = $this->formatPost($_POST);
if (!session_id()) {
session_start();
}
if(isset($post['bulk'])){
$output = array();
$selected_orders = $post['selected_orders'];
$bulk_pdf = array();
$ordersIds = explode(",", $selected_orders);
$upload_dir = wp_upload_dir();
$print_label_dirname = $upload_dir['basedir'] . '/print-label';
$print_label_uploads_url = $upload_dir['baseurl'] . '/print-label';
$pdfData = $post['pdfData'];
$success_pdf_ID = array();
$failed_pdf_ID = array();
if(empty($pdfData)){
foreach ($ordersIds as $id) {
$order_id = (int)$id;
if ($order_id) {
//SOAP object
$soapClient = new SoapClient($info['baseUrl'] . 'shipping.wsdl', array('soap_version' => SOAP_1_1));
$awbno = array();
global $wpdb;
$comments_table = $wpdb->prefix . 'comments';
$commentmeta_table = $wpdb->prefix . 'commentmeta';
// $order_ids = 49; // Replace with the actual order ID
$query = $wpdb->prepare(
"SELECT c.*, cm.meta_key, cm.meta_value
FROM $comments_table AS c
LEFT JOIN $commentmeta_table AS cm ON c.comment_ID = cm.comment_id
WHERE c.comment_post_ID = %d
ORDER BY c.comment_ID DESC",
$order_id
);
$prepared_query = $wpdb->prepare($query, $post_id);
$history = $wpdb->get_results($prepared_query);
$history_list = array();
foreach ($history as $shipment) {
$history_list[] = $shipment->comment_content;
}
$aramex_return_button = false;
if (count($history_list)) {
foreach ($history_list as $history) {
$pos = strpos($history, 'Return');
if ($pos) {
$aramex_return_button = true;
break;
}
$awbno = strstr($history, "- Order No", true);
$awbno = trim($awbno, "AWB No.");
if ($awbno != "") {
$aramex_return_button = true;
break;
}
}
}
$last_track = "";
if (count($history_list)) {
foreach ($history_list as $history) {
$awbno = strstr($history, "- Order No", true);
$awbno = trim($awbno, "AWB No.");
if (isset($awbno)) {
if ((int)$awbno) {
$last_track = $awbno;
break;
}
}
$awbno = trim($awbno, "Aramex Shipment Return Order AWB No.");
if (isset($awbno)) {
if ((int)$awbno) {
$last_track = $awbno;
break;
}
}
}
}
if($aramex_return_button == true){
if ($last_track) {
$report_id = $info['clientInfo']['report_id'];
if (!$report_id) {
$report_id = 9729;
}
$params = array(
'ClientInfo' => $info['clientInfo'],
'Transaction' => array(
'Reference1' => $order_id,
'Reference2' => '',
'Reference3' => '',
'Reference4' => '',
'Reference5' => '',
),
'LabelInfo' => array(
'ReportID' => $report_id,
'ReportType' => 'URL',
),
);
$params['ShipmentNumber'] = $last_track;
$auth_call = $soapClient->PrintLabel($params);
/* bof PDF demaged Fixes debug */
if ($auth_call->HasErrors) {
array_push($failed_pdf_ID,$order_id);
continue;
}
/* eof PDF demaged Fixes */
$filepath = $auth_call->ShipmentLabel->LabelURL;
if (!file_exists($print_label_dirname)) {
mkdir($print_label_dirname, 0777, true);
}
$time = time();
$pdf_filename_by_order_id = $print_label_dirname . "/".$order_id . "_" .$time.".pdf";
file_put_contents($pdf_filename_by_order_id, fopen($filepath, 'r'));
array_push($bulk_pdf, $pdf_filename_by_order_id);
array_push($success_pdf_ID,$order_id);
}
}else{
array_push($failed_pdf_ID,$order_id);
}
} else {
$this->aramex_errors()->add('error', 'This order no longer exists.');
$_SESSION['aramex_errors_printlabel'] = $this->aramex_errors();
wp_redirect(sanitize_text_field(esc_url_raw($_POST['aramex_shipment_referer'])) . '&aramexpopup/show_printlabel');
exit();
}
}
// create merger instance
$pdf = new \Jurosh\PDFMerge\PDFMerger;
foreach ($bulk_pdf as $item) {
$pdf->addPDF($item, 'all', 'vertical');
}
$merge_pdf_path = '';
if(!empty($bulk_pdf)){
$time = time();
$pdf_name = $time.'.pdf';
$pdf->merge('file', $print_label_dirname.'/'.$pdf_name);
$merge_pdf = $print_label_uploads_url.'/'.$pdf_name;
$merge_pdf_path = $print_label_dirname.'/'.$pdf_name;
}
foreach ($bulk_pdf as $item) {
unlink($item);
}
$output = array(
"file_url" => $merge_pdf,
"file_path" => $merge_pdf_path,
"success_id"=> $success_pdf_ID,
"failed_id"=> $failed_pdf_ID,
"sucess" => false
);
}else{
unlink($pdfData);
$output = array(
"file_url" => '',
"file_path" => '',
"success_id"=> $success_pdf_ID,
"failed_id"=> $failed_pdf_ID,
"sucess" => true
);
}
echo json_encode($output);
}
die();
}
/**
* Get errors
*
* @return WP_Error WP Errors
*/
public function aramex_errors()
{
static $wp_error; // Will hold global variable safely
return isset($wp_error) ? $wp_error : ($wp_error = new WP_Error(null, null, null));
}
}