예제 #1
0
 function CanUserOperateDocument($operation, $userId, $documentId, $arParameters = array())
 {
     if (CWikiSocnet::IsSocNet()) {
         return CWikiUtils::CheckAccess('write');
     } else {
         return parent::CanUserOperateDocument($operation, $userId, $documentId, $arParameters);
     }
 }
예제 #2
0
 $newName = $_POST["NEW_NAME"];
 if (!isset($newName) || $newName == "" || $newName == $arResult['ELEMENT']['NAME_LOCALIZE']) {
     break;
 }
 $sCatName = '';
 if (CWikiUtils::IsCategoryPage($arParams['ELEMENT_NAME'], $sCatName)) {
     $newName = 'category:' . $newName;
 }
 if (!$CWiki->Rename($arParams['ELEMENT_ID'], array('NAME' => $newName, 'IBLOCK_ID' => $arParams['IBLOCK_ID']), true)) {
     $arResult['ERROR_MESSAGE'] = GetMessage('WIKI_ERROR_RENAME');
     break;
 }
 $iBlockSectId = CWikiSocnet::$iCatId ? CWikiSocnet::$iCatId : false;
 $CWiki->RenameLinkOnPages($arParams['IBLOCK_ID'], $arParams['ELEMENT_NAME'], $newName, $iBlockSectId);
 //post to feed
 if (CWikiSocnet::IsSocNet()) {
     $postUrl = str_replace(array('#group_id#', '#wiki_name#'), array(intval($arParams['SOCNET_GROUP_ID']), urlencode($newName)), $arParams['~PATH_TO_POST']);
     $dbLog = CSocNetLog::GetList(array('ID' => 'DESC'), array('SOURCE_ID' => $arParams['ELEMENT_ID']));
     if ($arLog = $dbLog->Fetch()) {
         $arSoFields = array('=LOG_DATE' => $GLOBALS['DB']->CurrentTimeFunction(), '=LOG_UPDATE' => $GLOBALS['DB']->CurrentTimeFunction(), 'USER_ID' => $GLOBALS['USER']->GetID(), 'TITLE' => $newName, 'TEXT_MESSAGE' => "\n" . GetMessage('WIKI_MODIFY_COMMENT') . ": " . GetMessage('WIKI_PAGE_RENAMED', array("%OLD_NAME%" => $arParams['ELEMENT_NAME'], "%NEW_NAME%" => $newName)) . "\n", 'URL' => $postUrl);
         //die(print_r($arSoFields,true));
         $logID = CSocNetLog::Update($arLog['ID'], $arSoFields);
         if (intval($logID) > 0) {
             CSocNetLogRights::SetForSonet($arLog['ID'], SONET_SUBSCRIBE_ENTITY_GROUP, intval($arParams['SOCNET_GROUP_ID']), "wiki", "view");
             CSocNetLog::CounterIncrement($logID);
             $notify_title_tmp = str_replace(array("\r\n", "\n"), " ", $arLog["TITLE"]);
             $notify_title_old = TruncateText($notify_title_tmp, 100);
             $notify_title_old_out = TruncateText($notify_title_tmp, 255);
             $notify_title_tmp = str_replace(array("\r\n", "\n"), " ", $newName);
             $notify_title_new = TruncateText($notify_title_tmp, 100);
             $notify_title_new_out = TruncateText($notify_title_tmp, 255);
예제 #3
0
 /**
  * <p>Метод проверяет доступ пользователя.</p>
  *
  *
  *
  *
  * @param string $access  Тип проверяемого доступа (view, write, delete)
  *
  *
  *
  * @return bool 
  *
  *
  * <h4>See Also</h4> 
  * <ul> <li> <a href="http://dev.1c-bitrix.ru/api_help/wiki/classes/cwikiutils/IsReadable.php">CWikiUtils::isReadable</a>
  * </li> <li> <a
  * href="http://dev.1c-bitrix.ru/api_help/wiki/classes/cwikiutils/IsWriteable.php">CWikiUtils::isWriteable</a> </li> <li>
  * <a href="http://dev.1c-bitrix.ru/api_help/wiki/classes/cwikiutils/IsDeleteable.php">CWikiUtils::IsDeleteable</a> </li>
  * <li> <a href="http://dev.1c-bitrix.ru/api_help/wiki/classes/cwikiutils/IsAllowHTML.php">CWikiUtils::isAllowHTML</a>
  * </li> </ul><br><br>
  *
  *
  * @static
  * @link http://dev.1c-bitrix.ru/api_help/wiki/classes/cwikiutils/CheckAccess.php
  * @author Bitrix
  */
 static function CheckAccess($access = 'view')
 {
     global $APPLICATION, $USER, $arParams;
     if ($USER->IsAdmin()) {
         return true;
     }
     if (CWikiSocnet::IsSocNet()) {
         $arSonetGroup = CSocNetGroup::GetByID($iSocNetId);
         if ($arSonetGroup && CSocNetUser::IsCurrentUserModuleAdmin($arSonetGroup['SITE_ID'])) {
             return true;
         }
         if (!CSocNetFeaturesPerms::CanPerformOperation($USER->GetID(), SONET_ENTITY_GROUP, CWikiSocnet::$iSocNetId, 'wiki', $access)) {
             return false;
         }
         return true;
     } else {
         $letter = 'R';
         $letterI = 'R';
         switch ($access) {
             case 'write':
                 $letter = 'W';
                 $letterI = 'W';
                 break;
             case 'delete':
                 $letter = 'Y';
                 $letterI = 'W';
                 break;
             case 'perm':
                 $letter = 'Z';
                 $letterI = 'X';
                 break;
         }
         $wikiModulePermission = $APPLICATION->GetGroupRight('wiki');
         $iblockPermission = CIBlock::GetPermission($arParams['IBLOCK_ID']);
         return $wikiModulePermission >= $letter && $iblockPermission >= $letterI;
     }
 }
예제 #4
0
    $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;
    }
    $arResult['SOCNET'] = true;
}
if (!CWikiUtils::IsReadable()) {
    ShowError(GetMessage('WIKI_ACCESS_DENIED'));
    return;
}
$_arParams = $arParams;
$iCatId = CWikiSocnet::IsSocNet() ? CWikiSocnet::$iCatId : "";
if (CWiki::IsPageUpdated($arParams['IBLOCK_ID'], $iCatId, $arParams['ELEMENT_NAME'], $arParams['CACHE_TIME'])) {
    $arResult["PAGE_CACHE_CLEAR"] = true;
    CWiki::UnMarkPageAsUpdated($arParams['IBLOCK_ID'], $iCatId, $arParams['ELEMENT_NAME']);
}
if ($arResult["PAGE_CACHE_CLEAR"]) {
    $this->ClearResultCache(array($USER->GetGroups(), $arCache));
}
if ($this->StartResultCache(false, array($USER->GetGroups(), $arCache))) {
    $arParams['ELEMENT_NAME'] = urldecode($arParams['ELEMENT_NAME']);
    $arFilter = array('IBLOCK_ID' => $arParams['IBLOCK_ID'], 'CHECK_PERMISSIONS' => 'N', 'ACTIVE' => 'Y');
    $bNotPage = false;
    if (empty($arParams['ELEMENT_NAME'])) {
        $bNotPage = true;
        $arParams['ELEMENT_NAME'] = CWiki::GetDefaultPage($arParams['IBLOCK_ID']);
    }
예제 #5
0
 function processInternalLink($text)
 {
     global $APPLICATION, $arParams;
     $text = preg_replace_callback('/\\[\\[(.+)(\\|(.*))?\\]\\]/iU' . BX_UTF_PCRE_MODIFIER, array(&$this, '_processInternalLinkPrepareCallback'), $text);
     $text = preg_replace('/(##Category##)(\\s)*((\\r*)\\n)*/', "", $text);
     // check pages for exists
     if (!empty($this->arLink)) {
         $arFilter = array();
         $arFilter['NAME'] = $this->arLink;
         $arFilter['IBLOCK_ID'] = $arParams['IBLOCK_ID'];
         $arFilter['ACTIVE'] = 'Y';
         $arFilter['CHECK_PERMISSIONS'] = 'N';
         if (CWikiSocnet::IsSocNet()) {
             $arFilter['SUBSECTION'] = CWikiSocnet::$iCatId;
         }
         $rsElement = CIBlockElement::GetList(array(), $arFilter, false, false, array());
         while ($obElement = $rsElement->GetNextElement()) {
             $arFields = $obElement->GetFields();
             $this->arLinkExists[] = strtolower(CWikiUtils::htmlspecialcharsback($arFields['NAME'], true));
         }
     }
     $text = preg_replace_callback('/(##LINK(\\d+)##)/isU' . BX_UTF_PCRE_MODIFIER, array(&$this, '_processInternalLinkCallback'), $text);
     return $text;
 }
예제 #6
0
 private function CleanCache($ID = false, $Name = false, $iBlockId = false)
 {
     if ($ID === false && !$Name) {
         return false;
     }
     global $CACHE_MANAGER;
     if ($ID !== false) {
         $CACHE_MANAGER->ClearByTag('wiki_' . $ID);
     }
     if (!$iBlockId) {
         return true;
     }
     $iCatId = CWikiSocnet::IsSocNet() ? CWikiSocnet::$iCatId : "";
     if ($ID !== false) {
         $cacheByNameID = self::GetIdForCacheByName($iBlockId, $iCatId, $ID);
         $CACHE_MANAGER->Clean($cacheByNameID);
         if (!$Name) {
             $arFilter = array('IBLOCK_ID' => $iBlockId, 'CHECK_PERMISSIONS' => 'N');
             $arElement = self::GetElementById($ID, $arFilter);
             if ($arElement != false) {
                 $elName = $arElement['NAME'];
             }
         } else {
             $elName = $Name;
         }
     }
     $cacheByNameID = self::GetIdForCacheByName($iBlockId, $iCatId, $elName);
     $CACHE_MANAGER->Clean($cacheByNameID);
     return true;
 }