/** * {@inheritdoc} */ protected function execute(InputInterface $input, OutputInterface $output) { if (!Loader::includeModule('search')) { throw new BitrixException('Search module is not installed'); } $searchResult = array(); $bar = new ProgressBar($output, 0); do { $bar->display(); $searchResult = \CSearch::ReIndexAll($input->getOption('full'), static::UPDATE_TIME, $searchResult); $bar->advance(); $bar->clear(); if (is_array($searchResult) && $searchResult['MODULE'] == 'main') { list(, $path) = explode("|", $searchResult["ID"], 2); $output->writeln("\r " . $path, OutputInterface::VERBOSITY_VERBOSE); } } while (is_array($searchResult)); $bar->finish(); $bar->clear(); $output->write("\r"); if (ModuleManager::isModuleInstalled('socialnetwork')) { $output->writeln('<info>The Social Network module needs to be reindexed using the Social Network component in the public section of site.</info>'); } $output->writeln(sprintf('<info>Reindexed</info> %d element%s.', $searchResult, $searchResult > 1 ? 's' : '')); return 0; }
function BXDeleteFromSystem($absoluteFilePath, $path, $site) { $io = CBXVirtualIo::GetInstance(); $f = $io->GetFile($absoluteFilePath); $f->MarkWritable(); if (COption::GetOptionInt("main", "disk_space") > 0) { $file_size = $f->GetFileSize(); $quota = new CDiskQuota(); $quota->UpdateDiskQuota("file", $file_size, "delete"); } $sucess = $io->Delete($absoluteFilePath); if (!$sucess) { return false; } if (COption::GetOptionString($module_id, "log_page", "Y") == "Y") { $res_log['path'] = substr($path, 1); CEventLog::Log("content", "PAGE_DELETE", "main", "", serialize($res_log)); } $GLOBALS["APPLICATION"]->RemoveFileAccessPermission(array($site, $path)); if (CModule::IncludeModule("search")) { CSearch::DeleteIndex("main", $site . "|" . $path); } //Delete from rewrite rule CUrlRewriter::Delete(array("SITE_ID" => $site, "PATH" => $path)); if (class_exists("\\Bitrix\\Main\\Application", false)) { \Bitrix\Main\Component\ParametersTable::deleteByFilter(array("SITE_ID" => $site, "REAL_PATH" => $path)); } return true; }
function __prepareText($text) { $res = array(); if ($this->bSearch) { $res = stemming(CSearch::KillTags($text), $this->__lang); } else { $res = array(); } return $res; }
public function searchTitle($phrase = "", $nTopCount = 5, $arParams = array(), $bNotFilter = false, $order = "") { $DB = CDatabase::GetModuleConnection('search'); $bOrderByRank = $order == "rank"; $sqlHaving = array(); $sqlWords = array(); if (!empty($this->_arPhrase)) { $last = true; foreach (array_reverse($this->_arPhrase, true) as $word => $pos) { if ($last && !preg_match("/[\\n\\r \\t]\$/", $phrase)) { $last = false; if (strlen($word) >= $this->minLength) { $s = $sqlWords[] = "ct.WORD like '" . $DB->ForSQL($word) . "%'"; } else { $s = ""; } } else { $s = $sqlWords[] = "ct.WORD = '" . $DB->ForSQL($word) . "'"; } if ($s) { $sqlHaving[] = "(sum(" . $s . ") > 0)"; } } } if (!empty($sqlWords)) { $bIncSites = false; $strSqlWhere = CSearch::__PrepareFilter($arParams, $bIncSites); if ($bNotFilter) { if (!empty($strSqlWhere)) { $strSqlWhere = "NOT (" . $strSqlWhere . ")"; } else { $strSqlWhere = "1=0"; } } $strSql = "\n\t\t\t\tSELECT\n\t\t\t\t\tsc.ID\n\t\t\t\t\t,sc.MODULE_ID\n\t\t\t\t\t,sc.ITEM_ID\n\t\t\t\t\t,sc.TITLE\n\t\t\t\t\t,sc.PARAM1\n\t\t\t\t\t,sc.PARAM2\n\t\t\t\t\t,sc.DATE_CHANGE\n\t\t\t\t\t,L.DIR\n\t\t\t\t\t,L.SERVER_NAME\n\t\t\t\t\t,sc.URL as URL\n\t\t\t\t\t,scsite.URL as SITE_URL\n\t\t\t\t\t,scsite.SITE_ID\n\t\t\t\t\t,if(locate('" . $DB->ForSQL(ToUpper($phrase)) . "', upper(sc.TITLE)) > 0, 1, 0) RANK1\n\t\t\t\t\t,count(1) RANK2\n\t\t\t\t\t,min(ct.POS) RANK3\n\t\t\t\tFROM\n\t\t\t\t\tb_search_content_title ct\n\t\t\t\t\tINNER JOIN b_lang L ON ct.SITE_ID = L.LID\n\t\t\t\t\tinner join b_search_content sc on sc.ID = ct.SEARCH_CONTENT_ID\n\t\t\t\t\tINNER JOIN b_search_content_site scsite ON sc.ID = scsite.SEARCH_CONTENT_ID and ct.SITE_ID = scsite.SITE_ID\n\t\t\t\tWHERE\n\t\t\t\t\t" . CSearch::CheckPermissions("sc.ID") . "\n\t\t\t\t\tAND ct.SITE_ID = '" . SITE_ID . "'\n\t\t\t\t\tAND (" . implode(" OR ", $sqlWords) . ")\n\t\t\t\t\t" . (!empty($strSqlWhere) ? "AND " . $strSqlWhere : "") . "\n\t\t\t\tGROUP BY\n\t\t\t\t\tID, MODULE_ID, ITEM_ID, TITLE, PARAM1, PARAM2, DATE_CHANGE, DIR, SERVER_NAME, URL, SITE_URL, SITE_ID\n\t\t\t\t" . (count($sqlHaving) > 1 ? "HAVING " . implode(" AND ", $sqlHaving) : "") . "\n\t\t\t\tORDER BY " . ($bOrderByRank ? "RANK1 DESC, RANK2 DESC, RANK3 ASC, TITLE" : "DATE_CHANGE DESC, RANK1 DESC, RANK2 DESC, RANK3 ASC, TITLE") . "\n\t\t\t\tLIMIT 0, " . ($nTopCount + 1) . "\n\t\t\t"; $r = $DB->Query($strSql); parent::CDBResult($r); return true; } else { return false; } }
$arResult["order"]["active"] = "date"; $aSort = array("DATE_CHANGE" => "DESC"); } elseif ($_REQUEST["order"] == "topic") { $arResult["order"]["active"] = "topic"; $aSort = array("PARAM2" => "DESC", "DATE_CHANGE" => "ASC"); } $arFilter1 = array("MODULE_ID" => "forum", "SITE_ID" => SITE_ID, "QUERY" => $q, "TAGS" => $_REQUEST["tags"] ? $_REQUEST["tags"] : ""); if (intVal($_REQUEST["DATE_CHANGE"]) > 0) { $arFilter1["DATE_CHANGE"] = Date(CDatabase::DateFormatToPHP(CLang::GetDateFormat("FULL", LANGUAGE_ID)), time() - intVal($_REQUEST["DATE_CHANGE"]) * 24 * 3600 + CTimeZone::GetOffset()); } $arFilter2 = array(); if (!empty($arParams["FID_RANGE"]) || !empty($arParams["FID"])) { $arFilter2["PARAM1"] = empty($arParams["FID_RANGE"]) ? array() : array_keys($arResult["FORUMS"]); $arFilter2["PARAM1"] = empty($arParams["FID"]) ? $arFilter2["PARAM1"] : $arParams["FID"]; } $obSearch = new CSearch(); //When restart option is set we will ignore error on query with only stop words $obSearch->SetOptions(array("ERROR_ON_EMPTY_STEM" => $arParams["RESTART"] != "Y", "NO_WORD_LOGIC" => $arParams["NO_WORD_LOGIC"] == "Y")); $obSearch->Search($arFilter1, $aSort, array($arFilter2)); if ($obSearch->errorno != 0) { $arResult["ERROR_MESSAGE"] = $obSearch->error; } else { $obSearch->NavStart($arParams["TOPICS_PER_PAGE"], false); $obSearch->nPageWindow = $arParams["PAGE_NAVIGATION_WINDOW"]; $arResult["NAV_RESULT"] = $obSearch; $arResult["NAV_STRING"] = $obSearch->GetPageNavStringEx($navComponentObject, GetMessage("FL_TOPIC_LIST"), $arParams["PAGE_NAVIGATION_TEMPLATE"]); $arResult["EMPTY"] = "Y"; $topics = array(); if ($res = $obSearch->GetNext()) { $arResult["order"]["~relevance"] = $APPLICATION->GetCurPageParam("q=" . urlencode($q) . (!empty($arParams["FID"]) ? "&FORUM_ID=" . $arParams["FID"] : ""), array("FORUM_ID", "q", "order", "s", BX_AJAX_PARAM_ID)); $arResult["order"]["~topic"] = $APPLICATION->GetCurPageParam("q=" . urlencode($q) . (!empty($arParams["FID"]) ? "&FORUM_ID=" . $arParams["FID"] : "") . "&order=topic", array("FORUM_ID", "q", "order", "s", BX_AJAX_PARAM_ID));
function StemIndex($arLID, $ID, $sContent) { $DB = CDatabase::GetModuleConnection('search'); static $CACHE_SITE_LANGS = array(); $ID = intval($ID); $arLang = array(); if (!is_array($arLID)) { $arLID = array(); } foreach ($arLID as $site => $url) { if (!array_key_exists($site, $CACHE_SITE_LANGS)) { $db_site_tmp = CSite::GetByID($site); if ($ar_site_tmp = $db_site_tmp->Fetch()) { $CACHE_SITE_LANGS[$site] = array("LANGUAGE_ID" => $ar_site_tmp["LANGUAGE_ID"], "CHARSET" => $ar_site_tmp["CHARSET"], "SERVER_NAME" => $ar_site_tmp["SERVER_NAME"]); } else { $CACHE_SITE_LANGS[$site] = false; } } if (is_array($CACHE_SITE_LANGS[$site])) { $arLang[$CACHE_SITE_LANGS[$site]["LANGUAGE_ID"]] = true; } } foreach ($arLang as $lang => $value) { $sql_lang = $DB->ForSql($lang); $arDoc = stemming($sContent, $lang); $docLength = array_sum($arDoc); if (BX_SEARCH_VERSION > 1) { $arPos = stemming($sContent, $lang, false, true); CSearch::RegisterStem($arDoc); } if ($docLength > 0) { $doc = ""; $logDocLength = log($docLength < 20 ? 20 : $docLength); $strSqlPrefix = "\n\t\t\t\t\t\tinsert ignore into b_search_content_stem\n\t\t\t\t\t\t(SEARCH_CONTENT_ID, LANGUAGE_ID, STEM, TF" . (BX_SEARCH_VERSION > 1 ? ",PS" : "") . ")\n\t\t\t\t\t\tvalues\n\t\t\t\t"; $maxValuesLen = 2048; $strSqlValues = ""; if (BX_SEARCH_VERSION > 1) { foreach ($arDoc as $word => $count) { $stem_id = CSearch::RegisterStem($word); //This is almost impossible, but happens if ($stem_id > 0) { $strSqlValues .= ",\n(" . $ID . ", '" . $sql_lang . "'" . ", " . CSearch::RegisterStem($word) . ", " . number_format(log($count + 1) / $logDocLength, 4, ".", "") . ", " . number_format($arPos[$word] / $count, 4, ".", "") . ")"; } if (strlen($strSqlValues) > $maxValuesLen) { $DB->Query($strSqlPrefix . substr($strSqlValues, 2), false, "File: " . __FILE__ . "<br>Line: " . __LINE__); $strSqlValues = ""; } } } else { foreach ($arDoc as $word => $count) { $strSqlValues .= ",\n(" . $ID . ", '" . $sql_lang . "'" . ", '" . $DB->ForSQL($word) . "'" . ", " . number_format(log($count + 1) / $logDocLength, 4, ".", "") . ")"; if (strlen($strSqlValues) > $maxValuesLen) { $DB->Query($strSqlPrefix . substr($strSqlValues, 2), false, "File: " . __FILE__ . "<br>Line: " . __LINE__); $strSqlValues = ""; } } } if (strlen($strSqlValues) > 0) { $DB->Query($strSqlPrefix . substr($strSqlValues, 2), false, "File: " . __FILE__ . "<br>Line: " . __LINE__); $strSqlValues = ""; } } } }
</font></td> </tr> <tr><td colspan="2" align="center" class="forumbody"><font class="forumbodytext"> <input type="submit" name="s" value="Искать"> </font></td></tr> </table> </td></tr></table> </form> <?php if (strlen($q) > 0) { $FORUM_ID = IntVal($_REQUEST["FORUM_ID"]); if ($FORUM_ID <= 0) { $FORUM_ID = false; } $obSearch = new CSearch($q, SITE_ID, "forum", false, $FORUM_ID); if ($obSearch->errorno != 0) { ?> <font class="text">В поисковой фразе обнаружена ошибка:</font> <?php echo ShowError($obSearch->error); ?> <font class="text">Исправьте поисковую фразу и повторите поиск.</font><br><br> <font class="text"> <b>Синтаксис поискового запроса:</b><br><br> Обычно запрос представляет из себя просто одно или несколько слов, например: <br> <i>контактная информация</i><br> По такому запросу будут найдены страницы, на которых встречаются оба слова запроса. <br><br> Логические операторы позволяют строить более сложные запросы, например: <br> <i>контактная информация или телефон</i><br> По такому запросу
public static final function Delete($lesson_id) { global $USER_FIELD_MANAGER; list($lesson_id, $simulate, $check_permissions, $user_id) = self::_funcDelete_ParseOptions($lesson_id); if ($check_permissions) { $oAccess = CLearnAccess::GetInstance($user_id); if (!$oAccess->IsLessonAccessible($lesson_id, CLearnAccess::OP_LESSON_REMOVE)) { throw new LearnException('EA_ACCESS_DENIED', LearnException::EXC_ERR_ALL_ACCESS_DENIED); } } // Parents and childs of the lesson $arNeighboursEdges = self::ListImmediateNeighbours($lesson_id); // precache rights for lesson if ($check_permissions) { $IsLessonAccessibleFor_OP_LESSON_UNLINK_DESCENDANTS = $oAccess->IsLessonAccessible($lesson_id, CLearnAccess::OP_LESSON_UNLINK_DESCENDANTS); $IsLessonAccessibleFor_OP_LESSON_UNLINK_FROM_PARENTS = $oAccess->IsLessonAccessible($lesson_id, CLearnAccess::OP_LESSON_UNLINK_FROM_PARENTS); } foreach (GetModuleEvents('learning', 'OnBeforeLessonDelete', true) as $arEvent) { ExecuteModuleEventEx($arEvent, array($lesson_id)); } foreach ($arNeighboursEdges as $arEdge) { $child_lesson_id = (int) $arEdge['CHILD_LESSON']; $parent_lesson_id = (int) $arEdge['PARENT_LESSON']; if ($check_permissions) { $IsLessonAccessible = false; if ($child_lesson_id === $lesson_id) { // if we will be remove edge to parent - use precached rights for OP_LESSON_UNLINK_FROM_PARENTS $IsLessonAccessible = $IsLessonAccessibleFor_OP_LESSON_UNLINK_FROM_PARENTS && $oAccess->IsLessonAccessible($parent_lesson_id, CLearnAccess::OP_LESSON_UNLINK_DESCENDANTS); } elseif ($parent_lesson_id === $lesson_id) { // if we will be remove edge to child - use precached rights for OP_LESSON_UNLINK_DESCENDANTS $IsLessonAccessible = $IsLessonAccessibleFor_OP_LESSON_UNLINK_DESCENDANTS && $oAccess->IsLessonAccessible($child_lesson_id, CLearnAccess::OP_LESSON_UNLINK_FROM_PARENTS); } else { throw new LearnException('EA_FATAL: $lesson_id (' . $lesson_id . ') not equal to one of: $child_lesson_id (' . $child_lesson_id . '), $parent_lesson_id (' . $parent_lesson_id . ')', LearnException::EXC_ERR_ALL_LOGIC | LearnException::EXC_ERR_ALL_GIVEUP); } if (!$IsLessonAccessible) { throw new LearnException('EA_ACCESS_DENIED', LearnException::EXC_ERR_ALL_ACCESS_DENIED); } if ($simulate === false) { self::RelationRemove($parent_lesson_id, $child_lesson_id); } } } $linkedCourseId = self::GetLinkedCourse($lesson_id); // If lesson is course, remove course if ($linkedCourseId !== false) { global $DB; if ($simulate === false) { if (!$DB->Query("DELETE FROM b_learn_course_site WHERE COURSE_ID = " . (int) $linkedCourseId, true)) { throw new LearnException('EA_SQLERROR', LearnException::EXC_ERR_ALL_GIVEUP); } $rc = self::CourseBecomeLesson($linkedCourseId); // if course cannot be converted to lesson - don't remove lesson if ($rc === false) { throw new LearnException('EA_OTHER: lesson is unremovable because linked course is in use.', LearnException::EXC_ERR_LL_UNREMOVABLE_CL); } // reload cache of LINKED_LESSON_ID -> COURSE_ID self::GetCourseToLessonMap_ReloadCache(); if (CModule::IncludeModule("search")) { CSearch::DeleteIndex("learning", false, "C" . $linkedCourseId); CSearch::DeleteIndex("learning", "C" . $linkedCourseId); } } } // And remove lesson if ($simulate === false) { global $DB; $r = $DB->Query("SELECT PREVIEW_PICTURE, DETAIL_PICTURE \n\t\t\t\tFROM b_learn_lesson \n\t\t\t\tWHERE ID = " . (int) $lesson_id, true); if ($r === false) { throw new LearnException('EA_SQLERROR', LearnException::EXC_ERR_ALL_GIVEUP); } $arRes = $r->Fetch(); if (!$arRes) { throw new LearnException('EA_SQLERROR', LearnException::EXC_ERR_ALL_GIVEUP); } CFile::Delete($arRes['PREVIEW_PICTURE']); CFile::Delete($arRes['DETAIL_PICTURE']); // Remove questions $q = CLQuestion::GetList(array(), array('LESSON_ID' => $lesson_id)); while ($arQ = $q->Fetch()) { if (!CLQuestion::Delete($arQ['ID'])) { throw new LearnException('EA_QUESTION_NOT_REMOVED', LearnException::EXC_ERR_ALL_GIVEUP); } } CLearnGraphNode::Remove($lesson_id); $USER_FIELD_MANAGER->delete('LEARNING_LESSONS', $lesson_id); CLearnCacheOfLessonTreeComponent::MarkAsDirty(); CEventLog::add(array('AUDIT_TYPE_ID' => 'LEARNING_REMOVE_ITEM', 'MODULE_ID' => 'learning', 'ITEM_ID' => 'L #' . $lesson_id, 'DESCRIPTION' => 'lesson removed')); if (CModule::IncludeModule('search')) { CSearch::DeleteIndex('learning', false, 'L' . $lesson_id); CSearch::DeleteIndex('learning', 'L' . $lesson_id); } } if ($simulate === false) { foreach (GetModuleEvents('learning', 'OnAfterLessonDelete', true) as $arEvent) { ExecuteModuleEventEx($arEvent, array($lesson_id)); } } }
$whereFavorisSansCibles["search_auto"] = " LIKE '1'"; $tab_favoris_user_sans_cibles = $favoris_sans_cibles->loadList($whereFavorisSansCibles); unset($whereFavorisSansCibles["user_id"]); $function_id = $user->loadRefFunction()->_id; $whereFavoris["function_id"] = " = '{$function_id}'"; $tab_favoris_function_sans_cibles = $favoris_sans_cibles->loadList($whereFavorisSansCibles); unset($whereFavorisSansCibles["function_id"]); $group_id = $user->loadRefFunction()->group_id; $whereFavorisSansCibles["group_id"] = " = '{$group_id}'"; $tab_favoris_group_sans_cibles = $favoris->loadList($whereFavorisSansCibles); $tab_favoris += $tab_favoris_user_sans_cibles + $tab_favoris_function_sans_cibles + $tab_favoris_group_sans_cibles; } // On effectue la recherche automatique if (isset($tab_favoris)) { try { $search = new CSearch(); $results = $search->searchAuto($tab_favoris, $_ref_object); } catch (Exception $e) { CAppUI::displayAjaxMsg("search-not-connected", UI_MSG_ERROR); mbLog($e->getMessage()); } } // Récupération des rss items pour le marquage pmsi (preuves de recherche PMSI) $rss_items = array(); $items = array(); if ($contexte == "pmsi" && CModule::getActive("atih")) { $rss = new CRSS(); $rss->sejour_id = $sejour_id; $rss->loadMatchingObject(); $rss_items = $rss->loadRefsSearchItems(); foreach ($rss_items as $_items) {
function DoUninstall() { if (!check_bitrix_sessid()) { return false; } $GLOBALS["errors"] = false; $step = IntVal($_REQUEST["step"]); if ($step < 2) { $GLOBALS["APPLICATION"]->IncludeAdminFile(GetMessage("FORUM_DELETE"), $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/forum/install/do_uninstall1.php"); } else { if ($this->UnInstallDB(array("savedata" => $_REQUEST["savedata"]))) { if (CModule::IncludeModule("search")) { CSearch::DeleteIndex("forum"); } $this->UnInstallEvents(); $this->UnInstallFiles(); } $GLOBALS["CACHE_MANAGER"]->CleanAll(); $GLOBALS["stackCacheManager"]->CleanAll(); $GLOBALS["errors"] = $this->errors; $GLOBALS["APPLICATION"]->IncludeAdminFile(GetMessage("FORUM_DELETE"), $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/forum/install/do_uninstall2.php"); } }
function OnUserDelete($ID) { if (CModule::IncludeModule('search')) { CSearch::Index("intranet", "U" . $ID, array("TITLE" => "", "BODY" => ""), true); } }
function UnInstallDB($arParams = array()) { global $DB, $DBType, $APPLICATION; $this->errors = false; $arSQLErrors = array(); if (CModule::IncludeModule("search")) { CSearch::DeleteIndex("iblock"); } if (!CModule::IncludeModule("iblock")) { return false; } $arSql = $arErr = array(); if (!array_key_exists("savedata", $arParams) || $arParams["savedata"] != "Y") { $rsIBlock = CIBlock::GetList(array("ID" => "ASC"), array(), false); while ($arIBlock = $rsIBlock->Fetch()) { if ($arIBlock["VERSION"] == 2) { $arSql[] = "DROP TABLE b_iblock_element_prop_s" . $arIBlock["ID"]; $arSql[] = "DROP TABLE b_iblock_element_prop_m" . $arIBlock["ID"]; if ($DBType == "oracle") { $arSql[] = "DROP SEQUENCE sq_b_iblock_element_prop_m" . $arIBlock["ID"]; } } $GLOBALS["USER_FIELD_MANAGER"]->OnEntityDelete("IBLOCK_" . $arIBlock["ID"] . "._SECTION"); } foreach ($arSql as $strSql) { if (!$DB->Query($strSql, true)) { $arSQLErrors[] = "<hr><pre>Query:\n" . $strSql . "\n\nError:\n<font color=red>" . $DB->db_Error . "</font></pre>"; } } $db_res = $DB->Query("SELECT ID FROM b_file WHERE MODULE_ID = 'iblock'"); while ($arRes = $db_res->Fetch()) { CFile::Delete($arRes["ID"]); } $this->errors = $DB->RunSQLBatch($_SERVER['DOCUMENT_ROOT'] . "/bitrix/modules/iblock/install/db/" . $DBType . "/uninstall.sql"); $this->UnInstallTasks(); } if (is_array($this->errors)) { $arSQLErrors = array_merge($arSQLErrors, $this->errors); } if (!empty($arSQLErrors)) { $this->errors = $arSQLErrors; $APPLICATION->ThrowException(implode("", $arSQLErrors)); return false; } UnRegisterModuleDependences("main", "OnGroupDelete", "iblock", "CIBlock", "OnGroupDelete"); UnRegisterModuleDependences("main", "OnBeforeLangDelete", "iblock", "CIBlock", "OnBeforeLangDelete"); UnRegisterModuleDependences("main", "OnLangDelete", "iblock", "CIBlock", "OnLangDelete"); UnRegisterModuleDependences("main", "OnUserTypeRightsCheck", "iblock", "CIBlockSection", "UserTypeRightsCheck"); UnRegisterModuleDependences("search", "OnReindex", "iblock", "CIBlock", "OnSearchReindex"); UnRegisterModuleDependences("search", "OnSearchGetURL", "iblock", "CIBlock", "OnSearchGetURL"); UnRegisterModuleDependences("main", "OnEventLogGetAuditTypes", "iblock", "CIBlock", "GetAuditTypes"); UnRegisterModuleDependences("main", "OnEventLogGetAuditHandlers", "iblock", "CEventIBlock", "MakeIBlockObject"); UnRegisterModuleDependences("main", "OnGetRatingContentOwner", "iblock", "CRatingsComponentsIBlock", "OnGetRatingContentOwner"); UnRegisterModuleDependences("main", "OnTaskOperationsChanged", "iblock", "CIBlockRightsStorage", "OnTaskOperationsChanged"); UnRegisterModuleDependences("main", "OnGroupDelete", "iblock", "CIBlockRightsStorage", "OnGroupDelete"); UnRegisterModuleDependences("main", "OnUserDelete", "iblock", "CIBlockRightsStorage", "OnUserDelete"); UnRegisterModuleDependences("perfmon", "OnGetTableSchema", "iblock", "iblock", "OnGetTableSchema"); UnRegisterModuleDependences("sender", "OnConnectorList", "iblock", "\\Bitrix\\Iblock\\SenderEventHandler", "onConnectorListIblock"); UnRegisterModuleDependences("iblock", "OnIBlockPropertyBuildList", "iblock", "CIBlockProperty", "_DateTime_GetUserTypeDescription"); UnRegisterModuleDependences("iblock", "OnIBlockPropertyBuildList", "iblock", "CIBlockProperty", "_XmlID_GetUserTypeDescription"); UnRegisterModuleDependences("iblock", "OnIBlockPropertyBuildList", "iblock", "CIBlockProperty", "_FileMan_GetUserTypeDescription"); UnRegisterModuleDependences("iblock", "OnIBlockPropertyBuildList", "iblock", "CIBlockProperty", "_HTML_GetUserTypeDescription"); UnRegisterModuleDependences("iblock", "OnIBlockPropertyBuildList", "iblock", "CIBlockProperty", "_ElementList_GetUserTypeDescription"); UnRegisterModuleDependences("iblock", "OnIBlockPropertyBuildList", "iblock", "CIBlockProperty", "_Sequence_GetUserTypeDescription"); UnRegisterModuleDependences("iblock", "OnIBlockPropertyBuildList", "iblock", "CIBlockProperty", "_ElementAutoComplete_GetUserTypeDescription"); UnRegisterModuleDependences("iblock", "OnIBlockPropertyBuildList", "iblock", "CIBlockProperty", "_SKU_GetUserTypeDescription"); UnRegisterModuleDependences("iblock", "OnIBlockPropertyBuildList", "iblock", "CIBlockProperty", "_SectionAutoComplete_GetUserTypeDescription"); UnRegisterModule("iblock"); return true; }
function UpdateSearch($ID, $bOverWrite = false) { if (!CModule::IncludeModule("search")) { return; } global $DB; $ID = Intval($ID); static $arGroups = array(); static $arSITE = array(); $strSql = "\n\t\t\tSELECT BS.ID, BS.NAME, BS.DESCRIPTION_TYPE, BS.DESCRIPTION, BS.XML_ID as EXTERNAL_ID,\n\t\t\t\tBS.CODE, BS.IBLOCK_ID, B.IBLOCK_TYPE_ID,\n\t\t\t\t" . $DB->DateToCharFunction("BS.TIMESTAMP_X") . " as LAST_MODIFIED,\n\t\t\t\tB.CODE as IBLOCK_CODE, B.XML_ID as IBLOCK_EXTERNAL_ID, B.SECTION_PAGE_URL,\n\t\t\t\tB.ACTIVE as ACTIVE1,\n\t\t\t\tBS.GLOBAL_ACTIVE as ACTIVE2,\n\t\t\t\tB.INDEX_SECTION, B.RIGHTS_MODE\n\t\t\tFROM b_iblock_section BS, b_iblock B\n\t\t\tWHERE BS.IBLOCK_ID=B.ID\n\t\t\t\tAND BS.ID=" . $ID; $dbrIBlockSection = $DB->Query($strSql); if ($arIBlockSection = $dbrIBlockSection->Fetch()) { $IBLOCK_ID = $arIBlockSection["IBLOCK_ID"]; $SECTION_URL = "=ID=" . $arIBlockSection["ID"] . "&EXTERNAL_ID=" . $arIBlockSection["EXTERNAL_ID"] . "&IBLOCK_TYPE_ID=" . $arIBlockSection["IBLOCK_TYPE_ID"] . "&IBLOCK_ID=" . $arIBlockSection["IBLOCK_ID"] . "&IBLOCK_CODE=" . $arIBlockSection["IBLOCK_CODE"] . "&IBLOCK_EXTERNAL_ID=" . $arIBlockSection["IBLOCK_EXTERNAL_ID"] . "&CODE=" . $arIBlockSection["CODE"]; if ($arIBlockSection["ACTIVE1"] != "Y" || $arIBlockSection["ACTIVE2"] != "Y" || $arIBlockSection["INDEX_SECTION"] != "Y") { CSearch::DeleteIndex("iblock", "S" . $arIBlockSection["ID"]); return; } if (!array_key_exists($IBLOCK_ID, $arGroups)) { $arGroups[$IBLOCK_ID] = array(); $strSql = "SELECT GROUP_ID " . "FROM b_iblock_group " . "WHERE IBLOCK_ID= " . $IBLOCK_ID . " " . "\tAND PERMISSION>='R' " . "ORDER BY GROUP_ID"; $dbrIBlockGroup = $DB->Query($strSql); while ($arIBlockGroup = $dbrIBlockGroup->Fetch()) { $arGroups[$IBLOCK_ID][] = $arIBlockGroup["GROUP_ID"]; if ($arIBlockGroup["GROUP_ID"] == 2) { break; } } } if (!array_key_exists($IBLOCK_ID, $arSITE)) { $arSITE[$IBLOCK_ID] = array(); $strSql = "SELECT SITE_ID " . "FROM b_iblock_site " . "WHERE IBLOCK_ID= " . $IBLOCK_ID; $dbrIBlockSite = $DB->Query($strSql); while ($arIBlockSite = $dbrIBlockSite->Fetch()) { $arSITE[$IBLOCK_ID][] = $arIBlockSite["SITE_ID"]; } } $BODY = $arIBlockSection["DESCRIPTION_TYPE"] == "html" ? CSearch::KillTags($arIBlockSection["DESCRIPTION"]) : $arIBlockSection["DESCRIPTION"]; $BODY .= $GLOBALS["USER_FIELD_MANAGER"]->OnSearchIndex("IBLOCK_" . $arIBlockSection["IBLOCK_ID"] . "_SECTION", $arIBlockSection["ID"]); if ($arIBlockSection["RIGHTS_MODE"] !== "E") { $arPermissions = $arGroups[$IBLOCK_ID]; } else { $obSectionRights = new CIBlockSectionRights($IBLOCK_ID, $arIBlockSection["ID"]); $arPermissions = $obSectionRights->GetGroups(array("section_read")); } CSearch::Index("iblock", "S" . $ID, array("LAST_MODIFIED" => $arIBlockSection["LAST_MODIFIED"], "TITLE" => $arIBlockSection["NAME"], "PARAM1" => $arIBlockSection["IBLOCK_TYPE_ID"], "PARAM2" => $IBLOCK_ID, "SITE_ID" => $arSITE[$IBLOCK_ID], "PERMISSIONS" => $arPermissions, "URL" => $SECTION_URL, "BODY" => $BODY), $bOverWrite); } }
function UnInstallDB($arParams = Array()) { global $DB, $DBType, $APPLICATION; if(array_key_exists("savedata", $arParams) && $arParams["savedata"] != "Y") { $errors = $DB->RunSQLBatch($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/blog/install/".$DBType."/uninstall.sql"); if (!empty($errors)) { $APPLICATION->ThrowException(implode("", $errors)); return false; } else { $this->UnInstallUserFields(); } } if (CModule::IncludeModule("search")) CSearch::DeleteIndex("blog"); UnRegisterModuleDependences("search", "OnReindex", "blog", "CBlogSearch", "OnSearchReindex"); UnRegisterModuleDependences("main", "OnUserDelete", "blog", "CBlogUser", "Delete"); UnRegisterModuleDependences("main", "OnSiteDelete", "blog", "CBlogSitePath", "DeleteBySiteID"); UnRegisterModuleDependences("socialnetwork", "OnSocNetGroupDelete", "blog", "CBlogSoNetPost", "OnGroupDelete"); UnRegisterModuleDependences("socialnetwork", "OnSocNetFeaturesAdd", "blog", "CBlogSearch", "SetSoNetFeatureIndexSearch"); UnRegisterModuleDependences("socialnetwork", "OnSocNetFeaturesUpdate", "blog", "CBlogSearch", "SetSoNetFeatureIndexSearch"); UnRegisterModuleDependences("socialnetwork", "OnSocNetFeaturesPermsAdd", "blog", "CBlogSearch", "SetSoNetFeaturePermIndexSearch"); UnRegisterModuleDependences("socialnetwork", "OnSocNetFeaturesPermsUpdate", "blog", "CBlogSearch", "SetSoNetFeaturePermIndexSearch"); UnRegisterModuleDependences("main", "OnAfterAddRating", "blog", "CRatingsComponentsBlog", "OnAfterAddRating"); UnRegisterModuleDependences("main", "OnAfterUpdateRating", "blog", "CRatingsComponentsBlog", "OnAfterUpdateRating"); UnRegisterModuleDependences("main", "OnSetRatingsConfigs", "blog", "CRatingsComponentsBlog", "OnSetRatingConfigs"); UnRegisterModuleDependences("main", "OnGetRatingsConfigs", "blog", "CRatingsComponentsBlog", "OnGetRatingConfigs"); UnRegisterModuleDependences("main", "OnGetRatingsObjects", "blog", "CRatingsComponentsBlog", "OnGetRatingObject"); UnRegisterModuleDependences("main", "OnGetRatingContentOwner", "blog", "CRatingsComponentsBlog", "OnGetRatingContentOwner"); UnRegisterModuleDependences("im", "OnGetNotifySchema", "blog", "CBlogNotifySchema", "OnGetNotifySchema"); UnRegisterModuleDependences("main", "OnAfterRegisterModule", "main", "blog", "installUserFields", "/modules/blog/install/index.php"); // check UF UnRegisterModuleDependences('conversion', 'OnGetCounterTypes' , 'blog', '\Bitrix\Blog\Internals\ConversionHandlers', 'onGetCounterTypes'); UnRegisterModuleDependences('conversion', 'OnGetRateTypes' , 'blog', '\Bitrix\Blog\Internals\ConversionHandlers', 'onGetRateTypes'); UnRegisterModuleDependences('blog', 'OnPostAdd', 'blog', '\Bitrix\Blog\Internals\ConversionHandlers', 'onPostAdd'); UnRegisterModule("blog"); return true; }
function DELETE($options) { $io = self::GetIo(); if (isset($options['path'])) { $options['path'] = $this->_udecode($options['path']); } $this->IsDir($options); if ($this->arParams["not_found"]) { $GLOBALS["APPLICATION"]->ThrowException(GetMessage("WD_FILE_ERROR3"), "DESTINATION_FILE_OR_FOLDER_IS_NOT_FOUND"); return "404 Not found"; } if (!$this->CheckRights("DELETE", true, $options["path"])) { $this->ThrowAccessDenied(); return "403 Forbidden"; } $quota = false; if (COption::GetOptionInt("main", "disk_space") > 0) { $quota = new CDiskQuota(); } $trashPath = $this->GetMetaID("TRASH"); $arPath = explode("/", $this->arParams["item_id"]); if (!$this->arParams["is_dir"]) { //$file = $io->CombinePath($this->real_path_full, $this->arParams["item_id"]); //$path = $io->CombinePath($this->real_path, $this->arParams["item_id"]); $file = CWebDavBase::CleanRelativePathString($this->arParams["item_id"], $this->real_path_full); $path = CWebDavBase::CleanRelativePathString($this->arParams["item_id"], $this->real_path); if ($file === false || $path === false) { return "404 Not found"; } $arPath = explode("/", $this->arParams["item_id"]); if ($arPath[1] != $this->meta_names["TRASH"]["name"] && !isset($options['force'])) { return $this->_move_to_trash($options, $this->arParams); } else { // in trash or options[force] $oFile = $io->GetFile($file); $file_size = $oFile->GetFileSize(); if ($io->Delete($file)) { $this->_delete_props($this->arParams['item_id']); $GLOBALS["APPLICATION"]->RemoveFileAccessPermission(array(SITE_ID, $path)); if (CModule::IncludeModule("search")) { CSearch::DeleteIndex("main", SITE_ID . "|" . $path); } if ($quota) { $quota->updateDiskQuota("file", $file_size, "delete"); } } else { $GLOBALS["APPLICATION"]->ThrowException(GetMessage("WD_FILE_ERROR3"), "DESTINATION_FILE_OR_FOLDER_IS_NOT_FOUND"); return "404 Not found"; } } } else { if ($arPath[1] != $this->meta_names["TRASH"]["name"] && !isset($options['force'])) { return $this->_move_to_trash($options, $this->arParams); } else { $params = $this->GetFilesAndFolders($this->arParams["item_id"]); if (empty($params)) { return true; } rsort($params, SORT_STRING); foreach ($params as $file) { $path = str_replace($this->real_path_full, "", $file); $path = $io->CombinePath("/", $path); $file = $io->CombinePath($this->real_path_full, $path); if (!$io->ValidatePathString($file)) { return "404 Not found"; } if ($io->FileExists($file)) { //$path = str_replace($_SERVER['DOCUMENT_ROOT'], "", $file); $oFile = $io->GetFile($file); $file_size = $oFile->GetFileSize(); if ($io->Delete($file)) { $this->_delete_props(str_replace(array($this->real_path_full, "///", "//"), "/", $file)); $GLOBALS["APPLICATION"]->RemoveFileAccessPermission(array(SITE_ID, $path)); if (CModule::IncludeModule("search")) { CSearch::DeleteIndex("main", SITE_ID . "|" . $path); } if ($quota) { $quota->updateDiskQuota("file", $file_size, "delete"); } } else { $GLOBALS["APPLICATION"]->ThrowException(GetMessage("WD_FILE_ERROR3"), "DESTINATION_FILE_OR_FOLDER_IS_NOT_FOUND"); return "404 Not found"; } } elseif ($io->DirectoryExists($file)) { $path = str_replace($_SERVER['DOCUMENT_ROOT'], "", $file); if ($io->Delete($file)) { $this->_delete_props(str_replace(array($this->real_path_full, "///", "//"), "/", $file)); $GLOBALS["APPLICATION"]->RemoveFileAccessPermission(array(SITE_ID, $path)); } else { $GLOBALS["APPLICATION"]->ThrowException(GetMessage("WD_FILE_ERROR3"), "DESTINATION_FILE_OR_FOLDER_IS_NOT_FOUND"); return "404 Not found"; } } } if ($path == $trashPath) { $trashID = $this->GetMetaID('TRASH'); } } } clearstatcache(); return "204 No Content"; }
public static function _IndexPostComments($arParams = Array()) { if(IntVal($arParams["BLOG_ID"]) <= 0 || IntVal($arParams["POST_ID"]) <= 0 || !CModule::IncludeModule("search")) return false; if($arParams["USE_SOCNET"] == "Y") $arSp = CBlogComment::GetSocNetCommentPerms($arParams["POST_ID"]); $dbComment = CBlogComment::GetList(Array(), Array("BLOG_ID" => $arParams["BLOG_ID"], "POST_ID" => $arParams["POST_ID"], "PUBLISH_STATUS" => BLOG_PUBLISH_STATUS_PUBLISH), false, false, Array("ID", "POST_ID", "BLOG_ID", "PUBLISH_STATUS", "PATH", "DATE_CREATE", "POST_TEXT", "TITLE", "AUTHOR_ID")); while($arComment = $dbComment->Fetch()) { if(strlen($arComment["PATH"]) > 0) $arComment["PATH"] = str_replace("#comment_id#", $arComment["ID"], $arComment["PATH"]); elseif(strlen($arParams["PATH"]) > 0) $arComment["PATH"] = str_replace("#comment_id#", $arComment["ID"], $arParams["PATH"]); else { $arComment["PATH"] = CBlogPost::PreparePath( $arParams["BLOG_URL"], $arComment["POST_ID"], $arParams["SITE_ID"], false, $arParams["OWNER_ID"], $arParams["SOCNET_GROUP_ID"] ); } $arSearchIndex = array( "SITE_ID" => array($arParams["SITE_ID"] => $arComment["PATH"]), "LAST_MODIFIED" => $arComment["DATE_CREATE"], "PARAM1" => "COMMENT", "PARAM2" => $arComment["BLOG_ID"]."|".$arComment["POST_ID"], "PERMISSIONS" => array(2), "TITLE" => $arComment["TITLE"], "BODY" => blogTextParser::killAllTags($arComment["POST_TEXT"]), "INDEX_TITLE" => false, "USER_ID" => (IntVal($arComment["AUTHOR_ID"]) > 0) ? $arComment["AUTHOR_ID"] : false, "ENTITY_TYPE_ID" => "BLOG_COMMENT", "ENTITY_ID" => $arComment["ID"], ); if($arParams["USE_SOCNET"] == "Y") { $arSearchIndex["PERMISSIONS"] = $arSp; if(!in_array("U".$arComment["AUTHOR_ID"], $arSearchIndex["PERMISSIONS"])) $arSearchIndex["PERMISSIONS"][] = "U".$arComment["AUTHOR_ID"]; if(is_array($arSp)) { $sgId = array(); foreach($arSp as $perm) { if(strpos($perm, "SG") !== false) { $sgIdTmp = str_replace("SG", "", substr($perm, 0, strpos($perm, "_"))); if(!in_array($sgIdTmp, $sgId) && IntVal($sgIdTmp) > 0) $sgId[] = $sgIdTmp; } } if(!empty($sgId)) { $arSearchIndex["PARAMS"] = array( "socnet_group" => $sgId, "entity" => "socnet_group", ); } } } if(strlen($arComment["TITLE"]) <= 0) $arSearchIndex["TITLE"] = substr($arSearchIndex["BODY"], 0, 100); CSearch::Index("blog", "C".$arComment["ID"], $arSearchIndex, True); } }
function Update($ID, $arFields, $bSearchIndex = true) { global $DB; $ID = IntVal($ID); if(strlen($arFields["PATH"]) > 0) $arFields["PATH"] = str_replace("#post_id#", $ID, $arFields["PATH"]); $arFields1 = array(); foreach ($arFields as $key => $value) { if (substr($key, 0, 1) == "=") { $arFields1[substr($key, 1)] = $value; unset($arFields[$key]); } } if (!CBlogPost::CheckFields("UPDATE", $arFields, $ID)) return false; elseif(!$GLOBALS["USER_FIELD_MANAGER"]->CheckFields("BLOG_POST", $ID, $arFields)) return false; foreach(GetModuleEvents("blog", "OnBeforePostUpdate", true) as $arEvent) { if (ExecuteModuleEventEx($arEvent, Array($ID, &$arFields))===false) return false; } $arOldPost = CBlogPost::GetByID($ID); if(is_array($arFields["ATTACH_IMG"])) { if ( !array_key_exists("MODULE_ID", $arFields["ATTACH_IMG"]) || strlen($arFields["ATTACH_IMG"]["MODULE_ID"]) <= 0 ) $arFields["ATTACH_IMG"]["MODULE_ID"] = "blog"; $prefix = "blog"; if(strlen($arFields["URL"]) > 0) $prefix .= "/".$arFields["URL"]; CFile::SaveForDB($arFields, "ATTACH_IMG", $prefix); } $strUpdate = $DB->PrepareUpdate("b_blog_post", $arFields); foreach ($arFields1 as $key => $value) { if (strlen($strUpdate) > 0) $strUpdate .= ", "; $strUpdate .= $key."=".$value." "; } if (strlen($strUpdate) > 0) { $oldPostPerms = CBlogUserGroup::GetGroupPerms(1, $arOldPost["BLOG_ID"], $ID, BLOG_PERMS_POST); $strSql = "UPDATE b_blog_post SET ". " ".$strUpdate." ". "WHERE ID = ".$ID." "; $DB->Query($strSql, False, "File: ".__FILE__."<br>Line: ".__LINE__); unset($GLOBALS["BLOG_POST"]["BLOG_POST_CACHE_".$ID]); foreach(GetModuleEvents("blog", "OnBeforePostUserFieldUpdate", true) as $arEvent) ExecuteModuleEventEx($arEvent, Array("BLOG_POST", $ID, $arFields)); $GLOBALS["USER_FIELD_MANAGER"]->Update("BLOG_POST", $ID, $arFields); } else { $ID = False; } if ($ID) { $arNewPost = CBlogPost::GetByID($ID); if($arNewPost["PUBLISH_STATUS"] != $arOldPost["PUBLISH_STATUS"] || $arNewPost["BLOG_ID"] != $arOldPost["BLOG_ID"]) CBlog::SetStat($arNewPost["BLOG_ID"]); if ($arNewPost["BLOG_ID"] != $arOldPost["BLOG_ID"]) CBlog::SetStat($arOldPost["BLOG_ID"]); if (is_set($arFields, "PERMS_POST")) CBlogPost::SetPostPerms($ID, $arFields["PERMS_POST"], BLOG_PERMS_POST); if (is_set($arFields, "PERMS_COMMENT")) CBlogPost::SetPostPerms($ID, $arFields["PERMS_COMMENT"], BLOG_PERMS_COMMENT); if(array_key_exists("SOCNET_RIGHTS", $arFields)) { $arFields["SC_PERM_OLD"] = CBlogPost::GetSocNetPermsCode($ID); $arFields["SC_PERM"] = CBlogPost::UpdateSocNetPerms($ID, $arFields["SOCNET_RIGHTS"], $arNewPost); } foreach(GetModuleEvents("blog", "OnPostUpdate", true) as $arEvent) ExecuteModuleEventEx($arEvent, Array($ID, &$arFields)); if ($bSearchIndex && CModule::IncludeModule("search")) { $newPostPerms = CBlogUserGroup::GetGroupPerms(1, $arNewPost["BLOG_ID"], $ID, BLOG_PERMS_POST); $arBlog = CBlog::GetByID($arNewPost["BLOG_ID"]); if ( $arOldPost["PUBLISH_STATUS"] == BLOG_PUBLISH_STATUS_PUBLISH && $oldPostPerms >= BLOG_PERMS_READ && ( $arNewPost["PUBLISH_STATUS"] != BLOG_PUBLISH_STATUS_PUBLISH || $newPostPerms < BLOG_PERMS_READ ) || $arBlog["SEARCH_INDEX"] != "Y" ) { CSearch::Index("blog", "P".$ID, array( "TITLE" => "", "BODY" => "" ) ); CSearch::DeleteIndex("blog", false, "COMMENT", $arBlog["ID"]."|".$ID); } elseif ( $arNewPost["DATE_PUBLISHED"] == "Y" && $arNewPost["PUBLISH_STATUS"] == BLOG_PUBLISH_STATUS_PUBLISH && $newPostPerms >= BLOG_PERMS_READ && $arBlog["SEARCH_INDEX"] == "Y" ) { $tag = ""; $arGroup = CBlogGroup::GetByID($arBlog["GROUP_ID"]); if(strlen($arFields["PATH"]) > 0) { $arPostSite = array($arGroup["SITE_ID"] => $arFields["PATH"]); } elseif(strlen($arNewPost["PATH"]) > 0) { $arNewPost["PATH"] = ( strlen($arNewPost["CODE"]) > 0 ? str_replace("#post_id#", $arNewPost["CODE"], $arNewPost["PATH"]) : str_replace("#post_id#", $ID, $arNewPost["PATH"]) ); $arPostSite = array($arGroup["SITE_ID"] => $arNewPost["PATH"]); } else { $arPostSite = array( $arGroup["SITE_ID"] => CBlogPost::PreparePath( $arBlog["URL"], $arNewPost["ID"], $arGroup["SITE_ID"], false, $arBlog["OWNER_ID"], $arBlog["SOCNET_GROUP_ID"] ) ); } if ( $arBlog["USE_SOCNET"] == "Y" && CModule::IncludeModule("extranet") ) { $arPostSiteExt = CExtranet::GetSitesByLogDestinations($arFields["SC_PERM"]); foreach($arPostSiteExt as $lid) { if (!array_key_exists($lid, $arPostSite)) { $arPostSite[$lid] = str_replace( array("#user_id#", "#post_id#"), array($arBlog["OWNER_ID"], $arNewPost["ID"]), COption::GetOptionString("socialnetwork", "userblogpost_page", false, $lid) ); } } } if(strlen($arNewPost["CATEGORY_ID"])>0) { $arC = explode(",", $arNewPost["CATEGORY_ID"]); $arTag = Array(); foreach($arC as $v) { $arCategory = CBlogCategory::GetByID($v); $arTag[] = $arCategory["NAME"]; } $tag = implode(",", $arTag); } $searchContent = blogTextParser::killAllTags($arNewPost["DETAIL_TEXT"]); $searchContent .= "\r\n" . $GLOBALS["USER_FIELD_MANAGER"]->OnSearchIndex("BLOG_POST", $arNewPost["ID"]); $authorName = ""; if(IntVal($arNewPost["AUTHOR_ID"]) > 0) { $dbUser = CUser::GetByID($arNewPost["AUTHOR_ID"]); if($arUser = $dbUser->Fetch()) { $arTmpUser = array( "NAME" => $arUser["NAME"], "LAST_NAME" => $arUser["LAST_NAME"], "SECOND_NAME" => $arUser["SECOND_NAME"], "LOGIN" => $arUser["LOGIN"], ); $authorName = CUser::FormatName(CSite::GetNameFormat(), $arTmpUser, false, false); if(strlen($authorName) > 0) $searchContent .= "\r\n".$authorName; } } $arSearchIndex = array( "SITE_ID" => $arPostSite, "LAST_MODIFIED" => $arNewPost["DATE_PUBLISH"], "PARAM1" => "POST", "PARAM2" => $arNewPost["BLOG_ID"], "PARAM3" => $arNewPost["ID"], "PERMISSIONS" => array(2), "TITLE" => $arNewPost["TITLE"], "BODY" => $searchContent, "TAGS" => $tag, "USER_ID" => $arNewPost["AUTHOR_ID"], "ENTITY_TYPE_ID" => "BLOG_POST", "ENTITY_ID" => $arNewPost["ID"], ); $bIndexComment = false; if($arBlog["USE_SOCNET"] == "Y") { if(!empty($arFields["SC_PERM"])) { $arSearchIndex["PERMISSIONS"] = $arFields["SC_PERM"]; if($arFields["SC_PERM"] != $arFields["SC_PERM_OLD"]) $bIndexComment = true; } else $arSearchIndex["PERMISSIONS"] = CBlogPost::GetSocnetPermsCode($ID); if(!in_array("U".$arNewPost["AUTHOR_ID"], $arSearchIndex["PERMISSIONS"])) $arSearchIndex["PERMISSIONS"][] = "U".$arNewPost["AUTHOR_ID"]; if(is_array($arSearchIndex["PERMISSIONS"])) { $sgId = array(); foreach($arSearchIndex["PERMISSIONS"] as $perm) { if(strpos($perm, "SG") !== false) { $sgIdTmp = str_replace("SG", "", substr($perm, 0, strpos($perm, "_"))); if(!in_array($sgIdTmp, $sgId) && IntVal($sgIdTmp) > 0) $sgId[] = $sgIdTmp; } } if(!empty($sgId)) { $arSearchIndex["PARAMS"] = array( "socnet_group" => $sgId, "entity" => "socnet_group", ); } } // get mentions and grats $arMentionedUserID = CBlogPost::GetMentionedUserID($arNewPost); if (!empty($arMentionedUserID)) { if (!isset($arSearchIndex["PARAMS"])) { $arSearchIndex["PARAMS"] = array(); } $arSearchIndex["PARAMS"]["mentioned_user_id"] = $arMentionedUserID; } } CSearch::Index("blog", "P".$ID, $arSearchIndex, True); if(($arOldPost["PUBLISH_STATUS"] != BLOG_PUBLISH_STATUS_PUBLISH && $arNewPost["PUBLISH_STATUS"] == BLOG_PUBLISH_STATUS_PUBLISH) || $bIndexComment) //index comments { $arParamsComment = Array( "BLOG_ID" => $arBlog["ID"], "POST_ID" => $ID, "SITE_ID" => $arGroup["SITE_ID"], "PATH" => $arPostSite[$arGroup["SITE_ID"]]."?commentId=#comment_id###comment_id#", "BLOG_URL" => $arBlog["URL"], "OWNER_ID" => $arBlog["OWNER_ID"], "SOCNET_GROUP_ID" => $arBlog["SOCNET_GROUP_ID"], "USE_SOCNET" => $arBlog["USE_SOCNET"], ); CBlogComment::_IndexPostComments($arParamsComment); } } } } BXClearCache(true, '/blog/socnet_post/gen/'.$ID); return $ID; }
$arResult["order"]["active"] = "date"; $aSort = array("DATE_CHANGE" => "DESC"); } elseif ($_REQUEST["order"] == "topic") { $arResult["order"]["active"] = "topic"; $aSort = array("PARAM2" => "DESC", "DATE_CHANGE" => "ASC"); } $arFilter1 = array("MODULE_ID" => "forum", "SITE_ID" => SITE_ID, "QUERY" => $q, "TAGS" => $_REQUEST["tags"] ? $_REQUEST["tags"] : ""); if (intVal($_REQUEST["DATE_CHANGE"]) > 0) { $arFilter1["DATE_CHANGE"] = Date(CDatabase::DateFormatToPHP(CLang::GetDateFormat("FULL", LANGUAGE_ID)), time() - intVal($_REQUEST["DATE_CHANGE"]) * 24 * 3600 + CTimeZone::GetOffset()); } $arFilter2 = array(); if (!empty($arParams["FID_RANGE"]) || !empty($arParams["FID"])) { $arFilter2["PARAM1"] = empty($arParams["FID_RANGE"]) ? array() : array_keys($arResult["FORUMS"]); $arFilter2["PARAM1"] = empty($arParams["FID"]) ? $arFilter2["PARAM1"] : $arParams["FID"]; } $obSearch = new CSearch(); $obSearch->Search($arFilter1, $aSort, array($arFilter2)); if ($obSearch->errorno != 0) { $arResult["ERROR_MESSAGE"] = $obSearch->error; } else { $obSearch->NavStart($arParams["TOPICS_PER_PAGE"], false); $obSearch->nPageWindow = $arParams["PAGE_NAVIGATION_WINDOW"]; $arResult["NAV_RESULT"] = $obSearch; $arResult["NAV_STRING"] = $obSearch->GetPageNavStringEx($navComponentObject, GetMessage("FL_TOPIC_LIST"), $arParams["PAGE_NAVIGATION_TEMPLATE"]); $arResult["EMPTY"] = "Y"; $topics = array(); if ($res = $obSearch->GetNext()) { $arResult["order"]["~relevance"] = $APPLICATION->GetCurPageParam("q=" . urlencode($q) . (!empty($arParams["FID"]) ? "&FORUM_ID=" . $arParams["FID"] : ""), array("FORUM_ID", "q", "order", "s", BX_AJAX_PARAM_ID)); $arResult["order"]["~topic"] = $APPLICATION->GetCurPageParam("q=" . urlencode($q) . (!empty($arParams["FID"]) ? "&FORUM_ID=" . $arParams["FID"] : "") . "&order=topic", array("FORUM_ID", "q", "order", "s", BX_AJAX_PARAM_ID)); $arResult["order"]["~date"] = $APPLICATION->GetCurPageParam("q=" . urlencode($q) . (!empty($arParams["FID"]) ? "&FORUM_ID=" . $arParams["FID"] : "") . "&order=date", array("FORUM_ID", "q", "order", "s", BX_AJAX_PARAM_ID)); $arResult["order"]["relevance"] = htmlspecialcharsbx($arResult["order"]["~relevance"]);
protected function getFilter() { $arFilter = array("IBLOCK_ID" => $this->getIblockId(), 'SECTION_ID' => $this->getSectionId() > 0 ? $this->getSectionId() : 0, 'ACTIVE' => empty($_REQUEST['filter_active']) ? 'Y' : $_REQUEST['filter_active'], "WF_PARENT_ELEMENT_ID" => false, "SHOW_NEW" => "Y"); if ($arProps = $this->getProps()) { $filtered = null; foreach ($arProps as $arProp) { $value = $_REQUEST['filter_el_property_' . $arProp["ID"]]; if (array_key_exists("AddFilterFields", $arProp["PROPERTY_USER_TYPE"])) { call_user_func_array($arProp["PROPERTY_USER_TYPE"]["AddFilterFields"], array($arProp, array("VALUE" => "filter_el_property_" . $arProp["ID"]), &$arFilter, &$filtered)); } elseif (is_array($value) || strlen($value)) { if ($value === "NOT_REF") { $value = false; } $arFilter["?PROPERTY_" . $arProp["ID"]] = $value; } } } $arSubQuery = array(); if ($arSKUProps = $this->getSkuProps()) { $arCatalog = $this->getOffersCatalog(); $arSubQuery = array("IBLOCK_ID" => $arCatalog['IBLOCK_ID']); $filtered = null; for ($i = 0, $intPropCount = count($arSKUProps); $i < $intPropCount; $i++) { if ('Y' == $arSKUProps[$i]["FILTRABLE"] && 'F' != $arSKUProps[$i]["PROPERTY_TYPE"] && $arCatalog['SKU_PROPERTY_ID'] != $arSKUProps[$i]["ID"]) { if (array_key_exists("AddFilterFields", $arSKUProps[$i]["PROPERTY_USER_TYPE"])) { call_user_func_array($arSKUProps[$i]["PROPERTY_USER_TYPE"]["AddFilterFields"], array($arSKUProps[$i], array("VALUE" => "filter_sub_el_property_" . $arSKUProps[$i]["ID"]), &$arSubQuery, &$filtered)); } else { $value = $_REQUEST['filter_sub_el_property_' . $arSKUProps[$i]["ID"]]; if (is_array($value) || strlen($value)) { if ($value === "NOT_REF") { $value = false; } $arSubQuery["?PROPERTY_" . $arSKUProps[$i]["ID"]] = $value; } } } } } if (!empty($_REQUEST["filter_timestamp_from"])) { $arFilter["DATE_MODIFY_FROM"] = $_REQUEST["filter_timestamp_from"]; } if (!empty($_REQUEST["filter_timestamp_to"])) { $arFilter["DATE_MODIFY_TO"] = $_REQUEST["filter_timestamp_to"]; } if (!empty($_REQUEST["filter_code"])) { $arFilter["CODE"] = $_REQUEST["filter_code"]; } $arSearchedIds = $arSearchedSectionIds = null; if (!empty($_REQUEST['QUERY'])) { $arFilter['QUERY'] = $_REQUEST['QUERY']; $arSearchedIds = $arSearchedSectionIds = array(0); if (preg_match('#^[0-9\\s]+$#', $_REQUEST['QUERY'])) { $barcode = preg_replace('#[^0-9]#', '', $_REQUEST['QUERY']); if (strlen($barcode) > 0) { $rsBarCode = \CCatalogStoreBarCode::getList(array(), array("BARCODE" => $barcode), false, false, array('PRODUCT_ID')); while ($res = $rsBarCode->Fetch()) { $res2 = \CCatalogSKU::GetProductInfo($res["PRODUCT_ID"]); $arSearchedIds[] = $res2 ? $res2['ID'] : $res['PRODUCT_ID']; } } } elseif ($this->isAdvancedSearchAvailable()) { $arFilter['PARAM2'] = $this->getIblockId(); if (!empty($arFilter['SECTION_ID'])) { $arFilter['PARAMS'] = array('iblock_section' => $arFilter['SECTION_ID']); } $obSearch = new \CSearch(); $obSearch->Search($arFilter); $cnt = 0; $activeSectionId = $this->getSectionId(); while ($ar = $obSearch->Fetch()) { if (strpos($ar['ITEM_ID'], 'S') === 0) { $sectionId = preg_replace('#[^0-9]+#', '', $ar['ITEM_ID']); if ($sectionId != $activeSectionId) { $arSearchedSectionIds[] = $sectionId; } } else { $arSearchedIds[] = $ar['ITEM_ID']; } if (++$cnt >= 100) { break; } } } else { $arSearchedIds = $arSearchedSectionIds = null; $arFilter['NAME'] = $_REQUEST['QUERY']; } } if (sizeof($arSubQuery) > 1) { $arFilteredIds = array(0); $db = \CIBlockElement::GetList(array(), $arSubQuery, false, false, array('PROPERTY_' . $arCatalog['SKU_PROPERTY_ID'])); while ($res = $db->Fetch()) { $arFilteredIds[] = $res['PROPERTY_' . $arCatalog['SKU_PROPERTY_ID'] . '_VALUE']; } $arFilter['ID'] = is_array($arSearchedIds) ? array_intersect($arFilteredIds, $arSearchedIds) : $arFilteredIds; } elseif ($arSearchedIds) { $arFilter['ID'] = $arSearchedIds; } if ($arSearchedSectionIds) { $arFilter['S_ID'] = $arSearchedSectionIds; } unset($arFilter['PARAM1'], $arFilter['PARAM2'], $arFilter['PARAMS']); if ($this->isFiltering() || !empty($_REQUEST['QUERY'])) { $arFilter['INCLUDE_SUBSECTIONS'] = 'Y'; if (isset($arFilter['SECTION_ID']) && $arFilter['SECTION_ID'] == 0) { unset($arFilter["SECTION_ID"]); } } return $arFilter; }
function UpdateSearch($ID, $bOverWrite = false) { if (!CModule::IncludeModule("search")) { return; } global $DB; $ID = Intval($ID); static $strElementSql = false; if (!$strElementSql) { $strElementSql = "\n\t\t\t\tSELECT BE.ID, BE.NAME, BE.XML_ID as EXTERNAL_ID,\n\t\t\t\t\tBE.PREVIEW_TEXT_TYPE, BE.PREVIEW_TEXT, BE.CODE,\n\t\t\t\t\tBE.TAGS,\n\t\t\t\t\tBE.DETAIL_TEXT_TYPE, BE.DETAIL_TEXT, BE.IBLOCK_ID, B.IBLOCK_TYPE_ID,\n\t\t\t\t\t" . $DB->DateToCharFunction("BE.TIMESTAMP_X") . " as LAST_MODIFIED,\n\t\t\t\t\t" . $DB->DateToCharFunction("BE.ACTIVE_FROM") . " as DATE_FROM,\n\t\t\t\t\t" . $DB->DateToCharFunction("BE.ACTIVE_TO") . " as DATE_TO,\n\t\t\t\t\tBE.IBLOCK_SECTION_ID,\n\t\t\t\t\tB.CODE as IBLOCK_CODE, B.XML_ID as IBLOCK_EXTERNAL_ID, B.DETAIL_PAGE_URL,\n\t\t\t\t\tB.VERSION, B.RIGHTS_MODE, B.SOCNET_GROUP_ID\n\t\t\t\tFROM b_iblock_element BE, b_iblock B\n\t\t\t\tWHERE BE.IBLOCK_ID=B.ID\n\t\t\t\t\tAND B.ACTIVE='Y'\n\t\t\t\t\tAND BE.ACTIVE='Y'\n\t\t\t\t\tAND B.INDEX_ELEMENT='Y'\n\t\t\t\t\t" . CIBlockElement::WF_GetSqlLimit("BE.", "N") . "\n\t\t\t\t\tAND BE.ID="; } $dbrIBlockElement = $DB->Query($strElementSql . $ID); if ($arIBlockElement = $dbrIBlockElement->Fetch()) { $IBLOCK_ID = $arIBlockElement["IBLOCK_ID"]; $DETAIL_URL = "=ID=" . urlencode($arIBlockElement["ID"]) . "&EXTERNAL_ID=" . urlencode($arIBlockElement["EXTERNAL_ID"]) . "&IBLOCK_SECTION_ID=" . urlencode($arIBlockElement["IBLOCK_SECTION_ID"]) . "&IBLOCK_TYPE_ID=" . urlencode($arIBlockElement["IBLOCK_TYPE_ID"]) . "&IBLOCK_ID=" . urlencode($arIBlockElement["IBLOCK_ID"]) . "&IBLOCK_CODE=" . urlencode($arIBlockElement["IBLOCK_CODE"]) . "&IBLOCK_EXTERNAL_ID=" . urlencode($arIBlockElement["IBLOCK_EXTERNAL_ID"]) . "&CODE=" . urlencode($arIBlockElement["CODE"]); static $arGroups = array(); if (!array_key_exists($IBLOCK_ID, $arGroups)) { $arGroups[$IBLOCK_ID] = array(); $strSql = "SELECT GROUP_ID " . "FROM b_iblock_group " . "WHERE IBLOCK_ID= " . $IBLOCK_ID . " " . "\tAND PERMISSION>='R' " . "ORDER BY GROUP_ID"; $dbrIBlockGroup = $DB->Query($strSql); while ($arIBlockGroup = $dbrIBlockGroup->Fetch()) { $arGroups[$IBLOCK_ID][] = $arIBlockGroup["GROUP_ID"]; if ($arIBlockGroup["GROUP_ID"] == 2) { break; } } } static $arSITE = array(); if (!array_key_exists($IBLOCK_ID, $arSITE)) { $arSITE[$IBLOCK_ID] = array(); $strSql = "SELECT SITE_ID " . "FROM b_iblock_site " . "WHERE IBLOCK_ID= " . $IBLOCK_ID; $dbrIBlockSite = $DB->Query($strSql); while ($arIBlockSite = $dbrIBlockSite->Fetch()) { $arSITE[$IBLOCK_ID][] = $arIBlockSite["SITE_ID"]; } } $BODY = ($arIBlockElement["PREVIEW_TEXT_TYPE"] == "html" ? CSearch::KillTags($arIBlockElement["PREVIEW_TEXT"]) : $arIBlockElement["PREVIEW_TEXT"]) . "\r\n" . ($arIBlockElement["DETAIL_TEXT_TYPE"] == "html" ? CSearch::KillTags($arIBlockElement["DETAIL_TEXT"]) : $arIBlockElement["DETAIL_TEXT"]); static $arProperties = array(); if (!array_key_exists($IBLOCK_ID, $arProperties)) { $arProperties[$IBLOCK_ID] = array(); $rsProperties = CIBlockProperty::GetList(array("sort" => "asc", "id" => "asc"), array("IBLOCK_ID" => $IBLOCK_ID, "ACTIVE" => "Y", "SEARCHABLE" => "Y", "CHECK_PERMISSIONS" => "N")); while ($ar = $rsProperties->Fetch()) { if (strlen($ar["USER_TYPE"]) > 0) { $arUT = CIBlockProperty::GetUserType($ar["USER_TYPE"]); if (array_key_exists("GetSearchContent", $arUT)) { $ar["GetSearchContent"] = $arUT["GetSearchContent"]; } elseif (array_key_exists("GetPublicViewHTML", $arUT)) { $ar["GetSearchContent"] = $arUT["GetPublicViewHTML"]; } } $arProperties[$IBLOCK_ID][$ar["ID"]] = $ar; } } //Read current property values from database $strProperties = ""; if (count($arProperties[$IBLOCK_ID]) > 0) { if ($arIBlockElement["VERSION"] == 1) { $rs = $DB->Query("\n\t\t\t\t\t\tselect *\n\t\t\t\t\t\tfrom b_iblock_element_property\n\t\t\t\t\t\twhere IBLOCK_ELEMENT_ID=" . $arIBlockElement["ID"] . "\n\t\t\t\t\t\tAND IBLOCK_PROPERTY_ID in (" . implode(", ", array_keys($arProperties[$IBLOCK_ID])) . ")\n\t\t\t\t\t"); while ($ar = $rs->Fetch()) { $strProperties .= "\r\n"; $arProperty = $arProperties[$IBLOCK_ID][$ar["IBLOCK_PROPERTY_ID"]]; if ($arProperty["GetSearchContent"]) { $strProperties .= CSearch::KillTags(call_user_func_array($arProperty["GetSearchContent"], array($arProperty, array("VALUE" => $ar["VALUE"]), array()))); } elseif ($arProperty["PROPERTY_TYPE"] == 'L') { $arEnum = CIBlockPropertyEnum::GetByID($ar["VALUE"]); if ($arEnum !== false) { $strProperties .= $arEnum["VALUE"]; } } elseif ($arProperty["PROPERTY_TYPE"] == 'F') { $arFile = CIBlockElement::__GetFileContent($ar["VALUE"]); if (is_array($arFile)) { $strProperties .= $arFile["CONTENT"]; $arIBlockElement["TAGS"] .= "," . $arFile["PROPERTIES"][COption::GetOptionString("search", "page_tag_property")]; } } else { $strProperties .= $ar["VALUE"]; } } } else { $rs = $DB->Query("\n\t\t\t\t\t\tselect *\n\t\t\t\t\t\tfrom b_iblock_element_prop_m" . $IBLOCK_ID . "\n\t\t\t\t\t\twhere IBLOCK_ELEMENT_ID=" . $arIBlockElement["ID"] . "\n\t\t\t\t\t\tAND IBLOCK_PROPERTY_ID in (" . implode(", ", array_keys($arProperties[$IBLOCK_ID])) . ")\n\t\t\t\t\t"); while ($ar = $rs->Fetch()) { $strProperties .= "\r\n"; $arProperty = $arProperties[$IBLOCK_ID][$ar["IBLOCK_PROPERTY_ID"]]; if ($arProperty["GetSearchContent"]) { $strProperties .= CSearch::KillTags(call_user_func_array($arProperty["GetSearchContent"], array($arProperty, array("VALUE" => $ar["VALUE"]), array()))); } elseif ($arProperty["PROPERTY_TYPE"] == 'L') { $arEnum = CIBlockPropertyEnum::GetByID($ar["VALUE"]); if ($arEnum !== false) { $strProperties .= $arEnum["VALUE"]; } } elseif ($arProperty["PROPERTY_TYPE"] == 'F') { $arFile = CIBlockElement::__GetFileContent($ar["VALUE"]); if (is_array($arFile)) { $strProperties .= $arFile["CONTENT"]; $arIBlockElement["TAGS"] .= "," . $arFile["PROPERTIES"][COption::GetOptionString("search", "page_tag_property")]; } } else { $strProperties .= $ar["VALUE"]; } } $rs = $DB->Query("\n\t\t\t\t\t\tselect *\n\t\t\t\t\t\tfrom b_iblock_element_prop_s" . $IBLOCK_ID . "\n\t\t\t\t\t\twhere IBLOCK_ELEMENT_ID=" . $arIBlockElement["ID"] . "\n\t\t\t\t\t"); if ($ar = $rs->Fetch()) { foreach ($arProperties[$IBLOCK_ID] as $property_id => $property) { if (array_key_exists("PROPERTY_" . $property_id, $ar) && $property["MULTIPLE"] == "N" && strlen($ar["PROPERTY_" . $property_id]) > 0) { $strProperties .= "\r\n"; if ($property["GetSearchContent"]) { $strProperties .= CSearch::KillTags(call_user_func_array($property["GetSearchContent"], array($property, array("VALUE" => $ar["PROPERTY_" . $property_id]), array()))); } elseif ($property["PROPERTY_TYPE"] == 'L') { $arEnum = CIBlockPropertyEnum::GetByID($ar["PROPERTY_" . $property_id]); if ($arEnum !== false) { $strProperties .= $arEnum["VALUE"]; } } elseif ($property["PROPERTY_TYPE"] == 'F') { $arFile = CIBlockElement::__GetFileContent($ar["PROPERTY_" . $property_id]); if (is_array($arFile)) { $strProperties .= $arFile["CONTENT"]; $arIBlockElement["TAGS"] .= "," . $arFile["PROPERTIES"][COption::GetOptionString("search", "page_tag_property")]; } } else { $strProperties .= $ar["PROPERTY_" . $property_id]; } } } } } } $BODY .= $strProperties; if ($arIBlockElement["RIGHTS_MODE"] !== "E") { $arPermissions = $arGroups[$IBLOCK_ID]; } else { $obElementRights = new CIBlockElementRights($IBLOCK_ID, $arIBlockElement["ID"]); $arPermissions = $obElementRights->GetGroups(array("element_read")); } $arFields = array("LAST_MODIFIED" => strlen($arIBlockElement["DATE_FROM"]) > 0 ? $arIBlockElement["DATE_FROM"] : $arIBlockElement["LAST_MODIFIED"], "DATE_FROM" => strlen($arIBlockElement["DATE_FROM"]) > 0 ? $arIBlockElement["DATE_FROM"] : false, "DATE_TO" => strlen($arIBlockElement["DATE_TO"]) > 0 ? $arIBlockElement["DATE_TO"] : false, "TITLE" => $arIBlockElement["NAME"], "PARAM1" => $arIBlockElement["IBLOCK_TYPE_ID"], "PARAM2" => $IBLOCK_ID, "SITE_ID" => $arSITE[$IBLOCK_ID], "PERMISSIONS" => $arPermissions, "URL" => $DETAIL_URL, "BODY" => $BODY, "TAGS" => $arIBlockElement["TAGS"]); if ($arIBlockElement["SOCNET_GROUP_ID"] > 0) { $arFields["PARAMS"] = array("socnet_group" => $arIBlockElement["SOCNET_GROUP_ID"]); } CSearch::Index("iblock", $ID, $arFields, $bOverWrite); } else { CSearch::DeleteIndex("iblock", $ID); } }
function ChangeIndex($MODULE_ID, $arFields, $ITEM_ID = false, $PARAM1 = false, $PARAM2 = false, $SITE_ID = false) { global $DB; if (is_set($arFields, "TITLE")) { $arFields["TITLE"] = Trim($arFields["TITLE"]); } if (is_set($arFields, "BODY")) { $arFields["BODY"] = Trim($arFields["BODY"]); } if (is_set($arFields) && is_array($arFields["PERMISSIONS"])) { CSearch::ChangePermission($MODULE_ID, $arFields["PERMISSIONS"], $ITEM_ID, $PARAM1, $PARAM2, $SITE_ID); } $strUpdate = $DB->PrepareUpdate("b_search_content", $arFields); if (strlen($strUpdate) > 0) { $strSqlWhere = CSearch::__PrepareFilter(array("MODULE_ID" => $MODULE_ID, "ITEM_ID" => $ITEM_ID, "PARAM1" => $PARAM1, "PARAM2" => $PARAM2, "SITE_ID" => $SITE_ID), $bIncSites); $strSql = "\n\t\t\t\tUPDATE b_search_content SET\n\t\t\t\t" . $strUpdate . "\n\t\t\t\tWHERE ID IN (\n\t\t\t\t\tSELECT sc.ID\n\t\t\t\t\tFROM b_search_content sc\n\t\t\t\t\t" . ($bIncSites ? "INNER JOIN b_search_content_site scsite ON sc.ID=scsite.SEARCH_CONTENT_ID" : "") . "\n\t\t\t\t\t" . (strlen($strSqlWhere) > 0 ? "WHERE " . $strSqlWhere : "") . "\n\t\t\t\t)\n\t\t\t"; $arBinds = array(); if (is_set($arFields, "BODY")) { $arBinds["BODY"] = $arFields["BODY"]; } if (is_set($arFields, "SEARCHABLE_CONTENT")) { $arBinds["SEARCHABLE_CONTENT"] = $arFields["SEARCHABLE_CONTENT"]; } $DB->QueryBind($strSql, $arBinds); } }
} /* TODO: now, no course_id in PARAM1, it must be added firstly to search index, and after - uncomment it. if ($arParams["COURSE_ID"]) { $arFilter["PARAM1"] = "C".$arParams["COURSE_ID"]; } */ if ($arResult["~how"] == "d") { $aSort = array("DATE_CHANGE" => "DESC", "CUSTOM_RANK" => "DESC", "RANK" => "DESC"); } else { $aSort = array("CUSTOM_RANK" => "DESC", "RANK" => "DESC", "DATE_CHANGE" => "DESC"); } $arResult["SEARCH_RESULT"] = array(); if (strlen($arResult["~q"]) > 0 || strlen($arResult["~tags"]) > 0) { $obSearch = new CSearch(); $obSearch->Search($arFilter, $aSort); $arResult["SEARCH_RESULT"] = array(); if ($obSearch->errorno == 0) { $obSearch->NavStart($arParams["PAGE_RESULT_COUNT"]); $arResult["NAV_STRING"] = $obSearch->GetPageNavString(GetMessage("LEARNING_RESULT_PAGES"), $arParams["NAV_TEMPLATE"]); while ($arSearch = $obSearch->GetNext()) { $arResult["SEARCH_RESULT"][] = $arSearch; } if (count($arResult["SEARCH_RESULT"]) > 0) { if (strlen($arResult["~tags"]) > 0) { $arResult["ORDER_LINK"] = $APPLICATION->GetCurPageParam("tags=" . urlencode($arResult["tags"]) . "&where=" . urlencode($arResult["where"]), array("tags", "where", "how")); } else { $arResult["ORDER_LINK"] = $APPLICATION->GetCurPageParam("q=" . urlencode($arResult["q"]) . "&where=" . urlencode($arResult["where"]), array("q", "where", "how")); } if ($arResult["~how"] != "d") {
function Delete($ID) { global $DB; $ID = IntVal($ID); $arPost = CBlogPost::GetByID($ID); if ($arPost) { $db_events = GetModuleEvents("blog", "OnBeforePostDelete"); while ($arEvent = $db_events->Fetch()) { if (ExecuteModuleEventEx($arEvent, array($ID)) === false) { return false; } } $dbResult = CBlogComment::GetList(array(), array("POST_ID" => $ID), false, false, array("ID")); while ($arResult = $dbResult->Fetch()) { if (!CBlogComment::Delete($arResult["ID"])) { return False; } } $dbResult = CBlogUserGroupPerms::GetList(array(), array("POST_ID" => $ID, "BLOG_ID" => $arPost["BLOG_ID"]), false, false, array("ID")); while ($arResult = $dbResult->Fetch()) { if (!CBlogUserGroupPerms::Delete($arResult["ID"])) { return False; } } $dbResult = CBlogTrackback::GetList(array(), array("POST_ID" => $ID, "BLOG_ID" => $arPost["BLOG_ID"]), false, false, array("ID")); while ($arResult = $dbResult->Fetch()) { if (!CBlogTrackback::Delete($arResult["ID"])) { return False; } } $dbResult = CBlogPostCategory::GetList(array(), array("POST_ID" => $ID, "BLOG_ID" => $arPost["BLOG_ID"]), false, false, array("ID")); while ($arResult = $dbResult->Fetch()) { if (!CBlogPostCategory::Delete($arResult["ID"])) { return False; } } $strSql = "SELECT F.ID " . "FROM b_blog_post P, b_file F " . "WHERE P.ID = " . $ID . " " . "\tAND P.ATTACH_IMG = F.ID "; $z = $DB->Query($strSql, false, "FILE: " . __FILE__ . " LINE:" . __LINE__); while ($zr = $z->Fetch()) { CFile::Delete($zr["ID"]); } unset($GLOBALS["BLOG_POST"]["BLOG_POST_CACHE_" . $ID]); $arBlog = CBlog::GetByID($arPost["BLOG_ID"]); $result = $DB->Query("DELETE FROM b_blog_post WHERE ID = " . $ID . "", true); if (IntVal($arBlog["LAST_POST_ID"]) == $ID) { CBlog::SetStat($arPost["BLOG_ID"]); } if ($result) { $res = CBlogImage::GetList(array(), array("POST_ID" => $ID, "IS_COMMENT" => "N")); while ($aImg = $res->Fetch()) { CBlogImage::Delete($aImg['ID']); } } if ($result) { $GLOBALS["USER_FIELD_MANAGER"]->Delete("BLOG_POST", $ID); } $db_events = GetModuleEvents("blog", "OnPostDelete"); while ($arEvent = $db_events->Fetch()) { ExecuteModuleEventEx($arEvent, array($ID, &$result)); } if (CModule::IncludeModule("search")) { CSearch::Index("blog", "P" . $ID, array("TITLE" => "", "BODY" => "")); //CSearch::DeleteIndex("blog", false, "COMMENT", $arPost["BLOG_ID"]."|".$ID); } return $result; } else { return false; } return True; }
if ($arResult["filter_my"] == "Y" || $arParams["PAGE"] == "user_groups") { $arUserGroupFilter["USER_ID"] = $arResult["User"]["ID"]; $arUserGroupFilter["<=ROLE"] = SONET_ROLES_USER; } if (CModule::IncludeModule("extranet") && !CExtranet::IsExtranetSite() && $arResult["filter_extranet"] == "Y") { $arUserGroupFilter["GROUP_SITE_ID"] = CExtranet::GetExtranetSiteID(); $arUserGroupFilter["<=ROLE"] = SONET_ROLES_USER; } if (!$arResult["CurrentUserPerms"]["IsCurrentUser"] && !CSocNetUser::IsCurrentUserModuleAdmin()) { $arGroupFilter["VISIBLE"] = "Y"; } } if ($arParams["USE_KEYWORDS"] == "Y" && strlen($arResult["~tags"]) > 0 && CModule::IncludeModule("search")) { $arFilter = array("SITE_ID" => SITE_ID, "QUERY" => "", array("=MODULE_ID" => "socialnetwork", "ITEM_ID" => "G%"), "CHECK_DATES" => "Y", "TAGS" => $arResult["~tags"]); $aSort = array("DATE_CHANGE" => "DESC", "CUSTOM_RANK" => "DESC", "RANK" => "DESC"); $obSearch = new CSearch(); $obSearch->Search($arFilter); if ($obSearch->errorno == 0) { while ($arSearch = $obSearch->Fetch()) { if (intval($arSearch["PARAM2"]) > 0) { $arGroupFilter["ID"][] = $arSearch["PARAM2"]; } } } } if (array_key_exists("ID", $arGroupFilter) && is_array($arGroupFilter["ID"])) { $arGroupFilter["ID"] = array_unique($arGroupFilter["ID"]); } if (!$bNoMyGroups) { if ($arUserGroupFilter && !empty($arUserGroupFilter)) { $dbUserGroups = CSocNetUserToGroup::GetList(array("GROUP_NAME" => "ASC"), $arUserGroupFilter, false, false, array("GROUP_ID"));
function IBlockSectionDelete($zr) { if (CModule::IncludeModule("search")) { CSearch::DeleteIndex("socialnetwork", 'S' . IntVal($zr["ID"])); } }
function ChangeIndex($MODULE_ID, $arFields, $ITEM_ID=false, $PARAM1=false, $PARAM2=false, $SITE_ID=false) { $DB = CDatabase::GetModuleConnection('search'); if(array_key_exists("TITLE", $arFields)) $arFields["TITLE"] = Trim($arFields["TITLE"]); if(array_key_exists("BODY", $arFields)) $arFields["BODY"] = Trim($arFields["BODY"]); if(array_key_exists("PERMISSIONS", $arFields) && is_array($arFields["PERMISSIONS"])) CSearch::ChangePermission($MODULE_ID, $arFields["PERMISSIONS"], $ITEM_ID, $PARAM1, $PARAM2, $SITE_ID); if(array_key_exists("SITE_ID", $arFields) && is_array($arFields["SITE_ID"])) CSearch::ChangeSite($MODULE_ID, $arFields["SITE_ID"], $ITEM_ID, $PARAM1, $PARAM2, $SITE_ID); $strUpdate = $DB->PrepareUpdate("b_search_content", $arFields); if(strlen($strUpdate) > 0) { $strSqlWhere = CSearch::__PrepareFilter(Array("MODULE_ID"=>$MODULE_ID, "ITEM_ID"=>$ITEM_ID, "PARAM1"=>$PARAM1, "PARAM2"=>$PARAM2, "SITE_ID"=>$SITE_ID), $bIncSites); $strSql = " SELECT sc.ID FROM b_search_content sc ".($bIncSites? "INNER JOIN b_search_content_site scsite ON sc.ID=scsite.SEARCH_CONTENT_ID": "")." ".(strlen($strSqlWhere)>0? "WHERE ".$strSqlWhere: "")." "; $rs = $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__); while($ar = $rs->Fetch()) { $strSql = "UPDATE b_search_content SET ".$strUpdate." WHERE ID=".$ar["ID"]; $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__); if(array_key_exists("PARAMS", $arFields)) CSearch::SetContentItemParams($ar["ID"], $arFields["PARAMS"]); } } }
function DelayedStemIndex() { $DB = CDatabase::GetModuleConnection('search'); $etime = time() + intval(COption::GetOptionString("search", "agent_duration")); do { $stemQueue = $DB->Query($DB->TopSql("\n\t\t\t\tSELECT SEARCH_CONTENT_ID ID\n\t\t\t\tFROM b_search_content_stem\n\t\t\t\tWHERE SEARCH_CONTENT_ID < 0\n\t\t\t", 1)); if ($stemTask = $stemQueue->Fetch()) { $ID = -$stemTask["ID"]; $sites = array(); $rsSite = $DB->Query("\n\t\t\t\t\tSELECT SITE_ID, URL\n\t\t\t\t\tFROM b_search_content_site\n\t\t\t\t\tWHERE SEARCH_CONTENT_ID = " . $ID . "\n\t\t\t\t"); while ($arSite = $rsSite->Fetch()) { $sites[$arSite["SITE_ID"]] = $arSite["URL"]; } if (BX_SEARCH_VERSION > 1) { $sql = "SELECT SEARCHABLE_CONTENT from b_search_content_text WHERE SEARCH_CONTENT_ID = {$ID}"; } else { $sql = "SELECT SEARCHABLE_CONTENT from b_search_content WHERE ID = {$ID}"; } $rsContent = $DB->Query($sql); if ($arContent = $rsContent->Fetch()) { $DB->Query("DELETE FROM b_search_content_stem WHERE SEARCH_CONTENT_ID = " . $ID); CSearch::StemIndex($sites, $ID, $arContent["SEARCHABLE_CONTENT"]); } $DB->Query("DELETE FROM b_search_content_stem WHERE SEARCH_CONTENT_ID = " . $stemTask["ID"]); } else { //Cancel the agent return ""; } } while ($etime >= time()); return "CSearchStemTable::DelayedStemIndex();"; }
function _IndexPostComments($arParams = array()) { if (IntVal($arParams["BLOG_ID"]) <= 0 || IntVal($arParams["POST_ID"]) <= 0 || !CModule::IncludeModule("search")) { return false; } if ($arParams["USE_SOCNET"] == "Y") { $arSp = CBlogComment::GetSocNetCommentPerms($arParams["POST_ID"]); } $dbComment = CBlogComment::GetList(array(), array("BLOG_ID" => $arParams["BLOG_ID"], "POST_ID" => $arParams["POST_ID"], "PUBLISH_STATUS" => BLOG_PUBLISH_STATUS_PUBLISH), false, false, array("ID", "POST_ID", "BLOG_ID", "PUBLISH_STATUS", "PATH", "DATE_CREATE", "POST_TEXT", "TITLE", "AUTHOR_ID")); while ($arComment = $dbComment->Fetch()) { if (strlen($arComment["PATH"]) > 0) { $arComment["PATH"] = str_replace("#comment_id#", $arComment["ID"], $arComment["PATH"]); } elseif (strlen($arParams["PATH"]) > 0) { $arComment["PATH"] = str_replace("#comment_id#", $arComment["ID"], $arParams["PATH"]); } else { $arComment["PATH"] = CBlogPost::PreparePath($arParams["BLOG_URL"], $arComment["POST_ID"], $arParams["SITE_ID"], false, $arParams["OWNER_ID"], $arParams["SOCNET_GROUP_ID"]); } $arSearchIndex = array("SITE_ID" => array($arParams["SITE_ID"] => $arComment["PATH"]), "LAST_MODIFIED" => $arComment["DATE_CREATE"], "PARAM1" => "COMMENT", "PARAM2" => $arComment["BLOG_ID"] . "|" . $arComment["POST_ID"], "PERMISSIONS" => array(2), "TITLE" => $arComment["TITLE"], "BODY" => blogTextParser::killAllTags($arComment["POST_TEXT"]), "INDEX_TITLE" => false, "USER_ID" => IntVal($arComment["AUTHOR_ID"]) > 0 ? $arComment["AUTHOR_ID"] : false, "ENTITY_TYPE_ID" => "BLOG_COMMENT", "ENTITY_ID" => $arComment["ID"]); if ($arParams["USE_SOCNET"] == "Y") { $arSearchIndex["PERMISSIONS"] = $arSp; } if (strlen($arComment["TITLE"]) <= 0) { $arSearchIndex["TITLE"] = substr($arSearchIndex["BODY"], 0, 100); } CSearch::Index("blog", "C" . $arComment["ID"], $arSearchIndex, True); } }
} CopyDirFiles($path . $file, WIZARD_SITE_PATH . "/" . $file, $rewrite = true, $recursive = true, $delete_after_copy = false); } } $p = str_replace("//", "/", WIZARD_ABSOLUTE_PATH . "/site/services/main/components/"); if (is_dir($p)) { $dir = opendir($p); while ($item = readdir($dir)) { if ($item == ".." or $item == ".") { continue; } CopyDirFiles($p . '/' . $item, $_SERVER['DOCUMENT_ROOT'] . '/bitrix/components/' . $item, $ReWrite = true, $Recursive = true); } closedir($dir); } CSearch::ReIndexAll(false, 0, array(WIZARD_SITE_ID, WIZARD_SITE_DIR)); WizardServices::PatchHtaccess(WIZARD_SITE_PATH); WizardServices::ReplaceMacrosRecursive(WIZARD_SITE_PATH . "about/", array("SITE_DIR" => WIZARD_SITE_DIR)); WizardServices::ReplaceMacrosRecursive(WIZARD_SITE_PATH . "auth/", array("SITE_DIR" => WIZARD_SITE_DIR)); WizardServices::ReplaceMacrosRecursive(WIZARD_SITE_PATH . "blog/", array("SITE_DIR" => WIZARD_SITE_DIR)); WizardServices::ReplaceMacrosRecursive(WIZARD_SITE_PATH . "brands/", array("SITE_DIR" => WIZARD_SITE_DIR)); WizardServices::ReplaceMacrosRecursive(WIZARD_SITE_PATH . "catalog/", array("SITE_DIR" => WIZARD_SITE_DIR)); WizardServices::ReplaceMacrosRecursive(WIZARD_SITE_PATH . "favorites/", array("SITE_DIR" => WIZARD_SITE_DIR)); WizardServices::ReplaceMacrosRecursive(WIZARD_SITE_PATH . "login/", array("SITE_DIR" => WIZARD_SITE_DIR)); WizardServices::ReplaceMacrosRecursive(WIZARD_SITE_PATH . "news/", array("SITE_DIR" => WIZARD_SITE_DIR)); WizardServices::ReplaceMacrosRecursive(WIZARD_SITE_PATH . "personal/", array("SITE_DIR" => WIZARD_SITE_DIR)); WizardServices::ReplaceMacrosRecursive(WIZARD_SITE_PATH . "search/", array("SITE_DIR" => WIZARD_SITE_DIR)); CWizardUtil::ReplaceMacros(WIZARD_SITE_PATH . "_index.php", array("SITE_DIR" => WIZARD_SITE_DIR)); $arUrlRewrite = array(); if (file_exists(WIZARD_SITE_ROOT_PATH . "/urlrewrite.php")) { include WIZARD_SITE_ROOT_PATH . "/urlrewrite.php";
public static function Update($ID, $arFields, $bSearchIndex = true) { global $DB; $ID = IntVal($ID); if(strlen($arFields["PATH"]) > 0) $arFields["PATH"] = str_replace("#comment_id#", $ID, $arFields["PATH"]); $arFields1 = array(); foreach ($arFields as $key => $value) { if (substr($key, 0, 1) == "=") { $arFields1[substr($key, 1)] = $value; unset($arFields[$key]); } } if (!CBlogComment::CheckFields("UPDATE", $arFields, $ID)) return false; elseif(!$GLOBALS["USER_FIELD_MANAGER"]->CheckFields("BLOG_COMMENT", $ID, $arFields)) return false; foreach(GetModuleEvents("blog", "OnBeforeCommentUpdate", true) as $arEvent) { if (ExecuteModuleEventEx($arEvent, Array($ID, &$arFields))===false) return false; } $strUpdate = $DB->PrepareUpdate("b_blog_comment", $arFields); foreach ($arFields1 as $key => $value) { if (strlen($strUpdate) > 0) $strUpdate .= ", "; $strUpdate .= $key."=".$value." "; } if (strlen($strUpdate) > 0) { if(is_set($arFields["PUBLISH_STATUS"]) && strlen($arFields["PUBLISH_STATUS"]) > 0) { $arComment = CBlogComment::GetByID($ID); if($arComment["PUBLISH_STATUS"] == BLOG_PUBLISH_STATUS_PUBLISH && $arFields["PUBLISH_STATUS"] != BLOG_PUBLISH_STATUS_PUBLISH) CBlogPost::Update($arComment["POST_ID"], array("=NUM_COMMENTS" => "NUM_COMMENTS - 1")); elseif($arComment["PUBLISH_STATUS"] != BLOG_PUBLISH_STATUS_PUBLISH && $arFields["PUBLISH_STATUS"] == BLOG_PUBLISH_STATUS_PUBLISH) CBlogPost::Update($arComment["POST_ID"], array("=NUM_COMMENTS" => "NUM_COMMENTS + 1")); } $strSql = "UPDATE b_blog_comment SET ". " ".$strUpdate." ". "WHERE ID = ".$ID." "; $DB->Query($strSql, False, "File: ".__FILE__."<br>Line: ".__LINE__); unset($GLOBALS["BLOG_COMMENT"]["BLOG_COMMENT_CACHE_".$ID]); $GLOBALS["USER_FIELD_MANAGER"]->Update("BLOG_COMMENT", $ID, $arFields); $arComment = CBlogComment::GetByID($ID); $arBlog = CBlog::GetByID($arComment["BLOG_ID"]); if($arBlog["USE_SOCNET"] == "Y") $arFields["SC_PERM"] = CBlogComment::GetSocNetCommentPerms($arComment["POST_ID"]); foreach(GetModuleEvents("blog", "OnCommentUpdate", true) as $arEvent) ExecuteModuleEventEx($arEvent, Array($ID, &$arFields)); if ($bSearchIndex && CModule::IncludeModule("search")) { $newPostPerms = CBlogUserGroup::GetGroupPerms(1, $arComment["BLOG_ID"], $arComment["POST_ID"], BLOG_PERMS_POST); if ($arBlog["SEARCH_INDEX"] != "Y" || $arComment["PUBLISH_STATUS"] != BLOG_PUBLISH_STATUS_PUBLISH) { CSearch::Index("blog", "C".$ID, array( "TITLE" => "", "BODY" => "" ) ); } else { $arGroup = CBlogGroup::GetByID($arBlog["GROUP_ID"]); if(strlen($arFields["PATH"]) > 0) { $arFields["PATH"] = str_replace("#comment_id#", $ID, $arFields["PATH"]); $arPostSite = array($arGroup["SITE_ID"] => $arFields["PATH"]); } elseif(strlen($arComment["PATH"]) > 0) { $arComment["PATH"] = str_replace("#comment_id#", $ID, $arComment["PATH"]); $arPostSite = array($arGroup["SITE_ID"] => $arComment["PATH"]); } else { $arPostSite = array( $arGroup["SITE_ID"] => CBlogPost::PreparePath( $arBlog["URL"], $arComment["POST_ID"], $arGroup["SITE_ID"], false, $arBlog["OWNER_ID"], $arBlog["SOCNET_GROUP_ID"] ) ); } $searchContent = blogTextParser::killAllTags($arComment["POST_TEXT"]); $searchContent .= "\r\n" . $GLOBALS["USER_FIELD_MANAGER"]->OnSearchIndex("BLOG_COMMENT", $arComment["ID"]); $arSearchIndex = array( "SITE_ID" => $arPostSite, "LAST_MODIFIED" => $arComment["DATE_CREATE"], "PARAM1" => "COMMENT", "PARAM2" => $arComment["BLOG_ID"]."|".$arComment["POST_ID"], "PERMISSIONS" => array(2), "TITLE" => $arComment["TITLE"], "BODY" => $searchContent, "USER_ID" => (IntVal($arComment["AUTHOR_ID"]) > 0) ? $arComment["AUTHOR_ID"] : false, "ENTITY_TYPE_ID" => "BLOG_COMMENT", "ENTITY_ID" => $arComment["ID"], ); if($arBlog["USE_SOCNET"] == "Y") { if(is_array($arFields["SC_PERM"])) { $arSearchIndex["PERMISSIONS"] = $arFields["SC_PERM"]; $sgId = array(); foreach($arFields["SC_PERM"] as $perm) { if(strpos($perm, "SG") !== false) { $sgIdTmp = str_replace("SG", "", substr($perm, 0, strpos($perm, "_"))); if(!in_array($sgIdTmp, $sgId) && IntVal($sgIdTmp) > 0) $sgId[] = $sgIdTmp; } } if(!empty($sgId)) { $arSearchIndex["PARAMS"] = array( "socnet_group" => $sgId, "entity" => "socnet_group", ); } if(!in_array("U".$arComment["AUTHOR_ID"], $arSearchIndex["PERMISSIONS"])) $arSearchIndex["PERMISSIONS"][] = "U".$arComment["AUTHOR_ID"]; } } if(strlen($arComment["TITLE"]) <= 0) { //$arPost = CBlogPost::GetByID($arComment["POST_ID"]); $arSearchIndex["TITLE"] = substr($arSearchIndex["BODY"], 0, 100); } CSearch::Index("blog", "C".$ID, $arSearchIndex, True); } } return $ID; } return False; }