@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.

Replace "getQueryParams()" callsites in Phabricator

Summary: See D20136. This method is sort of inherently bad because it is destructive for some inputs (`x=1&x=2`) and had "PHP-flavored" behavior for other inputs (`x[]=1&x[]=2`). Move to explicit `...AsMap` and `...AsPairList` methods.

Test Plan: Bit of an adventure, see inlines in a minute.

Reviewers: amckinley

Reviewed By: amckinley

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

+42 -13
+3 -2
src/applications/auth/provider/PhabricatorAuthProvider.php
··· 438 438 439 439 $uri = $attributes['uri']; 440 440 $uri = new PhutilURI($uri); 441 - $params = $uri->getQueryParams(); 441 + $params = $uri->getQueryParamsAsPairList(); 442 442 $uri->setQueryParams(array()); 443 443 444 444 $content = array($button); 445 445 446 - foreach ($params as $key => $value) { 446 + foreach ($params as $pair) { 447 + list($key, $value) = $pair; 447 448 $content[] = phutil_tag( 448 449 'input', 449 450 array(
+2 -1
src/applications/differential/controller/DifferentialRevisionViewController.php
··· 1098 1098 // D123.vs123.id123.whitespaceignore-all.diff 1099 1099 // lame but nice to include these options 1100 1100 $file_name = ltrim($request_uri->getPath(), '/').'.'; 1101 - foreach ($request_uri->getQueryParams() as $key => $value) { 1101 + foreach ($request_uri->getQueryParamsAsPairList() as $pair) { 1102 + list($key, $value) = $pair; 1102 1103 if ($key == 'download') { 1103 1104 continue; 1104 1105 }
+22 -3
src/applications/differential/view/DifferentialChangesetListView.php
··· 358 358 359 359 if ($this->standaloneURI) { 360 360 $uri = new PhutilURI($this->standaloneURI); 361 - $uri->setQueryParams($uri->getQueryParams() + $qparams); 361 + $uri = $this->appendDefaultQueryParams($uri, $qparams); 362 362 $meta['standaloneURI'] = (string)$uri; 363 363 } 364 364 ··· 381 381 if ($this->leftRawFileURI) { 382 382 if ($change != DifferentialChangeType::TYPE_ADD) { 383 383 $uri = new PhutilURI($this->leftRawFileURI); 384 - $uri->setQueryParams($uri->getQueryParams() + $qparams); 384 + $uri = $this->appendDefaultQueryParams($uri, $qparams); 385 385 $meta['leftURI'] = (string)$uri; 386 386 } 387 387 } ··· 390 390 if ($change != DifferentialChangeType::TYPE_DELETE && 391 391 $change != DifferentialChangeType::TYPE_MULTICOPY) { 392 392 $uri = new PhutilURI($this->rightRawFileURI); 393 - $uri->setQueryParams($uri->getQueryParams() + $qparams); 393 + $uri = $this->appendDefaultQueryParams($uri, $qparams); 394 394 $meta['rightURI'] = (string)$uri; 395 395 } 396 396 } ··· 419 419 ->setMetadata($meta) 420 420 ->addSigil('differential-view-options'); 421 421 422 + } 423 + 424 + private function appendDefaultQueryParams(PhutilURI $uri, array $params) { 425 + // Add these default query parameters to the query string if they do not 426 + // already exist. 427 + 428 + $have = array(); 429 + foreach ($uri->getQueryParamsAsPairList() as $pair) { 430 + list($key, $value) = $pair; 431 + $have[$key] = true; 432 + } 433 + 434 + foreach ($params as $key => $value) { 435 + if (!isset($have[$key])) { 436 + $uri->appendQueryParam($key, $value); 437 + } 438 + } 439 + 440 + return $uri; 422 441 } 423 442 424 443 }
-2
src/applications/diffusion/controller/DiffusionBrowseController.php
··· 709 709 'path' => $path, 710 710 )); 711 711 712 - $before_uri->setQueryParams($request->getRequestURI()->getQueryParams()); 713 - $before_uri = $before_uri->alter('before', null); 714 712 $before_uri = $before_uri->alter('renamed', $renamed); 715 713 $before_uri = $before_uri->alter('follow', $follow); 716 714
+2 -2
src/applications/oauthserver/PhabricatorOAuthServer.php
··· 256 256 257 257 // Any query parameters present in the first URI must be exactly present 258 258 // in the second URI. 259 - $need_params = $primary_uri->getQueryParams(); 260 - $have_params = $secondary_uri->getQueryParams(); 259 + $need_params = $primary_uri->getQueryParamsAsMap(); 260 + $have_params = $secondary_uri->getQueryParamsAsMap(); 261 261 262 262 foreach ($need_params as $key => $value) { 263 263 if (!array_key_exists($key, $have_params)) {
+13 -3
src/infrastructure/markup/rule/PhabricatorYoutubeRemarkupRule.php
··· 18 18 return $text; 19 19 } 20 20 21 - $params = $uri->getQueryParams(); 22 - $v_param = idx($params, 'v'); 23 - if (!strlen($v_param)) { 21 + $v_params = array(); 22 + 23 + $params = $uri->getQueryParamsAsPairList(); 24 + foreach ($params as $pair) { 25 + list($k, $v) = $pair; 26 + if ($k === 'v') { 27 + $v_params[] = $v; 28 + } 29 + } 30 + 31 + if (count($v_params) !== 1) { 24 32 return $text; 25 33 } 34 + 35 + $v_param = head($v_params); 26 36 27 37 $text_mode = $this->getEngine()->isTextMode(); 28 38 $mail_mode = $this->getEngine()->isHTMLMailMode();