function _clauseTermCheck($t, $row) { $tt = $t->type; // collect columns if ($tt === "ti" || $tt === "ab" || $tt === "au" || $tt === "co") { return $this->_clauseTermCheckField($t, $row); } else { if ($tt === "au_cid") { assert(is_array($t->value)); return $this->_clauseTermCheckFlags($t, $row) && $row->{$t->link} != 0; } else { if ($tt === "re" || $tt === "conflict" || $tt === "revpref" || $tt === "cmt" || $tt === "cmttag") { if (!$this->_clauseTermCheckFlags($t, $row)) { return false; } else { $fieldname = $t->link; return $t->value->test((int) $row->{$fieldname}); } } else { if ($tt === "pn") { if (count($t->value[0]) && array_search($row->paperId, $t->value[0]) === false) { return false; } else { if (count($t->value[1]) && array_search($row->paperId, $t->value[1]) !== false) { return false; } else { return true; } } } else { if ($tt === "pf") { if (!$this->_clauseTermCheckFlags($t, $row)) { return false; } else { $ans = true; for ($i = 0; $ans && $i < count($t->value); $i += 2) { $fieldname = $t->value[$i]; $expr = $t->value[$i + 1]; if (is_array($expr)) { $ans = in_array($row->{$fieldname}, $expr); } else { $ans = CountMatcher::compare_string($row->{$fieldname}, $expr); } } return $ans; } } else { if ($tt === "tag" || $tt === "topic") { if (!$this->_clauseTermCheckFlags($t, $row)) { return false; } $fieldname = $t->link; if ($t->value[0] === "none") { return $row->{$fieldname} == 0; } else { return $row->{$fieldname} != 0; } } else { if ($tt === "option") { if (!$this->_clauseTermCheckFlags($t, $row)) { return false; } $fieldname = $t->link; if ($row->{$fieldname} == 0) { return false; } $om = $t->value; if ($om->kind) { $ov = $row->option($om->option->id); if ($om->kind === "attachment-count" && $ov) { return CountMatcher::compare(count($ov->values), $om->compar, $om->value); } else { if ($om->kind === "attachment-name" && $ov) { $reg = self::analyze_field_preg($om->value); foreach ($ov->documents($row) as $doc) { if (self::match_field_preg($reg, $doc->filename, false)) { return true; } } } } return false; } return true; } else { if ($tt === "formula") { $formulaf = $t->link; return !!$formulaf($row, null, $this->contact); } else { if ($tt === "not") { return !$this->_clauseTermCheck($t->value[0], $row); } else { if ($tt === "and" || $tt === "and2") { foreach ($t->value as $subt) { if (!$this->_clauseTermCheck($subt, $row)) { return false; } } return true; } else { if ($tt === "or") { foreach ($t->value as $subt) { if ($this->_clauseTermCheck($subt, $row)) { return true; } } return false; } else { if ($tt === "then") { for ($i = 0; $i < $t->nthen; ++$i) { if ($this->_clauseTermCheck($t->value[$i], $row)) { return true; } } return false; } else { if ($tt === "f") { return false; } else { if ($tt === "t" || $tt === "revadj") { return true; } else { error_log("PaperSearch::_clauseTermCheck: {$tt} defaults, correctness unlikely"); return true; } } } } } } } } } } } } } } }