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

Modernize Ponder edge types

Summary: Modernize Ponder edges to subclass `PhabricatorEdgeType`. Largely based on D11045.

Test Plan: I couldn't actually figure out how to get these strings to show up anywhere.

Reviewers: epriestley, #blessed_reviewers

Reviewed By: epriestley, #blessed_reviewers

Subscribers: Krenair, chad, epriestley

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

+445 -57
+8
src/__phutil_library_map__.php
··· 2840 2840 'PonderAnswerCommentController' => 'applications/ponder/controller/PonderAnswerCommentController.php', 2841 2841 'PonderAnswerEditController' => 'applications/ponder/controller/PonderAnswerEditController.php', 2842 2842 'PonderAnswerEditor' => 'applications/ponder/editor/PonderAnswerEditor.php', 2843 + 'PonderAnswerHasVotingUserEdgeType' => 'applications/ponder/edge/PonderAnswerHasVotingUserEdgeType.php', 2843 2844 'PonderAnswerHistoryController' => 'applications/ponder/controller/PonderAnswerHistoryController.php', 2844 2845 'PonderAnswerPHIDType' => 'applications/ponder/phid/PonderAnswerPHIDType.php', 2845 2846 'PonderAnswerQuery' => 'applications/ponder/query/PonderAnswerQuery.php', ··· 2855 2856 'PonderQuestionCommentController' => 'applications/ponder/controller/PonderQuestionCommentController.php', 2856 2857 'PonderQuestionEditController' => 'applications/ponder/controller/PonderQuestionEditController.php', 2857 2858 'PonderQuestionEditor' => 'applications/ponder/editor/PonderQuestionEditor.php', 2859 + 'PonderQuestionHasVotingUserEdgeType' => 'applications/ponder/edge/PonderQuestionHasVotingUserEdgeType.php', 2858 2860 'PonderQuestionHistoryController' => 'applications/ponder/controller/PonderQuestionHistoryController.php', 2859 2861 'PonderQuestionListController' => 'applications/ponder/controller/PonderQuestionListController.php', 2860 2862 'PonderQuestionMailReceiver' => 'applications/ponder/mail/PonderQuestionMailReceiver.php', ··· 2877 2879 'PonderVote' => 'applications/ponder/constants/PonderVote.php', 2878 2880 'PonderVoteEditor' => 'applications/ponder/editor/PonderVoteEditor.php', 2879 2881 'PonderVoteSaveController' => 'applications/ponder/controller/PonderVoteSaveController.php', 2882 + 'PonderVotingUserHasAnswerEdgeType' => 'applications/ponder/edge/PonderVotingUserHasAnswerEdgeType.php', 2883 + 'PonderVotingUserHasQuestionEdgeType' => 'applications/ponder/edge/PonderVotingUserHasQuestionEdgeType.php', 2880 2884 'ProjectBoardTaskCard' => 'applications/project/view/ProjectBoardTaskCard.php', 2881 2885 'ProjectCanLockProjectsCapability' => 'applications/project/capability/ProjectCanLockProjectsCapability.php', 2882 2886 'ProjectConduitAPIMethod' => 'applications/project/conduit/ProjectConduitAPIMethod.php', ··· 6143 6147 'PonderAnswerCommentController' => 'PonderController', 6144 6148 'PonderAnswerEditController' => 'PonderController', 6145 6149 'PonderAnswerEditor' => 'PonderEditor', 6150 + 'PonderAnswerHasVotingUserEdgeType' => 'PhabricatorEdgeType', 6146 6151 'PonderAnswerHistoryController' => 'PonderController', 6147 6152 'PonderAnswerPHIDType' => 'PhabricatorPHIDType', 6148 6153 'PonderAnswerQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', ··· 6168 6173 'PonderQuestionCommentController' => 'PonderController', 6169 6174 'PonderQuestionEditController' => 'PonderController', 6170 6175 'PonderQuestionEditor' => 'PonderEditor', 6176 + 'PonderQuestionHasVotingUserEdgeType' => 'PhabricatorEdgeType', 6171 6177 'PonderQuestionHistoryController' => 'PonderController', 6172 6178 'PonderQuestionListController' => 'PonderController', 6173 6179 'PonderQuestionMailReceiver' => 'PhabricatorObjectMailReceiver', ··· 6189 6195 'PonderVote' => 'PonderConstants', 6190 6196 'PonderVoteEditor' => 'PhabricatorEditor', 6191 6197 'PonderVoteSaveController' => 'PonderController', 6198 + 'PonderVotingUserHasAnswerEdgeType' => 'PhabricatorEdgeType', 6199 + 'PonderVotingUserHasQuestionEdgeType' => 'PhabricatorEdgeType', 6192 6200 'ProjectCanLockProjectsCapability' => 'PhabricatorPolicyCapability', 6193 6201 'ProjectConduitAPIMethod' => 'ConduitAPIMethod', 6194 6202 'ProjectCreateConduitAPIMethod' => 'ProjectConduitAPIMethod',
+105
src/applications/ponder/edge/PonderAnswerHasVotingUserEdgeType.php
··· 1 + <?php 2 + 3 + final class PonderAnswerHasVotingUserEdgeType extends PhabricatorEdgeType { 4 + 5 + const EDGECONST = 19; 6 + 7 + public function shouldWriteInverseTransactions() { 8 + return true; 9 + } 10 + 11 + public function getInverseEdgeConstant() { 12 + return PonderVotingUserHasAnswerEdgeType::EDGECONST; 13 + } 14 + 15 + public function getTransactionAddString( 16 + $actor, 17 + $add_count, 18 + $add_edges) { 19 + 20 + return pht( 21 + '%s added %s voting user(s): %s.', 22 + $actor, 23 + $add_count, 24 + $add_edges); 25 + } 26 + 27 + public function getTransactionRemoveString( 28 + $actor, 29 + $rem_count, 30 + $rem_edges) { 31 + 32 + return pht( 33 + '%s removed %s voting user(s): %s.', 34 + $actor, 35 + $rem_count, 36 + $rem_edges); 37 + } 38 + 39 + public function getTransactionEditString( 40 + $actor, 41 + $total_count, 42 + $add_count, 43 + $add_edges, 44 + $rem_count, 45 + $rem_edges) { 46 + 47 + return pht( 48 + '%s edited %s voting user(s), added %s: %s; removed %s: %s.', 49 + $actor, 50 + $total_count, 51 + $add_count, 52 + $add_edges, 53 + $rem_count, 54 + $rem_edges); 55 + } 56 + 57 + public function getFeedAddString( 58 + $actor, 59 + $object, 60 + $add_count, 61 + $add_edges) { 62 + 63 + return pht( 64 + '%s added %s voting user(s) to %s: %s.', 65 + $actor, 66 + $add_count, 67 + $object, 68 + $add_edges); 69 + } 70 + 71 + public function getFeedRemoveString( 72 + $actor, 73 + $object, 74 + $rem_count, 75 + $rem_edges) { 76 + 77 + return pht( 78 + '%s removed %s voting user(s) from %s: %s.', 79 + $actor, 80 + $rem_count, 81 + $object, 82 + $rem_edges); 83 + } 84 + 85 + public function getFeedEditString( 86 + $actor, 87 + $object, 88 + $total_count, 89 + $add_count, 90 + $add_edges, 91 + $rem_count, 92 + $rem_edges) { 93 + 94 + return pht( 95 + '%s edited %s voting user(s) for %s, added %s: %s; removed %s: %s.', 96 + $actor, 97 + $total_count, 98 + $object, 99 + $add_count, 100 + $add_edges, 101 + $rem_count, 102 + $rem_edges); 103 + } 104 + 105 + }
+105
src/applications/ponder/edge/PonderQuestionHasVotingUserEdgeType.php
··· 1 + <?php 2 + 3 + final class PonderQuestionHasVotingUserEdgeType extends PhabricatorEdgeType { 4 + 5 + const EDGECONST = 17; 6 + 7 + public function shouldWriteInverseTransactions() { 8 + return true; 9 + } 10 + 11 + public function getInverseEdgeConstant() { 12 + return PonderVotingUserHasQuestionEdgeType::EDGECONST; 13 + } 14 + 15 + public function getTransactionAddString( 16 + $actor, 17 + $add_count, 18 + $add_edges) { 19 + 20 + return pht( 21 + '%s added %s voting user(s): %s.', 22 + $actor, 23 + $add_count, 24 + $add_edges); 25 + } 26 + 27 + public function getTransactionRemoveString( 28 + $actor, 29 + $rem_count, 30 + $rem_edges) { 31 + 32 + return pht( 33 + '%s removed %s voting user(s): %s.', 34 + $actor, 35 + $rem_count, 36 + $rem_edges); 37 + } 38 + 39 + public function getTransactionEditString( 40 + $actor, 41 + $total_count, 42 + $add_count, 43 + $add_edges, 44 + $rem_count, 45 + $rem_edges) { 46 + 47 + return pht( 48 + '%s edited %s voting user(s), added %s: %s; removed %s: %s.', 49 + $actor, 50 + $total_count, 51 + $add_count, 52 + $add_edges, 53 + $rem_count, 54 + $rem_edges); 55 + } 56 + 57 + public function getFeedAddString( 58 + $actor, 59 + $object, 60 + $add_count, 61 + $add_edges) { 62 + 63 + return pht( 64 + '%s added %s voting user(s) to %s: %s.', 65 + $actor, 66 + $add_count, 67 + $object, 68 + $add_edges); 69 + } 70 + 71 + public function getFeedRemoveString( 72 + $actor, 73 + $object, 74 + $rem_count, 75 + $rem_edges) { 76 + 77 + return pht( 78 + '%s removed %s voting user(s) from %s: %s.', 79 + $actor, 80 + $rem_count, 81 + $object, 82 + $rem_edges); 83 + } 84 + 85 + public function getFeedEditString( 86 + $actor, 87 + $object, 88 + $total_count, 89 + $add_count, 90 + $add_edges, 91 + $rem_count, 92 + $rem_edges) { 93 + 94 + return pht( 95 + '%s edited %s voting user(s) for %s, added %s: %s; removed %s: %s.', 96 + $actor, 97 + $total_count, 98 + $object, 99 + $add_count, 100 + $add_edges, 101 + $rem_count, 102 + $rem_edges); 103 + } 104 + 105 + }
+105
src/applications/ponder/edge/PonderVotingUserHasAnswerEdgeType.php
··· 1 + <?php 2 + 3 + final class PonderVotingUserHasAnswerEdgeType extends PhabricatorEdgeType { 4 + 5 + const EDGECONST = 20; 6 + 7 + public function shouldWriteInverseTransactions() { 8 + return true; 9 + } 10 + 11 + public function getInverseEdgeConstant() { 12 + return PonderAnswerHasVotingUserEdgeType::EDGECONST; 13 + } 14 + 15 + public function getTransactionAddString( 16 + $actor, 17 + $add_count, 18 + $add_edges) { 19 + 20 + return pht( 21 + '%s added %s answer(s): %s.', 22 + $actor, 23 + $add_count, 24 + $add_edges); 25 + } 26 + 27 + public function getTransactionRemoveString( 28 + $actor, 29 + $rem_count, 30 + $rem_edges) { 31 + 32 + return pht( 33 + '%s removed %s answer(s): %s.', 34 + $actor, 35 + $rem_count, 36 + $rem_edges); 37 + } 38 + 39 + public function getTransactionEditString( 40 + $actor, 41 + $total_count, 42 + $add_count, 43 + $add_edges, 44 + $rem_count, 45 + $rem_edges) { 46 + 47 + return pht( 48 + '%s edited %s answer(s), added %s: %s; removed %s: %s.', 49 + $actor, 50 + $total_count, 51 + $add_count, 52 + $add_edges, 53 + $rem_count, 54 + $rem_edges); 55 + } 56 + 57 + public function getFeedAddString( 58 + $actor, 59 + $object, 60 + $add_count, 61 + $add_edges) { 62 + 63 + return pht( 64 + '%s added %s answer(s) to %s: %s.', 65 + $actor, 66 + $add_count, 67 + $object, 68 + $add_edges); 69 + } 70 + 71 + public function getFeedRemoveString( 72 + $actor, 73 + $object, 74 + $rem_count, 75 + $rem_edges) { 76 + 77 + return pht( 78 + '%s removed %s answer(s) from %s: %s.', 79 + $actor, 80 + $rem_count, 81 + $object, 82 + $rem_edges); 83 + } 84 + 85 + public function getFeedEditString( 86 + $actor, 87 + $object, 88 + $total_count, 89 + $add_count, 90 + $add_edges, 91 + $rem_count, 92 + $rem_edges) { 93 + 94 + return pht( 95 + '%s edited %s answer(s) for %s, added %s: %s; removed %s: %s.', 96 + $actor, 97 + $total_count, 98 + $object, 99 + $add_count, 100 + $add_edges, 101 + $rem_count, 102 + $rem_edges); 103 + } 104 + 105 + }
+105
src/applications/ponder/edge/PonderVotingUserHasQuestionEdgeType.php
··· 1 + <?php 2 + 3 + final class PonderVotingUserHasQuestionEdgeType extends PhabricatorEdgeType { 4 + 5 + const EDGECONST = 18; 6 + 7 + public function shouldWriteInverseTransactions() { 8 + return true; 9 + } 10 + 11 + public function getInverseEdgeConstant() { 12 + return PonderQuestionHasVotingUserEdgeType::EDGECONST; 13 + } 14 + 15 + public function getTransactionAddString( 16 + $actor, 17 + $add_count, 18 + $add_edges) { 19 + 20 + return pht( 21 + '%s added %s question(s): %s.', 22 + $actor, 23 + $add_count, 24 + $add_edges); 25 + } 26 + 27 + public function getTransactionRemoveString( 28 + $actor, 29 + $rem_count, 30 + $rem_edges) { 31 + 32 + return pht( 33 + '%s removed %s question(s): %s.', 34 + $actor, 35 + $rem_count, 36 + $rem_edges); 37 + } 38 + 39 + public function getTransactionEditString( 40 + $actor, 41 + $total_count, 42 + $add_count, 43 + $add_edges, 44 + $rem_count, 45 + $rem_edges) { 46 + 47 + return pht( 48 + '%s edited %s question(s), added %s: %s; removed %s: %s.', 49 + $actor, 50 + $total_count, 51 + $add_count, 52 + $add_edges, 53 + $rem_count, 54 + $rem_edges); 55 + } 56 + 57 + public function getFeedAddString( 58 + $actor, 59 + $object, 60 + $add_count, 61 + $add_edges) { 62 + 63 + return pht( 64 + '%s added %s question(s) to %s: %s.', 65 + $actor, 66 + $add_count, 67 + $object, 68 + $add_edges); 69 + } 70 + 71 + public function getFeedRemoveString( 72 + $actor, 73 + $object, 74 + $rem_count, 75 + $rem_edges) { 76 + 77 + return pht( 78 + '%s removed %s question(s) from %s: %s.', 79 + $actor, 80 + $rem_count, 81 + $object, 82 + $rem_edges); 83 + } 84 + 85 + public function getFeedEditString( 86 + $actor, 87 + $object, 88 + $total_count, 89 + $add_count, 90 + $add_edges, 91 + $rem_count, 92 + $rem_edges) { 93 + 94 + return pht( 95 + '%s edited %s question(s) for %s, added %s: %s; removed %s: %s.', 96 + $actor, 97 + $total_count, 98 + $object, 99 + $add_count, 100 + $add_edges, 101 + $rem_count, 102 + $rem_edges); 103 + } 104 + 105 + }
+1 -1
src/applications/ponder/query/PonderAnswerQuery.php
··· 98 98 if ($this->needViewerVotes) { 99 99 $viewer_phid = $this->getViewer()->getPHID(); 100 100 101 - $etype = PhabricatorEdgeConfig::TYPE_ANSWER_HAS_VOTING_USER; 101 + $etype = PonderAnswerHasVotingUserEdgeType::EDGECONST; 102 102 $edges = id(new PhabricatorEdgeQuery()) 103 103 ->withSourcePHIDs(mpull($answers, 'getPHID')) 104 104 ->withDestinationPHIDs(array($viewer_phid))
+1 -1
src/applications/ponder/query/PonderQuestionQuery.php
··· 159 159 if ($this->needViewerVotes) { 160 160 $viewer_phid = $this->getViewer()->getPHID(); 161 161 162 - $etype = PhabricatorEdgeConfig::TYPE_QUESTION_HAS_VOTING_USER; 162 + $etype = PonderQuestionHasVotingUserEdgeType::EDGECONST; 163 163 $edges = id(new PhabricatorEdgeQuery()) 164 164 ->withSourcePHIDs(mpull($questions, 'getPHID')) 165 165 ->withDestinationPHIDs(array($viewer_phid))
+1 -1
src/applications/ponder/storage/PonderAnswer.php
··· 166 166 167 167 // votable interface 168 168 public function getUserVoteEdgeType() { 169 - return PhabricatorEdgeConfig::TYPE_VOTING_USER_HAS_ANSWER; 169 + return PonderVotingUserHasAnswerEdgeType::EDGECONST; 170 170 } 171 171 172 172 public function getVotablePHID() {
+5 -5
src/applications/ponder/storage/PonderQuestion.php
··· 87 87 ->withDestinationPHIDs($qa_phids) 88 88 ->withEdgeTypes( 89 89 array( 90 - PhabricatorEdgeConfig::TYPE_VOTING_USER_HAS_QUESTION, 91 - PhabricatorEdgeConfig::TYPE_VOTING_USER_HAS_ANSWER, 90 + PonderVotingUserHasQuestionEdgeType::EDGECONST, 91 + PonderVotingUserHasAnswerEdgeType::EDGECONST, 92 92 )) 93 93 ->needEdgeData(true) 94 94 ->execute(); 95 95 96 96 $question_edge = 97 - $edges[$user_phid][PhabricatorEdgeConfig::TYPE_VOTING_USER_HAS_QUESTION]; 97 + $edges[$user_phid][PonderVotingUserHasQuestionEdgeType::EDGECONST]; 98 98 $answer_edges = 99 - $edges[$user_phid][PhabricatorEdgeConfig::TYPE_VOTING_USER_HAS_ANSWER]; 99 + $edges[$user_phid][PonderVotingUserHasAnswerEdgeType::EDGECONST]; 100 100 $edges = null; 101 101 102 102 $this->setUserVote(idx($question_edge, $this->getPHID())); ··· 198 198 199 199 // votable interface 200 200 public function getUserVoteEdgeType() { 201 - return PhabricatorEdgeConfig::TYPE_VOTING_USER_HAS_QUESTION; 201 + return PonderVotingUserHasQuestionEdgeType::EDGECONST; 202 202 } 203 203 204 204 public function getVotablePHID() {
-40
src/infrastructure/edges/constants/PhabricatorEdgeConfig.php
··· 11 11 const TYPE_PROJ_MEMBER = 13; 12 12 const TYPE_MEMBER_OF_PROJ = 14; 13 13 14 - const TYPE_QUESTION_HAS_VOTING_USER = 17; 15 - const TYPE_VOTING_USER_HAS_QUESTION = 18; 16 - const TYPE_ANSWER_HAS_VOTING_USER = 19; 17 - const TYPE_VOTING_USER_HAS_ANSWER = 20; 18 - 19 14 const TYPE_OBJECT_HAS_SUBSCRIBER = 21; 20 15 const TYPE_SUBSCRIBED_TO_OBJECT = 22; 21 16 ··· 123 118 self::TYPE_PROJ_MEMBER => self::TYPE_MEMBER_OF_PROJ, 124 119 self::TYPE_MEMBER_OF_PROJ => self::TYPE_PROJ_MEMBER, 125 120 126 - self::TYPE_QUESTION_HAS_VOTING_USER => 127 - self::TYPE_VOTING_USER_HAS_QUESTION, 128 - self::TYPE_VOTING_USER_HAS_QUESTION => 129 - self::TYPE_QUESTION_HAS_VOTING_USER, 130 - self::TYPE_ANSWER_HAS_VOTING_USER => self::TYPE_VOTING_USER_HAS_ANSWER, 131 - self::TYPE_VOTING_USER_HAS_ANSWER => self::TYPE_ANSWER_HAS_VOTING_USER, 132 - 133 121 self::TYPE_OBJECT_HAS_SUBSCRIBER => self::TYPE_SUBSCRIBED_TO_OBJECT, 134 122 self::TYPE_SUBSCRIBED_TO_OBJECT => self::TYPE_OBJECT_HAS_SUBSCRIBER, 135 123 ··· 221 209 return '%s edited member(s), added %d: %s; removed %d: %s.'; 222 210 case self::TYPE_MEMBER_OF_PROJ: 223 211 return '%s edited project(s), added %d: %s; removed %d: %s.'; 224 - case self::TYPE_QUESTION_HAS_VOTING_USER: 225 - case self::TYPE_ANSWER_HAS_VOTING_USER: 226 - return '%s edited voting user(s), added %d: %s; removed %d: %s.'; 227 - case self::TYPE_VOTING_USER_HAS_QUESTION: 228 - return '%s edited question(s), added %d: %s; removed %d: %s.'; 229 - case self::TYPE_VOTING_USER_HAS_ANSWER: 230 - return '%s edited answer(s), added %d: %s; removed %d: %s.'; 231 212 case self::TYPE_OBJECT_HAS_SUBSCRIBER: 232 213 return '%s edited subscriber(s), added %d: %s; removed %d: %s.'; 233 214 case self::TYPE_SUBSCRIBED_TO_OBJECT: ··· 275 256 return '%s added %d member(s): %s.'; 276 257 case self::TYPE_MEMBER_OF_PROJ: 277 258 return '%s added %d project(s): %s.'; 278 - case self::TYPE_QUESTION_HAS_VOTING_USER: 279 - case self::TYPE_ANSWER_HAS_VOTING_USER: 280 - return '%s added %d voting user(s): %s.'; 281 - case self::TYPE_VOTING_USER_HAS_QUESTION: 282 - return '%s added %d question(s): %s.'; 283 - case self::TYPE_VOTING_USER_HAS_ANSWER: 284 - return '%s added %d answer(s): %s.'; 285 259 case self::TYPE_OBJECT_HAS_SUBSCRIBER: 286 260 return '%s added %d subscriber(s): %s.'; 287 261 case self::TYPE_OBJECT_HAS_UNSUBSCRIBER: ··· 325 299 return '%s removed %d member(s): %s.'; 326 300 case self::TYPE_MEMBER_OF_PROJ: 327 301 return '%s removed %d project(s): %s.'; 328 - case self::TYPE_QUESTION_HAS_VOTING_USER: 329 - case self::TYPE_ANSWER_HAS_VOTING_USER: 330 - return '%s removed %d voting user(s): %s.'; 331 - case self::TYPE_VOTING_USER_HAS_QUESTION: 332 - return '%s removed %d question(s): %s.'; 333 - case self::TYPE_VOTING_USER_HAS_ANSWER: 334 - return '%s removed %d answer(s): %s.'; 335 302 case self::TYPE_OBJECT_HAS_SUBSCRIBER: 336 303 return '%s removed %d subscriber(s): %s.'; 337 304 case self::TYPE_OBJECT_HAS_UNSUBSCRIBER: ··· 375 342 return '%s updated members of %s.'; 376 343 case self::TYPE_MEMBER_OF_PROJ: 377 344 return '%s updated projects of %s.'; 378 - case self::TYPE_QUESTION_HAS_VOTING_USER: 379 - case self::TYPE_ANSWER_HAS_VOTING_USER: 380 - return '%s updated voting users of %s.'; 381 - case self::TYPE_VOTING_USER_HAS_QUESTION: 382 - return '%s updated questions of %s.'; 383 - case self::TYPE_VOTING_USER_HAS_ANSWER: 384 - return '%s updated answers of %s.'; 385 345 case self::TYPE_OBJECT_HAS_SUBSCRIBER: 386 346 return '%s updated subscribers of %s.'; 387 347 case self::TYPE_OBJECT_HAS_UNSUBSCRIBER:
+9 -9
src/infrastructure/internationalization/translation/PhabricatorBaseEnglishTranslation.php
··· 314 314 ), 315 315 ), 316 316 317 - '%s edited voting user(s), added %d: %s; removed %d: %s.' => 317 + '%s edited voting user(s), added %s: %s; removed %d: %s.' => 318 318 '%s edited voting users, added: %3$s; removed: %5$s', 319 319 320 - '%s added %d voting user(s): %s.' => array( 320 + '%s added %s voting user(s): %s.' => array( 321 321 array( 322 322 '%s added a voting user: %3$s.', 323 323 '%s added voting users: %3$s.', 324 324 ), 325 325 ), 326 326 327 - '%s removed %d voting user(s): %s.' => array( 327 + '%s removed %s voting user(s): %s.' => array( 328 328 array( 329 329 '%s removed a voting user: %3$s.', 330 330 '%s removed voting users: %3$s.', ··· 399 399 '%s edited blocked task(s) for %s, added %s: %s; removed %s: %s.' => 400 400 '%s edited blocked tasks for %s, added: %4$s; removed: %6$s', 401 401 402 - '%s edited answer(s), added %d: %s; removed %d: %s.' => 402 + '%s edited answer(s), added %s: %s; removed %d: %s.' => 403 403 '%s edited answers, added: %3$s; removed: %5$s', 404 404 405 - '%s added %d answer(s): %s.' => array( 405 + '%s added %s answer(s): %s.' => array( 406 406 array( 407 407 '%s added an answer: %3$s.', 408 408 '%s added answers: %3$s.', 409 409 ), 410 410 ), 411 411 412 - '%s removed %d answer(s): %s.' => array( 412 + '%s removed %s answer(s): %s.' => array( 413 413 array( 414 414 '%s removed a answer: %3$s.', 415 415 '%s removed answers: %3$s.', 416 416 ), 417 417 ), 418 418 419 - '%s edited question(s), added %d: %s; removed %d: %s.' => 419 + '%s edited question(s), added %s: %s; removed %s: %s.' => 420 420 '%s edited questions, added: %3$s; removed: %5$s', 421 421 422 - '%s added %d question(s): %s.' => array( 422 + '%s added %s question(s): %s.' => array( 423 423 array( 424 424 '%s added a question: %3$s.', 425 425 '%s added questions: %3$s.', 426 426 ), 427 427 ), 428 428 429 - '%s removed %d question(s): %s.' => array( 429 + '%s removed %s question(s): %s.' => array( 430 430 array( 431 431 '%s removed a question: %3$s.', 432 432 '%s removed questions: %3$s.',