@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Allow administrators to manage addresses for mailing list users

Summary: Ref T8387. Mostly just modernizes this panel to work for viewers vs users. Auto-verify these edits since they aren't otherwise verifiable.

Test Plan:
- Added, changed, removed addresses for a list.
- Used panel normally for my own account.
- Verified bots don't get a panel.

Reviewers: btrahan

Reviewed By: btrahan

Subscribers: eadler, epriestley

Maniphest Tasks: T8387

Differential Revision: https://secure.phabricator.com/D13125

+39 -20
+39 -20
src/applications/settings/panel/PhabricatorEmailAddressesSettingsPanel.php
··· 15 15 return pht('Email'); 16 16 } 17 17 18 + public function isEditableByAdministrators() { 19 + if ($this->getUser()->getIsMailingList()) { 20 + return true; 21 + } 22 + 23 + return false; 24 + } 25 + 18 26 public function processRequest(AphrontRequest $request) { 19 - $user = $request->getUser(); 27 + $user = $this->getUser(); 20 28 $editable = PhabricatorEnv::getEnvConfig('account.editable'); 21 29 22 30 $uri = $request->getRequestURI(); ··· 157 165 PhutilURI $uri, 158 166 $new) { 159 167 160 - $user = $request->getUser(); 168 + $user = $this->getUser(); 169 + $viewer = $this->getViewer(); 161 170 162 171 $e_email = true; 163 172 $email = null; ··· 171 180 } 172 181 173 182 PhabricatorSystemActionEngine::willTakeAction( 174 - array($user->getPHID()), 183 + array($viewer->getPHID()), 175 184 new PhabricatorSettingsAddEmailAction(), 176 185 1); 177 186 ··· 201 210 ->setAddress($email) 202 211 ->setIsVerified(0); 203 212 204 - try { 213 + // If an administrator is editing a mailing list, automatically verify 214 + // the address. 215 + if ($viewer->getPHID() != $user->getPHID()) { 216 + if ($viewer->getIsAdmin()) { 217 + $object->setIsVerified(1); 218 + } 219 + } 205 220 221 + try { 206 222 id(new PhabricatorUserEditor()) 207 - ->setActor($user) 223 + ->setActor($viewer) 208 224 ->addEmail($user, $object); 209 225 226 + if ($object->getIsVerified()) { 227 + // If we autoverified the address, just reload the page. 228 + return id(new AphrontReloadResponse())->setURI($uri); 229 + } 230 + 210 231 $object->sendVerificationEmail($user); 211 232 212 233 $dialog = id(new AphrontDialogView()) ··· 242 263 ->setError($e_email)); 243 264 244 265 $dialog = id(new AphrontDialogView()) 245 - ->setUser($user) 266 + ->setUser($viewer) 246 267 ->addHiddenInput('new', 'true') 247 268 ->setTitle(pht('New Address')) 248 269 ->appendChild($errors) ··· 257 278 AphrontRequest $request, 258 279 PhutilURI $uri, 259 280 $email_id) { 260 - 261 - $user = $request->getUser(); 281 + $user = $this->getUser(); 282 + $viewer = $this->getViewer(); 262 283 263 284 // NOTE: You can only delete your own email addresses, and you can not 264 285 // delete your primary address. ··· 272 293 } 273 294 274 295 if ($request->isFormPost()) { 275 - 276 296 id(new PhabricatorUserEditor()) 277 - ->setActor($user) 297 + ->setActor($viewer) 278 298 ->removeEmail($user, $email); 279 299 280 300 return id(new AphrontRedirectResponse())->setURI($uri); ··· 283 303 $address = $email->getAddress(); 284 304 285 305 $dialog = id(new AphrontDialogView()) 286 - ->setUser($user) 306 + ->setUser($viewer) 287 307 ->addHiddenInput('delete', $email_id) 288 308 ->setTitle(pht("Really delete address '%s'?", $address)) 289 309 ->appendParagraph( ··· 304 324 AphrontRequest $request, 305 325 PhutilURI $uri, 306 326 $email_id) { 307 - 308 - $user = $request->getUser(); 327 + $user = $this->getUser(); 328 + $viewer = $this->getViewer(); 309 329 310 330 // NOTE: You can only send more email for your unverified addresses. 311 331 $email = id(new PhabricatorUserEmail())->loadOneWhere( ··· 325 345 $address = $email->getAddress(); 326 346 327 347 $dialog = id(new AphrontDialogView()) 328 - ->setUser($user) 348 + ->setUser($viewer) 329 349 ->addHiddenInput('verify', $email_id) 330 350 ->setTitle(pht('Send Another Verification Email?')) 331 351 ->appendChild(phutil_tag('p', array(), pht( ··· 341 361 AphrontRequest $request, 342 362 PhutilURI $uri, 343 363 $email_id) { 344 - 345 - $user = $request->getUser(); 364 + $user = $this->getUser(); 365 + $viewer = $this->getViewer(); 346 366 347 367 $token = id(new PhabricatorAuthSessionEngine())->requireHighSecuritySession( 348 - $user, 368 + $viewer, 349 369 $request, 350 370 $this->getPanelURI()); 351 371 ··· 360 380 } 361 381 362 382 if ($request->isFormPost()) { 363 - 364 383 id(new PhabricatorUserEditor()) 365 - ->setActor($user) 384 + ->setActor($viewer) 366 385 ->changePrimaryEmail($user, $email); 367 386 368 387 return id(new AphrontRedirectResponse())->setURI($uri); ··· 371 390 $address = $email->getAddress(); 372 391 373 392 $dialog = id(new AphrontDialogView()) 374 - ->setUser($user) 393 + ->setUser($viewer) 375 394 ->addHiddenInput('primary', $email_id) 376 395 ->setTitle(pht('Change primary email address?')) 377 396 ->appendParagraph(