summaryrefslogtreecommitdiffstats
path: root/lib/private/Comments
diff options
context:
space:
mode:
Diffstat (limited to 'lib/private/Comments')
-rw-r--r--lib/private/Comments/EmojiHelper.php101
-rw-r--r--lib/private/Comments/Manager.php7
2 files changed, 4 insertions, 104 deletions
diff --git a/lib/private/Comments/EmojiHelper.php b/lib/private/Comments/EmojiHelper.php
deleted file mode 100644
index a75919edbc9..00000000000
--- a/lib/private/Comments/EmojiHelper.php
+++ /dev/null
@@ -1,101 +0,0 @@
-<?php
-
-declare(strict_types=1);
-
-/**
- * @copyright Copyright (c) 2020, Georg Ehrke
- *
- * @author Georg Ehrke <oc.list@georgehrke.com>
- * @author Joas Schilling <coding@schilljs.com>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-namespace OC\Comments;
-
-use OCP\IDBConnection;
-
-/**
- * Copied OCA\UserStatus\Service\EmojiService
- * Needs to be unified later
- */
-class EmojiHelper {
-
- /** @var IDBConnection */
- private $db;
-
- /**
- * EmojiService constructor.
- *
- * @param IDBConnection $db
- */
- public function __construct(IDBConnection $db) {
- $this->db = $db;
- }
-
- /**
- * @return bool
- */
- public function doesPlatformSupportEmoji(): bool {
- return $this->db->supports4ByteText() &&
- \class_exists(\IntlBreakIterator::class);
- }
-
- /**
- * @param string $emoji
- * @return bool
- */
- public function isValidEmoji(string $emoji): bool {
- $intlBreakIterator = \IntlBreakIterator::createCharacterInstance();
- $intlBreakIterator->setText($emoji);
-
- $characterCount = 0;
- while ($intlBreakIterator->next() !== \IntlBreakIterator::DONE) {
- $characterCount++;
- }
-
- if ($characterCount !== 1) {
- return false;
- }
-
- $codePointIterator = \IntlBreakIterator::createCodePointInstance();
- $codePointIterator->setText($emoji);
-
- foreach ($codePointIterator->getPartsIterator() as $codePoint) {
- $codePointType = \IntlChar::charType($codePoint);
-
- // If the current code-point is an emoji or a modifier (like a skin-tone)
- // just continue and check the next character
- if ($codePointType === \IntlChar::CHAR_CATEGORY_MODIFIER_SYMBOL ||
- $codePointType === \IntlChar::CHAR_CATEGORY_MODIFIER_LETTER ||
- $codePointType === \IntlChar::CHAR_CATEGORY_OTHER_SYMBOL ||
- $codePointType === \IntlChar::CHAR_CATEGORY_GENERAL_OTHER_TYPES) {
- continue;
- }
-
- // If it's neither a modifier nor an emoji, we only allow
- // a zero-width-joiner or a variation selector 16
- $codePointValue = \IntlChar::ord($codePoint);
- if ($codePointValue === 8205 || $codePointValue === 65039) {
- continue;
- }
-
- return false;
- }
-
- return true;
- }
-}
diff --git a/lib/private/Comments/Manager.php b/lib/private/Comments/Manager.php
index 123e4f6988d..31107c1b9fb 100644
--- a/lib/private/Comments/Manager.php
+++ b/lib/private/Comments/Manager.php
@@ -39,6 +39,7 @@ use OCP\Comments\NotFoundException;
use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\IConfig;
use OCP\IDBConnection;
+use OCP\IEmojiHelper;
use OCP\IUser;
use OCP\IInitialStateService;
use OCP\PreConditionNotMetException;
@@ -59,7 +60,7 @@ class Manager implements ICommentsManager {
/** @var ITimeFactory */
protected $timeFactory;
- /** @var EmojiHelper */
+ /** @var IEmojiHelper */
protected $emojiHelper;
/** @var IInitialStateService */
@@ -81,7 +82,7 @@ class Manager implements ICommentsManager {
LoggerInterface $logger,
IConfig $config,
ITimeFactory $timeFactory,
- EmojiHelper $emojiHelper,
+ IEmojiHelper $emojiHelper,
IInitialStateService $initialStateService) {
$this->dbConn = $dbConn;
$this->logger = $logger;
@@ -153,7 +154,7 @@ class Manager implements ICommentsManager {
throw new \UnexpectedValueException('Actor, Object and Verb information must be provided for saving');
}
- if ($comment->getVerb() === 'reaction' && !$this->emojiHelper->isValidEmoji($comment->getMessage())) {
+ if ($comment->getVerb() === 'reaction' && !$this->emojiHelper->isValidSingleEmoji($comment->getMessage())) {
// 4 characters: laptop + person + gender + skin color => "🧑🏽‍💻" is a single emoji from the picker
throw new \UnexpectedValueException('Reactions can only be a single emoji');
}