Кастомное поле для хранения номера телефона Агента

Запросы на решение проблем

Модератор: ykolesnikov

Ответить
tyesman
OTRS Новобранец
Сообщения: 39
Зарегистрирован: 16 ноя 2015, 16:14

Кастомное поле для хранения номера телефона Агента

Сообщение tyesman » 31 мар 2016, 11:38

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

Дополнительное поле для хранения номера телефона я добавил с помощью конфига:

AgentPhoneNumber.xml

Код: Выделить всё

<otrs_config version="1.0" init="Framework">
    <ConfigItem Name="PreferencesGroups###PersonalPhoneNumber" Required="0" Valid="0">
        <Description Translatable="1">Defines the config parameters of this item, to be shown in the preferences view.</Description>
        <Group>Framework</Group>
        <SubGroup>Frontend::Agent::Preferences</SubGroup>
        <Setting>
            <Hash>
                <Item Key="Module">Kernel::Output::HTML::Preferences::Generic</Item>
                <Item Key="Column">Other Settings</Item>
                <Item Key="Label" Translatable="1">Добавочный номер телефона</Item>
                <Item Key="Key" Translatable="1">Номер телефона</Item>
                <Item Key="Block">Input</Item>
                <Item Key="Data">$Env{"telephoneNumber"}</Item>
                <Item Key="PrefKey">telephoneNumber</Item>
                <Item Key="Prio">7000</Item>
                <Item Key="Active">1</Item>
            </Hash>
        </Setting>
    </ConfigItem>
</otrs_config>
Затем активировал опцию в конфигурации OTRS Framework -> Frontend::Agent::Preferences
Выделение_163.jpg
Выделение_163.jpg (63.21 КБ) 3295 просмотров
Добавилось нормально, в админке, а также в интерфейсе у себя Агент сам может сменить номер.
Выделение_164.jpg
Выделение_164.jpg (8.42 КБ) 3295 просмотров
Выделение_165.jpg
Выделение_165.jpg (16.94 КБ) 3295 просмотров

В подписи используется как <OTRS_Agent_telephoneNumber>
Но не решил проблему синхронизации с AD.
На форуме http://forums.otterhub.org/viewtopic.php?t=24108 есть предложение как решить вопрос, но пока не протестировал.
Кто-нибудь подобное делал?

Код: Выделить всё

  $Self->{'AuthSyncModule::LDAP::UserPreferencesSyncMap'} = {
      # DB -> LDAP (user preferences)
      UserAgentenDurchwahl  => 'telephoneNumber',
      UserAgentenAbteilung  => 'department',
    }
Kernel/System/Auth/Sync/LDAP.pm, add on line 358 (OTRS 4)

Код: Выделить всё


    # sync user preferences from ldap
    my $UserPreferencesSyncMap = $ConfigObject->Get( 'AuthSyncModule::LDAP::UserPreferencesSyncMap' . $Self->{Count} );
    if ($UserPreferencesSyncMap && $UserID) {

        # get whole user dn
        my %SyncUserPreferences;
        for my $Entry ( $Result->all_entries() ) {
            for my $Key ( sort keys %{$UserPreferencesSyncMap} ) {
             
                my $AttributeNames = $UserPreferencesSyncMap->{$Key};
                if ( ref $AttributeNames ne 'ARRAY' ) {
                    $AttributeNames = [$AttributeNames];
                }
                ATTRIBUTE_NAME:
                for my $AttributeName ( @{$AttributeNames} ) {
                    if ( $AttributeName =~ /^_/ ) {
                        $SyncUserPreferences{$Key} = substr( $AttributeName, 1 );
                        last ATTRIBUTE_NAME;
                    }
                    elsif ( $Entry->get_value($AttributeName) ) {
                        $SyncUserPreferences{$Key} = $Entry->get_value($AttributeName);
                        last ATTRIBUTE_NAME;
                    }
                }

                # e. g. set utf-8 flag
                $SyncUserPreferences{$Key} = $Self->_ConvertFrom(
                    $SyncUserPreferences{$Key},
                    'utf-8',
                );
            }
        }

        # update user preferences attributes (only if changed)
        if (%SyncUserPreferences) {

            # get user data
            my %UserPreferencesData = $UserObject->GetPreferences( UserID => $UserID );

            # check for changes
            my $AttributeChange;
            ATTRIBUTE:
            for my $Attribute ( sort keys %SyncUserPreferences ) {
                next ATTRIBUTE if $SyncUserPreferences{$Attribute} eq $UserPreferencesData{$Attribute};
                $AttributeChange = 1;
                last ATTRIBUTE;
            }

            if ($AttributeChange) {
                for my $Attribute ( sort keys %SyncUserPreferences ) {
                  $UserObject->SetPreferences(
                    Key    => $Attribute,
                    Value  => $SyncUserPreferences{$Attribute},
                    UserID => $UserID,
                  );
                }
            }
        }
    }

paver
OTRS Мастер
Сообщения: 507
Зарегистрирован: 22 апр 2015, 06:45
Откуда: Томск
Благодарил (а): 7 раз
Поблагодарили: 45 раз

Re: Кастомное поле для хранения номера телефона Агента

Сообщение paver » 31 мар 2016, 15:56

С адом не синхронизировал, но... Я б кириллицу в конфиге не использовал. Руссификация - через стандартный механизм. Не знаю, насколько это принципиально
У нас это так
Вложения
agentphone.png
agentphone.png (23.32 КБ) 3284 просмотра
--
OTRS 6.0.22

Ответить