See ChangeLog

Monotone-Parent: ebd8557fae4ef7c0656a9eae753c68207fc9c60b
Monotone-Revision: a57ac11c710e04e59d47cf12be270492f600a306

Monotone-Author: flachapelle@inverse.ca
Monotone-Date: 2009-06-29T19:08:29
Monotone-Branch: ca.inverse.sogo
maint-2.0.2
Francis Lachapelle 2009-06-29 19:08:29 +00:00
parent a667155d0f
commit 109ca5a129
4 changed files with 88 additions and 65 deletions

View File

@ -1,3 +1,16 @@
2009-06-29 Francis Lachapelle <flachapelle@inverse.ca>
* SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
-initSubFolders]): system folders (LDAP sources) are now loaded
unconditionally.
([SOGoFolderParent -initSubscribedSubFolders]): new method to load
only subscribed folders.
([SOGoParent -lookupName:inContext:acquire:]): we now properly
lookup in subscribed folders.
([SOGoParentFolder -subFolders]): since the subscribed folders are
now stored in its own dictionary, we must return keys from both
dictionaries.
2009-06-26 Francis Lachapelle <flachapelle@inverse.ca>
* UI/Contacts/UIxContactsListViewContainer.[hm]: this class was

View File

@ -31,7 +31,7 @@
@interface SOGoParentFolder : SOGoFolder
{
NSMutableDictionary *subFolders;
NSMutableDictionary *subFolders, *subscribedSubFolders;
NSString *OCSPath;
Class subFolderClass;
BOOL hasSubscribedSources;

View File

@ -243,11 +243,6 @@ static SoSecurityManager *sm = nil;
return nil;
}
- (void) _removeSubscribedSource: (NSString *) key
{
#warning TO BE IMPLEMENTED SOON FIXME
}
- (void) _appendSubscribedSource: (NSString *) sourceKey
{
SOGoGCSFolder *subscribedFolder;
@ -257,12 +252,10 @@ static SoSecurityManager *sm = nil;
inContainer: self];
if (subscribedFolder
&& ![sm validatePermission: SOGoPerm_AccessObject
onObject: subscribedFolder
inContext: context])
[subFolders setObject: subscribedFolder
forKey: [subscribedFolder nameInContainer]];
else
[self _removeSubscribedSource: sourceKey];
onObject: subscribedFolder
inContext: context])
[subscribedSubFolders setObject: subscribedFolder
forKey: [subscribedFolder nameInContainer]];
}
- (NSException *) appendSubscribedSources
@ -336,27 +329,16 @@ static SoSecurityManager *sm = nil;
return error;
}
- (NSException *) initSubFoldersMatching: (NSString *) folderName
- (NSException *) initSubFolders;
{
NSString *login;
NSException *error;
if (!subFolders)
{
subFolders = [NSMutableDictionary new];
error = [self appendPersonalSources];
if (!error
&& !(folderName && [subFolders objectForKey: folderName]))
{
error = [self appendSystemSources];
if (!error
&& !(folderName && [subFolders objectForKey: folderName]))
{
login = [[context activeUser] login];
if ([login isEqualToString: owner])
error = [self appendSubscribedSources];
}
}
if (!error)
error = [self appendSystemSources];
if (error)
{
[subFolders release];
@ -369,15 +351,33 @@ static SoSecurityManager *sm = nil;
return error;
}
// - (void) _appendSubscribedSourcesIfNeeded
// {
// NSString *login;
- (NSException *) initSubscribedSubFolders
{
NSArray *subscribedReferences;
NSUserDefaults *settings;
NSEnumerator *allKeys;
NSString *currentKey, *login;
NSException *error;
// login = [[context activeUser] login];
// if ([login isEqualToString: owner])
// [self appendSubscribedSources];
// hasSubscribedSources = YES;
// }
error = nil; /* we ignore non-DB errors at this time... */
login = [[context activeUser] login];
if (!subscribedSubFolders && [login isEqualToString: owner])
{
subscribedSubFolders = [NSMutableDictionary new];
settings = [[context activeUser] userSettings];
subscribedReferences = [[settings objectForKey: nameInContainer]
objectForKey: @"SubscribedFolders"];
if ([subscribedReferences isKindOfClass: [NSArray class]])
{
allKeys = [subscribedReferences objectEnumerator];
while ((currentKey = [allKeys nextObject]))
[self _appendSubscribedSource: currentKey];
}
}
return error;
}
- (NSArray *) fetchContentObjectNames
{
@ -395,11 +395,8 @@ static SoSecurityManager *sm = nil;
obj = [super lookupName: name inContext: lookupContext acquire: NO];
if (!obj)
{
if (!subFolders)
error = [self initSubFoldersMatching: name];
else
error = nil;
// Lookup in personal folders
error = [self initSubFolders];
if (error)
{
[self errorWithFormat: @"a database error occured: %@", [error reason]];
@ -407,37 +404,48 @@ static SoSecurityManager *sm = nil;
}
else
obj = [subFolders objectForKey: name];
// if (!obj && !hasSubscribedSources)
// {
// [self _appendSubscribedSourcesIfNeeded];
// obj = [subFolders objectForKey: name];
// }
if (!obj)
{
// Lookup in subscribed folders
error = [self initSubscribedSubFolders];
if (error)
{
[self errorWithFormat: @"a database error occured: %@", [error reason]];
obj = [NSException exceptionWithHTTPStatus: 503];
}
else
obj = [subscribedSubFolders objectForKey: name];
}
}
return obj;
}
- (NSArray *) subFolders
{
NSMutableArray *ma;
NSException *error;
if (!subFolders)
error = [self initSubFolders];
if (error)
{
error = [self initSubFoldersMatching: nil];
if (error)
{
/* We exceptionnally raise the exception here because doPROPFIND:
will not care for errors in its response from
toManyRelationShipKeys, which may in turn trigger the
disappearance of user folders in the SOGo extensions. */
[error raise];
}
/* We exceptionnally raise the exception here because doPROPFIND:
will not care for errors in its response from
toManyRelationShipKeys, which may in turn trigger the
disappearance of user folders in the SOGo extensions. */
[error raise];
}
// if (!!hasSubscribedSources)
// [self _appendSubscribedSourcesIfNeeded];
error = [self initSubscribedSubFolders];
if (error)
[error raise];
return [[subFolders allValues]
sortedArrayUsingSelector: @selector (compare:)];
ma = [NSMutableArray arrayWithArray: [subFolders allValues]];
if ([subscribedSubFolders count])
[ma addObjectsFromArray: [subscribedSubFolders allValues]];
return [ma sortedArrayUsingSelector: @selector (compare:)];
}
- (NSArray *) toManyRelationshipKeys

View File

@ -251,7 +251,7 @@ function actionContactCallback(http) {
var error = html.select("p").first().firstChild.nodeValue.trim();
log("actionContactCallback failed: error " + http.status + " (" + error + ")");
if (parseInt(http.status) == 403)
window.alert(labels["You don't have the required privileges to perform the operation."]);
window.alert(clabels["You don't have the required privileges to perform the operation."]);
else if (error)
window.alert(labels[error]);
refreshCurrentFolder();
@ -775,6 +775,8 @@ function onAddressBookMenuPrepareVisibility() {
menuEntry.removeClassName("disabled");
});
}
return true;
}
function updateAddressBooksMenus() {
@ -897,8 +899,7 @@ function onAddressBooksMenuPrepareVisibility() {
sharingOption.addClassName("disabled");
}
// disable the "remove" option when address book is public, otherwise
// enable it
// Disable the "remove" option when address book is public
if (folderOwner == "nobody")
removeOption.addClassName("disabled");
else
@ -912,7 +913,7 @@ function onAddressBooksMenuPrepareVisibility() {
function onContactMenuPrepareVisibility() {
var contactRows = document.menuTarget;
var selectedFolder = $("contactFolders").getSelectedNodes()[0];
var selectedFolder = $("contactFolders").getSelectedNodes().first();
var options = { write: false,
aim: false };
@ -923,9 +924,10 @@ function onContactMenuPrepareVisibility() {
var moveOption = elements[7];
$A(contactRows).each(function(contactRow) {
var emailCell = contactRow.down('td', 1);
var cells = contactRow.getElementsByTagName('td');
var emailCell = cells[1];
options.write |= (emailCell.firstChild != null);
var aimCell = contactRow.down('td', 2);
var aimCell = cells[2];
options.aim |= (aimCell.firstChild != null);
});