From 9b0e5ae09361c0ad957786db2dd6f96a8e43def4 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Fri, 30 Jul 2010 18:24:29 +0000 Subject: [PATCH 01/66] Monotone-Parent: 86a177d4a05deda193edc7d9e0fedca89758cadd Monotone-Revision: a8e20b13effb8b62bfe9471ec95ca5dd7eb9dd3d Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-07-30T18:24:29 Monotone-Branch: ca.inverse.sogo --- UI/WebServerResources/generic.css | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/UI/WebServerResources/generic.css b/UI/WebServerResources/generic.css index c098a1d04..31f47f4f4 100644 --- a/UI/WebServerResources/generic.css +++ b/UI/WebServerResources/generic.css @@ -113,27 +113,6 @@ div#header span#navtitle div#header a:hover { text-decoration: none; } -/* the dock */ - -a.skydockfont -{ text-decoration: none; - color: #06348B; } -font.skydockfont -{ text-decoration: none; - color: #06348B; } -font.skydockfont_inactiveMail -{ text-decoration: none; - color: #CCCCCC; - font-weight: bold; } -font.skydockfont_newMail -{ text-decoration: none; - color: #06348B; - font-weight: bold; } - -table.skytextdocktable -{ padding: 0px; - table-layout: auto; } - DIV.linkbanner { background-color: #222; width: 100%; From beaf3e9b7d49341ec3852299130f48880124e429 Mon Sep 17 00:00:00 2001 From: Francis Lachapelle Date: Fri, 30 Jul 2010 20:10:00 +0000 Subject: [PATCH 02/66] See ChangeLog. Monotone-Parent: 86a177d4a05deda193edc7d9e0fedca89758cadd Monotone-Revision: 858a9ca804ecabd66c735a54fe09bd4e5b7ec5b2 Monotone-Author: flachapelle@inverse.ca Monotone-Date: 2010-07-30T20:10:00 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 15 ++ UI/WebServerResources/ContactsUI.js | 11 +- UI/WebServerResources/HTMLElement.js | 11 ++ UI/WebServerResources/SchedulerUI.js | 138 +++++++++++++----- .../scriptaculous/dragdrop.js | 1 - 5 files changed, 133 insertions(+), 43 deletions(-) diff --git a/ChangeLog b/ChangeLog index 236fd4b74..3e60e74a5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,18 @@ +2010-07-30 Francis Lachapelle + + * UI/WebServerResources/SchedulerUI.js (deleteEvent): improved + the function to delete all selected events cells. + (onSelectAll): improved the function to select all events cells. + (onDocumentKeydown): select all elements upon ctrl-A. + (onCalendarSelectEvent): allow multiple selections. + + * UI/WebServerResources/HTMLElement.js (selectAll): new method to + select all entries of a list or a table. + + * UI/WebServerResources/scriptaculous/dragdrop.js (initDrag): + avoid stopping the event propagation so the blur event is properly + fired on the search input field when it isfocused. + 2010-07-28 Francis Lachapelle * UI/WebServerResources/MailerUI.js (deleteCachedMailboxByType, diff --git a/UI/WebServerResources/ContactsUI.js b/UI/WebServerResources/ContactsUI.js index 40cb83ea0..b19fea399 100644 --- a/UI/WebServerResources/ContactsUI.js +++ b/UI/WebServerResources/ContactsUI.js @@ -1146,7 +1146,7 @@ function onDocumentKeydown(event) { nextRow = row.previous("tr"); if (nextRow) { row.up().deselectAll(); - + // Adjust the scollbar var viewPort = $("contactsListContent"); var divDimensions = viewPort.getDimensions(); @@ -1167,6 +1167,10 @@ function onDocumentKeydown(event) { Event.stop(event); } } + else if (event.ctrlKey == 1 && event.keyCode == 65) { // Ctrl-A + $("contactsList").selectAll(); + Event.stop(event); + } } /*function fixSearchFieldPosition () { @@ -1193,10 +1197,7 @@ function initContacts(event) { $("uploadOK").observe("click", hideImportResults); } - if (Prototype.Browser.Gecko) - Event.observe(document, "keypress", onDocumentKeydown); // for FF2 - else - Event.observe(document, "keydown", onDocumentKeydown); + Event.observe(document, "keydown", onDocumentKeydown); configureAddressBooks(); updateAddressBooksMenus(); diff --git a/UI/WebServerResources/HTMLElement.js b/UI/WebServerResources/HTMLElement.js index 01988838c..872330abc 100644 --- a/UI/WebServerResources/HTMLElement.js +++ b/UI/WebServerResources/HTMLElement.js @@ -202,6 +202,17 @@ Element.addMethods({ } }, + selectAll: function(element) { + element = $(element); + if (element.tagName == 'UL') + rows = element.getElementsByTagName('LI'); + else + rows = element.select('TBODY TR'); + for (var i = 0; i < rows.length; i++) + if (rows[i].nodeType == 1) + $(rows[i]).selectElement(); + }, + deselect: function(element) { element = $(element); element.removeClassName('_selected'); diff --git a/UI/WebServerResources/SchedulerUI.js b/UI/WebServerResources/SchedulerUI.js index 190bf1dd2..b20e47a4a 100644 --- a/UI/WebServerResources/SchedulerUI.js +++ b/UI/WebServerResources/SchedulerUI.js @@ -198,7 +198,7 @@ function deleteEvent() { var nodes = listOfSelection.getSelectedRows(); if (nodes.length > 0) { var label = ""; - if (!nodes[0].erasable) { + if (!nodes[0].erasable && !IsSuperUser) { window.alert(_("You don't have the required privileges to perform the operation.")); return false; } @@ -239,24 +239,35 @@ function deleteEvent() { } } else if (selectedCalendarCell) { - if (!selectedCalendarCell[0].erasable) { - window.alert(_("You don't have the required privileges to perform the operation.")); - return false; - } - if (selectedCalendarCell[0].recurrenceTime) { + if (selectedCalendarCell.length == 1 + && selectedCalendarCell[0].recurrenceTime) { _editRecurrenceDialog(selectedCalendarCell[0], "confirmDeletion"); } - else { - var label = _("eventDeleteConfirmation"); - if (confirm(label)) { - if (document.deleteEventAjaxRequest) { - document.deleteEventAjaxRequest.aborted = true; - document.deleteEventAjaxRequest.abort(); - } - eventsToDelete.push([selectedCalendarCell[0].cname]); - calendarsOfEventsToDelete.push(selectedCalendarCell[0].calendar); - _batchDeleteEvents(); + else if (confirm(_("eventDeleteConfirmation"))) { + if (document.deleteEventAjaxRequest) { + document.deleteEventAjaxRequest.aborted = true; + document.deleteEventAjaxRequest.abort(); } + var canDelete = true; + var sortedNodes = []; + var calendars = []; + for (var i = 0; i < selectedCalendarCell.length; i++) { + canDelete = canDelete && (selectedCalendarCell[i].erasable || IsSuperUser); + if (canDelete) { + var calendar = selectedCalendarCell[i].calendar; + if (!sortedNodes[calendar]) { + sortedNodes[calendar] = []; + calendars.push(calendar); + } + sortedNodes[calendar].push(selectedCalendarCell[i].cname); + } + } + + for (var i = 0; i < calendars.length; i++) { + calendarsOfEventsToDelete.push(calendars[i]); + eventsToDelete.push(sortedNodes[calendars[i]]); + } + _batchDeleteEvents(); } } else @@ -668,13 +679,6 @@ function performDeleteEventCallback(http) { } } -function onSelectAll() { - var list = $("eventsList"); - list.selectRowsMatchingClass("eventRow"); - - return false; -} - /* in dateselector */ function onDaySelect(node) { var day = node.getAttribute('day'); @@ -1854,30 +1858,89 @@ function _eventBlocksMatching(calendar, cname, recurrenceTime) { function selectCalendarEvent(calendar, cname, recurrenceTime) { // Select event in calendar view - if (selectedCalendarCell) - for (var i = 0; i < selectedCalendarCell.length; i++) - selectedCalendarCell[i].deselect(); - var selection = _eventBlocksMatching(calendar, cname, recurrenceTime); if (selection) { for (var i = 0; i < selection.length; i++) selection[i].selectElement(); - selectedCalendarCell = selection; + if (selectedCalendarCell) + selectedCalendarCell = selectedCalendarCell.concat(selection); + else + selectedCalendarCell = selection; } return selection; } -function onCalendarSelectEvent(event) { - selectCalendarEvent(this.calendar, this.cname, this.recurrenceTime); +function onSelectAll(event) { + if (listOfSelection) + listOfSelection.selectAll(); + else { + // Select events cells + var selectedBlocks = []; + for (var c in calendarEvents) { + var events = calendarEvents[c]; + for (var e in events) { + var occurrences = events[e]; + for (var i = 0; i < occurrences.length; i++) + selectedBlocks = selectedBlocks.concat(occurrences[i].blocks); + } + } + for (var i = 0; i < selectedBlocks.length; i++) + selectedBlocks[i].selectElement(); + + selectedCalendarCell = selectedBlocks; + } - // Select event in events list - var list = $("eventsList"); - $(list.tBodies[0]).deselectAll(); + return false; +} + +function onCalendarSelectEvent(event) { + var list = $("eventsList").down("TBODY"); + var alreadySelected = false; + + // Look for event in events list + // TODO: event will likely not be found if an Ajax query is refreshing + // the events list. var rowID = this.calendar + "-" + this.cname; if (this.recurrenceTime) rowID += "-" + this.recurrenceTime; var row = $(rowID); + + // Check if event is already selected + if (selectedCalendarCell) + for (var i = 0; i < selectedCalendarCell.length; i++) + if (selectedCalendarCell[i] == this) { + alreadySelected = true; + break; + } + + if ((isMac() && event.metaKey == 1) || (!isMac() && event.ctrlKey == 1)) { + // If meta or ctrl key is pressed, inverse the selection + if (alreadySelected) { + this.deselect(); + selectedCalendarCell.splice(i, 1); + if (row) + row.deselect(); + + return true; + } + } + else if (event.shiftKey == 0) { + // Unselect entries in events list and calendar view + list.deselectAll(); + if (selectedCalendarCell) { + for (var i = 0; i < selectedCalendarCell.length; i++) + if (selectedCalendarCell[i] != this) + selectedCalendarCell[i].deselect(); + } + selectedCalendarCell = [this]; + } + + if (!alreadySelected) { + // Select event in calendar view + selectCalendarEvent(this.calendar, this.cname, this.recurrenceTime); + } + // Select event in events list if (row) { var div = row.parentNode.parentNode.parentNode; div.scrollTop = row.offsetTop - (div.offsetHeight / 2); @@ -2649,6 +2712,10 @@ function onDocumentKeydown(event) { deleteEvent(); event.stop(); } + else if (event.ctrlKey == 1 && event.keyCode == 65) { // Ctrl-A + onSelectAll(event); + Event.stop(event); + } } } @@ -2675,10 +2742,7 @@ function initCalendars() { $("uploadCancel").observe("click", hideCalendarImport); $("uploadOK").observe("click", hideImportResults); - if (Prototype.Browser.Gecko) - Event.observe(document, "keypress", onDocumentKeydown); // for FF2 - else - Event.observe(document, "keydown", onDocumentKeydown); + Event.observe(document, "keydown", onDocumentKeydown); } onWindowResize.defer(); diff --git a/UI/WebServerResources/scriptaculous/dragdrop.js b/UI/WebServerResources/scriptaculous/dragdrop.js index d71896d05..9aaa31163 100644 --- a/UI/WebServerResources/scriptaculous/dragdrop.js +++ b/UI/WebServerResources/scriptaculous/dragdrop.js @@ -326,7 +326,6 @@ var Draggable = Class.create({ this.offset = [0,1].map( function(i) { return (pointer[i] - pos[i]) }); Draggables.activate(this); - Event.stop(event); } }, From 046a46b86a4c35a29ceb4010b15884ce9a844489 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Mon, 2 Aug 2010 20:29:38 +0000 Subject: [PATCH 03/66] Monotone-Parent: 8330dfa1ad05eb096cee895845442bf564cf19bd Monotone-Revision: 76cddf6cb9e25f13d7e93aef3285f53fe726efcc Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-08-02T20:29:38 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 6 ++++++ SoObjects/SOGo/NSNumber+Utilities.m | 9 ++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 3e60e74a5..dc4887a6a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2010-08-02 Wolfgang Sourdeau + + * SoObjects/SOGo/NSNumber+Utilities.m (-jsonRepresentation): + returns "true" or "false" when the initial return value is "YES" + or "NO". + 2010-07-30 Francis Lachapelle * UI/WebServerResources/SchedulerUI.js (deleteEvent): improved diff --git a/SoObjects/SOGo/NSNumber+Utilities.m b/SoObjects/SOGo/NSNumber+Utilities.m index c71929e0f..1fac51667 100644 --- a/SoObjects/SOGo/NSNumber+Utilities.m +++ b/SoObjects/SOGo/NSNumber+Utilities.m @@ -28,8 +28,15 @@ - (NSString *) jsonRepresentation { + NSString *jsonRepresentation; - return [NSString stringWithFormat: @"%@", self]; + jsonRepresentation = [NSString stringWithFormat: @"%@", self]; + if ([jsonRepresentation isEqualToString: @"YES"]) + jsonRepresentation = @"true"; + else if ([jsonRepresentation isEqualToString: @"NO"]) + jsonRepresentation = @"false"; + + return jsonRepresentation; } @end From 20a6696850a6e902ed3ce9351d1286b87da383a6 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Mon, 2 Aug 2010 20:42:40 +0000 Subject: [PATCH 04/66] Monotone-Parent: 76cddf6cb9e25f13d7e93aef3285f53fe726efcc Monotone-Revision: 4015c6e667a4a4ca4d9a5b2a8cb346ea6d784fe4 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-08-02T20:42:40 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 5 +- UI/Templates/PreferencesUI/UIxPreferences.wox | 2 +- UI/WebServerResources/RowEditionController.js | 129 ++++++++++++++++++ UI/WebServerResources/UIxPreferences.js | 60 +------- UI/WebServerResources/generic.css | 4 + 5 files changed, 142 insertions(+), 58 deletions(-) create mode 100644 UI/WebServerResources/RowEditionController.js diff --git a/ChangeLog b/ChangeLog index dc4887a6a..836658746 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2010-08-02 Wolfgang Sourdeau + * UI/WebServerResources/RowEditionController.js: new class module + that implements the handling of editable list items. + * SoObjects/SOGo/NSNumber+Utilities.m (-jsonRepresentation): returns "true" or "false" when the initial return value is "YES" or "NO". @@ -17,7 +20,7 @@ * UI/WebServerResources/scriptaculous/dragdrop.js (initDrag): avoid stopping the event propagation so the blur event is properly - fired on the search input field when it isfocused. + fired on the search input field when it isfocused. 2010-07-28 Francis Lachapelle diff --git a/UI/Templates/PreferencesUI/UIxPreferences.wox b/UI/Templates/PreferencesUI/UIxPreferences.wox index bbcd0ee03..d337a5900 100644 --- a/UI/Templates/PreferencesUI/UIxPreferences.wox +++ b/UI/Templates/PreferencesUI/UIxPreferences.wox @@ -10,7 +10,7 @@ className="UIxPageFrame" title="title" const:popup="YES" - const:jsFiles="PasswordPolicy.js,ckeditor/ckeditor.js" + const:jsFiles="RowEditionController.js,PasswordPolicy.js,ckeditor/ckeditor.js" >
diff --git a/UI/WebServerResources/UIxFilterEditor.js b/UI/WebServerResources/UIxFilterEditor.js index 0fe3bc0d7..b53e617ac 100644 --- a/UI/WebServerResources/UIxFilterEditor.js +++ b/UI/WebServerResources/UIxFilterEditor.js @@ -38,8 +38,7 @@ function onLoadHandler() { } function loadMailboxes() { - var url = (ApplicationBaseURL + "Mail/" - + encodeURI(firstMailAccount) + "/mailboxes"); + var url = ApplicationBaseURL + "Mail/0/mailboxes"; triggerAjaxRequest(url, onLoadMailboxesCallback); } From 308de80e6aedf52ce2e4b6dfe84a7f6a7df8ec75 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Mon, 9 Aug 2010 14:17:22 +0000 Subject: [PATCH 41/66] Monotone-Parent: 0bad93574cbb34f80f8e581a8347fec75a28f612 Monotone-Revision: 31bbff0f57dce6334191e5cabb61c655e5022a37 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-08-09T14:17:22 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 10 +++ UI/Common/UIxPageFrame.h | 2 + UI/Common/UIxPageFrame.m | 68 +++++++++++++++++---- UI/Templates/MailerUI/UIxMailEditor.wox | 1 + UI/Templates/MailerUI/UIxMailMainFrame.wox | 2 + UI/Templates/SchedulerUI/UIxCalMainView.wox | 2 + UI/Templates/UIxPageFrame.wox | 18 ++++-- 7 files changed, 86 insertions(+), 17 deletions(-) diff --git a/ChangeLog b/ChangeLog index b3a3b9cce..ed7a86d8d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,15 @@ 2010-08-09 Wolfgang Sourdeau + * UI/Common/UIxPageFrame.m (-setUserDefaultsKeys:) + (-hasUserDefaultsKeys, -setUserSettingsKeys:) + (-hasUserSettingsKeys): new accessor for determining explicitly + which user defaults/settings keys are returned. The new + corresponding ivars are "udKeys" and "usKeys" respectively. + (-userDefaults, -userSettings): rewrote methods to create a + dictionary containing only the requested keys (see above). Since + the source are now explicitly queried, the values can now be + inherited from the domain and system defaults. + * UI/WebServerResources/UIxFilterEditor.js (loadMailboxes): the first account is now always identitied with "0", therefore we no longer need the "firstMailAccount" variable. diff --git a/UI/Common/UIxPageFrame.h b/UI/Common/UIxPageFrame.h index 080f949bb..331db446f 100644 --- a/UI/Common/UIxPageFrame.h +++ b/UI/Common/UIxPageFrame.h @@ -40,6 +40,8 @@ NSString *toolbar; id item; BOOL isPopup; + NSArray *udKeys; + NSArray *usKeys; NSMutableArray *additionalCSSFiles; NSMutableArray *additionalJSFiles; } diff --git a/UI/Common/UIxPageFrame.m b/UI/Common/UIxPageFrame.m index cc81a8e3f..e7dddc636 100644 --- a/UI/Common/UIxPageFrame.m +++ b/UI/Common/UIxPageFrame.m @@ -25,6 +25,7 @@ #import +#import #import #import #import @@ -44,6 +45,8 @@ item = nil; title = nil; toolbar = nil; + udKeys = nil; + usKeys = nil; additionalJSFiles = nil; additionalCSSFiles = nil; } @@ -56,6 +59,8 @@ [item release]; [title release]; [toolbar release]; + [udKeys release]; + [usKeys release]; [additionalJSFiles release]; [additionalCSSFiles release]; [super dealloc]; @@ -453,30 +458,67 @@ return [ud language]; } -- (NSString *) userSettings +/* UserDefaults, UserSettings */ +- (NSString *) _dictionaryWithKeys: (NSArray *) keys + fromSource: (SOGoDefaultsSource *) source { - SOGoUserSettings *us; - NSString *jsonResult; + NSString *key; + int count, max; + NSMutableDictionary *dict; - us = [[context activeUser] userSettings]; - jsonResult = [[us source] jsonRepresentation]; - if (!jsonResult) - jsonResult = @"{}"; + max = [keys count]; - return jsonResult; + dict = [NSMutableDictionary dictionaryWithCapacity: max]; + for (count = 0; count < max; count++) + { + key = [keys objectAtIndex: count]; + [dict setObject: [source objectForKey: key] + forKey: key]; + } + + return [dict jsonRepresentation]; +} + +- (void) setUserDefaultsKeys: (NSString *) newKeys +{ + [udKeys release]; + udKeys = [[newKeys componentsSeparatedByString: @","] trimmedComponents]; + [udKeys retain]; +} + +- (BOOL) hasUserDefaultsKeys +{ + return ([udKeys count] > 0); } - (NSString *) userDefaults { SOGoUserDefaults *ud; - NSString *jsonResult; ud = [[context activeUser] userDefaults]; - jsonResult = [[ud source] jsonRepresentation]; - if (!jsonResult) - jsonResult = @"{}"; - return jsonResult; + return [self _dictionaryWithKeys: udKeys fromSource: ud]; +} + +- (void) setUserSettingsKeys: (NSString *) newKeys +{ + [usKeys release]; + usKeys = [[newKeys componentsSeparatedByString: @","] trimmedComponents]; + [usKeys retain]; +} + +- (BOOL) hasUserSettingsKeys +{ + return ([usKeys count] > 0); +} + +- (NSString *) userSettings +{ + SOGoUserSettings *us; + + us = [[context activeUser] userSettings]; + + return [self _dictionaryWithKeys: usKeys fromSource: us]; } /* browser/os identification */ diff --git a/UI/Templates/MailerUI/UIxMailEditor.wox b/UI/Templates/MailerUI/UIxMailEditor.wox index a74617252..41e07d8e9 100644 --- a/UI/Templates/MailerUI/UIxMailEditor.wox +++ b/UI/Templates/MailerUI/UIxMailEditor.wox @@ -10,6 +10,7 @@ className="UIxPageFrame" title="panelTitle" const:popup="YES" + const:userDefaultsKeys="SOGoMailComposeMessageType,SOGoMailReplyPlacement,SOGoMailSignature" const:jsFiles="UIxMailToSelection.js,ckeditor/ckeditor.js,SOGoAutoCompletion.js"> + +
+ @@ -127,8 +138,7 @@ >var UserFolderURL = ''; var UserLogin = ''; var UserLanguage = ''; - var UserSettings = ; - var UserDefaults = ; + From d2b67cb3ba5fcbed7f86570d7214e8767d4e7d31 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Mon, 9 Aug 2010 14:30:16 +0000 Subject: [PATCH 42/66] Monotone-Parent: 31bbff0f57dce6334191e5cabb61c655e5022a37 Monotone-Revision: 79070131b527d8b1a88014a212b6f2fafc9a1490 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-08-09T14:30:16 Monotone-Branch: ca.inverse.sogo --- UI/Templates/UIxPageFrame.wox | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/UI/Templates/UIxPageFrame.wox b/UI/Templates/UIxPageFrame.wox index 8134a95a4..40f01cb5e 100644 --- a/UI/Templates/UIxPageFrame.wox +++ b/UI/Templates/UIxPageFrame.wox @@ -42,22 +42,22 @@ +
- - -
- + From c7f26f13a101e16ee047932184a3e0b988e7df46 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Mon, 9 Aug 2010 16:46:45 +0000 Subject: [PATCH 43/66] Monotone-Parent: 79070131b527d8b1a88014a212b6f2fafc9a1490 Monotone-Revision: 6da486b20dffb8047599fe095aeffd818fb154f7 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-08-09T16:46:45 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 3 +++ UI/WebServerResources/generic.js | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index ed7a86d8d..e0529f0e2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2010-08-09 Wolfgang Sourdeau + * UI/WebServerResources/generic.js (log): fixed handling of + messages ending with "\n". + * UI/Common/UIxPageFrame.m (-setUserDefaultsKeys:) (-hasUserDefaultsKeys, -setUserSettingsKeys:) (-hasUserSettingsKeys): new accessor for determining explicitly diff --git a/UI/WebServerResources/generic.js b/UI/WebServerResources/generic.js index 43a20e612..61526c35a 100644 --- a/UI/WebServerResources/generic.js +++ b/UI/WebServerResources/generic.js @@ -769,7 +769,7 @@ function log(message) { return; } if (message[message.length-1] == "\n") { - message = message.substr(0, message.length-2); + message = message.substr(0, message.length-1); } var lines = message.split("\n"); for (var i = 0; i < lines.length; i++) { From fbc36faf174d630c576a5940ae3728b02f15d61f Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Mon, 9 Aug 2010 16:47:51 +0000 Subject: [PATCH 44/66] Monotone-Parent: 6da486b20dffb8047599fe095aeffd818fb154f7 Monotone-Revision: cbf125640f6348895aa302fdfc58f2a13c96cc80 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-08-09T16:47:51 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 3 +++ UI/WebServerResources/MailerUI.js | 7 ++----- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index e0529f0e2..ad42d4bd8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2010-08-09 Wolfgang Sourdeau + * UI/WebServerResources/MailerUI.js (openMailbox): removed the + "updateStatus" parameter, which is never used. + * UI/WebServerResources/generic.js (log): fixed handling of messages ending with "\n". diff --git a/UI/WebServerResources/MailerUI.js b/UI/WebServerResources/MailerUI.js index e92ead5ac..643f1089b 100644 --- a/UI/WebServerResources/MailerUI.js +++ b/UI/WebServerResources/MailerUI.js @@ -622,7 +622,7 @@ function composeNewMessage() { } } -function openMailbox(mailbox, reload, updateStatus) { +function openMailbox(mailbox, reload) { if (mailbox != Mailer.currentMailbox || reload) { var url = ApplicationBaseURL + encodeURI(mailbox); var urlParams = new Hash(); @@ -691,9 +691,6 @@ function openMailbox(mailbox, reload, updateStatus) { loadMessage(currentMessage); } } - - if (updateStatus != false) - getStatusFolders(); } } @@ -1672,7 +1669,7 @@ function refreshContacts() { function openInbox(node) { var done = false; - openMailbox(node.parentNode.getAttribute("dataname"), false, false); + openMailbox(node.parentNode.getAttribute("dataname"), false); var tree = $("mailboxTree"); tree.selectedEntry = node; node.selectElement(); From 71c2f1f4a842f7fe20dc9512228bb61b44393fd6 Mon Sep 17 00:00:00 2001 From: Francis Lachapelle Date: Tue, 10 Aug 2010 13:47:11 +0000 Subject: [PATCH 45/66] See ChangeLog Monotone-Parent: aa5015ff0079b6856954284a0b566fd85c428a93 Monotone-Revision: d794ef4e02f1e288bc12d1379cbaba6e67be4e25 Monotone-Author: flachapelle@inverse.ca Monotone-Date: 2010-08-10T13:47:11 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 5 +++ UI/WebServerResources/ContactsUI.js | 40 ++++++---------------- UI/WebServerResources/MailerUI.js | 22 ++++++------ UI/WebServerResources/SchedulerUI.js | 20 +++++------ UI/WebServerResources/generic.js | 51 +++++++++++++++++++++++++--- 5 files changed, 83 insertions(+), 55 deletions(-) diff --git a/ChangeLog b/ChangeLog index 48810dcc9..ecaf580eb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2010-08-10 Francis Lachapelle + + * UI/WebServerResources/generic.js (showAlertDialog): new function + to replace window.alert(). + 2010-08-05 Francis Lachapelle * UI/WebServerResources/SOGoResizableTable.js diff --git a/UI/WebServerResources/ContactsUI.js b/UI/WebServerResources/ContactsUI.js index 0f07a57b0..451a0de4b 100644 --- a/UI/WebServerResources/ContactsUI.js +++ b/UI/WebServerResources/ContactsUI.js @@ -275,9 +275,9 @@ 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(_("You don't have the required privileges to perform the operation.")); + showAlertDialog(_("You don't have the required privileges to perform the operation.")); else if (error) - window.alert(labels[error]); + showAlertDialog(labels[error]); refreshCurrentFolder(); } } @@ -397,7 +397,7 @@ function onToolbarEditSelectedContacts(event) { var rows = contactsList.getSelectedRowsId(); if (rows.length == 0) { - window.alert(_("Please select a contact.")); + showAlertDialog(_("Please select a contact.")); return false; } @@ -456,9 +456,8 @@ function onToolbarDeleteSelectedContacts(event) { } return false; } - else { - window.alert(_("Please select a contact.")); - } + else + showAlertDialog(_("Please select a contact.")); return false; } @@ -507,7 +506,7 @@ function onContactDeleteEventCallback(http) { row.show(); var displayName = row.readAttribute("contactname"); Contact.deleteContactsRequestCount--; - window.alert(labels["You cannot delete the card of \"%{0}\"."].formatted(displayName)); + showAlertDialog(_("You cannot delete the card of \"%{0}\".").formatted(displayName)); } } } @@ -786,7 +785,7 @@ function onAddressBookRemove(event) { var owner = node.getAttribute("owner"); if (owner == "nobody") { var label = _("You cannot remove nor unsubscribe from a public addressbook."); - window.alert(label); + showAlertDialog(label); } else if (owner == UserLogin) { var folderIdElements = node.getAttribute("id").split(":"); @@ -805,26 +804,7 @@ function onAddressBookRemove(event) { function deletePersonalAddressBook(folderId) { if (folderId == "personal") { - var dialogId = "deletePersonalAddressBookDialog"; - var dialog = Contact.dialogs[dialogId]; - if (dialog) { - $("bgDialogDiv").show(); - } - else { - var label = _("You cannot remove nor unsubscribe from your personal addressbook."); - var fields = createElement("p"); - fields.appendChild(createButton(dialogId + "ContinueBtn", - "Continue", - onBodyClickDialogHandler)); - dialog = createDialog(dialogId, - _("Warning"), - label, - fields, - "none"); - document.body.appendChild(dialog); - Contact.dialogs[dialogId] = dialog; - } - dialog.show(); + showAlertDialog(_("You cannot remove nor unsubscribe from your personal addressbook.")); } else { var dialogId = "deleteAddressBookDialog"; @@ -1048,7 +1028,7 @@ function onAddressBookModify(event) { {node: selected, name: newName}); } } else - window.alert(_("Unable to rename that folder!")); + showAlertDialog(_("Unable to rename that folder!")); } function folderRenameCallback(http) { @@ -1068,7 +1048,7 @@ function onMenuSharing(event) { var selected = folders.getSelectedNodes()[0]; var owner = selected.getAttribute("owner"); if (owner == "nobody") - window.alert(clabels["The user rights cannot be" + showAlertDialog(clabels["The user rights cannot be" + " edited for this object!"]); else { var title = this.innerHTML; diff --git a/UI/WebServerResources/MailerUI.js b/UI/WebServerResources/MailerUI.js index db6bfe458..579d09c88 100644 --- a/UI/WebServerResources/MailerUI.js +++ b/UI/WebServerResources/MailerUI.js @@ -94,7 +94,7 @@ function onMenuSharing(event) { var type = document.menuTarget.getAttribute("datatype"); if (type == "additional") - window.alert(clabels["The user rights cannot be" + showAlertDialog(clabels["The user rights cannot be" + " edited for this object!"]); else { var urlstr = URLForFolderID(folderID) + "/acls"; @@ -202,7 +202,7 @@ function openMessageWindowsForSelection(action, firstOnly) { break; } } else { - window.alert(_("Please select a message.")); + showAlertDialog(_("Please select a message.")); } } @@ -374,7 +374,7 @@ function deleteSelectedMessages(sender) { { "Content-type": "application/x-www-form-urlencoded" }); } else - window.alert(_("Please select a message.")); + showAlertDialog(_("Please select a message.")); return false; } @@ -451,10 +451,10 @@ function onPrintCurrentMessage(event) { var messageList = $("messageListBody").down("TBODY"); var rowIds = messageList.getSelectedNodes(); if (rowIds.length == 0) { - window.alert(_("Please select a message to print.")); + showAlertDialog(_("Please select a message to print.")); } else if (rowIds.length > 1) { - window.alert(_("Please select only one message to print.")); + showAlertDialog(_("Please select only one message to print.")); } else window.print(); @@ -1250,10 +1250,10 @@ function ICalendarButtonCallback(http) { } } if (i == Mailer.popups.length) - window.alert(_(msg)); + showAlertDialog(_(msg)); } else - window.alert("received code: " + http.status + "\nerror: " + http.responseText); + showAlertDialog("received code: " + http.status + "\nerror: " + http.responseText); } } @@ -2126,7 +2126,7 @@ function onMenuEmptyTrash(event) { function _onMenuChangeToXXXFolder(event, folder) { var type = document.menuTarget.getAttribute("datatype"); if (type == "additional") - window.alert(_("You need to choose a non-virtual folder!")); + showAlertDialog(_("You need to choose a non-virtual folder!")); else { var folderID = document.menuTarget.getAttribute("dataname"); var urlstr = URLForFolderID(folderID) + "/setAs" + folder + "Folder"; @@ -2228,7 +2228,7 @@ function folderOperationCallback(http) { && isHttpStatus204(http.status)) initMailboxTree(); else - window.alert(http.callbackData); + showAlertDialog(http.callbackData); } function folderRefreshCallback(http) { @@ -2258,7 +2258,7 @@ function folderRefreshCallback(http) { row.show(); } } - window.alert(_("Operation failed")); + showAlertDialog(_("Operation failed")); } } @@ -2339,7 +2339,7 @@ function saveAs(event) { window.location.href = (url+"?id="+uids+"&uid="+uids+"&mailbox="+Mailer.currentMailbox+"&path="+paths); } else - window.alert(_("Please select a message.")); + showAlertDialog(_("Please select a message.")); return false; } diff --git a/UI/WebServerResources/SchedulerUI.js b/UI/WebServerResources/SchedulerUI.js index b20e47a4a..e3b8a6bf8 100644 --- a/UI/WebServerResources/SchedulerUI.js +++ b/UI/WebServerResources/SchedulerUI.js @@ -161,7 +161,7 @@ function editEvent() { var nodes = listOfSelection.getSelectedRows(); if (nodes.length == 0) { - window.alert(_("Please select an event or a task.")); + showAlertDialog(_("Please select an event or a task.")); return false; } @@ -175,7 +175,7 @@ function editEvent() { _editEventId(selectedCalendarCell[0].cname, selectedCalendarCell[0].calendar); } else { - window.alert(_("Please select an event or a task.")); + showAlertDialog(_("Please select an event or a task.")); } return false; /* stop following the link */ @@ -199,7 +199,7 @@ function deleteEvent() { if (nodes.length > 0) { var label = ""; if (!nodes[0].erasable && !IsSuperUser) { - window.alert(_("You don't have the required privileges to perform the operation.")); + showAlertDialog(_("You don't have the required privileges to perform the operation.")); return false; } if (listOfSelection == $("tasksList")) @@ -235,7 +235,7 @@ function deleteEvent() { } } } else { - window.alert(_("Please select an event or a task.")); + showAlertDialog(_("Please select an event or a task.")); } } else if (selectedCalendarCell) { @@ -271,7 +271,7 @@ function deleteEvent() { } } else - window.alert(_("Please select an event or a task.")); + showAlertDialog(_("Please select an event or a task.")); return false; } @@ -329,10 +329,10 @@ function modifyEventCallback(http) { } else { msg = "delegate is a participant"; } - window.alert(_(msg)); + showAlertDialog(_(msg)); } else { - window.alert(_("eventPartStatModificationError")); + showAlertDialog(_("eventPartStatModificationError")); } document.modifyEventAjaxRequest = null; } @@ -486,7 +486,7 @@ function deleteEventCallback(http) { document.deleteEventAjaxRequest = null; } else if (parseInt(http.status) == 403) - window.alert(_("You don't have the required privileges to perform the operation.")); + showAlertDialog(_("You don't have the required privileges to perform the operation.")); else log ("deleteEventCallback Ajax error (" + http.status + ")"); } @@ -2465,7 +2465,7 @@ function appendCalendar(folderName, folderPath) { //log ("append name: " + folderName + "; path: " + folderPath + "; owner: " + owner); if ($(folderPath)) - window.alert(_("You have already subscribed to that folder!")); + showAlertDialog(_("You have already subscribed to that folder!")); else { var calendarList = $("calendarList"); var items = calendarList.select("li"); @@ -2564,7 +2564,7 @@ function onCalendarRemove(event) { if (folderId == "/personal") { var label = labels["You cannot remove nor unsubscribe from your" + " personal calendar."]; - window.alert(label); + showAlertDialog(label); } else { var folderIdElements = folderId.split(":"); diff --git a/UI/WebServerResources/generic.js b/UI/WebServerResources/generic.js index e3c939bb9..636655445 100644 --- a/UI/WebServerResources/generic.js +++ b/UI/WebServerResources/generic.js @@ -31,6 +31,9 @@ var queryParameters; var menus = new Array(); var search = {}; var sorting = {}; +var dialogs = {}; +var dialogActive = false; +var dialogsStack = new Array(); var lastClickedRow = -1; @@ -1032,7 +1035,7 @@ function folderSubscriptionCallback(http) { http.callbackData["method"](http.callbackData["data"]); } else - window.alert(_("Unable to subscribe to that folder!")); + showAlertDialog(_("Unable to subscribe to that folder!")); document.subscriptionAjaxRequest = null; } else @@ -1068,7 +1071,7 @@ function folderUnsubscriptionCallback(http) { http.callbackData["method"](http.callbackData["data"]); } else - window.alert(_("Unable to unsubscribe from that folder!")); + showAlertDialog(_("Unable to unsubscribe from that folder!")); } } @@ -1088,7 +1091,7 @@ function unsubscribeFromFolder(folderUrl, owner, refreshCallback, triggerAjaxRequest(url, folderUnsubscriptionCallback, rfCbData); } else - window.alert(_("You cannot unsubscribe from a folder that you own!")); + showAlertDialog(_("You cannot unsubscribe from a folder that you own!")); } } @@ -1723,13 +1726,53 @@ function createButton(id, caption, action) { return newButton; } +function showAlertDialog(label) { + var div = $("bgDialogDiv"); + if (div && div.visible()) { + dialogsStack.push(label); + return; + } + else { + _showAlertDialog(label); + } +} + +function _showAlertDialog(label) { + var dialog = null; + if (dialogs[label]) + dialog = dialogs[label]; + if (dialog) { + $("bgDialogDiv").show(); + } + else { + var fields = createElement("p"); + fields.appendChild(createButton(null, + _("OK"), + onBodyClickDialogHandler)); + dialog = createDialog(null, + _("Warning"), + label, + fields, + "none"); + document.body.appendChild(dialog); + dialogs[label] = dialog; + } + dialog.show(); +} + function onBodyClickDialogHandler() { $$("DIV.dialog").each(function(div) { if (div.visible()) div.hide(); }); - $("bgDialogDiv").hide(); + if (dialogsStack.length > 0) { + var label = dialogsStack.first(); + dialogsStack.splice(0, 1); + _showAlertDialog.delay(0.1, label); + } + else + $("bgDialogDiv").hide(); } function readCookie(name) { From 43ef41eeb70b65cd15b22230c6eeb542ac40e664 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Wed, 11 Aug 2010 13:31:59 +0000 Subject: [PATCH 46/66] Monotone-Parent: cbf125640f6348895aa302fdfc58f2a13c96cc80 Monotone-Revision: 9f129d083b11ce7ac964a083c351d2a15f16fbdb Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-08-11T13:31:59 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 6 ++++++ UI/Common/UIxPageFrame.m | 11 +++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index ad42d4bd8..8d4fbf086 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2010-08-11 Wolfgang Sourdeau + + * UI/Common/UIxPageFrame.m (_dictionaryWithKeys:fromSource:): + set an NSNull as value for keys which return no results, in order + to avoid an NSInvalidArgumentException. + 2010-08-09 Wolfgang Sourdeau * UI/WebServerResources/MailerUI.js (openMailbox): removed the diff --git a/UI/Common/UIxPageFrame.m b/UI/Common/UIxPageFrame.m index e7dddc636..9e33be5c9 100644 --- a/UI/Common/UIxPageFrame.m +++ b/UI/Common/UIxPageFrame.m @@ -21,6 +21,7 @@ */ #import +#import #import #import @@ -465,6 +466,10 @@ NSString *key; int count, max; NSMutableDictionary *dict; + NSNull *nsNull; + id value; + + nsNull = [NSNull null]; max = [keys count]; @@ -472,8 +477,10 @@ for (count = 0; count < max; count++) { key = [keys objectAtIndex: count]; - [dict setObject: [source objectForKey: key] - forKey: key]; + value = [source objectForKey: key]; + if (!value) + value = nsNull; + [dict setObject: value forKey: key]; } return [dict jsonRepresentation]; From 3371a4712d6e7557457aca509356624fecc356e8 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Wed, 11 Aug 2010 19:20:17 +0000 Subject: [PATCH 47/66] Monotone-Parent: ef0808300fb0a2f855c131c8d4958cef75bb1a1c Monotone-Revision: e55c7e9b0d4eff602ecb06071b3c60c6e2c19bf0 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-08-11T19:20:17 Monotone-Branch: ca.inverse.sogo --- SOPE/NGCards/ChangeLog | 5 +++++ SOPE/NGCards/NGVCardPhoto.m | 8 +++++++- SOPE/NGCards/versitCardsSaxDriver/ChangeLog | 8 +++++++- SOPE/NGCards/versitCardsSaxDriver/VSSaxDriver.m | 9 ++++++--- 4 files changed, 25 insertions(+), 5 deletions(-) diff --git a/SOPE/NGCards/ChangeLog b/SOPE/NGCards/ChangeLog index e03b9a050..91fb55d8a 100644 --- a/SOPE/NGCards/ChangeLog +++ b/SOPE/NGCards/ChangeLog @@ -1,3 +1,8 @@ +2010-08-11 Wolfgang Sourdeau + + * NGVCardPhoto.m (-type): returns @"JPEG" if the type is + unspecified. + 2010-07-21 Wolfgang Sourdeau * iCalXMLRenderer.m (_appendPaddingValues:withTag:intoString:): diff --git a/SOPE/NGCards/NGVCardPhoto.m b/SOPE/NGCards/NGVCardPhoto.m index ce00238ec..17cf02040 100644 --- a/SOPE/NGCards/NGVCardPhoto.m +++ b/SOPE/NGCards/NGVCardPhoto.m @@ -37,7 +37,13 @@ - (NSString *) type { - return [[self value: 0 ofAttribute: @"type"] uppercaseString]; + NSString *type; + + type = [[self value: 0 ofAttribute: @"type"] uppercaseString]; + if (!type) + type = @"JPEG"; + + return type; } - (NSData *) decodedContent diff --git a/SOPE/NGCards/versitCardsSaxDriver/ChangeLog b/SOPE/NGCards/versitCardsSaxDriver/ChangeLog index 5afb1fde4..fe4545dcd 100644 --- a/SOPE/NGCards/versitCardsSaxDriver/ChangeLog +++ b/SOPE/NGCards/versitCardsSaxDriver/ChangeLog @@ -1,3 +1,9 @@ +2010-08-11 Wolfgang Sourdeau + + * VSSaxDriver.m (_parseAttr:forTag:intoAttr:intoValue:): when no + attribute tag is not specified and the value is "BASE64" or "B", the + attribute tag is set to "ENCODING". + 2010-05-05 Wolfgang Sourdeau * VSSaxDriver.m (_endComponent:value:): avoid a crash occurring @@ -38,7 +44,7 @@ * VSSaxDriver.m: improved error reporting in case no data could be retrieved from a URL (v4.5.22) - + 2005-12-05 Helge Hess * v4.5.21 diff --git a/SOPE/NGCards/versitCardsSaxDriver/VSSaxDriver.m b/SOPE/NGCards/versitCardsSaxDriver/VSSaxDriver.m index 4b6763941..3686c9c54 100644 --- a/SOPE/NGCards/versitCardsSaxDriver/VSSaxDriver.m +++ b/SOPE/NGCards/versitCardsSaxDriver/VSSaxDriver.m @@ -325,7 +325,7 @@ static NSCharacterSet *whitespaceCharSet = nil; intoValue: (NSString **) value_ { NSRange r; - NSString *attrName, *attrValue; + NSString *attrName, *attrValue, *upperAttr; r = [_attr rangeOfCharacterFromSet: equalSignCharSet]; if (r.length > 0) @@ -360,13 +360,16 @@ static NSCharacterSet *whitespaceCharSet = nil; } else { - if ([[_attr uppercaseString] isEqualToString: @"QUOTED-PRINTABLE"]) + upperAttr = [_attr uppercaseString]; + if ([upperAttr isEqualToString: @"QUOTED-PRINTABLE"] + || [upperAttr isEqualToString: @"BASE64"] + || [upperAttr isEqualToString: @"B"]) attrName = @"ENCODING"; else attrName = @"TYPE"; attrValue = _attr; } - + #if 0 // ZNeK: what's this for? r = [attrValue rangeOfCharacterFromSet: commaCharSet]; From 39928c163d04d413e8f6fa8ff41813ddbb888cde Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Wed, 11 Aug 2010 19:23:51 +0000 Subject: [PATCH 48/66] Monotone-Parent: e55c7e9b0d4eff602ecb06071b3c60c6e2c19bf0 Monotone-Revision: 509b02f4f9f2961c7946b8a808d6fe29000b8cc9 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-08-11T19:23:51 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 4 ++++ SoObjects/SOGo/WORequest+SOGo.h | 1 + SoObjects/SOGo/WORequest+SOGo.m | 10 ++++++++++ 3 files changed, 15 insertions(+) diff --git a/ChangeLog b/ChangeLog index b596344a6..ab7cd08a8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2010-08-11 Wolfgang Sourdeau + * SoObjects/SOGo/WORequest+SOGo.m (-isAddressBookApp): new + (hackish) test method to determine whether the client is Apple's + AddressBook.app. + * UI/Common/UIxPageFrame.m (_dictionaryWithKeys:fromSource:): set an NSNull as value for keys which return no results, in order to avoid an NSInvalidArgumentException. diff --git a/SoObjects/SOGo/WORequest+SOGo.h b/SoObjects/SOGo/WORequest+SOGo.h index 415c3dbb4..f5b775e90 100644 --- a/SoObjects/SOGo/WORequest+SOGo.h +++ b/SoObjects/SOGo/WORequest+SOGo.h @@ -34,6 +34,7 @@ - (BOOL) isIPhone; - (BOOL) isICal; - (BOOL) isICal4; +- (BOOL) isAddressBookApp; @end diff --git a/SoObjects/SOGo/WORequest+SOGo.m b/SoObjects/SOGo/WORequest+SOGo.m index c1c0d042a..744a4802b 100644 --- a/SoObjects/SOGo/WORequest+SOGo.m +++ b/SoObjects/SOGo/WORequest+SOGo.m @@ -137,4 +137,14 @@ return [self isAppleDAVWithSubstring: @"iCal/4."]; } +- (BOOL) isAddressBookApp +{ + WEClientCapabilities *cc; + + cc = [self clientCapabilities]; + + return ([[cc userAgent] rangeOfString: @"CFNetwork"].location != NSNotFound + && [[cc userAgent] rangeOfString: @"Darwin"].location != NSNotFound); +} + @end From ee13adbf9b02b28f221261bbd253d58ffacea4e5 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Wed, 11 Aug 2010 19:53:02 +0000 Subject: [PATCH 49/66] Monotone-Parent: 509b02f4f9f2961c7946b8a808d6fe29000b8cc9 Monotone-Revision: 591189cd04bcdbe3a11183a6aca2bd58edc2ebea Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-08-11T19:53:02 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 6 ++++++ Main/SOGo+DAV.m | 26 ++++++++++++++++++++++++ SoObjects/Contacts/SOGoContactGCSEntry.m | 5 +++++ 3 files changed, 37 insertions(+) diff --git a/ChangeLog b/ChangeLog index ab7cd08a8..9b20d508d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,11 @@ 2010-08-11 Wolfgang Sourdeau + * Main/SOGo+DAV.m (-davCurrentUserPrincipal): new method + implementing the "{DAV:}current-user-principal" property. + + * SoObjects/Contacts/SOGoContactGCSEntry.m (-davAddressData): new + DAV property accessor returning the card content. + * SoObjects/SOGo/WORequest+SOGo.m (-isAddressBookApp): new (hackish) test method to determine whether the client is Apple's AddressBook.app. diff --git a/Main/SOGo+DAV.m b/Main/SOGo+DAV.m index 6369e6855..131f70dec 100644 --- a/Main/SOGo+DAV.m +++ b/Main/SOGo+DAV.m @@ -504,4 +504,30 @@ return r; } +- (SOGoWebDAVValue *) davCurrentUserPrincipal +{ + NSDictionary *userHREF; + NSString *usersUrl, *login; + SOGoUser *activeUser; + SOGoWebDAVValue *davCurrentUserPrincipal; + + activeUser = [[self context] activeUser]; + login = [activeUser login]; + if ([login isEqualToString: @"anonymous"]) + davCurrentUserPrincipal = nil; + else + { + usersUrl = [NSString stringWithFormat: @"%@%@/", + [self davURLAsString], login]; + userHREF = davElementWithContent (@"href", XMLNS_WEBDAV, usersUrl); + davCurrentUserPrincipal + = [davElementWithContent (@"current-user-principal", + XMLNS_WEBDAV, + userHREF) + asWebDAVValue]; + } + + return davCurrentUserPrincipal; +} + @end diff --git a/SoObjects/Contacts/SOGoContactGCSEntry.m b/SoObjects/Contacts/SOGoContactGCSEntry.m index 22ee70bc0..03251f6ed 100644 --- a/SoObjects/Contacts/SOGoContactGCSEntry.m +++ b/SoObjects/Contacts/SOGoContactGCSEntry.m @@ -115,6 +115,11 @@ return @"text/x-vcard"; } +- (NSString *) davAddressData +{ + return [self contentAsString]; +} + /* specialized actions */ - (void) save From 4e7465533572e944c17ab89221fc4c4603dda853 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Wed, 11 Aug 2010 20:56:14 +0000 Subject: [PATCH 50/66] Monotone-Parent: 591189cd04bcdbe3a11183a6aca2bd58edc2ebea Monotone-Revision: ccda1427d14d0786cfb28dbb253a43ab22a93a2e Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-08-11T20:56:14 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 5 +++++ UI/WebServerResources/SchedulerUI.js | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 9b20d508d..28ba383a0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2010-08-11 Wolfgang Sourdeau + * UI/WebServerResources/SchedulerUI.js: (initCalendars): avoid + setting "showCompletedTasks" when in a popup, since this needs + access to a UserDefaults dictionary which is not present nor event + required. + * Main/SOGo+DAV.m (-davCurrentUserPrincipal): new method implementing the "{DAV:}current-user-principal" property. diff --git a/UI/WebServerResources/SchedulerUI.js b/UI/WebServerResources/SchedulerUI.js index e3b8a6bf8..88acd0543 100644 --- a/UI/WebServerResources/SchedulerUI.js +++ b/UI/WebServerResources/SchedulerUI.js @@ -2722,7 +2722,6 @@ function onDocumentKeydown(event) { function initCalendars() { sorting["attribute"] = "start"; sorting["ascending"] = true; - showCompletedTasks = parseInt(UserSettings['ShowCompletedTasks']); if (!$(document.body).hasClassName("popup")) { var node = $("filterpopup"); @@ -2735,6 +2734,7 @@ function initCalendars() { initDateSelectorEvents(); initCalendarSelector(); configureSearchField(); + showCompletedTasks = parseInt(UserSettings['ShowCompletedTasks']); configureLists(); $("calendarList").attachMenu("calendarsMenu"); $(document.body).observe("click", onBodyClickHandler); From 1773670282cc224abdcfe73fd41db30862a7973b Mon Sep 17 00:00:00 2001 From: Francis Lachapelle Date: Thu, 12 Aug 2010 02:12:24 +0000 Subject: [PATCH 51/66] See ChangeLog Monotone-Parent: ccda1427d14d0786cfb28dbb253a43ab22a93a2e Monotone-Revision: 87eb8bb69f68316e6f95f8206ea9f665209d2b0f Monotone-Author: flachapelle@inverse.ca Monotone-Date: 2010-08-12T02:12:24 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 6 ++++++ UI/WebServerResources/MailerUI.js | 4 +++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 28ba383a0..da06ae4bb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2010-08-11 Francis Lachapelle + + * UI/WebServerResources/MailerUI.js (refreshMessage): if the + current mailbox is the sent folder, refresh the mailbox instead of + only the message. + 2010-08-11 Wolfgang Sourdeau * UI/WebServerResources/SchedulerUI.js: (initCalendars): avoid diff --git a/UI/WebServerResources/MailerUI.js b/UI/WebServerResources/MailerUI.js index 26ea35555..075c508b3 100644 --- a/UI/WebServerResources/MailerUI.js +++ b/UI/WebServerResources/MailerUI.js @@ -1586,7 +1586,9 @@ function refreshCurrentFolder() { /* Called after sending an email */ function refreshMessage(mailbox, messageUID) { - if (mailbox == Mailer.currentMailbox) { + if (Mailer.currentMailboxType == 'sent') + refreshCurrentFolder(); + else if (mailbox == Mailer.currentMailbox) { Mailer.dataTable.invalidate(messageUID); } } From e40cd602f7bed232872f7714cf3ededa4c2c8d70 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Thu, 12 Aug 2010 13:18:35 +0000 Subject: [PATCH 52/66] Monotone-Parent: ccda1427d14d0786cfb28dbb253a43ab22a93a2e Monotone-Revision: c46d8b7dd8119925eededd812de04ae71f5c1d6d Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-08-12T13:18:35 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 7 +++++++ SoObjects/Contacts/SOGoContactFolders.m | 13 +++++++++++++ 2 files changed, 20 insertions(+) diff --git a/ChangeLog b/ChangeLog index 28ba383a0..684f63fdd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2010-08-12 Wolfgang Sourdeau + + * SoObjects/Contacts/SOGoContactFolders.m + (-toManyRelationshipKeys): new overriden method to return only the + personal addressbook when the request is performed by + AddressBook.app. + 2010-08-11 Wolfgang Sourdeau * UI/WebServerResources/SchedulerUI.js: (initCalendars): avoid diff --git a/SoObjects/Contacts/SOGoContactFolders.m b/SoObjects/Contacts/SOGoContactFolders.m index 98197dfa6..6c791ba5b 100644 --- a/SoObjects/Contacts/SOGoContactFolders.m +++ b/SoObjects/Contacts/SOGoContactFolders.m @@ -35,6 +35,7 @@ #import #import #import +#import #import "SOGoContactGCSFolder.h" #import "SOGoContactSourceFolder.h" @@ -87,4 +88,16 @@ return [self labelForKey: @"Personal Address Book"]; } +- (NSArray *) toManyRelationshipKeys +{ + NSMutableArray *keys; + + if ([[context request] isAddressBookApp]) + keys = [NSMutableArray arrayWithObject: @"personal"]; + else + keys = (NSMutableArray *) [super toManyRelationshipKeys]; + + return keys; +} + @end From f19bba72922a975ed57502ec457c594ce22ea258 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Thu, 12 Aug 2010 14:02:21 +0000 Subject: [PATCH 53/66] Monotone-Parent: c46d8b7dd8119925eededd812de04ae71f5c1d6d Monotone-Revision: e78fc689c78de581aaf34ccdcebebddeb142c5b3 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-08-12T14:02:21 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 22 + .../Appointments/SOGoAppointmentFolder.m | 386 +---------------- SoObjects/Contacts/SOGoContactFolder.h | 4 - SoObjects/Contacts/SOGoContactGCSFolder.m | 74 ++-- SoObjects/Contacts/SOGoContactSourceFolder.m | 44 -- SoObjects/Contacts/SOGoFolder+CardDAV.m | 52 ++- SoObjects/SOGo/SOGoGCSFolder.h | 4 + SoObjects/SOGo/SOGoGCSFolder.m | 388 ++++++++++++++++++ 8 files changed, 518 insertions(+), 456 deletions(-) diff --git a/ChangeLog b/ChangeLog index 684f63fdd..8d34f1f94 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,27 @@ 2010-08-12 Wolfgang Sourdeau + * SoObjects/Contacts/SOGoFolder+CardDAV.m: + (_appendObject:withBaseURL:toREPORTResponse:): moved method here + from SOGOContact{GCS,Source}Folder since its implementation was + mostly the same in the two classes and never invoked anywhere + else. + Modified to return both "address-data" and "addressbook-data" + (draft rev < 4) unless we parse the requested props appropriately. + + * SoObjects/Contacts/SOGoContactGCSFolder.m + (-davAddressbookMultiget): new method that responds the + CardDAV addressbook-multiget report. + (-davSQLFieldsTable): new overriden method that adds support for + the CardDAV address-data property. + + * SoObjects/Appointments/SOGoAppointmentFolder.m + (-davCalendarMultiget:): make use of the new method below. + + * SoObjects/SOGo/SOGoGCSFolder.m + (-performMultigetInContext:inNamespace:): collection-type + independent form of -[SOGoAppointmentFolder davCalendarMultiget:], + moved along with all its private methods. + * SoObjects/Contacts/SOGoContactFolders.m (-toManyRelationshipKeys): new overriden method to return only the personal addressbook when the request is performed by diff --git a/SoObjects/Appointments/SOGoAppointmentFolder.m b/SoObjects/Appointments/SOGoAppointmentFolder.m index 70a8e3aaf..4e436767e 100644 --- a/SoObjects/Appointments/SOGoAppointmentFolder.m +++ b/SoObjects/Appointments/SOGoAppointmentFolder.m @@ -81,6 +81,16 @@ #define defaultColor @"#AAAAAA" +@interface SOGoGCSFolder (SOGoPrivate) + +- (void) appendObject: (NSDictionary *) object + properties: (NSString **) properties + count: (unsigned int) propertiesCount + withBaseURL: (NSString *) baseURL + toBuffer: (NSMutableString *) r; + +@end + @implementation SOGoAppointmentFolder static NSNumber *sharedYes = nil; @@ -1065,27 +1075,10 @@ firstInstanceCalendarDateRange: (NGCalendarDateRange *) fir return ma; } -- (void) _appendPropstat: (NSDictionary *) propstat - toBuffer: (NSMutableString *) r -{ - NSArray *properties; - unsigned int count, max; - - [r appendString: @""]; - properties = [propstat objectForKey: @"properties"]; - max = [properties count]; - for (count = 0; count < max; count++) - [r appendString: [properties objectAtIndex: count]]; - [r appendString: @""]; - [r appendString: [propstat objectForKey: @"status"]]; - [r appendString: @""]; -} - #warning we should use the EOFetchSpecification for that!!! (see doPROPFIND:) #warning components in calendar-data query are ignored -#warning the two following methods should be replaced with the new dav rendering mechanism - (NSString *) _nodeTagForProperty: (NSString *) property { NSString *namespace, *nodeName, *nsRep; @@ -1103,158 +1096,6 @@ firstInstanceCalendarDateRange: (NGCalendarDateRange *) fir return [NSString stringWithFormat: @"%@:%@", nsRep, nodeName]; } -- (NSString *) _nodeTag: (NSString *) property -{ - static NSMutableDictionary *tags = nil; - NSString *nodeTag; - - if (!tags) - tags = [NSMutableDictionary new]; - nodeTag = [tags objectForKey: property]; - if (!nodeTag) - { - nodeTag = [self _nodeTagForProperty: property]; - [tags setObject: nodeTag forKey: property]; - } - - return nodeTag; -} - -- (NSString **) _properties: (NSString **) properties - count: (unsigned int) propertiesCount - ofObject: (NSDictionary *) object -{ - SOGoCalendarComponent *sogoObject; - NSString **currentProperty; - NSString **values, **currentValue; - SEL methodSel; - -// NSLog (@"_properties:ofObject:: %@", [NSDate date]); - - values = NSZoneMalloc (NULL, - (propertiesCount + 1) * sizeof (NSString *)); - *(values + propertiesCount) = nil; - - //c = [self objectClassForComponentName: [object objectForKey: @"c_component"]]; - -#warning TODO: determine why this commented invocation takes so long... - // sogoObject = [self createChildComponentWithRecord: object]; - - sogoObject = [SOGoCalendarComponent objectWithRecord: object - inContainer: self]; - [sogoObject setComponentTag: [object objectForKey: @"c_component"]]; - - currentProperty = properties; - currentValue = values; - while (*currentProperty) - { - methodSel = SOGoSelectorForPropertyGetter (*currentProperty); - if (methodSel && [sogoObject respondsToSelector: methodSel]) - *currentValue = [[sogoObject performSelector: methodSel] - stringByEscapingXMLString]; - currentProperty++; - currentValue++; - } - -// NSLog (@"/_properties:ofObject:: %@", [NSDate date]); - - return values; -} - -- (NSArray *) _propstats: (NSString **) properties - count: (unsigned int) propertiesCount - ofObject: (NSDictionary *) object -{ - NSMutableArray *propstats, *properties200, *properties404, *propDict; - NSString **property, **values, **currentValue; - NSString *propertyValue, *nodeTag; - -// NSLog (@"_propstats:ofObject:: %@", [NSDate date]); - - propstats = [NSMutableArray array]; - - properties200 = [NSMutableArray array]; - properties404 = [NSMutableArray array]; - - values = [self _properties: properties count: propertiesCount - ofObject: object]; - currentValue = values; - - property = properties; - while (*property) - { - nodeTag = [self _nodeTag: *property]; - if (*currentValue) - { - propertyValue = [NSString stringWithFormat: @"<%@>%@", - nodeTag, *currentValue, nodeTag]; - propDict = properties200; - } - else - { - propertyValue = [NSString stringWithFormat: @"<%@/>", nodeTag]; - propDict = properties404; - } - [propDict addObject: propertyValue]; - property++; - currentValue++; - } - free (values); - - if ([properties200 count]) - [propstats addObject: [NSDictionary dictionaryWithObjectsAndKeys: - properties200, @"properties", - @"HTTP/1.1 200 OK", @"status", - nil]]; - if ([properties404 count]) - [propstats addObject: [NSDictionary dictionaryWithObjectsAndKeys: - properties404, @"properties", - @"HTTP/1.1 404 Not Found", @"status", - nil]]; -// NSLog (@"/_propstats:ofObject:: %@", [NSDate date]); - - return propstats; -} - -#warning We need to use the new DAV utilities here... -#warning this is baddddd because we return a single-valued dictionary containing \ - a cname which may not event exist... the logic behind appendObject:... should be \ - rethought, especially since we may start using SQL views - -- (void) appendObject: (NSDictionary *) object - properties: (NSString **) properties - count: (unsigned int) propertiesCount - withBaseURL: (NSString *) baseURL - toBuffer: (NSMutableString *) r -{ - NSArray *propstats; - unsigned int count, max; - - [r appendFormat: @""]; - [r appendString: baseURL]; - [r appendString: [object objectForKey: @"c_name"]]; - [r appendString: @""]; - -// NSLog (@"(appendPropstats...): %@", [NSDate date]); - propstats = [self _propstats: properties count: propertiesCount - ofObject: object]; - max = [propstats count]; - for (count = 0; count < max; count++) - [self _appendPropstat: [propstats objectAtIndex: count] - toBuffer: r]; -// NSLog (@"/(appendPropstats...): %@", [NSDate date]); - - [r appendString: @""]; -} - -- (void) appendMissingObjectRef: (NSString *) href - toBuffer: (NSMutableString *) r -{ - [r appendString: @""]; - [r appendString: href]; - [r appendString: @"HTTP/1.1 404 Not Found"]; -} - - (NSCalendarDate *) _getMaxStartDate { NSCalendarDate *now, *rc; @@ -1688,211 +1529,10 @@ firstInstanceCalendarDateRange: (NGCalendarDateRange *) fir return r; } -- (NSDictionary *) _deduceObjectNamesFromURLs: (NSArray *) urls +- (WOResponse *) davCalendarMultiget: (WOContext *) queryContext { - unsigned int count, max; - NSString *url, *componentURLPath, *cName, *baseURLString; - NSMutableDictionary *cNames; - NSURL *componentURL, *baseURL; - NSArray *urlComponents; - - max = [urls count]; - cNames = [NSMutableDictionary dictionaryWithCapacity: max]; - baseURL = [self davURL]; - baseURLString = [self davURLAsString]; - - for (count = 0; count < max; count++) - { - url = [NSString stringWithFormat: @"%@/%@", - [[urls objectAtIndex: count] stringByDeletingLastPathComponent], - [[[urls objectAtIndex: count] lastPathComponent] stringByEscapingURL]]; - componentURL = [[NSURL URLWithString: url relativeToURL: baseURL] - standardizedURL]; - componentURLPath = [componentURL absoluteString]; - if ([componentURLPath rangeOfString: baseURLString].location - != NSNotFound) - { - urlComponents = [componentURLPath componentsSeparatedByString: @"/"]; - cName = [[urls objectAtIndex: count] lastPathComponent]; - [cNames setObject: [urls objectAtIndex: count] forKey: cName]; - } - } - - return cNames; -} - -- (NSArray *) _fetchComponentsWithNames: (NSArray *) cNames - fields: (NSArray *) fields -{ - NSMutableString *filterString; - NSArray *records; - -// NSLog (@"fetchComponentsWithNames"); - filterString = [NSMutableString string]; - [filterString appendFormat: @"c_name='%@'", - [cNames componentsJoinedByString: @"' OR c_name='"]]; -// NSLog (@"fetchComponentsWithNames: query"); - records = [self bareFetchFields: fields - from: nil to: nil - title: nil - component: nil - additionalFilters: filterString]; -// NSLog (@"/fetchComponentsWithNames"); - - return records; -} - -#define maxQuerySize 2500 -#define baseQuerySize 160 -#define idQueryOverhead 13 - -- (NSArray *) _fetchComponentsMatchingObjectNames: (NSArray *) cNames - fields: (NSArray *) fields -{ - NSMutableArray *components; - NSArray *records; - NSMutableArray *currentNames; - unsigned int count, max, currentSize, queryNameLength; - NSString *currentName; - -// NSLog (@"fetching components matching names"); - - currentNames = [NSMutableArray array]; - currentSize = baseQuerySize; - - max = [cNames count]; - components = [NSMutableArray arrayWithCapacity: max]; - for (count = 0; count < max; count++) - { - currentName = [cNames objectAtIndex: count]; - queryNameLength = idQueryOverhead + [currentName length]; - if ((currentSize + queryNameLength) - > maxQuerySize) - { - records = [self _fetchComponentsWithNames: currentNames fields: fields]; - [components addObjectsFromArray: records]; - [currentNames removeAllObjects]; - currentSize = baseQuerySize; - } - [currentNames addObject: currentName]; - currentSize += queryNameLength; - } - - records = [self _fetchComponentsWithNames: currentNames fields: fields]; - [components addObjectsFromArray: records]; - -// NSLog (@"/fetching components matching names"); - - return components; -} - -- (NSDictionary *) _fetchComponentsMatchingURLs: (NSArray *) urls - fields: (NSArray *) fields -{ - NSMutableDictionary *components; - NSDictionary *cnames, *record; - NSString *recordURL; - NSArray *records; - unsigned int count, max; - - components = [NSMutableDictionary dictionary]; - - cnames = [self _deduceObjectNamesFromURLs: urls]; - records = [self _fetchComponentsMatchingObjectNames: [cnames allKeys] - fields: fields]; - max = [records count]; - for (count = 0; count < max; count++) - { - record = [records objectAtIndex: count]; - recordURL = [cnames objectForKey: [record objectForKey: @"c_name"]]; - if (recordURL) - [components setObject: record forKey: recordURL]; - } - - return components; -} - -- (void) _appendComponentProperties: (NSDictionary *) properties - matchingURLs: (id ) refs - toResponse: (WOResponse *) response -{ - NSObject *element; - NSDictionary *currentComponent, *components; - NSString *currentURL, *baseURL, *currentField; - NSString **propertiesArray; - NSMutableArray *urls, *fields; - NSMutableString *buffer; - unsigned int count, max, propertiesCount; - NSEnumerator *addFields; - - baseURL = [self davURLAsString]; -#warning review this when fixing http://www.scalableogo.org/bugs/view.php?id=276 - if (![baseURL hasSuffix: @"/"]) - baseURL = [NSString stringWithFormat: @"%@/", baseURL]; - - urls = [NSMutableArray array]; - max = [refs length]; - for (count = 0; count < max; count++) - { - element = [refs objectAtIndex: count]; - currentURL = [[element firstChild] nodeValue]; - [urls addObject: currentURL]; - } - - propertiesArray = [[properties allKeys] asPointersOfObjects]; - propertiesCount = [properties count]; - - fields = [NSMutableArray arrayWithObjects: @"c_name", @"c_component", nil]; - addFields = [[properties allValues] objectEnumerator]; - while ((currentField = [addFields nextObject])) - if ([currentField length]) - [fields addObjectUniquely: currentField]; - - components = [self _fetchComponentsMatchingURLs: urls fields: fields]; - max = [urls count]; -// NSLog (@"adding properties with url"); - buffer = [NSMutableString stringWithCapacity: max*512]; - for (count = 0; count < max; count++) - { - currentComponent = [components objectForKey: [urls objectAtIndex: count]]; - if (currentComponent) - [self appendObject: currentComponent - properties: propertiesArray - count: propertiesCount - withBaseURL: baseURL - toBuffer: buffer]; - else - [self appendMissingObjectRef: currentURL - toBuffer: buffer]; - } - [response appendContentString: buffer]; -// NSLog (@"/adding properties with url"); - - NSZoneFree (NULL, propertiesArray); -} - -- (id) davCalendarMultiget: (id) queryContext -{ - WOResponse *r; - id document; - DOMElement *documentElement, *propElement; - - r = [context response]; - [r prepareDAVResponse]; - [r appendContentString: @""]; - - document = [[context request] contentAsDOMDocument]; - documentElement = (DOMElement *) [document documentElement]; - propElement = [documentElement firstElementWithTag: @"prop" - inNamespace: @"DAV:"]; - - [self _appendComponentProperties: [self parseDAVRequestedProperties: propElement] - matchingURLs: [documentElement getElementsByTagName: @"href"] - toResponse: r]; - [r appendContentString:@""]; - - return r; + return [self performMultigetInContext: queryContext + inNamespace: @"urn:ietf:params:xml:ns:caldav"]; } - (NSString *) additionalWebdavSyncFilters diff --git a/SoObjects/Contacts/SOGoContactFolder.h b/SoObjects/Contacts/SOGoContactFolder.h index dfcb4287f..00a52456f 100644 --- a/SoObjects/Contacts/SOGoContactFolder.h +++ b/SoObjects/Contacts/SOGoContactFolder.h @@ -42,10 +42,6 @@ @protocol SOGoContactFolder -- (void) appendObject: (NSDictionary *) object - withBaseURL: (NSString *) baseURL - toREPORTResponse: (WOResponse *) r; - - (NSArray *) lookupContactsWithFilter: (NSString *) filter sortBy: (NSString *) sortKey ordering: (NSComparisonResult) sortOrdering; diff --git a/SoObjects/Contacts/SOGoContactGCSFolder.m b/SoObjects/Contacts/SOGoContactGCSFolder.m index 1fa3f8f9e..8a275d748 100644 --- a/SoObjects/Contacts/SOGoContactGCSFolder.m +++ b/SoObjects/Contacts/SOGoContactGCSFolder.m @@ -23,6 +23,7 @@ #import #import #import +#import #import #import @@ -31,15 +32,23 @@ #import #import #import -#import +#import +#import +#import +#import #import #import + +#import #import +#import #import #import #import #import +#import +#import #import "SOGoContactGCSEntry.h" #import "SOGoContactGCSList.h" @@ -84,7 +93,7 @@ static NSArray *folderListingFields = nil; - (Class) objectClassForComponentName: (NSString *) componentName { Class objectClass; - + if ([componentName isEqualToString: @"vcard"]) objectClass = [SOGoContactGCSEntry class]; else if ([componentName isEqualToString: @"vlist"]) @@ -289,38 +298,17 @@ static NSArray *folderListingFields = nil; return records; } -#warning this should be unified within SOGoFolder -- (void) appendObject: (NSDictionary *) object - withBaseURL: (NSString *) baseURL - toREPORTResponse: (WOResponse *) r +- (NSDictionary *) davSQLFieldsTable { - SOGoContactGCSEntry *component; - NSString *name, *etagLine, *contactString; + static NSMutableDictionary *davSQLFieldsTable = nil; - name = [object objectForKey: @"c_name"]; - component = [self lookupName: name inContext: context acquire: NO]; + if (!davSQLFieldsTable) + { + davSQLFieldsTable = [[super davSQLFieldsTable] mutableCopy]; + [davSQLFieldsTable setObject: @"c_content" forKey: @"{urn:ietf:params:xml:ns:carddav}address-data"]; + } - [r appendContentString: @" \r\n"]; - [r appendContentString: @" "]; - [r appendContentString: baseURL]; - if (![baseURL hasSuffix: @"/"]) - [r appendContentString: @"/"]; - [r appendContentString: name]; - [r appendContentString: @"\r\n"]; - - [r appendContentString: @" \r\n"]; - [r appendContentString: @" \r\n"]; - etagLine = [NSString stringWithFormat: @" %@\r\n", - [component davEntityTag]]; - [r appendContentString: etagLine]; - [r appendContentString: @" \r\n"]; - [r appendContentString: @" HTTP/1.1 200 OK\r\n"]; - [r appendContentString: @" \r\n"]; - [r appendContentString: @" "]; - contactString = [[component contentAsString] stringByEscapingXMLString]; - [r appendContentString: contactString]; - [r appendContentString: @"\r\n"]; - [r appendContentString: @" \r\n"]; + return davSQLFieldsTable; } - (NSArray *) davComplianceClassesInContext: (id)_ctx @@ -359,6 +347,12 @@ static NSArray *folderListingFields = nil; return resourceType; } +- (id) davAddressbookMultiget: (id) queryContext +{ + return [self performMultigetInContext: queryContext + inNamespace: @"urn:ietf:params:xml:ns:carddav"]; +} + /* sorting */ - (NSComparisonResult) compare: (id) otherFolder { @@ -385,4 +379,22 @@ static NSArray *folderListingFields = nil; return @"IPF.Contact"; } +/* TODO: multiget reorg */ +- (NSString *) _nodeTagForProperty: (NSString *) property +{ + NSString *namespace, *nodeName, *nsRep; + NSRange nsEnd; + + nsEnd = [property rangeOfString: @"}"]; + namespace + = [property substringFromRange: NSMakeRange (1, nsEnd.location - 1)]; + nodeName = [property substringFromIndex: nsEnd.location + 1]; + if ([namespace isEqualToString: XMLNS_CARDDAV]) + nsRep = @"C"; + else + nsRep = @"D"; + + return [NSString stringWithFormat: @"%@:%@", nsRep, nodeName]; +} + @end /* SOGoContactGCSFolder */ diff --git a/SoObjects/Contacts/SOGoContactSourceFolder.m b/SoObjects/Contacts/SOGoContactSourceFolder.m index c33fff60c..214bafe06 100644 --- a/SoObjects/Contacts/SOGoContactSourceFolder.m +++ b/SoObjects/Contacts/SOGoContactSourceFolder.m @@ -34,7 +34,6 @@ #import #import #import -#import #import #import @@ -50,49 +49,6 @@ @implementation SOGoContactSourceFolder -#warning this should be unified within SOGoFolder -- (void) appendObject: (NSDictionary *) object - withBaseURL: (NSString *) baseURL - toREPORTResponse: (WOResponse *) r -{ - SOGoContactLDIFEntry *component; - NSString *name, *etagLine, *contactString; - - name = [object objectForKey: @"c_name"]; - if ([name length]) - { - component = [self lookupName: name inContext: context acquire: NO]; - - if ([component isKindOfClass: [NSException class]]) - { - [self logWithFormat: @"Object with name '%@' not found. You likely have a LDAP configuration issue.", name]; - return; - } - - [r appendContentString: @" \r\n"]; - [r appendContentString: @" "]; - [r appendContentString: baseURL]; - if (![baseURL hasSuffix: @"/"]) - [r appendContentString: @"/"]; - [r appendContentString: name]; - [r appendContentString: @"\r\n"]; - - [r appendContentString: @" \r\n"]; - [r appendContentString: @" \r\n"]; - etagLine = [NSString stringWithFormat: @" %@\r\n", - [component davEntityTag]]; - [r appendContentString: etagLine]; - [r appendContentString: @" \r\n"]; - [r appendContentString: @" HTTP/1.1 200 OK\r\n"]; - [r appendContentString: @" \r\n"]; - [r appendContentString: @" "]; - contactString = [[component contentAsString] stringByEscapingXMLString]; - [r appendContentString: contactString]; - [r appendContentString: @"\r\n"]; - [r appendContentString: @" \r\n"]; - } -} - + (id) folderWithName: (NSString *) aName andDisplayName: (NSString *) aDisplayName inContainer: (id) aContainer diff --git a/SoObjects/Contacts/SOGoFolder+CardDAV.m b/SoObjects/Contacts/SOGoFolder+CardDAV.m index 8ad51dc28..26494ba8e 100644 --- a/SoObjects/Contacts/SOGoFolder+CardDAV.m +++ b/SoObjects/Contacts/SOGoFolder+CardDAV.m @@ -27,6 +27,7 @@ #import #import #import +#import #import #import #import @@ -39,6 +40,50 @@ @implementation SOGoFolder (CardDAV) +- (void) _appendObject: (NSDictionary *) object + withBaseURL: (NSString *) baseURL + toREPORTResponse: (WOResponse *) r +{ + id component; + NSString *name, *etagLine, *contactString; + + name = [object objectForKey: @"c_name"]; + if ([name length]) + { + component = [self lookupName: name inContext: context acquire: NO]; + if ([component isKindOfClass: [NSException class]]) + { + [self logWithFormat: @"Object with name '%@' not found. You likely have a LDAP configuration issue.", name]; + return; + } + +#warning we provide both "address-data" and "addressbook-data" for compatibility reasons, we should actually check which one has been queried + [r appendContentString: @"" + @""]; + [r appendContentString: baseURL]; + if (![baseURL hasSuffix: @"/"]) + [r appendContentString: @"/"]; + [r appendContentString: name]; + [r appendContentString: @"" + @"" + @""]; + etagLine = [NSString stringWithFormat: @"%@", + [component davEntityTag]]; + [r appendContentString: etagLine]; + [r appendContentString: @"" + @"HTTP/1.1 200 OK" + @"" + @""]; + contactString = [[component contentAsString] stringByEscapingXMLString]; + [r appendContentString: contactString]; + [r appendContentString: @"" + @""]; + [r appendContentString: contactString]; + [r appendContentString: @"" + @""]; + } +} + - (void) _appendComponentsMatchingFilters: (NSArray *) filters toResponse: (WOResponse *) response context: (id) localContext @@ -60,9 +105,8 @@ objectEnumerator]; while ((contact = [contacts nextObject])) - [(id)self appendObject: contact - withBaseURL: baseURL - toREPORTResponse: response]; + [self _appendObject: contact withBaseURL: baseURL + toREPORTResponse: response]; } } @@ -143,7 +187,7 @@ [self _appendComponentsMatchingFilters: filters toResponse: r context: queryContext]; - [r appendContentString:@""]; + [r appendContentString: @""]; return r; } diff --git a/SoObjects/SOGo/SOGoGCSFolder.h b/SoObjects/SOGo/SOGoGCSFolder.h index eca340d24..7079c4991 100644 --- a/SoObjects/SOGo/SOGoGCSFolder.h +++ b/SoObjects/SOGo/SOGoGCSFolder.h @@ -121,6 +121,10 @@ - (NSString *) davCollectionTag; +/* multiget helper */ +- (WOResponse *) performMultigetInContext: (WOContext *) queryContext + inNamespace: (NSString *) namespace; + @end #endif /* __SOGo_SOGoGCSFolder_H__ */ diff --git a/SoObjects/SOGo/SOGoGCSFolder.m b/SoObjects/SOGo/SOGoGCSFolder.m index 3f8388008..82df98235 100644 --- a/SoObjects/SOGo/SOGoGCSFolder.m +++ b/SoObjects/SOGo/SOGoGCSFolder.m @@ -1685,4 +1685,392 @@ static NSArray *childRecordFields = nil; [_ms appendFormat:@" ocs=%@", [self ocsPath]]; } +/* tmp: multiget */ + +- (NSArray *) _fetchComponentsWithNames: (NSArray *) cNames + fields: (NSArray *) fields +{ + NSArray *records; + NSString *sqlFilter; + NSMutableString *filterString; + EOQualifier *qualifier; + + sqlFilter = [self aclSQLListingFilter]; + if (sqlFilter) + { + filterString = [NSMutableString stringWithCapacity: 8192]; + [filterString appendFormat: @"(c_name='%@')", + [cNames componentsJoinedByString: @"' OR c_name='"]]; + if ([sqlFilter length] > 0) + [filterString appendFormat: @" AND (%@)", sqlFilter]; + qualifier = [EOQualifier qualifierWithQualifierFormat: filterString]; + records = [[self ocsFolder] fetchFields: fields + matchingQualifier: qualifier]; + if (![records isNotNull]) + { + [self errorWithFormat: @"(%s): fetch failed!", __PRETTY_FUNCTION__]; + return nil; + } + } + else + records = [NSArray array]; + + return records; +} + +#define maxQuerySize 2500 +#define baseQuerySize 160 +#define idQueryOverhead 13 + +- (NSArray *) _fetchComponentsMatchingObjectNames: (NSArray *) cNames + fields: (NSArray *) fields +{ + NSMutableArray *components; + NSArray *records; + NSMutableArray *currentNames; + unsigned int count, max, currentSize, queryNameLength; + NSString *currentName; + +// NSLog (@"fetching components matching names"); + + currentNames = [NSMutableArray array]; + currentSize = baseQuerySize; + + max = [cNames count]; + components = [NSMutableArray arrayWithCapacity: max]; + for (count = 0; count < max; count++) + { + currentName = [cNames objectAtIndex: count]; + queryNameLength = idQueryOverhead + [currentName length]; + if ((currentSize + queryNameLength) + > maxQuerySize) + { + records = [self _fetchComponentsWithNames: currentNames fields: fields]; + [components addObjectsFromArray: records]; + [currentNames removeAllObjects]; + currentSize = baseQuerySize; + } + [currentNames addObject: currentName]; + currentSize += queryNameLength; + } + + records = [self _fetchComponentsWithNames: currentNames fields: fields]; + [components addObjectsFromArray: records]; + +// NSLog (@"/fetching components matching names"); + + return components; +} + +- (NSDictionary *) _deduceObjectNamesFromURLs: (NSArray *) urls +{ + unsigned int count, max; + NSString *url, *componentURLPath, *cName, *baseURLString; + NSMutableDictionary *cNames; + NSURL *componentURL, *baseURL; + NSArray *urlComponents; + + max = [urls count]; + cNames = [NSMutableDictionary dictionaryWithCapacity: max]; + baseURL = [self davURL]; + baseURLString = [self davURLAsString]; + + for (count = 0; count < max; count++) + { + url = [NSString stringWithFormat: @"%@/%@", + [[urls objectAtIndex: count] stringByDeletingLastPathComponent], + [[[urls objectAtIndex: count] lastPathComponent] stringByEscapingURL]]; + componentURL = [[NSURL URLWithString: url relativeToURL: baseURL] + standardizedURL]; + componentURLPath = [componentURL absoluteString]; + if ([componentURLPath rangeOfString: baseURLString].location + != NSNotFound) + { + urlComponents = [componentURLPath componentsSeparatedByString: @"/"]; + cName = [[urls objectAtIndex: count] lastPathComponent]; + [cNames setObject: [urls objectAtIndex: count] forKey: cName]; + } + } + + return cNames; +} + +- (NSDictionary *) _fetchComponentsMatchingURLs: (NSArray *) urls + fields: (NSArray *) fields +{ + NSMutableDictionary *components; + NSDictionary *cnames, *record; + NSString *recordURL; + NSArray *records; + unsigned int count, max; + + components = [NSMutableDictionary dictionary]; + + cnames = [self _deduceObjectNamesFromURLs: urls]; + records = [self _fetchComponentsMatchingObjectNames: [cnames allKeys] + fields: fields]; + max = [records count]; + for (count = 0; count < max; count++) + { + record = [records objectAtIndex: count]; + recordURL = [cnames objectForKey: [record objectForKey: @"c_name"]]; + if (recordURL) + [components setObject: record forKey: recordURL]; + } + + return components; +} + +#warning the two following methods should be replaced with the new dav rendering mechanism +- (NSString *) _nodeTagForProperty: (NSString *) property +{ + [self subclassResponsibility: _cmd]; + return nil; +} + +- (NSString *) _nodeTag: (NSString *) property +{ + static NSMutableDictionary *tags = nil; + NSString *nodeTag; + + if (!tags) + tags = [NSMutableDictionary new]; + nodeTag = [tags objectForKey: property]; + if (!nodeTag) + { + nodeTag = [self _nodeTagForProperty: property]; + [tags setObject: nodeTag forKey: property]; + } + + return nodeTag; +} + +- (NSString **) _properties: (NSString **) properties + count: (unsigned int) propertiesCount + ofObject: (NSDictionary *) object +{ + SOGoContentObject *sogoObject; + NSString **currentProperty; + NSString **values, **currentValue; + SEL methodSel; + +// NSLog (@"_properties:ofObject:: %@", [NSDate date]); + + values = NSZoneMalloc (NULL, + (propertiesCount + 1) * sizeof (NSString *)); + *(values + propertiesCount) = nil; + + //c = [self objectClassForComponentName: [object objectForKey: @"c_component"]]; + + sogoObject = [self createChildComponentWithRecord: object]; + currentProperty = properties; + currentValue = values; + while (*currentProperty) + { + methodSel = SOGoSelectorForPropertyGetter (*currentProperty); + if (methodSel && [sogoObject respondsToSelector: methodSel]) + *currentValue = [[sogoObject performSelector: methodSel] + stringByEscapingXMLString]; + currentProperty++; + currentValue++; + } + +// NSLog (@"/_properties:ofObject:: %@", [NSDate date]); + + return values; +} + +- (NSArray *) _propstats: (NSString **) properties + count: (unsigned int) propertiesCount + ofObject: (NSDictionary *) object +{ + NSMutableArray *propstats, *properties200, *properties404, *propDict; + NSString **property, **values, **currentValue; + NSString *propertyValue, *nodeTag; + +// NSLog (@"_propstats:ofObject:: %@", [NSDate date]); + + propstats = [NSMutableArray array]; + + properties200 = [NSMutableArray array]; + properties404 = [NSMutableArray array]; + + values = [self _properties: properties count: propertiesCount + ofObject: object]; + currentValue = values; + + property = properties; + while (*property) + { + nodeTag = [self _nodeTag: *property]; + if (*currentValue) + { + propertyValue = [NSString stringWithFormat: @"<%@>%@", + nodeTag, *currentValue, nodeTag]; + propDict = properties200; + } + else + { + propertyValue = [NSString stringWithFormat: @"<%@/>", nodeTag]; + propDict = properties404; + } + [propDict addObject: propertyValue]; + property++; + currentValue++; + } + free (values); + + if ([properties200 count]) + [propstats addObject: [NSDictionary dictionaryWithObjectsAndKeys: + properties200, @"properties", + @"HTTP/1.1 200 OK", @"status", + nil]]; + if ([properties404 count]) + [propstats addObject: [NSDictionary dictionaryWithObjectsAndKeys: + properties404, @"properties", + @"HTTP/1.1 404 Not Found", @"status", + nil]]; +// NSLog (@"/_propstats:ofObject:: %@", [NSDate date]); + + return propstats; +} + +- (void) _appendPropstat: (NSDictionary *) propstat + toBuffer: (NSMutableString *) r +{ + NSArray *properties; + unsigned int count, max; + + [r appendString: @""]; + properties = [propstat objectForKey: @"properties"]; + max = [properties count]; + for (count = 0; count < max; count++) + [r appendString: [properties objectAtIndex: count]]; + [r appendString: @""]; + [r appendString: [propstat objectForKey: @"status"]]; + [r appendString: @""]; +} + +#warning We need to use the new DAV utilities here... +#warning this is baddddd because we return a single-valued dictionary containing \ + a cname which may not event exist... the logic behind appendObject:... should be \ + rethought, especially since we may start using SQL views + +- (void) appendObject: (NSDictionary *) object + properties: (NSString **) properties + count: (unsigned int) propertiesCount + withBaseURL: (NSString *) baseURL + toBuffer: (NSMutableString *) r +{ + NSArray *propstats; + unsigned int count, max; + + [r appendFormat: @""]; + [r appendString: baseURL]; + [r appendString: [object objectForKey: @"c_name"]]; + [r appendString: @""]; + +// NSLog (@"(appendPropstats...): %@", [NSDate date]); + propstats = [self _propstats: properties count: propertiesCount + ofObject: object]; + max = [propstats count]; + for (count = 0; count < max; count++) + [self _appendPropstat: [propstats objectAtIndex: count] + toBuffer: r]; +// NSLog (@"/(appendPropstats...): %@", [NSDate date]); + + [r appendString: @""]; +} + +- (void) appendMissingObjectRef: (NSString *) href + toBuffer: (NSMutableString *) r +{ + [r appendString: @""]; + [r appendString: href]; + [r appendString: @"HTTP/1.1 404 Not Found"]; +} + +- (void) _appendComponentProperties: (NSDictionary *) properties + matchingURLs: (id ) refs + toResponse: (WOResponse *) response +{ + NSObject *element; + NSDictionary *currentComponent, *components; + NSString *currentURL, *baseURL, *currentField; + NSString **propertiesArray; + NSMutableArray *urls, *fields; + NSMutableString *buffer; + unsigned int count, max, propertiesCount; + NSEnumerator *addFields; + + baseURL = [self davURLAsString]; +#warning review this when fixing http://www.scalableogo.org/bugs/view.php?id=276 + if (![baseURL hasSuffix: @"/"]) + baseURL = [NSString stringWithFormat: @"%@/", baseURL]; + + urls = [NSMutableArray array]; + max = [refs length]; + for (count = 0; count < max; count++) + { + element = [refs objectAtIndex: count]; + currentURL = [[element firstChild] nodeValue]; + [urls addObject: currentURL]; + } + + propertiesArray = [[properties allKeys] asPointersOfObjects]; + propertiesCount = [properties count]; + + fields = [NSMutableArray arrayWithObjects: @"c_name", @"c_component", nil]; + addFields = [[properties allValues] objectEnumerator]; + while ((currentField = [addFields nextObject])) + if ([currentField length]) + [fields addObjectUniquely: currentField]; + + components = [self _fetchComponentsMatchingURLs: urls fields: fields]; + max = [urls count]; +// NSLog (@"adding properties with url"); + buffer = [NSMutableString stringWithCapacity: max*512]; + for (count = 0; count < max; count++) + { + currentComponent = [components objectForKey: [urls objectAtIndex: count]]; + if (currentComponent) + [self appendObject: currentComponent + properties: propertiesArray + count: propertiesCount + withBaseURL: baseURL + toBuffer: buffer]; + else + [self appendMissingObjectRef: currentURL + toBuffer: buffer]; + } + [response appendContentString: buffer]; +// NSLog (@"/adding properties with url"); + + NSZoneFree (NULL, propertiesArray); +} + +- (WOResponse *) performMultigetInContext: (WOContext *) queryContext + inNamespace: (NSString *) namespace +{ + WOResponse *r; + id document; + DOMElement *documentElement, *propElement; + + r = [context response]; + [r prepareDAVResponse]; + [r appendContentString: + [NSString stringWithFormat: @"", namespace]]; + document = [[queryContext request] contentAsDOMDocument]; + documentElement = (DOMElement *) [document documentElement]; + propElement = [documentElement firstElementWithTag: @"prop" + inNamespace: @"DAV:"]; + [self _appendComponentProperties: [self parseDAVRequestedProperties: propElement] + matchingURLs: [documentElement getElementsByTagName: @"href"] + toResponse: r]; + [r appendContentString:@""]; + + return r; +} + @end /* SOGoFolder */ From fe73002ead79f924dac21498f408a752ff025ffa Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Thu, 12 Aug 2010 14:14:11 +0000 Subject: [PATCH 54/66] Monotone-Parent: 60c12b841698957b704b47490a125477543c7dc3 Monotone-Revision: 95a996f98eb687e1c32ec17dda251611cb98f3a5 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-08-12T14:14:11 Monotone-Branch: ca.inverse.sogo --- SoObjects/SOGo/DOMNode+SOGo.h | 1 + 1 file changed, 1 insertion(+) diff --git a/SoObjects/SOGo/DOMNode+SOGo.h b/SoObjects/SOGo/DOMNode+SOGo.h index b4297f6cb..2906058e8 100644 --- a/SoObjects/SOGo/DOMNode+SOGo.h +++ b/SoObjects/SOGo/DOMNode+SOGo.h @@ -23,6 +23,7 @@ #ifndef S_GO_SOOBJECTS_SOGO_DOMNODE_SOGO_H #define S_GO_SOOBJECTS_SOGO_DOMNODE_SOGO_H +#import #import @class DOMElement; From 060d06bc606121a23e3a29929519dfd66ac33c1e Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Thu, 12 Aug 2010 14:14:34 +0000 Subject: [PATCH 55/66] Monotone-Parent: 95a996f98eb687e1c32ec17dda251611cb98f3a5 Monotone-Revision: 4bda58ef38f5ccda5b874a0271bc6fd1168c8d2e Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-08-12T14:14:34 Monotone-Branch: ca.inverse.sogo --- SoObjects/Contacts/SOGoContactGCSFolder.m | 4 ---- 1 file changed, 4 deletions(-) diff --git a/SoObjects/Contacts/SOGoContactGCSFolder.m b/SoObjects/Contacts/SOGoContactGCSFolder.m index 8a275d748..30a5401b7 100644 --- a/SoObjects/Contacts/SOGoContactGCSFolder.m +++ b/SoObjects/Contacts/SOGoContactGCSFolder.m @@ -32,9 +32,6 @@ #import #import #import -#import -#import -#import #import #import #import @@ -48,7 +45,6 @@ #import #import #import -#import #import "SOGoContactGCSEntry.h" #import "SOGoContactGCSList.h" From 5c4964bc555b3da6ed39b86024ecdaff468d1664 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Thu, 12 Aug 2010 17:34:32 +0000 Subject: [PATCH 56/66] Monotone-Parent: 4bda58ef38f5ccda5b874a0271bc6fd1168c8d2e Monotone-Revision: 4931dae72f1ad88e9b719cf79ec472271ce13836 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-08-12T17:34:32 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 16 ++++++++++++ UI/Common/UIxPageFrame.m | 9 +++++++ UI/MainUI/SOGoRootPage.m | 5 ++++ UI/MainUI/product.plist | 7 +++++- UI/Templates/UIxPageFrame.wox | 6 +++++ UI/WebServerResources/generic.js | 43 ++++++++++++++++++++++++-------- 6 files changed, 74 insertions(+), 12 deletions(-) diff --git a/ChangeLog b/ChangeLog index b5a43da44..736b27365 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,21 @@ 2010-08-12 Wolfgang Sourdeau + * UI/WebServerResources/generic.js: (onAjaxRequestStateChange): + when using CAS authentication and when the return code is 0 and + when the request status is 4, chances are that the initial ajax + request failed due to the expiration of the CAS ticket entry in + memcached. In FF 3.5 and above, a bug prevents the initial cookie + from being given back to the reauthentication redirect from an + AJAX request. Therefore we open a window that will do this for us + and will close one the authentication has succeeded again. + + * UI/MainUI/SOGoRootPage.m (-revoverAction): new fake action that + perform the CAS redirection and then trigger the respawn of the + initial request. + + * UI/Common/UIxPageFrame.m (-usesCASAuthentication): new accessor + used for recovery of redirected requests. + * SoObjects/Contacts/SOGoFolder+CardDAV.m: (_appendObject:withBaseURL:toREPORTResponse:): moved method here from SOGOContact{GCS,Source}Folder since its implementation was diff --git a/UI/Common/UIxPageFrame.m b/UI/Common/UIxPageFrame.m index 9e33be5c9..ab9ac4947 100644 --- a/UI/Common/UIxPageFrame.m +++ b/UI/Common/UIxPageFrame.m @@ -406,6 +406,15 @@ && [user isSuperUser]); } +- (BOOL) usesCASAuthentication +{ + SOGoSystemDefaults *sd; + + sd = [SOGoSystemDefaults sharedSystemDefaults]; + + return [[sd authenticationType] isEqualToString: @"cas"]; +} + - (NSString *) userIdentification { /* The "identification" term is used in the human sense here. */ diff --git a/UI/MainUI/SOGoRootPage.m b/UI/MainUI/SOGoRootPage.m index 842da7402..18cba979e 100644 --- a/UI/MainUI/SOGoRootPage.m +++ b/UI/MainUI/SOGoRootPage.m @@ -435,4 +435,9 @@ return response; } +- (id) recoverAction +{ + return [self jsCloseWithRefreshMethod: @"recoverRequest();"]; +} + @end /* SOGoRootPage */ diff --git a/UI/MainUI/product.plist b/UI/MainUI/product.plist index 7bb31f229..0def5f8f3 100644 --- a/UI/MainUI/product.plist +++ b/UI/MainUI/product.plist @@ -106,10 +106,15 @@ }; }; methods = { - view = { + view = { protectedBy = ""; pageName = "SOGoRootPage"; }; + recover = { + protectedBy = "View"; + pageName = "SOGoRootPage"; + actionName = "recover"; + }; index = { protectedBy = ""; pageName = "SOGoRootPage"; diff --git a/UI/Templates/UIxPageFrame.wox b/UI/Templates/UIxPageFrame.wox index 40f01cb5e..9b6ea298c 100644 --- a/UI/Templates/UIxPageFrame.wox +++ b/UI/Templates/UIxPageFrame.wox @@ -133,6 +133,12 @@ var IsSuperUser = false; + var usesCASAuthentication = true; + + var usesCASAuthentication = false; + var UserFolderURL = ''; diff --git a/UI/WebServerResources/generic.js b/UI/WebServerResources/generic.js index 59307f451..28e622a52 100644 --- a/UI/WebServerResources/generic.js +++ b/UI/WebServerResources/generic.js @@ -23,6 +23,7 @@ var logConsole; var logWindow = null; var queryParameters; +var recoveryRequest = null; var menus = new Array(); var search = {}; @@ -245,15 +246,24 @@ function createHTTPClient() { function onAjaxRequestStateChange(http) { try { - if (http.readyState == 4 - && activeAjaxRequests > 0) { - if (!http.aborted) - http.callback(http); - activeAjaxRequests--; - checkAjaxRequestsState(); - http.onreadystatechange = Prototype.emptyFunction; - http.callback = Prototype.emptyFunction; - http.callbackData = null; + if (http.readyState == 4) { + if (http.status == 0 && usesCASAuthentication) { + recoveryRequest = http; + var urlstr = ApplicationBaseURL; + if (!urlstr.endsWith('/')) + urlstr += '/'; + urlstr += ("../../recover"); + window.open(urlstr, "_blank"); + } + else if (activeAjaxRequests > 0) { + if (!http.aborted) + http.callback(http); + activeAjaxRequests--; + checkAjaxRequestsState(); + http.onreadystatechange = Prototype.emptyFunction; + http.callback = Prototype.emptyFunction; + http.callbackData = null; + } } } catch(e) { @@ -275,6 +285,16 @@ function onAjaxRequestStateChange(http) { } } +function recoverRequest() { + if (recoveryRequest) { + triggerAjaxRequest(recoveryRequest.url, + recoveryRequest.callback, + recoveryRequest.callbackData, + recoveryRequest.paramHeaders); + recoveryRequest = null; + } +} + /* taken from Lightning */ function getContrastingTextColor(bgColor) { var calcColor = bgColor.substring(1); @@ -298,9 +318,10 @@ function triggerAjaxRequest(url, callback, userdata, content, headers) { http.open("POST", url, true); http.url = url; + http.paramHeaders = headers; http.callback = callback; http.callbackData = userdata; - http.onreadystatechange = function() { onAjaxRequestStateChange(http);}; + http.onreadystatechange = function() { onAjaxRequestStateChange(http); }; // = function() { // // log ("state changed (" + http.readyState + "): " + url); // }; @@ -1755,7 +1776,7 @@ function showAlertDialog(label) { _showAlertDialog(label); } } - + function _showAlertDialog(label) { var dialog = null; if (dialogs[label]) From bfcf13e683063d42bd565e51bed4b2b6c66f164b Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Thu, 12 Aug 2010 17:37:11 +0000 Subject: [PATCH 57/66] Monotone-Parent: 4931dae72f1ad88e9b719cf79ec472271ce13836 Monotone-Revision: 73d26bfc7c0fe2155957f4be90b7df5a5a376b10 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-08-12T17:37:11 Monotone-Branch: ca.inverse.sogo --- UI/WebServerResources/generic.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/UI/WebServerResources/generic.js b/UI/WebServerResources/generic.js index 28e622a52..1900a3824 100644 --- a/UI/WebServerResources/generic.js +++ b/UI/WebServerResources/generic.js @@ -247,6 +247,8 @@ function createHTTPClient() { function onAjaxRequestStateChange(http) { try { if (http.readyState == 4) { + activeAjaxRequests--; + checkAjaxRequestsState(); if (http.status == 0 && usesCASAuthentication) { recoveryRequest = http; var urlstr = ApplicationBaseURL; @@ -258,8 +260,6 @@ function onAjaxRequestStateChange(http) { else if (activeAjaxRequests > 0) { if (!http.aborted) http.callback(http); - activeAjaxRequests--; - checkAjaxRequestsState(); http.onreadystatechange = Prototype.emptyFunction; http.callback = Prototype.emptyFunction; http.callbackData = null; From 92de1e148478048c433d1ec9e59472a62820d207 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Thu, 12 Aug 2010 17:42:33 +0000 Subject: [PATCH 58/66] Monotone-Parent: 73d26bfc7c0fe2155957f4be90b7df5a5a376b10 Monotone-Revision: 42e59dbc23477959abe04e59a1ccd7784fc744d2 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-08-12T17:42:33 Monotone-Branch: ca.inverse.sogo --- UI/WebServerResources/generic.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/UI/WebServerResources/generic.js b/UI/WebServerResources/generic.js index 1900a3824..01d8f3d18 100644 --- a/UI/WebServerResources/generic.js +++ b/UI/WebServerResources/generic.js @@ -247,9 +247,9 @@ function createHTTPClient() { function onAjaxRequestStateChange(http) { try { if (http.readyState == 4) { - activeAjaxRequests--; - checkAjaxRequestsState(); if (http.status == 0 && usesCASAuthentication) { + activeAjaxRequests--; + checkAjaxRequestsState(); recoveryRequest = http; var urlstr = ApplicationBaseURL; if (!urlstr.endsWith('/')) @@ -260,6 +260,8 @@ function onAjaxRequestStateChange(http) { else if (activeAjaxRequests > 0) { if (!http.aborted) http.callback(http); + activeAjaxRequests--; + checkAjaxRequestsState(); http.onreadystatechange = Prototype.emptyFunction; http.callback = Prototype.emptyFunction; http.callbackData = null; From 0d409a18e6d0023760aeaa7920c4cddc58330a92 Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Thu, 12 Aug 2010 18:04:27 +0000 Subject: [PATCH 59/66] Updated the guides and a test case. Monotone-Parent: 42e59dbc23477959abe04e59a1ccd7784fc744d2 Monotone-Revision: 492a3784d02d332311ae9c0dbe7e41f5f645bd89 Monotone-Author: ludovic@Sophos.ca Monotone-Date: 2010-08-12T18:04:27 Monotone-Branch: ca.inverse.sogo --- Documentation/SOGo Installation Guide.odt | Bin 146864 -> 147210 bytes .../SOGo Mobile Devices Configuration.odt | Bin 21266 -> 20779 bytes Tests/Integration/test-caldav-scheduling.py | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/SOGo Installation Guide.odt b/Documentation/SOGo Installation Guide.odt index 9c6c50d3c6e1ecfcc51b75f4e3b312d45d1ce89b..0271fffd74f5f0ddaa3aa55a07ad5eae9ceb0da9 100644 GIT binary patch delta 37866 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 delta 37510 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 @(m4XPu|a+%Px8_*X!(KyncAU}N* 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 E0RXDQ2LJ#7 diff --git a/Documentation/SOGo Mobile Devices Configuration.odt b/Documentation/SOGo Mobile Devices Configuration.odt index 7ff650d1696b4e0e18b0bcf77205dc7ed5e47c3e..18bb2bf906e6ef954cbd8c75afb7febef600c6f8 100644 GIT binary patch delta 17219 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 diff --git a/Tests/Integration/test-caldav-scheduling.py b/Tests/Integration/test-caldav-scheduling.py index bd9ffb7c6..4588770f0 100755 --- a/Tests/Integration/test-caldav-scheduling.py +++ b/Tests/Integration/test-caldav-scheduling.py @@ -473,7 +473,7 @@ class CalDAVITIPDelegationTest(unittest.TestCase): att_inv = self._getEvent(self.client, "%stest-delegation.ics" % self.attendee1_calendar, 404) del_inv = self._getEvent(self.client, - "%stest-delegation.ics" % self.attendee1_calendar, 404) + "%stest-delegation.ics" % self.attendee1_delegate_calendar, 404) if __name__ == "__main__": sogotests.runTests() From f8e882ae368ca856833a4fe2aa3c06a03023c092 Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Thu, 12 Aug 2010 18:21:21 +0000 Subject: [PATCH 60/66] doc updated Monotone-Parent: 492a3784d02d332311ae9c0dbe7e41f5f645bd89 Monotone-Revision: aa0663eb86f38080e2ab2d20b64f30547adbfa81 Monotone-Author: ludovic@Sophos.ca Monotone-Date: 2010-08-12T18:21:21 Monotone-Branch: ca.inverse.sogo --- .../SOGo Mobile Devices Configuration.odt | Bin 20779 -> 20760 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Documentation/SOGo Mobile Devices Configuration.odt b/Documentation/SOGo Mobile Devices Configuration.odt index 18bb2bf906e6ef954cbd8c75afb7febef600c6f8..2a8d1a850890d285a8724b45f83815fcfb77d0ff 100644 GIT binary patch delta 10913 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 From 9e711ab842616bc6e5fee6ec46cf37914b64d54c Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Thu, 12 Aug 2010 18:29:13 +0000 Subject: [PATCH 61/66] Monotone-Parent: 0176ffcc344892f0535563789b246aea9810ee5e Monotone-Revision: d321de191aecbd58e4ac523caa80a4c05f3a9558 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-08-12T18:29:13 Monotone-Branch: ca.inverse.sogo --- SoObjects/SOGo/SQLSource.h | 2 +- SoObjects/SOGo/SQLSource.m | 15 ++++++++------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/SoObjects/SOGo/SQLSource.h b/SoObjects/SOGo/SQLSource.h index 2a894c367..40f0425f7 100644 --- a/SoObjects/SOGo/SQLSource.h +++ b/SoObjects/SOGo/SQLSource.h @@ -25,7 +25,7 @@ #import -#include "SOGoSource.h" +#import "SOGoSource.h" @class NSArray; @class NSDictionary; diff --git a/SoObjects/SOGo/SQLSource.m b/SoObjects/SOGo/SQLSource.m index aacb36869..07333739d 100644 --- a/SoObjects/SOGo/SQLSource.m +++ b/SoObjects/SOGo/SQLSource.m @@ -20,6 +20,12 @@ * Boston, MA 02111-1307, USA. */ +#define _XOPEN_SOURCE 1 +#include + +#include +#include + #import #import #import @@ -35,14 +41,9 @@ #import #import -#include +#import "SOGoConstants.h" -#include -#include - -#include "SQLSource.h" - -#include "SOGoConstants.h" +#import "SQLSource.h" /** * The view MUST contain the following columns: From 45ce17347223fba52e8cf2ee1fbea36694f39816 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Thu, 12 Aug 2010 18:48:56 +0000 Subject: [PATCH 62/66] Monotone-Parent: d321de191aecbd58e4ac523caa80a4c05f3a9558 Monotone-Revision: 634e37b2a9c65da35917a38f3d78526a3b89c914 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-08-12T18:48:56 Monotone-Branch: ca.inverse.sogo --- Documentation/SOGo Installation Guide.odt | Bin 147210 -> 146367 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Documentation/SOGo Installation Guide.odt b/Documentation/SOGo Installation Guide.odt index 0271fffd74f5f0ddaa3aa55a07ad5eae9ceb0da9..183d4d3b3cccaec4fc29f88e620f0a9387b00025 100644 GIT binary patch delta 37546 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 delta 38437 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 From 0edb882b43e47b4541e7bdb0917968120088cb62 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Thu, 12 Aug 2010 20:18:11 +0000 Subject: [PATCH 63/66] Monotone-Parent: 634e37b2a9c65da35917a38f3d78526a3b89c914 Monotone-Revision: a27c1cf8fb89e01d812714ba8c6294023c4e5fdf Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-08-12T20:18:11 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 4 ++++ SoObjects/Mailer/SOGoMailAccount.m | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index e4f4d81e5..924c965ec 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2010-08-12 Wolfgang Sourdeau + * SoObjects/Mailer/SOGoMailAccount.m (-updateFilters): when the + first login attempt fails, we must request a new password to the + authenticator (as intended originally). + * UI/WebServerResources/generic.js: (onAjaxRequestStateChange): when using CAS authentication and when the return code is 0 and when the request status is 4, chances are that the initial ajax diff --git a/SoObjects/Mailer/SOGoMailAccount.m b/SoObjects/Mailer/SOGoMailAccount.m index f94e0be8d..5a38ed1fc 100644 --- a/SoObjects/Mailer/SOGoMailAccount.m +++ b/SoObjects/Mailer/SOGoMailAccount.m @@ -356,7 +356,7 @@ static NSString *sieveScriptName = @"sogo"; result = [client login: [[self imap4URL] user] password: password]; if (![[result valueForKey:@"result"] boolValue]) { [self errorWithFormat: @"failure. Attempting with a renewed password."]; - password = [self imap4PasswordRenewed: NO]; + password = [self imap4PasswordRenewed: YES]; result = [client login: [[self imap4URL] user] password: password]; } From 849d4ae3bc80925bd9188fa07b41160b70385272 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Thu, 12 Aug 2010 20:19:15 +0000 Subject: [PATCH 64/66] Monotone-Parent: a27c1cf8fb89e01d812714ba8c6294023c4e5fdf Monotone-Revision: 1219efce31ce5750f796ef3beb5fb03632233c2d Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-08-12T20:19:15 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 4 ++++ SoObjects/SOGo/SOGoDomainDefaults.h | 1 + SoObjects/SOGo/SOGoDomainDefaults.m | 5 +++++ 3 files changed, 10 insertions(+) diff --git a/ChangeLog b/ChangeLog index 924c965ec..4eca5bfbd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2010-08-12 Wolfgang Sourdeau + * SoObjects/SOGo/SOGoDomainDefaults.m (-mailCheckAllUnseenCounts): + new method returning whether the unseen count of all mailboxes + should be checked. + * SoObjects/Mailer/SOGoMailAccount.m (-updateFilters): when the first login attempt fails, we must request a new password to the authenticator (as intended originally). diff --git a/SoObjects/SOGo/SOGoDomainDefaults.h b/SoObjects/SOGo/SOGoDomainDefaults.h index 66c04eabe..ac9cb73c2 100644 --- a/SoObjects/SOGo/SOGoDomainDefaults.h +++ b/SoObjects/SOGo/SOGoDomainDefaults.h @@ -62,6 +62,7 @@ - (NSArray *) calendarDefaultRoles; - (NSArray *) contactsDefaultRoles; - (NSArray *) mailPollingIntervals; +- (BOOL) mailCheckAllUnseenCounts; - (NSString *) calendarDefaultCategoryColor; diff --git a/SoObjects/SOGo/SOGoDomainDefaults.m b/SoObjects/SOGo/SOGoDomainDefaults.m index 02445a855..3338bfdb6 100644 --- a/SoObjects/SOGo/SOGoDomainDefaults.m +++ b/SoObjects/SOGo/SOGoDomainDefaults.m @@ -198,6 +198,11 @@ return [self arrayForKey: @"SOGoMailPollingIntervals"]; } +- (BOOL) mailCheckAllUnseenCounts +{ + return [self boolForKey: @"SOGoMailCheckAllUnseenCounts"]; +} + - (NSString *) smtpServer { return [self stringForKey: @"SOGoSMTPServer"]; From 23b1304e15bb26f8c15219147bcbb430ad46be86 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Thu, 12 Aug 2010 20:19:25 +0000 Subject: [PATCH 65/66] Monotone-Parent: 1219efce31ce5750f796ef3beb5fb03632233c2d Monotone-Revision: 66f9ab1d22f9d44794e9868fe8705ef4777e0012 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-08-12T20:19:25 Monotone-Branch: ca.inverse.sogo --- Documentation/SOGo Installation Guide.odt | Bin 146367 -> 146511 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Documentation/SOGo Installation Guide.odt b/Documentation/SOGo Installation Guide.odt index 183d4d3b3cccaec4fc29f88e620f0a9387b00025..3b580f4f2c5e161775ffa6f9c603eb5300d18ac8 100644 GIT binary patch delta 29439 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 From 25fe7bbe9ed50b30fec6a8e1523b3bdc1bf8406b Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Thu, 12 Aug 2010 20:51:10 +0000 Subject: [PATCH 66/66] Monotone-Parent: 66f9ab1d22f9d44794e9868fe8705ef4777e0012 Monotone-Revision: e16807404ac6ea20632ee7e0e21ae2db34830540 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-08-12T20:51:10 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 25 ++++- UI/MailerUI/UIxMailAccountActions.h | 1 - UI/MailerUI/UIxMailAccountActions.m | 53 +--------- UI/MailerUI/UIxMailFolderActions.m | 49 +++++++++ UI/MailerUI/UIxMailMainFrame.m | 15 +-- UI/MailerUI/product.plist | 10 +- UI/Templates/MailerUI/UIxMailMainFrame.wox | 4 +- UI/WebServerResources/MailerUI.js | 115 ++++++++++----------- UI/WebServerResources/MailerUIdTree.js | 12 +-- UI/WebServerResources/dtree.js | 9 +- UI/WebServerResources/generic.css | 2 +- 11 files changed, 157 insertions(+), 138 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4eca5bfbd..3be02f72c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,28 @@ 2010-08-12 Wolfgang Sourdeau + * UI/WebServerResources/MailerUIdTree.js: (getMailboxNode): fixed + method to return unfolded nodes too. + + * UI/WebServerResources/MailerUI.js: (updateUnseenCount): renamed + from "updateStatusFolders" and improved to use DOM methods. + + * UI/WebServerResources/dtree.js: (Node): removed the "hasUnseen" + parameter. + + * UI/MailerUI/UIxMailAccountActions.m (-listMailboxes): make use + of the "application/json" content type in the response. + + * UI/MailerUI/UIxMailFolderActions.m: (-unseenCount): renamed and + moved implementation of the -[UIxMailAccountActions statusFolders] + method, splitted thereof since we now execute the method on all + mail folders. + + * UI/MailerUI/UIxMailMainFrame.m (-defaultColumnsOrder): removed + accessor, made obsolete by the new propagation mechanism of user + defaults. + (-getUnseenCountForAllFolders): new accessor that returns the + value below as a string value. + * SoObjects/SOGo/SOGoDomainDefaults.m (-mailCheckAllUnseenCounts): new method returning whether the unseen count of all mailboxes should be checked. @@ -15,7 +38,7 @@ memcached. In FF 3.5 and above, a bug prevents the initial cookie from being given back to the reauthentication redirect from an AJAX request. Therefore we open a window that will do this for us - and will close one the authentication has succeeded again. + and will close one the authentication has succeeded again. * UI/MainUI/SOGoRootPage.m (-revoverAction): new fake action that perform the CAS redirection and then trigger the respawn of the diff --git a/UI/MailerUI/UIxMailAccountActions.h b/UI/MailerUI/UIxMailAccountActions.h index 72ccf6b6d..9e98ae5fb 100644 --- a/UI/MailerUI/UIxMailAccountActions.h +++ b/UI/MailerUI/UIxMailAccountActions.h @@ -35,7 +35,6 @@ NSString *trashFolderName; } -- (WOResponse *) statusFoldersAction; - (WOResponse *) listMailboxesAction; @end diff --git a/UI/MailerUI/UIxMailAccountActions.m b/UI/MailerUI/UIxMailAccountActions.m index a26443fbd..c62275bcc 100644 --- a/UI/MailerUI/UIxMailAccountActions.m +++ b/UI/MailerUI/UIxMailAccountActions.m @@ -31,8 +31,6 @@ #import #import -#import - #import #import #import @@ -124,50 +122,6 @@ return folders; } -- (NSDictionary *) _statusFolders -{ - EOQualifier *searchQualifier; - NSArray *searchResult; - NSDictionary *imapResult; - NGImap4Client *client; - NSNumber *unseen; - SOGoMailFolder *inbox; - SOGoMailAccount *co; - - co = [self clientObject]; - inbox = [co inboxFolderInContext: context]; - client = [[inbox imap4Connection] client]; - unseen = nil; - - if ([client select: [inbox relativeImap4Name]]) - { - searchQualifier = [EOQualifier qualifierWithQualifierFormat: @"flags = %@ AND not flags = %@", @"unseen", @"deleted"]; - imapResult = [client searchWithQualifier: searchQualifier]; - searchResult = [[imapResult objectForKey: @"RawResponse"] objectForKey: @"search"]; - unseen = [NSNumber numberWithInt: [searchResult count]]; - } - - if (!unseen) - unseen = [NSNumber numberWithInt: 0]; - - return [NSDictionary dictionaryWithObjectsAndKeys: unseen, @"unseen", nil]; -} - -- (WOResponse *) statusFoldersAction -{ - WOResponse *response; - NSDictionary *data; - - response = [self responseWithStatus: 200]; - data = [self _statusFolders]; - - [response setHeader: @"text/plain; charset=utf-8" - forKey: @"content-type"]; - [response appendContentString: [data jsonRepresentation]]; - - return response; -} - - (WOResponse *) listMailboxesAction { SOGoMailAccount *co; @@ -214,13 +168,12 @@ // The parameter order is important here, as if the server doesn't support // quota, inboxQuota will be nil and it'll terminate the list of objects/keys. data = [NSDictionary dictionaryWithObjectsAndKeys: folders, @"mailboxes", - [self _statusFolders], @"status", inboxQuota, @"quotas", nil]; - response = [self responseWithStatus: 200]; - [response setHeader: @"text/plain; charset=utf-8" + response = [self responseWithStatus: 200 + andString: [data jsonRepresentation]]; + [response setHeader: @"application/json" forKey: @"content-type"]; - [response appendContentString: [data jsonRepresentation]]; return response; } diff --git a/UI/MailerUI/UIxMailFolderActions.m b/UI/MailerUI/UIxMailFolderActions.m index 0723d21e4..1d530e236 100644 --- a/UI/MailerUI/UIxMailFolderActions.m +++ b/UI/MailerUI/UIxMailFolderActions.m @@ -24,6 +24,7 @@ #import #import #import +#import #import #import @@ -31,6 +32,7 @@ #import #import #import +#import #import #import @@ -585,4 +587,51 @@ return response; } +- (NSDictionary *) _unseenCount +{ + EOQualifier *searchQualifier; + NSArray *searchResult; + NSDictionary *imapResult; + NGImap4Connection *connection; + NGImap4Client *client; + int unseen; + SOGoMailFolder *folder; + + folder = [self clientObject]; + + connection = [folder imap4Connection]; + client = [connection client]; + + if ([connection selectFolder: [folder imap4URL]]) + { + searchQualifier + = [EOQualifier qualifierWithQualifierFormat: @"flags = %@ AND not flags = %@", + @"unseen", @"deleted"]; + imapResult = [client searchWithQualifier: searchQualifier]; + searchResult = [[imapResult objectForKey: @"RawResponse"] objectForKey: @"search"]; + unseen = [searchResult count]; + } + else + unseen = 0; + + return [NSDictionary + dictionaryWithObject: [NSNumber numberWithInt: unseen] + forKey: @"unseen"]; +} + +- (WOResponse *) unseenCountAction +{ + WOResponse *response; + NSDictionary *data; + + response = [self responseWithStatus: 200]; + data = [self _unseenCount]; + + [response setHeader: @"text/plain; charset=utf-8" + forKey: @"content-type"]; + [response appendContentString: [data jsonRepresentation]]; + + return response; +} + @end diff --git a/UI/MailerUI/UIxMailMainFrame.m b/UI/MailerUI/UIxMailMainFrame.m index 67fe617c0..abca1d46c 100644 --- a/UI/MailerUI/UIxMailMainFrame.m +++ b/UI/MailerUI/UIxMailMainFrame.m @@ -111,12 +111,6 @@ return [names jsonRepresentation]; } -- (NSString *) defaultColumnsOrder -{ - return [[[self columnsDisplayOrder] objectsForKey: @"value" - notFoundMarker: @""] jsonRepresentation]; -} - - (NSString *) pageFormURL { NSString *u; @@ -619,5 +613,14 @@ return [self labelForKey: [currentColumn objectForKey: @"value"]]; } +- (NSString *) getUnseenCountForAllFolders +{ + SOGoDomainDefaults *dd; + + dd = [[context activeUser] domainDefaults]; + + return ([dd mailCheckAllUnseenCounts] ? @"true" : @"false"); +} + @end /* UIxMailMainFrame */ diff --git a/UI/MailerUI/product.plist b/UI/MailerUI/product.plist index 5429ca2bc..abd4c0c67 100644 --- a/UI/MailerUI/product.plist +++ b/UI/MailerUI/product.plist @@ -171,6 +171,11 @@ protectedBy = "ReadAcls"; pageName = "UIxMailUserRightsEditor"; }; + unseenCount = { + protectedBy = "View"; + actionClass = "UIxMailFolderActions"; + actionName = "unseenCount"; + }; saveUserRights = { protectedBy = "Change Permissions"; pageName = "UIxMailUserRightsEditor"; @@ -383,11 +388,6 @@ actionClass = "UIxMailFolderActions"; actionName = "createFolder"; }; - statusFolders = { - protectedBy = "View"; - actionClass = "UIxMailAccountActions"; - actionName = "statusFolders"; - }; }; }; diff --git a/UI/Templates/MailerUI/UIxMailMainFrame.wox b/UI/Templates/MailerUI/UIxMailMainFrame.wox index ccc68d7f2..1d6a93e43 100644 --- a/UI/Templates/MailerUI/UIxMailMainFrame.wox +++ b/UI/Templates/MailerUI/UIxMailMainFrame.wox @@ -11,9 +11,9 @@ const:userSettingsKeys="Mail" const:jsFiles="dtree.js,MailerUIdTree.js,SOGoAutoCompletion.js,SOGoResizableTable.js,SOGoMailDataSource.js,SOGoDataTable.js">