Skip to content

Commit e2f9d8a

Browse files
committed
Improved implementation of #185
1 parent ee0c13a commit e2f9d8a

File tree

1 file changed

+26
-26
lines changed

1 file changed

+26
-26
lines changed

api.php

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1527,33 +1527,12 @@ protected function addRelationColumns($columns,$select) {
15271527
return $columns;
15281528
}
15291529

1530-
protected function excludeFields($fields,$exclude) {
1531-
if ($fields && $exclude) {
1532-
$columns = explode(',',$exclude);
1533-
foreach($columns as $column) {
1534-
$table = "";
1535-
if (strpos($column,'.')) {
1536-
$key = explode('.',$column);
1537-
$table = $key[0];
1538-
$column = $key[1];
1539-
} else {
1540-
if (count($fields)==1) {
1541-
$table = array_keys($fields)[0];
1542-
}
1543-
}
1544-
if (array_key_exists($table,$fields) and array_key_exists($column,$fields[$table])) {
1545-
unset($fields[$table][$column]);
1546-
}
1547-
}
1548-
}
1549-
return $fields;
1550-
}
1551-
1552-
protected function findFields($tables,$columns,$database) {
1530+
protected function findFields($tables,$columns,$exclude,$database) {
15531531
$fields = array();
15541532
foreach ($tables as $i=>$table) {
15551533
$fields[$table] = $this->findTableFields($table,$database);
15561534
$fields[$table] = $this->filterFieldsByColumns($fields[$table],$columns,$i==0,$table);
1535+
$fields[$table] = $this->filterFieldsByExclude($fields[$table],$exclude,$i==0,$table);
15571536
}
15581537
return $fields;
15591538
}
@@ -1580,6 +1559,28 @@ protected function filterFieldsByColumns($fields,$columns,$first,$table) {
15801559
return $fields;
15811560
}
15821561

1562+
protected function filterFieldsByExclude($fields,$exclude,$first,$table) {
1563+
if ($exclude) {
1564+
$columns = explode(',',$exclude);
1565+
foreach (array_keys($fields) as $key) {
1566+
$keep = true;
1567+
foreach ($columns as $column) {
1568+
if (strpos($column,'.')) {
1569+
if ($column=="$table.$key" || $column=="$table.*") {
1570+
$keep = false;
1571+
}
1572+
} elseif ($first) {
1573+
if ($column==$key || $column=="*") {
1574+
$keep = false;
1575+
}
1576+
}
1577+
}
1578+
if (!$keep) unset($fields[$key]);
1579+
}
1580+
}
1581+
return $fields;
1582+
}
1583+
15831584
protected function findTableFields($table,$database) {
15841585
$fields = array();
15851586
foreach ($this->db->fetchFields($table) as $field) {
@@ -1631,12 +1632,12 @@ protected function getParameters($settings) {
16311632
$table = $this->parseRequestParameter($request, 'a-zA-Z0-9\-_');
16321633
$key = $this->parseRequestParameter($request, 'a-zA-Z0-9\-_,'); // auto-increment or uuid
16331634
$action = $this->mapMethodToAction($method,$key);
1634-
$exclude = $this->parseGetParameter($get, 'exclude', 'a-zA-Z0-9\-_,.');
16351635
$include = $this->parseGetParameter($get, 'include', 'a-zA-Z0-9\-_,');
16361636
$page = $this->parseGetParameter($get, 'page', '0-9,');
16371637
$filters = $this->parseGetParameterArray($get, 'filter', false);
16381638
$satisfy = $this->parseGetParameter($get, 'satisfy', 'a-zA-Z0-9\-_,.');
16391639
$columns = $this->parseGetParameter($get, 'columns', 'a-zA-Z0-9\-_,.*');
1640+
$exclude = $this->parseGetParameter($get, 'exclude', 'a-zA-Z0-9\-_,.*');
16401641
$orderings = $this->parseGetParameterArray($get, 'order', 'a-zA-Z0-9\-_,');
16411642
$transform = $this->parseGetParameter($get, 'transform', 't1');
16421643

@@ -1650,8 +1651,7 @@ protected function getParameters($settings) {
16501651
// reflection
16511652
list($tables,$collect,$select) = $this->findRelations($tables,$database,$auto_include);
16521653
$columns = $this->addRelationColumns($columns,$select);
1653-
$fields = $this->findFields($tables,$columns,$database);
1654-
$fields = $this->excludeFields($fields,$exclude);
1654+
$fields = $this->findFields($tables,$columns,$exclude,$database);
16551655

16561656
// permissions
16571657
if ($table_authorizer) $this->applyTableAuthorizer($table_authorizer,$action,$database,$tables);

0 commit comments

Comments
 (0)