#247 Missing query argument (CSV export failing, or Emailed URL not working for lists)

SVN:trunk[758]
This commit is contained in:
Romain Quetiez
2010-09-03 21:42:37 +00:00
parent 1432f1ffe5
commit d1a84bfbc1
2 changed files with 30 additions and 18 deletions

View File

@@ -507,19 +507,21 @@ class DBObjectSearch
return $this->m_oSearchCondition->Render($this->m_aParams, false); return $this->m_oSearchCondition->Render($this->m_aParams, false);
} }
public function serialize() public function serialize($bDevelopParams = false, $aContextParams = null)
{ {
$sOql = $this->ToOql(); $sOql = $this->ToOql($bDevelopParams, $aContextParams);
return base64_encode($sOql); return base64_encode(serialize(array($sOql, $this->m_aParams)));
} }
static public function unserialize($sValue) static public function unserialize($sValue)
{ {
$sOql = base64_decode($sValue); $aData = unserialize(base64_decode($sValue));
$sOql = $aData[0];
$aParams = $aData[1];
// We've tried to use gzcompress/gzuncompress, but for some specific queries // We've tried to use gzcompress/gzuncompress, but for some specific queries
// it was not working at all (See Trac #193) // it was not working at all (See Trac #193)
// gzuncompress was issuing a warning "data error" and the return object was null // gzuncompress was issuing a warning "data error" and the return object was null
return self::FromOQL($sOql); return self::FromOQL($sOql, $aParams);
} }
// SImple BUt Structured Query Languag - SubuSQL // SImple BUt Structured Query Languag - SubuSQL
@@ -600,23 +602,28 @@ class DBObjectSearch
return $aRes; return $aRes;
} }
public function ToOQL(&$aParams = null) public function ToOQL($bDevelopParams = false, $aContextParams = null)
{ {
// Currently unused, but could be useful later // Currently unused, but could be useful later
$bRetrofitParams = false; $bRetrofitParams = false;
if (is_null($aParams)) if ($bDevelopParams)
{ {
// Leave it as is, the rendering will be made with parameters in clear if (is_null($aContextParams))
{
$aParams = array_merge($this->m_aParams);
}
else
{
$aParams = array_merge($aContextParams, $this->m_aParams);
}
} }
else else
{ {
if (count($this->m_aParams) > 0) // Leave it as is, the rendering will be made with parameters in clear
{ $aParams = null;
$aParams = array_merge($aParams, $this->m_aParams);
}
} }
$sSelectedClasses = implode(', ', array_keys($this->m_aSelectedClasses)); $sSelectedClasses = implode(', ', array_keys($this->m_aSelectedClasses));
$sRes = 'SELECT '.$sSelectedClasses.' FROM'; $sRes = 'SELECT '.$sSelectedClasses.' FROM';
@@ -739,14 +746,14 @@ class DBObjectSearch
// Do not filter out depending on user rights // Do not filter out depending on user rights
// In particular when we are currently in the process of evaluating the user rights... // In particular when we are currently in the process of evaluating the user rights...
static public function FromOQL_AllData($sQuery) static public function FromOQL_AllData($sQuery, $aParams = null)
{ {
$oRes = self::FromOQL($sQuery); $oRes = self::FromOQL($sQuery, $aParams);
$oRes->AllowAllData(); $oRes->AllowAllData();
return $oRes; return $oRes;
} }
static public function FromOQL($sQuery) static public function FromOQL($sQuery, $aParams = null)
{ {
if (empty($sQuery)) return null; if (empty($sQuery)) return null;
@@ -861,6 +868,11 @@ class DBObjectSearch
$oResultFilter->m_oSearchCondition = $oResultFilter->OQLExpressionToCondition($sQuery, $oConditionTree, $aAliases); $oResultFilter->m_oSearchCondition = $oResultFilter->OQLExpressionToCondition($sQuery, $oConditionTree, $aAliases);
} }
if (!is_null($aParams))
{
$oResultFilter->m_aParams = $aParams;
}
if ($bOQLCacheEnabled) if ($bOQLCacheEnabled)
{ {
self::$m_aOQLQueries[$sQuery] = clone $oResultFilter; self::$m_aOQLQueries[$sQuery] = clone $oResultFilter;

View File

@@ -109,11 +109,11 @@ class ValueSetObjects extends ValueSetDefinition
if ($this->m_bAllowAllData) if ($this->m_bAllowAllData)
{ {
$oFilter = DBObjectSearch::FromOQL_AllData($this->m_sFilterExpr, $aArgs); $oFilter = DBObjectSearch::FromOQL_AllData($this->m_sFilterExpr);
} }
else else
{ {
$oFilter = DBObjectSearch::FromOQL($this->m_sFilterExpr, $aArgs); $oFilter = DBObjectSearch::FromOQL($this->m_sFilterExpr);
} }
if (!$oFilter) return false; if (!$oFilter) return false;