%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/components/bitrix/wiki.category/ |
Current File : /home/bitrix/www/bitrix/components/bitrix/wiki.category/component.php |
<?if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED!==true)die(); global $CACHE_MANAGER; $arParams['IN_COMPLEX'] = 'N'; if (($arParent = $this->GetParent()) !== NULL) $arParams['IN_COMPLEX'] = 'Y'; if(empty($arParams['PAGE_VAR'])) $arParams['PAGE_VAR'] = 'title'; if(empty($arParams['OPER_VAR'])) $arParams['OPER_VAR'] = 'oper'; $arParams['PATH_TO_POST'] = trim($arParams['PATH_TO_POST']); if(empty($arParams['SEF_MODE'])) { $arParams['SEF_MODE'] = 'N'; if ($arParams['IN_COMPLEX'] == 'Y') $arParams['SEF_MODE'] = $this->GetParent()->arResult['SEF_MODE']; } $arCache = array(); if(empty($arParams['SOCNET_GROUP_ID']) && $arParams['IN_COMPLEX'] == 'Y') { if (strpos($this->GetParent()->GetName(), 'socialnetwork') !== false && !empty($this->GetParent()->arResult['VARIABLES']['group_id'])) { $arParams['SOCNET_GROUP_ID'] = $this->GetParent()->arResult['VARIABLES']['group_id']; $arCache['SOCNET_GROUP_ID'] = $arParams['SOCNET_GROUP_ID']; } } if(empty($arParams['PATH_TO_POST'])) $arParams['PATH_TO_POST'] = htmlspecialcharsbx($APPLICATION->GetCurPage()."?$arParams[PAGE_VAR]=#wiki_name#"); $arParams['PATH_TO_POST_EDIT'] = trim($arParams['PATH_TO_POST_EDIT']); if(strlen($arParams['PATH_TO_POST_EDIT'])<=0) $arParams['PATH_TO_POST_EDIT'] = htmlspecialcharsbx($APPLICATION->GetCurPage()."?$arParams[PAGE_VAR]=#wiki_name#"); $arParams['PATH_TO_HISTORY'] = trim($arParams['PATH_TO_HISTORY']); if(strlen($arParams['PATH_TO_HISTORY'])<=0) $arParams['PATH_TO_HISTORY'] = htmlspecialcharsbx($APPLICATION->GetCurPage()."?$arParams[PAGE_VAR]=#wiki_name#"); $arParams['PATH_TO_HISTORY_DIFF'] = trim($arParams['PATH_TO_HISTORY_DIFF']); if(strlen($arParams['PATH_TO_HISTORY_DIFF'])<=0) $arParams['PATH_TO_HISTORY_DIFF'] = htmlspecialcharsbx($APPLICATION->GetCurPage()."?$arParams[PAGE_VAR]=#wiki_name#"); $arParams['PATH_TO_DISCUSSION'] = trim($arParams['PATH_TO_DISCUSSION']); if(strlen($arParams['PATH_TO_DISCUSSION'])<=0) $arParams['PATH_TO_DISCUSSION'] = htmlspecialcharsbx($APPLICATION->GetCurPage()."?$arParams[PAGE_VAR]=#wiki_name#"); $arParams['PATH_TO_CATEGORY'] = trim($arParams['PATH_TO_POST']); $arParams['PATH_TO_CATEGORIES'] = trim($arParams['PATH_TO_CATEGORIES']); if(strlen($arParams['PATH_TO_CATEGORIES'])<=0) $arParams['PATH_TO_CATEGORIES'] = htmlspecialcharsbx($APPLICATION->GetCurPage()."?$arParams[OPER_VAR]=categories"); $arParams['PATH_TO_USER'] = trim($arParams['PATH_TO_USER']); if(strlen($arParams['PATH_TO_USER'])<=0) { if ($arParams['IN_COMPLEX'] == 'Y' && $arParams['SEF_MODE'] == 'Y') $arParams['PATH_TO_USER'] = $this->GetParent()->arParams['PATH_TO_USER']; } if (empty($arParams['PAGES_COUNT'])) $arParams['PAGES_COUNT'] = 100; if (empty($arParams['COLUMN_COUNT'])) $arParams['COLUMN_COUNT'] = 3; $arNavParams = array( 'nPageSize' => $arParams['PAGES_COUNT'] ); $arNavigation = CDBResult::GetNavParams($arNavParams); $GLOBALS['arParams'] = $arParams; if (!CModule::IncludeModule('wiki')) { ShowError(GetMessage('WIKI_MODULE_NOT_INSTALLED')); return; } if(!CModule::IncludeModule('iblock')) { ShowError(GetMessage('IBLOCK_MODULE_NOT_INSTALLED')); return; } if (empty($arParams['IBLOCK_ID'])) { ShowError(GetMessage('IBLOCK_NOT_ASSIGNED')); return; } if (CWikiSocnet::isEnabledSocnet() && !empty($arParams['SOCNET_GROUP_ID'])) { if(!CModule::IncludeModule('socialnetwork')) { ShowError(GetMessage('SOCNET_MODULE_NOT_INSTALLED')); return; } } if (CWikiSocnet::isEnabledSocnet() && !empty($arParams['SOCNET_GROUP_ID'])) { $iblock_id_tmp = CWikiSocnet::RecalcIBlockID($arParams["SOCNET_GROUP_ID"]); if ($iblock_id_tmp) $arParams['IBLOCK_ID'] = $iblock_id_tmp; if (!CWikiSocnet::Init($arParams['SOCNET_GROUP_ID'], $arParams['IBLOCK_ID'])) { ShowError(GetMessage('WIKI_SOCNET_INITIALIZING_FAILED')); return; } } if (!CWikiUtils::IsReadable()) { ShowError(GetMessage('WIKI_ACCESS_DENIED')); return; } if($this->StartResultCache(false, array($USER->GetGroups(), $arNavigation, $arCache), false)) { $arParams['ELEMENT_NAME'] = CWikiUtils::htmlspecialcharsback($arParams['ELEMENT_NAME']); $arFilter = array( 'IBLOCK_ID' => $arParams['IBLOCK_ID'], 'CHECK_PERMISSIONS' => 'N', 'ACTIVE' => 'Y' ); if (empty($arParams['ELEMENT_NAME'])) $arParams['ELEMENT_NAME'] = CWiki::GetDefaultPage($arParams['IBLOCK_ID']); $arResult['ELEMENT'] = array(); if (!empty($arParams['ELEMENT_NAME']) && ($arResult['ELEMENT'] = CWiki::GetElementByName($arParams['ELEMENT_NAME'], $arFilter)) != false) { $arParams['ELEMENT_ID'] = $arResult['ELEMENT']['ID']; } $CACHE_MANAGER->StartTagCache($this->GetCachePath()); $CACHE_MANAGER->RegisterTag('wiki_'.$arParams['ELEMENT_ID']); $CACHE_MANAGER->EndTagCache(); $SERVICE_NAME = ''; if (CWikiUtils::IsCategoryPage($arParams['ELEMENT_NAME'], $SERVICE_NAME)) { $arParams['ELEMENT_NAME'] = strtolower(CWikiUtils::UnlocalizeCategoryName($arParams['ELEMENT_NAME'])); $arResult['CUR_CAT']['NAME'] = $SERVICE_NAME; $arPagesFilter = array( 'IBLOCK_ID' => $arParams['IBLOCK_ID'], 'CHECK_PERMISSIONS' => 'N', 'ACTIVE' => 'Y' ); $arSort = array('XML_ID' => 'ASC'); if($arParams['ELEMENT_NAME'] == strtolower("category:".GetMessage('WIKI_CATEGORY_ALL'))) //All Pages from all categories { $arPagesFilter['INCLUDE_SUBSECTIONS'] = 'Y'; if (CWikiSocnet::IsSocNet()) $arPagesFilter['SECTION_ID'] = CWikiSocnet::$iCatId; $rsPagesElement = CIBlockElement::GetList($arSort, $arPagesFilter, false, false, Array()); } elseif($arParams['ELEMENT_NAME'] == strtolower("category:".GetMessage('WIKI_CATEGORY_NOCAT'))) //Pages without categories { $arPagesFilter['INCLUDE_SUBSECTIONS'] = 'N'; if (CWikiSocnet::IsSocNet()) $arPagesFilter['SECTION_ID'] = CWikiSocnet::$iCatId; else $arPagesFilter['SECTION_ID'] = 0; $rsPagesElement = CIBlockElement::GetList($arSort, $arPagesFilter, false, false, Array()); } else { $arFilter = Array(); $arFilter['IBLOCK_ID'] = $arParams['IBLOCK_ID']; $arFilter['NAME'] = $SERVICE_NAME; $arFilter['CHECK_PERMISSIONS'] = 'N'; if (CWikiSocnet::IsSocNet()) { $arFilter['>LEFT_BORDER'] = CWikiSocnet::$iCatLeftBorder; $arFilter['<RIGHT_BORDER'] = CWikiSocnet::$iCatRightBorder; } $rsCat = CIBlockSection::GetList(Array('NAME'=>'ASC'), $arFilter, true); $arCurCat = $rsCat->GetNext(); if (!empty($arCurCat)) //usual category { $arResult['CUR_CAT'] = $arCurCat; $arFilter = Array(); $arFilter['IBLOCK_ID'] = $arParams['IBLOCK_ID']; $arFilter['GLOBAL_ACTIVE'] = 'Y'; $arFilter['CHECK_PERMISSIONS'] = 'N'; $arFilter['CNT_ACTIVE'] = 'Y'; $arFilter['DEPTH_LEVEL'] = $arCurCat['DEPTH_LEVEL'] + 1; $arFilter['>LEFT_BORDER'] = $arCurCat['LEFT_MARGIN']; $arFilter['<RIGHT_BORDER'] = $arCurCat['RIGHT_MARGIN']; $dbList = CIBlockSection::GetList(Array('NAME'=>'ASC'), $arFilter, true); $arResult['CATEGORIES'] = array(); $arCatName = array(); $arCatNameExists = array(); while($arCat = $dbList->GetNext()) { $arCatName[] = 'category:'.$arCat['NAME']; $arResult['CATEGORIES'][strtolower($arCat['NAME'])] = array( 'TITLE' => $arCat['NAME'], 'NAME' => $arCat['NAME'], 'CNT' => $arCat['ELEMENT_CNT'], 'IS_RED' => 'Y', 'LINK' => CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_CATEGORY'], array( 'wiki_name' => 'category:'.rawurlencode($arCat['NAME']), 'group_id' => CWikiSocnet::$iSocNetId ) ) ); } if (!empty($arCatName)) { // checking the category on the "red link" $arFilter = array( 'IBLOCK_LID' => SITE_ID, 'IBLOCK_ID' => $arParams['IBLOCK_ID'], 'CHECK_PERMISSIONS' => 'N', 'IBLOCK_TYPE' => $arParams['IBLOCK_TYPE'], 'ACTIVE' => 'Y', 'NAME' => $arCatName ); if (CWikiSocnet::IsSocNet()) $arFilter['SUBSECTION'] = CWikiSocnet::$iCatId; $rsElement = CIBlockElement::GetList(array(), $arFilter, false, false, Array()); while($arElement = $rsElement->GetNext()) $arCatNameExists[] = substr($arElement['NAME'], strpos($arElement['NAME'], ':') + 1); if (!empty($arCatNameExists)) { foreach ($arCatNameExists as $sCatName) { $sCatName = strtolower($sCatName); if (isset($arResult['CATEGORIES'][$sCatName])) $arResult['CATEGORIES'][$sCatName]['IS_RED'] = 'N'; } } } $arPagesFilter['SUBSECTION'] = $arCurCat['ID']; $rsPagesElement = CIBlockElement::GetList($arSort, $arPagesFilter, false, false, Array()); } } //Anyone can build own pages list $rsHandlers = GetModuleEvents("wiki", "OnCategoryPagesListCreate"); while($arHandler = $rsHandlers->Fetch()) if($handlRes = ExecuteModuleEventEx($arHandler, array($arParams['ELEMENT_NAME'],$arParams['IBLOCK_ID']))) { $rsPagesElement = $handlRes; break; } if(isset($rsPagesElement) && $rsPagesElement) { $arResult['PAGES'] = array(); $arPageNameExists = array(); $rsPagesElement->NavStart($arParams['PAGES_COUNT'], false); $arResult['DB_LIST'] = &$rsPagesElement; while($arPage = $rsPagesElement->GetNext()) { $sname = $arPage['NAME']; if (CWikiUtils::CheckServicePage($arPage['NAME'], $sname)) continue ; $arResult['PAGES'][$arPage['NAME']] = array( 'TITLE' => $arPage['NAME'], 'NAME' => $sname, 'IS_RED' => $arPage['ACTIVE'] == 'Y' ? 'N' : 'Y', 'LINK' => CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_POST'], array( 'wiki_name' => rawurlencode($arPage['NAME']), 'group_id' => CWikiSocnet::$iSocNetId ) ) ); } $arResult['COLUMNS_COUNT'] = empty($arParams['COLUMNS_COUNT']) ? 1 : $arParams['COLUMNS_COUNT']; $arResult['PAGES_COUNT'] = empty($arParams['PAGES_COUNT']) ? 1 : $arParams['PAGES_COUNT']; } else { $arResult['COLUMNS_COUNT'] = 1; $arResult['PAGES_COUNT'] = 1; } } $this->IncludeComponentTemplate(); } unset($GLOBALS['arParams']); ?>