Настройка сервисов рабочей группы
 
Настройка сервисов рабочей группы
24.06.2014 16:55:44
Разработка
484
Исходные данные: вследствие некоторых событий, программно создается рабочая группа при помощи команды
Исходные данные: вследствие некоторых событий, программно создается рабочая группа при помощи команды
CSocNetGroup::CreateGroup
			
После создания меню группы имеет следующий вид:

scr1.jpg

Требуется:

непосредственно после создания отключать у группы сервисы Задачи, Диск, Wiki

Решение:

за подключенные сервисы (они же - Возможности) отвечает класс

CSocNetFeatures
Попробуем проделать следующее:

После создания (программно) группы вывести на странице следующий код:

$res = CSocNetFeatures::GetList(array(),
array("ENTITY_ID"=>$GROUP_ID, "FEATURE"=>array( 'photo','files','tasks', 'wiki', 'group_lists' ))
);       
while ($feat = $res->GetNext())       {
     print "<pre>"; print_r($feat); print "</pre>";
}
где
$GROUP_ID

- ID только что созданной группы, а

'photo','files','tasks', 'wiki', 'group_lists'
- это названия соответствующих сервисов - Фото, Диск, Задачи, Вики, Списки

Вышеизложенный код дает в результате своей работы пустой массив - Array()

Но, стоит нам отключить из публичной части средствами редактирования группы хотя бы один из сервисов, и мы уже получаем в результате работы кода массив вида:

Array (     [ID] =>10       [ENTITY_TYPE] => G     [ENTITY_ID] => 16     [FEATURE] => forum     [FEATURE_NAME] =>     [ACTIVE] => Y     [=DATE_UPDATE] => now()     [=DATE_CREATE] => now() ) ======== Array (      [ID] =>11     [ENTITY_TYPE] => G     [ENTITY_ID] => 16     [FEATURE] => photo     [FEATURE_NAME] =>     [ACTIVE] => Y     [=DATE_UPDATE] => now()     [=DATE_CREATE] => now() ) ======== Array (      [ID] =>12     [ENTITY_TYPE] => G     [ENTITY_ID] => 16     [FEATURE] => calendar     [FEATURE_NAME] =>     [ACTIVE] => Y     [=DATE_UPDATE] => now()     [=DATE_CREATE] => now() ) ========
Здесь ID - уникальный (в рамках портала) индекс данного сервиса для данной группы. Причем нумерация сквозная для всех сервисов.

ENTITY_TYPE - признак того, что речь идет о группе, ENTITY_ID - индекс сущности, для которой описывается сервис, в данном случае - группы, FEATURE - название сервиса, ACTIVE - признак активности.

Очевидно, что наша задача сводится к тому, чтобы для подлежащих отключению свойств признак активности проставить равным "N". Но как это сделать, если в момент создания группы массив свойств пуст, а появляется при первой попытке что-либо из свойств отключить?

Вероятно, нужно попытаться создать самостоятельно для данной группы те свойства, которые хотелось бы отключить, с признаком активности = "N", остальные же создадутся самостоятельно, с признаком активности равным "Y".

Итоговый код выглядит так:

/*====================== первая часть - создание группы
$arFields = array(
    'NAME' => $GROUP_RESULT_NAME,
     'DESCRIPTION' => $DESCRIPTION,                         
    'VISIBLE' => "Y",                         
    'OPENED' => "Y",                        
    'CLOSED' => "N",                         
    'SUBJECT_ID' => $SUBJECT,
    'INITIATE_PERMS' => "A",                         
    'SPAM_PERMS' => "K",                         
    'SITE_ID' => Array('0' => "s1")                   
);                      

if (CModule::IncludeModule('socialnetwork'))   {
   if ($GROUP_ID = CSocNetGroup::CreateGroup($CREATOR, $arFields, false)) {
       /*====================== вторая часть - отключение сервисов                                                  
       $arrFeatName=array('photo','files','tasks', 'wiki', 'group_lists');                                                  
       foreach ($arrFeatName as $feat_name)                               
         CSocNetFeatures::Add(
               array(
                     'ENTITY_TYPE' => 'G',                               
                    'ENTITY_ID' => $GROUP_ID,                               
                     'FEATURE' => $feat_name,                              
                    'FEATURE_NAME' => '',                               
                      'ACTIVE' => 'N'                               
               )                            
         );                                                     
}                                            
где первая часть кода - создание группы с тематикой $SUBJECT, описанием $DESCRIPTION и названием $GROUP_RESULT_NAME, создателем которой является пользователь $CREATOR,

а вторая часть кода - создание необходимых сервисов, с признаком активности "N".

Таким образом, если задать для величин $SUBJECT, $DESCRIPTION, $GROUP_RESULT_NAME и $CREATOR реальные значения, получим на выходе группу с отключенными сервисами Фото, Вики, Задачи, Списки, Диск:

scr2.jpg

Загрузка...