]> source.dussan.org Git - nextcloud-server.git/commitdiff
Fix language in share notes email for users 21535/head
authorJoas Schilling <coding@schilljs.com>
Tue, 23 Jun 2020 06:14:27 +0000 (08:14 +0200)
committerJoas Schilling <coding@schilljs.com>
Tue, 23 Jun 2020 20:01:40 +0000 (22:01 +0200)
Signed-off-by: Joas Schilling <coding@schilljs.com>
lib/private/Share20/DefaultShareProvider.php
lib/private/Share20/ProviderFactory.php
tests/lib/Share20/DefaultShareProviderTest.php

index 98ca747a89464f3b9bb8355f92bed94cc0bbe126..302c3573a30e5fc7d2fbec3f8a7c4521f40ef0e2 100644 (file)
@@ -43,12 +43,13 @@ use OCP\Defaults;
 use OCP\Files\Folder;
 use OCP\Files\IRootFolder;
 use OCP\Files\Node;
+use OCP\IConfig;
 use OCP\IDBConnection;
 use OCP\IGroupManager;
-use OCP\IL10N;
 use OCP\IURLGenerator;
 use OCP\IUser;
 use OCP\IUserManager;
+use OCP\L10N\IFactory;
 use OCP\Mail\IMailer;
 use OCP\Share\Exceptions\ShareNotFound;
 use OCP\Share\IShare;
@@ -82,24 +83,15 @@ class DefaultShareProvider implements IShareProvider {
        /** @var Defaults */
        private $defaults;
 
-       /** @var IL10N */
-       private $l;
+       /** @var IFactory */
+       private $l10nFactory;
 
        /** @var IURLGenerator */
        private $urlGenerator;
 
-       /**
-        * DefaultShareProvider constructor.
-        *
-        * @param IDBConnection $connection
-        * @param IUserManager $userManager
-        * @param IGroupManager $groupManager
-        * @param IRootFolder $rootFolder
-        * @param IMailer $mailer ;
-        * @param Defaults $defaults
-        * @param IL10N $l
-        * @param IURLGenerator $urlGenerator
-        */
+       /** @var IConfig */
+       private $config;
+
        public function __construct(
                        IDBConnection $connection,
                        IUserManager $userManager,
@@ -107,16 +99,18 @@ class DefaultShareProvider implements IShareProvider {
                        IRootFolder $rootFolder,
                        IMailer $mailer,
                        Defaults $defaults,
-                       IL10N $l,
-                       IURLGenerator $urlGenerator) {
+                       IFactory $l10nFactory,
+                       IURLGenerator $urlGenerator,
+                       IConfig $config) {
                $this->dbConn = $connection;
                $this->userManager = $userManager;
                $this->groupManager = $groupManager;
                $this->rootFolder = $rootFolder;
                $this->mailer = $mailer;
                $this->defaults = $defaults;
-               $this->l = $l;
+               $this->l10nFactory = $l10nFactory;
                $this->urlGenerator = $urlGenerator;
+               $this->config = $config;
        }
 
        /**
@@ -1401,45 +1395,58 @@ class DefaultShareProvider implements IShareProvider {
         * @throws \OCP\Files\NotFoundException
         */
        private function sendNote(array $recipients, IShare $share) {
-               $toList = [];
+               $toListByLanguage = [];
 
                foreach ($recipients as $recipient) {
                        /** @var IUser $recipient */
                        $email = $recipient->getEMailAddress();
                        if ($email) {
-                               $toList[$email] = $recipient->getDisplayName();
+                               $language = $this->config->getSystemValue('force_language', false);
+                               $language = \is_string($language) ? $language : $this->config->getUserValue($recipient->getUID(), 'core', 'lang', null);
+                               $language = $language ?? $this->config->getSystemValue('default_language', 'en');
+
+                               if (!isset($toListByLanguage[$language])) {
+                                       $toListByLanguage[$language] = [];
+                               }
+                               $toListByLanguage[$language][$email] = $recipient->getDisplayName();
                        }
                }
 
-               if (!empty($toList)) {
+               if (empty($toListByLanguage)) {
+                       return;
+               }
+
+               foreach ($toListByLanguage as $l10n => $toList) {
                        $filename = $share->getNode()->getName();
                        $initiator = $share->getSharedBy();
                        $note = $share->getNote();
 
+                       $l = $this->l10nFactory->get('lib', $l10n);
+
                        $initiatorUser = $this->userManager->get($initiator);
                        $initiatorDisplayName = ($initiatorUser instanceof IUser) ? $initiatorUser->getDisplayName() : $initiator;
                        $initiatorEmailAddress = ($initiatorUser instanceof IUser) ? $initiatorUser->getEMailAddress() : null;
-                       $plainHeading = $this->l->t('%1$s shared »%2$s« with you and wants to add:', [$initiatorDisplayName, $filename]);
-                       $htmlHeading = $this->l->t('%1$s shared »%2$s« with you and wants to add', [$initiatorDisplayName, $filename]);
+                       $plainHeading = $l->t('%1$s shared »%2$s« with you and wants to add:', [$initiatorDisplayName, $filename]);
+                       $htmlHeading = $l->t('%1$s shared »%2$s« with you and wants to add', [$initiatorDisplayName, $filename]);
                        $message = $this->mailer->createMessage();
 
                        $emailTemplate = $this->mailer->createEMailTemplate('defaultShareProvider.sendNote');
 
-                       $emailTemplate->setSubject($this->l->t('»%s« added a note to a file shared with you', [$initiatorDisplayName]));
+                       $emailTemplate->setSubject($l->t('»%s« added a note to a file shared with you', [$initiatorDisplayName]));
                        $emailTemplate->addHeader();
                        $emailTemplate->addHeading($htmlHeading, $plainHeading);
                        $emailTemplate->addBodyText(htmlspecialchars($note), $note);
 
                        $link = $this->urlGenerator->linkToRouteAbsolute('files.viewcontroller.showFile', ['fileid' => $share->getNode()->getId()]);
                        $emailTemplate->addBodyButton(
-                               $this->l->t('Open »%s«', [$filename]),
+                               $l->t('Open »%s«', [$filename]),
                                $link
                        );
 
 
                        // The "From" contains the sharers name
                        $instanceName = $this->defaults->getName();
-                       $senderName = $this->l->t(
+                       $senderName = $l->t(
                                '%1$s via %2$s',
                                [
                                        $initiatorDisplayName,
index 891a5d2c31cc8c1d7929b1e745799b0a59299723..73a14dd4ac121acbde469893d0c0ff9f8ca062d5 100644 (file)
@@ -87,8 +87,9 @@ class ProviderFactory implements IProviderFactory {
                                $this->serverContainer->getLazyRootFolder(),
                                $this->serverContainer->getMailer(),
                                $this->serverContainer->query(Defaults::class),
-                               $this->serverContainer->getL10N('sharing'),
-                               $this->serverContainer->getURLGenerator()
+                               $this->serverContainer->getL10NFactory(),
+                               $this->serverContainer->getURLGenerator(),
+                               $this->serverContainer->getConfig()
                        );
                }
 
index 6f8a96fab19ae14a2b71abc041f31df1c55f0e39..cb332ac186a7543789a907822ae9f9b4db510d9e 100644 (file)
@@ -28,6 +28,7 @@ use OCP\Defaults;
 use OCP\Files\File;
 use OCP\Files\Folder;
 use OCP\Files\IRootFolder;
+use OCP\IConfig;
 use OCP\IDBConnection;
 use OCP\IGroup;
 use OCP\IGroupManager;
@@ -35,8 +36,10 @@ use OCP\IL10N;
 use OCP\IURLGenerator;
 use OCP\IUser;
 use OCP\IUserManager;
+use OCP\L10N\IFactory;
 use OCP\Mail\IMailer;
 use OCP\Share\IShare;
+use PHPUnit\Framework\MockObject\MockObject;
 
 /**
  * Class DefaultShareProviderTest
@@ -64,6 +67,9 @@ class DefaultShareProviderTest extends \Test\TestCase {
        /** @var \PHPUnit_Framework_MockObject_MockObject|IMailer */
        protected $mailer;
 
+       /** @var IFactory|MockObject */
+       protected $l10nFactory;
+
        /** @var \PHPUnit_Framework_MockObject_MockObject|IL10N */
        protected $l10n;
 
@@ -73,15 +79,20 @@ class DefaultShareProviderTest extends \Test\TestCase {
        /** @var \PHPUnit_Framework_MockObject_MockObject|IURLGenerator */
        protected $urlGenerator;
 
+       /** @var IConfig|MockObject */
+       protected $config;
+
        protected function setUp(): void {
                $this->dbConn = \OC::$server->getDatabaseConnection();
                $this->userManager = $this->createMock(IUserManager::class);
                $this->groupManager = $this->createMock(IGroupManager::class);
                $this->rootFolder = $this->createMock(IRootFolder::class);
                $this->mailer = $this->createMock(IMailer::class);
+               $this->l10nFactory = $this->createMock(IFactory::class);
                $this->l10n = $this->createMock(IL10N::class);
                $this->defaults = $this->getMockBuilder(Defaults::class)->disableOriginalConstructor()->getMock();
                $this->urlGenerator = $this->createMock(IURLGenerator::class);
+               $this->config = $this->createMock(IConfig::class);
 
                $this->userManager->expects($this->any())->method('userExists')->willReturn(true);
 
@@ -95,8 +106,9 @@ class DefaultShareProviderTest extends \Test\TestCase {
                        $this->rootFolder,
                        $this->mailer,
                        $this->defaults,
-                       $this->l10n,
-                       $this->urlGenerator
+                       $this->l10nFactory,
+                       $this->urlGenerator,
+                       $this->config
                );
        }
 
@@ -454,8 +466,9 @@ class DefaultShareProviderTest extends \Test\TestCase {
                                $this->rootFolder,
                                $this->mailer,
                                $this->defaults,
-                               $this->l10n,
-                               $this->urlGenerator
+                               $this->l10nFactory,
+                               $this->urlGenerator,
+                               $this->config
                        ])
                        ->setMethods(['getShareById'])
                        ->getMock();
@@ -548,8 +561,9 @@ class DefaultShareProviderTest extends \Test\TestCase {
                                $this->rootFolder,
                                $this->mailer,
                                $this->defaults,
-                               $this->l10n,
-                               $this->urlGenerator
+                               $this->l10nFactory,
+                               $this->urlGenerator,
+                               $this->config
                        ])
                        ->setMethods(['getShareById'])
                        ->getMock();
@@ -2474,8 +2488,9 @@ class DefaultShareProviderTest extends \Test\TestCase {
                        $rootFolder,
                        $this->mailer,
                        $this->defaults,
-                       $this->l10n,
-                       $this->urlGenerator
+                       $this->l10nFactory,
+                       $this->urlGenerator,
+                       $this->config
                );
 
                $password = md5(time());
@@ -2571,8 +2586,9 @@ class DefaultShareProviderTest extends \Test\TestCase {
                        $rootFolder,
                        $this->mailer,
                        $this->defaults,
-                       $this->l10n,
-                       $this->urlGenerator
+                       $this->l10nFactory,
+                       $this->urlGenerator,
+                       $this->config
                );
 
                $u1 = $userManager->createUser('testShare1', 'test');
@@ -2666,8 +2682,9 @@ class DefaultShareProviderTest extends \Test\TestCase {
                        $rootFolder,
                        $this->mailer,
                        $this->defaults,
-                       $this->l10n,
-                       $this->urlGenerator
+                       $this->l10nFactory,
+                       $this->urlGenerator,
+                       $this->config
                );
 
                $u1 = $userManager->createUser('testShare1', 'test');