mirror of
https://github.com/Combodo/iTop.git
synced 2026-02-13 07:24:13 +01:00
Compiler: fixed issue with quotes in the OQL of a menu.
SVN:trunk[2098]
This commit is contained in:
@@ -140,6 +140,13 @@ EOF;
|
||||
$oMenuNode = $aMenuNodes[$sMenuId];
|
||||
if ($oMenuNode->getAttribute("xsi:type") == 'MenuGroup')
|
||||
{
|
||||
// Note: this algorithm is wrong
|
||||
// 1 - the module may appear empty in the current module, while children are defined in other modules
|
||||
// 2 - check recursively that child nodes are not empty themselves
|
||||
// Future algorithm:
|
||||
// a- browse the modules and build the menu tree
|
||||
// b- browse the tree and blacklist empty menus
|
||||
// c- before compiling, discard if blacklisted
|
||||
if (!in_array($oMenuNode->getAttribute("id"), $aParentMenus))
|
||||
{
|
||||
// Discard empty menu groups
|
||||
@@ -311,18 +318,18 @@ EOF;
|
||||
elseif (substr($sPath, 0, 2) == '$$')
|
||||
{
|
||||
// Absolute
|
||||
$sPHP = "'".addslashes(substr($sPath, 2))."'";
|
||||
$sPHP = self::QuoteForPHP(substr($sPath, 2));
|
||||
}
|
||||
elseif (substr($sPath, 0, 1) == '$')
|
||||
{
|
||||
// Relative to the application
|
||||
if ($bIsUrl)
|
||||
{
|
||||
$sPHP = "utils::GetAbsoluteUrlAppRoot().'".addslashes(substr($sPath, 1))."'";
|
||||
$sPHP = "utils::GetAbsoluteUrlAppRoot().".self::QuoteForPHP(substr($sPath, 1));
|
||||
}
|
||||
else
|
||||
{
|
||||
$sPHP = "APPROOT.'".addslashes(substr($sPath, 1))."'";
|
||||
$sPHP = "APPROOT.".self::QuoteForPHP(substr($sPath, 1));
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -330,7 +337,7 @@ EOF;
|
||||
// Relative to the module
|
||||
if ($bIsUrl)
|
||||
{
|
||||
$sPHP = "utils::GetAbsoluteUrlAppRoot().'".addslashes($sModuleRelativeDir.''.$sPath)."'";
|
||||
$sPHP = "utils::GetAbsoluteUrlAppRoot().".self::QuoteForPHP($sModuleRelativeDir.''.$sPath);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -391,6 +398,16 @@ EOF;
|
||||
return (string)$val;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds quotes and escape characters
|
||||
*/
|
||||
protected function QuoteForPHP($sStr)
|
||||
{
|
||||
$sEscaped = str_replace(array('\\', '"', "\n"), array('\\\\', '\\"', '\\n'), $sStr);
|
||||
$sRet = '"'.$sEscaped.'"';
|
||||
return $sRet;
|
||||
}
|
||||
|
||||
protected function CompileClass($oClass, $sModuleRelativeDir, $oP)
|
||||
{
|
||||
$sClass = $oClass->getAttribute('id');
|
||||
@@ -565,8 +582,8 @@ EOF;
|
||||
// deprecated: $aParameters['jointype'] = 'null';
|
||||
if ($sOql = $oField->GetChildText('filter'))
|
||||
{
|
||||
$sEscapedOql = addslashes($sOql);
|
||||
$aParameters['allowed_values'] = "new ValueSetObjects('$sEscapedOql')"; // or "new ValueSetObjects('SELECT xxxx')"
|
||||
$sEscapedOql = self::QuoteForPHP($sOql);
|
||||
$aParameters['allowed_values'] = "new ValueSetObjects($sEscapedOql)"; // or "new ValueSetObjects('SELECT xxxx')"
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -584,8 +601,8 @@ EOF;
|
||||
{
|
||||
if ($sOql = $oField->GetChildText('filter'))
|
||||
{
|
||||
$sEscapedOql = addslashes($sOql);
|
||||
$aParameters['allowed_values'] = "new ValueSetObjects('$sEscapedOql')"; // or "new ValueSetObjects('SELECT xxxx')"
|
||||
$sEscapedOql = self::QuoteForPHP($sOql);
|
||||
$aParameters['allowed_values'] = "new ValueSetObjects($sEscapedOql)"; // or "new ValueSetObjects('SELECT xxxx')"
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -621,7 +638,7 @@ EOF;
|
||||
$aValues = array();
|
||||
foreach($oValueNodes as $oValue)
|
||||
{
|
||||
// new style... $aValues[] = "'".addslashes($oValue->textContent)."'";
|
||||
// new style... $aValues[] = self::QuoteForPHP($oValue->textContent);
|
||||
$aValues[] = $oValue->textContent;
|
||||
}
|
||||
// new style... $sValues = 'array('.implode(', ', $aValues).')';
|
||||
@@ -839,9 +856,9 @@ EOF;
|
||||
break;
|
||||
|
||||
case 'OQLMenuNode':
|
||||
$sOQL = addslashes($oMenu->GetChildText('oql'));
|
||||
$sOQL = self::QuoteForPHP($oMenu->GetChildText('oql'));
|
||||
$bSearch = ($oMenu->GetChildText('do_search') == '1') ? 'true' : 'false';
|
||||
$sNewMenu = "new OQLMenuNode('$sMenuId', '$sOQL', $sParentSpec, $fRank, $bSearch);";
|
||||
$sNewMenu = "new OQLMenuNode('$sMenuId', $sOQL, $sParentSpec, $fRank, $bSearch);";
|
||||
break;
|
||||
|
||||
case 'NewObjectMenuNode':
|
||||
@@ -881,8 +898,8 @@ EOF;
|
||||
$aPHPMenu = array("\$__comp_menus__['$sMenuId'] = $sNewMenu");
|
||||
if ($sAutoReload = $oMenu->GetChildText('auto_reload'))
|
||||
{
|
||||
$sAutoReload = addslashes($sAutoReload);
|
||||
$aPHPMenu[] = "\$__comp_menus__['$sMenuId']->SetParameters(array('auto_reload' => '$sAutoReload'));";
|
||||
$sAutoReload = self::QuoteForPHP($sAutoReload);
|
||||
$aPHPMenu[] = "\$__comp_menus__['$sMenuId']->SetParameters(array('auto_reload' => $sAutoReload));";
|
||||
}
|
||||
|
||||
$sAdminOnly = $oMenu->GetChildText('enable_admin_only');
|
||||
|
||||
Reference in New Issue
Block a user