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 @@ -44,6 +44,8 @@ 'AlmanacCreateServicesCapability' => 'applications/almanac/capability/AlmanacCreateServicesCapability.php', 'AlmanacCustomServiceType' => 'applications/almanac/servicetype/AlmanacCustomServiceType.php', 'AlmanacDAO' => 'applications/almanac/storage/AlmanacDAO.php', + 'AlmanacDeletePropertyEditField' => 'applications/almanac/engineextension/AlmanacDeletePropertyEditField.php', + 'AlmanacDeletePropertyEditType' => 'applications/almanac/engineextension/AlmanacDeletePropertyEditType.php', 'AlmanacDevice' => 'applications/almanac/storage/AlmanacDevice.php', 'AlmanacDeviceController' => 'applications/almanac/controller/AlmanacDeviceController.php', 'AlmanacDeviceDeletePropertyTransaction' => 'applications/almanac/xaction/AlmanacDeviceDeletePropertyTransaction.php', @@ -129,6 +131,7 @@ 'AlmanacNetworkTransactionType' => 'applications/almanac/xaction/AlmanacNetworkTransactionType.php', 'AlmanacNetworkViewController' => 'applications/almanac/controller/AlmanacNetworkViewController.php', 'AlmanacPropertiesDestructionEngineExtension' => 'applications/almanac/engineextension/AlmanacPropertiesDestructionEngineExtension.php', + 'AlmanacPropertiesEditEngineExtension' => 'applications/almanac/engineextension/AlmanacPropertiesEditEngineExtension.php', 'AlmanacPropertiesSearchEngineAttachment' => 'applications/almanac/engineextension/AlmanacPropertiesSearchEngineAttachment.php', 'AlmanacProperty' => 'applications/almanac/storage/AlmanacProperty.php', 'AlmanacPropertyController' => 'applications/almanac/controller/AlmanacPropertyController.php', @@ -165,6 +168,8 @@ 'AlmanacServiceTypeTestCase' => 'applications/almanac/servicetype/__tests__/AlmanacServiceTypeTestCase.php', 'AlmanacServiceTypeTransaction' => 'applications/almanac/xaction/AlmanacServiceTypeTransaction.php', 'AlmanacServiceViewController' => 'applications/almanac/controller/AlmanacServiceViewController.php', + 'AlmanacSetPropertyEditField' => 'applications/almanac/engineextension/AlmanacSetPropertyEditField.php', + 'AlmanacSetPropertyEditType' => 'applications/almanac/engineextension/AlmanacSetPropertyEditType.php', 'AlmanacTransactionType' => 'applications/almanac/xaction/AlmanacTransactionType.php', 'AphlictDropdownDataQuery' => 'applications/aphlict/query/AphlictDropdownDataQuery.php', 'Aphront304Response' => 'aphront/response/Aphront304Response.php', @@ -5245,6 +5250,8 @@ 'AlmanacCreateServicesCapability' => 'PhabricatorPolicyCapability', 'AlmanacCustomServiceType' => 'AlmanacServiceType', 'AlmanacDAO' => 'PhabricatorLiskDAO', + 'AlmanacDeletePropertyEditField' => 'PhabricatorEditField', + 'AlmanacDeletePropertyEditType' => 'PhabricatorEditType', 'AlmanacDevice' => array( 'AlmanacDAO', 'PhabricatorPolicyInterface', @@ -5364,6 +5371,7 @@ 'AlmanacNetworkTransactionType' => 'AlmanacTransactionType', 'AlmanacNetworkViewController' => 'AlmanacNetworkController', 'AlmanacPropertiesDestructionEngineExtension' => 'PhabricatorDestructionEngineExtension', + 'AlmanacPropertiesEditEngineExtension' => 'PhabricatorEditEngineExtension', 'AlmanacPropertiesSearchEngineAttachment' => 'AlmanacSearchEngineAttachment', 'AlmanacProperty' => array( 'AlmanacDAO', @@ -5412,6 +5420,8 @@ 'AlmanacServiceTypeTestCase' => 'PhabricatorTestCase', 'AlmanacServiceTypeTransaction' => 'AlmanacServiceTransactionType', 'AlmanacServiceViewController' => 'AlmanacServiceController', + 'AlmanacSetPropertyEditField' => 'PhabricatorEditField', + 'AlmanacSetPropertyEditType' => 'PhabricatorEditType', 'AlmanacTransactionType' => 'PhabricatorModularTransactionType', 'AphlictDropdownDataQuery' => 'Phobject', 'Aphront304Response' => 'AphrontResponse', diff --git a/src/applications/almanac/editor/AlmanacBindingEditEngine.php b/src/applications/almanac/editor/AlmanacBindingEditEngine.php --- a/src/applications/almanac/editor/AlmanacBindingEditEngine.php +++ b/src/applications/almanac/editor/AlmanacBindingEditEngine.php @@ -91,7 +91,8 @@ } protected function newObjectQuery() { - return new AlmanacBindingQuery(); + return id(new AlmanacBindingQuery()) + ->needProperties(true); } protected function getObjectCreateTitleText($object) { diff --git a/src/applications/almanac/editor/AlmanacDeviceEditEngine.php b/src/applications/almanac/editor/AlmanacDeviceEditEngine.php --- a/src/applications/almanac/editor/AlmanacDeviceEditEngine.php +++ b/src/applications/almanac/editor/AlmanacDeviceEditEngine.php @@ -30,7 +30,8 @@ } protected function newObjectQuery() { - return new AlmanacDeviceQuery(); + return id(new AlmanacDeviceQuery()) + ->needProperties(true); } protected function getObjectCreateTitleText($object) { diff --git a/src/applications/almanac/editor/AlmanacServiceEditEngine.php b/src/applications/almanac/editor/AlmanacServiceEditEngine.php --- a/src/applications/almanac/editor/AlmanacServiceEditEngine.php +++ b/src/applications/almanac/editor/AlmanacServiceEditEngine.php @@ -79,7 +79,8 @@ } protected function newObjectQuery() { - return new AlmanacServiceQuery(); + return id(new AlmanacServiceQuery()) + ->needProperties(true); } protected function getObjectCreateTitleText($object) { diff --git a/src/applications/almanac/engineextension/AlmanacDeletePropertyEditField.php b/src/applications/almanac/engineextension/AlmanacDeletePropertyEditField.php new file mode 100644 --- /dev/null +++ b/src/applications/almanac/engineextension/AlmanacDeletePropertyEditField.php @@ -0,0 +1,22 @@ + $property_key) { + if (!is_string($property_key)) { + throw new Exception( + pht( + 'When deleting Almanac properties, each property name must '. + 'be a string. The value at index "%s" is not a string.', + $idx)); + } + + $xactions[] = $this->newTransaction($template) + ->setMetadataValue('almanac.property', $property_key) + ->setNewValue(true); + } + + return $xactions; + } + +} diff --git a/src/applications/almanac/engineextension/AlmanacPropertiesEditEngineExtension.php b/src/applications/almanac/engineextension/AlmanacPropertiesEditEngineExtension.php new file mode 100644 --- /dev/null +++ b/src/applications/almanac/engineextension/AlmanacPropertiesEditEngineExtension.php @@ -0,0 +1,44 @@ +setKey('property.set') + ->setTransactionType($object->getAlmanacPropertySetTransactionType()) + ->setConduitDescription( + pht('Pass a map of values to set one or more properties.')) + ->setConduitTypeDescription(pht('Map of property names to values.')) + ->setIsConduitOnly(true), + id(new AlmanacDeletePropertyEditField()) + ->setKey('property.delete') + ->setTransactionType($object->getAlmanacPropertyDeleteTransactionType()) + ->setConduitDescription( + pht('Pass a list of property names to delete properties.')) + ->setConduitTypeDescription(pht('List of property names.')) + ->setIsConduitOnly(true), + ); + } + +} diff --git a/src/applications/almanac/engineextension/AlmanacSetPropertyEditField.php b/src/applications/almanac/engineextension/AlmanacSetPropertyEditField.php new file mode 100644 --- /dev/null +++ b/src/applications/almanac/engineextension/AlmanacSetPropertyEditField.php @@ -0,0 +1,22 @@ + $property_value) { + $xactions[] = $this->newTransaction($template) + ->setMetadataValue('almanac.property', $property_key) + ->setNewValue($property_value); + } + + return $xactions; + } + +}