$sClass";
}
function sexyclasslist($aClasses, $sBaseArgs)
{
if (count($aClasses) == 0) return "";
$aRes = array();
foreach($aClasses as $sClass)
{
$aRes[] = sexyclass($sClass, $sBaseArgs);
}
return ("'".implode("', '", $aRes)."'");
}
function ShowClass($sClass, $sBaseArgs)
{
if (!MetaModel::IsValidClass($sClass))
{
echo "Invalid class, expecting a value in {".sexyclasslist(MetaModel::GetClasses(), $sBaseArgs)."}
\n";
return;
}
// en recursif jusque "": MetaModel::GetParentPersistentClass($sClass)
$aProps["Root class"] = MetaModel::GetRootClass($sClass);
$aProps["Parent classes"] = sexyclasslist(MetaModel::EnumParentClasses($sClass), $sBaseArgs);
$aProps["Child classes"] = sexyclasslist(MetaModel::EnumChildClasses($sClass), $sBaseArgs);
$aProps["Subclasses (children + pure PHP)"] = sexyclasslist(MetaModel::GetSubclasses($sClass), $sBaseArgs);
$aProps["Description"] = MetaModel::GetClassDescription($sClass);
$aProps["Autoincrement id?"] = MetaModel::IsAutoIncrementKey($sClass);
$aProps["Key label"] = MetaModel::GetKeyLabel($sClass);
$aProps["Name attribute"] = MetaModel::GetNameAttributeCode($sClass);
$aProps["Reconciliation keys"] = implode(", ", MetaModel::GetReconcKeys($sClass));
$aProps["DB key column"] = MetaModel::DBGetKey($sClass);
$aProps["DB class column"] = MetaModel::DBGetClassField($sClass);
$aProps["Is standalone?"] = MetaModel::IsStandaloneClass($sClass);
foreach (MetaModel::ListAttributeDefs($sClass) as $oAttDef)
{
$aAttProps = array();
$aAttProps["Direct field"] = $oAttDef->IsDirectField();
$aAttProps["External key"] = $oAttDef->IsExternalKey();
$aAttProps["External field"] = $oAttDef->IsExternalField();
$aAttProps["Link set"] = $oAttDef->IsLinkSet();
$aAttProps["Code"] = $oAttDef->GetCode();
$aAttProps["Label"] = $oAttDef->GetLabel();
$aAttProps["Description"] = $oAttDef->GetDescription();
$oValDef = $oAttDef->GetValuesDef();
if (is_object($oValDef))
{
//$aAttProps["Allowed values"] = $oValDef->Describe();
$aAttProps["Allowed values"] = "... object of class ".get_class($oValDef);
}
else
{
$aAttProps["Allowed values"] = "";
}
// MetaModel::IsAttributeInZList($sClass, $sListCode, $sAttCodeOrFltCode)
}
// $aProps["Description"] = MetaModel::DBGetTable($sClass, $sAttCode = null)
$aAttributes = array();
foreach (MetaModel::GetClassFilterDefs($sClass) as $oFilterDef)
{
$aAttProps = array();
$aAttProps["Label"] = $oFilterDef->GetLabel();
$aOpDescs = array();
foreach ($oFilterDef->GetOperators() as $sOpCode => $sOpDescription)
{
$sIsTheLooser = ($sOpCode == $oFilterDef->GetLooseOperator()) ? " (loose search)" : "";
$aOpDescs[] = "$sOpCode ($sOpDescription)$sIsTheLooser";
}
$aAttProps["Operators"] = implode(" / ", $aOpDescs);
$aAttributes[] = $aAttProps;
}
$aProps["Filters"] = MyHelpers::make_table_from_assoc_array($aAttributes);
foreach ($aProps as $sKey => $sDesc)
{
echo "
$sDesc
\n"; } } function ShowBizModel($sBaseArgs) { echo "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 "$sQuery
\n"; echo "To OQL: ".$oFlt->ToOQL()."
"; $sSQL = MetaModel::MakeSelectQuery($oFlt); MetaModel::StopDebugQuery(); echo "".implode(' | ', $aRow)." | \n"; echo "
no data
\n"; } else { echo "".count($aRows)." row(s)
\n"; // Table header echo "".htmlentities($key)." | "; } echo "
---|
".htmlentities($value)." | "; } echo "
$sClassCount classes referenced in the model
\n"; echo "Missing mandatory argument $sName
"; exit; } return $value; } function DisplayDBFormatIssues($aErrors, $aSugFix, $sRepairUrl = "", $sSQLStatementArgName = "") { $aSQLFixes = array(); // each and every SQL repair statement if (count($aErrors) > 0) { echo "The current database is not consistent with the given business model. Please investigate.
\n"; foreach ($aErrors as $sClass => $aTarget) { echo "Wrong declaration (or DB format ?) for class $sClass
\n"; echo "Wrong declaration for attribute $sTarget
\n"; $sMsg = implode(' AND ', $aMessages); if (!empty($sRepairUrl)) { $aSQLFixes = array_merge($aSQLFixes, $aSugFix[$sClass][$sTarget]); $sSQLFixes = implode('; ', $aSugFix[$sClass][$sTarget]); $sUrl = "$sRepairUrl&$sSQLStatementArgName=".urlencode($sSQLFixes); echo "Aborting...
\n"; echo "\n"; echo MetaModel::MakeDictionaryTemplate(); echo "\n"; 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; } } ?>