[rt-users] solved - RTx::EmailCompletion adding name/other fields to pop down display

Giuseppe Sollazzo gsollazz at sgul.ac.uk
Thu Mar 3 06:26:37 EST 2011


Hi all,
I'm sure there's a more elegant way to do this, but I'm not a Perl 
programmer so what I managed to do is the following, in case anyone is 
interested:

1) In ./etc/RT_SiteConfig.pm set up EmailCompletionLdapAttrShow as a 
list rather than a single value
Set($EmailCompletionLdapAttrShow, [qw/cn mail/]);

2) In 
./local/plugins/RTx-EmailCompletion/html/SelfService/Ajax/EmailCompletion comment 
out the line that picks only the first value from 
$EmailCompletionLdapAttrShow so that the whole array is passed
# $RT::EmailCompletionLdapAttrShow = 
$RT::EmailCompletionLdapAttrShow->[0] if 
ref($RT::EmailCompletionLdapAttrShow) eq "ARRAY";

3) In 
./local/plugins/RTx-EmailCompletion/lib/RTx/EmailCompletion/Ldap.pm 
modify the call that gets the attribute value from ldap in order to 
obtain multiple values. That is, from:
my @emails = map { $_->get_attribute( $RT::EmailCompletionLdapAttrShow ) 
} $mesg->entries;
to something like (pardon my horrible Perl :P)
my @atts = map { "$_" } @{ $RT::EmailCompletionLdapAttrShow };
my @emails = ();
foreach $entry ($mesg->entries) {
   $outstring='';
   foreach $attribute (@atts) {
     $outstring= $outstring . " - " . 
$entry->get_attribute($attribute)->[0]; #or pass it to a formatting function
   }
   push(@emails, $outstring);
}

Any comment or questions are welcome!

Best regards,
Giuseppe

On 02/03/11 17:00, Giuseppe Sollazzo wrote:
> Hi Kevin, hi all.
>
> After a couple of tries I've realised that despite maybe not being the 
> most elegant way of doing it, this can be done by modifying 
> /opt/rt3/local/plugins/RTx-EmailCompletion/lib/RTx/EmailCompletion/Ldap.pm. 
> However I seem to have a "strange" issue.
>
>
> One step at a time. Where it does
>  my @emails = map { $_->get_attribute( 
> $RT::EmailCompletionLdapAttrShow ) } $mesg->entries;
> which of course gives for granted $RT::EmailCompletionLdapAttrShow to 
> be constituted of one element only,
>
> replace with something like
> my @emails = ();
>     foreach $entry ($mesg->entries) {
>         my $outstring = '';
>         foreach $attribute ($RT::EmailCompletionLdapAttrShow) {
>                 $outstring=$outstring . $entry->get_attribute($attribute);
>         }
>         @emails{$_} = $outstring;
>     }
> which basically creates the same output, but after concatenating the 
> result of all the attributes. So, for example, rather than having a 
> map constituted by only e-mail addresses, it will be e-mail addresses 
> + name.
>
> Now, this should work but I have a preliminary problem.
>
> You will remember that the search and show variables are configured in 
> RT_SiteConfig.pm. In my case:
> Set($EmailCompletionLdapAttrSearch, [qw/mail cn/]);
> Set($EmailCompletionLdapAttrShow, [qw/mail cn/]);
>
> I've verified that albeit the search being executed over "mail" and 
> "cn", the "show" is ignored. As a debug, I've added file logging to 
> /opt/rt3/local/plugins/RTx-EmailCompletion/lib/RTx/EmailCompletion.pm. 
> To my understanding, this is the primary "hook" in RT for 
> EmailCompletion, and it's the one that calls Ldap.pm->search_ldap.
>
> Guess what? If I put a debug print (Dumper) in EmailCompletion.pm to 
> show the content of the two variables, I get:
> This is the dump of EmailCompletionLdapAttrShow = 'cn';
>
> This is the dump of EmailCompletionLdapAttrSearch = [
>           'mail',
>           'cn'
>         ];
>
> Do you know why does it happen? I'm assuming I've overlooked 
> something... but can't tell what.
>
> Thanks,
> Giuseppe
>
> PS: Of course, I've tried different variable names and numbers, and 
> it's always the very first in EmailCompletionLdapAttrShow that gets 
> picked, which rules out a default value (that would be 'mail', anyway).
>
> On 25/02/11 16:45, Kevin Falcone wrote:
>> On Fri, Feb 25, 2011 at 04:37:32PM +0000, Giuseppe Sollazzo wrote:
>>> On 25/02/11 15:28, Kevin Falcone wrote:
>>>> It shouldn't actually require any JS hacking (or didn't when I last
>>>> overrode this extension to do it).
>>>>
>>> Hi Kevin,
>>> thanks - I'll give it a look.
>>>
>>>> You have to hack search in the .pm to return extra data about the user
>>>> and the EmailCompletion mason template to print it out.
>>>>
>>>> Be aware that RT considers some data to be sensitive (such as phone
>>>> numbers) so it'll refuse to show it unless you mark it as accessible.
>>> Uhm... how do you mean "mark"?
>> Check the methods in User/User_Overlay named *Accessible to get an
>> idea, there should be docs there and in DBIx::SearchBuilder about what
>> is going on.  You'll need a LocalAccessible to declare some fields
>> 'non admin'.
>>
>>>> In 4.0, this becomes 'write a custom ShowUser option' which isn't
>>>> as flexible as I'd like it to be, but is a step forward.
>>> I'll check it out - however we'll stay for 3.8 for a while I guess,
>>> but I'll start getting documentation about how to migrate.
>
>
> -- 
> ____________________________________
>
> Giuseppe Sollazzo
> Senior Systems Analyst
> Computing Services
> Information Services
> St. George's, University Of London
> Cranmer Terrace
> London SW17 0RE
>
> Email:gsollazz at sgul.ac.uk
> Direct Dial: +44 20 8725 5160
> Fax: +44 20 8725 3583
>


-- 
____________________________________

Giuseppe Sollazzo
Senior Systems Analyst
Computing Services
Information Services
St. George's, University Of London
Cranmer Terrace
London SW17 0RE

Email: gsollazz at sgul.ac.uk
Direct Dial: +44 20 8725 5160
Fax: +44 20 8725 3583


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.bestpractical.com/pipermail/rt-users/attachments/20110303/d97aebe6/attachment.htm>


More information about the rt-users mailing list