64 $arCats = str_replace(
"/",
"-", $arCats);
67 $modifyComment = isset(
$arFields[
"MODIFY_COMMENT"]) ?
$arFields[
"MODIFY_COMMENT"] :
"";
78 $rIBlock = CIBlock::getList(Array(),
array(
'ID' =>
$IBLOCK_ID,
'CHECK_PERMISSIONS' =>
'N'));
80 if (
$arIBlock[
'BIZPROC'] ==
'Y' && CModule::IncludeModule(
'bizproc'))
82 $arErrorsTmp =
array();
83 $arHistoryResult = CBPDocument::GetDocumentFromHistory($HISTORY_ID, $arErrorsTmp);
84 $modifyComment =
GetMessage(
'WIKI_RECOVER_COMMENT').
" ".$arHistoryResult[
"MODIFIED"];
85 if (CBPHistoryService::RecoverDocumentFromHistory($HISTORY_ID))
103 $rIBlock = CIBlock::getList(Array(),
array(
'ID' =>
$IBLOCK_ID,
'CHECK_PERMISSIONS' =>
'N'));
107 if (
$arIBlock[
'BIZPROC'] ==
'Y' && CModule::IncludeModule(
'bizproc'))
109 $cRuntime = CBPRuntime::GetRuntime();
110 $cRuntime->StartRuntime();
111 $documentService = $cRuntime->GetService(
'DocumentService');
113 $historyIndex = CBPHistoryService::Add(
115 'DOCUMENT_ID' =>
array(
'iblock',
'CWikiDocument',
$ID),
118 'USER_ID' =>
$USER->GetID()
122 $arDocument = $documentService->GetDocumentForHistory(
array(
'iblock',
'CWikiDocument',
$ID), $historyIndex);
123 $arDocument[
"MODIFY_COMMENT"] = $modifyComment ? $modifyComment :
'';
125 if (is_array($arDocument))
127 CBPHistoryService::Update(
130 'NAME' => $arDocument[
'NAME'],
131 'DOCUMENT' => $arDocument,
147 'CHECK_PERMISSIONS' =>
'N'
150 $bCategoryPage =
false;
154 $bCategoryPage =
true;
166 $arCurCat = $rsCurCats->GetNext();
168 if (empty($arCurCat))
171 $_arFields =
array();
173 $_arFields[
'ACTIVE'] =
'Y';
174 $_arFields[
'NAME'] = $sCatName;
175 $_arFields[
'XML_ID'] = $sCatName;
178 $iCurCatID = $CIB_S->Add($_arFields);
179 if ($iCurCatID !=
false)
180 $arCatsID[] = $iCurCatID;
184 $iCurCatID = $arCurCat[
'ID'];
185 $arCatsID[] = $arCurCat[
'ID'];
189 CIBlockElement::SetElementSection(
$ID, $arCatsID);
202 $arCat = $rsCats->GetNext();
206 $_arFields =
array();
208 $_arFields[
'ACTIVE'] =
'Y';
211 $_arFields[
'CHECK_PERMISSIONS'] =
'N';
215 $iCatID = $CIB_S->Add($_arFields);
218 $iCatID = $arCat[
'ID'];
220 $_arFields =
array();
222 $_arFields[
'ACTIVE'] =
'Y';
223 $_arFields[
'IBLOCK_SECTION_ID'] = $iCatID;
225 $CIB_S->Update($iCurCatID, $_arFields);
229 $_arFields =
array();
231 $_arFields[
'ACTIVE'] =
'Y';
232 $_arFields[
'IBLOCK_SECTION_ID'] = 0;
236 $CIB_S->Update($iCurCatID, $_arFields);
241 $arExistsCatsId =
array();
242 $arDelCatId =
array();
243 $rsSect = CIBlockElement::GetElementGroups(
$ID,
false);
245 while($arSect = $rsSect->GetNext())
246 $arExistsCatsId[] = $arSect[
'ID'];
257 $arExiststInBlockCats = [];
258 while($arCat = $rsCats->GetNext())
260 $arExiststInBlockCats[] = $arCat[
'~NAME'];
261 $arCatsID[] = $arCat[
'ID'];
265 foreach ($arCats as $sCatName)
267 if (!in_array($sCatName, $arExiststInBlockCats))
269 $_arFields =
array();
271 $_arFields[
'ACTIVE'] =
'Y';
274 $_arFields[
'CHECK_PERMISSIONS'] =
'N';
277 $iCatID = $CIB_S->Add($_arFields);
278 if ($iCatID !=
false)
279 $arCatsID[] = $iCatID;
284 if (!empty($arCatsID))
288 CIBlockElement::SetElementSection(
$ID, $arCatsID);
296 CIBlockElement::SetElementSection(
$ID, $arCatsID);
299 if (is_array($arCatsID))
300 $arDelCatId = array_diff($arExistsCatsId, $arCatsID);
301 if (!empty($arDelCatId))
303 foreach ($arDelCatId as $_iCatId)
305 $obRes = CIBlockSection::GetList(
array(),
array(
'ID' => $_iCatId,
'IBLOCK_ID' =>
$IBLOCK_ID),
true);
306 $arCatProp = $obRes->Fetch();
307 if ($arCatProp[
'ELEMENT_CNT'] == 0)
308 CIBlockSection::Delete($_iCatId);
317 $rIBlock = CIBlock::getList(Array(),
array(
'ID' =>
$IBLOCK_ID,
'CHECK_PERMISSIONS' =>
'N'));
321 if (
$arIBlock[
'BIZPROC'] ==
'Y' && CModule::IncludeModule(
'bizproc'))
324 $historyService->DeleteHistoryByDocument(
array(
'iblock',
'CWikiDocument',
$ID));
330 $bResult = $this->cIB_E->Delete(
$ID);
338 $arCurImages =
array();
339 $arCurImagesNew =
array();
340 $arAddImage =
array();
342 $rsProperties = CIBlockElement::GetProperty(
$IBLOCK_ID,
$ID,
'value_id',
'asc',
array(
'ACTIVE' =>
'Y',
'CODE' =>
'IMAGES'));
343 while($arProperty = $rsProperties->Fetch())
345 if($arProperty[
'CODE'] ==
'IMAGES')
348 $arCurImages[$arProperty[
'VALUE']] =
'';
352 $rsFile = CFile::GetList(
array(),
array(
'@ID' => implode(
',', array_keys($arCurImages))));
353 while($arFile = $rsFile->Fetch())
354 $arCurImages[$arFile[
'ID']] = $arFile[
'ORIGINAL_NAME'];
356 if(array_search($arImage[
'name'], $arCurImages) !==
false)
358 $this->errorCollection->add(
array(
new Error(Loc::getMessage(
'WIKI_ERROR_IMAGE_ATTACHED'))));
369 'PROPERTY_TYPE' =>
'F',
378 CFile::ResizeImage($arImage,
array(
379 'width' => COption::GetOptionString(
'wiki',
'image_max_width', 600),
380 'height' => COption::GetOptionString(
'wiki',
'image_max_height', 600)
389 $rsProperties = CIBlockElement::GetProperty(
$IBLOCK_ID,
$ID,
'value_id',
'asc',
array(
'ACTIVE' =>
'Y',
'CODE' =>
'IMAGES',
'EMPTY' =>
'N'));
390 while($arProperty = $rsProperties->Fetch())
392 if($arProperty[
'CODE'] ==
'IMAGES')
393 $arCurImagesNew[$arProperty[
'VALUE']] =
'';
396 $arAddImage = array_diff(array_keys($arCurImagesNew), array_keys($arCurImages));
397 $imgId = current($arAddImage);
403 $rsProperties = CIBlockElement::GetProperty(
$IBLOCK_ID,
$ID,
'value_id',
'asc',
array(
'ACTIVE' =>
'Y',
'CODE' =>
'IMAGES'));
405 while($arProperty = $rsProperties->Fetch())
407 if($arProperty[
'CODE'] ==
'IMAGES' && $arProperty[
'VALUE'] == $IMAGE_ID)
409 $_iPropertyId = $arProperty[
'PROPERTY_VALUE_ID'];
414 if (!empty($_iPropertyId))
416 $arPropertyValues =
array();
417 $arPropertyValues[$_iPropertyId] =
array(
'VALUE' =>
array(
'del' =>
'Y'),
'DESCRIPTION' =>
'');
418 $this->cIB_E->SetPropertyValues(
$ID,
$IBLOCK_ID, $arPropertyValues,
'IMAGES');
431 if ($arOldElement !=
false)
433 if ($arElement ==
false)
435 else if($arElement[
'ID'] ==
$ID)
444 $this->cIB_E->Update(
$ID,
$arFields,
false, $bUpdateSearch);
460 $arCat = $rsCats->GetNext();
466 $_arFields =
array();
467 $_arFields[
'IBLOCK_ID'] =
$arFields[
'IBLOCK_ID'];
468 $_arFields[
'NAME'] = $sCatName;
469 $_arFields[
'XML_ID'] = $sCatName;
470 $_arFields[
'CHECK_PERMISSIONS'] =
'N';
472 $CIB_S->Update($arCat[
'ID'], $_arFields);
479 if (self::GetDefaultPage(
$arFields[
'IBLOCK_ID']) ==
false
480 || (self::GetDefaultPage(
$arFields[
'IBLOCK_ID']) == $arOldElement[
'NAME']
481 && $arOldElement[
'NAME'] !=
$arFields[
'NAME']))
520 $catSearch =
"[[".GetMessage(
'CATEGORY_NAME').
":".$sCatName.
"]]";
525 "search" =>
"[[".$oldName.
"|".$oldName.
"]]",
526 "pattern" =>
"/\[\[(".preg_quote($oldName).
")\|(".preg_quote($oldName).
")\]\]/isUu",
527 "replacement" =>
"[[".$newName.
"|".$newName.
"]]"
532 "search" =>
"[[".$oldName.
"|",
533 "pattern" =>
"/\[\[(".preg_quote($oldName).
")\|(.*)\]\]/isUu",
534 "replacement" =>
"[[".$newName.
"|$2]]"
539 "search" =>
"[[".$oldName.
"]]",
540 "pattern" =>
"/\[\[".preg_quote($oldName).
"\]\]/isUu",
541 "replacement" =>
"[[".$newName.
"]]"
549 while($arElement =
$dbRes->GetNext())
553 $newText = $arElement[
"~DETAIL_TEXT"];
555 foreach ($arPatterns as $arPattern)
557 if(mb_strpos($newText, $arPattern[
"search"]) !==
false)
559 $newText = preg_replace($arPattern[
"pattern"], $arPattern[
"replacement"], $newText);
566 if(mb_strpos($newText, $catSearch) !==
false)
575 $this->cIB_E->Update($arElement[
"ID"],
array(
"DETAIL_TEXT" => $newText),
false,
true);
576 self::MarkPageAsUpdated(
$iBlockId, $iBlockSectId, $arElement[
"NAME"]);
586 $newCategoryName = preg_replace(
"/category:/isU",
"", $newCategoryName);
587 return preg_replace(
"/\[\[".
GetMessage(
'CATEGORY_NAME').
":".$oldCategoryName.
"\]\]/isU",
"[[".GetMessage(
'CATEGORY_NAME').
":".$newCategoryName.
"]]", $pageText);
594 $ENTITY_ID =
'IBLOCK_'.$IBLOCK_ID.
'_SECTION';
599 $ENTITY_ID =
'IBLOCK_'.$IBLOCK_ID;
603 AddEventHandler(
"main",
"OnUserTypeBuildList",
array(
"CUserTypeWiki",
"GetUserTypeDescription"));
604 $GLOBALS[
'USER_FIELD_MANAGER']->CleanCache();
606 $arElement =
$GLOBALS[
'USER_FIELD_MANAGER']->GetUserFields($ENTITY_ID, $ELEMENT_ID);
608 if ($arElement !==
false)
610 if (!isset($arElement[
'UF_WIKI_INDEX']))
614 $arFields[
'FIELD_NAME'] =
'UF_WIKI_INDEX';
617 $intID=$CAllUserTypeEntity->Add(
$arFields);
620 $e =
$GLOBALS[
'APPLICATION']->GetException();
626 if (empty($arElement[
'UF_WIKI_INDEX'][
'VALUE']) || $arElement[
'UF_WIKI_INDEX'][
'VALUE'] != $NAME)
641 $ENTITY_ID =
'IBLOCK_'.$IBLOCK_ID.
'_SECTION';
646 $ENTITY_ID =
'IBLOCK_'.$IBLOCK_ID;
650 AddEventHandler(
"main",
"OnUserTypeBuildList",
array(
"CUserTypeWiki",
"GetUserTypeDescription"));
651 $GLOBALS[
'USER_FIELD_MANAGER']->CleanCache();
653 $arElement =
$GLOBALS[
'USER_FIELD_MANAGER']->GetUserFields(
658 return isset($arElement[
'UF_WIKI_INDEX'][
'VALUE']) ? $arElement[
'UF_WIKI_INDEX'][
'VALUE'] :
'';
667 'TITLE' =>
GetMessage(
'Service:Categories_TITLE'),
670 CComponentEngine::MakePathFromTemplate(
$arParams[
'PATH_TO_CATEGORIES'],
672 'wiki_name' =>
'Service:Categories',
689 $rsElement = CIBlockElement::GetList(
array(),
$arFilter,
false,
false, Array());
690 $arElement = $rsElement->GetNext();
697 $arLinkExists =
array();
699 $rsSect = CIBlockElement::GetElementGroups($arElement[
'ID'],
false);
700 while($arSect = $rsSect->GetNext())
702 $arCat[$arSect[
'ID']] = $arSect;
703 $arLink[] =
'category:'.CWikiUtils::htmlspecialcharsback($arSect[
'NAME']);
720 $rsElement = CIBlockElement::GetList(
array(),
$arFilter,
false,
false, Array());
722 while($obElement = $rsElement->GetNextElement())
725 $arLinkExists[] = preg_replace(
'/^(category|'.
GetMessage(
'CATEGORY_NAME').
'):/iu',
'',
$arFields[
'NAME']);
730 foreach ($arCat as $_arCat)
733 $_arResult =
array();
734 $_arResult[
'ID'] = $_arCat[
'ID'];
735 $_arResult[
'IS_RED'] =
'N';
737 CComponentEngine::MakePathFromTemplate(
$arParams[
'PATH_TO_CATEGORY'],
739 'wiki_name' =>
'Category:'.$_arCat[
'NAME'],
746 $_arResult[
'TITLE'] = $_arCat[
'NAME'];
747 $_arResult[
'NAME'] = $_arCat[
'NAME'];
748 $_arResult[
'IS_SERVICE'] =
'N';
749 if (!in_array($_arCat[
'NAME'], $arLinkExists))
750 $_arResult[
'IS_RED'] =
'Y';
770 $rsElement = CIBlockElement::GetList(
array(),
$arFilter,
false,
false, Array());
771 $obElement = $rsElement->GetNextElement();
773 if ($obElement !==
false)
779 $rsProperties = $obElement->GetProperties(
array(),
array(
'CODE' =>
'IMAGES'));
781 foreach ($rsProperties as $arProperty)
782 $arResult[$arProperty[
'CODE']] = $arProperty[
'VALUE'];
787 $_arTAGS = explode(
',',
$arResult[
'TAGS']);
789 foreach ($_arTAGS as $sTag)
791 $arTag =
array(
'NAME' => $sTag);
795 $arP[
'tags'] = rawurlencode($sTag);
797 CComponentEngine::MakePathFromTemplate(
$arParams[
'PATH_TO_SEARCH'],
799 'wiki_name' =>
$arParams[
'ELEMENT_NAME'],
832 $cacheByNameID = self::GetIdForCacheByName(
$arFilter[
'IBLOCK_ID'], $iCatId, $NAME);
834 $cacheTime = isset($arComponentParams[
'CACHE_TIME']) ? intval($arComponentParams[
'CACHE_TIME']) :
CWiki::CWIKI_CACHE_TTL;
846 if(isset($cachedElement[
$key]) && $value !=
"" && $cachedElement[
$key] != $value)
854 return $cachedElement;
863 $obElement = $rsElement->GetNextElement();
865 if ($obElement !==
false)
870 $rsProperties = $obElement->GetProperties(
array(),
array(
'CODE' =>
'IMAGES'));
872 foreach ($rsProperties as $arProperty)
873 $arResult[$arProperty[
'CODE']] = $arProperty[
'VALUE'];
875 $rsProperties = $obElement->GetProperties(
array(),
array(
'CODE' =>
'FORUM_TOPIC_ID'));
877 foreach ($rsProperties as $arProperty)
878 $arResult[$arProperty[
'CODE']] = $arProperty[
'VALUE'];
883 $_arTAGS = explode(
',',
$arResult[
'TAGS']);
885 foreach ($_arTAGS as $sTag)
888 $arTag =
array(
'NAME' => $sTag);
890 !empty($arComponentParams)
892 isset($arComponentParams[
'PATH_TO_SEARCH'])
893 || isset($arComponentParams[
'~PATH_TO_TAG'])
897 if (isset($arComponentParams[
'PATH_TO_TAG']))
899 $arTag[
'LINK'] = \CComponentEngine::MakePathFromTemplate($arComponentParams[
'~PATH_TO_TAG'],
902 'tag' => rawurlencode($sTag)
908 $arP = $arComponentParams[
'IN_COMPLEX'] ==
'Y' && $arComponentParams[
'SEF_MODE'] ==
'N' ?
array($arComponentParams[
'OPER_VAR'] =>
'search') :
array();
909 $arP[
'tags'] = rawurlencode($sTag);
911 CComponentEngine::MakePathFromTemplate($arComponentParams[
'PATH_TO_SEARCH'],
913 'wiki_name' => $arComponentParams[
'ELEMENT_NAME'],
926 if(!empty($arComponentParams))
947 if(
$ID ===
false && !$Name)
962 $cacheByNameID = self::GetIdForCacheByName(
$iBlockId, $iCatId,
$ID);
969 'CHECK_PERMISSIONS' =>
'N'
973 if($arElement !=
false)
974 $elName = $arElement[
'NAME'];
982 $cacheByNameID = self::GetIdForCacheByName(
$iBlockId, $iCatId, $elName);
988 private static function GetIdForCacheByName(
$iBlockId, $iSocCatId, $elementName)
990 return self::GET_BY_NAME_CACHE_ID.$iBlockId.$iSocCatId.$elementName;
997 $cacheId = self::GetCacheIdForPageUpdated(
$iBlockId, $iSocCatId,
$name);
1008 $cacheId = self::GetCacheIdForPageUpdated(
$iBlockId, $iSocCatId,
$name);
1018 private static function MarkPageAsUpdated(
$iBlockId, $iSocCatId,
$name)
1022 $cacheId = self::GetCacheIdForPageUpdated(
$iBlockId, $iSocCatId,
$name);
1029 private static function GetCacheIdForPageUpdated(
$iBlockId, $iSocCatId,
$name)
1031 return self::PAGE_UPDATED_CACHE_ID.$iBlockId.$iSocCatId.$name;
static urlAddParams($url, $add_params, $options=[])
static IsPageUpdated($iBlockId, $iSocCatId, $name, $cacheTime=self::CWIKI_CACHE_TTL)
static GetElementById($ID, $arFilter)
CleanCache($ID=false, $Name=false, $iBlockId=false)
DeleteImage($IMAGE_ID, $ID, $IBLOCK_ID)
UpdateHistory($ID, $IBLOCK_ID, $modifyComment=false)
Rename($ID, $arFields, $bUpdateSearch=true)
const GET_BY_NAME_CACHE_ID
static GetCategory($NAME, $IBLOCK_ID)
Recover($HISTORY_ID, $ID, $IBLOCK_ID)
static SetDefaultPage($IBLOCK_ID, $NAME)
RenameLinkOnPages($iBlockId, $oldName, $newName, $iBlockSectId=false)
static UnMarkPageAsUpdated($iBlockId, $iSocCatId, $name)
const PAGE_UPDATED_CACHE_ID
UpdateCategory($ID, $IBLOCK_ID, $arCats)
CleanCacheById($ID, $iBlockId=false)
static GetElementByName($NAME, $arFilter, $arComponentParams=array())
RenameCategoryOnPage($pageText, $oldCategoryName, $newCategoryName)
AddImage($ID, $IBLOCK_ID, $arImage)
static GetDefaultPage($IBLOCK_ID)
static UnlocalizeCategoryName($categoryName)
static IsCategoryPage($NAME, &$CATEGORY_NAME)
static htmlspecialcharsback($str, $end=true)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
AddEventHandler($FROM_MODULE_ID, $MESSAGE_ID, $CALLBACK, $SORT=100, $FULL_PATH=false)
ShowError($strError, $cls="errortext")
htmlspecialcharsbx($string, $flags=ENT_COMPAT, $doubleEncode=true)
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
GetMessage($name, $aReplace=null)
if(empty($signedUserToken)) $key
$GLOBALS['_____370096793']
if( $site[ 'SERVER_NAME']==='') if($site['SERVER_NAME']==='') $arProperties