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

Modularize user activity log message types

Summary:
Depends on D20670. Ref T13343. The user activity message log types are currently hard-coded, so only upstream code can really use the log construct.

Under the theory that we're going to keep this log around going forward (just focus it a little bit), modularize things so the log is extensible.

Test Plan:
Grepped for `UserLog::`, viewed activity logs in People and Settings.

(If I missed something here -- say, misspelled a constant -- the effect should just be that older logs don't get a human-readable label, so stakes are very low.)

Reviewers: amckinley

Reviewed By: amckinley

Maniphest Tasks: T13343

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

+332 -80
+42
src/__phutil_library_map__.php
··· 2117 2117 'PhabricatorActionListView' => 'view/layout/PhabricatorActionListView.php', 2118 2118 'PhabricatorActionView' => 'view/layout/PhabricatorActionView.php', 2119 2119 'PhabricatorActivitySettingsPanel' => 'applications/settings/panel/PhabricatorActivitySettingsPanel.php', 2120 + 'PhabricatorAddEmailUserLogType' => 'applications/people/userlog/PhabricatorAddEmailUserLogType.php', 2121 + 'PhabricatorAddMultifactorUserLogType' => 'applications/people/userlog/PhabricatorAddMultifactorUserLogType.php', 2120 2122 'PhabricatorAdministratorsPolicyRule' => 'applications/people/policyrule/PhabricatorAdministratorsPolicyRule.php', 2121 2123 'PhabricatorAjaxRequestExceptionHandler' => 'aphront/handler/PhabricatorAjaxRequestExceptionHandler.php', 2122 2124 'PhabricatorAlmanacApplication' => 'applications/almanac/application/PhabricatorAlmanacApplication.php', ··· 2668 2670 'PhabricatorCelerityApplication' => 'applications/celerity/application/PhabricatorCelerityApplication.php', 2669 2671 'PhabricatorCelerityTestCase' => '__tests__/PhabricatorCelerityTestCase.php', 2670 2672 'PhabricatorChangeParserTestCase' => 'applications/repository/worker/__tests__/PhabricatorChangeParserTestCase.php', 2673 + 'PhabricatorChangePasswordUserLogType' => 'applications/people/userlog/PhabricatorChangePasswordUserLogType.php', 2671 2674 'PhabricatorChangesetCachePurger' => 'applications/cache/purger/PhabricatorChangesetCachePurger.php', 2672 2675 'PhabricatorChangesetResponse' => 'infrastructure/diff/PhabricatorChangesetResponse.php', 2673 2676 'PhabricatorChartAxis' => 'applications/fact/chart/PhabricatorChartAxis.php', ··· 2721 2724 'PhabricatorConduitAPIController' => 'applications/conduit/controller/PhabricatorConduitAPIController.php', 2722 2725 'PhabricatorConduitApplication' => 'applications/conduit/application/PhabricatorConduitApplication.php', 2723 2726 'PhabricatorConduitCallManagementWorkflow' => 'applications/conduit/management/PhabricatorConduitCallManagementWorkflow.php', 2727 + 'PhabricatorConduitCertificateFailureUserLogType' => 'applications/people/userlog/PhabricatorConduitCertificateFailureUserLogType.php', 2724 2728 'PhabricatorConduitCertificateToken' => 'applications/conduit/storage/PhabricatorConduitCertificateToken.php', 2729 + 'PhabricatorConduitCertificateUserLogType' => 'applications/people/userlog/PhabricatorConduitCertificateUserLogType.php', 2725 2730 'PhabricatorConduitConsoleController' => 'applications/conduit/controller/PhabricatorConduitConsoleController.php', 2726 2731 'PhabricatorConduitContentSource' => 'infrastructure/contentsource/PhabricatorConduitContentSource.php', 2727 2732 'PhabricatorConduitController' => 'applications/conduit/controller/PhabricatorConduitController.php', ··· 3224 3229 'PhabricatorEmojiRemarkupRule' => 'applications/macro/markup/PhabricatorEmojiRemarkupRule.php', 3225 3230 'PhabricatorEmojiTranslation' => 'infrastructure/internationalization/translation/PhabricatorEmojiTranslation.php', 3226 3231 'PhabricatorEmptyQueryException' => 'infrastructure/query/exception/PhabricatorEmptyQueryException.php', 3232 + 'PhabricatorEnterHisecUserLogType' => 'applications/people/userlog/PhabricatorEnterHisecUserLogType.php', 3227 3233 'PhabricatorEnumConfigType' => 'applications/config/type/PhabricatorEnumConfigType.php', 3228 3234 'PhabricatorEnv' => 'infrastructure/env/PhabricatorEnv.php', 3229 3235 'PhabricatorEnvTestCase' => 'infrastructure/env/__tests__/PhabricatorEnvTestCase.php', ··· 3236 3242 'PhabricatorExampleEventListener' => 'infrastructure/events/PhabricatorExampleEventListener.php', 3237 3243 'PhabricatorExcelExportFormat' => 'infrastructure/export/format/PhabricatorExcelExportFormat.php', 3238 3244 'PhabricatorExecFutureFileUploadSource' => 'applications/files/uploadsource/PhabricatorExecFutureFileUploadSource.php', 3245 + 'PhabricatorExitHisecUserLogType' => 'applications/people/userlog/PhabricatorExitHisecUserLogType.php', 3239 3246 'PhabricatorExportEngine' => 'infrastructure/export/engine/PhabricatorExportEngine.php', 3240 3247 'PhabricatorExportEngineBulkJobType' => 'infrastructure/export/engine/PhabricatorExportEngineBulkJobType.php', 3241 3248 'PhabricatorExportEngineExtension' => 'infrastructure/export/engine/PhabricatorExportEngineExtension.php', ··· 3276 3283 'PhabricatorFactObjectDimension' => 'applications/fact/storage/PhabricatorFactObjectDimension.php', 3277 3284 'PhabricatorFactRaw' => 'applications/fact/storage/PhabricatorFactRaw.php', 3278 3285 'PhabricatorFactUpdateIterator' => 'applications/fact/extract/PhabricatorFactUpdateIterator.php', 3286 + 'PhabricatorFailHisecUserLogType' => 'applications/people/userlog/PhabricatorFailHisecUserLogType.php', 3279 3287 'PhabricatorFaviconRef' => 'applications/files/favicon/PhabricatorFaviconRef.php', 3280 3288 'PhabricatorFaviconRefQuery' => 'applications/files/favicon/PhabricatorFaviconRefQuery.php', 3281 3289 'PhabricatorFavoritesApplication' => 'applications/favorites/application/PhabricatorFavoritesApplication.php', ··· 3410 3418 'PhabricatorFlaggableInterface' => 'applications/flag/interface/PhabricatorFlaggableInterface.php', 3411 3419 'PhabricatorFlagsApplication' => 'applications/flag/application/PhabricatorFlagsApplication.php', 3412 3420 'PhabricatorFlagsUIEventListener' => 'applications/flag/events/PhabricatorFlagsUIEventListener.php', 3421 + 'PhabricatorFullLoginUserLogType' => 'applications/people/userlog/PhabricatorFullLoginUserLogType.php', 3413 3422 'PhabricatorFulltextEngine' => 'applications/search/index/PhabricatorFulltextEngine.php', 3414 3423 'PhabricatorFulltextEngineExtension' => 'applications/search/index/PhabricatorFulltextEngineExtension.php', 3415 3424 'PhabricatorFulltextEngineExtensionModule' => 'applications/search/index/PhabricatorFulltextEngineExtensionModule.php', ··· 3548 3557 'PhabricatorLockLogManagementWorkflow' => 'applications/daemon/management/PhabricatorLockLogManagementWorkflow.php', 3549 3558 'PhabricatorLockManagementWorkflow' => 'applications/daemon/management/PhabricatorLockManagementWorkflow.php', 3550 3559 'PhabricatorLogTriggerAction' => 'infrastructure/daemon/workers/action/PhabricatorLogTriggerAction.php', 3560 + 'PhabricatorLoginFailureUserLogType' => 'applications/people/userlog/PhabricatorLoginFailureUserLogType.php', 3561 + 'PhabricatorLoginUserLogType' => 'applications/people/userlog/PhabricatorLoginUserLogType.php', 3551 3562 'PhabricatorLogoutController' => 'applications/auth/controller/PhabricatorLogoutController.php', 3563 + 'PhabricatorLogoutUserLogType' => 'applications/people/userlog/PhabricatorLogoutUserLogType.php', 3552 3564 'PhabricatorLunarPhasePolicyRule' => 'applications/policy/rule/PhabricatorLunarPhasePolicyRule.php', 3553 3565 'PhabricatorMacroApplication' => 'applications/macro/application/PhabricatorMacroApplication.php', 3554 3566 'PhabricatorMacroAudioBehaviorTransaction' => 'applications/macro/xaction/PhabricatorMacroAudioBehaviorTransaction.php', ··· 3957 3969 'PhabricatorPackagesVersionViewController' => 'applications/packages/controller/PhabricatorPackagesVersionViewController.php', 3958 3970 'PhabricatorPackagesView' => 'applications/packages/view/PhabricatorPackagesView.php', 3959 3971 'PhabricatorPagerUIExample' => 'applications/uiexample/examples/PhabricatorPagerUIExample.php', 3972 + 'PhabricatorPartialLoginUserLogType' => 'applications/people/userlog/PhabricatorPartialLoginUserLogType.php', 3960 3973 'PhabricatorPassphraseApplication' => 'applications/passphrase/application/PhabricatorPassphraseApplication.php', 3961 3974 'PhabricatorPasswordAuthProvider' => 'applications/auth/provider/PhabricatorPasswordAuthProvider.php', 3962 3975 'PhabricatorPasswordDestructionEngineExtension' => 'applications/auth/extension/PhabricatorPasswordDestructionEngineExtension.php', ··· 4145 4158 'PhabricatorPolicyTestObject' => 'applications/policy/__tests__/PhabricatorPolicyTestObject.php', 4146 4159 'PhabricatorPolicyType' => 'applications/policy/constants/PhabricatorPolicyType.php', 4147 4160 'PhabricatorPonderApplication' => 'applications/ponder/application/PhabricatorPonderApplication.php', 4161 + 'PhabricatorPrimaryEmailUserLogType' => 'applications/people/userlog/PhabricatorPrimaryEmailUserLogType.php', 4148 4162 'PhabricatorProfileMenuEditEngine' => 'applications/search/editor/PhabricatorProfileMenuEditEngine.php', 4149 4163 'PhabricatorProfileMenuEditor' => 'applications/search/editor/PhabricatorProfileMenuEditor.php', 4150 4164 'PhabricatorProfileMenuEngine' => 'applications/search/engine/PhabricatorProfileMenuEngine.php', ··· 4368 4382 'PhabricatorQueryOrderTestCase' => 'infrastructure/query/order/__tests__/PhabricatorQueryOrderTestCase.php', 4369 4383 'PhabricatorQueryOrderVector' => 'infrastructure/query/order/PhabricatorQueryOrderVector.php', 4370 4384 'PhabricatorRateLimitRequestExceptionHandler' => 'aphront/handler/PhabricatorRateLimitRequestExceptionHandler.php', 4385 + 'PhabricatorReassignEmailUserLogType' => 'applications/people/userlog/PhabricatorReassignEmailUserLogType.php', 4371 4386 'PhabricatorRebuildIndexesWorker' => 'applications/search/worker/PhabricatorRebuildIndexesWorker.php', 4372 4387 'PhabricatorRecaptchaConfigOptions' => 'applications/config/option/PhabricatorRecaptchaConfigOptions.php', 4373 4388 'PhabricatorRedirectController' => 'applications/base/controller/PhabricatorRedirectController.php', ··· 4386 4401 'PhabricatorRemarkupFigletBlockInterpreter' => 'infrastructure/markup/interpreter/PhabricatorRemarkupFigletBlockInterpreter.php', 4387 4402 'PhabricatorRemarkupHyperlinkEngineExtension' => 'applications/remarkup/engineextension/PhabricatorRemarkupHyperlinkEngineExtension.php', 4388 4403 'PhabricatorRemarkupUIExample' => 'applications/uiexample/examples/PhabricatorRemarkupUIExample.php', 4404 + 'PhabricatorRemoveEmailUserLogType' => 'applications/people/userlog/PhabricatorRemoveEmailUserLogType.php', 4405 + 'PhabricatorRemoveMultifactorUserLogType' => 'applications/people/userlog/PhabricatorRemoveMultifactorUserLogType.php', 4389 4406 'PhabricatorRepositoriesSetupCheck' => 'applications/config/check/PhabricatorRepositoriesSetupCheck.php', 4390 4407 'PhabricatorRepository' => 'applications/repository/storage/PhabricatorRepository.php', 4391 4408 'PhabricatorRepositoryActivateTransaction' => 'applications/repository/xaction/PhabricatorRepositoryActivateTransaction.php', ··· 4524 4541 'PhabricatorRepositoryVCSTransaction' => 'applications/repository/xaction/PhabricatorRepositoryVCSTransaction.php', 4525 4542 'PhabricatorRepositoryWorkingCopyVersion' => 'applications/repository/storage/PhabricatorRepositoryWorkingCopyVersion.php', 4526 4543 'PhabricatorRequestExceptionHandler' => 'aphront/handler/PhabricatorRequestExceptionHandler.php', 4544 + 'PhabricatorResetPasswordUserLogType' => 'applications/people/userlog/PhabricatorResetPasswordUserLogType.php', 4527 4545 'PhabricatorResourceSite' => 'aphront/site/PhabricatorResourceSite.php', 4528 4546 'PhabricatorRobotsController' => 'applications/system/controller/PhabricatorRobotsController.php', 4529 4547 'PhabricatorS3FileStorageEngine' => 'applications/files/engine/PhabricatorS3FileStorageEngine.php', ··· 4630 4648 'PhabricatorShiftChartFunction' => 'applications/fact/chart/PhabricatorShiftChartFunction.php', 4631 4649 'PhabricatorShortSite' => 'aphront/site/PhabricatorShortSite.php', 4632 4650 'PhabricatorShowFiletreeSetting' => 'applications/settings/setting/PhabricatorShowFiletreeSetting.php', 4651 + 'PhabricatorSignDocumentsUserLogType' => 'applications/people/userlog/PhabricatorSignDocumentsUserLogType.php', 4633 4652 'PhabricatorSimpleEditType' => 'applications/transactions/edittype/PhabricatorSimpleEditType.php', 4634 4653 'PhabricatorSinChartFunction' => 'applications/fact/chart/PhabricatorSinChartFunction.php', 4635 4654 'PhabricatorSite' => 'aphront/site/PhabricatorSite.php', ··· 4920 4939 'PhabricatorUserFulltextEngine' => 'applications/people/search/PhabricatorUserFulltextEngine.php', 4921 4940 'PhabricatorUserIconField' => 'applications/people/customfield/PhabricatorUserIconField.php', 4922 4941 'PhabricatorUserLog' => 'applications/people/storage/PhabricatorUserLog.php', 4942 + 'PhabricatorUserLogType' => 'applications/people/userlog/PhabricatorUserLogType.php', 4923 4943 'PhabricatorUserLogView' => 'applications/people/view/PhabricatorUserLogView.php', 4924 4944 'PhabricatorUserMessageCountCacheType' => 'applications/people/cache/PhabricatorUserMessageCountCacheType.php', 4925 4945 'PhabricatorUserNotificationCountCacheType' => 'applications/people/cache/PhabricatorUserNotificationCountCacheType.php', ··· 4950 4970 'PhabricatorUsersPolicyRule' => 'applications/people/policyrule/PhabricatorUsersPolicyRule.php', 4951 4971 'PhabricatorUsersSearchField' => 'applications/people/searchfield/PhabricatorUsersSearchField.php', 4952 4972 'PhabricatorVCSResponse' => 'applications/repository/response/PhabricatorVCSResponse.php', 4973 + 'PhabricatorVerifyEmailUserLogType' => 'applications/people/userlog/PhabricatorVerifyEmailUserLogType.php', 4953 4974 'PhabricatorVersionedDraft' => 'applications/draft/storage/PhabricatorVersionedDraft.php', 4954 4975 'PhabricatorVeryWowEnglishTranslation' => 'infrastructure/internationalization/translation/PhabricatorVeryWowEnglishTranslation.php', 4955 4976 'PhabricatorVideoDocumentEngine' => 'applications/files/document/PhabricatorVideoDocumentEngine.php', ··· 8051 8072 'PhabricatorActionListView' => 'AphrontTagView', 8052 8073 'PhabricatorActionView' => 'AphrontView', 8053 8074 'PhabricatorActivitySettingsPanel' => 'PhabricatorSettingsPanel', 8075 + 'PhabricatorAddEmailUserLogType' => 'PhabricatorUserLogType', 8076 + 'PhabricatorAddMultifactorUserLogType' => 'PhabricatorUserLogType', 8054 8077 'PhabricatorAdministratorsPolicyRule' => 'PhabricatorPolicyRule', 8055 8078 'PhabricatorAjaxRequestExceptionHandler' => 'PhabricatorRequestExceptionHandler', 8056 8079 'PhabricatorAlmanacApplication' => 'PhabricatorApplication', ··· 8716 8739 'PhabricatorCelerityApplication' => 'PhabricatorApplication', 8717 8740 'PhabricatorCelerityTestCase' => 'PhabricatorTestCase', 8718 8741 'PhabricatorChangeParserTestCase' => 'PhabricatorWorkingCopyTestCase', 8742 + 'PhabricatorChangePasswordUserLogType' => 'PhabricatorUserLogType', 8719 8743 'PhabricatorChangesetCachePurger' => 'PhabricatorCachePurger', 8720 8744 'PhabricatorChangesetResponse' => 'AphrontProxyResponse', 8721 8745 'PhabricatorChartAxis' => 'Phobject', ··· 8774 8798 'PhabricatorConduitAPIController' => 'PhabricatorConduitController', 8775 8799 'PhabricatorConduitApplication' => 'PhabricatorApplication', 8776 8800 'PhabricatorConduitCallManagementWorkflow' => 'PhabricatorConduitManagementWorkflow', 8801 + 'PhabricatorConduitCertificateFailureUserLogType' => 'PhabricatorUserLogType', 8777 8802 'PhabricatorConduitCertificateToken' => 'PhabricatorConduitDAO', 8803 + 'PhabricatorConduitCertificateUserLogType' => 'PhabricatorUserLogType', 8778 8804 'PhabricatorConduitConsoleController' => 'PhabricatorConduitController', 8779 8805 'PhabricatorConduitContentSource' => 'PhabricatorContentSource', 8780 8806 'PhabricatorConduitController' => 'PhabricatorController', ··· 9329 9355 'PhabricatorEmojiRemarkupRule' => 'PhutilRemarkupRule', 9330 9356 'PhabricatorEmojiTranslation' => 'PhutilTranslation', 9331 9357 'PhabricatorEmptyQueryException' => 'Exception', 9358 + 'PhabricatorEnterHisecUserLogType' => 'PhabricatorUserLogType', 9332 9359 'PhabricatorEnumConfigType' => 'PhabricatorTextConfigType', 9333 9360 'PhabricatorEnv' => 'Phobject', 9334 9361 'PhabricatorEnvTestCase' => 'PhabricatorTestCase', ··· 9341 9368 'PhabricatorExampleEventListener' => 'PhabricatorEventListener', 9342 9369 'PhabricatorExcelExportFormat' => 'PhabricatorExportFormat', 9343 9370 'PhabricatorExecFutureFileUploadSource' => 'PhabricatorFileUploadSource', 9371 + 'PhabricatorExitHisecUserLogType' => 'PhabricatorUserLogType', 9344 9372 'PhabricatorExportEngine' => 'Phobject', 9345 9373 'PhabricatorExportEngineBulkJobType' => 'PhabricatorWorkerSingleBulkJobType', 9346 9374 'PhabricatorExportEngineExtension' => 'Phobject', ··· 9386 9414 'PhabricatorFactObjectDimension' => 'PhabricatorFactDimension', 9387 9415 'PhabricatorFactRaw' => 'PhabricatorFactDAO', 9388 9416 'PhabricatorFactUpdateIterator' => 'PhutilBufferedIterator', 9417 + 'PhabricatorFailHisecUserLogType' => 'PhabricatorUserLogType', 9389 9418 'PhabricatorFaviconRef' => 'Phobject', 9390 9419 'PhabricatorFaviconRefQuery' => 'Phobject', 9391 9420 'PhabricatorFavoritesApplication' => 'PhabricatorApplication', ··· 9557 9586 'PhabricatorFlaggableInterface' => 'PhabricatorPHIDInterface', 9558 9587 'PhabricatorFlagsApplication' => 'PhabricatorApplication', 9559 9588 'PhabricatorFlagsUIEventListener' => 'PhabricatorEventListener', 9589 + 'PhabricatorFullLoginUserLogType' => 'PhabricatorUserLogType', 9560 9590 'PhabricatorFulltextEngine' => 'Phobject', 9561 9591 'PhabricatorFulltextEngineExtension' => 'Phobject', 9562 9592 'PhabricatorFulltextEngineExtensionModule' => 'PhabricatorConfigModule', ··· 9702 9732 'PhabricatorLockLogManagementWorkflow' => 'PhabricatorLockManagementWorkflow', 9703 9733 'PhabricatorLockManagementWorkflow' => 'PhabricatorManagementWorkflow', 9704 9734 'PhabricatorLogTriggerAction' => 'PhabricatorTriggerAction', 9735 + 'PhabricatorLoginFailureUserLogType' => 'PhabricatorUserLogType', 9736 + 'PhabricatorLoginUserLogType' => 'PhabricatorUserLogType', 9705 9737 'PhabricatorLogoutController' => 'PhabricatorAuthController', 9738 + 'PhabricatorLogoutUserLogType' => 'PhabricatorUserLogType', 9706 9739 'PhabricatorLunarPhasePolicyRule' => 'PhabricatorPolicyRule', 9707 9740 'PhabricatorMacroApplication' => 'PhabricatorApplication', 9708 9741 'PhabricatorMacroAudioBehaviorTransaction' => 'PhabricatorMacroTransactionType', ··· 10182 10215 'PhabricatorPackagesVersionViewController' => 'PhabricatorPackagesVersionController', 10183 10216 'PhabricatorPackagesView' => 'AphrontView', 10184 10217 'PhabricatorPagerUIExample' => 'PhabricatorUIExample', 10218 + 'PhabricatorPartialLoginUserLogType' => 'PhabricatorUserLogType', 10185 10219 'PhabricatorPassphraseApplication' => 'PhabricatorApplication', 10186 10220 'PhabricatorPasswordAuthProvider' => 'PhabricatorAuthProvider', 10187 10221 'PhabricatorPasswordDestructionEngineExtension' => 'PhabricatorDestructionEngineExtension', ··· 10402 10436 ), 10403 10437 'PhabricatorPolicyType' => 'PhabricatorPolicyConstants', 10404 10438 'PhabricatorPonderApplication' => 'PhabricatorApplication', 10439 + 'PhabricatorPrimaryEmailUserLogType' => 'PhabricatorUserLogType', 10405 10440 'PhabricatorProfileMenuEditEngine' => 'PhabricatorEditEngine', 10406 10441 'PhabricatorProfileMenuEditor' => 'PhabricatorApplicationTransactionEditor', 10407 10442 'PhabricatorProfileMenuEngine' => 'Phobject', ··· 10669 10704 'Iterator', 10670 10705 ), 10671 10706 'PhabricatorRateLimitRequestExceptionHandler' => 'PhabricatorRequestExceptionHandler', 10707 + 'PhabricatorReassignEmailUserLogType' => 'PhabricatorUserLogType', 10672 10708 'PhabricatorRebuildIndexesWorker' => 'PhabricatorWorker', 10673 10709 'PhabricatorRecaptchaConfigOptions' => 'PhabricatorApplicationConfigOptions', 10674 10710 'PhabricatorRedirectController' => 'PhabricatorController', ··· 10687 10723 'PhabricatorRemarkupFigletBlockInterpreter' => 'PhutilRemarkupBlockInterpreter', 10688 10724 'PhabricatorRemarkupHyperlinkEngineExtension' => 'PhutilRemarkupHyperlinkEngineExtension', 10689 10725 'PhabricatorRemarkupUIExample' => 'PhabricatorUIExample', 10726 + 'PhabricatorRemoveEmailUserLogType' => 'PhabricatorUserLogType', 10727 + 'PhabricatorRemoveMultifactorUserLogType' => 'PhabricatorUserLogType', 10690 10728 'PhabricatorRepositoriesSetupCheck' => 'PhabricatorSetupCheck', 10691 10729 'PhabricatorRepository' => array( 10692 10730 'PhabricatorRepositoryDAO', ··· 10894 10932 'PhabricatorRepositoryVCSTransaction' => 'PhabricatorRepositoryTransactionType', 10895 10933 'PhabricatorRepositoryWorkingCopyVersion' => 'PhabricatorRepositoryDAO', 10896 10934 'PhabricatorRequestExceptionHandler' => 'AphrontRequestExceptionHandler', 10935 + 'PhabricatorResetPasswordUserLogType' => 'PhabricatorUserLogType', 10897 10936 'PhabricatorResourceSite' => 'PhabricatorSite', 10898 10937 'PhabricatorRobotsController' => 'PhabricatorController', 10899 10938 'PhabricatorS3FileStorageEngine' => 'PhabricatorFileStorageEngine', ··· 11002 11041 'PhabricatorShiftChartFunction' => 'PhabricatorChartFunction', 11003 11042 'PhabricatorShortSite' => 'PhabricatorSite', 11004 11043 'PhabricatorShowFiletreeSetting' => 'PhabricatorSelectSetting', 11044 + 'PhabricatorSignDocumentsUserLogType' => 'PhabricatorUserLogType', 11005 11045 'PhabricatorSimpleEditType' => 'PhabricatorEditType', 11006 11046 'PhabricatorSinChartFunction' => 'PhabricatorChartFunction', 11007 11047 'PhabricatorSite' => 'AphrontSite', ··· 11336 11376 'PhabricatorUserDAO', 11337 11377 'PhabricatorPolicyInterface', 11338 11378 ), 11379 + 'PhabricatorUserLogType' => 'Phobject', 11339 11380 'PhabricatorUserLogView' => 'AphrontView', 11340 11381 'PhabricatorUserMessageCountCacheType' => 'PhabricatorUserCacheType', 11341 11382 'PhabricatorUserNotificationCountCacheType' => 'PhabricatorUserCacheType', ··· 11371 11412 'PhabricatorUsersPolicyRule' => 'PhabricatorPolicyRule', 11372 11413 'PhabricatorUsersSearchField' => 'PhabricatorSearchTokenizerField', 11373 11414 'PhabricatorVCSResponse' => 'AphrontResponse', 11415 + 'PhabricatorVerifyEmailUserLogType' => 'PhabricatorUserLogType', 11374 11416 'PhabricatorVersionedDraft' => 'PhabricatorDraftDAO', 11375 11417 'PhabricatorVeryWowEnglishTranslation' => 'PhutilTranslation', 11376 11418 'PhabricatorVideoDocumentEngine' => 'PhabricatorDocumentEngine',
+8 -8
src/applications/auth/engine/PhabricatorAuthSessionEngine.php
··· 294 294 null, 295 295 $identity_phid, 296 296 ($partial 297 - ? PhabricatorUserLog::ACTION_LOGIN_PARTIAL 298 - : PhabricatorUserLog::ACTION_LOGIN)); 297 + ? PhabricatorPartialLoginUserLogType::LOGTYPE 298 + : PhabricatorLoginUserLogType::LOGTYPE)); 299 299 300 300 $log->setDetails( 301 301 array( ··· 366 366 $log = PhabricatorUserLog::initializeNewLog( 367 367 $user, 368 368 $user->getPHID(), 369 - PhabricatorUserLog::ACTION_LOGOUT); 369 + PhabricatorLogoutUserLogType::LOGTYPE); 370 370 $log->save(); 371 371 372 372 $extensions = PhabricatorAuthSessionEngineExtension::getAllExtensions(); ··· 688 688 $log = PhabricatorUserLog::initializeNewLog( 689 689 $viewer, 690 690 $viewer->getPHID(), 691 - PhabricatorUserLog::ACTION_ENTER_HISEC); 691 + PhabricatorEnterHisecUserLogType::LOGTYPE); 692 692 $log->save(); 693 693 } else { 694 694 $log = PhabricatorUserLog::initializeNewLog( 695 695 $viewer, 696 696 $viewer->getPHID(), 697 - PhabricatorUserLog::ACTION_FAIL_HISEC); 697 + PhabricatorFailHisecUserLogType::LOGTYPE); 698 698 $log->save(); 699 699 } 700 700 } ··· 831 831 $log = PhabricatorUserLog::initializeNewLog( 832 832 $viewer, 833 833 $viewer->getPHID(), 834 - PhabricatorUserLog::ACTION_EXIT_HISEC); 834 + PhabricatorExitHisecUserLogType::LOGTYPE); 835 835 $log->save(); 836 836 } 837 837 ··· 872 872 $log = PhabricatorUserLog::initializeNewLog( 873 873 $viewer, 874 874 $viewer->getPHID(), 875 - PhabricatorUserLog::ACTION_LOGIN_FULL); 875 + PhabricatorFullLoginUserLogType::LOGTYPE); 876 876 $log->save(); 877 877 unset($unguarded); 878 878 } ··· 917 917 $log = PhabricatorUserLog::initializeNewLog( 918 918 $viewer, 919 919 $viewer->getPHID(), 920 - PhabricatorUserLog::ACTION_LOGIN_LEGALPAD); 920 + PhabricatorSignDocumentsUserLogType::LOGTYPE); 921 921 $log->save(); 922 922 } 923 923 unset($unguarded);
+1 -1
src/applications/auth/provider/PhabricatorPasswordAuthProvider.php
··· 318 318 $log = PhabricatorUserLog::initializeNewLog( 319 319 null, 320 320 $log_user ? $log_user->getPHID() : null, 321 - PhabricatorUserLog::ACTION_LOGIN_FAILURE); 321 + PhabricatorLoginFailureUserLogType::LOGTYPE); 322 322 $log->save(); 323 323 } 324 324
+3 -3
src/applications/conduit/method/ConduitGetCertificateConduitAPIMethod.php
··· 41 41 42 42 protected function execute(ConduitAPIRequest $request) { 43 43 $failed_attempts = PhabricatorUserLog::loadRecentEventsFromThisIP( 44 - PhabricatorUserLog::ACTION_CONDUIT_CERTIFICATE_FAILURE, 44 + PhabricatorConduitCertificateFailureUserLogType::LOGTYPE, 45 45 60 * 5); 46 46 47 47 if (count($failed_attempts) > 5) { ··· 61 61 $log = PhabricatorUserLog::initializeNewLog( 62 62 $request->getUser(), 63 63 $info->getUserPHID(), 64 - PhabricatorUserLog::ACTION_CONDUIT_CERTIFICATE) 64 + PhabricatorConduitCertificateUserLogType::LOGTYPE) 65 65 ->save(); 66 66 } 67 67 ··· 85 85 $log = PhabricatorUserLog::initializeNewLog( 86 86 $request->getUser(), 87 87 $info ? $info->getUserPHID() : '-', 88 - PhabricatorUserLog::ACTION_CONDUIT_CERTIFICATE_FAILURE) 88 + PhabricatorConduitCertificateFailureUserLogType::LOGTYPE) 89 89 ->save(); 90 90 } 91 91
+6 -6
src/applications/people/editor/PhabricatorUserEditor.php
··· 78 78 $log = PhabricatorUserLog::initializeNewLog( 79 79 $this->requireActor(), 80 80 $user->getPHID(), 81 - PhabricatorUserLog::ACTION_EMAIL_REASSIGN); 81 + PhabricatorReassignEmailUserLogType::LOGTYPE); 82 82 $log->setNewValue($email->getAddress()); 83 83 $log->save(); 84 84 } ··· 195 195 $log = PhabricatorUserLog::initializeNewLog( 196 196 $actor, 197 197 $user->getPHID(), 198 - PhabricatorUserLog::ACTION_EMAIL_ADD); 198 + PhabricatorAddEmailUserLogType::LOGTYPE); 199 199 $log->setNewValue($email->getAddress()); 200 200 $log->save(); 201 201 ··· 246 246 $log = PhabricatorUserLog::initializeNewLog( 247 247 $actor, 248 248 $user->getPHID(), 249 - PhabricatorUserLog::ACTION_EMAIL_REMOVE); 249 + PhabricatorRemoveEmailUserLogType::LOGTYPE); 250 250 $log->setOldValue($email->getAddress()); 251 251 $log->save(); 252 252 ··· 312 312 $log = PhabricatorUserLog::initializeNewLog( 313 313 $actor, 314 314 $user->getPHID(), 315 - PhabricatorUserLog::ACTION_EMAIL_PRIMARY); 315 + PhabricatorPrimaryEmailUserLogType::LOGTYPE); 316 316 $log->setOldValue($old_primary ? $old_primary->getAddress() : null); 317 317 $log->setNewValue($email->getAddress()); 318 318 ··· 371 371 $log = PhabricatorUserLog::initializeNewLog( 372 372 $actor, 373 373 $user->getPHID(), 374 - PhabricatorUserLog::ACTION_EMAIL_VERIFY); 374 + PhabricatorVerifyEmailUserLogType::LOGTYPE); 375 375 $log->setNewValue($email->getAddress()); 376 376 $log->save(); 377 377 } ··· 433 433 $log = PhabricatorUserLog::initializeNewLog( 434 434 $actor, 435 435 $user->getPHID(), 436 - PhabricatorUserLog::ACTION_EMAIL_REASSIGN); 436 + PhabricatorReassignEmailUserLogType::LOGTYPE); 437 437 $log->setNewValue($email->getAddress()); 438 438 $log->save(); 439 439 }
+7 -3
src/applications/people/query/PhabricatorPeopleLogSearchEngine.php
··· 64 64 } 65 65 66 66 protected function buildCustomSearchFields() { 67 + $types = PhabricatorUserLogType::getAllLogTypes(); 68 + $types = mpull($types, 'getLogTypeName', 'getLogTypeKey'); 69 + 67 70 return array( 68 71 id(new PhabricatorUsersSearchField()) 69 72 ->setKey('userPHIDs') ··· 79 82 ->setKey('actions') 80 83 ->setLabel(pht('Actions')) 81 84 ->setDescription(pht('Search for particular types of activity.')) 82 - ->setOptions(PhabricatorUserLog::getActionTypeMap()), 85 + ->setOptions($types), 83 86 id(new PhabricatorSearchTextField()) 84 87 ->setKey('ip') 85 88 ->setLabel(pht('Filter IP')) ··· 194 197 } 195 198 $handles = $viewer->loadHandles($phids); 196 199 197 - $action_map = PhabricatorUserLog::getActionTypeMap(); 200 + $types = PhabricatorUserLogType::getAllLogTypes(); 201 + $types = mpull($types, 'getLogTypeName', 'getLogTypeKey'); 198 202 199 203 $export = array(); 200 204 foreach ($logs as $log) { ··· 214 218 } 215 219 216 220 $action = $log->getAction(); 217 - $action_name = idx($action_map, $action, pht('Unknown ("%s")', $action)); 221 + $action_name = idx($types, $action, pht('Unknown ("%s")', $action)); 218 222 219 223 $map = array( 220 224 'actorPHID' => $actor_phid,
-55
src/applications/people/storage/PhabricatorUserLog.php
··· 3 3 final class PhabricatorUserLog extends PhabricatorUserDAO 4 4 implements PhabricatorPolicyInterface { 5 5 6 - const ACTION_LOGIN = 'login'; 7 - const ACTION_LOGIN_PARTIAL = 'login-partial'; 8 - const ACTION_LOGIN_FULL = 'login-full'; 9 - const ACTION_LOGOUT = 'logout'; 10 - const ACTION_LOGIN_FAILURE = 'login-fail'; 11 - const ACTION_LOGIN_LEGALPAD = 'login-legalpad'; 12 - const ACTION_RESET_PASSWORD = 'reset-pass'; 13 - 14 - const ACTION_CONDUIT_CERTIFICATE = 'conduit-cert'; 15 - const ACTION_CONDUIT_CERTIFICATE_FAILURE = 'conduit-cert-fail'; 16 - 17 - const ACTION_EMAIL_PRIMARY = 'email-primary'; 18 - const ACTION_EMAIL_REMOVE = 'email-remove'; 19 - const ACTION_EMAIL_ADD = 'email-add'; 20 - const ACTION_EMAIL_VERIFY = 'email-verify'; 21 - const ACTION_EMAIL_REASSIGN = 'email-reassign'; 22 - 23 - const ACTION_CHANGE_PASSWORD = 'change-password'; 24 - 25 - const ACTION_ENTER_HISEC = 'hisec-enter'; 26 - const ACTION_EXIT_HISEC = 'hisec-exit'; 27 - const ACTION_FAIL_HISEC = 'hisec-fail'; 28 - 29 - const ACTION_MULTI_ADD = 'multi-add'; 30 - const ACTION_MULTI_REMOVE = 'multi-remove'; 31 - 32 6 protected $actorPHID; 33 7 protected $userPHID; 34 8 protected $action; ··· 37 11 protected $details = array(); 38 12 protected $remoteAddr; 39 13 protected $session; 40 - 41 - public static function getActionTypeMap() { 42 - return array( 43 - self::ACTION_LOGIN => pht('Login'), 44 - self::ACTION_LOGIN_PARTIAL => pht('Login: Partial Login'), 45 - self::ACTION_LOGIN_FULL => pht('Login: Upgrade to Full'), 46 - self::ACTION_LOGIN_FAILURE => pht('Login: Failure'), 47 - self::ACTION_LOGIN_LEGALPAD => 48 - pht('Login: Signed Required Legalpad Documents'), 49 - self::ACTION_LOGOUT => pht('Logout'), 50 - self::ACTION_RESET_PASSWORD => pht('Reset Password'), 51 - self::ACTION_CONDUIT_CERTIFICATE 52 - => pht('Conduit: Read Certificate'), 53 - self::ACTION_CONDUIT_CERTIFICATE_FAILURE 54 - => pht('Conduit: Read Certificate Failure'), 55 - self::ACTION_EMAIL_PRIMARY => pht('Email: Change Primary'), 56 - self::ACTION_EMAIL_ADD => pht('Email: Add Address'), 57 - self::ACTION_EMAIL_REMOVE => pht('Email: Remove Address'), 58 - self::ACTION_EMAIL_VERIFY => pht('Email: Verify'), 59 - self::ACTION_EMAIL_REASSIGN => pht('Email: Reassign'), 60 - self::ACTION_CHANGE_PASSWORD => pht('Change Password'), 61 - self::ACTION_ENTER_HISEC => pht('Hisec: Enter'), 62 - self::ACTION_EXIT_HISEC => pht('Hisec: Exit'), 63 - self::ACTION_FAIL_HISEC => pht('Hisec: Failed Attempt'), 64 - self::ACTION_MULTI_ADD => pht('Multi-Factor: Add Factor'), 65 - self::ACTION_MULTI_REMOVE => pht('Multi-Factor: Remove Factor'), 66 - ); 67 - } 68 - 69 14 70 15 public static function initializeNewLog( 71 16 PhabricatorUser $actor = null,
+12
src/applications/people/userlog/PhabricatorAddEmailUserLogType.php
··· 1 + <?php 2 + 3 + final class PhabricatorAddEmailUserLogType 4 + extends PhabricatorUserLogType { 5 + 6 + const LOGTYPE = 'email-add'; 7 + 8 + public function getLogTypeName() { 9 + return pht('Email: Add Address'); 10 + } 11 + 12 + }
+12
src/applications/people/userlog/PhabricatorAddMultifactorUserLogType.php
··· 1 + <?php 2 + 3 + final class PhabricatorAddMultifactorUserLogType 4 + extends PhabricatorUserLogType { 5 + 6 + const LOGTYPE = 'multi-add'; 7 + 8 + public function getLogTypeName() { 9 + return pht('Multi-Factor: Add Factor'); 10 + } 11 + 12 + }
+12
src/applications/people/userlog/PhabricatorChangePasswordUserLogType.php
··· 1 + <?php 2 + 3 + final class PhabricatorChangePasswordUserLogType 4 + extends PhabricatorUserLogType { 5 + 6 + const LOGTYPE = 'change-password'; 7 + 8 + public function getLogTypeName() { 9 + return pht('Change Password'); 10 + } 11 + 12 + }
+12
src/applications/people/userlog/PhabricatorConduitCertificateFailureUserLogType.php
··· 1 + <?php 2 + 3 + final class PhabricatorConduitCertificateFailureUserLogType 4 + extends PhabricatorUserLogType { 5 + 6 + const LOGTYPE = 'conduit-cert-fail'; 7 + 8 + public function getLogTypeName() { 9 + return pht('Conduit: Read Certificate Failure'); 10 + } 11 + 12 + }
+12
src/applications/people/userlog/PhabricatorConduitCertificateUserLogType.php
··· 1 + <?php 2 + 3 + final class PhabricatorConduitCertificateUserLogType 4 + extends PhabricatorUserLogType { 5 + 6 + const LOGTYPE = 'conduit-cert'; 7 + 8 + public function getLogTypeName() { 9 + return pht('Conduit: Read Certificate'); 10 + } 11 + 12 + }
+12
src/applications/people/userlog/PhabricatorEnterHisecUserLogType.php
··· 1 + <?php 2 + 3 + final class PhabricatorEnterHisecUserLogType 4 + extends PhabricatorUserLogType { 5 + 6 + const LOGTYPE = 'hisec-enter'; 7 + 8 + public function getLogTypeName() { 9 + return pht('Hisec: Enter'); 10 + } 11 + 12 + }
+12
src/applications/people/userlog/PhabricatorExitHisecUserLogType.php
··· 1 + <?php 2 + 3 + final class PhabricatorExitHisecUserLogType 4 + extends PhabricatorUserLogType { 5 + 6 + const LOGTYPE = 'hisec-exit'; 7 + 8 + public function getLogTypeName() { 9 + return pht('Hisec: Exit'); 10 + } 11 + 12 + }
+12
src/applications/people/userlog/PhabricatorFailHisecUserLogType.php
··· 1 + <?php 2 + 3 + final class PhabricatorFailHisecUserLogType 4 + extends PhabricatorUserLogType { 5 + 6 + const LOGTYPE = 'hisec-fail'; 7 + 8 + public function getLogTypeName() { 9 + return pht('Hisec: Failed Attempt'); 10 + } 11 + 12 + }
+12
src/applications/people/userlog/PhabricatorFullLoginUserLogType.php
··· 1 + <?php 2 + 3 + final class PhabricatorFullLoginUserLogType 4 + extends PhabricatorUserLogType { 5 + 6 + const LOGTYPE = 'login-full'; 7 + 8 + public function getLogTypeName() { 9 + return pht('Login: Upgrade to Full'); 10 + } 11 + 12 + }
+12
src/applications/people/userlog/PhabricatorLoginFailureUserLogType.php
··· 1 + <?php 2 + 3 + final class PhabricatorLoginFailureUserLogType 4 + extends PhabricatorUserLogType { 5 + 6 + const LOGTYPE = 'login-fail'; 7 + 8 + public function getLogTypeName() { 9 + return pht('Login: Failure'); 10 + } 11 + 12 + }
+12
src/applications/people/userlog/PhabricatorLoginUserLogType.php
··· 1 + <?php 2 + 3 + final class PhabricatorLoginUserLogType 4 + extends PhabricatorUserLogType { 5 + 6 + const LOGTYPE = 'login'; 7 + 8 + public function getLogTypeName() { 9 + return pht('Login'); 10 + } 11 + 12 + }
+12
src/applications/people/userlog/PhabricatorLogoutUserLogType.php
··· 1 + <?php 2 + 3 + final class PhabricatorLogoutUserLogType 4 + extends PhabricatorUserLogType { 5 + 6 + const LOGTYPE = 'logout'; 7 + 8 + public function getLogTypeName() { 9 + return pht('Logout'); 10 + } 11 + 12 + }
+12
src/applications/people/userlog/PhabricatorPartialLoginUserLogType.php
··· 1 + <?php 2 + 3 + final class PhabricatorPartialLoginUserLogType 4 + extends PhabricatorUserLogType { 5 + 6 + const LOGTYPE = 'login-partial'; 7 + 8 + public function getLogTypeName() { 9 + return pht('Login: Partial Login'); 10 + } 11 + 12 + }
+12
src/applications/people/userlog/PhabricatorPrimaryEmailUserLogType.php
··· 1 + <?php 2 + 3 + final class PhabricatorPrimaryEmailUserLogType 4 + extends PhabricatorUserLogType { 5 + 6 + const LOGTYPE = 'email-primary'; 7 + 8 + public function getLogTypeName() { 9 + return pht('Email: Change Primary'); 10 + } 11 + 12 + }
+12
src/applications/people/userlog/PhabricatorReassignEmailUserLogType.php
··· 1 + <?php 2 + 3 + final class PhabricatorReassignEmailUserLogType 4 + extends PhabricatorUserLogType { 5 + 6 + const LOGTYPE = 'email-reassign'; 7 + 8 + public function getLogTypeName() { 9 + return pht('Email: Reassign'); 10 + } 11 + 12 + }
+12
src/applications/people/userlog/PhabricatorRemoveEmailUserLogType.php
··· 1 + <?php 2 + 3 + final class PhabricatorRemoveEmailUserLogType 4 + extends PhabricatorUserLogType { 5 + 6 + const LOGTYPE = 'email-remove'; 7 + 8 + public function getLogTypeName() { 9 + return pht('Email: Remove Address'); 10 + } 11 + 12 + }
+12
src/applications/people/userlog/PhabricatorRemoveMultifactorUserLogType.php
··· 1 + <?php 2 + 3 + final class PhabricatorRemoveMultifactorUserLogType 4 + extends PhabricatorUserLogType { 5 + 6 + const LOGTYPE = 'multi-remove'; 7 + 8 + public function getLogTypeName() { 9 + return pht('Multi-Factor: Remove Factor'); 10 + } 11 + 12 + }
+12
src/applications/people/userlog/PhabricatorResetPasswordUserLogType.php
··· 1 + <?php 2 + 3 + final class PhabricatorResetPasswordUserLogType 4 + extends PhabricatorUserLogType { 5 + 6 + const LOGTYPE = 'reset-pass'; 7 + 8 + public function getLogTypeName() { 9 + return pht('Reset Password'); 10 + } 11 + 12 + }
+12
src/applications/people/userlog/PhabricatorSignDocumentsUserLogType.php
··· 1 + <?php 2 + 3 + final class PhabricatorSignDocumentsUserLogType 4 + extends PhabricatorUserLogType { 5 + 6 + const LOGTYPE = 'login-legalpad'; 7 + 8 + public function getLogTypeName() { 9 + return pht('Login: Signed Required Legalpad Documents'); 10 + } 11 + 12 + }
+19
src/applications/people/userlog/PhabricatorUserLogType.php
··· 1 + <?php 2 + 3 + abstract class PhabricatorUserLogType 4 + extends Phobject { 5 + 6 + final public function getLogTypeKey() { 7 + return $this->getPhobjectClassConstant('LOGTYPE', 32); 8 + } 9 + 10 + abstract public function getLogTypeName(); 11 + 12 + final public static function getAllLogTypes() { 13 + return id(new PhutilClassMapQuery()) 14 + ->setAncestorClass(__CLASS__) 15 + ->setUniqueMethod('getLogTypeKey') 16 + ->execute(); 17 + } 18 + 19 + }
+12
src/applications/people/userlog/PhabricatorVerifyEmailUserLogType.php
··· 1 + <?php 2 + 3 + final class PhabricatorVerifyEmailUserLogType 4 + extends PhabricatorUserLogType { 5 + 6 + const LOGTYPE = 'email-verify'; 7 + 8 + public function getLogTypeName() { 9 + return pht('Email: Verify Address'); 10 + } 11 + 12 + }
+4 -2
src/applications/people/view/PhabricatorUserLogView.php
··· 27 27 } 28 28 $handles = $viewer->loadHandles($phids); 29 29 30 - $action_map = PhabricatorUserLog::getActionTypeMap(); 30 + $types = PhabricatorUserLogType::getAllLogTypes(); 31 + $types = mpull($types, 'getLogTypeName', 'getLogTypeKey'); 32 + 31 33 $base_uri = $this->searchBaseURI; 32 34 33 35 $viewer_phid = $viewer->getPHID(); ··· 69 71 } 70 72 71 73 $action = $log->getAction(); 72 - $action_name = idx($action_map, $action, $action); 74 + $action_name = idx($types, $action, $action); 73 75 74 76 if ($actor_phid) { 75 77 $actor_name = $handles[$actor_phid]->renderLink();
+2 -2
src/applications/settings/panel/PhabricatorMultiFactorSettingsPanel.php
··· 315 315 $log = PhabricatorUserLog::initializeNewLog( 316 316 $viewer, 317 317 $user->getPHID(), 318 - PhabricatorUserLog::ACTION_MULTI_ADD); 318 + PhabricatorAddMultifactorUserLogType::LOGTYPE); 319 319 $log->save(); 320 320 321 321 $user->updateMultiFactorEnrollment(); ··· 423 423 $log = PhabricatorUserLog::initializeNewLog( 424 424 $viewer, 425 425 $user->getPHID(), 426 - PhabricatorUserLog::ACTION_MULTI_REMOVE); 426 + PhabricatorRemoveMultifactorUserLogType::LOGTYPE); 427 427 $log->save(); 428 428 429 429 $user->updateMultiFactorEnrollment();