1 2007-11-03 Ludovic Marcotte <ludovic@inverse.ca>
3 * UI/Scheduler/UIxAppointmentEditor.m
4 Fixed monthly recurrences support.
6 2007-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
8 * SoObjects/Appointments/SOGoAppointmentObject.m
9 ([SOGoAppointmentObject -deleteWithBaseSequence:]): an email was
10 sent when modifying an event, when the event was considered
11 relevant. The same thing is now implemented for event deletion.
13 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
14 -primaryFetchProfile]): make sure that the deserialized "values"
15 is an instance of NSMutableDictionary, otherwise we override it
18 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
19 -contentForReply]): make use of the SOGoMailReply WO page.
21 * SoObjects/Mailer/SOGoMailReply.[hm]: new class module copied
22 from SOGoMailForward to handle mail replies instead. Only three
23 methods remaining: date, from and messageBody. The latter is
26 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
27 -fetchMailForForwarding:sourceMail]): fetch attachments for
30 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
31 -hasMessageAttachment]): initialize hasAttachment with "NO" to
32 avoid false positives.
34 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event])
35 ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]):
36 set title to an empty string where the event/task summary is null.
38 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
39 -setHeaders:newHeaders]): make sure there is a message id in the
40 headers dictionary, if not, generate one.
41 ([SOGoDraftObject -fetchMailForEditing:sourceMail]): retrieve the
42 message id from the existing draft.
43 ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): store the
44 message id in the header map.
46 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
47 -deleteFolderAction]): no longer prefix the target folder with
50 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
51 -listMailboxesAction]): base the folder type on the folder
54 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
55 -lookupName:_keyinContext:acquire:_acquire]): compare the full
56 traversal to the potential looked up folder with the special
57 folder names and return an object with the appropriate
58 SOGoMailFolder subclass.
60 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
61 -traversalFromMailAccount]): don't prepend the whole string with
64 * SoObjects/Mailer/SOGoMailAccount.m
65 ([-lookupSentFolder:_keyinContext:_ctx])
66 ([-lookupDraftsFolder:_keyinContext:_ctx])
67 ([-lookupTrashFolder:_keyinContext:_ctx])
68 ([-lookupFiltersFolder:_key:_ctx]): removed methods.
69 ([SOGoMailAccount -inboxFolderNameInContext:])
70 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
71 ([SOGoMailAccount -sentFolderNameInContext:])
72 ([SOGoMailAccount -trashFolderNameInContext:]): no longer prefixes
73 the resulting name with "prefix" since we might return a nested
75 ([SOGoMailAccount -allFolderPaths]): prefixes all special folder
76 names with "/". Sorts the resulting folder list with
77 localizedCaseInsensitiveCompare: instead of
78 caseInsensitiveCompare:. No longer use the -[lookupXXX] methods
79 that were removed, instead, we choose the appropriate class
80 depending on the folder name. And since we are in SOGoMailAccount,
81 we don't have to compute a traversal path to match the key with
84 -folderWithTraversal:traversalandClassName:className]): new method
85 that returns an instance of the specified SOGoMailFolder subclass,
86 based on the traversal path passed as parameter.
87 ([SOGoMailAccount -inboxFolderInContext:_ctx])
88 ([SOGoMailAccount -draftsFolderInContext:_ctx])
89 ([-sentFolderInContext:_ctx])
90 ([SOGoMailAccount -trashFolderInContext:_ctx]): invoke the new
91 -folderWithTraversal:andClassName: method described above.
93 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
94 -primaryFetchProfile]): make use of -[NSPropertyListSerialization
95 propertyListFromData:mutabilityOption:format:errorDescription:] to
96 deserialize the plist. Removed variant for libFoundation since it
97 should support the above.
98 ([AgenorUserDefaults -generateSQLForInsert])
99 ([AgenorUserDefaults -generateSQLForUpdate]): make use of
100 -[NSPropertyListSerialization
101 dataFromPropertyList:format:errorDescription:] to serialize the
102 plist. Removed variant for libFoundation since it should support
103 the above. Escape the backslashes from the resulting string.
105 2007-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
107 * SoObjects/Mailer/SOGoMailFolder.[hm]: added a new subclass of
108 SOGoMailFolder: SOGoMailSpecialFolder.
110 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
111 -traversalFromMailAccount]): overridden method that returns the
112 initialized mutable string.
113 ([SOGoMailAccount -allFolderPaths]): take the special folder paths
114 with -traversalFromMailAccount and reposition them at the
115 beginning of the list. By creating the special folders during that
116 request, we also make sure that the folder exists thanks to the
117 new initialisation method of the new "SOGoSpecialMailFolder"
119 ([SOGoMailAccount -lookupSentFolder:_keyinContext:_ctx]): new
121 ([SOGoMailAccount -lookupTrashFolder:_keyinContext:_ctx]): new
123 ([SOGoMailAccount -lookupName:_keyinContext:acquire:_flag]): no
124 longer use lookupImap4Folder.
125 ([SOGoMailAccount -lookupImap4Folder:_keyinContext:_ctx]): removed
128 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
129 -traversalFromMailAccount]): new method that returns the full
130 IMAP4 path to the object.
132 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): retain
133 "superUsernames" after fetching it from the ud.
135 2007-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
137 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
138 -eventsListAction]): substitude the start and end date with their
139 UTC counterpart, taking into account the offset from UTC related
140 to those dates instead of the current one. This renders
141 -[UIxCalMainView -userUTCOffset] obsolete because the computings
142 that occured in javascript are now done server-side.
144 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView -userUTCOffset]):
145 removed obsolete method.
147 * SoObjects/Mailer/NSString+Mail.m ([NSString -htmlToText]): new
148 method converting html content to plain text.
150 * SoObjects/Mailer/NSString+Mail.[hm]: new category module
151 enhancing NSString with utility methods pertaining to mail handling.
153 * SoObjects/Mailer/SOGoMailObject.m
154 ([-shouldFetchPartOfType:_typesubtype:_subtype]): removed obsolete method.
156 -addRequiredKeysOfStructure:infopath:ptoArray:keysacceptedTypes:types]):
157 modified method to be always recursive and to take an array of the
158 accepted mime-types as parameter. The returned array now contains
159 the mime-type as well as the part keys.
161 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
162 -contentForEditingOnParts:_prtskeys:_k]): removed obsolete method.
163 ([SOGoMailObject -contentForEditing]): rewrote method to take into
164 account the first text/plain part or the first text/html part
165 converted to text/plain with our new -[NSString htmlToText]
168 * UI/MailerUI/UIxMailActions.m ([-replyToAllAction]): invoke
169 "replyToAll:" with YES as parameter instead of NO.
171 2007-10-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
173 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
174 -davContentType]): ignore any possible parameter taken from the
175 mime-info of the body part.
177 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
178 -lastFirstMessageNumber]): new accessor that returns the first
179 message number of the last series of messages.
180 ([UIxMailListView -fetchKeys]): request the bodystructure for each
182 ([UIxMailListView -hasMessageAttachment]): extract the attachment
183 information from the message bodystructure.
185 2007-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
187 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
188 -GETAction:]): use the "application/octet-stream" mime type for
189 elements of type "application/x-xpinstall" to avoid confusing
192 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -messageCheckList])
193 ([UIxPreferences -itemMessageCheckText])
194 ([UIxPreferences -userMessageCheck])
195 ([UIxPreferences -setUserMessageCheck:newMessageCheck]): new
196 methods for handling the retrieval of new messages automatically.
198 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -messageCheck]): new method
199 that returns the interval of time between automatic message
202 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
203 -defaultAction]): now expunges the last folder marked for expunge.
205 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
206 -trashInContext:_ctx]): now marks the container folder for
209 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
210 -markForExpunge]): new method that marks the folder for the next
211 automatic expunge operation in the user settings.
212 ([SOGoMailFolder -expungeLastMarkedFolder]): new methods that
213 takes the last folder marked for expunge, expunges it and removes
214 it from the user settings, if it exists.
216 2007-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
218 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
219 -messageSubjectCellStyleClass]): added support for replied,
220 forwarded, forwarded and replied mails.
222 * SoObjects/Mailer/NSData+Mail.m ([NSData
223 -bodyDataFromEncoding:encoding]): new utility method that decodes
224 the NSData instance properly depending on the encoding string
227 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
228 -fetchFileAttachmentKeys]): fetch the attachment encoding as well.
230 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
231 -stringForData:_datapartInfo:_info]): simplified by invoking
232 -bodyDataFromEncoding: from our new NSData category methods.
234 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
235 -fetchMailForEditing:sourceMail]): work-around a bug in SOPE-mime
236 where only the body part of the first of the keys fetched was
237 returned. Also decodes the body parts properly following their
240 * SoObjects/Mailer/NSData+Mail.[hm]: new extension module that
241 extends the NSData class with utility methods useful for handling
244 2007-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
246 * SoObjects/SOGo/NSArray+Utilities.m
247 ([NSArray -stringsWithFormat:format]): replace instances of NSNull
250 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
251 -keysWithFormat:keyFormat]): replace instances of NSNull with
254 * SoObjects/Contacts/SOGoContactLDAPFolder.m: if "displayName" is
255 empty, use "c_cn" instead.
257 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
258 ([SOGoMailAccount -draftsFolderInContext:_ctx])
259 ([SOGoMailAccount -sentFolderInContext:_ctx]): no longer make use
260 of the "SOGoSpecialFoldersInRoot" user defaults. The folders will
261 no always be specified from the root instead of sometimes from the
264 2007-10-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
266 * UI/Common/UIxPageFrame.m ([UIxPageFrame -commonLocalizableStrings])
267 ([UIxPageFrame -productLocalizableStrings]): invoke the new
268 +[SOGoUser language] method if the user is nil.
270 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +language]): new method
271 that returns any generically-found language.
272 ([SoUser -language]): modified to call the above.
273 ([SOGoUser -language]): modified to call the above if the user
274 language has a null length.
276 * SoObjects/Contacts/SOGoContactLDIFEntry.m ([SOGoContactLDIFEntry
277 -davEntityTag]): modified to return the "hash" of the vCard string.
279 * UI/MailerUI/UIxMailActions.m ([UIxMailActions
280 -removeAllLabelsAction]): new method that removes all label flags
281 from the associated message.
282 ([UIxMailActions -addLabel1Action]
283 [UIxMailActions -addLabel2Action]
284 [UIxMailActions -addLabel3Action
285 [UIxMailActions -addLabel4Action]
286 [UIxMailActions -addLabel5Action]): new methods that adds label
287 flags to the associated message.
288 ([UIxMailActions -removeLabel1Action]
289 [UIxMailActions -removeLabel2Action]
290 [UIxMailActions -removeLabel3Action
291 [UIxMailActions -removeLabel4Action]
292 [UIxMailActions -removeLabel5Action]): new methods that removes
293 label flags from the associated message.
295 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -msgLabels]):
296 new accessor that returns the labels associated with the message.
298 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
299 -allFolderPaths]): new method that returns all the paths of all
300 the subfolders of the folder object.
301 ([SOGoMailFolder -allFolderURLs]): new method replacing
304 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
305 -aclsForUser:uid]): object inherits the 'SOGoRole_ObjectEditor'
306 role from its parent folder.
308 2007-10-19 Francis Lachapelle <flachapelle@inverse.ca>
310 * SoObjects/SOGo/SOGoUser.m
311 ([SOGoUser -rolesForObject:objectinContext:context]): allow
312 multiple super usernames to be defined. The user default
313 SOGoSuperUsername is renamed SOGoSuperUsernames and must be
316 2007-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
318 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
319 -userInContext:]): override the super method by returning
320 anonymous if the super returns nil.
322 * UI/Common/UIxPageFrame.m ([UIxPageFrame
323 -productLocalizableStrings]): new method that returns the
324 product-specific translation dictionary as a JSON hash.
325 ([UIxPageFrame -commonLocalizableStrings]): same as above but for
326 the "Common" framework.
327 ([UIxPageFrame -setJsFiles:newJSFiles]): new setter that enables
328 the requestor components to require additional Javascript files.
329 This is useful now that all the scripts are loaded at the end of
331 ([UIxPageFrame -additionalJSFiles]): new getter related to the
334 2007-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
336 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -copyAction]):
337 implemented new web method.
339 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
340 -copyToFolderNamed:folderNameinContext:]): new method with the
341 code cut/pasted from -moveToFolderNamed:inContext:.
342 ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]):
343 modified to use the code from -copyToFolderNamed:inContext:, which
344 is common between the two actions.
346 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
347 ([SOGoMailAccount -sentFolderNameInContext:])
348 ([SOGoMailAccount -trashFolderNameInContext:]): modified to take
349 the user settings into account.
351 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -setAsDraftsFolderAction])
352 ([UIxMailFolderActions -setAsSentFolderAction])
353 ([UIxMailFolderActions -setAsTrashFolderAction]): new web methods
354 that change the purpose of the active folder to "Sent", "Drafts"
357 * UI/SOGoUI/SOGoACLAdvisory.m ([SOGoACLAdvisory -subject]):
358 returns the subject as quoted-printable.
360 * UI/SOGoUI/SOGoACLAdvisory.[hm]: added two intermediary classes:
361 SOGoACLAdditionAdvisory and SOGoACLRemovalAdvisory implementing
362 the "aclMethod" method for the subsequent language-dependent
365 * UI/SOGoUI/SOGoFolderAdvisory.m ([SOGoFolderAdvisory -subject]):
366 returns the subject as quoted-printable.
368 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
369 -dealloc]): release item, aptStartDate and aptEndDate.
371 2007-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
373 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
374 -initWithName:newNameinContainer:newContainer]): the owner of a
375 shared folder is set to "nobody" by default.
377 * UI/Common/UIxAclEditor.m ([UIxAclEditor -hasOwner]): new method
378 that returns whether the object has an owner or not.
380 2007-10-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
382 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
383 the folder even if the current user is not its owner.
385 2007-10-10 Ludovic Marcotte <ludovic@inverse.ca>
387 * We now send advisory emails when folders
388 are created / deleted.
390 * Fixed the sending of advisory emails upon
391 ACL changes on folders.
393 2007-10-10 Ludovic Marcotte <ludovic@inverse.ca>
395 * UI/Scheduler/UIxComponentEditor.m
396 Implemented event/task priority support.
398 * SoObjects/Contacts/SOGoContactGCSFolder.m
399 Added CardDAV support.
401 * SoObjects/SOGo/LDAPUserManager.m and SOGoUser.m
402 Implemented From: based on LDAP results based on
403 the MailFieldNames attribute (an array) specified
404 in every LDAP-based authentication sources.
406 * UI/MailPartViewers/UIxMailPartTextViewer.m and
407 UI/WebServerResources/MailerUI.css
408 We avoid replacing "\r\n" and "\n" with <br /> and
409 rather use CSS capabilities for proper formatting.
410 This is _WAY_ faster on very large mails.
412 2007-10-10 Francis Lachapelle <flachapelle@inverse.ca>
414 * UI/Scheduler/UIxComponentEditor.m
415 ([UIxComponentEditor -componentCalendar]): returns the calendar
416 object of the current event.
418 2007-10-05 Ludovic Marcotte <ludovic@inverse.ca>
420 * UI/WebServerResources/MailerUI.js
421 We check if at least one message is selected
422 before performing a Reply/Reply All/Forward
424 * SoObjects/Appointments/SOGoAppointmentFolder.m
425 and others - implemented support for recurring
426 events (with some known limitations right now,
427 all soon to be fixed).
429 2007-10-04 Francis Lachapelle <flachapelle@inverse.ca>
431 * Main/SOGo.m ([SOGo -isUserName:_keyinContext:_ctx]): removed
432 the constraint that a username can't start with a digit.
434 2007-10-02 Francis Lachapelle <flachapelle@inverse.ca>
436 * Moved SOPE/sope-gdl1/GDLContentStore from the default trunk
437 repository to Inverse's branch.
439 2007-09-28 Francis Lachapelle <flachapelle@inverse.ca>
441 * SoObjects/Mailer/SOGoDraftObject.m
442 ([SOGoDraftObject -isValidAttachmentName:_name]): removed
443 constraint on space in file name.
444 ([SOGoDraftObject -saveAttachment:_attachwithMetadata:metadata]):
445 now removes from file name all characters preceding a backslash.
446 This happens with IE7 because the complete attachment file path
449 2007-09-25 Francis Lachapelle <flachapelle@inverse.ca>
451 * SoObjects/Appointments/SOGoAptMailNotification.m
452 ([SOGoAptMailNotification -appointmentURL]): set personal as the
453 default calendar where to add the event.
455 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
456 activate the SOGoUIxDefaultModule user defaults.
458 2007-09-21 Francis Lachapelle <flachapelle@inverse.ca>
460 * UI/SOGoUI/UIxComponent.m
461 ([UIxComponent -shortUserNameForDisplay]): returns the string
462 "wrongusernamepassword" when authentication failed.
464 2007-09-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
466 * UI/MailPartViewers/UIxMailPartICalViewer.m
467 ([UIxMailPartICalViewer -calendarFolder]): returns the "personal"
468 entry of the Calendars parent folder.
470 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
471 -messageSubject]): new accessor method to work-around a problem
472 within SOPE where a subject could be returned as an NSData.
474 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
475 -appendPersonalSources]): make sure the value of the "c_path4" of
476 the returned rows are not NSNull, otherwise, discard them.
478 2007-09-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
480 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
481 -compare:otherFolder]): new overriden method that compares two
482 contact foldes based on their class and then transfer the control
483 to the super method in SOGoFolder.
485 * SoObjects/Contacts/SOGoContactLDAPFolder.m
486 ([SOGoContactLDAPFolder -compare:otherFolder]): new method that
487 compare two contact folders based on their class and then their
490 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -compare:otherFolder]):
491 new method for sorting folders. The folders are compared based on
492 their ownership, whether they are a main folder and finally
493 depending on their display name.
495 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
496 -pathArrayToSOGoObject]): do not reorder the paths if the third
497 element is an instance of NSNull.
499 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
500 -subFolders]): returns a sorted array using the "compare:"
503 2007-09-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
505 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
506 -calendars]): also returns the owner of the listed folders.
508 * SoObjects/Appointments/SOGoAppointmentFolder.m
509 ([-deleteEntriesWithIds:ids]): moved method into SOGoFolder.
511 * UI/Scheduler/UIxCalMainView.m ([-batchDeleteAction]): moved
512 method into UIxFolderActions.
514 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
515 -fetchFreeBusyInfosFrom:_startDateto:_endDate]): fetch the
516 freebusy info from the "personal" calendar.
518 * UI/Common/UIxParentFolderActions.m ([UIxParentFolderActions
519 -createFolderAction]): new standardized method for requesting
520 folder creations among gcs-based modules.
522 * UI/Common/UIxParentFolderActions.[hm]: new action class module.
524 * SoObjects/Appointments/SOGoAppointmentFolders.m: new class
525 module, equivalent to the SOGoParentFolder's child
526 SOGoContactFolders, but for calendars.
528 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -labelForKey:key]): new
529 method that returns translated strings for controller bundles
530 (same as what UIxComponent does for view bundles).
531 ([SOGoObject -pathArrayToSOGoObject]): new method that returns
532 the real path to a subscribed folder (if subscribed).
533 ([SOGoObject +globallyUniqueObjectId]): move method from SOGoFolder.
534 ([SOGoObject -globallyUniqueObjectId]): new instance method
535 calling its class equivalent.
537 2007-09-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
539 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage -defaultAction]): test
540 whether the user is logged in and if so, redirect to his/her
542 ([SOGoRootPage -appendToResponse:inContext:]): removed useless
545 2007-09-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
547 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
548 +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
550 ([SOGoFolder -displayName]): new method.
551 ([SOGoFolder -delete]): accept to proceed only if nameInContainer
554 * SoObjects/Contacts/SOGoContactLDAPFolder.m
555 ([SOGoContactLDAPFolder
556 +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
557 renamed from "contactFolderWithName..." for compatibility with SOGoFolder.
559 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
560 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
561 removed method, reimplemented in SOGoFolder.
562 ([SOGoContactGCSFolder -displayName]): removed method,
563 reimplemented in SOGoFolder.
564 ([-delete]): removed method, modified in SOGoFolder.
566 * SoObjects/Contacts/SOGoContactFolders.[hm]: modified class to be
567 a subclass of SOGoParentFolder.
569 * SoObjects/SOGo/SOGoParentFolder.[hm]: new class module derived
570 from SOGoContactFolders and modified to be more content-independent.
572 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -markMessageUnreadAction])
573 ([UIxMailActions -markMessageReadAction]): new methods moved from
574 UIxMailListView and adapted to invoke the client object directly,
575 since the previous versions had to to a lookup from the parent
578 * UI/MailerUI/UIxMailListView.m ([-markMessageUnreadAction]): move
579 method into UIxMailActions.
580 ([-markMessageReadAction]): same as above.
581 ([-viewAction]): removed useless method.
582 ([-javaScriptOK]): removed useless method.
583 ([-isJavaScriptRequest]): removed useless method.
584 ([-lookupActiveMessage]): removed useless method.
586 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
587 -responseWithStatus:status]): new method that returns a WOResponse
588 initialized with the specified status code.
589 ([WODirectAction -responseWith204]): new method that invokes the
590 above one with "204" as parameter.
591 ([WODirectAction -redirectToLocation:newLocation]): rewrote method
592 to make use of -responseWithStatus:.
594 * UI/SOGoUI/UIxComponent.m ([UIxComponent -responseWith204]): new
595 method that returns a WOResponse initialized with the 204 status
598 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sortedUIDs]):
599 always use a "not deleted" search qualifier along with the user
600 qualifier (if present).
602 2007-09-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
604 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
605 -contactSearchAction]): only return the records which have an
608 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
609 -trashInContext:_ctx]): no longer expunge the mailbox after
610 marking a message deleted.
611 ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]): same
614 * UI/MailerUI/UIxMailView.m ([-deleteAction]): removed method.
615 ([-trashAction]): moved method into UIxMailActions.
616 ([-moveAction]): moved method into UIxMailActions.
618 2007-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
620 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
621 ([_UIxHTMLMailContentHandler
622 -endElement:_localNamenamespace:_nsrawName:_rawName]): remove HTML
623 comments from the CSS code, do not add the CSS code to the body
624 content and remove references of body from the CSS declarations.
625 ([UIxMailPartHTMLViewer -cssContent]): new accessor method.
626 ([UIxMailPartHTMLViewer -flatContentAsString]): separated code
627 common with cssContent in a different method and invoke it only
630 * UI/MainUI/SOGoRootPage.[hm]: made a subclass of UIxComponent
631 instead of UIxPageFrame.
633 2007-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
635 * UI/MainUI/SOGoRootPage.m ([-defaultAction]): commented out.
636 ([-appendToResponse:responseinContext:ctx]): commented out.
637 ([SOGoRootPage -connectURL]): new accessor that returns the full
638 url the the "connect" method.
639 ([-connectAction]): rewrote method to return a properly formatted
640 auth. cookie based on the username and password passed as
643 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
644 set the value of the cookie to "discard" and set its expiration
647 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
648 -preprocessCredentialsInContext:context]): consider the user
649 anonymous if the cookie value is "discard".
650 ([SOGoWebAuthenticator
651 -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
652 set the expiration date of the cookie to yesterday.
654 * UI/SOGoUI/UIxComponent.m ([UIxComponent -applicationPath]):
655 returns the path to the application if the clientObject is not a
658 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder +initialize]):
659 moved the requirement of authentication from the SOGo application
662 * SoObjects/Appointments/SOGoAppointmentObject.m
663 ([SOGoAppointmentObject -saveContentString:_iCalbaseSequence:_v]):
664 check whether the new appointment object is still relevant before
665 sending a notification.
667 2007-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
669 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
670 -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
671 render the login page through the SoDefaultRenderer.
673 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage
674 -isPublicInContext:localContext]): new overriden method that
677 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
678 -currentCalendarLogin]): replace css-unsafe characters with _.
680 * UI/SOGoUI/UIxComponent.m ([UIxComponent
681 -shortUserNameForDisplay]): simplified method.
682 ([-user]): removed method since [context activeUser] is as useful.
684 2007-09-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
686 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
687 set the cookie path to "/".
689 * Main/SOGo.m ([SOGo -authenticatorInContext:_ctx]): choose the
690 authenticator based on the request handler key. "dav" returns the
691 SOGoDAVAuthenticator, anything else returns the Web authenticator.
693 * SoObjects/SOGo/SOGoDAVAuthenticator.m: renamed module from
696 * SoObjects/SOGo/SOGoWebAuthenticator.m: new class module
697 implementing a subclass of SoCookieAuthenticator, designed for
698 web-based cookie authentication of users.m
700 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
701 new method that resets the authentification cookie.
703 2007-08-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
705 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
706 -checkLogin:loginToCheckandPassword:passwordToCheck]): initialize
707 didBind to NO to make sure no false authentication is returned if
708 the bind operation is not executed.
710 2007-08-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
712 * SoObjects/Mailer/SOGoDraftObject.m: added support for the
713 "In-Reply-To" header field when replying.
715 * UI/MainUI/SOGoUserHomePage.m: add the "c_" prefix to the quick
716 table field names that are queried.
718 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
719 -iCalStringForFreeBusyInfos:_infosfrom:_startDateto:_endDate]):
720 add the "c_" prefix to the quick table field names that are
723 2007-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
725 * SoObjects/Appointments/SOGoAppointmentFolder.m
726 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): add
727 "personal" to the ocs path of the appointment folder.
729 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
730 -flatContentAsString]): use latin1 when the encoding is not
731 specified, and to reencode data chunk which were not correctly
732 decoded with the original charset.
734 * SoObjects/Appointments/SOGoAppointmentFolder.m ([SOGoAppointmentFolder -aclUsersForObjectAtPath:objectPathArray])
735 ([SOGoAppointmentFolder -aclsForUser:uidforObjectAtPath:objectPathArray])
736 ([SOGoAppointmentFolder -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray])
737 ([SOGoAppointmentFolder
738 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]):
739 override those methods to use the "personal" additional directory.
741 * SoObjects/SOGo/SOGoUserFolder.m ([-ocsPrivateCalendarPath]):
742 append "/personal" to the calendar path to simulate a single
743 calendar in a choice of many.
745 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
746 -lookupName:_keyinContext:acquire:_acquire]): moved the lookup
747 methods back here. Moved the folder existence check here, and do
748 it on self only when the lookup happens for a non-folder object.
749 This permits to accept entries for folders with parents who
752 2007-08-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
754 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
755 -shouldTakeValuesFromRequest:requestinContext:context]): same as
758 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
759 -shouldTakeValuesFromRequest:requestinContext:context]):
760 redesigned method since any method called can be received from a
761 POST or a GET. Instead we check the method call itself and we
762 accept only if it has the "save" prefix.
764 * SoObjects/Appointments/SOGoAptMailNotification.m
765 ([SOGoAptMailNotification -getSubject]): returns the subject an a
766 quoted-printable encoded string, if needed.
768 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
769 -asQPSubjectString:encoding]): moved method into
770 NSString+Utilities.m.
772 2007-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
774 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
775 -messageForwardingList])
776 ([UIxPreferences -itemMessageForwardingText])D
777 ([UIxPreferences -userMessageForwarding])
778 ([UIxPreferences -setUserMessageForwarding:newMessageForwarding]):
779 new template methods for manage the user preference regarding
782 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -language]): change the
783 algorithm to return, in order, the user's defined language or the
784 first browser language or, finally, the default language.
785 ([SOGoUser -messageForwarding]): new method that returns the user
786 preference for message forwarding: "inline" or "attached",
787 defaulting to "attached".
789 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
790 -contentForInlineForward]): new method that returns the content of
791 the message for inline forwarding based on the SOGoMailForward
794 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
795 -fetchMailForForwarding:sourceMail]): check the user preference
796 for message forwarding and compose inline forwarded messages if required.
798 * SoObjects/Appointments/SOGoCalendarComponent.m
799 ([SOGoCalendarComponent
800 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
801 now use a template based on the language returned from the
804 * SoObjects/Mailer/SOGoMailEnglishForward.m: new module containing
805 a subclass of SOGoMailForward for English locale.
807 * SoObjects/Mailer/SOGoMailFrenchForward.m: new module containing
808 a subclass of SOGoMailForward for French locale.
810 * SoObjects/Mailer/SOGoMailForward.[hm]: new module class that
811 helps build template for inline forwarded messages.
813 2007-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
815 * UI/SOGoElements/SOGoIEConditional.m: new extension module class
816 to handle "<var:if-ie>" template tags.
818 * UI/SOGoElements: new extension bundle containing sogo-specific
821 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
822 -takeValuesFromRequest:_rqinContext:_ctx]): save the category
823 selected in the dialog.
824 ([UIxComponentEditor -setComponent:newComponent]): retrieve the
825 first category, if ever, of the calendar entity.
827 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
828 -composeAction]): restored method since it is needed by the
831 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
832 -composeAction]): the address fields should be arrays and not
835 * UI/Common/UIxPageFrame.m ([UIxPageFrame -buildDate]): new method
836 that returns the build date of SOGo in the template.
838 2007-08-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
840 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
841 -_flattenedRecords:records]): when the c_cn field is empty,
842 returns set a formatted string with the concatenation of
843 c_givenname and c_sn as the displayName.
845 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
846 -isValidMailAccountName:_key]): prevent unknown accounts from
849 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
850 -pathToAttachmentObject]): we no longer need the filename
851 extension for SoLookup...
853 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
854 -lookupName:_keyinContext:_ctxacquire:_flag]): do not require the
855 filename to have an extension, and thus accept any filename.
857 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
858 -currentCName]): new method that returns the c_name of the
859 contact, correctly escaped to be passed by url afterwards.
861 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
862 ([UIxMailPartHTMLViewer -flatContentAsString]): pass the NSData
863 instance of [self decodedFlatContent] instead of the buggy
864 NSString from [super flatContentAsString] to the parser.
866 2007-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
868 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -deleteAction]):
869 new category method to reponds to the "delete" web command on
871 ([UIxMailActions -deleteAttachmentAction]): new category method to
872 reponds to the "deleteAttachment" web command on drafts, taking
873 the "filename" url parameter into account.
875 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
876 -contentForEditing]): new method that retrieve the editable mail
878 ([SOGoMailObject -fetchFileAttachmentKeys]): new method that
879 returns the body keys for attached files (parts with a "filename"
882 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
883 -asQPSubjectString:encoding]): do not change the string if the
884 encoded string has the same length (which means it is already
886 ([SOGoDraftObject -fetchMailForEditing:sourceMail]): new method
887 that retrieve a draft along with its attachments for editing.
888 ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): no longer
889 choke if the "to" header field is empty.
890 ([SOGoDraftObject -delete]): new method to delete the draft folder
891 whenever operations are done.
893 2007-08-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
895 * UI/MailerUI/UIxMailEditor.m ([-patchFlagsInStore]): removed
896 useless stub method, of which the intention was implemented in
898 ([-lookupSentFolderUsingAccount]): removed obsolete method.
899 ([-selectedMailIdentity]): removed obsolete method.
900 ([-lookupSentFolderUsingFrom]): removed obsolete method.
901 ([-storeMailInSentFolder:_path]): removed obsolete method, of
902 which the mechanism has been put in -[SOGoDraftObject sendMail]
904 ([UIxMailEditor -_saveFormInfo], [UIxMailEditor -defaultAction])
905 ([UIxMailEditor -saveAction], [UIxMailEditor -sendAction]):
906 adapted algorithms to the new SOGoDraftObject methods.
907 ([-deleteAction]): removed method since local draft objects cannot
908 be removed by the user.
910 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
911 -expungeAction]): new method replacing the one previously found in
913 ([UIxMailFolderActions -createFolderAction])
914 ([UIxMailFolderActions -renameFolderAction])
915 ([UIxMailFolderActions -deleteFolderAction])
916 ([UIxMailFolderActions -emptyTrashAction])
917 ([UIxMailFolderActions -subscribeAction])
918 ([UIxMailFolderActions -unsubscribeAction]): error situations
919 should have http return code 500 instead of 403.
921 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
922 -composeAction]): new method replacing the one previously in
925 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
926 -imap4URLString]): removed overriden method (see below).
928 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -aclUsers]):
929 cache the mailbox acl.
930 ([SOGoMailFolder -aclsForUser:uid]): cache the mailbox acl.
931 ([SOGoMailFolder -setRoles:rolesforUser:uid]): reset the mailbox
933 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): modified to use
934 the new method of determining the users mail accounts.
936 * SoObjects/Mailer/SOGoMailBaseObject.m ([-imap4URLString]): no
937 longer adds a "/" at the end of the string (the default for
938 folders), therefore this will be overriden in SOGoMailFolder
939 rather than in SOGoMailObject.
941 * UI/MailerUI/UIxMailListView.m ([-expungeAction]): removed
942 method, moved into the new UIxMailActions module class.
944 * SoObjects/Mailer/SOGoDraftsFolder.m ([SOGoDraftsFolder
945 -newDraft]): new method that returns a new SOGoDraftObject
946 instance with a unique filename based on the current timestamp and
947 the "newDraft" prefix.
949 -lookupName:nameinContext:localContextacquire:acquire]): overriden
950 method by detecting local drafts with their "newDraft" prefix.
951 ([SOGoDraftsFolder -isInDraftsFolder]): returns YES.
953 * SoObjects/Mailer/SOGoDraftsFolder.[hm]: rewrote class module
954 from scratch by making it a subclass of SOGoMailFolder.
956 * UI/MailerUI/UIxMailReplyAction.m: removed obsolete class
959 * UI/MailerUI/UIxMailForwardAction.m: removed obsolete class
962 * UI/MailerUI/UIxMailEditorAction.[hm]: removed obsolete class
965 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -init]):
966 new method, initializing the new ivars: IMAP4ID, headers, text,
967 sourceURL and sourceFlag.
968 ([-spoolFileManager], [SOGoDraftObject -userSpoolFolderPath])
969 ([-_ensureUserSpoolFolderPath])
970 ([-saveMimeMessageToTemporaryFileWithHeaders:])
971 ([SOGoDraftObject -mimeMessageWithHeaders:_headers])
972 ([-deleteTemporaryMessageFile:], [-delete], [-content])
973 ([-GETAction:_ctx], [-DELETEAction:_ctx], [-fetchParts:])
974 ([-uid], [-flags], [-size], [-envelope]): removed methods.
975 ([SOGoDraftObject -storeInfo]): rewrote method to take the new
977 ([SOGoDraftObject -setSourceURL:newSourceURL])
978 ([SOGoDraftObject -setSourceFlag:newSourceFlag]): new accessor
979 methods to store the url of the original message between accesses
980 so that, depending on the action taken (forward or reply), the
981 correct flag can be given.
982 ([SOGoDraftObject -setIMAP4ID:]): new accessor method that sets
983 the imap4 id that is returned for the message whenever it is saved
984 into the drafts folder.
985 ([SOGoDraftObject -save]): new method that takes in charge the
986 saving of the message in the IMAP drafts folder.
987 ([SOGoDraftObject -fetchMailForReplying:sourceMailtoAll:toAll]):
988 new method that fills the original data of the new message with
989 the reply content of the original message.
990 ([SOGoDraftObject -fetchMailForForwarding:sourceMail]): same as
991 above for message forwarding.
992 ([-spoolFileManager]): removed useless method (only returned the
993 default filemanager...)
994 ([SOGoDraftObject -mimeMessageAsData]): new method that returns
995 the resulting message as an NSData chunk.
997 * SoObjects/Mailer/SOGoMailObject+Draft.m: new extension module
998 containing a rewrite of the mail action methods found in
999 UI/Mailer/, that needed to be put in the SOGoMailObject class.
1000 ([SOGoMailObject -subjectForReply]): new method that returns a
1001 subject suitable for replies.
1002 ([SOGoMailObject -contentForReply]): new method that returns the
1003 textual content of an email, quoted for replying.
1004 ([SOGoMailObject -filenameForForward]): new method that returns
1005 the name of the filename that should contain the forwarded
1006 message, based on its subject.
1007 ([SOGoMailObject -subjectForForward]): explicit.
1009 2007-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1011 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1012 -mailAccounts]): rewrote method to return the name of the mail
1013 accounts now available with the -[SOGoUser mailAccounts] method.
1014 ([UIxMailMainFrame -showLinkBanner]): removed method.
1015 ([UIxMailMainFrame -bannerToolbarStyle]): removed method.
1016 ([UIxMailMainFrame -bannerConsumeStyle]): removed method.
1017 ([UIxMailMainFrame -rootURL]): removed method.
1018 ([UIxMailMainFrame -userRootURL]): removed method.
1019 ([UIxMailMainFrame -calendarRootURL]): removed method.
1020 ([UIxMailMainFrame -contactsRootURL]): removed method.
1021 ([UIxMailMainFrame -hasErrorText])
1022 ([UIxMailMainFrame -errorText])
1023 ([UIxMailMainFrame -errorAlertJavaScript]): removed methods.
1024 ([-composeAction]): removed method. Now provided by
1025 UIxMailAccountActions.
1026 ([UIxMailMainFrame -setHideFolderTree:_flag]): removed method.
1027 ([UIxMailMainFrame -hideFolderTree]): removed method.
1028 ([UIxMailMainFrame -treeRootClassName]): removed method.
1029 ([UIxMailMainFrame +initialize]): removed method.
1030 SOGoMailTreeRootClass userdefaults will no longer have any effect.
1032 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
1033 -redirectToLocation:newLocation]): new method that implements the
1034 same functionality as WOComponent.
1036 * UI/Common/WODirectAction+SOGo.[hm]: new class extension module.
1038 * UI/MailerUI/UIxMailView.m ([UIxMailView -mailIsDraft]): new
1039 method that returns whether the current mail is store in the
1040 drafts folder hierarchy.
1042 * SoObjects/SOGo/SOGoUser.m ([-fullEmail]): removed method.
1043 ([-primaryEmail]): removed method.
1044 ([SOGoUser -primaryIMAP4AccountString]): removed method.
1045 ([SOGoUser -mailAccounts]): new method that returns an array
1046 containing description dictionaries for all the user mail
1047 accounts. Each account also contain the user's identities for that
1049 ([SOGoUser -allIdentities]): new utility method that returns all
1050 the user identities on all accounts.
1051 ([SOGoUser -primaryIdentity]): new method return the first
1052 identity of the first account.
1054 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]):
1056 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1057 -isInDraftsFolder]): returns NO.
1058 ([-preferredIdentity]): removed method, replaced with -[SOGoUser
1060 ([SOGoMailAccount -draftsFolderInContext:_ctx]): new method.
1062 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1063 -isInDraftsFolder]): new method that detects if self is contained
1064 by the drafts folder by calling itself on the container object.
1066 * SoObjects/Mailer/SOGoMailAccounts.m ([-fetchAllIdentities]):
1068 ([-fetchIdentitiesWithEmitterPermissions]): removed method.
1069 ([SOGoMailAccounts -toManyRelationshipKeys]): rewrote method to
1070 return the name of the mail accounts now available with the
1071 -[SOGoUser mailAccounts] method.
1073 * SoObjects/Mailer/SOGoUser+Mail.[hm]: removed useless class
1076 * SoObjects/Mailer/SOGoMailIdentity.[hm]: removed useless class
1079 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
1080 -keysWithFormat:format]): method that forward the method of the
1081 same name to each member of the array, considering they all are
1082 instances of NSDictionary.
1083 ([NSArray -objectsForKey:key]): same principle as above.
1084 ([NSArray -flattenedArray]): new method that transforms an array
1085 of arrays into a single array containing all the elements of the
1088 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
1089 -keysWithFormat:keyFormat]): new method inspired by the python
1090 string formatting system and which replaces occurences of "%{key}"
1091 by the corresponding keys.
1093 2007-08-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1095 * Main/SOGo.m ([SOGo -run]): check for channel-type specific
1096 sql script before the generic one when initializing mandatory
1099 2007-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1101 * SoObjects/SOGo/NSString+Utilities.m ([NSString
1102 -pureEMailAddress]): new utility method inspired by the
1103 "_rawSender" private method in SOGoDraftObject, which it now
1106 * SoObjects/SOGo/SOGoMailer.m: new abstraction class module that
1107 provides a common API for sending emails, no matter what the
1110 2007-08-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1112 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1113 -quotasAction]): invoke "relativeImap4Name" instead of
1114 "nameInContainer" since the latter also returns the "folder"
1117 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1118 -listMailboxesAction]): declare the output as text/plain in UTF-8.
1120 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1121 -deleteFolderAction]): fixed the url of the destination folder.
1123 * Main/SOGo.m ([SOGo +initialize]): show the build date and
1124 hostname at startup.
1126 2007-08-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1128 * SoObjects/Appointments/SOGoCalendarComponent.m
1129 ([SOGoCalendarComponent
1130 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
1131 set the mail date to the current date string returned by our
1132 rfc822DateString extension method.
1134 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1135 -_gcsFoldersFromFolder:): ignore the personal folders who are
1136 returned but don't really exist.
1138 2007-08-02 Francis Lachapelle <flachapelle@inverse.ca>
1140 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView _responseForResults:]):
1141 has to return only one element.
1143 2007-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1145 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
1146 -content]): new method returning the decoded content of the
1147 corresponding attachment as an NSData instance.
1148 ([UIxMailPartViewer -filename]): if the "filename" parameter of
1149 the metadata parameterList is empty, try to find out the filename
1150 from the "disposition" metadata returned with the BODYSTRUCTURE
1153 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1154 -composeAction]): prefix the INBOX folder with "folder".
1156 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailBaseObject
1157 -relativeImap4Name]): return nameInContainer stripped from its
1158 first 6 characters since all folder names are prefixed with
1161 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1162 -imap4URLString]): invoke -relativeImap4Name instead of
1163 "nameInContainer" since the former will return the fixed IMAP4
1164 foldername and the latter the SoObject name.
1166 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1167 +initialize]): we now fetch the "BODYSTRUCTURE" key instead of "BODY".
1169 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderNameInContext:])
1170 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
1171 ([SOGoMailAccount -sieveFolderNameInContext:_ctx])
1172 ([SOGoMailAccount -sentFolderNameInContext:])
1173 ([SOGoMailAccount -trashFolderNameInContext:]): prefix the folder
1174 names with "folder".
1175 ([SOGoMailAccount -inboxFolderInContext:_ctx])
1176 ([SOGoMailAccount -sentFolderInContext:_ctx])
1177 ([SOGoMailAccount -trashFolderInContext:_ctx]): no longer prefix
1178 the folder names with "folder" since they are prefixed earlier.
1180 2007-07-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1182 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
1183 ([-sentFolderInContext:], [-trashFolderInContext:]): folder keys
1184 all starts with "folder".
1186 * SoObjects/SOGo/SOGoObject.m ([SOGoObject +initialize]): no
1187 longer declare security info from here.
1189 * SoObjects/Mailer/SOGoMailFolder.m
1190 ([-isMessageKey:_keyinContext:_ctx]): removed useless method.
1191 ([SOGoMailFolder -lookupName:_keyinContext:acquire:_acquire]):
1192 folder names now always start with "folder".
1194 * SoObjects/Mailer/SOGoMailAccount.m
1195 ([-lookupName:inContext:acquire:]): folder names now always start
1198 2007-07-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1200 * UI/MailerUI/UIxMailForwardAction.m ([UIxMailForwardAction
1201 -forwardAction]): adapted to the new saveAttachment:withMetadata:
1204 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -saveAction]): added
1205 code to save the attached filenames with the filename returned by
1206 the web server as well as their mime types.
1208 * UI/MailPartViewers/UIxMailPartMessageViewer.m ([UIxMailPartMessageViewer -fromAddresses])
1209 ([UIxMailPartMessageViewer -toAddresses])
1210 ([UIxMailPartMessageViewer -ccAddresses]): new methods returning
1211 the corresponding fields separated with a ", " (if needed).
1213 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1214 -saveAttachment:_attachwithMetadata:metadata]): new method
1215 replacing -saveAttachment:withName: and which takes a dictionary
1216 as parameter with the filename and the mime type of the
1218 The mimetype is then saved in a hidden text file.
1219 ([SOGoDraftObject -contentTypeForAttachmentWithName:]): if exists,
1220 take the mime type from the hidden text file related to the
1223 * SoObjects/Contacts/SOGoContactGCSFolder.m ()
1224 ([SOGoContactGCSFolder
1225 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
1226 return records if the db records are > 0 and not just > 1...
1228 2007-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1230 * UI/Contacts/UIxContactsListView.m ([-displayName]): removed
1232 ([UIxContactsListView -defaultSortKey]): changed to "displayName".
1234 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1235 ([SOGoContactLDAPFolder
1236 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
1237 translate the returned records to a normalized form.
1239 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1240 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
1241 translate the returned records to a normalized form.
1243 * UI/Scheduler/UIxCalListingActions.m,
1244 UI/Contacts/UIxContactsListView.m, SoObjects/SOGo/SOGoUser.m,
1245 SoObjects/SOGo/AgenorUserDefaults.m,
1246 SoObjects/Contacts/SOGoContactGCSFolder.m,
1247 SoObjects/Appointments/SOGoAppointmentFolder.m,
1248 OGoContentStore/OCSiCalFieldExtractor.m,
1249 OGoContentStore/OCSContactFieldExtractor.m: prefixed all quick
1250 table fields with "c_".
1252 2007-07-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1254 * SoObjects/SOGo/LDAPSource.m ([LDAPSource +initialize]): query
1255 the values for SOGoLDAPQueryLimit and SOGoLDAPQueryTimeout from
1256 the application settings. If set, both limit will influence the
1257 maximum size of the resultsets and the time taken to solve them.
1258 ([LDAPSource -_initLDAPConnection]): initialize the limits.
1260 2007-07-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1262 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder -davNamespaces]): added new overriden
1263 method that declares the DAV namespace related to CardDAV.
1264 ([SOGoContactGCSFolder -davComplianceClassesInContext:]): new
1265 method that declares the "access-control" and "addressbook-access"
1266 classes to the list.
1268 * SoObjects/Appointments/SOGoAppointmentFolder.m
1269 ([-lookupActionForCalDAVMethod:]): removed method.
1270 ([SOGoAppointmentFolder -davNamespaces]): added new overriden
1271 method that declares the DAV namespace related to CalDAV.
1273 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davNamespaces]): new
1274 optional method for subclasses which handle specific extensions to
1275 the DAV protocol: CardDAV or CalDAV.
1277 -lookupName:lookupNameinContext:localContextacquire:acquire]):
1278 new overriden method that handles dav invocations for extensions
1279 to DAV by returning an appropriate SoSelectorInvocation.
1281 * SoObjects/SOGo/NSString+Utilities.m ([NSString
1282 -asDavInvocation]): new method returning a dictionary with a "ns"
1283 key representing the dav namespace and a "method" key representing
1284 the dav method name of the request.
1286 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
1287 +initialize]): scan the value of SOGoUIxUserCanChangePassword.
1289 ([UIxPreferences -shouldDisplayPasswordChange]): new template
1290 method that returns the value of SOGoUIxUserCanChangePassword.
1292 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
1293 scan the value of SOGoUIxDefaultModule. If not set, the default
1294 module defaults to "Calendar".
1295 ([SOGoUserHomePage -defaultAction]): redirect the user to the
1296 value of "SOGoUIxDefaultModule".
1298 2007-07-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1300 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1301 -contactInfos]): cache the results to avoid multiple invocations.
1303 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1304 ([SOGoContactLDAPFolder -toOneRelationshipKeys]): check whether we
1305 really should return something or if we fake to return nil...
1307 2007-07-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1309 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): set
1310 acceptAnyUser to YES only when the SOGoAuthentificationMethod user
1311 default is set to "bypass".
1313 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
1314 -checkLogin:_loginpassword:_pwd]): accepts unverified connections
1315 when authMethod is set to "bypass" from now on. This would avoid a
1316 security concern with a default installation of SOGo.
1317 AuthentificationMethod is now prefixed with "SOGo" for better
1320 2007-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1322 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1323 -quotasAction]): new method that returns a json representation of
1326 2007-07-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1328 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1329 -imap4URL]): rewrote method to support accented mailbox names.
1330 ([SOGoMailBaseObject imap4Password]): rewrote to simply use
1331 SOGoAuthenticator's passwordInContext:.
1333 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
1334 -takeValuesFromRequest:_rqinContext:_ctx]): explicitly set the
1335 start and due dates to nil if hasStartDate and hasDueDate are
1338 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
1339 -passwordInContext:context]): made method public.
1341 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
1342 -extractQuickFieldsFromTodo:_task]): set "isallday" and "isopaque"
1343 to false to avoid a null violation.
1345 2007-07-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1347 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1348 -contentAsString]): returns the message encoded in ISO Latin 1
1351 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): read the
1352 SOGoSuperUsername user defaults.
1353 ([SOGoUser -initWithLogin:newLoginroles:newRoles]): simplified
1355 ([SOGoUser -rolesForObject:objectinContext:context]): if the
1356 current user is the superuser, grant him/her the "owner" role.
1358 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
1359 the folder only if the current user is the owner of the future
1362 * SoObjects/Appointments/SOGoCalendarComponent.m
1363 ([SOGoCalendarComponent -contentAsString]): we return the content
1364 based on the permissions returned by the security manager instead
1365 of by looking at the user roles.
1367 * SoObjects/Appointments/SOGoAppointmentFolder.m
1368 ([SOGoAppointmentFolder -calendarFolders]): read the calendar
1369 folders of the user to whom this folder belongs instead of the
1370 active user. This way, a delegate user will be able to have the
1371 same view that the original user has if he connects from his user
1374 * Main/SOGo.m ([SOGo -lookupUser:_keyinContext:]): check if the
1375 user exists before creating the SOGoUserFolder instance. If not,
1378 * UI/MailerUI/UIxMailSourceView.[hm]: new class module designed to
1379 return the message source code in plain text.
1381 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1382 -contentAsString]): returns the message encoded in UTF8.
1384 2007-07-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1386 * OGoContentStore/iCalRepeatableEntityObject+OCS.m
1387 ([iCalRepeatableEntityObject -cycleInfo]): no longer take the
1388 leading tagname into account when serializing the element values.
1390 * Main/SOGoProductLoader.m: only load bundle directories ending
1391 with the "SOGo" extension.
1393 * Main/SOGo.m ([SOGo
1394 -_checkTableWithCM:cmtableURL:urlandType:tableType]): empty the
1395 result set if the query has caused no exception. Otherwise we get
1396 an "evaluation is in progress exception".
1398 2007-06-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1400 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
1401 -generateSQLForInsert]): initialize error to nil before the
1402 serialization. Otherwise the method can get confused if it ever is
1403 initialized to something else.
1405 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
1406 -folderIsMandatory]): returns NO unconditionnally.
1408 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
1409 -appendPersonalSources]): add the "personal" folder to the list of
1410 user folders even if it doesn't exist, so that it is created when
1411 the user accesses it.
1413 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1414 -folderIsMandatory]): returns YES if nameInContainer is set to
1415 "personal", which is the default address book.
1417 * SoObjects/Appointments/SOGoAppointmentFolder.m
1418 ([SOGoAppointmentFolder -folderIsMandatory]): returns YES since
1419 users must have one Calendar folder (one and only one).
1420 ([SOGoAppointmentFolder -_privacySqlString]): unescape the
1421 escaping '\' so make the carriage return a real one. This way,
1422 PgSQL 8 won't complain about escaping the string.
1424 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): new
1425 method that create the folder if considered mandatory.
1426 ([SOGoFolder -folderIsMandatory]): new method that determines
1427 whether the folder should be created automatically or not. To be
1428 overriden by subclasses.
1430 * Main/SOGo.m ([SOGo -run]): override method and create the
1431 missing system tables if needed.
1433 2007-06-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1435 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
1436 -mailDateFormatter]): returns the user's date formatter.
1438 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject -date]):
1439 applies the user timezone to the date object before returning it.
1441 * UI/Common/UIxSortButton.m: removed useless class module.
1443 * UI/Common/UIxSortableTableHeader.m: removed useless class
1446 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1447 -contactInfos]): use the "asc" url parameter instead of "desc" to
1448 determine the ordering.
1449 ([-sortOrdering]): removed method.
1450 ([UIxContactsListView -init]): removed the "searchText" ivar.
1451 (general): the template no longer use the UIxSortableTableHeader
1454 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1455 -defaultSortKey]): default sort following the messages arrival
1456 instead of their date.
1457 ([-isSortedDescending]): removed method.
1458 ([-imap4SortOrdering]): use the "asc" url parameter instead of
1459 "desc" to determine the ordering.
1460 (general): the template no longer use the UIxSortableTableHeader
1463 2007-06-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1465 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sleep]):
1467 ([-setQualifier:_msg], [-qualifier]): removed methods.
1468 ([UIxMailListView -defaultAction]): added code to handle the
1469 search criteria and value passed as url parameters. Also, we now
1470 handle the same search criterias as Thunderbird/Icedove.
1472 2007-06-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1474 * UI/PreferencesUI/UIxJSONPreferences.m ([UIxJSONPreferences
1475 -jsonDefaultsAction]): bug fix: returns a WOResponse instance with
1476 the string instead of the string itself.
1477 ([UIxJSONPreferences -jsonSettingsAction]): same as above.
1479 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): new module
1480 bool var "acceptAnyUser" that is set when the AuthenticationMethod
1481 user default is nil.
1482 ([SOGoUser -initWithLogin:newLoginroles:newRoles]):
1483 unconditionnally returns an instance whenever acceptAnyUser is set.
1485 2007-06-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1487 * Main/sogod.m (main): prevent SOGo from running as root.
1489 2007-06-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1491 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
1492 -setCurrentPassword:newPassword]): new stub method.
1493 ([SOGoUser -dateFormatterInContext:context]): new method that
1494 returns an instance of SOGoDateFormatter configured based on the
1497 * UI/Common/UIxPageFrame.m ([UIxPageFrame
1498 -relativePreferencesPath]): new method.
1500 * UI/Scheduler/UIxComponentEditor.m ([-titleDateFormatter]):
1501 removed useless method.
1503 * SoObjects/SOGo/SOGoDateFormatter.m: rewrote class to accept
1504 different configurable formats (long and short date + time).
1506 * SoObjects/SOGo/SOGoDateFormatter.[hm]: moved from UI/SOGoUI/.
1508 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
1509 -isInternetRequest]): removed method.
1511 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
1512 -jsonRepresentation]): new method with an explicit name.
1514 * UI/PreferencesUI/product.plist: new bundle that provides a web
1515 ui for handling user defaults.
1517 * UI/Scheduler/UIxTaskView.[hm]: removed unused module.
1519 * UI/Scheduler/UIxAppointmentView.[hm]: removed unused module.
1521 * SoObjects/SOGo/WOContext+Agenor.[hm]: removed unused module.
1523 2007-06-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1525 * SoObjects/SOGo/SOGoLRUCache.m: removed unused module.
1527 2007-06-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1529 * UI/Scheduler/NSArray+Scheduler.m ([NSArray
1530 -compareEventsAscending:otherEvent]): no longer use compare: on
1531 the time objects since one of them could be an NSNull, which
1532 crashes when comparing with anything.
1534 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1535 -eventsListAction]): sort events from here.
1536 ([UIxCalListingActions -tasksListAction]): sort tasks from here.
1538 * SoObjects/SOGo/NSObject+AptComparison.[hm]: removed category
1539 module, replaced with NSArray+Scheduler in UI/SchedulerUI/.
1541 * SoObjects/Appointments/SOGoAppointmentFolder.m
1542 ([SOGoAppointmentFolder
1543 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]):
1544 no longer sort elements from here.
1546 2007-06-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1548 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1549 -aclsForUser:uid]): implemented method by forwarding the request
1550 to the container. This fixes a bug where users could no longer
1551 read emails from shared folders.
1553 * SoObjects/Appointments/SOGoCalendarComponent.m
1554 ([SOGoCalendarComponent -init]): "isNew" is no longer defined
1555 here, but rather in its parent class.
1557 * UI/SOGoUI/SOGoDateFormatter.m ([SOGoDateFormatter
1558 -stringForSecondsSinceThe70s:seconds]): new utility method.
1560 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1561 -eventsListAction]): no longer reduce the end day of one day for
1562 all day events since everything has been fixed in
1563 OCSiCalFieldExtractor.
1565 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
1566 -extractQuickFieldsFromEvent:_event]): reduce the seconds/70 of
1567 the end date of all day events of 1 so that they stay on their
1570 2007-06-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1572 * UI/Scheduler/UIxCalMonthView.m: no longer retrieve appointments.
1574 * UI/Scheduler/UIxCalView.m ([-fetchCoreAppointmentsInfos]):
1576 ([-fetchCoreTasksInfos]): removed method.
1578 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1579 -init]): initialize an instance of SOGoDateFormatter.
1580 ([UIxCalListingActions -eventsListAction]): the display start and
1581 end dates are added to the listing for each event.
1583 * UI/Scheduler/UIxCalDayTable.m: no longer retrieve appointments.
1585 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1586 -isAllDay]): returns YES if the "hm" url parameter is set to
1588 ([UIxAppointmentEditor -defaultAction]): if isAllDay, the enddate
1589 is displayed one day earlier.
1591 2007-06-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1593 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1594 -_setupContext]): take the range of dates specified by the popup
1597 * UI/Scheduler/UIxCalListingActions.[hm]: new subclass of
1598 WODirectAction that returns WOResponse objects with the events or
1599 todos satisfying the parameters passed in the url.
1601 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1602 -takeValuesFromRequest:_rqinContext:_ctx]): take the new ivar
1603 "isAllDay" into account and compute the amount of days to pass to
1606 2007-06-06 Francis Lachapelle <flachapelle@inverse.ca>
1608 * SoObjects/SOGo/NSNumber+Utilities.m: initial import.
1609 * SoObjects/SOGo/NSNull+Utilities.m: initial import.
1610 * UI/Scheduler/UIxCalTasksListView.m ([WOResponse -tasksListAction]):
1611 new method that returns a json-formatted array of the visible tasks
1612 for the current user.
1614 2007-06-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1616 * SoObjects/Appointments/SOGoAppointmentObject.m: the owner of the
1617 object must be present in the list of UIDs we delete the object
1618 from. Otherwise Calendar objects having no organizer and no
1619 attendees will remain in their owner's Calendar.
1621 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1622 -_urlPreferringParticle:expectedoverThisOne:possible]): remove the
1623 first 3 elements of the path array if the url returned by
1624 baseURLInContext: returns a hostname.
1626 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1627 -_adjustOwner]): sharedFolderName and otherUsersFolderName may be
1628 nil, in which case a crash happens when calling hasPrefix:.
1629 ([SOGoMailFolder -_sharesACLs]): same as above.
1630 ([SOGoMailFolder -otherUsersPathToFolder]): same as above. If
1631 otherUsersFolderName is nil, we return nil.
1632 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): if we receive
1633 nil from [self otherUsersPathToFolder], we return nil too.
1635 2007-06-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1637 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1638 -_urlPreferringParticle:expectedoverThisOne:possible]): unescape
1639 the result of [self baseURLInContext:] to avoid a double escaping
1640 in the resulting string.
1642 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -aclsForUser:uid]): if
1643 the user has the "ObjectReader" role on the parent container, then
1644 he is granted the "ObjectViewer" role on this object. Same for
1645 "ObjectEraser", although this might change later.
1647 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1648 -toolbar]): determine the toolbar filename based on the
1649 permissions declared by the securitymanager. The role mechanism
1650 has been adjusted on a lowerlevel so we can simplify the code.
1652 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
1653 -initWithName:newNameinContainer:newContainer]): read the content
1654 directly from here. That way we can determine whether the object
1656 ([SOGoContentObject -aclsForUser:uid]): if the object is new and
1657 the ObjectCreator role is enabled, we also grant the ObjectEditor
1658 role to the current user.
1660 * UI/Common/UIxFolderActions.m ([-canAccessContentAction]):
1661 changed the method paradigm to only return HTTP code 204. Not test
1662 is done whatsoever since the security manager does it for us.
1664 * UI/Contacts/UIxContactsListView.m ([-canAccessContentAction]):
1665 removed method because the same exists in UIxFolderActions.m
1667 * UI/Contacts/UIxContactsUserRightsEditor.m
1668 ([UIxContactsUserRightsEditor
1669 -setUserCanReadObjects:userCanReadObjects]): new method.
1671 * SoObjects/SOGo/SOGoPermissions.m: added roles "FolderViewer" and
1672 "FolderEraser" and special permission "Access Object". Removed
1673 role "SOGoMailRole_MessageEraser" since "SOGoRole_ObjectEraser"
1674 can be used instead. Removed "FolderReader" since it is useless.
1676 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
1677 -vCard]): directly use the "content" ivar since it is initialized
1678 during object creation.
1680 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1681 ([SOGoContactLDAPFolder -init]): no longer handle the
1682 nameInContainer no the container ivars. They were removed because
1683 this class is a descendant of SOGoObject which already has them.
1684 ([SOGoContactLDAPFolder -davDisplayName]): new overriden method
1685 returning "displayName".
1686 ([SOGoContactLDAPFolder -isFolderish]): new overriden method
1689 * SoObjects/Appointments/SOGoCalendarComponent.m
1690 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): commented out.
1691 ([SOGoCalendarComponent -findParticipant:user]): new name for
1692 method "participant:".
1693 ([SOGoCalendarComponent -findParticipantWithUID:uid]): same as
1694 findparticipant but taking a uid string as parameter.
1695 ([SOGoCalendarComponent -contentAsString]): don't regenerate the
1696 iCalendar automatically. Instead, this is done only when the user
1697 is a "date and time viewer".
1698 ([SOGoCalendarComponent -aclsForUser:uid]): take delegation roles
1699 (modifier and responder) into account by compiling them with the
1702 * SoObjects/Contacts/SOGoContactFolder.h: removed
1703 "nameInContainer" from the list of required methods.
1705 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
1706 -davContentType]): returns "text/calendar".
1708 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1709 ([SOGoContactLDAPFolder -davResourceType]): declare the correct
1710 groupdav resource-type.
1712 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
1713 -davContentType]): same as below.
1715 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1716 -initWithName:newNameinContainer:newContainer]): new overriden
1717 method setting the custom owner directly.
1719 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
1720 -davContentType]): same as below.
1722 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1723 -davContentType]): same as below.
1725 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davContentType]):
1726 declare "httpd/unix-directory".
1728 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): declare
1729 "UTC" as fallback timezone instead of "Canada/Eastern".
1730 ([-hasEmail:email]): make use of the new NSArray's
1731 containsCaseInsensitiveString: method.
1733 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1734 -davContentType]): declare "message/rfc822" as content type.
1736 * SoObjects/Appointments/SOGoAppointmentFolder.m
1737 ([SOGoAppointmentFolder -_privacySqlString]): "owner" is now an
1739 ([SOGoAppointmentFolder
1740 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): same as above.
1741 ([-fetchContentObjectNames]): commented out method since it was
1742 usefull only for testing Funambol.
1744 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
1745 -containsCaseInsensitiveString:match]): an enhanced version of
1748 * UI/MailerUI/UIxMailView.m ([-isTrashingAllowed]): removed
1750 ([-showMarkDeletedButton]): removed useless method.
1751 ([-showTrashButton]): removed useless method.
1753 * SoObjects/Appointments/iCalEntityObject+SOGo.m
1754 ([iCalEntityObject -userIsParticipant:user]): new proxy method
1755 that invoked isParticipant on self for each possible email
1756 addresses of the user passed as parameter.
1757 ([iCalEntityObject -userIsOrganizer:user]): same as above.
1759 * SoObjects/Appointments/iCalEntityObject+SOGo.[hm]: new class
1762 * SoObjects/Appointments/SOGoAppointmentObject.m
1763 ([SOGoAppointmentObject
1764 -saveContentString:contentStringbaseVersion:baseVersion]): remove
1765 method since an event may not have an organizer.
1767 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1768 -GETAction:localContext]): clarified method. Added support for
1769 content-type (thanks to Helge Hess).
1770 ([SOGoObject -initWithName:_nameinContainer:_container]):
1771 initialize and retain the owner.
1772 ([SOGoObject -davContentType]): returns "text/plain".
1774 2007-05-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1776 * UI/Common/UIxObjectActions.m ([UIxObjectActions
1777 -addUserInAclsAction]): send an acl addition mail.
1778 ([UIxObjectActions -removeUserFromAclsAction]): send an acl
1781 * UI/Common/UIxFolderActions.m ([UIxFolderActions
1782 -_realActionWithFolderName:folderDict]): handle the possible
1783 presence of the "mail-invitation" url parameter. If present, the
1784 user will be redirected to the relevant folder.
1786 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -fullEmail]): new proxy method.
1787 ([SOGoUser -language]): new method that returns the user's
1788 preferred language, or the system's if none has been set yet.
1790 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -davURL]): new method
1791 that returns the full dav url to self.
1792 ([SOGoObject -soURL]): same as above but for the so url (Web UI).
1793 ([SOGoObject -soURLToBaseContainerForUser:uid]): new method that
1794 returns the full so url to the base of the SOGo module to which
1795 self belongs, and for the specified user.
1796 ([SOGoObject -soURLToBaseContainerForCurrentUser]): same as above
1797 but for the current user.
1798 ([SOGoObject -httpURLForAdvisoryToUser:uid]): new protocol method
1799 required by the acl advisory templates and which returns a link
1800 the target user can click to activate its new subscription.
1801 ([SOGoObject -resourceURLForAdvisoryToUser:uid]): same as above
1802 but for inclusion of the application/x-sogo-notification part,
1803 which will be handled by the Lightning enhancer plugin.
1805 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -subscribeAction])
1806 ([UIxMailFolderActions -unsubscribeAction]): new stub methods that
1807 do nothing yet since imap folder subscription is not handled yet.
1809 * SoObjects/SOGo/SOGoContentObject.m
1810 ([-hasSupportForDefaultRoles]): removed method.
1812 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
1813 -getFullEmailForUID:uid]): new method that returns the username +
1816 * SoObjects/Appointments/SOGoCalendarComponent.m
1817 ([SOGoCalendarComponent +initialize]): the default language for
1818 mail templates is now set to English.
1820 * UI/SOGoUI/SOGoACLFrenchRemovalAdvisory.[hm]: new subclass of
1821 SOGoACLAdvisory implementing the french template for user removal
1824 * UI/SOGoUI/SOGoACLFrenchAdditionAdvisory.[hm]: new subclass of
1825 SOGoACLAdvisory implementing the french template for user
1828 * UI/SOGoUI/SOGoACLEnglishRemovalAdvisory.[hm]: new subclass of
1829 SOGoACLAdvisory implementing the english template for user removal
1832 * UI/SOGoUI/SOGoACLEnglishAdditionAdvisory.[hm]: new subclass of
1833 SOGoACLAdvisory implementing the english template for user
1836 * UI/SOGoUI/SOGoACLAdvisory.[hm]: new class module implemented the
1837 supercall of all the acl advistory templates. The model is based
1838 on SOGoAptMailNotification except that the template encapsulates
1839 the message to be sent. Later, we might create a superclass common
1840 to all template-based emails.
1842 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
1843 -addRange:newRange]): new method that store a string
1844 representation of the NSRange passed as parameter.
1845 ([NSMutableArray -hasRangeIntersection:testRange]): tests whether
1846 any range contained in self intersect with the one passed as parameter.
1848 * SoObjects/SOGo/NSString+Utilities.m ([-stringByDetectingURLs]):
1849 store ranges in an array to prevent them from intersecting with
1850 each other during the passes.
1852 2007-05-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1854 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1855 -primaryFetchMailboxInfo]): useless method. Removed.
1857 2007-05-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1859 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1860 -toManyRelationshipKeys]): invoke [self subfolders].
1861 ([SOGoMailFolder -subfolders]): new method containing what used to
1862 be in toManyRelationshipKeys.
1863 ([SOGoMailFolder -subfoldersURL]): same as above but returns imap
1866 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1867 -allFolderPaths]): renamed version of "allFolderPathes", sorted by
1868 named and at the beginning of which we put the predefined folders.
1870 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1871 -emptyTrashAction]): new method inspired by a similar one from
1872 UIxMailListView, to which we added the ability to remove
1875 * UI/MailerUI/UIxMailListView.m ([-emptyTrashAction]): removed
1876 method. Replaced with a similar one in UIxMailFolderActions.
1878 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1879 -renameFolderAction]): implemented method.
1880 ([UIxMailFolderActions -deleteFolderAction]): no longer delete the
1881 specified folder. Instead, we put it in the trash folder.
1883 * UI/MailerUI/UIxMailListView.m ([-createFolderAction]): removed
1884 method, replaced with a similar method in the new
1885 UIxMailFolderAction class module.
1886 ([-deleteFolderAction]): idem.
1888 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1889 -createFolderAction]): new method implementing subfolder creation.
1890 ([UIxMailFolderActions -renameFolderAction]): new method
1891 implementing subfolder renaming (basic implementation to be
1893 ([UIxMailFolderActions -deleteFolderAction]): new method
1894 implementing folder deletion.
1896 * UI/MailerUI/UIxMailFolderActions.[hm]: new module implementing
1897 web actions related to the handling of imap folder.
1899 2007-05-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1901 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1902 -ownerInContext:localContext]): overriden method because we are an
1903 IMAP4 client and we need a bit more intelligence to deduce the
1904 owner of the current folder.
1905 ([SOGoMailFolder -aclsForUser:uid]): aclForMailboxAtURL might
1906 return an NSException so we need to be careful here to avoid a
1908 ([SOGoMailFolder -aclUsers]): aclForMailboxAtURL might return an
1909 NSException so we need to be careful here to avoid a crash.
1911 * SoObjects/Mailer/SOGoMailAccounts.m
1912 ([SOGoMailAccounts -fetchIdentitiesWithOnlyEmitterAccess:_flag])
1913 there is no longer any concept of Intranet or Internet connection
1916 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1917 -sharedFolderName]): new method.
1918 ([SOGoMailAccount -otherUsersFolderName]): new method.
1920 * UI/MailerUI/UIxMailFolderMenu.[hm]: removed module, obsoleted by
1921 new javascript code and the new UIxMailAccountActions class.
1923 * UI/MailerUI/UIxMailTree.[hm]: removed module, obsoleted by new
1924 javascript code and the new UIxMailAccountActions class.
1926 * UI/MailerUI/UIxMailTreeBlock.[hm]: removed module, obsoleted by
1927 new javascript code and the new UIxMailAccountActions class.
1929 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1930 -listMailboxesAction]): new method that returns a json-formatted
1931 tree of all the mailboxes available to the current user.
1933 * UI/MailerUI/UIxMailAccountActions.[hm]: new module implementing
1934 web actions related to the handling of mail accounts.
1936 * SoObjects/SOGo/NSDictionary+Utilities.[hm]: new extension
1939 * SoObjects/SOGo/NSObject+Utilities.m ([NSObject
1940 -jsonRepresentation]): new interface method meant to be overriden
1941 by the primitive classes.
1943 2007-05-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1945 * UI/MailerUI/UIxMailSplashView.m: removed.
1947 * SoObjects/Appointments/SOGoCalendarComponent.m
1948 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]): add
1949 the uid to the list only when the user email is recognized by the
1952 2007-05-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1954 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1955 -isDeletionAllowed]): completed method with the new imap acl api.
1957 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultAclRoles]):
1960 * SoObjects/SOGo/SOGoPermissions.m: added the new role
1961 "SOGoMailRole_MessageEraser".
1963 * UI/Common/UIxAclEditor.m ([UIxAclEditor -defaultUserID])
1964 ([UIxAclEditor -_prepareUsers]): take the new SOGoObject's
1965 "defaultUserID" method into account.
1967 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -userIsDefaultUser])
1968 ([UIxUserRightsEditor -_initRights]): take the new SOGoObject's
1969 "defaultUserID" method into account.
1971 * UI/MailerUI/UIxMailUserRightsEditor.m: added all the missing
1972 methods to support the IMAP acls mentionned in the RFC 4314,
1973 removed the ones specific to Cyrus.
1975 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultUserID]): new
1976 mandatory method for subclasses. Removed the SOGoDefaultUserID
1979 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -defaultUserID]):
1980 overriden method to return @"<default>".
1982 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
1983 -defaultUserID]): overriden method to return @"<default>".
1985 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1986 -aclsForUser:uid]): overriden method.
1987 ([SOGoMailFolder -removeAclsForUsers:users]): overriden method.
1988 ([SOGoMailFolder -setRoles:rolesforUser:uid]): overriden method.
1989 ([SOGoMailFolder -defaultUserID]): overriden method.
1990 ([SOGoMailFolder -hasSupportForDefaultRoles]): overriden method.
1992 2007-05-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1994 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
1995 -aclUsersForObjectAtPath:objectPathArray]): new method that being
1996 forwarded the calles to aclUsers for the GCS-based subclasses of
1999 * SoObjects/Mailer/SOGoMailFolder.m: removed all the previous
2000 methods that would have been used to support IMAP acls. Replaced
2001 them with the new protocol for them that has been implemented in
2002 SOGo during the last few weeks.
2004 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2005 -hasSupportForDefaultRoles]): override method by returning "YES".
2007 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
2008 -addObjectUniquely:object]): new method with an explicit name.
2010 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -aclUsers]): renamed
2011 "acl" to "aclUsers". Now designed to return only the uid of the
2012 users involved in an ACL.
2013 ([SOGoObject -hasSupportForDefaultRoles]): new method returning
2014 "NO" by default. To indicate to the acl editor that we don't want
2015 to handle a default user.
2017 * SoObjects/SOGo/SOGoPermissions.[hm]: added the
2018 SOGoRole_ObjectReader, SOGoRole_Folder*, and SOGoMailRole_*
2021 * UI/MailerUI/UIxMailUserRightsEditor.[hm]: new class module that
2022 provides a view to the IMAP acls.
2024 * UI/MailerUI/UIxMailFolderACLEditor.m: removed obsolete module.
2026 * UI/WebServerResources/MailerUI.js: replaced all invocations of
2027 addEventListener to the use of prototype's Event object. Also,
2028 configured all menus programmatically following descriptions lists
2029 containing their callbacks, or nulls, submenus id or separators.
2031 2007-05-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2033 * UI/Common/UIxObjectActions.m ([UIxObjectActions
2034 -addUserInAclsAction]): save the previous roles of the user
2035 (unlikely) or the default roles, or None instead of saving the
2036 roles that should appear the first time in the role editor when no
2037 default has been set...
2039 * SoObjects/SOGo/SOGoObject.m: defined a new constant
2040 "SOGoDefaultUserID".
2042 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2043 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]):
2044 ignore the "AuthorizedSubscriber" role and add the "None" role
2045 when no other role is found.
2047 * UI/Common/UIxAclEditor.m: added a button for the new default
2050 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
2051 -_initRights]): don't take the "None" role into account when
2052 initializing the list of current roles.
2054 * SoObjects/SOGo/SOGoPermissions.m: added a new void role
2057 2007-05-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2059 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2060 -_rangeOfURLInRange:refRange]): urls cannot end with "&" nor "=".
2061 There is no need to subscract the start from the length if a space
2062 is not found since the range has not changed either. Finally, the
2063 first character before the url might also be a tab or a cr, so we
2064 match it against the "urlAfterEndingChars" custom NSCharacterSet.
2065 ([NSString -stringByDetectingURLs]): modified to handle email
2066 addresses and add a correct "mailto:" link.
2068 2007-05-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2070 * SoObjects/Appointments/SOGoAppointmentFolder.m
2071 ([SOGoAppointmentFolder -fetchContentObjectNames]): override
2072 method to return the events in the range of 2 weeks ago up to 4
2075 * UI/MailPartViewers/UIxMailPartTextViewer.m
2076 ([UIxMailPartTextViewer -flatContentAsString]): use the new
2077 "stringByDetectingURLs" method to offer clickable urls.
2079 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2080 -stringByDetectingURLs]): this new method replaces passive URLS
2081 with active ones for HTML resolution of the text.
2083 2007-05-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2085 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
2086 -asQPSubjectString:encoding]): simplified method.
2087 The headers indicates "utf-8" again thank to our fix in
2090 * SoObjects/SOGo/SOGoObject.m: fail to build if libFoundation is
2093 2007-05-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2095 * UI/Common/UIxObjectActions.m ([UIxObjectActions
2096 -removeUserFromAclsAction]): implemented this method which was
2097 missing and is required to remove users from ACLs.
2099 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2100 -subscribeAction]): folderDict was not autoreleased, resulting in
2103 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2104 -primaryFetchProfile]): when building with libFoundation, don't
2105 use the "propertyList" method from NSString. Rather, we convert
2106 the string to an NSData instance and passit as parameter to
2107 NSDeserializer. This way, we obtain a mutable dictionary rather
2108 than an immutable one.
2110 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -bodyPartForText])
2111 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): use the
2112 constant string "contentTypeValue".
2113 contentTypeValue is now set back to iso-8859-1 since NGMime
2114 converts extracts the data in that encoding.
2116 2007-05-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2118 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
2119 -checkLogin:loginToCheckandPassword:passwordToCheck]): if a
2120 "bindFields" value is present in the user defaults, use the
2121 specified fields to find the dn of the user to bind.
2122 ([LDAPSource -allEntryIDs])
2123 ([LDAPSource -fetchContactsMatching:match])
2124 ([LDAPSource -lookupContactEntry:entryID])
2125 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]):
2126 bind and unbind the connection on each request.
2128 * UI/MailerUI/UIxMailAddressbook.m: removed obsolete module.
2130 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2131 -contactSearchAction]): simplified method to use the facilities
2132 provided by the LDAPUserManager. No longer takes care of the
2133 "ldap-only" url parameter since all requests are handled by the
2136 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2137 -primaryFetchProfile]): check that the value returned is not null
2138 before interpreting it.
2140 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
2141 -contactInfosForUserWithUIDorEmail:uid]): check that uid is not empty.
2142 ([LDAPUserManager -_fillContactMailRecords:contact]): if the
2143 system email is already present, remove it before adding it.
2145 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
2146 -checkLogin:loginToCheckandPassword:passwordToCheck]): check that
2147 loginToCheck is not empty.
2148 ([LDAPSource -fetchContactsMatching:match]): check that match is
2150 ([LDAPSource -lookupContactEntry:entryID]): check that entryID is
2152 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]): check that
2155 2007-05-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2157 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -primaryEmail]): new name
2159 ([SOGoUser -systemEmail]): returns the email formed from the
2160 username and the default mail domain.
2161 ([SOGoUser -hasEmail:email]): test whether the user has the
2162 specified email, in a case-insensitive way.
2164 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2165 -LDAPCheckLogin:_loginpassword:_pwd]): use the user manager to
2166 check login information.
2168 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2169 ([SOGoContactLDAPFolder
2170 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
2171 no longer manage LDAP connections. The requests are forwarded to
2172 the relevant LDAPSource instead.
2174 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2175 -appendSystemSources]): pass LDAPSource objects to
2176 SOGoContactLDAPFolder instances.
2178 * SoObjects/Mailer/SOGoDraftObject.m: extract the raw email
2179 address of the "from" field before sending the message. Otherwise,
2180 sending the mail won't work.
2182 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -fromEMails]):
2183 rewrote this method to request all the available email identities
2184 for the current user. Also, the from field also contains the full
2185 name of the user, not just his/her email address.
2187 * SoObjects/Appointments/SOGoCalendarComponent.m
2188 ([SOGoCalendarComponent -iCalPersonWithUID:uid]): new method taken
2189 from the previous module iCalEntityObject+Agenor.
2190 ([SOGoCalendarComponent -getUIDForICalPerson:person]): idem.
2191 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]):
2194 * SoObjects/Contacts/SOGoContactLDIFEntry.[hm]: new class module
2195 replacing the SOGoContactLDAPEntry module. It was renamed as such
2196 because it now receives a dictionary instead of an NGLdapEntry.
2197 It thus can now handle data from any source of LDIF data, not
2198 only coming from LDAP.
2200 * SoObjects/SOGo/LDAPUserManager.[hm]: new class module
2201 implementing most of what used to be the AgenorUserManager class.
2202 The difference is that users are cached in the forme of
2203 dictionaries and many sources are used. Also, it can be used to
2204 search LDAP contacts.
2206 * SoObjects/SOGo/LDAPSource.[hm]: new class module implementing
2207 the concept of "ldap source", to be used by all the classes
2208 needing access to LDAP-provided information: addressbooks and the
2209 user manager. Most the method thereing are transcriptions of
2210 methods previously found in SOGoContactLDAPFolder. It also contain
2211 utility methods for user matching and authentification.
2213 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: removed
2214 module, rendered useless by code refactoring.
2216 * SoObjects/SOGo/AgenorUserManager.[hm]: removed module, replaced
2217 with the freshly written "LDAPUserManager".
2219 2007-05-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2221 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: renamed to
2222 SOGOContactLDIFEntry.
2224 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: removed class
2225 module, obsoleted by code in SOGo/LDAPSource.[hm].
2227 2007-05-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2229 * UI/Common/UIxAclEditor.m ([UIxAclEditor -currentUserIsOwner]):
2230 new method with an explicit name.
2232 2007-05-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2234 * SoObjects/Appointments/SOGoCalendarComponent.m
2235 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): new method
2236 replacing "isOrganizer:orOwner:" by taking only one instance of
2237 SOGoUser as parameter.
2238 ([SOGoCalendarComponent -participant:user]): new method replacing
2239 the previous "isParticipant" boolean method by returning the first
2240 participant matching the user passed as parameter. This method is
2241 used so that both the regular email address and the "system email
2242 address" of the user are matched against the participants emails.
2244 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
2245 -getSystemEMailForUID:uid]): new method that returns the email
2246 formed with the user's uid and the default mail domain.
2248 * SoObjects/Appointments/SOGoCalendarComponent.m
2249 ([SOGoCalendarComponent -rolesOfUser:login]): removed method that
2250 was previously commented out.
2252 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -systemEmail]): new method
2253 forwared to [AgenorUserManager getSystemEmailForUID:].
2255 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2256 -toolbar]): method replacing the one with the same name in the
2257 task and appointment editor classes. This method makes also use of
2258 the new method "isOrganizerOrOwner:" and "participant:" in
2259 SOGoCalendarComponent.
2261 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2262 -toolbar]): removed method, replaced with a method with the same
2263 name in UIxComponentEditor.
2265 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -toolbar]): removed
2266 method, replaced with a method with the same name in
2269 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2270 -primaryFetchProfile]): the values returned from the database are
2271 converted to a put dictionary first, since the dictionary returned
2272 is actually an immutable one, which can cause a crash afterwards.
2274 2007-04-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2276 * SoObjects/SOGo/SOGoPermissions.m: added "SOGoRole_ObjectViewer"
2277 and "SOGoRole_ObjectEditor".
2279 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
2280 -prepareRightsForm]): this method is no longer mandatory.
2282 * UI/Contacts/UIxContactsUserRightsEditor.m
2283 ([UIxContactsUserRightsEditor
2284 -setUserCanCreateObjects:userCanCreateObjects]): new subclass
2285 module to handle acls related to the address books. Partial
2288 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2289 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): cache
2292 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): remove
2293 specified roles from cache.
2294 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
2295 put resulting roles in cache.
2297 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -init]): do not invoke
2298 initWithName:inContainer:. Instead, directly initialize the ivars
2299 as it is supposed to be to avoid an infinite loop whenever one of
2300 those two methods are overriden.
2302 * SoObjects/SOGo/SOGoContentObject.m ([-rolesOfUser:login]):
2305 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
2306 -aclsForUser:uid]): override method so that SOGo won't crash when
2307 loading the contact card.
2309 2007-04-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2311 * SoObjects/Appointments/SOGoAppointmentFolder.m
2312 ([SOGoAppointmentFolder -_privacySqlString]): the string for the
2313 "freebusy" special user should only require opaque elements.
2315 2007-04-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2317 * SoObjects/Appointments/SOGoAppointmentFolder.m
2318 ([SOGoAppointmentFolder -davResourceType]): fixed a problem with
2319 our double declaration where the resulting XML would be screwed.
2320 There is only one collection per namespace.
2322 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
2323 rfc822DateString]): new method that returns a string conform to
2324 rfc 822 and suitable for email headers.
2326 * SoObjects/Mailer/SOGoDraftObject.m: invoke the new
2327 "rfc822DateString" category method on the date we put in the
2330 2007-04-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2332 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -defaultAction])
2333 ([UIxUserRightsEditor -saveUserRightsAction]): new action methods
2334 which should never be overriden.
2335 ([UIxUserRightsEditor -appendRight:newRight])
2336 ([UIxUserRightsEditor -removeRight:right])
2337 ([UIxUserRightsEditor -appendExclusiveRight:newRightfromList:list])
2338 ([UIxUserRightsEditor -removeAllRightsFromList:list]): new utility
2339 methods that can be used by the subclasses.
2340 ([UIxUserRightsEditor -prepareRightsForm]): new method that should
2341 mandatorily be overriden to prepare the elements of the subclassed
2343 ([UIxUserRightsEditor -updateRights]): new method that should
2344 mandatorily be overriden to update the user rights from the
2345 elements of the subclassed form.
2347 * UI/Common/UIxAclEditor.m ([UIxAclEditor -_prepareUsers]): we
2348 check if the uid is already listed before adding it to our array.
2349 This is because the acl table can contain more than one record per
2350 user/object relationship.
2352 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2353 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): the
2354 "roles" parameter is now an NSArray instead of a string. Therefore
2355 we loop throughout the array to populate the table. All the
2356 relevant records are removed prior to the addition of the new
2359 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
2360 -aclsForUser:uid]): new override that returns nil until we add
2361 support for IMAP acls.
2363 * SoObjects/Mailer/SOGoMailAccounts.m
2364 ([SOGoMailAccounts -aclsForUser:uid]): same as below.
2366 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2367 ([SOGoContactLDAPFolder -aclsForUser:uid]): same as below.
2369 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2370 -aclsForUser:uid]): override this method which will always return
2373 * SoObjects/SOGo/SOGoPermissions.[hm]: added
2374 [Public,Private,Confidential]
2375 x[Viewer,DAndTViewer,Responder,Modifier]. Renamed
2376 SOGoRole_ORganizer to SOGoCalendarRole_Organizer. Same for
2377 ..._Participant. Removed SOGoRole_Assistant and SOGoRole_Delegate.
2379 * SoObjects/Appointments/SOGoAppointmentFolder.m
2380 ([SOGoAppointmentFolder -defaultAclRoles]): new overriden method
2381 that defines default roles for new elements in the acl.
2383 * UI/Scheduler/UIxCalUserRightsEditor.[hm]: new component class
2384 module and subclass of UIxUserRightsEditor specific to the
2385 handling of user rights on calendar folders.
2387 2007-04-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2389 * SoObjects/Appointments/SOGoAppointmentFolder.m
2390 ([SOGoAppointmentFolder -groupDavResourceType]): return both
2391 "vevent-collection" and "vtodo-collection".
2393 * UI/Common/UIxUserRightsEditor.[hm]: new template class module
2394 that implements the detailed editor of user rights per-object.
2396 2007-04-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2398 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
2399 -rolesForObject:objectinContext:context]): no longer query objects
2400 for "roleForUser:". Instead, all objects should implement
2403 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject -acls]):
2404 new method to comply with the new acl "protocol" in SOGoObject.
2405 Uses SOGoFolder's new facilities for ACLS.
2406 ([SOGoContentObject -aclsForUser:uid]): idem.
2407 ([SOGoContentObject -setRoles:rolesforUser:uid]): idem.
2408 ([SOGoContentObject -removeAclsForUsers:users]): idem.
2410 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2411 -aclsForObjectAtPath:objectPathArray]): new method generic to GCS
2412 based folders. This method is derived from the code that was in
2413 UIxAclFolder before its removal.
2414 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
2417 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): idem.
2419 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): idem.
2420 ([SOGoFolder -setRoleForUsers:uidsto:role])
2421 ([SOGoFolder -setRoleForUsers:uidsto:role]): removed method.
2423 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -acls]): stub method
2424 that requires overriding by subclasses.
2425 ([SOGoObject -aclsForUser:uid]): idem.
2426 ([SOGoObject -defaultAclRoles]): idem.
2427 ([SOGoObject -setRoles:rolesforUser:uid]): idem.
2428 ([SOGoObject -removeAclsForUsers:users]): idem.
2430 * UI/Common/UIxObjectActions.m: new module implementing the web
2431 actions common to SOGoObject and all its subclasses.
2432 ([UIxObjectActions -addUserInAclsAction]): new method that adds a
2433 user with the clientObject defaults user rights to the object's
2436 * UI/Common/UIxAclEditor.m: modified module so as to simplify it
2437 to the point where it will only list the users (and their name)
2438 associated with an object acl.
2440 * SoObjects/SOGo/SOGoAclsFolder.m: removed module because its
2441 methods have been moved into SOGoObject and SOGoFolder during a
2444 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2445 -iCalParticipantsAndResourcesStringFromQueryParameters]): removed
2446 method made useless by the programmatic handling of iCalendar
2448 ([UIxComponentEditor -iCalParticipantsStringFromQueryParameters]): idem.
2449 ([UIxComponentEditor -iCalResourcesStringFromQueryParameters]): idem.
2450 ([UIxComponentEditor -iCalStringFromQueryParameter:_qpformat:_format]): idem.
2452 * UI/WebServerResources/MailerUI.js (initDnd): enable drag and
2453 drop on all folder nodes, not just on leaves.
2455 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2456 ([SOGoContactLDAPFolder
2457 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): request field "uid" when doing a search.
2459 2007-04-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2461 * Main/SOGo.m ([SOGo +initialize]): on GNUstep, trigger some
2462 debugging facilities when the SOGoDebugObjectAllocation user
2465 2007-04-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2467 * SoObjects/SOGo/NSString+Utilities.m ([NSString -boolValue]): new
2468 method that SOGo will need with non-gnustep Foundation
2470 ([NSString -stringByAppendingPathComponent:component]): new method
2471 that SOGo will need when building with libFoundation. Method
2472 removed later since it is available from
2473 Foundation/NSPathUtilities.h.
2475 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -timeZone]): method moved
2478 * SoObjects/SOGo/SOGoObject.m: new ivar "context" that permits
2479 every subclass to access [WOApplication context] without having to
2480 invoke it more than once.
2482 * SoObjects/Appointments/SOGoCalendarComponent.m
2483 ([SOGoCalendarComponent -changeParticipationStatus:_status]):
2484 moved method from SOGoTaskObject and SOGoAppointmentObject up to
2487 * UI/Scheduler/UIxCalSelectTab.m: removed module.
2489 2007-04-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2491 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
2492 -vCard]): test the prefix of the card in a case-independent way.
2494 * OGoContentStore/OCSContactFieldExtractor.m
2495 ([OCSContactFieldExtractor
2496 -extractQuickFieldsFromContent:content]): we no longer accept
2497 records in a format other than versit vCard so we can get rid of a
2500 2007-04-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2502 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2503 -selectorComponentClass]): restored method.
2505 2007-04-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2507 * UI/Scheduler/UIxCalTasksListView.m ([UIxCalTasksListView
2508 -shouldDisplayCurrentTask]): the current task is not displayed if
2509 it is NOT completed or if the "showCompletedTasks" flag is set.
2510 The logic was inverted in Lightning and is now in SOGo too.
2512 2007-04-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2514 * UI/Contacts/UIxContactView.m ([UIxContactView -workUrl]): we
2515 want the "work" url instead of the "home".
2517 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
2518 -_saveSnapshot]): save url values from snapshot.
2519 ([UIxContactEditor -initSnapshot]): load url values from snapshot.
2521 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2522 -calendarList]): new method replacing "availableCalendars".
2524 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
2525 -calendarFolders]): we now take the list of subscribed calendar
2528 * SoObjects/Appointments/SOGoAppointmentFolder.m
2529 ([SOGoAppointmentFolder -calendarFoldersInContext:context]): new
2530 method derived from and replacing [UIxCalView calendarFolders].
2532 2007-03-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2534 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2535 -toManyRelationshipKeys]): don't put the predefined folders in the
2536 list if they are returned by the server.
2538 * UI/MailerUI/UIxMailTree.m ([UIxMailTree -flattenedNodes]): we no
2539 longer store the "flattenedBlocks" in a dictionary since the
2540 object will be deleted anyway and we don't need to put the folders
2543 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
2544 ([UIxMailPartHTMLViewer -_attachmentIds]): take the current
2545 attachment path into account when computing the part urls.
2547 2007-03-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2549 * UI/Contacts/UIxContactsListViewContainer.m
2550 ([UIxContactsListViewContainer -additionalFolders]): take the list
2551 of subscribed folders from the new property list used for the user
2552 settings. The value of its key is SubscribedFolders for the
2553 dictionary entry named "Contacts".
2555 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2556 -canAccessContentAction]): new method to override the one from
2557 UIxFoldersActions by taking into account the fact that, this time,
2558 the clientObject is an ldap folder. Removed many method that used
2559 to be related to the handling of the user selector.
2561 * UI/Scheduler/UIxCalDayView.m: commented out many unused methods
2562 to make sure they can be removed.
2564 * UI/Scheduler/UIxCalView.m ([UIxCalView -_setupCalendarFolders]):
2565 populate the calendar entries based on the user settings plist.
2567 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2568 -selectForMailerAction]): restored method.
2570 * UI/Scheduler/UIxCalendarSelector.m: new template module derived
2571 from a simplified version of the old UIxContactEditor (removed).
2573 * UI/Contacts/UIxContactsUserFolders.m: new template module for
2574 selecting users or user folders through an LDAP search of which
2575 the results are displayed as a tree.
2577 * UI/WebServerResources/UIxMailEditor.js: moved previous generic
2578 method "onContactAdd" here since the Mailer is now the only module
2579 to use it when composing emails.
2581 * UI/WebServerResources/generic.js: added code for handling the
2582 new scheme used for describing SOGo folders, common code to handle
2583 folder addition or removal.
2585 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2586 -activateFolderAction]): new method that change the "active"
2587 settings in the folder-related fields in the user settings.
2588 ([UIxFolderActions -deactivateFolderAction]): see above.
2590 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2591 -checkRightsAction]): removed method.
2593 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2594 -updateAdditionalAddressBooksAction]): removed method.
2596 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
2597 -updateCalendarsAction]): removed method.
2599 2007-03-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2601 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
2602 -checkRightsAction]): removed method.
2604 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2605 -canAccessContentAction]): new method designed to replace
2606 [UIxCalMainView checkRightsAction] in a more universal way.
2608 2007-03-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2610 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2611 -roleOfUser:uidinContext:context]): take all the subkeys into
2612 account, not only the "personal" folder.
2614 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2615 -takeValuesFromRequest:_rqinContext:_ctx]): append a "uid" field
2616 to the new components.
2618 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -userSettings]): new method
2621 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
2622 -getUserDefaultsForUID:uid]): rewrote method to use the "defaults"
2623 field of the sogo_user_profile table, where the user-customizable
2624 changes will be saved.
2625 ([AgenorUserManager -getUserSettingsForUID:uid]): new method
2626 similar to the one above, using the "settings" field where the
2627 automatic settings will be saved.
2629 * SoObjects/SOGo/AgenorUserDefaults.m: rewrote a big part of the
2630 module to bind the userdefaults to a property list contained in a
2631 specified field of the sogo_user_profile table.
2632 ([AgenorUserDefaults
2633 -initWithTableURL:tableURLuid:userIDfieldName:defaultsFieldName]):
2634 added a "fieldName" parameter.
2636 * UI/Common/UIxFolderActions.m: new module implementing web
2637 actions common to all GCS-based folders.
2639 2007-03-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2641 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -labelForDay]):
2642 put a carriage return after the day name.
2644 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
2645 -readFreeBusyAction]): restored method.
2647 2007-03-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2649 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
2650 -defaultAction]): remade module to redirect automatically to the
2653 * SoObjects/Contacts/NSDictionary+Contact.m: removed module.
2655 2007-03-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2657 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2658 -deleteAction]): new web method to delete personal addressbook
2661 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
2662 -delete]): override method to refuse the deletion of the folder if
2663 its nameInContainer is "personal".
2665 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -delete]): new method
2666 that forwards the deletion request to the folder manager.
2668 2007-03-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2670 * UI/Scheduler/UIxAttendeesEditor.m ([UIxAttendeesEditor
2671 -zoomList]): new method that returns the list of available zoom factors.
2673 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
2674 -changeStatusAction]): rewrote method.
2676 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2677 -_handleAttendeesEdition]): make sure "attendeesNames" has a
2678 length > 0 before computing the attendees. Otherwise there will be
2679 an invalid empty entry.
2680 ([UIxComponentEditor -_handleOrganizer]): new method that adds the
2681 organizer when there are attendees and remove it when the
2682 attendees are removed.
2684 2007-03-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2686 * UI/Scheduler/UIxAttendeesEditor.m): new component.
2688 * UI/Scheduler/UIxComponentEditor.m: no longer a superclass for
2689 the task and appointment editors. Now a container component
2690 handling the common elements of tasks and events.
2692 * UI/Scheduler/UIxTaskEditor.m: same as below.
2694 * UI/Scheduler/UIxAppointmentEditor.m: rewrote template. No longer
2695 a subclass of UIxComponentEditor but a subcomponent of it.
2697 * UI/Common/UIxToolbar.m ([UIxToolbar -toolbarConfig]): the
2698 toolbar can have the special value "none" to indicate there is
2699 none attached to the window.
2701 * SoObjects/Appointments/SOGoCalendarComponent.m
2702 ([SOGoCalendarComponent -isOrganizer:emailorOwner:login]): new
2704 ([SOGoCalendarComponent -isParticipant:email]): new method.
2705 ([SOGoCalendarComponent -calendar:create]): takes one parameter
2706 "create" which is a boolean indicating whether we want to create
2707 the calendar if it does not exist.
2709 2007-03-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2711 * UI/Scheduler/UIxCalMonthView.m: changed view to use divs instead
2712 of a table, the same way the dayly and weekly views have been for
2715 2007-02-09 Helge Hess <helge.hess@opengroupware.org>
2717 * SoObjects/Appointments/SOGoAppointmentFolder.m: added CalDAV
2720 * SoObjects/SOGo/SOGoUserFolder.m: added davCalendarHomeSet CalDAV
2721 property to point at the user folder
2723 2007-03-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2725 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2726 -userInContext:]): returns "SOGoUser".
2728 * SoObjects/Appointments/SOGoCalendarComponent.m
2729 ([SOGoCalendarComponent -contentAsString]): overriden method that
2730 takes the privacy into account and discard the relevant fields if
2731 needed by generating a new content string and caching it.
2732 ([SOGoCalendarComponent
2733 -saveContentString:contentStringbaseVersion:baseVersion]): if the
2734 new method above has cached a content string, release it and set
2735 it to nil so that it will have to be regenerated in the case it is
2737 ([SOGoCalendarComponent -_filterPrivateComponent:component]):
2738 discard the fields that have to be hidden when the card is
2741 * SoObjects/Appointments/SOGoAppointmentFolder.m
2742 ([SOGoAppointmentFolder
2743 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]): make
2744 sure the cards are now handled as instances of
2745 SOGoCalendarComponent instead of SOGoContentObject so that their
2746 content string is taking the privacy classifiction into account.
2747 ([SOGoAppointmentFolder -_privacySqlString]): new method that
2748 generates a query to determine what information can be given and
2749 if the card itself has to be shown.
2751 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
2752 -getICalPersonsFromValue:selectorValue]): removed useless
2753 "isAccessRestricted" method.
2755 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
2756 -setStyle:_style]): test whether the values of orgmail and
2757 partmails are null before manipulating them, otherwise SOGo sends
2758 a "rangeOfString:" message to an NSNull, which makes it crashes.
2760 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2761 -extractQuickFieldsFromEvent:_event]): we now use the new
2762 "symbolicAccessClass" method from iCalEntity to determine the
2763 value of the "classifiction" field.
2764 ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]): same
2767 2007-03-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2769 * SoObjects/Appointments/SOGoAppointmentFolder.m
2770 ([SOGoAppointmentFolder
2771 -fetchCoreInfosFrom:_startDateto:_endDatecomponent:_component]):
2772 see below, the query is adapted consequently.
2774 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2775 -extractQuickFieldsFromTodo:_task]): the field "ispublic" was
2776 renamed to "classification" and can any integer as value.
2777 ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event]):
2780 2007-02-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2782 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
2783 ([_UIxHTMLMailContentHandler -_appendStyle:_charslength:_len]):
2784 don't prepend anything to the class and id named. Instead, we
2785 make each style embedded in the ".SOGoHTMLMail-CSS-Delimiter"
2788 2007-02-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2790 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2791 -rolesOfUser:logininContext:context]): if object does not exists
2792 (for example when it's being created), the current user has the
2793 same rights on it than he/she has on its parent container.
2795 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2796 -nameExistsInFolder:objectName]): methods that tests if a c_name
2797 corresponding to the name passed as parameter is present in the db
2800 2007-02-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2802 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
2803 -rolesForObject:objectinContext:context]): test for
2804 "rolesOfUser:inContext:" in addition to "roleOfUser:...".
2806 * SoObjects/Appointments/SOGoCalendarComponent.m
2807 ([SOGoCalendarComponent -rolesOfUser:logininContext:context]):
2808 returns the roles of the user on the container object if the event
2811 2007-02-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2813 * UI/MailPartViewers/UIxMailRenderingContext.m: returns the
2814 alternativeViewer a multipart/related message is being handled.
2816 * UI/MailPartViewers/UIxMailPartHTMLViewer.m: reimplemented module
2819 * UI/MailPartViewers/UIxMailPartAlternativeViewer.m: select the
2820 text/html component before text/plain.
2822 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2823 -addRequiredKeysOfStructure:path:toArray:recurse:]): accepts the
2824 fetching of HTML parts.
2826 * SoObjects/Appointments/SOGoCalendarComponent.m
2827 ([SOGoCalendarComponent -componentTag]): new template method that
2828 returns the vcalendar tag of the current object.
2829 ([SOGoCalendarComponent -component]): new method that returns the
2830 first object matching [self componentTag] within the current
2831 calendar object. This method replaces 'firstEventInCalendar:' as
2832 well as "firstTaskInCalendar:".
2833 ([SOGoCalendarComponent -roleOfUser:logininContext:context]):
2834 moved method from SOGoAppointmentObject.m.
2836 2007-02-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2838 * UI/Scheduler/UIxCalMulticolumnDayView.[hm]: new daily view
2839 module which shows each selected user's calendar in a different
2840 column instead of mixing their events together.
2842 * UI/Scheduler/UIxCalView.m ([UIxCalView -redirectForUIDsAction]):
2843 replaced use of [NSString stringByTrimmingWhiteSpaces] with
2844 [NSString stringByTrimmingSpaces].
2846 * UI/MailPartViewers/UIxMailPartICalViewer.m: request the key
2847 "cnWithoutQuotes" instead of "cnForDisplay", which no longer
2850 * UI/Scheduler/UIxCalDayOverview.m,
2851 UI/Scheduler/UIxCalDayChartview.m,
2852 UI/Scheduler/UIxCalDayListview.m,
2853 UI/Scheduler/UIxCalWeekOverview.m,
2854 UI/Scheduler/UIxCalWeekChartview.m,
2855 UI/Scheduler/UIxCalWeekListview.m,
2856 UI/Scheduler/UIxCalInlineMonthOverview.m,
2857 UI/Scheduler/UIxCalYearOverview.m: removed unused modules.
2859 2007-02-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2861 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2862 -appendPersonalSourcesInContext:context]): release connectoin
2863 channel when everything is done.
2865 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2866 -newAbAction]): new action method to crate a new contact folder
2869 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -create]): new method
2870 that requests the folder manager to create a folder table with the
2871 specified type at the specified path. The type is taken from [self
2874 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
2875 -folderType]): implemented.
2877 * SoObjects/Appointments/SOGoAppointmentFolder.m
2878 ([SOGoAppointmentFolder -folderType]): implemented.
2880 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2881 -appendPersonalSourcesInContext:context]): we now fetch all
2882 folders with type "Contact" that belong to the current user.
2883 ([SOGoContactFolders -newFolderWithName:name]): new method to
2884 create a new contact folder.
2886 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]): treat
2887 resulting url with [NSString+Utilities hostlessURL] instead of
2888 using NSURL. This is because the url in question sometimes has a
2889 hostname and sometimes not. "hostlessURL" ensure the hostname is
2891 ([UIxComponent -applicationPath]): same as above.
2893 2007-02-08 Ludovic Marcotte <ludovic@inverse.ca>
2895 * SoObjects/Mailer/SOGoMailFolder.m: priorize the lookup of
2896 folders before doing the one on messages.
2898 2007-02-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2900 * SoObjects/SOGo/NSArray+Utilities.m: added an implementation of
2901 makeObjectsPerform:withObject:withObject: for GNUstep
2904 * OGoContentStore/GNUmakefile, Protocols/common.make,
2905 SoObjects/common.make, UI/common.make: install in
2906 GNUSTEP_INSTALLATION_DIR instead of GNUSTEP_USER_DIR.
2908 2007-02-07 Ludovic Marcotte <ludovic@inverse.ca>
2910 * UI/Scheduler/English.lproj/Localizable.strings: fixed typo for
2913 2007-02-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2915 * UI/MailerUI/UIxMailTree.m ([UIxMailTree
2916 -getTitle:folderType:andIcon:forObject:]): disabled Sieve folders
2919 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2920 -checkLogin:_loginpassword:_pwd]): fixed a bug where a wrong
2921 password would be accepted anyway as long as its length was > 0.
2922 This can be the case ONLY when LDAP is disabled otherwise we have
2923 a serious security issue...
2925 * SoObjects/Appointments/SOGoAppointmentObject.m
2926 ([SOGoAppointmentObject -roleOfUser:logininContext:context]): if a
2927 user is not an organizer nor a participant, he is declared as
2928 "Owner" if he owns the calendar the entry where the entry is
2929 contained. Other cases should not be possible.
2931 2007-02-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2933 * UI/Contacts/UIxContactEditor.m: display and handle the new
2936 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2937 ([SOGoContactLDAPFolder -_searchAttributes]): retrieve "calFBURL"
2940 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
2941 -vCard]): put the LDAP "calFBURL" field in the vCard's "FBURL"
2944 2007-01-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2946 * SoObjects/Appointments/SOGoCalendarComponent.m
2947 ([SOGoCalendarComponent -sendEMailNotifications]): new method that
2948 returns the value of ud "SOGoAppointmentSendEMailNotifications"
2950 ([SOGoCalendarComponent
2951 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]): method moved from SOGoAppointmentObject/SOGoTaskObject, replacing occurences of "appointment" to "object" in its name.
2953 2007-01-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2955 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
2956 -defaultAction]): invoke "flushMailCaches" on [self clientObject]
2957 so that the mailbox cache is refreshed everytime the user presses
2958 on "get mail". I doubt a mailbox cache really is useful in general
2961 2007-01-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2963 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2964 -userInContext:]): if the lookup is on "freebusy.ifb" and the
2965 username is "anonymous" the user is automatically set to
2968 2007-01-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2970 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2971 -checkLogin:_loginpassword:_pwd]): authorize special "freebusy"
2972 user with password "freebusy".
2974 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
2975 -contentAsString]): the default timerange is now 14 days before
2976 currentday and 1 month after.
2978 2007-01-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2980 * SoObjects/Appointments/SOGoAppointmentFolder.m
2981 ([SOGoAppointmentFolder
2982 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
2983 escape the record string in a way suitable with XML encoding.
2985 2007-01-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2987 * UI/WebServerResources/SchedulerUI.js: fixed a bug where the
2988 calendar view would not be updated properly.
2990 2007-01-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2992 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2993 -newStartDate]): fix the handling of the component start date
2994 depending on the "hm" and the "day" parameters.
2996 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
2997 -roleOfUser:uidinContext:context]): set role of current user to
2998 "Assistant" if the object that is accessed is "freebusy.ifb".
3000 * SoObjects/Appointments/SOGoAppointmentFolder.m
3001 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): method
3002 moved from UI/Scheduler/UIxCalView:calendarFolderForUID:.
3003 ([SOGoAppointmentFolder
3004 -lookupCalendarFoldersForUIDs:_uidsinContext:]): now use the new
3005 lookupCalendarFolderForUID: method, which doesn't do security
3008 2007-01-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3010 * UI/Common/UIxAclEditor.m ([UIxAclEditor -assistantsValue]): new
3011 accessor that returns the comma-separated list of users with role
3013 ([UIxAclEditor -delegatesValue]): same as above for "Delegate".
3014 ([UIxAclEditor -_prepareUsers]): there is no longer a concept of
3015 "checkedUsers". Instead, each user is either classified in the
3016 list of assistants or the list of delegates.
3018 2006-12-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3020 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
3021 -composeAction]): method imported from removed container modules.
3022 ([UIxMailMainFrame -mailFolderName]): method imported from removed
3025 * UI/MailerUI/UIxMailPopupView.m: a new special popup component
3026 for wrapping UIxMailView with the "popupview" action.
3028 * UI/MailerUI/UIxMailAccountView.m: renamed to UIxMailSplashView,
3029 since its the component that displays the same splash screen than
3030 the one in Thunderbird/Icedove.
3032 * UI/MailerUI/UIxMailAccountViewContainer.[hm],
3033 UI/MailerUI/UI/MailerUI/UIxMailAccountsView.m,
3034 UI/MailerUI/UIxMailListViewContainer.[hm],
3035 UI/MailerUI/UIxMailViewContainer.[hm]: removed
3037 2006-12-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3039 * UI/WebServerResources/HTMLElement.js: replaced the functional
3040 selectNode() and deselectNode() functions with select() and
3041 deselect() methods of HTMLElement.
3043 * UI/WebServerResources/ContactsUI.js: cleanup, most of the
3044 events are initialized from here now instead of in the HTML code.
3046 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3047 -checkRightsAction]): new method similar to the one with the same
3048 name in UIxCalMainView.m.
3050 * UI/Common/UIxAclEditor.m ([UIxAclEditor -saveAclsAction]): added
3051 code to handle the publishing of freebusy information.
3053 2006-12-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3055 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3056 -checkRightsAction]): new action method that returns a
3057 comma-separated list of boolean values matching the right of the
3058 current user to "view" (as a permission) each foreign calendar
3059 stored in his preferences.
3061 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -setOwner:newOwner]):
3062 new method that sets a customOwner, which can be returned with
3063 ownerInContext it set.
3065 * SoObjects/Appointments/SOGoAppointmentFolder.m
3066 ([SOGoAppointmentFolder
3067 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): no longer set the owner of elements here.
3069 2006-12-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3071 * SoObjects/SOGo/SOGoUserFolder.m: same as for SOGoContactFolders
3072 below, but for the Contacts and Calendar collections.
3074 * SoObjects/SOGo/SOGoAclsFolder.m: convert the class to user the
3075 new acl facilities method from sope-gdl/GCSFolder.m.
3077 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3078 -roleOfUser:uidinContext:context]): new method that returns
3079 SOGoRole_Assistant when the user is an assistant or a delegate on
3080 the "personal" ab object. This is so that setting roles on the
3081 SOGoContactFolders object is not required.
3083 2006-12-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3085 * Main/SOGo.m: declare "Freebusy" permissions for the top objects.
3087 * UI/Contacts/UIxContactsAclsSelection.m: new component specific
3088 to the handling of the user selection for the acls.
3090 * SoObjects/SOGo/SOGoPermissions.[hm]: new module that extends the
3091 values from SoPermissions with ones specific to SOGo.
3093 * SoObjects/SOGo/SOGoAclsFolder.[hm]: new class module that
3094 handles the storage for the acls.
3096 * SoObjects/Appointments/SOGoCalendarComponent.[hm]: new parent
3097 class for SOGoAppointmentObject and SOGoTaskObject.
3099 * UI/Common/UIxAclEditor.[hm]: new component that provides a
3100 general editor for folder acls.
3102 * SoObjects/SOGo/NSString+Utilities.[hm]: old "NSString+URL"
3104 ([NSString -davMethodToObjC]): method that returns the method name
3105 for a DAV property implementation.
3107 * SoObjects/SOGo/NSArray+Utilities.m: new extension module to
3109 ([NSArray -stringsWithFormat:format]): new method that returns
3110 formatted occurences of the strings stored in the array.
3112 * SoObjects/SOGo/SOGoDAVRendererTypes.m ([SOGoDAVSet
3113 +davSetWithArray:newValuesofValuesTaggedAs:newValueTag]): a new
3114 subclass module of SoWebDAVValue that supports collections of
3115 properties of the same type.
3117 2006-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3119 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
3120 -lookupFolder:ofClassNamed:inContext:]): added the ability to
3121 configure the name of the SOGoDraftFolders with the ud var
3122 "SOGoDraftsFolderName".
3124 2006-11-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3126 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
3127 -userTimeZone:username]): new method that returns the timezone for
3128 the specified user depending on his preferences and the server
3131 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3132 -stringForData:partInfo:]): take the encoding into account and
3133 translate the text to "normal" before processing the charset data.
3135 2006-11-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3137 * UI/WebServerResources/generic.js: the progress indicator is on
3138 when loading the page so we turn it off, and we turn it back on
3139 whenever we switch to another module...
3141 * UI/WebServerResources/SchedulerUI.js: make sure the day view
3142 synchronization mechanism works everywhere.
3144 * UI/WebServerResources/generic.js: the log window is not only
3145 visible when UIxDebugEnabled is set.
3147 * UI/WebServerResources/SchedulerUI.js: the month overview's day
3148 cells are now initialized with the DOM event interface methods
3149 instead of with html attributes.
3151 * UI/Templates/MailerUI/UIxMailView.wox: don't display useless
3152 headers (should be made configurable at some point)...
3154 * OGoContentStore/sql/generate-folderinfo-sql-for-users.sh: drop
3155 "not null" constraint on startdate, enddate, isopaque,
3156 participants and partmails.
3158 2006-11-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3160 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
3161 -hoursToDisplay]): prevent a crash by retaining the
3162 "hoursToDisplay" array after it's created.
3163 ([UIxCalDayTable -clickableHourCellClass]): new method for the new
3164 clickable hours DIV.
3166 * UI/WebServerResources/SchedulerUI.js: made the event
3167 participation status modification asynchronous, which also fixes a
3168 bug where the window would sometimes close before the accept or
3169 decline action was completed. Also, adapted the event handling
3170 related to the days or weeks view with the new DIV-based layout.
3172 * UI/Scheduler/UIxCalInlineAptView.m: same as the first below...
3174 * UI/Scheduler/UIxCalDayTable.m: enhanced to provide the new
3175 DIV-based presentation of the days and weeks.
3177 * SoObjects/Appointments/SOGoTaskObject.m: same as below...
3179 * SoObjects/Appointments/SOGoAppointmentObject.m: lookupName:...
3180 might return an exception so we have to handle it if we don't
3183 2006-11-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3185 * UI/WebServerResources/SchedulerUI.js: updated the list
3186 initialization code to use the new event management scheme, adding
3187 what was missing to be able to delete events and tasks again.
3189 * UI/WebServerResources/MailerUI.js: added code to activate the
3190 "Get mails" button. Fixed a bug which prevented messages to be
3193 * UI/WebServerResources/UIxFreeBusyUserSelector.js: handle tab
3194 navigation and focus handling of INPUTs.
3196 2006-11-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3198 * UI/WebServerResources/MailerUI.js: added code to handle the
3199 possible drag and drop events to manager in the mail module.
3200 Moving messages, opening parent folders, ...
3202 * UI/WebServerResources/SOGoDragAndDrop.js: new file containing
3203 the drag and drop manager as well as the interface to HTMLElement
3204 to trigger drag and drop events.
3206 * UI/MailerUI/UIxMailView.m ([UIxMailView -moveAction]): new
3207 action to move the current message to the mailbox named after the
3208 value of parameter "tofolder".
3210 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3211 -moveToFolderNamed:folderNameinContext:]): new method base on
3214 2006-11-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3216 * UI/WebServerResources/generic.js: added and activated many
3217 "load" handlers to configure generic widgets used across the
3218 modules. More events are now handled in a DOM-fashion way instead
3219 of by setting the relative attributes in the templates.
3221 * UI/Templates/UIxSortableTableHeader.wox: all the events are
3222 declared from the javascript DOM onload handlers.
3224 * UI/Templates/UIxPageFrame.wox: load the new SOGoDragHandles.js
3227 * UI/Templates/MailerUI/UIxMailListView.wox: all the events are
3228 declared from the javascript DOM onload handlers.
3230 * UI/MailerUI/UIxMailListView.m: removed all the JS methods since
3231 we want everything to be separated from each other, as much as
3234 * UI/WebServerResources/SOGoDragHandles.js: new module containing
3235 the "SOGoDragHandlesInterface", implementing methods that can be
3236 attributed to DIV so that they can be used as drag handles.
3238 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
3239 -asQPSubjectString]): initialize the tmp strings with '0' to make
3240 sure they don't contain garbage.
3242 2006-11-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3244 * UI/WebServerResources/MailerUI.js: register the messageList
3245 table as a dragging source and the leaf of the navigation tree as
3246 dnd destinations to the DNDManager.
3248 * UI/WebServerResources/generic.js: initialize tabs from the
3249 "unload" event listener that is added programmatically instead of
3250 from the template... Also, added the new DNDManager object.
3252 * UI/WebServerResources/HTMLTableElement.js: added code to
3253 simulate XUL drag n drop events. This code will possibly be moved
3254 to HTMLElement.js instead later...
3256 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3257 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): same as
3260 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3261 -_qualifierForFilter:filter]): only search records which starts
3262 with the specified pattern.
3264 2006-11-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3266 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
3267 -asQPSubjectString]): new method that returns the special QP
3268 string with its qp declaration for email subjects.
3269 ([SOGoDraftObject -bodyPartForText])
3270 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): don't
3271 double-encode data in UTF-8.
3273 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3274 -newStartDate]): new method to determine the start date depending
3275 on the URL parameters, the current day and the current time.
3276 ([UIxComponentEditor -toolbar]): new method to determine the
3277 filename of the toolbar that should be drawn depending on the
3278 ownership and the list of attendees of the task/event wrt to the
3281 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
3282 -setDayStartHour:aStartHour]): adjust the minutes to the next
3283 quarter of hour, if not already set to a quarter.
3285 * UI/WebServerResources/UIxAppointmentEditor.js,
3286 UI/WebServerResources/UIxTaskEditor.js: added code to manage start
3289 2006-11-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3291 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3292 -loadValuesFromComponent:component]): handles access class
3293 (privacy) and status.
3295 * UI/Contacts/UIxContactsListViewContainer.m
3296 ([UIxContactsListViewContainer -additionalFolders]): return nil if
3297 [self additionalAddressBooks] returns an empty string.
3299 2006-11-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3301 * UI/Scheduler/UIxCalMonthView.m ([UIxCalMonthView
3302 rangesOf7Days]): enhanced and debugged algorithm to feed the array
3303 with slices where the first day is still in the requested month.
3305 * UI/Templates/UIxPageFrame.wox: the logConsole is created only on
3308 * UI/SOGoUI/SOGoAptFormatter.m: added code to handle the display
3309 of events in the day boxes of the calendar's monthly view.
3311 * SoObjects/Appointments/SOGoTaskObject.m ([SOGoTaskObject
3312 -davContentType]): declare "text/calendar".
3314 * SoObjects/Appointments/SOGoAppointmentObject.m
3315 ([SOGoAppointmentObject -davContentType]): declare
3318 * SoObjects/Appointments/SOGoAppointmentFolder.m
3319 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): certain
3320 HTTP methods are handled by SOPE and requires nil to be returned,
3321 this method now invokes the new
3322 "requestNamedIsHandledLater:inContext:" method to check that.
3323 ([SOGoAppointmentFolder
3324 -requestNamedIsHandledLater:nameinContext:context]): new methods
3325 that returns "YES" only for the "OPTIONS" http method (for now...).
3326 ([SOGoAppointmentFolder -davComplianceClassesInContext:]):
3327 overloaded method to append the "access-control" and
3328 "calendar-access" DAV abilities to the initial declaration.
3330 * UI/Scheduler/UIxCalMonthView.[hm]: rewritten module entirely to
3331 imitate the look of Sunbird/Lightning's monthly view.
3333 * UI/Scheduler/UIxCalMonthView.[hm]: renamed to
3334 UIxCalMonthViewOld.[hm].
3336 2006-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3338 * UI/Scheduler/UIxFreeBusyUserSelectorTable.m
3339 ([UIxFreeBusyUserSelectorTable -currentContactHasStatus]): new
3341 ([UIxFreeBusyUserSelectorTable -currentContactStatusImage]):
3342 returns an image name based on the participation status of the
3345 * UI/WebServerResources/SchedulerUI.js: same strip down as for
3348 * UI/Contacts/UIxContactsListViewContainer.m ([UIxContactsListViewContainer -additionalAddressBooks])
3349 ([UIxContactsListViewContainer -additionalFolders])
3350 ([UIxContactsListViewContainer -setCurrentAdditionalFolder:newCurrentAdditionalFolder])
3351 ([UIxContactsListViewContainer -currentAdditionalFolder]): new
3352 methods to handle the external addressbooks a user has subscribed
3353 too, by retriving them from his preferences.
3355 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3356 -updateAdditionalAddressBooksAction]): new method that updates the
3357 user settings with the list of addressbook he has subscribed to.
3359 * UI/Contacts/UIxContactsAddressBooksSelection.m: new component
3360 module for the address book selector.
3362 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
3363 a toolbar with two buttons ("add" and "remove") to manage the
3364 additional addressbooks a user might subscribe to.
3366 * UI/WebServerResources/ContactsUI.js: added code to handle
3367 "external addressbooks" from the Javascript point-of-view, by
3368 extending existing methods and adding code for the "add ab" and
3369 "remove ab" buttons.
3371 * UI/WebServerResources/generic.js: moved extensions methods to
3372 DOM elements to separate files for better clarity.
3374 * UI/Common/UIxPageFrame.m ([UIxPageFrame -pageContentClasses]):
3375 new method that returns "pageContent" as class, but also "popup"
3376 for the DIV where the page content lies, so that we can manipulate
3377 the content of popup's with CSS identifiers.
3379 2006-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3381 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
3382 -displayStyle]): new method that returns a string containing the
3383 css style relative to the current appointment cell. This code is
3384 currently inactive but might be reused later.
3386 * UI/WebServerResources/SchedulerUI.js: added code to handle the
3387 display of the selected day (the day pointed by the mouse, or the
3388 current day when changing the view).
3390 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
3391 -dayCellClasses]): new method that returns a string containing the
3392 css classes applicable to the current cell, depending on the
3393 position of the day in the week, the day of today and the
3396 * UI/Scheduler/UIxCalCalendarsListView.m ([UIxCalCalendarsListView
3397 -currentContactAptBorder]): new method that returns the
3398 appropriate border color for the specified user.
3400 * SoObjects/Appointments/SOGoAppointmentObject.m
3401 ([SOGoAppointmentObject
3402 -saveContentString:contentStringbaseVersion:baseVersion]):
3403 overloaded method that parse new events and detects if they have
3404 an organizer or not. If they are new and have no organizer set
3405 (Sunbird/Lightning...), the owner of the event is set as
3408 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: new
3409 category that provides facility methods and interfaces to the
3412 * SoObjects/Contacts/product.plist: give full access to ANY
3413 authenticated user, not just the owner (to every objects...).
3415 2006-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3417 * UI/WebServerResources/UIxFreeBusyUserSelector.js: make sure
3418 every replica widgets are declared as such to their master
3419 counterpart. Take the days into account when displaying the time
3420 range taken by the appointment.
3422 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
3423 -getICalPersonsFromValue:selectorValue]): method taken from
3424 UIxFreeBusyUserSelector, that is shared both by
3425 UIxFreeBusyUserSelector and UIxFreeBusyUserSelectorTable.
3427 * SoObjects/Appointments/SOGoAppointmentFolder.m
3428 ([SOGoAppointmentFolder
3429 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): reverted to search algorithm to search for events happening outside 0 or 1 (at most) boundary of the timerange.
3431 * UI/Scheduler/UIxFreeBusyUserSelectorTable.[hm]: new subcomponent
3432 derived and taken as a subset of UIxFreeBusyUserSelector that
3433 implements the table part of the FreeBusy view. Most of the
3434 methods of UIxFreeBusyUserSelector relative to that table were
3435 moved into UIxFreeBusyUserSelectorTable, which can also be used as
3436 a standalone view for AJAX operations.
3438 2006-10-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3440 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3441 -vCard]): change reverted.
3443 * UI/Contacts/UIxContactEditor.m: check whether the client contact
3444 folder has selector "globallyUniqueObjectId" before calling that
3447 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3448 -vCard]): the "setVClass" NGVCard method really is "setClass"
3451 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3452 ([SOGoContactLDAPFolder -_searchAttributes]): fixed typo to
3453 request the "streetAddress" instead of the "streetaddress".
3454 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): lookup
3455 mails that *contain*, and not just *start with* the search
3458 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3459 -vCard]): mark address returned from LDAP as the work address.
3461 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: made the whole
3462 span covered with the anchor, not only the textual information
3465 * UI/Templates/SchedulerUI/UIxCalMainView.wox: specify the type
3466 argument (event or task) to newEvent in the appointmentListMenu.
3467 Make the appointmentsListView display the appointmentsListMenu.
3469 * UI/SOGoUI/SOGoAptFormatter.m: enlarge the text size limit from
3470 12 to 50 before displaying "...".
3471 ([SOGoAptFormatter -fullDetailsForApt::]): display location only
3472 if its length > 0, whether location itself is nil or not...
3473 ([SOGoAptFormatter -tooltipForApt::_refDate]): display information
3474 of which the length > 0.
3476 2006-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3478 * UI/WebServerResources/UIxAppointmentEditor.js: correctly handles
3479 french and ISO dates.
3481 * UI/Scheduler/UIxFreeBusyUserSelector.[hm]: added code an ivars
3482 from UIxContactSelector to handle contact lists (current and
3483 additional contacts).
3485 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3486 -_freeBusyAsText]): added handling of an "additional"-named query
3487 parameter that describe the number of additional days after
3488 enddate that should be returned.
3490 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3491 -_responseForResults:results]): give priority to results with
3492 "c_uid" fields. If none returned, use the first contact received.
3494 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3495 -extractQuickFieldsFromEvent:_event]): changed "TENTATIVE" code to
3496 2 and "CANCELLED" to 0.
3498 2006-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3500 * UI/WebServerResources/UIxAppointmentEditor.js: handle conversion
3501 of start and end dates to short string dates.
3503 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3504 -readFreeBusyAction]): new method that returns an array of numbers
3505 corresponding to the state in the freebusy of each "quarter of an
3506 hour" between the "sday" and "eday" date parameters passed in the
3507 url. This permits to handle the display of the freebusy with Ajax
3509 ([SOGoUserHomePage -_freeBusyAsText]): add 2 days to the end date
3510 since the free busy displays 2 days ahead.
3512 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3513 -contactSearchAction]): new action that returns the uid and the
3514 username + email of the user whose name contain the value of the
3515 "search" url parameter.
3517 * SoObjects/Appointments/SOGoAppointmentFolder.m
3518 ([SOGoAppointmentFolder
3519 -fetchFreebusyInfosFrom:_startDateto:_endDate]): added fields
3520 useful for the computing of the status of the freebusy.
3522 * UI/Scheduler/UIxFreeBusyUserSelector.m ([UIxFreeBusyUserSelector
3523 -init]): new component that incarnates a user selector for events
3524 inspired by the new one found in Thunderbird Lightning.
3526 2006-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3528 * UI/WebServerResources/generic.js: added code to enable or
3529 disable anchor visually (following our internal algorithm).
3531 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -init]):
3532 added new "url" ivar with its classic accessors.
3533 ([UIxComponentEditor -urlButtonClasses]): new method that returns
3534 the class strings for the url button on the appointment/task
3535 editor (depending on the validity of the url).
3537 * UI/Templates/SchedulerUI/UIxTaskEditor.wox,
3538 UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: start rewriting
3539 the template to match the Lightning's new task/appointment editor.
3541 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor -saveValuesIntoAppointment:_appointment]): initialize url from the components'url.
3543 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveValuesIntoTask:_task]): initialize url from the components'url.
3545 2006-10-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3547 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3548 ([SOGoContactLDAPFolder
3549 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): perform the searchs on objects which start with instead of contain the lookup key.
3551 * SoObjects/Appointments/SOGoAptMailNotification.[hm]: work on
3552 iCalEntityObject instances instead of just iCalEvent's.
3554 * SoObjects/Appointments/SOGoAppointmentFolder.m
3555 ([SOGoAppointmentFolder
3556 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): set ownership of returned records by adding an "owner" key to the resulting dictionaries.
3558 * SoObjects/SOGo/NSObject+Owner.[hm]: removed module since it's a
3559 bad way of handling ownership that way.
3561 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3562 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): search also
3563 on "cn", just like Mozilla.
3565 2006-10-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3567 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]):
3568 "to" should be retained, otherwise it will be autoreleased and a
3571 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3572 -writeAction]): updated method to fetch the card before initing
3575 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3576 -extractQuickFieldsFromTodo:_task]): fixed to use NSNull instead
3579 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
3580 -iCalStringTemplate]): start and due date are now optional.
3582 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
3583 -setDayStartHour:aStartHour]): added a new "isDisabled" ivar with
3584 appropriate accessors to be settable through the templates.
3586 * UI/Scheduler/UIxDatePicker.m ([UIxDatePicker -init]): added a
3587 new "isDisabled" ivar with appropriate accessors to be
3588 settable through the templates.
3590 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3591 -availableCalendars]): new method that list the calendars to which
3592 the user has subscribed.
3593 ([UIxComponentEditor -componentOwner]): returns the owner of the
3596 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3597 -extractQuickFieldsFromTodo:_task]): set the start and enddate of
3598 quickentries to null whenever each or all of them are null, by
3599 providing an impossible timestamp from with NSNotFound as value.
3601 2006-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3603 * UI/WebServerResources/UIxMailEditor.js: update the algorithm
3604 that handles the creation of new fields with the new APIs and the
3605 new node structure on the page.
3607 * UI/Scheduler/UIxAppointmentEditor.m,
3608 UI/Scheduler/UIxTaskEditor.m:
3609 refactored to user UIxComponentEditor as parent class.
3611 * UI/Scheduler/UIxComponentEditor.[hm]: new class module
3612 containing the methods common to the UIxTaskEditor and the
3613 UIxAppointmentEditor.
3615 2006-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3617 * SoObjects/Appointments/SOGoAppointmentFolder.m
3618 ([SOGoAppointmentFolder -doCalendarQuery:context]): now supports
3619 the handling of time-ranges.
3621 * UI/WebServerResources/ContactsUI.js: specify a notification type as
3622 parameters when onConfirmContactSelection in invoked.
3624 * UI/WebServerResources/generic.js: specify a notification type as
3625 parameters when onContactRemove in invoked.
3627 * UI/WebServerResources/SchedulerUI.js: when the user deselects
3628 all calendars, select his entry.
3630 2006-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3632 * UI/WebServerResources/SchedulerUI.js: edit and delete events
3633 with their owner-relative urls. Generate a correct entry in the
3634 css color table when a user is added to the calendars list. Put
3635 the same color next to the user id.
3637 * UI/WebServerResources/generic.js: implemented some new helper
3640 * SoObjects/Appointments/SOGoAppointmentFolder.m
3641 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): don't delete
3642 entries if their owner is not the current user.
3644 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
3645 -displayClasses]): return the correct class for the current event
3646 representation depending on its owner.
3648 * UI/Scheduler/UIxCalCalendarsListView.m: added method to create
3649 and associate a color for each user login depending on its
3650 position in the list.
3652 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView
3653 -currentRowCSSClass]): return the correct class for the current
3654 row depending on the owner of the event.
3656 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
3657 -setColors:colors]): new method to associate a color table with
3658 each user in the list.
3660 * SoObjects/Appointments/SOGoAppointmentFolder.m
3661 ([SOGoAppointmentFolder
3662 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): associate each returned record with the owner of the table they are retrieved from.
3664 * SoObjects/SOGo/NSObject+Owner.[hm]: new extension module to
3665 NSObject to associate an instance with a user.
3667 2006-10-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3669 * UI/WebServerResources/SchedulerUI.js: added handling of multiple
3672 * UI/WebServerResources/ContactsUI.js: added handling of
3673 notification of changes to contact selectors.
3675 * UI/WebServerResources/generic.js: added handling of notification
3676 of changes to contact selectors.
3678 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3679 -updateCalendarsAction]): proxy method to update the user
3680 preference table with the new selected calendar uids.
3682 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3683 -calendarsContactsAction]): new method.
3685 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector -setCheckedBoxes:boxes])
3686 ([UIxContactSelector -setHasCheckBoxes:aBool])
3687 ([UIxContactSelector -isCheckBoxChecked]): new accessors method to
3688 permit the drawing of checkboxes instead of card icons.
3690 * UI/Scheduler/UIxCalCalendarsListView.m: new component class that
3691 wrap a selector the the "Calendars" tab.
3693 * UI/Contacts/UIxContactsCalendarsSelection.m: buttons for the
3694 new user calendar selector.
3696 2006-10-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3698 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: time ranges
3699 may cover hour 0 to hour 23.
3701 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
3702 -iCalStringFromQueryParameter:format:]): dates explicitly set to
3705 * UI/WebServerResources/SchedulerUI.js: manage both lists of
3706 objects wrt to the toolbar actions.
3708 * UI/WebServerResources/generic.js: added code to the "String"
3709 class to decode number-encoded char entities.
3711 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3712 -batchDeleteAction]): new method to delete selected entries in the
3715 * SoObjects/Appointments/SOGoAppointmentFolder.m
3716 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): new method
3717 that delete identified entries in batch.
3719 * UI/SOGoUI/UIxComponent.m ([UIxComponent
3720 -jsCloseWithRefreshMethod:methodName]): new method with explicit purpose.
3722 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]),
3723 UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
3724 -saveAction]), UI/MailerUI/UIxMailEditor.m ([UIxMailEditor
3725 -sendAction]), UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3727 return a UIxJSClose component if everything went fine.
3729 * UI/Scheduler/UIxTaskEditor.h: interface extracted from
3732 * UI/Scheduler/UIxAppointmentEditor.h: interface extracted from
3733 UIxAppointmentEditor.m.
3735 * UI/Common/UIxJSClose.[hm]: new UIxComponent designed to display
3736 a very light page with javascript code to close a window, by
3737 calling a method on the opener if specified. This component is
3738 designed to work as a response to form postings.
3740 2006-10-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3742 * SoObjects/Appointments/SOGoTaskObject.[hm]: clone of
3743 SOGoAppointmentObject adapted for the handling of tasks.
3745 * SoObjects/Appointments/NSArray+Appointments.[hm]: category
3746 extracted from SOGoAppointmentObject.
3748 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
3749 -saveUrl]): returns the url needed to POST the new form to.
3750 redirect the user to <aptid>/editAsAppointment instead of /edit,
3751 so that SOGoAppointmentFolder can return the correct object type.
3753 * SoObjects/SOGo/NSObject+AptComparison.m ([NSObject
3754 -compareAptsAscending:_other]): accept empty start or end dates.
3756 * SoObjects/Appointments/SOGoAppointmentFolder.m
3757 ([SOGoAppointmentFolder
3758 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): added a "component" parameter to match the query against the specified component types. Made startDate and endDate optional by ignoring them altogether in the query whenever one of them is nil.
3759 ([SOGoAppointmentFolder -doCalendarQuery:context]): fetch
3760 components of type "vtodo" as well as "vevent".
3761 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): if the
3762 url specified ends with AsTask or AsAppointment, returns the
3763 an object of the appropriate class, otherwise deduce it from its
3764 content if the HTTP method is "PUT", otherwise read its type from
3767 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3768 -extractQuickFieldsFromTodo:_task]): extract quick fields from
3771 * UI/Scheduler/UIxCalView.m ([UIxCalView
3772 -fetchCoreAppointmentsInfos]): replacement methods for
3773 fetchCoreInfos but by retrieving object with component "vevent".
3774 ([UIxCalView -fetchCoreTasksInfos]): same as above for "vtodo"
3777 * UI/Scheduler/UIxCalTasksListView.[hm]: clone of
3778 UIxCalAptListView adapted for the handling of tasks.
3780 * UI/Scheduler/UIxTaskProposal.[hm],
3781 UI/Scheduler/UIxTaskView.[hm], UI/Scheduler/UIxTaskEditor.[hm]:
3782 clones of the UIxAppointment* classes for the handling of tasks.
3784 * UI/WebServerResources/UIxTaskEditor.js: clone of
3785 UIxAppointmentEditor adapted for the handling of tasks.
3787 * UI/WebServerResources/SchedulerUI.js: added support for tasks.
3788 Scroll the daily view to the appropriate hour when an appointment
3789 is selected in the appointments list.
3791 2006-10-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3793 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
3794 -setDayStartHour:aStartHour]): specifies the user timezone on the
3797 * UI/Scheduler/UIxAppointmentEditor.m: indicate DTSTAMP with "GMT"
3800 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate -adjustedDate])
3801 ([NSCalendarDate -driftedDate]): methods made useless by a better
3802 comprehension of the NSTimeZone API...
3804 2006-10-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3806 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): call
3807 new methods from the NSCalendarDate methods.
3809 * SoObjects/SOGo/NSCalendarDate+SOGo.m: module replacing and
3810 extending UI/Scheduler/NSCalendarDate+Scheduler.m.
3812 +dateFromShortDateString:dateStringandShortTimeString:timeStringinTimeZone:timeZone]): new method that generates a date from two short string formatted as follow: "yyyymmdd" and "hhmm". Thismethod replaces a similar method from UIxComponent (noted below).
3813 ([NSCalendarDate -adjustedDate]): this method returns another
3814 instance set to the correct hour after the original date was set
3815 from a non-GMT timezone. This date can be used for storage.
3816 ([NSCalendarDate -driftedDate]): this method does exactly the
3817 opposite of -adjutedDate, that is, it enables the method
3818 hourOfDay, minuteOfHour etc... to return the values according to
3819 the original date's timezone. This date CANNOT be used for storage.
3821 * UI/Scheduler/NSCalendarDate+Scheduler.m ([NSCalendarDate
3822 -shortDateString]): new method that will return a "short date
3823 string" (yyyymmdd) from a calendar date object.
3825 * UI/SOGoUI/UIxComponent.m ([UIxComponent
3826 -_cDateFromShortDateString:dateStringandShortTimeString:timeString]): new method to compute the selected date from the "day" and "hm" query parameters (if found). This method replaces the old algorithm that was found in the "selectedDate" method.
3828 * Main/sogod.m (main): initialize the NSTimeZone's defaultTimeZone
3829 to the value of SOGoServerTimeZone or "Canada/Eastern" if not found.
3831 2006-10-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3833 * UI/WebServerResources/SchedulerUI.js: added code to scroll the
3834 view of the day at the height of hour 8:00.
3836 * UI/Scheduler/UIxCalView.m ([UIxCalView -dayStartHour]): returns 0.
3837 ([UIxCalView -dayEndHour]): returns 24.
3839 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView -defaultAction])
3840 ([UIxContactFoldersView -newAction]): invoke
3841 _selectActionForApplication: on self with the proper attribute too.
3843 * UI/Contacts/UIxContactsSelectionViewContainer.m: removed since
3844 we now use the action mechanism in UIxContactsListView to keep the
3845 same view for the contact selectors and the regular contact view.
3847 * UI/Contacts/UIxContactsListViewContainer.[hm]: replaces
3848 UIxContactsListViewContainerBase.[hm]
3850 * UI/Contacts/UIxContactsListView.[hm]: replaces UIxContactsListViewBase.[hm]
3852 * UI/WebServerResources/generic.js: generalized emailstring
3853 handling functions. Generalized address book access functions.
3855 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
3856 -isPopup]): return YES if the "popup" query parameter is set.
3858 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3859 -defaultAction]): keep the url parameters when redirecting.
3860 ([UIxContactFoldersView -selectForSchedulerAction])
3861 ([UIxContactFoldersView -selectForMailerAction]): new action
3862 methods for the /scheduler-contacts and /mailer-contacts invocations.
3864 * SoObjects/SOGo/SOGoObject.m: compose the action url using the
3865 newly available NSString+URL category.
3867 * SoObjects/SOGo/NSDictionary+URL.m ([NSDictionary
3868 -asURLParameters]): handle dictionary entries which could be
3869 instances of NSArray rather than NSString.
3871 * SoObjects/SOGo/NSString+URL.m ([NSString
3872 -composeURLWithAction:actionparameters:urlParametersandHash:useHash]): when composing the url, remove the encoded parameters first since they will be added later.
3873 ([NSString -urlWithoutParameters]): new method that returns the
3874 url without its parameters.
3876 * SoObjects/SOGo/NSString+iCal.h: deleted obsolete file.
3878 * SoObjects/SOGo/NSDictionary+URL.[hm],
3879 UI/SOGoUI/NSString+URL.[hm]: moved from UI/SOGoUI/.
3881 * UI/WebServerResources/UIxMailEditor.js: add support for
3882 additions of different types (to, cc, bcc) of recipients from the
3885 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): added the
3888 * UI/Contacts/UIxContactsMailerSelection.m,
3889 UI/Contacts/UIxContactsSchedulerSelection.m: classes replacing
3890 UI/Contacts/UIxContactsSelectionView.m to provide a different set
3891 of widgets depending on the application invoking the contact list.
3893 2006-09-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3895 * UI/WebServerResources/ContactsUI.js: hide the current contact
3896 whenever the user changes of contact folder.
3898 * UI/WebServerResources/UIxContactEditor.js: the contact UID is
3899 now provided by the template when loading the page.
3901 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
3902 -iCalPersonWithUid:uid]): new method taken from removed module
3905 2006-09-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3907 * UI/Scheduler/UIxAppointmentView.m ([UIxAppointmentView
3908 -categoriesAsString]): same as below.
3910 * UI/Scheduler/UIxAppointmentEditor.m: adapted by using the new
3911 vcalendar API's iCalEvent instead of the removed SOGoAppointment.
3913 * SoObjects/Appointments/SOGoAppointmentObject.m
3914 ([SOGoAppointmentObject -calendarFromContent:cnt]): new helper method.
3915 ([SOGoAppointmentObject -firstEventFromCalendar:calendar]): new
3918 * SoObjects/Appointments/SOGoAppointmentFolder.m
3919 ([SOGoAppointmentFolder -doCalendarQuery:context]): added a
3920 hackish test to detect whether the request concernes VEVENT's or
3921 anything else. Return events only in the former case.
3922 ([SOGoAppointmentFolder
3923 -fetchOverviewInfosFrom:_startDateto:_endDate]): retrieve the
3924 c_name quickfield so that the calendar list can identify the
3925 appointments with their complete "filename".
3927 * OGoContentStore/OCSiCalFieldExtractor.m: use CardGroup's
3928 groupsOfClass:fromSource: to parse the given vcalendar.
3930 * UI/Scheduler/iCalRecurrenceRule+SOGo.m: removed obsolete class.
3932 * UI/Scheduler/SOGoAppointment+UIx.h: removed obsolete class.
3934 * SoObjects/SOGo/SOGoAppointmentICalRenderer.[hm]: removed
3937 * SoObjects/SOGo/SOGoAppointment.[hm]: removed obsolete class.
3939 2006-09-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3941 * SoObjects/Appointments/SOGoAppointmentFolder.m
3942 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): be
3943 sensitive to the CalDAV method names.
3944 ([SOGoAppointmentFolder -doCalendarQuery:context]): method for the
3945 "calendar-query" CalDAV method name.
3947 * UI/WebServerResources/ContactsUI.js: removed a lot of useless
3948 code coming originally from MailerUI.js.
3950 * UI/WebServerResources/UIxContactEditor.js: imitate the
3951 Thunderbird address book by completing the display name with the
3952 content of the first and last name fields, until the display name
3953 is modified manually.
3955 * UI/WebServerResources/generic.js: added a "trim" method to the
3958 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
3959 -displayName]): new method that returns the display name from "cn"
3960 or from the "displayName" key if found.
3962 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3963 -initSnapshot]): check if "[card n]" returns anything to avoid a
3966 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): new method
3967 that returns an unparsed doctype definition for the pages.
3969 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3970 -vCard]): set the card's fn to attribute "displayName" if found
3973 2006-09-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3975 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3976 -vCard]): handle the "streetAddress" and "l" fields.
3978 * UI/Templates/MailerUI/UIxMailEditor.wox: arranged the message
3979 header fields by converting the tables to DIVs and SPANs.
3981 * UI/WebServerResources/generic.css: attempted unification of font
3982 families and size across all the elements. changed the
3983 logConsole's "position" from "fixed" to "absolute" to avoid
3986 2006-09-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3988 * UI/WebServerResources/ContactsUI.js (uixDeleteSelectedContacts):
3989 empty the contact view when the current contact is being deleted.
3991 * UI/WebServerResources/MailerUI.js (newContactFromEmail): fully
3992 parse the email field and provide the address full name if found
3993 as the "contactFN" parameter.
3995 * UI/WebServerResources/generic.js (openMailTo): do not give a
3996 name to the opened window so that serveral ones can be opened at
3999 * UI/MailPartViewers/UIxMailPartTextViewer.m
4000 ([UIxMailPartTextViewer -flatContentAsString]): override method by
4001 replacing carriage returns with "<br />" in the result string from
4002 super's implementation.
4004 * UI/Contacts/UIxContactView.m ([UIxContactView
4005 -_urlOfType:aType]): don't manage non-mailto urls through
4006 javascript, let the user decide what's best for him.
4008 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4009 -newAction]): transfer all the query parameters by using the
4010 "asURLParameters"'s result string from [self queryParameters].
4012 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4013 -initSnapshot]): retrieve "contactEmail" and "contactFN" from the
4014 query parameters and put their values (if any) into the snapshot.
4016 * UI/Contacts/UIxContactView.m ([UIxContactView -note]): convert
4017 carriage-returns to "<br />".
4018 ([UIxContactView -workCompany]): explicitly initialize company to
4019 nil if org is nil or empty.
4021 * UI/WebServerResources/UIxContactEditor.js: updated validation
4022 code after we added and renamed some fields.
4024 * UI/WebServerResources/ContactsUI.js: added code to cache contact
4025 cards and to handle card updates.
4027 2006-09-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4029 * UI/Contacts/UIxContactView.m ([UIxContactView -hasOtherInfos]):
4030 test the length of the returned string since they will never be
4033 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor -saveAction]):
4034 return self if the process went successful, returns an exception
4035 otherwise (and only otherwise...).
4037 * OGoContentStore/OCSContactFieldExtractor.m
4038 ([OCSContactFieldExtractor -extractQuickFieldsFromVCard:_vCard]):
4039 adapted method to the new VCard api. Since the cards are stored in
4040 vcard format, we no longer deal with a dictionary but with a
4043 2006-09-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4045 * UI/Contacts/UIxContactView.m ([UIxContactView -preferredEmail]):
4046 return a string with a "mailto" url.
4047 ([UIxContactView -_urlOfType:aType]): generic method to return a
4048 url string with a html anchor pointing to it.
4050 * UI/Contacts/UIxContactEditor.[hm]: UIxContactEditorBase renamed
4051 since subclass "UIxContactEditor" did nothing. Implemented code to
4052 display and modify the values parsed from the vcards, displayed in
4053 a way similar to the Thunderbird addressbook.
4055 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4056 -save]): new dummy method.
4058 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
4059 -save]): made method void.
4061 2006-09-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4063 * UI/Contacts/UIxContactView.m: added many wrapper methods to
4064 display blocks of data à la Thunderbird Addressbook. If data is
4065 available, those wrappers (around the NGVCard methods) will
4066 enclose the results in a proper HTML output with the correct label
4067 (if present), otherwise it will return an empty string.
4068 ([UIxContactView -vcardAction]): new action to return the contact
4069 as text/vcard (for exporting).
4071 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4072 +contactEntryWithName:aNamewithLDAPEntry:anEntryinContainer:aContainer]): adapted the mapping of the LDIF data with the new NGVCard API.
4074 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
4075 -vCard]): create a new NGVCard instance when no data is available
4077 ([SOGoContactGCSEntry -save]): save the vCard using the new
4078 "versitString" API method/message.
4080 * UI/Contacts/UIxContactView.h: separated interface from
4083 * UI/WebServerResources/ContactsUI.js: add-ed code to download card
4084 views and display them beneath the list.
4086 2006-09-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4088 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -userTimeZone]): retain
4089 the timezone even when it's the server timezone.
4091 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
4092 -privateContacts:inContext:]): no long configure the calendar
4093 object with the user's timezone since it's now accessible
4094 application-wide throught the SOGoObject methods.
4096 * UI/SOGoUI/UIxComponent.[hm]: removed the "viewTimeZone" ivar and
4097 method. Removed the "backendTimeZone" method.
4099 * UI/MainUI/SOGoUserHomePage.[hm]: made a subclass of UIxComponent
4100 instead of SoComponent.
4102 * SoObjects/Appointments/SOGoAppointmentObject.m:
4103 ([SOGoAppointmentObject -viewTimeZoneForPerson:_person]): returns
4104 [self serverTimeZone] instead of "EST" (which was removed).
4106 * SoObjects/Appointments/SOGoAppointmentFolder.[hm]: removed the
4107 "timeZone" ivar and its accessors.
4109 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -serverTimeZone]): new
4110 centralized method returing the timezone configured in the
4111 userdefaults db or "Canada/Eastern" if missing.
4112 ([SOGoObject -userTimeZone]): new centralized method returing the
4113 timezone of the current user or the server timezone if missing
4114 from the user configuration table.
4116 2006-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4118 * UI/WebServerResources/SchedulerUI.js: implemented caching of
4121 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]):
4122 return a path based on the object's context instead of the first
4123 level in SOGo's object hierarchy...
4125 2006-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4127 * UI/Templates/SchedulerUI/UIxCalDayTable.wox: day columns can now
4130 * UI/Templates/SchedulerUI/UIxCalDateSelector.wox: pass the user's
4131 timezone ([self viewTimeZone]) to the WEMonthOverview component to
4132 avoid a confusion with the days.
4134 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: appointments
4137 * UI/WebServerResources/SchedulerUI.js: implemented a mechanism to
4138 imitate Sunbird's synchronization between the 3 visible views.
4140 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): make
4141 sure the numbers in dateString are formatted so as to take 4 chars
4142 for the year and 2 for the day and the month, otherwise
4143 NSCalendarDate will return a nil date.
4144 ([UIxComponent -applicationPath]): return a path based on the
4145 object's context instead of the second level in SOGo's object
4148 2006-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4150 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): add the
4151 user's timezone abbreviation to the date string passed as parameter to
4152 NSCalendarDate to generate an accurate date instance. Do the same
4153 when no date is specified and today is chosen.
4155 * UI/WebServerResources/UIxAppointmentEditor.js: convert the
4156 form's time values to integers before comparing them.
4158 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -currentStartTime])
4159 ([UIxCalAptListView -currentEndTime]): initialize the resulting
4160 dates timezone with [self viewTimeZone].
4162 * UI/SOGoUI/UIxComponent.m ([UIxComponent -init]): new
4163 "viewTimeZone" ivar destined to hold an instance of the user's
4165 ([UIxComponent -viewTimeZone]): take the timezone from the user's
4168 2006-08-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4170 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: completely
4171 rearranged the layout.
4173 * UI/WebServerResources/UIxAppointmentEditor.js: added code to
4174 manage showing and hiding appointment details.
4176 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
4177 -privateContacts:inContext:]): init the SOGoAppointmentFolder's
4178 timezone by taking the current user's timezone setting.
4180 * SoObjects/Appointments/SOGoAptMailNotification.m: same as below.
4182 * SoObjects/Appointments/SOGoAppointmentObject.m
4183 ([SOGoAppointmentObject -changeParticipationStatus:inContext:]):
4184 set default timezone to EST, although this code should be
4185 rewritten to handle a system and a user default value.
4187 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4188 -takeValuesFromRequest:_rqinContext:_ctx]): enhanced method to
4189 take the values from the hour and minute INPUTs when data is
4190 POSTed since we no longer use the UIxTimeSelector component.
4191 ([UIxTimeDateControl -selectableHours])
4192 ([UIxTimeDateControl -selectableMinutes]): new methods used by the
4193 template SELECTs to display reasonable and acceptable values
4194 instead of all the possibilities.
4196 * UI/WebServerResources/generic.js: adapted code for the new
4197 implementation of the UIxContactSelector component (added a
4198 "remove" button, removed the previous INPUT and replaced them with
4199 links of class "button").
4201 * UI/Scheduler/UIxTimeDateControl.h: separated interface from
4202 UIxTimeDateControl.m.
4204 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -currentAppointmentDay])
4205 ([UIxCalDayTable -currentAppointmentHour]): new methods that
4206 returns correctly formatted values used as attributes for JS code.
4208 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
4209 -initialContactsAsString]): renamed implementation of
4210 initialParticipants.
4211 ([UIxContactSelector -currentContactId])
4212 ([UIxContactSelector -currentContactName]): new methods used when
4213 listing the initial contacts in the widget. Currently, both return
4214 the person's cn but the latter should ultimately return a user
4217 * UI/Contacts/UIxContactSelector.h: separated interface from
4218 UIxContactSelector.m.
4220 * UI/Scheduler/UIxDatePickerScript.[hm]: component removed since
4221 all javascript code is now put in Scheduler.js/generic.js.
4223 * UI/Scheduler/NSCalendarDate+UIx.[hm]: category removed, code
4224 moved into NSCalendarDate+Scheduler instead.
4226 * SoObjects/Appointments/SOGoAppointmentFolder.m
4227 ([SOGoAppointmentFolder -setTimeZone:newTZ]): new method to
4228 configure the timezone from SOGoUserFolder when the instance is
4230 ([SOGoAppointmentFolder -viewTimeZone]): MET was removed. Returns
4231 the value of the new "timezone" ivar.
4233 2006-08-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4235 * UI/WebServerResources/SchedulerUI.{css,js}: added a tabview with
4236 the date selector in the first page and the container of the
4237 future calendar selector in the second page.
4239 * UI/WebServerResources/generic.js: added code for handling tabbed
4242 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productFrameworkName]):
4243 returns the bundle name associated to the current running product.
4245 2006-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4247 * UI/WebServerResources/UIxAppointmentEditor.js: fixed the AJAX
4248 exception by invoking a timeout on the opener rather than invoking
4249 the list refresh method.
4251 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]):
4254 * UI/Scheduler/UIxCalWeekView.m ([UIxCalWeekView -weekBeforePrevWeekQueryParameters])
4255 ([UIxCalWeekView -prevWeekQueryParameters])
4256 ([UIxCalWeekView -nextWeekQueryParameters])
4257 ([UIxCalWeekView -weekAfterNextWeekQueryParameters]): new methods
4258 that return the dates relatively to the current day.
4259 ([UIxCalWeekView -lastWeekName])
4260 ([UIxCalWeekView -currentWeekName])
4261 ([UIxCalWeekView -nextWeekName])
4262 ([UIxCalWeekView -weekAfterNextWeekName])
4263 ([UIxCalWeekView -_weekNumberWithOffsetFromToday:offset]): new
4264 methods that returns the label for the corresponding weeks.
4266 * UI/Scheduler/UIxCalDayTable.[hm]: new class module/component
4267 used by UIxCalDayView and UIxCalWeekView to display the events
4268 occuring in one or more days.
4270 2006-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4272 * UI/Scheduler/UIxCalMainView.m: extended class to populate the
4273 entries in the new "monthMenu" and "yearMenu".
4275 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]): new
4276 method to return the current day as a string formatted depending
4277 on the current locale.
4279 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
4280 ([UIxCalAptListView -endDate]): "today" is now the default filter
4281 for displayed events.
4282 ([UIxCalAptListView -currentSerialDay]): new method returning the
4283 date of the current enumerated appointment in serial form
4286 * UI/WebServerResources/SchedulerUI.js: added code to select the
4287 relevant day when an appointment is selected. Added code to popup
4288 a month and a year menu whenever the header entries are clicked in
4289 the calendar widget.
4291 * UI/WebServerResources/generic.js: made addClassName and
4292 removeClassName methods of HTMLElement.
4294 2006-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4296 * UI/WebServerResources/MailerUI.js: fixed the contact creation
4297 from email addresses.
4299 * UI/WebServerResources/generic.js: centralized the search-related
4300 functions here since the same code was used across the 3
4303 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
4304 ([UIxCalAptListView -endDate]): return the required dates needed
4305 depending on the value given to the "filterpopup" url parameter.
4307 * UI/Common/UIxToolbar.m ([UIxToolbar -buttonLabel]): reduced the
4308 code by invoking UIxComponent's labelForKey:.
4310 * UI/SOGoUI/UIxComponent.m ([UIxComponent -labelForKey:]): use
4311 [self pageResourceManager] instead of [self resourceManager].
4313 * UI/Contacts/UIxContactEditorBase.m: invokes
4314 globallyUniqueObjectId on the clientobject's class instead of the
4315 hardcoded "SOGoFolder".
4317 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4318 -newAction]): redirect the "new" action to the personal (default)
4321 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
4322 +objectWithName:inContainer:]): new constructor.
4324 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
4325 -lookupContactWithId:recordId]): always create a contact object,
4326 even if it does not exist.
4328 2006-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4330 * UI/Scheduler/UIxCalMainView.[hm]: new class to serve as a pseudo
4331 component that lays out the different components of SOGoCalendar.
4332 Only serves as an Objective-C counterpart to its xml template.
4334 * UI/Scheduler/UIxCalInlineMonthOverview.h: interface extracted
4337 * UI/Scheduler/UIxCalFilterPanel.[hm]: new class designed to
4338 display a widget to handle the information displayed in the
4339 appointments list. Not currently used, lacks implementation.
4341 * UI/Scheduler/UIxCalDateSelector.[hm]: new class designed to
4342 display a calendar as a dynamic widget from where one can select
4343 the current visible day.
4345 * UI/Scheduler/NSCalendarDate+Scheduler.[hm]: category code
4346 extracted from UIxCalInlineMonthOverview.m.
4348 * UI/Scheduler/UIxDatePicker.m: removed the jsPopup, jsCode and
4349 calendarPageURL methods. The javascript code is handled by .js
4350 files as much as possible...
4352 * UI/WebServerResources/ContactsUI.js,
4353 UI/WebServerResources/MailerUI.js: adapted to the code refactoring
4356 * UI/WebServerResources/SchedulerUI.js: implemented functions to
4357 handle the new widgets. XmlHTTPRequest code taken from
4360 * UI/WebServerResources/generic.js: put some functions related to
4361 element selections as methods to HTMLElement and HTMLTableElement.
4363 * UI/Scheduler/UIxCalAptListView.[hm]: new class designed to
4364 display the list of appointments (embodies the code-size of
4365 UIxCalAptListView; answers to the "aptlist" method).
4367 2006-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4369 * UI/Scheduler/UIxCalWeekOverview.m ([UIxCalWeekOverview
4370 -correctURLAction]): new short action method replacing the method
4371 below by taking far less code.
4373 * SoObjects/Appointments/SOGoAppointmentFolder.m
4374 ([SOGoAppointmentFolder -GETAction:]): removed method. Replaced
4375 with an action in the view-related code.
4377 * UI/Scheduler/UIxAppointmentEditor.m: invoke
4378 "stringByEscapingHTMLString" on the resulting value to avoid
4379 issues with accented characters.
4380 ([-jsCode]): removed method since the javascript code was merged
4381 into SchedulerUI.js.
4383 2006-08-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4385 * UI/Scheduler/iCalPerson+UIx.m ([iCalPerson +personWithUid:]):
4386 new class method that returns an iCalPerson based on the UID given
4389 * UI/Contacts/UIxContactsListViewContainerBase.m:
4390 UIxContactsListViewContainer renamed to serve as a base class for
4391 the contact lists in both the contact editor and the contact
4394 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4395 ([SOGoContactLDAPFolder
4396 -LDAPSetHostname:setPort:setBindDN:setBindPW:setContactIdentifier:
4397 setUserIdentifier:setRootDN:]): an LDAP field specifying the
4398 loginname of the users can now be specified.
4400 * UI/WebServerResources/generic.js: added code to manage contact
4401 lists through the new implementation of the UIxContactSelector.
4403 * UI/Templates: put the templates related to SchedulerUI in its
4406 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
4407 -asDictionaryWithAttributeNames:withUID:andCName:cName]): add an
4408 entry for "uid" with the field name representing the login name of
4409 the user in the corresponding LDAP branch.
4411 2006-08-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4413 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
4414 -lookupName:_keyinContext:_ctxacquire:_flag]): when the HTTP
4415 request is a PUT, always create an entry, even if we're not sure
4418 2006-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4420 * UI/WebServerResources/ContactsUI.js: implemented live-search.
4422 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
4423 -appendSystemSourcesInContext:context]): populated method with
4424 code that creates entries mapped to instances SOGoContactFolder,
4425 based on the configuration found in the NSUserDefaults under the
4426 key "SOGoLDAPAddressBooks".
4427 ([SOGoContactFolders
4428 -lookupName:nameinContext:contextacquire:acquire]):
4429 "contactsources" do not exist anymore, SOGoContactFolder was split
4430 into two classes: SOGoContactGCSFolder and SOGoContactLDAPFolder
4431 and one protocol: SOGOContactFolder, instead.
4432 ([SOGoContactFolders -contactFolders]): new accessor used by the
4433 views of SOGoContactXXXFolder to list the possible sources.
4435 * SoObjects/Contacts/SOGoContactObject.h: new protocol that
4436 defines the methods that UIxContactsView, ..Editor and so on...
4439 * SoObjects/Contacts/SOGoContactFolder.h: new protocol that
4440 defines the methods that UIxContactsListViewBase expects as well
4441 as the data fields returned in the contact lists.
4443 * SoObjects/Contacts/SOGoContactLDAPFolder.[hm]: new class that
4444 returns entries an LDAP server. Conforms to the new
4445 SOGOContactFolder protocol.
4447 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: new class that
4448 returns a vCard based on contact entries from an LDAP server.
4449 Conforms to the new SOGOContactObject protocol.
4451 * SoObjects/Contacts/NGVCardSimpleValue+Contact.m
4452 ([NGVCardSimpleValue -vCardEntryString]): generates the correct
4453 entry for the textual representation of the vCard.
4455 * SoObjects/Contacts/NGVCardSimpleValue+Contact.[hm]: new class
4458 * SoObjects/Contacts/SOGoContactGCSEntry.[hm]: new module name of
4459 "SOGoContactObject".
4461 * SoObjects/Contacts/NGVCard+Contact.m ([NGVCard -asString]): new
4462 method that generates a textual representation of the vcard.
4464 * SoObjects/Contacts/NGVCard+Contact.[hm]: new class extension.
4466 * SoObjects/Contacts/SOGoContactGCSFolder.[hm]: new module name of
4467 "SOGoContactFolder".
4469 * SoObjects/Contacts/SOGoContactSource.h,
4470 SoObjects/Contacts/SOGoPersonalAB.[hm]: unused classes and
4473 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
4474 -singleAttributeWithName:key]): new method that returns the first
4475 object associated with an ldap key (where generally one value is
4478 -asDictionaryWithAttributeNames:attributeNamesandCName:cName]):
4479 map the entry into an NSDictionary for processing by
4480 UIxContactsListViewBase.m with the least possible overhead.
4482 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: new class
4485 2006-08-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4487 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
4488 -privateContacts:inContext:]): now returns an instance of
4491 * UI/Contacts/UIxContactsListViewContainer.m
4492 ([UIxContactsListViewContainer -contactFolderName]): new method to
4493 return the absolute path to the current contact folder, called
4494 from within the template.
4496 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
4497 JS code to initialize the 'currentContactFolder' generic var.
4499 * SoObjects/Contacts/SOGoContactFolder.m ([SOGoContactFolder
4500 +contactFolderWithSource:inContainer:andName:]): new class
4501 method meant to return an instance connected to the specified
4502 source. Currently useless but won't be anymore in the next few
4505 * SoObjects/SOGo/SOGoUserFolder.h: commented out declaration of
4506 the "lookupFreeBusyObject" method since it does not exist.
4508 * UI/Contacts/UIxContactFoldersView.[hm]: new class module serving
4509 as a "view" for the SOGoContactFolders object. Does nothing but
4510 redirect the browser to the URL of the personal address book of
4511 the user. It does not even have a template.
4513 * SoObjects/Contacts/SOGoPersonalAB.[hm]: new class module
4514 implementing the SOGoContactSource protocol. Does nothing
4515 currently but will be used to implement access to the personal
4516 address book of the user stored in the SOGo database.
4518 * SoObjects/Contacts/SOGoContactSource.h: new "SOGoContactSource"
4519 protocol defining an API common to all possible types of contact
4522 * SoObjects/Contacts/SOGoContactFolders.[hm]: new class module
4523 serving as the root of the contact folders available to the
4524 current user. Correctly lists the contact sources in webdav.
4526 2006-08-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4528 * UI/MailerUI/UIxMailAccountsView.m ([UIxMailAccountsView
4529 -composeAction]): new action method that permits external object
4530 to write a message from the default (primary) account.
4532 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
4533 -initSnapshot]): new method with code taken from "defaultAction"
4534 but needed for others.
4535 ([UIxContactEditorBase -writeAction]): new action designed to
4536 compose the correct URL needed to obtain the MailerUI's email
4537 editor with the correct "mailto" parameter.
4539 * UI/Common/UIxSortableTableHeader.m: moved from MailerUI to
4540 Common so that other modules can use it.
4542 * UI/Contacts/UIxContactsListViewContainer.m: container to make it
4543 easier to manage both ajax and non-ajax requests.
4545 * UI/Contacts/UIxContactsFilterPanel.m: clone of
4546 UIxMailFilterPanel, but applicable to contact lists.
4548 * SoObjects/Contacts/NSDictionary+Contact.m ([NSDictionary
4549 -vcardContentFromSOGoContactRecord]): use the new standard methods
4550 created for each type of entry. If a line is determined to not
4551 contain information, it will be skipped.
4553 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
4554 +initialize]): init defaultMailDomain with the user default
4555 "SOGoDefaultMailDomain".
4557 2006-08-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4559 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
4560 -saveAction]): reorganized methods to only have ONE return point.
4561 Invoke saveRecord: directly on the clientObject instead of
4562 saveContentString, which does the same thing anyway.
4564 * SoObjects/Contacts/NSDictionary+Contact.m
4565 ([NSDictionary -vcardContentFromSOGoContactRecord]): extension
4566 method to convert the dictionary returned with the user submission
4567 to a record in VCARD format to be stored in the database.
4569 2006-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4571 * UI/WebServerResources/MailerUI.js: when opening the context menu
4572 of the message list, select the message below the mouse cursor and
4573 deselect the other selected messages temporarily. This mimics the
4574 behaviour of Thunderbird for that matter and was already
4575 implemented for the entries of the folder tree.
4577 * UI/MailerUI/UIxMailFolderMenu.m ([UIxMailFolderMenu
4578 -iconForMenuItem]): new method that returns the fully qualified
4579 relative URL to the icon representing the mailbox, or the default
4580 mailbox icon if needed.
4582 * UI/SOGoUI/UIxComponent.m ([UIxComponent
4583 -urlForResourceFilename:filename]): automatically return an empty
4584 string whenever the filename passed as argument is nil.
4586 * UI/WebServerResources/MailerUI.js: open the mailboxes with the
4587 "desc" parameter set to 1 so that they are sorted in descending
4588 order by default. Also, added "onHeaderClick()", triggered by
4589 clicking on the message list header elements.
4591 * UI/MailerUI/UIxMailSortableTableHeader.m
4592 ([UIxMailSortableTableHeader -isSortedDescending]): same as below.
4594 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
4595 -isSortedDescending]): defaults to "YES" when the sort order is
4598 2006-07-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4600 * UI/WebServerResources/MailerUI.js:
4601 - message cache: set the max num of cached messages to 20. Limit
4602 the cached message size to 30000 bytes.
4603 - ajax: when a message request is called while one is already
4604 being performed, the latter will be cancelled. Idem when
4605 retrieving the content of a mailbox.
4606 - folder tree: when a mailbox is selected because of the URL
4607 requested (initMailboxSelection), the dtree is expanded throughout
4608 the mailbox entry's parent hierarchy to ensure it is made visible
4609 when the page is being displayed. (new function: expandUpperTree).
4610 - mailbox loading: when loading a mailbox where a message was
4611 previously selected, we invoke its url with the "pageforuid"
4612 parameter correctly specified. During callback processing, we scan
4613 the table for the related row and reselect it.
4614 Also, the message area is set blank before loading any mailbox.
4616 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
4617 -defaultAction]): if the "pageforuid" parameter is passed in the
4618 url, take its value and invoke [self firstMessageOfPageFor:]
4619 consequently to deduce the first message to display. Otherwise,
4620 set it to "idx", otherwise set it to 0.
4621 ([UIxMailListView -firstMessageOfPageFor:]): new method
4622 that determines the first message of the page where the message
4623 passed as parameter is contained.
4625 * UI/WebServerResources/UIxMailListView.js: removed this module,
4626 its code was put in MailerUI.js instead.
4628 2006-07-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4630 * UI/MailerUI/UIxMailFolderMenu.m: a descendent of UIxMailTree
4631 which returns the nodes for the parent specified in "parentMenu".
4632 Used to generate the javascript code for the folder dtree.
4634 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: the components
4635 using that container-template are now using UIxMailMainFrame
4636 since UIxMailPanelFrame had no real interest. File removed.
4638 * UI/WebServerResources/dtree.{css,js}: new files to handle
4639 javascript-generated mailbox tree. Modified from original version
4640 by integrating the previous code with the one we are using for
4641 selections and mailbox handling. Minor visual enhancements too...
4643 2006-07-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4645 * SoObjects/Mailer/SOGoUser+Mail.m: if only one identity is to be
4646 returned, put it in an NSArray before returning it (fixes
4649 2006-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4651 * UI/SOGoUI/NSString+URL.m ([NSString -hostlessURL]): new method
4652 that returns a url string stripped from its "http://hostname"
4655 * UI/SOGoUI/NSDictionary+URL.[hm]: moved from UI/Common.
4657 * UI/SOGoUI/NSString+URL.[hm]: moved from UI/Common.
4659 2006-07-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4661 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
4662 -mailDateFormatter]): retrieve the timezone from the user settings
4663 and pass it to the returned dateFormatter. Also, the dateFormatter
4664 is kept in a static variable to avoid useless
4665 creations/destructions.
4667 * UI/MailerUI/UIxMailFormatter.m ([UIxMailDateFormatter
4668 -setTimeZone:newTimeZone]): new accessor to specify the timezone.
4670 * UI/MailerUI/UIxMailFilterPanel.m ([UIxMailFilterPanel -setSearchCriteria:])
4671 ([UIxMailFilterPanel -searchCriteria]): new methods, similar to
4672 s/Criteria/Text/ to handle the "criteria" form parameter.
4674 2006-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4676 * UI/WebServerResources/uix.css: enhanced the toolbar appearance
4677 to integrate better with the firefox look&feel. Added entries for
4678 the new "menu" DIV class (popup menus).
4680 * UI/WebServerResources/generic.js: added "sanitizeMailTo" which
4681 takes any chunk of text as param, detects the user email and the
4682 optional first and last names and return them in a well-formatted
4683 way. Renamed "getSelection" to "getSelectedNodes" to avoid a
4684 namespace conflict. Added "onMenuClick(node, event, menuId)" to
4685 handle popup menus through "onclick" element attributes (node =
4686 this, event = event and menuId = name of the menu DIV id to
4689 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
4690 -snapshot]): add an entry for "email" into the snapshot
4691 dictionary if a "contactEmail" URL parameter was detected and if
4692 the entry for "email" is empty.
4694 * UI/Contacts/Toolbars/SOGoContactFolder.toolbar: the "new card"
4695 button now invokes the newContact() js function in ContactsUI.js
4696 instead of opening "new" directly. newContact() pops up a window
4697 stripped from its navigation bar.
4699 * UI/Contacts/ContactsUI.js: new module specific to the ContactsUI
4700 bundle (AddressBook).
4702 * UI/Templates/MailerUI/UIxMailView.wox: added a div of class
4703 "menu" and id "addressMenu" have the header email addresses
4704 display it with the new menu code in generic.js.
4706 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: same as below +
4707 replaced the body tables with a div of class "pageContent"
4708 (standardization across the page templates).
4710 * UI/Templates/MailerUI/UIxMailMainFrame.wox: include
4711 productJavaScriptURL and pageJavaScriptURL (conditionnally) since
4712 those are now inherited from UIxPageFrame.
4714 * UI/MailerUI/UIxMailView.js: new file specific to UIxMailView.
4716 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]): if
4717 a "mailto" URL parameter is detected and the "to" array is empty,
4718 initialize "to" with the value of "mailto" before returning it.
4720 * UI/MailerUI/UIxMailEditorAction.m ([UIxMailEditorAction
4721 -composeAction]): rewrote method in a cleaner way and with usage
4722 of the URL extensions to NSString and NSDictionary (see below).
4723 Also, if a "mailto" url parameter is detected, pass it to the
4726 * UI/MailerUI/UIxMailMainFrame.m: subclassed from UIxPageFrame to
4729 * UI/Common/NSDictionary+URL.m ([NSDictionary -asURLParameters]):
4730 returns a parameter string to add to a base URL.
4732 * UI/Common/NSString+URL.m ([NSString
4733 -composeURLWithAction:parameters:andHash:useHash]): new method to
4734 compose a complete URL from an object URL with parameters and an
4735 optional '#' character.
4737 * UI/Common/UIxPageFrame.h: separated interface from
4740 2006-07-07 Wsourdeau Sourdeau <wsourdeau@inverse.ca>
4742 * UI/Scheduler/UIxAppointmentEditor.m: returns yes to "isPopup";
4744 * UI/WebServerResources/generic.js: added code to manage
4745 selections within HTML containers.
4747 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productJavaScriptURL]):
4748 added method to determine the possible URL for a product-specific
4749 javascript filename of the forme <productname>.js.
4750 ([UIxPageFrame -hasProductSpecificJavaScript]): new method.
4751 ([UIxPageFrame -isPopup]): new method to determine whether the
4752 application navigator bar should be displayed (main page) or not
4755 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
4756 -LDAPCheckLogin:_loginpassword:_pwd]): new method to authenticate
4757 the user through LDAP.
4759 2006-07-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4761 * The toolbar code from the MailerUI product was taken, renamed as
4762 "UIxToolBar" and put into UI/Common. Toolbar plists were created
4763 for the Contacts and Scheduler products and put in their respectir
4764 Toolbars/ subdirectories. Finally,
4765 UI/Templates/{UIxToolbarButton,UIxToolbarSeparator}.wox, and
4766 UI/Common/{UIxToolbarButton,UIxToolbarSeparator}.m were removed
4767 and an invocation to the UIxToolbar component was put at the top
4768 of UI/Templaces/UIxPageFrame.wox.
4770 * UI/Common/UIxToolbar.m: new "isLastGroup" method to determine
4771 within the templates whether a separator should be displayed.
4773 * UI/Common/UIxToolbar.m ([UIxToolbar -hasButtons]): new method
4774 that returns NO if the toolbar is empty.
4776 2006-07-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4778 * UI/Templates/UIxPageFrame.wox: replaced central table with a DIV.
4780 * UI/Common/UIxToolbarSeparator.m, UI/Common/UIxToolbarButton.m:
4781 new toolbar objects.
4783 * UI/Templates/UIxPageFrame.wox: use the exact html code as below.
4785 * UI/Templates/MailerUI/UIxMailMainFrame.wox: redone the
4786 linkbanner as a DIV instead of a TABLE.
4788 * UI/MailerUI/UIxMailMainFrame.m [UIxMailMainFrame
4790 returns 'YES' to request the display of the navigation bar between
4793 2006-06-15 ludovic@inverse.ca
4795 * It's now possible to set the default
4796 domain using for email using the
4797 SOGoDefaultMailDomain preference key.
4799 2006-06-15 ludovic@inverse.ca
4801 * Initial import of SOGo from trunk.