PHP code example of bitbag / shipping-export-plugin
1. Go to this page and download the library: Download bitbag/shipping-export-plugin library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
bitbag / shipping-export-plugin example snippets
declare(strict_types=1);
namespace App\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Validator\Constraints\NotBlank;
final class FrankMartinShippingGatewayType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('iban', TextType::class, [
'label' => 'IBAN',
'constraints' => [
new NotBlank([
'message' => 'IBAN number cannot be blank.',
'groups' => 'bitbag',
]),
],
])
->add('address', TextType::class, [
'label' => 'Address',
'constraints' => [
new NotBlank([
'message' => 'Address cannot be blank.',
'groups' => 'bitbag',
]),
],
])
;
}
}
declare(strict_types=1);
namespace App\EventListener;
use BitBag\SyliusShippingExportPlugin\Entity\ShippingExportInterface;
use Doctrine\Persistence\ObjectManager;
use Sylius\Bundle\ResourceBundle\Event\ResourceControllerEvent;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\HttpFoundation\RequestStack;
use Webmozart\Assert\Assert;
final class FrankMartinShippingExportEventListener
{
/** @var RequestStack */
private $requestStack;
/** @var Filesystem */
private $filesystem;
/** @var ObjectManager */
private $shippingExportManager;
/** @var string */
private $shippingLabelsPath;
public function __construct(
RequestStack $requestStack,
Filesystem $filesystem,
ObjectManager $shippingExportManager,
string $shippingLabelsPath
) {
$this->requestStack = $requestStack;
$this->filesystem = $filesystem;
$this->shippingExportManager = $shippingExportManager;
$this->shippingLabelsPath = $shippingLabelsPath;
}
public function exportShipment(ResourceControllerEvent $event): void
{
/** @var ShippingExportInterface $shippingExport */
$shippingExport = $event->getSubject();
Assert::isInstanceOf($shippingExport, ShippingExportInterface::class);
$shippingGateway = $shippingExport->getShippingGateway();
Assert::notNull($shippingGateway);
if ('frank_martin_shipping_gateway' !== $shippingGateway->getCode()) {
return;
}
$session = $this->requestStack->getSession();
$flashBag = $session->getBag('flashes');
if (false) {
$flashBag->add('error', 'bitbag.ui.shipping_export_error'); // Add an error notification
return;
}
$flashBag->add('success', 'bitbag.ui.shipment_data_has_been_exported'); // Add success notification
$this->saveShippingLabel($shippingExport, 'Some label content received from external API', 'pdf'); // Save label
$this->markShipmentAsExported($shippingExport); // Mark shipment as "Exported"
}
public function saveShippingLabel(
ShippingExportInterface $shippingExport,
string $labelContent,
string $labelExtension
): void {
$labelPath = $this->shippingLabelsPath
. '/' . $this->getFilename($shippingExport)
. '.' . $labelExtension;
$this->filesystem->dumpFile($labelPath, $labelContent);
$shippingExport->setLabelPath($labelPath);
$this->shippingExportManager->persist($shippingExport);
$this->shippingExportManager->flush();
}
private function getFilename(ShippingExportInterface $shippingExport): string
{
$shipment = $shippingExport->getShipment();
Assert::notNull($shipment);
$order = $shipment->getOrder();
Assert::notNull($order);
$orderNumber = $order->getNumber();
$shipmentId = $shipment->getId();
return implode(
'_',
[
$shipmentId,
preg_replace('~[^A-Za-z0-9]~', '', $orderNumber),
]
);
}
private function markShipmentAsExported(ShippingExportInterface $shippingExport): void
{
$shippingExport->setState(ShippingExportInterface::STATE_EXPORTED);
$shippingExport->setExportedAt(new \DateTime());
$this->shippingExportManager->persist($shippingExport);
$this->shippingExportManager->flush();
}
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.