diff --git a/pages/ITopConsultant.php b/pages/ITopConsultant.php deleted file mode 100644 index 1976d01b7..000000000 --- a/pages/ITopConsultant.php +++ /dev/null @@ -1,580 +0,0 @@ - - * @author Romain Quetiez - * @author Denis Flaven - * @license http://www.opensource.org/licenses/gpl-3.0.html LGPL - */ - -function sexyclass($sClass, $sBaseArgs) -{ - return "Class $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["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 "

$sKey

\n"; - echo "

$sDesc

\n"; - } -} - - -function ShowBizModel($sBaseArgs) -{ - 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"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "
\n"; - - if (empty($sQuery)) return; - - echo "

Testing query

\n"; - echo "

$sQuery

\n"; - - echo "

Follow up the query build

\n"; - MetaModel::StartDebugQuery(); - $oFlt = DBObjectSearch::FromOQL($sQuery); - echo "

To OQL: ".$oFlt->ToOQL()."

"; - $sSQL = MetaModel::MakeSelectQuery($oFlt); - MetaModel::StopDebugQuery(); - - echo "

Explain

\n"; - echo "\n"; - foreach (CMDBSource::ExplainQuery($sSQL) as $aRow) - { - echo " \n"; - echo " \n"; - echo " \n"; - } - echo "
".implode('', $aRow)."
\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 ""; - } - echo "\n"; - - // Table body - foreach ($aRows as $aRow) - { - echo "\n"; - foreach ($aRow as $key => $value) - { - echo ""; - } - echo "\n"; - } - - echo "
".htmlentities($key)."
".htmlentities($value)."
\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"; - - echo "

phpMyORM integration sandbox

\n"; - echo "

Target database: $sConfigFile

\n"; - echo "

$sClassCount classes referenced in the model

\n"; - echo ""; - echo "
\n"; -} - - -function printConfigList() -{ - echo "

phpMyORM integration sandbox

\n"; - echo "

Configuration sumary

\n"; - - $sBasePath = '..'; - - $aConfigs = array(); - foreach(scandir($sBasePath) as $sFile) - { - if (preg_match('/^config-.+\\.php$/', $sFile)) $aConfigs[] = $sFile; - } - - $aConfigDetails = array(); - foreach ($aConfigs as $sConfigFile) - { - $sRealPath = $sBasePath.'/'.$sConfigFile; - - $oConfig = new Config($sRealPath); - - $sAppModules = implode(', ', $oConfig->GetAppModules()); - $sDataModels = implode(', ', $oConfig->GetDataModels()); - $sAddons = implode(', ', $oConfig->GetAddons()); - - $sDBSubname = (strlen($oConfig->GetDBSubname()) > 0) ? '('.$oConfig->GetDBSubname().')' : ''; - - $sUrl = "?config=".urlencode($sRealPath); - $sHLink = "Manage $sConfigFile
\n"; - - $aConfigDetails[] = array('Config'=>$sHLink, 'Application'=>$sAppModules, 'Data models'=>$sDataModels, 'Addons'=>$sAddons, 'Database'=>$oConfig->GetDBHost().'/'.$oConfig->GetDBName().$sDBSubname.' as '.$oConfig->GetDBUser()); - } - echo MyHelpers::make_table_from_assoc_array($aConfigDetails); -} - - -function ReadParam($sName, $defaultValue = "") -{ - return isset($_REQUEST[$sName]) ? $_REQUEST[$sName] : $defaultValue; -} - -function ReadMandatoryParam($sName) -{ - $value = ReadParam($sName, null); - if (is_null($value)) - { - 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 "
"; - echo "

Wrong Database format

\n"; - 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 "
    \n"; - $i = 0; - foreach ($aTarget as $sTarget => $aMessages) - { - if ($sTarget != '*') - { - echo "

    Wrong declaration for attribute $sTarget

    \n"; - } - $sMsg = implode(' AND ', $aMessages); - if (!empty($sRepairUrl)) - { - $aSQLFixes = array_merge($aSQLFixes, $aSugFix[$sClass][$sTarget]); - $aCleanFixes = array(); - foreach($aSugFix[$sClass][$sTarget] as $sSQLFix) - { - if (!empty($sSQLFix)) - { - $aCleanFixes[] = $sSQLFix; - } - } - if (count($aCleanFixes) > 0) - { - $sSQLFixes = implode('; ', $aCleanFixes); - $sUrl = "$sRepairUrl&$sSQLStatementArgName=".urlencode($sSQLFixes); - echo "
  • $sMsg (fix it now!)
  • \n"; - } - else - { - echo "
  • $sMsg
  • \n"; - } - } - else - { - echo "
  • $sMsg (".htmlentities($sSQLFixes).")
  • \n"; - } - $i++; - } - echo "
\n"; - } - if (count($aSQLFixes) > 1) - { - MetaModel::DBShowApplyForm($sRepairUrl, $sSQLStatementArgName, $aSQLFixes); - } - echo "

Aborting...

\n"; - 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); // load data model only - - -$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"; - echo "\n"; - echo "\n"; - if (count($aSql) == 1) - { - echo "Do you confirm that you want to execute this command: ".htmlentities($aSql[0])." ?
\n"; - } - else - { - $sAllQueries = "
  • ".implode("
  • \n
  • ", $aSql)."
  • \n"; - echo "Please confirm that you want to execute these commands:
      ".$sAllQueries."
    \n"; - } - echo "\n"; - 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 "dictionarystats": - echo "Dictionary: statistics by language
    \n"; - foreach (Dict::GetLanguages() as $sLanguageCode => $aLanguageData) - { - list($aMissing, $aUnexpected, $aNotTranslated, $aOK) = Dict::MakeStats($sLanguageCode, 'EN US'); - echo "

    Stats for language: $sLanguageCode

    \n"; - echo "\n"; - } - break; - case "checkdictionary": - $sCategories = ReadMandatoryParam("categories"); - $sOutputFilter = ReadParam("outputfilter", ''); - echo "Dictionary: missing entries (categories: $sCategories, output: '$sOutputFilter')
    \n"; - echo "
    \n";
    -			echo MetaModel::MakeDictionaryTemplate($sCategories, $sOutputFilter);
    -			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 "checkmodeltoviews": - echo "Check Views...
    \n"; - list($aErrors, $aSugFix) = MetaModel::DBCheckViews(); - 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 Views...
    \n"; - list($aErrors, $aSugFix) = MetaModel::DBCheckViews(); - DisplayDBFormatIssues($aErrors, $aSugFix, $sBaseUrl, $sSQLStatementArgName = "sql"); - echo "done...
    \n"; - echo "Check DB integrity...
    \n"; - MetaModel::DBCheckIntegrity($sBaseUrl, "sql"); - echo "done...
    \n"; - break; - } -} - - -?>