mirror of
https://we.phorge.it/source/phorge.git
synced 2025-03-01 23:19:15 +01:00
Summary: Ref T5833. Adds support for arbitrary properites to Almanac devices and bindings. - For Devices, this allows you to maybe mark what `rack` a server is on, the `serial` number of a router, etc. - For Bindings, this allows you to maybe mark that a bound device is `active`, provide `credentials`, expose it as `readonly`, etc. Test Plan: Added properties to Devices and Bindings. Reviewers: btrahan Reviewed By: btrahan Subscribers: epriestley Maniphest Tasks: T5833 Differential Revision: https://secure.phabricator.com/D10781
41 lines
1.4 KiB
PHP
41 lines
1.4 KiB
PHP
<?php
|
|
|
|
abstract class AlmanacQuery
|
|
extends PhabricatorCursorPagedPolicyAwareQuery {
|
|
|
|
protected function didFilterPage(array $objects) {
|
|
if (head($objects) instanceof AlmanacPropertyInterface) {
|
|
// NOTE: We load properties unconditionally because CustomField assumes
|
|
// it can always generate a list of fields on an object. It may make
|
|
// sense to re-examine that assumption eventually.
|
|
|
|
$property_query = id(new AlmanacPropertyQuery())
|
|
->setViewer($this->getViewer())
|
|
->setParentQuery($this)
|
|
->withObjectPHIDs(mpull($objects, null, 'getPHID'));
|
|
|
|
// NOTE: We disable policy filtering and object attachment to avoid
|
|
// a cyclic dependency where objects need their properties and properties
|
|
// need their objects. We'll attach the objects below, and have already
|
|
// implicitly checked the necessary policies.
|
|
$property_query->setDisablePolicyFilteringAndAttachment(true);
|
|
|
|
$properties = $property_query->execute();
|
|
$properties = mgroup($properties, 'getObjectPHID');
|
|
foreach ($objects as $object) {
|
|
$object_properties = idx($properties, $object->getPHID(), array());
|
|
foreach ($object_properties as $property) {
|
|
$property->attachObject($object);
|
|
}
|
|
$object->attachAlmanacProperties($object_properties);
|
|
}
|
|
}
|
|
|
|
return $objects;
|
|
}
|
|
|
|
public function getQueryApplicationClass() {
|
|
return 'PhabricatorAlmanacApplication';
|
|
}
|
|
|
|
}
|