(stable) Promote 2016 Week 27
|
@ -7,13 +7,13 @@
|
|||
*/
|
||||
return array(
|
||||
'names' => array(
|
||||
'core.pkg.css' => 'b6b40555',
|
||||
'core.pkg.css' => '55d9bb83',
|
||||
'core.pkg.js' => 'f2139810',
|
||||
'darkconsole.pkg.js' => 'e7393ebb',
|
||||
'differential.pkg.css' => 'b3eea3f5',
|
||||
'differential.pkg.js' => '01a010d6',
|
||||
'differential.pkg.css' => '3e81ae60',
|
||||
'differential.pkg.js' => '634399e9',
|
||||
'diffusion.pkg.css' => '91c5d3a6',
|
||||
'diffusion.pkg.js' => '3a9a8bfa',
|
||||
'diffusion.pkg.js' => '84c8f8fd',
|
||||
'maniphest.pkg.css' => '4845691a',
|
||||
'maniphest.pkg.js' => '949a7498',
|
||||
'rsrc/css/aphront/aphront-bars.css' => '231ac33c',
|
||||
|
@ -25,7 +25,7 @@ return array(
|
|||
'rsrc/css/aphront/notification.css' => '3f6c89c9',
|
||||
'rsrc/css/aphront/panel-view.css' => '8427b78d',
|
||||
'rsrc/css/aphront/phabricator-nav-view.css' => 'ac79a758',
|
||||
'rsrc/css/aphront/table-view.css' => '9258e19f',
|
||||
'rsrc/css/aphront/table-view.css' => '8df59783',
|
||||
'rsrc/css/aphront/tokenizer.css' => '056da01b',
|
||||
'rsrc/css/aphront/tooltip.css' => '1a07aea8',
|
||||
'rsrc/css/aphront/typeahead-browse.css' => '8904346a',
|
||||
|
@ -57,7 +57,7 @@ return array(
|
|||
'rsrc/css/application/dashboard/dashboard.css' => 'bc6f2127',
|
||||
'rsrc/css/application/diff/inline-comment-summary.css' => '51efda3a',
|
||||
'rsrc/css/application/differential/add-comment.css' => 'c47f8c40',
|
||||
'rsrc/css/application/differential/changeset-view.css' => 'ccfbc869',
|
||||
'rsrc/css/application/differential/changeset-view.css' => '37792573',
|
||||
'rsrc/css/application/differential/core.css' => '5b7b8ff4',
|
||||
'rsrc/css/application/differential/phui-inline-comment.css' => '5953c28e',
|
||||
'rsrc/css/application/differential/revision-comment.css' => '14b8565a',
|
||||
|
@ -105,7 +105,7 @@ return array(
|
|||
'rsrc/css/application/uiexample/example.css' => '528b19de',
|
||||
'rsrc/css/core/core.css' => 'd0801452',
|
||||
'rsrc/css/core/remarkup.css' => '523d34bb',
|
||||
'rsrc/css/core/syntax.css' => '9fc496d5',
|
||||
'rsrc/css/core/syntax.css' => '769d3498',
|
||||
'rsrc/css/core/z-index.css' => '5b6fcf3f',
|
||||
'rsrc/css/diviner/diviner-shared.css' => 'aa3656aa',
|
||||
'rsrc/css/font/font-aleo.css' => '8bdb2835',
|
||||
|
@ -139,7 +139,7 @@ return array(
|
|||
'rsrc/css/phui/phui-header-view.css' => '4c7dd8f5',
|
||||
'rsrc/css/phui/phui-hovercard.css' => 'de1a2119',
|
||||
'rsrc/css/phui/phui-icon-set-selector.css' => '1ab67aad',
|
||||
'rsrc/css/phui/phui-icon.css' => '3f33ab57',
|
||||
'rsrc/css/phui/phui-icon.css' => 'd0534b71',
|
||||
'rsrc/css/phui/phui-image-mask.css' => 'a8498f9c',
|
||||
'rsrc/css/phui/phui-info-panel.css' => '27ea50a1',
|
||||
'rsrc/css/phui/phui-info-view.css' => '28efab79',
|
||||
|
@ -163,7 +163,7 @@ return array(
|
|||
'rsrc/css/phui/workboards/phui-workpanel.css' => '92197373',
|
||||
'rsrc/css/sprite-login.css' => '60e8560e',
|
||||
'rsrc/css/sprite-menu.css' => '9dd65b92',
|
||||
'rsrc/css/sprite-tokens.css' => '4f399012',
|
||||
'rsrc/css/sprite-tokens.css' => '72b952bd',
|
||||
'rsrc/css/syntax/syntax-default.css' => '9923583c',
|
||||
'rsrc/externals/d3/d3.min.js' => 'a11a5ff2',
|
||||
'rsrc/externals/font/aleo/aleo-bold.eot' => 'd3d3bed7',
|
||||
|
@ -344,8 +344,8 @@ return array(
|
|||
'rsrc/image/sprite-login.png' => '03d5af29',
|
||||
'rsrc/image/sprite-menu-X2.png' => 'cfd8fca5',
|
||||
'rsrc/image/sprite-menu.png' => 'd7a99faa',
|
||||
'rsrc/image/sprite-tokens-X2.png' => '348f1745',
|
||||
'rsrc/image/sprite-tokens.png' => 'ce0b62be',
|
||||
'rsrc/image/sprite-tokens-X2.png' => 'e991bb40',
|
||||
'rsrc/image/sprite-tokens.png' => 'fe69d6ab',
|
||||
'rsrc/image/texture/card-gradient.png' => '815f26e8',
|
||||
'rsrc/image/texture/dark-menu-hover.png' => '5fa7ece8',
|
||||
'rsrc/image/texture/dark-menu.png' => '7e22296e',
|
||||
|
@ -394,7 +394,7 @@ return array(
|
|||
'rsrc/js/application/diffusion/DiffusionLocateFileSource.js' => 'b42eddc7',
|
||||
'rsrc/js/application/diffusion/behavior-audit-preview.js' => 'd835b03a',
|
||||
'rsrc/js/application/diffusion/behavior-commit-branches.js' => 'bdaf4d04',
|
||||
'rsrc/js/application/diffusion/behavior-commit-graph.js' => '5a0b1a64',
|
||||
'rsrc/js/application/diffusion/behavior-commit-graph.js' => '49ae8328',
|
||||
'rsrc/js/application/diffusion/behavior-diffusion-browse-file.js' => '054a0f0b',
|
||||
'rsrc/js/application/diffusion/behavior-jump-to.js' => '73d09eef',
|
||||
'rsrc/js/application/diffusion/behavior-load-blame.js' => '42126667',
|
||||
|
@ -495,7 +495,7 @@ return array(
|
|||
'rsrc/js/core/behavior-lightbox-attachments.js' => 'f8ba29d7',
|
||||
'rsrc/js/core/behavior-line-linker.js' => '1499a8cb',
|
||||
'rsrc/js/core/behavior-more.js' => 'a80d0378',
|
||||
'rsrc/js/core/behavior-object-selector.js' => '9030ebef',
|
||||
'rsrc/js/core/behavior-object-selector.js' => 'e0ec7f2f',
|
||||
'rsrc/js/core/behavior-oncopy.js' => '2926fff2',
|
||||
'rsrc/js/core/behavior-phabricator-nav.js' => '56a1ca03',
|
||||
'rsrc/js/core/behavior-phabricator-remarkup-assist.js' => '116cf19b',
|
||||
|
@ -518,9 +518,9 @@ return array(
|
|||
'rsrc/js/core/phtize.js' => 'd254d646',
|
||||
'rsrc/js/phui/behavior-phui-dropdown-menu.js' => '1aa4c968',
|
||||
'rsrc/js/phui/behavior-phui-file-upload.js' => 'b003d4fb',
|
||||
'rsrc/js/phui/behavior-phui-object-box-tabs.js' => '2bfa2836',
|
||||
'rsrc/js/phui/behavior-phui-profile-menu.js' => '12884df9',
|
||||
'rsrc/js/phui/behavior-phui-submenu.js' => 'a6f7a73b',
|
||||
'rsrc/js/phui/behavior-phui-tab-group.js' => '0a0b10e9',
|
||||
'rsrc/js/phuix/PHUIXActionListView.js' => 'b5c256b8',
|
||||
'rsrc/js/phuix/PHUIXActionView.js' => '8cf6d262',
|
||||
'rsrc/js/phuix/PHUIXAutocomplete.js' => '9196fb06',
|
||||
|
@ -536,7 +536,7 @@ return array(
|
|||
'aphront-list-filter-view-css' => '5d6f0526',
|
||||
'aphront-multi-column-view-css' => 'fd18389d',
|
||||
'aphront-panel-view-css' => '8427b78d',
|
||||
'aphront-table-view-css' => '9258e19f',
|
||||
'aphront-table-view-css' => '8df59783',
|
||||
'aphront-tokenizer-control-css' => '056da01b',
|
||||
'aphront-tooltip-css' => '1a07aea8',
|
||||
'aphront-typeahead-control-css' => 'd4f16145',
|
||||
|
@ -555,7 +555,7 @@ return array(
|
|||
'conpherence-update-css' => 'faf6be09',
|
||||
'conpherence-widget-pane-css' => '775eaaba',
|
||||
'd3' => 'a11a5ff2',
|
||||
'differential-changeset-view-css' => 'ccfbc869',
|
||||
'differential-changeset-view-css' => '37792573',
|
||||
'differential-core-view-css' => '5b7b8ff4',
|
||||
'differential-inline-comment-editor' => '64a5550f',
|
||||
'differential-revision-add-comment-css' => 'c47f8c40',
|
||||
|
@ -619,7 +619,7 @@ return array(
|
|||
'javelin-behavior-differential-user-select' => 'a8d8459d',
|
||||
'javelin-behavior-diffusion-browse-file' => '054a0f0b',
|
||||
'javelin-behavior-diffusion-commit-branches' => 'bdaf4d04',
|
||||
'javelin-behavior-diffusion-commit-graph' => '5a0b1a64',
|
||||
'javelin-behavior-diffusion-commit-graph' => '49ae8328',
|
||||
'javelin-behavior-diffusion-jump-to' => '73d09eef',
|
||||
'javelin-behavior-diffusion-locate-file' => '6d3e1947',
|
||||
'javelin-behavior-diffusion-pull-lastmodified' => 'f01586dc',
|
||||
|
@ -658,7 +658,7 @@ return array(
|
|||
'javelin-behavior-phabricator-line-linker' => '1499a8cb',
|
||||
'javelin-behavior-phabricator-nav' => '56a1ca03',
|
||||
'javelin-behavior-phabricator-notification-example' => '8ce821c5',
|
||||
'javelin-behavior-phabricator-object-selector' => '9030ebef',
|
||||
'javelin-behavior-phabricator-object-selector' => 'e0ec7f2f',
|
||||
'javelin-behavior-phabricator-oncopy' => '2926fff2',
|
||||
'javelin-behavior-phabricator-remarkup-assist' => '116cf19b',
|
||||
'javelin-behavior-phabricator-reveal-content' => '60821bc7',
|
||||
|
@ -673,9 +673,9 @@ return array(
|
|||
'javelin-behavior-phui-dropdown-menu' => '1aa4c968',
|
||||
'javelin-behavior-phui-file-upload' => 'b003d4fb',
|
||||
'javelin-behavior-phui-hovercards' => 'bcaccd64',
|
||||
'javelin-behavior-phui-object-box-tabs' => '2bfa2836',
|
||||
'javelin-behavior-phui-profile-menu' => '12884df9',
|
||||
'javelin-behavior-phui-submenu' => 'a6f7a73b',
|
||||
'javelin-behavior-phui-tab-group' => '0a0b10e9',
|
||||
'javelin-behavior-policy-control' => 'd0c516d5',
|
||||
'javelin-behavior-policy-rule-editor' => '5e9f347c',
|
||||
'javelin-behavior-project-boards' => '14a1faae',
|
||||
|
@ -845,7 +845,7 @@ return array(
|
|||
'phui-hovercard' => '1bd28176',
|
||||
'phui-hovercard-view-css' => 'de1a2119',
|
||||
'phui-icon-set-selector-css' => '1ab67aad',
|
||||
'phui-icon-view-css' => '3f33ab57',
|
||||
'phui-icon-view-css' => 'd0534b71',
|
||||
'phui-image-mask-css' => 'a8498f9c',
|
||||
'phui-info-panel-css' => '27ea50a1',
|
||||
'phui-info-view-css' => '28efab79',
|
||||
|
@ -888,9 +888,9 @@ return array(
|
|||
'setup-issue-css' => 'db7e9c40',
|
||||
'sprite-login-css' => '60e8560e',
|
||||
'sprite-menu-css' => '9dd65b92',
|
||||
'sprite-tokens-css' => '4f399012',
|
||||
'sprite-tokens-css' => '72b952bd',
|
||||
'syntax-default-css' => '9923583c',
|
||||
'syntax-highlighting-css' => '9fc496d5',
|
||||
'syntax-highlighting-css' => '769d3498',
|
||||
'tokens-css' => '3d0f239e',
|
||||
'typeahead-browse-css' => '8904346a',
|
||||
'unhandled-exception-css' => '4c96257a',
|
||||
|
@ -977,6 +977,11 @@ return array(
|
|||
'javelin-stratcom',
|
||||
'javelin-vector',
|
||||
),
|
||||
'0a0b10e9' => array(
|
||||
'javelin-behavior',
|
||||
'javelin-stratcom',
|
||||
'javelin-dom',
|
||||
),
|
||||
'0a3f3021' => array(
|
||||
'javelin-behavior',
|
||||
'javelin-stratcom',
|
||||
|
@ -1107,11 +1112,6 @@ return array(
|
|||
'javelin-install',
|
||||
'javelin-util',
|
||||
),
|
||||
'2bfa2836' => array(
|
||||
'javelin-behavior',
|
||||
'javelin-stratcom',
|
||||
'javelin-dom',
|
||||
),
|
||||
'2c426492' => array(
|
||||
'javelin-behavior',
|
||||
'javelin-dom',
|
||||
|
@ -1136,6 +1136,9 @@ return array(
|
|||
'javelin-dom',
|
||||
'javelin-workflow',
|
||||
),
|
||||
37792573 => array(
|
||||
'phui-inline-comment-view-css',
|
||||
),
|
||||
'3ab51e2c' => array(
|
||||
'javelin-behavior',
|
||||
'javelin-behavior-device',
|
||||
|
@ -1214,6 +1217,11 @@ return array(
|
|||
'javelin-uri',
|
||||
'phabricator-notification',
|
||||
),
|
||||
'49ae8328' => array(
|
||||
'javelin-behavior',
|
||||
'javelin-dom',
|
||||
'javelin-stratcom',
|
||||
),
|
||||
'4b700e9e' => array(
|
||||
'javelin-behavior',
|
||||
'javelin-dom',
|
||||
|
@ -1340,11 +1348,6 @@ return array(
|
|||
'javelin-vector',
|
||||
'javelin-dom',
|
||||
),
|
||||
'5a0b1a64' => array(
|
||||
'javelin-behavior',
|
||||
'javelin-dom',
|
||||
'javelin-stratcom',
|
||||
),
|
||||
'5a13c79f' => array(
|
||||
'javelin-install',
|
||||
'javelin-dom',
|
||||
|
@ -1460,6 +1463,9 @@ return array(
|
|||
'javelin-vector',
|
||||
'javelin-dom',
|
||||
),
|
||||
'769d3498' => array(
|
||||
'syntax-default-css',
|
||||
),
|
||||
'76b9fc3e' => array(
|
||||
'javelin-behavior',
|
||||
'javelin-stratcom',
|
||||
|
@ -1602,12 +1608,6 @@ return array(
|
|||
'javelin-dom',
|
||||
'javelin-request',
|
||||
),
|
||||
'9030ebef' => array(
|
||||
'javelin-behavior',
|
||||
'javelin-dom',
|
||||
'javelin-request',
|
||||
'javelin-util',
|
||||
),
|
||||
'9196fb06' => array(
|
||||
'javelin-install',
|
||||
'javelin-dom',
|
||||
|
@ -1671,9 +1671,6 @@ return array(
|
|||
'javelin-dom',
|
||||
'javelin-vector',
|
||||
),
|
||||
'9fc496d5' => array(
|
||||
'syntax-default-css',
|
||||
),
|
||||
'a0b57eb8' => array(
|
||||
'javelin-behavior',
|
||||
'javelin-dom',
|
||||
|
@ -1931,9 +1928,6 @@ return array(
|
|||
'javelin-util',
|
||||
'phabricator-notification-css',
|
||||
),
|
||||
'ccfbc869' => array(
|
||||
'phui-inline-comment-view-css',
|
||||
),
|
||||
'cf86d16a' => array(
|
||||
'javelin-behavior',
|
||||
'javelin-dom',
|
||||
|
@ -2036,6 +2030,12 @@ return array(
|
|||
'df5e11d2' => array(
|
||||
'javelin-install',
|
||||
),
|
||||
'e0ec7f2f' => array(
|
||||
'javelin-behavior',
|
||||
'javelin-dom',
|
||||
'javelin-request',
|
||||
'javelin-util',
|
||||
),
|
||||
'e10f8e18' => array(
|
||||
'javelin-behavior',
|
||||
'javelin-dom',
|
||||
|
|
|
@ -4,88 +4,88 @@
|
|||
"tokens-coin-1": {
|
||||
"name": "tokens-coin-1",
|
||||
"rule": ".tokens-coin-1",
|
||||
"hash": "0ec4c7309f8191972340c6789a6b5691"
|
||||
"hash": "5343d745423994c45c5fc689edc47d05"
|
||||
},
|
||||
"tokens-coin-2": {
|
||||
"name": "tokens-coin-2",
|
||||
"rule": ".tokens-coin-2",
|
||||
"hash": "4c85dd4b0c388cfefe0075b7056384fd"
|
||||
"hash": "9a94b5f925f3e6f8eed673d50fbfe148"
|
||||
},
|
||||
"tokens-coin-3": {
|
||||
"name": "tokens-coin-3",
|
||||
"rule": ".tokens-coin-3",
|
||||
"hash": "a2e3770894539957e436a7d5a2be4703"
|
||||
"hash": "68db03ca248309a76cee97ada64239c6"
|
||||
},
|
||||
"tokens-coin-4": {
|
||||
"name": "tokens-coin-4",
|
||||
"rule": ".tokens-coin-4",
|
||||
"hash": "856cb87c5590975c0a25177ca2fd2a8f"
|
||||
"hash": "75832b7e42df9287b3c35c6afed12a93"
|
||||
},
|
||||
"tokens-heart-1": {
|
||||
"name": "tokens-heart-1",
|
||||
"rule": ".tokens-heart-1",
|
||||
"hash": "370228318750a79d93848bdf686444e5"
|
||||
"hash": "2d4812b2129a8eb05fcdbed1e9654422"
|
||||
},
|
||||
"tokens-heart-2": {
|
||||
"name": "tokens-heart-2",
|
||||
"rule": ".tokens-heart-2",
|
||||
"hash": "197144d3987308aaef311e29e3503707"
|
||||
"hash": "64cbdbfb0dc565f17b6f13b5e41bc000"
|
||||
},
|
||||
"tokens-like-1": {
|
||||
"name": "tokens-like-1",
|
||||
"rule": ".tokens-like-1",
|
||||
"hash": "3c5271d6678ad6d217a47779488c9918"
|
||||
"hash": "1b3966d6e0e5d902b558fe3d76ed8a79"
|
||||
},
|
||||
"tokens-like-2": {
|
||||
"name": "tokens-like-2",
|
||||
"rule": ".tokens-like-2",
|
||||
"hash": "b009176baadc3e71786ac24ce8229c5a"
|
||||
"hash": "b74308407fdaa94e08492cfd9b44f2a2"
|
||||
},
|
||||
"tokens-medal-1": {
|
||||
"name": "tokens-medal-1",
|
||||
"rule": ".tokens-medal-1",
|
||||
"hash": "cd897529c6834917da062589ae1a69ae"
|
||||
"hash": "33d837e703091060c1892c402535eef0"
|
||||
},
|
||||
"tokens-medal-2": {
|
||||
"name": "tokens-medal-2",
|
||||
"rule": ".tokens-medal-2",
|
||||
"hash": "d56f106b508c33bca6c0a33e2544d0d6"
|
||||
"hash": "fa2f3b237d7616a6cb309718ad162d7a"
|
||||
},
|
||||
"tokens-medal-3": {
|
||||
"name": "tokens-medal-3",
|
||||
"rule": ".tokens-medal-3",
|
||||
"hash": "d4e7c06cfd39d932a35aa25841d5008c"
|
||||
"hash": "d7282911ba57373b54b4093986143f3e"
|
||||
},
|
||||
"tokens-medal-4": {
|
||||
"name": "tokens-medal-4",
|
||||
"rule": ".tokens-medal-4",
|
||||
"hash": "36f596bd2615e521542ac10a771d6902"
|
||||
"hash": "a107a334968d57314ec6a71620c45b99"
|
||||
},
|
||||
"tokens-misc-1": {
|
||||
"name": "tokens-misc-1",
|
||||
"rule": ".tokens-misc-1",
|
||||
"hash": "8f7575c0176570b30aaffb801bcb2c13"
|
||||
"hash": "671ce03f62c7b0946482ec92d35b8aa3"
|
||||
},
|
||||
"tokens-misc-2": {
|
||||
"name": "tokens-misc-2",
|
||||
"rule": ".tokens-misc-2",
|
||||
"hash": "5c61bc36fd0b5545ebf31b57c6ab5185"
|
||||
"hash": "872353ba82e41512c3b54e5dc2aa3d43"
|
||||
},
|
||||
"tokens-misc-3": {
|
||||
"name": "tokens-misc-3",
|
||||
"rule": ".tokens-misc-3",
|
||||
"hash": "97a383def5eb847077b2b26a1a441c0e"
|
||||
"hash": "cdf9171ec6397b95ea9abe1edeaab359"
|
||||
},
|
||||
"tokens-misc-4": {
|
||||
"name": "tokens-misc-4",
|
||||
"rule": ".tokens-misc-4",
|
||||
"hash": "229c8a28e3b6bb883effbb62689e190f"
|
||||
"hash": "7371fa5ecde282e718b7a15b02ca51e8"
|
||||
}
|
||||
},
|
||||
"scales": [
|
||||
1,
|
||||
2
|
||||
],
|
||||
"header": "\/**\n * @provides sprite-tokens-css\n * @generated\n *\/\n\n.sprite-tokens {\n background-image: url(\/rsrc\/image\/sprite-tokens.png);\n background-repeat: no-repeat;\n}\n\n@media\nonly screen and (min-device-pixel-ratio: 1.5),\nonly screen and (-webkit-min-device-pixel-ratio: 1.5),\nonly screen and (min-resolution: 1.5dppx) {\n .sprite-tokens {\n background-image: url(\/rsrc\/image\/sprite-tokens-X2.png);\n background-size: {X}px {Y}px;\n }\n}\n",
|
||||
"header": "/**\n * @provides sprite-tokens-css\n * @generated\n */\n\n.sprite-tokens {\n background-image: url(/rsrc/image/sprite-tokens.png);\n background-repeat: no-repeat;\n}\n\n@media\nonly screen and (min-device-pixel-ratio: 1.5),\nonly screen and (-webkit-min-device-pixel-ratio: 1.5),\nonly screen and (min-resolution: 1.5dppx) {\n .sprite-tokens {\n background-image: url(/rsrc/image/sprite-tokens-X2.png);\n background-size: {X}px {Y}px;\n }\n}\n",
|
||||
"type": "standard"
|
||||
}
|
||||
|
|
Before Width: | Height: | Size: 638 B After Width: | Height: | Size: 574 B |
Before Width: | Height: | Size: 629 B After Width: | Height: | Size: 566 B |
Before Width: | Height: | Size: 632 B After Width: | Height: | Size: 551 B |
Before Width: | Height: | Size: 791 B After Width: | Height: | Size: 689 B |
Before Width: | Height: | Size: 742 B After Width: | Height: | Size: 327 B |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 411 B |
Before Width: | Height: | Size: 659 B After Width: | Height: | Size: 337 B |
Before Width: | Height: | Size: 719 B After Width: | Height: | Size: 328 B |
Before Width: | Height: | Size: 657 B After Width: | Height: | Size: 412 B |
Before Width: | Height: | Size: 657 B After Width: | Height: | Size: 423 B |
Before Width: | Height: | Size: 653 B After Width: | Height: | Size: 424 B |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 666 B |
Before Width: | Height: | Size: 683 B After Width: | Height: | Size: 534 B |
Before Width: | Height: | Size: 716 B After Width: | Height: | Size: 529 B |
Before Width: | Height: | Size: 692 B After Width: | Height: | Size: 433 B |
Before Width: | Height: | Size: 826 B After Width: | Height: | Size: 568 B |
Before Width: | Height: | Size: 753 B After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 597 B |
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 797 B |
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 636 B |
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 682 B |
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 803 B |
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 859 B |
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 841 B |
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 1,019 B |
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 794 B |
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 1.2 KiB |
|
@ -0,0 +1,2 @@
|
|||
ALTER TABLE {$NAMESPACE}_differential.differential_revision
|
||||
ADD properties LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT};
|
|
@ -0,0 +1,2 @@
|
|||
UPDATE {$NAMESPACE}_differential.differential_revision
|
||||
SET properties = '{}' WHERE properties = '';
|
|
@ -381,6 +381,7 @@ phutil_register_library_map(array(
|
|||
'DifferentialChangesetTwoUpRenderer' => 'applications/differential/render/DifferentialChangesetTwoUpRenderer.php',
|
||||
'DifferentialChangesetTwoUpTestRenderer' => 'applications/differential/render/DifferentialChangesetTwoUpTestRenderer.php',
|
||||
'DifferentialChangesetViewController' => 'applications/differential/controller/DifferentialChangesetViewController.php',
|
||||
'DifferentialChildRevisionsField' => 'applications/differential/customfield/DifferentialChildRevisionsField.php',
|
||||
'DifferentialCloseConduitAPIMethod' => 'applications/differential/conduit/DifferentialCloseConduitAPIMethod.php',
|
||||
'DifferentialCommentPreviewController' => 'applications/differential/controller/DifferentialCommentPreviewController.php',
|
||||
'DifferentialCommentSaveController' => 'applications/differential/controller/DifferentialCommentSaveController.php',
|
||||
|
@ -407,8 +408,6 @@ phutil_register_library_map(array(
|
|||
'DifferentialCustomFieldStringIndex' => 'applications/differential/storage/DifferentialCustomFieldStringIndex.php',
|
||||
'DifferentialDAO' => 'applications/differential/storage/DifferentialDAO.php',
|
||||
'DifferentialDefaultViewCapability' => 'applications/differential/capability/DifferentialDefaultViewCapability.php',
|
||||
'DifferentialDependenciesField' => 'applications/differential/customfield/DifferentialDependenciesField.php',
|
||||
'DifferentialDependsOnField' => 'applications/differential/customfield/DifferentialDependsOnField.php',
|
||||
'DifferentialDiff' => 'applications/differential/storage/DifferentialDiff.php',
|
||||
'DifferentialDiffAffectedFilesHeraldField' => 'applications/differential/herald/DifferentialDiffAffectedFilesHeraldField.php',
|
||||
'DifferentialDiffAuthorHeraldField' => 'applications/differential/herald/DifferentialDiffAuthorHeraldField.php',
|
||||
|
@ -476,6 +475,7 @@ phutil_register_library_map(array(
|
|||
'DifferentialManiphestTasksField' => 'applications/differential/customfield/DifferentialManiphestTasksField.php',
|
||||
'DifferentialModernHunk' => 'applications/differential/storage/DifferentialModernHunk.php',
|
||||
'DifferentialNextStepField' => 'applications/differential/customfield/DifferentialNextStepField.php',
|
||||
'DifferentialParentRevisionsField' => 'applications/differential/customfield/DifferentialParentRevisionsField.php',
|
||||
'DifferentialParseCacheGarbageCollector' => 'applications/differential/garbagecollector/DifferentialParseCacheGarbageCollector.php',
|
||||
'DifferentialParseCommitMessageConduitAPIMethod' => 'applications/differential/conduit/DifferentialParseCommitMessageConduitAPIMethod.php',
|
||||
'DifferentialParseRenderTestCase' => 'applications/differential/__tests__/DifferentialParseRenderTestCase.php',
|
||||
|
@ -521,9 +521,14 @@ phutil_register_library_map(array(
|
|||
'DifferentialRevisionDependsOnRevisionEdgeType' => 'applications/differential/edge/DifferentialRevisionDependsOnRevisionEdgeType.php',
|
||||
'DifferentialRevisionEditController' => 'applications/differential/controller/DifferentialRevisionEditController.php',
|
||||
'DifferentialRevisionFulltextEngine' => 'applications/differential/search/DifferentialRevisionFulltextEngine.php',
|
||||
'DifferentialRevisionGraph' => 'infrastructure/graph/DifferentialRevisionGraph.php',
|
||||
'DifferentialRevisionHasChildRelationship' => 'applications/differential/relationships/DifferentialRevisionHasChildRelationship.php',
|
||||
'DifferentialRevisionHasCommitEdgeType' => 'applications/differential/edge/DifferentialRevisionHasCommitEdgeType.php',
|
||||
'DifferentialRevisionHasCommitRelationship' => 'applications/differential/relationships/DifferentialRevisionHasCommitRelationship.php',
|
||||
'DifferentialRevisionHasParentRelationship' => 'applications/differential/relationships/DifferentialRevisionHasParentRelationship.php',
|
||||
'DifferentialRevisionHasReviewerEdgeType' => 'applications/differential/edge/DifferentialRevisionHasReviewerEdgeType.php',
|
||||
'DifferentialRevisionHasTaskEdgeType' => 'applications/differential/edge/DifferentialRevisionHasTaskEdgeType.php',
|
||||
'DifferentialRevisionHasTaskRelationship' => 'applications/differential/relationships/DifferentialRevisionHasTaskRelationship.php',
|
||||
'DifferentialRevisionHeraldField' => 'applications/differential/herald/DifferentialRevisionHeraldField.php',
|
||||
'DifferentialRevisionHeraldFieldGroup' => 'applications/differential/herald/DifferentialRevisionHeraldFieldGroup.php',
|
||||
'DifferentialRevisionIDField' => 'applications/differential/customfield/DifferentialRevisionIDField.php',
|
||||
|
@ -536,6 +541,8 @@ phutil_register_library_map(array(
|
|||
'DifferentialRevisionPackageHeraldField' => 'applications/differential/herald/DifferentialRevisionPackageHeraldField.php',
|
||||
'DifferentialRevisionPackageOwnerHeraldField' => 'applications/differential/herald/DifferentialRevisionPackageOwnerHeraldField.php',
|
||||
'DifferentialRevisionQuery' => 'applications/differential/query/DifferentialRevisionQuery.php',
|
||||
'DifferentialRevisionRelationship' => 'applications/differential/relationships/DifferentialRevisionRelationship.php',
|
||||
'DifferentialRevisionRelationshipSource' => 'applications/search/relationship/DifferentialRevisionRelationshipSource.php',
|
||||
'DifferentialRevisionRepositoryHeraldField' => 'applications/differential/herald/DifferentialRevisionRepositoryHeraldField.php',
|
||||
'DifferentialRevisionRepositoryProjectsHeraldField' => 'applications/differential/herald/DifferentialRevisionRepositoryProjectsHeraldField.php',
|
||||
'DifferentialRevisionRequiredActionResultBucket' => 'applications/differential/query/DifferentialRevisionRequiredActionResultBucket.php',
|
||||
|
@ -600,7 +607,9 @@ phutil_register_library_map(array(
|
|||
'DiffusionCommitEditController' => 'applications/diffusion/controller/DiffusionCommitEditController.php',
|
||||
'DiffusionCommitFulltextEngine' => 'applications/repository/search/DiffusionCommitFulltextEngine.php',
|
||||
'DiffusionCommitHasRevisionEdgeType' => 'applications/diffusion/edge/DiffusionCommitHasRevisionEdgeType.php',
|
||||
'DiffusionCommitHasRevisionRelationship' => 'applications/diffusion/relationships/DiffusionCommitHasRevisionRelationship.php',
|
||||
'DiffusionCommitHasTaskEdgeType' => 'applications/diffusion/edge/DiffusionCommitHasTaskEdgeType.php',
|
||||
'DiffusionCommitHasTaskRelationship' => 'applications/diffusion/relationships/DiffusionCommitHasTaskRelationship.php',
|
||||
'DiffusionCommitHash' => 'applications/diffusion/data/DiffusionCommitHash.php',
|
||||
'DiffusionCommitHeraldField' => 'applications/diffusion/herald/DiffusionCommitHeraldField.php',
|
||||
'DiffusionCommitHeraldFieldGroup' => 'applications/diffusion/herald/DiffusionCommitHeraldFieldGroup.php',
|
||||
|
@ -614,6 +623,8 @@ phutil_register_library_map(array(
|
|||
'DiffusionCommitParentsQueryConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionCommitParentsQueryConduitAPIMethod.php',
|
||||
'DiffusionCommitQuery' => 'applications/diffusion/query/DiffusionCommitQuery.php',
|
||||
'DiffusionCommitRef' => 'applications/diffusion/data/DiffusionCommitRef.php',
|
||||
'DiffusionCommitRelationship' => 'applications/diffusion/relationships/DiffusionCommitRelationship.php',
|
||||
'DiffusionCommitRelationshipSource' => 'applications/search/relationship/DiffusionCommitRelationshipSource.php',
|
||||
'DiffusionCommitRemarkupRule' => 'applications/diffusion/remarkup/DiffusionCommitRemarkupRule.php',
|
||||
'DiffusionCommitRemarkupRuleTestCase' => 'applications/diffusion/remarkup/__tests__/DiffusionCommitRemarkupRuleTestCase.php',
|
||||
'DiffusionCommitRepositoryHeraldField' => 'applications/diffusion/herald/DiffusionCommitRepositoryHeraldField.php',
|
||||
|
@ -1410,6 +1421,7 @@ phutil_register_library_map(array(
|
|||
'ManiphestTaskAssigneeHeraldField' => 'applications/maniphest/herald/ManiphestTaskAssigneeHeraldField.php',
|
||||
'ManiphestTaskAuthorHeraldField' => 'applications/maniphest/herald/ManiphestTaskAuthorHeraldField.php',
|
||||
'ManiphestTaskAuthorPolicyRule' => 'applications/maniphest/policyrule/ManiphestTaskAuthorPolicyRule.php',
|
||||
'ManiphestTaskCloseAsDuplicateRelationship' => 'applications/maniphest/relationship/ManiphestTaskCloseAsDuplicateRelationship.php',
|
||||
'ManiphestTaskClosedStatusDatasource' => 'applications/maniphest/typeahead/ManiphestTaskClosedStatusDatasource.php',
|
||||
'ManiphestTaskDependedOnByTaskEdgeType' => 'applications/maniphest/edge/ManiphestTaskDependedOnByTaskEdgeType.php',
|
||||
'ManiphestTaskDependsOnTaskEdgeType' => 'applications/maniphest/edge/ManiphestTaskDependsOnTaskEdgeType.php',
|
||||
|
@ -1418,8 +1430,10 @@ phutil_register_library_map(array(
|
|||
'ManiphestTaskEditBulkJobType' => 'applications/maniphest/bulk/ManiphestTaskEditBulkJobType.php',
|
||||
'ManiphestTaskEditController' => 'applications/maniphest/controller/ManiphestTaskEditController.php',
|
||||
'ManiphestTaskFulltextEngine' => 'applications/maniphest/search/ManiphestTaskFulltextEngine.php',
|
||||
'ManiphestTaskGraph' => 'infrastructure/graph/ManiphestTaskGraph.php',
|
||||
'ManiphestTaskHasCommitEdgeType' => 'applications/maniphest/edge/ManiphestTaskHasCommitEdgeType.php',
|
||||
'ManiphestTaskHasCommitRelationship' => 'applications/maniphest/relationship/ManiphestTaskHasCommitRelationship.php',
|
||||
'ManiphestTaskHasDuplicateTaskEdgeType' => 'applications/maniphest/edge/ManiphestTaskHasDuplicateTaskEdgeType.php',
|
||||
'ManiphestTaskHasMockEdgeType' => 'applications/maniphest/edge/ManiphestTaskHasMockEdgeType.php',
|
||||
'ManiphestTaskHasMockRelationship' => 'applications/maniphest/relationship/ManiphestTaskHasMockRelationship.php',
|
||||
'ManiphestTaskHasParentRelationship' => 'applications/maniphest/relationship/ManiphestTaskHasParentRelationship.php',
|
||||
|
@ -1428,10 +1442,12 @@ phutil_register_library_map(array(
|
|||
'ManiphestTaskHasSubtaskRelationship' => 'applications/maniphest/relationship/ManiphestTaskHasSubtaskRelationship.php',
|
||||
'ManiphestTaskHeraldField' => 'applications/maniphest/herald/ManiphestTaskHeraldField.php',
|
||||
'ManiphestTaskHeraldFieldGroup' => 'applications/maniphest/herald/ManiphestTaskHeraldFieldGroup.php',
|
||||
'ManiphestTaskIsDuplicateOfTaskEdgeType' => 'applications/maniphest/edge/ManiphestTaskIsDuplicateOfTaskEdgeType.php',
|
||||
'ManiphestTaskListController' => 'applications/maniphest/controller/ManiphestTaskListController.php',
|
||||
'ManiphestTaskListHTTPParameterType' => 'applications/maniphest/httpparametertype/ManiphestTaskListHTTPParameterType.php',
|
||||
'ManiphestTaskListView' => 'applications/maniphest/view/ManiphestTaskListView.php',
|
||||
'ManiphestTaskMailReceiver' => 'applications/maniphest/mail/ManiphestTaskMailReceiver.php',
|
||||
'ManiphestTaskMergeInRelationship' => 'applications/maniphest/relationship/ManiphestTaskMergeInRelationship.php',
|
||||
'ManiphestTaskOpenStatusDatasource' => 'applications/maniphest/typeahead/ManiphestTaskOpenStatusDatasource.php',
|
||||
'ManiphestTaskPHIDResolver' => 'applications/maniphest/httpparametertype/ManiphestTaskPHIDResolver.php',
|
||||
'ManiphestTaskPHIDType' => 'applications/maniphest/phid/ManiphestTaskPHIDType.php',
|
||||
|
@ -1442,6 +1458,7 @@ phutil_register_library_map(array(
|
|||
'ManiphestTaskPriorityHeraldField' => 'applications/maniphest/herald/ManiphestTaskPriorityHeraldField.php',
|
||||
'ManiphestTaskQuery' => 'applications/maniphest/query/ManiphestTaskQuery.php',
|
||||
'ManiphestTaskRelationship' => 'applications/maniphest/relationship/ManiphestTaskRelationship.php',
|
||||
'ManiphestTaskRelationshipSource' => 'applications/search/relationship/ManiphestTaskRelationshipSource.php',
|
||||
'ManiphestTaskResultListView' => 'applications/maniphest/view/ManiphestTaskResultListView.php',
|
||||
'ManiphestTaskSearchEngine' => 'applications/maniphest/query/ManiphestTaskSearchEngine.php',
|
||||
'ManiphestTaskStatus' => 'applications/maniphest/constants/ManiphestTaskStatus.php',
|
||||
|
@ -1584,6 +1601,8 @@ phutil_register_library_map(array(
|
|||
'PHUICurtainExtension' => 'view/extension/PHUICurtainExtension.php',
|
||||
'PHUICurtainPanelView' => 'view/layout/PHUICurtainPanelView.php',
|
||||
'PHUICurtainView' => 'view/layout/PHUICurtainView.php',
|
||||
'PHUIDiffGraphView' => 'infrastructure/diff/view/PHUIDiffGraphView.php',
|
||||
'PHUIDiffGraphViewTestCase' => 'infrastructure/diff/view/__tests__/PHUIDiffGraphViewTestCase.php',
|
||||
'PHUIDiffInlineCommentDetailView' => 'infrastructure/diff/view/PHUIDiffInlineCommentDetailView.php',
|
||||
'PHUIDiffInlineCommentEditView' => 'infrastructure/diff/view/PHUIDiffInlineCommentEditView.php',
|
||||
'PHUIDiffInlineCommentRowScaffold' => 'infrastructure/diff/view/PHUIDiffInlineCommentRowScaffold.php',
|
||||
|
@ -1648,6 +1667,8 @@ phutil_register_library_map(array(
|
|||
'PHUISpacesNamespaceContextView' => 'applications/spaces/view/PHUISpacesNamespaceContextView.php',
|
||||
'PHUIStatusItemView' => 'view/phui/PHUIStatusItemView.php',
|
||||
'PHUIStatusListView' => 'view/phui/PHUIStatusListView.php',
|
||||
'PHUITabGroupView' => 'view/phui/PHUITabGroupView.php',
|
||||
'PHUITabView' => 'view/phui/PHUITabView.php',
|
||||
'PHUITagExample' => 'applications/uiexample/examples/PHUITagExample.php',
|
||||
'PHUITagView' => 'view/phui/PHUITagView.php',
|
||||
'PHUITimelineEventView' => 'view/phui/PHUITimelineEventView.php',
|
||||
|
@ -2849,6 +2870,7 @@ phutil_register_library_map(array(
|
|||
'PhabricatorOAuthServerTokenController' => 'applications/oauthserver/controller/PhabricatorOAuthServerTokenController.php',
|
||||
'PhabricatorOAuthServerTransaction' => 'applications/oauthserver/storage/PhabricatorOAuthServerTransaction.php',
|
||||
'PhabricatorOAuthServerTransactionQuery' => 'applications/oauthserver/query/PhabricatorOAuthServerTransactionQuery.php',
|
||||
'PhabricatorObjectGraph' => 'infrastructure/graph/PhabricatorObjectGraph.php',
|
||||
'PhabricatorObjectHandle' => 'applications/phid/PhabricatorObjectHandle.php',
|
||||
'PhabricatorObjectHasAsanaSubtaskEdgeType' => 'applications/doorkeeper/edge/PhabricatorObjectHasAsanaSubtaskEdgeType.php',
|
||||
'PhabricatorObjectHasAsanaTaskEdgeType' => 'applications/doorkeeper/edge/PhabricatorObjectHasAsanaTaskEdgeType.php',
|
||||
|
@ -2867,6 +2889,7 @@ phutil_register_library_map(array(
|
|||
'PhabricatorObjectQuery' => 'applications/phid/query/PhabricatorObjectQuery.php',
|
||||
'PhabricatorObjectRelationship' => 'applications/search/relationship/PhabricatorObjectRelationship.php',
|
||||
'PhabricatorObjectRelationshipList' => 'applications/search/relationship/PhabricatorObjectRelationshipList.php',
|
||||
'PhabricatorObjectRelationshipSource' => 'applications/search/relationship/PhabricatorObjectRelationshipSource.php',
|
||||
'PhabricatorObjectRemarkupRule' => 'infrastructure/markup/rule/PhabricatorObjectRemarkupRule.php',
|
||||
'PhabricatorObjectSelectorDialog' => 'view/control/PhabricatorObjectSelectorDialog.php',
|
||||
'PhabricatorOffsetPagedQuery' => 'infrastructure/query/PhabricatorOffsetPagedQuery.php',
|
||||
|
@ -3360,7 +3383,6 @@ phutil_register_library_map(array(
|
|||
'PhabricatorSearchApplication' => 'applications/search/application/PhabricatorSearchApplication.php',
|
||||
'PhabricatorSearchApplicationSearchEngine' => 'applications/search/query/PhabricatorSearchApplicationSearchEngine.php',
|
||||
'PhabricatorSearchApplicationStorageEnginePanel' => 'applications/search/applicationpanel/PhabricatorSearchApplicationStorageEnginePanel.php',
|
||||
'PhabricatorSearchAttachController' => 'applications/search/controller/PhabricatorSearchAttachController.php',
|
||||
'PhabricatorSearchBaseController' => 'applications/search/controller/PhabricatorSearchBaseController.php',
|
||||
'PhabricatorSearchCheckboxesField' => 'applications/search/field/PhabricatorSearchCheckboxesField.php',
|
||||
'PhabricatorSearchConfigOptions' => 'applications/search/config/PhabricatorSearchConfigOptions.php',
|
||||
|
@ -3397,12 +3419,12 @@ phutil_register_library_map(array(
|
|||
'PhabricatorSearchOrderField' => 'applications/search/field/PhabricatorSearchOrderField.php',
|
||||
'PhabricatorSearchRelationship' => 'applications/search/constants/PhabricatorSearchRelationship.php',
|
||||
'PhabricatorSearchRelationshipController' => 'applications/search/controller/PhabricatorSearchRelationshipController.php',
|
||||
'PhabricatorSearchRelationshipSourceController' => 'applications/search/controller/PhabricatorSearchRelationshipSourceController.php',
|
||||
'PhabricatorSearchResultBucket' => 'applications/search/buckets/PhabricatorSearchResultBucket.php',
|
||||
'PhabricatorSearchResultBucketGroup' => 'applications/search/buckets/PhabricatorSearchResultBucketGroup.php',
|
||||
'PhabricatorSearchResultView' => 'applications/search/view/PhabricatorSearchResultView.php',
|
||||
'PhabricatorSearchSchemaSpec' => 'applications/search/storage/PhabricatorSearchSchemaSpec.php',
|
||||
'PhabricatorSearchScopeSetting' => 'applications/settings/setting/PhabricatorSearchScopeSetting.php',
|
||||
'PhabricatorSearchSelectController' => 'applications/search/controller/PhabricatorSearchSelectController.php',
|
||||
'PhabricatorSearchSelectField' => 'applications/search/field/PhabricatorSearchSelectField.php',
|
||||
'PhabricatorSearchStringListField' => 'applications/search/field/PhabricatorSearchStringListField.php',
|
||||
'PhabricatorSearchSubscribersField' => 'applications/search/field/PhabricatorSearchSubscribersField.php',
|
||||
|
@ -3779,6 +3801,7 @@ phutil_register_library_map(array(
|
|||
'PhameBlogArchiveController' => 'applications/phame/controller/blog/PhameBlogArchiveController.php',
|
||||
'PhameBlogController' => 'applications/phame/controller/blog/PhameBlogController.php',
|
||||
'PhameBlogCreateCapability' => 'applications/phame/capability/PhameBlogCreateCapability.php',
|
||||
'PhameBlogDatasource' => 'applications/phame/typeahead/PhameBlogDatasource.php',
|
||||
'PhameBlogEditConduitAPIMethod' => 'applications/phame/conduit/PhameBlogEditConduitAPIMethod.php',
|
||||
'PhameBlogEditController' => 'applications/phame/controller/blog/PhameBlogEditController.php',
|
||||
'PhameBlogEditEngine' => 'applications/phame/editor/PhameBlogEditEngine.php',
|
||||
|
@ -3862,6 +3885,7 @@ phutil_register_library_map(array(
|
|||
'PholioMockEmbedView' => 'applications/pholio/view/PholioMockEmbedView.php',
|
||||
'PholioMockFulltextEngine' => 'applications/pholio/search/PholioMockFulltextEngine.php',
|
||||
'PholioMockHasTaskEdgeType' => 'applications/pholio/edge/PholioMockHasTaskEdgeType.php',
|
||||
'PholioMockHasTaskRelationship' => 'applications/pholio/relationships/PholioMockHasTaskRelationship.php',
|
||||
'PholioMockHeraldField' => 'applications/pholio/herald/PholioMockHeraldField.php',
|
||||
'PholioMockHeraldFieldGroup' => 'applications/pholio/herald/PholioMockHeraldFieldGroup.php',
|
||||
'PholioMockImagesView' => 'applications/pholio/view/PholioMockImagesView.php',
|
||||
|
@ -3870,6 +3894,8 @@ phutil_register_library_map(array(
|
|||
'PholioMockNameHeraldField' => 'applications/pholio/herald/PholioMockNameHeraldField.php',
|
||||
'PholioMockPHIDType' => 'applications/pholio/phid/PholioMockPHIDType.php',
|
||||
'PholioMockQuery' => 'applications/pholio/query/PholioMockQuery.php',
|
||||
'PholioMockRelationship' => 'applications/pholio/relationships/PholioMockRelationship.php',
|
||||
'PholioMockRelationshipSource' => 'applications/search/relationship/PholioMockRelationshipSource.php',
|
||||
'PholioMockSearchEngine' => 'applications/pholio/query/PholioMockSearchEngine.php',
|
||||
'PholioMockThumbGridView' => 'applications/pholio/view/PholioMockThumbGridView.php',
|
||||
'PholioMockViewController' => 'applications/pholio/controller/PholioMockViewController.php',
|
||||
|
@ -4703,6 +4729,7 @@ phutil_register_library_map(array(
|
|||
'DifferentialChangesetTwoUpRenderer' => 'DifferentialChangesetHTMLRenderer',
|
||||
'DifferentialChangesetTwoUpTestRenderer' => 'DifferentialChangesetTestRenderer',
|
||||
'DifferentialChangesetViewController' => 'DifferentialController',
|
||||
'DifferentialChildRevisionsField' => 'DifferentialCustomField',
|
||||
'DifferentialCloseConduitAPIMethod' => 'DifferentialConduitAPIMethod',
|
||||
'DifferentialCommentPreviewController' => 'DifferentialController',
|
||||
'DifferentialCommentSaveController' => 'DifferentialController',
|
||||
|
@ -4729,8 +4756,6 @@ phutil_register_library_map(array(
|
|||
'DifferentialCustomFieldStringIndex' => 'PhabricatorCustomFieldStringIndexStorage',
|
||||
'DifferentialDAO' => 'PhabricatorLiskDAO',
|
||||
'DifferentialDefaultViewCapability' => 'PhabricatorPolicyCapability',
|
||||
'DifferentialDependenciesField' => 'DifferentialCustomField',
|
||||
'DifferentialDependsOnField' => 'DifferentialCustomField',
|
||||
'DifferentialDiff' => array(
|
||||
'DifferentialDAO',
|
||||
'PhabricatorPolicyInterface',
|
||||
|
@ -4811,6 +4836,7 @@ phutil_register_library_map(array(
|
|||
'DifferentialManiphestTasksField' => 'DifferentialCoreCustomField',
|
||||
'DifferentialModernHunk' => 'DifferentialHunk',
|
||||
'DifferentialNextStepField' => 'DifferentialCustomField',
|
||||
'DifferentialParentRevisionsField' => 'DifferentialCustomField',
|
||||
'DifferentialParseCacheGarbageCollector' => 'PhabricatorGarbageCollector',
|
||||
'DifferentialParseCommitMessageConduitAPIMethod' => 'DifferentialConduitAPIMethod',
|
||||
'DifferentialParseRenderTestCase' => 'PhabricatorTestCase',
|
||||
|
@ -4872,9 +4898,14 @@ phutil_register_library_map(array(
|
|||
'DifferentialRevisionDependsOnRevisionEdgeType' => 'PhabricatorEdgeType',
|
||||
'DifferentialRevisionEditController' => 'DifferentialController',
|
||||
'DifferentialRevisionFulltextEngine' => 'PhabricatorFulltextEngine',
|
||||
'DifferentialRevisionGraph' => 'PhabricatorObjectGraph',
|
||||
'DifferentialRevisionHasChildRelationship' => 'DifferentialRevisionRelationship',
|
||||
'DifferentialRevisionHasCommitEdgeType' => 'PhabricatorEdgeType',
|
||||
'DifferentialRevisionHasCommitRelationship' => 'DifferentialRevisionRelationship',
|
||||
'DifferentialRevisionHasParentRelationship' => 'DifferentialRevisionRelationship',
|
||||
'DifferentialRevisionHasReviewerEdgeType' => 'PhabricatorEdgeType',
|
||||
'DifferentialRevisionHasTaskEdgeType' => 'PhabricatorEdgeType',
|
||||
'DifferentialRevisionHasTaskRelationship' => 'DifferentialRevisionRelationship',
|
||||
'DifferentialRevisionHeraldField' => 'HeraldField',
|
||||
'DifferentialRevisionHeraldFieldGroup' => 'HeraldFieldGroup',
|
||||
'DifferentialRevisionIDField' => 'DifferentialCustomField',
|
||||
|
@ -4887,6 +4918,8 @@ phutil_register_library_map(array(
|
|||
'DifferentialRevisionPackageHeraldField' => 'DifferentialRevisionHeraldField',
|
||||
'DifferentialRevisionPackageOwnerHeraldField' => 'DifferentialRevisionHeraldField',
|
||||
'DifferentialRevisionQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
|
||||
'DifferentialRevisionRelationship' => 'PhabricatorObjectRelationship',
|
||||
'DifferentialRevisionRelationshipSource' => 'PhabricatorObjectRelationshipSource',
|
||||
'DifferentialRevisionRepositoryHeraldField' => 'DifferentialRevisionHeraldField',
|
||||
'DifferentialRevisionRepositoryProjectsHeraldField' => 'DifferentialRevisionHeraldField',
|
||||
'DifferentialRevisionRequiredActionResultBucket' => 'DifferentialRevisionResultBucket',
|
||||
|
@ -4951,7 +4984,9 @@ phutil_register_library_map(array(
|
|||
'DiffusionCommitEditController' => 'DiffusionController',
|
||||
'DiffusionCommitFulltextEngine' => 'PhabricatorFulltextEngine',
|
||||
'DiffusionCommitHasRevisionEdgeType' => 'PhabricatorEdgeType',
|
||||
'DiffusionCommitHasRevisionRelationship' => 'DiffusionCommitRelationship',
|
||||
'DiffusionCommitHasTaskEdgeType' => 'PhabricatorEdgeType',
|
||||
'DiffusionCommitHasTaskRelationship' => 'DiffusionCommitRelationship',
|
||||
'DiffusionCommitHash' => 'Phobject',
|
||||
'DiffusionCommitHeraldField' => 'HeraldField',
|
||||
'DiffusionCommitHeraldFieldGroup' => 'HeraldFieldGroup',
|
||||
|
@ -4965,6 +5000,8 @@ phutil_register_library_map(array(
|
|||
'DiffusionCommitParentsQueryConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod',
|
||||
'DiffusionCommitQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
|
||||
'DiffusionCommitRef' => 'Phobject',
|
||||
'DiffusionCommitRelationship' => 'PhabricatorObjectRelationship',
|
||||
'DiffusionCommitRelationshipSource' => 'PhabricatorObjectRelationshipSource',
|
||||
'DiffusionCommitRemarkupRule' => 'PhabricatorObjectRemarkupRule',
|
||||
'DiffusionCommitRemarkupRuleTestCase' => 'PhabricatorTestCase',
|
||||
'DiffusionCommitRepositoryHeraldField' => 'DiffusionCommitHeraldField',
|
||||
|
@ -5903,6 +5940,7 @@ phutil_register_library_map(array(
|
|||
'ManiphestTaskAssigneeHeraldField' => 'ManiphestTaskHeraldField',
|
||||
'ManiphestTaskAuthorHeraldField' => 'ManiphestTaskHeraldField',
|
||||
'ManiphestTaskAuthorPolicyRule' => 'PhabricatorPolicyRule',
|
||||
'ManiphestTaskCloseAsDuplicateRelationship' => 'ManiphestTaskRelationship',
|
||||
'ManiphestTaskClosedStatusDatasource' => 'PhabricatorTypeaheadDatasource',
|
||||
'ManiphestTaskDependedOnByTaskEdgeType' => 'PhabricatorEdgeType',
|
||||
'ManiphestTaskDependsOnTaskEdgeType' => 'PhabricatorEdgeType',
|
||||
|
@ -5911,8 +5949,10 @@ phutil_register_library_map(array(
|
|||
'ManiphestTaskEditBulkJobType' => 'PhabricatorWorkerBulkJobType',
|
||||
'ManiphestTaskEditController' => 'ManiphestController',
|
||||
'ManiphestTaskFulltextEngine' => 'PhabricatorFulltextEngine',
|
||||
'ManiphestTaskGraph' => 'PhabricatorObjectGraph',
|
||||
'ManiphestTaskHasCommitEdgeType' => 'PhabricatorEdgeType',
|
||||
'ManiphestTaskHasCommitRelationship' => 'ManiphestTaskRelationship',
|
||||
'ManiphestTaskHasDuplicateTaskEdgeType' => 'PhabricatorEdgeType',
|
||||
'ManiphestTaskHasMockEdgeType' => 'PhabricatorEdgeType',
|
||||
'ManiphestTaskHasMockRelationship' => 'ManiphestTaskRelationship',
|
||||
'ManiphestTaskHasParentRelationship' => 'ManiphestTaskRelationship',
|
||||
|
@ -5921,10 +5961,12 @@ phutil_register_library_map(array(
|
|||
'ManiphestTaskHasSubtaskRelationship' => 'ManiphestTaskRelationship',
|
||||
'ManiphestTaskHeraldField' => 'HeraldField',
|
||||
'ManiphestTaskHeraldFieldGroup' => 'HeraldFieldGroup',
|
||||
'ManiphestTaskIsDuplicateOfTaskEdgeType' => 'PhabricatorEdgeType',
|
||||
'ManiphestTaskListController' => 'ManiphestController',
|
||||
'ManiphestTaskListHTTPParameterType' => 'AphrontListHTTPParameterType',
|
||||
'ManiphestTaskListView' => 'ManiphestView',
|
||||
'ManiphestTaskMailReceiver' => 'PhabricatorObjectMailReceiver',
|
||||
'ManiphestTaskMergeInRelationship' => 'ManiphestTaskRelationship',
|
||||
'ManiphestTaskOpenStatusDatasource' => 'PhabricatorTypeaheadDatasource',
|
||||
'ManiphestTaskPHIDResolver' => 'PhabricatorPHIDResolver',
|
||||
'ManiphestTaskPHIDType' => 'PhabricatorPHIDType',
|
||||
|
@ -5935,6 +5977,7 @@ phutil_register_library_map(array(
|
|||
'ManiphestTaskPriorityHeraldField' => 'ManiphestTaskHeraldField',
|
||||
'ManiphestTaskQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
|
||||
'ManiphestTaskRelationship' => 'PhabricatorObjectRelationship',
|
||||
'ManiphestTaskRelationshipSource' => 'PhabricatorObjectRelationshipSource',
|
||||
'ManiphestTaskResultListView' => 'ManiphestView',
|
||||
'ManiphestTaskSearchEngine' => 'PhabricatorApplicationSearchEngine',
|
||||
'ManiphestTaskStatus' => 'ManiphestConstants',
|
||||
|
@ -6096,6 +6139,8 @@ phutil_register_library_map(array(
|
|||
'PHUICurtainExtension' => 'Phobject',
|
||||
'PHUICurtainPanelView' => 'AphrontTagView',
|
||||
'PHUICurtainView' => 'AphrontTagView',
|
||||
'PHUIDiffGraphView' => 'Phobject',
|
||||
'PHUIDiffGraphViewTestCase' => 'PhabricatorTestCase',
|
||||
'PHUIDiffInlineCommentDetailView' => 'PHUIDiffInlineCommentView',
|
||||
'PHUIDiffInlineCommentEditView' => 'PHUIDiffInlineCommentView',
|
||||
'PHUIDiffInlineCommentRowScaffold' => 'AphrontView',
|
||||
|
@ -6160,6 +6205,8 @@ phutil_register_library_map(array(
|
|||
'PHUISpacesNamespaceContextView' => 'AphrontView',
|
||||
'PHUIStatusItemView' => 'AphrontTagView',
|
||||
'PHUIStatusListView' => 'AphrontTagView',
|
||||
'PHUITabGroupView' => 'AphrontTagView',
|
||||
'PHUITabView' => 'AphrontTagView',
|
||||
'PHUITagExample' => 'PhabricatorUIExample',
|
||||
'PHUITagView' => 'AphrontTagView',
|
||||
'PHUITimelineEventView' => 'AphrontView',
|
||||
|
@ -7540,6 +7587,7 @@ phutil_register_library_map(array(
|
|||
'PhabricatorOAuthServerTokenController' => 'PhabricatorOAuthServerController',
|
||||
'PhabricatorOAuthServerTransaction' => 'PhabricatorApplicationTransaction',
|
||||
'PhabricatorOAuthServerTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
|
||||
'PhabricatorObjectGraph' => 'AbstractDirectedGraph',
|
||||
'PhabricatorObjectHandle' => array(
|
||||
'Phobject',
|
||||
'PhabricatorPolicyInterface',
|
||||
|
@ -7561,6 +7609,7 @@ phutil_register_library_map(array(
|
|||
'PhabricatorObjectQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
|
||||
'PhabricatorObjectRelationship' => 'Phobject',
|
||||
'PhabricatorObjectRelationshipList' => 'Phobject',
|
||||
'PhabricatorObjectRelationshipSource' => 'Phobject',
|
||||
'PhabricatorObjectRemarkupRule' => 'PhutilRemarkupRule',
|
||||
'PhabricatorObjectSelectorDialog' => 'Phobject',
|
||||
'PhabricatorOffsetPagedQuery' => 'PhabricatorQuery',
|
||||
|
@ -8182,7 +8231,6 @@ phutil_register_library_map(array(
|
|||
'PhabricatorSearchApplication' => 'PhabricatorApplication',
|
||||
'PhabricatorSearchApplicationSearchEngine' => 'PhabricatorApplicationSearchEngine',
|
||||
'PhabricatorSearchApplicationStorageEnginePanel' => 'PhabricatorApplicationConfigurationPanel',
|
||||
'PhabricatorSearchAttachController' => 'PhabricatorSearchBaseController',
|
||||
'PhabricatorSearchBaseController' => 'PhabricatorController',
|
||||
'PhabricatorSearchCheckboxesField' => 'PhabricatorSearchField',
|
||||
'PhabricatorSearchConfigOptions' => 'PhabricatorApplicationConfigOptions',
|
||||
|
@ -8219,12 +8267,12 @@ phutil_register_library_map(array(
|
|||
'PhabricatorSearchOrderField' => 'PhabricatorSearchField',
|
||||
'PhabricatorSearchRelationship' => 'Phobject',
|
||||
'PhabricatorSearchRelationshipController' => 'PhabricatorSearchBaseController',
|
||||
'PhabricatorSearchRelationshipSourceController' => 'PhabricatorSearchBaseController',
|
||||
'PhabricatorSearchResultBucket' => 'Phobject',
|
||||
'PhabricatorSearchResultBucketGroup' => 'Phobject',
|
||||
'PhabricatorSearchResultView' => 'AphrontView',
|
||||
'PhabricatorSearchSchemaSpec' => 'PhabricatorConfigSchemaSpec',
|
||||
'PhabricatorSearchScopeSetting' => 'PhabricatorInternalSetting',
|
||||
'PhabricatorSearchSelectController' => 'PhabricatorSearchBaseController',
|
||||
'PhabricatorSearchSelectField' => 'PhabricatorSearchField',
|
||||
'PhabricatorSearchStringListField' => 'PhabricatorSearchField',
|
||||
'PhabricatorSearchSubscribersField' => 'PhabricatorSearchTokenizerField',
|
||||
|
@ -8665,6 +8713,7 @@ phutil_register_library_map(array(
|
|||
'PhameBlogArchiveController' => 'PhameBlogController',
|
||||
'PhameBlogController' => 'PhameController',
|
||||
'PhameBlogCreateCapability' => 'PhabricatorPolicyCapability',
|
||||
'PhameBlogDatasource' => 'PhabricatorTypeaheadDatasource',
|
||||
'PhameBlogEditConduitAPIMethod' => 'PhabricatorEditEngineAPIMethod',
|
||||
'PhameBlogEditController' => 'PhameBlogController',
|
||||
'PhameBlogEditEngine' => 'PhabricatorEditEngine',
|
||||
|
@ -8782,6 +8831,7 @@ phutil_register_library_map(array(
|
|||
'PholioMockEmbedView' => 'AphrontView',
|
||||
'PholioMockFulltextEngine' => 'PhabricatorFulltextEngine',
|
||||
'PholioMockHasTaskEdgeType' => 'PhabricatorEdgeType',
|
||||
'PholioMockHasTaskRelationship' => 'PholioMockRelationship',
|
||||
'PholioMockHeraldField' => 'HeraldField',
|
||||
'PholioMockHeraldFieldGroup' => 'HeraldFieldGroup',
|
||||
'PholioMockImagesView' => 'AphrontView',
|
||||
|
@ -8790,6 +8840,8 @@ phutil_register_library_map(array(
|
|||
'PholioMockNameHeraldField' => 'PholioMockHeraldField',
|
||||
'PholioMockPHIDType' => 'PhabricatorPHIDType',
|
||||
'PholioMockQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
|
||||
'PholioMockRelationship' => 'PhabricatorObjectRelationship',
|
||||
'PholioMockRelationshipSource' => 'PhabricatorObjectRelationshipSource',
|
||||
'PholioMockSearchEngine' => 'PhabricatorApplicationSearchEngine',
|
||||
'PholioMockThumbGridView' => 'AphrontView',
|
||||
'PholioMockViewController' => 'PholioController',
|
||||
|
|
|
@ -24,7 +24,10 @@ final class PhabricatorAuthRevokeTokenController
|
|||
}
|
||||
}
|
||||
|
||||
$panel_uri = '/settings/panel/tokens/';
|
||||
$panel_uri = id(new PhabricatorTokensSettingsPanel())
|
||||
->setViewer($viewer)
|
||||
->setUser($viewer)
|
||||
->getPanelURI();
|
||||
|
||||
if (!$tokens) {
|
||||
return $this->newDialog()
|
||||
|
|
|
@ -186,7 +186,7 @@ final class PhabricatorBadgesBadge extends PhabricatorBadgesDAO
|
|||
->execute();
|
||||
|
||||
foreach ($awards as $award) {
|
||||
$engine->destroyObjectPermanently($award);
|
||||
$engine->destroyObject($award);
|
||||
}
|
||||
|
||||
$this->openTransaction();
|
||||
|
|
|
@ -61,7 +61,7 @@ final class CeleritySpriteGenerator extends Phobject {
|
|||
'2x' => 2,
|
||||
);
|
||||
$template = id(new PhutilSprite())
|
||||
->setSourceSize(16, 16);
|
||||
->setSourceSize(18, 18);
|
||||
|
||||
$sprites = array();
|
||||
$prefix = 'tokens_';
|
||||
|
|
|
@ -25,6 +25,8 @@ abstract class PhabricatorConduitController extends PhabricatorController {
|
|||
}
|
||||
|
||||
protected function renderExampleBox(ConduitAPIMethod $method, $params) {
|
||||
$viewer = $this->getViewer();
|
||||
|
||||
$arc_example = id(new PHUIPropertyListView())
|
||||
->addRawContent($this->renderExample($method, 'arc', $params));
|
||||
|
||||
|
@ -34,10 +36,15 @@ abstract class PhabricatorConduitController extends PhabricatorController {
|
|||
$php_example = id(new PHUIPropertyListView())
|
||||
->addRawContent($this->renderExample($method, 'php', $params));
|
||||
|
||||
$panel_uri = id(new PhabricatorConduitTokensSettingsPanel())
|
||||
->setViewer($viewer)
|
||||
->setUser($viewer)
|
||||
->getPanelURI();
|
||||
|
||||
$panel_link = phutil_tag(
|
||||
'a',
|
||||
array(
|
||||
'href' => '/settings/panel/apitokens/',
|
||||
'href' => $panel_uri,
|
||||
),
|
||||
pht('Conduit API Tokens'));
|
||||
|
||||
|
@ -53,13 +60,28 @@ abstract class PhabricatorConduitController extends PhabricatorController {
|
|||
->setErrors($messages)
|
||||
->setSeverity(PHUIInfoView::SEVERITY_NOTICE);
|
||||
|
||||
$tab_group = id(new PHUITabGroupView())
|
||||
->addTab(
|
||||
id(new PHUITabView())
|
||||
->setName(pht('arc call-conduit'))
|
||||
->setKey('arc')
|
||||
->appendChild($arc_example))
|
||||
->addTab(
|
||||
id(new PHUITabView())
|
||||
->setName(pht('cURL'))
|
||||
->setKey('curl')
|
||||
->appendChild($curl_example))
|
||||
->addTab(
|
||||
id(new PHUITabView())
|
||||
->setName(pht('PHP'))
|
||||
->setKey('php')
|
||||
->appendChild($php_example));
|
||||
|
||||
return id(new PHUIObjectBoxView())
|
||||
->setHeaderText(pht('Examples'))
|
||||
->setInfoView($info_view)
|
||||
->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
|
||||
->addPropertyList($arc_example, pht('arc call-conduit'))
|
||||
->addPropertyList($curl_example, pht('cURL'))
|
||||
->addPropertyList($php_example, pht('PHP'));
|
||||
->addTabGroup($tab_group);
|
||||
}
|
||||
|
||||
private function renderExample(
|
||||
|
|
|
@ -49,11 +49,10 @@ final class PhabricatorConduitTokenEditController
|
|||
$submit_button = pht('Generate Token');
|
||||
}
|
||||
|
||||
if ($viewer->getPHID() == $object->getPHID()) {
|
||||
$panel_uri = '/settings/panel/apitokens/';
|
||||
} else {
|
||||
$panel_uri = '/settings/'.$object->getID().'/panel/apitokens/';
|
||||
}
|
||||
$panel_uri = id(new PhabricatorConduitTokensSettingsPanel())
|
||||
->setViewer($viewer)
|
||||
->setUser($object)
|
||||
->getPanelURI();
|
||||
|
||||
id(new PhabricatorAuthSessionEngine())->requireHighSecuritySession(
|
||||
$viewer,
|
||||
|
|
|
@ -31,7 +31,6 @@ final class PhabricatorConduitTokenTerminateController
|
|||
'Really terminate this token? Any system using this token '.
|
||||
'will no longer be able to make API requests.');
|
||||
$submit_button = pht('Terminate Token');
|
||||
$panel_uri = '/settings/panel/apitokens/';
|
||||
} else {
|
||||
$tokens = id(new PhabricatorConduitTokenQuery())
|
||||
->setViewer($viewer)
|
||||
|
@ -51,7 +50,6 @@ final class PhabricatorConduitTokenTerminateController
|
|||
$submit_button = pht('Terminate Tokens');
|
||||
}
|
||||
|
||||
$panel_uri = '/settings/panel/apitokens/';
|
||||
if ($object_phid != $viewer->getPHID()) {
|
||||
$object = id(new PhabricatorObjectQuery())
|
||||
->setViewer($viewer)
|
||||
|
@ -60,9 +58,15 @@ final class PhabricatorConduitTokenTerminateController
|
|||
if (!$object) {
|
||||
return new Aphront404Response();
|
||||
}
|
||||
$panel_uri = '/settings/'.$object->getID().'/panel/apitokens/';
|
||||
} else {
|
||||
$object = $viewer;
|
||||
}
|
||||
|
||||
$panel_uri = id(new PhabricatorConduitTokensSettingsPanel())
|
||||
->setViewer($viewer)
|
||||
->setUser($object)
|
||||
->getPanelURI();
|
||||
|
||||
id(new PhabricatorAuthSessionEngine())->requireHighSecuritySession(
|
||||
$viewer,
|
||||
$request,
|
||||
|
|
|
@ -206,6 +206,7 @@ final class DifferentialQueryConduitAPIMethod
|
|||
'statusName' =>
|
||||
ArcanistDifferentialRevisionStatus::getNameForRevisionStatus(
|
||||
$revision->getStatus()),
|
||||
'properties' => $revision->getProperties(),
|
||||
'branch' => $diff->getBranch(),
|
||||
'summary' => $revision->getSummary(),
|
||||
'testPlan' => $revision->getTestPlan(),
|
||||
|
|
|
@ -40,8 +40,8 @@ final class PhabricatorDifferentialConfigOptions
|
|||
new DifferentialViewPolicyField(),
|
||||
new DifferentialEditPolicyField(),
|
||||
|
||||
new DifferentialDependsOnField(),
|
||||
new DifferentialDependenciesField(),
|
||||
new DifferentialParentRevisionsField(),
|
||||
new DifferentialChildRevisionsField(),
|
||||
new DifferentialManiphestTasksField(),
|
||||
new DifferentialCommitsField(),
|
||||
|
||||
|
|
|
@ -28,8 +28,8 @@ abstract class DifferentialController extends PhabricatorController {
|
|||
$viewer = $this->getViewer();
|
||||
|
||||
$toc_view = id(new PHUIDiffTableOfContentsListView())
|
||||
->setUser($viewer)
|
||||
->setBackground(PHUIObjectBoxView::BLUE_PROPERTY);
|
||||
->setViewer($viewer)
|
||||
->setBare(true);
|
||||
|
||||
$have_owners = PhabricatorApplication::isClassInstalledForViewer(
|
||||
'PhabricatorOwnersApplication',
|
||||
|
|
|
@ -292,7 +292,7 @@ final class DifferentialRevisionViewController extends DifferentialController {
|
|||
'/differential/comment/inline/edit/'.$revision->getID().'/');
|
||||
}
|
||||
|
||||
$diff_history = id(new DifferentialRevisionUpdateHistoryView())
|
||||
$history = id(new DifferentialRevisionUpdateHistoryView())
|
||||
->setUser($viewer)
|
||||
->setDiffs($diffs)
|
||||
->setSelectedVersusDiffID($diff_vs)
|
||||
|
@ -300,7 +300,7 @@ final class DifferentialRevisionViewController extends DifferentialController {
|
|||
->setSelectedWhitespace($whitespace)
|
||||
->setCommitsForLinks($commits_for_links);
|
||||
|
||||
$local_view = id(new DifferentialLocalCommitsView())
|
||||
$local_table = id(new DifferentialLocalCommitsView())
|
||||
->setUser($viewer)
|
||||
->setLocalCommits(idx($props, 'local:commits'))
|
||||
->setCommitsForLinks($commits_for_links);
|
||||
|
@ -324,6 +324,69 @@ final class DifferentialRevisionViewController extends DifferentialController {
|
|||
$visible_changesets,
|
||||
$target->loadCoverageMap($viewer));
|
||||
|
||||
$tab_group = id(new PHUITabGroupView())
|
||||
->addTab(
|
||||
id(new PHUITabView())
|
||||
->setName(pht('Files'))
|
||||
->setKey('files')
|
||||
->appendChild($toc_view))
|
||||
->addTab(
|
||||
id(new PHUITabView())
|
||||
->setName(pht('History'))
|
||||
->setKey('history')
|
||||
->appendChild($history))
|
||||
->addTab(
|
||||
id(new PHUITabView())
|
||||
->setName(pht('Commits'))
|
||||
->setKey('commits')
|
||||
->appendChild($local_table));
|
||||
|
||||
$stack_graph = id(new DifferentialRevisionGraph())
|
||||
->setViewer($viewer)
|
||||
->setSeedPHID($revision->getPHID())
|
||||
->setLoadEntireGraph(true)
|
||||
->loadGraph();
|
||||
if (!$stack_graph->isEmpty()) {
|
||||
$stack_table = $stack_graph->newGraphTable();
|
||||
|
||||
$parent_type = DifferentialRevisionDependsOnRevisionEdgeType::EDGECONST;
|
||||
$reachable = $stack_graph->getReachableObjects($parent_type);
|
||||
|
||||
foreach ($reachable as $key => $reachable_revision) {
|
||||
if ($reachable_revision->isClosed()) {
|
||||
unset($reachable[$key]);
|
||||
}
|
||||
}
|
||||
|
||||
if ($reachable) {
|
||||
$stack_name = pht('Stack (%s Open)', phutil_count($reachable));
|
||||
$stack_color = PHUIListItemView::STATUS_FAIL;
|
||||
} else {
|
||||
$stack_name = pht('Stack');
|
||||
$stack_color = null;
|
||||
}
|
||||
|
||||
$tab_group->addTab(
|
||||
id(new PHUITabView())
|
||||
->setName($stack_name)
|
||||
->setKey('stack')
|
||||
->setColor($stack_color)
|
||||
->appendChild($stack_table));
|
||||
}
|
||||
|
||||
if ($other_view) {
|
||||
$tab_group->addTab(
|
||||
id(new PHUITabView())
|
||||
->setName(pht('Similar'))
|
||||
->setKey('similar')
|
||||
->appendChild($other_view));
|
||||
}
|
||||
|
||||
$tab_view = id(new PHUIObjectBoxView())
|
||||
->setHeaderText(pht('Revision Contents'))
|
||||
->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
|
||||
->addTabGroup($tab_group);
|
||||
|
||||
$comment_form = null;
|
||||
if (!$viewer_is_anonymous) {
|
||||
$comment_form = $this->buildCommentForm($revision, $field_list);
|
||||
|
@ -348,15 +411,16 @@ final class DifferentialRevisionViewController extends DifferentialController {
|
|||
'The content of this revision is hidden until the author has '.
|
||||
'signed all of the required legal agreements.'));
|
||||
} else {
|
||||
$footer[] =
|
||||
array(
|
||||
$diff_history,
|
||||
$warning,
|
||||
$local_view,
|
||||
$toc_view,
|
||||
$other_view,
|
||||
$changeset_view,
|
||||
);
|
||||
$anchor = id(new PhabricatorAnchorView())
|
||||
->setAnchorName('toc')
|
||||
->setNavigationMarker(true);
|
||||
|
||||
$footer[] = array(
|
||||
$anchor,
|
||||
$warning,
|
||||
$tab_view,
|
||||
$changeset_view,
|
||||
);
|
||||
}
|
||||
|
||||
if ($comment_form) {
|
||||
|
@ -516,28 +580,6 @@ final class DifferentialRevisionViewController extends DifferentialController {
|
|||
->setDisabled(!$can_edit)
|
||||
->setWorkflow(!$can_edit));
|
||||
|
||||
$this->requireResource('phabricator-object-selector-css');
|
||||
$this->requireResource('javelin-behavior-phabricator-object-selector');
|
||||
|
||||
$curtain->addAction(
|
||||
id(new PhabricatorActionView())
|
||||
->setIcon('fa-link')
|
||||
->setName(pht('Edit Dependencies'))
|
||||
->setHref("/search/attach/{$revision_phid}/DREV/dependencies/")
|
||||
->setWorkflow(true)
|
||||
->setDisabled(!$can_edit));
|
||||
|
||||
$maniphest = 'PhabricatorManiphestApplication';
|
||||
if (PhabricatorApplication::isClassInstalled($maniphest)) {
|
||||
$curtain->addAction(
|
||||
id(new PhabricatorActionView())
|
||||
->setIcon('fa-anchor')
|
||||
->setName(pht('Edit Maniphest Tasks'))
|
||||
->setHref("/search/attach/{$revision_phid}/TASK/")
|
||||
->setWorkflow(true)
|
||||
->setDisabled(!$can_edit));
|
||||
}
|
||||
|
||||
$request_uri = $this->getRequest()->getRequestURI();
|
||||
$curtain->addAction(
|
||||
id(new PhabricatorActionView())
|
||||
|
@ -545,6 +587,26 @@ final class DifferentialRevisionViewController extends DifferentialController {
|
|||
->setName(pht('Download Raw Diff'))
|
||||
->setHref($request_uri->alter('download', 'true')));
|
||||
|
||||
$relationship_list = PhabricatorObjectRelationshipList::newForObject(
|
||||
$viewer,
|
||||
$revision);
|
||||
|
||||
$revision_actions = array(
|
||||
DifferentialRevisionHasParentRelationship::RELATIONSHIPKEY,
|
||||
DifferentialRevisionHasChildRelationship::RELATIONSHIPKEY,
|
||||
);
|
||||
|
||||
$revision_submenu = $relationship_list->newActionSubmenu($revision_actions)
|
||||
->setName(pht('Edit Related Revisions...'))
|
||||
->setIcon('fa-cog');
|
||||
|
||||
$curtain->addAction($revision_submenu);
|
||||
|
||||
$relationship_submenu = $relationship_list->newActionMenu();
|
||||
if ($relationship_submenu) {
|
||||
$curtain->addAction($relationship_submenu);
|
||||
}
|
||||
|
||||
return $curtain;
|
||||
}
|
||||
|
||||
|
@ -872,9 +934,9 @@ final class DifferentialRevisionViewController extends DifferentialController {
|
|||
->setHeader(pht('Recent Similar Revisions'));
|
||||
|
||||
$view = id(new DifferentialRevisionListView())
|
||||
->setHeader($header)
|
||||
->setRevisions($revisions)
|
||||
->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
|
||||
->setNoBox(true)
|
||||
->setUser($viewer);
|
||||
|
||||
$phids = $view->getRequiredHandlePHIDs();
|
||||
|
@ -1033,28 +1095,26 @@ final class DifferentialRevisionViewController extends DifferentialController {
|
|||
);
|
||||
}
|
||||
|
||||
$box = id(new PHUIObjectBoxView())
|
||||
->setHeaderText(pht('Diff Detail'))
|
||||
->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
|
||||
->setUser($viewer);
|
||||
$tab_group = id(new PHUITabGroupView())
|
||||
->setHideSingleTab(true);
|
||||
|
||||
$last_tab = null;
|
||||
foreach ($property_lists as $key => $property_list) {
|
||||
list($tab_name, $list_view) = $property_list;
|
||||
|
||||
$tab = id(new PHUIListItemView())
|
||||
$tab = id(new PHUITabView())
|
||||
->setKey($key)
|
||||
->setName($tab_name);
|
||||
->setName($tab_name)
|
||||
->appendChild($list_view);
|
||||
|
||||
$box->addPropertyList($list_view, $tab);
|
||||
$last_tab = $tab;
|
||||
$tab_group->addTab($tab);
|
||||
$tab_group->selectTab($key);
|
||||
}
|
||||
|
||||
if ($last_tab) {
|
||||
$last_tab->setSelected(true);
|
||||
}
|
||||
|
||||
return $box;
|
||||
return id(new PHUIObjectBoxView())
|
||||
->setHeaderText(pht('Diff Detail'))
|
||||
->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
|
||||
->setUser($viewer)
|
||||
->addTabGroup($tab_group);
|
||||
}
|
||||
|
||||
private function buildDiffPropertyList(
|
||||
|
@ -1170,5 +1230,4 @@ final class DifferentialRevisionViewController extends DifferentialController {
|
|||
->setShowViewAll(true);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
<?php
|
||||
|
||||
final class DifferentialChildRevisionsField
|
||||
extends DifferentialCustomField {
|
||||
|
||||
public function getFieldKey() {
|
||||
return 'differential:dependencies';
|
||||
}
|
||||
|
||||
public function getFieldName() {
|
||||
return pht('Child Revisions');
|
||||
}
|
||||
|
||||
public function canDisableField() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public function getFieldDescription() {
|
||||
return pht('Lists revisions this one is depended on by.');
|
||||
}
|
||||
|
||||
}
|
|
@ -1,40 +0,0 @@
|
|||
<?php
|
||||
|
||||
final class DifferentialDependenciesField
|
||||
extends DifferentialCustomField {
|
||||
|
||||
public function getFieldKey() {
|
||||
return 'differential:dependencies';
|
||||
}
|
||||
|
||||
public function getFieldName() {
|
||||
return pht('Dependencies');
|
||||
}
|
||||
|
||||
public function canDisableField() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public function getFieldDescription() {
|
||||
return pht('Lists revisions this one is depended on by.');
|
||||
}
|
||||
|
||||
public function shouldAppearInPropertyView() {
|
||||
return true;
|
||||
}
|
||||
|
||||
public function renderPropertyViewLabel() {
|
||||
return $this->getFieldName();
|
||||
}
|
||||
|
||||
public function getRequiredHandlePHIDsForPropertyView() {
|
||||
return PhabricatorEdgeQuery::loadDestinationPHIDs(
|
||||
$this->getObject()->getPHID(),
|
||||
DifferentialRevisionDependedOnByRevisionEdgeType::EDGECONST);
|
||||
}
|
||||
|
||||
public function renderPropertyViewValue(array $handles) {
|
||||
return $this->renderHandleList($handles);
|
||||
}
|
||||
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
<?php
|
||||
|
||||
final class DifferentialDependsOnField
|
||||
final class DifferentialParentRevisionsField
|
||||
extends DifferentialCustomField {
|
||||
|
||||
public function getFieldKey() {
|
||||
|
@ -12,7 +12,7 @@ final class DifferentialDependsOnField
|
|||
}
|
||||
|
||||
public function getFieldName() {
|
||||
return pht('Depends On');
|
||||
return pht('Parent Revisions');
|
||||
}
|
||||
|
||||
public function canDisableField() {
|
||||
|
@ -23,24 +23,6 @@ final class DifferentialDependsOnField
|
|||
return pht('Lists revisions this one depends on.');
|
||||
}
|
||||
|
||||
public function shouldAppearInPropertyView() {
|
||||
return true;
|
||||
}
|
||||
|
||||
public function renderPropertyViewLabel() {
|
||||
return $this->getFieldName();
|
||||
}
|
||||
|
||||
public function getRequiredHandlePHIDsForPropertyView() {
|
||||
return PhabricatorEdgeQuery::loadDestinationPHIDs(
|
||||
$this->getObject()->getPHID(),
|
||||
DifferentialRevisionDependsOnRevisionEdgeType::EDGECONST);
|
||||
}
|
||||
|
||||
public function renderPropertyViewValue(array $handles) {
|
||||
return $this->renderHandleList($handles);
|
||||
}
|
||||
|
||||
public function getProTips() {
|
||||
return array(
|
||||
pht(
|
|
@ -182,6 +182,7 @@ final class DifferentialTransactionEditor
|
|||
$status_revision = ArcanistDifferentialRevisionStatus::NEEDS_REVISION;
|
||||
$status_plan = ArcanistDifferentialRevisionStatus::CHANGES_PLANNED;
|
||||
$status_abandoned = ArcanistDifferentialRevisionStatus::ABANDONED;
|
||||
$status_accepted = ArcanistDifferentialRevisionStatus::ACCEPTED;
|
||||
|
||||
switch ($xaction->getTransactionType()) {
|
||||
case DifferentialTransaction::TYPE_INLINE:
|
||||
|
@ -233,7 +234,12 @@ final class DifferentialTransactionEditor
|
|||
$object->setStatus($status_review);
|
||||
return;
|
||||
case DifferentialAction::ACTION_CLOSE:
|
||||
$old_status = $object->getStatus();
|
||||
$object->setStatus(ArcanistDifferentialRevisionStatus::CLOSED);
|
||||
$was_accepted = ($old_status == $status_accepted);
|
||||
$object->setProperty(
|
||||
DifferentialRevision::PROPERTY_CLOSED_FROM_ACCEPTED,
|
||||
$was_accepted);
|
||||
return;
|
||||
case DifferentialAction::ACTION_CLAIM:
|
||||
$object->setAuthorPHID($this->getActingAsPHID());
|
||||
|
|
|
@ -0,0 +1,44 @@
|
|||
<?php
|
||||
|
||||
final class DifferentialRevisionHasChildRelationship
|
||||
extends DifferentialRevisionRelationship {
|
||||
|
||||
const RELATIONSHIPKEY = 'revision.has-child';
|
||||
|
||||
public function getEdgeConstant() {
|
||||
return DifferentialRevisionDependedOnByRevisionEdgeType::EDGECONST;
|
||||
}
|
||||
|
||||
protected function getActionName() {
|
||||
return pht('Edit Child Revisions');
|
||||
}
|
||||
|
||||
protected function getActionIcon() {
|
||||
return 'fa-chevron-circle-down';
|
||||
}
|
||||
|
||||
public function canRelateObjects($src, $dst) {
|
||||
return ($dst instanceof DifferentialRevision);
|
||||
}
|
||||
|
||||
public function shouldAppearInActionMenu() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public function getDialogTitleText() {
|
||||
return pht('Edit Child Revisions');
|
||||
}
|
||||
|
||||
public function getDialogHeaderText() {
|
||||
return pht('Current Child Revisions');
|
||||
}
|
||||
|
||||
public function getDialogButtonText() {
|
||||
return pht('Save Child Revisions');
|
||||
}
|
||||
|
||||
protected function newRelationshipSource() {
|
||||
return new DifferentialRevisionRelationshipSource();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,40 @@
|
|||
<?php
|
||||
|
||||
final class DifferentialRevisionHasCommitRelationship
|
||||
extends DifferentialRevisionRelationship {
|
||||
|
||||
const RELATIONSHIPKEY = 'revision.has-commit';
|
||||
|
||||
public function getEdgeConstant() {
|
||||
return DifferentialRevisionHasCommitEdgeType::EDGECONST;
|
||||
}
|
||||
|
||||
protected function getActionName() {
|
||||
return pht('Edit Commits');
|
||||
}
|
||||
|
||||
protected function getActionIcon() {
|
||||
return 'fa-code';
|
||||
}
|
||||
|
||||
public function canRelateObjects($src, $dst) {
|
||||
return ($dst instanceof PhabricatorRepositoryCommit);
|
||||
}
|
||||
|
||||
public function getDialogTitleText() {
|
||||
return pht('Edit Related Commits');
|
||||
}
|
||||
|
||||
public function getDialogHeaderText() {
|
||||
return pht('Current Commits');
|
||||
}
|
||||
|
||||
public function getDialogButtonText() {
|
||||
return pht('Save Related Commits');
|
||||
}
|
||||
|
||||
protected function newRelationshipSource() {
|
||||
return new DiffusionCommitRelationshipSource();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,44 @@
|
|||
<?php
|
||||
|
||||
final class DifferentialRevisionHasParentRelationship
|
||||
extends DifferentialRevisionRelationship {
|
||||
|
||||
const RELATIONSHIPKEY = 'revision.has-parent';
|
||||
|
||||
public function getEdgeConstant() {
|
||||
return DifferentialRevisionDependsOnRevisionEdgeType::EDGECONST;
|
||||
}
|
||||
|
||||
protected function getActionName() {
|
||||
return pht('Edit Parent Revisions');
|
||||
}
|
||||
|
||||
protected function getActionIcon() {
|
||||
return 'fa-chevron-circle-up';
|
||||
}
|
||||
|
||||
public function canRelateObjects($src, $dst) {
|
||||
return ($dst instanceof DifferentialRevision);
|
||||
}
|
||||
|
||||
public function shouldAppearInActionMenu() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public function getDialogTitleText() {
|
||||
return pht('Edit Parent Revisions');
|
||||
}
|
||||
|
||||
public function getDialogHeaderText() {
|
||||
return pht('Current Parent Revisions');
|
||||
}
|
||||
|
||||
public function getDialogButtonText() {
|
||||
return pht('Save Parent Revisions');
|
||||
}
|
||||
|
||||
protected function newRelationshipSource() {
|
||||
return new DifferentialRevisionRelationshipSource();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,40 @@
|
|||
<?php
|
||||
|
||||
final class DifferentialRevisionHasTaskRelationship
|
||||
extends DifferentialRevisionRelationship {
|
||||
|
||||
const RELATIONSHIPKEY = 'revision.has-task';
|
||||
|
||||
public function getEdgeConstant() {
|
||||
return DifferentialRevisionHasTaskEdgeType::EDGECONST;
|
||||
}
|
||||
|
||||
protected function getActionName() {
|
||||
return pht('Edit Tasks');
|
||||
}
|
||||
|
||||
protected function getActionIcon() {
|
||||
return 'fa-anchor';
|
||||
}
|
||||
|
||||
public function canRelateObjects($src, $dst) {
|
||||
return ($dst instanceof ManiphestTask);
|
||||
}
|
||||
|
||||
public function getDialogTitleText() {
|
||||
return pht('Edit Related Tasks');
|
||||
}
|
||||
|
||||
public function getDialogHeaderText() {
|
||||
return pht('Current Tasks');
|
||||
}
|
||||
|
||||
public function getDialogButtonText() {
|
||||
return pht('Save Related Tasks');
|
||||
}
|
||||
|
||||
protected function newRelationshipSource() {
|
||||
return new ManiphestTaskRelationshipSource();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
<?php
|
||||
|
||||
abstract class DifferentialRevisionRelationship
|
||||
extends PhabricatorObjectRelationship {
|
||||
|
||||
public function isEnabledForObject($object) {
|
||||
$viewer = $this->getViewer();
|
||||
|
||||
$has_app = PhabricatorApplication::isClassInstalledForViewer(
|
||||
'PhabricatorDifferentialApplication',
|
||||
$viewer);
|
||||
if (!$has_app) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return ($object instanceof DifferentialRevision);
|
||||
}
|
||||
|
||||
}
|
|
@ -35,6 +35,7 @@ final class DifferentialRevision extends DifferentialDAO
|
|||
protected $repositoryPHID;
|
||||
protected $viewPolicy = PhabricatorPolicies::POLICY_USER;
|
||||
protected $editPolicy = PhabricatorPolicies::POLICY_USER;
|
||||
protected $properties = array();
|
||||
|
||||
private $relationships = self::ATTACHABLE;
|
||||
private $commits = self::ATTACHABLE;
|
||||
|
@ -53,6 +54,8 @@ final class DifferentialRevision extends DifferentialDAO
|
|||
const RELATION_REVIEWER = 'revw';
|
||||
const RELATION_SUBSCRIBED = 'subd';
|
||||
|
||||
const PROPERTY_CLOSED_FROM_ACCEPTED = 'wasAcceptedBeforeClose';
|
||||
|
||||
public static function initializeNewRevision(PhabricatorUser $actor) {
|
||||
$app = id(new PhabricatorApplicationQuery())
|
||||
->setViewer($actor)
|
||||
|
@ -76,6 +79,7 @@ final class DifferentialRevision extends DifferentialDAO
|
|||
self::CONFIG_SERIALIZATION => array(
|
||||
'attached' => self::SERIALIZATION_JSON,
|
||||
'unsubscribed' => self::SERIALIZATION_JSON,
|
||||
'properties' => self::SERIALIZATION_JSON,
|
||||
),
|
||||
self::CONFIG_COLUMN_SCHEMA => array(
|
||||
'title' => 'text255',
|
||||
|
@ -114,11 +118,28 @@ final class DifferentialRevision extends DifferentialDAO
|
|||
) + parent::getConfiguration();
|
||||
}
|
||||
|
||||
public function setProperty($key, $value) {
|
||||
$this->properties[$key] = $value;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getProperty($key, $default = null) {
|
||||
return idx($this->properties, $key, $default);
|
||||
}
|
||||
|
||||
public function hasRevisionProperty($key) {
|
||||
return array_key_exists($key, $this->properties);
|
||||
}
|
||||
|
||||
public function getMonogram() {
|
||||
$id = $this->getID();
|
||||
return "D{$id}";
|
||||
}
|
||||
|
||||
public function getURI() {
|
||||
return '/'.$this->getMonogram();
|
||||
}
|
||||
|
||||
public function setTitle($title) {
|
||||
$this->title = $title;
|
||||
if (!$this->getID()) {
|
||||
|
@ -409,6 +430,31 @@ final class DifferentialRevision extends DifferentialDAO
|
|||
return DifferentialRevisionStatus::isClosedStatus($this->getStatus());
|
||||
}
|
||||
|
||||
public function getStatusIcon() {
|
||||
$map = array(
|
||||
ArcanistDifferentialRevisionStatus::NEEDS_REVIEW
|
||||
=> 'fa-code grey',
|
||||
ArcanistDifferentialRevisionStatus::NEEDS_REVISION
|
||||
=> 'fa-refresh red',
|
||||
ArcanistDifferentialRevisionStatus::CHANGES_PLANNED
|
||||
=> 'fa-headphones red',
|
||||
ArcanistDifferentialRevisionStatus::ACCEPTED
|
||||
=> 'fa-check green',
|
||||
ArcanistDifferentialRevisionStatus::CLOSED
|
||||
=> 'fa-check-square-o black',
|
||||
ArcanistDifferentialRevisionStatus::ABANDONED
|
||||
=> 'fa-plane black',
|
||||
);
|
||||
|
||||
return idx($map, $this->getStatus());
|
||||
}
|
||||
|
||||
public function getStatusDisplayName() {
|
||||
$status = $this->getStatus();
|
||||
return ArcanistDifferentialRevisionStatus::getNameForRevisionStatus(
|
||||
$status);
|
||||
}
|
||||
|
||||
public function getFlag(PhabricatorUser $viewer) {
|
||||
return $this->assertAttachedKey($this->flags, $viewer->getPHID());
|
||||
}
|
||||
|
|
|
@ -125,10 +125,7 @@ final class DifferentialLocalCommitsView extends AphrontView {
|
|||
$headers[] = pht('Date');
|
||||
$table->setHeaders($headers);
|
||||
|
||||
return id(new PHUIObjectBoxView())
|
||||
->setHeaderText(pht('Local Commits'))
|
||||
->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
|
||||
->setTable($table);
|
||||
return $table;
|
||||
}
|
||||
|
||||
private static function formatCommit($commit) {
|
||||
|
|
|
@ -104,10 +104,6 @@ final class DifferentialRevisionListView extends AphrontView {
|
|||
|
||||
$modified = $revision->getDateModified();
|
||||
|
||||
$status = $revision->getStatus();
|
||||
$status_name =
|
||||
ArcanistDifferentialRevisionStatus::getNameForRevisionStatus($status);
|
||||
|
||||
if (isset($icons['flag'])) {
|
||||
$item->addHeadIcon($icons['flag']);
|
||||
}
|
||||
|
@ -155,29 +151,14 @@ final class DifferentialRevisionListView extends AphrontView {
|
|||
$item->addAttribute(pht('Reviewers: %s', $reviewers));
|
||||
$item->setEpoch($revision->getDateModified());
|
||||
|
||||
switch ($status) {
|
||||
case ArcanistDifferentialRevisionStatus::NEEDS_REVIEW:
|
||||
$item->setStatusIcon('fa-code grey', pht('Needs Review'));
|
||||
break;
|
||||
case ArcanistDifferentialRevisionStatus::NEEDS_REVISION:
|
||||
$item->setStatusIcon('fa-refresh red', pht('Needs Revision'));
|
||||
break;
|
||||
case ArcanistDifferentialRevisionStatus::CHANGES_PLANNED:
|
||||
$item->setStatusIcon('fa-headphones red', pht('Changes Planned'));
|
||||
break;
|
||||
case ArcanistDifferentialRevisionStatus::ACCEPTED:
|
||||
$item->setStatusIcon('fa-check green', pht('Accepted'));
|
||||
break;
|
||||
case ArcanistDifferentialRevisionStatus::CLOSED:
|
||||
$item->setDisabled(true);
|
||||
$item->setStatusIcon('fa-check-square-o black', pht('Closed'));
|
||||
break;
|
||||
case ArcanistDifferentialRevisionStatus::ABANDONED:
|
||||
$item->setDisabled(true);
|
||||
$item->setStatusIcon('fa-plane black', pht('Abandoned'));
|
||||
break;
|
||||
if ($revision->isClosed()) {
|
||||
$item->setDisabled(true);
|
||||
}
|
||||
|
||||
$item->setStatusIcon(
|
||||
$revision->getStatusIcon(),
|
||||
$revision->getStatusDisplayName());
|
||||
|
||||
$list->addItem($item);
|
||||
}
|
||||
|
||||
|
|
|
@ -303,10 +303,7 @@ final class DifferentialRevisionUpdateHistoryView extends AphrontView {
|
|||
$show_diff,
|
||||
));
|
||||
|
||||
return id(new PHUIObjectBoxView())
|
||||
->setHeaderText(pht('Revision Update History'))
|
||||
->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
|
||||
->setTable($content);
|
||||
return $content;
|
||||
}
|
||||
|
||||
const STAR_NONE = 'none';
|
||||
|
|
|
@ -968,26 +968,21 @@ final class DiffusionCommitController extends DiffusionController {
|
|||
->setWorkflow(!$can_edit);
|
||||
$curtain->addAction($action);
|
||||
|
||||
require_celerity_resource('phabricator-object-selector-css');
|
||||
require_celerity_resource('javelin-behavior-phabricator-object-selector');
|
||||
|
||||
$maniphest = 'PhabricatorManiphestApplication';
|
||||
if (PhabricatorApplication::isClassInstalled($maniphest)) {
|
||||
$action = id(new PhabricatorActionView())
|
||||
->setName(pht('Edit Maniphest Tasks'))
|
||||
->setIcon('fa-anchor')
|
||||
->setHref('/search/attach/'.$commit->getPHID().'/TASK/edge/')
|
||||
->setWorkflow(true)
|
||||
->setDisabled(!$can_edit);
|
||||
$curtain->addAction($action);
|
||||
}
|
||||
|
||||
$action = id(new PhabricatorActionView())
|
||||
->setName(pht('Download Raw Diff'))
|
||||
->setHref($request->getRequestURI()->alter('diff', true))
|
||||
->setIcon('fa-download');
|
||||
$curtain->addAction($action);
|
||||
|
||||
$relationship_list = PhabricatorObjectRelationshipList::newForObject(
|
||||
$viewer,
|
||||
$commit);
|
||||
|
||||
$relationship_submenu = $relationship_list->newActionMenu();
|
||||
if ($relationship_submenu) {
|
||||
$curtain->addAction($relationship_submenu);
|
||||
}
|
||||
|
||||
return $curtain;
|
||||
}
|
||||
|
||||
|
|
|
@ -19,10 +19,31 @@ final class DiffusionCommitRevisionAcceptedHeraldField
|
|||
return null;
|
||||
}
|
||||
|
||||
$status = $revision->getStatus();
|
||||
|
||||
switch ($status) {
|
||||
case ArcanistDifferentialRevisionStatus::ACCEPTED:
|
||||
return $revision->getPHID();
|
||||
case ArcanistDifferentialRevisionStatus::CLOSED:
|
||||
if ($revision->hasRevisionProperty(
|
||||
DifferentialRevision::PROPERTY_CLOSED_FROM_ACCEPTED)) {
|
||||
|
||||
if ($revision->getProperty(
|
||||
DifferentialRevision::PROPERTY_CLOSED_FROM_ACCEPTED)) {
|
||||
return $revision->getPHID();
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
} else {
|
||||
// continue on to old-style precommitRevisionStatus
|
||||
break;
|
||||
}
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
|
||||
$data = $object->getCommitData();
|
||||
$status = $data->getCommitDetail(
|
||||
'precommitRevisionStatus',
|
||||
$revision->getStatus());
|
||||
$status = $data->getCommitDetail('precommitRevisionStatus');
|
||||
|
||||
switch ($status) {
|
||||
case ArcanistDifferentialRevisionStatus::ACCEPTED:
|
||||
|
|
|
@ -20,12 +20,19 @@ final class DiffusionPreCommitContentRevisionAcceptedHeraldField
|
|||
return null;
|
||||
}
|
||||
|
||||
$status_accepted = ArcanistDifferentialRevisionStatus::ACCEPTED;
|
||||
if ($revision->getStatus() != $status_accepted) {
|
||||
return null;
|
||||
switch ($revision->getStatus()) {
|
||||
case ArcanistDifferentialRevisionStatus::ACCEPTED:
|
||||
return $revision->getPHID();
|
||||
case ArcanistDifferentialRevisionStatus::CLOSED:
|
||||
if ($revision->getProperty(
|
||||
DifferentialRevision::PROPERTY_CLOSED_FROM_ACCEPTED)) {
|
||||
|
||||
return $revision->getPHID();
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return $revision->getPHID();
|
||||
return null;
|
||||
}
|
||||
|
||||
protected function getHeraldFieldStandardType() {
|
||||
|
|
|
@ -0,0 +1,40 @@
|
|||
<?php
|
||||
|
||||
final class DiffusionCommitHasRevisionRelationship
|
||||
extends DiffusionCommitRelationship {
|
||||
|
||||
const RELATIONSHIPKEY = 'commit.has-revision';
|
||||
|
||||
public function getEdgeConstant() {
|
||||
return DiffusionCommitHasRevisionEdgeType::EDGECONST;
|
||||
}
|
||||
|
||||
protected function getActionName() {
|
||||
return pht('Edit Revisions');
|
||||
}
|
||||
|
||||
protected function getActionIcon() {
|
||||
return 'fa-cog';
|
||||
}
|
||||
|
||||
public function canRelateObjects($src, $dst) {
|
||||
return ($dst instanceof DifferentialRevision);
|
||||
}
|
||||
|
||||
public function getDialogTitleText() {
|
||||
return pht('Edit Related Revisions');
|
||||
}
|
||||
|
||||
public function getDialogHeaderText() {
|
||||
return pht('Current Revisions');
|
||||
}
|
||||
|
||||
public function getDialogButtonText() {
|
||||
return pht('Save Related Revisions');
|
||||
}
|
||||
|
||||
protected function newRelationshipSource() {
|
||||
return new DifferentialRevisionRelationshipSource();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,40 @@
|
|||
<?php
|
||||
|
||||
final class DiffusionCommitHasTaskRelationship
|
||||
extends DiffusionCommitRelationship {
|
||||
|
||||
const RELATIONSHIPKEY = 'commit.has-task';
|
||||
|
||||
public function getEdgeConstant() {
|
||||
return DiffusionCommitHasTaskEdgeType::EDGECONST;
|
||||
}
|
||||
|
||||
protected function getActionName() {
|
||||
return pht('Edit Tasks');
|
||||
}
|
||||
|
||||
protected function getActionIcon() {
|
||||
return 'fa-anchor';
|
||||
}
|
||||
|
||||
public function canRelateObjects($src, $dst) {
|
||||
return ($dst instanceof ManiphestTask);
|
||||
}
|
||||
|
||||
public function getDialogTitleText() {
|
||||
return pht('Edit Related Tasks');
|
||||
}
|
||||
|
||||
public function getDialogHeaderText() {
|
||||
return pht('Current Tasks');
|
||||
}
|
||||
|
||||
public function getDialogButtonText() {
|
||||
return pht('Save Related Tasks');
|
||||
}
|
||||
|
||||
protected function newRelationshipSource() {
|
||||
return new ManiphestTaskRelationshipSource();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
<?php
|
||||
|
||||
abstract class DiffusionCommitRelationship
|
||||
extends PhabricatorObjectRelationship {
|
||||
|
||||
public function isEnabledForObject($object) {
|
||||
$viewer = $this->getViewer();
|
||||
|
||||
$has_app = PhabricatorApplication::isClassInstalledForViewer(
|
||||
'PhabricatorDiffusionApplication',
|
||||
$viewer);
|
||||
if (!$has_app) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return ($object instanceof PhabricatorRepositoryCommit);
|
||||
}
|
||||
|
||||
}
|
|
@ -82,7 +82,10 @@ final class DiffusionHistoryTableView extends DiffusionView {
|
|||
|
||||
$graph = null;
|
||||
if ($this->parents) {
|
||||
$graph = $this->renderGraph();
|
||||
$graph = id(new PHUIDiffGraphView())
|
||||
->setIsHead($this->isHead)
|
||||
->setIsTail($this->isTail)
|
||||
->renderGraph($this->parents);
|
||||
}
|
||||
|
||||
$show_builds = PhabricatorApplication::isClassInstalledForViewer(
|
||||
|
@ -219,166 +222,4 @@ final class DiffusionHistoryTableView extends DiffusionView {
|
|||
return $view->render();
|
||||
}
|
||||
|
||||
/**
|
||||
* Draw a merge/branch graph from the parent revision data. We're basically
|
||||
* building up a bunch of strings like this:
|
||||
*
|
||||
* ^
|
||||
* |^
|
||||
* o|
|
||||
* |o
|
||||
* o
|
||||
*
|
||||
* ...which form an ASCII representation of the graph we eventually want to
|
||||
* draw.
|
||||
*
|
||||
* NOTE: The actual implementation is black magic.
|
||||
*/
|
||||
private function renderGraph() {
|
||||
// This keeps our accumulated information about each line of the
|
||||
// merge/branch graph.
|
||||
$graph = array();
|
||||
|
||||
// This holds the next commit we're looking for in each column of the
|
||||
// graph.
|
||||
$threads = array();
|
||||
|
||||
// This is the largest number of columns any row has, i.e. the width of
|
||||
// the graph.
|
||||
$count = 0;
|
||||
|
||||
foreach ($this->history as $key => $history) {
|
||||
$joins = array();
|
||||
$splits = array();
|
||||
|
||||
$parent_list = $this->parents[$history->getCommitIdentifier()];
|
||||
|
||||
// Look for some thread which has this commit as the next commit. If
|
||||
// we find one, this commit goes on that thread. Otherwise, this commit
|
||||
// goes on a new thread.
|
||||
|
||||
$line = '';
|
||||
$found = false;
|
||||
$pos = count($threads);
|
||||
for ($n = 0; $n < $count; $n++) {
|
||||
if (empty($threads[$n])) {
|
||||
$line .= ' ';
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($threads[$n] == $history->getCommitIdentifier()) {
|
||||
if ($found) {
|
||||
$line .= ' ';
|
||||
$joins[] = $n;
|
||||
unset($threads[$n]);
|
||||
} else {
|
||||
$line .= 'o';
|
||||
$found = true;
|
||||
$pos = $n;
|
||||
}
|
||||
} else {
|
||||
|
||||
// We render a "|" for any threads which have a commit that we haven't
|
||||
// seen yet, this is later drawn as a vertical line.
|
||||
$line .= '|';
|
||||
}
|
||||
}
|
||||
|
||||
// If we didn't find the thread this commit goes on, start a new thread.
|
||||
// We use "o" to mark the commit for the rendering engine, or "^" to
|
||||
// indicate that there's nothing after it so the line from the commit
|
||||
// upward should not be drawn.
|
||||
|
||||
if (!$found) {
|
||||
if ($this->isHead) {
|
||||
$line .= '^';
|
||||
} else {
|
||||
$line .= 'o';
|
||||
foreach ($graph as $k => $meta) {
|
||||
// Go back across all the lines we've already drawn and add a
|
||||
// "|" to the end, since this is connected to some future commit
|
||||
// we don't know about.
|
||||
for ($jj = strlen($meta['line']); $jj <= $count; $jj++) {
|
||||
$graph[$k]['line'] .= '|';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Update the next commit on this thread to the commit's first parent.
|
||||
// This might have the effect of making a new thread.
|
||||
$threads[$pos] = head($parent_list);
|
||||
|
||||
// If we made a new thread, increase the thread count.
|
||||
$count = max($pos + 1, $count);
|
||||
|
||||
// Now, deal with splits (merges). I picked this terms opposite to the
|
||||
// underlying repository term to confuse you.
|
||||
foreach (array_slice($parent_list, 1) as $parent) {
|
||||
$found = false;
|
||||
|
||||
// Try to find the other parent(s) in our existing threads. If we find
|
||||
// them, split to that thread.
|
||||
|
||||
foreach ($threads as $idx => $thread_commit) {
|
||||
if ($thread_commit == $parent) {
|
||||
$found = true;
|
||||
$splits[] = $idx;
|
||||
}
|
||||
}
|
||||
|
||||
// If we didn't find the parent, we don't know about it yet. Find the
|
||||
// first free thread and add it as the "next" commit in that thread.
|
||||
// This might create a new thread.
|
||||
|
||||
if (!$found) {
|
||||
for ($n = 0; $n < $count; $n++) {
|
||||
if (empty($threads[$n])) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
$threads[$n] = $parent;
|
||||
$splits[] = $n;
|
||||
$count = max($n + 1, $count);
|
||||
}
|
||||
}
|
||||
|
||||
$graph[] = array(
|
||||
'line' => $line,
|
||||
'split' => $splits,
|
||||
'join' => $joins,
|
||||
);
|
||||
}
|
||||
|
||||
// If this is the last page in history, replace the "o" with an "x" so we
|
||||
// do not draw a connecting line downward, and replace "^" with an "X" for
|
||||
// repositories with exactly one commit.
|
||||
if ($this->isTail && $graph) {
|
||||
$last = array_pop($graph);
|
||||
$last['line'] = str_replace('o', 'x', $last['line']);
|
||||
$last['line'] = str_replace('^', 'X', $last['line']);
|
||||
$graph[] = $last;
|
||||
}
|
||||
|
||||
// Render into tags for the behavior.
|
||||
|
||||
foreach ($graph as $k => $meta) {
|
||||
$graph[$k] = javelin_tag(
|
||||
'div',
|
||||
array(
|
||||
'sigil' => 'commit-graph',
|
||||
'meta' => $meta,
|
||||
),
|
||||
'');
|
||||
}
|
||||
|
||||
Javelin::initBehavior(
|
||||
'diffusion-commit-graph',
|
||||
array(
|
||||
'count' => $count,
|
||||
));
|
||||
|
||||
return $graph;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -45,12 +45,27 @@ final class DrydockLeaseViewController extends DrydockLeaseController {
|
|||
$locks = $this->buildLocksTab($lease->getPHID());
|
||||
$commands = $this->buildCommandsTab($lease->getPHID());
|
||||
|
||||
$tab_group = id(new PHUITabGroupView())
|
||||
->addTab(
|
||||
id(new PHUITabView())
|
||||
->setName(pht('Properties'))
|
||||
->setKey('properties')
|
||||
->appendChild($properties))
|
||||
->addTab(
|
||||
id(new PHUITabView())
|
||||
->setName(pht('Slot Locks'))
|
||||
->setKey('locks')
|
||||
->appendChild($locks))
|
||||
->addTab(
|
||||
id(new PHUITabView())
|
||||
->setName(pht('Commands'))
|
||||
->setKey('commands')
|
||||
->appendChild($commands));
|
||||
|
||||
$object_box = id(new PHUIObjectBoxView())
|
||||
->setHeaderText(pht('Properties'))
|
||||
->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
|
||||
->addPropertyList($properties, pht('Properties'))
|
||||
->addPropertyList($locks, pht('Slot Locks'))
|
||||
->addPropertyList($commands, pht('Commands'));
|
||||
->addTabGroup($tab_group);
|
||||
|
||||
$view = id(new PHUITwoColumnView())
|
||||
->setHeader($header)
|
||||
|
|
|
@ -49,14 +49,30 @@ final class DrydockResourceViewController extends DrydockResourceController {
|
|||
|
||||
$locks = $this->buildLocksTab($resource->getPHID());
|
||||
$commands = $this->buildCommandsTab($resource->getPHID());
|
||||
$lease_box = $this->buildLeaseBox($resource);
|
||||
|
||||
$tab_group = id(new PHUITabGroupView())
|
||||
->addTab(
|
||||
id(new PHUITabView())
|
||||
->setName(pht('Properties'))
|
||||
->setKey('properties')
|
||||
->appendChild($properties))
|
||||
->addTab(
|
||||
id(new PHUITabView())
|
||||
->setName(pht('Slot Locks'))
|
||||
->setKey('locks')
|
||||
->appendChild($locks))
|
||||
->addTab(
|
||||
id(new PHUITabView())
|
||||
->setName(pht('Commands'))
|
||||
->setKey('commands')
|
||||
->appendChild($commands));
|
||||
|
||||
$object_box = id(new PHUIObjectBoxView())
|
||||
->setHeaderText(pht('Properties'))
|
||||
->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
|
||||
->addPropertyList($properties, pht('Properties'))
|
||||
->addPropertyList($locks, pht('Slot Locks'))
|
||||
->addPropertyList($commands, pht('Commands'));
|
||||
->addTabGroup($tab_group);
|
||||
|
||||
$lease_box = $this->buildLeaseBox($resource);
|
||||
|
||||
$view = id(new PHUITwoColumnView())
|
||||
->setHeader($header)
|
||||
|
|
|
@ -51,6 +51,16 @@ final class FileUploadChunkConduitAPIMethod
|
|||
$start,
|
||||
$start + $length);
|
||||
|
||||
// If this is the initial chunk, leave the MIME type unset so we detect
|
||||
// it and can update the parent file. If this is any other chunk, it has
|
||||
// no meaningful MIME type. Provide a default type so we can avoid writing
|
||||
// it to disk to perform MIME type detection.
|
||||
if (!$start) {
|
||||
$mime_type = null;
|
||||
} else {
|
||||
$mime_type = 'application/octet-stream';
|
||||
}
|
||||
|
||||
// NOTE: These files have a view policy which prevents normal access. They
|
||||
// are only accessed through the storage engine.
|
||||
$chunk_data = PhabricatorFile::newFromFileData(
|
||||
|
@ -58,13 +68,26 @@ final class FileUploadChunkConduitAPIMethod
|
|||
array(
|
||||
'name' => $file->getMonogram().'.chunk-'.$chunk->getID(),
|
||||
'viewPolicy' => PhabricatorPolicies::POLICY_NOONE,
|
||||
'mime-type' => $mime_type,
|
||||
));
|
||||
|
||||
$chunk->setDataFilePHID($chunk_data->getPHID())->save();
|
||||
|
||||
$needs_update = false;
|
||||
|
||||
$missing = $this->loadAnyMissingChunk($viewer, $file);
|
||||
if (!$missing) {
|
||||
$file->setIsPartial(0)->save();
|
||||
$file->setIsPartial(0);
|
||||
$needs_update = true;
|
||||
}
|
||||
|
||||
if (!$start) {
|
||||
$file->setMimeType($chunk_data->getMimeType());
|
||||
$needs_update = true;
|
||||
}
|
||||
|
||||
if ($needs_update) {
|
||||
$file->save();
|
||||
}
|
||||
|
||||
return null;
|
||||
|
|
|
@ -182,8 +182,16 @@ final class PhabricatorFileInfoController extends PhabricatorFileController {
|
|||
$request = $this->getRequest();
|
||||
$viewer = $request->getUser();
|
||||
|
||||
$tab_group = id(new PHUITabGroupView());
|
||||
$box->addTabGroup($tab_group);
|
||||
|
||||
$properties = id(new PHUIPropertyListView());
|
||||
$box->addPropertyList($properties, pht('Details'));
|
||||
|
||||
$tab_group->addTab(
|
||||
id(new PHUITabView())
|
||||
->setName(pht('Details'))
|
||||
->setKey('details')
|
||||
->appendChild($properties));
|
||||
|
||||
if ($file->getAuthorPHID()) {
|
||||
$properties->addProperty(
|
||||
|
@ -195,9 +203,13 @@ final class PhabricatorFileInfoController extends PhabricatorFileController {
|
|||
pht('Created'),
|
||||
phabricator_datetime($file->getDateCreated(), $viewer));
|
||||
|
||||
|
||||
$finfo = id(new PHUIPropertyListView());
|
||||
$box->addPropertyList($finfo, pht('File Info'));
|
||||
|
||||
$tab_group->addTab(
|
||||
id(new PHUITabView())
|
||||
->setName(pht('File Info'))
|
||||
->setKey('info')
|
||||
->appendChild($finfo));
|
||||
|
||||
$finfo->addProperty(
|
||||
pht('Size'),
|
||||
|
@ -262,7 +274,12 @@ final class PhabricatorFileInfoController extends PhabricatorFileController {
|
|||
}
|
||||
|
||||
$storage_properties = new PHUIPropertyListView();
|
||||
$box->addPropertyList($storage_properties, pht('Storage'));
|
||||
|
||||
$tab_group->addTab(
|
||||
id(new PHUITabView())
|
||||
->setName(pht('Storage'))
|
||||
->setKey('storage')
|
||||
->appendChild($storage_properties));
|
||||
|
||||
$storage_properties->addProperty(
|
||||
pht('Engine'),
|
||||
|
@ -285,7 +302,12 @@ final class PhabricatorFileInfoController extends PhabricatorFileController {
|
|||
$phids = $file->getObjectPHIDs();
|
||||
if ($phids) {
|
||||
$attached = new PHUIPropertyListView();
|
||||
$box->addPropertyList($attached, pht('Attached'));
|
||||
|
||||
$tab_group->addTab(
|
||||
id(new PHUITabView())
|
||||
->setName(pht('Attached'))
|
||||
->setKey('attached')
|
||||
->appendChild($attached));
|
||||
|
||||
$attached->addProperty(
|
||||
pht('Attached To'),
|
||||
|
@ -357,7 +379,12 @@ final class PhabricatorFileInfoController extends PhabricatorFileController {
|
|||
if ($engine) {
|
||||
if ($engine->isChunkEngine()) {
|
||||
$chunkinfo = new PHUIPropertyListView();
|
||||
$box->addPropertyList($chunkinfo, pht('Chunks'));
|
||||
|
||||
$tab_group->addTab(
|
||||
id(new PHUITabView())
|
||||
->setName(pht('Chunks'))
|
||||
->setKey('chunks')
|
||||
->appendChild($chunkinfo));
|
||||
|
||||
$chunks = id(new PhabricatorFileChunkQuery())
|
||||
->setViewer($viewer)
|
||||
|
|
|
@ -270,10 +270,8 @@ final class PhabricatorFile extends PhabricatorFileDAO
|
|||
|
||||
$file->setByteSize($length);
|
||||
|
||||
// TODO: We might be able to test the first chunk in order to figure
|
||||
// this out more reliably, since MIME detection usually examines headers.
|
||||
// However, enormous files are probably always either actually raw data
|
||||
// or reasonable to treat like raw data.
|
||||
// NOTE: Once we receive the first chunk, we'll detect its MIME type and
|
||||
// update the parent file. This matters for large media files like video.
|
||||
$file->setMimeType('application/octet-stream');
|
||||
|
||||
$chunked_hash = idx($params, 'chunkedHash');
|
||||
|
|
|
@ -95,6 +95,9 @@ final class HarbormasterBuildViewController
|
|||
->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
|
||||
->setHeader($header);
|
||||
|
||||
$tab_group = new PHUITabGroupView();
|
||||
$target_box->addTabGroup($tab_group);
|
||||
|
||||
$property_list = new PHUIPropertyListView();
|
||||
|
||||
$target_artifacts = idx($artifacts, $build_target->getPHID(), array());
|
||||
|
@ -178,7 +181,11 @@ final class HarbormasterBuildViewController
|
|||
|
||||
$property_list->addProperty(pht('Status'), $status_view);
|
||||
|
||||
$target_box->addPropertyList($property_list, pht('Overview'));
|
||||
$tab_group->addTab(
|
||||
id(new PHUITabView())
|
||||
->setName(pht('Overview'))
|
||||
->setKey('overview')
|
||||
->appendChild($property_list));
|
||||
|
||||
$step = $build_target->getBuildStep();
|
||||
|
||||
|
@ -204,22 +211,34 @@ final class HarbormasterBuildViewController
|
|||
foreach ($details as $key => $value) {
|
||||
$property_list->addProperty($key, $value);
|
||||
}
|
||||
$target_box->addPropertyList($property_list, pht('Configuration'));
|
||||
$tab_group->addTab(
|
||||
id(new PHUITabView())
|
||||
->setName(pht('Configuration'))
|
||||
->setKey('configuration')
|
||||
->appendChild($property_list));
|
||||
|
||||
$variables = $build_target->getVariables();
|
||||
$property_list = new PHUIPropertyListView();
|
||||
$property_list->addRawContent($this->buildProperties($variables));
|
||||
$target_box->addPropertyList($property_list, pht('Variables'));
|
||||
$variables_tab = $this->buildProperties($variables);
|
||||
$tab_group->addTab(
|
||||
id(new PHUITabView())
|
||||
->setName(pht('Variables'))
|
||||
->setKey('variables')
|
||||
->appendChild($variables_tab));
|
||||
|
||||
$artifacts_tab = $this->buildArtifacts($build_target, $target_artifacts);
|
||||
$property_list = new PHUIPropertyListView();
|
||||
$property_list->addRawContent($artifacts_tab);
|
||||
$target_box->addPropertyList($property_list, pht('Artifacts'));
|
||||
$tab_group->addTab(
|
||||
id(new PHUITabView())
|
||||
->setName(pht('Artifacts'))
|
||||
->setKey('artifacts')
|
||||
->appendChild($artifacts_tab));
|
||||
|
||||
$build_messages = idx($messages, $build_target->getPHID(), array());
|
||||
$property_list = new PHUIPropertyListView();
|
||||
$property_list->addRawContent($this->buildMessages($build_messages));
|
||||
$target_box->addPropertyList($property_list, pht('Messages'));
|
||||
$messages_tab = $this->buildMessages($build_messages);
|
||||
$tab_group->addTab(
|
||||
id(new PHUITabView())
|
||||
->setName(pht('Messages'))
|
||||
->setKey('messages')
|
||||
->appendChild($messages_tab));
|
||||
|
||||
$property_list = new PHUIPropertyListView();
|
||||
$property_list->addProperty(
|
||||
|
@ -228,7 +247,12 @@ final class HarbormasterBuildViewController
|
|||
$property_list->addProperty(
|
||||
pht('Build Target PHID'),
|
||||
$build_target->getPHID());
|
||||
$target_box->addPropertyList($property_list, pht('Metadata'));
|
||||
|
||||
$tab_group->addTab(
|
||||
id(new PHUITabView())
|
||||
->setName(pht('Metadata'))
|
||||
->setKey('metadata')
|
||||
->appendChild($property_list));
|
||||
|
||||
$targets[] = $target_box;
|
||||
|
||||
|
|
|
@ -31,8 +31,6 @@ final class ManiphestTaskDetailController extends ManiphestController {
|
|||
->setTargetObject($task);
|
||||
|
||||
$e_commit = ManiphestTaskHasCommitEdgeType::EDGECONST;
|
||||
$e_dep_on = ManiphestTaskDependsOnTaskEdgeType::EDGECONST;
|
||||
$e_dep_by = ManiphestTaskDependedOnByTaskEdgeType::EDGECONST;
|
||||
$e_rev = ManiphestTaskHasRevisionEdgeType::EDGECONST;
|
||||
$e_mock = ManiphestTaskHasMockEdgeType::EDGECONST;
|
||||
|
||||
|
@ -43,8 +41,6 @@ final class ManiphestTaskDetailController extends ManiphestController {
|
|||
->withEdgeTypes(
|
||||
array(
|
||||
$e_commit,
|
||||
$e_dep_on,
|
||||
$e_dep_by,
|
||||
$e_rev,
|
||||
$e_mock,
|
||||
));
|
||||
|
@ -91,6 +87,15 @@ final class ManiphestTaskDetailController extends ManiphestController {
|
|||
->addPropertySection(pht('Description'), $description)
|
||||
->addPropertySection(pht('Details'), $details);
|
||||
|
||||
$task_graph = id(new ManiphestTaskGraph())
|
||||
->setViewer($viewer)
|
||||
->setSeedPHID($task->getPHID())
|
||||
->loadGraph();
|
||||
if (!$task_graph->isEmpty()) {
|
||||
$graph_table = $task_graph->newGraphTable();
|
||||
$view->addPropertySection(pht('Task Graph'), $graph_table);
|
||||
}
|
||||
|
||||
return $this->newPage()
|
||||
->setTitle($title)
|
||||
->setCrumbs($crumbs)
|
||||
|
@ -186,9 +191,7 @@ final class ManiphestTaskDetailController extends ManiphestController {
|
|||
$edit_uri = $this->getApplicationURI($edit_uri);
|
||||
}
|
||||
|
||||
$task_submenu = array();
|
||||
|
||||
$task_submenu[] = id(new PhabricatorActionView())
|
||||
$subtask_item = id(new PhabricatorActionView())
|
||||
->setName(pht('Create Subtask'))
|
||||
->setHref($edit_uri)
|
||||
->setIcon('fa-level-down')
|
||||
|
@ -199,27 +202,19 @@ final class ManiphestTaskDetailController extends ManiphestController {
|
|||
$viewer,
|
||||
$task);
|
||||
|
||||
$parent_key = ManiphestTaskHasParentRelationship::RELATIONSHIPKEY;
|
||||
$subtask_key = ManiphestTaskHasSubtaskRelationship::RELATIONSHIPKEY;
|
||||
$submenu_actions = array(
|
||||
$subtask_item,
|
||||
ManiphestTaskHasParentRelationship::RELATIONSHIPKEY,
|
||||
ManiphestTaskHasSubtaskRelationship::RELATIONSHIPKEY,
|
||||
ManiphestTaskMergeInRelationship::RELATIONSHIPKEY,
|
||||
ManiphestTaskCloseAsDuplicateRelationship::RELATIONSHIPKEY,
|
||||
);
|
||||
|
||||
$task_submenu[] = $relationship_list->getRelationship($parent_key)
|
||||
->newAction($task);
|
||||
$task_submenu = $relationship_list->newActionSubmenu($submenu_actions)
|
||||
->setName(pht('Edit Related Tasks...'))
|
||||
->setIcon('fa-anchor');
|
||||
|
||||
$task_submenu[] = $relationship_list->getRelationship($subtask_key)
|
||||
->newAction($task);
|
||||
|
||||
$task_submenu[] = id(new PhabricatorActionView())
|
||||
->setName(pht('Merge Duplicates In'))
|
||||
->setHref("/search/attach/{$phid}/TASK/merge/")
|
||||
->setIcon('fa-compress')
|
||||
->setDisabled(!$can_edit)
|
||||
->setWorkflow(true);
|
||||
|
||||
$curtain->addAction(
|
||||
id(new PhabricatorActionView())
|
||||
->setName(pht('Edit Related Tasks...'))
|
||||
->setIcon('fa-anchor')
|
||||
->setSubmenu($task_submenu));
|
||||
$curtain->addAction($task_submenu);
|
||||
|
||||
$relationship_submenu = $relationship_list->newActionMenu();
|
||||
if ($relationship_submenu) {
|
||||
|
@ -289,10 +284,6 @@ final class ManiphestTaskDetailController extends ManiphestController {
|
|||
}
|
||||
|
||||
$edge_types = array(
|
||||
ManiphestTaskDependedOnByTaskEdgeType::EDGECONST
|
||||
=> pht('Parent Tasks'),
|
||||
ManiphestTaskDependsOnTaskEdgeType::EDGECONST
|
||||
=> pht('Subtasks'),
|
||||
ManiphestTaskHasRevisionEdgeType::EDGECONST
|
||||
=> pht('Differential Revisions'),
|
||||
ManiphestTaskHasMockEdgeType::EDGECONST
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
<?php
|
||||
|
||||
final class ManiphestTaskHasDuplicateTaskEdgeType
|
||||
extends PhabricatorEdgeType {
|
||||
|
||||
const EDGECONST = 62;
|
||||
|
||||
public function getInverseEdgeConstant() {
|
||||
return ManiphestTaskIsDuplicateOfTaskEdgeType::EDGECONST;
|
||||
}
|
||||
|
||||
public function shouldWriteInverseTransactions() {
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
<?php
|
||||
|
||||
final class ManiphestTaskIsDuplicateOfTaskEdgeType
|
||||
extends PhabricatorEdgeType {
|
||||
|
||||
const EDGECONST = 63;
|
||||
|
||||
public function getInverseEdgeConstant() {
|
||||
return ManiphestTaskHasDuplicateTaskEdgeType::EDGECONST;
|
||||
}
|
||||
|
||||
public function shouldWriteInverseTransactions() {
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,80 @@
|
|||
<?php
|
||||
|
||||
final class ManiphestTaskCloseAsDuplicateRelationship
|
||||
extends ManiphestTaskRelationship {
|
||||
|
||||
const RELATIONSHIPKEY = 'task.close-as-duplicate';
|
||||
|
||||
public function getEdgeConstant() {
|
||||
return ManiphestTaskIsDuplicateOfTaskEdgeType::EDGECONST;
|
||||
}
|
||||
|
||||
protected function getActionName() {
|
||||
return pht('Close As Duplicate');
|
||||
}
|
||||
|
||||
protected function getActionIcon() {
|
||||
return 'fa-times';
|
||||
}
|
||||
|
||||
public function canRelateObjects($src, $dst) {
|
||||
return ($dst instanceof ManiphestTask);
|
||||
}
|
||||
|
||||
public function shouldAppearInActionMenu() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public function getDialogTitleText() {
|
||||
return pht('Close As Duplicate');
|
||||
}
|
||||
|
||||
public function getDialogHeaderText() {
|
||||
return pht('Close This Task As a Duplicate Of');
|
||||
}
|
||||
|
||||
public function getDialogButtonText() {
|
||||
return pht('Merge Into Selected Task');
|
||||
}
|
||||
|
||||
protected function newRelationshipSource() {
|
||||
return id(new ManiphestTaskRelationshipSource())
|
||||
->setSelectedFilter('open');
|
||||
}
|
||||
|
||||
public function getRequiredRelationshipCapabilities() {
|
||||
return array(
|
||||
PhabricatorPolicyCapability::CAN_VIEW,
|
||||
PhabricatorPolicyCapability::CAN_EDIT,
|
||||
);
|
||||
}
|
||||
|
||||
public function canUndoRelationship() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public function getMaximumSelectionSize() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
public function willUpdateRelationships($object, array $add, array $rem) {
|
||||
$task = head($add);
|
||||
return $this->newMergeIntoTransactions($task);
|
||||
}
|
||||
|
||||
public function didUpdateRelationships($object, array $add, array $rem) {
|
||||
$viewer = $this->getViewer();
|
||||
$content_source = $this->getContentSource();
|
||||
|
||||
$task = head($add);
|
||||
$xactions = $this->newMergeFromTransactions(array($object));
|
||||
|
||||
$task->getApplicationTransactionEditor()
|
||||
->setActor($viewer)
|
||||
->setContentSource($content_source)
|
||||
->setContinueOnMissingFields(true)
|
||||
->setContinueOnNoEffect(true)
|
||||
->applyTransactions($task, $xactions);
|
||||
}
|
||||
|
||||
}
|
|
@ -17,13 +17,6 @@ final class ManiphestTaskHasCommitRelationship
|
|||
return 'fa-code';
|
||||
}
|
||||
|
||||
public function shouldAppearInActionMenu() {
|
||||
// TODO: For now, the default search for commits is not very good, so
|
||||
// it is hard to find objects to link to. Until that works better, just
|
||||
// hide this item.
|
||||
return false;
|
||||
}
|
||||
|
||||
public function canRelateObjects($src, $dst) {
|
||||
return ($dst instanceof PhabricatorRepositoryCommit);
|
||||
}
|
||||
|
@ -40,4 +33,8 @@ final class ManiphestTaskHasCommitRelationship
|
|||
return pht('Save Related Commits');
|
||||
}
|
||||
|
||||
protected function newRelationshipSource() {
|
||||
return new DiffusionCommitRelationshipSource();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -33,4 +33,8 @@ final class ManiphestTaskHasMockRelationship
|
|||
return pht('Save Related Mocks');
|
||||
}
|
||||
|
||||
protected function newRelationshipSource() {
|
||||
return new PholioMockRelationshipSource();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -37,4 +37,9 @@ final class ManiphestTaskHasParentRelationship
|
|||
return pht('Save Parent Tasks');
|
||||
}
|
||||
|
||||
protected function newRelationshipSource() {
|
||||
return id(new ManiphestTaskRelationshipSource())
|
||||
->setSelectedFilter('open');
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -33,4 +33,8 @@ final class ManiphestTaskHasRevisionRelationship
|
|||
return pht('Save Related Revisions');
|
||||
}
|
||||
|
||||
protected function newRelationshipSource() {
|
||||
return new DifferentialRevisionRelationshipSource();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -37,4 +37,9 @@ final class ManiphestTaskHasSubtaskRelationship
|
|||
return pht('Save Subtasks');
|
||||
}
|
||||
|
||||
protected function newRelationshipSource() {
|
||||
return id(new ManiphestTaskRelationshipSource())
|
||||
->setSelectedFilter('open');
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,76 @@
|
|||
<?php
|
||||
|
||||
final class ManiphestTaskMergeInRelationship
|
||||
extends ManiphestTaskRelationship {
|
||||
|
||||
const RELATIONSHIPKEY = 'task.merge-in';
|
||||
|
||||
public function getEdgeConstant() {
|
||||
return ManiphestTaskHasDuplicateTaskEdgeType::EDGECONST;
|
||||
}
|
||||
|
||||
protected function getActionName() {
|
||||
return pht('Merge Duplicates In');
|
||||
}
|
||||
|
||||
protected function getActionIcon() {
|
||||
return 'fa-compress';
|
||||
}
|
||||
|
||||
public function canRelateObjects($src, $dst) {
|
||||
return ($dst instanceof ManiphestTask);
|
||||
}
|
||||
|
||||
public function shouldAppearInActionMenu() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public function getDialogTitleText() {
|
||||
return pht('Merge Duplicates Into This Task');
|
||||
}
|
||||
|
||||
public function getDialogHeaderText() {
|
||||
return pht('Tasks to Close and Merge');
|
||||
}
|
||||
|
||||
public function getDialogButtonText() {
|
||||
return pht('Close and Merge Selected Tasks');
|
||||
}
|
||||
|
||||
protected function newRelationshipSource() {
|
||||
return id(new ManiphestTaskRelationshipSource())
|
||||
->setSelectedFilter('open');
|
||||
}
|
||||
|
||||
public function getRequiredRelationshipCapabilities() {
|
||||
return array(
|
||||
PhabricatorPolicyCapability::CAN_VIEW,
|
||||
PhabricatorPolicyCapability::CAN_EDIT,
|
||||
);
|
||||
}
|
||||
|
||||
public function canUndoRelationship() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public function willUpdateRelationships($object, array $add, array $rem) {
|
||||
return $this->newMergeFromTransactions($add);
|
||||
}
|
||||
|
||||
public function didUpdateRelationships($object, array $add, array $rem) {
|
||||
$viewer = $this->getViewer();
|
||||
$content_source = $this->getContentSource();
|
||||
|
||||
foreach ($add as $task) {
|
||||
$xactions = $this->newMergeIntoTransactions($object);
|
||||
|
||||
$task->getApplicationTransactionEditor()
|
||||
->setActor($viewer)
|
||||
->setContentSource($content_source)
|
||||
->setContinueOnMissingFields(true)
|
||||
->setContinueOnNoEffect(true)
|
||||
->applyTransactions($task, $xactions);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -16,4 +16,52 @@ abstract class ManiphestTaskRelationship
|
|||
return ($object instanceof ManiphestTask);
|
||||
}
|
||||
|
||||
protected function newMergeIntoTransactions(ManiphestTask $task) {
|
||||
return array(
|
||||
id(new ManiphestTransaction())
|
||||
->setTransactionType(ManiphestTransaction::TYPE_MERGED_INTO)
|
||||
->setNewValue($task->getPHID()),
|
||||
);
|
||||
}
|
||||
|
||||
protected function newMergeFromTransactions(array $tasks) {
|
||||
$xactions = array();
|
||||
|
||||
$subscriber_phids = $this->loadMergeSubscriberPHIDs($tasks);
|
||||
|
||||
$xactions[] = id(new ManiphestTransaction())
|
||||
->setTransactionType(PhabricatorTransactions::TYPE_SUBSCRIBERS)
|
||||
->setNewValue(array('+' => $subscriber_phids));
|
||||
|
||||
$xactions[] = id(new ManiphestTransaction())
|
||||
->setTransactionType(ManiphestTransaction::TYPE_MERGED_FROM)
|
||||
->setNewValue(mpull($tasks, 'getPHID'));
|
||||
|
||||
return $xactions;
|
||||
}
|
||||
|
||||
private function loadMergeSubscriberPHIDs(array $tasks) {
|
||||
$phids = array();
|
||||
|
||||
foreach ($tasks as $task) {
|
||||
$phids[] = $task->getAuthorPHID();
|
||||
$phids[] = $task->getOwnerPHID();
|
||||
}
|
||||
|
||||
$subscribers = id(new PhabricatorSubscribersQuery())
|
||||
->withObjectPHIDs(mpull($tasks, 'getPHID'))
|
||||
->execute();
|
||||
|
||||
foreach ($subscribers as $phid => $subscriber_list) {
|
||||
foreach ($subscriber_list as $subscriber) {
|
||||
$phids[] = $subscriber;
|
||||
}
|
||||
}
|
||||
|
||||
$phids = array_unique($phids);
|
||||
$phids = array_filter($phids);
|
||||
|
||||
return $phids;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -179,6 +179,10 @@ final class ManiphestTask extends ManiphestDAO
|
|||
return 'T'.$this->getID();
|
||||
}
|
||||
|
||||
public function getURI() {
|
||||
return '/'.$this->getMonogram();
|
||||
}
|
||||
|
||||
public function attachGroupByProjectPHID($phid) {
|
||||
$this->groupByProjectPHID = $phid;
|
||||
return $this;
|
||||
|
|
|
@ -36,13 +36,32 @@ final class PhabricatorMetaMTAMailViewController
|
|||
->addTextCrumb(pht('Mail %d', $mail->getID()))
|
||||
->setBorder(true);
|
||||
|
||||
$tab_group = id(new PHUITabGroupView())
|
||||
->addTab(
|
||||
id(new PHUITabView())
|
||||
->setName(pht('Message'))
|
||||
->setKey('message')
|
||||
->appendChild($this->buildMessageProperties($mail)))
|
||||
->addTab(
|
||||
id(new PHUITabView())
|
||||
->setName(pht('Headers'))
|
||||
->setKey('headers')
|
||||
->appendChild($this->buildHeaderProperties($mail)))
|
||||
->addTab(
|
||||
id(new PHUITabView())
|
||||
->setName(pht('Delivery'))
|
||||
->setKey('delivery')
|
||||
->appendChild($this->buildDeliveryProperties($mail)))
|
||||
->addTab(
|
||||
id(new PHUITabView())
|
||||
->setName(pht('Metadata'))
|
||||
->setKey('metadata')
|
||||
->appendChild($this->buildMetadataProperties($mail)));
|
||||
|
||||
$object_box = id(new PHUIObjectBoxView())
|
||||
->setHeaderText(pht('Mail'))
|
||||
->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
|
||||
->addPropertyList($this->buildMessageProperties($mail), pht('Message'))
|
||||
->addPropertyList($this->buildHeaderProperties($mail), pht('Headers'))
|
||||
->addPropertyList($this->buildDeliveryProperties($mail), pht('Delivery'))
|
||||
->addPropertyList($this->buildMetadataProperties($mail), pht('Metadata'));
|
||||
->addTabGroup($tab_group);
|
||||
|
||||
$view = id(new PHUITwoColumnView())
|
||||
->setHeader($header)
|
||||
|
|
|
@ -87,7 +87,7 @@ abstract class PhameLiveController extends PhameController {
|
|||
$this->isExternal = $is_external;
|
||||
$this->isLive = $is_live;
|
||||
|
||||
if ($post_id) {
|
||||
if (strlen($post_id)) {
|
||||
$post_query = id(new PhamePostQuery())
|
||||
->setViewer($viewer)
|
||||
->withIDs(array($post_id));
|
||||
|
@ -104,6 +104,8 @@ abstract class PhameLiveController extends PhameController {
|
|||
|
||||
$post = $post_query->executeOne();
|
||||
if (!$post) {
|
||||
// Not a valid Post
|
||||
$this->blog = $blog;
|
||||
return new Aphront404Response();
|
||||
}
|
||||
|
||||
|
|
|
@ -53,12 +53,25 @@ final class PhameBlogHeaderPictureController
|
|||
|
||||
if (!$errors) {
|
||||
if ($delete_header) {
|
||||
$blog->setHeaderImagePHID(null);
|
||||
$new_value = null;
|
||||
} else {
|
||||
$blog->setHeaderImagePHID($file->getPHID());
|
||||
$file->attachToObject($blog->getPHID());
|
||||
$new_value = $file->getPHID();
|
||||
}
|
||||
$blog->save();
|
||||
|
||||
$xactions = array();
|
||||
$xactions[] = id(new PhameBlogTransaction())
|
||||
->setTransactionType(PhameBlogTransaction::TYPE_HEADERIMAGE)
|
||||
->setNewValue($new_value);
|
||||
|
||||
$editor = id(new PhameBlogEditor())
|
||||
->setActor($viewer)
|
||||
->setContentSourceFromRequest($request)
|
||||
->setContinueOnMissingFields(true)
|
||||
->setContinueOnNoEffect(true);
|
||||
|
||||
$editor->applyTransactions($blog, $xactions);
|
||||
|
||||
return id(new AphrontRedirectResponse())->setURI($blog_uri);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -36,7 +36,8 @@ final class PhameBlogManageController extends PhameBlogController {
|
|||
->setTag('a')
|
||||
->setText(pht('View Live'))
|
||||
->setIcon('fa-external-link')
|
||||
->setHref($blog->getLiveURI());
|
||||
->setHref($blog->getLiveURI())
|
||||
->setDisabled($blog->isArchived());
|
||||
|
||||
$header = id(new PHUIHeaderView())
|
||||
->setHeader($blog->getName())
|
||||
|
@ -46,6 +47,16 @@ final class PhameBlogManageController extends PhameBlogController {
|
|||
->setStatus($header_icon, $header_color, $header_name)
|
||||
->addActionLink($view);
|
||||
|
||||
$can_edit = PhabricatorPolicyFilter::hasCapability(
|
||||
$viewer,
|
||||
$blog,
|
||||
PhabricatorPolicyCapability::CAN_EDIT);
|
||||
|
||||
if ($can_edit) {
|
||||
$header->setImageEditURL(
|
||||
$this->getApplicationURI('blog/picture/'.$blog->getID().'/'));
|
||||
}
|
||||
|
||||
$curtain = $this->buildCurtain($blog);
|
||||
$properties = $this->buildPropertyView($blog);
|
||||
$file = $this->buildFileView($blog);
|
||||
|
|
|
@ -68,12 +68,25 @@ final class PhameBlogProfilePictureController
|
|||
|
||||
if (!$errors) {
|
||||
if ($is_default) {
|
||||
$blog->setProfileImagePHID(null);
|
||||
$new_value = null;
|
||||
} else {
|
||||
$blog->setProfileImagePHID($xformed->getPHID());
|
||||
$xformed->attachToObject($blog->getPHID());
|
||||
$new_value = $xformed->getPHID();
|
||||
}
|
||||
$blog->save();
|
||||
|
||||
$xactions = array();
|
||||
$xactions[] = id(new PhameBlogTransaction())
|
||||
->setTransactionType(PhameBlogTransaction::TYPE_PROFILEIMAGE)
|
||||
->setNewValue($new_value);
|
||||
|
||||
$editor = id(new PhameBlogEditor())
|
||||
->setActor($viewer)
|
||||
->setContentSourceFromRequest($request)
|
||||
->setContinueOnMissingFields(true)
|
||||
->setContinueOnNoEffect(true);
|
||||
|
||||
$editor->applyTransactions($blog, $xactions);
|
||||
|
||||
return id(new AphrontRedirectResponse())->setURI($blog_uri);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -139,6 +139,14 @@ final class PhameBlogViewController extends PhameLiveController {
|
|||
->setDisabled(!$can_edit)
|
||||
->setWorkflow(!$can_edit));
|
||||
|
||||
$actions->addAction(
|
||||
id(new PhabricatorActionView())
|
||||
->setUser($viewer)
|
||||
->setIcon('fa-search')
|
||||
->setHref(
|
||||
$this->getApplicationURI('post/?blog='.$blog->getPHID()))
|
||||
->setName(pht('Search Posts')));
|
||||
|
||||
$actions->addAction(
|
||||
id(new PhabricatorActionView())
|
||||
->setUser($viewer)
|
||||
|
|
|
@ -118,7 +118,7 @@ final class PhamePostViewController
|
|||
array(
|
||||
$user_icon,
|
||||
' ',
|
||||
$blogger_profile->getTitle(),
|
||||
$blogger_profile->getDisplayTitle(),
|
||||
))
|
||||
->setImage($blogger->getProfileImageURI())
|
||||
->setImageHref($author_uri);
|
||||
|
@ -142,12 +142,16 @@ final class PhamePostViewController
|
|||
->setUser($viewer)
|
||||
->setObject($post);
|
||||
|
||||
$is_live = $this->getIsLive();
|
||||
$is_external = $this->getIsExternal();
|
||||
$next_view = new PhameNextPostView();
|
||||
if ($next) {
|
||||
$next_view->setNext($next->getTitle(), $next->getLiveURI());
|
||||
$next_view->setNext($next->getTitle(),
|
||||
$next->getBestURI($is_live, $is_external));
|
||||
}
|
||||
if ($prev) {
|
||||
$next_view->setPrevious($prev->getTitle(), $prev->getLiveURI());
|
||||
$next_view->setPrevious($prev->getTitle(),
|
||||
$prev->getBestURI($is_live, $is_external));
|
||||
}
|
||||
|
||||
$document->setFoot($next_view);
|
||||
|
|
|
@ -96,6 +96,10 @@ final class PhameBlogEditEngine
|
|||
id(new PhabricatorTextEditField())
|
||||
->setKey('domainFullURI')
|
||||
->setLabel(pht('Full Domain URI'))
|
||||
->setControlInstructions(pht('Set Full Domain URI if you plan to '.
|
||||
'serve this blog on another hosted domain. Parent Site Name and '.
|
||||
'Parent Site URI are optional but helpful since they provide '.
|
||||
'a link from the blog back to your parent site.'))
|
||||
->setDescription(pht('Blog full domain URI.'))
|
||||
->setConduitDescription(pht('Change the blog full domain URI.'))
|
||||
->setConduitTypeDescription(pht('New blog full domain URI.'))
|
||||
|
@ -103,7 +107,7 @@ final class PhameBlogEditEngine
|
|||
->setTransactionType(PhameBlogTransaction::TYPE_FULLDOMAIN),
|
||||
id(new PhabricatorTextEditField())
|
||||
->setKey('parentSite')
|
||||
->setLabel(pht('Parent Site'))
|
||||
->setLabel(pht('Parent Site Name'))
|
||||
->setDescription(pht('Blog parent site name.'))
|
||||
->setConduitDescription(pht('Change the blog parent site name.'))
|
||||
->setConduitTypeDescription(pht('New blog parent site name.'))
|
||||
|
@ -111,7 +115,7 @@ final class PhameBlogEditEngine
|
|||
->setTransactionType(PhameBlogTransaction::TYPE_PARENTSITE),
|
||||
id(new PhabricatorTextEditField())
|
||||
->setKey('parentDomain')
|
||||
->setLabel(pht('Parent Domain'))
|
||||
->setLabel(pht('Parent Site URI'))
|
||||
->setDescription(pht('Blog parent domain name.'))
|
||||
->setConduitDescription(pht('Change the blog parent domain.'))
|
||||
->setConduitTypeDescription(pht('New blog parent domain.'))
|
||||
|
|
|
@ -21,6 +21,9 @@ final class PhameBlogEditor
|
|||
$types[] = PhameBlogTransaction::TYPE_PARENTSITE;
|
||||
$types[] = PhameBlogTransaction::TYPE_PARENTDOMAIN;
|
||||
$types[] = PhameBlogTransaction::TYPE_STATUS;
|
||||
$types[] = PhameBlogTransaction::TYPE_HEADERIMAGE;
|
||||
$types[] = PhameBlogTransaction::TYPE_PROFILEIMAGE;
|
||||
|
||||
$types[] = PhabricatorTransactions::TYPE_VIEW_POLICY;
|
||||
$types[] = PhabricatorTransactions::TYPE_EDIT_POLICY;
|
||||
|
||||
|
@ -44,6 +47,10 @@ final class PhameBlogEditor
|
|||
return $object->getParentSite();
|
||||
case PhameBlogTransaction::TYPE_PARENTDOMAIN:
|
||||
return $object->getParentDomain();
|
||||
case PhameBlogTransaction::TYPE_PROFILEIMAGE:
|
||||
return $object->getProfileImagePHID();
|
||||
case PhameBlogTransaction::TYPE_HEADERIMAGE:
|
||||
return $object->getHeaderImagePHID();
|
||||
case PhameBlogTransaction::TYPE_STATUS:
|
||||
return $object->getStatus();
|
||||
}
|
||||
|
@ -59,7 +66,8 @@ final class PhameBlogEditor
|
|||
case PhameBlogTransaction::TYPE_DESCRIPTION:
|
||||
case PhameBlogTransaction::TYPE_STATUS:
|
||||
case PhameBlogTransaction::TYPE_PARENTSITE:
|
||||
case PhameBlogTransaction::TYPE_PARENTDOMAIN:
|
||||
case PhameBlogTransaction::TYPE_PROFILEIMAGE:
|
||||
case PhameBlogTransaction::TYPE_HEADERIMAGE:
|
||||
return $xaction->getNewValue();
|
||||
case PhameBlogTransaction::TYPE_FULLDOMAIN:
|
||||
$domain = $xaction->getNewValue();
|
||||
|
@ -92,6 +100,10 @@ final class PhameBlogEditor
|
|||
}
|
||||
$object->setDomainFullURI($new_value);
|
||||
return;
|
||||
case PhameBlogTransaction::TYPE_PROFILEIMAGE:
|
||||
return $object->setProfileImagePHID($xaction->getNewValue());
|
||||
case PhameBlogTransaction::TYPE_HEADERIMAGE:
|
||||
return $object->setHeaderImagePHID($xaction->getNewValue());
|
||||
case PhameBlogTransaction::TYPE_STATUS:
|
||||
return $object->setStatus($xaction->getNewValue());
|
||||
case PhameBlogTransaction::TYPE_PARENTSITE:
|
||||
|
@ -114,6 +126,8 @@ final class PhameBlogEditor
|
|||
case PhameBlogTransaction::TYPE_FULLDOMAIN:
|
||||
case PhameBlogTransaction::TYPE_PARENTSITE:
|
||||
case PhameBlogTransaction::TYPE_PARENTDOMAIN:
|
||||
case PhameBlogTransaction::TYPE_HEADERIMAGE:
|
||||
case PhameBlogTransaction::TYPE_PROFILEIMAGE:
|
||||
case PhameBlogTransaction::TYPE_STATUS:
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -18,25 +18,36 @@ final class PhamePostSearchEngine
|
|||
protected function buildQueryFromParameters(array $map) {
|
||||
$query = $this->newQuery();
|
||||
|
||||
if (strlen($map['visibility'])) {
|
||||
$query->withVisibility(array($map['visibility']));
|
||||
if ($map['visibility']) {
|
||||
$query->withVisibility($map['visibility']);
|
||||
}
|
||||
if ($map['blogPHIDs']) {
|
||||
$query->withBlogPHIDs($map['blogPHIDs']);
|
||||
}
|
||||
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
||||
protected function buildCustomSearchFields() {
|
||||
return array(
|
||||
id(new PhabricatorSearchSelectField())
|
||||
id(new PhabricatorSearchCheckboxesField())
|
||||
->setKey('visibility')
|
||||
->setLabel(pht('Visibility'))
|
||||
->setOptions(
|
||||
array(
|
||||
'' => pht('All'),
|
||||
PhameConstants::VISIBILITY_PUBLISHED => pht('Published'),
|
||||
PhameConstants::VISIBILITY_DRAFT => pht('Draft'),
|
||||
PhameConstants::VISIBILITY_ARCHIVED => pht('Archived'),
|
||||
)),
|
||||
id(new PhabricatorSearchDatasourceField())
|
||||
->setLabel(pht('Blogs'))
|
||||
->setKey('blogPHIDs')
|
||||
->setAliases(array('blog', 'blogs', 'blogPHIDs'))
|
||||
->setDescription(
|
||||
pht('Search for posts within certain blogs.'))
|
||||
->setDatasource(new PhameBlogDatasource()),
|
||||
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -63,13 +74,13 @@ final class PhamePostSearchEngine
|
|||
return $query;
|
||||
case 'live':
|
||||
return $query->setParameter(
|
||||
'visibility', PhameConstants::VISIBILITY_PUBLISHED);
|
||||
'visibility', array(PhameConstants::VISIBILITY_PUBLISHED));
|
||||
case 'draft':
|
||||
return $query->setParameter(
|
||||
'visibility', PhameConstants::VISIBILITY_DRAFT);
|
||||
'visibility', array(PhameConstants::VISIBILITY_DRAFT));
|
||||
case 'archived':
|
||||
return $query->setParameter(
|
||||
'visibility', PhameConstants::VISIBILITY_ARCHIVED);
|
||||
'visibility', array(PhameConstants::VISIBILITY_ARCHIVED));
|
||||
}
|
||||
|
||||
return parent::buildSavedQueryFromBuiltin($query_key);
|
||||
|
|
|
@ -28,7 +28,6 @@ final class PhamePostFulltextEngine
|
|||
$post->getPHID(),
|
||||
PhabricatorPhamePostPHIDType::TYPECONST,
|
||||
PhabricatorTime::getNow());
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -322,10 +322,12 @@ final class PhameBlog extends PhameDAO
|
|||
|
||||
$this->openTransaction();
|
||||
|
||||
$posts = id(new PhamePost())
|
||||
->loadAllWhere('blogPHID = %s', $this->getPHID());
|
||||
$posts = id(new PhamePostQuery())
|
||||
->setViewer($engine->getViewer())
|
||||
->withBlogPHIDs(array($this->getPHID()))
|
||||
->execute();
|
||||
foreach ($posts as $post) {
|
||||
$post->delete();
|
||||
$engine->destroyObject($post);
|
||||
}
|
||||
$this->delete();
|
||||
|
||||
|
|
|
@ -3,13 +3,15 @@
|
|||
final class PhameBlogTransaction
|
||||
extends PhabricatorApplicationTransaction {
|
||||
|
||||
const TYPE_NAME = 'phame.blog.name';
|
||||
const TYPE_SUBTITLE = 'phame.blog.subtitle';
|
||||
const TYPE_DESCRIPTION = 'phame.blog.description';
|
||||
const TYPE_FULLDOMAIN = 'phame.blog.full.domain';
|
||||
const TYPE_STATUS = 'phame.blog.status';
|
||||
const TYPE_PARENTSITE = 'phame.blog.parent.site';
|
||||
const TYPE_PARENTDOMAIN = 'phame.blog.parent.domain';
|
||||
const TYPE_NAME = 'phame.blog.name';
|
||||
const TYPE_SUBTITLE = 'phame.blog.subtitle';
|
||||
const TYPE_DESCRIPTION = 'phame.blog.description';
|
||||
const TYPE_FULLDOMAIN = 'phame.blog.full.domain';
|
||||
const TYPE_STATUS = 'phame.blog.status';
|
||||
const TYPE_PARENTSITE = 'phame.blog.parent.site';
|
||||
const TYPE_PARENTDOMAIN = 'phame.blog.parent.domain';
|
||||
const TYPE_PROFILEIMAGE = 'phame.blog.header.image';
|
||||
const TYPE_HEADERIMAGE = 'phame.blog.profile.image';
|
||||
|
||||
const MAILTAG_DETAILS = 'phame-blog-details';
|
||||
const MAILTAG_SUBSCRIBERS = 'phame-blog-subscribers';
|
||||
|
@ -34,6 +36,22 @@ final class PhameBlogTransaction
|
|||
return parent::shouldHide();
|
||||
}
|
||||
|
||||
public function getRequiredHandlePHIDs() {
|
||||
$old = $this->getOldValue();
|
||||
$new = $this->getNewValue();
|
||||
|
||||
$req_phids = array();
|
||||
switch ($this->getTransactionType()) {
|
||||
case self::TYPE_PROFILEIMAGE:
|
||||
case self::TYPE_HEADERIMAGE:
|
||||
$req_phids[] = $old;
|
||||
$req_phids[] = $new;
|
||||
break;
|
||||
}
|
||||
|
||||
return array_merge($req_phids, parent::getRequiredHandlePHIDs());
|
||||
}
|
||||
|
||||
public function getIcon() {
|
||||
$old = $this->getOldValue();
|
||||
$new = $this->getNewValue();
|
||||
|
@ -48,6 +66,10 @@ final class PhameBlogTransaction
|
|||
case self::TYPE_DESCRIPTION:
|
||||
case self::TYPE_FULLDOMAIN:
|
||||
return 'fa-pencil';
|
||||
case self::TYPE_HEADERIMAGE:
|
||||
return 'fa-image';
|
||||
case self::TYPE_PROFILEIMAGE:
|
||||
return 'fa-star';
|
||||
case self::TYPE_STATUS:
|
||||
if ($new == PhameBlog::STATUS_ARCHIVED) {
|
||||
return 'fa-ban';
|
||||
|
@ -88,6 +110,8 @@ final class PhameBlogTransaction
|
|||
case self::TYPE_FULLDOMAIN:
|
||||
case self::TYPE_PARENTSITE:
|
||||
case self::TYPE_PARENTDOMAIN:
|
||||
case self::TYPE_PROFILEIMAGE:
|
||||
case self::TYPE_HEADERIMAGE:
|
||||
$tags[] = self::MAILTAG_DETAILS;
|
||||
break;
|
||||
default:
|
||||
|
@ -172,6 +196,42 @@ final class PhameBlogTransaction
|
|||
$new);
|
||||
}
|
||||
break;
|
||||
case self::TYPE_HEADERIMAGE:
|
||||
if (!$old) {
|
||||
return pht(
|
||||
"%s set this blog's header image to %s.",
|
||||
$this->renderHandleLink($author_phid),
|
||||
$this->renderHandleLink($new));
|
||||
} else if (!$new) {
|
||||
return pht(
|
||||
"%s removed this blog's header image.",
|
||||
$this->renderHandleLink($author_phid));
|
||||
} else {
|
||||
return pht(
|
||||
"%s updated this blog's header image from %s to %s.",
|
||||
$this->renderHandleLink($author_phid),
|
||||
$this->renderHandleLink($old),
|
||||
$this->renderHandleLink($new));
|
||||
}
|
||||
break;
|
||||
case self::TYPE_PROFILEIMAGE:
|
||||
if (!$old) {
|
||||
return pht(
|
||||
"%s set this blog's profile image to %s.",
|
||||
$this->renderHandleLink($author_phid),
|
||||
$this->renderHandleLink($new));
|
||||
} else if (!$new) {
|
||||
return pht(
|
||||
"%s removed this blog's profile image.",
|
||||
$this->renderHandleLink($author_phid));
|
||||
} else {
|
||||
return pht(
|
||||
"%s updated this blog's profile image from %s to %s.",
|
||||
$this->renderHandleLink($author_phid),
|
||||
$this->renderHandleLink($old),
|
||||
$this->renderHandleLink($new));
|
||||
}
|
||||
break;
|
||||
case self::TYPE_STATUS:
|
||||
switch ($new) {
|
||||
case PhameBlog::STATUS_ACTIVE:
|
||||
|
@ -248,6 +308,18 @@ final class PhameBlogTransaction
|
|||
$this->renderHandleLink($author_phid),
|
||||
$this->renderHandleLink($object_phid));
|
||||
break;
|
||||
case self::TYPE_HEADERIMAGE:
|
||||
return pht(
|
||||
'%s updated the header image for %s.',
|
||||
$this->renderHandleLink($author_phid),
|
||||
$this->renderHandleLink($object_phid));
|
||||
break;
|
||||
case self::TYPE_PROFILEIMAGE:
|
||||
return pht(
|
||||
'%s updated the profile image for %s.',
|
||||
$this->renderHandleLink($author_phid),
|
||||
$this->renderHandleLink($object_phid));
|
||||
break;
|
||||
case self::TYPE_STATUS:
|
||||
switch ($new) {
|
||||
case PhameBlog::STATUS_ACTIVE:
|
||||
|
|
|
@ -86,6 +86,18 @@ final class PhamePost extends PhameDAO
|
|||
return "/phame/post/view/{$id}/{$slug}/";
|
||||
}
|
||||
|
||||
public function getBestURI($is_live, $is_external) {
|
||||
if ($is_live) {
|
||||
if ($is_external) {
|
||||
return $this->getExternalLiveURI();
|
||||
} else {
|
||||
return $this->getInternalLiveURI();
|
||||
}
|
||||
} else {
|
||||
return $this->getViewURI();
|
||||
}
|
||||
}
|
||||
|
||||
public function getEditURI() {
|
||||
return '/phame/post/edit/'.$this->getID().'/';
|
||||
}
|
||||
|
@ -258,15 +270,15 @@ final class PhamePost extends PhameDAO
|
|||
return $timeline;
|
||||
}
|
||||
|
||||
|
||||
/* -( PhabricatorDestructibleInterface )----------------------------------- */
|
||||
|
||||
|
||||
public function destroyObjectPermanently(
|
||||
PhabricatorDestructionEngine $engine) {
|
||||
|
||||
$this->openTransaction();
|
||||
|
||||
$this->delete();
|
||||
|
||||
$this->saveTransaction();
|
||||
}
|
||||
|
||||
|
|
53
src/applications/phame/typeahead/PhameBlogDatasource.php
Normal file
|
@ -0,0 +1,53 @@
|
|||
<?php
|
||||
|
||||
final class PhameBlogDatasource
|
||||
extends PhabricatorTypeaheadDatasource {
|
||||
|
||||
public function getBrowseTitle() {
|
||||
return pht('Browse Blogs');
|
||||
}
|
||||
|
||||
public function getPlaceholderText() {
|
||||
return pht('Type a blog name...');
|
||||
}
|
||||
|
||||
public function getDatasourceApplicationClass() {
|
||||
return 'PhabricatorPhameApplication';
|
||||
}
|
||||
|
||||
public function loadResults() {
|
||||
$viewer = $this->getViewer();
|
||||
|
||||
$blogs = id(new PhameBlogQuery())
|
||||
->setViewer($viewer)
|
||||
->needProfileImage(true)
|
||||
->requireCapabilities(
|
||||
array(
|
||||
PhabricatorPolicyCapability::CAN_VIEW,
|
||||
PhabricatorPolicyCapability::CAN_EDIT,
|
||||
))
|
||||
->execute();
|
||||
|
||||
$results = array();
|
||||
foreach ($blogs as $blog) {
|
||||
$closed = null;
|
||||
|
||||
$status = $blog->getStatus();
|
||||
if ($status === PhabricatorBadgesBadge::STATUS_ARCHIVED) {
|
||||
$closed = pht('Archived');
|
||||
}
|
||||
|
||||
$results[] = id(new PhabricatorTypeaheadResult())
|
||||
->setName($blog->getName())
|
||||
->setClosed($closed)
|
||||
->addAttribute(pht('Phame Blog'))
|
||||
->setImageURI($blog->getProfileImageURI())
|
||||
->setPHID($blog->getPHID());
|
||||
}
|
||||
|
||||
$results = $this->filterResultsAgainstTokens($results);
|
||||
|
||||
return $results;
|
||||
}
|
||||
|
||||
}
|