mirror of
https://github.com/EGroupware/egroupware.git
synced 2025-01-18 20:08:34 +01:00
working on new setup prog that will allow add-on apps to take advantage of it
This commit is contained in:
parent
66ab743445
commit
edb1ade9db
@ -306,5 +306,8 @@
|
|||||||
echo "</td></tr></table>";
|
echo "</td></tr></table>";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
include("./inc/phpgw_schema_proc.inc.php");
|
||||||
|
// $phpgw_schema_proc = new phpgw_schema_proc($phpgw_domain[$SetupDomain]["db_type"]);
|
||||||
|
$phpgw_schema_proc = new phpgw_schema_proc("mysql");
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
115
setup/inc/phpgw_schema_proc.inc.php
Normal file
115
setup/inc/phpgw_schema_proc.inc.php
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
<?php
|
||||||
|
class phpgw_schema_proc
|
||||||
|
{
|
||||||
|
var $m_oTranslator;
|
||||||
|
|
||||||
|
function phpgw_schema_proc($dbms)
|
||||||
|
{
|
||||||
|
include("./inc/phpgw_schema_proc_" . $dbms . ".inc.php");
|
||||||
|
eval("\$this->m_oTranslator = new phpgw_schema_proc_$dbms;");
|
||||||
|
}
|
||||||
|
|
||||||
|
function GenerateScripts($aTables, $bOutputHTML = false)
|
||||||
|
{
|
||||||
|
if (!is_array($aTables))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
reset($aTables);
|
||||||
|
$sAllTableSQL = "";
|
||||||
|
while (list($sTableName, $aTableDef) = each($aTables))
|
||||||
|
{
|
||||||
|
if ($this->_GetTableSQL($aTableDef, $sTableSQL))
|
||||||
|
{
|
||||||
|
$sTableSQL = "CREATE TABLE $sTableName (\n$sTableSQL\n)"
|
||||||
|
. $this->m_oTranslator->m_sStatementTerminator;
|
||||||
|
$sAllTableSQL .= $sTableSQL . "\n\n";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($bOutputHTML)
|
||||||
|
print("<PRE>$sAllTableSQL</PRE><BR><BR>");
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function _GetTableSQL($aTableDef, &$sTableSQL)
|
||||||
|
{
|
||||||
|
if (!is_array($aTableDef))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
$sTableSQL = "";
|
||||||
|
reset($aTableDef);
|
||||||
|
while (list($sFieldName, $aFieldAttr) = each($aTableDef))
|
||||||
|
{
|
||||||
|
$sFieldSQL = "";
|
||||||
|
if ($this->_GetFieldSQL($aFieldAttr, $sFieldSQL))
|
||||||
|
{
|
||||||
|
if ($sTableSQL != "")
|
||||||
|
$sTableSQL .= ",\n";
|
||||||
|
|
||||||
|
$sTableSQL .= "$sFieldName $sFieldSQL";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get field DDL
|
||||||
|
function _GetFieldSQL($aField, &$sFieldSQL)
|
||||||
|
{
|
||||||
|
if (!is_array($aField))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
$sType = "";
|
||||||
|
$iPrecision = 0;
|
||||||
|
$iScale = 0;
|
||||||
|
$sDefault = "";
|
||||||
|
$bNullable = false;
|
||||||
|
|
||||||
|
reset($aField);
|
||||||
|
while (list($sAttr, $vAttrVal) = each($aField))
|
||||||
|
{
|
||||||
|
switch ($sAttr)
|
||||||
|
{
|
||||||
|
case "type":
|
||||||
|
$sType = $vAttrVal;
|
||||||
|
break;
|
||||||
|
case "precision":
|
||||||
|
$iPrecision = (int)$vAttrVal;
|
||||||
|
break;
|
||||||
|
case "scale":
|
||||||
|
$iScale = (int)$vAttrVal;
|
||||||
|
break;
|
||||||
|
case "default":
|
||||||
|
$sDefault = $vAttrVal;
|
||||||
|
break;
|
||||||
|
case "nullable":
|
||||||
|
$bNullable = $vAttrVal;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Translate the type for the DBMS
|
||||||
|
if ($this->m_oTranslator->TranslateType($sType, $iPrecision, $iScale, $sFieldSQL))
|
||||||
|
{
|
||||||
|
if ($bNullable == false)
|
||||||
|
$sFieldSQL .= " NOT NULL";
|
||||||
|
|
||||||
|
if ($sDefault != "")
|
||||||
|
{
|
||||||
|
// Get default DDL - useful for differences in date defaults (eg, now() vs. getdate())
|
||||||
|
$sTranslatedDefault = $this->m_oTranslator->TranslateDefault($sDefault);
|
||||||
|
$sFieldSQL .= " DEFAULT '$sTranslatedDefault'";
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
84
setup/inc/phpgw_schema_proc_mysql.inc.php
Normal file
84
setup/inc/phpgw_schema_proc_mysql.inc.php
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
<?php
|
||||||
|
class phpgw_schema_proc_mysql
|
||||||
|
{
|
||||||
|
var $m_sStatementTerminator;
|
||||||
|
|
||||||
|
function phpgw_schema_proc_mysql()
|
||||||
|
{
|
||||||
|
$this->m_sStatementTerminator = ";";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return a type suitable for DDL
|
||||||
|
function TranslateType($sType, $iPrecision = 0, $iScale = 0, &$sTranslated)
|
||||||
|
{
|
||||||
|
$sTranslated = "";
|
||||||
|
switch($sType)
|
||||||
|
{
|
||||||
|
case "autoincrement":
|
||||||
|
$sTranslated = "auto_increment";
|
||||||
|
break;
|
||||||
|
case "char":
|
||||||
|
if ($iPrecision > 0 && $iPrecision < 256)
|
||||||
|
$sTranslated = sprintf("char(%d)", $iPrecision);
|
||||||
|
|
||||||
|
if ($iPrecision > 255)
|
||||||
|
$sTranslated = "text";
|
||||||
|
|
||||||
|
break;
|
||||||
|
case "date":
|
||||||
|
$sTranslated = "date";
|
||||||
|
break;
|
||||||
|
case "decimal":
|
||||||
|
$sTranslated = sprintf("decimal(%d,%d)", $iPrecision, $iScale);
|
||||||
|
break;
|
||||||
|
case "float":
|
||||||
|
switch ($iPrecision)
|
||||||
|
{
|
||||||
|
case 4:
|
||||||
|
$sTranslated = "float";
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
$sTranslated = "double";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "int":
|
||||||
|
switch ($iPrecision)
|
||||||
|
{
|
||||||
|
case 2:
|
||||||
|
$sTranslated = "smallint";
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
$sTranslated = "int";
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
$sTranslated = "bigint";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "timestamp":
|
||||||
|
$sTranslated = "datetime";
|
||||||
|
case "varchar":
|
||||||
|
if ($iPrecision > 0 && $iPrecision < 256)
|
||||||
|
$sTranslated = sprintf("varchar(%d)", $iPrecision);
|
||||||
|
|
||||||
|
if ($iPrecision > 255)
|
||||||
|
$sTranslated = "text";
|
||||||
|
}
|
||||||
|
|
||||||
|
return (strlen($sTranslated) > 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
function TranslateDefault($sDefault)
|
||||||
|
{
|
||||||
|
switch ($sDefault)
|
||||||
|
{
|
||||||
|
case "current_date":
|
||||||
|
case "current_timestamp":
|
||||||
|
return "now";
|
||||||
|
}
|
||||||
|
|
||||||
|
return $sDefault;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
71
setup/inc/phpgw_schema_proc_pgsql.inc.php
Normal file
71
setup/inc/phpgw_schema_proc_pgsql.inc.php
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
<?php
|
||||||
|
class phpgw_schema_proc_pgsql
|
||||||
|
{
|
||||||
|
var $m_sStatementTerminator;
|
||||||
|
|
||||||
|
function phpgw_schema_proc_pgsql()
|
||||||
|
{
|
||||||
|
$this->m_sStatementTerminator = ";";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return a type suitable for DDL
|
||||||
|
function TranslateType($sType, $iPrecision = 0, $iScale = 0, &$sTranslated)
|
||||||
|
{
|
||||||
|
switch($sType)
|
||||||
|
{
|
||||||
|
case "autoincrement":
|
||||||
|
$sTranslated = "serial";
|
||||||
|
break;
|
||||||
|
case "char":
|
||||||
|
if ($iPrecision > 0 && $iPrecision < 256)
|
||||||
|
$sTranslated = sprintf("char(%d)", $iPrecision);
|
||||||
|
|
||||||
|
if ($iPrecision > 255)
|
||||||
|
$sTranslated = "text";
|
||||||
|
|
||||||
|
break;
|
||||||
|
case "date":
|
||||||
|
$sTranslated = "date";
|
||||||
|
break;
|
||||||
|
case "decimal":
|
||||||
|
$sTranslated = sprintf("decimal(%d,%d)", $iPrecision, $iScale);
|
||||||
|
break;
|
||||||
|
case "float":
|
||||||
|
if ($iPrecision == 4 || $iPrecision == 8)
|
||||||
|
$sTranslated = sprintf("float%d", $iPrecision);
|
||||||
|
|
||||||
|
break;
|
||||||
|
case "int":
|
||||||
|
if ($iPrecision == 2 || $iPrecision == 4 || $iPrecision == 8)
|
||||||
|
$sTranslated = sprintf("int%d", $iPrecision);
|
||||||
|
|
||||||
|
break;
|
||||||
|
case "timestamp":
|
||||||
|
$sTranslated = "timestamp";
|
||||||
|
break;
|
||||||
|
case "varchar":
|
||||||
|
if ($iPrecision > 0 && $iPrecision < 256)
|
||||||
|
$sTranslated = sprintf("varchar(%d)", $iPrecision);
|
||||||
|
|
||||||
|
if ($iPrecision > 255)
|
||||||
|
$sTranslated = "text";
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (strlen($sTranslated) > 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
function TranslateDefault($sDefault)
|
||||||
|
{
|
||||||
|
switch ($sDefault)
|
||||||
|
{
|
||||||
|
case "current_date":
|
||||||
|
case "current_timestamp":
|
||||||
|
return "now";
|
||||||
|
}
|
||||||
|
|
||||||
|
return $sDefault;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
122
setup/phpgw_schema_proc_test.php
Normal file
122
setup/phpgw_schema_proc_test.php
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
<HTML>
|
||||||
|
<HEAD>
|
||||||
|
</HEAD>
|
||||||
|
<BODY STYLE="background-color: #ffffff;">
|
||||||
|
Welcome to the phpGroupWare Schema Abstraction Definition testing program.<BR>
|
||||||
|
Here we go:<P>
|
||||||
|
<?php
|
||||||
|
$phpgw_info["flags"] = array("noheader" => True, "nonavbar" => True, "currentapp" => "home", "noapi" => True);
|
||||||
|
include("../header.inc.php");
|
||||||
|
include("./inc/functions.inc.php");
|
||||||
|
|
||||||
|
$SetupDomain = "phpgroupware.org";
|
||||||
|
$tables = array(
|
||||||
|
"departments" => array(
|
||||||
|
"id" => array(
|
||||||
|
"type" => "autoincrement"
|
||||||
|
),
|
||||||
|
"short" => array(
|
||||||
|
"type" => "varchar",
|
||||||
|
"precision" => 20,
|
||||||
|
"nullable" => false
|
||||||
|
),
|
||||||
|
"name" => array(
|
||||||
|
"type" => "varchar",
|
||||||
|
"precision" => 50,
|
||||||
|
"nullable" => false
|
||||||
|
),
|
||||||
|
"active" => array(
|
||||||
|
"type" => "char",
|
||||||
|
"precision" => 1,
|
||||||
|
"nullable" => false,
|
||||||
|
"default" => "Y"
|
||||||
|
)
|
||||||
|
),
|
||||||
|
"actions" => array(
|
||||||
|
"id" => array(
|
||||||
|
"type" => "autoincrement"
|
||||||
|
),
|
||||||
|
"short" => array(
|
||||||
|
"type" => "varchar",
|
||||||
|
"precision" => 20,
|
||||||
|
"nullable" => false
|
||||||
|
),
|
||||||
|
"name" => array(
|
||||||
|
"type" => "varchar",
|
||||||
|
"precision" => 50,
|
||||||
|
"nullable" => false
|
||||||
|
),
|
||||||
|
"active" => array(
|
||||||
|
"type" => "char",
|
||||||
|
"precision" => 1,
|
||||||
|
"nullable" => false,
|
||||||
|
"default" => "Y"
|
||||||
|
)
|
||||||
|
),
|
||||||
|
"timecards" => array(
|
||||||
|
"id" => array(
|
||||||
|
"type" => "autoincrement"
|
||||||
|
),
|
||||||
|
"jcn" => array(
|
||||||
|
"type" => "int",
|
||||||
|
"precision" => 4,
|
||||||
|
"nullable" => false
|
||||||
|
),
|
||||||
|
"seq" => array(
|
||||||
|
"type" => "int",
|
||||||
|
"precision" => 4,
|
||||||
|
"nullable" => false
|
||||||
|
),
|
||||||
|
"actionon" => array(
|
||||||
|
"type" => "timestamp",
|
||||||
|
"nullable" => false,
|
||||||
|
"default" => "current_timestamp"
|
||||||
|
),
|
||||||
|
"inputon" => array(
|
||||||
|
"type" => "timestamp",
|
||||||
|
"nullable" => false,
|
||||||
|
"default" => "current_timestamp"
|
||||||
|
),
|
||||||
|
"actionby" => array(
|
||||||
|
"type" => "int",
|
||||||
|
"precision" => 4,
|
||||||
|
"nullable" => false
|
||||||
|
),
|
||||||
|
"status" => array(
|
||||||
|
"type" => "int",
|
||||||
|
"precision" => 4,
|
||||||
|
"nullable" => false
|
||||||
|
),
|
||||||
|
"action" => array(
|
||||||
|
"type" => "int",
|
||||||
|
"precision" => 4,
|
||||||
|
"nullable" => false
|
||||||
|
),
|
||||||
|
"hours" => array(
|
||||||
|
"type" => "float",
|
||||||
|
"precision" => 4,
|
||||||
|
"nullable" => false,
|
||||||
|
"default" => 0.0
|
||||||
|
),
|
||||||
|
"summary" => array(
|
||||||
|
"type" => "varchar",
|
||||||
|
"precision" => 80,
|
||||||
|
"nullable" => false
|
||||||
|
),
|
||||||
|
"description" => array(
|
||||||
|
"type" => "varchar",
|
||||||
|
"precision" => 1024,
|
||||||
|
"nullable" => true
|
||||||
|
),
|
||||||
|
"revision" => array(
|
||||||
|
"type" => "varchar",
|
||||||
|
"precision" => 20,
|
||||||
|
"nullable" => true
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
$phpgw_schema_proc->GenerateScripts($tables, true);
|
||||||
|
?>
|
||||||
|
</BODY>
|
||||||
|
</HTML>
|
Loading…
Reference in New Issue
Block a user