Simly remove 4byte chars from the description if those are not supported

Signed-off-by: Julius Härtl <jus@bitgrid.net>
This commit is contained in:
Julius Härtl 2018-07-18 22:08:35 +02:00
Родитель 7fda7c1a4a
Коммит 4d8acecc57
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4C614C6ED2CDE6DF
2 изменённых файлов: 16 добавлений и 1 удалений

Просмотреть файл

@ -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();

Просмотреть файл

@ -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) {