mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-15 10:00:55 +01:00
(stable) Promote 2017 Week 36
This commit is contained in:
commit
b9669edbbd
194 changed files with 3446 additions and 2491 deletions
|
@ -9,7 +9,7 @@ return array(
|
|||
'names' => array(
|
||||
'conpherence.pkg.css' => 'e68cf1fa',
|
||||
'conpherence.pkg.js' => 'b5b51108',
|
||||
'core.pkg.css' => '4ac857bf',
|
||||
'core.pkg.css' => 'e9473020',
|
||||
'core.pkg.js' => '6c085267',
|
||||
'darkconsole.pkg.js' => '1f9a31bc',
|
||||
'differential.pkg.css' => '45951e9e',
|
||||
|
@ -45,10 +45,9 @@ return array(
|
|||
'rsrc/css/application/base/standard-page-view.css' => '34ee718b',
|
||||
'rsrc/css/application/chatlog/chatlog.css' => 'd295b020',
|
||||
'rsrc/css/application/conduit/conduit-api.css' => '7bc725c4',
|
||||
'rsrc/css/application/config/config-options.css' => 'd55ed093',
|
||||
'rsrc/css/application/config/config-page.css' => 'c1d5121b',
|
||||
'rsrc/css/application/config/config-options.css' => '4615667b',
|
||||
'rsrc/css/application/config/config-template.css' => '8f18fa41',
|
||||
'rsrc/css/application/config/setup-issue.css' => 'f794cfc3',
|
||||
'rsrc/css/application/config/setup-issue.css' => '7dae7f18',
|
||||
'rsrc/css/application/config/unhandled-exception.css' => '4c96257a',
|
||||
'rsrc/css/application/conpherence/color.css' => 'abb4c358',
|
||||
'rsrc/css/application/conpherence/durable-column.css' => '89ea6bef',
|
||||
|
@ -132,7 +131,7 @@ return array(
|
|||
'rsrc/css/phui/calendar/phui-calendar-list.css' => '576be600',
|
||||
'rsrc/css/phui/calendar/phui-calendar-month.css' => '21154caf',
|
||||
'rsrc/css/phui/calendar/phui-calendar.css' => 'f1ddf11c',
|
||||
'rsrc/css/phui/object-item/phui-oi-big-ui.css' => '19f9369b',
|
||||
'rsrc/css/phui/object-item/phui-oi-big-ui.css' => '628f59de',
|
||||
'rsrc/css/phui/object-item/phui-oi-color.css' => 'cd2b9b77',
|
||||
'rsrc/css/phui/object-item/phui-oi-drag-ui.css' => '08f4ccc3',
|
||||
'rsrc/css/phui/object-item/phui-oi-flush-ui.css' => '9d9685d6',
|
||||
|
@ -143,7 +142,7 @@ return array(
|
|||
'rsrc/css/phui/phui-badge.css' => '22c0cf4f',
|
||||
'rsrc/css/phui/phui-basic-nav-view.css' => '98c11ab3',
|
||||
'rsrc/css/phui/phui-big-info-view.css' => 'acc3492c',
|
||||
'rsrc/css/phui/phui-box.css' => '745e881d',
|
||||
'rsrc/css/phui/phui-box.css' => '9f3745fb',
|
||||
'rsrc/css/phui/phui-chart.css' => '6bf6f78e',
|
||||
'rsrc/css/phui/phui-cms.css' => '504b4b23',
|
||||
'rsrc/css/phui/phui-comment-form.css' => 'ac68149f',
|
||||
|
@ -158,12 +157,12 @@ return array(
|
|||
'rsrc/css/phui/phui-form-view.css' => 'ae9f8d16',
|
||||
'rsrc/css/phui/phui-form.css' => '7aaa04e3',
|
||||
'rsrc/css/phui/phui-head-thing.css' => 'fd311e5f',
|
||||
'rsrc/css/phui/phui-header-view.css' => '808b82c7',
|
||||
'rsrc/css/phui/phui-header-view.css' => '67fab16d',
|
||||
'rsrc/css/phui/phui-hovercard.css' => 'f0592bcf',
|
||||
'rsrc/css/phui/phui-icon-set-selector.css' => '87db8fee',
|
||||
'rsrc/css/phui/phui-icon.css' => '5c4a5de6',
|
||||
'rsrc/css/phui/phui-image-mask.css' => 'a8498f9c',
|
||||
'rsrc/css/phui/phui-info-view.css' => 'e1b4ec37',
|
||||
'rsrc/css/phui/phui-info-view.css' => 'e929f98c',
|
||||
'rsrc/css/phui/phui-invisible-character-view.css' => '6993d9f0',
|
||||
'rsrc/css/phui/phui-left-right.css' => '75227a4d',
|
||||
'rsrc/css/phui/phui-lightbox.css' => '0a035e40',
|
||||
|
@ -178,7 +177,7 @@ return array(
|
|||
'rsrc/css/phui/phui-status.css' => 'd5263e49',
|
||||
'rsrc/css/phui/phui-tag-view.css' => 'b4719c50',
|
||||
'rsrc/css/phui/phui-timeline-view.css' => 'f21db7ca',
|
||||
'rsrc/css/phui/phui-two-column-view.css' => 'bf86c483',
|
||||
'rsrc/css/phui/phui-two-column-view.css' => '1ade9c5f',
|
||||
'rsrc/css/phui/workboards/phui-workboard-color.css' => '783cdff5',
|
||||
'rsrc/css/phui/workboards/phui-workboard.css' => '3bc85455',
|
||||
'rsrc/css/phui/workboards/phui-workcard.css' => 'cca5fa92',
|
||||
|
@ -551,8 +550,7 @@ return array(
|
|||
'auth-css' => '0877ed6e',
|
||||
'bulk-job-css' => 'df9c1d4a',
|
||||
'conduit-api-css' => '7bc725c4',
|
||||
'config-options-css' => 'd55ed093',
|
||||
'config-page-css' => 'c1d5121b',
|
||||
'config-options-css' => '4615667b',
|
||||
'conpherence-color-css' => 'abb4c358',
|
||||
'conpherence-durable-column-view' => '89ea6bef',
|
||||
'conpherence-header-pane-css' => 'cb6f4e19',
|
||||
|
@ -822,7 +820,7 @@ return array(
|
|||
'phui-badge-view-css' => '22c0cf4f',
|
||||
'phui-basic-nav-view-css' => '98c11ab3',
|
||||
'phui-big-info-view-css' => 'acc3492c',
|
||||
'phui-box-css' => '745e881d',
|
||||
'phui-box-css' => '9f3745fb',
|
||||
'phui-button-bar-css' => 'f1ff5494',
|
||||
'phui-button-css' => '1863cc6e',
|
||||
'phui-button-simple-css' => '8e1baf68',
|
||||
|
@ -845,20 +843,20 @@ return array(
|
|||
'phui-form-css' => '7aaa04e3',
|
||||
'phui-form-view-css' => 'ae9f8d16',
|
||||
'phui-head-thing-view-css' => 'fd311e5f',
|
||||
'phui-header-view-css' => '808b82c7',
|
||||
'phui-header-view-css' => '67fab16d',
|
||||
'phui-hovercard' => '1bd28176',
|
||||
'phui-hovercard-view-css' => 'f0592bcf',
|
||||
'phui-icon-set-selector-css' => '87db8fee',
|
||||
'phui-icon-view-css' => '5c4a5de6',
|
||||
'phui-image-mask-css' => 'a8498f9c',
|
||||
'phui-info-view-css' => 'e1b4ec37',
|
||||
'phui-info-view-css' => 'e929f98c',
|
||||
'phui-inline-comment-view-css' => '65ae3bc2',
|
||||
'phui-invisible-character-view-css' => '6993d9f0',
|
||||
'phui-left-right-css' => '75227a4d',
|
||||
'phui-lightbox-css' => '0a035e40',
|
||||
'phui-list-view-css' => '38f8c9bd',
|
||||
'phui-object-box-css' => '9cff003c',
|
||||
'phui-oi-big-ui-css' => '19f9369b',
|
||||
'phui-oi-big-ui-css' => '628f59de',
|
||||
'phui-oi-color-css' => 'cd2b9b77',
|
||||
'phui-oi-drag-ui-css' => '08f4ccc3',
|
||||
'phui-oi-flush-ui-css' => '9d9685d6',
|
||||
|
@ -874,7 +872,7 @@ return array(
|
|||
'phui-tag-view-css' => 'b4719c50',
|
||||
'phui-theme-css' => '9f261c6b',
|
||||
'phui-timeline-view-css' => 'f21db7ca',
|
||||
'phui-two-column-view-css' => 'bf86c483',
|
||||
'phui-two-column-view-css' => '1ade9c5f',
|
||||
'phui-workboard-color-css' => '783cdff5',
|
||||
'phui-workboard-view-css' => '3bc85455',
|
||||
'phui-workcard-view-css' => 'cca5fa92',
|
||||
|
@ -896,7 +894,7 @@ return array(
|
|||
'releeph-preview-branch' => 'b7a6f4a5',
|
||||
'releeph-request-differential-create-dialog' => '8d8b92cd',
|
||||
'releeph-request-typeahead-css' => '667a48ae',
|
||||
'setup-issue-css' => 'f794cfc3',
|
||||
'setup-issue-css' => '7dae7f18',
|
||||
'sprite-login-css' => '396f3c3a',
|
||||
'sprite-tokens-css' => '9cdfd599',
|
||||
'syntax-default-css' => '9923583c',
|
||||
|
@ -997,9 +995,6 @@ return array(
|
|||
'185bbd53' => array(
|
||||
'javelin-install',
|
||||
),
|
||||
'19f9369b' => array(
|
||||
'phui-oi-list-view-css',
|
||||
),
|
||||
'1ad0a787' => array(
|
||||
'javelin-install',
|
||||
'javelin-reactor',
|
||||
|
@ -1366,6 +1361,9 @@ return array(
|
|||
'javelin-magical-init',
|
||||
'javelin-util',
|
||||
),
|
||||
'628f59de' => array(
|
||||
'phui-oi-list-view-css',
|
||||
),
|
||||
'62dfea03' => array(
|
||||
'javelin-install',
|
||||
'javelin-util',
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
CREATE TABLE {$NAMESPACE}_differential.differential_revision_fdocument (
|
||||
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
objectPHID VARBINARY(64) NOT NULL,
|
||||
isClosed BOOL NOT NULL,
|
||||
authorPHID VARBINARY(64),
|
||||
ownerPHID VARBINARY(64),
|
||||
epochCreated INT UNSIGNED NOT NULL,
|
||||
epochModified INT UNSIGNED NOT NULL
|
||||
) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
|
|
@ -0,0 +1,8 @@
|
|||
CREATE TABLE {$NAMESPACE}_differential.differential_revision_ffield (
|
||||
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
documentID INT UNSIGNED NOT NULL,
|
||||
fieldKey VARCHAR(4) NOT NULL COLLATE {$COLLATE_TEXT},
|
||||
rawCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT},
|
||||
termCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT},
|
||||
normalCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}
|
||||
) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
|
|
@ -0,0 +1,5 @@
|
|||
CREATE TABLE {$NAMESPACE}_differential.differential_revision_fngrams (
|
||||
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
documentID INT UNSIGNED NOT NULL,
|
||||
ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT}
|
||||
) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
|
|
@ -0,0 +1,9 @@
|
|||
CREATE TABLE {$NAMESPACE}_user.user_user_fdocument (
|
||||
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
objectPHID VARBINARY(64) NOT NULL,
|
||||
isClosed BOOL NOT NULL,
|
||||
authorPHID VARBINARY(64),
|
||||
ownerPHID VARBINARY(64),
|
||||
epochCreated INT UNSIGNED NOT NULL,
|
||||
epochModified INT UNSIGNED NOT NULL
|
||||
) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
|
|
@ -0,0 +1,8 @@
|
|||
CREATE TABLE {$NAMESPACE}_user.user_user_ffield (
|
||||
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
documentID INT UNSIGNED NOT NULL,
|
||||
fieldKey VARCHAR(4) NOT NULL COLLATE {$COLLATE_TEXT},
|
||||
rawCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT},
|
||||
termCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT},
|
||||
normalCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}
|
||||
) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
|
|
@ -0,0 +1,5 @@
|
|||
CREATE TABLE {$NAMESPACE}_user.user_user_fngrams (
|
||||
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
documentID INT UNSIGNED NOT NULL,
|
||||
ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT}
|
||||
) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
|
|
@ -0,0 +1,9 @@
|
|||
CREATE TABLE {$NAMESPACE}_fund.fund_initiative_fdocument (
|
||||
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
objectPHID VARBINARY(64) NOT NULL,
|
||||
isClosed BOOL NOT NULL,
|
||||
authorPHID VARBINARY(64),
|
||||
ownerPHID VARBINARY(64),
|
||||
epochCreated INT UNSIGNED NOT NULL,
|
||||
epochModified INT UNSIGNED NOT NULL
|
||||
) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
|
|
@ -0,0 +1,8 @@
|
|||
CREATE TABLE {$NAMESPACE}_fund.fund_initiative_ffield (
|
||||
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
documentID INT UNSIGNED NOT NULL,
|
||||
fieldKey VARCHAR(4) NOT NULL COLLATE {$COLLATE_TEXT},
|
||||
rawCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT},
|
||||
termCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT},
|
||||
normalCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}
|
||||
) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
|
|
@ -0,0 +1,5 @@
|
|||
CREATE TABLE {$NAMESPACE}_fund.fund_initiative_fngrams (
|
||||
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
documentID INT UNSIGNED NOT NULL,
|
||||
ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT}
|
||||
) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
|
|
@ -0,0 +1,9 @@
|
|||
CREATE TABLE {$NAMESPACE}_passphrase.passphrase_credential_fdocument (
|
||||
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
objectPHID VARBINARY(64) NOT NULL,
|
||||
isClosed BOOL NOT NULL,
|
||||
authorPHID VARBINARY(64),
|
||||
ownerPHID VARBINARY(64),
|
||||
epochCreated INT UNSIGNED NOT NULL,
|
||||
epochModified INT UNSIGNED NOT NULL
|
||||
) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
|
|
@ -0,0 +1,8 @@
|
|||
CREATE TABLE {$NAMESPACE}_passphrase.passphrase_credential_ffield (
|
||||
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
documentID INT UNSIGNED NOT NULL,
|
||||
fieldKey VARCHAR(4) NOT NULL COLLATE {$COLLATE_TEXT},
|
||||
rawCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT},
|
||||
termCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT},
|
||||
normalCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}
|
||||
) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
|
|
@ -0,0 +1,5 @@
|
|||
CREATE TABLE {$NAMESPACE}_passphrase.passphrase_credential_fngrams (
|
||||
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
documentID INT UNSIGNED NOT NULL,
|
||||
ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT}
|
||||
) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
|
|
@ -0,0 +1,9 @@
|
|||
CREATE TABLE {$NAMESPACE}_owners.owners_package_fdocument (
|
||||
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
objectPHID VARBINARY(64) NOT NULL,
|
||||
isClosed BOOL NOT NULL,
|
||||
authorPHID VARBINARY(64),
|
||||
ownerPHID VARBINARY(64),
|
||||
epochCreated INT UNSIGNED NOT NULL,
|
||||
epochModified INT UNSIGNED NOT NULL
|
||||
) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
|
|
@ -0,0 +1,8 @@
|
|||
CREATE TABLE {$NAMESPACE}_owners.owners_package_ffield (
|
||||
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
documentID INT UNSIGNED NOT NULL,
|
||||
fieldKey VARCHAR(4) NOT NULL COLLATE {$COLLATE_TEXT},
|
||||
rawCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT},
|
||||
termCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT},
|
||||
normalCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}
|
||||
) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
|
|
@ -0,0 +1,5 @@
|
|||
CREATE TABLE {$NAMESPACE}_owners.owners_package_fngrams (
|
||||
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
documentID INT UNSIGNED NOT NULL,
|
||||
ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT}
|
||||
) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
|
|
@ -0,0 +1,9 @@
|
|||
CREATE TABLE {$NAMESPACE}_phame.phame_blog_fdocument (
|
||||
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
objectPHID VARBINARY(64) NOT NULL,
|
||||
isClosed BOOL NOT NULL,
|
||||
authorPHID VARBINARY(64),
|
||||
ownerPHID VARBINARY(64),
|
||||
epochCreated INT UNSIGNED NOT NULL,
|
||||
epochModified INT UNSIGNED NOT NULL
|
||||
) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
|
|
@ -0,0 +1,8 @@
|
|||
CREATE TABLE {$NAMESPACE}_phame.phame_blog_ffield (
|
||||
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
documentID INT UNSIGNED NOT NULL,
|
||||
fieldKey VARCHAR(4) NOT NULL COLLATE {$COLLATE_TEXT},
|
||||
rawCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT},
|
||||
termCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT},
|
||||
normalCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}
|
||||
) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
|
|
@ -0,0 +1,5 @@
|
|||
CREATE TABLE {$NAMESPACE}_phame.phame_blog_fngrams (
|
||||
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
documentID INT UNSIGNED NOT NULL,
|
||||
ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT}
|
||||
) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
|
|
@ -0,0 +1,9 @@
|
|||
CREATE TABLE {$NAMESPACE}_phame.phame_post_fdocument (
|
||||
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
objectPHID VARBINARY(64) NOT NULL,
|
||||
isClosed BOOL NOT NULL,
|
||||
authorPHID VARBINARY(64),
|
||||
ownerPHID VARBINARY(64),
|
||||
epochCreated INT UNSIGNED NOT NULL,
|
||||
epochModified INT UNSIGNED NOT NULL
|
||||
) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
|
|
@ -0,0 +1,8 @@
|
|||
CREATE TABLE {$NAMESPACE}_phame.phame_post_ffield (
|
||||
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
documentID INT UNSIGNED NOT NULL,
|
||||
fieldKey VARCHAR(4) NOT NULL COLLATE {$COLLATE_TEXT},
|
||||
rawCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT},
|
||||
termCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT},
|
||||
normalCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}
|
||||
) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
|
|
@ -0,0 +1,5 @@
|
|||
CREATE TABLE {$NAMESPACE}_phame.phame_post_fngrams (
|
||||
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
documentID INT UNSIGNED NOT NULL,
|
||||
ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT}
|
||||
) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
|
|
@ -0,0 +1,9 @@
|
|||
CREATE TABLE {$NAMESPACE}_project.project_project_fdocument (
|
||||
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
objectPHID VARBINARY(64) NOT NULL,
|
||||
isClosed BOOL NOT NULL,
|
||||
authorPHID VARBINARY(64),
|
||||
ownerPHID VARBINARY(64),
|
||||
epochCreated INT UNSIGNED NOT NULL,
|
||||
epochModified INT UNSIGNED NOT NULL
|
||||
) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
|
|
@ -0,0 +1,8 @@
|
|||
CREATE TABLE {$NAMESPACE}_project.project_project_ffield (
|
||||
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
documentID INT UNSIGNED NOT NULL,
|
||||
fieldKey VARCHAR(4) NOT NULL COLLATE {$COLLATE_TEXT},
|
||||
rawCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT},
|
||||
termCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT},
|
||||
normalCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}
|
||||
) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
|
|
@ -0,0 +1,5 @@
|
|||
CREATE TABLE {$NAMESPACE}_project.project_project_fngrams (
|
||||
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
documentID INT UNSIGNED NOT NULL,
|
||||
ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT}
|
||||
) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
|
|
@ -0,0 +1,9 @@
|
|||
CREATE TABLE {$NAMESPACE}_phriction.phriction_document_fdocument (
|
||||
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
objectPHID VARBINARY(64) NOT NULL,
|
||||
isClosed BOOL NOT NULL,
|
||||
authorPHID VARBINARY(64),
|
||||
ownerPHID VARBINARY(64),
|
||||
epochCreated INT UNSIGNED NOT NULL,
|
||||
epochModified INT UNSIGNED NOT NULL
|
||||
) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
|
|
@ -0,0 +1,8 @@
|
|||
CREATE TABLE {$NAMESPACE}_phriction.phriction_document_ffield (
|
||||
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
documentID INT UNSIGNED NOT NULL,
|
||||
fieldKey VARCHAR(4) NOT NULL COLLATE {$COLLATE_TEXT},
|
||||
rawCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT},
|
||||
termCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT},
|
||||
normalCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}
|
||||
) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
|
|
@ -0,0 +1,5 @@
|
|||
CREATE TABLE {$NAMESPACE}_phriction.phriction_document_fngrams (
|
||||
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
documentID INT UNSIGNED NOT NULL,
|
||||
ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT}
|
||||
) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
|
|
@ -0,0 +1,9 @@
|
|||
CREATE TABLE {$NAMESPACE}_calendar.calendar_event_fdocument (
|
||||
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
objectPHID VARBINARY(64) NOT NULL,
|
||||
isClosed BOOL NOT NULL,
|
||||
authorPHID VARBINARY(64),
|
||||
ownerPHID VARBINARY(64),
|
||||
epochCreated INT UNSIGNED NOT NULL,
|
||||
epochModified INT UNSIGNED NOT NULL
|
||||
) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
|
|
@ -0,0 +1,8 @@
|
|||
CREATE TABLE {$NAMESPACE}_calendar.calendar_event_ffield (
|
||||
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
documentID INT UNSIGNED NOT NULL,
|
||||
fieldKey VARCHAR(4) NOT NULL COLLATE {$COLLATE_TEXT},
|
||||
rawCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT},
|
||||
termCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT},
|
||||
normalCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}
|
||||
) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
|
|
@ -0,0 +1,5 @@
|
|||
CREATE TABLE {$NAMESPACE}_calendar.calendar_event_fngrams (
|
||||
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
documentID INT UNSIGNED NOT NULL,
|
||||
ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT}
|
||||
) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
|
|
@ -0,0 +1,9 @@
|
|||
CREATE TABLE {$NAMESPACE}_pholio.pholio_mock_fdocument (
|
||||
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
objectPHID VARBINARY(64) NOT NULL,
|
||||
isClosed BOOL NOT NULL,
|
||||
authorPHID VARBINARY(64),
|
||||
ownerPHID VARBINARY(64),
|
||||
epochCreated INT UNSIGNED NOT NULL,
|
||||
epochModified INT UNSIGNED NOT NULL
|
||||
) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
|
|
@ -0,0 +1,8 @@
|
|||
CREATE TABLE {$NAMESPACE}_pholio.pholio_mock_ffield (
|
||||
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
documentID INT UNSIGNED NOT NULL,
|
||||
fieldKey VARCHAR(4) NOT NULL COLLATE {$COLLATE_TEXT},
|
||||
rawCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT},
|
||||
termCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT},
|
||||
normalCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}
|
||||
) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
|
|
@ -0,0 +1,5 @@
|
|||
CREATE TABLE {$NAMESPACE}_pholio.pholio_mock_fngrams (
|
||||
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
documentID INT UNSIGNED NOT NULL,
|
||||
ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT}
|
||||
) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
|
|
@ -0,0 +1,9 @@
|
|||
CREATE TABLE {$NAMESPACE}_repository.repository_repository_fdocument (
|
||||
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
objectPHID VARBINARY(64) NOT NULL,
|
||||
isClosed BOOL NOT NULL,
|
||||
authorPHID VARBINARY(64),
|
||||
ownerPHID VARBINARY(64),
|
||||
epochCreated INT UNSIGNED NOT NULL,
|
||||
epochModified INT UNSIGNED NOT NULL
|
||||
) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
|
|
@ -0,0 +1,8 @@
|
|||
CREATE TABLE {$NAMESPACE}_repository.repository_repository_ffield (
|
||||
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
documentID INT UNSIGNED NOT NULL,
|
||||
fieldKey VARCHAR(4) NOT NULL COLLATE {$COLLATE_TEXT},
|
||||
rawCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT},
|
||||
termCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT},
|
||||
normalCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}
|
||||
) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
|
|
@ -0,0 +1,5 @@
|
|||
CREATE TABLE {$NAMESPACE}_repository.repository_repository_fngrams (
|
||||
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
documentID INT UNSIGNED NOT NULL,
|
||||
ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT}
|
||||
) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
|
|
@ -0,0 +1,9 @@
|
|||
CREATE TABLE {$NAMESPACE}_repository.repository_commit_fdocument (
|
||||
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
objectPHID VARBINARY(64) NOT NULL,
|
||||
isClosed BOOL NOT NULL,
|
||||
authorPHID VARBINARY(64),
|
||||
ownerPHID VARBINARY(64),
|
||||
epochCreated INT UNSIGNED NOT NULL,
|
||||
epochModified INT UNSIGNED NOT NULL
|
||||
) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
|
|
@ -0,0 +1,8 @@
|
|||
CREATE TABLE {$NAMESPACE}_repository.repository_commit_ffield (
|
||||
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
documentID INT UNSIGNED NOT NULL,
|
||||
fieldKey VARCHAR(4) NOT NULL COLLATE {$COLLATE_TEXT},
|
||||
rawCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT},
|
||||
termCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT},
|
||||
normalCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}
|
||||
) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
|
|
@ -0,0 +1,5 @@
|
|||
CREATE TABLE {$NAMESPACE}_repository.repository_commit_fngrams (
|
||||
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
documentID INT UNSIGNED NOT NULL,
|
||||
ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT}
|
||||
) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
|
|
@ -532,6 +532,7 @@ phutil_register_library_map(array(
|
|||
'DifferentialRevisionEditConduitAPIMethod' => 'applications/differential/conduit/DifferentialRevisionEditConduitAPIMethod.php',
|
||||
'DifferentialRevisionEditController' => 'applications/differential/controller/DifferentialRevisionEditController.php',
|
||||
'DifferentialRevisionEditEngine' => 'applications/differential/editor/DifferentialRevisionEditEngine.php',
|
||||
'DifferentialRevisionFerretEngine' => 'applications/differential/search/DifferentialRevisionFerretEngine.php',
|
||||
'DifferentialRevisionFulltextEngine' => 'applications/differential/search/DifferentialRevisionFulltextEngine.php',
|
||||
'DifferentialRevisionGraph' => 'infrastructure/graph/DifferentialRevisionGraph.php',
|
||||
'DifferentialRevisionHasChildRelationship' => 'applications/differential/relationships/DifferentialRevisionHasChildRelationship.php',
|
||||
|
@ -651,6 +652,7 @@ phutil_register_library_map(array(
|
|||
'DiffusionCommitEditConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionCommitEditConduitAPIMethod.php',
|
||||
'DiffusionCommitEditController' => 'applications/diffusion/controller/DiffusionCommitEditController.php',
|
||||
'DiffusionCommitEditEngine' => 'applications/diffusion/editor/DiffusionCommitEditEngine.php',
|
||||
'DiffusionCommitFerretEngine' => 'applications/repository/search/DiffusionCommitFerretEngine.php',
|
||||
'DiffusionCommitFulltextEngine' => 'applications/repository/search/DiffusionCommitFulltextEngine.php',
|
||||
'DiffusionCommitHasPackageEdgeType' => 'applications/diffusion/edge/DiffusionCommitHasPackageEdgeType.php',
|
||||
'DiffusionCommitHasRevisionEdgeType' => 'applications/diffusion/edge/DiffusionCommitHasRevisionEdgeType.php',
|
||||
|
@ -839,7 +841,6 @@ phutil_register_library_map(array(
|
|||
'DiffusionRepositoryController' => 'applications/diffusion/controller/DiffusionRepositoryController.php',
|
||||
'DiffusionRepositoryDatasource' => 'applications/diffusion/typeahead/DiffusionRepositoryDatasource.php',
|
||||
'DiffusionRepositoryDefaultController' => 'applications/diffusion/controller/DiffusionRepositoryDefaultController.php',
|
||||
'DiffusionRepositoryDocumentationManagementPanel' => 'applications/diffusion/management/DiffusionRepositoryDocumentationManagementPanel.php',
|
||||
'DiffusionRepositoryEditActivateController' => 'applications/diffusion/controller/DiffusionRepositoryEditActivateController.php',
|
||||
'DiffusionRepositoryEditConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionRepositoryEditConduitAPIMethod.php',
|
||||
'DiffusionRepositoryEditController' => 'applications/diffusion/controller/DiffusionRepositoryEditController.php',
|
||||
|
@ -860,7 +861,6 @@ phutil_register_library_map(array(
|
|||
'DiffusionRepositoryRemarkupRule' => 'applications/diffusion/remarkup/DiffusionRepositoryRemarkupRule.php',
|
||||
'DiffusionRepositorySearchConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionRepositorySearchConduitAPIMethod.php',
|
||||
'DiffusionRepositoryStagingManagementPanel' => 'applications/diffusion/management/DiffusionRepositoryStagingManagementPanel.php',
|
||||
'DiffusionRepositoryStatusManagementPanel' => 'applications/diffusion/management/DiffusionRepositoryStatusManagementPanel.php',
|
||||
'DiffusionRepositoryStorageManagementPanel' => 'applications/diffusion/management/DiffusionRepositoryStorageManagementPanel.php',
|
||||
'DiffusionRepositorySubversionManagementPanel' => 'applications/diffusion/management/DiffusionRepositorySubversionManagementPanel.php',
|
||||
'DiffusionRepositorySymbolsManagementPanel' => 'applications/diffusion/management/DiffusionRepositorySymbolsManagementPanel.php',
|
||||
|
@ -1151,6 +1151,7 @@ phutil_register_library_map(array(
|
|||
'FundInitiativeEditController' => 'applications/fund/controller/FundInitiativeEditController.php',
|
||||
'FundInitiativeEditEngine' => 'applications/fund/editor/FundInitiativeEditEngine.php',
|
||||
'FundInitiativeEditor' => 'applications/fund/editor/FundInitiativeEditor.php',
|
||||
'FundInitiativeFerretEngine' => 'applications/fund/search/FundInitiativeFerretEngine.php',
|
||||
'FundInitiativeFulltextEngine' => 'applications/fund/search/FundInitiativeFulltextEngine.php',
|
||||
'FundInitiativeListController' => 'applications/fund/controller/FundInitiativeListController.php',
|
||||
'FundInitiativeMerchantTransaction' => 'applications/fund/xaction/FundInitiativeMerchantTransaction.php',
|
||||
|
@ -1533,10 +1534,7 @@ phutil_register_library_map(array(
|
|||
'ManiphestTaskEditBulkJobType' => 'applications/maniphest/bulk/ManiphestTaskEditBulkJobType.php',
|
||||
'ManiphestTaskEditController' => 'applications/maniphest/controller/ManiphestTaskEditController.php',
|
||||
'ManiphestTaskEditEngineLock' => 'applications/maniphest/editor/ManiphestTaskEditEngineLock.php',
|
||||
'ManiphestTaskFerretDocument' => 'applications/maniphest/storage/ManiphestTaskFerretDocument.php',
|
||||
'ManiphestTaskFerretEngine' => 'applications/maniphest/search/ManiphestTaskFerretEngine.php',
|
||||
'ManiphestTaskFerretField' => 'applications/maniphest/storage/ManiphestTaskFerretField.php',
|
||||
'ManiphestTaskFerretNgrams' => 'applications/maniphest/storage/ManiphestTaskFerretNgrams.php',
|
||||
'ManiphestTaskFulltextEngine' => 'applications/maniphest/search/ManiphestTaskFulltextEngine.php',
|
||||
'ManiphestTaskGraph' => 'infrastructure/graph/ManiphestTaskGraph.php',
|
||||
'ManiphestTaskHasCommitEdgeType' => 'applications/maniphest/edge/ManiphestTaskHasCommitEdgeType.php',
|
||||
|
@ -1834,6 +1832,7 @@ phutil_register_library_map(array(
|
|||
'PassphraseCredentialDestroyController' => 'applications/passphrase/controller/PassphraseCredentialDestroyController.php',
|
||||
'PassphraseCredentialDestroyTransaction' => 'applications/passphrase/xaction/PassphraseCredentialDestroyTransaction.php',
|
||||
'PassphraseCredentialEditController' => 'applications/passphrase/controller/PassphraseCredentialEditController.php',
|
||||
'PassphraseCredentialFerretEngine' => 'applications/passphrase/search/PassphraseCredentialFerretEngine.php',
|
||||
'PassphraseCredentialFulltextEngine' => 'applications/passphrase/search/PassphraseCredentialFulltextEngine.php',
|
||||
'PassphraseCredentialListController' => 'applications/passphrase/controller/PassphraseCredentialListController.php',
|
||||
'PassphraseCredentialLockController' => 'applications/passphrase/controller/PassphraseCredentialLockController.php',
|
||||
|
@ -2210,6 +2209,7 @@ phutil_register_library_map(array(
|
|||
'PhabricatorCalendarEventEmailCommand' => 'applications/calendar/command/PhabricatorCalendarEventEmailCommand.php',
|
||||
'PhabricatorCalendarEventEndDateTransaction' => 'applications/calendar/xaction/PhabricatorCalendarEventEndDateTransaction.php',
|
||||
'PhabricatorCalendarEventExportController' => 'applications/calendar/controller/PhabricatorCalendarEventExportController.php',
|
||||
'PhabricatorCalendarEventFerretEngine' => 'applications/calendar/search/PhabricatorCalendarEventFerretEngine.php',
|
||||
'PhabricatorCalendarEventForkTransaction' => 'applications/calendar/xaction/PhabricatorCalendarEventForkTransaction.php',
|
||||
'PhabricatorCalendarEventFrequencyTransaction' => 'applications/calendar/xaction/PhabricatorCalendarEventFrequencyTransaction.php',
|
||||
'PhabricatorCalendarEventFulltextEngine' => 'applications/calendar/search/PhabricatorCalendarEventFulltextEngine.php',
|
||||
|
@ -2445,7 +2445,6 @@ phutil_register_library_map(array(
|
|||
'PhabricatorConfigOption' => 'applications/config/option/PhabricatorConfigOption.php',
|
||||
'PhabricatorConfigOptionType' => 'applications/config/custom/PhabricatorConfigOptionType.php',
|
||||
'PhabricatorConfigPHIDModule' => 'applications/config/module/PhabricatorConfigPHIDModule.php',
|
||||
'PhabricatorConfigPageView' => 'applications/config/view/PhabricatorConfigPageView.php',
|
||||
'PhabricatorConfigProxySource' => 'infrastructure/env/PhabricatorConfigProxySource.php',
|
||||
'PhabricatorConfigPurgeCacheController' => 'applications/config/controller/PhabricatorConfigPurgeCacheController.php',
|
||||
'PhabricatorConfigRegexOptionType' => 'applications/config/custom/PhabricatorConfigRegexOptionType.php',
|
||||
|
@ -2832,12 +2831,13 @@ phutil_register_library_map(array(
|
|||
'PhabricatorFeedStoryNotification' => 'applications/notification/storage/PhabricatorFeedStoryNotification.php',
|
||||
'PhabricatorFeedStoryPublisher' => 'applications/feed/PhabricatorFeedStoryPublisher.php',
|
||||
'PhabricatorFeedStoryReference' => 'applications/feed/storage/PhabricatorFeedStoryReference.php',
|
||||
'PhabricatorFerretDocument' => 'applications/search/ferret/PhabricatorFerretDocument.php',
|
||||
'PhabricatorFerretEngine' => 'applications/search/ferret/PhabricatorFerretEngine.php',
|
||||
'PhabricatorFerretField' => 'applications/search/ferret/PhabricatorFerretField.php',
|
||||
'PhabricatorFerretEngineTestCase' => 'applications/search/ferret/__tests__/PhabricatorFerretEngineTestCase.php',
|
||||
'PhabricatorFerretFulltextEngineExtension' => 'applications/search/engineextension/PhabricatorFerretFulltextEngineExtension.php',
|
||||
'PhabricatorFerretFulltextStorageEngine' => 'applications/search/fulltextstorage/PhabricatorFerretFulltextStorageEngine.php',
|
||||
'PhabricatorFerretInterface' => 'applications/search/ferret/PhabricatorFerretInterface.php',
|
||||
'PhabricatorFerretNgrams' => 'applications/search/ferret/PhabricatorFerretNgrams.php',
|
||||
'PhabricatorFerretMetadata' => 'applications/search/ferret/PhabricatorFerretMetadata.php',
|
||||
'PhabricatorFerretSearchEngineExtension' => 'applications/search/engineextension/PhabricatorFerretSearchEngineExtension.php',
|
||||
'PhabricatorFile' => 'applications/files/storage/PhabricatorFile.php',
|
||||
'PhabricatorFileAES256StorageFormat' => 'applications/files/format/PhabricatorFileAES256StorageFormat.php',
|
||||
'PhabricatorFileBundleLoader' => 'applications/files/query/PhabricatorFileBundleLoader.php',
|
||||
|
@ -3205,8 +3205,6 @@ phutil_register_library_map(array(
|
|||
'PhabricatorNamedQueryQuery' => 'applications/search/query/PhabricatorNamedQueryQuery.php',
|
||||
'PhabricatorNavigationRemarkupRule' => 'infrastructure/markup/rule/PhabricatorNavigationRemarkupRule.php',
|
||||
'PhabricatorNeverTriggerClock' => 'infrastructure/daemon/workers/clock/PhabricatorNeverTriggerClock.php',
|
||||
'PhabricatorNgramEngine' => 'applications/search/ngrams/PhabricatorNgramEngine.php',
|
||||
'PhabricatorNgramEngineTestCase' => 'applications/search/ngrams/__tests__/PhabricatorNgramEngineTestCase.php',
|
||||
'PhabricatorNgramsIndexEngineExtension' => 'applications/search/engineextension/PhabricatorNgramsIndexEngineExtension.php',
|
||||
'PhabricatorNgramsInterface' => 'applications/search/interface/PhabricatorNgramsInterface.php',
|
||||
'PhabricatorNotificationBuilder' => 'applications/notification/builder/PhabricatorNotificationBuilder.php',
|
||||
|
@ -3321,7 +3319,8 @@ phutil_register_library_map(array(
|
|||
'PhabricatorOwnersPackageDescriptionTransaction' => 'applications/owners/xaction/PhabricatorOwnersPackageDescriptionTransaction.php',
|
||||
'PhabricatorOwnersPackageDominionTransaction' => 'applications/owners/xaction/PhabricatorOwnersPackageDominionTransaction.php',
|
||||
'PhabricatorOwnersPackageEditEngine' => 'applications/owners/editor/PhabricatorOwnersPackageEditEngine.php',
|
||||
'PhabricatorOwnersPackageFulltextEngine' => 'applications/owners/query/PhabricatorOwnersPackageFulltextEngine.php',
|
||||
'PhabricatorOwnersPackageFerretEngine' => 'applications/owners/search/PhabricatorOwnersPackageFerretEngine.php',
|
||||
'PhabricatorOwnersPackageFulltextEngine' => 'applications/owners/search/PhabricatorOwnersPackageFulltextEngine.php',
|
||||
'PhabricatorOwnersPackageFunctionDatasource' => 'applications/owners/typeahead/PhabricatorOwnersPackageFunctionDatasource.php',
|
||||
'PhabricatorOwnersPackageNameNgrams' => 'applications/owners/storage/PhabricatorOwnersPackageNameNgrams.php',
|
||||
'PhabricatorOwnersPackageNameTransaction' => 'applications/owners/xaction/PhabricatorOwnersPackageNameTransaction.php',
|
||||
|
@ -3669,6 +3668,7 @@ phutil_register_library_map(array(
|
|||
'PhabricatorProjectEditController' => 'applications/project/controller/PhabricatorProjectEditController.php',
|
||||
'PhabricatorProjectEditEngine' => 'applications/project/engine/PhabricatorProjectEditEngine.php',
|
||||
'PhabricatorProjectEditPictureController' => 'applications/project/controller/PhabricatorProjectEditPictureController.php',
|
||||
'PhabricatorProjectFerretEngine' => 'applications/project/search/PhabricatorProjectFerretEngine.php',
|
||||
'PhabricatorProjectFilterTransaction' => 'applications/project/xaction/PhabricatorProjectFilterTransaction.php',
|
||||
'PhabricatorProjectFulltextEngine' => 'applications/project/search/PhabricatorProjectFulltextEngine.php',
|
||||
'PhabricatorProjectHeraldAction' => 'applications/project/herald/PhabricatorProjectHeraldAction.php',
|
||||
|
@ -3686,6 +3686,7 @@ phutil_register_library_map(array(
|
|||
'PhabricatorProjectLockTransaction' => 'applications/project/xaction/PhabricatorProjectLockTransaction.php',
|
||||
'PhabricatorProjectLogicalAncestorDatasource' => 'applications/project/typeahead/PhabricatorProjectLogicalAncestorDatasource.php',
|
||||
'PhabricatorProjectLogicalDatasource' => 'applications/project/typeahead/PhabricatorProjectLogicalDatasource.php',
|
||||
'PhabricatorProjectLogicalOnlyDatasource' => 'applications/project/typeahead/PhabricatorProjectLogicalOnlyDatasource.php',
|
||||
'PhabricatorProjectLogicalOrNotDatasource' => 'applications/project/typeahead/PhabricatorProjectLogicalOrNotDatasource.php',
|
||||
'PhabricatorProjectLogicalUserDatasource' => 'applications/project/typeahead/PhabricatorProjectLogicalUserDatasource.php',
|
||||
'PhabricatorProjectLogicalViewerDatasource' => 'applications/project/typeahead/PhabricatorProjectLogicalViewerDatasource.php',
|
||||
|
@ -3807,6 +3808,7 @@ phutil_register_library_map(array(
|
|||
'PhabricatorRepositoryDiscoveryEngine' => 'applications/repository/engine/PhabricatorRepositoryDiscoveryEngine.php',
|
||||
'PhabricatorRepositoryEditor' => 'applications/repository/editor/PhabricatorRepositoryEditor.php',
|
||||
'PhabricatorRepositoryEngine' => 'applications/repository/engine/PhabricatorRepositoryEngine.php',
|
||||
'PhabricatorRepositoryFerretEngine' => 'applications/repository/search/PhabricatorRepositoryFerretEngine.php',
|
||||
'PhabricatorRepositoryFulltextEngine' => 'applications/repository/search/PhabricatorRepositoryFulltextEngine.php',
|
||||
'PhabricatorRepositoryGitCommitChangeParserWorker' => 'applications/repository/worker/commitchangeparser/PhabricatorRepositoryGitCommitChangeParserWorker.php',
|
||||
'PhabricatorRepositoryGitCommitMessageParserWorker' => 'applications/repository/worker/commitmessageparser/PhabricatorRepositoryGitCommitMessageParserWorker.php',
|
||||
|
@ -4086,6 +4088,7 @@ phutil_register_library_map(array(
|
|||
'PhabricatorStorageFixtureScopeGuard' => 'infrastructure/testing/fixture/PhabricatorStorageFixtureScopeGuard.php',
|
||||
'PhabricatorStorageManagementAPI' => 'infrastructure/storage/management/PhabricatorStorageManagementAPI.php',
|
||||
'PhabricatorStorageManagementAdjustWorkflow' => 'infrastructure/storage/management/workflow/PhabricatorStorageManagementAdjustWorkflow.php',
|
||||
'PhabricatorStorageManagementAnalyzeWorkflow' => 'infrastructure/storage/management/workflow/PhabricatorStorageManagementAnalyzeWorkflow.php',
|
||||
'PhabricatorStorageManagementDatabasesWorkflow' => 'infrastructure/storage/management/workflow/PhabricatorStorageManagementDatabasesWorkflow.php',
|
||||
'PhabricatorStorageManagementDestroyWorkflow' => 'infrastructure/storage/management/workflow/PhabricatorStorageManagementDestroyWorkflow.php',
|
||||
'PhabricatorStorageManagementDumpWorkflow' => 'infrastructure/storage/management/workflow/PhabricatorStorageManagementDumpWorkflow.php',
|
||||
|
@ -4253,6 +4256,7 @@ phutil_register_library_map(array(
|
|||
'PhabricatorUserEditorTestCase' => 'applications/people/editor/__tests__/PhabricatorUserEditorTestCase.php',
|
||||
'PhabricatorUserEmail' => 'applications/people/storage/PhabricatorUserEmail.php',
|
||||
'PhabricatorUserEmailTestCase' => 'applications/people/storage/__tests__/PhabricatorUserEmailTestCase.php',
|
||||
'PhabricatorUserFerretEngine' => 'applications/people/search/PhabricatorUserFerretEngine.php',
|
||||
'PhabricatorUserFulltextEngine' => 'applications/people/search/PhabricatorUserFulltextEngine.php',
|
||||
'PhabricatorUserIconField' => 'applications/people/customfield/PhabricatorUserIconField.php',
|
||||
'PhabricatorUserLog' => 'applications/people/storage/PhabricatorUserLog.php',
|
||||
|
@ -4372,6 +4376,7 @@ phutil_register_library_map(array(
|
|||
'PhameBlogEditEngine' => 'applications/phame/editor/PhameBlogEditEngine.php',
|
||||
'PhameBlogEditor' => 'applications/phame/editor/PhameBlogEditor.php',
|
||||
'PhameBlogFeedController' => 'applications/phame/controller/blog/PhameBlogFeedController.php',
|
||||
'PhameBlogFerretEngine' => 'applications/phame/search/PhameBlogFerretEngine.php',
|
||||
'PhameBlogFullDomainTransaction' => 'applications/phame/xaction/PhameBlogFullDomainTransaction.php',
|
||||
'PhameBlogFulltextEngine' => 'applications/phame/search/PhameBlogFulltextEngine.php',
|
||||
'PhameBlogHeaderImageTransaction' => 'applications/phame/xaction/PhameBlogHeaderImageTransaction.php',
|
||||
|
@ -4412,6 +4417,7 @@ phutil_register_library_map(array(
|
|||
'PhamePostEditController' => 'applications/phame/controller/post/PhamePostEditController.php',
|
||||
'PhamePostEditEngine' => 'applications/phame/editor/PhamePostEditEngine.php',
|
||||
'PhamePostEditor' => 'applications/phame/editor/PhamePostEditor.php',
|
||||
'PhamePostFerretEngine' => 'applications/phame/search/PhamePostFerretEngine.php',
|
||||
'PhamePostFulltextEngine' => 'applications/phame/search/PhamePostFulltextEngine.php',
|
||||
'PhamePostHeaderImageTransaction' => 'applications/phame/xaction/PhamePostHeaderImageTransaction.php',
|
||||
'PhamePostHeaderPictureController' => 'applications/phame/controller/post/PhamePostHeaderPictureController.php',
|
||||
|
@ -4472,6 +4478,7 @@ phutil_register_library_map(array(
|
|||
'PholioMockEditController' => 'applications/pholio/controller/PholioMockEditController.php',
|
||||
'PholioMockEditor' => 'applications/pholio/editor/PholioMockEditor.php',
|
||||
'PholioMockEmbedView' => 'applications/pholio/view/PholioMockEmbedView.php',
|
||||
'PholioMockFerretEngine' => 'applications/pholio/search/PholioMockFerretEngine.php',
|
||||
'PholioMockFulltextEngine' => 'applications/pholio/search/PholioMockFulltextEngine.php',
|
||||
'PholioMockHasTaskEdgeType' => 'applications/pholio/edge/PholioMockHasTaskEdgeType.php',
|
||||
'PholioMockHasTaskRelationship' => 'applications/pholio/relationships/PholioMockHasTaskRelationship.php',
|
||||
|
@ -4692,6 +4699,7 @@ phutil_register_library_map(array(
|
|||
'PhrictionDocumentContentTransaction' => 'applications/phriction/xaction/PhrictionDocumentContentTransaction.php',
|
||||
'PhrictionDocumentController' => 'applications/phriction/controller/PhrictionDocumentController.php',
|
||||
'PhrictionDocumentDeleteTransaction' => 'applications/phriction/xaction/PhrictionDocumentDeleteTransaction.php',
|
||||
'PhrictionDocumentFerretEngine' => 'applications/phriction/search/PhrictionDocumentFerretEngine.php',
|
||||
'PhrictionDocumentFulltextEngine' => 'applications/phriction/search/PhrictionDocumentFulltextEngine.php',
|
||||
'PhrictionDocumentHeraldAdapter' => 'applications/phriction/herald/PhrictionDocumentHeraldAdapter.php',
|
||||
'PhrictionDocumentHeraldField' => 'applications/phriction/herald/PhrictionDocumentHeraldField.php',
|
||||
|
@ -5524,6 +5532,7 @@ phutil_register_library_map(array(
|
|||
'PhabricatorDestructibleInterface',
|
||||
'PhabricatorProjectInterface',
|
||||
'PhabricatorFulltextInterface',
|
||||
'PhabricatorFerretInterface',
|
||||
'PhabricatorConduitResultInterface',
|
||||
'PhabricatorDraftInterface',
|
||||
),
|
||||
|
@ -5547,6 +5556,7 @@ phutil_register_library_map(array(
|
|||
'DifferentialRevisionEditConduitAPIMethod' => 'PhabricatorEditEngineAPIMethod',
|
||||
'DifferentialRevisionEditController' => 'DifferentialController',
|
||||
'DifferentialRevisionEditEngine' => 'PhabricatorEditEngine',
|
||||
'DifferentialRevisionFerretEngine' => 'PhabricatorFerretEngine',
|
||||
'DifferentialRevisionFulltextEngine' => 'PhabricatorFulltextEngine',
|
||||
'DifferentialRevisionGraph' => 'PhabricatorObjectGraph',
|
||||
'DifferentialRevisionHasChildRelationship' => 'DifferentialRevisionRelationship',
|
||||
|
@ -5666,6 +5676,7 @@ phutil_register_library_map(array(
|
|||
'DiffusionCommitEditConduitAPIMethod' => 'PhabricatorEditEngineAPIMethod',
|
||||
'DiffusionCommitEditController' => 'DiffusionController',
|
||||
'DiffusionCommitEditEngine' => 'PhabricatorEditEngine',
|
||||
'DiffusionCommitFerretEngine' => 'PhabricatorFerretEngine',
|
||||
'DiffusionCommitFulltextEngine' => 'PhabricatorFulltextEngine',
|
||||
'DiffusionCommitHasPackageEdgeType' => 'PhabricatorEdgeType',
|
||||
'DiffusionCommitHasRevisionEdgeType' => 'PhabricatorEdgeType',
|
||||
|
@ -5856,7 +5867,6 @@ phutil_register_library_map(array(
|
|||
'DiffusionRepositoryController' => 'DiffusionController',
|
||||
'DiffusionRepositoryDatasource' => 'PhabricatorTypeaheadDatasource',
|
||||
'DiffusionRepositoryDefaultController' => 'DiffusionController',
|
||||
'DiffusionRepositoryDocumentationManagementPanel' => 'DiffusionRepositoryManagementPanel',
|
||||
'DiffusionRepositoryEditActivateController' => 'DiffusionRepositoryManageController',
|
||||
'DiffusionRepositoryEditConduitAPIMethod' => 'PhabricatorEditEngineAPIMethod',
|
||||
'DiffusionRepositoryEditController' => 'DiffusionRepositoryManageController',
|
||||
|
@ -5877,7 +5887,6 @@ phutil_register_library_map(array(
|
|||
'DiffusionRepositoryRemarkupRule' => 'PhabricatorObjectRemarkupRule',
|
||||
'DiffusionRepositorySearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod',
|
||||
'DiffusionRepositoryStagingManagementPanel' => 'DiffusionRepositoryManagementPanel',
|
||||
'DiffusionRepositoryStatusManagementPanel' => 'DiffusionRepositoryManagementPanel',
|
||||
'DiffusionRepositoryStorageManagementPanel' => 'DiffusionRepositoryManagementPanel',
|
||||
'DiffusionRepositorySubversionManagementPanel' => 'DiffusionRepositoryManagementPanel',
|
||||
'DiffusionRepositorySymbolsManagementPanel' => 'DiffusionRepositoryManagementPanel',
|
||||
|
@ -6220,6 +6229,7 @@ phutil_register_library_map(array(
|
|||
'PhabricatorTokenReceiverInterface',
|
||||
'PhabricatorDestructibleInterface',
|
||||
'PhabricatorFulltextInterface',
|
||||
'PhabricatorFerretInterface',
|
||||
),
|
||||
'FundInitiativeBackController' => 'FundController',
|
||||
'FundInitiativeBackerTransaction' => 'FundInitiativeTransactionType',
|
||||
|
@ -6228,6 +6238,7 @@ phutil_register_library_map(array(
|
|||
'FundInitiativeEditController' => 'FundController',
|
||||
'FundInitiativeEditEngine' => 'PhabricatorEditEngine',
|
||||
'FundInitiativeEditor' => 'PhabricatorApplicationTransactionEditor',
|
||||
'FundInitiativeFerretEngine' => 'PhabricatorFerretEngine',
|
||||
'FundInitiativeFulltextEngine' => 'PhabricatorFulltextEngine',
|
||||
'FundInitiativeListController' => 'FundController',
|
||||
'FundInitiativeMerchantTransaction' => 'FundInitiativeTransactionType',
|
||||
|
@ -6695,10 +6706,7 @@ phutil_register_library_map(array(
|
|||
'ManiphestTaskEditBulkJobType' => 'PhabricatorWorkerBulkJobType',
|
||||
'ManiphestTaskEditController' => 'ManiphestController',
|
||||
'ManiphestTaskEditEngineLock' => 'PhabricatorEditEngineLock',
|
||||
'ManiphestTaskFerretDocument' => 'PhabricatorFerretDocument',
|
||||
'ManiphestTaskFerretEngine' => 'PhabricatorFerretEngine',
|
||||
'ManiphestTaskFerretField' => 'PhabricatorFerretField',
|
||||
'ManiphestTaskFerretNgrams' => 'PhabricatorFerretNgrams',
|
||||
'ManiphestTaskFulltextEngine' => 'PhabricatorFulltextEngine',
|
||||
'ManiphestTaskGraph' => 'PhabricatorObjectGraph',
|
||||
'ManiphestTaskHasCommitEdgeType' => 'PhabricatorEdgeType',
|
||||
|
@ -7014,6 +7022,7 @@ phutil_register_library_map(array(
|
|||
'PhabricatorDestructibleInterface',
|
||||
'PhabricatorSpacesInterface',
|
||||
'PhabricatorFulltextInterface',
|
||||
'PhabricatorFerretInterface',
|
||||
),
|
||||
'PassphraseCredentialAuthorPolicyRule' => 'PhabricatorPolicyRule',
|
||||
'PassphraseCredentialConduitController' => 'PassphraseController',
|
||||
|
@ -7024,6 +7033,7 @@ phutil_register_library_map(array(
|
|||
'PassphraseCredentialDestroyController' => 'PassphraseController',
|
||||
'PassphraseCredentialDestroyTransaction' => 'PassphraseCredentialTransactionType',
|
||||
'PassphraseCredentialEditController' => 'PassphraseController',
|
||||
'PassphraseCredentialFerretEngine' => 'PhabricatorFerretEngine',
|
||||
'PassphraseCredentialFulltextEngine' => 'PhabricatorFulltextEngine',
|
||||
'PassphraseCredentialListController' => 'PassphraseController',
|
||||
'PassphraseCredentialLockController' => 'PassphraseController',
|
||||
|
@ -7442,6 +7452,7 @@ phutil_register_library_map(array(
|
|||
'PhabricatorFlaggableInterface',
|
||||
'PhabricatorSpacesInterface',
|
||||
'PhabricatorFulltextInterface',
|
||||
'PhabricatorFerretInterface',
|
||||
'PhabricatorConduitResultInterface',
|
||||
),
|
||||
'PhabricatorCalendarEventAcceptTransaction' => 'PhabricatorCalendarEventReplyTransaction',
|
||||
|
@ -7462,6 +7473,7 @@ phutil_register_library_map(array(
|
|||
'PhabricatorCalendarEventEmailCommand' => 'MetaMTAEmailTransactionCommand',
|
||||
'PhabricatorCalendarEventEndDateTransaction' => 'PhabricatorCalendarEventDateTransaction',
|
||||
'PhabricatorCalendarEventExportController' => 'PhabricatorCalendarController',
|
||||
'PhabricatorCalendarEventFerretEngine' => 'PhabricatorFerretEngine',
|
||||
'PhabricatorCalendarEventForkTransaction' => 'PhabricatorCalendarEventTransactionType',
|
||||
'PhabricatorCalendarEventFrequencyTransaction' => 'PhabricatorCalendarEventTransactionType',
|
||||
'PhabricatorCalendarEventFulltextEngine' => 'PhabricatorFulltextEngine',
|
||||
|
@ -7735,7 +7747,6 @@ phutil_register_library_map(array(
|
|||
),
|
||||
'PhabricatorConfigOptionType' => 'Phobject',
|
||||
'PhabricatorConfigPHIDModule' => 'PhabricatorConfigModule',
|
||||
'PhabricatorConfigPageView' => 'AphrontTagView',
|
||||
'PhabricatorConfigProxySource' => 'PhabricatorConfigSource',
|
||||
'PhabricatorConfigPurgeCacheController' => 'PhabricatorConfigController',
|
||||
'PhabricatorConfigRegexOptionType' => 'PhabricatorConfigJSONOptionType',
|
||||
|
@ -8164,11 +8175,12 @@ phutil_register_library_map(array(
|
|||
'PhabricatorFeedStoryNotification' => 'PhabricatorFeedDAO',
|
||||
'PhabricatorFeedStoryPublisher' => 'Phobject',
|
||||
'PhabricatorFeedStoryReference' => 'PhabricatorFeedDAO',
|
||||
'PhabricatorFerretDocument' => 'PhabricatorSearchDAO',
|
||||
'PhabricatorFerretEngine' => 'Phobject',
|
||||
'PhabricatorFerretField' => 'PhabricatorSearchDAO',
|
||||
'PhabricatorFerretEngineTestCase' => 'PhabricatorTestCase',
|
||||
'PhabricatorFerretFulltextEngineExtension' => 'PhabricatorFulltextEngineExtension',
|
||||
'PhabricatorFerretNgrams' => 'PhabricatorSearchDAO',
|
||||
'PhabricatorFerretFulltextStorageEngine' => 'PhabricatorFulltextStorageEngine',
|
||||
'PhabricatorFerretMetadata' => 'Phobject',
|
||||
'PhabricatorFerretSearchEngineExtension' => 'PhabricatorSearchEngineExtension',
|
||||
'PhabricatorFile' => array(
|
||||
'PhabricatorFileDAO',
|
||||
'PhabricatorApplicationTransactionInterface',
|
||||
|
@ -8587,8 +8599,6 @@ phutil_register_library_map(array(
|
|||
'PhabricatorNamedQueryQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
|
||||
'PhabricatorNavigationRemarkupRule' => 'PhutilRemarkupRule',
|
||||
'PhabricatorNeverTriggerClock' => 'PhabricatorTriggerClock',
|
||||
'PhabricatorNgramEngine' => 'Phobject',
|
||||
'PhabricatorNgramEngineTestCase' => 'PhabricatorTestCase',
|
||||
'PhabricatorNgramsIndexEngineExtension' => 'PhabricatorIndexEngineExtension',
|
||||
'PhabricatorNgramsInterface' => 'PhabricatorIndexableInterface',
|
||||
'PhabricatorNotificationBuilder' => 'Phobject',
|
||||
|
@ -8717,6 +8727,7 @@ phutil_register_library_map(array(
|
|||
'PhabricatorDestructibleInterface',
|
||||
'PhabricatorConduitResultInterface',
|
||||
'PhabricatorFulltextInterface',
|
||||
'PhabricatorFerretInterface',
|
||||
'PhabricatorNgramsInterface',
|
||||
),
|
||||
'PhabricatorOwnersPackageAuditingTransaction' => 'PhabricatorOwnersPackageTransactionType',
|
||||
|
@ -8726,6 +8737,7 @@ phutil_register_library_map(array(
|
|||
'PhabricatorOwnersPackageDescriptionTransaction' => 'PhabricatorOwnersPackageTransactionType',
|
||||
'PhabricatorOwnersPackageDominionTransaction' => 'PhabricatorOwnersPackageTransactionType',
|
||||
'PhabricatorOwnersPackageEditEngine' => 'PhabricatorEditEngine',
|
||||
'PhabricatorOwnersPackageFerretEngine' => 'PhabricatorFerretEngine',
|
||||
'PhabricatorOwnersPackageFulltextEngine' => 'PhabricatorFulltextEngine',
|
||||
'PhabricatorOwnersPackageFunctionDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
|
||||
'PhabricatorOwnersPackageNameNgrams' => 'PhabricatorSearchNgrams',
|
||||
|
@ -9103,6 +9115,7 @@ phutil_register_library_map(array(
|
|||
'PhabricatorCustomFieldInterface',
|
||||
'PhabricatorDestructibleInterface',
|
||||
'PhabricatorFulltextInterface',
|
||||
'PhabricatorFerretInterface',
|
||||
'PhabricatorConduitResultInterface',
|
||||
'PhabricatorColumnProxyInterface',
|
||||
),
|
||||
|
@ -9162,6 +9175,7 @@ phutil_register_library_map(array(
|
|||
'PhabricatorProjectEditController' => 'PhabricatorProjectController',
|
||||
'PhabricatorProjectEditEngine' => 'PhabricatorEditEngine',
|
||||
'PhabricatorProjectEditPictureController' => 'PhabricatorProjectController',
|
||||
'PhabricatorProjectFerretEngine' => 'PhabricatorFerretEngine',
|
||||
'PhabricatorProjectFilterTransaction' => 'PhabricatorProjectTransactionType',
|
||||
'PhabricatorProjectFulltextEngine' => 'PhabricatorFulltextEngine',
|
||||
'PhabricatorProjectHeraldAction' => 'HeraldAction',
|
||||
|
@ -9178,6 +9192,7 @@ phutil_register_library_map(array(
|
|||
'PhabricatorProjectLockTransaction' => 'PhabricatorProjectTransactionType',
|
||||
'PhabricatorProjectLogicalAncestorDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
|
||||
'PhabricatorProjectLogicalDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
|
||||
'PhabricatorProjectLogicalOnlyDatasource' => 'PhabricatorTypeaheadDatasource',
|
||||
'PhabricatorProjectLogicalOrNotDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
|
||||
'PhabricatorProjectLogicalUserDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
|
||||
'PhabricatorProjectLogicalViewerDatasource' => 'PhabricatorTypeaheadDatasource',
|
||||
|
@ -9297,6 +9312,7 @@ phutil_register_library_map(array(
|
|||
'PhabricatorSpacesInterface',
|
||||
'PhabricatorConduitResultInterface',
|
||||
'PhabricatorFulltextInterface',
|
||||
'PhabricatorFerretInterface',
|
||||
),
|
||||
'PhabricatorRepositoryAuditRequest' => array(
|
||||
'PhabricatorRepositoryDAO',
|
||||
|
@ -9317,6 +9333,7 @@ phutil_register_library_map(array(
|
|||
'PhabricatorCustomFieldInterface',
|
||||
'PhabricatorApplicationTransactionInterface',
|
||||
'PhabricatorFulltextInterface',
|
||||
'PhabricatorFerretInterface',
|
||||
'PhabricatorConduitResultInterface',
|
||||
'PhabricatorDraftInterface',
|
||||
),
|
||||
|
@ -9339,6 +9356,7 @@ phutil_register_library_map(array(
|
|||
'PhabricatorRepositoryDiscoveryEngine' => 'PhabricatorRepositoryEngine',
|
||||
'PhabricatorRepositoryEditor' => 'PhabricatorApplicationTransactionEditor',
|
||||
'PhabricatorRepositoryEngine' => 'Phobject',
|
||||
'PhabricatorRepositoryFerretEngine' => 'PhabricatorFerretEngine',
|
||||
'PhabricatorRepositoryFulltextEngine' => 'PhabricatorFulltextEngine',
|
||||
'PhabricatorRepositoryGitCommitChangeParserWorker' => 'PhabricatorRepositoryCommitChangeParserWorker',
|
||||
'PhabricatorRepositoryGitCommitMessageParserWorker' => 'PhabricatorRepositoryCommitMessageParserWorker',
|
||||
|
@ -9662,6 +9680,7 @@ phutil_register_library_map(array(
|
|||
'PhabricatorStorageFixtureScopeGuard' => 'Phobject',
|
||||
'PhabricatorStorageManagementAPI' => 'Phobject',
|
||||
'PhabricatorStorageManagementAdjustWorkflow' => 'PhabricatorStorageManagementWorkflow',
|
||||
'PhabricatorStorageManagementAnalyzeWorkflow' => 'PhabricatorStorageManagementWorkflow',
|
||||
'PhabricatorStorageManagementDatabasesWorkflow' => 'PhabricatorStorageManagementWorkflow',
|
||||
'PhabricatorStorageManagementDestroyWorkflow' => 'PhabricatorStorageManagementWorkflow',
|
||||
'PhabricatorStorageManagementDumpWorkflow' => 'PhabricatorStorageManagementWorkflow',
|
||||
|
@ -9831,6 +9850,7 @@ phutil_register_library_map(array(
|
|||
'PhabricatorFlaggableInterface',
|
||||
'PhabricatorApplicationTransactionInterface',
|
||||
'PhabricatorFulltextInterface',
|
||||
'PhabricatorFerretInterface',
|
||||
'PhabricatorConduitResultInterface',
|
||||
),
|
||||
'PhabricatorUserBadgesCacheType' => 'PhabricatorUserCacheType',
|
||||
|
@ -9853,6 +9873,7 @@ phutil_register_library_map(array(
|
|||
'PhabricatorUserEditorTestCase' => 'PhabricatorTestCase',
|
||||
'PhabricatorUserEmail' => 'PhabricatorUserDAO',
|
||||
'PhabricatorUserEmailTestCase' => 'PhabricatorTestCase',
|
||||
'PhabricatorUserFerretEngine' => 'PhabricatorFerretEngine',
|
||||
'PhabricatorUserFulltextEngine' => 'PhabricatorFulltextEngine',
|
||||
'PhabricatorUserIconField' => 'PhabricatorUserCustomField',
|
||||
'PhabricatorUserLog' => array(
|
||||
|
@ -9992,6 +10013,7 @@ phutil_register_library_map(array(
|
|||
'PhabricatorApplicationTransactionInterface',
|
||||
'PhabricatorConduitResultInterface',
|
||||
'PhabricatorFulltextInterface',
|
||||
'PhabricatorFerretInterface',
|
||||
),
|
||||
'PhameBlog404Controller' => 'PhameLiveController',
|
||||
'PhameBlogArchiveController' => 'PhameBlogController',
|
||||
|
@ -10004,6 +10026,7 @@ phutil_register_library_map(array(
|
|||
'PhameBlogEditEngine' => 'PhabricatorEditEngine',
|
||||
'PhameBlogEditor' => 'PhabricatorApplicationTransactionEditor',
|
||||
'PhameBlogFeedController' => 'PhameBlogController',
|
||||
'PhameBlogFerretEngine' => 'PhabricatorFerretEngine',
|
||||
'PhameBlogFullDomainTransaction' => 'PhameBlogTransactionType',
|
||||
'PhameBlogFulltextEngine' => 'PhabricatorFulltextEngine',
|
||||
'PhameBlogHeaderImageTransaction' => 'PhameBlogTransactionType',
|
||||
|
@ -10047,6 +10070,7 @@ phutil_register_library_map(array(
|
|||
'PhabricatorTokenReceiverInterface',
|
||||
'PhabricatorConduitResultInterface',
|
||||
'PhabricatorFulltextInterface',
|
||||
'PhabricatorFerretInterface',
|
||||
),
|
||||
'PhamePostArchiveController' => 'PhamePostController',
|
||||
'PhamePostBlogTransaction' => 'PhamePostTransactionType',
|
||||
|
@ -10056,6 +10080,7 @@ phutil_register_library_map(array(
|
|||
'PhamePostEditController' => 'PhamePostController',
|
||||
'PhamePostEditEngine' => 'PhabricatorEditEngine',
|
||||
'PhamePostEditor' => 'PhabricatorApplicationTransactionEditor',
|
||||
'PhamePostFerretEngine' => 'PhabricatorFerretEngine',
|
||||
'PhamePostFulltextEngine' => 'PhabricatorFulltextEngine',
|
||||
'PhamePostHeaderImageTransaction' => 'PhamePostTransactionType',
|
||||
'PhamePostHeaderPictureController' => 'PhamePostController',
|
||||
|
@ -10129,6 +10154,7 @@ phutil_register_library_map(array(
|
|||
'PhabricatorSpacesInterface',
|
||||
'PhabricatorMentionableInterface',
|
||||
'PhabricatorFulltextInterface',
|
||||
'PhabricatorFerretInterface',
|
||||
),
|
||||
'PholioMockArchiveController' => 'PholioController',
|
||||
'PholioMockAuthorHeraldField' => 'PholioMockHeraldField',
|
||||
|
@ -10138,6 +10164,7 @@ phutil_register_library_map(array(
|
|||
'PholioMockEditController' => 'PholioController',
|
||||
'PholioMockEditor' => 'PhabricatorApplicationTransactionEditor',
|
||||
'PholioMockEmbedView' => 'AphrontView',
|
||||
'PholioMockFerretEngine' => 'PhabricatorFerretEngine',
|
||||
'PholioMockFulltextEngine' => 'PhabricatorFulltextEngine',
|
||||
'PholioMockHasTaskEdgeType' => 'PhabricatorEdgeType',
|
||||
'PholioMockHasTaskRelationship' => 'PholioMockRelationship',
|
||||
|
@ -10408,6 +10435,7 @@ phutil_register_library_map(array(
|
|||
'PhabricatorTokenReceiverInterface',
|
||||
'PhabricatorDestructibleInterface',
|
||||
'PhabricatorFulltextInterface',
|
||||
'PhabricatorFerretInterface',
|
||||
'PhabricatorProjectInterface',
|
||||
'PhabricatorApplicationTransactionInterface',
|
||||
),
|
||||
|
@ -10416,6 +10444,7 @@ phutil_register_library_map(array(
|
|||
'PhrictionDocumentContentTransaction' => 'PhrictionDocumentTransactionType',
|
||||
'PhrictionDocumentController' => 'PhrictionController',
|
||||
'PhrictionDocumentDeleteTransaction' => 'PhrictionDocumentTransactionType',
|
||||
'PhrictionDocumentFerretEngine' => 'PhabricatorFerretEngine',
|
||||
'PhrictionDocumentFulltextEngine' => 'PhabricatorFulltextEngine',
|
||||
'PhrictionDocumentHeraldAdapter' => 'HeraldAdapter',
|
||||
'PhrictionDocumentHeraldField' => 'HeraldField',
|
||||
|
|
|
@ -57,6 +57,10 @@ abstract class PhabricatorApplication
|
|||
|
||||
abstract public function getName();
|
||||
|
||||
public function getMenuName() {
|
||||
return $this->getName();
|
||||
}
|
||||
|
||||
public function getShortDescription() {
|
||||
return pht('%s Application', $this->getName());
|
||||
}
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
<?php
|
||||
|
||||
final class PhabricatorCalendarEventFerretEngine
|
||||
extends PhabricatorFerretEngine {
|
||||
|
||||
public function getApplicationName() {
|
||||
return 'calendar';
|
||||
}
|
||||
|
||||
public function getScopeName() {
|
||||
return 'event';
|
||||
}
|
||||
|
||||
public function newSearchEngine() {
|
||||
return new PhabricatorCalendarEventSearchEngine();
|
||||
}
|
||||
|
||||
}
|
|
@ -15,6 +15,7 @@ final class PhabricatorCalendarEvent extends PhabricatorCalendarDAO
|
|||
PhabricatorFlaggableInterface,
|
||||
PhabricatorSpacesInterface,
|
||||
PhabricatorFulltextInterface,
|
||||
PhabricatorFerretInterface,
|
||||
PhabricatorConduitResultInterface {
|
||||
|
||||
protected $name;
|
||||
|
@ -1380,6 +1381,14 @@ final class PhabricatorCalendarEvent extends PhabricatorCalendarDAO
|
|||
}
|
||||
|
||||
|
||||
/* -( PhabricatorFerretInterface )----------------------------------------- */
|
||||
|
||||
|
||||
public function newFerretEngine() {
|
||||
return new PhabricatorCalendarEventFerretEngine();
|
||||
}
|
||||
|
||||
|
||||
/* -( PhabricatorConduitResultInterface )---------------------------------- */
|
||||
|
||||
|
||||
|
|
|
@ -88,18 +88,19 @@ final class PhabricatorConduitTokensSettingsPanel
|
|||
));
|
||||
|
||||
$generate_button = id(new PHUIButtonView())
|
||||
->setText(pht('Generate API Token'))
|
||||
->setText(pht('Generate Token'))
|
||||
->setHref('/conduit/token/edit/?objectPHID='.$user->getPHID())
|
||||
->setTag('a')
|
||||
->setWorkflow(true)
|
||||
->setIcon('fa-plus');
|
||||
|
||||
$terminate_button = id(new PHUIButtonView())
|
||||
->setText(pht('Terminate All Tokens'))
|
||||
->setText(pht('Terminate Tokens'))
|
||||
->setHref('/conduit/token/terminate/?objectPHID='.$user->getPHID())
|
||||
->setTag('a')
|
||||
->setWorkflow(true)
|
||||
->setIcon('fa-exclamation-triangle');
|
||||
->setIcon('fa-exclamation-triangle')
|
||||
->setColor(PHUIButtonView::RED);
|
||||
|
||||
$header = id(new PHUIHeaderView())
|
||||
->setHeader(pht('Active API Tokens'))
|
||||
|
@ -108,8 +109,8 @@ final class PhabricatorConduitTokensSettingsPanel
|
|||
|
||||
$panel = id(new PHUIObjectBoxView())
|
||||
->setHeader($header)
|
||||
->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
|
||||
->setTable($table);
|
||||
->setBackground(PHUIObjectBoxView::WHITE_CONFIG)
|
||||
->appendChild($table);
|
||||
|
||||
return $panel;
|
||||
}
|
||||
|
|
|
@ -28,8 +28,17 @@ abstract class PhabricatorConfigGroupConstants
|
|||
public static function getGroupURI($group) {
|
||||
$map = array(
|
||||
self::GROUP_CORE => '/',
|
||||
self::GROUP_APPLICATION => pht('application/'),
|
||||
self::GROUP_DEVELOPER => pht('developer/'),
|
||||
self::GROUP_APPLICATION => 'application/',
|
||||
self::GROUP_DEVELOPER => 'developer/',
|
||||
);
|
||||
return idx($map, $group, '#');
|
||||
}
|
||||
|
||||
public static function getGroupFullURI($group) {
|
||||
$map = array(
|
||||
self::GROUP_CORE => '/config/',
|
||||
self::GROUP_APPLICATION => '/config/application/',
|
||||
self::GROUP_DEVELOPER => '/config/developer/',
|
||||
);
|
||||
return idx($map, $group, '#');
|
||||
}
|
||||
|
|
|
@ -49,29 +49,29 @@ final class PhabricatorConfigAllController
|
|||
));
|
||||
|
||||
$title = pht('Current Settings');
|
||||
|
||||
$crumbs = $this
|
||||
->buildApplicationCrumbs()
|
||||
->addTextCrumb($title)
|
||||
->setBorder(true);
|
||||
|
||||
$header = id(new PHUIHeaderView())
|
||||
->setHeader($title)
|
||||
->setProfileHeader(true);
|
||||
$header = $this->buildHeaderView($title);
|
||||
|
||||
$nav = $this->buildSideNavView();
|
||||
$nav->selectFilter('all/');
|
||||
|
||||
$content = id(new PhabricatorConfigPageView())
|
||||
$view = $this->buildConfigBoxView(
|
||||
pht('All Settings'),
|
||||
$table);
|
||||
|
||||
$crumbs = $this->buildApplicationCrumbs()
|
||||
->addTextCrumb($title)
|
||||
->setBorder(true);
|
||||
|
||||
$content = id(new PHUITwoColumnView())
|
||||
->setHeader($header)
|
||||
->setContent($table);
|
||||
->setNavigation($nav)
|
||||
->setFixed(true)
|
||||
->setMainColumn($view);
|
||||
|
||||
return $this->newPage()
|
||||
->setTitle($title)
|
||||
->setCrumbs($crumbs)
|
||||
->setNavigation($nav)
|
||||
->appendChild($content)
|
||||
->addClass('white-background');
|
||||
->appendChild($content);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -11,28 +11,25 @@ final class PhabricatorConfigApplicationController
|
|||
|
||||
$groups = PhabricatorApplicationConfigOptions::loadAll();
|
||||
$apps_list = $this->buildConfigOptionsList($groups, 'apps');
|
||||
$apps_list = $this->buildConfigBoxView(pht('Applications'), $apps_list);
|
||||
|
||||
$title = pht('Application Settings');
|
||||
$header = $this->buildHeaderView($title);
|
||||
|
||||
$header = id(new PHUIHeaderView())
|
||||
->setHeader($title)
|
||||
->setProfileHeader(true);
|
||||
|
||||
$crumbs = $this
|
||||
->buildApplicationCrumbs()
|
||||
->addTextCrumb(pht('Applications'))
|
||||
->setBorder(true);
|
||||
|
||||
$content = id(new PhabricatorConfigPageView())
|
||||
$content = id(new PHUITwoColumnView())
|
||||
->setHeader($header)
|
||||
->setContent($apps_list);
|
||||
->setNavigation($nav)
|
||||
->setFixed(true)
|
||||
->setMainColumn($apps_list);
|
||||
|
||||
$crumbs = $this->buildApplicationCrumbs()
|
||||
->addTextCrumb($title)
|
||||
->setBorder(true);
|
||||
|
||||
return $this->newPage()
|
||||
->setTitle($title)
|
||||
->setCrumbs($crumbs)
|
||||
->setNavigation($nav)
|
||||
->appendChild($content)
|
||||
->addClass('white-background');
|
||||
->appendChild($content);
|
||||
}
|
||||
|
||||
private function buildConfigOptionsList(array $groups, $type) {
|
||||
|
|
|
@ -9,16 +9,15 @@ final class PhabricatorConfigCacheController
|
|||
$nav = $this->buildSideNavView();
|
||||
$nav->selectFilter('cache/');
|
||||
|
||||
$purge_button = id(new PHUIButtonView())
|
||||
->setText(pht('Purge Caches'))
|
||||
->setHref('/config/cache/purge/')
|
||||
->setTag('a')
|
||||
->setWorkflow(true)
|
||||
->setIcon('fa-exclamation-triangle');
|
||||
|
||||
$title = pht('Cache Status');
|
||||
|
||||
$header = id(new PHUIHeaderView())
|
||||
->setHeader($title)
|
||||
->setProfileHeader(true);
|
||||
|
||||
$crumbs = $this
|
||||
->buildApplicationCrumbs()
|
||||
->addTextCrumb(pht('Cache Status'))
|
||||
->setBorder(true);
|
||||
$header = $this->buildHeaderView($title, $purge_button);
|
||||
|
||||
$code_box = $this->renderCodeBox();
|
||||
$data_box = $this->renderDataBox();
|
||||
|
@ -28,40 +27,27 @@ final class PhabricatorConfigCacheController
|
|||
$data_box,
|
||||
);
|
||||
|
||||
$content = id(new PhabricatorConfigPageView())
|
||||
$crumbs = $this->buildApplicationCrumbs()
|
||||
->addTextCrumb($title)
|
||||
->setBorder(true);
|
||||
|
||||
$content = id(new PHUITwoColumnView())
|
||||
->setHeader($header)
|
||||
->setContent($page);
|
||||
->setNavigation($nav)
|
||||
->setFixed(true)
|
||||
->setMainColumn($page);
|
||||
|
||||
return $this->newPage()
|
||||
->setTitle($title)
|
||||
->setCrumbs($crumbs)
|
||||
->setNavigation($nav)
|
||||
->appendChild($content)
|
||||
->addClass('white-background');
|
||||
->appendChild($content);
|
||||
}
|
||||
|
||||
private function renderCodeBox() {
|
||||
$cache = PhabricatorOpcodeCacheSpec::getActiveCacheSpec();
|
||||
|
||||
$properties = id(new PHUIPropertyListView());
|
||||
|
||||
$this->renderCommonProperties($properties, $cache);
|
||||
|
||||
$purge_button = id(new PHUIButtonView())
|
||||
->setText(pht('Purge Caches'))
|
||||
->setHref('/config/cache/purge/')
|
||||
->setTag('a')
|
||||
->setWorkflow(true)
|
||||
->setIcon('fa-exclamation-triangle');
|
||||
|
||||
$header = id(new PHUIHeaderView())
|
||||
->setHeader(pht('Opcode Cache'))
|
||||
->addActionLink($purge_button);
|
||||
|
||||
return id(new PHUIObjectBoxView())
|
||||
->setHeader($header)
|
||||
->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
|
||||
->addPropertyList($properties);
|
||||
return $this->buildConfigBoxView(pht('Opcode Cache'), $properties);
|
||||
}
|
||||
|
||||
private function renderDataBox() {
|
||||
|
@ -109,11 +95,9 @@ final class PhabricatorConfigCacheController
|
|||
));
|
||||
}
|
||||
|
||||
return id(new PHUIObjectBoxView())
|
||||
->setHeaderText(pht('Data Cache'))
|
||||
->addPropertyList($properties)
|
||||
->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
|
||||
->setTable($table);
|
||||
$properties = $this->buildConfigBoxView(pht('Data Cache'), $properties);
|
||||
$table = $this->buildConfigBoxView(pht('Cache Storage'), $table);
|
||||
return array($properties, $table);
|
||||
}
|
||||
|
||||
private function renderCommonProperties(
|
||||
|
|
|
@ -9,34 +9,31 @@ final class PhabricatorConfigClusterDatabasesController
|
|||
|
||||
$title = pht('Cluster Database Status');
|
||||
$doc_href = PhabricatorEnv::getDoclink('Cluster: Databases');
|
||||
|
||||
$header = id(new PHUIHeaderView())
|
||||
->setHeader($title)
|
||||
->setProfileHeader(true)
|
||||
->addActionLink(
|
||||
id(new PHUIButtonView())
|
||||
$button = id(new PHUIButtonView())
|
||||
->setIcon('fa-book')
|
||||
->setHref($doc_href)
|
||||
->setTag('a')
|
||||
->setText(pht('Documentation')));
|
||||
->setText(pht('Documentation'));
|
||||
|
||||
$crumbs = $this
|
||||
->buildApplicationCrumbs()
|
||||
$header = $this->buildHeaderView($title, $button);
|
||||
|
||||
$database_status = $this->buildClusterDatabaseStatus();
|
||||
$status = $this->buildConfigBoxView(pht('Status'), $database_status);
|
||||
|
||||
$crumbs = $this->buildApplicationCrumbs()
|
||||
->addTextCrumb($title)
|
||||
->setBorder(true);
|
||||
|
||||
$database_status = $this->buildClusterDatabaseStatus();
|
||||
|
||||
$content = id(new PhabricatorConfigPageView())
|
||||
$content = id(new PHUITwoColumnView())
|
||||
->setHeader($header)
|
||||
->setContent($database_status);
|
||||
->setNavigation($nav)
|
||||
->setFixed(true)
|
||||
->setMainColumn($status);
|
||||
|
||||
return $this->newPage()
|
||||
->setTitle($title)
|
||||
->setCrumbs($crumbs)
|
||||
->setNavigation($nav)
|
||||
->appendChild($content)
|
||||
->addClass('white-background');
|
||||
->appendChild($content);
|
||||
}
|
||||
|
||||
private function buildClusterDatabaseStatus() {
|
||||
|
|
|
@ -9,34 +9,33 @@ final class PhabricatorConfigClusterNotificationsController
|
|||
|
||||
$title = pht('Cluster Notifications');
|
||||
$doc_href = PhabricatorEnv::getDoclink('Cluster: Notifications');
|
||||
|
||||
$header = id(new PHUIHeaderView())
|
||||
->setHeader($title)
|
||||
->setProfileHeader(true)
|
||||
->addActionLink(
|
||||
id(new PHUIButtonView())
|
||||
$button = id(new PHUIButtonView())
|
||||
->setIcon('fa-book')
|
||||
->setHref($doc_href)
|
||||
->setTag('a')
|
||||
->setText(pht('Documentation')));
|
||||
->setText(pht('Documentation'));
|
||||
|
||||
$crumbs = $this
|
||||
->buildApplicationCrumbs()
|
||||
$header = $this->buildHeaderView($title, $button);
|
||||
|
||||
$notification_status = $this->buildClusterNotificationStatus();
|
||||
$status = $this->buildConfigBoxView(
|
||||
pht('Notifications Status'),
|
||||
$notification_status);
|
||||
|
||||
$crumbs = $this->buildApplicationCrumbs()
|
||||
->addTextCrumb($title)
|
||||
->setBorder(true);
|
||||
|
||||
$notification_status = $this->buildClusterNotificationStatus();
|
||||
|
||||
$content = id(new PhabricatorConfigPageView())
|
||||
$content = id(new PHUITwoColumnView())
|
||||
->setHeader($header)
|
||||
->setContent($notification_status);
|
||||
->setNavigation($nav)
|
||||
->setFixed(true)
|
||||
->setMainColumn($status);
|
||||
|
||||
return $this->newPage()
|
||||
->setTitle($title)
|
||||
->setCrumbs($crumbs)
|
||||
->setNavigation($nav)
|
||||
->appendChild($content)
|
||||
->addClass('white-background');
|
||||
->appendChild($content);
|
||||
}
|
||||
|
||||
private function buildClusterNotificationStatus() {
|
||||
|
|
|
@ -10,39 +10,39 @@ final class PhabricatorConfigClusterRepositoriesController
|
|||
$title = pht('Cluster Repository Status');
|
||||
|
||||
$doc_href = PhabricatorEnv::getDoclink('Cluster: Repositories');
|
||||
|
||||
$header = id(new PHUIHeaderView())
|
||||
->setHeader($title)
|
||||
->setProfileHeader(true)
|
||||
->addActionLink(
|
||||
id(new PHUIButtonView())
|
||||
$button = id(new PHUIButtonView())
|
||||
->setIcon('fa-book')
|
||||
->setHref($doc_href)
|
||||
->setTag('a')
|
||||
->setText(pht('Documentation')));
|
||||
->setText(pht('Documentation'));
|
||||
|
||||
$crumbs = $this
|
||||
->buildApplicationCrumbs()
|
||||
->addTextCrumb(pht('Repository Servers'))
|
||||
->setBorder(true);
|
||||
$header = $this->buildHeaderView($title, $button);
|
||||
|
||||
$repository_status = $this->buildClusterRepositoryStatus();
|
||||
$repository_errors = $this->buildClusterRepositoryErrors();
|
||||
$repo_status = $this->buildConfigBoxView(
|
||||
pht('Repository Status'), $repository_status);
|
||||
|
||||
$content = id(new PhabricatorConfigPageView())
|
||||
$repository_errors = $this->buildClusterRepositoryErrors();
|
||||
$repo_errors = $this->buildConfigBoxView(
|
||||
pht('Repository Errors'), $repository_errors);
|
||||
|
||||
$crumbs = $this->buildApplicationCrumbs()
|
||||
->addTextCrumb($title)
|
||||
->setBorder(true);
|
||||
|
||||
$content = id(new PHUITwoColumnView())
|
||||
->setHeader($header)
|
||||
->setContent(
|
||||
array(
|
||||
$repository_status,
|
||||
$repository_errors,
|
||||
->setNavigation($nav)
|
||||
->setFixed(true)
|
||||
->setMainColumn(array(
|
||||
$repo_status,
|
||||
$repo_errors,
|
||||
));
|
||||
|
||||
return $this->newPage()
|
||||
->setTitle($title)
|
||||
->setCrumbs($crumbs)
|
||||
->setNavigation($nav)
|
||||
->appendChild($content)
|
||||
->addClass('white-background');
|
||||
->appendChild($content);
|
||||
}
|
||||
|
||||
private function buildClusterRepositoryStatus() {
|
||||
|
|
|
@ -10,33 +10,30 @@ final class PhabricatorConfigClusterSearchController
|
|||
$title = pht('Cluster Search');
|
||||
$doc_href = PhabricatorEnv::getDoclink('Cluster: Search');
|
||||
|
||||
$header = id(new PHUIHeaderView())
|
||||
->setHeader($title)
|
||||
->setProfileHeader(true)
|
||||
->addActionLink(
|
||||
id(new PHUIButtonView())
|
||||
$button = id(new PHUIButtonView())
|
||||
->setIcon('fa-book')
|
||||
->setHref($doc_href)
|
||||
->setTag('a')
|
||||
->setText(pht('Documentation')));
|
||||
->setText(pht('Documentation'));
|
||||
|
||||
$crumbs = $this
|
||||
->buildApplicationCrumbs($nav)
|
||||
->addTextCrumb($title)
|
||||
->setBorder(true);
|
||||
$header = $this->buildHeaderView($title, $button);
|
||||
|
||||
$search_status = $this->buildClusterSearchStatus();
|
||||
|
||||
$content = id(new PhabricatorConfigPageView())
|
||||
$crumbs = $this->buildApplicationCrumbs()
|
||||
->addTextCrumb($title)
|
||||
->setBorder(true);
|
||||
|
||||
$content = id(new PHUITwoColumnView())
|
||||
->setHeader($header)
|
||||
->setContent($search_status);
|
||||
->setNavigation($nav)
|
||||
->setFixed(true)
|
||||
->setMainColumn($search_status);
|
||||
|
||||
return $this->newPage()
|
||||
->setTitle($title)
|
||||
->setCrumbs($crumbs)
|
||||
->setNavigation($nav)
|
||||
->appendChild($content)
|
||||
->addClass('white-background');
|
||||
->appendChild($content);
|
||||
}
|
||||
|
||||
private function buildClusterSearchStatus() {
|
||||
|
@ -105,15 +102,16 @@ final class PhabricatorConfigClusterSearchController
|
|||
->setNoDataString(pht('No search servers are configured.'))
|
||||
->setHeaders($head);
|
||||
|
||||
$view = id(new PHUIObjectBoxView())
|
||||
->setHeaderText($service->getDisplayName())
|
||||
->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
|
||||
->setTable($table);
|
||||
$view = $this->buildConfigBoxView(pht('Search Servers'), $table);
|
||||
|
||||
if ($stats_view) {
|
||||
$view->addPropertyList($stats_view);
|
||||
$stats = null;
|
||||
if ($stats_view->hasAnyProperties()) {
|
||||
$stats = $this->buildConfigBoxView(
|
||||
pht('%s Stats', $service->getDisplayName()),
|
||||
$stats_view);
|
||||
}
|
||||
return $view;
|
||||
|
||||
return array($stats, $view);
|
||||
}
|
||||
|
||||
private function renderIndexStats($stats) {
|
||||
|
|
|
@ -8,10 +8,10 @@ abstract class PhabricatorConfigController extends PhabricatorController {
|
|||
|
||||
public function buildSideNavView($filter = null, $for_app = false) {
|
||||
|
||||
|
||||
$guide_href = new PhutilURI('/guides/');
|
||||
$nav = new AphrontSideNavFilterView();
|
||||
$nav->setBaseURI(new PhutilURI($this->getApplicationURI()));
|
||||
$nav->addLabel(pht('Configuration'));
|
||||
$nav->addFilter('/',
|
||||
pht('Core Settings'), null, 'fa-gear');
|
||||
$nav->addFilter('application/',
|
||||
|
@ -46,7 +46,6 @@ abstract class PhabricatorConfigController extends PhabricatorController {
|
|||
pht('Search Servers'), null, 'fa-search');
|
||||
$nav->addLabel(pht('Modules'));
|
||||
|
||||
|
||||
$modules = PhabricatorConfigModule::getAllModules();
|
||||
foreach ($modules as $key => $module) {
|
||||
$nav->addFilter('module/'.$key.'/',
|
||||
|
@ -60,4 +59,37 @@ abstract class PhabricatorConfigController extends PhabricatorController {
|
|||
return $this->buildSideNavView(null, true)->getMenu();
|
||||
}
|
||||
|
||||
public function buildHeaderView($text, $action = null) {
|
||||
$viewer = $this->getViewer();
|
||||
|
||||
$file = PhabricatorFile::loadBuiltin($viewer, 'projects/v3/manage.png');
|
||||
$image = $file->getBestURI($file);
|
||||
$header = id(new PHUIHeaderView())
|
||||
->setHeader($text)
|
||||
->setProfileHeader(true)
|
||||
->setImage($image);
|
||||
|
||||
if ($action) {
|
||||
$header->addActionLink($action);
|
||||
}
|
||||
|
||||
return $header;
|
||||
}
|
||||
|
||||
public function buildConfigBoxView($title, $content, $action = null) {
|
||||
$header = id(new PHUIHeaderView())
|
||||
->setHeader($title);
|
||||
|
||||
if ($action) {
|
||||
$header->addActionItem($action);
|
||||
}
|
||||
|
||||
$view = id(new PHUIObjectBoxView())
|
||||
->setHeader($header)
|
||||
->appendChild($content)
|
||||
->setBackground(PHUIObjectBoxView::WHITE_CONFIG);
|
||||
|
||||
return $view;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -12,10 +12,6 @@ final class PhabricatorConfigDatabaseIssueController
|
|||
$expect = $query->loadExpectedSchemata();
|
||||
$comp_servers = $query->buildComparisonSchemata($expect, $actual);
|
||||
|
||||
$crumbs = $this->buildApplicationCrumbs();
|
||||
$crumbs->addTextCrumb(pht('Database Issues'));
|
||||
$crumbs->setBorder(true);
|
||||
|
||||
// Collect all open issues.
|
||||
$issues = array();
|
||||
foreach ($comp_servers as $ref_name => $comp) {
|
||||
|
@ -158,24 +154,27 @@ final class PhabricatorConfigDatabaseIssueController
|
|||
}
|
||||
|
||||
$title = pht('Database Issues');
|
||||
|
||||
$header = id(new PHUIHeaderView())
|
||||
->setHeader($title)
|
||||
->setProfileHeader(true);
|
||||
$header = $this->buildHeaderView($title);
|
||||
|
||||
$nav = $this->buildSideNavView();
|
||||
$nav->selectFilter('dbissue/');
|
||||
|
||||
$content = id(new PhabricatorConfigPageView())
|
||||
$view = $this->buildConfigBoxView(pht('Issues'), $table);
|
||||
|
||||
$crumbs = $this->buildApplicationCrumbs()
|
||||
->addTextCrumb($title)
|
||||
->setBorder(true);
|
||||
|
||||
$content = id(new PHUITwoColumnView())
|
||||
->setHeader($header)
|
||||
->setContent($table);
|
||||
->setNavigation($nav)
|
||||
->setFixed(true)
|
||||
->setMainColumn($view);
|
||||
|
||||
return $this->newPage()
|
||||
->setTitle($title)
|
||||
->setCrumbs($crumbs)
|
||||
->setNavigation($nav)
|
||||
->appendChild($content)
|
||||
->addClass('white-background');
|
||||
->appendChild($content);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -132,27 +132,24 @@ final class PhabricatorConfigDatabaseStatusController
|
|||
}
|
||||
|
||||
$doc_link = PhabricatorEnv::getDoclink('Managing Storage Adjustments');
|
||||
|
||||
$header = id(new PHUIHeaderView())
|
||||
->setHeader($title)
|
||||
->setProfileHeader(true)
|
||||
->addActionLink(
|
||||
id(new PHUIButtonView())
|
||||
$button = id(new PHUIButtonView())
|
||||
->setTag('a')
|
||||
->setIcon('fa-book')
|
||||
->setHref($doc_link)
|
||||
->setText(pht('Learn More')));
|
||||
->setText(pht('Documentation'));
|
||||
|
||||
$content = id(new PhabricatorConfigPageView())
|
||||
$header = $this->buildHeaderView($title, $button);
|
||||
|
||||
$content = id(new PHUITwoColumnView())
|
||||
->setHeader($header)
|
||||
->setContent($body);
|
||||
->setNavigation($nav)
|
||||
->setFixed(true)
|
||||
->setMainColumn($body);
|
||||
|
||||
return $this->newPage()
|
||||
->setTitle($title)
|
||||
->setCrumbs($crumbs)
|
||||
->setNavigation($nav)
|
||||
->appendChild($content)
|
||||
->addClass('white-background');
|
||||
->appendChild($content);
|
||||
}
|
||||
|
||||
|
||||
|
@ -221,11 +218,12 @@ final class PhabricatorConfigDatabaseStatusController
|
|||
));
|
||||
|
||||
$title = pht('Database Status');
|
||||
|
||||
$properties = $this->buildProperties(
|
||||
array(
|
||||
),
|
||||
$comp->getIssues());
|
||||
$properties = $this->buildConfigBoxView(pht('Properties'), $properties);
|
||||
$table = $this->buildConfigBoxView(pht('Database'), $table);
|
||||
|
||||
return $this->buildResponse($title, array($properties, $table));
|
||||
}
|
||||
|
@ -280,7 +278,7 @@ final class PhabricatorConfigDatabaseStatusController
|
|||
null,
|
||||
));
|
||||
|
||||
$title = pht('Database: %s', $database_name);
|
||||
$title = $database_name;
|
||||
|
||||
$actual_database = $actual->getDatabase($database_name);
|
||||
if ($actual_database) {
|
||||
|
@ -325,6 +323,9 @@ final class PhabricatorConfigDatabaseStatusController
|
|||
),
|
||||
$database->getIssues());
|
||||
|
||||
$properties = $this->buildConfigBoxView(pht('Properties'), $properties);
|
||||
$table = $this->buildConfigBoxView(pht('Database'), $table);
|
||||
|
||||
return $this->buildResponse($title, array($properties, $table));
|
||||
}
|
||||
|
||||
|
@ -503,7 +504,7 @@ final class PhabricatorConfigDatabaseStatusController
|
|||
null,
|
||||
));
|
||||
|
||||
$title = pht('Database: %s.%s', $database_name, $table_name);
|
||||
$title = pht('%s.%s', $database_name, $table_name);
|
||||
|
||||
if ($actual_table) {
|
||||
$actual_collation = $actual_table->getCollation();
|
||||
|
@ -534,8 +535,14 @@ final class PhabricatorConfigDatabaseStatusController
|
|||
),
|
||||
$table->getIssues());
|
||||
|
||||
$box_header = pht('%s.%s', $database_name, $table_name);
|
||||
|
||||
$properties = $this->buildConfigBoxView(pht('Properties'), $properties);
|
||||
$table = $this->buildConfigBoxView(pht('Database'), $table_view);
|
||||
$keys = $this->buildConfigBoxView(pht('Keys'), $keys_view);
|
||||
|
||||
return $this->buildResponse(
|
||||
$title, array($properties, $table_view, $keys_view));
|
||||
$title, array($properties, $table, $keys));
|
||||
}
|
||||
|
||||
private function renderColumn(
|
||||
|
@ -613,7 +620,7 @@ final class PhabricatorConfigDatabaseStatusController
|
|||
|
||||
|
||||
$title = pht(
|
||||
'Database Status: %s.%s.%s',
|
||||
'%s.%s.%s',
|
||||
$database_name,
|
||||
$table_name,
|
||||
$column_name);
|
||||
|
@ -671,6 +678,8 @@ final class PhabricatorConfigDatabaseStatusController
|
|||
),
|
||||
$column->getIssues());
|
||||
|
||||
$properties = $this->buildConfigBoxView(pht('Properties'), $properties);
|
||||
|
||||
return $this->buildResponse($title, $properties);
|
||||
}
|
||||
|
||||
|
@ -734,7 +743,7 @@ final class PhabricatorConfigDatabaseStatusController
|
|||
}
|
||||
|
||||
$title = pht(
|
||||
'Database Status: %s.%s (%s)',
|
||||
'%s.%s (%s)',
|
||||
$database_name,
|
||||
$table_name,
|
||||
$key_name);
|
||||
|
@ -764,6 +773,8 @@ final class PhabricatorConfigDatabaseStatusController
|
|||
),
|
||||
$key->getIssues());
|
||||
|
||||
$properties = $this->buildConfigBoxView(pht('Properties'), $properties);
|
||||
|
||||
return $this->buildResponse($title, $properties);
|
||||
}
|
||||
|
||||
|
|
|
@ -7,7 +7,6 @@ final class PhabricatorConfigEditController
|
|||
$viewer = $request->getViewer();
|
||||
$key = $request->getURIData('key');
|
||||
|
||||
|
||||
$options = PhabricatorApplicationConfigOptions::loadAllOptions();
|
||||
if (empty($options[$key])) {
|
||||
$ancient = PhabricatorExtraConfigSetupCheck::getAncientConfig();
|
||||
|
@ -104,29 +103,10 @@ final class PhabricatorConfigEditController
|
|||
$error_view = null;
|
||||
if ($errors) {
|
||||
$error_view = id(new PHUIInfoView())
|
||||
->setSeverity(PHUIInfoView::SEVERITY_ERROR)
|
||||
->setErrors($errors);
|
||||
}
|
||||
|
||||
$status_items = array();
|
||||
if ($option->getHidden()) {
|
||||
$message = pht(
|
||||
'This configuration is hidden and can not be edited or viewed from '.
|
||||
'the web interface.');
|
||||
|
||||
$status_items[] = id(new PHUIStatusItemView())
|
||||
->setIcon('fa-eye-slash red')
|
||||
->setTarget(phutil_tag('strong', array(), pht('Configuration Hidden')))
|
||||
->setNote($message);
|
||||
} else if ($option->getLocked()) {
|
||||
$message = $option->getLockedMessage();
|
||||
|
||||
$status_items[] = id(new PHUIStatusItemView())
|
||||
->setIcon('fa-lock red')
|
||||
->setTarget(phutil_tag('strong', array(), pht('Configuration Locked')))
|
||||
->setNote($message);
|
||||
}
|
||||
|
||||
if ($status_items) {
|
||||
$doc_href = PhabricatorEnv::getDoclink(
|
||||
'Configuration Guide: Locked and Hidden Configuration');
|
||||
|
||||
|
@ -136,12 +116,32 @@ final class PhabricatorConfigEditController
|
|||
'href' => $doc_href,
|
||||
'target' => '_blank',
|
||||
),
|
||||
pht('Configuration Guide: Locked and Hidden Configuration'));
|
||||
pht('Learn more about locked and hidden options.'));
|
||||
|
||||
$status_items[] = id(new PHUIStatusItemView())
|
||||
->setIcon('fa-book')
|
||||
->setTarget(phutil_tag('strong', array(), pht('Learn More')))
|
||||
->setNote($doc_link);
|
||||
$status_items = array();
|
||||
$tag = null;
|
||||
if ($option->getHidden()) {
|
||||
$tag = id(new PHUITagView())
|
||||
->setName(pht('Hidden'))
|
||||
->setColor(PHUITagView::COLOR_GREY)
|
||||
->setBorder(PHUITagView::BORDER_NONE)
|
||||
->setType(PHUITagView::TYPE_SHADE);
|
||||
|
||||
$message = pht(
|
||||
'This configuration is hidden and can not be edited or viewed from '.
|
||||
'the web interface.');
|
||||
$status_items[] = id(new PHUIInfoView())
|
||||
->appendChild(array($message, ' ', $doc_link));
|
||||
} else if ($option->getLocked()) {
|
||||
$tag = id(new PHUITagView())
|
||||
->setName(pht('Locked'))
|
||||
->setColor(PHUITagView::COLOR_RED)
|
||||
->setBorder(PHUITagView::BORDER_NONE)
|
||||
->setType(PHUITagView::TYPE_SHADE);
|
||||
|
||||
$message = $option->getLockedMessage();
|
||||
$status_items[] = id(new PHUIInfoView())
|
||||
->appendChild(array($message, ' ', $doc_link));
|
||||
}
|
||||
|
||||
if ($option->getHidden() || $option->getLocked()) {
|
||||
|
@ -168,18 +168,6 @@ final class PhabricatorConfigEditController
|
|||
->setUser($viewer)
|
||||
->addHiddenInput('issue', $request->getStr('issue'));
|
||||
|
||||
if ($status_items) {
|
||||
$status_view = id(new PHUIStatusListView());
|
||||
|
||||
foreach ($status_items as $status_item) {
|
||||
$status_view->addItem($status_item);
|
||||
}
|
||||
|
||||
$form->appendControl(
|
||||
id(new AphrontFormMarkupControl())
|
||||
->setValue($status_view));
|
||||
}
|
||||
|
||||
$description = $option->getDescription();
|
||||
if (strlen($description)) {
|
||||
$description_view = new PHUIRemarkupView($viewer, $description);
|
||||
|
@ -213,56 +201,66 @@ final class PhabricatorConfigEditController
|
|||
->setValue(pht('Save Config Entry')));
|
||||
}
|
||||
|
||||
$current_config = null;
|
||||
if (!$option->getHidden()) {
|
||||
$form->appendChild(
|
||||
id(new AphrontFormMarkupControl())
|
||||
->setLabel(pht('Current Configuration'))
|
||||
->setValue($this->renderDefaults($option, $config_entry)));
|
||||
$current_config = $this->renderDefaults($option, $config_entry);
|
||||
$current_config = $this->buildConfigBoxView(
|
||||
pht('Current Configuration'),
|
||||
$current_config);
|
||||
}
|
||||
|
||||
$examples = $this->renderExamples($option);
|
||||
if ($examples) {
|
||||
$form->appendChild(
|
||||
id(new AphrontFormMarkupControl())
|
||||
->setLabel(pht('Examples'))
|
||||
->setValue($examples));
|
||||
$examples = $this->buildConfigBoxView(
|
||||
pht('Examples'),
|
||||
$examples);
|
||||
}
|
||||
|
||||
$title = pht('Edit Option: %s', $key);
|
||||
$header_icon = 'fa-pencil';
|
||||
$short = pht('Edit');
|
||||
$title = $key;
|
||||
|
||||
$form_box = id(new PHUIObjectBoxView())
|
||||
->setHeaderText(pht('Config Option'))
|
||||
->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
|
||||
->setForm($form);
|
||||
|
||||
if ($error_view) {
|
||||
$form_box->setInfoView($error_view);
|
||||
$box_header = array();
|
||||
if ($group) {
|
||||
$box_header[] = phutil_tag(
|
||||
'a',
|
||||
array(
|
||||
'href' => $group_uri,
|
||||
),
|
||||
$group->getName());
|
||||
$box_header[] = " \xC2\xBB ";
|
||||
}
|
||||
$box_header[] = $key;
|
||||
|
||||
$crumbs = $this->buildApplicationCrumbs();
|
||||
$crumbs->addTextCrumb(pht('Config'), $this->getApplicationURI());
|
||||
|
||||
if ($group) {
|
||||
$crumbs->addTextCrumb($group->getName(), $group_uri);
|
||||
}
|
||||
|
||||
$crumbs->addTextCrumb($key, '/config/edit/'.$key);
|
||||
$crumbs->setBorder(true);
|
||||
|
||||
$form_box = $this->buildConfigBoxView($box_header, $form, $tag);
|
||||
|
||||
$timeline = $this->buildTransactionTimeline(
|
||||
$config_entry,
|
||||
new PhabricatorConfigTransactionQuery());
|
||||
$timeline->setShouldTerminate(true);
|
||||
|
||||
$header = id(new PHUIHeaderView())
|
||||
->setHeader($title)
|
||||
->setHeaderIcon($header_icon);
|
||||
$nav = $this->buildSideNavView();
|
||||
$nav->selectFilter($group_uri);
|
||||
|
||||
$header = $this->buildHeaderView($title);
|
||||
|
||||
$view = id(new PHUITwoColumnView())
|
||||
->setHeader($header)
|
||||
->setFooter($form_box);
|
||||
->setNavigation($nav)
|
||||
->setFixed(true)
|
||||
->setMainColumn(array(
|
||||
$error_view,
|
||||
$form_box,
|
||||
$status_items,
|
||||
$examples,
|
||||
$current_config,
|
||||
));
|
||||
|
||||
return $this->newPage()
|
||||
->setTitle($title)
|
||||
|
@ -426,7 +424,7 @@ final class PhabricatorConfigEditController
|
|||
}
|
||||
}
|
||||
|
||||
$table[] = phutil_tag('tr', array(), array(
|
||||
$table[] = phutil_tag('tr', array('class' => 'column-labels'), array(
|
||||
phutil_tag('th', array(), $description),
|
||||
phutil_tag('td', array(), $value),
|
||||
));
|
||||
|
@ -438,6 +436,8 @@ final class PhabricatorConfigEditController
|
|||
'table',
|
||||
array(
|
||||
'class' => 'config-option-table',
|
||||
'cellspacing' => '0',
|
||||
'cellpadding' => '0',
|
||||
),
|
||||
$table);
|
||||
}
|
||||
|
@ -497,6 +497,8 @@ final class PhabricatorConfigEditController
|
|||
'table',
|
||||
array(
|
||||
'class' => 'config-option-table',
|
||||
'cellspacing' => '0',
|
||||
'cellpadding' => '0',
|
||||
),
|
||||
$table);
|
||||
}
|
||||
|
|
|
@ -13,7 +13,7 @@ final class PhabricatorConfigGroupController
|
|||
return new Aphront404Response();
|
||||
}
|
||||
|
||||
$group_uri = PhabricatorConfigGroupConstants::getGroupURI(
|
||||
$group_uri = PhabricatorConfigGroupConstants::getGroupFullURI(
|
||||
$options->getGroup());
|
||||
$group_name = PhabricatorConfigGroupConstants::getGroupShortName(
|
||||
$options->getGroup());
|
||||
|
@ -22,28 +22,28 @@ final class PhabricatorConfigGroupController
|
|||
$nav->selectFilter($group_uri);
|
||||
|
||||
$title = pht('%s Configuration', $options->getName());
|
||||
$header = $this->buildHeaderView($title);
|
||||
$list = $this->buildOptionList($options->getOptions());
|
||||
$group_url = phutil_tag('a', array('href' => $group_uri), $group_name);
|
||||
|
||||
$crumbs = $this
|
||||
->buildApplicationCrumbs()
|
||||
$box_header = pht("%s \xC2\xBB %s", $group_url, $options->getName());
|
||||
$view = $this->buildConfigBoxView($box_header, $list);
|
||||
|
||||
$crumbs = $this->buildApplicationCrumbs()
|
||||
->addTextCrumb($group_name, $this->getApplicationURI($group_uri))
|
||||
->addTextCrumb($options->getName())
|
||||
->setBorder(true);
|
||||
|
||||
$header = id(new PHUIHeaderView())
|
||||
->setHeader($title)
|
||||
->setProfileHeader(true);
|
||||
|
||||
$content = id(new PhabricatorConfigPageView())
|
||||
$content = id(new PHUITwoColumnView())
|
||||
->setHeader($header)
|
||||
->setContent($list);
|
||||
->setNavigation($nav)
|
||||
->setFixed(true)
|
||||
->setMainColumn($view);
|
||||
|
||||
return $this->newPage()
|
||||
->setTitle($title)
|
||||
->setCrumbs($crumbs)
|
||||
->setNavigation($nav)
|
||||
->appendChild($content)
|
||||
->addClass('white-background');
|
||||
->appendChild($content);
|
||||
}
|
||||
|
||||
private function buildOptionList(array $options) {
|
||||
|
@ -77,13 +77,11 @@ final class PhabricatorConfigGroupController
|
|||
->setHref('/config/edit/'.$option->getKey().'/')
|
||||
->addAttribute($summary);
|
||||
|
||||
$label = pht('Current Value:');
|
||||
$color = null;
|
||||
$db_value = idx($db_values, $option->getKey());
|
||||
if ($db_value && !$db_value->getIsDeleted()) {
|
||||
$item->setEffect('visited');
|
||||
$color = 'violet';
|
||||
$label = pht('Customized Value:');
|
||||
}
|
||||
|
||||
if ($option->getHidden()) {
|
||||
|
@ -91,6 +89,8 @@ final class PhabricatorConfigGroupController
|
|||
$item->setDisabled(true);
|
||||
} else if ($option->getLocked()) {
|
||||
$item->setStatusIcon('fa-lock '.$color, pht('Locked'));
|
||||
} else if ($color) {
|
||||
$item->setStatusIcon('fa-pencil '.$color, pht('Editable'));
|
||||
} else {
|
||||
$item->setStatusIcon('fa-pencil-square-o '.$color, pht('Editable'));
|
||||
}
|
||||
|
@ -102,14 +102,13 @@ final class PhabricatorConfigGroupController
|
|||
$current_value = phutil_tag(
|
||||
'div',
|
||||
array(
|
||||
'class' => 'config-options-current-value',
|
||||
'class' => 'config-options-current-value '.$color,
|
||||
),
|
||||
array(
|
||||
phutil_tag('span', array(), $label),
|
||||
' '.$current_value,
|
||||
$current_value,
|
||||
));
|
||||
|
||||
$item->appendChild($current_value);
|
||||
$item->setSideColumn($current_value);
|
||||
}
|
||||
|
||||
$list->addItem($item);
|
||||
|
|
|
@ -29,28 +29,25 @@ final class PhabricatorConfigHistoryController
|
|||
$object->willRenderTimeline($timeline, $this->getRequest());
|
||||
|
||||
$title = pht('Settings History');
|
||||
|
||||
$crumbs = $this->buildApplicationCrumbs();
|
||||
$crumbs->addTextCrumb($title);
|
||||
$crumbs->setBorder(true);
|
||||
$header = $this->buildHeaderView($title);
|
||||
|
||||
$nav = $this->buildSideNavView();
|
||||
$nav->selectFilter('history/');
|
||||
|
||||
$header = id(new PHUIHeaderView())
|
||||
->setHeader($title)
|
||||
->setProfileHeader(true);
|
||||
$crumbs = $this->buildApplicationCrumbs()
|
||||
->addTextCrumb($title)
|
||||
->setBorder(true);
|
||||
|
||||
$content = id(new PhabricatorConfigPageView())
|
||||
$content = id(new PHUITwoColumnView())
|
||||
->setHeader($header)
|
||||
->setContent($timeline);
|
||||
->setNavigation($nav)
|
||||
->setFixed(true)
|
||||
->setMainColumn($timeline);
|
||||
|
||||
return $this->newPage()
|
||||
->setTitle($title)
|
||||
->setCrumbs($crumbs)
|
||||
->setNavigation($nav)
|
||||
->appendChild($content)
|
||||
->addClass('white-background');
|
||||
->appendChild($content);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -43,34 +43,34 @@ final class PhabricatorConfigIssueListController
|
|||
}
|
||||
|
||||
$title = pht('Setup Issues');
|
||||
$header = $this->buildHeaderView($title);
|
||||
|
||||
$header = id(new PHUIHeaderView())
|
||||
->setHeader($title)
|
||||
->setProfileHeader(true);
|
||||
|
||||
$crumbs = $this
|
||||
->buildApplicationCrumbs()
|
||||
->addTextCrumb(pht('Setup Issues'))
|
||||
->setBorder(true);
|
||||
|
||||
$page = array(
|
||||
$no_issues,
|
||||
$issue_list = array(
|
||||
$important,
|
||||
$php,
|
||||
$mysql,
|
||||
$other,
|
||||
);
|
||||
|
||||
$content = id(new PhabricatorConfigPageView())
|
||||
$issue_list = $this->buildConfigBoxView(pht('Issues'), $issue_list);
|
||||
|
||||
$crumbs = $this->buildApplicationCrumbs()
|
||||
->addTextCrumb($title)
|
||||
->setBorder(true);
|
||||
|
||||
$content = id(new PHUITwoColumnView())
|
||||
->setHeader($header)
|
||||
->setContent($page);
|
||||
->setNavigation($nav)
|
||||
->setFixed(true)
|
||||
->setMainColumn(array(
|
||||
$no_issues,
|
||||
$issue_list,
|
||||
));
|
||||
|
||||
return $this->newPage()
|
||||
->setTitle($title)
|
||||
->setCrumbs($crumbs)
|
||||
->setNavigation($nav)
|
||||
->appendChild($content)
|
||||
->addClass('white-background');
|
||||
->appendChild($content);
|
||||
}
|
||||
|
||||
private function buildIssueList(array $issues, $group, $fonticon) {
|
||||
|
|
|
@ -36,6 +36,8 @@ final class PhabricatorConfigIssueViewController
|
|||
$title = $issue->getShortName();
|
||||
}
|
||||
|
||||
$header = $this->buildHeaderView($title);
|
||||
|
||||
$crumbs = $this
|
||||
->buildApplicationCrumbs()
|
||||
->setBorder(true)
|
||||
|
@ -43,12 +45,16 @@ final class PhabricatorConfigIssueViewController
|
|||
->addTextCrumb($title, $request->getRequestURI())
|
||||
->setBorder(true);
|
||||
|
||||
$content = id(new PHUITwoColumnView())
|
||||
->setHeader($header)
|
||||
->setNavigation($nav)
|
||||
->setFixed(true)
|
||||
->setMainColumn($content);
|
||||
|
||||
return $this->newPage()
|
||||
->setTitle($title)
|
||||
->setCrumbs($crumbs)
|
||||
->setNavigation($nav)
|
||||
->appendChild($content)
|
||||
->addClass('white-background');
|
||||
->appendChild($content);
|
||||
}
|
||||
|
||||
private function renderIssue(PhabricatorSetupIssue $issue) {
|
||||
|
|
|
@ -11,28 +11,25 @@ final class PhabricatorConfigListController
|
|||
|
||||
$groups = PhabricatorApplicationConfigOptions::loadAll();
|
||||
$core_list = $this->buildConfigOptionsList($groups, 'core');
|
||||
$core_list = $this->buildConfigBoxView(pht('Core'), $core_list);
|
||||
|
||||
$title = pht('Core Settings');
|
||||
$header = $this->buildHeaderView($title);
|
||||
|
||||
$header = id(new PHUIHeaderView())
|
||||
->setHeader($title)
|
||||
->setProfileHeader(true);
|
||||
|
||||
$crumbs = $this
|
||||
->buildApplicationCrumbs()
|
||||
->addTextCrumb(pht('Core'))
|
||||
$crumbs = $this->buildApplicationCrumbs()
|
||||
->addTextCrumb($title)
|
||||
->setBorder(true);
|
||||
|
||||
$content = id(new PhabricatorConfigPageView())
|
||||
$content = id(new PHUITwoColumnView())
|
||||
->setHeader($header)
|
||||
->setContent($core_list);
|
||||
->setNavigation($nav)
|
||||
->setFixed(true)
|
||||
->setMainColumn($core_list);
|
||||
|
||||
return $this->newPage()
|
||||
->setTitle($title)
|
||||
->setCrumbs($crumbs)
|
||||
->setNavigation($nav)
|
||||
->appendChild($content)
|
||||
->addClass('white-background');
|
||||
->appendChild($content);
|
||||
}
|
||||
|
||||
private function buildConfigOptionsList(array $groups, $type) {
|
||||
|
|
|
@ -16,27 +16,26 @@ final class PhabricatorConfigModuleController
|
|||
$content = $module->renderModuleStatus($request);
|
||||
$title = $module->getModuleName();
|
||||
|
||||
$crumbs = $this->buildApplicationCrumbs();
|
||||
$crumbs->addTextCrumb($title);
|
||||
$crumbs->setBorder(true);
|
||||
|
||||
$nav = $this->buildSideNavView();
|
||||
$nav->selectFilter('module/'.$key.'/');
|
||||
$header = $this->buildHeaderView($title);
|
||||
|
||||
$header = id(new PHUIHeaderView())
|
||||
->setHeader($title)
|
||||
->setProfileHeader(true);
|
||||
$view = $this->buildConfigBoxView($title, $content);
|
||||
|
||||
$content = id(new PhabricatorConfigPageView())
|
||||
$crumbs = $this->buildApplicationCrumbs()
|
||||
->addTextCrumb($title)
|
||||
->setBorder(true);
|
||||
|
||||
$content = id(new PHUITwoColumnView())
|
||||
->setHeader($header)
|
||||
->setContent($content);
|
||||
->setNavigation($nav)
|
||||
->setFixed(true)
|
||||
->setMainColumn($view);
|
||||
|
||||
return $this->newPage()
|
||||
->setTitle($title)
|
||||
->setCrumbs($crumbs)
|
||||
->setNavigation($nav)
|
||||
->appendChild($content)
|
||||
->addClass('white-background');
|
||||
->appendChild($content);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -7,31 +7,30 @@ final class PhabricatorConfigVersionController
|
|||
$viewer = $request->getViewer();
|
||||
|
||||
$title = pht('Version Information');
|
||||
|
||||
$crumbs = $this
|
||||
->buildApplicationCrumbs()
|
||||
->addTextCrumb($title)
|
||||
->setBorder(true);
|
||||
|
||||
$versions = $this->renderModuleStatus($viewer);
|
||||
|
||||
$nav = $this->buildSideNavView();
|
||||
$nav->selectFilter('version/');
|
||||
$header = $this->buildHeaderView($title);
|
||||
|
||||
$header = id(new PHUIHeaderView())
|
||||
->setHeader($title)
|
||||
->setProfileHeader(true);
|
||||
$view = $this->buildConfigBoxView(
|
||||
pht('Installed Versions'),
|
||||
$versions);
|
||||
|
||||
$content = id(new PhabricatorConfigPageView())
|
||||
$crumbs = $this->buildApplicationCrumbs()
|
||||
->addTextCrumb($title)
|
||||
->setBorder(true);
|
||||
|
||||
$content = id(new PHUITwoColumnView())
|
||||
->setHeader($header)
|
||||
->setContent($versions);
|
||||
->setNavigation($nav)
|
||||
->setFixed(true)
|
||||
->setMainColumn($view);
|
||||
|
||||
return $this->newPage()
|
||||
->setTitle($title)
|
||||
->setCrumbs($crumbs)
|
||||
->setNavigation($nav)
|
||||
->appendChild($content)
|
||||
->addClass('white-background');
|
||||
->appendChild($content);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -42,5 +42,13 @@ final class PhabricatorConfigCoreSchemaSpec
|
|||
));
|
||||
}
|
||||
|
||||
$ferret_objects = id(new PhutilClassMapQuery())
|
||||
->setAncestorClass('PhabricatorFerretInterface')
|
||||
->execute();
|
||||
|
||||
foreach ($ferret_objects as $ferret_object) {
|
||||
$engine = $ferret_object->newFerretEngine();
|
||||
$this->buildFerretIndexSchema($engine);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -55,6 +55,26 @@ abstract class PhabricatorConfigSchemaSpec extends Phobject {
|
|||
$object->getSchemaKeys());
|
||||
}
|
||||
|
||||
protected function buildFerretIndexSchema(PhabricatorFerretEngine $engine) {
|
||||
$this->buildRawSchema(
|
||||
$engine->getApplicationName(),
|
||||
$engine->getDocumentTableName(),
|
||||
$engine->getDocumentSchemaColumns(),
|
||||
$engine->getDocumentSchemaKeys());
|
||||
|
||||
$this->buildRawSchema(
|
||||
$engine->getApplicationName(),
|
||||
$engine->getFieldTableName(),
|
||||
$engine->getFieldSchemaColumns(),
|
||||
$engine->getFieldSchemaKeys());
|
||||
|
||||
$this->buildRawSchema(
|
||||
$engine->getApplicationName(),
|
||||
$engine->getNgramsTableName(),
|
||||
$engine->getNgramsSchemaColumns(),
|
||||
$engine->getNgramsSchemaKeys());
|
||||
}
|
||||
|
||||
protected function buildRawSchema(
|
||||
$database_name,
|
||||
$table_name,
|
||||
|
|
|
@ -1,60 +0,0 @@
|
|||
<?php
|
||||
|
||||
final class PhabricatorConfigPageView extends AphrontTagView {
|
||||
|
||||
private $header;
|
||||
private $content;
|
||||
private $footer;
|
||||
|
||||
public function setHeader(PHUIHeaderView $header) {
|
||||
$this->header = $header;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function setContent($content) {
|
||||
$this->content = $content;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function setFooter($footer) {
|
||||
$this->footer = $footer;
|
||||
return $this;
|
||||
}
|
||||
|
||||
protected function getTagName() {
|
||||
return 'div';
|
||||
}
|
||||
|
||||
protected function getTagAttributes() {
|
||||
require_celerity_resource('config-page-css');
|
||||
|
||||
$classes = array();
|
||||
$classes[] = 'config-page';
|
||||
|
||||
return array(
|
||||
'class' => implode(' ', $classes),
|
||||
);
|
||||
}
|
||||
|
||||
protected function getTagContent() {
|
||||
|
||||
$header = null;
|
||||
if ($this->header) {
|
||||
$header = phutil_tag_div('config-page-header', $this->header);
|
||||
}
|
||||
|
||||
$content = null;
|
||||
if ($this->content) {
|
||||
$content = phutil_tag_div('config-page-content', $this->content);
|
||||
}
|
||||
|
||||
$footer = null;
|
||||
if ($this->footer) {
|
||||
$footer = phutil_tag_div('config-page-footer', $this->footer);
|
||||
}
|
||||
|
||||
return array($header, $content, $footer);
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -148,7 +148,6 @@ final class PhabricatorSetupIssueView extends AphrontView {
|
|||
array(
|
||||
'href' => '/config/issue/'.$issue->getIssueKey().'/',
|
||||
'class' => 'button button-grey',
|
||||
'style' => 'float: right',
|
||||
),
|
||||
pht('Reload Page'));
|
||||
}
|
||||
|
@ -194,14 +193,24 @@ final class PhabricatorSetupIssueView extends AphrontView {
|
|||
array(
|
||||
'class' => 'setup-issue-head',
|
||||
),
|
||||
array($name, $status));
|
||||
$name);
|
||||
|
||||
$body = phutil_tag(
|
||||
'div',
|
||||
array(
|
||||
'class' => 'setup-issue-body',
|
||||
),
|
||||
array(
|
||||
$status,
|
||||
$description,
|
||||
));
|
||||
|
||||
$tail = phutil_tag(
|
||||
'div',
|
||||
array(
|
||||
'class' => 'setup-issue-tail',
|
||||
),
|
||||
array($actions));
|
||||
$actions);
|
||||
|
||||
$issue = phutil_tag(
|
||||
'div',
|
||||
|
@ -210,7 +219,7 @@ final class PhabricatorSetupIssueView extends AphrontView {
|
|||
),
|
||||
array(
|
||||
$head,
|
||||
$description,
|
||||
$body,
|
||||
$tail,
|
||||
));
|
||||
|
||||
|
|
|
@ -184,19 +184,14 @@ final class PhabricatorDashboardEditController
|
|||
->addCancelButton($cancel_uri));
|
||||
|
||||
$box = id(new PHUIObjectBoxView())
|
||||
->setHeaderText(pht('Dashboard'))
|
||||
->setHeaderText($title)
|
||||
->setForm($form)
|
||||
->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
|
||||
->setBackground(PHUIObjectBoxView::WHITE_CONFIG)
|
||||
->setValidationException($validation_exception);
|
||||
|
||||
$crumbs->setBorder(true);
|
||||
|
||||
$header = id(new PHUIHeaderView())
|
||||
->setHeader($title)
|
||||
->setHeaderIcon($header_icon);
|
||||
|
||||
$view = id(new PHUITwoColumnView())
|
||||
->setHeader($header)
|
||||
->setFooter($box);
|
||||
|
||||
return $this->newPage()
|
||||
|
|
|
@ -10,8 +10,12 @@ final class PhabricatorDifferentialApplication extends PhabricatorApplication {
|
|||
return pht('Differential');
|
||||
}
|
||||
|
||||
public function getMenuName() {
|
||||
return pht('Code Review');
|
||||
}
|
||||
|
||||
public function getShortDescription() {
|
||||
return pht('Review Code');
|
||||
return pht('Pre-Commit Review');
|
||||
}
|
||||
|
||||
public function getIcon() {
|
||||
|
|
|
@ -182,10 +182,10 @@ final class DifferentialDiffCreateController extends DifferentialController {
|
|||
->setValue($button));
|
||||
|
||||
$form_box = id(new PHUIObjectBoxView())
|
||||
->setHeaderText(pht('Diff'))
|
||||
->setHeaderText($title)
|
||||
->setValidationException($validation_exception)
|
||||
->setForm($form)
|
||||
->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
|
||||
->setBackground(PHUIObjectBoxView::WHITE_CONFIG)
|
||||
->setFormErrors($errors);
|
||||
|
||||
$crumbs = $this->buildApplicationCrumbs();
|
||||
|
@ -197,15 +197,10 @@ final class DifferentialDiffCreateController extends DifferentialController {
|
|||
$crumbs->addTextCrumb($title);
|
||||
$crumbs->setBorder(true);
|
||||
|
||||
$header = id(new PHUIHeaderView())
|
||||
->setHeader($title)
|
||||
->setHeaderIcon($header_icon);
|
||||
|
||||
$view = id(new PHUITwoColumnView())
|
||||
->setHeader($header)
|
||||
->setFooter(array(
|
||||
$info_view,
|
||||
$form_box,
|
||||
$info_view,
|
||||
));
|
||||
|
||||
return $this->newPage()
|
||||
|
|
|
@ -320,7 +320,7 @@ final class DifferentialRevisionQuery
|
|||
*/
|
||||
protected function loadPage() {
|
||||
$data = $this->loadData();
|
||||
|
||||
$data = $this->didLoadRawRows($data);
|
||||
$table = $this->newResultObject();
|
||||
return $table->loadAllFromArray($data);
|
||||
}
|
||||
|
@ -772,7 +772,7 @@ final class DifferentialRevisionQuery
|
|||
'column' => 'dateModified',
|
||||
'type' => 'int',
|
||||
),
|
||||
);
|
||||
) + parent::getOrderableColumns();
|
||||
}
|
||||
|
||||
protected function getPagingValueMap($cursor, array $keys) {
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
<?php
|
||||
|
||||
final class DifferentialRevisionFerretEngine
|
||||
extends PhabricatorFerretEngine {
|
||||
|
||||
public function getApplicationName() {
|
||||
return 'differential';
|
||||
}
|
||||
|
||||
public function getScopeName() {
|
||||
return 'revision';
|
||||
}
|
||||
|
||||
public function newSearchEngine() {
|
||||
return new DifferentialRevisionSearchEngine();
|
||||
}
|
||||
|
||||
protected function getFunctionMap() {
|
||||
$map = parent::getFunctionMap();
|
||||
|
||||
$map['body']['aliases'][] = 'summary';
|
||||
|
||||
return $map;
|
||||
}
|
||||
|
||||
}
|
|
@ -15,6 +15,7 @@ final class DifferentialRevision extends DifferentialDAO
|
|||
PhabricatorDestructibleInterface,
|
||||
PhabricatorProjectInterface,
|
||||
PhabricatorFulltextInterface,
|
||||
PhabricatorFerretInterface,
|
||||
PhabricatorConduitResultInterface,
|
||||
PhabricatorDraftInterface {
|
||||
|
||||
|
@ -900,6 +901,14 @@ final class DifferentialRevision extends DifferentialDAO
|
|||
}
|
||||
|
||||
|
||||
/* -( PhabricatorFerretInterface )----------------------------------------- */
|
||||
|
||||
|
||||
public function newFerretEngine() {
|
||||
return new DifferentialRevisionFerretEngine();
|
||||
}
|
||||
|
||||
|
||||
/* -( PhabricatorConduitResultInterface )---------------------------------- */
|
||||
|
||||
|
||||
|
|
|
@ -105,6 +105,18 @@ final class DifferentialTransaction
|
|||
return parent::shouldHide();
|
||||
}
|
||||
|
||||
public function shouldHideForMail(array $xactions) {
|
||||
switch ($this->getTransactionType()) {
|
||||
case DifferentialRevisionReviewersTransaction::TRANSACTIONTYPE:
|
||||
// Don't hide the initial "X added reviewers: ..." transaction during
|
||||
// object creation from mail. See T12118 and PHI54.
|
||||
return false;
|
||||
}
|
||||
|
||||
return parent::shouldHideForMail($xactions);
|
||||
}
|
||||
|
||||
|
||||
public function isInlineCommentTransaction() {
|
||||
switch ($this->getTransactionType()) {
|
||||
case self::TYPE_INLINE:
|
||||
|
|
|
@ -6,6 +6,10 @@ final class PhabricatorDiffusionApplication extends PhabricatorApplication {
|
|||
return pht('Diffusion');
|
||||
}
|
||||
|
||||
public function getMenuName() {
|
||||
return pht('Repositories');
|
||||
}
|
||||
|
||||
public function getShortDescription() {
|
||||
return pht('Host and Browse Repositories');
|
||||
}
|
||||
|
|
|
@ -13,7 +13,7 @@ final class DiffusionRepositoryEditUpdateController
|
|||
$drequest = $this->getDiffusionRequest();
|
||||
$repository = $drequest->getRepository();
|
||||
|
||||
$panel_uri = id(new DiffusionRepositoryStatusManagementPanel())
|
||||
$panel_uri = id(new DiffusionRepositoryBasicsManagementPanel())
|
||||
->setRepository($repository)
|
||||
->getPanelURI();
|
||||
|
||||
|
|
|
@ -22,4 +22,20 @@ abstract class DiffusionRepositoryManageController
|
|||
return $crumbs;
|
||||
}
|
||||
|
||||
public function newBox($title, $content, $action = null) {
|
||||
$header = id(new PHUIHeaderView())
|
||||
->setHeader($title);
|
||||
|
||||
if ($action) {
|
||||
$header->addActionItem($action);
|
||||
}
|
||||
|
||||
$view = id(new PHUIObjectBoxView())
|
||||
->setHeader($header)
|
||||
->appendChild($content)
|
||||
->setBackground(PHUIObjectBoxView::WHITE_CONFIG);
|
||||
|
||||
return $view;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -53,6 +53,10 @@ final class DiffusionRepositoryManagePanelsController
|
|||
|
||||
$panel = $panels[$selected];
|
||||
|
||||
$crumbs = $this->buildApplicationCrumbs();
|
||||
$crumbs->addTextCrumb($panel->getManagementPanelLabel());
|
||||
$crumbs->setBorder(true);
|
||||
|
||||
$content = $panel->buildManagementPanelContent();
|
||||
|
||||
$title = array(
|
||||
|
@ -60,45 +64,17 @@ final class DiffusionRepositoryManagePanelsController
|
|||
$repository->getDisplayName(),
|
||||
);
|
||||
|
||||
$crumbs = $this->buildApplicationCrumbs();
|
||||
$crumbs->addTextCrumb($panel->getManagementPanelLabel());
|
||||
$crumbs->setBorder(true);
|
||||
|
||||
$header_text = pht(
|
||||
'%s: %s',
|
||||
$repository->getDisplayName(),
|
||||
$panel->getManagementPanelLabel());
|
||||
|
||||
$header = id(new PHUIHeaderView())
|
||||
->setHeader($header_text)
|
||||
->setHeaderIcon('fa-pencil');
|
||||
if ($repository->isTracked()) {
|
||||
$header->setStatus('fa-check', 'bluegrey', pht('Active'));
|
||||
} else {
|
||||
$header->setStatus('fa-ban', 'dark', pht('Inactive'));
|
||||
}
|
||||
|
||||
$header->addActionLink(
|
||||
id(new PHUIButtonView())
|
||||
->setTag('a')
|
||||
->setText(pht('View Repository'))
|
||||
->setHref($repository->getURI())
|
||||
->setIcon('fa-code')
|
||||
->setColor(PHUIButtonView::GREEN));
|
||||
$header = $this->buildHeaderView($repository->getDisplayName());
|
||||
|
||||
$view = id(new PHUITwoColumnView())
|
||||
->setHeader($header)
|
||||
->setNavigation($nav)
|
||||
->setFixed(true)
|
||||
->setMainColumn($content);
|
||||
|
||||
$curtain = $panel->buildManagementPanelCurtain();
|
||||
if ($curtain) {
|
||||
$view->setCurtain($curtain);
|
||||
}
|
||||
|
||||
return $this->newPage()
|
||||
->setTitle($title)
|
||||
->setCrumbs($crumbs)
|
||||
->setNavigation($nav)
|
||||
->appendChild($view);
|
||||
}
|
||||
|
||||
|
@ -113,12 +89,6 @@ final class DiffusionRepositoryManagePanelsController
|
|||
$nav = id(new AphrontSideNavFilterView())
|
||||
->setBaseURI($base_uri);
|
||||
|
||||
$item = id(new PHUIListItemView())
|
||||
->setName(pht('manage'))
|
||||
->setType(PHUIListItemView::TYPE_LABEL);
|
||||
|
||||
$nav->addMenuItem($item);
|
||||
|
||||
foreach ($panels as $panel) {
|
||||
$key = $panel->getManagementPanelKey();
|
||||
$label = $panel->getManagementPanelLabel();
|
||||
|
@ -140,6 +110,46 @@ final class DiffusionRepositoryManagePanelsController
|
|||
return $nav;
|
||||
}
|
||||
|
||||
public function buildHeaderView($title) {
|
||||
$viewer = $this->getViewer();
|
||||
|
||||
$drequest = $this->getDiffusionRequest();
|
||||
$repository = $drequest->getRepository();
|
||||
|
||||
$header = id(new PHUIHeaderView())
|
||||
->setHeader($title)
|
||||
->setProfileHeader(true)
|
||||
->setHref($repository->getURI())
|
||||
->setImage($repository->getProfileImageURI());
|
||||
|
||||
if ($repository->isTracked()) {
|
||||
$header->setStatus('fa-check', 'bluegrey', pht('Active'));
|
||||
} else {
|
||||
$header->setStatus('fa-ban', 'dark', pht('Inactive'));
|
||||
}
|
||||
|
||||
$doc_href = PhabricatorEnv::getDoclink(
|
||||
'Diffusion User Guide: Managing Repositories');
|
||||
|
||||
$header->addActionLink(
|
||||
id(new PHUIButtonView())
|
||||
->setTag('a')
|
||||
->setText(pht('View Repository'))
|
||||
->setHref($repository->getURI())
|
||||
->setIcon('fa-code')
|
||||
->setColor(PHUIButtonView::GREY));
|
||||
|
||||
$header->addActionLink(
|
||||
id(new PHUIButtonView())
|
||||
->setTag('a')
|
||||
->setIcon('fa-book')
|
||||
->setHref($doc_href)
|
||||
->setText(pht('Help'))
|
||||
->setColor(PHUIButtonView::GREY));
|
||||
|
||||
return $header;
|
||||
}
|
||||
|
||||
public function newTimeline(PhabricatorRepository $repository) {
|
||||
$timeline = $this->buildTransactionTimeline(
|
||||
$repository,
|
||||
|
|
|
@ -45,6 +45,7 @@ final class DiffusionRepositoryURIViewController
|
|||
);
|
||||
|
||||
$crumbs = $this->buildApplicationCrumbs();
|
||||
$crumbs->setBorder(true);
|
||||
$crumbs->addTextCrumb(
|
||||
$repository->getDisplayName(),
|
||||
$repository->getURI());
|
||||
|
|
|
@ -14,20 +14,7 @@ final class DiffusionRepositoryActionsManagementPanel
|
|||
}
|
||||
|
||||
public function getManagementPanelIcon() {
|
||||
$repository = $this->getRepository();
|
||||
|
||||
$has_any =
|
||||
$repository->getDetail('herald-disabled') ||
|
||||
$repository->getDetail('disable-autoclose');
|
||||
|
||||
// NOTE: Any value here really means something is disabled, so try to
|
||||
// hint that a little bit with the icon.
|
||||
|
||||
if ($has_any) {
|
||||
return 'fa-comment-o';
|
||||
} else {
|
||||
return 'fa-commenting grey';
|
||||
}
|
||||
return 'fa-flash';
|
||||
}
|
||||
|
||||
protected function getEditEngineFieldKeys() {
|
||||
|
@ -37,29 +24,6 @@ final class DiffusionRepositoryActionsManagementPanel
|
|||
);
|
||||
}
|
||||
|
||||
public function buildManagementPanelCurtain() {
|
||||
$repository = $this->getRepository();
|
||||
$viewer = $this->getViewer();
|
||||
$action_list = $this->getNewActionList();
|
||||
|
||||
$can_edit = PhabricatorPolicyFilter::hasCapability(
|
||||
$viewer,
|
||||
$repository,
|
||||
PhabricatorPolicyCapability::CAN_EDIT);
|
||||
|
||||
$actions_uri = $this->getEditPageURI();
|
||||
|
||||
$action_list->addAction(
|
||||
id(new PhabricatorActionView())
|
||||
->setIcon('fa-pencil')
|
||||
->setName(pht('Edit Actions'))
|
||||
->setHref($actions_uri)
|
||||
->setDisabled(!$can_edit)
|
||||
->setWorkflow(!$can_edit));
|
||||
|
||||
return $this->getNewCurtainView($action_list);
|
||||
}
|
||||
|
||||
public function buildManagementPanelContent() {
|
||||
$repository = $this->getRepository();
|
||||
$viewer = $this->getViewer();
|
||||
|
@ -79,7 +43,22 @@ final class DiffusionRepositoryActionsManagementPanel
|
|||
$autoclose = phutil_tag('em', array(), $autoclose);
|
||||
$view->addProperty(pht('Autoclose'), $autoclose);
|
||||
|
||||
return $this->newBox(pht('Actions'), $view);
|
||||
$can_edit = PhabricatorPolicyFilter::hasCapability(
|
||||
$viewer,
|
||||
$repository,
|
||||
PhabricatorPolicyCapability::CAN_EDIT);
|
||||
|
||||
$actions_uri = $this->getEditPageURI();
|
||||
|
||||
$button = id(new PHUIButtonView())
|
||||
->setTag('a')
|
||||
->setIcon('fa-pencil')
|
||||
->setText(pht('Edit'))
|
||||
->setHref($actions_uri)
|
||||
->setDisabled(!$can_edit)
|
||||
->setWorkflow(!$can_edit);
|
||||
|
||||
return $this->newBox(pht('Actions'), $view, array($button));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -27,59 +27,18 @@ final class DiffusionRepositoryAutomationManagementPanel
|
|||
public function getManagementPanelIcon() {
|
||||
$repository = $this->getRepository();
|
||||
|
||||
if (!$repository->canPerformAutomation()) {
|
||||
return 'fa-truck grey';
|
||||
}
|
||||
|
||||
$blueprint_phids = $repository->getAutomationBlueprintPHIDs();
|
||||
if (!$blueprint_phids) {
|
||||
return 'fa-truck grey';
|
||||
}
|
||||
|
||||
$is_authorized = DrydockAuthorizationQuery::isFullyAuthorized(
|
||||
$repository->getPHID(),
|
||||
$blueprint_phids);
|
||||
if (!$is_authorized) {
|
||||
return 'fa-exclamation-triangle yellow';
|
||||
return 'fa-exclamation-triangle';
|
||||
}
|
||||
|
||||
return 'fa-truck';
|
||||
}
|
||||
|
||||
public function buildManagementPanelCurtain() {
|
||||
$repository = $this->getRepository();
|
||||
$viewer = $this->getViewer();
|
||||
$action_list = $this->getNewActionList();
|
||||
|
||||
$can_edit = PhabricatorPolicyFilter::hasCapability(
|
||||
$viewer,
|
||||
$repository,
|
||||
PhabricatorPolicyCapability::CAN_EDIT);
|
||||
|
||||
$can_test = $can_edit && $repository->canPerformAutomation();
|
||||
|
||||
$automation_uri = $this->getEditPageURI();
|
||||
$test_uri = $repository->getPathURI('edit/testautomation/');
|
||||
|
||||
$action_list->addAction(
|
||||
id(new PhabricatorActionView())
|
||||
->setIcon('fa-pencil')
|
||||
->setName(pht('Edit Automation'))
|
||||
->setHref($automation_uri)
|
||||
->setDisabled(!$can_edit)
|
||||
->setWorkflow(!$can_edit));
|
||||
|
||||
$action_list->addAction(
|
||||
id(new PhabricatorActionView())
|
||||
->setIcon('fa-gamepad')
|
||||
->setName(pht('Test Configuration'))
|
||||
->setWorkflow(true)
|
||||
->setDisabled(!$can_test)
|
||||
->setHref($test_uri));
|
||||
|
||||
return $this->getNewCurtainView($action_list);
|
||||
}
|
||||
|
||||
public function buildManagementPanelContent() {
|
||||
$repository = $this->getRepository();
|
||||
$viewer = $this->getViewer();
|
||||
|
@ -99,7 +58,33 @@ final class DiffusionRepositoryAutomationManagementPanel
|
|||
|
||||
$view->addProperty(pht('Automation'), $blueprint_view);
|
||||
|
||||
return $this->newBox(pht('Automation'), $view);
|
||||
$can_edit = PhabricatorPolicyFilter::hasCapability(
|
||||
$viewer,
|
||||
$repository,
|
||||
PhabricatorPolicyCapability::CAN_EDIT);
|
||||
|
||||
$can_test = $can_edit && $repository->canPerformAutomation();
|
||||
|
||||
$automation_uri = $this->getEditPageURI();
|
||||
$test_uri = $repository->getPathURI('edit/testautomation/');
|
||||
|
||||
$edit = id(new PHUIButtonView())
|
||||
->setTag('a')
|
||||
->setIcon('fa-pencil')
|
||||
->setText(pht('Edit'))
|
||||
->setHref($automation_uri)
|
||||
->setDisabled(!$can_edit)
|
||||
->setWorkflow(!$can_edit);
|
||||
|
||||
$test = id(new PHUIButtonView())
|
||||
->setTag('a')
|
||||
->setIcon('fa-gamepad')
|
||||
->setText(pht('Test Config'))
|
||||
->setWorkflow(true)
|
||||
->setDisabled(!$can_test)
|
||||
->setHref($test_uri);
|
||||
|
||||
return $this->newBox(pht('Automation'), $view, array($edit, $test));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -14,14 +14,8 @@ final class DiffusionRepositoryBasicsManagementPanel
|
|||
}
|
||||
|
||||
public function getManagementPanelIcon() {
|
||||
$repository = $this->getRepository();
|
||||
|
||||
if (!$repository->isTracked()) {
|
||||
return 'fa-ban indigo';
|
||||
} else {
|
||||
return 'fa-code';
|
||||
}
|
||||
}
|
||||
|
||||
protected function getEditEngineFieldKeys() {
|
||||
return array(
|
||||
|
@ -33,10 +27,11 @@ final class DiffusionRepositoryBasicsManagementPanel
|
|||
);
|
||||
}
|
||||
|
||||
public function buildManagementPanelCurtain() {
|
||||
private function buildActionMenu() {
|
||||
$repository = $this->getRepository();
|
||||
$viewer = $this->getViewer();
|
||||
$action_list = $this->getNewActionList();
|
||||
$action_list = id(new PhabricatorActionListView())
|
||||
->setViewer($viewer);
|
||||
|
||||
$can_edit = PhabricatorPolicyFilter::hasCapability(
|
||||
$viewer,
|
||||
|
@ -50,27 +45,22 @@ final class DiffusionRepositoryBasicsManagementPanel
|
|||
$dangerous_uri = $repository->getPathURI('edit/dangerous/');
|
||||
|
||||
if ($repository->isTracked()) {
|
||||
$activate_icon = 'fa-pause';
|
||||
$activate_label = pht('Deactivate Repository');
|
||||
} else {
|
||||
$activate_icon = 'fa-play';
|
||||
$activate_label = pht('Activate Repository');
|
||||
}
|
||||
|
||||
$should_dangerous = $repository->shouldAllowDangerousChanges();
|
||||
if ($should_dangerous) {
|
||||
$dangerous_icon = 'fa-shield';
|
||||
$dangerous_name = pht('Prevent Dangerous Changes');
|
||||
$can_dangerous = $can_edit;
|
||||
} else {
|
||||
$dangerous_icon = 'fa-bullseye';
|
||||
$dangerous_name = pht('Allow Dangerous Changes');
|
||||
$can_dangerous = ($can_edit && $repository->canAllowDangerousChanges());
|
||||
}
|
||||
|
||||
$action_list->addAction(
|
||||
id(new PhabricatorActionView())
|
||||
->setIcon('fa-pencil')
|
||||
->setName(pht('Edit Basic Information'))
|
||||
->setHref($edit_uri)
|
||||
->setDisabled(!$can_edit)
|
||||
|
@ -78,7 +68,6 @@ final class DiffusionRepositoryBasicsManagementPanel
|
|||
|
||||
$action_list->addAction(
|
||||
id(new PhabricatorActionView())
|
||||
->setIcon('fa-text-width')
|
||||
->setName(pht('Edit Text Encoding'))
|
||||
->setHref($encoding_uri)
|
||||
->setDisabled(!$can_edit)
|
||||
|
@ -86,7 +75,6 @@ final class DiffusionRepositoryBasicsManagementPanel
|
|||
|
||||
$action_list->addAction(
|
||||
id(new PhabricatorActionView())
|
||||
->setIcon($dangerous_icon)
|
||||
->setName($dangerous_name)
|
||||
->setHref($dangerous_uri)
|
||||
->setDisabled(!$can_dangerous)
|
||||
|
@ -95,26 +83,37 @@ final class DiffusionRepositoryBasicsManagementPanel
|
|||
$action_list->addAction(
|
||||
id(new PhabricatorActionView())
|
||||
->setHref($activate_uri)
|
||||
->setIcon($activate_icon)
|
||||
->setName($activate_label)
|
||||
->setDisabled(!$can_edit)
|
||||
->setWorkflow(true));
|
||||
|
||||
$action_list->addAction(
|
||||
id(new PhabricatorActionView())
|
||||
->setType(PhabricatorActionView::TYPE_DIVIDER));
|
||||
|
||||
$action_list->addAction(
|
||||
id(new PhabricatorActionView())
|
||||
->setName(pht('Delete Repository'))
|
||||
->setIcon('fa-times')
|
||||
->setHref($delete_uri)
|
||||
->setColor(PhabricatorActionView::RED)
|
||||
->setDisabled(true)
|
||||
->setWorkflow(true));
|
||||
|
||||
return $this->getNewCurtainView($action_list);
|
||||
return $action_list;
|
||||
}
|
||||
|
||||
public function buildManagementPanelContent() {
|
||||
$result = array();
|
||||
|
||||
$basics = $this->newBox(pht('Repository Basics'), $this->buildBasics());
|
||||
$button = id(new PHUIButtonView())
|
||||
->setTag('a')
|
||||
->setText(pht('Actions'))
|
||||
->setHref('#')
|
||||
->setIcon('fa-bars')
|
||||
->addClass('phui-mobile-menu')
|
||||
->setDropdownMenu($this->buildActionMenu());
|
||||
|
||||
$basics = $this->buildBasics();
|
||||
$basics = $this->newBox(pht('Properties'), $basics, array($button));
|
||||
|
||||
$repository = $this->getRepository();
|
||||
$is_new = $repository->isNewlyInitialized();
|
||||
|
@ -144,14 +143,13 @@ final class DiffusionRepositoryBasicsManagementPanel
|
|||
->setErrors($messages);
|
||||
}
|
||||
|
||||
$result[] = $basics;
|
||||
|
||||
$description = $this->buildDescription();
|
||||
if ($description) {
|
||||
$result[] = $this->newBox(pht('Description'), $description);
|
||||
$description = $this->newBox(pht('Description'), $description);
|
||||
}
|
||||
$status = $this->buildStatus();
|
||||
|
||||
return array($info_view, $result);
|
||||
return array($info_view, $basics, $description, $status);
|
||||
}
|
||||
|
||||
private function buildBasics() {
|
||||
|
@ -213,7 +211,7 @@ final class DiffusionRepositoryBasicsManagementPanel
|
|||
$view = id(new PHUIPropertyListView())
|
||||
->setViewer($viewer);
|
||||
if (!strlen($description)) {
|
||||
$description = phutil_tag('em', array(), pht('No description provided.'));
|
||||
return null;
|
||||
} else {
|
||||
$description = new PHUIRemarkupView($viewer, $description);
|
||||
}
|
||||
|
@ -222,4 +220,471 @@ final class DiffusionRepositoryBasicsManagementPanel
|
|||
return $view;
|
||||
}
|
||||
|
||||
private function buildStatus() {
|
||||
$repository = $this->getRepository();
|
||||
$viewer = $this->getViewer();
|
||||
$update_uri = $repository->getPathURI('edit/update/');
|
||||
|
||||
$view = id(new PHUIPropertyListView())
|
||||
->setViewer($viewer);
|
||||
|
||||
$view->addProperty(
|
||||
pht('Update Frequency'),
|
||||
$this->buildRepositoryUpdateInterval($repository));
|
||||
|
||||
$messages = $this->loadStatusMessages($repository);
|
||||
|
||||
$status = $this->buildRepositoryStatus($repository, $messages);
|
||||
$raw_error = $this->buildRepositoryRawError($repository, $messages);
|
||||
|
||||
$view->addProperty(pht('Status'), $status);
|
||||
if ($raw_error) {
|
||||
$view->addSectionHeader(pht('Raw Error'));
|
||||
$view->addTextContent($raw_error);
|
||||
}
|
||||
|
||||
$can_edit = PhabricatorPolicyFilter::hasCapability(
|
||||
$viewer,
|
||||
$repository,
|
||||
PhabricatorPolicyCapability::CAN_EDIT);
|
||||
|
||||
$button = id(new PHUIButtonView())
|
||||
->setTag('a')
|
||||
->setIcon('fa-refresh')
|
||||
->setText(pht('Update Now'))
|
||||
->setWorkflow(true)
|
||||
->setDisabled(!$can_edit)
|
||||
->setHref($update_uri);
|
||||
|
||||
return $this->newBox(pht('Status'), $view, array($button));
|
||||
}
|
||||
|
||||
private function buildRepositoryUpdateInterval(
|
||||
PhabricatorRepository $repository) {
|
||||
|
||||
$smart_wait = $repository->loadUpdateInterval();
|
||||
|
||||
$doc_href = PhabricatorEnv::getDoclink(
|
||||
'Diffusion User Guide: Repository Updates');
|
||||
|
||||
return array(
|
||||
phutil_format_relative_time_detailed($smart_wait),
|
||||
" \xC2\xB7 ",
|
||||
phutil_tag(
|
||||
'a',
|
||||
array(
|
||||
'href' => $doc_href,
|
||||
'target' => '_blank',
|
||||
),
|
||||
pht('Learn More')),
|
||||
);
|
||||
}
|
||||
|
||||
private function buildRepositoryStatus(
|
||||
PhabricatorRepository $repository,
|
||||
array $messages) {
|
||||
|
||||
$viewer = $this->getViewer();
|
||||
$is_cluster = $repository->getAlmanacServicePHID();
|
||||
|
||||
$view = new PHUIStatusListView();
|
||||
|
||||
if ($repository->isTracked()) {
|
||||
$view->addItem(
|
||||
id(new PHUIStatusItemView())
|
||||
->setIcon(PHUIStatusItemView::ICON_ACCEPT, 'green')
|
||||
->setTarget(pht('Repository Active')));
|
||||
} else {
|
||||
$view->addItem(
|
||||
id(new PHUIStatusItemView())
|
||||
->setIcon(PHUIStatusItemView::ICON_WARNING, 'bluegrey')
|
||||
->setTarget(pht('Repository Inactive'))
|
||||
->setNote(
|
||||
pht('Activate this repository to begin or resume import.')));
|
||||
return $view;
|
||||
}
|
||||
|
||||
$binaries = array();
|
||||
$svnlook_check = false;
|
||||
switch ($repository->getVersionControlSystem()) {
|
||||
case PhabricatorRepositoryType::REPOSITORY_TYPE_GIT:
|
||||
$binaries[] = 'git';
|
||||
break;
|
||||
case PhabricatorRepositoryType::REPOSITORY_TYPE_SVN:
|
||||
$binaries[] = 'svn';
|
||||
break;
|
||||
case PhabricatorRepositoryType::REPOSITORY_TYPE_MERCURIAL:
|
||||
$binaries[] = 'hg';
|
||||
break;
|
||||
}
|
||||
|
||||
if ($repository->isHosted()) {
|
||||
$proto_https = PhabricatorRepositoryURI::BUILTIN_PROTOCOL_HTTPS;
|
||||
$proto_http = PhabricatorRepositoryURI::BUILTIN_PROTOCOL_HTTP;
|
||||
$can_http = $repository->canServeProtocol($proto_http, false) ||
|
||||
$repository->canServeProtocol($proto_https, false);
|
||||
|
||||
if ($can_http) {
|
||||
switch ($repository->getVersionControlSystem()) {
|
||||
case PhabricatorRepositoryType::REPOSITORY_TYPE_GIT:
|
||||
$binaries[] = 'git-http-backend';
|
||||
break;
|
||||
case PhabricatorRepositoryType::REPOSITORY_TYPE_SVN:
|
||||
$binaries[] = 'svnserve';
|
||||
$binaries[] = 'svnadmin';
|
||||
$binaries[] = 'svnlook';
|
||||
$svnlook_check = true;
|
||||
break;
|
||||
case PhabricatorRepositoryType::REPOSITORY_TYPE_MERCURIAL:
|
||||
$binaries[] = 'hg';
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$proto_ssh = PhabricatorRepositoryURI::BUILTIN_PROTOCOL_SSH;
|
||||
$can_ssh = $repository->canServeProtocol($proto_ssh, false);
|
||||
|
||||
if ($can_ssh) {
|
||||
switch ($repository->getVersionControlSystem()) {
|
||||
case PhabricatorRepositoryType::REPOSITORY_TYPE_GIT:
|
||||
$binaries[] = 'git-receive-pack';
|
||||
$binaries[] = 'git-upload-pack';
|
||||
break;
|
||||
case PhabricatorRepositoryType::REPOSITORY_TYPE_SVN:
|
||||
$binaries[] = 'svnserve';
|
||||
$binaries[] = 'svnadmin';
|
||||
$binaries[] = 'svnlook';
|
||||
$svnlook_check = true;
|
||||
break;
|
||||
case PhabricatorRepositoryType::REPOSITORY_TYPE_MERCURIAL:
|
||||
$binaries[] = 'hg';
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$binaries = array_unique($binaries);
|
||||
if (!$is_cluster) {
|
||||
// We're only checking for binaries if we aren't running with a cluster
|
||||
// configuration. In theory, we could check for binaries on the
|
||||
// repository host machine, but we'd need to make this more complicated
|
||||
// to do that.
|
||||
|
||||
foreach ($binaries as $binary) {
|
||||
$where = Filesystem::resolveBinary($binary);
|
||||
if (!$where) {
|
||||
$view->addItem(
|
||||
id(new PHUIStatusItemView())
|
||||
->setIcon(PHUIStatusItemView::ICON_WARNING, 'red')
|
||||
->setTarget(
|
||||
pht('Missing Binary %s', phutil_tag('tt', array(), $binary)))
|
||||
->setNote(pht(
|
||||
"Unable to find this binary in the webserver's PATH. You may ".
|
||||
"need to configure %s.",
|
||||
$this->getEnvConfigLink())));
|
||||
} else {
|
||||
$view->addItem(
|
||||
id(new PHUIStatusItemView())
|
||||
->setIcon(PHUIStatusItemView::ICON_ACCEPT, 'green')
|
||||
->setTarget(
|
||||
pht('Found Binary %s', phutil_tag('tt', array(), $binary)))
|
||||
->setNote(phutil_tag('tt', array(), $where)));
|
||||
}
|
||||
}
|
||||
|
||||
// This gets checked generically above. However, for svn commit hooks, we
|
||||
// need this to be in environment.append-paths because subversion strips
|
||||
// PATH.
|
||||
if ($svnlook_check) {
|
||||
$where = Filesystem::resolveBinary('svnlook');
|
||||
if ($where) {
|
||||
$path = substr($where, 0, strlen($where) - strlen('svnlook'));
|
||||
$dirs = PhabricatorEnv::getEnvConfig('environment.append-paths');
|
||||
$in_path = false;
|
||||
foreach ($dirs as $dir) {
|
||||
if (Filesystem::isDescendant($path, $dir)) {
|
||||
$in_path = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!$in_path) {
|
||||
$view->addItem(
|
||||
id(new PHUIStatusItemView())
|
||||
->setIcon(PHUIStatusItemView::ICON_WARNING, 'red')
|
||||
->setTarget(
|
||||
pht('Missing Binary %s', phutil_tag('tt', array(), $binary)))
|
||||
->setNote(pht(
|
||||
'Unable to find this binary in `%s`. '.
|
||||
'You need to configure %s and include %s.',
|
||||
'environment.append-paths',
|
||||
$this->getEnvConfigLink(),
|
||||
$path)));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$doc_href = PhabricatorEnv::getDoclink('Managing Daemons with phd');
|
||||
|
||||
$daemon_instructions = pht(
|
||||
'Use %s to start daemons. See %s.',
|
||||
phutil_tag('tt', array(), 'bin/phd start'),
|
||||
phutil_tag(
|
||||
'a',
|
||||
array(
|
||||
'href' => $doc_href,
|
||||
),
|
||||
pht('Managing Daemons with phd')));
|
||||
|
||||
|
||||
$pull_daemon = id(new PhabricatorDaemonLogQuery())
|
||||
->setViewer(PhabricatorUser::getOmnipotentUser())
|
||||
->withStatus(PhabricatorDaemonLogQuery::STATUS_ALIVE)
|
||||
->withDaemonClasses(array('PhabricatorRepositoryPullLocalDaemon'))
|
||||
->setLimit(1)
|
||||
->execute();
|
||||
|
||||
if ($pull_daemon) {
|
||||
|
||||
// TODO: In a cluster environment, we need a daemon on this repository's
|
||||
// host, specifically, and we aren't checking for that right now. This
|
||||
// is a reasonable proxy for things being more-or-less correctly set up,
|
||||
// though.
|
||||
|
||||
$view->addItem(
|
||||
id(new PHUIStatusItemView())
|
||||
->setIcon(PHUIStatusItemView::ICON_ACCEPT, 'green')
|
||||
->setTarget(pht('Pull Daemon Running')));
|
||||
} else {
|
||||
$view->addItem(
|
||||
id(new PHUIStatusItemView())
|
||||
->setIcon(PHUIStatusItemView::ICON_WARNING, 'red')
|
||||
->setTarget(pht('Pull Daemon Not Running'))
|
||||
->setNote($daemon_instructions));
|
||||
}
|
||||
|
||||
|
||||
$task_daemon = id(new PhabricatorDaemonLogQuery())
|
||||
->setViewer(PhabricatorUser::getOmnipotentUser())
|
||||
->withStatus(PhabricatorDaemonLogQuery::STATUS_ALIVE)
|
||||
->withDaemonClasses(array('PhabricatorTaskmasterDaemon'))
|
||||
->setLimit(1)
|
||||
->execute();
|
||||
if ($task_daemon) {
|
||||
$view->addItem(
|
||||
id(new PHUIStatusItemView())
|
||||
->setIcon(PHUIStatusItemView::ICON_ACCEPT, 'green')
|
||||
->setTarget(pht('Task Daemon Running')));
|
||||
} else {
|
||||
$view->addItem(
|
||||
id(new PHUIStatusItemView())
|
||||
->setIcon(PHUIStatusItemView::ICON_WARNING, 'red')
|
||||
->setTarget(pht('Task Daemon Not Running'))
|
||||
->setNote($daemon_instructions));
|
||||
}
|
||||
|
||||
|
||||
if ($is_cluster) {
|
||||
// Just omit this status check for now in cluster environments. We
|
||||
// could make a service call and pull it from the repository host
|
||||
// eventually.
|
||||
} else if ($repository->usesLocalWorkingCopy()) {
|
||||
$local_parent = dirname($repository->getLocalPath());
|
||||
if (Filesystem::pathExists($local_parent)) {
|
||||
$view->addItem(
|
||||
id(new PHUIStatusItemView())
|
||||
->setIcon(PHUIStatusItemView::ICON_ACCEPT, 'green')
|
||||
->setTarget(pht('Storage Directory OK'))
|
||||
->setNote(phutil_tag('tt', array(), $local_parent)));
|
||||
} else {
|
||||
$view->addItem(
|
||||
id(new PHUIStatusItemView())
|
||||
->setIcon(PHUIStatusItemView::ICON_WARNING, 'red')
|
||||
->setTarget(pht('No Storage Directory'))
|
||||
->setNote(
|
||||
pht(
|
||||
'Storage directory %s does not exist, or is not readable by '.
|
||||
'the webserver. Create this directory or make it readable.',
|
||||
phutil_tag('tt', array(), $local_parent))));
|
||||
return $view;
|
||||
}
|
||||
|
||||
$local_path = $repository->getLocalPath();
|
||||
$message = idx($messages, PhabricatorRepositoryStatusMessage::TYPE_INIT);
|
||||
if ($message) {
|
||||
switch ($message->getStatusCode()) {
|
||||
case PhabricatorRepositoryStatusMessage::CODE_ERROR:
|
||||
$view->addItem(
|
||||
id(new PHUIStatusItemView())
|
||||
->setIcon(PHUIStatusItemView::ICON_WARNING, 'red')
|
||||
->setTarget(pht('Initialization Error'))
|
||||
->setNote($message->getParameter('message')));
|
||||
return $view;
|
||||
case PhabricatorRepositoryStatusMessage::CODE_OKAY:
|
||||
if (Filesystem::pathExists($local_path)) {
|
||||
$view->addItem(
|
||||
id(new PHUIStatusItemView())
|
||||
->setIcon(PHUIStatusItemView::ICON_ACCEPT, 'green')
|
||||
->setTarget(pht('Working Copy OK'))
|
||||
->setNote(phutil_tag('tt', array(), $local_path)));
|
||||
} else {
|
||||
$view->addItem(
|
||||
id(new PHUIStatusItemView())
|
||||
->setIcon(PHUIStatusItemView::ICON_WARNING, 'red')
|
||||
->setTarget(pht('Working Copy Error'))
|
||||
->setNote(
|
||||
pht(
|
||||
'Working copy %s has been deleted, or is not '.
|
||||
'readable by the webserver. Make this directory '.
|
||||
'readable. If it has been deleted, the daemons should '.
|
||||
'restore it automatically.',
|
||||
phutil_tag('tt', array(), $local_path))));
|
||||
return $view;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
$view->addItem(
|
||||
id(new PHUIStatusItemView())
|
||||
->setIcon(PHUIStatusItemView::ICON_CLOCK, 'green')
|
||||
->setTarget(pht('Initializing Working Copy'))
|
||||
->setNote(pht('Daemons are initializing the working copy.')));
|
||||
return $view;
|
||||
}
|
||||
} else {
|
||||
$view->addItem(
|
||||
id(new PHUIStatusItemView())
|
||||
->setIcon(PHUIStatusItemView::ICON_CLOCK, 'orange')
|
||||
->setTarget(pht('No Working Copy Yet'))
|
||||
->setNote(
|
||||
pht('Waiting for daemons to build a working copy.')));
|
||||
return $view;
|
||||
}
|
||||
}
|
||||
|
||||
$message = idx($messages, PhabricatorRepositoryStatusMessage::TYPE_FETCH);
|
||||
if ($message) {
|
||||
switch ($message->getStatusCode()) {
|
||||
case PhabricatorRepositoryStatusMessage::CODE_ERROR:
|
||||
$message = $message->getParameter('message');
|
||||
|
||||
$suggestion = null;
|
||||
if (preg_match('/Permission denied \(publickey\)./', $message)) {
|
||||
$suggestion = pht(
|
||||
'Public Key Error: This error usually indicates that the '.
|
||||
'keypair you have configured does not have permission to '.
|
||||
'access the repository.');
|
||||
}
|
||||
|
||||
$view->addItem(
|
||||
id(new PHUIStatusItemView())
|
||||
->setIcon(PHUIStatusItemView::ICON_WARNING, 'red')
|
||||
->setTarget(pht('Update Error'))
|
||||
->setNote($suggestion));
|
||||
return $view;
|
||||
case PhabricatorRepositoryStatusMessage::CODE_OKAY:
|
||||
$ago = (PhabricatorTime::getNow() - $message->getEpoch());
|
||||
$view->addItem(
|
||||
id(new PHUIStatusItemView())
|
||||
->setIcon(PHUIStatusItemView::ICON_ACCEPT, 'green')
|
||||
->setTarget(pht('Updates OK'))
|
||||
->setNote(
|
||||
pht(
|
||||
'Last updated %s (%s ago).',
|
||||
phabricator_datetime($message->getEpoch(), $viewer),
|
||||
phutil_format_relative_time_detailed($ago))));
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
$view->addItem(
|
||||
id(new PHUIStatusItemView())
|
||||
->setIcon(PHUIStatusItemView::ICON_CLOCK, 'orange')
|
||||
->setTarget(pht('Waiting For Update'))
|
||||
->setNote(
|
||||
pht('Waiting for daemons to read updates.')));
|
||||
}
|
||||
|
||||
if ($repository->isImporting()) {
|
||||
$ratio = $repository->loadImportProgress();
|
||||
$percentage = sprintf('%.2f%%', 100 * $ratio);
|
||||
|
||||
$view->addItem(
|
||||
id(new PHUIStatusItemView())
|
||||
->setIcon(PHUIStatusItemView::ICON_CLOCK, 'green')
|
||||
->setTarget(pht('Importing'))
|
||||
->setNote(
|
||||
pht('%s Complete', $percentage)));
|
||||
} else {
|
||||
$view->addItem(
|
||||
id(new PHUIStatusItemView())
|
||||
->setIcon(PHUIStatusItemView::ICON_ACCEPT, 'green')
|
||||
->setTarget(pht('Fully Imported')));
|
||||
}
|
||||
|
||||
if (idx($messages, PhabricatorRepositoryStatusMessage::TYPE_NEEDS_UPDATE)) {
|
||||
$view->addItem(
|
||||
id(new PHUIStatusItemView())
|
||||
->setIcon(PHUIStatusItemView::ICON_UP, 'indigo')
|
||||
->setTarget(pht('Prioritized'))
|
||||
->setNote(pht('This repository will be updated soon!')));
|
||||
}
|
||||
|
||||
return $view;
|
||||
}
|
||||
|
||||
private function buildRepositoryRawError(
|
||||
PhabricatorRepository $repository,
|
||||
array $messages) {
|
||||
$viewer = $this->getViewer();
|
||||
|
||||
$can_edit = PhabricatorPolicyFilter::hasCapability(
|
||||
$viewer,
|
||||
$repository,
|
||||
PhabricatorPolicyCapability::CAN_EDIT);
|
||||
|
||||
$raw_error = null;
|
||||
|
||||
$message = idx($messages, PhabricatorRepositoryStatusMessage::TYPE_FETCH);
|
||||
if ($message) {
|
||||
switch ($message->getStatusCode()) {
|
||||
case PhabricatorRepositoryStatusMessage::CODE_ERROR:
|
||||
$raw_error = $message->getParameter('message');
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ($raw_error !== null) {
|
||||
if (!$can_edit) {
|
||||
$raw_message = pht(
|
||||
'You must be able to edit a repository to see raw error messages '.
|
||||
'because they sometimes disclose sensitive information.');
|
||||
$raw_message = phutil_tag('em', array(), $raw_message);
|
||||
} else {
|
||||
$raw_message = phutil_escape_html_newlines($raw_error);
|
||||
}
|
||||
} else {
|
||||
$raw_message = null;
|
||||
}
|
||||
|
||||
return $raw_message;
|
||||
}
|
||||
|
||||
private function loadStatusMessages(PhabricatorRepository $repository) {
|
||||
$messages = id(new PhabricatorRepositoryStatusMessage())
|
||||
->loadAllWhere('repositoryID = %d', $repository->getID());
|
||||
$messages = mpull($messages, null, 'getStatusType');
|
||||
|
||||
return $messages;
|
||||
}
|
||||
|
||||
private function getEnvConfigLink() {
|
||||
$config_href = '/config/edit/environment.append-paths/';
|
||||
return phutil_tag(
|
||||
'a',
|
||||
array(
|
||||
'href' => $config_href,
|
||||
),
|
||||
'environment.append-paths');
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -19,18 +19,7 @@ final class DiffusionRepositoryBranchesManagementPanel
|
|||
}
|
||||
|
||||
public function getManagementPanelIcon() {
|
||||
$repository = $this->getRepository();
|
||||
|
||||
$has_any =
|
||||
$repository->getDetail('default-branch') ||
|
||||
$repository->getDetail('branch-filter') ||
|
||||
$repository->getDetail('close-commits-filter');
|
||||
|
||||
if ($has_any) {
|
||||
return 'fa-code-fork';
|
||||
} else {
|
||||
return 'fa-code-fork grey';
|
||||
}
|
||||
}
|
||||
|
||||
protected function getEditEngineFieldKeys() {
|
||||
|
@ -41,29 +30,6 @@ final class DiffusionRepositoryBranchesManagementPanel
|
|||
);
|
||||
}
|
||||
|
||||
public function buildManagementPanelCurtain() {
|
||||
$repository = $this->getRepository();
|
||||
$viewer = $this->getViewer();
|
||||
$action_list = $this->getNewActionList();
|
||||
|
||||
$can_edit = PhabricatorPolicyFilter::hasCapability(
|
||||
$viewer,
|
||||
$repository,
|
||||
PhabricatorPolicyCapability::CAN_EDIT);
|
||||
|
||||
$branches_uri = $this->getEditPageURI();
|
||||
|
||||
$action_list->addAction(
|
||||
id(new PhabricatorActionView())
|
||||
->setIcon('fa-pencil')
|
||||
->setName(pht('Edit Branches'))
|
||||
->setHref($branches_uri)
|
||||
->setDisabled(!$can_edit)
|
||||
->setWorkflow(!$can_edit));
|
||||
|
||||
return $this->getNewCurtainView($action_list);
|
||||
}
|
||||
|
||||
public function buildManagementPanelContent() {
|
||||
$repository = $this->getRepository();
|
||||
$viewer = $this->getViewer();
|
||||
|
@ -94,7 +60,23 @@ final class DiffusionRepositoryBranchesManagementPanel
|
|||
}
|
||||
|
||||
$view->addProperty(pht('Autoclose Only'), $autoclose_only);
|
||||
$content[] = $this->newBox(pht('Branches'), $view);
|
||||
|
||||
$can_edit = PhabricatorPolicyFilter::hasCapability(
|
||||
$viewer,
|
||||
$repository,
|
||||
PhabricatorPolicyCapability::CAN_EDIT);
|
||||
|
||||
$branches_uri = $this->getEditPageURI();
|
||||
|
||||
$button = id(new PHUIButtonView())
|
||||
->setTag('a')
|
||||
->setIcon('fa-pencil')
|
||||
->setText(pht('Edit'))
|
||||
->setHref($branches_uri)
|
||||
->setDisabled(!$can_edit)
|
||||
->setWorkflow(!$can_edit);
|
||||
|
||||
$content[] = $this->newBox(pht('Branches'), $view, array($button));
|
||||
|
||||
// Branch Autoclose Table
|
||||
if (!$repository->isImporting()) {
|
||||
|
@ -176,11 +158,8 @@ final class DiffusionRepositoryBranchesManagementPanel
|
|||
true,
|
||||
));
|
||||
|
||||
$box = id(new PHUIObjectBoxView())
|
||||
->setHeaderText(pht('Branch Status'))
|
||||
->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
|
||||
->setTable($branch_table)
|
||||
->setPager($pager);
|
||||
$box = $this->newBox(pht('Branch Status'), $branch_table);
|
||||
$box->setPager($pager);
|
||||
$content[] = $box;
|
||||
} else {
|
||||
$content[] = id(new PHUIInfoView())
|
||||
|
|
|
@ -1,33 +0,0 @@
|
|||
<?php
|
||||
|
||||
final class DiffusionRepositoryDocumentationManagementPanel
|
||||
extends DiffusionRepositoryManagementPanel {
|
||||
|
||||
const PANELKEY = 'documentation';
|
||||
|
||||
public function getManagementPanelLabel() {
|
||||
return pht('Documentation');
|
||||
}
|
||||
|
||||
public function getManagementPanelOrder() {
|
||||
return 3000;
|
||||
}
|
||||
|
||||
public function getManagementPanelIcon() {
|
||||
return 'fa-book';
|
||||
}
|
||||
|
||||
public function buildManagementPanelContent() {
|
||||
return null;
|
||||
}
|
||||
|
||||
public function buildManagementPanelCurtain() {
|
||||
return null;
|
||||
}
|
||||
|
||||
public function getPanelNavigationURI() {
|
||||
return PhabricatorEnv::getDoclink(
|
||||
'Diffusion User Guide: Managing Repositories');
|
||||
}
|
||||
|
||||
}
|
|
@ -21,8 +21,4 @@ final class DiffusionRepositoryHistoryManagementPanel
|
|||
return $this->newTimeline();
|
||||
}
|
||||
|
||||
public function buildManagementPanelCurtain() {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -41,7 +41,6 @@ abstract class DiffusionRepositoryManagementPanel
|
|||
abstract public function getManagementPanelLabel();
|
||||
abstract public function getManagementPanelOrder();
|
||||
abstract public function buildManagementPanelContent();
|
||||
abstract public function buildManagementPanelCurtain();
|
||||
|
||||
public function getManagementPanelIcon() {
|
||||
return 'fa-pencil';
|
||||
|
@ -56,22 +55,6 @@ abstract class DiffusionRepositoryManagementPanel
|
|||
return true;
|
||||
}
|
||||
|
||||
public function getNewActionList() {
|
||||
$viewer = $this->getViewer();
|
||||
$action_id = celerity_generate_unique_node_id();
|
||||
|
||||
return id(new PhabricatorActionListView())
|
||||
->setViewer($viewer)
|
||||
->setID($action_id);
|
||||
}
|
||||
|
||||
public function getNewCurtainView(PhabricatorActionListView $action_list) {
|
||||
$viewer = $this->getViewer();
|
||||
return id(new PHUICurtainView())
|
||||
->setViewer($viewer)
|
||||
->setActionList($action_list);
|
||||
}
|
||||
|
||||
public static function getAllPanels() {
|
||||
return id(new PhutilClassMapQuery())
|
||||
->setAncestorClass(__CLASS__)
|
||||
|
@ -80,11 +63,20 @@ abstract class DiffusionRepositoryManagementPanel
|
|||
->execute();
|
||||
}
|
||||
|
||||
final protected function newBox($header_text, $body) {
|
||||
return id(new PHUIObjectBoxView())
|
||||
->setHeaderText($header_text)
|
||||
->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
|
||||
final protected function newBox($header_text, $body, $button = array()) {
|
||||
$header = id(new PHUIHeaderView())
|
||||
->setHeader($header_text);
|
||||
|
||||
foreach ($button as $link) {
|
||||
$header->addActionLink($link);
|
||||
}
|
||||
|
||||
$view = id(new PHUIObjectBoxView())
|
||||
->setHeader($header)
|
||||
->setBackground(PHUIObjectBoxView::WHITE_CONFIG)
|
||||
->appendChild($body);
|
||||
|
||||
return $view;
|
||||
}
|
||||
|
||||
final protected function newTimeline() {
|
||||
|
|
|
@ -14,36 +14,8 @@ final class DiffusionRepositoryPoliciesManagementPanel
|
|||
}
|
||||
|
||||
public function getManagementPanelIcon() {
|
||||
$viewer = $this->getViewer();
|
||||
$repository = $this->getRepository();
|
||||
|
||||
$can_view = PhabricatorPolicyCapability::CAN_VIEW;
|
||||
$can_edit = PhabricatorPolicyCapability::CAN_EDIT;
|
||||
$can_push = DiffusionPushCapability::CAPABILITY;
|
||||
|
||||
$actual_values = array(
|
||||
'spacePHID' => $repository->getSpacePHID(),
|
||||
'view' => $repository->getPolicy($can_view),
|
||||
'edit' => $repository->getPolicy($can_edit),
|
||||
'push' => $repository->getPolicy($can_push),
|
||||
);
|
||||
|
||||
$default = PhabricatorRepository::initializeNewRepository(
|
||||
$viewer);
|
||||
|
||||
$default_values = array(
|
||||
'spacePHID' => $default->getSpacePHID(),
|
||||
'view' => $default->getPolicy($can_view),
|
||||
'edit' => $default->getPolicy($can_edit),
|
||||
'push' => $default->getPolicy($can_push),
|
||||
);
|
||||
|
||||
if ($actual_values === $default_values) {
|
||||
return 'fa-lock grey';
|
||||
} else {
|
||||
return 'fa-lock';
|
||||
}
|
||||
}
|
||||
|
||||
protected function getEditEngineFieldKeys() {
|
||||
return array(
|
||||
|
@ -54,29 +26,6 @@ final class DiffusionRepositoryPoliciesManagementPanel
|
|||
);
|
||||
}
|
||||
|
||||
public function buildManagementPanelCurtain() {
|
||||
$repository = $this->getRepository();
|
||||
$viewer = $this->getViewer();
|
||||
$action_list = $this->getNewActionList();
|
||||
|
||||
$can_edit = PhabricatorPolicyFilter::hasCapability(
|
||||
$viewer,
|
||||
$repository,
|
||||
PhabricatorPolicyCapability::CAN_EDIT);
|
||||
|
||||
$edit_uri = $this->getEditPageURI();
|
||||
|
||||
$action_list->addAction(
|
||||
id(new PhabricatorActionView())
|
||||
->setIcon('fa-pencil')
|
||||
->setName(pht('Edit Policies'))
|
||||
->setHref($edit_uri)
|
||||
->setDisabled(!$can_edit)
|
||||
->setWorkflow(!$can_edit));
|
||||
|
||||
return $this->getNewCurtainView($action_list);
|
||||
}
|
||||
|
||||
public function buildManagementPanelContent() {
|
||||
$repository = $this->getRepository();
|
||||
$viewer = $this->getViewer();
|
||||
|
@ -109,7 +58,22 @@ final class DiffusionRepositoryPoliciesManagementPanel
|
|||
: phutil_tag('em', array(), pht('Not a Hosted Repository'));
|
||||
$view->addProperty(pht('Pushable By'), $pushable);
|
||||
|
||||
return $this->newBox(pht('Policies'), $view);
|
||||
$can_edit = PhabricatorPolicyFilter::hasCapability(
|
||||
$viewer,
|
||||
$repository,
|
||||
PhabricatorPolicyCapability::CAN_EDIT);
|
||||
|
||||
$edit_uri = $this->getEditPageURI();
|
||||
|
||||
$button = id(new PHUIButtonView())
|
||||
->setTag('a')
|
||||
->setIcon('fa-pencil')
|
||||
->setText(pht('Edit'))
|
||||
->setHref($edit_uri)
|
||||
->setDisabled(!$can_edit)
|
||||
->setWorkflow(!$can_edit);
|
||||
|
||||
return $this->newBox(pht('Policies'), $view, array($button));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -20,15 +20,7 @@ final class DiffusionRepositoryStagingManagementPanel
|
|||
|
||||
|
||||
public function getManagementPanelIcon() {
|
||||
$repository = $this->getRepository();
|
||||
|
||||
$staging_uri = $repository->getStagingURI();
|
||||
|
||||
if ($staging_uri) {
|
||||
return 'fa-upload';
|
||||
} else {
|
||||
return 'fa-upload grey';
|
||||
}
|
||||
}
|
||||
|
||||
protected function getEditEngineFieldKeys() {
|
||||
|
@ -37,29 +29,6 @@ final class DiffusionRepositoryStagingManagementPanel
|
|||
);
|
||||
}
|
||||
|
||||
public function buildManagementPanelCurtain() {
|
||||
$repository = $this->getRepository();
|
||||
$viewer = $this->getViewer();
|
||||
$action_list = $this->getNewActionList();
|
||||
|
||||
$can_edit = PhabricatorPolicyFilter::hasCapability(
|
||||
$viewer,
|
||||
$repository,
|
||||
PhabricatorPolicyCapability::CAN_EDIT);
|
||||
|
||||
$staging_uri = $this->getEditPageURI();
|
||||
|
||||
$action_list->addAction(
|
||||
id(new PhabricatorActionView())
|
||||
->setIcon('fa-pencil')
|
||||
->setName(pht('Edit Staging'))
|
||||
->setHref($staging_uri)
|
||||
->setDisabled(!$can_edit)
|
||||
->setWorkflow(!$can_edit));
|
||||
|
||||
return $this->getNewCurtainView($action_list);
|
||||
}
|
||||
|
||||
public function buildManagementPanelContent() {
|
||||
$repository = $this->getRepository();
|
||||
$viewer = $this->getViewer();
|
||||
|
@ -74,7 +43,22 @@ final class DiffusionRepositoryStagingManagementPanel
|
|||
|
||||
$view->addProperty(pht('Staging Area URI'), $staging_uri);
|
||||
|
||||
return $this->newBox(pht('Staging Area'), $view);
|
||||
$can_edit = PhabricatorPolicyFilter::hasCapability(
|
||||
$viewer,
|
||||
$repository,
|
||||
PhabricatorPolicyCapability::CAN_EDIT);
|
||||
|
||||
$staging_uri = $this->getEditPageURI();
|
||||
|
||||
$button = id(new PHUIButtonView())
|
||||
->setTag('a')
|
||||
->setIcon('fa-pencil')
|
||||
->setText(pht('Edit'))
|
||||
->setHref($staging_uri)
|
||||
->setDisabled(!$can_edit)
|
||||
->setWorkflow(!$can_edit);
|
||||
|
||||
return $this->newBox(pht('Staging Area'), $view, array($button));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,507 +0,0 @@
|
|||
<?php
|
||||
|
||||
final class DiffusionRepositoryStatusManagementPanel
|
||||
extends DiffusionRepositoryManagementPanel {
|
||||
|
||||
const PANELKEY = 'status';
|
||||
|
||||
public function getManagementPanelLabel() {
|
||||
return pht('Status');
|
||||
}
|
||||
|
||||
public function getManagementPanelOrder() {
|
||||
return 200;
|
||||
}
|
||||
|
||||
public function getManagementPanelIcon() {
|
||||
$repository = $this->getRepository();
|
||||
|
||||
// TODO: We could try to show a warning icon in more cases, but just
|
||||
// raise in the most serious cases for now.
|
||||
$messages = $this->loadStatusMessages($repository);
|
||||
|
||||
$raw_error = $this->buildRepositoryRawError($repository, $messages);
|
||||
if ($raw_error) {
|
||||
return 'fa-exclamation-triangle red';
|
||||
}
|
||||
|
||||
return 'fa-check grey';
|
||||
}
|
||||
|
||||
public function buildManagementPanelCurtain() {
|
||||
$repository = $this->getRepository();
|
||||
$viewer = $this->getViewer();
|
||||
$action_list = $this->getNewActionList();
|
||||
|
||||
$can_edit = PhabricatorPolicyFilter::hasCapability(
|
||||
$viewer,
|
||||
$repository,
|
||||
PhabricatorPolicyCapability::CAN_EDIT);
|
||||
|
||||
$update_uri = $repository->getPathURI('edit/update/');
|
||||
|
||||
$action_list->addAction(
|
||||
id(new PhabricatorActionView())
|
||||
->setIcon('fa-refresh')
|
||||
->setName(pht('Update Now'))
|
||||
->setWorkflow(true)
|
||||
->setDisabled(!$can_edit)
|
||||
->setHref($update_uri));
|
||||
|
||||
return $this->getNewCurtainView($action_list);
|
||||
}
|
||||
|
||||
public function buildManagementPanelContent() {
|
||||
$repository = $this->getRepository();
|
||||
$viewer = $this->getViewer();
|
||||
|
||||
$view = id(new PHUIPropertyListView())
|
||||
->setViewer($viewer);
|
||||
|
||||
$view->addProperty(
|
||||
pht('Update Frequency'),
|
||||
$this->buildRepositoryUpdateInterval($repository));
|
||||
|
||||
$messages = $this->loadStatusMessages($repository);
|
||||
|
||||
$status = $this->buildRepositoryStatus($repository, $messages);
|
||||
$raw_error = $this->buildRepositoryRawError($repository, $messages);
|
||||
|
||||
$view->addProperty(pht('Status'), $status);
|
||||
if ($raw_error) {
|
||||
$view->addSectionHeader(pht('Raw Error'));
|
||||
$view->addTextContent($raw_error);
|
||||
}
|
||||
|
||||
return $this->newBox(pht('Status'), $view);
|
||||
}
|
||||
|
||||
private function buildRepositoryUpdateInterval(
|
||||
PhabricatorRepository $repository) {
|
||||
|
||||
$smart_wait = $repository->loadUpdateInterval();
|
||||
|
||||
$doc_href = PhabricatorEnv::getDoclink(
|
||||
'Diffusion User Guide: Repository Updates');
|
||||
|
||||
return array(
|
||||
phutil_format_relative_time_detailed($smart_wait),
|
||||
" \xC2\xB7 ",
|
||||
phutil_tag(
|
||||
'a',
|
||||
array(
|
||||
'href' => $doc_href,
|
||||
'target' => '_blank',
|
||||
),
|
||||
pht('Learn More')),
|
||||
);
|
||||
}
|
||||
|
||||
private function buildRepositoryStatus(
|
||||
PhabricatorRepository $repository,
|
||||
array $messages) {
|
||||
|
||||
$viewer = $this->getViewer();
|
||||
$is_cluster = $repository->getAlmanacServicePHID();
|
||||
|
||||
$view = new PHUIStatusListView();
|
||||
|
||||
if ($repository->isTracked()) {
|
||||
$view->addItem(
|
||||
id(new PHUIStatusItemView())
|
||||
->setIcon(PHUIStatusItemView::ICON_ACCEPT, 'green')
|
||||
->setTarget(pht('Repository Active')));
|
||||
} else {
|
||||
$view->addItem(
|
||||
id(new PHUIStatusItemView())
|
||||
->setIcon(PHUIStatusItemView::ICON_WARNING, 'bluegrey')
|
||||
->setTarget(pht('Repository Inactive'))
|
||||
->setNote(
|
||||
pht('Activate this repository to begin or resume import.')));
|
||||
return $view;
|
||||
}
|
||||
|
||||
$binaries = array();
|
||||
$svnlook_check = false;
|
||||
switch ($repository->getVersionControlSystem()) {
|
||||
case PhabricatorRepositoryType::REPOSITORY_TYPE_GIT:
|
||||
$binaries[] = 'git';
|
||||
break;
|
||||
case PhabricatorRepositoryType::REPOSITORY_TYPE_SVN:
|
||||
$binaries[] = 'svn';
|
||||
break;
|
||||
case PhabricatorRepositoryType::REPOSITORY_TYPE_MERCURIAL:
|
||||
$binaries[] = 'hg';
|
||||
break;
|
||||
}
|
||||
|
||||
if ($repository->isHosted()) {
|
||||
$proto_https = PhabricatorRepositoryURI::BUILTIN_PROTOCOL_HTTPS;
|
||||
$proto_http = PhabricatorRepositoryURI::BUILTIN_PROTOCOL_HTTP;
|
||||
$can_http = $repository->canServeProtocol($proto_http, false) ||
|
||||
$repository->canServeProtocol($proto_https, false);
|
||||
|
||||
if ($can_http) {
|
||||
switch ($repository->getVersionControlSystem()) {
|
||||
case PhabricatorRepositoryType::REPOSITORY_TYPE_GIT:
|
||||
$binaries[] = 'git-http-backend';
|
||||
break;
|
||||
case PhabricatorRepositoryType::REPOSITORY_TYPE_SVN:
|
||||
$binaries[] = 'svnserve';
|
||||
$binaries[] = 'svnadmin';
|
||||
$binaries[] = 'svnlook';
|
||||
$svnlook_check = true;
|
||||
break;
|
||||
case PhabricatorRepositoryType::REPOSITORY_TYPE_MERCURIAL:
|
||||
$binaries[] = 'hg';
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$proto_ssh = PhabricatorRepositoryURI::BUILTIN_PROTOCOL_SSH;
|
||||
$can_ssh = $repository->canServeProtocol($proto_ssh, false);
|
||||
|
||||
if ($can_ssh) {
|
||||
switch ($repository->getVersionControlSystem()) {
|
||||
case PhabricatorRepositoryType::REPOSITORY_TYPE_GIT:
|
||||
$binaries[] = 'git-receive-pack';
|
||||
$binaries[] = 'git-upload-pack';
|
||||
break;
|
||||
case PhabricatorRepositoryType::REPOSITORY_TYPE_SVN:
|
||||
$binaries[] = 'svnserve';
|
||||
$binaries[] = 'svnadmin';
|
||||
$binaries[] = 'svnlook';
|
||||
$svnlook_check = true;
|
||||
break;
|
||||
case PhabricatorRepositoryType::REPOSITORY_TYPE_MERCURIAL:
|
||||
$binaries[] = 'hg';
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$binaries = array_unique($binaries);
|
||||
if (!$is_cluster) {
|
||||
// We're only checking for binaries if we aren't running with a cluster
|
||||
// configuration. In theory, we could check for binaries on the
|
||||
// repository host machine, but we'd need to make this more complicated
|
||||
// to do that.
|
||||
|
||||
foreach ($binaries as $binary) {
|
||||
$where = Filesystem::resolveBinary($binary);
|
||||
if (!$where) {
|
||||
$view->addItem(
|
||||
id(new PHUIStatusItemView())
|
||||
->setIcon(PHUIStatusItemView::ICON_WARNING, 'red')
|
||||
->setTarget(
|
||||
pht('Missing Binary %s', phutil_tag('tt', array(), $binary)))
|
||||
->setNote(pht(
|
||||
"Unable to find this binary in the webserver's PATH. You may ".
|
||||
"need to configure %s.",
|
||||
$this->getEnvConfigLink())));
|
||||
} else {
|
||||
$view->addItem(
|
||||
id(new PHUIStatusItemView())
|
||||
->setIcon(PHUIStatusItemView::ICON_ACCEPT, 'green')
|
||||
->setTarget(
|
||||
pht('Found Binary %s', phutil_tag('tt', array(), $binary)))
|
||||
->setNote(phutil_tag('tt', array(), $where)));
|
||||
}
|
||||
}
|
||||
|
||||
// This gets checked generically above. However, for svn commit hooks, we
|
||||
// need this to be in environment.append-paths because subversion strips
|
||||
// PATH.
|
||||
if ($svnlook_check) {
|
||||
$where = Filesystem::resolveBinary('svnlook');
|
||||
if ($where) {
|
||||
$path = substr($where, 0, strlen($where) - strlen('svnlook'));
|
||||
$dirs = PhabricatorEnv::getEnvConfig('environment.append-paths');
|
||||
$in_path = false;
|
||||
foreach ($dirs as $dir) {
|
||||
if (Filesystem::isDescendant($path, $dir)) {
|
||||
$in_path = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!$in_path) {
|
||||
$view->addItem(
|
||||
id(new PHUIStatusItemView())
|
||||
->setIcon(PHUIStatusItemView::ICON_WARNING, 'red')
|
||||
->setTarget(
|
||||
pht('Missing Binary %s', phutil_tag('tt', array(), $binary)))
|
||||
->setNote(pht(
|
||||
'Unable to find this binary in `%s`. '.
|
||||
'You need to configure %s and include %s.',
|
||||
'environment.append-paths',
|
||||
$this->getEnvConfigLink(),
|
||||
$path)));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$doc_href = PhabricatorEnv::getDoclink('Managing Daemons with phd');
|
||||
|
||||
$daemon_instructions = pht(
|
||||
'Use %s to start daemons. See %s.',
|
||||
phutil_tag('tt', array(), 'bin/phd start'),
|
||||
phutil_tag(
|
||||
'a',
|
||||
array(
|
||||
'href' => $doc_href,
|
||||
),
|
||||
pht('Managing Daemons with phd')));
|
||||
|
||||
|
||||
$pull_daemon = id(new PhabricatorDaemonLogQuery())
|
||||
->setViewer(PhabricatorUser::getOmnipotentUser())
|
||||
->withStatus(PhabricatorDaemonLogQuery::STATUS_ALIVE)
|
||||
->withDaemonClasses(array('PhabricatorRepositoryPullLocalDaemon'))
|
||||
->setLimit(1)
|
||||
->execute();
|
||||
|
||||
if ($pull_daemon) {
|
||||
|
||||
// TODO: In a cluster environment, we need a daemon on this repository's
|
||||
// host, specifically, and we aren't checking for that right now. This
|
||||
// is a reasonable proxy for things being more-or-less correctly set up,
|
||||
// though.
|
||||
|
||||
$view->addItem(
|
||||
id(new PHUIStatusItemView())
|
||||
->setIcon(PHUIStatusItemView::ICON_ACCEPT, 'green')
|
||||
->setTarget(pht('Pull Daemon Running')));
|
||||
} else {
|
||||
$view->addItem(
|
||||
id(new PHUIStatusItemView())
|
||||
->setIcon(PHUIStatusItemView::ICON_WARNING, 'red')
|
||||
->setTarget(pht('Pull Daemon Not Running'))
|
||||
->setNote($daemon_instructions));
|
||||
}
|
||||
|
||||
|
||||
$task_daemon = id(new PhabricatorDaemonLogQuery())
|
||||
->setViewer(PhabricatorUser::getOmnipotentUser())
|
||||
->withStatus(PhabricatorDaemonLogQuery::STATUS_ALIVE)
|
||||
->withDaemonClasses(array('PhabricatorTaskmasterDaemon'))
|
||||
->setLimit(1)
|
||||
->execute();
|
||||
if ($task_daemon) {
|
||||
$view->addItem(
|
||||
id(new PHUIStatusItemView())
|
||||
->setIcon(PHUIStatusItemView::ICON_ACCEPT, 'green')
|
||||
->setTarget(pht('Task Daemon Running')));
|
||||
} else {
|
||||
$view->addItem(
|
||||
id(new PHUIStatusItemView())
|
||||
->setIcon(PHUIStatusItemView::ICON_WARNING, 'red')
|
||||
->setTarget(pht('Task Daemon Not Running'))
|
||||
->setNote($daemon_instructions));
|
||||
}
|
||||
|
||||
|
||||
if ($is_cluster) {
|
||||
// Just omit this status check for now in cluster environments. We
|
||||
// could make a service call and pull it from the repository host
|
||||
// eventually.
|
||||
} else if ($repository->usesLocalWorkingCopy()) {
|
||||
$local_parent = dirname($repository->getLocalPath());
|
||||
if (Filesystem::pathExists($local_parent)) {
|
||||
$view->addItem(
|
||||
id(new PHUIStatusItemView())
|
||||
->setIcon(PHUIStatusItemView::ICON_ACCEPT, 'green')
|
||||
->setTarget(pht('Storage Directory OK'))
|
||||
->setNote(phutil_tag('tt', array(), $local_parent)));
|
||||
} else {
|
||||
$view->addItem(
|
||||
id(new PHUIStatusItemView())
|
||||
->setIcon(PHUIStatusItemView::ICON_WARNING, 'red')
|
||||
->setTarget(pht('No Storage Directory'))
|
||||
->setNote(
|
||||
pht(
|
||||
'Storage directory %s does not exist, or is not readable by '.
|
||||
'the webserver. Create this directory or make it readable.',
|
||||
phutil_tag('tt', array(), $local_parent))));
|
||||
return $view;
|
||||
}
|
||||
|
||||
$local_path = $repository->getLocalPath();
|
||||
$message = idx($messages, PhabricatorRepositoryStatusMessage::TYPE_INIT);
|
||||
if ($message) {
|
||||
switch ($message->getStatusCode()) {
|
||||
case PhabricatorRepositoryStatusMessage::CODE_ERROR:
|
||||
$view->addItem(
|
||||
id(new PHUIStatusItemView())
|
||||
->setIcon(PHUIStatusItemView::ICON_WARNING, 'red')
|
||||
->setTarget(pht('Initialization Error'))
|
||||
->setNote($message->getParameter('message')));
|
||||
return $view;
|
||||
case PhabricatorRepositoryStatusMessage::CODE_OKAY:
|
||||
if (Filesystem::pathExists($local_path)) {
|
||||
$view->addItem(
|
||||
id(new PHUIStatusItemView())
|
||||
->setIcon(PHUIStatusItemView::ICON_ACCEPT, 'green')
|
||||
->setTarget(pht('Working Copy OK'))
|
||||
->setNote(phutil_tag('tt', array(), $local_path)));
|
||||
} else {
|
||||
$view->addItem(
|
||||
id(new PHUIStatusItemView())
|
||||
->setIcon(PHUIStatusItemView::ICON_WARNING, 'red')
|
||||
->setTarget(pht('Working Copy Error'))
|
||||
->setNote(
|
||||
pht(
|
||||
'Working copy %s has been deleted, or is not '.
|
||||
'readable by the webserver. Make this directory '.
|
||||
'readable. If it has been deleted, the daemons should '.
|
||||
'restore it automatically.',
|
||||
phutil_tag('tt', array(), $local_path))));
|
||||
return $view;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
$view->addItem(
|
||||
id(new PHUIStatusItemView())
|
||||
->setIcon(PHUIStatusItemView::ICON_CLOCK, 'green')
|
||||
->setTarget(pht('Initializing Working Copy'))
|
||||
->setNote(pht('Daemons are initializing the working copy.')));
|
||||
return $view;
|
||||
}
|
||||
} else {
|
||||
$view->addItem(
|
||||
id(new PHUIStatusItemView())
|
||||
->setIcon(PHUIStatusItemView::ICON_CLOCK, 'orange')
|
||||
->setTarget(pht('No Working Copy Yet'))
|
||||
->setNote(
|
||||
pht('Waiting for daemons to build a working copy.')));
|
||||
return $view;
|
||||
}
|
||||
}
|
||||
|
||||
$message = idx($messages, PhabricatorRepositoryStatusMessage::TYPE_FETCH);
|
||||
if ($message) {
|
||||
switch ($message->getStatusCode()) {
|
||||
case PhabricatorRepositoryStatusMessage::CODE_ERROR:
|
||||
$message = $message->getParameter('message');
|
||||
|
||||
$suggestion = null;
|
||||
if (preg_match('/Permission denied \(publickey\)./', $message)) {
|
||||
$suggestion = pht(
|
||||
'Public Key Error: This error usually indicates that the '.
|
||||
'keypair you have configured does not have permission to '.
|
||||
'access the repository.');
|
||||
}
|
||||
|
||||
$view->addItem(
|
||||
id(new PHUIStatusItemView())
|
||||
->setIcon(PHUIStatusItemView::ICON_WARNING, 'red')
|
||||
->setTarget(pht('Update Error'))
|
||||
->setNote($suggestion));
|
||||
return $view;
|
||||
case PhabricatorRepositoryStatusMessage::CODE_OKAY:
|
||||
$ago = (PhabricatorTime::getNow() - $message->getEpoch());
|
||||
$view->addItem(
|
||||
id(new PHUIStatusItemView())
|
||||
->setIcon(PHUIStatusItemView::ICON_ACCEPT, 'green')
|
||||
->setTarget(pht('Updates OK'))
|
||||
->setNote(
|
||||
pht(
|
||||
'Last updated %s (%s ago).',
|
||||
phabricator_datetime($message->getEpoch(), $viewer),
|
||||
phutil_format_relative_time_detailed($ago))));
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
$view->addItem(
|
||||
id(new PHUIStatusItemView())
|
||||
->setIcon(PHUIStatusItemView::ICON_CLOCK, 'orange')
|
||||
->setTarget(pht('Waiting For Update'))
|
||||
->setNote(
|
||||
pht('Waiting for daemons to read updates.')));
|
||||
}
|
||||
|
||||
if ($repository->isImporting()) {
|
||||
$ratio = $repository->loadImportProgress();
|
||||
$percentage = sprintf('%.2f%%', 100 * $ratio);
|
||||
|
||||
$view->addItem(
|
||||
id(new PHUIStatusItemView())
|
||||
->setIcon(PHUIStatusItemView::ICON_CLOCK, 'green')
|
||||
->setTarget(pht('Importing'))
|
||||
->setNote(
|
||||
pht('%s Complete', $percentage)));
|
||||
} else {
|
||||
$view->addItem(
|
||||
id(new PHUIStatusItemView())
|
||||
->setIcon(PHUIStatusItemView::ICON_ACCEPT, 'green')
|
||||
->setTarget(pht('Fully Imported')));
|
||||
}
|
||||
|
||||
if (idx($messages, PhabricatorRepositoryStatusMessage::TYPE_NEEDS_UPDATE)) {
|
||||
$view->addItem(
|
||||
id(new PHUIStatusItemView())
|
||||
->setIcon(PHUIStatusItemView::ICON_UP, 'indigo')
|
||||
->setTarget(pht('Prioritized'))
|
||||
->setNote(pht('This repository will be updated soon!')));
|
||||
}
|
||||
|
||||
return $view;
|
||||
}
|
||||
|
||||
private function buildRepositoryRawError(
|
||||
PhabricatorRepository $repository,
|
||||
array $messages) {
|
||||
$viewer = $this->getViewer();
|
||||
|
||||
$can_edit = PhabricatorPolicyFilter::hasCapability(
|
||||
$viewer,
|
||||
$repository,
|
||||
PhabricatorPolicyCapability::CAN_EDIT);
|
||||
|
||||
$raw_error = null;
|
||||
|
||||
$message = idx($messages, PhabricatorRepositoryStatusMessage::TYPE_FETCH);
|
||||
if ($message) {
|
||||
switch ($message->getStatusCode()) {
|
||||
case PhabricatorRepositoryStatusMessage::CODE_ERROR:
|
||||
$raw_error = $message->getParameter('message');
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ($raw_error !== null) {
|
||||
if (!$can_edit) {
|
||||
$raw_message = pht(
|
||||
'You must be able to edit a repository to see raw error messages '.
|
||||
'because they sometimes disclose sensitive information.');
|
||||
$raw_message = phutil_tag('em', array(), $raw_message);
|
||||
} else {
|
||||
$raw_message = phutil_escape_html_newlines($raw_error);
|
||||
}
|
||||
} else {
|
||||
$raw_message = null;
|
||||
}
|
||||
|
||||
return $raw_message;
|
||||
}
|
||||
|
||||
private function loadStatusMessages(PhabricatorRepository $repository) {
|
||||
$messages = id(new PhabricatorRepositoryStatusMessage())
|
||||
->loadAllWhere('repositoryID = %d', $repository->getID());
|
||||
$messages = mpull($messages, null, 'getStatusType');
|
||||
|
||||
return $messages;
|
||||
}
|
||||
|
||||
private function getEnvConfigLink() {
|
||||
$config_href = '/config/edit/environment.append-paths/';
|
||||
return phutil_tag(
|
||||
'a',
|
||||
array(
|
||||
'href' => $config_href,
|
||||
),
|
||||
'environment.append-paths');
|
||||
}
|
||||
|
||||
}
|
|
@ -14,31 +14,7 @@ final class DiffusionRepositoryStorageManagementPanel
|
|||
}
|
||||
|
||||
public function getManagementPanelIcon() {
|
||||
$repository = $this->getRepository();
|
||||
|
||||
if ($repository->getAlmanacServicePHID()) {
|
||||
return 'fa-sitemap';
|
||||
} else if ($repository->isHosted()) {
|
||||
return 'fa-folder';
|
||||
} else {
|
||||
return 'fa-download';
|
||||
}
|
||||
}
|
||||
|
||||
public function buildManagementPanelCurtain() {
|
||||
$repository = $this->getRepository();
|
||||
$viewer = $this->getViewer();
|
||||
$action_list = $this->getNewActionList();
|
||||
|
||||
$doc_href = PhabricatorEnv::getDoclink('Cluster: Repositories');
|
||||
|
||||
$action_list->addAction(
|
||||
id(new PhabricatorActionView())
|
||||
->setIcon('fa-book')
|
||||
->setHref($doc_href)
|
||||
->setName(pht('Cluster Documentation')));
|
||||
|
||||
return $this->getNewCurtainView($action_list);
|
||||
return 'fa-database';
|
||||
}
|
||||
|
||||
public function buildManagementPanelContent() {
|
||||
|
@ -71,9 +47,15 @@ final class DiffusionRepositoryStorageManagementPanel
|
|||
$view->addProperty(pht('Storage Path'), $storage_path);
|
||||
$view->addProperty(pht('Storage Cluster'), $storage_service);
|
||||
|
||||
$box = $this->newBox(pht('Storage'), null);
|
||||
$box->addPropertyList($view);
|
||||
return $box;
|
||||
$doc_href = PhabricatorEnv::getDoclink('Cluster: Repositories');
|
||||
|
||||
$button = id(new PHUIButtonView())
|
||||
->setTag('a')
|
||||
->setIcon('fa-book')
|
||||
->setHref($doc_href)
|
||||
->setText(pht('Help'));
|
||||
|
||||
return $this->newBox(pht('Storage'), $view, array($button));
|
||||
}
|
||||
|
||||
private function buildClusterStatusPanel() {
|
||||
|
@ -243,9 +225,7 @@ final class DiffusionRepositoryStorageManagementPanel
|
|||
'date',
|
||||
));
|
||||
|
||||
$box = $this->newBox(pht('Cluster Status'), null);
|
||||
$box->setTable($table);
|
||||
return $box;
|
||||
return $this->newBox(pht('Cluster Status'), $table);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -19,15 +19,7 @@ final class DiffusionRepositorySubversionManagementPanel
|
|||
}
|
||||
|
||||
public function getManagementPanelIcon() {
|
||||
$repository = $this->getRepository();
|
||||
|
||||
$has_any = (bool)$repository->getDetail('svn-subpath');
|
||||
|
||||
if ($has_any) {
|
||||
return 'fa-database';
|
||||
} else {
|
||||
return 'fa-database grey';
|
||||
}
|
||||
return 'fa-folder';
|
||||
}
|
||||
|
||||
protected function getEditEngineFieldKeys() {
|
||||
|
@ -36,29 +28,6 @@ final class DiffusionRepositorySubversionManagementPanel
|
|||
);
|
||||
}
|
||||
|
||||
public function buildManagementPanelCurtain() {
|
||||
$repository = $this->getRepository();
|
||||
$viewer = $this->getViewer();
|
||||
$action_list = $this->getNewActionList();
|
||||
|
||||
$can_edit = PhabricatorPolicyFilter::hasCapability(
|
||||
$viewer,
|
||||
$repository,
|
||||
PhabricatorPolicyCapability::CAN_EDIT);
|
||||
|
||||
$subversion_uri = $this->getEditPageURI();
|
||||
|
||||
$action_list->addAction(
|
||||
id(new PhabricatorActionView())
|
||||
->setIcon('fa-pencil')
|
||||
->setName(pht('Edit Properties'))
|
||||
->setHref($subversion_uri)
|
||||
->setDisabled(!$can_edit)
|
||||
->setWorkflow(!$can_edit));
|
||||
|
||||
return $this->getNewCurtainView($action_list);
|
||||
}
|
||||
|
||||
public function buildManagementPanelContent() {
|
||||
$repository = $this->getRepository();
|
||||
$viewer = $this->getViewer();
|
||||
|
@ -71,8 +40,22 @@ final class DiffusionRepositorySubversionManagementPanel
|
|||
phutil_tag('em', array(), pht('Import Entire Repository')));
|
||||
$view->addProperty(pht('Import Only'), $default_branch);
|
||||
|
||||
$can_edit = PhabricatorPolicyFilter::hasCapability(
|
||||
$viewer,
|
||||
$repository,
|
||||
PhabricatorPolicyCapability::CAN_EDIT);
|
||||
|
||||
return $this->newBox(pht('Subversion'), $view);
|
||||
$subversion_uri = $this->getEditPageURI();
|
||||
|
||||
$button = id(new PHUIButtonView())
|
||||
->setTag('a')
|
||||
->setIcon('fa-pencil')
|
||||
->setText(pht('Edit'))
|
||||
->setHref($subversion_uri)
|
||||
->setDisabled(!$can_edit)
|
||||
->setWorkflow(!$can_edit);
|
||||
|
||||
return $this->newBox(pht('Subversion'), $view, array($button));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -14,17 +14,7 @@ final class DiffusionRepositorySymbolsManagementPanel
|
|||
}
|
||||
|
||||
public function getManagementPanelIcon() {
|
||||
$repository = $this->getRepository();
|
||||
|
||||
$has_any =
|
||||
$repository->getSymbolLanguages() ||
|
||||
$repository->getSymbolSources();
|
||||
|
||||
if ($has_any) {
|
||||
return 'fa-link';
|
||||
} else {
|
||||
return 'fa-link grey';
|
||||
}
|
||||
return 'fa-bullseye';
|
||||
}
|
||||
|
||||
protected function getEditEngineFieldKeys() {
|
||||
|
@ -34,29 +24,6 @@ final class DiffusionRepositorySymbolsManagementPanel
|
|||
);
|
||||
}
|
||||
|
||||
public function buildManagementPanelCurtain() {
|
||||
$repository = $this->getRepository();
|
||||
$viewer = $this->getViewer();
|
||||
$action_list = $this->getNewActionList();
|
||||
|
||||
$can_edit = PhabricatorPolicyFilter::hasCapability(
|
||||
$viewer,
|
||||
$repository,
|
||||
PhabricatorPolicyCapability::CAN_EDIT);
|
||||
|
||||
$symbols_uri = $this->getEditPageURI();
|
||||
|
||||
$action_list->addAction(
|
||||
id(new PhabricatorActionView())
|
||||
->setIcon('fa-pencil')
|
||||
->setName(pht('Edit Symbols'))
|
||||
->setHref($symbols_uri)
|
||||
->setDisabled(!$can_edit)
|
||||
->setWorkflow(!$can_edit));
|
||||
|
||||
return $this->getNewCurtainView($action_list);
|
||||
}
|
||||
|
||||
public function buildManagementPanelContent() {
|
||||
$repository = $this->getRepository();
|
||||
$viewer = $this->getViewer();
|
||||
|
@ -80,7 +47,22 @@ final class DiffusionRepositorySymbolsManagementPanel
|
|||
}
|
||||
$view->addProperty(pht('Uses Symbols From'), $sources);
|
||||
|
||||
return $this->newBox(pht('Symbols'), $view);
|
||||
$can_edit = PhabricatorPolicyFilter::hasCapability(
|
||||
$viewer,
|
||||
$repository,
|
||||
PhabricatorPolicyCapability::CAN_EDIT);
|
||||
|
||||
$symbols_uri = $this->getEditPageURI();
|
||||
|
||||
$button = id(new PHUIButtonView())
|
||||
->setTag('a')
|
||||
->setIcon('fa-pencil')
|
||||
->setText(pht('Edit'))
|
||||
->setHref($symbols_uri)
|
||||
->setDisabled(!$can_edit)
|
||||
->setWorkflow(!$can_edit);
|
||||
|
||||
return $this->newBox(pht('Symbols'), $view, array($button));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -10,42 +10,13 @@ final class DiffusionRepositoryURIsManagementPanel
|
|||
}
|
||||
|
||||
public function getManagementPanelIcon() {
|
||||
return 'fa-cogs';
|
||||
return 'fa-globe';
|
||||
}
|
||||
|
||||
public function getManagementPanelOrder() {
|
||||
return 400;
|
||||
}
|
||||
|
||||
public function buildManagementPanelCurtain() {
|
||||
$repository = $this->getRepository();
|
||||
$viewer = $this->getViewer();
|
||||
$action_list = $this->getNewActionList();
|
||||
|
||||
$can_edit = PhabricatorPolicyFilter::hasCapability(
|
||||
$viewer,
|
||||
$repository,
|
||||
PhabricatorPolicyCapability::CAN_EDIT);
|
||||
|
||||
$doc_href = PhabricatorEnv::getDoclink('Diffusion User Guide: URIs');
|
||||
$add_href = $repository->getPathURI('uri/edit/');
|
||||
|
||||
$action_list->addAction(
|
||||
id(new PhabricatorActionView())
|
||||
->setIcon('fa-plus')
|
||||
->setHref($add_href)
|
||||
->setDisabled(!$can_edit)
|
||||
->setName(pht('Add New URI')));
|
||||
|
||||
$action_list->addAction(
|
||||
id(new PhabricatorActionView())
|
||||
->setIcon('fa-book')
|
||||
->setHref($doc_href)
|
||||
->setName(pht('URI Documentation')));
|
||||
|
||||
return $this->getNewCurtainView($action_list);
|
||||
}
|
||||
|
||||
public function buildManagementPanelContent() {
|
||||
$repository = $this->getRepository();
|
||||
$viewer = $this->getViewer();
|
||||
|
@ -151,10 +122,30 @@ final class DiffusionRepositoryURIsManagementPanel
|
|||
->setSeverity(PHUIInfoView::SEVERITY_NOTICE)
|
||||
->setErrors($messages);
|
||||
|
||||
$box = $this->newBox(pht('Repository URIs'), null);
|
||||
$box->setTable($table);
|
||||
$can_edit = PhabricatorPolicyFilter::hasCapability(
|
||||
$viewer,
|
||||
$repository,
|
||||
PhabricatorPolicyCapability::CAN_EDIT);
|
||||
|
||||
return array($info_view, $box);
|
||||
$doc_href = PhabricatorEnv::getDoclink('Diffusion User Guide: URIs');
|
||||
$add_href = $repository->getPathURI('uri/edit/');
|
||||
|
||||
$add = id(new PHUIButtonView())
|
||||
->setTag('a')
|
||||
->setIcon('fa-plus')
|
||||
->setHref($add_href)
|
||||
->setDisabled(!$can_edit)
|
||||
->setText(pht('New URI'));
|
||||
|
||||
$help = id(new PHUIButtonView())
|
||||
->setTag('a')
|
||||
->setIcon('fa-book')
|
||||
->setHref($doc_href)
|
||||
->setText(pht('Help'));
|
||||
|
||||
$box = $this->newBox(pht('Repository URIs'), $table, array($add, $help));
|
||||
|
||||
return array($box, $info_view);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -233,7 +233,7 @@ final class DiffusionSetPasswordSettingsPanel extends PhabricatorSettingsPanel {
|
|||
|
||||
$object_box = id(new PHUIObjectBoxView())
|
||||
->setHeaderText($title)
|
||||
->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
|
||||
->setBackground(PHUIObjectBoxView::WHITE_CONFIG)
|
||||
->setForm($form)
|
||||
->setFormErrors($errors);
|
||||
|
||||
|
@ -259,7 +259,7 @@ final class DiffusionSetPasswordSettingsPanel extends PhabricatorSettingsPanel {
|
|||
|
||||
$remove_box = id(new PHUIObjectBoxView())
|
||||
->setHeaderText(pht('Remove VCS Password'))
|
||||
->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
|
||||
->setBackground(PHUIObjectBoxView::WHITE_CONFIG)
|
||||
->setForm($remove_form);
|
||||
|
||||
$saved = null;
|
||||
|
|
|
@ -74,6 +74,7 @@ final class DrydockBlueprintEditController extends DrydockBlueprintController {
|
|||
$title = pht('Create New Blueprint');
|
||||
$crumbs = $this->buildApplicationCrumbs();
|
||||
$crumbs->addTextCrumb(pht('New Blueprint'));
|
||||
$crumbs->setBorder(true);
|
||||
|
||||
$form = id(new AphrontFormView())
|
||||
->setUser($viewer)
|
||||
|
@ -86,12 +87,16 @@ final class DrydockBlueprintEditController extends DrydockBlueprintController {
|
|||
$box = id(new PHUIObjectBoxView())
|
||||
->setFormErrors($errors)
|
||||
->setHeaderText($title)
|
||||
->setBackground(PHUIObjectBoxView::WHITE_CONFIG)
|
||||
->setForm($form);
|
||||
|
||||
$view = id(new PHUITwoColumnView())
|
||||
->setFooter($box);
|
||||
|
||||
return $this->newPage()
|
||||
->setTitle($title)
|
||||
->setCrumbs($crumbs)
|
||||
->appendChild($box);
|
||||
->appendChild($view);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -26,7 +26,8 @@ final class DrydockConsoleController extends DrydockController {
|
|||
$viewer = $request->getViewer();
|
||||
|
||||
$menu = id(new PHUIObjectItemListView())
|
||||
->setUser($viewer);
|
||||
->setUser($viewer)
|
||||
->setBig(true);
|
||||
|
||||
$menu->addItem(
|
||||
id(new PHUIObjectItemView())
|
||||
|
@ -64,17 +65,15 @@ final class DrydockConsoleController extends DrydockController {
|
|||
$crumbs->addTextCrumb(pht('Console'));
|
||||
$crumbs->setBorder(true);
|
||||
|
||||
$box = id(new PHUIObjectBoxView())
|
||||
->setObjectList($menu);
|
||||
|
||||
$title = pht('Drydock Console');
|
||||
|
||||
$header = id(new PHUIHeaderView())
|
||||
->setHeader($title)
|
||||
->setHeaderIcon('fa-truck');
|
||||
$box = id(new PHUIObjectBoxView())
|
||||
->setHeaderText($title)
|
||||
->setBackground(PHUIObjectBoxView::WHITE_CONFIG)
|
||||
->setObjectList($menu);
|
||||
|
||||
$view = id(new PHUITwoColumnView())
|
||||
->setHeader($header)
|
||||
->setFixed(true)
|
||||
->setFooter($box);
|
||||
|
||||
return $this->newPage()
|
||||
|
|
|
@ -90,17 +90,12 @@ final class PhabricatorFileUploadController extends PhabricatorFileController {
|
|||
->setShowIfSupportedID($support_id);
|
||||
|
||||
$form_box = id(new PHUIObjectBoxView())
|
||||
->setHeaderText(pht('File'))
|
||||
->setHeaderText($title)
|
||||
->setFormErrors($errors)
|
||||
->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
|
||||
->setBackground(PHUIObjectBoxView::WHITE_CONFIG)
|
||||
->setForm($form);
|
||||
|
||||
$header = id(new PHUIHeaderView())
|
||||
->setHeader($title)
|
||||
->setHeaderIcon('fa-upload');
|
||||
|
||||
$view = id(new PHUITwoColumnView())
|
||||
->setHeader($header)
|
||||
->setFooter(array(
|
||||
$form_box,
|
||||
$global_upload,
|
||||
|
|
|
@ -8,8 +8,6 @@ final class FundInitiativeQuery
|
|||
private $ownerPHIDs;
|
||||
private $statuses;
|
||||
|
||||
private $needProjectPHIDs;
|
||||
|
||||
public function withIDs(array $ids) {
|
||||
$this->ids = $ids;
|
||||
return $this;
|
||||
|
@ -30,87 +28,54 @@ final class FundInitiativeQuery
|
|||
return $this;
|
||||
}
|
||||
|
||||
public function needProjectPHIDs($need) {
|
||||
$this->needProjectPHIDs = $need;
|
||||
return $this;
|
||||
public function newResultObject() {
|
||||
return new FundInitiative();
|
||||
}
|
||||
|
||||
protected function loadPage() {
|
||||
$table = new FundInitiative();
|
||||
$conn_r = $table->establishConnection('r');
|
||||
|
||||
$rows = queryfx_all(
|
||||
$conn_r,
|
||||
'SELECT * FROM %T %Q %Q %Q',
|
||||
$table->getTableName(),
|
||||
$this->buildWhereClause($conn_r),
|
||||
$this->buildOrderClause($conn_r),
|
||||
$this->buildLimitClause($conn_r));
|
||||
|
||||
return $table->loadAllFromArray($rows);
|
||||
return $this->loadStandardPage($this->newResultObject());
|
||||
}
|
||||
|
||||
protected function didFilterPage(array $initiatives) {
|
||||
|
||||
if ($this->needProjectPHIDs) {
|
||||
$edge_query = id(new PhabricatorEdgeQuery())
|
||||
->withSourcePHIDs(mpull($initiatives, 'getPHID'))
|
||||
->withEdgeTypes(
|
||||
array(
|
||||
PhabricatorProjectObjectHasProjectEdgeType::EDGECONST,
|
||||
));
|
||||
$edge_query->execute();
|
||||
|
||||
foreach ($initiatives as $initiative) {
|
||||
$phids = $edge_query->getDestinationPHIDs(
|
||||
array(
|
||||
$initiative->getPHID(),
|
||||
));
|
||||
$initiative->attachProjectPHIDs($phids);
|
||||
}
|
||||
}
|
||||
|
||||
return $initiatives;
|
||||
}
|
||||
|
||||
protected function buildWhereClause(AphrontDatabaseConnection $conn_r) {
|
||||
$where = array();
|
||||
|
||||
$where[] = $this->buildPagingClause($conn_r);
|
||||
protected function buildWhereClauseParts(AphrontDatabaseConnection $conn) {
|
||||
$where = parent::buildWhereClauseParts($conn);
|
||||
|
||||
if ($this->ids !== null) {
|
||||
$where[] = qsprintf(
|
||||
$conn_r,
|
||||
'id IN (%Ld)',
|
||||
$conn,
|
||||
'i.id IN (%Ld)',
|
||||
$this->ids);
|
||||
}
|
||||
|
||||
if ($this->phids !== null) {
|
||||
$where[] = qsprintf(
|
||||
$conn_r,
|
||||
'phid IN (%Ls)',
|
||||
$conn,
|
||||
'i.phid IN (%Ls)',
|
||||
$this->phids);
|
||||
}
|
||||
|
||||
if ($this->ownerPHIDs !== null) {
|
||||
$where[] = qsprintf(
|
||||
$conn_r,
|
||||
'ownerPHID IN (%Ls)',
|
||||
$conn,
|
||||
'i.ownerPHID IN (%Ls)',
|
||||
$this->ownerPHIDs);
|
||||
}
|
||||
|
||||
if ($this->statuses !== null) {
|
||||
$where[] = qsprintf(
|
||||
$conn_r,
|
||||
'status IN (%Ls)',
|
||||
$conn,
|
||||
'i.status IN (%Ls)',
|
||||
$this->statuses);
|
||||
}
|
||||
|
||||
return $this->formatWhereClause($where);
|
||||
return $where;
|
||||
}
|
||||
|
||||
public function getQueryApplicationClass() {
|
||||
return 'PhabricatorFundApplication';
|
||||
}
|
||||
|
||||
protected function getPrimaryTableAlias() {
|
||||
return 'i';
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -11,67 +11,37 @@ final class FundInitiativeSearchEngine
|
|||
return 'PhabricatorFundApplication';
|
||||
}
|
||||
|
||||
public function buildSavedQueryFromRequest(AphrontRequest $request) {
|
||||
$saved = new PhabricatorSavedQuery();
|
||||
|
||||
$saved->setParameter(
|
||||
'ownerPHIDs',
|
||||
$this->readUsersFromRequest($request, 'owners'));
|
||||
|
||||
$saved->setParameter(
|
||||
'statuses',
|
||||
$this->readListFromRequest($request, 'statuses'));
|
||||
|
||||
return $saved;
|
||||
public function newQuery() {
|
||||
return new FundInitiativeQuery();
|
||||
}
|
||||
|
||||
public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) {
|
||||
$query = id(new FundInitiativeQuery())
|
||||
->needProjectPHIDs(true);
|
||||
|
||||
$owner_phids = $saved->getParameter('ownerPHIDs');
|
||||
if ($owner_phids) {
|
||||
$query->withOwnerPHIDs($owner_phids);
|
||||
protected function buildCustomSearchFields() {
|
||||
return array(
|
||||
id(new PhabricatorUsersSearchField())
|
||||
->setKey('ownerPHIDs')
|
||||
->setAliases(array('owner', 'ownerPHID', 'owners'))
|
||||
->setLabel(pht('Owners')),
|
||||
id(new PhabricatorSearchCheckboxesField())
|
||||
->setKey('statuses')
|
||||
->setLabel(pht('Statuses'))
|
||||
->setOptions(FundInitiative::getStatusNameMap()),
|
||||
);
|
||||
}
|
||||
|
||||
$statuses = $saved->getParameter('statuses');
|
||||
if ($statuses) {
|
||||
$query->withStatuses($statuses);
|
||||
protected function buildQueryFromParameters(array $map) {
|
||||
$query = $this->newQuery();
|
||||
|
||||
if ($map['ownerPHIDs']) {
|
||||
$query->withOwnerPHIDs($map['ownerPHIDs']);
|
||||
}
|
||||
|
||||
if ($map['statuses']) {
|
||||
$query->withStatuses($map['statuses']);
|
||||
}
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
||||
public function buildSearchForm(
|
||||
AphrontFormView $form,
|
||||
PhabricatorSavedQuery $saved) {
|
||||
|
||||
$statuses = $saved->getParameter('statuses', array());
|
||||
$statuses = array_fuse($statuses);
|
||||
|
||||
$owner_phids = $saved->getParameter('ownerPHIDs', array());
|
||||
|
||||
$status_map = FundInitiative::getStatusNameMap();
|
||||
$status_control = id(new AphrontFormCheckboxControl())
|
||||
->setLabel(pht('Statuses'));
|
||||
foreach ($status_map as $status => $name) {
|
||||
$status_control->addCheckbox(
|
||||
'statuses[]',
|
||||
$status,
|
||||
$name,
|
||||
isset($statuses[$status]));
|
||||
}
|
||||
|
||||
$form
|
||||
->appendControl(
|
||||
id(new AphrontFormTokenizerControl())
|
||||
->setLabel(pht('Owners'))
|
||||
->setName('owners')
|
||||
->setDatasource(new PhabricatorPeopleDatasource())
|
||||
->setValue($owner_phids))
|
||||
->appendChild($status_control);
|
||||
}
|
||||
|
||||
protected function getURI($path) {
|
||||
return '/fund/'.$path;
|
||||
}
|
||||
|
@ -112,21 +82,6 @@ final class FundInitiativeSearchEngine
|
|||
return parent::buildSavedQueryFromBuiltin($query_key);
|
||||
}
|
||||
|
||||
protected function getRequiredHandlePHIDsForResultList(
|
||||
array $initiatives,
|
||||
PhabricatorSavedQuery $query) {
|
||||
|
||||
$phids = array();
|
||||
foreach ($initiatives as $initiative) {
|
||||
$phids[] = $initiative->getOwnerPHID();
|
||||
foreach ($initiative->getProjectPHIDs() as $project_phid) {
|
||||
$phids[] = $project_phid;
|
||||
}
|
||||
}
|
||||
|
||||
return $phids;
|
||||
}
|
||||
|
||||
protected function renderResultList(
|
||||
array $initiatives,
|
||||
PhabricatorSavedQuery $query,
|
||||
|
@ -135,7 +90,30 @@ final class FundInitiativeSearchEngine
|
|||
|
||||
$viewer = $this->requireViewer();
|
||||
|
||||
$list = id(new PHUIObjectItemListView());
|
||||
$load_phids = array();
|
||||
foreach ($initiatives as $initiative) {
|
||||
$load_phids[] = $initiative->getOwnerPHID();
|
||||
}
|
||||
|
||||
if ($initiatives) {
|
||||
$edge_query = id(new PhabricatorEdgeQuery())
|
||||
->withSourcePHIDs(mpull($initiatives, 'getPHID'))
|
||||
->withEdgeTypes(
|
||||
array(
|
||||
PhabricatorProjectObjectHasProjectEdgeType::EDGECONST,
|
||||
));
|
||||
|
||||
$edge_query->execute();
|
||||
|
||||
foreach ($edge_query->getDestinationPHIDs() as $phid) {
|
||||
$load_phids[] = $phid;
|
||||
}
|
||||
}
|
||||
|
||||
$handles = $viewer->loadHandles($load_phids);
|
||||
$handles = iterator_to_array($handles);
|
||||
|
||||
$list = new PHUIObjectItemListView();
|
||||
foreach ($initiatives as $initiative) {
|
||||
$owner_handle = $handles[$initiative->getOwnerPHID()];
|
||||
|
||||
|
@ -149,9 +127,12 @@ final class FundInitiativeSearchEngine
|
|||
$item->setDisabled(true);
|
||||
}
|
||||
|
||||
$project_handles = array_select_keys(
|
||||
$handles,
|
||||
$initiative->getProjectPHIDs());
|
||||
$project_phids = $edge_query->getDestinationPHIDs(
|
||||
array(
|
||||
$initiative->getPHID(),
|
||||
));
|
||||
|
||||
$project_handles = array_select_keys($handles, $project_phids);
|
||||
if ($project_handles) {
|
||||
$item->addAttribute(
|
||||
id(new PHUIHandleTagListView())
|
||||
|
@ -168,9 +149,6 @@ final class FundInitiativeSearchEngine
|
|||
$result->setNoDataString(pht('No initiatives found.'));
|
||||
|
||||
return $result;
|
||||
|
||||
|
||||
return $list;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue