Поставил корпортал, запустил XMPP сервер, настроил QIP Infium и огорчился, часть полей в карточке пользователя упорно не хотела заполняться, например на вкладке ДОМ (Страна, Телефон) на вкладке Работа (Страна, Телефон) и на вкладке Личное (Пол, Домашняя страница).
И решил я разобраться как же оно все работает, и поправить ситуацию, в ходе эксперимента выяснилось что для QIP критична последовательность полей которые передаются через XML сообщение от сервера, с одной стороны это косяк QIP с другой стороны поправить это на стороне сервера проще, чем добиться от сообщества QIP корректно обрабатывать ответ сервера
В общем чего я накопал расскажу ниже.
[spoiler]
За генерирование XML для Vcard отвечает этот файл, в нем и будем править вывод, т.к. это жесткий хак ядра, применять его не советую
/bitrix/modules/xmpp/classes/factory_classes/vcard.php
Но душа требует экспериментов, и так начнем.
строка 119
заменить на
Теперь телефоны выводятся.
строка 87
заменить на
на строке 69
перед
вставить
Теперь выводится пол и домашняя страница
строка 146 заменить
на
строка 156 заменить
на
теперь выводится страна
если кто предложит способ менее затрагивающий ядро буду рад
И решил я разобраться как же оно все работает, и поправить ситуацию, в ходе эксперимента выяснилось что для QIP критична последовательность полей которые передаются через XML сообщение от сервера, с одной стороны это косяк QIP с другой стороны поправить это на стороне сервера проще, чем добиться от сообщества QIP корректно обрабатывать ответ сервера

В общем чего я накопал расскажу ниже.
[spoiler]
За генерирование XML для Vcard отвечает этот файл, в нем и будем править вывод, т.к. это жесткий хак ядра, применять его не советую

/bitrix/modules/xmpp/classes/factory_classes/vcard.php
Но душа требует экспериментов, и так начнем.
строка 119
if (StrLen($arUser["WORK_PHONE"]) > 0)
$arResult["iq"]["vCard"]["TEL"][] = array(
"WORK" => array("#" => ""),
"VOICE" => array("#" => ""),
"NUMBER" => array("#" => $arUser["WORK_PHONE"]),
);
if (StrLen($arUser["PERSONAL_PHONE"]) > 0)
$arResult["iq"]["vCard"]["TEL"][] = array(
"HOME" => array("#" => ""),
"VOICE" => array("#" => ""),
"NUMBER" => array("#" => $arUser["PERSONAL_PHONE"]),
);
|
заменить на
if (StrLen($arUser["WORK_PHONE"]) > 0)
$arResult["iq"]["vCard"]["TEL"][] = array(
"NUMBER" => array("#" => $arUser["WORK_PHONE"]),
"WORK" => array("#" => ""),
"VOICE" => array("#" => ""),
);
$arResult["iq"]["vCard"]["TEL"][] = array(
"NUMBER" => array("#" => $arUser["PERSONAL_PHONE"]),
"HOME" => array("#" => ""),
"VOICE" => array("#" => ""),
);
|
Теперь телефоны выводятся.
строка 87
"BDAY" => array("#" => ConvertDateTime($arUser["PERSONAL_BIRTHDAY"], "YYYY-MM-DD", SITE_ID)),
|
заменить на
"BDAY" => array("#" => ConvertDateTime($arUser["PERSONAL_BIRTHDAY"], "YYYY-MM-DD", SITE_ID)), "GENDER" => array("#" => $gender),
"URL" => array ("#" => $arUser["PERSONAL_WWW"]),
|
на строке 69
перед
$arResult = array( "iq" => array( "." => array( "type" => "result", |
вставить
if($arUser["PERSONAL_GENDER"]) $gender = $arUser["PERSONAL_GENDER"]."ale"; else $gender = ''; |
Теперь выводится пол и домашняя страница
строка 146 заменить
"CTRY" => array("#" => GetCountryByID($arUser["WORK_COUNTRY"])),
|
на
"CTRY" => array("#" => GetCountryByID($arUser["WORK_COUNTRY"], "en")),
|
строка 156 заменить
"CTRY" => array("#" => GetCountryByID($arUser["PERSONAL_COUNTRY"])),
|
на
"CTRY" => array("#" => GetCountryByID($arUser["PERSONAL_COUNTRY"], "en")),
|
теперь выводится страна
если кто предложит способ менее затрагивающий ядро буду рад
