Skip to content

Commit 5b3f545

Browse files
committed
fix for #366
1 parent 1bebf0e commit 5b3f545

File tree

2 files changed

+28
-8
lines changed

2 files changed

+28
-8
lines changed

api.php

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1734,21 +1734,26 @@ protected function getRelationShipColumns($select) {
17341734
return $keep;
17351735
}
17361736

1737-
protected function findFields($tables,$columns,$exclude,$select,$database) {
1737+
protected function findFields($tables,$database) {
17381738
$fields = array();
1739+
foreach ($tables as $i=>$table) {
1740+
$fields[$table] = $this->findTableFields($table,$database);
1741+
}
1742+
return $fields;
1743+
}
1744+
1745+
protected function limitFields($fields,$columns,$exclude,$select) {
17391746
if ($select && ($columns || $exclude)) {
17401747
$keep = $this->getRelationShipColumns($select);
17411748
} else {
17421749
$keep = false;
17431750
}
1744-
foreach ($tables as $i=>$table) {
1745-
$fields[$table] = $this->findTableFields($table,$database);
1751+
foreach (array_keys($fields) as $i=>$table) {
17461752
$fields[$table] = $this->filterFieldsByColumns($fields[$table],$columns,$keep,$i==0,$table);
17471753
$fields[$table] = $this->filterFieldsByExclude($fields[$table],$exclude,$keep,$i==0,$table);
17481754
}
17491755
return $fields;
17501756
}
1751-
17521757
protected function filterFieldsByColumns($fields,$columns,$keep,$first,$table) {
17531758
if ($columns) {
17541759
$columns = explode(',',$columns);
@@ -1902,13 +1907,14 @@ protected function getParameters($settings) {
19021907

19031908
// reflection
19041909
list($tables,$collect,$select) = $this->findRelations($tables,$database,$auto_include);
1905-
$fields = $this->findFields($tables,$columns,$exclude,$select,$database);
1906-
1910+
$fields = $this->findFields($tables,$database);
1911+
if ($tenancy_function) $this->applyTenancyFunction($tenancy_function,$action,$database,$fields,$filters);
1912+
$fields = $this->limitFields($fields,$columns,$exclude,$select,$database);
1913+
19071914
// permissions
19081915
if ($table_authorizer) $this->applyTableAuthorizer($table_authorizer,$action,$database,$tables);
19091916
if (!isset($tables[0])) $this->exitWith404('entity');
19101917
if ($record_filter) $this->applyRecordFilter($record_filter,$action,$database,$tables,$filters);
1911-
if ($tenancy_function) $this->applyTenancyFunction($tenancy_function,$action,$database,$fields,$filters);
19121918
if ($column_authorizer) $this->applyColumnAuthorizer($column_authorizer,$action,$database,$fields);
19131919

19141920
// input
@@ -2285,7 +2291,7 @@ protected function swagger($settings) {
22852291
$table_names = array_map(function($v){ return $v['name'];},$tables);
22862292
foreach ($tables as $t=>$table) {
22872293
$table_list = array($table['name']);
2288-
$table_fields = $this->findFields($table_list,false,false,false,$database);
2294+
$table_fields = $this->findFields($table_list,$database);
22892295

22902296
// extensions
22912297
$result = $this->db->query($this->db->getSql('reflect_belongs_to'),array($table_list[0],$table_names,$database,$database));

tests/Tests.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -660,4 +660,18 @@ public function testListPostWithIncludeButNoRecords()
660660
$test->get('/posts?filter=id,eq,999&include=tags');
661661
$test->expect('{"posts":{"columns":["id","user_id","category_id","content"],"records":[]},"post_tags":{"relations":{"post_id":"posts.id"},"columns":["id","post_id","tag_id"],"records":[]},"tags":{"relations":{"id":"post_tags.tag_id"},"columns":["id","name"],"records":[]}}');
662662
}
663+
664+
public function testListUsersExcludeTenancyId()
665+
{
666+
$test = new Api($this);
667+
$test->get('/users?exclude=id');
668+
$test->expect('{"users":{"columns":["username","location"],"records":[["user1","POINT(30 20)"]]}}');
669+
}
670+
671+
public function testListUsersColumnsWithoutTenancyId()
672+
{
673+
$test = new Api($this);
674+
$test->get('/users?columns=username,location');
675+
$test->expect('{"users":{"columns":["username","location"],"records":[["user1","POINT(30 20)"]]}}');
676+
}
663677
}

0 commit comments

Comments
 (0)