[Zope-CMF] Re: returning case insensitive matches for
portal_membership.searchMembers()
Norbert Marrale
norbert at vsmpro.com
Fri Aug 4 17:53:24 EDT 2006
Dieter Maurer wrote:
> Norbert Marrale wrote at 2006-8-3 15:22 -0400:
>> Upon their initial registration, many users entered their email address
>> in upper or mixed case. The email > username(s) lookup is meant to
>> alleviate the number of support requests, allowing members to receive
>> password reminders even if they forget their registration handles.
>
> This means they have not only forgotten their password but also their
> userid?
>
> If they still know the userid, you can directly access the corresponding
> user record.
>
> If you did not store the userid normalized, then the best way
> would be to do normalization of the userid.
>
>
>
Yes, that's correct: they forget their userids on a regular basis. And
yes, userids are already stored normalized. *Forgotten* userids is why I
implemented the hack in mail_password (see below).
Which brings me to my original Q...
Is there a better way than the two-step approach I'm following:
emails = context.portal_membership.searchMembers('email','')
and then iterate over emails to find the matches
if (member==string.lower(emails[n].values()[1])):
Or if this can't be done in a less costly way, where would I start with
normalizing the email address records that are already stored?
Sorry if I didn't express myself clearly enough before. Thanks!
Norbert
-code below-
mail=0
mail_chars='.@'
member=string.lower(REQUEST['userid'])
for i in range(len(mail_chars)):
if string.find(member, mail_chars[i]) != -1:
mail += 1
if mail >= 2:
# this is probably an email address
emails = context.portal_membership.searchMembers('email','')
for n in range(0,len(emails),1):
if (member==string.lower(emails[n].values()[1])):
REQUEST.set('userid',str(emails[n].values()[0]))
context.portal_registration.mailPassword(REQUEST['userid'], REQUEST)
More information about the Zope-CMF
mailing list