|
@@ -354,27 +354,81 @@ class Core_AclHelper {// Helper class for Acl
|
|
|
DB::getPDO()->exec("
|
|
DB::getPDO()->exec("
|
|
|
CREATE TABLE IF NOT EXISTS `{$instanceTable}` (
|
|
CREATE TABLE IF NOT EXISTS `{$instanceTable}` (
|
|
|
`PRIMARY_KEY` int(11) NOT NULL,
|
|
`PRIMARY_KEY` int(11) NOT NULL,
|
|
|
- `REMOTE_PRIMARY_KEY` int(11) NOT NULL,
|
|
|
|
|
- `A_STATUS` enum('WAITING', 'NORMAL', 'DELETED') NOT NULL DEFAULT 'WAITING',
|
|
|
|
|
- `A_RECORD_UPDATE_DATE` timestamp ON UPDATE CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
|
- -- TODO `TRANACTION_ID` int(11) NOT NULL
|
|
|
|
|
- KEY `PRIMARY_KEY` (`PRIMARY_KEY`),
|
|
|
|
|
- KEY `REMOTE_PRIMARY_KEY` (`REMOTE_PRIMARY_KEY`)
|
|
|
|
|
|
|
+ `A_RECORD_UPDATE_DATE` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
|
|
|
+ `INSTANCE_NAME` varchar(255) NOT NULL,
|
|
|
|
|
+ UNIQUE KEY `PRIMARY_KEY` (`PRIMARY_KEY`),
|
|
|
|
|
+ KEY `INSTANCE_NAME` (`INSTANCE_NAME`)
|
|
|
|
|
+ -- TODO `A_TRANACTION_ID` int(11) NOT NULL DEFAULT 0
|
|
|
|
|
+ ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
|
|
|
|
|
+ ");
|
|
|
|
|
+ DB::getPDO()->exec("
|
|
|
|
|
+ CREATE TABLE IF NOT EXISTS `{$instanceTable}_HIST` (
|
|
|
|
|
+ `ID` int(11) NOT NULL AUTO_INCREMENT,
|
|
|
|
|
+ `PRIMARY_KEY` int(11) NOT NULL,
|
|
|
|
|
+ `A_TRANACTION_ID` int(11) NOT NULL DEFAULT 0,
|
|
|
|
|
+ `A_RECORD_UPDATE_DATE` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
|
|
|
+ `INSTANCE_NAME` varchar(255) NOT NULL,
|
|
|
|
|
+ PRIMARY KEY (`ID`),
|
|
|
|
|
+ KEY `PRIMARY_KEY` (`PRIMARY_KEY`)
|
|
|
) ENGINE=MyISAM DEFAULT CHARSET=latin2;
|
|
) ENGINE=MyISAM DEFAULT CHARSET=latin2;
|
|
|
");
|
|
");
|
|
|
- try {
|
|
|
|
|
- DB::getPDO()->exec(" ALTER TABLE `{$instanceTable}` ADD `A_STATUS` enum('WAITING', 'NORMAL', 'DELETED') NOT NULL DEFAULT 'WAITING' ");
|
|
|
|
|
- } catch (Exception $e) {
|
|
|
|
|
- // echo 'C.'.get_class($this).' L.' . __LINE__ . " Error:";print_r($e->getMessage());echo "\n";
|
|
|
|
|
- }
|
|
|
|
|
- try {
|
|
|
|
|
- DB::getPDO()->exec(" ALTER TABLE `{$instanceTable}` ADD `A_RECORD_UPDATE_DATE` timestamp ON UPDATE CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ");
|
|
|
|
|
- } catch (Exception $e) {
|
|
|
|
|
- // echo 'C.'.get_class($this).' L.' . __LINE__ . " Error:";print_r($e->getMessage());echo "\n";
|
|
|
|
|
- }
|
|
|
|
|
$cacheInstanceTables[] = $instanceTable;
|
|
$cacheInstanceTables[] = $instanceTable;
|
|
|
return $instanceTable;
|
|
return $instanceTable;
|
|
|
}
|
|
}
|
|
|
|
|
+ public static function setInstance($rootTableName, $pk, $instanceName, $idTransaction = 0) {
|
|
|
|
|
+ $instanceTable = self::getInstanceTable($rootTableName);
|
|
|
|
|
+ $pk = intval($pk);
|
|
|
|
|
+ // TODO: if $pk < 0 throw new Exception("...");
|
|
|
|
|
+ $sql = [
|
|
|
|
|
+ 'instanceName' => DB::getPDO()->quote($instanceName, PDO::PARAM_STR),
|
|
|
|
|
+ 'idTransaction' => intval($idTransaction)
|
|
|
|
|
+ ];
|
|
|
|
|
+ DB::getPDO()->exec("
|
|
|
|
|
+ insert into `{$instanceTable}_HIST` (`PRIMARY_KEY`, `INSTANCE_NAME`, `A_TRANACTION_ID`)
|
|
|
|
|
+ values({$pk}, {$sql['instanceName']}, {$idTransaction})
|
|
|
|
|
+ ");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public static function getChildHistTable($rootTableName, $childName, $schema) {
|
|
|
|
|
+ // $childName(id) => Array:
|
|
|
|
|
+ // [@type] => xsd:integer
|
|
|
|
|
+ // $childName(created) => Array:
|
|
|
|
|
+ // [@type] => xsd:date
|
|
|
|
|
+ // $childName(worker) => Array:
|
|
|
|
|
+ // [@ref] => default_objects/AccessOwner
|
|
|
|
|
+ // $childName(kwota) => Array:
|
|
|
|
|
+ // [@type] => xsd:decimal
|
|
|
|
|
+ // [@totalDigits] => 16
|
|
|
|
|
+ // [@fractionDigits] => 2
|
|
|
|
|
+ // $childName(nierozliczona_kwota) => Array:
|
|
|
|
|
+ // [@type] => xsd:decimal
|
|
|
|
|
+ // [@totalDigits] => 16
|
|
|
|
|
+ // [@fractionDigits] => 2
|
|
|
|
|
+ // $childName(pozycja) => Array:
|
|
|
|
|
+ // [@ref] => ZaliczkaPozycja
|
|
|
|
|
+ // [@maxOccurs] => unbounded
|
|
|
|
|
+ static $cacheHistTables = array();
|
|
|
|
|
+ $histTable = "{$rootTableName}__#HIST__{$childName}";
|
|
|
|
|
+ if (in_array($histTable, $cacheHistTables)) return $histTable;
|
|
|
|
|
+ $sqlType = '';
|
|
|
|
|
+ switch ($schema['@type']) {
|
|
|
|
|
+ case 'xsd:integer': $sqlType = "int(11) NOT NULL DEFAULT 0"; break;
|
|
|
|
|
+ case 'xsd:date': $sqlType = "date DEFAULT NULL"; break;
|
|
|
|
|
+ case 'xsd:decimal': $sqlType = "decimal(" . V::get('@totalDigits', 16, $schema) . ", " . V::get('@fractionDigits', 2, $schema) . ") NOT NULL DEFAULT 0"; break;
|
|
|
|
|
+ }
|
|
|
|
|
+ if (!$sqlType && !empty($schema['@ref'])) $sqlType = "int(11) NOT NULL DEFAULT 0";
|
|
|
|
|
+ if (!$sqlType) throw new Exception("Unimplemented schema to sql for '{$rootTableName}/{$childName}' schema(".json_encode($schema).")");
|
|
|
|
|
+ DB::getPDO()->exec("
|
|
|
|
|
+ CREATE TABLE IF NOT EXISTS `{$histTable}` (
|
|
|
|
|
+ `ID` int(11) NOT NULL AUTO_INCREMENT,
|
|
|
|
|
+ `VALUE` {$sqlType},
|
|
|
|
|
+ `A_TRANSACTION_ID` int(11) NOT NULL DEFAULT 0,
|
|
|
|
|
+ PRIMARY KEY (`ID`)
|
|
|
|
|
+ ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
|
|
|
|
|
+ ");
|
|
|
|
|
+ $cacheHistTables[] = $histTable;
|
|
|
|
|
+ return $histTable;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
public static function getTransactionTable($rootTableName) {
|
|
public static function getTransactionTable($rootTableName) {
|
|
|
static $cacheTransactionTables = array();
|
|
static $cacheTransactionTables = array();
|
|
@@ -382,7 +436,7 @@ class Core_AclHelper {// Helper class for Acl
|
|
|
if (in_array($transactionTable, $cacheTransactionTables)) return $transactionTable;
|
|
if (in_array($transactionTable, $cacheTransactionTables)) return $transactionTable;
|
|
|
DB::getPDO()->exec("
|
|
DB::getPDO()->exec("
|
|
|
CREATE TABLE IF NOT EXISTS `{$transactionTable}` (
|
|
CREATE TABLE IF NOT EXISTS `{$transactionTable}` (
|
|
|
- `ID` int(11) NOT NULL,
|
|
|
|
|
|
|
+ `ID` int(11) NOT NULL AUTO_INCREMENT,
|
|
|
`A_ACTION_ID_USER` int(11) DEFAULT NULL, -- NULL for scripts
|
|
`A_ACTION_ID_USER` int(11) DEFAULT NULL, -- NULL for scripts
|
|
|
`A_ACTION_AUTHOR` varchar(255) NOT NULL DEFAULT '',
|
|
`A_ACTION_AUTHOR` varchar(255) NOT NULL DEFAULT '',
|
|
|
`A_ACTION_DATE` timestamp ON UPDATE CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
`A_ACTION_DATE` timestamp ON UPDATE CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
@@ -407,11 +461,18 @@ class Core_AclHelper {// Helper class for Acl
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public static function rollbackTransaction($rootTableName, $idTransaction) {
|
|
public static function rollbackTransaction($rootTableName, $idTransaction) {
|
|
|
- // TODO: rollbackTransaction
|
|
|
|
|
|
|
+ // TODO: ROLLBACK - do nothing
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- public static function commitTransaction($rootTableName, $idTransaction) {
|
|
|
|
|
|
|
+ public static function commitTransaction($idTransaction, $simpleSchema_or_acl) {
|
|
|
// TODO: COMMIT
|
|
// TODO: COMMIT
|
|
|
|
|
+ // TODO: save changes to rootTableName and every childrens - recurence
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public static function commitContextTransaction($rootTableName, $rootIdTransaction, $simpleSchema_or_acl_for_child) {
|
|
|
|
|
+ // TODO: COMMIT - changes for childrens
|
|
|
|
|
+ // TODO: find transaction with context transaction like "{$rootTableName}.{$rootIdTransaction}" = A_CONTEXT_TRANSACTION
|
|
|
|
|
+ // TODO: save changes to rootTableName and every childrens - recurence
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
}
|
|
}
|