public function addCollection(ApiCollection $apiCollection)
{
$aclRoles = $this->acl->getRoles();
$collection = new DocumentationCollection();
$collection->setName($apiCollection->getName());
$collection->setDescription($apiCollection->getDescription());
$collection->setPath($apiCollection->getPrefix());
// Set fields
if ($apiCollection instanceof ApiResource) {
if ($modelClass = $apiCollection->getModel()) {
if ($transformerClass = $apiCollection->getTransformer()) {
/** @var ModelTransformer $transformer */
$transformer = new $transformerClass();
if ($transformer instanceof ModelTransformer) {
$transformer->setModelClass($modelClass);
$responseFields = $transformer->getResponseProperties();
$dataTypes = $transformer->getModelDataTypes();
$fields = [];
foreach ($responseFields as $field) {
$fields[$field] = array_key_exists($field, $dataTypes) ? $dataTypes[$field] : ModelTransformer::TYPE_UNKNOWN;
}
$collection->setFields($fields);
}
}
}
}
// Add endpoints
foreach ($apiCollection->getEndpoints() as $apiEndpoint) {
$endpoint = new DocumentationEndpoint();
$endpoint->setName($apiEndpoint->getName());
$endpoint->setDescription($apiEndpoint->getDescription());
$endpoint->setHttpMethod($apiEndpoint->getHttpMethod());
$endpoint->setPath($apiEndpoint->getPath());
$endpoint->setExampleResponse($apiEndpoint->getExampleResponse());
$allowedRoleNames = [];
/** @var \Phalcon\Acl\Role $role */
foreach ($aclRoles as $role) {
if ($this->acl->isAllowed($role->getName(), $apiCollection->getIdentifier(), $apiEndpoint->getIdentifier())) {
$allowedRoleNames[] = $role->getName();
}
}
$endpoint->setAllowedRoles($allowedRoleNames);
$collection->addEndpoint($endpoint);
}
$this->collections[] = $collection;
}