Поставил корпортал, запустил 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")), |
теперь выводится страна
если кто предложит способ менее затрагивающий ядро буду рад