Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F89361
D7465.diff
All Users
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
69 KB
Referenced Files
None
Subscribers
None
D7465.diff
View Options
diff --git a/resources/sprite/apps_blue_2x/pebkac.png b/resources/sprite/apps_blue_2x/nuance.png
rename from resources/sprite/apps_blue_2x/pebkac.png
rename to resources/sprite/apps_blue_2x/nuance.png
diff --git a/resources/sprite/apps_blue_4x/pebkac.png b/resources/sprite/apps_blue_4x/nuance.png
rename from resources/sprite/apps_blue_4x/pebkac.png
rename to resources/sprite/apps_blue_4x/nuance.png
diff --git a/resources/sprite/apps_dark_1x/pebkac.png b/resources/sprite/apps_dark_1x/nuance.png
rename from resources/sprite/apps_dark_1x/pebkac.png
rename to resources/sprite/apps_dark_1x/nuance.png
diff --git a/resources/sprite/apps_dark_2x/pebkac.png b/resources/sprite/apps_dark_2x/nuance.png
rename from resources/sprite/apps_dark_2x/pebkac.png
rename to resources/sprite/apps_dark_2x/nuance.png
diff --git a/resources/sprite/apps_dark_4x/pebkac.png b/resources/sprite/apps_dark_4x/nuance.png
rename from resources/sprite/apps_dark_4x/pebkac.png
rename to resources/sprite/apps_dark_4x/nuance.png
diff --git a/resources/sprite/apps_lb_2x/pebkac.png b/resources/sprite/apps_lb_2x/nuance.png
rename from resources/sprite/apps_lb_2x/pebkac.png
rename to resources/sprite/apps_lb_2x/nuance.png
diff --git a/resources/sprite/apps_lb_4x/pebkac.png b/resources/sprite/apps_lb_4x/nuance.png
rename from resources/sprite/apps_lb_4x/pebkac.png
rename to resources/sprite/apps_lb_4x/nuance.png
diff --git a/resources/sprite/apps_white_1x/pebkac.png b/resources/sprite/apps_white_1x/nuance.png
rename from resources/sprite/apps_white_1x/pebkac.png
rename to resources/sprite/apps_white_1x/nuance.png
diff --git a/resources/sprite/apps_white_2x/pebkac.png b/resources/sprite/apps_white_2x/nuance.png
rename from resources/sprite/apps_white_2x/pebkac.png
rename to resources/sprite/apps_white_2x/nuance.png
diff --git a/resources/sprite/apps_white_4x/pebkac.png b/resources/sprite/apps_white_4x/nuance.png
rename from resources/sprite/apps_white_4x/pebkac.png
rename to resources/sprite/apps_white_4x/nuance.png
diff --git a/resources/sprite/manifest/apps-large.json b/resources/sprite/manifest/apps-large.json
--- a/resources/sprite/manifest/apps-large.json
+++ b/resources/sprite/manifest/apps-large.json
@@ -581,6 +581,26 @@
"rule" : ".apps-new-white-large",
"hash" : "be597ce11c4d1630f67282cd7b81cc85"
},
+ "apps-nuance-blue-large" : {
+ "name" : "apps-nuance-blue-large",
+ "rule" : ".apps-nuance-blue-large, .phabricator-crumb-view:hover .apps-nuance-dark-large",
+ "hash" : "a6c11b6c091b15c93bb75e40f5014c46"
+ },
+ "apps-nuance-dark-large" : {
+ "name" : "apps-nuance-dark-large",
+ "rule" : ".apps-nuance-dark-large",
+ "hash" : "a179a6802048440f0c4dfd99784ad740"
+ },
+ "apps-nuance-light-large" : {
+ "name" : "apps-nuance-light-large",
+ "rule" : ".apps-nuance-light-large",
+ "hash" : "f6f36066f33b015e0e44e125182db158"
+ },
+ "apps-nuance-white-large" : {
+ "name" : "apps-nuance-white-large",
+ "rule" : ".apps-nuance-white-large",
+ "hash" : "8510afe6941a33000ca02a054a3f78e0"
+ },
"apps-owners-blue-large" : {
"name" : "apps-owners-blue-large",
"rule" : ".apps-owners-blue-large, .phabricator-crumb-view:hover .apps-owners-dark-large",
@@ -621,26 +641,6 @@
"rule" : ".apps-paste-white-large",
"hash" : "94cf3ee0f2b15b82ad8f62cb9399ecad"
},
- "apps-pebkac-blue-large" : {
- "name" : "apps-pebkac-blue-large",
- "rule" : ".apps-pebkac-blue-large, .phabricator-crumb-view:hover .apps-pebkac-dark-large",
- "hash" : "7a1010119d4589609f364c603cd03d1b"
- },
- "apps-pebkac-dark-large" : {
- "name" : "apps-pebkac-dark-large",
- "rule" : ".apps-pebkac-dark-large",
- "hash" : "617142b451eec10fe60246eec52a99d0"
- },
- "apps-pebkac-light-large" : {
- "name" : "apps-pebkac-light-large",
- "rule" : ".apps-pebkac-light-large",
- "hash" : "2319b657d0fe3df60b234e8961c4869e"
- },
- "apps-pebkac-white-large" : {
- "name" : "apps-pebkac-white-large",
- "rule" : ".apps-pebkac-white-large",
- "hash" : "25eb13ac78cf507b6ec66016cd477cfe"
- },
"apps-people-blue-large" : {
"name" : "apps-people-blue-large",
"rule" : ".apps-people-blue-large, .phabricator-crumb-view:hover .apps-people-dark-large",
diff --git a/resources/sprite/manifest/apps.json b/resources/sprite/manifest/apps.json
--- a/resources/sprite/manifest/apps.json
+++ b/resources/sprite/manifest/apps.json
@@ -291,6 +291,16 @@
"rule" : ".apps-new-white",
"hash" : "dc5ce42c7d60e6ba37b07631b3c3280a"
},
+ "apps-nuance-dark" : {
+ "name" : "apps-nuance-dark",
+ "rule" : ".apps-nuance-dark",
+ "hash" : "e20c19670e1c9b9d1f9267bf7f017aba"
+ },
+ "apps-nuance-white" : {
+ "name" : "apps-nuance-white",
+ "rule" : ".apps-nuance-white",
+ "hash" : "368f1241b438492642520a037a1ac294"
+ },
"apps-owners-dark" : {
"name" : "apps-owners-dark",
"rule" : ".apps-owners-dark",
@@ -311,16 +321,6 @@
"rule" : ".apps-paste-white",
"hash" : "ed5ec1ee39cc2a01f568f91c72141bfb"
},
- "apps-pebkac-dark" : {
- "name" : "apps-pebkac-dark",
- "rule" : ".apps-pebkac-dark",
- "hash" : "4adb4a8f0a8c5bc5462bb806ceafc63f"
- },
- "apps-pebkac-white" : {
- "name" : "apps-pebkac-white",
- "rule" : ".apps-pebkac-white",
- "hash" : "35438c7a295df21aa2fa4771a5c3c986"
- },
"apps-people-dark" : {
"name" : "apps-people-dark",
"rule" : ".apps-people-dark",
diff --git a/resources/sql/patches/20131106.nuance-v0.sql b/resources/sql/patches/20131106.nuance-v0.sql
new file mode 100644
--- /dev/null
+++ b/resources/sql/patches/20131106.nuance-v0.sql
@@ -0,0 +1,259 @@
+CREATE TABLE {$NAMESPACE}_nuance.nuance_item (
+ id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
+ phid VARCHAR(64) NOT NULL COLLATE utf8_bin,
+ ownerPHID VARCHAR(64) COLLATE utf8_bin,
+ requestorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin,
+ sourcePHID VARCHAR(64) NOT NULL COLLATE utf8_bin,
+ sourceLabel VARCHAR(255),
+ status INT UNSIGNED NOT NULL,
+ data longtext NOT NULL COLLATE utf8_bin,
+ mailKey VARCHAR(20) NOT NULL COLLATE utf8_bin,
+ dateCreated INT UNSIGNED NOT NULL,
+ dateModified INT UNSIGNED NOT NULL,
+ dateNuanced INT UNSIGNED NOT NULL,
+ UNIQUE KEY `key_phid` (phid),
+ KEY `key_source` (sourcePHID, status, dateNuanced, id),
+ KEY `key_owner` (ownerPHID, status, dateNuanced, id),
+ KEY `key_contacter` (requestorPHID, status, dateNuanced, id)
+) ENGINE=InnoDB, COLLATE utf8_general_ci;
+
+CREATE TABLE {$NAMESPACE}_nuance.nuance_itemtransaction (
+ id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
+ phid VARCHAR(64) NOT NULL COLLATE utf8_bin,
+ authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin,
+ objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin,
+ viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin,
+ editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin,
+ commentPHID VARCHAR(64) COLLATE utf8_bin,
+ commentVersion INT UNSIGNED NOT NULL,
+ transactionType VARCHAR(32) NOT NULL COLLATE utf8_bin,
+ oldValue LONGTEXT NOT NULL COLLATE utf8_bin,
+ newValue LONGTEXT NOT NULL COLLATE utf8_bin,
+ contentSource LONGTEXT NOT NULL COLLATE utf8_bin,
+ metadata LONGTEXT NOT NULL COLLATE utf8_bin,
+ dateCreated INT UNSIGNED NOT NULL,
+ dateModified INT UNSIGNED NOT NULL,
+
+ UNIQUE KEY `key_phid` (phid),
+ KEY `key_object` (objectPHID)
+
+) ENGINE=InnoDB, COLLATE utf8_general_ci;
+
+CREATE TABLE {$NAMESPACE}_nuance.nuance_itemtransaction_comment (
+ id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
+ phid VARCHAR(64) NOT NULL COLLATE utf8_bin,
+ transactionPHID VARCHAR(64) COLLATE utf8_bin,
+ authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin,
+ viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin,
+ editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin,
+ commentVersion INT UNSIGNED NOT NULL,
+ content LONGTEXT NOT NULL COLLATE utf8_bin,
+ contentSource LONGTEXT NOT NULL COLLATE utf8_bin,
+ isDeleted BOOL NOT NULL,
+ dateCreated INT UNSIGNED NOT NULL,
+ dateModified INT UNSIGNED NOT NULL,
+
+ UNIQUE KEY `key_phid` (phid),
+ UNIQUE KEY `key_version` (transactionPHID, commentVersion)
+
+) ENGINE=InnoDB, COLLATE utf8_general_ci;
+
+CREATE TABLE {$NAMESPACE}_nuance.nuance_source (
+ id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
+ phid VARCHAR(64) NOT NULL COLLATE utf8_bin,
+ name VARCHAR(255),
+ type INT UNSIGNED NOT NULL,
+ data longtext NOT NULL COLLATE utf8_bin,
+ mailKey VARCHAR(20) NOT NULL COLLATE utf8_bin,
+ viewPolicy VARCHAR(64) NOT NULL,
+ editPolicy VARCHAR(64) NOT NULL,
+ dateCreated INT UNSIGNED NOT NULL,
+ dateModified INT UNSIGNED NOT NULL,
+ UNIQUE KEY `key_phid` (phid),
+ KEY `key_type` (type, dateModified)
+) ENGINE=InnoDB, COLLATE utf8_general_ci;
+
+CREATE TABLE {$NAMESPACE}_nuance.nuance_sourcetransaction (
+ id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
+ phid VARCHAR(64) NOT NULL COLLATE utf8_bin,
+ authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin,
+ objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin,
+ viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin,
+ editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin,
+ commentPHID VARCHAR(64) COLLATE utf8_bin,
+ commentVersion INT UNSIGNED NOT NULL,
+ transactionType VARCHAR(32) NOT NULL COLLATE utf8_bin,
+ oldValue LONGTEXT NOT NULL COLLATE utf8_bin,
+ newValue LONGTEXT NOT NULL COLLATE utf8_bin,
+ contentSource LONGTEXT NOT NULL COLLATE utf8_bin,
+ metadata LONGTEXT NOT NULL COLLATE utf8_bin,
+ dateCreated INT UNSIGNED NOT NULL,
+ dateModified INT UNSIGNED NOT NULL,
+
+ UNIQUE KEY `key_phid` (phid),
+ KEY `key_object` (objectPHID)
+
+) ENGINE=InnoDB, COLLATE utf8_general_ci;
+
+CREATE TABLE {$NAMESPACE}_nuance.nuance_sourcetransaction_comment (
+ id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
+ phid VARCHAR(64) NOT NULL COLLATE utf8_bin,
+ transactionPHID VARCHAR(64) COLLATE utf8_bin,
+ authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin,
+ viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin,
+ editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin,
+ commentVersion INT UNSIGNED NOT NULL,
+ content LONGTEXT NOT NULL COLLATE utf8_bin,
+ contentSource LONGTEXT NOT NULL COLLATE utf8_bin,
+ isDeleted BOOL NOT NULL,
+ dateCreated INT UNSIGNED NOT NULL,
+ dateModified INT UNSIGNED NOT NULL,
+
+ UNIQUE KEY `key_phid` (phid),
+ UNIQUE KEY `key_version` (transactionPHID, commentVersion)
+
+) ENGINE=InnoDB, COLLATE utf8_general_ci;
+
+CREATE TABLE {$NAMESPACE}_nuance.nuance_queue (
+ id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
+ phid VARCHAR(64) NOT NULL COLLATE utf8_bin,
+ name VARCHAR(255),
+ mailKey VARCHAR(20) NOT NULL COLLATE utf8_bin,
+ viewPolicy VARCHAR(64) NOT NULL,
+ editPolicy VARCHAR(64) NOT NULL,
+ dateCreated INT UNSIGNED NOT NULL,
+ dateModified INT UNSIGNED NOT NULL,
+ UNIQUE KEY `key_phid` (phid)
+) ENGINE=InnoDB, COLLATE utf8_general_ci;
+
+CREATE TABLE {$NAMESPACE}_nuance.nuance_queuetransaction (
+ id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
+ phid VARCHAR(64) NOT NULL COLLATE utf8_bin,
+ authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin,
+ objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin,
+ viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin,
+ editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin,
+ commentPHID VARCHAR(64) COLLATE utf8_bin,
+ commentVersion INT UNSIGNED NOT NULL,
+ transactionType VARCHAR(32) NOT NULL COLLATE utf8_bin,
+ oldValue LONGTEXT NOT NULL COLLATE utf8_bin,
+ newValue LONGTEXT NOT NULL COLLATE utf8_bin,
+ contentSource LONGTEXT NOT NULL COLLATE utf8_bin,
+ metadata LONGTEXT NOT NULL COLLATE utf8_bin,
+ dateCreated INT UNSIGNED NOT NULL,
+ dateModified INT UNSIGNED NOT NULL,
+
+ UNIQUE KEY `key_phid` (phid),
+ KEY `key_object` (objectPHID)
+
+) ENGINE=InnoDB, COLLATE utf8_general_ci;
+
+CREATE TABLE {$NAMESPACE}_nuance.nuance_queuetransaction_comment (
+ id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
+ phid VARCHAR(64) NOT NULL COLLATE utf8_bin,
+ transactionPHID VARCHAR(64) COLLATE utf8_bin,
+ authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin,
+ viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin,
+ editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin,
+ commentVersion INT UNSIGNED NOT NULL,
+ content LONGTEXT NOT NULL COLLATE utf8_bin,
+ contentSource LONGTEXT NOT NULL COLLATE utf8_bin,
+ isDeleted BOOL NOT NULL,
+ dateCreated INT UNSIGNED NOT NULL,
+ dateModified INT UNSIGNED NOT NULL,
+
+ UNIQUE KEY `key_phid` (phid),
+ UNIQUE KEY `key_version` (transactionPHID, commentVersion)
+
+) ENGINE=InnoDB, COLLATE utf8_general_ci;
+
+CREATE TABLE {$NAMESPACE}_nuance.nuance_queueitem (
+ id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
+ queuePHID VARCHAR(64) NOT NULL COLLATE utf8_bin,
+ itemPHID VARCHAR(64) NOT NULL COLLATE utf8_bin,
+ itemStatus INT UNSIGNED NOT NULL,
+ itemDateNuanced INT UNSIGNED NOT NULL,
+ dateCreated INT UNSIGNED NOT NULL,
+ dateModified INT UNSIGNED NOT NULL,
+ UNIQUE KEY `key_one_per_queue` (itemPHID, queuePHID),
+ KEY `key_queue` (queuePHID, itemStatus, itemDateNuanced, id)
+) ENGINE=InnoDB, COLLATE utf8_general_ci;
+
+CREATE TABLE {$NAMESPACE}_nuance.nuance_requestor (
+ id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
+ phid VARCHAR(64) NOT NULL COLLATE utf8_bin,
+ data longtext NOT NULL COLLATE utf8_bin,
+ dateCreated INT UNSIGNED NOT NULL,
+ dateModified INT UNSIGNED NOT NULL,
+ UNIQUE KEY `key_phid` (phid)
+) ENGINE=InnoDB, COLLATE utf8_general_ci;
+
+CREATE TABLE {$NAMESPACE}_nuance.nuance_requestortransaction (
+ id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
+ phid VARCHAR(64) NOT NULL COLLATE utf8_bin,
+ authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin,
+ objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin,
+ viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin,
+ editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin,
+ commentPHID VARCHAR(64) COLLATE utf8_bin,
+ commentVersion INT UNSIGNED NOT NULL,
+ transactionType VARCHAR(32) NOT NULL COLLATE utf8_bin,
+ oldValue LONGTEXT NOT NULL COLLATE utf8_bin,
+ newValue LONGTEXT NOT NULL COLLATE utf8_bin,
+ contentSource LONGTEXT NOT NULL COLLATE utf8_bin,
+ metadata LONGTEXT NOT NULL COLLATE utf8_bin,
+ dateCreated INT UNSIGNED NOT NULL,
+ dateModified INT UNSIGNED NOT NULL,
+
+ UNIQUE KEY `key_phid` (phid),
+ KEY `key_object` (objectPHID)
+
+) ENGINE=InnoDB, COLLATE utf8_general_ci;
+
+CREATE TABLE {$NAMESPACE}_nuance.nuance_requestortransaction_comment (
+ id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
+ phid VARCHAR(64) NOT NULL COLLATE utf8_bin,
+ transactionPHID VARCHAR(64) COLLATE utf8_bin,
+ authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin,
+ viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin,
+ editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin,
+ commentVersion INT UNSIGNED NOT NULL,
+ content LONGTEXT NOT NULL COLLATE utf8_bin,
+ contentSource LONGTEXT NOT NULL COLLATE utf8_bin,
+ isDeleted BOOL NOT NULL,
+ dateCreated INT UNSIGNED NOT NULL,
+ dateModified INT UNSIGNED NOT NULL,
+
+ UNIQUE KEY `key_phid` (phid),
+ UNIQUE KEY `key_version` (transactionPHID, commentVersion)
+
+) ENGINE=InnoDB, COLLATE utf8_general_ci;
+
+CREATE TABLE {$NAMESPACE}_nuance.nuance_requestorsource (
+ id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
+ requestorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin,
+ sourcePHID VARCHAR(64) NOT NULL COLLATE utf8_bin,
+ sourceKey VARCHAR(128) NOT NULL COLLATE utf8_bin,
+ data LONGTEXT NOT NULL COLLATE utf8_bin,
+ dateCreated INT UNSIGNED NOT NULL,
+ dateModified INT UNSIGNED NOT NULL,
+ KEY `key_requestor` (requestorPHID, id),
+ KEY `key_source` (sourcePHID, id),
+ UNIQUE KEY `key_source_key` (sourcePHID, sourceKey)
+) ENGINE=InnoDB, COLLATE utf8_general_ci;
+
+CREATE TABLE {$NAMESPACE}_nuance.edge (
+ src VARCHAR(64) NOT NULL COLLATE utf8_bin,
+ type VARCHAR(64) NOT NULL COLLATE utf8_bin,
+ dst VARCHAR(64) NOT NULL COLLATE utf8_bin,
+ dateCreated INT UNSIGNED NOT NULL,
+ seq INT UNSIGNED NOT NULL,
+ dataID INT UNSIGNED,
+ PRIMARY KEY (src, type, dst),
+ KEY (src, type, dateCreated, seq)
+) ENGINE=InnoDB, COLLATE utf8_general_ci;
+
+CREATE TABLE {$NAMESPACE}_nuance.edgedata (
+ id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
+ data LONGTEXT NOT NULL COLLATE utf8_bin
+) ENGINE=InnoDB, COLLATE utf8_general_ci;
diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -830,6 +830,48 @@
'MetaMTAConstants' => 'applications/metamta/constants/MetaMTAConstants.php',
'MetaMTANotificationType' => 'applications/metamta/constants/MetaMTANotificationType.php',
'MetaMTAReceivedMailStatus' => 'applications/metamta/constants/MetaMTAReceivedMailStatus.php',
+ 'NuanceController' => 'applications/nuance/controller/NuanceController.php',
+ 'NuanceDAO' => 'applications/nuance/storage/NuanceDAO.php',
+ 'NuanceItem' => 'applications/nuance/storage/NuanceItem.php',
+ 'NuanceItemEditController' => 'applications/nuance/controller/NuanceItemEditController.php',
+ 'NuanceItemEditor' => 'applications/nuance/editor/NuanceItemEditor.php',
+ 'NuanceItemQuery' => 'applications/nuance/query/NuanceItemQuery.php',
+ 'NuanceItemTransaction' => 'applications/nuance/storage/NuanceItemTransaction.php',
+ 'NuanceItemTransactionComment' => 'applications/nuance/storage/NuanceItemTransactionComment.php',
+ 'NuanceItemTransactionQuery' => 'applications/nuance/query/NuanceItemTransactionQuery.php',
+ 'NuanceItemViewController' => 'applications/nuance/controller/NuanceItemViewController.php',
+ 'NuancePHIDTypeItem' => 'applications/nuance/phid/NuancePHIDTypeItem.php',
+ 'NuancePHIDTypeQueue' => 'applications/nuance/phid/NuancePHIDTypeQueue.php',
+ 'NuancePHIDTypeRequestor' => 'applications/nuance/phid/NuancePHIDTypeRequestor.php',
+ 'NuancePHIDTypeSource' => 'applications/nuance/phid/NuancePHIDTypeSource.php',
+ 'NuanceQuery' => 'applications/nuance/query/NuanceQuery.php',
+ 'NuanceQueue' => 'applications/nuance/storage/NuanceQueue.php',
+ 'NuanceQueueEditController' => 'applications/nuance/controller/NuanceQueueEditController.php',
+ 'NuanceQueueEditor' => 'applications/nuance/editor/NuanceQueueEditor.php',
+ 'NuanceQueueItem' => 'applications/nuance/storage/NuanceQueueItem.php',
+ 'NuanceQueueQuery' => 'applications/nuance/query/NuanceQueueQuery.php',
+ 'NuanceQueueTransaction' => 'applications/nuance/storage/NuanceQueueTransaction.php',
+ 'NuanceQueueTransactionComment' => 'applications/nuance/storage/NuanceQueueTransactionComment.php',
+ 'NuanceQueueTransactionQuery' => 'applications/nuance/query/NuanceQueueTransactionQuery.php',
+ 'NuanceQueueViewController' => 'applications/nuance/controller/NuanceQueueViewController.php',
+ 'NuanceRequestor' => 'applications/nuance/storage/NuanceRequestor.php',
+ 'NuanceRequestorEditController' => 'applications/nuance/controller/NuanceRequestorEditController.php',
+ 'NuanceRequestorEditor' => 'applications/nuance/editor/NuanceRequestorEditor.php',
+ 'NuanceRequestorQuery' => 'applications/nuance/query/NuanceRequestorQuery.php',
+ 'NuanceRequestorSource' => 'applications/nuance/storage/NuanceRequestorSource.php',
+ 'NuanceRequestorTransaction' => 'applications/nuance/storage/NuanceRequestorTransaction.php',
+ 'NuanceRequestorTransactionComment' => 'applications/nuance/storage/NuanceRequestorTransactionComment.php',
+ 'NuanceRequestorTransactionQuery' => 'applications/nuance/query/NuanceRequestorTransactionQuery.php',
+ 'NuanceRequestorViewController' => 'applications/nuance/controller/NuanceRequestorViewController.php',
+ 'NuanceSource' => 'applications/nuance/storage/NuanceSource.php',
+ 'NuanceSourceEditController' => 'applications/nuance/controller/NuanceSourceEditController.php',
+ 'NuanceSourceEditor' => 'applications/nuance/editor/NuanceSourceEditor.php',
+ 'NuanceSourceQuery' => 'applications/nuance/query/NuanceSourceQuery.php',
+ 'NuanceSourceTransaction' => 'applications/nuance/storage/NuanceSourceTransaction.php',
+ 'NuanceSourceTransactionComment' => 'applications/nuance/storage/NuanceSourceTransactionComment.php',
+ 'NuanceSourceTransactionQuery' => 'applications/nuance/query/NuanceSourceTransactionQuery.php',
+ 'NuanceSourceViewController' => 'applications/nuance/controller/NuanceSourceViewController.php',
+ 'NuanceTransaction' => 'applications/nuance/storage/NuanceTransaction.php',
'OwnersPackageReplyHandler' => 'applications/owners/mail/OwnersPackageReplyHandler.php',
'PHUI' => 'view/phui/PHUI.php',
'PHUIBoxExample' => 'applications/uiexample/examples/PHUIBoxExample.php',
@@ -928,6 +970,7 @@
'PhabricatorApplicationMailingLists' => 'applications/mailinglists/application/PhabricatorApplicationMailingLists.php',
'PhabricatorApplicationManiphest' => 'applications/maniphest/application/PhabricatorApplicationManiphest.php',
'PhabricatorApplicationMetaMTA' => 'applications/metamta/application/PhabricatorApplicationMetaMTA.php',
+ 'PhabricatorApplicationNuance' => 'applications/nuance/application/PhabricatorApplicationNuance.php',
'PhabricatorApplicationOwners' => 'applications/owners/application/PhabricatorApplicationOwners.php',
'PhabricatorApplicationPHIDTypeApplication' => 'applications/meta/phid/PhabricatorApplicationPHIDTypeApplication.php',
'PhabricatorApplicationPHPAST' => 'applications/phpast/application/PhabricatorApplicationPHPAST.php',
@@ -3097,6 +3140,60 @@
'ManiphestView' => 'AphrontView',
'MetaMTANotificationType' => 'MetaMTAConstants',
'MetaMTAReceivedMailStatus' => 'MetaMTAConstants',
+ 'NuanceController' => 'PhabricatorController',
+ 'NuanceDAO' => 'PhabricatorLiskDAO',
+ 'NuanceItem' =>
+ array(
+ 0 => 'NuanceDAO',
+ 1 => 'PhabricatorPolicyInterface',
+ ),
+ 'NuanceItemEditController' => 'NuanceController',
+ 'NuanceItemEditor' => 'PhabricatorApplicationTransactionEditor',
+ 'NuanceItemQuery' => 'NuanceQuery',
+ 'NuanceItemTransaction' => 'NuanceTransaction',
+ 'NuanceItemTransactionComment' => 'PhabricatorApplicationTransactionComment',
+ 'NuanceItemTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
+ 'NuanceItemViewController' => 'NuanceController',
+ 'NuancePHIDTypeItem' => 'PhabricatorPHIDType',
+ 'NuancePHIDTypeQueue' => 'PhabricatorPHIDType',
+ 'NuancePHIDTypeRequestor' => 'PhabricatorPHIDType',
+ 'NuancePHIDTypeSource' => 'PhabricatorPHIDType',
+ 'NuanceQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
+ 'NuanceQueue' =>
+ array(
+ 0 => 'NuanceDAO',
+ 1 => 'PhabricatorPolicyInterface',
+ ),
+ 'NuanceQueueEditController' => 'NuanceController',
+ 'NuanceQueueEditor' => 'PhabricatorApplicationTransactionEditor',
+ 'NuanceQueueItem' => 'NuanceDAO',
+ 'NuanceQueueQuery' => 'NuanceQuery',
+ 'NuanceQueueTransaction' => 'NuanceTransaction',
+ 'NuanceQueueTransactionComment' => 'PhabricatorApplicationTransactionComment',
+ 'NuanceQueueTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
+ 'NuanceQueueViewController' => 'NuanceController',
+ 'NuanceRequestor' => 'NuanceDAO',
+ 'NuanceRequestorEditController' => 'NuanceController',
+ 'NuanceRequestorEditor' => 'PhabricatorApplicationTransactionEditor',
+ 'NuanceRequestorQuery' => 'NuanceQuery',
+ 'NuanceRequestorSource' => 'NuanceDAO',
+ 'NuanceRequestorTransaction' => 'NuanceTransaction',
+ 'NuanceRequestorTransactionComment' => 'PhabricatorApplicationTransactionComment',
+ 'NuanceRequestorTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
+ 'NuanceRequestorViewController' => 'NuanceController',
+ 'NuanceSource' =>
+ array(
+ 0 => 'NuanceDAO',
+ 1 => 'PhabricatorPolicyInterface',
+ ),
+ 'NuanceSourceEditController' => 'NuanceController',
+ 'NuanceSourceEditor' => 'PhabricatorApplicationTransactionEditor',
+ 'NuanceSourceQuery' => 'NuanceQuery',
+ 'NuanceSourceTransaction' => 'NuanceTransaction',
+ 'NuanceSourceTransactionComment' => 'PhabricatorApplicationTransactionComment',
+ 'NuanceSourceTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
+ 'NuanceSourceViewController' => 'NuanceController',
+ 'NuanceTransaction' => 'PhabricatorApplicationTransaction',
'OwnersPackageReplyHandler' => 'PhabricatorMailReplyHandler',
'PHUIBoxExample' => 'PhabricatorUIExample',
'PHUIBoxView' => 'AphrontTagView',
@@ -3193,6 +3290,7 @@
'PhabricatorApplicationMailingLists' => 'PhabricatorApplication',
'PhabricatorApplicationManiphest' => 'PhabricatorApplication',
'PhabricatorApplicationMetaMTA' => 'PhabricatorApplication',
+ 'PhabricatorApplicationNuance' => 'PhabricatorApplication',
'PhabricatorApplicationOwners' => 'PhabricatorApplication',
'PhabricatorApplicationPHIDTypeApplication' => 'PhabricatorPHIDType',
'PhabricatorApplicationPHPAST' => 'PhabricatorApplication',
diff --git a/src/applications/conpherence/application/PhabricatorApplicationConpherence.php b/src/applications/conpherence/application/PhabricatorApplicationConpherence.php
--- a/src/applications/conpherence/application/PhabricatorApplicationConpherence.php
+++ b/src/applications/conpherence/application/PhabricatorApplicationConpherence.php
@@ -22,7 +22,7 @@
}
public function getTitleGlyph() {
- return "\xE2\x98\x8E";
+ return "\xE2\x9C\x86";
}
public function getApplicationGroup() {
diff --git a/src/applications/nuance/application/PhabricatorApplicationNuance.php b/src/applications/nuance/application/PhabricatorApplicationNuance.php
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/application/PhabricatorApplicationNuance.php
@@ -0,0 +1,54 @@
+<?php
+
+final class PhabricatorApplicationNuance extends PhabricatorApplication {
+
+ public function getIconName() {
+ return 'nuance';
+ }
+
+ public function getTitleGlyph() {
+ return "\xE2\x98\x8E";
+ }
+
+ public function isBeta() {
+ return true;
+ }
+
+ public function shouldAppearInLaunchView() {
+ // try to hide this even more for now
+ return false;
+ }
+
+ public function canUninstall() {
+ return true;
+ }
+
+ public function getRoutes() {
+ return array(
+ '/nuance/' => array(
+ 'item/' => array(
+ 'view/(?P<id>[1-9]\d*)/' => 'NuanceItemViewController',
+ 'edit/(?P<id>[1-9]\d*)/' => 'NuanceItemEditController',
+ 'new/' => 'NuanceItemEditController',
+ ),
+ 'source/' => array(
+ 'view/(?P<id>[1-9]\d*)/' => 'NuanceSourceViewController',
+ 'edit/(?P<id>[1-9]\d*)/' => 'NuanceSourceEditController',
+ 'new/' => 'NuanceSourceEditController',
+ ),
+ 'queue/' => array(
+ 'view/(?P<id>[1-9]\d*)/' => 'NuanceQueueViewController',
+ 'edit/(?P<id>[1-9]\d*)/' => 'NuanceQueueEditController',
+ 'new/' => 'NuanceQueueEditController',
+ ),
+ 'requestor/' => array(
+ 'view/(?P<id>[1-9]\d*)/' => 'NuanceRequestorViewController',
+ 'edit/(?P<id>[1-9]\d*)/' => 'NuanceRequestorEditController',
+ 'new/' => 'NuanceRequestorEditController',
+ ),
+ ),
+ );
+ }
+
+}
+
diff --git a/src/applications/nuance/controller/NuanceController.php b/src/applications/nuance/controller/NuanceController.php
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/controller/NuanceController.php
@@ -0,0 +1,5 @@
+<?php
+
+abstract class NuanceController extends PhabricatorController {
+
+}
diff --git a/src/applications/nuance/controller/NuanceItemEditController.php b/src/applications/nuance/controller/NuanceItemEditController.php
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/controller/NuanceItemEditController.php
@@ -0,0 +1,50 @@
+<?php
+
+final class NuanceItemEditController extends NuanceController {
+
+ private $itemID;
+
+ public function setItemID($item_id) {
+ $this->itemID = $item_id;
+ return $this;
+ }
+ public function getItemID() {
+ return $this->itemID;
+ }
+
+ public function willProcessRequest(array $data) {
+ $this->setItemID(idx($data, 'id'));
+ }
+
+ public function processRequest() {
+ $request = $this->getRequest();
+ $user = $request->getUser();
+
+ $item_id = $this->getItemID();
+ $is_new = !$item_id;
+
+ if ($is_new) {
+ $item = new NuanceItem();
+
+ } else {
+ $item = id(new NuanceItemQuery())
+ ->setViewer($user)
+ ->withIDs(array($item_id))
+ ->executeOne();
+ }
+
+ if (!$item) {
+ return new Aphront404Response();
+ }
+
+ $crumbs = $this->buildApplicationCrumbs();
+ $title = 'TODO';
+
+ return $this->buildApplicationPage(
+ $crumbs,
+ array(
+ 'title' => $title,
+ 'device' => true));
+ }
+
+}
diff --git a/src/applications/nuance/controller/NuanceItemViewController.php b/src/applications/nuance/controller/NuanceItemViewController.php
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/controller/NuanceItemViewController.php
@@ -0,0 +1,42 @@
+<?php
+
+final class NuanceItemViewController extends NuanceController {
+
+ private $itemID;
+
+ public function setItemID($item_id) {
+ $this->itemID = $item_id;
+ return $this;
+ }
+ public function getItemID() {
+ return $this->itemID;
+ }
+
+ public function willProcessRequest(array $data) {
+ $this->setItemID($data['id']);
+ }
+
+ public function processRequest() {
+ $request = $this->getRequest();
+ $user = $request->getUser();
+
+ $item_id = $this->getItemID();
+ $item = id(new NuanceItemQuery())
+ ->setViewer($user)
+ ->withIDs(array($item_id))
+ ->executeOne();
+
+ if (!$item) {
+ return new Aphront404Response();
+ }
+
+ $crumbs = $this->buildApplicationCrumbs();
+ $title = 'TODO';
+
+ return $this->buildApplicationPage(
+ $crumbs,
+ array(
+ 'title' => $title,
+ 'device' => true));
+ }
+}
diff --git a/src/applications/nuance/controller/NuanceQueueEditController.php b/src/applications/nuance/controller/NuanceQueueEditController.php
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/controller/NuanceQueueEditController.php
@@ -0,0 +1,50 @@
+<?php
+
+final class NuanceQueueEditController extends NuanceController {
+
+ private $queueID;
+
+ public function setQueueID($queue_id) {
+ $this->queueID = $queue_id;
+ return $this;
+ }
+ public function getQueueID() {
+ return $this->queueID;
+ }
+
+ public function willProcessRequest(array $data) {
+ $this->setQueueID(idx($data, 'id'));
+ }
+
+ public function processRequest() {
+ $request = $this->getRequest();
+ $user = $request->getUser();
+
+ $queue_id = $this->getQueueID();
+ $is_new = !$queue_id;
+
+ if ($is_new) {
+ $queue = new NuanceQueue();
+
+ } else {
+ $queue = id(new NuanceQueueQuery())
+ ->setViewer($user)
+ ->withIDs(array($queue_id))
+ ->executeOne();
+ }
+
+ if (!$queue) {
+ return new Aphront404Response();
+ }
+
+ $crumbs = $this->buildApplicationCrumbs();
+ $title = 'TODO';
+
+ return $this->buildApplicationPage(
+ $crumbs,
+ array(
+ 'title' => $title,
+ 'device' => true));
+ }
+
+}
diff --git a/src/applications/nuance/controller/NuanceQueueViewController.php b/src/applications/nuance/controller/NuanceQueueViewController.php
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/controller/NuanceQueueViewController.php
@@ -0,0 +1,42 @@
+<?php
+
+final class NuanceQueueViewController extends NuanceController {
+
+ private $queueID;
+
+ public function setQueueID($queue_id) {
+ $this->queueID = $queue_id;
+ return $this;
+ }
+ public function getQueueID() {
+ return $this->queueID;
+ }
+
+ public function willProcessRequest(array $data) {
+ $this->setQueueID($data['id']);
+ }
+
+ public function processRequest() {
+ $request = $this->getRequest();
+ $user = $request->getUser();
+
+ $queue_id = $this->getQueueID();
+ $queue = id(new NuanceQueueQuery())
+ ->setViewer($user)
+ ->withIDs(array($queue_id))
+ ->executeOne();
+
+ if (!$queue) {
+ return new Aphront404Response();
+ }
+
+ $crumbs = $this->buildApplicationCrumbs();
+ $title = 'TODO';
+
+ return $this->buildApplicationPage(
+ $crumbs,
+ array(
+ 'title' => $title,
+ 'device' => true));
+ }
+}
diff --git a/src/applications/nuance/controller/NuanceRequestorEditController.php b/src/applications/nuance/controller/NuanceRequestorEditController.php
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/controller/NuanceRequestorEditController.php
@@ -0,0 +1,50 @@
+<?php
+
+final class NuanceRequestorEditController extends NuanceController {
+
+ private $requestorID;
+
+ public function setRequestorID($requestor_id) {
+ $this->requestorID = $requestor_id;
+ return $this;
+ }
+ public function getRequestorID() {
+ return $this->requestorID;
+ }
+
+ public function willProcessRequest(array $data) {
+ $this->setRequestorID(idx($data, 'id'));
+ }
+
+ public function processRequest() {
+ $request = $this->getRequest();
+ $user = $request->getUser();
+
+ $requestor_id = $this->getRequestorID();
+ $is_new = !$requestor_id;
+
+ if ($is_new) {
+ $requestor = new NuanceRequestor();
+
+ } else {
+ $requestor = id(new NuanceRequestorQuery())
+ ->setViewer($user)
+ ->withIDs(array($requestor_id))
+ ->executeOne();
+ }
+
+ if (!$requestor) {
+ return new Aphront404Response();
+ }
+
+ $crumbs = $this->buildApplicationCrumbs();
+ $title = 'TODO';
+
+ return $this->buildApplicationPage(
+ $crumbs,
+ array(
+ 'title' => $title,
+ 'device' => true));
+ }
+
+}
diff --git a/src/applications/nuance/controller/NuanceRequestorViewController.php b/src/applications/nuance/controller/NuanceRequestorViewController.php
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/controller/NuanceRequestorViewController.php
@@ -0,0 +1,42 @@
+<?php
+
+final class NuanceRequestorViewController extends NuanceController {
+
+ private $requestorID;
+
+ public function setRequestorID($requestor_id) {
+ $this->requestorID = $requestor_id;
+ return $this;
+ }
+ public function getRequestorID() {
+ return $this->requestorID;
+ }
+
+ public function willProcessRequest(array $data) {
+ $this->setRequestorID($data['id']);
+ }
+
+ public function processRequest() {
+ $request = $this->getRequest();
+ $user = $request->getUser();
+
+ $requestor_id = $this->getRequestorID();
+ $requestor = id(new NuanceRequestorQuery())
+ ->setViewer($user)
+ ->withIDs(array($requestor_id))
+ ->executeOne();
+
+ if (!$requestor) {
+ return new Aphront404Response();
+ }
+
+ $crumbs = $this->buildApplicationCrumbs();
+ $title = 'TODO';
+
+ return $this->buildApplicationPage(
+ $crumbs,
+ array(
+ 'title' => $title,
+ 'device' => true));
+ }
+}
diff --git a/src/applications/nuance/controller/NuanceSourceEditController.php b/src/applications/nuance/controller/NuanceSourceEditController.php
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/controller/NuanceSourceEditController.php
@@ -0,0 +1,49 @@
+<?php
+
+final class NuanceSourceEditController extends NuanceController {
+
+ private $sourceID;
+
+ public function setSourceID($source_id) {
+ $this->sourceID = $source_id;
+ return $this;
+ }
+ public function getSourceID() {
+ return $this->sourceID;
+ }
+
+ public function willProcessRequest(array $data) {
+ $this->setSourceID(idx($data, 'id'));
+ }
+
+ public function processRequest() {
+ $request = $this->getRequest();
+ $user = $request->getUser();
+
+ $source_id = $this->getSourceID();
+ $is_new = !$source_id;
+
+ if ($is_new) {
+ $source = new NuanceSource();
+
+ } else {
+ $source = id(new NuanceSourceQuery())
+ ->setViewer($user)
+ ->withIDs(array($source_id))
+ ->executeOne();
+ }
+
+ if (!$source) {
+ return new Aphront404Response();
+ }
+
+ $crumbs = $this->buildApplicationCrumbs();
+ $title = 'TODO';
+
+ return $this->buildApplicationPage(
+ $crumbs,
+ array(
+ 'title' => $title,
+ 'device' => true));
+ }
+}
diff --git a/src/applications/nuance/controller/NuanceSourceViewController.php b/src/applications/nuance/controller/NuanceSourceViewController.php
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/controller/NuanceSourceViewController.php
@@ -0,0 +1,42 @@
+<?php
+
+final class NuanceSourceViewController extends NuanceController {
+
+ private $sourceID;
+
+ public function setSourceID($source_id) {
+ $this->sourceID = $source_id;
+ return $this;
+ }
+ public function getSourceID() {
+ return $this->sourceID;
+ }
+
+ public function willProcessRequest(array $data) {
+ $this->setSourceID($data['id']);
+ }
+
+ public function processRequest() {
+ $request = $this->getRequest();
+ $user = $request->getUser();
+
+ $source_id = $this->getSourceID();
+ $source = id(new NuanceSourceQuery())
+ ->setViewer($user)
+ ->withIDs(array($source_id))
+ ->executeOne();
+
+ if (!$source) {
+ return new Aphront404Response();
+ }
+
+ $crumbs = $this->buildApplicationCrumbs();
+ $title = 'TODO';
+
+ return $this->buildApplicationPage(
+ $crumbs,
+ array(
+ 'title' => $title,
+ 'device' => true));
+ }
+}
diff --git a/src/applications/nuance/editor/NuanceItemEditor.php b/src/applications/nuance/editor/NuanceItemEditor.php
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/editor/NuanceItemEditor.php
@@ -0,0 +1,17 @@
+<?php
+
+final class NuanceItemEditor
+ extends PhabricatorApplicationTransactionEditor {
+
+ public function getTransactionTypes() {
+ $types = parent::getTransactionTypes();
+
+ $types[] = PhabricatorTransactions::TYPE_EDGE;
+ $types[] = PhabricatorTransactions::TYPE_COMMENT;
+ $types[] = PhabricatorTransactions::TYPE_VIEW_POLICY;
+ $types[] = PhabricatorTransactions::TYPE_EDIT_POLICY;
+
+ return $types;
+ }
+
+}
diff --git a/src/applications/nuance/editor/NuanceQueueEditor.php b/src/applications/nuance/editor/NuanceQueueEditor.php
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/editor/NuanceQueueEditor.php
@@ -0,0 +1,17 @@
+<?php
+
+final class NuanceQueueEditor
+ extends PhabricatorApplicationTransactionEditor {
+
+ public function getTransactionTypes() {
+ $types = parent::getTransactionTypes();
+
+ $types[] = PhabricatorTransactions::TYPE_EDGE;
+ $types[] = PhabricatorTransactions::TYPE_COMMENT;
+ $types[] = PhabricatorTransactions::TYPE_VIEW_POLICY;
+ $types[] = PhabricatorTransactions::TYPE_EDIT_POLICY;
+
+ return $types;
+ }
+
+}
diff --git a/src/applications/nuance/editor/NuanceRequestorEditor.php b/src/applications/nuance/editor/NuanceRequestorEditor.php
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/editor/NuanceRequestorEditor.php
@@ -0,0 +1,17 @@
+<?php
+
+final class NuanceRequestorEditor
+ extends PhabricatorApplicationTransactionEditor {
+
+ public function getTransactionTypes() {
+ $types = parent::getTransactionTypes();
+
+ $types[] = PhabricatorTransactions::TYPE_EDGE;
+ $types[] = PhabricatorTransactions::TYPE_COMMENT;
+ $types[] = PhabricatorTransactions::TYPE_VIEW_POLICY;
+ $types[] = PhabricatorTransactions::TYPE_EDIT_POLICY;
+
+ return $types;
+ }
+
+}
diff --git a/src/applications/nuance/editor/NuanceSourceEditor.php b/src/applications/nuance/editor/NuanceSourceEditor.php
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/editor/NuanceSourceEditor.php
@@ -0,0 +1,17 @@
+<?php
+
+final class NuanceSourceEditor
+ extends PhabricatorApplicationTransactionEditor {
+
+ public function getTransactionTypes() {
+ $types = parent::getTransactionTypes();
+
+ $types[] = PhabricatorTransactions::TYPE_EDGE;
+ $types[] = PhabricatorTransactions::TYPE_COMMENT;
+ $types[] = PhabricatorTransactions::TYPE_VIEW_POLICY;
+ $types[] = PhabricatorTransactions::TYPE_EDIT_POLICY;
+
+ return $types;
+ }
+
+}
diff --git a/src/applications/nuance/phid/NuancePHIDTypeItem.php b/src/applications/nuance/phid/NuancePHIDTypeItem.php
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/phid/NuancePHIDTypeItem.php
@@ -0,0 +1,46 @@
+<?php
+
+final class NuancePHIDTypeItem
+ extends PhabricatorPHIDType {
+
+ const TYPECONST = 'NUAI';
+
+ public function getTypeConstant() {
+ return self::TYPECONST;
+ }
+
+ public function getTypeName() {
+ return pht('Item');
+ }
+
+ public function newObject() {
+ return new NuanceItem();
+ }
+
+ protected function buildQueryForObjects(
+ PhabricatorObjectQuery $query,
+ array $phids) {
+
+ return id(new NuanceItemQuery())
+ ->withPHIDs($phids);
+ }
+
+ public function loadHandles(
+ PhabricatorHandleQuery $query,
+ array $handles,
+ array $objects) {
+
+ $viewer = $query->getViewer();
+ foreach ($handles as $phid => $handle) {
+ $item = $objects[$phid];
+
+ $handle->setName($item->getLabel($viewer));
+ $handle->setURI($item->getURI());
+ }
+ }
+
+ public function canLoadNamedObject($name) {
+ return false;
+ }
+
+}
diff --git a/src/applications/nuance/phid/NuancePHIDTypeQueue.php b/src/applications/nuance/phid/NuancePHIDTypeQueue.php
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/phid/NuancePHIDTypeQueue.php
@@ -0,0 +1,46 @@
+<?php
+
+final class NuancePHIDTypeQueue
+ extends PhabricatorPHIDType {
+
+ const TYPECONST = 'NUAQ';
+
+ public function getTypeConstant() {
+ return self::TYPECONST;
+ }
+
+ public function getTypeName() {
+ return pht('Queue');
+ }
+
+ public function newObject() {
+ return new NuanceQueue();
+ }
+
+ protected function buildQueryForObjects(
+ PhabricatorObjectQuery $query,
+ array $phids) {
+
+ return id(new NuanceQueueQuery())
+ ->withPHIDs($phids);
+ }
+
+ public function loadHandles(
+ PhabricatorHandleQuery $query,
+ array $handles,
+ array $objects) {
+
+ $viewer = $query->getViewer();
+ foreach ($handles as $phid => $handle) {
+ $queue = $objects[$phid];
+
+ $handle->setName($queue->getName());
+ $handle->setURI($queue->getURI());
+ }
+ }
+
+ public function canLoadNamedObject($name) {
+ return false;
+ }
+
+}
diff --git a/src/applications/nuance/phid/NuancePHIDTypeRequestor.php b/src/applications/nuance/phid/NuancePHIDTypeRequestor.php
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/phid/NuancePHIDTypeRequestor.php
@@ -0,0 +1,46 @@
+<?php
+
+final class NuancePHIDTypeRequestor
+ extends PhabricatorPHIDType {
+
+ const TYPECONST = 'NUAR';
+
+ public function getTypeConstant() {
+ return self::TYPECONST;
+ }
+
+ public function getTypeName() {
+ return pht('Requestor');
+ }
+
+ public function newObject() {
+ return new NuanceRequestor();
+ }
+
+ protected function buildQueryForObjects(
+ PhabricatorObjectQuery $query,
+ array $phids) {
+
+ return id(new NuanceRequestorQuery())
+ ->withPHIDs($phids);
+ }
+
+ public function loadHandles(
+ PhabricatorHandleQuery $query,
+ array $handles,
+ array $objects) {
+
+ $viewer = $query->getViewer();
+ foreach ($handles as $phid => $handle) {
+ $requestor = $objects[$phid];
+
+ $handle->setName($requestor->getBestName());
+ $handle->setURI($requestor->getURI());
+ }
+ }
+
+ public function canLoadNamedObject($name) {
+ return false;
+ }
+
+}
diff --git a/src/applications/nuance/phid/NuancePHIDTypeSource.php b/src/applications/nuance/phid/NuancePHIDTypeSource.php
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/phid/NuancePHIDTypeSource.php
@@ -0,0 +1,46 @@
+<?php
+
+final class NuancePHIDTypeSource
+ extends PhabricatorPHIDType {
+
+ const TYPECONST = 'NUAS';
+
+ public function getTypeConstant() {
+ return self::TYPECONST;
+ }
+
+ public function getTypeName() {
+ return pht('Source');
+ }
+
+ public function newObject() {
+ return new NuanceSource();
+ }
+
+ protected function buildQueryForObjects(
+ PhabricatorObjectQuery $query,
+ array $phids) {
+
+ return id(new NuanceSourceQuery())
+ ->withPHIDs($phids);
+ }
+
+ public function loadHandles(
+ PhabricatorHandleQuery $query,
+ array $handles,
+ array $objects) {
+
+ $viewer = $query->getViewer();
+ foreach ($handles as $phid => $handle) {
+ $source = $objects[$phid];
+
+ $handle->setName($source->getName());
+ $handle->setURI($source->getURI());
+ }
+ }
+
+ public function canLoadNamedObject($name) {
+ return false;
+ }
+
+}
diff --git a/src/applications/nuance/query/NuanceItemQuery.php b/src/applications/nuance/query/NuanceItemQuery.php
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/query/NuanceItemQuery.php
@@ -0,0 +1,71 @@
+<?php
+
+final class NuanceItemQuery
+ extends NuanceQuery {
+
+ private $ids;
+ private $phids;
+ private $sourceIDs;
+
+ public function withIDs(array $ids) {
+ $this->ids = $ids;
+ return $this;
+ }
+
+ public function withPHIDs(array $phids) {
+ $this->phids = $phids;
+ return $this;
+ }
+
+ public function withSourceIDs($source_ids) {
+ $this->sourceIDs = $source_ids;
+ return $this;
+ }
+
+
+ public function loadPage() {
+ $table = new NuanceItem();
+ $conn_r = $table->establishConnection('r');
+
+ $data = 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($data);
+ }
+
+ protected function buildWhereClause($conn_r) {
+ $where = array();
+
+ $where[] = $this->buildPagingClause($conn_r);
+
+ if ($this->sourceID) {
+ $where[] = qsprintf(
+ $conn_r,
+ 'sourceID IN (%Ld)',
+ $this->sourceIDs);
+ }
+
+ if ($this->ids) {
+ $where[] = qsprintf(
+ $conn_r,
+ 'id IN (%Ld)',
+ $this->ids);
+ }
+
+ if ($this->phids) {
+ $where[] = qsprintf(
+ $conn_r,
+ 'phid IN (%Ls)',
+ $this->phids);
+ }
+
+ return $this->formatWhereClause($where);
+ }
+
+}
+
diff --git a/src/applications/nuance/query/NuanceItemTransactionQuery.php b/src/applications/nuance/query/NuanceItemTransactionQuery.php
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/query/NuanceItemTransactionQuery.php
@@ -0,0 +1,10 @@
+<?php
+
+final class NuanceItemTransactionQuery
+ extends PhabricatorApplicationTransactionQuery {
+
+ public function getTemplateApplicationTransaction() {
+ return new NuanceItemTransaction();
+ }
+
+}
diff --git a/src/applications/nuance/query/NuanceQuery.php b/src/applications/nuance/query/NuanceQuery.php
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/query/NuanceQuery.php
@@ -0,0 +1,11 @@
+<?php
+
+abstract class NuanceQuery
+ extends PhabricatorCursorPagedPolicyAwareQuery {
+
+ public function getQueryApplicationClass() {
+ return 'PhabricatorApplicationNuance';
+ }
+
+}
+
diff --git a/src/applications/nuance/query/NuanceQueueQuery.php b/src/applications/nuance/query/NuanceQueueQuery.php
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/query/NuanceQueueQuery.php
@@ -0,0 +1,57 @@
+<?php
+
+final class NuanceQueueQuery
+ extends NuanceQuery {
+
+ private $ids;
+ private $phids;
+
+ public function withIDs(array $ids) {
+ $this->ids = $ids;
+ return $this;
+ }
+
+ public function withPHIDs(array $phids) {
+ $this->phids = $phids;
+ return $this;
+ }
+
+ public function loadPage() {
+ $table = new NuanceQueue();
+ $conn_r = $table->establishConnection('r');
+
+ $data = 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($data);
+ }
+
+ protected function buildWhereClause($conn_r) {
+ $where = array();
+
+ $where[] = $this->buildPagingClause($conn_r);
+
+ if ($this->ids) {
+ $where[] = qsprintf(
+ $conn_r,
+ 'id IN (%Ld)',
+ $this->ids);
+ }
+
+ if ($this->phids) {
+ $where[] = qsprintf(
+ $conn_r,
+ 'phid IN (%Ls)',
+ $this->phids);
+ }
+
+ return $this->formatWhereClause($where);
+ }
+
+}
+
diff --git a/src/applications/nuance/query/NuanceQueueTransactionQuery.php b/src/applications/nuance/query/NuanceQueueTransactionQuery.php
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/query/NuanceQueueTransactionQuery.php
@@ -0,0 +1,10 @@
+<?php
+
+final class NuanceQueueTransactionQuery
+ extends PhabricatorApplicationTransactionQuery {
+
+ public function getTemplateApplicationTransaction() {
+ return new NuanceQueueTransaction();
+ }
+
+}
diff --git a/src/applications/nuance/query/NuanceRequestorQuery.php b/src/applications/nuance/query/NuanceRequestorQuery.php
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/query/NuanceRequestorQuery.php
@@ -0,0 +1,57 @@
+<?php
+
+final class NuanceRequestorQuery
+ extends NuanceQuery {
+
+ private $ids;
+ private $phids;
+
+ public function withIDs(array $ids) {
+ $this->ids = $ids;
+ return $this;
+ }
+
+ public function withPHIDs(array $phids) {
+ $this->phids = $phids;
+ return $this;
+ }
+
+ public function loadPage() {
+ $table = new NuanceRequestor();
+ $conn_r = $table->establishConnection('r');
+
+ $data = 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($data);
+ }
+
+ protected function buildWhereClause($conn_r) {
+ $where = array();
+
+ $where[] = $this->buildPagingClause($conn_r);
+
+ if ($this->ids) {
+ $where[] = qsprintf(
+ $conn_r,
+ 'id IN (%Ld)',
+ $this->ids);
+ }
+
+ if ($this->phids) {
+ $where[] = qsprintf(
+ $conn_r,
+ 'phid IN (%Ls)',
+ $this->phids);
+ }
+
+ return $this->formatWhereClause($where);
+ }
+
+}
+
diff --git a/src/applications/nuance/query/NuanceRequestorTransactionQuery.php b/src/applications/nuance/query/NuanceRequestorTransactionQuery.php
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/query/NuanceRequestorTransactionQuery.php
@@ -0,0 +1,10 @@
+<?php
+
+final class NuanceRequestorTransactionQuery
+ extends PhabricatorApplicationTransactionQuery {
+
+ public function getTemplateApplicationTransaction() {
+ return new NuanceRequestorTransaction();
+ }
+
+}
diff --git a/src/applications/nuance/query/NuanceSourceQuery.php b/src/applications/nuance/query/NuanceSourceQuery.php
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/query/NuanceSourceQuery.php
@@ -0,0 +1,83 @@
+<?php
+
+final class NuanceSourceQuery
+ extends NuanceQuery {
+
+ private $ids;
+ private $phids;
+ private $creatorPHIDs;
+ private $types;
+
+ public function withIDs(array $ids) {
+ $this->ids = $ids;
+ return $this;
+ }
+
+ public function withPHIDs(array $phids) {
+ $this->phids = $phids;
+ return $this;
+ }
+
+ public function withCreatorPHIDs(array $phids) {
+ $this->CreatorPHIDs = $phids;
+ return $this;
+ }
+
+ public function withTypes($types) {
+ $this->types = $types;
+ return $this;
+ }
+
+
+ public function loadPage() {
+ $table = new NuanceSource();
+ $conn_r = $table->establishConnection('r');
+
+ $data = 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($data);
+ }
+
+ protected function buildWhereClause($conn_r) {
+ $where = array();
+
+ $where[] = $this->buildPagingClause($conn_r);
+
+ if ($this->creatorPHIDs) {
+ $where[] = qsprintf(
+ $conn_r,
+ 'creatorPHID IN (%Ls)',
+ $this->creatorPHIDs);
+ }
+
+ if ($this->types) {
+ $where[] = qsprintf(
+ $conn_r,
+ 'type IN (%Ld)',
+ $this->types);
+ }
+
+ if ($this->ids) {
+ $where[] = qsprintf(
+ $conn_r,
+ 'id IN (%Ld)',
+ $this->ids);
+ }
+
+ if ($this->phids) {
+ $where[] = qsprintf(
+ $conn_r,
+ 'phid IN (%Ls)',
+ $this->phids);
+ }
+
+ return $this->formatWhereClause($where);
+ }
+
+}
diff --git a/src/applications/nuance/query/NuanceSourceTransactionQuery.php b/src/applications/nuance/query/NuanceSourceTransactionQuery.php
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/query/NuanceSourceTransactionQuery.php
@@ -0,0 +1,10 @@
+<?php
+
+final class NuanceSourceTransactionQuery
+ extends PhabricatorApplicationTransactionQuery {
+
+ public function getTemplateApplicationTransaction() {
+ return new NuanceSourceTransaction();
+ }
+
+}
diff --git a/src/applications/nuance/storage/NuanceDAO.php b/src/applications/nuance/storage/NuanceDAO.php
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/storage/NuanceDAO.php
@@ -0,0 +1,9 @@
+<?php
+
+abstract class NuanceDAO extends PhabricatorLiskDAO {
+
+ public function getApplicationName() {
+ return 'nuance';
+ }
+
+}
diff --git a/src/applications/nuance/storage/NuanceItem.php b/src/applications/nuance/storage/NuanceItem.php
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/storage/NuanceItem.php
@@ -0,0 +1,95 @@
+<?php
+
+final class NuanceItem
+ extends NuanceDAO
+ implements PhabricatorPolicyInterface {
+
+ protected $ownerPHID;
+ protected $requestorPHID;
+ protected $sourcePHID;
+ protected $sourceLabel;
+ protected $data;
+ protected $mailKey;
+ protected $dateNuanced;
+
+ public function getConfiguration() {
+ return array(
+ self::CONFIG_AUX_PHID => true,
+ self::CONFIG_SERIALIZATION => array(
+ 'data' => self::SERIALIZATION_JSON,
+ ),
+ ) + parent::getConfiguration();
+ }
+
+ public function generatePHID() {
+ return PhabricatorPHID::generateNewPHID(
+ NuancePHIDTypeItem::TYPECONST);
+ }
+
+ public function save() {
+ if (!$this->getMailKey()) {
+ $this->setMailKey(Filesystem::readRandomCharacters(20));
+ }
+ return parent::save();
+ }
+
+ public function getURI() {
+ return '/nuance/item/view/'.$this->getID().'/';
+ }
+
+ public function getLabel(PhabricatorUser $viewer) {
+ // this is generated at the time the item is created based on
+ // the configuration from the item source. It is typically
+ // something like 'Twitter'.
+ $source_label = $this->getSourceLabel();
+
+ return pht(
+ 'Item via %s @ %s.',
+ $source_label,
+ phabricator_datetime($this->getDateCreated(), $viewer));
+ }
+
+ public function getRequestor() {
+ return $this->assertAttached($this->requestor);
+ }
+
+ public function attachRequestor(NuanceRequestor $requestor) {
+ return $this->requestor = $requestor;
+ }
+
+ public function getSource() {
+ return $this->assertAttached($this->source);
+ }
+
+ public function attachSource(NuanceSource $source) {
+ $this->source = $source;
+ }
+
+ public function getCapabilities() {
+ return array(
+ PhabricatorPolicyCapability::CAN_VIEW,
+ PhabricatorPolicyCapability::CAN_EDIT,
+ );
+ }
+
+ public function getPolicy($capability) {
+ // TODO - this should be based on the queues the item currently resides in
+ return PhabricatorPolicies::POLICY_NOONE;
+ }
+
+ public function hasAutomaticCapability($capability, PhabricatorUser $viewer) {
+ // TODO - requestors should get auto access too!
+ return $viewer->getPHID() == $this->ownerPHID;
+ }
+
+ public function describeAutomaticCapability($capability) {
+ switch ($capability) {
+ case PhabricatorPolicyCapability::CAN_VIEW:
+ return pht('Owners of an item can always view it.');
+ case PhabricatorPolicyCapability::CAN_EDIT:
+ return pht('Owners of an item can always edit it.');
+ }
+ return null;
+ }
+
+}
diff --git a/src/applications/nuance/storage/NuanceItemTransaction.php b/src/applications/nuance/storage/NuanceItemTransaction.php
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/storage/NuanceItemTransaction.php
@@ -0,0 +1,14 @@
+<?php
+
+final class NuanceItemTransaction
+ extends NuanceTransaction {
+
+ public function getApplicationTransactionType() {
+ return NuancePHIDTypeItem::TYPECONST;
+ }
+
+ public function getApplicationTransactionCommentObject() {
+ return new NuanceItemTransactionComment();
+ }
+
+}
diff --git a/src/applications/nuance/storage/NuanceItemTransactionComment.php b/src/applications/nuance/storage/NuanceItemTransactionComment.php
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/storage/NuanceItemTransactionComment.php
@@ -0,0 +1,10 @@
+<?php
+
+final class NuanceItemTransactionComment
+ extends PhabricatorApplicationTransactionComment {
+
+ public function getApplicationTransactionObject() {
+ return new NuanceItemTransaction();
+ }
+
+}
diff --git a/src/applications/nuance/storage/NuanceQueue.php b/src/applications/nuance/storage/NuanceQueue.php
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/storage/NuanceQueue.php
@@ -0,0 +1,58 @@
+<?php
+
+final class NuanceQueue
+ extends NuanceDAO
+ implements PhabricatorPolicyInterface {
+
+ protected $name;
+ protected $mailKey;
+ protected $viewPolicy;
+ protected $editPolicy;
+
+ public function getConfiguration() {
+ return array(
+ self::CONFIG_AUX_PHID => true,
+ ) + parent::getConfiguration();
+ }
+
+ public function generatePHID() {
+ return PhabricatorPHID::generateNewPHID(
+ NuancePHIDTypeQueue::TYPECONST);
+ }
+
+ public function save() {
+ if (!$this->getMailKey()) {
+ $this->setMailKey(Filesystem::readRandomCharacters(20));
+ }
+ return parent::save();
+ }
+
+ public function getURI() {
+ return '/nuance/queue/view/'.$this->getID().'/';
+ }
+
+ public function getCapabilities() {
+ return array(
+ PhabricatorPolicyCapability::CAN_VIEW,
+ PhabricatorPolicyCapability::CAN_EDIT,
+ );
+ }
+
+ public function getPolicy($capability) {
+ switch ($capability) {
+ case PhabricatorPolicyCapability::CAN_VIEW:
+ return $this->getViewPolicy();
+ case PhabricatorPolicyCapability::CAN_EDIT:
+ return $this->getEditPolicy();
+ }
+ }
+
+ public function hasAutomaticCapability($capability, PhabricatorUser $viewer) {
+ return false;
+ }
+
+ public function describeAutomaticCapability($capability) {
+ return null;
+ }
+
+}
diff --git a/src/applications/nuance/storage/NuanceQueueItem.php b/src/applications/nuance/storage/NuanceQueueItem.php
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/storage/NuanceQueueItem.php
@@ -0,0 +1,12 @@
+<?php
+
+final class NuanceQueueItem
+ extends NuanceDAO {
+
+ protected $queuePHID;
+ protected $itemPHID;
+ protected $itemStatus;
+ protected $itemDateNuanced;
+
+
+}
diff --git a/src/applications/nuance/storage/NuanceQueueTransaction.php b/src/applications/nuance/storage/NuanceQueueTransaction.php
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/storage/NuanceQueueTransaction.php
@@ -0,0 +1,14 @@
+<?php
+
+final class NuanceQueueTransaction
+ extends NuanceTransaction {
+
+ public function getApplicationTransactionType() {
+ return NuancePHIDTypeQueue::TYPECONST;
+ }
+
+ public function getApplicationTransactionCommentObject() {
+ return new NuanceQueueTransactionComment();
+ }
+
+}
diff --git a/src/applications/nuance/storage/NuanceQueueTransactionComment.php b/src/applications/nuance/storage/NuanceQueueTransactionComment.php
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/storage/NuanceQueueTransactionComment.php
@@ -0,0 +1,10 @@
+<?php
+
+final class NuanceQueueTransactionComment
+ extends PhabricatorApplicationTransactionComment {
+
+ public function getApplicationTransactionObject() {
+ return new NuanceQueueTransaction();
+ }
+
+}
diff --git a/src/applications/nuance/storage/NuanceRequestor.php b/src/applications/nuance/storage/NuanceRequestor.php
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/storage/NuanceRequestor.php
@@ -0,0 +1,37 @@
+<?php
+
+final class NuanceRequestor
+ extends NuanceDAO {
+
+ protected $data;
+
+ public function getConfiguration() {
+ return array(
+ self::CONFIG_AUX_PHID => true,
+ self::CONFIG_SERIALIZATION => array(
+ 'data' => self::SERIALIZATION_JSON,
+ ),
+ ) + parent::getConfiguration();
+ }
+
+ public function generatePHID() {
+ return PhabricatorPHID::generateNewPHID(
+ NuancePHIDTypeRequestor::TYPECONST);
+ }
+
+ public function save() {
+ if (!$this->getMailKey()) {
+ $this->setMailKey(Filesystem::readRandomCharacters(20));
+ }
+ return parent::save();
+ }
+
+ public function getURI() {
+ return '/nuance/requestor/view/'.$this->getID().'/';
+ }
+
+ public function getPhabricatorUserPHID() {
+ return idx($this->getData(), 'phabricatorUserPHID');
+ }
+
+}
diff --git a/src/applications/nuance/storage/NuanceRequestorSource.php b/src/applications/nuance/storage/NuanceRequestorSource.php
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/storage/NuanceRequestorSource.php
@@ -0,0 +1,18 @@
+<?php
+
+final class NuanceRequestorSource
+ extends NuanceDAO {
+
+ protected $requestorPHID;
+ protected $sourcePHID;
+ protected $data;
+
+ public function getConfiguration() {
+ return array(
+ self::CONFIG_SERIALIZATION => array(
+ 'data' => self::SERIALIZATION_JSON,
+ ),
+ ) + parent::getConfiguration();
+ }
+
+}
diff --git a/src/applications/nuance/storage/NuanceRequestorTransaction.php b/src/applications/nuance/storage/NuanceRequestorTransaction.php
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/storage/NuanceRequestorTransaction.php
@@ -0,0 +1,13 @@
+<?php
+
+final class NuanceRequestorTransaction
+ extends NuanceTransaction {
+
+ public function getApplicationTransactionType() {
+ return NuancePHIDTypeRequestor::TYPECONST;
+ }
+
+ public function getApplicationTransactionCommentObject() {
+ return new NuanceRequestorTransactionComment();
+ }
+}
diff --git a/src/applications/nuance/storage/NuanceRequestorTransactionComment.php b/src/applications/nuance/storage/NuanceRequestorTransactionComment.php
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/storage/NuanceRequestorTransactionComment.php
@@ -0,0 +1,10 @@
+<?php
+
+final class NuanceRequestorTransactionComment
+ extends PhabricatorApplicationTransactionComment {
+
+ public function getApplicationTransactionObject() {
+ return new NuanceRequestorTransaction();
+ }
+
+}
diff --git a/src/applications/nuance/storage/NuanceSource.php b/src/applications/nuance/storage/NuanceSource.php
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/storage/NuanceSource.php
@@ -0,0 +1,64 @@
+<?php
+
+final class NuanceSource
+ extends NuanceDAO
+ implements PhabricatorPolicyInterface {
+
+ protected $name;
+ protected $type;
+ protected $data;
+ protected $mailKey;
+ protected $viewPolicy;
+ protected $editPolicy;
+
+ public function getConfiguration() {
+ return array(
+ self::CONFIG_AUX_PHID => true,
+ self::CONFIG_SERIALIZATION => array(
+ 'data' => self::SERIALIZATION_JSON,
+ ),
+ ) + parent::getConfiguration();
+ }
+
+ public function generatePHID() {
+ return PhabricatorPHID::generateNewPHID(
+ NuancePHIDTypeSource::TYPECONST);
+ }
+
+ public function save() {
+ if (!$this->getMailKey()) {
+ $this->setMailKey(Filesystem::readRandomCharacters(20));
+ }
+ return parent::save();
+ }
+
+ public function getURI() {
+ return '/nuance/source/view/'.$this->getID().'/';
+ }
+
+ public function getCapabilities() {
+ return array(
+ PhabricatorPolicyCapability::CAN_VIEW,
+ PhabricatorPolicyCapability::CAN_EDIT,
+ );
+ }
+
+ public function getPolicy($capability) {
+ switch ($capability) {
+ case PhabricatorPolicyCapability::CAN_VIEW:
+ return $this->getViewPolicy();
+ case PhabricatorPolicyCapability::CAN_EDIT:
+ return $this->getEditPolicy();
+ }
+ }
+
+ public function hasAutomaticCapability($capability, PhabricatorUser $viewer) {
+ return false;
+ }
+
+ public function describeAutomaticCapability($capability) {
+ return null;
+ }
+
+
+}
diff --git a/src/applications/nuance/storage/NuanceSourceTransaction.php b/src/applications/nuance/storage/NuanceSourceTransaction.php
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/storage/NuanceSourceTransaction.php
@@ -0,0 +1,14 @@
+<?php
+
+final class NuanceSourceTransaction
+ extends NuanceTransaction {
+
+ public function getApplicationTransactionType() {
+ return NuancePHIDTypeSource::TYPECONST;
+ }
+
+ public function getApplicationTransactionCommentObject() {
+ return new NuanceSourceTransactionComment();
+ }
+
+}
diff --git a/src/applications/nuance/storage/NuanceSourceTransactionComment.php b/src/applications/nuance/storage/NuanceSourceTransactionComment.php
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/storage/NuanceSourceTransactionComment.php
@@ -0,0 +1,10 @@
+<?php
+
+final class NuanceSourceTransactionComment
+ extends PhabricatorApplicationTransactionComment {
+
+ public function getApplicationTransactionObject() {
+ return new NuanceSourceTransaction();
+ }
+
+}
diff --git a/src/applications/nuance/storage/NuanceTransaction.php b/src/applications/nuance/storage/NuanceTransaction.php
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/storage/NuanceTransaction.php
@@ -0,0 +1,10 @@
+<?php
+
+abstract class NuanceTransaction
+ extends PhabricatorApplicationTransaction {
+
+ public function getApplicationName() {
+ return 'nuance';
+ }
+
+}
diff --git a/src/infrastructure/storage/patch/PhabricatorBuiltinPatchList.php b/src/infrastructure/storage/patch/PhabricatorBuiltinPatchList.php
--- a/src/infrastructure/storage/patch/PhabricatorBuiltinPatchList.php
+++ b/src/infrastructure/storage/patch/PhabricatorBuiltinPatchList.php
@@ -208,6 +208,10 @@
'type' => 'db',
'name' => 'policy',
),
+ 'db.nuance' => array(
+ 'type' => 'db',
+ 'name' => 'nuance',
+ ),
'0000.legacy.sql' => array(
'type' => 'sql',
'name' => $this->getPatchPath('0000.legacy.sql'),
@@ -1736,6 +1740,10 @@
'type' => 'sql',
'name' => $this->getPatchPath('20131106.diffphid.3.key.sql'),
),
+ '20131106.nuance-v0.sql' => array(
+ 'type' => 'sql',
+ 'name' => $this->getPatchPath('20131106.nuance-v0.sql'),
+ ),
);
}
}
diff --git a/webroot/rsrc/css/sprite-apps-large.css b/webroot/rsrc/css/sprite-apps-large.css
--- a/webroot/rsrc/css/sprite-apps-large.css
+++ b/webroot/rsrc/css/sprite-apps-large.css
@@ -482,51 +482,51 @@
background-position: -290px -203px;
}
-.apps-owners-light-large {
+.apps-nuance-light-large {
background-position: -319px -203px;
}
-.apps-owners-dark-large {
+.apps-nuance-dark-large {
background-position: -348px -203px;
}
-.apps-owners-blue-large, .phabricator-crumb-view:hover .apps-owners-dark-large {
+.apps-nuance-blue-large, .phabricator-crumb-view:hover .apps-nuance-dark-large {
background-position: -377px -203px;
}
-.apps-owners-white-large {
+.apps-nuance-white-large {
background-position: -406px -203px;
}
-.apps-paste-light-large {
+.apps-owners-light-large {
background-position: 0px -232px;
}
-.apps-paste-dark-large {
+.apps-owners-dark-large {
background-position: -29px -232px;
}
-.apps-paste-blue-large, .phabricator-crumb-view:hover .apps-paste-dark-large {
+.apps-owners-blue-large, .phabricator-crumb-view:hover .apps-owners-dark-large {
background-position: -58px -232px;
}
-.apps-paste-white-large {
+.apps-owners-white-large {
background-position: -87px -232px;
}
-.apps-pebkac-light-large {
+.apps-paste-light-large {
background-position: -116px -232px;
}
-.apps-pebkac-dark-large {
+.apps-paste-dark-large {
background-position: -145px -232px;
}
-.apps-pebkac-blue-large, .phabricator-crumb-view:hover .apps-pebkac-dark-large {
+.apps-paste-blue-large, .phabricator-crumb-view:hover .apps-paste-dark-large {
background-position: -174px -232px;
}
-.apps-pebkac-white-large {
+.apps-paste-white-large {
background-position: -203px -232px;
}
diff --git a/webroot/rsrc/css/sprite-apps.css b/webroot/rsrc/css/sprite-apps.css
--- a/webroot/rsrc/css/sprite-apps.css
+++ b/webroot/rsrc/css/sprite-apps.css
@@ -250,27 +250,27 @@
background-position: -75px -75px;
}
-.apps-owners-dark {
+.apps-nuance-dark {
background-position: -90px -75px;
}
-.apps-owners-white {
+.apps-nuance-white {
background-position: -105px -75px;
}
-.apps-paste-dark {
+.apps-owners-dark {
background-position: -120px -75px;
}
-.apps-paste-white {
+.apps-owners-white {
background-position: -135px -75px;
}
-.apps-pebkac-dark {
+.apps-paste-dark {
background-position: 0px -90px;
}
-.apps-pebkac-white {
+.apps-paste-white {
background-position: -15px -90px;
}
diff --git a/webroot/rsrc/image/sprite-apps-X2.png b/webroot/rsrc/image/sprite-apps-X2.png
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
literal 0
Hc$@<O00001
diff --git a/webroot/rsrc/image/sprite-apps-large-X2.png b/webroot/rsrc/image/sprite-apps-large-X2.png
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
literal 0
Hc$@<O00001
diff --git a/webroot/rsrc/image/sprite-apps-large.png b/webroot/rsrc/image/sprite-apps-large.png
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
literal 0
Hc$@<O00001
diff --git a/webroot/rsrc/image/sprite-apps.png b/webroot/rsrc/image/sprite-apps.png
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001
literal 0
Hc$@<O00001
File Metadata
Details
Attached
Mime Type
text/x-diff
Storage Engine
amazon-s3
Storage Format
Raw Data
Storage Handle
phabricator/lz/3f/vwh42w2oo4bj4tyu
Default Alt Text
D7465.diff (69 KB)
Attached To
Mode
D7465: Nuance - get some scaffolding up there
Attached
Detach File
Event Timeline
Log In to Comment