private function runRules($datatype, $params, $data) { $rulegroups = $this->rg($params); if (empty($rulegroups)) { $this->sortResults($data, $params); return $this->printResults($data); } $rules = $this->getRules($rulegroups); $this->sortRules($rules); $exclude = isset($rules[0]) && $rules[0]->isWhitelistRule(); // exclude all if whitelist present $results = []; $extctx = new ExternalContext(); foreach ($data as $d) { $ctx = new Context($d); if ($exclude) { $ctx->setExcluded(true); } foreach ($rules as $rule) { if ($rule->getDatatype() == $datatype) { $rule->execute($extctx->wrap(new RuleContext($rule, $ctx))); } } $data = $ctx->getData(); if ($data != null) { $results[] = $data; } } $this->sortResults($results, $params); $merged_results = array_merge($extctx->getGroupData(), $results); return $this->printResults($merged_results); }