Skip to content

Commit

Permalink
Fix for multiselect types (multi select dropdowns, joins) when eval'i…
Browse files Browse the repository at this point in the history
…ng a pre-filter.
  • Loading branch information
cheesegrits committed Jun 10, 2016
1 parent 30fdc1c commit c246153
Show file tree
Hide file tree
Showing 8 changed files with 34 additions and 20 deletions.
6 changes: 3 additions & 3 deletions components/com_fabrik/models/element.php
Original file line number Diff line number Diff line change
Expand Up @@ -4450,11 +4450,11 @@ public function getFilterValue($value, $condition, $eval)
* @param string $condition =/like etc.
* @param string $value search string - already quoted if specified in filter array options
* @param string $originalValue original filter value without quotes or %'s applied
* @param string $type filter type advanced/normal/prefilter/search/querystring/searchall
*
* @param string $type filter type advanced/normal/prefilter/search/querystring/sea* @
* @param string $filterEval eval the filter value
* @return string sql query part e,g, "key = value"
*/
public function getFilterQuery($key, $condition, $value, $originalValue, $type = 'normal')
public function getFilterQuery($key, $condition, $value, $originalValue, $type = 'normal', $filterEval = '0')
{
$this->encryptFieldName($key);

Expand Down
17 changes: 13 additions & 4 deletions components/com_fabrik/models/elementlist.php
Original file line number Diff line number Diff line change
Expand Up @@ -193,10 +193,11 @@ public function getFilterValue($value, $condition, $eval)
* @param string $value Search string - already quoted if specified in filter array options
* @param string $originalValue Original filter value without quotes or %'s applied
* @param string $type Filter type advanced/normal/prefilter/search/querystring/searchall
*
* @param string $evalFilter evaled (only used for multiselect types)
*
* @return string sql query part e,g, "key = value"
*/
public function getFilterQuery($key, $condition, $value, $originalValue, $type = 'normal')
public function getFilterQuery($key, $condition, $value, $originalValue, $type = 'normal', $evalFilter = '0')
{
$element = $this->getElement();
$condition = JString::strtoupper($condition);
Expand All @@ -205,7 +206,7 @@ public function getFilterQuery($key, $condition, $value, $originalValue, $type =

if ($element->filter_type == 'checkbox' || $element->filter_type == 'multiselect')
{
$str = $this->filterQueryMultiValues($key, $condition, $originalValue);
$str = $this->filterQueryMultiValues($key, $condition, $originalValue, $evalFilter);
}
else
{
Expand Down Expand Up @@ -246,13 +247,21 @@ public function getFilterQuery($key, $condition, $value, $originalValue, $type =
* @param $key
* @param $condition
* @param $originalValue
* @param $evalFilter
*
* @return string
*/
protected function filterQueryMultiValues ($key, $condition, $originalValue)
protected function filterQueryMultiValues ($key, $condition, $originalValue, $evalFilter)
{
$str = array();

if ($evalFilter)
{
$originalValue = stripslashes(htmlspecialchars_decode($originalValue, ENT_QUOTES));
$originalValue = @eval($originalValue);
FabrikWorker::logEval($originalValue, 'Caught exception on eval of elementList::filterQueryMultiValues() ' . $key . ': %s');
}

if ($condition === 'NOT IN')
{
$partialComparison = ' NOT LIKE ';
Expand Down
2 changes: 1 addition & 1 deletion components/com_fabrik/models/list.php
Original file line number Diff line number Diff line change
Expand Up @@ -5312,7 +5312,7 @@ public function &getFilterArray()
}
else
{
$query = $elementModel->getFilterQuery($key, $condition, $value, $originalValue, $this->filters['search_type'][$i]);
$query = $elementModel->getFilterQuery($key, $condition, $value, $originalValue, $this->filters['search_type'][$i], $filterEval);
}

$this->filters['sqlCond'][$i] = $query;
Expand Down
7 changes: 4 additions & 3 deletions plugins/fabrik_element/birthday/birthday.php
Original file line number Diff line number Diff line change
Expand Up @@ -813,11 +813,12 @@ protected function getRangedFilterValue($value, $condition = '')
* @param string $value search string - already quoted if specified in filter array options
* @param string $originalValue original filter value without quotes or %'s applied
* @param string $type filter type advanced/normal/prefilter/search/querystring/searchall
*
* @param string $evalFilter evaled
*
* @return string sql query part e,g, "key = value"
*/

public function getFilterQuery($key, $condition, $value, $originalValue, $type = 'normal')
public function getFilterQuery($key, $condition, $value, $originalValue, $type = 'normal', $evalFilter = '0')
{
$params = $this->getParams();
$element = $this->getElement();
Expand Down Expand Up @@ -886,7 +887,7 @@ public function getFilterQuery($key, $condition, $value, $originalValue, $type =
return $query;
}

$query = parent::getFilterQuery($key, $condition, $value, $originalValue, $type);
$query = parent::getFilterQuery($key, $condition, $value, $originalValue, $type, $evalFilter);

return $query;
}
Expand Down
5 changes: 3 additions & 2 deletions plugins/fabrik_element/databasejoin/databasejoin.php
Original file line number Diff line number Diff line change
Expand Up @@ -2510,10 +2510,11 @@ public function getFilterValue($value, $condition, $eval)
* @param string $value search string - already quoted if specified in filter array options
* @param string $originalValue original filter value without quotes or %'s applied
* @param string $type filter type advanced/normal/prefilter/search/querystring/searchall
*
* @param string $evalFilter evaled
*
* @return string sql query part e,g, "key = value"
*/
public function getFilterQuery($key, $condition, $value, $originalValue, $type = 'normal')
public function getFilterQuery($key, $condition, $value, $originalValue, $type = 'normal', $evalFilter = '0')
{
/* $$$ rob $this->_rawFilter set in tableModel::getFilterArray()
used in pre-filter drop-down in admin to allow users to pre-filter on raw db join value */
Expand Down
5 changes: 3 additions & 2 deletions plugins/fabrik_element/date/date.php
Original file line number Diff line number Diff line change
Expand Up @@ -2095,10 +2095,11 @@ protected function strftimeTFormatToMySQL(&$format)
* @param string $value Search string - already quoted if specified in filter array options
* @param string $originalValue Original filter value without quotes or %'s applied
* @param string $type Filter type advanced/normal/prefilter/search/querystring/searchall
*
* @param string $evalFilter evaled
*
* @return string sql query part e,g, "key = value"
*/
public function getFilterQuery($key, $condition, $value, $originalValue, $type = 'normal')
public function getFilterQuery($key, $condition, $value, $originalValue, $type = 'normal', $evalFilter = '0')
{
$this->encryptFieldName($key);

Expand Down
7 changes: 4 additions & 3 deletions plugins/fabrik_element/dropdown/dropdown.php
Original file line number Diff line number Diff line change
Expand Up @@ -404,10 +404,11 @@ public function getValidationWatchElements($repeatCounter)
* @param string $value Search string - already quoted if specified in filter array options
* @param string $originalValue Original filter value without quotes or %'s applied
* @param string $type Filter type advanced/normal/prefilter/search/querystring/searchall
* @param string $evalFilter evaled
*
* @return string sql query part e,g, "key = value"
*/
public function getFilterQuery($key, $condition, $value, $originalValue, $type = 'normal')
public function getFilterQuery($key, $condition, $value, $originalValue, $type = 'normal', $evalFilter = '0')
{
$params = $this->getParams();
$condition = JString::strtoupper($condition);
Expand All @@ -417,11 +418,11 @@ public function getFilterQuery($key, $condition, $value, $originalValue, $type =
{
// Multiple select options need to be treated specially (regardless of filter type?)
// see http://fabrikar.com/forums/index.php?threads/how-filter-a-dropdown-element-in-the-plug-fabrik-content.42089/
$str = $this->filterQueryMultiValues($key, $condition, $originalValue);
$str = $this->filterQueryMultiValues($key, $condition, $originalValue, $evalFilter);
}
else
{
$str = parent::getFilterQuery($key, $condition, $value, $originalValue, $type);
$str = parent::getFilterQuery($key, $condition, $value, $originalValue, $type, $evalFilter);
}

return $str;
Expand Down
5 changes: 3 additions & 2 deletions plugins/fabrik_element/user/user.php
Original file line number Diff line number Diff line change
Expand Up @@ -799,10 +799,11 @@ protected function buildFilterJoin()
* @param string $value search string - already quoted if specified in filter array options
* @param string $originalValue original filter value without quotes or %'s applied
* @param string $type filter type advanced/normal/prefilter/search/querystring/searchall
*
* @param string $evalFilter evaled
*
* @return string sql query part e,g, "key = value"
*/
public function getFilterQuery($key, $condition, $value, $originalValue, $type = 'normal')
public function getFilterQuery($key, $condition, $value, $originalValue, $type = 'normal', $evalFilter = '0')
{
if (!$this->inJDb())
{
Expand Down

1 comment on commit c246153

@cheesegrits
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixes #1750

Please sign in to comment.