From 4d8acecc5707af30354122cb0a32e18adde1f1a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julius=20H=C3=A4rtl?= Date: Wed, 18 Jul 2018 22:08:35 +0200 Subject: [PATCH] Simly remove 4byte chars from the description if those are not supported MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Julius Härtl --- lib/AppInfo/Application.php | 4 ++++ lib/Db/CardMapper.php | 13 ++++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/lib/AppInfo/Application.php b/lib/AppInfo/Application.php index aac44b52d..528c1e416 100644 --- a/lib/AppInfo/Application.php +++ b/lib/AppInfo/Application.php @@ -61,6 +61,10 @@ class Application extends App { return $container->getServer()->getConfig()->getSystemValue('dbtype', 'sqlite'); }); + $container->registerService('database4ByteSupport', function($container) { + return $container->getServer()->getDatabaseConnection()->supports4ByteText(); + }); + // Delete user/group acl entries when they get deleted /** @var IUserManager $userManager */ $userManager = $server->getUserManager(); diff --git a/lib/Db/CardMapper.php b/lib/Db/CardMapper.php index 7c5e78462..e0234fc43 100644 --- a/lib/Db/CardMapper.php +++ b/lib/Db/CardMapper.php @@ -38,29 +38,40 @@ class CardMapper extends DeckMapper implements IPermissionMapper { /** @var IManager */ private $notificationManager; private $databaseType; + private $database4ByteSupport; public function __construct( IDBConnection $db, LabelMapper $labelMapper, IUserManager $userManager, IManager $notificationManager, - $databaseType = 'sqlite' + $databaseType = 'sqlite', + $database4ByteSupport = true ) { parent::__construct($db, 'deck_cards', Card::class); $this->labelMapper = $labelMapper; $this->userManager = $userManager; $this->notificationManager = $notificationManager; $this->databaseType = $databaseType; + $this->database4ByteSupport = $database4ByteSupport; } public function insert(Entity $entity) { $entity->setDatabaseType($this->databaseType); $entity->setCreatedAt(time()); $entity->setLastModified(time()); + if (!$this->database4ByteSupport) { + $description = preg_replace('/[\x{10000}-\x{10FFFF}]/u', "\xEF\xBF\xBD", $entity->getDescription()); + $entity->setDescription($description); + } return parent::insert($entity); } public function update(Entity $entity, $updateModified = true) { + if (!$this->database4ByteSupport) { + $description = preg_replace('/[\x{10000}-\x{10FFFF}]/u', "\xEF\xBF\xBD", $entity->getDescription()); + $entity->setDescription($description); + } $entity->setDatabaseType($this->databaseType); if ($updateModified) {