<?php declare(strict_types=1);
namespace IdeaBooks\Storefront\Subscriber;
use Shopware\Core\Content\ImportExport\Event\ImportExportBeforeExportRecordEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Shopware\Core\Framework\Struct\ArrayEntity;
use \Mysqli;
class ExportSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents(): array
{
return [
ImportExportBeforeExportRecordEvent::class => 'convertTags'
];
}
private function OpenCon()
{
//DATABASE_URL="mysql://ideabooks.nl:i9cIbFBadWuxdwgb@localhost:3306/ideabooks_albertvanderveen_nl"
$databaseUrl = getenv('DATABASE_URL');
$databaseUrlParts = explode(':', $databaseUrl);
$dbuser = trim($databaseUrlParts[1],'/');
$dbpass = explode('@', $databaseUrlParts[2])[0];
$dbhost = explode('@', $databaseUrlParts[2])[1];
$db = explode('/', $databaseUrlParts[3])[1];
/*
$dbhost = "localhost";
$dbuser = "app";
$dbpass = "SAg8XKmloD8cjS2dCvneYFMnH70onxgr";
$db = "ideanew2";
*/
$mysqli = new mysqli($dbhost, $dbuser, $dbpass,$db) or die("Connect failed: %s\n". $conn -> error);
return $mysqli;
}
private function CloseCon($mysqli)
{
$mysqli -> close();
}
public function convertTags(ImportExportBeforeExportRecordEvent $event): void
{
$record = $event->getRecord();
if ($record['status'] == 'notSet'){
$record = [];//in dit geval record niet exporteren, want niet bevestigde aanmelding
}
else {
//$record['tags'] = 'test';
$tags = explode(',', str_replace('|', ',', $record['tags']));
$tags = substr_replace($tags, '0x', 0, 0);//voeg '0x' toe aan ieder tag-id (is UUID)
$mysqli = $this->OpenCon();
$query = "SELECT name FROM tag WHERE id IN (" . implode(',', $tags) . ")";
file_put_contents(getenv('APP_DIR') . '/var/log/ExportSubscriber.log', PHP_EOL.date("Y-m-d H:i:s").chr(9).'query tags: '.$query.PHP_EOL, FILE_APPEND);
if ($result = $mysqli->query($query)) {
$rows = mysqli_fetch_all($result, MYSQLI_ASSOC);
file_put_contents(getenv('APP_DIR') . '/var/log/ExportSubscriber.log', PHP_EOL.date("Y-m-d H:i:s").chr(9).'rows: '.print_r($rows, true).PHP_EOL, FILE_APPEND);
$tagsConvertedArr = [];
$country = '';
foreach ($rows as $key => $row) {
if (in_array($row['name'], ['Art', 'Photography', 'Design', 'Architecture'])) $tagsConvertedArr[] = $row['name'];
else $country = $row['name'];
}
$record['country'] = $country;
$record['newsletterCategories'] = implode('|', $tagsConvertedArr);
}
else {
$record['country'] = '';//deze twee altijd setten, zodat de col in shopware/core/Content/ImportExport/Processing/Writer/CsvFileWriter.php wordt geset in de header, als $index === 0
$record['newsletterCategories'] = '';
}
unset($record['tags']);//unsetten, want verspreid over $record['country'] en $record['newsletterCategories']
//deze ook unsetten, want niet van belang:
unset($record['id']);
unset($record['salutation']);
unset($record['title']);
unset($record['hash']);
unset($record['sales_channel_id']);
unset($record['salesChannelId']);
$this->CloseCon($mysqli);
}
$event->setRecord($record);
file_put_contents(getenv('APP_DIR') . '/var/log/ExportSubscriber.log', PHP_EOL.date("Y-m-d H:i:s").chr(9).'record: '.print_r($record, true).PHP_EOL, FILE_APPEND);
}
}