<?php
/**
* Class HandleActionLabels
*/
namespace WPDesk\FS\Shipment\BulkAction;
use Exception;
use FSVendor\WPDesk\FS\Shipment\Exception\UnableToCreateTmpFileException;
use FSVendor\WPDesk\FS\Shipment\Exception\UnableToCreateTmpZipFileException;
use FSVendor\WPDesk\FS\Shipment\Label\LabelsBulkActionHandler;
use FSVendor\WPDesk\FS\Shipment\Label\LabelsFileCreator;
use FSVendor\WPDesk\Session\SessionFactory;
/**
* .
*/
class HandleActionLabels implements HandleActionStrategyInterface {
/**
* @var SessionFactory
*/
private $session_factory;
/**
* @param SessionFactory $session_factory .
*/
public function __construct( SessionFactory $session_factory ) {
$this->session_factory = $session_factory;
}
/**
* @param string $redirect_to .
* @param array $post_ids .
*
* @return string
*/
public function handle( string $redirect_to, array $post_ids ): string {
$labels_bulk_actions_handler = LabelsBulkActionHandler::get_labels_bulk_actions_handler();
$labels_bulk_actions_handler->bulk_process_orders( $post_ids );
try {
$labels = $labels_bulk_actions_handler->get_labels_for_shipments();
if ( 0 === count( $labels ) ) {
$redirect_to = add_query_arg( 'bulk_flexible_shipping_labels', count( $post_ids ), $redirect_to );
return add_query_arg( 'bulk_flexible_shipping_no_labels_created', 1, $redirect_to );
}
$labels_file_creator = new LabelsFileCreator( $labels );
$labels_file_creator->create_labels_file();
$labels['tmp_file'] = $labels_file_creator->get_tmp_file_name();
$labels['client_file'] = $labels_file_creator->get_file_name();
foreach ( $labels as $key => $label ) {
if ( is_array( $labels[ $key ] ) && isset( $labels[ $key ]['content'] ) ) {
unset( $labels[ $key ]['content'] );
}
}
} catch ( UnableToCreateTmpZipFileException $zip_file_exception ) {
$labels['error'] = __( 'Unable to create temporary zip archive for labels. Check temporary folder configuration on server.', 'flexible-shipping' );
} catch ( UnableToCreateTmpFileException $tmp_file_exception ) {
$labels['error'] = __( 'Unable to create temporary file for labels. Check temporary folder configuration on server.', 'flexible-shipping' );
} catch ( Exception $e ) {
$labels['error'] = $e->getMessage();
}
$this->session_factory->get_woocommerce_session_adapter()->set( 'flexible_shipping_bulk_labels', $labels );
return add_query_arg( 'bulk_flexible_shipping_labels', count( $post_ids ), $redirect_to );
}
}