\n";
}
}
function ShowBizModel($sBaseArgs)
{
echo "
\n";
foreach(MetaModel::GetClasses() as $sClass)
{
echo "
".sexyclass($sClass, $sBaseArgs)."
\n";
}
echo "
\n";
}
function ShowZLists($sBaseArgs)
{
$aData = array();
// 1 row per class, header made after the first row keys
//
foreach(MetaModel::GetClasses() as $sClass)
{
$aRow = array();
$aRow["_"] = $sClass;
foreach (MetaModel::EnumZLists() as $sListCode)
{
$aRow[$sListCode] = implode(", ", MetaModel::GetZListItems($sClass, $sListCode));
}
$aData[] = $aRow;
}
echo MyHelpers::make_table_from_assoc_array($aData);
}
function ShowDatabaseInfo()
{
$aTables = array();
foreach (CMDBSource::EnumTables() as $sTable)
{
$aTableData = array();
$aTableData["Name"] = $sTable;
$aTableDesc = CMDBSource::GetTableInfo($sTable);
$aTableData["Fields"] = MyHelpers::make_table_from_assoc_array($aTableDesc["Fields"]);
$aTables[$sTable] = $aTableData;
}
echo MyHelpers::make_table_from_assoc_array($aTables);
}
function CreateDB()
{
$sRes = "
Creating the DB...
\n";
if (MetaModel::DBExists(false))
{
$sRes .= "
It appears that the DB already exists (at least one table).
\n";
}
else
{
MetaModel::DBCreate();
$sRes .= "
Done!
\n";
}
return $sRes;
}
function DebugQuery($sConfigFile)
{
$sQuery = ReadParam("oql");
if (empty($sQuery))
{
$sQueryTemplate = "SELECT Foo AS f JOIN Dummy AS D ON d.spirit = f.id WHERE f.age * d.height > TO_DAYS(NOW()) OR d.alive";
}
else
{
$sQueryTemplate = $sQuery;
}
echo "\n";
if (empty($sQuery)) return;
echo "
\n";
foreach (CMDBSource::ExplainQuery($sSQL) as $aRow)
{
echo "
\n";
echo "
".implode('
', $aRow)."
\n";
echo "
\n";
}
echo "
\n";
echo "
Results
\n";
$oSet = new CMDBObjectSet($oFlt);
echo $oSet; // __toString()
}
function DumpDatabase()
{
$aData = MetaModel::DBDump();
foreach ($aData as $sTable => $aRows)
{
echo "
".htmlentities($sTable)."
\n";
if (count($aRows) == 0)
{
echo "
no data
\n";
}
else
{
echo "
".count($aRows)." row(s)
\n";
// Table header
echo "
\n";
echo "
\n";
foreach (reset($aRows) as $key => $value)
{
echo "
".htmlentities($key)."
";
}
echo "
\n";
// Table body
foreach ($aRows as $aRow)
{
echo "
\n";
foreach ($aRow as $key => $value)
{
echo "
".htmlentities($value)."
";
}
echo "
\n";
}
echo "
\n";
}
}
}
/////////////////////////////////////////////////////////////////////////////////////
// Helper functions
/////////////////////////////////////////////////////////////////////////////////////
function printMenu($sConfigFile)
{
$sClassCount = count(MetaModel::GetClasses());
$bHasDB = MetaModel::DBExists(false); // no need to be complete to consider that something already exists
$sUrl = "?config=".urlencode($sConfigFile);
echo "
\n";
exit;
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////
//
// M a i n P r o g r a m
//
/////////////////////////////////////////////////////////////////////////////////////////////////
require_once('../core/cmdbobject.class.inc.php');
$sConfigFile = ReadParam("config", '');
if (empty($sConfigFile))
{
printConfigList();
exit;
}
MetaModel::Startup($sConfigFile, true); // allow missing DB
$sBaseArgs = "config=".urlencode($sConfigFile);
$sTodo = ReadParam("todo", "");
if ($sTodo == 'execsql')
{
$sSql = ReadMandatoryParam("sql");
$aSql = explode("##SEP##", $sSql);
$sConfirm = ReadParam("confirm");
if (empty($sConfirm) || ($sConfirm != "Yes"))
{
echo "\n";
}
else
{
foreach ($aSql as $sOneSingleSql)
{
echo "Executing command: $sOneSingleSql\n";
CMDBSource::Query($sOneSingleSql);
echo "... done!\n";
}
}
}
else
{
$sBaseUrl = "?$sBaseArgs&todo=execsql";
switch ($sTodo)
{
case "createdb":
// do NOT print the menu, because it will change...
break;
default:
printMenu($sConfigFile);
}
switch ($sTodo)
{
case "showtables":
ShowDatabaseInfo();
break;
case "showbizmodel":
ShowBizModel($sBaseArgs);
break;
case "showclass":
$sClass = ReadMandatoryParam("class");
ShowClass($sClass, $sBaseArgs);
break;
case "showzlists":
ShowZLists($sBaseArgs);
break;
case "debugquery":
DebugQuery($sConfigFile);
break;
case "createdb":
$sRes = CreateDB();
// As the menu depends on the existence of the DB, we have to do display it right after the job is done
printMenu($sConfigFile);
echo $sRes;
break;
case "checkmodel":
echo "Check definitions...\n";
MetaModel::CheckDefinitions();
echo "done...\n";
break;
case "checkmodeltodb":
echo "Check DB format...\n";
list($aErrors, $aSugFix) = MetaModel::DBCheckFormat();
DisplayDBFormatIssues($aErrors, $aSugFix, $sBaseUrl, $sSQLStatementArgName = "sql");
echo "done...\n";
break;
case "checkdb":
echo "Check DB integrity...\n";
MetaModel::DBCheckIntegrity($sBaseUrl, "sql");
echo "done...\n";
break;
case "dumpdb":
echo "Dump DB data...\n";
DumpDatabase();
echo "done...\n";
break;
case "userrightssetup":
echo "Setup user rights module (init DB)...\n";
UserRights::Setup();
echo "done...\n";
break;
case "checkall":
echo "Check definitions...\n";
MetaModel::CheckDefinitions();
echo "done...\n";
echo "Check DB format...\n";
list($aErrors, $aSugFix) = MetaModel::DBCheckFormat();
DisplayDBFormatIssues($aErrors, $aSugFix, $sBaseUrl, $sSQLStatementArgName = "sql");
echo "done...\n";
echo "Check DB integrity...\n";
MetaModel::DBCheckIntegrity($sBaseUrl, "sql");
echo "done...\n";
break;
}
}
?>