Skip to content

Instantly share code, notes, and snippets.

@carlosleonam
Last active June 10, 2021 18:01
Show Gist options
  • Save carlosleonam/f73f02bbeffa2aa7ba45caa75409527e to your computer and use it in GitHub Desktop.
Save carlosleonam/f73f02bbeffa2aa7ba45caa75409527e to your computer and use it in GitHub Desktop.

Adianti - Implement conditional OR on 'onReload' after List searches

In Test

            if($filters = TSession::getValue(__CLASS__.'_filters'))
            {
                foreach ($filters as $filter)
                {
                    $filter_sql = $filter->dump();
                    if (substr_count($filter_sql,'||') > 0 ) {

                        $filter_sql = str_replace(['%',"'"],['',''], $filter_sql);
                        $filter_field = explode(' ', $filter_sql)[0];
                        $filter_operator = explode(' ', $filter_sql)[1];
                        $filters_or = explode('||', explode(' ', $filter_sql)[2]);

                        $operator_complement = $filter_operator == 'like' ? '%' : ''; // operator =, <, >, BETWEEN, IN, NOT IN, LIKE, IS NOT

                        $criteria_or = new TCriteria;
                        foreach ($filters_or as $filter_value) {

                            $filter_sub = new TFilter( $filter_field, $filter_operator, "NOESC:'$operator_complement$filter_value$operator_complement'" ) ;

                            $criteria_sub = new TCriteria;
                            $criteria_sub->add($filter_sub);
                            $criteria_or->add($criteria_sub, TExpression::OR_OPERATOR);
                        }
                        $criteria->add($criteria_or);

                    } else {

                        $criteria->add($filter);
                    }

                }
            }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment