First commit
This commit is contained in:
319
framework/server/table.js
Normal file
319
framework/server/table.js
Normal file
@@ -0,0 +1,319 @@
|
||||
/*
|
||||
|
||||
Copyright (c) 2020, 2023, The Unified Company.
|
||||
|
||||
This code is part of Unify.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the ESA Software Community License - Strong Copyleft LICENSE,
|
||||
as published by the ESA.
|
||||
See the ESA Software Community License - Strong Copyleft LICENSE, for more details.
|
||||
|
||||
https://unifyjs.org
|
||||
|
||||
*/
|
||||
|
||||
import clientTable from '../client/table.js';
|
||||
|
||||
import tools from '../unify/tools.js';
|
||||
|
||||
import document from '../unify/document.js';
|
||||
|
||||
import querySQL from '../unify/querySQL.js';
|
||||
|
||||
import Console from './console.js';
|
||||
|
||||
import collection from '../unify/collection.js';
|
||||
|
||||
import permissionManager from '../unify/permissionManager.js';
|
||||
|
||||
import userManager from '../server/userManager.js';
|
||||
|
||||
|
||||
|
||||
export default class table extends clientTable{
|
||||
|
||||
__className = "table";
|
||||
|
||||
permissionManager = new permissionManager();
|
||||
|
||||
type = "table";
|
||||
|
||||
|
||||
constructor() {
|
||||
|
||||
super();
|
||||
|
||||
Console.setFilename("table.js");
|
||||
|
||||
}
|
||||
|
||||
setCollectionObject( collectionObject ) {
|
||||
|
||||
var newCollection = new collection( collectionObject );
|
||||
|
||||
this.setCollection( newCollection );
|
||||
|
||||
}
|
||||
|
||||
setCollection( collection ) {
|
||||
|
||||
if( collection ) {
|
||||
|
||||
this.collections = [ collection ];
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
parseObject( object, propertyName) {
|
||||
|
||||
if( tools.objectIsRenderCollection( object ) )
|
||||
{
|
||||
|
||||
// hasMany collection render join
|
||||
this.parseRenderCollection( object );
|
||||
|
||||
} else if( tools.objectIsTable( object ) ) {
|
||||
|
||||
// hasOne
|
||||
if( propertyName != "table" ) {
|
||||
|
||||
this.joinObject( object );
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
getProperties( parent, child ) {
|
||||
|
||||
var entries = Object.entries( parent );
|
||||
|
||||
for( var c = 0; c < entries.length; c++ ) {
|
||||
|
||||
var entry = entries[ c ];
|
||||
|
||||
var object = tools.getObjectByEntry( entry );
|
||||
|
||||
var propertyName = tools.getClassNameByEntry( entry );
|
||||
|
||||
this.parseObject( object, propertyName);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
joinObject( object ) {
|
||||
|
||||
var tableName = tools.getClassName( object );
|
||||
|
||||
var parentName = tools.getClassName( tools.getTableFromObject( object.parent ) );
|
||||
|
||||
var columnName = object.propertyName;
|
||||
|
||||
// ?? doesn't do anything.
|
||||
|
||||
//Console.log( "Select * From " + tableName + " where " + parentName + "." + columnName +"_id = " + tableName + ".id" );
|
||||
|
||||
}
|
||||
|
||||
parseRenderCollection( renderCollection ) {
|
||||
|
||||
var collections = renderCollection.collections;
|
||||
|
||||
for(var b = 0; b < collections.length;b++) {
|
||||
|
||||
var currentCollection = collections[b];
|
||||
|
||||
var join = currentCollection.createJoin( renderCollection.propertyName );
|
||||
|
||||
}
|
||||
|
||||
var renderCollectionObject = renderCollection.getObject();
|
||||
|
||||
this.getProperties( renderCollectionObject, renderCollection );
|
||||
|
||||
}
|
||||
|
||||
|
||||
getRow() {
|
||||
|
||||
this.getProperties( this.constructor );
|
||||
|
||||
//console.log("get table from this object", this);
|
||||
|
||||
var table = tools.getTableFromObject( this );
|
||||
|
||||
|
||||
|
||||
var tableName = tools.getClassName( table );
|
||||
|
||||
var query = new querySQL();
|
||||
|
||||
query.type = "select";
|
||||
|
||||
query.table = tableName;
|
||||
|
||||
query.find( "id", this.id );
|
||||
|
||||
var output = global.database.query( query );
|
||||
|
||||
if( output[0] ) {
|
||||
|
||||
return output[0];
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
// For server side, When being instantiated
|
||||
create() {
|
||||
|
||||
if( typeof document == "undefined" ) {
|
||||
|
||||
this.createInstance();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
createInstance( inherit_id = true ) {
|
||||
|
||||
this.signed.value = true;
|
||||
|
||||
var new_inser_id = global.database.insertRow( this );
|
||||
|
||||
if( inherit_id ) {
|
||||
|
||||
this.id = new_inser_id;
|
||||
|
||||
}
|
||||
|
||||
return new_inser_id;
|
||||
|
||||
}
|
||||
|
||||
updateChildrenPermissions( object, user ) {
|
||||
|
||||
if( object.permission ) {
|
||||
|
||||
object.permissions = userManager.computePermissions( object, user );
|
||||
|
||||
}
|
||||
|
||||
|
||||
if( object.getChildren ) {
|
||||
|
||||
var children = object.getChildren();
|
||||
|
||||
for (var i = 0; i < children.length; i++) {
|
||||
|
||||
var child = children[i]
|
||||
|
||||
this.updateChildrenPermissions( child, user );
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
get( client ) {
|
||||
|
||||
var sqlRow = this.getRow();
|
||||
|
||||
if( sqlRow ) {
|
||||
|
||||
//console.log("get", this.getClassName(), sqlRow);
|
||||
|
||||
this.serialize( sqlRow );
|
||||
|
||||
this.updated = true;
|
||||
|
||||
}
|
||||
|
||||
if( client ) {
|
||||
|
||||
//this.computePermissions( client );
|
||||
|
||||
var user = client.user;
|
||||
|
||||
this.updateChildrenPermissions( this, user );
|
||||
|
||||
//this.permissions = userManager.computePermissions( this, user );
|
||||
|
||||
//this.computePermissions( this, user );
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
delete() {
|
||||
|
||||
var table = this.table;
|
||||
|
||||
var tableName = table.getClassName();
|
||||
|
||||
var query = new querySQL();
|
||||
|
||||
query.type = "delete";
|
||||
|
||||
query.table = tableName;
|
||||
|
||||
query.find( "id", this.id );
|
||||
|
||||
var output = global.database.query( query );
|
||||
|
||||
return output;
|
||||
|
||||
}
|
||||
|
||||
save() {
|
||||
|
||||
if( !this.table ) {
|
||||
|
||||
this.getCore().tableManager.parse( this )
|
||||
|
||||
}
|
||||
|
||||
var table = this.table;
|
||||
|
||||
var tableName = table.getClassName();
|
||||
|
||||
var query = new querySQL();
|
||||
|
||||
query.type = "update";
|
||||
|
||||
query.table = tableName;
|
||||
|
||||
query.debug = this.debug;
|
||||
|
||||
query.addObject( this );
|
||||
|
||||
var query = global.database.query( query );
|
||||
|
||||
}
|
||||
|
||||
find( column, value ) {
|
||||
|
||||
var tableName = tools.getTableName( this );
|
||||
|
||||
var query = new querySQL();
|
||||
|
||||
query.type = "select";
|
||||
query.table = tableName;
|
||||
|
||||
query.find( column, value );
|
||||
|
||||
return global.database.query( query );
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user