function fetch_keywords_list($threadinfo, $pagetext = '') { global $vbphrase, $vbulletin; require_once DIR . '/includes/functions_search.php'; require_once DIR . '/includes/class_taggablecontent.php'; $keywords = vB_Taggable_Content_Item::filter_tag_list($threadinfo['taglist'], $errors, false); if (!empty($threadinfo['prefixid'])) { $prefix = $vbphrase["prefix_{$threadinfo['prefixid']}_title_plain"]; $keywords[] = trim($prefix); } if (!empty($pagetext)) { // title has already been htmlspecialchar'd, pagetext has not $words = fetch_postindex_text(unhtmlspecialchars($threadinfo['title']) . ' ' . $pagetext); $wordarray = split_string($words); $sorted_counts = array_count_values($wordarray); arsort($sorted_counts); require DIR . '/includes/searchwords.php'; // get the stop word list; allow multiple requires $badwords = array_merge($badwords, preg_split('/\\s+/s', $vbulletin->options['badwords'], -1, PREG_SPLIT_NO_EMPTY)); foreach ($sorted_counts as $word => $count) { $word = trim($word); if (in_array(vbstrtolower($word), $badwords)) { continue; } if (vbstrlen($word) <= $vbulletin->options['minsearchlength'] and !in_array(vbstrtolower($word), $goodwords)) { continue; } $word = htmlspecialchars_uni($word); if (!in_array($word, $keywords)) { $keywords[] = $word; } if (sizeof($keywords) >= 50) { break; } } } return implode(', ', $keywords); }
function tagdomerge() { global $vbulletin, $vbphrase, $db; $taglist = tagcp_fetch_tag_list(); if (!sizeof($taglist)) { print_cp_header($vbphrase['tag_manager']); print_stop_message('no_tags_selected'); } $vbulletin->input->clean_array_gpc('p', array( 'tagtext' => TYPE_NOHTML )); $tagtext = $vbulletin->GPC['tagtext']; $name_changed = false; $tagdm = datamanager_init('tag', $vbulletin, ERRTYPE_ARRAY); if (!$tagdm->fetch_by_tagtext($tagtext)) { //bail on errors if ($tagdm->errors) { print_cp_header($vbphrase['tag_manager']); print_stop_message('generic_error_x', implode('<br /><br />', $tagdm->errors)); } //otherwise create tag $errors = array(); $valid = vB_Taggable_Content_Item::filter_tag_list(array($vbulletin->GPC['tagtext']), $errors); if ($errors) { print_cp_header($vbphrase['tag_manager']); print_stop_message('generic_error_x', implode('<br /><br />', $errors)); } if (!empty($valid)) { $tagdm->set('tagtext', $valid[0]); $tagdm->set('dateline', TIMENOW); if ($tagdm->errors) { print_cp_header($vbphrase['tag_manager']); print_stop_message('generic_error_x', implode('<br /><br />', $tagdm->errors)); } $tagdm->save(); } } else { //if the old tag and new differ only by case, then update if ($tagtext != $tagdm->fetch_field('tagtext') AND vbstrtolower($tagtext) == vbstrtolower($tagdm->fetch_field('tagtext')) ) { $name_changed = true; $tagdm->set('tagtext', $tagtext); $tagdm->save(); } } $targetid = $tagdm->fetch_field('tagid'); if (!$targetid) { print_cp_header($vbphrase['tag_manager']); print_stop_message('no_changes_made'); } // check if source and targed are the same if (sizeof($taglist) == 1 AND in_array($targetid, $taglist)) { if ($name_changed) { print_cp_header($vbphrase['tag_manager']); print_stop_message('tags_edited_successfully'); } else { print_cp_header($vbphrase['tag_manager']); print_stop_message('no_changes_made'); } } if (false !== ($selected = array_search($targetid, $taglist))) { // ensure targetid is not in taglist unset($taglist[$selected]); } foreach ($taglist as $mergetagid) { if ($mergetagid != $targetid) { $mergetagdm = datamanager_init('tag', $vbulletin, ERRTYPE_ARRAY); if ($mergetagdm->fetch_by_id($mergetagid)) { $mergetagdm->make_synonym($targetid); } } } // need to invalidate the search and tag cloud caches build_datastore('tagcloud', '', 1); build_datastore('searchcloud', '', 1); setcookie('vbulletin_inlinetag', '', TIMENOW - 3600, '/'); print_cp_header($vbphrase['tag_manager']); print_stop_message('tags_edited_successfully'); }
public function insertTags($tagtext) { $response = array(); $exception = new vB_Exception_Api(); $tagdm = new vB_DataManager_Tag(vB_DataManager_Constants::ERRTYPE_ARRAY); if ($tagdm->fetch_by_tagtext($tagtext)) { $exception->add_error("tag_exists", array()); } if ($tagtext and is_string($tagtext)) { require_once DIR . '/includes/class_taggablecontent.php'; $valid = vB_Taggable_Content_Item::filter_tag_list(array($tagtext), $errors, false); } else { $exception->add_error("invalid_tag_value", array()); } if (!empty($valid)) { $tagdm->set('tagtext', $valid[0]); $tagdm->set('dateline', vB::getRequest()->getTimeNow()); if ($tagdm->errors) { $exception->add_error($tagdm->errors, array()); } $tagdm->save(); $response['result'] = true; } else { if (!empty($errors)) { foreach ($errors as $error) { $phraseid = $error[0]; unset($error[0]); $exception->add_error($phraseid, $error); } } else { $exception->add_error("invalid_tag_value", array()); } } //Exception Handling if ($exception->has_errors()) { throw $exception; } return $response; }