public function processConstraint(XenForo_Search_SourceHandler_Abstract $sourceHandler, $constraint, $constraintInfo, array $constraints) { $result = Tinhte_XenTag_Integration::processConstraint($sourceHandler, $constraint, $constraintInfo, $constraints); if ($result !== false) { return $result; } return parent::processConstraint($sourceHandler, $constraint, $constraintInfo, $constraints); }
/** * Process search constraints. * * @param array $constraints List of constraints: [constraint name] => limit (may be scalar or array) * @param XenForo_Search_DataHandler_Abstract|null $typeHandler * * @return array Processed constraints. Names as keys, value is array with possible keys: * * metadata - metadata value; keys: 0 = name of metadata, 1 = scalar/array allowed value(s) for metadata * * query - constraint to limit via query; keys: 0 = table alias, 1 = field, 2 = operator, 3 = scalar/array allowed value(s). Multiple for "=" operator only. * Note that the metadata and query keys are assumed to be equivalent. Engines need only use one (depending on engine details). */ public function processConstraints(array $constraints, XenForo_Search_DataHandler_Abstract $typeHandler = null) { $processed = array(); foreach ($constraints as $constraint => $constraintInfo) { if (is_array($constraintInfo) && count($constraintInfo) == 0 || is_string($constraintInfo) && $constraintInfo === '') { continue; } switch ($constraint) { case 'user': $processed[$constraint] = array('metadata' => array('user', $constraintInfo), 'query' => array('search_index', 'user_id', '=', $constraintInfo)); break; case 'user_content': if (!empty($constraints['user'])) { $processed[$constraint] = array('metadata' => array('content', $constraintInfo), 'query' => array('search_index', 'content_type', '=', $constraintInfo)); } break; case 'content': $processed[$constraint] = array('metadata' => array('content', $constraintInfo), 'query' => array('search_index', 'content_type', '=', $constraintInfo)); break; case 'node': $nodes = preg_split('/\\D/', strval($constraintInfo)); $processed[$constraint] = array('metadata' => array('node', array_map('intval', $nodes))); break; case 'date': $processed[$constraint] = array('query' => array('search_index', 'item_date', '>', intval($constraintInfo))); break; case 'date_max': $processed[$constraint] = array('query' => array('search_index', 'item_date', '<', intval($constraintInfo))); break; default: if ($typeHandler) { $newConstraint = $typeHandler->processConstraint($this, $constraint, $constraintInfo, $constraints); if ($newConstraint) { $processed[$constraint] = $newConstraint; } } } } return $processed; }