private function buildResourceBox(DrydockBlueprint $blueprint)
 {
     $viewer = $this->getViewer();
     $resources = id(new DrydockResourceQuery())->setViewer($viewer)->withBlueprintPHIDs(array($blueprint->getPHID()))->withStatuses(array(DrydockResourceStatus::STATUS_PENDING, DrydockResourceStatus::STATUS_ACTIVE))->setLimit(100)->execute();
     $resource_list = id(new DrydockResourceListView())->setUser($viewer)->setResources($resources)->render()->setNoDataString(pht('This blueprint has no active resources.'));
     $id = $blueprint->getID();
     $resources_uri = "blueprint/{$id}/resources/query/all/";
     $resources_uri = $this->getApplicationURI($resources_uri);
     $resource_header = id(new PHUIHeaderView())->setHeader(pht('Active Resources'))->addActionLink(id(new PHUIButtonView())->setTag('a')->setHref($resources_uri)->setIconFont('fa-search')->setText(pht('View All Resources')));
     return id(new PHUIObjectBoxView())->setHeader($resource_header)->setObjectList($resource_list);
 }
 private function buildAuthorizationsBox(DrydockBlueprint $blueprint)
 {
     $viewer = $this->getViewer();
     $limit = 25;
     // If there are pending authorizations against this blueprint, make sure
     // we show them first.
     $pending_authorizations = id(new DrydockAuthorizationQuery())->setViewer($viewer)->withBlueprintPHIDs(array($blueprint->getPHID()))->withObjectStates(array(DrydockAuthorization::OBJECTAUTH_ACTIVE))->withBlueprintStates(array(DrydockAuthorization::BLUEPRINTAUTH_REQUESTED))->setLimit($limit)->execute();
     $all_authorizations = id(new DrydockAuthorizationQuery())->setViewer($viewer)->withBlueprintPHIDs(array($blueprint->getPHID()))->withObjectStates(array(DrydockAuthorization::OBJECTAUTH_ACTIVE))->withBlueprintStates(array(DrydockAuthorization::BLUEPRINTAUTH_REQUESTED, DrydockAuthorization::BLUEPRINTAUTH_AUTHORIZED))->setLimit($limit)->execute();
     $authorizations = mpull($pending_authorizations, null, 'getPHID') + mpull($all_authorizations, null, 'getPHID');
     $authorization_list = id(new DrydockAuthorizationListView())->setUser($viewer)->setAuthorizations($authorizations)->setNoDataString(pht('No objects have active authorizations to use this blueprint.'));
     $id = $blueprint->getID();
     $authorizations_uri = "blueprint/{$id}/authorizations/query/all/";
     $authorizations_uri = $this->getApplicationURI($authorizations_uri);
     $authorizations_header = id(new PHUIHeaderView())->setHeader(pht('Active Authorizations'))->addActionLink(id(new PHUIButtonView())->setTag('a')->setHref($authorizations_uri)->setIconFont('fa-search')->setText(pht('View All')));
     return id(new PHUIObjectBoxView())->setHeader($authorizations_header)->setObjectList($authorization_list);
 }