public function processConstraints(array $constraints, XenForo_Search_DataHandler_Abstract $typeHandler = null) { $processed = parent::processConstraints($constraints, $typeHandler); foreach ($constraints as $constraint => $constraintInfo) { if ($constraint == Tinhte_XenTag_Constants::SEARCH_CONSTRAINT_TAGS) { $processed[$constraint] = array('metadata' => array(Tinhte_XenTag_Constants::SEARCH_METADATA_TAGS, Tinhte_XenTag_Helper::getSafeTagsTextArrayForSearch($constraintInfo))); } } return $processed; }
protected function _insertIntoIndex(XenForo_Search_Indexer $indexer, array $data, array $parentData = null) { $message = $data['message']; $message = trim(XenForo_Helper_String::stripQuotes($message, 0)); $tagTexts = Tinhte_XenTag_Integration::parseHashtags($message); if (!empty($tagTexts)) { $extraMetadata = array(); $extraMetadata[Tinhte_XenTag_Constants::SEARCH_METADATA_TAGS] = Tinhte_XenTag_Helper::getSafeTagsTextArrayForSearch($tagTexts); $indexer = new Tinhte_XenTag_XenForo_Search_Indexer($indexer, $extraMetadata); } $result = parent::_insertIntoIndex($indexer, $data, $parentData); }
protected function _insertIntoIndex(XenForo_Search_Indexer $indexer, array $data, array $parentData = null) { $metadata = array(); if (isset($data[Tinhte_XenTag_Constants::FIELD_FORUM_TAGS])) { // sondh@2012-11-05 // added isset check before trying to unserialize the tags // or this may raise an exception (it happens because // XenForo_DataWriter::getMergedData doesn't return an array with all the fields // the array only includes new or existing data... // similar to Tinhte_XenTag_Search_DataHandler_Page $tagsOrTexts = Tinhte_XenTag_Helper::unserialize($data[Tinhte_XenTag_Constants::FIELD_FORUM_TAGS]); } else { $tagsOrTexts = array(); } $tagTexts = Tinhte_XenTag_Helper::getTextsFromTagsOrTexts($tagsOrTexts); $metadata[Tinhte_XenTag_Constants::SEARCH_METADATA_TAGS] = Tinhte_XenTag_Helper::getSafeTagsTextArrayForSearch($tagTexts); $indexer->insertIntoIndex(Tinhte_XenTag_Constants::CONTENT_TYPE_FORUM, $data['node_id'], $data['title'], $data['description'], XenForo_Application::$time, XenForo_Visitor::getUserId(), 0, $metadata); }
protected function _insertIntoIndex(XenForo_Search_Indexer $indexer, array $data, array $parentData = null) { if (isset($data[Tinhte_XenTag_Constants::FIELD_THREAD_TAGS])) { // sondh@2012-11-05 // added isset check before trying to unserialize the tags // read more about this in // Tinhte_XenTag_Search_DataHandler_Page::_insertIntoIndex $tagsOrTexts = Tinhte_XenTag_Helper::unserialize($data[Tinhte_XenTag_Constants::FIELD_THREAD_TAGS]); } else { $tagsOrTexts = array(); } if (!empty($tagsOrTexts)) { $extraMetadata = array(); $tagTexts = Tinhte_XenTag_Helper::getTextsFromTagsOrTexts($tagsOrTexts); $extraMetadata[Tinhte_XenTag_Constants::SEARCH_METADATA_TAGS] = Tinhte_XenTag_Helper::getSafeTagsTextArrayForSearch($tagTexts); $indexer = new Tinhte_XenTag_XenForo_Search_Indexer($indexer, $extraMetadata); } $result = parent::_insertIntoIndex($indexer, $data, $parentData); }
public static function processConstraint(XenForo_Search_SourceHandler_Abstract $sourceHandler, $constraint, $constraintInfo, array $constraints) { if ($constraint == Tinhte_XenTag_Constants::SEARCH_CONSTRAINT_TAGS) { return array('metadata' => array(Tinhte_XenTag_Constants::SEARCH_METADATA_TAGS, implode(' ', Tinhte_XenTag_Helper::getSafeTagsTextArrayForSearch($constraintInfo)))); } return false; }
public static function updateThreadDwFromPostDw(XenForo_DataWriter_Discussion_Thread $threadDw, XenForo_DataWriter_DiscussionMessage_Post $postDw) { if (!Tinhte_XenTag_Option::get('tagThreadWithHashtags')) { return false; } $message = $postDw->get('message'); $tagTexts = Tinhte_XenTag_Integration::parseHashtags($message); $threadTags = $threadDw->Tinhte_XenTag_getTags(); $threadTagTexts = Tinhte_XenTag_Helper::getTextsFromTagsOrTexts($threadTags); $threadSafes = Tinhte_XenTag_Helper::getSafeTagsTextArrayForSearch($threadTagTexts); $isChanged = false; foreach ($tagTexts as $tagText) { $safe = Tinhte_XenTag_Helper::getSafeTagTextForSearch($tagText); if (!in_array($safe, $threadSafes)) { $threadTags[] = $tagText; $threadSafes[] = $safe; $isChanged = true; } } if ($isChanged) { $threadDw->Tinhte_XenTag_setTags($threadTags); return true; } return false; }