]> source.dussan.org Git - nextcloud-server.git/commitdiff
Minor cleanup: php-cs-fixer, tests, interface consistency 17456/head
authorBrad Rubenstein <brad@wbr.tech>
Wed, 2 Sep 2020 15:16:24 +0000 (17:16 +0200)
committerBrad Rubenstein <brad@wbr.tech>
Wed, 2 Sep 2020 15:54:36 +0000 (17:54 +0200)
IMipPlugin.php Removed blank lines to make php-cs-fixer happy.
Minor cleanup:  bugs found by Psalm static checker
IEMailTemplate: The public interface to addBodyListItem also needs to include the new plainIndent parameter.
IMipPlugin: Fixes an undefined variable for events that do not have DTEND.  Also use explicit string conversion for parameters and properties in several places.

The new email template adds an additional blank line before "button" links in plain text, so the tests were fixed to include that additional blank line.

Signed-off-by: Brad Rubenstein <brad@wbr.tech>
apps/dav/lib/CalDAV/Schedule/IMipPlugin.php
apps/dav/tests/unit/CalDAV/Schedule/IMipPluginTest.php
apps/settings/tests/Mailer/NewUserMailHelperTest.php
lib/private/Mail/EMailTemplate.php
lib/public/Mail/IEMailTemplate.php
tests/data/emails/new-account-email-custom-text-alternative.txt
tests/data/emails/new-account-email-custom.txt
tests/data/emails/new-account-email.txt

index 6a9b64ff9719db19b4406e559552594d202ecb5a..56517ab28c12774f8167d8f957768cd4b2686e08 100644 (file)
@@ -3,7 +3,6 @@
  * @copyright Copyright (c) 2016, ownCloud, Inc.
  * @copyright Copyright (c) 2017, Georg Ehrke
  *
- * @author brad2014 <brad2014@users.noreply.github.com>
  * @author Brad Rubenstein <brad@wbr.tech>
  * @author Christoph Wurst <christoph@winzerhof-wurst.at>
  * @author Georg Ehrke <oc.list@georgehrke.com>
@@ -242,8 +241,7 @@ class IMipPlugin extends SabreIMipPlugin {
 
                $summary = ((string) $summary !== '') ? (string) $summary : $l10n->t('Untitled event');
 
-               $this->addSubjectAndHeading($template, $l10n, $method, $summary,
-                       $meetingAttendeeName, $meetingInviteeName);
+               $this->addSubjectAndHeading($template, $l10n, $method, $summary);
                $this->addBulletList($template, $l10n, $vevent);
 
 
@@ -402,20 +400,19 @@ class IMipPlugin extends SabreIMipPlugin {
         * @param VEvent $vevent
         */
        private function generateWhenString(IL10N $l10n, VEvent $vevent) {
-
                $dtstart = $vevent->DTSTART;
                if (isset($vevent->DTEND)) {
                        $dtend = $vevent->DTEND;
                } elseif (isset($vevent->DURATION)) {
                        $isFloating = $vevent->DTSTART->isFloating();
                        $dtend = clone $vevent->DTSTART;
-                       $endDateTime = $end->getDateTime();
+                       $endDateTime = $dtend->getDateTime();
                        $endDateTime = $endDateTime->add(DateTimeParser::parse($vevent->DURATION->getValue()));
                        $dtend->setDateTime($endDateTime, $isFloating);
                } elseif (!$vevent->DTSTART->hasTime()) {
                        $isFloating = $vevent->DTSTART->isFloating();
                        $dtend = clone $vevent->DTSTART;
-                       $endDateTime = $end->getDateTime();
+                       $endDateTime = $dtend->getDateTime();
                        $endDateTime = $endDateTime->modify('+1 day');
                        $dtend->setDateTime($endDateTime, $isFloating);
                } else {
@@ -526,7 +523,6 @@ class IMipPlugin extends SabreIMipPlugin {
         * @param VEVENT $vevent
         */
        private function addBulletList(IEMailTemplate $template, IL10N $l10n, $vevent) {
-
                if ($vevent->SUMMARY) {
                        $template->addBodyListItem($vevent->SUMMARY, $l10n->t('Title:'),
                                $this->getAbsoluteImagePath('caldav/title.svg'),'','',self::IMIP_INDENT);
@@ -541,19 +537,20 @@ class IMipPlugin extends SabreIMipPlugin {
                                $this->getAbsoluteImagePath('caldav/location.svg'),'','',self::IMIP_INDENT);
                }
                if ($vevent->URL) {
+                       $url = $vevent->URL->getValue();
                        $template->addBodyListItem(sprintf('<a href="%s">%s</a>',
-                                       htmlspecialchars($vevent->URL),
-                                       htmlspecialchars($vevent->URL)),
+                                       htmlspecialchars($url),
+                                       htmlspecialchars($url)),
                                $l10n->t('Link:'),
                                $this->getAbsoluteImagePath('caldav/link.svg'),
-                               $vevent->URL,'',self::IMIP_INDENT);
+                               $url,'',self::IMIP_INDENT);
                }
 
                $this->addAttendees($template, $l10n, $vevent);
 
                /* Put description last, like an email body, since it can be arbitrarily long */
                if ($vevent->DESCRIPTION) {
-                       $template->addBodyListItem($vevent->DESCRIPTION, $l10n->t('Description:'),
+                       $template->addBodyListItem($vevent->DESCRIPTION->getValue(), $l10n->t('Description:'),
                                $this->getAbsoluteImagePath('caldav/description.svg'),'','',self::IMIP_INDENT);
                }
        }
@@ -581,18 +578,23 @@ class IMipPlugin extends SabreIMipPlugin {
                }
 
                if (isset($vevent->ORGANIZER)) {
+                       /** @var Property\ICalendar\CalAddress $organizer */
                        $organizer = $vevent->ORGANIZER;
                        $organizerURI = $organizer->getNormalizedValue();
                        list($scheme,$organizerEmail) = explode(':',$organizerURI,2); # strip off scheme mailto:
+                       /** @var string|null $organizerName */
                        $organizerName = isset($organizer['CN']) ? $organizer['CN'] : null;
                        $organizerHTML = sprintf('<a href="%s">%s</a>',
                                htmlspecialchars($organizerURI),
                                htmlspecialchars($organizerName ?: $organizerEmail));
                        $organizerText = sprintf('%s <%s>', $organizerName, $organizerEmail);
-                       if (isset($organizer['PARTSTAT'])
-                               && strcasecmp($organizer['PARTSTAT'], 'ACCEPTED') === 0) {
-                               $organizerHTML .= ' ✔︎';
-                               $organizerText .= ' ✔︎';
+                       if (isset($organizer['PARTSTAT'])) {
+                               /** @var Parameter $partstat */
+                               $partstat = $organizer['PARTSTAT'];
+                               if (strcasecmp($partstat->getValue(), 'ACCEPTED') === 0) {
+                                       $organizerHTML .= ' ✔︎';
+                                       $organizerText .= ' ✔︎';
+                               }
                        }
                        $template->addBodyListItem($organizerHTML, $l10n->t('Organizer:'),
                                $this->getAbsoluteImagePath('caldav/organizer.svg'),
index 8faa54f534a0cc82020024c612888f309b52d5c4..a31fdfdc5f7126d9d6c9a8b8539ee9a7763170dd 100644 (file)
@@ -136,6 +136,7 @@ class IMipPluginTest extends TestCase {
 
        public function testDelivery() {
                $this->config
+         ->expects($this->at(1))
                        ->method('getAppValue')
                        ->with('dav', 'invitation_link_recipients', 'yes')
                        ->willReturn('yes');
@@ -148,6 +149,7 @@ class IMipPluginTest extends TestCase {
 
        public function testFailedDelivery() {
                $this->config
+         ->expects($this->at(1))
                        ->method('getAppValue')
                        ->with('dav', 'invitation_link_recipients', 'yes')
                        ->willReturn('yes');
@@ -163,6 +165,7 @@ class IMipPluginTest extends TestCase {
 
        public function testDeliveryWithNoCommonName() {
                $this->config
+         ->expects($this->at(1))
                        ->method('getAppValue')
                        ->with('dav', 'invitation_link_recipients', 'yes')
                        ->willReturn('yes');
@@ -188,9 +191,8 @@ class IMipPluginTest extends TestCase {
         */
        public function testNoMessageSendForPastEvents(array $veventParams, bool $expectsMail) {
                $this->config
-                       ->method('getAppValue')
-                       ->with('dav', 'invitation_link_recipients', 'yes')
-                       ->willReturn('yes');
+         ->method('getAppValue')
+         ->willReturn('yes');
 
                $message = $this->_testMessage($veventParams);
 
@@ -228,6 +230,7 @@ class IMipPluginTest extends TestCase {
 
                $this->_expectSend($recipient, true, $has_buttons);
                $this->config
+         ->expects($this->at(1))
                        ->method('getAppValue')
                        ->with('dav', 'invitation_link_recipients', 'yes')
                        ->willReturn($config_setting);
@@ -252,14 +255,13 @@ class IMipPluginTest extends TestCase {
        public function testMessageSendWhenEventWithoutName() {
                $this->config
                        ->method('getAppValue')
-                       ->with('dav', 'invitation_link_recipients', 'yes')
                        ->willReturn('yes');
 
                $message = $this->_testMessage(['SUMMARY' => '']);
                $this->_expectSend('frodo@hobb.it', true, true,'Invitation: Untitled event');
                $this->emailTemplate->expects($this->once())
                        ->method('addHeading')
-                       ->with('Mr. Wizard invited you to »Untitled event«');
+                       ->with('Invitation');
                $this->plugin->schedule($message);
                $this->assertEquals('1.1', $message->getScheduleStatus());
        }
index fdb5da3bb548b328514ee5138a4fa43af7443d3b..7507c8a9dac7fe73c575fe511d4950fd4fbb4abe 100644 (file)
@@ -599,6 +599,7 @@ Welcome to your TestCloud account, you can add, protect, and share your data.
 
 Your username is: john
 
+
 Go to TestCloud: https://example.com/
 Install Client: https://nextcloud.com/install/#install-clients
 
@@ -817,6 +818,7 @@ Welcome aboard John Doe
 
 Welcome to your TestCloud account, you can add, protect, and share your data.
 
+
 Go to TestCloud: https://example.com/
 Install Client: https://nextcloud.com/install/#install-clients
 
index 054378c2afa0105af3502ac1d21ed9b01b7cad65..e3768ae6cde8a197f94d440c29ba8fe8e23f90f4 100644 (file)
@@ -447,21 +447,21 @@ EOF;
         * @param string $metaInfo Note: When $plainMetaInfo falls back to this, HTML is automatically escaped in the HTML email
         * @param string $icon Absolute path, must be 16*16 pixels
         * @param string|bool $plainText Text that is used in the plain text email
-        *   if empty the $text is used, if false none will be used
+        *   if empty or true the $text is used, if false none will be used
         * @param string|bool $plainMetaInfo Meta info that is used in the plain text email
-        *   if empty the $metaInfo is used, if false none will be used
+        *   if empty or true the $metaInfo is used, if false none will be used
         * @param integer plainIndent If > 0, Indent plainText by this amount.
         * @since 12.0.0
         */
        public function addBodyListItem(string $text, string $metaInfo = '', string $icon = '', $plainText = '', $plainMetaInfo = '', $plainIndent = 0) {
                $this->ensureBodyListOpened();
 
-               if ($plainText === '') {
+               if ($plainText === '' || $plainText === true) {
                        $plainText = $text;
                        $text = htmlspecialchars($text);
                        $text = str_replace("\n", "<br/>", $text); // convert newlines to HTML breaks
                }
-               if ($plainMetaInfo === '') {
+               if ($plainMetaInfo === '' || $plainMetaInfo === true) {
                        $plainMetaInfo = $metaInfo;
                        $metaInfo = htmlspecialchars($metaInfo);
                }
@@ -494,8 +494,10 @@ EOF;
                                 * "plainIndent". Multilines after the first are indented plainIndent+1
                                 * (to account for space after label).  Fixes: #12391
                                 */
+                               /** @var string $label */
+                               $label = ($plainMetaInfo !== false)? $plainMetaInfo : '';
                                $this->plainBody .= sprintf("%${plainIndent}s %s\n",
-                                       $plainMetaInfo,
+                                       $label,
                                        str_replace("\n", "\n" . str_repeat(' ', $plainIndent+1), $plainText));
                        }
                }
index 70046d5c508f37f84e5a72b90555eba5018c62db..5f4e235a7eef5fed6a9ccdc07eddd8782c07af35 100644 (file)
@@ -106,9 +106,10 @@ interface IEMailTemplate {
         *   if empty the $text is used, if false none will be used
         * @param string|bool $plainMetaInfo Meta info that is used in the plain text email
         *   if empty the $metaInfo is used, if false none will be used
+        * @param integer plainIndent If > 0, Indent plainText by this amount.
         * @since 12.0.0
         */
-       public function addBodyListItem(string $text, string $metaInfo = '', string $icon = '', $plainText = '', $plainMetaInfo = '');
+       public function addBodyListItem(string $text, string $metaInfo = '', string $icon = '', $plainText = '', $plainMetaInfo = '', $plainIndent = 0);
 
        /**
         * Adds a button group of two buttons to the body of the email
index f65744b20d9069501a274462e83709b7ccc90665..03cb99c1d76c22ace894e630c3d0d9efcd615504 100644 (file)
@@ -4,6 +4,7 @@ Welcome to your Nextcloud account, you can add, protect, and share your data. -
 
 Your username is: abc
 
+
 Set your password - text: https://example.org/resetPassword/123
 Install Client - text: https://nextcloud.com/install/#install-clients
 
index 57c5202a744ed03b516bc29f57c11f199c7d9a31..c075c49d6490056c6954912f41b697f95ee7af33 100644 (file)
@@ -4,6 +4,7 @@ Welcome to your Nextcloud account, you can add, protect, and share your data.
 
 Your username is: abc
 
+
 Set your password: https://example.org/resetPassword/123
 Install Client: https://nextcloud.com/install/#install-clients
 
index 895241341831c8349c0912903c7f94bce82ae96d..b246482af13f6f1b0a54e0a1132215cfbc6de027 100644 (file)
@@ -4,6 +4,7 @@ Welcome to your Nextcloud account, you can add, protect, and share your data.
 
 Your username is: abc
 
+
 Set your password: https://example.org/resetPassword/123
 Install Client: https://nextcloud.com/install/#install-clients