$arNavigationGR = false;

  $arSelectFieldsGR = array(

    'GROUP_ID',

    'GROUP_NAME'

  );

  $rsItems = CSocNetUserToGroup::GetList($arOrderGR,

    $arFilterGR, $arGroupByGR, $arNavigationGR,

    $arSelectFieldsGR);

  while($arItem = $rsItems->GetNext(false, false)) {

    $id_ = intval($arItem['GROUP_ID']);

    $arEntityGroupsID[$id_] = array(

      'ID' => $id_,

      'NAME' => $arItem['GROUP_NAME']

    );

  }

  unset($rsItems, $id_, $arOrderGR, $arGroupByGR,

    $arNavigationGR, $arSelectFieldsGR);

  if(!empty($arEntityGroupsID)) {

    //Определим группы, у которых блоги имеют статус

    // приватных, и исключим их из списка

    $arExceptGroupEntity = CPTK_SocialNetwork::

      GetByRoleFeaturesIdArray(SONET_ENTITY_GROUP, 'blog',

      'view_post', array('!ROLE' => SONET_ROLES_ALL),

      array('!ROLE' => SONET_ROLES_ALL));

    $arTmp = array_intersect_key($arExceptGroupEntity,

      $arEntityGroupsID);

    unset($arExceptGroupEntity);

    if(!empty($arTmp)) {

      foreach($arTmp as $key) {

        unset($arEntityGroupsID[$key]);

      }

    }

    unset($arTmp);

    //Определим группы, в которых вообще отключены блоги,

    // и исключим их из списка

    $arExceptGroupEntity = CPTK_SocialNetwork::

      GetByRoleFeaturesIdArray(SONET_ENTITY_GROUP, 'blog',

      'view_post', array('FEATURE_ACTIVE' => 'N'),

      array('FEATURE_ACTIVE' => 'N'));

    $arTmp = array_intersect_key($arExceptGroupEntity,

      $arEntityGroupsID);

    unset($arExceptGroupEntity);

    if(!empty($arTmp)) {

      foreach($arTmp as $key) {

        unset($arEntityGroupsID[$key]);

      }

    }

    unset($arTmp);

  }

}

Кроме того, необходимо обработать ситуацию, когда мы имеем дело с лентой для группы. Определяем, открыта ли группа для просмотра текущему пользователю, и вообще могут ли пользователи иметь блоги (листинг 6).

Листинг 6

$getMembers = false;

if($arResult['CURRENT_ACCESS']['canViewGroup']) {

  $getMembers = CPTK_SocialNetwork::IsAllowedFeature

    (SONET_ENTITY_USER, 'blog');

}

// Определим ID участников группы

if($getMembers) {

  $arOrderGM = array();

  $arFilterGM = array(

    '<=ROLE' => SONET_ROLES_USER,

    'GROUP_ID' => $arResult['ENTITY_ID'],

  );

  $arGroupByGM = false;

  $arNavigationGM = false;

  $arSelectFieldsGM = array(

    'USER_ID'

  );

  $rsItems = CSocNetUserToGroup::GetList($arOrderGM,

    $arFilterGM, $arGroupByGM, $arNavigationGM,

    $arSelectFieldsGM);

  while($arItem = $rsItems->Fetch()) {

    $id_ = intval($arItem['USER_ID']);

    $arEntityUsersID[$id_] = $id_;

  }

  unset($rsItems, $id_, $arOrderGM, $arGroupByGM,

    $arNavigationGM, $arSelectFieldsGM);

  // код исключения 'закрытых' пользователей вынесен в конец

  // модуля (он общий для двух типов лент)

}

// Добавим ID группы в $arEntityGroupsID, если включен вывод

// сообщений из блога группы

if($arParams['INC_SELF_MESSAGES'] &&

    $arResult['CURRENT_ACCESS']['canViewGroup'] &&

    $arResult['CURRENT_ACCESS']['canViewGroupSelfMessages']) {

  //если блоги в группе не отключены

  if(CSocNetFeatures::IsActiveFeature(SONET_ENTITY_GROUP,

      $arResult['ENTITY_ID'], 'blog')) {

    $arEntityGroupsID[$arResult['ENTITY_ID']] = array(

      'ID' => $arResult['ENTITY_ID'],

      'NAME' => $arResult['GROUP_INFO']['NAME']

    );

  }

}

Чуть выше мы отметили, что код исключения «закрытых» пользователей вынесен в конец компонента. Теперь пришло время определить пользователей, которые запретили просмотр блогов. Уберем их из списка (раз уж они сами этого хотят; листинг 7).

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату