С одной стороны - задача печальная, руководитель должен контролировать что творится у него в компании. С другой стороны - руководитель не хочет получать вообще никакие уведомления на почту, он может все посмотреть в КП, когда ему захочется, для контроля рабочих отчетов у него есть зам., соответственно все рабочие отчеты должны уходить ему.
[spoiler]
Если первая задача (с почтой) решается более менее гладко, то вторая (с переносом уведомлений) только с модификацией ядра, хотя, я думаю, задача так или иначе распространенная и должна как то решаться в настройках модулей (типа чекбокс не отправлять руководителю отчеты, перенаправлять на такого то пользователя).
Решения:
1. Для того что бы конкретным пользователям не отправлялись на почту почтовые уведомления (для себя я определил 4 типа почтовых шаблонов), в init.php определим обработчик события:
2. Сразу оговорюсь, зам имеет админский доступ, рабочие отчеты видит и так, но без уведомлений (что будет без админской группы я не проверял, возможно будет достаточно группы "руководство"
. Для решения второй задачи я потратил пол дня... По большей части из за того, что начал искать "а как же добавляется отчет", не нашел и решил зайти с хвоста, поискать как генерируются уведомления и там я прозрел 
Собственно за поиск "головы" отвечает метод GetUserManagers класса CTimeMan, но т.к. в нем событий нет, то придется модифицировать ядро:
Вот и все. Непутевые заметки, наверно по большей части для себя, что бы не забыть когда все сломается при обновлении 
[spoiler]
Если первая задача (с почтой) решается более менее гладко, то вторая (с переносом уведомлений) только с модификацией ядра, хотя, я думаю, задача так или иначе распространенная и должна как то решаться в настройках модулей (типа чекбокс не отправлять руководителю отчеты, перенаправлять на такого то пользователя).
Решения:
1. Для того что бы конкретным пользователям не отправлялись на почту почтовые уведомления (для себя я определил 4 типа почтовых шаблонов), в init.php определим обработчик события:
AddEventHandler("main", "OnBeforeEventAdd", array("FormulaAddon", "OnBeforeEventAddHandler"));
class FormulaAddon
{
function OnBeforeEventAddHandler(&$event, &$lid, &$arFields)
{
$arMail = array(
//массив почтовых адресов, куда не отправляем уведомления
);
//проверка типов и e-mail получателей
if (($event == 'TASK_REMINDER' || $event == 'SONET_NEW_MESSAGE' || $event == 'IM_NEW_NOTIFY_GROUP' || $event == 'IM_NEW_NOTIFY') && false !== in_array($arFields['EMAIL_TO'], $arMail)
|| $event == 'SONET_INVITE_GROUP' && false !== in_array($arFields['USER_EMAIL'], $arMail))
{
return false;
}
}
}
|
. Для решения второй задачи я потратил пол дня... По большей части из за того, что начал искать "а как же добавляется отчет", не нашел и решил зайти с хвоста, поискать как генерируются уведомления и там я прозрел 
Собственно за поиск "головы" отвечает метод GetUserManagers класса CTimeMan, но т.к. в нем событий нет, то придется модифицировать ядро:
public static function GetUserManagers($USER_ID, $bCheckExistance = true)
{
$arStruct = CIntranetUtils::GetStructure();
$arHeads = array();
foreach ($arStruct['DATA'] as $dpt => $arDpt)
{
if (in_array($USER_ID, $arDpt['EMPLOYEES']))
{
$arCurDpt = $arDpt;
while (
(
!$arCurDpt['UF_HEAD']
|| $arCurDpt['UF_HEAD'] == $USER_ID
|| (
$bCheckExistance
&& (
!($arUser = CUser::GetByID($arCurDpt['UF_HEAD'])->Fetch())
|| $arUser['ACTIVE'] == 'N'
)
)
)
&& $arCurDpt['IBLOCK_SECTION_ID'] > 0
)
{
$arCurDpt = $arStruct['DATA'][$arCurDpt['IBLOCK_SECTION_ID']];
}
if ($arCurDpt['UF_HEAD'])
{
//проверяем ID, если это ID нашего директора, то меняем его на ID зама
if ($arCurDpt['UF_HEAD'] == 5)
$arCurDpt['UF_HEAD'] = 33;
$arHeads[] = $arCurDpt['UF_HEAD'];
}
}
}
return $arHeads;
}
|
