$filter = array(); // step 1. validation and normalize format, remove failed filters and fields foreach ($_POST['filters'] as $fId => $filterInfo) { // validate logic if (!array_key_exists('logic', $filterInfo) || $filterInfo['logic'] !== 'AND' && $filterInfo['logic'] !== 'OR') { continue; } $iFilterItems = array(); foreach ($filterInfo as $key => $subFilter) { // collect fields and subfilters if ($key === 'logic') { continue; } if ($subFilter['type'] == 'field') { // validate field and calc if (array_key_exists($subFilter['name'], $fieldList) && CReport::isValidFilterCompareVariation($subFilter['name'], $fieldList[$subFilter['name']]->getDataType(), $subFilter['compare'], $compareVariations)) { $iFilterItems[] = $subFilter; } } else { if ($subFilter['type'] == 'filter') { // hold link to another filter $iFilterItems[] = $subFilter; } } } if (!empty($iFilterItems)) { $iFilterItems['LOGIC'] = $filterInfo['logic']; $filter[$fId] = $iFilterItems; } } // step 2. replace (link) sub-filters if it still exists
$filter = array(); // step 1. validation and normalize format, remove failed filters and fields foreach ($_POST['filters'] as $fId => $filterInfo) { // validate logic if (!array_key_exists('logic', $filterInfo) || $filterInfo['logic'] !== 'AND' && $filterInfo['logic'] !== 'OR') { continue; } $iFilterItems = array(); foreach ($filterInfo as $key => $subFilter) { // collect fields and subfilters if ($key === 'logic') { continue; } if ($subFilter['type'] == 'field') { // validate field and calc if (array_key_exists($subFilter['name'], $fieldList) && CReport::isValidFilterCompareVariation($subFilter['name'], call_user_func(array($arParams['REPORT_HELPER_CLASS'], 'getFieldDataType'), $fieldList[$subFilter['name']]), $subFilter['compare'], $compareVariations)) { $iFilterItems[] = $subFilter; } } else { if ($subFilter['type'] == 'filter') { // hold link to another filter $iFilterItems[] = $subFilter; } } } if (!empty($iFilterItems)) { $iFilterItems['LOGIC'] = $filterInfo['logic']; $filter[$fId] = $iFilterItems; } } // step 2. replace (link) sub-filters if it still exists