Completed
Push — master ( 631f47...5c0ba9 )
by Joas
29:09
created
apps/settings/lib/AppInfo/Application.php 1 patch
Indentation   +117 added lines, -117 removed lines patch added patch discarded remove patch
@@ -98,133 +98,133 @@
 block discarded – undo
98 98
 use OCP\Util;
99 99
 
100 100
 class Application extends App implements IBootstrap {
101
-	public const APP_ID = 'settings';
101
+    public const APP_ID = 'settings';
102 102
 
103
-	/**
104
-	 * @param array $urlParams
105
-	 */
106
-	public function __construct(array $urlParams = []) {
107
-		parent::__construct(self::APP_ID, $urlParams);
108
-	}
103
+    /**
104
+     * @param array $urlParams
105
+     */
106
+    public function __construct(array $urlParams = []) {
107
+        parent::__construct(self::APP_ID, $urlParams);
108
+    }
109 109
 
110
-	public function register(IRegistrationContext $context): void {
111
-		// Register Middleware
112
-		$context->registerServiceAlias('SubadminMiddleware', SubadminMiddleware::class);
113
-		$context->registerMiddleware(SubadminMiddleware::class);
114
-		$context->registerSearchProvider(SectionSearch::class);
115
-		$context->registerSearchProvider(AppSearch::class);
116
-		$context->registerSearchProvider(UserSearch::class);
110
+    public function register(IRegistrationContext $context): void {
111
+        // Register Middleware
112
+        $context->registerServiceAlias('SubadminMiddleware', SubadminMiddleware::class);
113
+        $context->registerMiddleware(SubadminMiddleware::class);
114
+        $context->registerSearchProvider(SectionSearch::class);
115
+        $context->registerSearchProvider(AppSearch::class);
116
+        $context->registerSearchProvider(UserSearch::class);
117 117
 
118
-		$context->registerConfigLexicon(ConfigLexicon::class);
118
+        $context->registerConfigLexicon(ConfigLexicon::class);
119 119
 
120
-		// Register listeners
121
-		$context->registerEventListener(AppPasswordCreatedEvent::class, AppPasswordCreatedActivityListener::class);
122
-		$context->registerEventListener(UserAddedEvent::class, UserAddedToGroupActivityListener::class);
123
-		$context->registerEventListener(UserRemovedEvent::class, UserRemovedFromGroupActivityListener::class);
124
-		$context->registerEventListener(GroupDeletedEvent::class, GroupRemovedListener::class);
125
-		$context->registerEventListener(PasswordUpdatedEvent::class, Hooks::class);
126
-		$context->registerEventListener(UserChangedEvent::class, Hooks::class);
120
+        // Register listeners
121
+        $context->registerEventListener(AppPasswordCreatedEvent::class, AppPasswordCreatedActivityListener::class);
122
+        $context->registerEventListener(UserAddedEvent::class, UserAddedToGroupActivityListener::class);
123
+        $context->registerEventListener(UserRemovedEvent::class, UserRemovedFromGroupActivityListener::class);
124
+        $context->registerEventListener(GroupDeletedEvent::class, GroupRemovedListener::class);
125
+        $context->registerEventListener(PasswordUpdatedEvent::class, Hooks::class);
126
+        $context->registerEventListener(UserChangedEvent::class, Hooks::class);
127 127
 
128
-		// Register Mail Provider listeners
129
-		$context->registerEventListener(DeclarativeSettingsGetValueEvent::class, MailProviderListener::class);
130
-		$context->registerEventListener(DeclarativeSettingsSetValueEvent::class, MailProviderListener::class);
128
+        // Register Mail Provider listeners
129
+        $context->registerEventListener(DeclarativeSettingsGetValueEvent::class, MailProviderListener::class);
130
+        $context->registerEventListener(DeclarativeSettingsSetValueEvent::class, MailProviderListener::class);
131 131
 
132
-		// Register well-known handlers
133
-		$context->registerWellKnownHandler(SecurityTxtHandler::class);
134
-		$context->registerWellKnownHandler(ChangePasswordHandler::class);
132
+        // Register well-known handlers
133
+        $context->registerWellKnownHandler(SecurityTxtHandler::class);
134
+        $context->registerWellKnownHandler(ChangePasswordHandler::class);
135 135
 
136
-		// Register Settings Form(s)
137
-		$context->registerDeclarativeSettings(MailProvider::class);
136
+        // Register Settings Form(s)
137
+        $context->registerDeclarativeSettings(MailProvider::class);
138 138
 
139
-		/**
140
-		 * Core class wrappers
141
-		 */
142
-		$context->registerService(IProvider::class, function (IAppContainer $appContainer) {
143
-			/** @var IServerContainer $serverContainer */
144
-			$serverContainer = $appContainer->query(IServerContainer::class);
145
-			return $serverContainer->query(IProvider::class);
146
-		});
147
-		$context->registerService(IManager::class, function (IAppContainer $appContainer) {
148
-			/** @var IServerContainer $serverContainer */
149
-			$serverContainer = $appContainer->query(IServerContainer::class);
150
-			return $serverContainer->getSettingsManager();
151
-		});
139
+        /**
140
+         * Core class wrappers
141
+         */
142
+        $context->registerService(IProvider::class, function (IAppContainer $appContainer) {
143
+            /** @var IServerContainer $serverContainer */
144
+            $serverContainer = $appContainer->query(IServerContainer::class);
145
+            return $serverContainer->query(IProvider::class);
146
+        });
147
+        $context->registerService(IManager::class, function (IAppContainer $appContainer) {
148
+            /** @var IServerContainer $serverContainer */
149
+            $serverContainer = $appContainer->query(IServerContainer::class);
150
+            return $serverContainer->getSettingsManager();
151
+        });
152 152
 
153
-		$context->registerService(NewUserMailHelper::class, function (IAppContainer $appContainer) {
154
-			/** @var Server $server */
155
-			$server = $appContainer->query(IServerContainer::class);
156
-			/** @var Defaults $defaults */
157
-			$defaults = $server->query(Defaults::class);
153
+        $context->registerService(NewUserMailHelper::class, function (IAppContainer $appContainer) {
154
+            /** @var Server $server */
155
+            $server = $appContainer->query(IServerContainer::class);
156
+            /** @var Defaults $defaults */
157
+            $defaults = $server->query(Defaults::class);
158 158
 
159
-			return new NewUserMailHelper(
160
-				$defaults,
161
-				$server->getURLGenerator(),
162
-				$server->getL10NFactory(),
163
-				$server->getMailer(),
164
-				$server->getSecureRandom(),
165
-				new TimeFactory(),
166
-				$server->getConfig(),
167
-				$server->getCrypto(),
168
-				Util::getDefaultEmailAddress('no-reply')
169
-			);
170
-		});
171
-		$context->registerSetupCheck(AllowedAdminRanges::class);
172
-		$context->registerSetupCheck(AppDirsWithDifferentOwner::class);
173
-		$context->registerSetupCheck(BruteForceThrottler::class);
174
-		$context->registerSetupCheck(CheckUserCertificates::class);
175
-		$context->registerSetupCheck(CodeIntegrity::class);
176
-		$context->registerSetupCheck(CronErrors::class);
177
-		$context->registerSetupCheck(CronInfo::class);
178
-		$context->registerSetupCheck(DatabaseHasMissingColumns::class);
179
-		$context->registerSetupCheck(DatabaseHasMissingIndices::class);
180
-		$context->registerSetupCheck(DatabaseHasMissingPrimaryKeys::class);
181
-		$context->registerSetupCheck(DatabasePendingBigIntConversions::class);
182
-		$context->registerSetupCheck(DataDirectoryProtected::class);
183
-		$context->registerSetupCheck(DebugMode::class);
184
-		$context->registerSetupCheck(DefaultPhoneRegionSet::class);
185
-		$context->registerSetupCheck(EmailTestSuccessful::class);
186
-		$context->registerSetupCheck(FileLocking::class);
187
-		$context->registerSetupCheck(ForwardedForHeaders::class);
188
-		$context->registerSetupCheck(HttpsUrlGeneration::class);
189
-		$context->registerSetupCheck(InternetConnectivity::class);
190
-		$context->registerSetupCheck(JavaScriptSourceMaps::class);
191
-		$context->registerSetupCheck(JavaScriptModules::class);
192
-		$context->registerSetupCheck(LegacySSEKeyFormat::class);
193
-		$context->registerSetupCheck(MaintenanceWindowStart::class);
194
-		$context->registerSetupCheck(MemcacheConfigured::class);
195
-		$context->registerSetupCheck(MimeTypeMigrationAvailable::class);
196
-		$context->registerSetupCheck(MysqlRowFormat::class);
197
-		$context->registerSetupCheck(MysqlUnicodeSupport::class);
198
-		$context->registerSetupCheck(OcxProviders::class);
199
-		$context->registerSetupCheck(OverwriteCliUrl::class);
200
-		$context->registerSetupCheck(PhpDefaultCharset::class);
201
-		$context->registerSetupCheck(PhpDisabledFunctions::class);
202
-		$context->registerSetupCheck(PhpFreetypeSupport::class);
203
-		$context->registerSetupCheck(PhpApcuConfig::class);
204
-		$context->registerSetupCheck(PhpGetEnv::class);
205
-		// Temporarily disabled $context->registerSetupCheck(PhpMaxFileSize::class);
206
-		$context->registerSetupCheck(PhpMemoryLimit::class);
207
-		$context->registerSetupCheck(PhpModules::class);
208
-		$context->registerSetupCheck(PhpOpcacheSetup::class);
209
-		$context->registerSetupCheck(PhpOutdated::class);
210
-		$context->registerSetupCheck(PhpOutputBuffering::class);
211
-		$context->registerSetupCheck(RandomnessSecure::class);
212
-		$context->registerSetupCheck(ReadOnlyConfig::class);
213
-		$context->registerSetupCheck(SecurityHeaders::class);
214
-		$context->registerSetupCheck(ServerIdConfig::class);
215
-		$context->registerSetupCheck(SchedulingTableSize::class);
216
-		$context->registerSetupCheck(SupportedDatabase::class);
217
-		$context->registerSetupCheck(SystemIs64bit::class);
218
-		$context->registerSetupCheck(TaskProcessingPickupSpeed::class);
219
-		$context->registerSetupCheck(TempSpaceAvailable::class);
220
-		$context->registerSetupCheck(TransactionIsolation::class);
221
-		$context->registerSetupCheck(PushService::class);
222
-		$context->registerSetupCheck(WellKnownUrls::class);
223
-		$context->registerSetupCheck(Woff2Loading::class);
159
+            return new NewUserMailHelper(
160
+                $defaults,
161
+                $server->getURLGenerator(),
162
+                $server->getL10NFactory(),
163
+                $server->getMailer(),
164
+                $server->getSecureRandom(),
165
+                new TimeFactory(),
166
+                $server->getConfig(),
167
+                $server->getCrypto(),
168
+                Util::getDefaultEmailAddress('no-reply')
169
+            );
170
+        });
171
+        $context->registerSetupCheck(AllowedAdminRanges::class);
172
+        $context->registerSetupCheck(AppDirsWithDifferentOwner::class);
173
+        $context->registerSetupCheck(BruteForceThrottler::class);
174
+        $context->registerSetupCheck(CheckUserCertificates::class);
175
+        $context->registerSetupCheck(CodeIntegrity::class);
176
+        $context->registerSetupCheck(CronErrors::class);
177
+        $context->registerSetupCheck(CronInfo::class);
178
+        $context->registerSetupCheck(DatabaseHasMissingColumns::class);
179
+        $context->registerSetupCheck(DatabaseHasMissingIndices::class);
180
+        $context->registerSetupCheck(DatabaseHasMissingPrimaryKeys::class);
181
+        $context->registerSetupCheck(DatabasePendingBigIntConversions::class);
182
+        $context->registerSetupCheck(DataDirectoryProtected::class);
183
+        $context->registerSetupCheck(DebugMode::class);
184
+        $context->registerSetupCheck(DefaultPhoneRegionSet::class);
185
+        $context->registerSetupCheck(EmailTestSuccessful::class);
186
+        $context->registerSetupCheck(FileLocking::class);
187
+        $context->registerSetupCheck(ForwardedForHeaders::class);
188
+        $context->registerSetupCheck(HttpsUrlGeneration::class);
189
+        $context->registerSetupCheck(InternetConnectivity::class);
190
+        $context->registerSetupCheck(JavaScriptSourceMaps::class);
191
+        $context->registerSetupCheck(JavaScriptModules::class);
192
+        $context->registerSetupCheck(LegacySSEKeyFormat::class);
193
+        $context->registerSetupCheck(MaintenanceWindowStart::class);
194
+        $context->registerSetupCheck(MemcacheConfigured::class);
195
+        $context->registerSetupCheck(MimeTypeMigrationAvailable::class);
196
+        $context->registerSetupCheck(MysqlRowFormat::class);
197
+        $context->registerSetupCheck(MysqlUnicodeSupport::class);
198
+        $context->registerSetupCheck(OcxProviders::class);
199
+        $context->registerSetupCheck(OverwriteCliUrl::class);
200
+        $context->registerSetupCheck(PhpDefaultCharset::class);
201
+        $context->registerSetupCheck(PhpDisabledFunctions::class);
202
+        $context->registerSetupCheck(PhpFreetypeSupport::class);
203
+        $context->registerSetupCheck(PhpApcuConfig::class);
204
+        $context->registerSetupCheck(PhpGetEnv::class);
205
+        // Temporarily disabled $context->registerSetupCheck(PhpMaxFileSize::class);
206
+        $context->registerSetupCheck(PhpMemoryLimit::class);
207
+        $context->registerSetupCheck(PhpModules::class);
208
+        $context->registerSetupCheck(PhpOpcacheSetup::class);
209
+        $context->registerSetupCheck(PhpOutdated::class);
210
+        $context->registerSetupCheck(PhpOutputBuffering::class);
211
+        $context->registerSetupCheck(RandomnessSecure::class);
212
+        $context->registerSetupCheck(ReadOnlyConfig::class);
213
+        $context->registerSetupCheck(SecurityHeaders::class);
214
+        $context->registerSetupCheck(ServerIdConfig::class);
215
+        $context->registerSetupCheck(SchedulingTableSize::class);
216
+        $context->registerSetupCheck(SupportedDatabase::class);
217
+        $context->registerSetupCheck(SystemIs64bit::class);
218
+        $context->registerSetupCheck(TaskProcessingPickupSpeed::class);
219
+        $context->registerSetupCheck(TempSpaceAvailable::class);
220
+        $context->registerSetupCheck(TransactionIsolation::class);
221
+        $context->registerSetupCheck(PushService::class);
222
+        $context->registerSetupCheck(WellKnownUrls::class);
223
+        $context->registerSetupCheck(Woff2Loading::class);
224 224
 
225
-		$context->registerUserMigrator(AccountMigrator::class);
226
-	}
225
+        $context->registerUserMigrator(AccountMigrator::class);
226
+    }
227 227
 
228
-	public function boot(IBootContext $context): void {
229
-	}
228
+    public function boot(IBootContext $context): void {
229
+    }
230 230
 }
Please login to merge, or discard this patch.
apps/settings/lib/Hooks.php 1 patch
Indentation   +162 added lines, -162 removed lines patch added patch discarded remove patch
@@ -29,166 +29,166 @@
 block discarded – undo
29 29
  */
30 30
 class Hooks implements IEventListener {
31 31
 
32
-	public function __construct(
33
-		protected IActivityManager $activityManager,
34
-		protected IGroupManager $groupManager,
35
-		protected IUserManager $userManager,
36
-		protected IUserSession $userSession,
37
-		protected IURLGenerator $urlGenerator,
38
-		protected IMailer $mailer,
39
-		protected IConfig $config,
40
-		protected IFactory $languageFactory,
41
-		protected Defaults $defaults,
42
-	) {
43
-	}
44
-
45
-	public function handle(Event $event): void {
46
-		if ($event instanceof PasswordUpdatedEvent) {
47
-			$this->onChangePassword($event);
48
-		}
49
-		if ($event instanceof UserChangedEvent) {
50
-			$this->onChangeEmail($event);
51
-		}
52
-	}
53
-
54
-	public function onChangePassword(PasswordUpdatedEvent $handle): void {
55
-		$user = $handle->getUser();
56
-
57
-		if ($user->getLastLogin() === 0) {
58
-			// User didn't login, so don't create activities and emails.
59
-			return;
60
-		}
61
-
62
-		$event = $this->activityManager->generateEvent();
63
-		$event->setApp('settings')
64
-			->setType('personal_settings')
65
-			->setAffectedUser($user->getUID());
66
-
67
-		$instanceName = $this->defaults->getName();
68
-		$instanceUrl = $this->urlGenerator->getAbsoluteURL('/');
69
-		$language = $this->languageFactory->getUserLanguage($user);
70
-		$l = $this->languageFactory->get('settings', $language);
71
-
72
-		$actor = $this->userSession->getUser();
73
-		if ($actor instanceof IUser) {
74
-			if ($actor->getUID() !== $user->getUID()) {
75
-				// Admin changed the password through the user panel
76
-				$text = $l->t('%1$s changed your password on %2$s.', [$actor->getDisplayName(), $instanceUrl]);
77
-				$event->setAuthor($actor->getUID())
78
-					->setSubject(Provider::PASSWORD_CHANGED_BY, [$actor->getUID()]);
79
-			} else {
80
-				// User changed their password themselves through settings
81
-				$text = $l->t('Your password on %s was changed.', [$instanceUrl]);
82
-				$event->setAuthor($actor->getUID())
83
-					->setSubject(Provider::PASSWORD_CHANGED_SELF);
84
-			}
85
-		} else {
86
-			if (\OC::$CLI) {
87
-				// Admin used occ to reset the password
88
-				$text = $l->t('Your password on %s was reset by an administrator.', [$instanceUrl]);
89
-				$event->setSubject(Provider::PASSWORD_RESET);
90
-			} else {
91
-				// User reset their password from Lost page
92
-				$text = $l->t('Your password on %s was reset.', [$instanceUrl]);
93
-				$event->setSubject(Provider::PASSWORD_RESET_SELF);
94
-			}
95
-		}
96
-
97
-		$this->activityManager->publish($event);
98
-
99
-		if ($user->getEMailAddress() !== null) {
100
-			$template = $this->mailer->createEMailTemplate('settings.PasswordChanged', [
101
-				'displayname' => $user->getDisplayName(),
102
-				'emailAddress' => $user->getEMailAddress(),
103
-				'instanceUrl' => $instanceUrl,
104
-				'event' => $handle,
105
-			]);
106
-
107
-			$template->setSubject($l->t('Password for %1$s changed on %2$s', [$user->getDisplayName(), $instanceName]));
108
-			$template->addHeader();
109
-			$template->addHeading($l->t('Password changed for %s', [$user->getDisplayName()]), false);
110
-			$template->addBodyText($text . ' ' . $l->t('If you did not request this, please contact an administrator.'));
111
-			$template->addFooter();
112
-
113
-
114
-			$message = $this->mailer->createMessage();
115
-			$message->setTo([$user->getEMailAddress() => $user->getDisplayName()]);
116
-			$message->useTemplate($template);
117
-			$this->mailer->send($message);
118
-		}
119
-	}
120
-
121
-	public function onChangeEmail(UserChangedEvent $handle): void {
122
-		if ($handle->getFeature() !== 'eMailAddress') {
123
-			return;
124
-		}
125
-
126
-		$oldMailAddress = $handle->getOldValue();
127
-		$user = $handle->getUser();
128
-
129
-		if ($oldMailAddress === $user->getEMailAddress()
130
-			|| $user->getLastLogin() === 0) {
131
-			// Email didn't really change or user didn't login,
132
-			// so don't create activities and emails.
133
-			return;
134
-		}
135
-
136
-		$event = $this->activityManager->generateEvent();
137
-		$event->setApp('settings')
138
-			->setType('personal_settings')
139
-			->setAffectedUser($user->getUID());
140
-
141
-		$instanceName = $this->defaults->getName();
142
-		$instanceUrl = $this->urlGenerator->getAbsoluteURL('/');
143
-		$language = $this->languageFactory->getUserLanguage($user);
144
-		$l = $this->languageFactory->get('settings', $language);
145
-
146
-		$actor = $this->userSession->getUser();
147
-		if ($actor instanceof IUser) {
148
-			$subject = Provider::EMAIL_CHANGED_SELF;
149
-			if ($actor->getUID() !== $user->getUID()) {
150
-				// set via the OCS API
151
-				if ($this->config->getAppValue('settings', 'disable_activity.email_address_changed_by_admin', 'no') === 'yes') {
152
-					return;
153
-				}
154
-				$subject = Provider::EMAIL_CHANGED;
155
-			}
156
-			$text = $l->t('Your email address on %s was changed.', [$instanceUrl]);
157
-			$event->setAuthor($actor->getUID())
158
-				->setSubject($subject);
159
-		} else {
160
-			// set with occ
161
-			if ($this->config->getAppValue('settings', 'disable_activity.email_address_changed_by_admin', 'no') === 'yes') {
162
-				return;
163
-			}
164
-			$text = $l->t('Your email address on %s was changed by an administrator.', [$instanceUrl]);
165
-			$event->setSubject(Provider::EMAIL_CHANGED);
166
-		}
167
-		$this->activityManager->publish($event);
168
-
169
-
170
-		if ($oldMailAddress !== null) {
171
-			$template = $this->mailer->createEMailTemplate('settings.EmailChanged', [
172
-				'displayname' => $user->getDisplayName(),
173
-				'newEMailAddress' => $user->getEMailAddress(),
174
-				'oldEMailAddress' => $oldMailAddress,
175
-				'instanceUrl' => $instanceUrl,
176
-			]);
177
-
178
-			$template->setSubject($l->t('Email address for %1$s changed on %2$s', [$user->getDisplayName(), $instanceName]));
179
-			$template->addHeader();
180
-			$template->addHeading($l->t('Email address changed for %s', [$user->getDisplayName()]), false);
181
-			$template->addBodyText($text . ' ' . $l->t('If you did not request this, please contact an administrator.'));
182
-			if ($user->getEMailAddress()) {
183
-				$template->addBodyText($l->t('The new email address is %s', [$user->getEMailAddress()]));
184
-			}
185
-			$template->addFooter();
186
-
187
-
188
-			$message = $this->mailer->createMessage();
189
-			$message->setTo([$oldMailAddress => $user->getDisplayName()]);
190
-			$message->useTemplate($template);
191
-			$this->mailer->send($message);
192
-		}
193
-	}
32
+    public function __construct(
33
+        protected IActivityManager $activityManager,
34
+        protected IGroupManager $groupManager,
35
+        protected IUserManager $userManager,
36
+        protected IUserSession $userSession,
37
+        protected IURLGenerator $urlGenerator,
38
+        protected IMailer $mailer,
39
+        protected IConfig $config,
40
+        protected IFactory $languageFactory,
41
+        protected Defaults $defaults,
42
+    ) {
43
+    }
44
+
45
+    public function handle(Event $event): void {
46
+        if ($event instanceof PasswordUpdatedEvent) {
47
+            $this->onChangePassword($event);
48
+        }
49
+        if ($event instanceof UserChangedEvent) {
50
+            $this->onChangeEmail($event);
51
+        }
52
+    }
53
+
54
+    public function onChangePassword(PasswordUpdatedEvent $handle): void {
55
+        $user = $handle->getUser();
56
+
57
+        if ($user->getLastLogin() === 0) {
58
+            // User didn't login, so don't create activities and emails.
59
+            return;
60
+        }
61
+
62
+        $event = $this->activityManager->generateEvent();
63
+        $event->setApp('settings')
64
+            ->setType('personal_settings')
65
+            ->setAffectedUser($user->getUID());
66
+
67
+        $instanceName = $this->defaults->getName();
68
+        $instanceUrl = $this->urlGenerator->getAbsoluteURL('/');
69
+        $language = $this->languageFactory->getUserLanguage($user);
70
+        $l = $this->languageFactory->get('settings', $language);
71
+
72
+        $actor = $this->userSession->getUser();
73
+        if ($actor instanceof IUser) {
74
+            if ($actor->getUID() !== $user->getUID()) {
75
+                // Admin changed the password through the user panel
76
+                $text = $l->t('%1$s changed your password on %2$s.', [$actor->getDisplayName(), $instanceUrl]);
77
+                $event->setAuthor($actor->getUID())
78
+                    ->setSubject(Provider::PASSWORD_CHANGED_BY, [$actor->getUID()]);
79
+            } else {
80
+                // User changed their password themselves through settings
81
+                $text = $l->t('Your password on %s was changed.', [$instanceUrl]);
82
+                $event->setAuthor($actor->getUID())
83
+                    ->setSubject(Provider::PASSWORD_CHANGED_SELF);
84
+            }
85
+        } else {
86
+            if (\OC::$CLI) {
87
+                // Admin used occ to reset the password
88
+                $text = $l->t('Your password on %s was reset by an administrator.', [$instanceUrl]);
89
+                $event->setSubject(Provider::PASSWORD_RESET);
90
+            } else {
91
+                // User reset their password from Lost page
92
+                $text = $l->t('Your password on %s was reset.', [$instanceUrl]);
93
+                $event->setSubject(Provider::PASSWORD_RESET_SELF);
94
+            }
95
+        }
96
+
97
+        $this->activityManager->publish($event);
98
+
99
+        if ($user->getEMailAddress() !== null) {
100
+            $template = $this->mailer->createEMailTemplate('settings.PasswordChanged', [
101
+                'displayname' => $user->getDisplayName(),
102
+                'emailAddress' => $user->getEMailAddress(),
103
+                'instanceUrl' => $instanceUrl,
104
+                'event' => $handle,
105
+            ]);
106
+
107
+            $template->setSubject($l->t('Password for %1$s changed on %2$s', [$user->getDisplayName(), $instanceName]));
108
+            $template->addHeader();
109
+            $template->addHeading($l->t('Password changed for %s', [$user->getDisplayName()]), false);
110
+            $template->addBodyText($text . ' ' . $l->t('If you did not request this, please contact an administrator.'));
111
+            $template->addFooter();
112
+
113
+
114
+            $message = $this->mailer->createMessage();
115
+            $message->setTo([$user->getEMailAddress() => $user->getDisplayName()]);
116
+            $message->useTemplate($template);
117
+            $this->mailer->send($message);
118
+        }
119
+    }
120
+
121
+    public function onChangeEmail(UserChangedEvent $handle): void {
122
+        if ($handle->getFeature() !== 'eMailAddress') {
123
+            return;
124
+        }
125
+
126
+        $oldMailAddress = $handle->getOldValue();
127
+        $user = $handle->getUser();
128
+
129
+        if ($oldMailAddress === $user->getEMailAddress()
130
+            || $user->getLastLogin() === 0) {
131
+            // Email didn't really change or user didn't login,
132
+            // so don't create activities and emails.
133
+            return;
134
+        }
135
+
136
+        $event = $this->activityManager->generateEvent();
137
+        $event->setApp('settings')
138
+            ->setType('personal_settings')
139
+            ->setAffectedUser($user->getUID());
140
+
141
+        $instanceName = $this->defaults->getName();
142
+        $instanceUrl = $this->urlGenerator->getAbsoluteURL('/');
143
+        $language = $this->languageFactory->getUserLanguage($user);
144
+        $l = $this->languageFactory->get('settings', $language);
145
+
146
+        $actor = $this->userSession->getUser();
147
+        if ($actor instanceof IUser) {
148
+            $subject = Provider::EMAIL_CHANGED_SELF;
149
+            if ($actor->getUID() !== $user->getUID()) {
150
+                // set via the OCS API
151
+                if ($this->config->getAppValue('settings', 'disable_activity.email_address_changed_by_admin', 'no') === 'yes') {
152
+                    return;
153
+                }
154
+                $subject = Provider::EMAIL_CHANGED;
155
+            }
156
+            $text = $l->t('Your email address on %s was changed.', [$instanceUrl]);
157
+            $event->setAuthor($actor->getUID())
158
+                ->setSubject($subject);
159
+        } else {
160
+            // set with occ
161
+            if ($this->config->getAppValue('settings', 'disable_activity.email_address_changed_by_admin', 'no') === 'yes') {
162
+                return;
163
+            }
164
+            $text = $l->t('Your email address on %s was changed by an administrator.', [$instanceUrl]);
165
+            $event->setSubject(Provider::EMAIL_CHANGED);
166
+        }
167
+        $this->activityManager->publish($event);
168
+
169
+
170
+        if ($oldMailAddress !== null) {
171
+            $template = $this->mailer->createEMailTemplate('settings.EmailChanged', [
172
+                'displayname' => $user->getDisplayName(),
173
+                'newEMailAddress' => $user->getEMailAddress(),
174
+                'oldEMailAddress' => $oldMailAddress,
175
+                'instanceUrl' => $instanceUrl,
176
+            ]);
177
+
178
+            $template->setSubject($l->t('Email address for %1$s changed on %2$s', [$user->getDisplayName(), $instanceName]));
179
+            $template->addHeader();
180
+            $template->addHeading($l->t('Email address changed for %s', [$user->getDisplayName()]), false);
181
+            $template->addBodyText($text . ' ' . $l->t('If you did not request this, please contact an administrator.'));
182
+            if ($user->getEMailAddress()) {
183
+                $template->addBodyText($l->t('The new email address is %s', [$user->getEMailAddress()]));
184
+            }
185
+            $template->addFooter();
186
+
187
+
188
+            $message = $this->mailer->createMessage();
189
+            $message->setTo([$oldMailAddress => $user->getDisplayName()]);
190
+            $message->useTemplate($template);
191
+            $this->mailer->send($message);
192
+        }
193
+    }
194 194
 }
Please login to merge, or discard this patch.