+2007-05-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
+
+ * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
+ -contactInfosForUserWithUIDorEmail:uid]): check that uid is not empty.
+
+ * SoObjects/SOGo/LDAPSource.m ([LDAPSource
+ -checkLogin:loginToCheckandPassword:passwordToCheck]): check that
+ loginToCheck is not empty.
+ ([LDAPSource -fetchContactsMatching:match]): check that match is
+ not empty.
+ ([LDAPSource -lookupContactEntry:entryID]): check that entryID is
+ not empty.
+ ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]): check that
+ uid is not empty.
+
2007-05-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
* SoObjects/SOGo/SOGoUser.m ([SOGoUser -primaryEmail]): new name
NSString *userDN;
NGLdapConnection *bindConnection;
- bindConnection = [[NGLdapConnection alloc] initWithHostName: hostname
- port: port];
- userDN = [NSString stringWithFormat: @"%@=%@,%@",
- IDField, loginToCheck, baseDN];
- NS_DURING
- didBind = [bindConnection bindWithMethod: @"simple" binddn: userDN
- credentials: passwordToCheck];
- NS_HANDLER
+ if ([loginToCheck length] > 0)
+ {
+ bindConnection = [[NGLdapConnection alloc] initWithHostName: hostname
+ port: port];
+ userDN = [NSString stringWithFormat: @"%@=%@,%@",
+ IDField, loginToCheck, baseDN];
+ NS_DURING
+ didBind = [bindConnection bindWithMethod: @"simple" binddn: userDN
+ credentials: passwordToCheck];
+ NS_HANDLER
+ didBind = NO;
+ NS_ENDHANDLER
+
+ [bindConnection release];
+ }
+ else
didBind = NO;
- NS_ENDHANDLER
-
- [bindConnection release];
return didBind;
}
NSString *qs;
EOQualifier *qualifier;
- if (filter && [filter length] > 0)
+ if ([filter length] > 0)
{
if ([filter isEqualToString: @"."])
qs = @"(cn='*')";
contacts = [NSMutableArray array];
- if (!ldapConnection)
- [self _initLDAPConnection];
- entries = [ldapConnection deepSearchAtBaseDN: baseDN
- qualifier: [self _qualifierForFilter: match]
- attributes: [self _searchAttributes]];
- if (entries)
+ if ([match length] > 0)
{
- currentEntry = [entries nextObject];
- while (currentEntry)
+ if (!ldapConnection)
+ [self _initLDAPConnection];
+ entries = [ldapConnection deepSearchAtBaseDN: baseDN
+ qualifier: [self _qualifierForFilter: match]
+ attributes: [self _searchAttributes]];
+ if (entries)
{
- [contacts addObject:
- [self _convertLDAPEntryToContact: currentEntry]];
currentEntry = [entries nextObject];
+ while (currentEntry)
+ {
+ [contacts addObject:
+ [self _convertLDAPEntryToContact: currentEntry]];
+ currentEntry = [entries nextObject];
+ }
}
}
NSDictionary *contactEntry;
NGLdapEntry *ldapEntry;
- if (!ldapConnection)
- [self _initLDAPConnection];
- ldapEntry
- = [ldapConnection entryAtDN: [NSString stringWithFormat: @"%@=%@,%@",
- IDField, entryID, baseDN]
- attributes: [self _searchAttributes]];
- if (ldapEntry)
- contactEntry = [self _convertLDAPEntryToContact: ldapEntry];
- else
- contactEntry = nil;
+ contactEntry = nil;
+
+ if ([entryID length] > 0)
+ {
+ if (!ldapConnection)
+ [self _initLDAPConnection];
+ ldapEntry
+ = [ldapConnection entryAtDN: [NSString stringWithFormat: @"%@=%@,%@",
+ IDField, entryID, baseDN]
+ attributes: [self _searchAttributes]];
+ if (ldapEntry)
+ contactEntry = [self _convertLDAPEntryToContact: ldapEntry];
+ }
return contactEntry;
}
NSEnumerator *entries;
EOQualifier *qualifier;
- if (!ldapConnection)
- [self _initLDAPConnection];
- qualifier = [self _qualifierForUIDFilter: uid];
- entries = [ldapConnection deepSearchAtBaseDN: baseDN
- qualifier: qualifier
- attributes: [self _searchAttributes]];
- ldapEntry = [entries nextObject];
- if (ldapEntry)
- contactEntry = [self _convertLDAPEntryToContact: ldapEntry];
- else
- contactEntry = nil;
+ contactEntry = nil;
+
+ if ([uid length] > 0)
+ {
+ if (!ldapConnection)
+ [self _initLDAPConnection];
+ qualifier = [self _qualifierForUIDFilter: uid];
+ entries = [ldapConnection deepSearchAtBaseDN: baseDN
+ qualifier: qualifier
+ attributes: [self _searchAttributes]];
+ ldapEntry = [entries nextObject];
+ if (ldapEntry)
+ contactEntry = [self _convertLDAPEntryToContact: ldapEntry];
+ }
return contactEntry;
}
{
NSDictionary *contactInfos;
+// NSLog (@"getCNForUID: %@", uid);
contactInfos = [self contactInfosForUserWithUIDorEmail: uid];
return [contactInfos objectForKey: @"cn"];
{
NSDictionary *contactInfos;
+// NSLog (@"getEmailForUID: %@", uid);
contactInfos = [self contactInfosForUserWithUIDorEmail: uid];
return [contactInfos objectForKey: @"c_email"];
{
NSDictionary *contactInfos;
+// NSLog (@"getUIDForEmail: %@", email);
contactInfos = [self contactInfosForUserWithUIDorEmail: email];
return [contactInfos objectForKey: @"c_uid"];
NSDate *cleanupDate;
BOOL newUser;
- contactInfos = [NSMutableDictionary dictionary];
- currentUser = [users objectForKey: uid];
- if (!([currentUser objectForKey: @"emails"]
- && [currentUser objectForKey: @"cn"]))
+ if ([uid length] > 0)
{
- if (!currentUser)
+ contactInfos = [NSMutableDictionary dictionary];
+ currentUser = [users objectForKey: uid];
+ if (!([currentUser objectForKey: @"emails"]
+ && [currentUser objectForKey: @"cn"]))
{
- newUser = YES;
- currentUser = [NSMutableDictionary dictionary];
+ if (!currentUser)
+ {
+ newUser = YES;
+ currentUser = [NSMutableDictionary dictionary];
+ }
+ else
+ newUser = NO;
+ [self _fillContactInfosForUser: currentUser
+ withUIDorEmail: uid];
+ if (newUser)
+ {
+ if ([[currentUser objectForKey: @"c_uid"] length] > 0)
+ [self _retainUser: currentUser];
+ else
+ currentUser = nil;
+ }
}
- else
- newUser = NO;
- [self _fillContactInfosForUser: currentUser
- withUIDorEmail: uid];
- if (newUser)
- [self _retainUser: currentUser];
- }
- if (cleanupInterval)
- {
- cleanupDate = [[NSDate date] addTimeInterval: cleanupInterval];
- [currentUser setObject: cleanupDate forKey: @"cleanupDate"];
+ if (cleanupInterval && currentUser)
+ {
+ cleanupDate = [[NSDate date] addTimeInterval: cleanupInterval];
+ [currentUser setObject: cleanupDate forKey: @"cleanupDate"];
+ }
}
+ else
+ currentUser = nil;
return currentUser;
}
LDAPSource *currentSource;
contacts = [NSMutableArray array];
-
ldapSources = [sources objectEnumerator];
currentSource = [ldapSources nextObject];
while (currentSource)
+if (navigator.vendor == "Apple Computer, Inc." || navigator.vendor == "KDE") { // WebCore/KHTML
+ /*
+ Crossbrowser HTMLElement Prototyping
+ Copyright (C) 2005 Jason Davis, http://www.browserland.org
+ Additional thanks to Brothercake, http://www.brothercake.com
+
+ This code is licensed under the LGPL:
+ http://www.gnu.org/licenses/lgpl.html
+ */
+
+ (function(c) {
+ for (var i in c)
+ window["HTML" + i + "Element"] = document.createElement(c[ i ]).constructor;
+ })({
+ Html: "html", Head: "head", Link: "link", Title: "title", Meta: "meta",
+ Base: "base", IsIndex: "isindex", Style: "style", Body: "body", Form: "form",
+ Select: "select", OptGroup: "optgroup", Option: "option", Input: "input",
+ TextArea: "textarea", Button: "button", Label: "label", FieldSet: "fieldset",
+ Legend: "legend", UList: "ul", OList: "ol", DList: "dl", Directory: "dir",
+ Menu: "menu", LI: "li", Div: "div", Paragraph: "p", Heading: "h1", Quote: "q",
+ Pre: "pre", BR: "br", BaseFont: "basefont", Font: "font", HR: "hr", Mod: "ins",
+ Anchor: "a", Image: "img", Object: "object", Param: "param", Applet: "applet",
+ Map: "map", Area: "area", Script: "script", Table: "table", TableCaption: "caption",
+ TableCol: "col", TableSection: "tbody", TableRow: "tr", TableCell: "td",
+ FrameSet: "frameset", Frame: "frame", IFrame: "iframe"
+ });
+
+ function HTMLElement() {}
+ //HTMLElement.prototype = HTMLHtmlElement.__proto__.__proto__;
+ var HTMLDocument = document.constructor;
+ var HTMLCollection = document.links.constructor;
+ var HTMLOptionsCollection = document.createElement("select").options.constructor;
+ var Text = document.createTextNode("").constructor;
+ //var Node = Text;
+
+ // More efficient for Safari 2
+ function Document() {}
+ function Event() {}
+ function HTMLCollection() {}
+ function HTMLElement() {}
+ function Node() {}
+ Document.prototype = window["[[DOMDocument]]"];
+ Event.prototype = window["[[DOMEvent]]"];
+ HTMLCollection.prototype = window["[[HTMLCollection.prototype]]"];
+ HTMLElement.prototype = window["[[DOMElement.prototype]]"];
+ Node.prototype = window["[[DOMNode.prototype]]"];
+}
+
/* custom extensions to the DOM api */
HTMLElement.prototype.addInterface = function(objectInterface) {
Object.extend(this, objectInterface);
HTMLInputElement.prototype._replicate = function() {
if (this.replica) {
this.replica.value = this.value;
- var onReplicaChangeEvent = document.createEvent("Event");
+ var onReplicaChangeEvent = document.createEvent("UIEvents");
onReplicaChangeEvent.initEvent("change", true, true);
this.replica.dispatchEvent(onReplicaChangeEvent);
}
HTMLSelectElement.prototype._replicate = function() {
if (this.replica) {
this.replica.value = this.value;
- var onReplicaChangeEvent = document.createEvent("Event");
+ var onReplicaChangeEvent = document.createEvent("UIEvents");
onReplicaChangeEvent.initEvent("change", true, true);
this.replica.dispatchEvent(onReplicaChangeEvent);
}
lowerBlock: null,
bind: function () {
this.addEventListener("mousedown", this.startHandleDragging, false);
+ this.onmousedown = function() { return false }
},
_determineType: function () {
if (this.leftBlock && this.rightBlock)
startHandleDragging: function (event) {
if (!this.dhType)
this._determineType();
- if (event.button == 0) {
+ var targ;
+ if (!event)
+ var event = window.event;
+ if (event.target)
+ targ = event.target
+ else if (event.srcElement)
+ targ = event.srcElement
+ if (targ.nodeType == 1) {
if (this.dhType == 'horizontal') {
this.origX = this.offsetLeft;
this.origLeft = this.leftBlock.offsetWidth;
document.body.style.cursor = "n-resize";
}
document._currentDragHandle = this;
- document.addEventListener("mouseup", this.documentStopHandleDragging, true);
- document.addEventListener("mousemove", this.documentMove, true);
+ if (document.addEventListener) {
+ document.addEventListener("mouseup", this.documentStopHandleDragging, true);
+ document.addEventListener("mousemove", this.documentMove, true);
+ } else if (window.addEventListener) {
+ window.addEventListener("mouseup", this.documentStopHandleDragging, true);
+ window.addEventListener("mousemove", this.documentMove, true);
+ }
this.move(event);
event.cancelBubble = true;
}
},
documentMove: function (event) {
var handle = document._currentDragHandle;
+ if (!handle) return false;
return handle.move(event);
},
stopHandleDragging: function (event) {
if (this.dhType == 'horizontal') {
var deltaX
= Math.floor(event.clientX - this.origX - (this.offsetWidth / 2));
- this.rightBlock.style.left = (this.origRight + deltaX) + 'px;';
- this.leftBlock.style.width = (this.origLeft + deltaX) + 'px;';
+ this.rightBlock.style.left = (this.origRight + deltaX) + 'px';
+ this.leftBlock.style.width = (this.origLeft + deltaX) + 'px';
} else if (this.dhType == 'vertical') {
var deltaY
= Math.floor(event.clientY - this.origY - (this.offsetHeight / 2));
- this.lowerBlock.style.top = (this.origLower + deltaY - delta) + 'px;';
- this.upperBlock.style.height = (this.origUpper + deltaY - delta) + 'px;';
+ this.lowerBlock.style.top = (this.origLower + deltaY - delta) + 'px';
+ this.upperBlock.style.height = (this.origUpper + deltaY - delta) + 'px';
}
- document.removeEventListener("mouseup", this.documentStopHandleDragging, true);
- document.removeEventListener("mousemove", this.documentMove, true);
+ if (window.addEventListener) {
+ window.removeEventListener("mouseup", this.documentStopHandleDragging, true);
+ window.removeEventListener("mousemove", this.documentMove, true);
+ } else if (document.addEventListener) {
+ document.removeEventListener("mouseup", this.documentStopHandleDragging, true);
+ document.removeEventListener("mousemove", this.documentMove, true);
+ }
document.body.setAttribute('style', '');
this.move(event);
var hX = event.clientX;
if (hX > -1) {
var newLeft = Math.floor(hX - (width / 2));
- this.style.left = newLeft + 'px;';
+ this.style.left = newLeft + 'px';
event.cancelBubble = true;
return false;
var hY = event.clientY;
if (hY > -1) {
var newTop = Math.floor(hY - (height / 2)) - delta;
- this.style.top = newTop + 'px;';
+ this.style.top = newTop + 'px';
event.cancelBubble = true;
return false;
if (this.offsetLeft > lLeft) {
var leftdelta = this.rightBlock.offsetLeft - this.offsetLeft;
- this.style.left = lLeft + 'px;';
+ this.style.left = lLeft + 'px';
this.leftBlock.style.width = '0px';
- this.rightBlock.style.left = (lLeft + leftdelta) + 'px;';
+ this.rightBlock.style.left = (lLeft + leftdelta) + 'px';
}
} else if (this.dhType == 'vertical') {
var uTop = this.upperBlock.offsetTop;
if (this.offsetTop > uTop) {
var topdelta = this.lowerBlock.offsetTop - this.offsetTop;
- this.style.top = uTop + 'px;';
+ this.style.top = uTop + 'px';
this.upperBlock.style.width = '0px';
- this.lowerBlock.style.top = (uTop + topdelta) + 'px;';
+ this.lowerBlock.style.top = (uTop + topdelta) + 'px';
}
}
}
SPAN.toolbarButton, SPAN.disabledToolbarButton
{ cursor: default;
- display: block;
+ display: inline;
float: left;
- height: 80%;
text-align: center;
-moz-box-align: center;
-moz-box-pack: center;
- margin: 0px;
border-left: 1px solid transparent;
border-top: 1px solid transparent;
border-right: 1px solid transparent;
margin: auto; }
.toolbarButton .buttonLabel
-{ width: 100%;
- margin: auto; }
+{ margin: auto; }
/* popups */
.menu
var parentNode = node.parentNode;
if (parentNode instanceof HTMLTableSectionElement)
parentNode = parentNode.parentNode;
- var onSelectionChangeEvent = document.createEvent("Event");
+ var onSelectionChangeEvent = document.createEvent("UIEvents");
onSelectionChangeEvent.initEvent("selectionchange", true, true);
parentNode.dispatchEvent(onSelectionChangeEvent);
}
menuNode.parentMenu = null;
}
- var onhideEvent = document.createEvent("Event");
+ var onhideEvent = document.createEvent("UIEvents");
onhideEvent.initEvent("hideMenu", false, true);
menuNode.dispatchEvent(onhideEvent);
}
for (var i = 0; i < nodes.length; i++) {
if (nodes[i] instanceof HTMLLIElement) {
if (!firstTab) {
- firstTab = nodes[i];
+ firstTab = i;
}
nodes[i].addEventListener("mousedown", onTabMouseDown, true);
nodes[i].addEventListener("click", onTabClick, true);
}
}
- firstTab.addClassName("first");
- firstTab.addClassName("active");
- container.activeTab = firstTab;
+ nodes[firstTab].addClassName("first");
+ nodes[firstTab].addClassName("active");
+ container.activeTab = nodes[firstTab];
- var target = $(firstTab.getAttribute("target"));
+ var target = $(nodes[firstTab].getAttribute("target"));
target.addClassName("active");
}
}
return color;
}
-var onLoadHandler = {
- handleEvent: function (event) {
- queryParameters = parseQueryParameters('' + window.location);
- if (!document.body.hasClassName("popup")) {
- initLogConsole();
- initializeMenus();
- initCriteria();
- }
- initTabs();
- configureDragHandles();
- configureSortableTableHeaders();
- configureLinkBanner();
- var progressImage = $("progressIndicator");
- if (progressImage)
- progressImage.parentNode.removeChild(progressImage);
+var onLoadHandler = function (event) {
+ queryParameters = parseQueryParameters('' + window.location);
+ if (!document.body.hasClassName("popup")) {
+ initLogConsole();
+ initializeMenus();
+ initCriteria();
}
+ initTabs();
+ configureDragHandles();
+ configureSortableTableHeaders();
+ configureLinkBanner();
+ var progressImage = $("progressIndicator");
+ if (progressImage)
+ progressImage.parentNode.removeChild(progressImage);
}
function configureSortableTableHeaders() {
}
}
-window.addEventListener("load", onLoadHandler, false);
+if (window.addEventListener) {
+ window.addEventListener('load', onLoadHandler, false);
+} else if (document.addEventListener) {
+ document.addEventListener('load', onLoadHandler, false);
+}
/* stubs */
function configureDragHandles() {