%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']);
?>