Monday, November 08, 2010 at 12:04 AM.
system.verbs.builtins.mainResponder.members.linkToMember
on linkToMember (groupName, memberKey, hideEmail=false, adrMembers=nil, pta=nil, urlprefix="", useMap=false) {
<<Changes
<<4/18/03; 4:18:44 PM by JES
<<Member links are now numeric -- this prevents spammers from mining Manila sites for the email addresses of their members.
<<We store a number associated with each member in the usersMap sub-table of the #membershipGroup table, and look up the member's email address using the number.
<<8/14/02; 8:25:54 PM by JES
<<New optional parameter, urlPrefix.
<<9/26/01; 6:17:50 PM by PBS
<<New optional parameter: adrMembers is the address of the membership group.
<<pta is now an optional parameter for performance reasons.
<<10/08/00; 4:08:26 AM by JES
<<Added optional parameter, hideEmail, which causes email addresses to be obscured with elipses.
<<11/14/99; 5:55:31 PM by PBS
<<adrMember^.personalInfo.name may exist yet be blank: if so, just return the member key (the email address).
<<3/4/99; 02:56:16 GMT by AR
<<Removed reference to config.mainResponder.urls
on getUsersMapKey (adrmember) {
if not defined (adrMembers^.usersMap) {
new (tableType, @adrMembers^.usersMap)};
if not defined (adrmember^.usersMapKey) {
local (ix = sizeOf (adrMembers^.usersMap) + 1);
adrmember^.usersMapKey = ix;
adrMembers^.usersMap.[ix] = nameOf (adrmember^)};
return (adrmember^.usersMapKey)};
on obscureEmail (key, link=true) {
if hideEmail {
if key contains '@' {
local (part1 = string.nthField (key, '@', 1));
local (part2 = string.nthField (key, '@', 2));
if link {
return ("<a href=\"mailto:" + key + "\">" + part1 + "@" + part2[1] + "...</a>")}
else {
return (part1 + "@" + part2[1] + "...")}}};
return (key)};
try {
if adrMembers == nil {
adrMembers = mainResponder.members.getMembershipTable (groupName)};
local (adrmember = mainresponder.members.getmembertable (groupname, memberkey, adrMembers));
local (name = "");
if defined (adrmember^.personalInfo.name) {
name = adrmember^.personalInfo.name};
if string.trimWhiteSpace (name) == "" {
name = obscureEmail (memberKey)};
if pta == nil {
pta = html.getpagetableaddress ()};
local (url = urlprefix);
if url == "" {
url = pta^.responderAttributes.urls^.profilesHome + "$"};
url = string.replace (url, "[[group]]", groupName);
if useMap {
local (usersMapKey = getUsersMapKey (adrmember));
return ("<a href=\"" + url + usersMapKey + "\">" + name + "</a>")}
else {
return ("<a href=\"" + url + memberKey + "\">" + name + "</a>")}}
else {
return (obscureEmail (memberKey))}}
<<bundle //test code
<<local (adrsite = @jaketest2ManilaWebsite)
<<local (adrmembers = jaketest2Members)
<<local (groupName = "jaketest2Members")
<<local (memberKey = "jake@userland.com")
<<dialog.notify (linkToMember (groupName, memberKey, adrmembers:adrmembers))
This listing is for code that runs in the OPML Editor environment. I created these listings because I wanted the search engines to index it, so that when I want to look up something in my codebase I don't have to use the much slower search functionality in my object database. Dave Winer.