45 lines
1.3 KiB
JavaScript
45 lines
1.3 KiB
JavaScript
function php_crud_api_transform(tables) {
|
|
var array_flip = function (trans) {
|
|
var key, tmp_ar = {};
|
|
for (key in trans) {
|
|
tmp_ar[trans[key]] = key;
|
|
}
|
|
return tmp_ar;
|
|
};
|
|
var get_objects = function (tables,table_name,where_index,match_value) {
|
|
var objects = [];
|
|
for (var record in tables[table_name]['records']) {
|
|
record = tables[table_name]['records'][record];
|
|
if (!where_index || record[where_index]==match_value) {
|
|
var object = {};
|
|
for (var index in tables[table_name]['columns']) {
|
|
var column = tables[table_name]['columns'][index];
|
|
object[column] = record[index];
|
|
for (var relation in tables) {
|
|
var reltable = tables[relation];
|
|
for (var key in reltable['relations']) {
|
|
var target = reltable['relations'][key];
|
|
if (target == table_name+'.'+column) {
|
|
column_indices = array_flip(reltable['columns']);
|
|
object[relation] = get_objects(tables,relation,column_indices[key],record[index]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
objects.push(object);
|
|
}
|
|
}
|
|
return objects;
|
|
};
|
|
tree = {};
|
|
for (var name in tables) {
|
|
var table = tables[name];
|
|
if (!table['relations']) {
|
|
tree[name] = get_objects(tables,name);
|
|
if (table['results']) {
|
|
tree['_results'] = table['results'];
|
|
}
|
|
}
|
|
}
|
|
return tree;
|
|
}
|