1 2007-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
4 -setHeaders:newHeaders]): make sure there is a message id in the
5 headers dictionary, if not, generate one.
6 ([SOGoDraftObject -fetchMailForEditing:sourceMail]): retrieve the
7 message id from the existing draft.
8 ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): store the
9 message id in the header map.
11 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
12 -deleteFolderAction]): no longer prefix the target folder with
15 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
16 -listMailboxesAction]): base the folder type on the folder
19 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
20 -lookupName:_keyinContext:acquire:_acquire]): compare the full
21 traversal to the potential looked up folder with the special
22 folder names and return an object with the appropriate
23 SOGoMailFolder subclass.
25 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
26 -traversalFromMailAccount]): don't prepend the whole string with
29 * SoObjects/Mailer/SOGoMailAccount.m
30 ([-lookupSentFolder:_keyinContext:_ctx])
31 ([-lookupDraftsFolder:_keyinContext:_ctx])
32 ([-lookupTrashFolder:_keyinContext:_ctx])
33 ([-lookupFiltersFolder:_key:_ctx]): removed methods.
34 ([SOGoMailAccount -inboxFolderNameInContext:])
35 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
36 ([SOGoMailAccount -sentFolderNameInContext:])
37 ([SOGoMailAccount -trashFolderNameInContext:]): no longer prefixes
38 the resulting name with "prefix" since we might return a nested
40 ([SOGoMailAccount -allFolderPaths]): prefixes all special folder
41 names with "/". Sorts the resulting folder list with
42 localizedCaseInsensitiveCompare: instead of
43 caseInsensitiveCompare:. No longer use the -[lookupXXX] methods
44 that were removed, instead, we choose the appropriate class
45 depending on the folder name. And since we are in SOGoMailAccount,
46 we don't have to compute a traversal path to match the key with
49 -folderWithTraversal:traversalandClassName:className]): new method
50 that returns an instance of the specified SOGoMailFolder subclass,
51 based on the traversal path passed as parameter.
52 ([SOGoMailAccount -inboxFolderInContext:_ctx])
53 ([SOGoMailAccount -draftsFolderInContext:_ctx])
54 ([-sentFolderInContext:_ctx])
55 ([SOGoMailAccount -trashFolderInContext:_ctx]): invoke the new
56 -folderWithTraversal:andClassName: method described above.
58 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
59 -primaryFetchProfile]): make use of -[NSPropertyListSerialization
60 propertyListFromData:mutabilityOption:format:errorDescription:] to
61 deserialize the plist. Removed variant for libFoundation since it
62 should support the above.
63 ([AgenorUserDefaults -generateSQLForInsert])
64 ([AgenorUserDefaults -generateSQLForUpdate]): make use of
65 -[NSPropertyListSerialization
66 dataFromPropertyList:format:errorDescription:] to serialize the
67 plist. Removed variant for libFoundation since it should support
68 the above. Escape the backslashes from the resulting string.
70 2007-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
72 * SoObjects/Mailer/SOGoMailFolder.[hm]: added a new subclass of
73 SOGoMailFolder: SOGoMailSpecialFolder.
75 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
76 -traversalFromMailAccount]): overridden method that returns the
77 initialized mutable string.
78 ([SOGoMailAccount -allFolderPaths]): take the special folder paths
79 with -traversalFromMailAccount and reposition them at the
80 beginning of the list. By creating the special folders during that
81 request, we also make sure that the folder exists thanks to the
82 new initialisation method of the new "SOGoSpecialMailFolder"
84 ([SOGoMailAccount -lookupSentFolder:_keyinContext:_ctx]): new
86 ([SOGoMailAccount -lookupTrashFolder:_keyinContext:_ctx]): new
88 ([SOGoMailAccount -lookupName:_keyinContext:acquire:_flag]): no
89 longer use lookupImap4Folder.
90 ([SOGoMailAccount -lookupImap4Folder:_keyinContext:_ctx]): removed
93 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
94 -traversalFromMailAccount]): new method that returns the full
95 IMAP4 path to the object.
97 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): retain
98 "superUsernames" after fetching it from the ud.
100 2007-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
102 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
103 -eventsListAction]): substitude the start and end date with their
104 UTC counterpart, taking into account the offset from UTC related
105 to those dates instead of the current one. This renders
106 -[UIxCalMainView -userUTCOffset] obsolete because the computings
107 that occured in javascript are now done server-side.
109 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView -userUTCOffset]):
110 removed obsolete method.
112 * SoObjects/Mailer/NSString+Mail.m ([NSString -htmlToText]): new
113 method converting html content to plain text.
115 * SoObjects/Mailer/NSString+Mail.[hm]: new category module
116 enhancing NSString with utility methods pertaining to mail handling.
118 * SoObjects/Mailer/SOGoMailObject.m
119 ([-shouldFetchPartOfType:_typesubtype:_subtype]): removed obsolete method.
121 -addRequiredKeysOfStructure:infopath:ptoArray:keysacceptedTypes:types]):
122 modified method to be always recursive and to take an array of the
123 accepted mime-types as parameter. The returned array now contains
124 the mime-type as well as the part keys.
126 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
127 -contentForEditingOnParts:_prtskeys:_k]): removed obsolete method.
128 ([SOGoMailObject -contentForEditing]): rewrote method to take into
129 account the first text/plain part or the first text/html part
130 converted to text/plain with our new -[NSString htmlToText]
133 * UI/MailerUI/UIxMailActions.m ([-replyToAllAction]): invoke
134 "replyToAll:" with YES as parameter instead of NO.
136 2007-10-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
138 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
139 -davContentType]): ignore any possible parameter taken from the
140 mime-info of the body part.
142 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
143 -lastFirstMessageNumber]): new accessor that returns the first
144 message number of the last series of messages.
145 ([UIxMailListView -fetchKeys]): request the bodystructure for each
147 ([UIxMailListView -hasMessageAttachment]): extract the attachment
148 information from the message bodystructure.
150 2007-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
152 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
153 -GETAction:]): use the "application/octet-stream" mime type for
154 elements of type "application/x-xpinstall" to avoid confusing
157 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -messageCheckList])
158 ([UIxPreferences -itemMessageCheckText])
159 ([UIxPreferences -userMessageCheck])
160 ([UIxPreferences -setUserMessageCheck:newMessageCheck]): new
161 methods for handling the retrieval of new messages automatically.
163 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -messageCheck]): new method
164 that returns the interval of time between automatic message
167 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
168 -defaultAction]): now expunges the last folder marked for expunge.
170 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
171 -trashInContext:_ctx]): now marks the container folder for
174 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
175 -markForExpunge]): new method that marks the folder for the next
176 automatic expunge operation in the user settings.
177 ([SOGoMailFolder -expungeLastMarkedFolder]): new methods that
178 takes the last folder marked for expunge, expunges it and removes
179 it from the user settings, if it exists.
181 2007-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
183 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
184 -messageSubjectCellStyleClass]): added support for replied,
185 forwarded, forwarded and replied mails.
187 * SoObjects/Mailer/NSData+Mail.m ([NSData
188 -bodyDataFromEncoding:encoding]): new utility method that decodes
189 the NSData instance properly depending on the encoding string
192 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
193 -fetchFileAttachmentKeys]): fetch the attachment encoding as well.
195 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
196 -stringForData:_datapartInfo:_info]): simplified by invoking
197 -bodyDataFromEncoding: from our new NSData category methods.
199 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
200 -fetchMailForEditing:sourceMail]): work-around a bug in SOPE-mime
201 where only the body part of the first of the keys fetched was
202 returned. Also decodes the body parts properly following their
205 * SoObjects/Mailer/NSData+Mail.[hm]: new extension module that
206 extends the NSData class with utility methods useful for handling
209 2007-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
211 * SoObjects/SOGo/NSArray+Utilities.m
212 ([NSArray -stringsWithFormat:format]): replace instances of NSNull
215 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
216 -keysWithFormat:keyFormat]): replace instances of NSNull with
219 * SoObjects/Contacts/SOGoContactLDAPFolder.m: if "displayName" is
220 empty, use "c_cn" instead.
222 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
223 ([SOGoMailAccount -draftsFolderInContext:_ctx])
224 ([SOGoMailAccount -sentFolderInContext:_ctx]): no longer make use
225 of the "SOGoSpecialFoldersInRoot" user defaults. The folders will
226 no always be specified from the root instead of sometimes from the
229 2007-10-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
231 * UI/Common/UIxPageFrame.m ([UIxPageFrame -commonLocalizableStrings])
232 ([UIxPageFrame -productLocalizableStrings]): invoke the new
233 +[SOGoUser language] method if the user is nil.
235 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +language]): new method
236 that returns any generically-found language.
237 ([SoUser -language]): modified to call the above.
238 ([SOGoUser -language]): modified to call the above if the user
239 language has a null length.
241 * SoObjects/Contacts/SOGoContactLDIFEntry.m ([SOGoContactLDIFEntry
242 -davEntityTag]): modified to return the "hash" of the vCard string.
244 * UI/MailerUI/UIxMailActions.m ([UIxMailActions
245 -removeAllLabelsAction]): new method that removes all label flags
246 from the associated message.
247 ([UIxMailActions -addLabel1Action]
248 [UIxMailActions -addLabel2Action]
249 [UIxMailActions -addLabel3Action
250 [UIxMailActions -addLabel4Action]
251 [UIxMailActions -addLabel5Action]): new methods that adds label
252 flags to the associated message.
253 ([UIxMailActions -removeLabel1Action]
254 [UIxMailActions -removeLabel2Action]
255 [UIxMailActions -removeLabel3Action
256 [UIxMailActions -removeLabel4Action]
257 [UIxMailActions -removeLabel5Action]): new methods that removes
258 label flags from the associated message.
260 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -msgLabels]):
261 new accessor that returns the labels associated with the message.
263 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
264 -allFolderPaths]): new method that returns all the paths of all
265 the subfolders of the folder object.
266 ([SOGoMailFolder -allFolderURLs]): new method replacing
269 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
270 -aclsForUser:uid]): object inherits the 'SOGoRole_ObjectEditor'
271 role from its parent folder.
273 2007-10-19 Francis Lachapelle <flachapelle@inverse.ca>
275 * SoObjects/SOGo/SOGoUser.m
276 ([SOGoUser -rolesForObject:objectinContext:context]): allow
277 multiple super usernames to be defined. The user default
278 SOGoSuperUsername is renamed SOGoSuperUsernames and must be
281 2007-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
283 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
284 -userInContext:]): override the super method by returning
285 anonymous if the super returns nil.
287 * UI/Common/UIxPageFrame.m ([UIxPageFrame
288 -productLocalizableStrings]): new method that returns the
289 product-specific translation dictionary as a JSON hash.
290 ([UIxPageFrame -commonLocalizableStrings]): same as above but for
291 the "Common" framework.
292 ([UIxPageFrame -setJsFiles:newJSFiles]): new setter that enables
293 the requestor components to require additional Javascript files.
294 This is useful now that all the scripts are loaded at the end of
296 ([UIxPageFrame -additionalJSFiles]): new getter related to the
299 2007-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
301 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -copyAction]):
302 implemented new web method.
304 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
305 -copyToFolderNamed:folderNameinContext:]): new method with the
306 code cut/pasted from -moveToFolderNamed:inContext:.
307 ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]):
308 modified to use the code from -copyToFolderNamed:inContext:, which
309 is common between the two actions.
311 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
312 ([SOGoMailAccount -sentFolderNameInContext:])
313 ([SOGoMailAccount -trashFolderNameInContext:]): modified to take
314 the user settings into account.
316 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -setAsDraftsFolderAction])
317 ([UIxMailFolderActions -setAsSentFolderAction])
318 ([UIxMailFolderActions -setAsTrashFolderAction]): new web methods
319 that change the purpose of the active folder to "Sent", "Drafts"
322 * UI/SOGoUI/SOGoACLAdvisory.m ([SOGoACLAdvisory -subject]):
323 returns the subject as quoted-printable.
325 * UI/SOGoUI/SOGoACLAdvisory.[hm]: added two intermediary classes:
326 SOGoACLAdditionAdvisory and SOGoACLRemovalAdvisory implementing
327 the "aclMethod" method for the subsequent language-dependent
330 * UI/SOGoUI/SOGoFolderAdvisory.m ([SOGoFolderAdvisory -subject]):
331 returns the subject as quoted-printable.
333 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
334 -dealloc]): release item, aptStartDate and aptEndDate.
336 2007-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
338 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
339 -initWithName:newNameinContainer:newContainer]): the owner of a
340 shared folder is set to "nobody" by default.
342 * UI/Common/UIxAclEditor.m ([UIxAclEditor -hasOwner]): new method
343 that returns whether the object has an owner or not.
345 2007-10-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
347 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
348 the folder even if the current user is not its owner.
350 2007-10-10 Ludovic Marcotte <ludovic@inverse.ca>
352 * We now send advisory emails when folders
353 are created / deleted.
355 * Fixed the sending of advisory emails upon
356 ACL changes on folders.
358 2007-10-10 Ludovic Marcotte <ludovic@inverse.ca>
360 * UI/Scheduler/UIxComponentEditor.m
361 Implemented event/task priority support.
363 * SoObjects/Contacts/SOGoContactGCSFolder.m
364 Added CardDAV support.
366 * SoObjects/SOGo/LDAPUserManager.m and SOGoUser.m
367 Implemented From: based on LDAP results based on
368 the MailFieldNames attribute (an array) specified
369 in every LDAP-based authentication sources.
371 * UI/MailPartViewers/UIxMailPartTextViewer.m and
372 UI/WebServerResources/MailerUI.css
373 We avoid replacing "\r\n" and "\n" with <br /> and
374 rather use CSS capabilities for proper formatting.
375 This is _WAY_ faster on very large mails.
377 2007-10-10 Francis Lachapelle <flachapelle@inverse.ca>
379 * UI/Scheduler/UIxComponentEditor.m
380 ([UIxComponentEditor -componentCalendar]): returns the calendar
381 object of the current event.
383 2007-10-05 Ludovic Marcotte <ludovic@inverse.ca>
385 * UI/WebServerResources/MailerUI.js
386 We check if at least one message is selected
387 before performing a Reply/Reply All/Forward
389 * SoObjects/Appointments/SOGoAppointmentFolder.m
390 and others - implemented support for recurring
391 events (with some known limitations right now,
392 all soon to be fixed).
394 2007-10-04 Francis Lachapelle <flachapelle@inverse.ca>
396 * Main/SOGo.m ([SOGo -isUserName:_keyinContext:_ctx]): removed
397 the constraint that a username can't start with a digit.
399 2007-10-02 Francis Lachapelle <flachapelle@inverse.ca>
401 * Moved SOPE/sope-gdl1/GDLContentStore from the default trunk
402 repository to Inverse's branch.
404 2007-09-28 Francis Lachapelle <flachapelle@inverse.ca>
406 * SoObjects/Mailer/SOGoDraftObject.m
407 ([SOGoDraftObject -isValidAttachmentName:_name]): removed
408 constraint on space in file name.
409 ([SOGoDraftObject -saveAttachment:_attachwithMetadata:metadata]):
410 now removes from file name all characters preceding a backslash.
411 This happens with IE7 because the complete attachment file path
414 2007-09-25 Francis Lachapelle <flachapelle@inverse.ca>
416 * SoObjects/Appointments/SOGoAptMailNotification.m
417 ([SOGoAptMailNotification -appointmentURL]): set personal as the
418 default calendar where to add the event.
420 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
421 activate the SOGoUIxDefaultModule user defaults.
423 2007-09-21 Francis Lachapelle <flachapelle@inverse.ca>
425 * UI/SOGoUI/UIxComponent.m
426 ([UIxComponent -shortUserNameForDisplay]): returns the string
427 "wrongusernamepassword" when authentication failed.
429 2007-09-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
431 * UI/MailPartViewers/UIxMailPartICalViewer.m
432 ([UIxMailPartICalViewer -calendarFolder]): returns the "personal"
433 entry of the Calendars parent folder.
435 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
436 -messageSubject]): new accessor method to work-around a problem
437 within SOPE where a subject could be returned as an NSData.
439 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
440 -appendPersonalSources]): make sure the value of the "c_path4" of
441 the returned rows are not NSNull, otherwise, discard them.
443 2007-09-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
445 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
446 -compare:otherFolder]): new overriden method that compares two
447 contact foldes based on their class and then transfer the control
448 to the super method in SOGoFolder.
450 * SoObjects/Contacts/SOGoContactLDAPFolder.m
451 ([SOGoContactLDAPFolder -compare:otherFolder]): new method that
452 compare two contact folders based on their class and then their
455 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -compare:otherFolder]):
456 new method for sorting folders. The folders are compared based on
457 their ownership, whether they are a main folder and finally
458 depending on their display name.
460 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
461 -pathArrayToSOGoObject]): do not reorder the paths if the third
462 element is an instance of NSNull.
464 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
465 -subFolders]): returns a sorted array using the "compare:"
468 2007-09-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
470 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
471 -calendars]): also returns the owner of the listed folders.
473 * SoObjects/Appointments/SOGoAppointmentFolder.m
474 ([-deleteEntriesWithIds:ids]): moved method into SOGoFolder.
476 * UI/Scheduler/UIxCalMainView.m ([-batchDeleteAction]): moved
477 method into UIxFolderActions.
479 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
480 -fetchFreeBusyInfosFrom:_startDateto:_endDate]): fetch the
481 freebusy info from the "personal" calendar.
483 * UI/Common/UIxParentFolderActions.m ([UIxParentFolderActions
484 -createFolderAction]): new standardized method for requesting
485 folder creations among gcs-based modules.
487 * UI/Common/UIxParentFolderActions.[hm]: new action class module.
489 * SoObjects/Appointments/SOGoAppointmentFolders.m: new class
490 module, equivalent to the SOGoParentFolder's child
491 SOGoContactFolders, but for calendars.
493 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -labelForKey:key]): new
494 method that returns translated strings for controller bundles
495 (same as what UIxComponent does for view bundles).
496 ([SOGoObject -pathArrayToSOGoObject]): new method that returns
497 the real path to a subscribed folder (if subscribed).
498 ([SOGoObject +globallyUniqueObjectId]): move method from SOGoFolder.
499 ([SOGoObject -globallyUniqueObjectId]): new instance method
500 calling its class equivalent.
502 2007-09-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
504 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage -defaultAction]): test
505 whether the user is logged in and if so, redirect to his/her
507 ([SOGoRootPage -appendToResponse:inContext:]): removed useless
510 2007-09-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
512 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
513 +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
515 ([SOGoFolder -displayName]): new method.
516 ([SOGoFolder -delete]): accept to proceed only if nameInContainer
519 * SoObjects/Contacts/SOGoContactLDAPFolder.m
520 ([SOGoContactLDAPFolder
521 +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
522 renamed from "contactFolderWithName..." for compatibility with SOGoFolder.
524 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
525 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
526 removed method, reimplemented in SOGoFolder.
527 ([SOGoContactGCSFolder -displayName]): removed method,
528 reimplemented in SOGoFolder.
529 ([-delete]): removed method, modified in SOGoFolder.
531 * SoObjects/Contacts/SOGoContactFolders.[hm]: modified class to be
532 a subclass of SOGoParentFolder.
534 * SoObjects/SOGo/SOGoParentFolder.[hm]: new class module derived
535 from SOGoContactFolders and modified to be more content-independent.
537 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -markMessageUnreadAction])
538 ([UIxMailActions -markMessageReadAction]): new methods moved from
539 UIxMailListView and adapted to invoke the client object directly,
540 since the previous versions had to to a lookup from the parent
543 * UI/MailerUI/UIxMailListView.m ([-markMessageUnreadAction]): move
544 method into UIxMailActions.
545 ([-markMessageReadAction]): same as above.
546 ([-viewAction]): removed useless method.
547 ([-javaScriptOK]): removed useless method.
548 ([-isJavaScriptRequest]): removed useless method.
549 ([-lookupActiveMessage]): removed useless method.
551 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
552 -responseWithStatus:status]): new method that returns a WOResponse
553 initialized with the specified status code.
554 ([WODirectAction -responseWith204]): new method that invokes the
555 above one with "204" as parameter.
556 ([WODirectAction -redirectToLocation:newLocation]): rewrote method
557 to make use of -responseWithStatus:.
559 * UI/SOGoUI/UIxComponent.m ([UIxComponent -responseWith204]): new
560 method that returns a WOResponse initialized with the 204 status
563 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sortedUIDs]):
564 always use a "not deleted" search qualifier along with the user
565 qualifier (if present).
567 2007-09-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
569 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
570 -contactSearchAction]): only return the records which have an
573 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
574 -trashInContext:_ctx]): no longer expunge the mailbox after
575 marking a message deleted.
576 ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]): same
579 * UI/MailerUI/UIxMailView.m ([-deleteAction]): removed method.
580 ([-trashAction]): moved method into UIxMailActions.
581 ([-moveAction]): moved method into UIxMailActions.
583 2007-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
585 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
586 ([_UIxHTMLMailContentHandler
587 -endElement:_localNamenamespace:_nsrawName:_rawName]): remove HTML
588 comments from the CSS code, do not add the CSS code to the body
589 content and remove references of body from the CSS declarations.
590 ([UIxMailPartHTMLViewer -cssContent]): new accessor method.
591 ([UIxMailPartHTMLViewer -flatContentAsString]): separated code
592 common with cssContent in a different method and invoke it only
595 * UI/MainUI/SOGoRootPage.[hm]: made a subclass of UIxComponent
596 instead of UIxPageFrame.
598 2007-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
600 * UI/MainUI/SOGoRootPage.m ([-defaultAction]): commented out.
601 ([-appendToResponse:responseinContext:ctx]): commented out.
602 ([SOGoRootPage -connectURL]): new accessor that returns the full
603 url the the "connect" method.
604 ([-connectAction]): rewrote method to return a properly formatted
605 auth. cookie based on the username and password passed as
608 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
609 set the value of the cookie to "discard" and set its expiration
612 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
613 -preprocessCredentialsInContext:context]): consider the user
614 anonymous if the cookie value is "discard".
615 ([SOGoWebAuthenticator
616 -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
617 set the expiration date of the cookie to yesterday.
619 * UI/SOGoUI/UIxComponent.m ([UIxComponent -applicationPath]):
620 returns the path to the application if the clientObject is not a
623 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder +initialize]):
624 moved the requirement of authentication from the SOGo application
627 * SoObjects/Appointments/SOGoAppointmentObject.m
628 ([SOGoAppointmentObject -saveContentString:_iCalbaseSequence:_v]):
629 check whether the new appointment object is still relevant before
630 sending a notification.
632 2007-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
634 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
635 -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
636 render the login page through the SoDefaultRenderer.
638 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage
639 -isPublicInContext:localContext]): new overriden method that
642 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
643 -currentCalendarLogin]): replace css-unsafe characters with _.
645 * UI/SOGoUI/UIxComponent.m ([UIxComponent
646 -shortUserNameForDisplay]): simplified method.
647 ([-user]): removed method since [context activeUser] is as useful.
649 2007-09-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
651 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
652 set the cookie path to "/".
654 * Main/SOGo.m ([SOGo -authenticatorInContext:_ctx]): choose the
655 authenticator based on the request handler key. "dav" returns the
656 SOGoDAVAuthenticator, anything else returns the Web authenticator.
658 * SoObjects/SOGo/SOGoDAVAuthenticator.m: renamed module from
661 * SoObjects/SOGo/SOGoWebAuthenticator.m: new class module
662 implementing a subclass of SoCookieAuthenticator, designed for
663 web-based cookie authentication of users.m
665 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
666 new method that resets the authentification cookie.
668 2007-08-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
670 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
671 -checkLogin:loginToCheckandPassword:passwordToCheck]): initialize
672 didBind to NO to make sure no false authentication is returned if
673 the bind operation is not executed.
675 2007-08-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
677 * SoObjects/Mailer/SOGoDraftObject.m: added support for the
678 "In-Reply-To" header field when replying.
680 * UI/MainUI/SOGoUserHomePage.m: add the "c_" prefix to the quick
681 table field names that are queried.
683 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
684 -iCalStringForFreeBusyInfos:_infosfrom:_startDateto:_endDate]):
685 add the "c_" prefix to the quick table field names that are
688 2007-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
690 * SoObjects/Appointments/SOGoAppointmentFolder.m
691 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): add
692 "personal" to the ocs path of the appointment folder.
694 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
695 -flatContentAsString]): use latin1 when the encoding is not
696 specified, and to reencode data chunk which were not correctly
697 decoded with the original charset.
699 * SoObjects/Appointments/SOGoAppointmentFolder.m ([SOGoAppointmentFolder -aclUsersForObjectAtPath:objectPathArray])
700 ([SOGoAppointmentFolder -aclsForUser:uidforObjectAtPath:objectPathArray])
701 ([SOGoAppointmentFolder -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray])
702 ([SOGoAppointmentFolder
703 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]):
704 override those methods to use the "personal" additional directory.
706 * SoObjects/SOGo/SOGoUserFolder.m ([-ocsPrivateCalendarPath]):
707 append "/personal" to the calendar path to simulate a single
708 calendar in a choice of many.
710 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
711 -lookupName:_keyinContext:acquire:_acquire]): moved the lookup
712 methods back here. Moved the folder existence check here, and do
713 it on self only when the lookup happens for a non-folder object.
714 This permits to accept entries for folders with parents who
717 2007-08-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
719 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
720 -shouldTakeValuesFromRequest:requestinContext:context]): same as
723 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
724 -shouldTakeValuesFromRequest:requestinContext:context]):
725 redesigned method since any method called can be received from a
726 POST or a GET. Instead we check the method call itself and we
727 accept only if it has the "save" prefix.
729 * SoObjects/Appointments/SOGoAptMailNotification.m
730 ([SOGoAptMailNotification -getSubject]): returns the subject an a
731 quoted-printable encoded string, if needed.
733 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
734 -asQPSubjectString:encoding]): moved method into
735 NSString+Utilities.m.
737 2007-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
739 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
740 -messageForwardingList])
741 ([UIxPreferences -itemMessageForwardingText])D
742 ([UIxPreferences -userMessageForwarding])
743 ([UIxPreferences -setUserMessageForwarding:newMessageForwarding]):
744 new template methods for manage the user preference regarding
747 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -language]): change the
748 algorithm to return, in order, the user's defined language or the
749 first browser language or, finally, the default language.
750 ([SOGoUser -messageForwarding]): new method that returns the user
751 preference for message forwarding: "inline" or "attached",
752 defaulting to "attached".
754 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
755 -contentForInlineForward]): new method that returns the content of
756 the message for inline forwarding based on the SOGoMailForward
759 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
760 -fetchMailForForwarding:sourceMail]): check the user preference
761 for message forwarding and compose inline forwarded messages if required.
763 * SoObjects/Appointments/SOGoCalendarComponent.m
764 ([SOGoCalendarComponent
765 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
766 now use a template based on the language returned from the
769 * SoObjects/Mailer/SOGoMailEnglishForward.m: new module containing
770 a subclass of SOGoMailForward for English locale.
772 * SoObjects/Mailer/SOGoMailFrenchForward.m: new module containing
773 a subclass of SOGoMailForward for French locale.
775 * SoObjects/Mailer/SOGoMailForward.[hm]: new module class that
776 helps build template for inline forwarded messages.
778 2007-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
780 * UI/SOGoElements/SOGoIEConditional.m: new extension module class
781 to handle "<var:if-ie>" template tags.
783 * UI/SOGoElements: new extension bundle containing sogo-specific
786 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
787 -takeValuesFromRequest:_rqinContext:_ctx]): save the category
788 selected in the dialog.
789 ([UIxComponentEditor -setComponent:newComponent]): retrieve the
790 first category, if ever, of the calendar entity.
792 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
793 -composeAction]): restored method since it is needed by the
796 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
797 -composeAction]): the address fields should be arrays and not
800 * UI/Common/UIxPageFrame.m ([UIxPageFrame -buildDate]): new method
801 that returns the build date of SOGo in the template.
803 2007-08-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
805 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
806 -_flattenedRecords:records]): when the c_cn field is empty,
807 returns set a formatted string with the concatenation of
808 c_givenname and c_sn as the displayName.
810 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
811 -isValidMailAccountName:_key]): prevent unknown accounts from
814 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
815 -pathToAttachmentObject]): we no longer need the filename
816 extension for SoLookup...
818 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
819 -lookupName:_keyinContext:_ctxacquire:_flag]): do not require the
820 filename to have an extension, and thus accept any filename.
822 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
823 -currentCName]): new method that returns the c_name of the
824 contact, correctly escaped to be passed by url afterwards.
826 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
827 ([UIxMailPartHTMLViewer -flatContentAsString]): pass the NSData
828 instance of [self decodedFlatContent] instead of the buggy
829 NSString from [super flatContentAsString] to the parser.
831 2007-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
833 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -deleteAction]):
834 new category method to reponds to the "delete" web command on
836 ([UIxMailActions -deleteAttachmentAction]): new category method to
837 reponds to the "deleteAttachment" web command on drafts, taking
838 the "filename" url parameter into account.
840 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
841 -contentForEditing]): new method that retrieve the editable mail
843 ([SOGoMailObject -fetchFileAttachmentKeys]): new method that
844 returns the body keys for attached files (parts with a "filename"
847 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
848 -asQPSubjectString:encoding]): do not change the string if the
849 encoded string has the same length (which means it is already
851 ([SOGoDraftObject -fetchMailForEditing:sourceMail]): new method
852 that retrieve a draft along with its attachments for editing.
853 ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): no longer
854 choke if the "to" header field is empty.
855 ([SOGoDraftObject -delete]): new method to delete the draft folder
856 whenever operations are done.
858 2007-08-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
860 * UI/MailerUI/UIxMailEditor.m ([-patchFlagsInStore]): removed
861 useless stub method, of which the intention was implemented in
863 ([-lookupSentFolderUsingAccount]): removed obsolete method.
864 ([-selectedMailIdentity]): removed obsolete method.
865 ([-lookupSentFolderUsingFrom]): removed obsolete method.
866 ([-storeMailInSentFolder:_path]): removed obsolete method, of
867 which the mechanism has been put in -[SOGoDraftObject sendMail]
869 ([UIxMailEditor -_saveFormInfo], [UIxMailEditor -defaultAction])
870 ([UIxMailEditor -saveAction], [UIxMailEditor -sendAction]):
871 adapted algorithms to the new SOGoDraftObject methods.
872 ([-deleteAction]): removed method since local draft objects cannot
873 be removed by the user.
875 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
876 -expungeAction]): new method replacing the one previously found in
878 ([UIxMailFolderActions -createFolderAction])
879 ([UIxMailFolderActions -renameFolderAction])
880 ([UIxMailFolderActions -deleteFolderAction])
881 ([UIxMailFolderActions -emptyTrashAction])
882 ([UIxMailFolderActions -subscribeAction])
883 ([UIxMailFolderActions -unsubscribeAction]): error situations
884 should have http return code 500 instead of 403.
886 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
887 -composeAction]): new method replacing the one previously in
890 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
891 -imap4URLString]): removed overriden method (see below).
893 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -aclUsers]):
894 cache the mailbox acl.
895 ([SOGoMailFolder -aclsForUser:uid]): cache the mailbox acl.
896 ([SOGoMailFolder -setRoles:rolesforUser:uid]): reset the mailbox
898 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): modified to use
899 the new method of determining the users mail accounts.
901 * SoObjects/Mailer/SOGoMailBaseObject.m ([-imap4URLString]): no
902 longer adds a "/" at the end of the string (the default for
903 folders), therefore this will be overriden in SOGoMailFolder
904 rather than in SOGoMailObject.
906 * UI/MailerUI/UIxMailListView.m ([-expungeAction]): removed
907 method, moved into the new UIxMailActions module class.
909 * SoObjects/Mailer/SOGoDraftsFolder.m ([SOGoDraftsFolder
910 -newDraft]): new method that returns a new SOGoDraftObject
911 instance with a unique filename based on the current timestamp and
912 the "newDraft" prefix.
914 -lookupName:nameinContext:localContextacquire:acquire]): overriden
915 method by detecting local drafts with their "newDraft" prefix.
916 ([SOGoDraftsFolder -isInDraftsFolder]): returns YES.
918 * SoObjects/Mailer/SOGoDraftsFolder.[hm]: rewrote class module
919 from scratch by making it a subclass of SOGoMailFolder.
921 * UI/MailerUI/UIxMailReplyAction.m: removed obsolete class
924 * UI/MailerUI/UIxMailForwardAction.m: removed obsolete class
927 * UI/MailerUI/UIxMailEditorAction.[hm]: removed obsolete class
930 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -init]):
931 new method, initializing the new ivars: IMAP4ID, headers, text,
932 sourceURL and sourceFlag.
933 ([-spoolFileManager], [SOGoDraftObject -userSpoolFolderPath])
934 ([-_ensureUserSpoolFolderPath])
935 ([-saveMimeMessageToTemporaryFileWithHeaders:])
936 ([SOGoDraftObject -mimeMessageWithHeaders:_headers])
937 ([-deleteTemporaryMessageFile:], [-delete], [-content])
938 ([-GETAction:_ctx], [-DELETEAction:_ctx], [-fetchParts:])
939 ([-uid], [-flags], [-size], [-envelope]): removed methods.
940 ([SOGoDraftObject -storeInfo]): rewrote method to take the new
942 ([SOGoDraftObject -setSourceURL:newSourceURL])
943 ([SOGoDraftObject -setSourceFlag:newSourceFlag]): new accessor
944 methods to store the url of the original message between accesses
945 so that, depending on the action taken (forward or reply), the
946 correct flag can be given.
947 ([SOGoDraftObject -setIMAP4ID:]): new accessor method that sets
948 the imap4 id that is returned for the message whenever it is saved
949 into the drafts folder.
950 ([SOGoDraftObject -save]): new method that takes in charge the
951 saving of the message in the IMAP drafts folder.
952 ([SOGoDraftObject -fetchMailForReplying:sourceMailtoAll:toAll]):
953 new method that fills the original data of the new message with
954 the reply content of the original message.
955 ([SOGoDraftObject -fetchMailForForwarding:sourceMail]): same as
956 above for message forwarding.
957 ([-spoolFileManager]): removed useless method (only returned the
958 default filemanager...)
959 ([SOGoDraftObject -mimeMessageAsData]): new method that returns
960 the resulting message as an NSData chunk.
962 * SoObjects/Mailer/SOGoMailObject+Draft.m: new extension module
963 containing a rewrite of the mail action methods found in
964 UI/Mailer/, that needed to be put in the SOGoMailObject class.
965 ([SOGoMailObject -subjectForReply]): new method that returns a
966 subject suitable for replies.
967 ([SOGoMailObject -contentForReply]): new method that returns the
968 textual content of an email, quoted for replying.
969 ([SOGoMailObject -filenameForForward]): new method that returns
970 the name of the filename that should contain the forwarded
971 message, based on its subject.
972 ([SOGoMailObject -subjectForForward]): explicit.
974 2007-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
976 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
977 -mailAccounts]): rewrote method to return the name of the mail
978 accounts now available with the -[SOGoUser mailAccounts] method.
979 ([UIxMailMainFrame -showLinkBanner]): removed method.
980 ([UIxMailMainFrame -bannerToolbarStyle]): removed method.
981 ([UIxMailMainFrame -bannerConsumeStyle]): removed method.
982 ([UIxMailMainFrame -rootURL]): removed method.
983 ([UIxMailMainFrame -userRootURL]): removed method.
984 ([UIxMailMainFrame -calendarRootURL]): removed method.
985 ([UIxMailMainFrame -contactsRootURL]): removed method.
986 ([UIxMailMainFrame -hasErrorText])
987 ([UIxMailMainFrame -errorText])
988 ([UIxMailMainFrame -errorAlertJavaScript]): removed methods.
989 ([-composeAction]): removed method. Now provided by
990 UIxMailAccountActions.
991 ([UIxMailMainFrame -setHideFolderTree:_flag]): removed method.
992 ([UIxMailMainFrame -hideFolderTree]): removed method.
993 ([UIxMailMainFrame -treeRootClassName]): removed method.
994 ([UIxMailMainFrame +initialize]): removed method.
995 SOGoMailTreeRootClass userdefaults will no longer have any effect.
997 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
998 -redirectToLocation:newLocation]): new method that implements the
999 same functionality as WOComponent.
1001 * UI/Common/WODirectAction+SOGo.[hm]: new class extension module.
1003 * UI/MailerUI/UIxMailView.m ([UIxMailView -mailIsDraft]): new
1004 method that returns whether the current mail is store in the
1005 drafts folder hierarchy.
1007 * SoObjects/SOGo/SOGoUser.m ([-fullEmail]): removed method.
1008 ([-primaryEmail]): removed method.
1009 ([SOGoUser -primaryIMAP4AccountString]): removed method.
1010 ([SOGoUser -mailAccounts]): new method that returns an array
1011 containing description dictionaries for all the user mail
1012 accounts. Each account also contain the user's identities for that
1014 ([SOGoUser -allIdentities]): new utility method that returns all
1015 the user identities on all accounts.
1016 ([SOGoUser -primaryIdentity]): new method return the first
1017 identity of the first account.
1019 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]):
1021 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1022 -isInDraftsFolder]): returns NO.
1023 ([-preferredIdentity]): removed method, replaced with -[SOGoUser
1025 ([SOGoMailAccount -draftsFolderInContext:_ctx]): new method.
1027 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1028 -isInDraftsFolder]): new method that detects if self is contained
1029 by the drafts folder by calling itself on the container object.
1031 * SoObjects/Mailer/SOGoMailAccounts.m ([-fetchAllIdentities]):
1033 ([-fetchIdentitiesWithEmitterPermissions]): removed method.
1034 ([SOGoMailAccounts -toManyRelationshipKeys]): rewrote method to
1035 return the name of the mail accounts now available with the
1036 -[SOGoUser mailAccounts] method.
1038 * SoObjects/Mailer/SOGoUser+Mail.[hm]: removed useless class
1041 * SoObjects/Mailer/SOGoMailIdentity.[hm]: removed useless class
1044 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
1045 -keysWithFormat:format]): method that forward the method of the
1046 same name to each member of the array, considering they all are
1047 instances of NSDictionary.
1048 ([NSArray -objectsForKey:key]): same principle as above.
1049 ([NSArray -flattenedArray]): new method that transforms an array
1050 of arrays into a single array containing all the elements of the
1053 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
1054 -keysWithFormat:keyFormat]): new method inspired by the python
1055 string formatting system and which replaces occurences of "%{key}"
1056 by the corresponding keys.
1058 2007-08-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1060 * Main/SOGo.m ([SOGo -run]): check for channel-type specific
1061 sql script before the generic one when initializing mandatory
1064 2007-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1066 * SoObjects/SOGo/NSString+Utilities.m ([NSString
1067 -pureEMailAddress]): new utility method inspired by the
1068 "_rawSender" private method in SOGoDraftObject, which it now
1071 * SoObjects/SOGo/SOGoMailer.m: new abstraction class module that
1072 provides a common API for sending emails, no matter what the
1075 2007-08-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1077 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1078 -quotasAction]): invoke "relativeImap4Name" instead of
1079 "nameInContainer" since the latter also returns the "folder"
1082 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1083 -listMailboxesAction]): declare the output as text/plain in UTF-8.
1085 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1086 -deleteFolderAction]): fixed the url of the destination folder.
1088 * Main/SOGo.m ([SOGo +initialize]): show the build date and
1089 hostname at startup.
1091 2007-08-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1093 * SoObjects/Appointments/SOGoCalendarComponent.m
1094 ([SOGoCalendarComponent
1095 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
1096 set the mail date to the current date string returned by our
1097 rfc822DateString extension method.
1099 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1100 -_gcsFoldersFromFolder:): ignore the personal folders who are
1101 returned but don't really exist.
1103 2007-08-02 Francis Lachapelle <flachapelle@inverse.ca>
1105 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView _responseForResults:]):
1106 has to return only one element.
1108 2007-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1110 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
1111 -content]): new method returning the decoded content of the
1112 corresponding attachment as an NSData instance.
1113 ([UIxMailPartViewer -filename]): if the "filename" parameter of
1114 the metadata parameterList is empty, try to find out the filename
1115 from the "disposition" metadata returned with the BODYSTRUCTURE
1118 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1119 -composeAction]): prefix the INBOX folder with "folder".
1121 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailBaseObject
1122 -relativeImap4Name]): return nameInContainer stripped from its
1123 first 6 characters since all folder names are prefixed with
1126 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1127 -imap4URLString]): invoke -relativeImap4Name instead of
1128 "nameInContainer" since the former will return the fixed IMAP4
1129 foldername and the latter the SoObject name.
1131 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1132 +initialize]): we now fetch the "BODYSTRUCTURE" key instead of "BODY".
1134 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderNameInContext:])
1135 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
1136 ([SOGoMailAccount -sieveFolderNameInContext:_ctx])
1137 ([SOGoMailAccount -sentFolderNameInContext:])
1138 ([SOGoMailAccount -trashFolderNameInContext:]): prefix the folder
1139 names with "folder".
1140 ([SOGoMailAccount -inboxFolderInContext:_ctx])
1141 ([SOGoMailAccount -sentFolderInContext:_ctx])
1142 ([SOGoMailAccount -trashFolderInContext:_ctx]): no longer prefix
1143 the folder names with "folder" since they are prefixed earlier.
1145 2007-07-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1147 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
1148 ([-sentFolderInContext:], [-trashFolderInContext:]): folder keys
1149 all starts with "folder".
1151 * SoObjects/SOGo/SOGoObject.m ([SOGoObject +initialize]): no
1152 longer declare security info from here.
1154 * SoObjects/Mailer/SOGoMailFolder.m
1155 ([-isMessageKey:_keyinContext:_ctx]): removed useless method.
1156 ([SOGoMailFolder -lookupName:_keyinContext:acquire:_acquire]):
1157 folder names now always start with "folder".
1159 * SoObjects/Mailer/SOGoMailAccount.m
1160 ([-lookupName:inContext:acquire:]): folder names now always start
1163 2007-07-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1165 * UI/MailerUI/UIxMailForwardAction.m ([UIxMailForwardAction
1166 -forwardAction]): adapted to the new saveAttachment:withMetadata:
1169 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -saveAction]): added
1170 code to save the attached filenames with the filename returned by
1171 the web server as well as their mime types.
1173 * UI/MailPartViewers/UIxMailPartMessageViewer.m ([UIxMailPartMessageViewer -fromAddresses])
1174 ([UIxMailPartMessageViewer -toAddresses])
1175 ([UIxMailPartMessageViewer -ccAddresses]): new methods returning
1176 the corresponding fields separated with a ", " (if needed).
1178 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1179 -saveAttachment:_attachwithMetadata:metadata]): new method
1180 replacing -saveAttachment:withName: and which takes a dictionary
1181 as parameter with the filename and the mime type of the
1183 The mimetype is then saved in a hidden text file.
1184 ([SOGoDraftObject -contentTypeForAttachmentWithName:]): if exists,
1185 take the mime type from the hidden text file related to the
1188 * SoObjects/Contacts/SOGoContactGCSFolder.m ()
1189 ([SOGoContactGCSFolder
1190 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
1191 return records if the db records are > 0 and not just > 1...
1193 2007-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1195 * UI/Contacts/UIxContactsListView.m ([-displayName]): removed
1197 ([UIxContactsListView -defaultSortKey]): changed to "displayName".
1199 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1200 ([SOGoContactLDAPFolder
1201 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
1202 translate the returned records to a normalized form.
1204 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1205 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
1206 translate the returned records to a normalized form.
1208 * UI/Scheduler/UIxCalListingActions.m,
1209 UI/Contacts/UIxContactsListView.m, SoObjects/SOGo/SOGoUser.m,
1210 SoObjects/SOGo/AgenorUserDefaults.m,
1211 SoObjects/Contacts/SOGoContactGCSFolder.m,
1212 SoObjects/Appointments/SOGoAppointmentFolder.m,
1213 OGoContentStore/OCSiCalFieldExtractor.m,
1214 OGoContentStore/OCSContactFieldExtractor.m: prefixed all quick
1215 table fields with "c_".
1217 2007-07-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1219 * SoObjects/SOGo/LDAPSource.m ([LDAPSource +initialize]): query
1220 the values for SOGoLDAPQueryLimit and SOGoLDAPQueryTimeout from
1221 the application settings. If set, both limit will influence the
1222 maximum size of the resultsets and the time taken to solve them.
1223 ([LDAPSource -_initLDAPConnection]): initialize the limits.
1225 2007-07-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1227 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder -davNamespaces]): added new overriden
1228 method that declares the DAV namespace related to CardDAV.
1229 ([SOGoContactGCSFolder -davComplianceClassesInContext:]): new
1230 method that declares the "access-control" and "addressbook-access"
1231 classes to the list.
1233 * SoObjects/Appointments/SOGoAppointmentFolder.m
1234 ([-lookupActionForCalDAVMethod:]): removed method.
1235 ([SOGoAppointmentFolder -davNamespaces]): added new overriden
1236 method that declares the DAV namespace related to CalDAV.
1238 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davNamespaces]): new
1239 optional method for subclasses which handle specific extensions to
1240 the DAV protocol: CardDAV or CalDAV.
1242 -lookupName:lookupNameinContext:localContextacquire:acquire]):
1243 new overriden method that handles dav invocations for extensions
1244 to DAV by returning an appropriate SoSelectorInvocation.
1246 * SoObjects/SOGo/NSString+Utilities.m ([NSString
1247 -asDavInvocation]): new method returning a dictionary with a "ns"
1248 key representing the dav namespace and a "method" key representing
1249 the dav method name of the request.
1251 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
1252 +initialize]): scan the value of SOGoUIxUserCanChangePassword.
1254 ([UIxPreferences -shouldDisplayPasswordChange]): new template
1255 method that returns the value of SOGoUIxUserCanChangePassword.
1257 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
1258 scan the value of SOGoUIxDefaultModule. If not set, the default
1259 module defaults to "Calendar".
1260 ([SOGoUserHomePage -defaultAction]): redirect the user to the
1261 value of "SOGoUIxDefaultModule".
1263 2007-07-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1265 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1266 -contactInfos]): cache the results to avoid multiple invocations.
1268 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1269 ([SOGoContactLDAPFolder -toOneRelationshipKeys]): check whether we
1270 really should return something or if we fake to return nil...
1272 2007-07-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1274 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): set
1275 acceptAnyUser to YES only when the SOGoAuthentificationMethod user
1276 default is set to "bypass".
1278 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
1279 -checkLogin:_loginpassword:_pwd]): accepts unverified connections
1280 when authMethod is set to "bypass" from now on. This would avoid a
1281 security concern with a default installation of SOGo.
1282 AuthentificationMethod is now prefixed with "SOGo" for better
1285 2007-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1287 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1288 -quotasAction]): new method that returns a json representation of
1291 2007-07-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1293 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1294 -imap4URL]): rewrote method to support accented mailbox names.
1295 ([SOGoMailBaseObject imap4Password]): rewrote to simply use
1296 SOGoAuthenticator's passwordInContext:.
1298 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
1299 -takeValuesFromRequest:_rqinContext:_ctx]): explicitly set the
1300 start and due dates to nil if hasStartDate and hasDueDate are
1303 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
1304 -passwordInContext:context]): made method public.
1306 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
1307 -extractQuickFieldsFromTodo:_task]): set "isallday" and "isopaque"
1308 to false to avoid a null violation.
1310 2007-07-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1312 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1313 -contentAsString]): returns the message encoded in ISO Latin 1
1316 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): read the
1317 SOGoSuperUsername user defaults.
1318 ([SOGoUser -initWithLogin:newLoginroles:newRoles]): simplified
1320 ([SOGoUser -rolesForObject:objectinContext:context]): if the
1321 current user is the superuser, grant him/her the "owner" role.
1323 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
1324 the folder only if the current user is the owner of the future
1327 * SoObjects/Appointments/SOGoCalendarComponent.m
1328 ([SOGoCalendarComponent -contentAsString]): we return the content
1329 based on the permissions returned by the security manager instead
1330 of by looking at the user roles.
1332 * SoObjects/Appointments/SOGoAppointmentFolder.m
1333 ([SOGoAppointmentFolder -calendarFolders]): read the calendar
1334 folders of the user to whom this folder belongs instead of the
1335 active user. This way, a delegate user will be able to have the
1336 same view that the original user has if he connects from his user
1339 * Main/SOGo.m ([SOGo -lookupUser:_keyinContext:]): check if the
1340 user exists before creating the SOGoUserFolder instance. If not,
1343 * UI/MailerUI/UIxMailSourceView.[hm]: new class module designed to
1344 return the message source code in plain text.
1346 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1347 -contentAsString]): returns the message encoded in UTF8.
1349 2007-07-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1351 * OGoContentStore/iCalRepeatableEntityObject+OCS.m
1352 ([iCalRepeatableEntityObject -cycleInfo]): no longer take the
1353 leading tagname into account when serializing the element values.
1355 * Main/SOGoProductLoader.m: only load bundle directories ending
1356 with the "SOGo" extension.
1358 * Main/SOGo.m ([SOGo
1359 -_checkTableWithCM:cmtableURL:urlandType:tableType]): empty the
1360 result set if the query has caused no exception. Otherwise we get
1361 an "evaluation is in progress exception".
1363 2007-06-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1365 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
1366 -generateSQLForInsert]): initialize error to nil before the
1367 serialization. Otherwise the method can get confused if it ever is
1368 initialized to something else.
1370 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
1371 -folderIsMandatory]): returns NO unconditionnally.
1373 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
1374 -appendPersonalSources]): add the "personal" folder to the list of
1375 user folders even if it doesn't exist, so that it is created when
1376 the user accesses it.
1378 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1379 -folderIsMandatory]): returns YES if nameInContainer is set to
1380 "personal", which is the default address book.
1382 * SoObjects/Appointments/SOGoAppointmentFolder.m
1383 ([SOGoAppointmentFolder -folderIsMandatory]): returns YES since
1384 users must have one Calendar folder (one and only one).
1385 ([SOGoAppointmentFolder -_privacySqlString]): unescape the
1386 escaping '\' so make the carriage return a real one. This way,
1387 PgSQL 8 won't complain about escaping the string.
1389 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): new
1390 method that create the folder if considered mandatory.
1391 ([SOGoFolder -folderIsMandatory]): new method that determines
1392 whether the folder should be created automatically or not. To be
1393 overriden by subclasses.
1395 * Main/SOGo.m ([SOGo -run]): override method and create the
1396 missing system tables if needed.
1398 2007-06-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1400 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
1401 -mailDateFormatter]): returns the user's date formatter.
1403 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject -date]):
1404 applies the user timezone to the date object before returning it.
1406 * UI/Common/UIxSortButton.m: removed useless class module.
1408 * UI/Common/UIxSortableTableHeader.m: removed useless class
1411 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1412 -contactInfos]): use the "asc" url parameter instead of "desc" to
1413 determine the ordering.
1414 ([-sortOrdering]): removed method.
1415 ([UIxContactsListView -init]): removed the "searchText" ivar.
1416 (general): the template no longer use the UIxSortableTableHeader
1419 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1420 -defaultSortKey]): default sort following the messages arrival
1421 instead of their date.
1422 ([-isSortedDescending]): removed method.
1423 ([-imap4SortOrdering]): use the "asc" url parameter instead of
1424 "desc" to determine the ordering.
1425 (general): the template no longer use the UIxSortableTableHeader
1428 2007-06-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1430 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sleep]):
1432 ([-setQualifier:_msg], [-qualifier]): removed methods.
1433 ([UIxMailListView -defaultAction]): added code to handle the
1434 search criteria and value passed as url parameters. Also, we now
1435 handle the same search criterias as Thunderbird/Icedove.
1437 2007-06-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1439 * UI/PreferencesUI/UIxJSONPreferences.m ([UIxJSONPreferences
1440 -jsonDefaultsAction]): bug fix: returns a WOResponse instance with
1441 the string instead of the string itself.
1442 ([UIxJSONPreferences -jsonSettingsAction]): same as above.
1444 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): new module
1445 bool var "acceptAnyUser" that is set when the AuthenticationMethod
1446 user default is nil.
1447 ([SOGoUser -initWithLogin:newLoginroles:newRoles]):
1448 unconditionnally returns an instance whenever acceptAnyUser is set.
1450 2007-06-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1452 * Main/sogod.m (main): prevent SOGo from running as root.
1454 2007-06-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1456 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
1457 -setCurrentPassword:newPassword]): new stub method.
1458 ([SOGoUser -dateFormatterInContext:context]): new method that
1459 returns an instance of SOGoDateFormatter configured based on the
1462 * UI/Common/UIxPageFrame.m ([UIxPageFrame
1463 -relativePreferencesPath]): new method.
1465 * UI/Scheduler/UIxComponentEditor.m ([-titleDateFormatter]):
1466 removed useless method.
1468 * SoObjects/SOGo/SOGoDateFormatter.m: rewrote class to accept
1469 different configurable formats (long and short date + time).
1471 * SoObjects/SOGo/SOGoDateFormatter.[hm]: moved from UI/SOGoUI/.
1473 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
1474 -isInternetRequest]): removed method.
1476 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
1477 -jsonRepresentation]): new method with an explicit name.
1479 * UI/PreferencesUI/product.plist: new bundle that provides a web
1480 ui for handling user defaults.
1482 * UI/Scheduler/UIxTaskView.[hm]: removed unused module.
1484 * UI/Scheduler/UIxAppointmentView.[hm]: removed unused module.
1486 * SoObjects/SOGo/WOContext+Agenor.[hm]: removed unused module.
1488 2007-06-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1490 * SoObjects/SOGo/SOGoLRUCache.m: removed unused module.
1492 2007-06-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1494 * UI/Scheduler/NSArray+Scheduler.m ([NSArray
1495 -compareEventsAscending:otherEvent]): no longer use compare: on
1496 the time objects since one of them could be an NSNull, which
1497 crashes when comparing with anything.
1499 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1500 -eventsListAction]): sort events from here.
1501 ([UIxCalListingActions -tasksListAction]): sort tasks from here.
1503 * SoObjects/SOGo/NSObject+AptComparison.[hm]: removed category
1504 module, replaced with NSArray+Scheduler in UI/SchedulerUI/.
1506 * SoObjects/Appointments/SOGoAppointmentFolder.m
1507 ([SOGoAppointmentFolder
1508 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]):
1509 no longer sort elements from here.
1511 2007-06-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1513 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1514 -aclsForUser:uid]): implemented method by forwarding the request
1515 to the container. This fixes a bug where users could no longer
1516 read emails from shared folders.
1518 * SoObjects/Appointments/SOGoCalendarComponent.m
1519 ([SOGoCalendarComponent -init]): "isNew" is no longer defined
1520 here, but rather in its parent class.
1522 * UI/SOGoUI/SOGoDateFormatter.m ([SOGoDateFormatter
1523 -stringForSecondsSinceThe70s:seconds]): new utility method.
1525 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1526 -eventsListAction]): no longer reduce the end day of one day for
1527 all day events since everything has been fixed in
1528 OCSiCalFieldExtractor.
1530 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
1531 -extractQuickFieldsFromEvent:_event]): reduce the seconds/70 of
1532 the end date of all day events of 1 so that they stay on their
1535 2007-06-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1537 * UI/Scheduler/UIxCalMonthView.m: no longer retrieve appointments.
1539 * UI/Scheduler/UIxCalView.m ([-fetchCoreAppointmentsInfos]):
1541 ([-fetchCoreTasksInfos]): removed method.
1543 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1544 -init]): initialize an instance of SOGoDateFormatter.
1545 ([UIxCalListingActions -eventsListAction]): the display start and
1546 end dates are added to the listing for each event.
1548 * UI/Scheduler/UIxCalDayTable.m: no longer retrieve appointments.
1550 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1551 -isAllDay]): returns YES if the "hm" url parameter is set to
1553 ([UIxAppointmentEditor -defaultAction]): if isAllDay, the enddate
1554 is displayed one day earlier.
1556 2007-06-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1558 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1559 -_setupContext]): take the range of dates specified by the popup
1562 * UI/Scheduler/UIxCalListingActions.[hm]: new subclass of
1563 WODirectAction that returns WOResponse objects with the events or
1564 todos satisfying the parameters passed in the url.
1566 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1567 -takeValuesFromRequest:_rqinContext:_ctx]): take the new ivar
1568 "isAllDay" into account and compute the amount of days to pass to
1571 2007-06-06 Francis Lachapelle <flachapelle@inverse.ca>
1573 * SoObjects/SOGo/NSNumber+Utilities.m: initial import.
1574 * SoObjects/SOGo/NSNull+Utilities.m: initial import.
1575 * UI/Scheduler/UIxCalTasksListView.m ([WOResponse -tasksListAction]):
1576 new method that returns a json-formatted array of the visible tasks
1577 for the current user.
1579 2007-06-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1581 * SoObjects/Appointments/SOGoAppointmentObject.m: the owner of the
1582 object must be present in the list of UIDs we delete the object
1583 from. Otherwise Calendar objects having no organizer and no
1584 attendees will remain in their owner's Calendar.
1586 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1587 -_urlPreferringParticle:expectedoverThisOne:possible]): remove the
1588 first 3 elements of the path array if the url returned by
1589 baseURLInContext: returns a hostname.
1591 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1592 -_adjustOwner]): sharedFolderName and otherUsersFolderName may be
1593 nil, in which case a crash happens when calling hasPrefix:.
1594 ([SOGoMailFolder -_sharesACLs]): same as above.
1595 ([SOGoMailFolder -otherUsersPathToFolder]): same as above. If
1596 otherUsersFolderName is nil, we return nil.
1597 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): if we receive
1598 nil from [self otherUsersPathToFolder], we return nil too.
1600 2007-06-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1602 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1603 -_urlPreferringParticle:expectedoverThisOne:possible]): unescape
1604 the result of [self baseURLInContext:] to avoid a double escaping
1605 in the resulting string.
1607 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -aclsForUser:uid]): if
1608 the user has the "ObjectReader" role on the parent container, then
1609 he is granted the "ObjectViewer" role on this object. Same for
1610 "ObjectEraser", although this might change later.
1612 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1613 -toolbar]): determine the toolbar filename based on the
1614 permissions declared by the securitymanager. The role mechanism
1615 has been adjusted on a lowerlevel so we can simplify the code.
1617 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
1618 -initWithName:newNameinContainer:newContainer]): read the content
1619 directly from here. That way we can determine whether the object
1621 ([SOGoContentObject -aclsForUser:uid]): if the object is new and
1622 the ObjectCreator role is enabled, we also grant the ObjectEditor
1623 role to the current user.
1625 * UI/Common/UIxFolderActions.m ([-canAccessContentAction]):
1626 changed the method paradigm to only return HTTP code 204. Not test
1627 is done whatsoever since the security manager does it for us.
1629 * UI/Contacts/UIxContactsListView.m ([-canAccessContentAction]):
1630 removed method because the same exists in UIxFolderActions.m
1632 * UI/Contacts/UIxContactsUserRightsEditor.m
1633 ([UIxContactsUserRightsEditor
1634 -setUserCanReadObjects:userCanReadObjects]): new method.
1636 * SoObjects/SOGo/SOGoPermissions.m: added roles "FolderViewer" and
1637 "FolderEraser" and special permission "Access Object". Removed
1638 role "SOGoMailRole_MessageEraser" since "SOGoRole_ObjectEraser"
1639 can be used instead. Removed "FolderReader" since it is useless.
1641 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
1642 -vCard]): directly use the "content" ivar since it is initialized
1643 during object creation.
1645 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1646 ([SOGoContactLDAPFolder -init]): no longer handle the
1647 nameInContainer no the container ivars. They were removed because
1648 this class is a descendant of SOGoObject which already has them.
1649 ([SOGoContactLDAPFolder -davDisplayName]): new overriden method
1650 returning "displayName".
1651 ([SOGoContactLDAPFolder -isFolderish]): new overriden method
1654 * SoObjects/Appointments/SOGoCalendarComponent.m
1655 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): commented out.
1656 ([SOGoCalendarComponent -findParticipant:user]): new name for
1657 method "participant:".
1658 ([SOGoCalendarComponent -findParticipantWithUID:uid]): same as
1659 findparticipant but taking a uid string as parameter.
1660 ([SOGoCalendarComponent -contentAsString]): don't regenerate the
1661 iCalendar automatically. Instead, this is done only when the user
1662 is a "date and time viewer".
1663 ([SOGoCalendarComponent -aclsForUser:uid]): take delegation roles
1664 (modifier and responder) into account by compiling them with the
1667 * SoObjects/Contacts/SOGoContactFolder.h: removed
1668 "nameInContainer" from the list of required methods.
1670 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
1671 -davContentType]): returns "text/calendar".
1673 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1674 ([SOGoContactLDAPFolder -davResourceType]): declare the correct
1675 groupdav resource-type.
1677 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
1678 -davContentType]): same as below.
1680 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1681 -initWithName:newNameinContainer:newContainer]): new overriden
1682 method setting the custom owner directly.
1684 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
1685 -davContentType]): same as below.
1687 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1688 -davContentType]): same as below.
1690 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davContentType]):
1691 declare "httpd/unix-directory".
1693 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): declare
1694 "UTC" as fallback timezone instead of "Canada/Eastern".
1695 ([-hasEmail:email]): make use of the new NSArray's
1696 containsCaseInsensitiveString: method.
1698 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1699 -davContentType]): declare "message/rfc822" as content type.
1701 * SoObjects/Appointments/SOGoAppointmentFolder.m
1702 ([SOGoAppointmentFolder -_privacySqlString]): "owner" is now an
1704 ([SOGoAppointmentFolder
1705 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): same as above.
1706 ([-fetchContentObjectNames]): commented out method since it was
1707 usefull only for testing Funambol.
1709 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
1710 -containsCaseInsensitiveString:match]): an enhanced version of
1713 * UI/MailerUI/UIxMailView.m ([-isTrashingAllowed]): removed
1715 ([-showMarkDeletedButton]): removed useless method.
1716 ([-showTrashButton]): removed useless method.
1718 * SoObjects/Appointments/iCalEntityObject+SOGo.m
1719 ([iCalEntityObject -userIsParticipant:user]): new proxy method
1720 that invoked isParticipant on self for each possible email
1721 addresses of the user passed as parameter.
1722 ([iCalEntityObject -userIsOrganizer:user]): same as above.
1724 * SoObjects/Appointments/iCalEntityObject+SOGo.[hm]: new class
1727 * SoObjects/Appointments/SOGoAppointmentObject.m
1728 ([SOGoAppointmentObject
1729 -saveContentString:contentStringbaseVersion:baseVersion]): remove
1730 method since an event may not have an organizer.
1732 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1733 -GETAction:localContext]): clarified method. Added support for
1734 content-type (thanks to Helge Hess).
1735 ([SOGoObject -initWithName:_nameinContainer:_container]):
1736 initialize and retain the owner.
1737 ([SOGoObject -davContentType]): returns "text/plain".
1739 2007-05-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1741 * UI/Common/UIxObjectActions.m ([UIxObjectActions
1742 -addUserInAclsAction]): send an acl addition mail.
1743 ([UIxObjectActions -removeUserFromAclsAction]): send an acl
1746 * UI/Common/UIxFolderActions.m ([UIxFolderActions
1747 -_realActionWithFolderName:folderDict]): handle the possible
1748 presence of the "mail-invitation" url parameter. If present, the
1749 user will be redirected to the relevant folder.
1751 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -fullEmail]): new proxy method.
1752 ([SOGoUser -language]): new method that returns the user's
1753 preferred language, or the system's if none has been set yet.
1755 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -davURL]): new method
1756 that returns the full dav url to self.
1757 ([SOGoObject -soURL]): same as above but for the so url (Web UI).
1758 ([SOGoObject -soURLToBaseContainerForUser:uid]): new method that
1759 returns the full so url to the base of the SOGo module to which
1760 self belongs, and for the specified user.
1761 ([SOGoObject -soURLToBaseContainerForCurrentUser]): same as above
1762 but for the current user.
1763 ([SOGoObject -httpURLForAdvisoryToUser:uid]): new protocol method
1764 required by the acl advisory templates and which returns a link
1765 the target user can click to activate its new subscription.
1766 ([SOGoObject -resourceURLForAdvisoryToUser:uid]): same as above
1767 but for inclusion of the application/x-sogo-notification part,
1768 which will be handled by the Lightning enhancer plugin.
1770 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -subscribeAction])
1771 ([UIxMailFolderActions -unsubscribeAction]): new stub methods that
1772 do nothing yet since imap folder subscription is not handled yet.
1774 * SoObjects/SOGo/SOGoContentObject.m
1775 ([-hasSupportForDefaultRoles]): removed method.
1777 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
1778 -getFullEmailForUID:uid]): new method that returns the username +
1781 * SoObjects/Appointments/SOGoCalendarComponent.m
1782 ([SOGoCalendarComponent +initialize]): the default language for
1783 mail templates is now set to English.
1785 * UI/SOGoUI/SOGoACLFrenchRemovalAdvisory.[hm]: new subclass of
1786 SOGoACLAdvisory implementing the french template for user removal
1789 * UI/SOGoUI/SOGoACLFrenchAdditionAdvisory.[hm]: new subclass of
1790 SOGoACLAdvisory implementing the french template for user
1793 * UI/SOGoUI/SOGoACLEnglishRemovalAdvisory.[hm]: new subclass of
1794 SOGoACLAdvisory implementing the english template for user removal
1797 * UI/SOGoUI/SOGoACLEnglishAdditionAdvisory.[hm]: new subclass of
1798 SOGoACLAdvisory implementing the english template for user
1801 * UI/SOGoUI/SOGoACLAdvisory.[hm]: new class module implemented the
1802 supercall of all the acl advistory templates. The model is based
1803 on SOGoAptMailNotification except that the template encapsulates
1804 the message to be sent. Later, we might create a superclass common
1805 to all template-based emails.
1807 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
1808 -addRange:newRange]): new method that store a string
1809 representation of the NSRange passed as parameter.
1810 ([NSMutableArray -hasRangeIntersection:testRange]): tests whether
1811 any range contained in self intersect with the one passed as parameter.
1813 * SoObjects/SOGo/NSString+Utilities.m ([-stringByDetectingURLs]):
1814 store ranges in an array to prevent them from intersecting with
1815 each other during the passes.
1817 2007-05-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1819 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1820 -primaryFetchMailboxInfo]): useless method. Removed.
1822 2007-05-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1824 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1825 -toManyRelationshipKeys]): invoke [self subfolders].
1826 ([SOGoMailFolder -subfolders]): new method containing what used to
1827 be in toManyRelationshipKeys.
1828 ([SOGoMailFolder -subfoldersURL]): same as above but returns imap
1831 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1832 -allFolderPaths]): renamed version of "allFolderPathes", sorted by
1833 named and at the beginning of which we put the predefined folders.
1835 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1836 -emptyTrashAction]): new method inspired by a similar one from
1837 UIxMailListView, to which we added the ability to remove
1840 * UI/MailerUI/UIxMailListView.m ([-emptyTrashAction]): removed
1841 method. Replaced with a similar one in UIxMailFolderActions.
1843 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1844 -renameFolderAction]): implemented method.
1845 ([UIxMailFolderActions -deleteFolderAction]): no longer delete the
1846 specified folder. Instead, we put it in the trash folder.
1848 * UI/MailerUI/UIxMailListView.m ([-createFolderAction]): removed
1849 method, replaced with a similar method in the new
1850 UIxMailFolderAction class module.
1851 ([-deleteFolderAction]): idem.
1853 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1854 -createFolderAction]): new method implementing subfolder creation.
1855 ([UIxMailFolderActions -renameFolderAction]): new method
1856 implementing subfolder renaming (basic implementation to be
1858 ([UIxMailFolderActions -deleteFolderAction]): new method
1859 implementing folder deletion.
1861 * UI/MailerUI/UIxMailFolderActions.[hm]: new module implementing
1862 web actions related to the handling of imap folder.
1864 2007-05-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1866 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1867 -ownerInContext:localContext]): overriden method because we are an
1868 IMAP4 client and we need a bit more intelligence to deduce the
1869 owner of the current folder.
1870 ([SOGoMailFolder -aclsForUser:uid]): aclForMailboxAtURL might
1871 return an NSException so we need to be careful here to avoid a
1873 ([SOGoMailFolder -aclUsers]): aclForMailboxAtURL might return an
1874 NSException so we need to be careful here to avoid a crash.
1876 * SoObjects/Mailer/SOGoMailAccounts.m
1877 ([SOGoMailAccounts -fetchIdentitiesWithOnlyEmitterAccess:_flag])
1878 there is no longer any concept of Intranet or Internet connection
1881 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1882 -sharedFolderName]): new method.
1883 ([SOGoMailAccount -otherUsersFolderName]): new method.
1885 * UI/MailerUI/UIxMailFolderMenu.[hm]: removed module, obsoleted by
1886 new javascript code and the new UIxMailAccountActions class.
1888 * UI/MailerUI/UIxMailTree.[hm]: removed module, obsoleted by new
1889 javascript code and the new UIxMailAccountActions class.
1891 * UI/MailerUI/UIxMailTreeBlock.[hm]: removed module, obsoleted by
1892 new javascript code and the new UIxMailAccountActions class.
1894 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1895 -listMailboxesAction]): new method that returns a json-formatted
1896 tree of all the mailboxes available to the current user.
1898 * UI/MailerUI/UIxMailAccountActions.[hm]: new module implementing
1899 web actions related to the handling of mail accounts.
1901 * SoObjects/SOGo/NSDictionary+Utilities.[hm]: new extension
1904 * SoObjects/SOGo/NSObject+Utilities.m ([NSObject
1905 -jsonRepresentation]): new interface method meant to be overriden
1906 by the primitive classes.
1908 2007-05-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1910 * UI/MailerUI/UIxMailSplashView.m: removed.
1912 * SoObjects/Appointments/SOGoCalendarComponent.m
1913 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]): add
1914 the uid to the list only when the user email is recognized by the
1917 2007-05-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1919 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1920 -isDeletionAllowed]): completed method with the new imap acl api.
1922 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultAclRoles]):
1925 * SoObjects/SOGo/SOGoPermissions.m: added the new role
1926 "SOGoMailRole_MessageEraser".
1928 * UI/Common/UIxAclEditor.m ([UIxAclEditor -defaultUserID])
1929 ([UIxAclEditor -_prepareUsers]): take the new SOGoObject's
1930 "defaultUserID" method into account.
1932 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -userIsDefaultUser])
1933 ([UIxUserRightsEditor -_initRights]): take the new SOGoObject's
1934 "defaultUserID" method into account.
1936 * UI/MailerUI/UIxMailUserRightsEditor.m: added all the missing
1937 methods to support the IMAP acls mentionned in the RFC 4314,
1938 removed the ones specific to Cyrus.
1940 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultUserID]): new
1941 mandatory method for subclasses. Removed the SOGoDefaultUserID
1944 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -defaultUserID]):
1945 overriden method to return @"<default>".
1947 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
1948 -defaultUserID]): overriden method to return @"<default>".
1950 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1951 -aclsForUser:uid]): overriden method.
1952 ([SOGoMailFolder -removeAclsForUsers:users]): overriden method.
1953 ([SOGoMailFolder -setRoles:rolesforUser:uid]): overriden method.
1954 ([SOGoMailFolder -defaultUserID]): overriden method.
1955 ([SOGoMailFolder -hasSupportForDefaultRoles]): overriden method.
1957 2007-05-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1959 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
1960 -aclUsersForObjectAtPath:objectPathArray]): new method that being
1961 forwarded the calles to aclUsers for the GCS-based subclasses of
1964 * SoObjects/Mailer/SOGoMailFolder.m: removed all the previous
1965 methods that would have been used to support IMAP acls. Replaced
1966 them with the new protocol for them that has been implemented in
1967 SOGo during the last few weeks.
1969 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
1970 -hasSupportForDefaultRoles]): override method by returning "YES".
1972 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
1973 -addObjectUniquely:object]): new method with an explicit name.
1975 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -aclUsers]): renamed
1976 "acl" to "aclUsers". Now designed to return only the uid of the
1977 users involved in an ACL.
1978 ([SOGoObject -hasSupportForDefaultRoles]): new method returning
1979 "NO" by default. To indicate to the acl editor that we don't want
1980 to handle a default user.
1982 * SoObjects/SOGo/SOGoPermissions.[hm]: added the
1983 SOGoRole_ObjectReader, SOGoRole_Folder*, and SOGoMailRole_*
1986 * UI/MailerUI/UIxMailUserRightsEditor.[hm]: new class module that
1987 provides a view to the IMAP acls.
1989 * UI/MailerUI/UIxMailFolderACLEditor.m: removed obsolete module.
1991 * UI/WebServerResources/MailerUI.js: replaced all invocations of
1992 addEventListener to the use of prototype's Event object. Also,
1993 configured all menus programmatically following descriptions lists
1994 containing their callbacks, or nulls, submenus id or separators.
1996 2007-05-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1998 * UI/Common/UIxObjectActions.m ([UIxObjectActions
1999 -addUserInAclsAction]): save the previous roles of the user
2000 (unlikely) or the default roles, or None instead of saving the
2001 roles that should appear the first time in the role editor when no
2002 default has been set...
2004 * SoObjects/SOGo/SOGoObject.m: defined a new constant
2005 "SOGoDefaultUserID".
2007 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2008 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]):
2009 ignore the "AuthorizedSubscriber" role and add the "None" role
2010 when no other role is found.
2012 * UI/Common/UIxAclEditor.m: added a button for the new default
2015 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
2016 -_initRights]): don't take the "None" role into account when
2017 initializing the list of current roles.
2019 * SoObjects/SOGo/SOGoPermissions.m: added a new void role
2022 2007-05-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2024 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2025 -_rangeOfURLInRange:refRange]): urls cannot end with "&" nor "=".
2026 There is no need to subscract the start from the length if a space
2027 is not found since the range has not changed either. Finally, the
2028 first character before the url might also be a tab or a cr, so we
2029 match it against the "urlAfterEndingChars" custom NSCharacterSet.
2030 ([NSString -stringByDetectingURLs]): modified to handle email
2031 addresses and add a correct "mailto:" link.
2033 2007-05-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2035 * SoObjects/Appointments/SOGoAppointmentFolder.m
2036 ([SOGoAppointmentFolder -fetchContentObjectNames]): override
2037 method to return the events in the range of 2 weeks ago up to 4
2040 * UI/MailPartViewers/UIxMailPartTextViewer.m
2041 ([UIxMailPartTextViewer -flatContentAsString]): use the new
2042 "stringByDetectingURLs" method to offer clickable urls.
2044 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2045 -stringByDetectingURLs]): this new method replaces passive URLS
2046 with active ones for HTML resolution of the text.
2048 2007-05-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2050 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
2051 -asQPSubjectString:encoding]): simplified method.
2052 The headers indicates "utf-8" again thank to our fix in
2055 * SoObjects/SOGo/SOGoObject.m: fail to build if libFoundation is
2058 2007-05-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2060 * UI/Common/UIxObjectActions.m ([UIxObjectActions
2061 -removeUserFromAclsAction]): implemented this method which was
2062 missing and is required to remove users from ACLs.
2064 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2065 -subscribeAction]): folderDict was not autoreleased, resulting in
2068 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2069 -primaryFetchProfile]): when building with libFoundation, don't
2070 use the "propertyList" method from NSString. Rather, we convert
2071 the string to an NSData instance and passit as parameter to
2072 NSDeserializer. This way, we obtain a mutable dictionary rather
2073 than an immutable one.
2075 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -bodyPartForText])
2076 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): use the
2077 constant string "contentTypeValue".
2078 contentTypeValue is now set back to iso-8859-1 since NGMime
2079 converts extracts the data in that encoding.
2081 2007-05-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2083 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
2084 -checkLogin:loginToCheckandPassword:passwordToCheck]): if a
2085 "bindFields" value is present in the user defaults, use the
2086 specified fields to find the dn of the user to bind.
2087 ([LDAPSource -allEntryIDs])
2088 ([LDAPSource -fetchContactsMatching:match])
2089 ([LDAPSource -lookupContactEntry:entryID])
2090 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]):
2091 bind and unbind the connection on each request.
2093 * UI/MailerUI/UIxMailAddressbook.m: removed obsolete module.
2095 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2096 -contactSearchAction]): simplified method to use the facilities
2097 provided by the LDAPUserManager. No longer takes care of the
2098 "ldap-only" url parameter since all requests are handled by the
2101 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2102 -primaryFetchProfile]): check that the value returned is not null
2103 before interpreting it.
2105 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
2106 -contactInfosForUserWithUIDorEmail:uid]): check that uid is not empty.
2107 ([LDAPUserManager -_fillContactMailRecords:contact]): if the
2108 system email is already present, remove it before adding it.
2110 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
2111 -checkLogin:loginToCheckandPassword:passwordToCheck]): check that
2112 loginToCheck is not empty.
2113 ([LDAPSource -fetchContactsMatching:match]): check that match is
2115 ([LDAPSource -lookupContactEntry:entryID]): check that entryID is
2117 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]): check that
2120 2007-05-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2122 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -primaryEmail]): new name
2124 ([SOGoUser -systemEmail]): returns the email formed from the
2125 username and the default mail domain.
2126 ([SOGoUser -hasEmail:email]): test whether the user has the
2127 specified email, in a case-insensitive way.
2129 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2130 -LDAPCheckLogin:_loginpassword:_pwd]): use the user manager to
2131 check login information.
2133 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2134 ([SOGoContactLDAPFolder
2135 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
2136 no longer manage LDAP connections. The requests are forwarded to
2137 the relevant LDAPSource instead.
2139 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2140 -appendSystemSources]): pass LDAPSource objects to
2141 SOGoContactLDAPFolder instances.
2143 * SoObjects/Mailer/SOGoDraftObject.m: extract the raw email
2144 address of the "from" field before sending the message. Otherwise,
2145 sending the mail won't work.
2147 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -fromEMails]):
2148 rewrote this method to request all the available email identities
2149 for the current user. Also, the from field also contains the full
2150 name of the user, not just his/her email address.
2152 * SoObjects/Appointments/SOGoCalendarComponent.m
2153 ([SOGoCalendarComponent -iCalPersonWithUID:uid]): new method taken
2154 from the previous module iCalEntityObject+Agenor.
2155 ([SOGoCalendarComponent -getUIDForICalPerson:person]): idem.
2156 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]):
2159 * SoObjects/Contacts/SOGoContactLDIFEntry.[hm]: new class module
2160 replacing the SOGoContactLDAPEntry module. It was renamed as such
2161 because it now receives a dictionary instead of an NGLdapEntry.
2162 It thus can now handle data from any source of LDIF data, not
2163 only coming from LDAP.
2165 * SoObjects/SOGo/LDAPUserManager.[hm]: new class module
2166 implementing most of what used to be the AgenorUserManager class.
2167 The difference is that users are cached in the forme of
2168 dictionaries and many sources are used. Also, it can be used to
2169 search LDAP contacts.
2171 * SoObjects/SOGo/LDAPSource.[hm]: new class module implementing
2172 the concept of "ldap source", to be used by all the classes
2173 needing access to LDAP-provided information: addressbooks and the
2174 user manager. Most the method thereing are transcriptions of
2175 methods previously found in SOGoContactLDAPFolder. It also contain
2176 utility methods for user matching and authentification.
2178 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: removed
2179 module, rendered useless by code refactoring.
2181 * SoObjects/SOGo/AgenorUserManager.[hm]: removed module, replaced
2182 with the freshly written "LDAPUserManager".
2184 2007-05-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2186 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: renamed to
2187 SOGOContactLDIFEntry.
2189 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: removed class
2190 module, obsoleted by code in SOGo/LDAPSource.[hm].
2192 2007-05-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2194 * UI/Common/UIxAclEditor.m ([UIxAclEditor -currentUserIsOwner]):
2195 new method with an explicit name.
2197 2007-05-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2199 * SoObjects/Appointments/SOGoCalendarComponent.m
2200 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): new method
2201 replacing "isOrganizer:orOwner:" by taking only one instance of
2202 SOGoUser as parameter.
2203 ([SOGoCalendarComponent -participant:user]): new method replacing
2204 the previous "isParticipant" boolean method by returning the first
2205 participant matching the user passed as parameter. This method is
2206 used so that both the regular email address and the "system email
2207 address" of the user are matched against the participants emails.
2209 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
2210 -getSystemEMailForUID:uid]): new method that returns the email
2211 formed with the user's uid and the default mail domain.
2213 * SoObjects/Appointments/SOGoCalendarComponent.m
2214 ([SOGoCalendarComponent -rolesOfUser:login]): removed method that
2215 was previously commented out.
2217 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -systemEmail]): new method
2218 forwared to [AgenorUserManager getSystemEmailForUID:].
2220 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2221 -toolbar]): method replacing the one with the same name in the
2222 task and appointment editor classes. This method makes also use of
2223 the new method "isOrganizerOrOwner:" and "participant:" in
2224 SOGoCalendarComponent.
2226 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2227 -toolbar]): removed method, replaced with a method with the same
2228 name in UIxComponentEditor.
2230 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -toolbar]): removed
2231 method, replaced with a method with the same name in
2234 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2235 -primaryFetchProfile]): the values returned from the database are
2236 converted to a put dictionary first, since the dictionary returned
2237 is actually an immutable one, which can cause a crash afterwards.
2239 2007-04-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2241 * SoObjects/SOGo/SOGoPermissions.m: added "SOGoRole_ObjectViewer"
2242 and "SOGoRole_ObjectEditor".
2244 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
2245 -prepareRightsForm]): this method is no longer mandatory.
2247 * UI/Contacts/UIxContactsUserRightsEditor.m
2248 ([UIxContactsUserRightsEditor
2249 -setUserCanCreateObjects:userCanCreateObjects]): new subclass
2250 module to handle acls related to the address books. Partial
2253 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2254 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): cache
2257 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): remove
2258 specified roles from cache.
2259 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
2260 put resulting roles in cache.
2262 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -init]): do not invoke
2263 initWithName:inContainer:. Instead, directly initialize the ivars
2264 as it is supposed to be to avoid an infinite loop whenever one of
2265 those two methods are overriden.
2267 * SoObjects/SOGo/SOGoContentObject.m ([-rolesOfUser:login]):
2270 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
2271 -aclsForUser:uid]): override method so that SOGo won't crash when
2272 loading the contact card.
2274 2007-04-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2276 * SoObjects/Appointments/SOGoAppointmentFolder.m
2277 ([SOGoAppointmentFolder -_privacySqlString]): the string for the
2278 "freebusy" special user should only require opaque elements.
2280 2007-04-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2282 * SoObjects/Appointments/SOGoAppointmentFolder.m
2283 ([SOGoAppointmentFolder -davResourceType]): fixed a problem with
2284 our double declaration where the resulting XML would be screwed.
2285 There is only one collection per namespace.
2287 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
2288 rfc822DateString]): new method that returns a string conform to
2289 rfc 822 and suitable for email headers.
2291 * SoObjects/Mailer/SOGoDraftObject.m: invoke the new
2292 "rfc822DateString" category method on the date we put in the
2295 2007-04-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2297 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -defaultAction])
2298 ([UIxUserRightsEditor -saveUserRightsAction]): new action methods
2299 which should never be overriden.
2300 ([UIxUserRightsEditor -appendRight:newRight])
2301 ([UIxUserRightsEditor -removeRight:right])
2302 ([UIxUserRightsEditor -appendExclusiveRight:newRightfromList:list])
2303 ([UIxUserRightsEditor -removeAllRightsFromList:list]): new utility
2304 methods that can be used by the subclasses.
2305 ([UIxUserRightsEditor -prepareRightsForm]): new method that should
2306 mandatorily be overriden to prepare the elements of the subclassed
2308 ([UIxUserRightsEditor -updateRights]): new method that should
2309 mandatorily be overriden to update the user rights from the
2310 elements of the subclassed form.
2312 * UI/Common/UIxAclEditor.m ([UIxAclEditor -_prepareUsers]): we
2313 check if the uid is already listed before adding it to our array.
2314 This is because the acl table can contain more than one record per
2315 user/object relationship.
2317 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2318 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): the
2319 "roles" parameter is now an NSArray instead of a string. Therefore
2320 we loop throughout the array to populate the table. All the
2321 relevant records are removed prior to the addition of the new
2324 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
2325 -aclsForUser:uid]): new override that returns nil until we add
2326 support for IMAP acls.
2328 * SoObjects/Mailer/SOGoMailAccounts.m
2329 ([SOGoMailAccounts -aclsForUser:uid]): same as below.
2331 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2332 ([SOGoContactLDAPFolder -aclsForUser:uid]): same as below.
2334 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2335 -aclsForUser:uid]): override this method which will always return
2338 * SoObjects/SOGo/SOGoPermissions.[hm]: added
2339 [Public,Private,Confidential]
2340 x[Viewer,DAndTViewer,Responder,Modifier]. Renamed
2341 SOGoRole_ORganizer to SOGoCalendarRole_Organizer. Same for
2342 ..._Participant. Removed SOGoRole_Assistant and SOGoRole_Delegate.
2344 * SoObjects/Appointments/SOGoAppointmentFolder.m
2345 ([SOGoAppointmentFolder -defaultAclRoles]): new overriden method
2346 that defines default roles for new elements in the acl.
2348 * UI/Scheduler/UIxCalUserRightsEditor.[hm]: new component class
2349 module and subclass of UIxUserRightsEditor specific to the
2350 handling of user rights on calendar folders.
2352 2007-04-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2354 * SoObjects/Appointments/SOGoAppointmentFolder.m
2355 ([SOGoAppointmentFolder -groupDavResourceType]): return both
2356 "vevent-collection" and "vtodo-collection".
2358 * UI/Common/UIxUserRightsEditor.[hm]: new template class module
2359 that implements the detailed editor of user rights per-object.
2361 2007-04-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2363 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
2364 -rolesForObject:objectinContext:context]): no longer query objects
2365 for "roleForUser:". Instead, all objects should implement
2368 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject -acls]):
2369 new method to comply with the new acl "protocol" in SOGoObject.
2370 Uses SOGoFolder's new facilities for ACLS.
2371 ([SOGoContentObject -aclsForUser:uid]): idem.
2372 ([SOGoContentObject -setRoles:rolesforUser:uid]): idem.
2373 ([SOGoContentObject -removeAclsForUsers:users]): idem.
2375 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2376 -aclsForObjectAtPath:objectPathArray]): new method generic to GCS
2377 based folders. This method is derived from the code that was in
2378 UIxAclFolder before its removal.
2379 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
2382 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): idem.
2384 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): idem.
2385 ([SOGoFolder -setRoleForUsers:uidsto:role])
2386 ([SOGoFolder -setRoleForUsers:uidsto:role]): removed method.
2388 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -acls]): stub method
2389 that requires overriding by subclasses.
2390 ([SOGoObject -aclsForUser:uid]): idem.
2391 ([SOGoObject -defaultAclRoles]): idem.
2392 ([SOGoObject -setRoles:rolesforUser:uid]): idem.
2393 ([SOGoObject -removeAclsForUsers:users]): idem.
2395 * UI/Common/UIxObjectActions.m: new module implementing the web
2396 actions common to SOGoObject and all its subclasses.
2397 ([UIxObjectActions -addUserInAclsAction]): new method that adds a
2398 user with the clientObject defaults user rights to the object's
2401 * UI/Common/UIxAclEditor.m: modified module so as to simplify it
2402 to the point where it will only list the users (and their name)
2403 associated with an object acl.
2405 * SoObjects/SOGo/SOGoAclsFolder.m: removed module because its
2406 methods have been moved into SOGoObject and SOGoFolder during a
2409 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2410 -iCalParticipantsAndResourcesStringFromQueryParameters]): removed
2411 method made useless by the programmatic handling of iCalendar
2413 ([UIxComponentEditor -iCalParticipantsStringFromQueryParameters]): idem.
2414 ([UIxComponentEditor -iCalResourcesStringFromQueryParameters]): idem.
2415 ([UIxComponentEditor -iCalStringFromQueryParameter:_qpformat:_format]): idem.
2417 * UI/WebServerResources/MailerUI.js (initDnd): enable drag and
2418 drop on all folder nodes, not just on leaves.
2420 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2421 ([SOGoContactLDAPFolder
2422 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): request field "uid" when doing a search.
2424 2007-04-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2426 * Main/SOGo.m ([SOGo +initialize]): on GNUstep, trigger some
2427 debugging facilities when the SOGoDebugObjectAllocation user
2430 2007-04-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2432 * SoObjects/SOGo/NSString+Utilities.m ([NSString -boolValue]): new
2433 method that SOGo will need with non-gnustep Foundation
2435 ([NSString -stringByAppendingPathComponent:component]): new method
2436 that SOGo will need when building with libFoundation. Method
2437 removed later since it is available from
2438 Foundation/NSPathUtilities.h.
2440 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -timeZone]): method moved
2443 * SoObjects/SOGo/SOGoObject.m: new ivar "context" that permits
2444 every subclass to access [WOApplication context] without having to
2445 invoke it more than once.
2447 * SoObjects/Appointments/SOGoCalendarComponent.m
2448 ([SOGoCalendarComponent -changeParticipationStatus:_status]):
2449 moved method from SOGoTaskObject and SOGoAppointmentObject up to
2452 * UI/Scheduler/UIxCalSelectTab.m: removed module.
2454 2007-04-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2456 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
2457 -vCard]): test the prefix of the card in a case-independent way.
2459 * OGoContentStore/OCSContactFieldExtractor.m
2460 ([OCSContactFieldExtractor
2461 -extractQuickFieldsFromContent:content]): we no longer accept
2462 records in a format other than versit vCard so we can get rid of a
2465 2007-04-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2467 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2468 -selectorComponentClass]): restored method.
2470 2007-04-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2472 * UI/Scheduler/UIxCalTasksListView.m ([UIxCalTasksListView
2473 -shouldDisplayCurrentTask]): the current task is not displayed if
2474 it is NOT completed or if the "showCompletedTasks" flag is set.
2475 The logic was inverted in Lightning and is now in SOGo too.
2477 2007-04-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2479 * UI/Contacts/UIxContactView.m ([UIxContactView -workUrl]): we
2480 want the "work" url instead of the "home".
2482 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
2483 -_saveSnapshot]): save url values from snapshot.
2484 ([UIxContactEditor -initSnapshot]): load url values from snapshot.
2486 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2487 -calendarList]): new method replacing "availableCalendars".
2489 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
2490 -calendarFolders]): we now take the list of subscribed calendar
2493 * SoObjects/Appointments/SOGoAppointmentFolder.m
2494 ([SOGoAppointmentFolder -calendarFoldersInContext:context]): new
2495 method derived from and replacing [UIxCalView calendarFolders].
2497 2007-03-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2499 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2500 -toManyRelationshipKeys]): don't put the predefined folders in the
2501 list if they are returned by the server.
2503 * UI/MailerUI/UIxMailTree.m ([UIxMailTree -flattenedNodes]): we no
2504 longer store the "flattenedBlocks" in a dictionary since the
2505 object will be deleted anyway and we don't need to put the folders
2508 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
2509 ([UIxMailPartHTMLViewer -_attachmentIds]): take the current
2510 attachment path into account when computing the part urls.
2512 2007-03-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2514 * UI/Contacts/UIxContactsListViewContainer.m
2515 ([UIxContactsListViewContainer -additionalFolders]): take the list
2516 of subscribed folders from the new property list used for the user
2517 settings. The value of its key is SubscribedFolders for the
2518 dictionary entry named "Contacts".
2520 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2521 -canAccessContentAction]): new method to override the one from
2522 UIxFoldersActions by taking into account the fact that, this time,
2523 the clientObject is an ldap folder. Removed many method that used
2524 to be related to the handling of the user selector.
2526 * UI/Scheduler/UIxCalDayView.m: commented out many unused methods
2527 to make sure they can be removed.
2529 * UI/Scheduler/UIxCalView.m ([UIxCalView -_setupCalendarFolders]):
2530 populate the calendar entries based on the user settings plist.
2532 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2533 -selectForMailerAction]): restored method.
2535 * UI/Scheduler/UIxCalendarSelector.m: new template module derived
2536 from a simplified version of the old UIxContactEditor (removed).
2538 * UI/Contacts/UIxContactsUserFolders.m: new template module for
2539 selecting users or user folders through an LDAP search of which
2540 the results are displayed as a tree.
2542 * UI/WebServerResources/UIxMailEditor.js: moved previous generic
2543 method "onContactAdd" here since the Mailer is now the only module
2544 to use it when composing emails.
2546 * UI/WebServerResources/generic.js: added code for handling the
2547 new scheme used for describing SOGo folders, common code to handle
2548 folder addition or removal.
2550 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2551 -activateFolderAction]): new method that change the "active"
2552 settings in the folder-related fields in the user settings.
2553 ([UIxFolderActions -deactivateFolderAction]): see above.
2555 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2556 -checkRightsAction]): removed method.
2558 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2559 -updateAdditionalAddressBooksAction]): removed method.
2561 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
2562 -updateCalendarsAction]): removed method.
2564 2007-03-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2566 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
2567 -checkRightsAction]): removed method.
2569 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2570 -canAccessContentAction]): new method designed to replace
2571 [UIxCalMainView checkRightsAction] in a more universal way.
2573 2007-03-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2575 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2576 -roleOfUser:uidinContext:context]): take all the subkeys into
2577 account, not only the "personal" folder.
2579 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2580 -takeValuesFromRequest:_rqinContext:_ctx]): append a "uid" field
2581 to the new components.
2583 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -userSettings]): new method
2586 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
2587 -getUserDefaultsForUID:uid]): rewrote method to use the "defaults"
2588 field of the sogo_user_profile table, where the user-customizable
2589 changes will be saved.
2590 ([AgenorUserManager -getUserSettingsForUID:uid]): new method
2591 similar to the one above, using the "settings" field where the
2592 automatic settings will be saved.
2594 * SoObjects/SOGo/AgenorUserDefaults.m: rewrote a big part of the
2595 module to bind the userdefaults to a property list contained in a
2596 specified field of the sogo_user_profile table.
2597 ([AgenorUserDefaults
2598 -initWithTableURL:tableURLuid:userIDfieldName:defaultsFieldName]):
2599 added a "fieldName" parameter.
2601 * UI/Common/UIxFolderActions.m: new module implementing web
2602 actions common to all GCS-based folders.
2604 2007-03-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2606 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -labelForDay]):
2607 put a carriage return after the day name.
2609 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
2610 -readFreeBusyAction]): restored method.
2612 2007-03-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2614 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
2615 -defaultAction]): remade module to redirect automatically to the
2618 * SoObjects/Contacts/NSDictionary+Contact.m: removed module.
2620 2007-03-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2622 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2623 -deleteAction]): new web method to delete personal addressbook
2626 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
2627 -delete]): override method to refuse the deletion of the folder if
2628 its nameInContainer is "personal".
2630 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -delete]): new method
2631 that forwards the deletion request to the folder manager.
2633 2007-03-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2635 * UI/Scheduler/UIxAttendeesEditor.m ([UIxAttendeesEditor
2636 -zoomList]): new method that returns the list of available zoom factors.
2638 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
2639 -changeStatusAction]): rewrote method.
2641 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2642 -_handleAttendeesEdition]): make sure "attendeesNames" has a
2643 length > 0 before computing the attendees. Otherwise there will be
2644 an invalid empty entry.
2645 ([UIxComponentEditor -_handleOrganizer]): new method that adds the
2646 organizer when there are attendees and remove it when the
2647 attendees are removed.
2649 2007-03-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2651 * UI/Scheduler/UIxAttendeesEditor.m): new component.
2653 * UI/Scheduler/UIxComponentEditor.m: no longer a superclass for
2654 the task and appointment editors. Now a container component
2655 handling the common elements of tasks and events.
2657 * UI/Scheduler/UIxTaskEditor.m: same as below.
2659 * UI/Scheduler/UIxAppointmentEditor.m: rewrote template. No longer
2660 a subclass of UIxComponentEditor but a subcomponent of it.
2662 * UI/Common/UIxToolbar.m ([UIxToolbar -toolbarConfig]): the
2663 toolbar can have the special value "none" to indicate there is
2664 none attached to the window.
2666 * SoObjects/Appointments/SOGoCalendarComponent.m
2667 ([SOGoCalendarComponent -isOrganizer:emailorOwner:login]): new
2669 ([SOGoCalendarComponent -isParticipant:email]): new method.
2670 ([SOGoCalendarComponent -calendar:create]): takes one parameter
2671 "create" which is a boolean indicating whether we want to create
2672 the calendar if it does not exist.
2674 2007-03-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2676 * UI/Scheduler/UIxCalMonthView.m: changed view to use divs instead
2677 of a table, the same way the dayly and weekly views have been for
2680 2007-02-09 Helge Hess <helge.hess@opengroupware.org>
2682 * SoObjects/Appointments/SOGoAppointmentFolder.m: added CalDAV
2685 * SoObjects/SOGo/SOGoUserFolder.m: added davCalendarHomeSet CalDAV
2686 property to point at the user folder
2688 2007-03-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2690 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2691 -userInContext:]): returns "SOGoUser".
2693 * SoObjects/Appointments/SOGoCalendarComponent.m
2694 ([SOGoCalendarComponent -contentAsString]): overriden method that
2695 takes the privacy into account and discard the relevant fields if
2696 needed by generating a new content string and caching it.
2697 ([SOGoCalendarComponent
2698 -saveContentString:contentStringbaseVersion:baseVersion]): if the
2699 new method above has cached a content string, release it and set
2700 it to nil so that it will have to be regenerated in the case it is
2702 ([SOGoCalendarComponent -_filterPrivateComponent:component]):
2703 discard the fields that have to be hidden when the card is
2706 * SoObjects/Appointments/SOGoAppointmentFolder.m
2707 ([SOGoAppointmentFolder
2708 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]): make
2709 sure the cards are now handled as instances of
2710 SOGoCalendarComponent instead of SOGoContentObject so that their
2711 content string is taking the privacy classifiction into account.
2712 ([SOGoAppointmentFolder -_privacySqlString]): new method that
2713 generates a query to determine what information can be given and
2714 if the card itself has to be shown.
2716 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
2717 -getICalPersonsFromValue:selectorValue]): removed useless
2718 "isAccessRestricted" method.
2720 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
2721 -setStyle:_style]): test whether the values of orgmail and
2722 partmails are null before manipulating them, otherwise SOGo sends
2723 a "rangeOfString:" message to an NSNull, which makes it crashes.
2725 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2726 -extractQuickFieldsFromEvent:_event]): we now use the new
2727 "symbolicAccessClass" method from iCalEntity to determine the
2728 value of the "classifiction" field.
2729 ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]): same
2732 2007-03-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2734 * SoObjects/Appointments/SOGoAppointmentFolder.m
2735 ([SOGoAppointmentFolder
2736 -fetchCoreInfosFrom:_startDateto:_endDatecomponent:_component]):
2737 see below, the query is adapted consequently.
2739 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2740 -extractQuickFieldsFromTodo:_task]): the field "ispublic" was
2741 renamed to "classification" and can any integer as value.
2742 ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event]):
2745 2007-02-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2747 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
2748 ([_UIxHTMLMailContentHandler -_appendStyle:_charslength:_len]):
2749 don't prepend anything to the class and id named. Instead, we
2750 make each style embedded in the ".SOGoHTMLMail-CSS-Delimiter"
2753 2007-02-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2755 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2756 -rolesOfUser:logininContext:context]): if object does not exists
2757 (for example when it's being created), the current user has the
2758 same rights on it than he/she has on its parent container.
2760 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2761 -nameExistsInFolder:objectName]): methods that tests if a c_name
2762 corresponding to the name passed as parameter is present in the db
2765 2007-02-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2767 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
2768 -rolesForObject:objectinContext:context]): test for
2769 "rolesOfUser:inContext:" in addition to "roleOfUser:...".
2771 * SoObjects/Appointments/SOGoCalendarComponent.m
2772 ([SOGoCalendarComponent -rolesOfUser:logininContext:context]):
2773 returns the roles of the user on the container object if the event
2776 2007-02-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2778 * UI/MailPartViewers/UIxMailRenderingContext.m: returns the
2779 alternativeViewer a multipart/related message is being handled.
2781 * UI/MailPartViewers/UIxMailPartHTMLViewer.m: reimplemented module
2784 * UI/MailPartViewers/UIxMailPartAlternativeViewer.m: select the
2785 text/html component before text/plain.
2787 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2788 -addRequiredKeysOfStructure:path:toArray:recurse:]): accepts the
2789 fetching of HTML parts.
2791 * SoObjects/Appointments/SOGoCalendarComponent.m
2792 ([SOGoCalendarComponent -componentTag]): new template method that
2793 returns the vcalendar tag of the current object.
2794 ([SOGoCalendarComponent -component]): new method that returns the
2795 first object matching [self componentTag] within the current
2796 calendar object. This method replaces 'firstEventInCalendar:' as
2797 well as "firstTaskInCalendar:".
2798 ([SOGoCalendarComponent -roleOfUser:logininContext:context]):
2799 moved method from SOGoAppointmentObject.m.
2801 2007-02-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2803 * UI/Scheduler/UIxCalMulticolumnDayView.[hm]: new daily view
2804 module which shows each selected user's calendar in a different
2805 column instead of mixing their events together.
2807 * UI/Scheduler/UIxCalView.m ([UIxCalView -redirectForUIDsAction]):
2808 replaced use of [NSString stringByTrimmingWhiteSpaces] with
2809 [NSString stringByTrimmingSpaces].
2811 * UI/MailPartViewers/UIxMailPartICalViewer.m: request the key
2812 "cnWithoutQuotes" instead of "cnForDisplay", which no longer
2815 * UI/Scheduler/UIxCalDayOverview.m,
2816 UI/Scheduler/UIxCalDayChartview.m,
2817 UI/Scheduler/UIxCalDayListview.m,
2818 UI/Scheduler/UIxCalWeekOverview.m,
2819 UI/Scheduler/UIxCalWeekChartview.m,
2820 UI/Scheduler/UIxCalWeekListview.m,
2821 UI/Scheduler/UIxCalInlineMonthOverview.m,
2822 UI/Scheduler/UIxCalYearOverview.m: removed unused modules.
2824 2007-02-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2826 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2827 -appendPersonalSourcesInContext:context]): release connectoin
2828 channel when everything is done.
2830 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2831 -newAbAction]): new action method to crate a new contact folder
2834 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -create]): new method
2835 that requests the folder manager to create a folder table with the
2836 specified type at the specified path. The type is taken from [self
2839 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
2840 -folderType]): implemented.
2842 * SoObjects/Appointments/SOGoAppointmentFolder.m
2843 ([SOGoAppointmentFolder -folderType]): implemented.
2845 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2846 -appendPersonalSourcesInContext:context]): we now fetch all
2847 folders with type "Contact" that belong to the current user.
2848 ([SOGoContactFolders -newFolderWithName:name]): new method to
2849 create a new contact folder.
2851 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]): treat
2852 resulting url with [NSString+Utilities hostlessURL] instead of
2853 using NSURL. This is because the url in question sometimes has a
2854 hostname and sometimes not. "hostlessURL" ensure the hostname is
2856 ([UIxComponent -applicationPath]): same as above.
2858 2007-02-08 Ludovic Marcotte <ludovic@inverse.ca>
2860 * SoObjects/Mailer/SOGoMailFolder.m: priorize the lookup of
2861 folders before doing the one on messages.
2863 2007-02-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2865 * SoObjects/SOGo/NSArray+Utilities.m: added an implementation of
2866 makeObjectsPerform:withObject:withObject: for GNUstep
2869 * OGoContentStore/GNUmakefile, Protocols/common.make,
2870 SoObjects/common.make, UI/common.make: install in
2871 GNUSTEP_INSTALLATION_DIR instead of GNUSTEP_USER_DIR.
2873 2007-02-07 Ludovic Marcotte <ludovic@inverse.ca>
2875 * UI/Scheduler/English.lproj/Localizable.strings: fixed typo for
2878 2007-02-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2880 * UI/MailerUI/UIxMailTree.m ([UIxMailTree
2881 -getTitle:folderType:andIcon:forObject:]): disabled Sieve folders
2884 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2885 -checkLogin:_loginpassword:_pwd]): fixed a bug where a wrong
2886 password would be accepted anyway as long as its length was > 0.
2887 This can be the case ONLY when LDAP is disabled otherwise we have
2888 a serious security issue...
2890 * SoObjects/Appointments/SOGoAppointmentObject.m
2891 ([SOGoAppointmentObject -roleOfUser:logininContext:context]): if a
2892 user is not an organizer nor a participant, he is declared as
2893 "Owner" if he owns the calendar the entry where the entry is
2894 contained. Other cases should not be possible.
2896 2007-02-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2898 * UI/Contacts/UIxContactEditor.m: display and handle the new
2901 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2902 ([SOGoContactLDAPFolder -_searchAttributes]): retrieve "calFBURL"
2905 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
2906 -vCard]): put the LDAP "calFBURL" field in the vCard's "FBURL"
2909 2007-01-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2911 * SoObjects/Appointments/SOGoCalendarComponent.m
2912 ([SOGoCalendarComponent -sendEMailNotifications]): new method that
2913 returns the value of ud "SOGoAppointmentSendEMailNotifications"
2915 ([SOGoCalendarComponent
2916 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]): method moved from SOGoAppointmentObject/SOGoTaskObject, replacing occurences of "appointment" to "object" in its name.
2918 2007-01-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2920 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
2921 -defaultAction]): invoke "flushMailCaches" on [self clientObject]
2922 so that the mailbox cache is refreshed everytime the user presses
2923 on "get mail". I doubt a mailbox cache really is useful in general
2926 2007-01-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2928 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2929 -userInContext:]): if the lookup is on "freebusy.ifb" and the
2930 username is "anonymous" the user is automatically set to
2933 2007-01-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2935 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2936 -checkLogin:_loginpassword:_pwd]): authorize special "freebusy"
2937 user with password "freebusy".
2939 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
2940 -contentAsString]): the default timerange is now 14 days before
2941 currentday and 1 month after.
2943 2007-01-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2945 * SoObjects/Appointments/SOGoAppointmentFolder.m
2946 ([SOGoAppointmentFolder
2947 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
2948 escape the record string in a way suitable with XML encoding.
2950 2007-01-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2952 * UI/WebServerResources/SchedulerUI.js: fixed a bug where the
2953 calendar view would not be updated properly.
2955 2007-01-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2957 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2958 -newStartDate]): fix the handling of the component start date
2959 depending on the "hm" and the "day" parameters.
2961 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
2962 -roleOfUser:uidinContext:context]): set role of current user to
2963 "Assistant" if the object that is accessed is "freebusy.ifb".
2965 * SoObjects/Appointments/SOGoAppointmentFolder.m
2966 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): method
2967 moved from UI/Scheduler/UIxCalView:calendarFolderForUID:.
2968 ([SOGoAppointmentFolder
2969 -lookupCalendarFoldersForUIDs:_uidsinContext:]): now use the new
2970 lookupCalendarFolderForUID: method, which doesn't do security
2973 2007-01-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2975 * UI/Common/UIxAclEditor.m ([UIxAclEditor -assistantsValue]): new
2976 accessor that returns the comma-separated list of users with role
2978 ([UIxAclEditor -delegatesValue]): same as above for "Delegate".
2979 ([UIxAclEditor -_prepareUsers]): there is no longer a concept of
2980 "checkedUsers". Instead, each user is either classified in the
2981 list of assistants or the list of delegates.
2983 2006-12-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2985 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
2986 -composeAction]): method imported from removed container modules.
2987 ([UIxMailMainFrame -mailFolderName]): method imported from removed
2990 * UI/MailerUI/UIxMailPopupView.m: a new special popup component
2991 for wrapping UIxMailView with the "popupview" action.
2993 * UI/MailerUI/UIxMailAccountView.m: renamed to UIxMailSplashView,
2994 since its the component that displays the same splash screen than
2995 the one in Thunderbird/Icedove.
2997 * UI/MailerUI/UIxMailAccountViewContainer.[hm],
2998 UI/MailerUI/UI/MailerUI/UIxMailAccountsView.m,
2999 UI/MailerUI/UIxMailListViewContainer.[hm],
3000 UI/MailerUI/UIxMailViewContainer.[hm]: removed
3002 2006-12-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3004 * UI/WebServerResources/HTMLElement.js: replaced the functional
3005 selectNode() and deselectNode() functions with select() and
3006 deselect() methods of HTMLElement.
3008 * UI/WebServerResources/ContactsUI.js: cleanup, most of the
3009 events are initialized from here now instead of in the HTML code.
3011 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3012 -checkRightsAction]): new method similar to the one with the same
3013 name in UIxCalMainView.m.
3015 * UI/Common/UIxAclEditor.m ([UIxAclEditor -saveAclsAction]): added
3016 code to handle the publishing of freebusy information.
3018 2006-12-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3020 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3021 -checkRightsAction]): new action method that returns a
3022 comma-separated list of boolean values matching the right of the
3023 current user to "view" (as a permission) each foreign calendar
3024 stored in his preferences.
3026 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -setOwner:newOwner]):
3027 new method that sets a customOwner, which can be returned with
3028 ownerInContext it set.
3030 * SoObjects/Appointments/SOGoAppointmentFolder.m
3031 ([SOGoAppointmentFolder
3032 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): no longer set the owner of elements here.
3034 2006-12-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3036 * SoObjects/SOGo/SOGoUserFolder.m: same as for SOGoContactFolders
3037 below, but for the Contacts and Calendar collections.
3039 * SoObjects/SOGo/SOGoAclsFolder.m: convert the class to user the
3040 new acl facilities method from sope-gdl/GCSFolder.m.
3042 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3043 -roleOfUser:uidinContext:context]): new method that returns
3044 SOGoRole_Assistant when the user is an assistant or a delegate on
3045 the "personal" ab object. This is so that setting roles on the
3046 SOGoContactFolders object is not required.
3048 2006-12-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3050 * Main/SOGo.m: declare "Freebusy" permissions for the top objects.
3052 * UI/Contacts/UIxContactsAclsSelection.m: new component specific
3053 to the handling of the user selection for the acls.
3055 * SoObjects/SOGo/SOGoPermissions.[hm]: new module that extends the
3056 values from SoPermissions with ones specific to SOGo.
3058 * SoObjects/SOGo/SOGoAclsFolder.[hm]: new class module that
3059 handles the storage for the acls.
3061 * SoObjects/Appointments/SOGoCalendarComponent.[hm]: new parent
3062 class for SOGoAppointmentObject and SOGoTaskObject.
3064 * UI/Common/UIxAclEditor.[hm]: new component that provides a
3065 general editor for folder acls.
3067 * SoObjects/SOGo/NSString+Utilities.[hm]: old "NSString+URL"
3069 ([NSString -davMethodToObjC]): method that returns the method name
3070 for a DAV property implementation.
3072 * SoObjects/SOGo/NSArray+Utilities.m: new extension module to
3074 ([NSArray -stringsWithFormat:format]): new method that returns
3075 formatted occurences of the strings stored in the array.
3077 * SoObjects/SOGo/SOGoDAVRendererTypes.m ([SOGoDAVSet
3078 +davSetWithArray:newValuesofValuesTaggedAs:newValueTag]): a new
3079 subclass module of SoWebDAVValue that supports collections of
3080 properties of the same type.
3082 2006-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3084 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
3085 -lookupFolder:ofClassNamed:inContext:]): added the ability to
3086 configure the name of the SOGoDraftFolders with the ud var
3087 "SOGoDraftsFolderName".
3089 2006-11-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3091 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
3092 -userTimeZone:username]): new method that returns the timezone for
3093 the specified user depending on his preferences and the server
3096 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3097 -stringForData:partInfo:]): take the encoding into account and
3098 translate the text to "normal" before processing the charset data.
3100 2006-11-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3102 * UI/WebServerResources/generic.js: the progress indicator is on
3103 when loading the page so we turn it off, and we turn it back on
3104 whenever we switch to another module...
3106 * UI/WebServerResources/SchedulerUI.js: make sure the day view
3107 synchronization mechanism works everywhere.
3109 * UI/WebServerResources/generic.js: the log window is not only
3110 visible when UIxDebugEnabled is set.
3112 * UI/WebServerResources/SchedulerUI.js: the month overview's day
3113 cells are now initialized with the DOM event interface methods
3114 instead of with html attributes.
3116 * UI/Templates/MailerUI/UIxMailView.wox: don't display useless
3117 headers (should be made configurable at some point)...
3119 * OGoContentStore/sql/generate-folderinfo-sql-for-users.sh: drop
3120 "not null" constraint on startdate, enddate, isopaque,
3121 participants and partmails.
3123 2006-11-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3125 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
3126 -hoursToDisplay]): prevent a crash by retaining the
3127 "hoursToDisplay" array after it's created.
3128 ([UIxCalDayTable -clickableHourCellClass]): new method for the new
3129 clickable hours DIV.
3131 * UI/WebServerResources/SchedulerUI.js: made the event
3132 participation status modification asynchronous, which also fixes a
3133 bug where the window would sometimes close before the accept or
3134 decline action was completed. Also, adapted the event handling
3135 related to the days or weeks view with the new DIV-based layout.
3137 * UI/Scheduler/UIxCalInlineAptView.m: same as the first below...
3139 * UI/Scheduler/UIxCalDayTable.m: enhanced to provide the new
3140 DIV-based presentation of the days and weeks.
3142 * SoObjects/Appointments/SOGoTaskObject.m: same as below...
3144 * SoObjects/Appointments/SOGoAppointmentObject.m: lookupName:...
3145 might return an exception so we have to handle it if we don't
3148 2006-11-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3150 * UI/WebServerResources/SchedulerUI.js: updated the list
3151 initialization code to use the new event management scheme, adding
3152 what was missing to be able to delete events and tasks again.
3154 * UI/WebServerResources/MailerUI.js: added code to activate the
3155 "Get mails" button. Fixed a bug which prevented messages to be
3158 * UI/WebServerResources/UIxFreeBusyUserSelector.js: handle tab
3159 navigation and focus handling of INPUTs.
3161 2006-11-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3163 * UI/WebServerResources/MailerUI.js: added code to handle the
3164 possible drag and drop events to manager in the mail module.
3165 Moving messages, opening parent folders, ...
3167 * UI/WebServerResources/SOGoDragAndDrop.js: new file containing
3168 the drag and drop manager as well as the interface to HTMLElement
3169 to trigger drag and drop events.
3171 * UI/MailerUI/UIxMailView.m ([UIxMailView -moveAction]): new
3172 action to move the current message to the mailbox named after the
3173 value of parameter "tofolder".
3175 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3176 -moveToFolderNamed:folderNameinContext:]): new method base on
3179 2006-11-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3181 * UI/WebServerResources/generic.js: added and activated many
3182 "load" handlers to configure generic widgets used across the
3183 modules. More events are now handled in a DOM-fashion way instead
3184 of by setting the relative attributes in the templates.
3186 * UI/Templates/UIxSortableTableHeader.wox: all the events are
3187 declared from the javascript DOM onload handlers.
3189 * UI/Templates/UIxPageFrame.wox: load the new SOGoDragHandles.js
3192 * UI/Templates/MailerUI/UIxMailListView.wox: all the events are
3193 declared from the javascript DOM onload handlers.
3195 * UI/MailerUI/UIxMailListView.m: removed all the JS methods since
3196 we want everything to be separated from each other, as much as
3199 * UI/WebServerResources/SOGoDragHandles.js: new module containing
3200 the "SOGoDragHandlesInterface", implementing methods that can be
3201 attributed to DIV so that they can be used as drag handles.
3203 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
3204 -asQPSubjectString]): initialize the tmp strings with '0' to make
3205 sure they don't contain garbage.
3207 2006-11-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3209 * UI/WebServerResources/MailerUI.js: register the messageList
3210 table as a dragging source and the leaf of the navigation tree as
3211 dnd destinations to the DNDManager.
3213 * UI/WebServerResources/generic.js: initialize tabs from the
3214 "unload" event listener that is added programmatically instead of
3215 from the template... Also, added the new DNDManager object.
3217 * UI/WebServerResources/HTMLTableElement.js: added code to
3218 simulate XUL drag n drop events. This code will possibly be moved
3219 to HTMLElement.js instead later...
3221 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3222 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): same as
3225 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3226 -_qualifierForFilter:filter]): only search records which starts
3227 with the specified pattern.
3229 2006-11-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3231 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
3232 -asQPSubjectString]): new method that returns the special QP
3233 string with its qp declaration for email subjects.
3234 ([SOGoDraftObject -bodyPartForText])
3235 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): don't
3236 double-encode data in UTF-8.
3238 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3239 -newStartDate]): new method to determine the start date depending
3240 on the URL parameters, the current day and the current time.
3241 ([UIxComponentEditor -toolbar]): new method to determine the
3242 filename of the toolbar that should be drawn depending on the
3243 ownership and the list of attendees of the task/event wrt to the
3246 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
3247 -setDayStartHour:aStartHour]): adjust the minutes to the next
3248 quarter of hour, if not already set to a quarter.
3250 * UI/WebServerResources/UIxAppointmentEditor.js,
3251 UI/WebServerResources/UIxTaskEditor.js: added code to manage start
3254 2006-11-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3256 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3257 -loadValuesFromComponent:component]): handles access class
3258 (privacy) and status.
3260 * UI/Contacts/UIxContactsListViewContainer.m
3261 ([UIxContactsListViewContainer -additionalFolders]): return nil if
3262 [self additionalAddressBooks] returns an empty string.
3264 2006-11-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3266 * UI/Scheduler/UIxCalMonthView.m ([UIxCalMonthView
3267 rangesOf7Days]): enhanced and debugged algorithm to feed the array
3268 with slices where the first day is still in the requested month.
3270 * UI/Templates/UIxPageFrame.wox: the logConsole is created only on
3273 * UI/SOGoUI/SOGoAptFormatter.m: added code to handle the display
3274 of events in the day boxes of the calendar's monthly view.
3276 * SoObjects/Appointments/SOGoTaskObject.m ([SOGoTaskObject
3277 -davContentType]): declare "text/calendar".
3279 * SoObjects/Appointments/SOGoAppointmentObject.m
3280 ([SOGoAppointmentObject -davContentType]): declare
3283 * SoObjects/Appointments/SOGoAppointmentFolder.m
3284 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): certain
3285 HTTP methods are handled by SOPE and requires nil to be returned,
3286 this method now invokes the new
3287 "requestNamedIsHandledLater:inContext:" method to check that.
3288 ([SOGoAppointmentFolder
3289 -requestNamedIsHandledLater:nameinContext:context]): new methods
3290 that returns "YES" only for the "OPTIONS" http method (for now...).
3291 ([SOGoAppointmentFolder -davComplianceClassesInContext:]):
3292 overloaded method to append the "access-control" and
3293 "calendar-access" DAV abilities to the initial declaration.
3295 * UI/Scheduler/UIxCalMonthView.[hm]: rewritten module entirely to
3296 imitate the look of Sunbird/Lightning's monthly view.
3298 * UI/Scheduler/UIxCalMonthView.[hm]: renamed to
3299 UIxCalMonthViewOld.[hm].
3301 2006-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3303 * UI/Scheduler/UIxFreeBusyUserSelectorTable.m
3304 ([UIxFreeBusyUserSelectorTable -currentContactHasStatus]): new
3306 ([UIxFreeBusyUserSelectorTable -currentContactStatusImage]):
3307 returns an image name based on the participation status of the
3310 * UI/WebServerResources/SchedulerUI.js: same strip down as for
3313 * UI/Contacts/UIxContactsListViewContainer.m ([UIxContactsListViewContainer -additionalAddressBooks])
3314 ([UIxContactsListViewContainer -additionalFolders])
3315 ([UIxContactsListViewContainer -setCurrentAdditionalFolder:newCurrentAdditionalFolder])
3316 ([UIxContactsListViewContainer -currentAdditionalFolder]): new
3317 methods to handle the external addressbooks a user has subscribed
3318 too, by retriving them from his preferences.
3320 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3321 -updateAdditionalAddressBooksAction]): new method that updates the
3322 user settings with the list of addressbook he has subscribed to.
3324 * UI/Contacts/UIxContactsAddressBooksSelection.m: new component
3325 module for the address book selector.
3327 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
3328 a toolbar with two buttons ("add" and "remove") to manage the
3329 additional addressbooks a user might subscribe to.
3331 * UI/WebServerResources/ContactsUI.js: added code to handle
3332 "external addressbooks" from the Javascript point-of-view, by
3333 extending existing methods and adding code for the "add ab" and
3334 "remove ab" buttons.
3336 * UI/WebServerResources/generic.js: moved extensions methods to
3337 DOM elements to separate files for better clarity.
3339 * UI/Common/UIxPageFrame.m ([UIxPageFrame -pageContentClasses]):
3340 new method that returns "pageContent" as class, but also "popup"
3341 for the DIV where the page content lies, so that we can manipulate
3342 the content of popup's with CSS identifiers.
3344 2006-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3346 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
3347 -displayStyle]): new method that returns a string containing the
3348 css style relative to the current appointment cell. This code is
3349 currently inactive but might be reused later.
3351 * UI/WebServerResources/SchedulerUI.js: added code to handle the
3352 display of the selected day (the day pointed by the mouse, or the
3353 current day when changing the view).
3355 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
3356 -dayCellClasses]): new method that returns a string containing the
3357 css classes applicable to the current cell, depending on the
3358 position of the day in the week, the day of today and the
3361 * UI/Scheduler/UIxCalCalendarsListView.m ([UIxCalCalendarsListView
3362 -currentContactAptBorder]): new method that returns the
3363 appropriate border color for the specified user.
3365 * SoObjects/Appointments/SOGoAppointmentObject.m
3366 ([SOGoAppointmentObject
3367 -saveContentString:contentStringbaseVersion:baseVersion]):
3368 overloaded method that parse new events and detects if they have
3369 an organizer or not. If they are new and have no organizer set
3370 (Sunbird/Lightning...), the owner of the event is set as
3373 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: new
3374 category that provides facility methods and interfaces to the
3377 * SoObjects/Contacts/product.plist: give full access to ANY
3378 authenticated user, not just the owner (to every objects...).
3380 2006-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3382 * UI/WebServerResources/UIxFreeBusyUserSelector.js: make sure
3383 every replica widgets are declared as such to their master
3384 counterpart. Take the days into account when displaying the time
3385 range taken by the appointment.
3387 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
3388 -getICalPersonsFromValue:selectorValue]): method taken from
3389 UIxFreeBusyUserSelector, that is shared both by
3390 UIxFreeBusyUserSelector and UIxFreeBusyUserSelectorTable.
3392 * SoObjects/Appointments/SOGoAppointmentFolder.m
3393 ([SOGoAppointmentFolder
3394 -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.
3396 * UI/Scheduler/UIxFreeBusyUserSelectorTable.[hm]: new subcomponent
3397 derived and taken as a subset of UIxFreeBusyUserSelector that
3398 implements the table part of the FreeBusy view. Most of the
3399 methods of UIxFreeBusyUserSelector relative to that table were
3400 moved into UIxFreeBusyUserSelectorTable, which can also be used as
3401 a standalone view for AJAX operations.
3403 2006-10-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3405 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3406 -vCard]): change reverted.
3408 * UI/Contacts/UIxContactEditor.m: check whether the client contact
3409 folder has selector "globallyUniqueObjectId" before calling that
3412 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3413 -vCard]): the "setVClass" NGVCard method really is "setClass"
3416 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3417 ([SOGoContactLDAPFolder -_searchAttributes]): fixed typo to
3418 request the "streetAddress" instead of the "streetaddress".
3419 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): lookup
3420 mails that *contain*, and not just *start with* the search
3423 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3424 -vCard]): mark address returned from LDAP as the work address.
3426 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: made the whole
3427 span covered with the anchor, not only the textual information
3430 * UI/Templates/SchedulerUI/UIxCalMainView.wox: specify the type
3431 argument (event or task) to newEvent in the appointmentListMenu.
3432 Make the appointmentsListView display the appointmentsListMenu.
3434 * UI/SOGoUI/SOGoAptFormatter.m: enlarge the text size limit from
3435 12 to 50 before displaying "...".
3436 ([SOGoAptFormatter -fullDetailsForApt::]): display location only
3437 if its length > 0, whether location itself is nil or not...
3438 ([SOGoAptFormatter -tooltipForApt::_refDate]): display information
3439 of which the length > 0.
3441 2006-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3443 * UI/WebServerResources/UIxAppointmentEditor.js: correctly handles
3444 french and ISO dates.
3446 * UI/Scheduler/UIxFreeBusyUserSelector.[hm]: added code an ivars
3447 from UIxContactSelector to handle contact lists (current and
3448 additional contacts).
3450 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3451 -_freeBusyAsText]): added handling of an "additional"-named query
3452 parameter that describe the number of additional days after
3453 enddate that should be returned.
3455 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3456 -_responseForResults:results]): give priority to results with
3457 "c_uid" fields. If none returned, use the first contact received.
3459 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3460 -extractQuickFieldsFromEvent:_event]): changed "TENTATIVE" code to
3461 2 and "CANCELLED" to 0.
3463 2006-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3465 * UI/WebServerResources/UIxAppointmentEditor.js: handle conversion
3466 of start and end dates to short string dates.
3468 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3469 -readFreeBusyAction]): new method that returns an array of numbers
3470 corresponding to the state in the freebusy of each "quarter of an
3471 hour" between the "sday" and "eday" date parameters passed in the
3472 url. This permits to handle the display of the freebusy with Ajax
3474 ([SOGoUserHomePage -_freeBusyAsText]): add 2 days to the end date
3475 since the free busy displays 2 days ahead.
3477 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3478 -contactSearchAction]): new action that returns the uid and the
3479 username + email of the user whose name contain the value of the
3480 "search" url parameter.
3482 * SoObjects/Appointments/SOGoAppointmentFolder.m
3483 ([SOGoAppointmentFolder
3484 -fetchFreebusyInfosFrom:_startDateto:_endDate]): added fields
3485 useful for the computing of the status of the freebusy.
3487 * UI/Scheduler/UIxFreeBusyUserSelector.m ([UIxFreeBusyUserSelector
3488 -init]): new component that incarnates a user selector for events
3489 inspired by the new one found in Thunderbird Lightning.
3491 2006-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3493 * UI/WebServerResources/generic.js: added code to enable or
3494 disable anchor visually (following our internal algorithm).
3496 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -init]):
3497 added new "url" ivar with its classic accessors.
3498 ([UIxComponentEditor -urlButtonClasses]): new method that returns
3499 the class strings for the url button on the appointment/task
3500 editor (depending on the validity of the url).
3502 * UI/Templates/SchedulerUI/UIxTaskEditor.wox,
3503 UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: start rewriting
3504 the template to match the Lightning's new task/appointment editor.
3506 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor -saveValuesIntoAppointment:_appointment]): initialize url from the components'url.
3508 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveValuesIntoTask:_task]): initialize url from the components'url.
3510 2006-10-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3512 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3513 ([SOGoContactLDAPFolder
3514 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): perform the searchs on objects which start with instead of contain the lookup key.
3516 * SoObjects/Appointments/SOGoAptMailNotification.[hm]: work on
3517 iCalEntityObject instances instead of just iCalEvent's.
3519 * SoObjects/Appointments/SOGoAppointmentFolder.m
3520 ([SOGoAppointmentFolder
3521 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): set ownership of returned records by adding an "owner" key to the resulting dictionaries.
3523 * SoObjects/SOGo/NSObject+Owner.[hm]: removed module since it's a
3524 bad way of handling ownership that way.
3526 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3527 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): search also
3528 on "cn", just like Mozilla.
3530 2006-10-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3532 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]):
3533 "to" should be retained, otherwise it will be autoreleased and a
3536 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3537 -writeAction]): updated method to fetch the card before initing
3540 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3541 -extractQuickFieldsFromTodo:_task]): fixed to use NSNull instead
3544 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
3545 -iCalStringTemplate]): start and due date are now optional.
3547 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
3548 -setDayStartHour:aStartHour]): added a new "isDisabled" ivar with
3549 appropriate accessors to be settable through the templates.
3551 * UI/Scheduler/UIxDatePicker.m ([UIxDatePicker -init]): added a
3552 new "isDisabled" ivar with appropriate accessors to be
3553 settable through the templates.
3555 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3556 -availableCalendars]): new method that list the calendars to which
3557 the user has subscribed.
3558 ([UIxComponentEditor -componentOwner]): returns the owner of the
3561 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3562 -extractQuickFieldsFromTodo:_task]): set the start and enddate of
3563 quickentries to null whenever each or all of them are null, by
3564 providing an impossible timestamp from with NSNotFound as value.
3566 2006-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3568 * UI/WebServerResources/UIxMailEditor.js: update the algorithm
3569 that handles the creation of new fields with the new APIs and the
3570 new node structure on the page.
3572 * UI/Scheduler/UIxAppointmentEditor.m,
3573 UI/Scheduler/UIxTaskEditor.m:
3574 refactored to user UIxComponentEditor as parent class.
3576 * UI/Scheduler/UIxComponentEditor.[hm]: new class module
3577 containing the methods common to the UIxTaskEditor and the
3578 UIxAppointmentEditor.
3580 2006-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3582 * SoObjects/Appointments/SOGoAppointmentFolder.m
3583 ([SOGoAppointmentFolder -doCalendarQuery:context]): now supports
3584 the handling of time-ranges.
3586 * UI/WebServerResources/ContactsUI.js: specify a notification type as
3587 parameters when onConfirmContactSelection in invoked.
3589 * UI/WebServerResources/generic.js: specify a notification type as
3590 parameters when onContactRemove in invoked.
3592 * UI/WebServerResources/SchedulerUI.js: when the user deselects
3593 all calendars, select his entry.
3595 2006-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3597 * UI/WebServerResources/SchedulerUI.js: edit and delete events
3598 with their owner-relative urls. Generate a correct entry in the
3599 css color table when a user is added to the calendars list. Put
3600 the same color next to the user id.
3602 * UI/WebServerResources/generic.js: implemented some new helper
3605 * SoObjects/Appointments/SOGoAppointmentFolder.m
3606 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): don't delete
3607 entries if their owner is not the current user.
3609 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
3610 -displayClasses]): return the correct class for the current event
3611 representation depending on its owner.
3613 * UI/Scheduler/UIxCalCalendarsListView.m: added method to create
3614 and associate a color for each user login depending on its
3615 position in the list.
3617 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView
3618 -currentRowCSSClass]): return the correct class for the current
3619 row depending on the owner of the event.
3621 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
3622 -setColors:colors]): new method to associate a color table with
3623 each user in the list.
3625 * SoObjects/Appointments/SOGoAppointmentFolder.m
3626 ([SOGoAppointmentFolder
3627 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): associate each returned record with the owner of the table they are retrieved from.
3629 * SoObjects/SOGo/NSObject+Owner.[hm]: new extension module to
3630 NSObject to associate an instance with a user.
3632 2006-10-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3634 * UI/WebServerResources/SchedulerUI.js: added handling of multiple
3637 * UI/WebServerResources/ContactsUI.js: added handling of
3638 notification of changes to contact selectors.
3640 * UI/WebServerResources/generic.js: added handling of notification
3641 of changes to contact selectors.
3643 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3644 -updateCalendarsAction]): proxy method to update the user
3645 preference table with the new selected calendar uids.
3647 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3648 -calendarsContactsAction]): new method.
3650 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector -setCheckedBoxes:boxes])
3651 ([UIxContactSelector -setHasCheckBoxes:aBool])
3652 ([UIxContactSelector -isCheckBoxChecked]): new accessors method to
3653 permit the drawing of checkboxes instead of card icons.
3655 * UI/Scheduler/UIxCalCalendarsListView.m: new component class that
3656 wrap a selector the the "Calendars" tab.
3658 * UI/Contacts/UIxContactsCalendarsSelection.m: buttons for the
3659 new user calendar selector.
3661 2006-10-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3663 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: time ranges
3664 may cover hour 0 to hour 23.
3666 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
3667 -iCalStringFromQueryParameter:format:]): dates explicitly set to
3670 * UI/WebServerResources/SchedulerUI.js: manage both lists of
3671 objects wrt to the toolbar actions.
3673 * UI/WebServerResources/generic.js: added code to the "String"
3674 class to decode number-encoded char entities.
3676 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3677 -batchDeleteAction]): new method to delete selected entries in the
3680 * SoObjects/Appointments/SOGoAppointmentFolder.m
3681 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): new method
3682 that delete identified entries in batch.
3684 * UI/SOGoUI/UIxComponent.m ([UIxComponent
3685 -jsCloseWithRefreshMethod:methodName]): new method with explicit purpose.
3687 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]),
3688 UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
3689 -saveAction]), UI/MailerUI/UIxMailEditor.m ([UIxMailEditor
3690 -sendAction]), UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3692 return a UIxJSClose component if everything went fine.
3694 * UI/Scheduler/UIxTaskEditor.h: interface extracted from
3697 * UI/Scheduler/UIxAppointmentEditor.h: interface extracted from
3698 UIxAppointmentEditor.m.
3700 * UI/Common/UIxJSClose.[hm]: new UIxComponent designed to display
3701 a very light page with javascript code to close a window, by
3702 calling a method on the opener if specified. This component is
3703 designed to work as a response to form postings.
3705 2006-10-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3707 * SoObjects/Appointments/SOGoTaskObject.[hm]: clone of
3708 SOGoAppointmentObject adapted for the handling of tasks.
3710 * SoObjects/Appointments/NSArray+Appointments.[hm]: category
3711 extracted from SOGoAppointmentObject.
3713 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
3714 -saveUrl]): returns the url needed to POST the new form to.
3715 redirect the user to <aptid>/editAsAppointment instead of /edit,
3716 so that SOGoAppointmentFolder can return the correct object type.
3718 * SoObjects/SOGo/NSObject+AptComparison.m ([NSObject
3719 -compareAptsAscending:_other]): accept empty start or end dates.
3721 * SoObjects/Appointments/SOGoAppointmentFolder.m
3722 ([SOGoAppointmentFolder
3723 -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.
3724 ([SOGoAppointmentFolder -doCalendarQuery:context]): fetch
3725 components of type "vtodo" as well as "vevent".
3726 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): if the
3727 url specified ends with AsTask or AsAppointment, returns the
3728 an object of the appropriate class, otherwise deduce it from its
3729 content if the HTTP method is "PUT", otherwise read its type from
3732 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3733 -extractQuickFieldsFromTodo:_task]): extract quick fields from
3736 * UI/Scheduler/UIxCalView.m ([UIxCalView
3737 -fetchCoreAppointmentsInfos]): replacement methods for
3738 fetchCoreInfos but by retrieving object with component "vevent".
3739 ([UIxCalView -fetchCoreTasksInfos]): same as above for "vtodo"
3742 * UI/Scheduler/UIxCalTasksListView.[hm]: clone of
3743 UIxCalAptListView adapted for the handling of tasks.
3745 * UI/Scheduler/UIxTaskProposal.[hm],
3746 UI/Scheduler/UIxTaskView.[hm], UI/Scheduler/UIxTaskEditor.[hm]:
3747 clones of the UIxAppointment* classes for the handling of tasks.
3749 * UI/WebServerResources/UIxTaskEditor.js: clone of
3750 UIxAppointmentEditor adapted for the handling of tasks.
3752 * UI/WebServerResources/SchedulerUI.js: added support for tasks.
3753 Scroll the daily view to the appropriate hour when an appointment
3754 is selected in the appointments list.
3756 2006-10-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3758 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
3759 -setDayStartHour:aStartHour]): specifies the user timezone on the
3762 * UI/Scheduler/UIxAppointmentEditor.m: indicate DTSTAMP with "GMT"
3765 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate -adjustedDate])
3766 ([NSCalendarDate -driftedDate]): methods made useless by a better
3767 comprehension of the NSTimeZone API...
3769 2006-10-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3771 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): call
3772 new methods from the NSCalendarDate methods.
3774 * SoObjects/SOGo/NSCalendarDate+SOGo.m: module replacing and
3775 extending UI/Scheduler/NSCalendarDate+Scheduler.m.
3777 +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).
3778 ([NSCalendarDate -adjustedDate]): this method returns another
3779 instance set to the correct hour after the original date was set
3780 from a non-GMT timezone. This date can be used for storage.
3781 ([NSCalendarDate -driftedDate]): this method does exactly the
3782 opposite of -adjutedDate, that is, it enables the method
3783 hourOfDay, minuteOfHour etc... to return the values according to
3784 the original date's timezone. This date CANNOT be used for storage.
3786 * UI/Scheduler/NSCalendarDate+Scheduler.m ([NSCalendarDate
3787 -shortDateString]): new method that will return a "short date
3788 string" (yyyymmdd) from a calendar date object.
3790 * UI/SOGoUI/UIxComponent.m ([UIxComponent
3791 -_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.
3793 * Main/sogod.m (main): initialize the NSTimeZone's defaultTimeZone
3794 to the value of SOGoServerTimeZone or "Canada/Eastern" if not found.
3796 2006-10-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3798 * UI/WebServerResources/SchedulerUI.js: added code to scroll the
3799 view of the day at the height of hour 8:00.
3801 * UI/Scheduler/UIxCalView.m ([UIxCalView -dayStartHour]): returns 0.
3802 ([UIxCalView -dayEndHour]): returns 24.
3804 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView -defaultAction])
3805 ([UIxContactFoldersView -newAction]): invoke
3806 _selectActionForApplication: on self with the proper attribute too.
3808 * UI/Contacts/UIxContactsSelectionViewContainer.m: removed since
3809 we now use the action mechanism in UIxContactsListView to keep the
3810 same view for the contact selectors and the regular contact view.
3812 * UI/Contacts/UIxContactsListViewContainer.[hm]: replaces
3813 UIxContactsListViewContainerBase.[hm]
3815 * UI/Contacts/UIxContactsListView.[hm]: replaces UIxContactsListViewBase.[hm]
3817 * UI/WebServerResources/generic.js: generalized emailstring
3818 handling functions. Generalized address book access functions.
3820 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
3821 -isPopup]): return YES if the "popup" query parameter is set.
3823 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3824 -defaultAction]): keep the url parameters when redirecting.
3825 ([UIxContactFoldersView -selectForSchedulerAction])
3826 ([UIxContactFoldersView -selectForMailerAction]): new action
3827 methods for the /scheduler-contacts and /mailer-contacts invocations.
3829 * SoObjects/SOGo/SOGoObject.m: compose the action url using the
3830 newly available NSString+URL category.
3832 * SoObjects/SOGo/NSDictionary+URL.m ([NSDictionary
3833 -asURLParameters]): handle dictionary entries which could be
3834 instances of NSArray rather than NSString.
3836 * SoObjects/SOGo/NSString+URL.m ([NSString
3837 -composeURLWithAction:actionparameters:urlParametersandHash:useHash]): when composing the url, remove the encoded parameters first since they will be added later.
3838 ([NSString -urlWithoutParameters]): new method that returns the
3839 url without its parameters.
3841 * SoObjects/SOGo/NSString+iCal.h: deleted obsolete file.
3843 * SoObjects/SOGo/NSDictionary+URL.[hm],
3844 UI/SOGoUI/NSString+URL.[hm]: moved from UI/SOGoUI/.
3846 * UI/WebServerResources/UIxMailEditor.js: add support for
3847 additions of different types (to, cc, bcc) of recipients from the
3850 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): added the
3853 * UI/Contacts/UIxContactsMailerSelection.m,
3854 UI/Contacts/UIxContactsSchedulerSelection.m: classes replacing
3855 UI/Contacts/UIxContactsSelectionView.m to provide a different set
3856 of widgets depending on the application invoking the contact list.
3858 2006-09-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3860 * UI/WebServerResources/ContactsUI.js: hide the current contact
3861 whenever the user changes of contact folder.
3863 * UI/WebServerResources/UIxContactEditor.js: the contact UID is
3864 now provided by the template when loading the page.
3866 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
3867 -iCalPersonWithUid:uid]): new method taken from removed module
3870 2006-09-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3872 * UI/Scheduler/UIxAppointmentView.m ([UIxAppointmentView
3873 -categoriesAsString]): same as below.
3875 * UI/Scheduler/UIxAppointmentEditor.m: adapted by using the new
3876 vcalendar API's iCalEvent instead of the removed SOGoAppointment.
3878 * SoObjects/Appointments/SOGoAppointmentObject.m
3879 ([SOGoAppointmentObject -calendarFromContent:cnt]): new helper method.
3880 ([SOGoAppointmentObject -firstEventFromCalendar:calendar]): new
3883 * SoObjects/Appointments/SOGoAppointmentFolder.m
3884 ([SOGoAppointmentFolder -doCalendarQuery:context]): added a
3885 hackish test to detect whether the request concernes VEVENT's or
3886 anything else. Return events only in the former case.
3887 ([SOGoAppointmentFolder
3888 -fetchOverviewInfosFrom:_startDateto:_endDate]): retrieve the
3889 c_name quickfield so that the calendar list can identify the
3890 appointments with their complete "filename".
3892 * OGoContentStore/OCSiCalFieldExtractor.m: use CardGroup's
3893 groupsOfClass:fromSource: to parse the given vcalendar.
3895 * UI/Scheduler/iCalRecurrenceRule+SOGo.m: removed obsolete class.
3897 * UI/Scheduler/SOGoAppointment+UIx.h: removed obsolete class.
3899 * SoObjects/SOGo/SOGoAppointmentICalRenderer.[hm]: removed
3902 * SoObjects/SOGo/SOGoAppointment.[hm]: removed obsolete class.
3904 2006-09-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3906 * SoObjects/Appointments/SOGoAppointmentFolder.m
3907 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): be
3908 sensitive to the CalDAV method names.
3909 ([SOGoAppointmentFolder -doCalendarQuery:context]): method for the
3910 "calendar-query" CalDAV method name.
3912 * UI/WebServerResources/ContactsUI.js: removed a lot of useless
3913 code coming originally from MailerUI.js.
3915 * UI/WebServerResources/UIxContactEditor.js: imitate the
3916 Thunderbird address book by completing the display name with the
3917 content of the first and last name fields, until the display name
3918 is modified manually.
3920 * UI/WebServerResources/generic.js: added a "trim" method to the
3923 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
3924 -displayName]): new method that returns the display name from "cn"
3925 or from the "displayName" key if found.
3927 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3928 -initSnapshot]): check if "[card n]" returns anything to avoid a
3931 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): new method
3932 that returns an unparsed doctype definition for the pages.
3934 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3935 -vCard]): set the card's fn to attribute "displayName" if found
3938 2006-09-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3940 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3941 -vCard]): handle the "streetAddress" and "l" fields.
3943 * UI/Templates/MailerUI/UIxMailEditor.wox: arranged the message
3944 header fields by converting the tables to DIVs and SPANs.
3946 * UI/WebServerResources/generic.css: attempted unification of font
3947 families and size across all the elements. changed the
3948 logConsole's "position" from "fixed" to "absolute" to avoid
3951 2006-09-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3953 * UI/WebServerResources/ContactsUI.js (uixDeleteSelectedContacts):
3954 empty the contact view when the current contact is being deleted.
3956 * UI/WebServerResources/MailerUI.js (newContactFromEmail): fully
3957 parse the email field and provide the address full name if found
3958 as the "contactFN" parameter.
3960 * UI/WebServerResources/generic.js (openMailTo): do not give a
3961 name to the opened window so that serveral ones can be opened at
3964 * UI/MailPartViewers/UIxMailPartTextViewer.m
3965 ([UIxMailPartTextViewer -flatContentAsString]): override method by
3966 replacing carriage returns with "<br />" in the result string from
3967 super's implementation.
3969 * UI/Contacts/UIxContactView.m ([UIxContactView
3970 -_urlOfType:aType]): don't manage non-mailto urls through
3971 javascript, let the user decide what's best for him.
3973 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3974 -newAction]): transfer all the query parameters by using the
3975 "asURLParameters"'s result string from [self queryParameters].
3977 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3978 -initSnapshot]): retrieve "contactEmail" and "contactFN" from the
3979 query parameters and put their values (if any) into the snapshot.
3981 * UI/Contacts/UIxContactView.m ([UIxContactView -note]): convert
3982 carriage-returns to "<br />".
3983 ([UIxContactView -workCompany]): explicitly initialize company to
3984 nil if org is nil or empty.
3986 * UI/WebServerResources/UIxContactEditor.js: updated validation
3987 code after we added and renamed some fields.
3989 * UI/WebServerResources/ContactsUI.js: added code to cache contact
3990 cards and to handle card updates.
3992 2006-09-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3994 * UI/Contacts/UIxContactView.m ([UIxContactView -hasOtherInfos]):
3995 test the length of the returned string since they will never be
3998 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor -saveAction]):
3999 return self if the process went successful, returns an exception
4000 otherwise (and only otherwise...).
4002 * OGoContentStore/OCSContactFieldExtractor.m
4003 ([OCSContactFieldExtractor -extractQuickFieldsFromVCard:_vCard]):
4004 adapted method to the new VCard api. Since the cards are stored in
4005 vcard format, we no longer deal with a dictionary but with a
4008 2006-09-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4010 * UI/Contacts/UIxContactView.m ([UIxContactView -preferredEmail]):
4011 return a string with a "mailto" url.
4012 ([UIxContactView -_urlOfType:aType]): generic method to return a
4013 url string with a html anchor pointing to it.
4015 * UI/Contacts/UIxContactEditor.[hm]: UIxContactEditorBase renamed
4016 since subclass "UIxContactEditor" did nothing. Implemented code to
4017 display and modify the values parsed from the vcards, displayed in
4018 a way similar to the Thunderbird addressbook.
4020 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4021 -save]): new dummy method.
4023 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
4024 -save]): made method void.
4026 2006-09-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4028 * UI/Contacts/UIxContactView.m: added many wrapper methods to
4029 display blocks of data à la Thunderbird Addressbook. If data is
4030 available, those wrappers (around the NGVCard methods) will
4031 enclose the results in a proper HTML output with the correct label
4032 (if present), otherwise it will return an empty string.
4033 ([UIxContactView -vcardAction]): new action to return the contact
4034 as text/vcard (for exporting).
4036 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4037 +contactEntryWithName:aNamewithLDAPEntry:anEntryinContainer:aContainer]): adapted the mapping of the LDIF data with the new NGVCard API.
4039 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
4040 -vCard]): create a new NGVCard instance when no data is available
4042 ([SOGoContactGCSEntry -save]): save the vCard using the new
4043 "versitString" API method/message.
4045 * UI/Contacts/UIxContactView.h: separated interface from
4048 * UI/WebServerResources/ContactsUI.js: add-ed code to download card
4049 views and display them beneath the list.
4051 2006-09-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4053 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -userTimeZone]): retain
4054 the timezone even when it's the server timezone.
4056 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
4057 -privateContacts:inContext:]): no long configure the calendar
4058 object with the user's timezone since it's now accessible
4059 application-wide throught the SOGoObject methods.
4061 * UI/SOGoUI/UIxComponent.[hm]: removed the "viewTimeZone" ivar and
4062 method. Removed the "backendTimeZone" method.
4064 * UI/MainUI/SOGoUserHomePage.[hm]: made a subclass of UIxComponent
4065 instead of SoComponent.
4067 * SoObjects/Appointments/SOGoAppointmentObject.m:
4068 ([SOGoAppointmentObject -viewTimeZoneForPerson:_person]): returns
4069 [self serverTimeZone] instead of "EST" (which was removed).
4071 * SoObjects/Appointments/SOGoAppointmentFolder.[hm]: removed the
4072 "timeZone" ivar and its accessors.
4074 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -serverTimeZone]): new
4075 centralized method returing the timezone configured in the
4076 userdefaults db or "Canada/Eastern" if missing.
4077 ([SOGoObject -userTimeZone]): new centralized method returing the
4078 timezone of the current user or the server timezone if missing
4079 from the user configuration table.
4081 2006-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4083 * UI/WebServerResources/SchedulerUI.js: implemented caching of
4086 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]):
4087 return a path based on the object's context instead of the first
4088 level in SOGo's object hierarchy...
4090 2006-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4092 * UI/Templates/SchedulerUI/UIxCalDayTable.wox: day columns can now
4095 * UI/Templates/SchedulerUI/UIxCalDateSelector.wox: pass the user's
4096 timezone ([self viewTimeZone]) to the WEMonthOverview component to
4097 avoid a confusion with the days.
4099 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: appointments
4102 * UI/WebServerResources/SchedulerUI.js: implemented a mechanism to
4103 imitate Sunbird's synchronization between the 3 visible views.
4105 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): make
4106 sure the numbers in dateString are formatted so as to take 4 chars
4107 for the year and 2 for the day and the month, otherwise
4108 NSCalendarDate will return a nil date.
4109 ([UIxComponent -applicationPath]): return a path based on the
4110 object's context instead of the second level in SOGo's object
4113 2006-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4115 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): add the
4116 user's timezone abbreviation to the date string passed as parameter to
4117 NSCalendarDate to generate an accurate date instance. Do the same
4118 when no date is specified and today is chosen.
4120 * UI/WebServerResources/UIxAppointmentEditor.js: convert the
4121 form's time values to integers before comparing them.
4123 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -currentStartTime])
4124 ([UIxCalAptListView -currentEndTime]): initialize the resulting
4125 dates timezone with [self viewTimeZone].
4127 * UI/SOGoUI/UIxComponent.m ([UIxComponent -init]): new
4128 "viewTimeZone" ivar destined to hold an instance of the user's
4130 ([UIxComponent -viewTimeZone]): take the timezone from the user's
4133 2006-08-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4135 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: completely
4136 rearranged the layout.
4138 * UI/WebServerResources/UIxAppointmentEditor.js: added code to
4139 manage showing and hiding appointment details.
4141 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
4142 -privateContacts:inContext:]): init the SOGoAppointmentFolder's
4143 timezone by taking the current user's timezone setting.
4145 * SoObjects/Appointments/SOGoAptMailNotification.m: same as below.
4147 * SoObjects/Appointments/SOGoAppointmentObject.m
4148 ([SOGoAppointmentObject -changeParticipationStatus:inContext:]):
4149 set default timezone to EST, although this code should be
4150 rewritten to handle a system and a user default value.
4152 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4153 -takeValuesFromRequest:_rqinContext:_ctx]): enhanced method to
4154 take the values from the hour and minute INPUTs when data is
4155 POSTed since we no longer use the UIxTimeSelector component.
4156 ([UIxTimeDateControl -selectableHours])
4157 ([UIxTimeDateControl -selectableMinutes]): new methods used by the
4158 template SELECTs to display reasonable and acceptable values
4159 instead of all the possibilities.
4161 * UI/WebServerResources/generic.js: adapted code for the new
4162 implementation of the UIxContactSelector component (added a
4163 "remove" button, removed the previous INPUT and replaced them with
4164 links of class "button").
4166 * UI/Scheduler/UIxTimeDateControl.h: separated interface from
4167 UIxTimeDateControl.m.
4169 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -currentAppointmentDay])
4170 ([UIxCalDayTable -currentAppointmentHour]): new methods that
4171 returns correctly formatted values used as attributes for JS code.
4173 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
4174 -initialContactsAsString]): renamed implementation of
4175 initialParticipants.
4176 ([UIxContactSelector -currentContactId])
4177 ([UIxContactSelector -currentContactName]): new methods used when
4178 listing the initial contacts in the widget. Currently, both return
4179 the person's cn but the latter should ultimately return a user
4182 * UI/Contacts/UIxContactSelector.h: separated interface from
4183 UIxContactSelector.m.
4185 * UI/Scheduler/UIxDatePickerScript.[hm]: component removed since
4186 all javascript code is now put in Scheduler.js/generic.js.
4188 * UI/Scheduler/NSCalendarDate+UIx.[hm]: category removed, code
4189 moved into NSCalendarDate+Scheduler instead.
4191 * SoObjects/Appointments/SOGoAppointmentFolder.m
4192 ([SOGoAppointmentFolder -setTimeZone:newTZ]): new method to
4193 configure the timezone from SOGoUserFolder when the instance is
4195 ([SOGoAppointmentFolder -viewTimeZone]): MET was removed. Returns
4196 the value of the new "timezone" ivar.
4198 2006-08-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4200 * UI/WebServerResources/SchedulerUI.{css,js}: added a tabview with
4201 the date selector in the first page and the container of the
4202 future calendar selector in the second page.
4204 * UI/WebServerResources/generic.js: added code for handling tabbed
4207 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productFrameworkName]):
4208 returns the bundle name associated to the current running product.
4210 2006-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4212 * UI/WebServerResources/UIxAppointmentEditor.js: fixed the AJAX
4213 exception by invoking a timeout on the opener rather than invoking
4214 the list refresh method.
4216 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]):
4219 * UI/Scheduler/UIxCalWeekView.m ([UIxCalWeekView -weekBeforePrevWeekQueryParameters])
4220 ([UIxCalWeekView -prevWeekQueryParameters])
4221 ([UIxCalWeekView -nextWeekQueryParameters])
4222 ([UIxCalWeekView -weekAfterNextWeekQueryParameters]): new methods
4223 that return the dates relatively to the current day.
4224 ([UIxCalWeekView -lastWeekName])
4225 ([UIxCalWeekView -currentWeekName])
4226 ([UIxCalWeekView -nextWeekName])
4227 ([UIxCalWeekView -weekAfterNextWeekName])
4228 ([UIxCalWeekView -_weekNumberWithOffsetFromToday:offset]): new
4229 methods that returns the label for the corresponding weeks.
4231 * UI/Scheduler/UIxCalDayTable.[hm]: new class module/component
4232 used by UIxCalDayView and UIxCalWeekView to display the events
4233 occuring in one or more days.
4235 2006-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4237 * UI/Scheduler/UIxCalMainView.m: extended class to populate the
4238 entries in the new "monthMenu" and "yearMenu".
4240 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]): new
4241 method to return the current day as a string formatted depending
4242 on the current locale.
4244 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
4245 ([UIxCalAptListView -endDate]): "today" is now the default filter
4246 for displayed events.
4247 ([UIxCalAptListView -currentSerialDay]): new method returning the
4248 date of the current enumerated appointment in serial form
4251 * UI/WebServerResources/SchedulerUI.js: added code to select the
4252 relevant day when an appointment is selected. Added code to popup
4253 a month and a year menu whenever the header entries are clicked in
4254 the calendar widget.
4256 * UI/WebServerResources/generic.js: made addClassName and
4257 removeClassName methods of HTMLElement.
4259 2006-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4261 * UI/WebServerResources/MailerUI.js: fixed the contact creation
4262 from email addresses.
4264 * UI/WebServerResources/generic.js: centralized the search-related
4265 functions here since the same code was used across the 3
4268 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
4269 ([UIxCalAptListView -endDate]): return the required dates needed
4270 depending on the value given to the "filterpopup" url parameter.
4272 * UI/Common/UIxToolbar.m ([UIxToolbar -buttonLabel]): reduced the
4273 code by invoking UIxComponent's labelForKey:.
4275 * UI/SOGoUI/UIxComponent.m ([UIxComponent -labelForKey:]): use
4276 [self pageResourceManager] instead of [self resourceManager].
4278 * UI/Contacts/UIxContactEditorBase.m: invokes
4279 globallyUniqueObjectId on the clientobject's class instead of the
4280 hardcoded "SOGoFolder".
4282 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4283 -newAction]): redirect the "new" action to the personal (default)
4286 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
4287 +objectWithName:inContainer:]): new constructor.
4289 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
4290 -lookupContactWithId:recordId]): always create a contact object,
4291 even if it does not exist.
4293 2006-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4295 * UI/Scheduler/UIxCalMainView.[hm]: new class to serve as a pseudo
4296 component that lays out the different components of SOGoCalendar.
4297 Only serves as an Objective-C counterpart to its xml template.
4299 * UI/Scheduler/UIxCalInlineMonthOverview.h: interface extracted
4302 * UI/Scheduler/UIxCalFilterPanel.[hm]: new class designed to
4303 display a widget to handle the information displayed in the
4304 appointments list. Not currently used, lacks implementation.
4306 * UI/Scheduler/UIxCalDateSelector.[hm]: new class designed to
4307 display a calendar as a dynamic widget from where one can select
4308 the current visible day.
4310 * UI/Scheduler/NSCalendarDate+Scheduler.[hm]: category code
4311 extracted from UIxCalInlineMonthOverview.m.
4313 * UI/Scheduler/UIxDatePicker.m: removed the jsPopup, jsCode and
4314 calendarPageURL methods. The javascript code is handled by .js
4315 files as much as possible...
4317 * UI/WebServerResources/ContactsUI.js,
4318 UI/WebServerResources/MailerUI.js: adapted to the code refactoring
4321 * UI/WebServerResources/SchedulerUI.js: implemented functions to
4322 handle the new widgets. XmlHTTPRequest code taken from
4325 * UI/WebServerResources/generic.js: put some functions related to
4326 element selections as methods to HTMLElement and HTMLTableElement.
4328 * UI/Scheduler/UIxCalAptListView.[hm]: new class designed to
4329 display the list of appointments (embodies the code-size of
4330 UIxCalAptListView; answers to the "aptlist" method).
4332 2006-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4334 * UI/Scheduler/UIxCalWeekOverview.m ([UIxCalWeekOverview
4335 -correctURLAction]): new short action method replacing the method
4336 below by taking far less code.
4338 * SoObjects/Appointments/SOGoAppointmentFolder.m
4339 ([SOGoAppointmentFolder -GETAction:]): removed method. Replaced
4340 with an action in the view-related code.
4342 * UI/Scheduler/UIxAppointmentEditor.m: invoke
4343 "stringByEscapingHTMLString" on the resulting value to avoid
4344 issues with accented characters.
4345 ([-jsCode]): removed method since the javascript code was merged
4346 into SchedulerUI.js.
4348 2006-08-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4350 * UI/Scheduler/iCalPerson+UIx.m ([iCalPerson +personWithUid:]):
4351 new class method that returns an iCalPerson based on the UID given
4354 * UI/Contacts/UIxContactsListViewContainerBase.m:
4355 UIxContactsListViewContainer renamed to serve as a base class for
4356 the contact lists in both the contact editor and the contact
4359 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4360 ([SOGoContactLDAPFolder
4361 -LDAPSetHostname:setPort:setBindDN:setBindPW:setContactIdentifier:
4362 setUserIdentifier:setRootDN:]): an LDAP field specifying the
4363 loginname of the users can now be specified.
4365 * UI/WebServerResources/generic.js: added code to manage contact
4366 lists through the new implementation of the UIxContactSelector.
4368 * UI/Templates: put the templates related to SchedulerUI in its
4371 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
4372 -asDictionaryWithAttributeNames:withUID:andCName:cName]): add an
4373 entry for "uid" with the field name representing the login name of
4374 the user in the corresponding LDAP branch.
4376 2006-08-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4378 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
4379 -lookupName:_keyinContext:_ctxacquire:_flag]): when the HTTP
4380 request is a PUT, always create an entry, even if we're not sure
4383 2006-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4385 * UI/WebServerResources/ContactsUI.js: implemented live-search.
4387 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
4388 -appendSystemSourcesInContext:context]): populated method with
4389 code that creates entries mapped to instances SOGoContactFolder,
4390 based on the configuration found in the NSUserDefaults under the
4391 key "SOGoLDAPAddressBooks".
4392 ([SOGoContactFolders
4393 -lookupName:nameinContext:contextacquire:acquire]):
4394 "contactsources" do not exist anymore, SOGoContactFolder was split
4395 into two classes: SOGoContactGCSFolder and SOGoContactLDAPFolder
4396 and one protocol: SOGOContactFolder, instead.
4397 ([SOGoContactFolders -contactFolders]): new accessor used by the
4398 views of SOGoContactXXXFolder to list the possible sources.
4400 * SoObjects/Contacts/SOGoContactObject.h: new protocol that
4401 defines the methods that UIxContactsView, ..Editor and so on...
4404 * SoObjects/Contacts/SOGoContactFolder.h: new protocol that
4405 defines the methods that UIxContactsListViewBase expects as well
4406 as the data fields returned in the contact lists.
4408 * SoObjects/Contacts/SOGoContactLDAPFolder.[hm]: new class that
4409 returns entries an LDAP server. Conforms to the new
4410 SOGOContactFolder protocol.
4412 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: new class that
4413 returns a vCard based on contact entries from an LDAP server.
4414 Conforms to the new SOGOContactObject protocol.
4416 * SoObjects/Contacts/NGVCardSimpleValue+Contact.m
4417 ([NGVCardSimpleValue -vCardEntryString]): generates the correct
4418 entry for the textual representation of the vCard.
4420 * SoObjects/Contacts/NGVCardSimpleValue+Contact.[hm]: new class
4423 * SoObjects/Contacts/SOGoContactGCSEntry.[hm]: new module name of
4424 "SOGoContactObject".
4426 * SoObjects/Contacts/NGVCard+Contact.m ([NGVCard -asString]): new
4427 method that generates a textual representation of the vcard.
4429 * SoObjects/Contacts/NGVCard+Contact.[hm]: new class extension.
4431 * SoObjects/Contacts/SOGoContactGCSFolder.[hm]: new module name of
4432 "SOGoContactFolder".
4434 * SoObjects/Contacts/SOGoContactSource.h,
4435 SoObjects/Contacts/SOGoPersonalAB.[hm]: unused classes and
4438 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
4439 -singleAttributeWithName:key]): new method that returns the first
4440 object associated with an ldap key (where generally one value is
4443 -asDictionaryWithAttributeNames:attributeNamesandCName:cName]):
4444 map the entry into an NSDictionary for processing by
4445 UIxContactsListViewBase.m with the least possible overhead.
4447 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: new class
4450 2006-08-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4452 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
4453 -privateContacts:inContext:]): now returns an instance of
4456 * UI/Contacts/UIxContactsListViewContainer.m
4457 ([UIxContactsListViewContainer -contactFolderName]): new method to
4458 return the absolute path to the current contact folder, called
4459 from within the template.
4461 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
4462 JS code to initialize the 'currentContactFolder' generic var.
4464 * SoObjects/Contacts/SOGoContactFolder.m ([SOGoContactFolder
4465 +contactFolderWithSource:inContainer:andName:]): new class
4466 method meant to return an instance connected to the specified
4467 source. Currently useless but won't be anymore in the next few
4470 * SoObjects/SOGo/SOGoUserFolder.h: commented out declaration of
4471 the "lookupFreeBusyObject" method since it does not exist.
4473 * UI/Contacts/UIxContactFoldersView.[hm]: new class module serving
4474 as a "view" for the SOGoContactFolders object. Does nothing but
4475 redirect the browser to the URL of the personal address book of
4476 the user. It does not even have a template.
4478 * SoObjects/Contacts/SOGoPersonalAB.[hm]: new class module
4479 implementing the SOGoContactSource protocol. Does nothing
4480 currently but will be used to implement access to the personal
4481 address book of the user stored in the SOGo database.
4483 * SoObjects/Contacts/SOGoContactSource.h: new "SOGoContactSource"
4484 protocol defining an API common to all possible types of contact
4487 * SoObjects/Contacts/SOGoContactFolders.[hm]: new class module
4488 serving as the root of the contact folders available to the
4489 current user. Correctly lists the contact sources in webdav.
4491 2006-08-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4493 * UI/MailerUI/UIxMailAccountsView.m ([UIxMailAccountsView
4494 -composeAction]): new action method that permits external object
4495 to write a message from the default (primary) account.
4497 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
4498 -initSnapshot]): new method with code taken from "defaultAction"
4499 but needed for others.
4500 ([UIxContactEditorBase -writeAction]): new action designed to
4501 compose the correct URL needed to obtain the MailerUI's email
4502 editor with the correct "mailto" parameter.
4504 * UI/Common/UIxSortableTableHeader.m: moved from MailerUI to
4505 Common so that other modules can use it.
4507 * UI/Contacts/UIxContactsListViewContainer.m: container to make it
4508 easier to manage both ajax and non-ajax requests.
4510 * UI/Contacts/UIxContactsFilterPanel.m: clone of
4511 UIxMailFilterPanel, but applicable to contact lists.
4513 * SoObjects/Contacts/NSDictionary+Contact.m ([NSDictionary
4514 -vcardContentFromSOGoContactRecord]): use the new standard methods
4515 created for each type of entry. If a line is determined to not
4516 contain information, it will be skipped.
4518 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
4519 +initialize]): init defaultMailDomain with the user default
4520 "SOGoDefaultMailDomain".
4522 2006-08-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4524 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
4525 -saveAction]): reorganized methods to only have ONE return point.
4526 Invoke saveRecord: directly on the clientObject instead of
4527 saveContentString, which does the same thing anyway.
4529 * SoObjects/Contacts/NSDictionary+Contact.m
4530 ([NSDictionary -vcardContentFromSOGoContactRecord]): extension
4531 method to convert the dictionary returned with the user submission
4532 to a record in VCARD format to be stored in the database.
4534 2006-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4536 * UI/WebServerResources/MailerUI.js: when opening the context menu
4537 of the message list, select the message below the mouse cursor and
4538 deselect the other selected messages temporarily. This mimics the
4539 behaviour of Thunderbird for that matter and was already
4540 implemented for the entries of the folder tree.
4542 * UI/MailerUI/UIxMailFolderMenu.m ([UIxMailFolderMenu
4543 -iconForMenuItem]): new method that returns the fully qualified
4544 relative URL to the icon representing the mailbox, or the default
4545 mailbox icon if needed.
4547 * UI/SOGoUI/UIxComponent.m ([UIxComponent
4548 -urlForResourceFilename:filename]): automatically return an empty
4549 string whenever the filename passed as argument is nil.
4551 * UI/WebServerResources/MailerUI.js: open the mailboxes with the
4552 "desc" parameter set to 1 so that they are sorted in descending
4553 order by default. Also, added "onHeaderClick()", triggered by
4554 clicking on the message list header elements.
4556 * UI/MailerUI/UIxMailSortableTableHeader.m
4557 ([UIxMailSortableTableHeader -isSortedDescending]): same as below.
4559 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
4560 -isSortedDescending]): defaults to "YES" when the sort order is
4563 2006-07-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4565 * UI/WebServerResources/MailerUI.js:
4566 - message cache: set the max num of cached messages to 20. Limit
4567 the cached message size to 30000 bytes.
4568 - ajax: when a message request is called while one is already
4569 being performed, the latter will be cancelled. Idem when
4570 retrieving the content of a mailbox.
4571 - folder tree: when a mailbox is selected because of the URL
4572 requested (initMailboxSelection), the dtree is expanded throughout
4573 the mailbox entry's parent hierarchy to ensure it is made visible
4574 when the page is being displayed. (new function: expandUpperTree).
4575 - mailbox loading: when loading a mailbox where a message was
4576 previously selected, we invoke its url with the "pageforuid"
4577 parameter correctly specified. During callback processing, we scan
4578 the table for the related row and reselect it.
4579 Also, the message area is set blank before loading any mailbox.
4581 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
4582 -defaultAction]): if the "pageforuid" parameter is passed in the
4583 url, take its value and invoke [self firstMessageOfPageFor:]
4584 consequently to deduce the first message to display. Otherwise,
4585 set it to "idx", otherwise set it to 0.
4586 ([UIxMailListView -firstMessageOfPageFor:]): new method
4587 that determines the first message of the page where the message
4588 passed as parameter is contained.
4590 * UI/WebServerResources/UIxMailListView.js: removed this module,
4591 its code was put in MailerUI.js instead.
4593 2006-07-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4595 * UI/MailerUI/UIxMailFolderMenu.m: a descendent of UIxMailTree
4596 which returns the nodes for the parent specified in "parentMenu".
4597 Used to generate the javascript code for the folder dtree.
4599 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: the components
4600 using that container-template are now using UIxMailMainFrame
4601 since UIxMailPanelFrame had no real interest. File removed.
4603 * UI/WebServerResources/dtree.{css,js}: new files to handle
4604 javascript-generated mailbox tree. Modified from original version
4605 by integrating the previous code with the one we are using for
4606 selections and mailbox handling. Minor visual enhancements too...
4608 2006-07-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4610 * SoObjects/Mailer/SOGoUser+Mail.m: if only one identity is to be
4611 returned, put it in an NSArray before returning it (fixes
4614 2006-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4616 * UI/SOGoUI/NSString+URL.m ([NSString -hostlessURL]): new method
4617 that returns a url string stripped from its "http://hostname"
4620 * UI/SOGoUI/NSDictionary+URL.[hm]: moved from UI/Common.
4622 * UI/SOGoUI/NSString+URL.[hm]: moved from UI/Common.
4624 2006-07-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4626 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
4627 -mailDateFormatter]): retrieve the timezone from the user settings
4628 and pass it to the returned dateFormatter. Also, the dateFormatter
4629 is kept in a static variable to avoid useless
4630 creations/destructions.
4632 * UI/MailerUI/UIxMailFormatter.m ([UIxMailDateFormatter
4633 -setTimeZone:newTimeZone]): new accessor to specify the timezone.
4635 * UI/MailerUI/UIxMailFilterPanel.m ([UIxMailFilterPanel -setSearchCriteria:])
4636 ([UIxMailFilterPanel -searchCriteria]): new methods, similar to
4637 s/Criteria/Text/ to handle the "criteria" form parameter.
4639 2006-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4641 * UI/WebServerResources/uix.css: enhanced the toolbar appearance
4642 to integrate better with the firefox look&feel. Added entries for
4643 the new "menu" DIV class (popup menus).
4645 * UI/WebServerResources/generic.js: added "sanitizeMailTo" which
4646 takes any chunk of text as param, detects the user email and the
4647 optional first and last names and return them in a well-formatted
4648 way. Renamed "getSelection" to "getSelectedNodes" to avoid a
4649 namespace conflict. Added "onMenuClick(node, event, menuId)" to
4650 handle popup menus through "onclick" element attributes (node =
4651 this, event = event and menuId = name of the menu DIV id to
4654 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
4655 -snapshot]): add an entry for "email" into the snapshot
4656 dictionary if a "contactEmail" URL parameter was detected and if
4657 the entry for "email" is empty.
4659 * UI/Contacts/Toolbars/SOGoContactFolder.toolbar: the "new card"
4660 button now invokes the newContact() js function in ContactsUI.js
4661 instead of opening "new" directly. newContact() pops up a window
4662 stripped from its navigation bar.
4664 * UI/Contacts/ContactsUI.js: new module specific to the ContactsUI
4665 bundle (AddressBook).
4667 * UI/Templates/MailerUI/UIxMailView.wox: added a div of class
4668 "menu" and id "addressMenu" have the header email addresses
4669 display it with the new menu code in generic.js.
4671 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: same as below +
4672 replaced the body tables with a div of class "pageContent"
4673 (standardization across the page templates).
4675 * UI/Templates/MailerUI/UIxMailMainFrame.wox: include
4676 productJavaScriptURL and pageJavaScriptURL (conditionnally) since
4677 those are now inherited from UIxPageFrame.
4679 * UI/MailerUI/UIxMailView.js: new file specific to UIxMailView.
4681 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]): if
4682 a "mailto" URL parameter is detected and the "to" array is empty,
4683 initialize "to" with the value of "mailto" before returning it.
4685 * UI/MailerUI/UIxMailEditorAction.m ([UIxMailEditorAction
4686 -composeAction]): rewrote method in a cleaner way and with usage
4687 of the URL extensions to NSString and NSDictionary (see below).
4688 Also, if a "mailto" url parameter is detected, pass it to the
4691 * UI/MailerUI/UIxMailMainFrame.m: subclassed from UIxPageFrame to
4694 * UI/Common/NSDictionary+URL.m ([NSDictionary -asURLParameters]):
4695 returns a parameter string to add to a base URL.
4697 * UI/Common/NSString+URL.m ([NSString
4698 -composeURLWithAction:parameters:andHash:useHash]): new method to
4699 compose a complete URL from an object URL with parameters and an
4700 optional '#' character.
4702 * UI/Common/UIxPageFrame.h: separated interface from
4705 2006-07-07 Wsourdeau Sourdeau <wsourdeau@inverse.ca>
4707 * UI/Scheduler/UIxAppointmentEditor.m: returns yes to "isPopup";
4709 * UI/WebServerResources/generic.js: added code to manage
4710 selections within HTML containers.
4712 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productJavaScriptURL]):
4713 added method to determine the possible URL for a product-specific
4714 javascript filename of the forme <productname>.js.
4715 ([UIxPageFrame -hasProductSpecificJavaScript]): new method.
4716 ([UIxPageFrame -isPopup]): new method to determine whether the
4717 application navigator bar should be displayed (main page) or not
4720 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
4721 -LDAPCheckLogin:_loginpassword:_pwd]): new method to authenticate
4722 the user through LDAP.
4724 2006-07-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4726 * The toolbar code from the MailerUI product was taken, renamed as
4727 "UIxToolBar" and put into UI/Common. Toolbar plists were created
4728 for the Contacts and Scheduler products and put in their respectir
4729 Toolbars/ subdirectories. Finally,
4730 UI/Templates/{UIxToolbarButton,UIxToolbarSeparator}.wox, and
4731 UI/Common/{UIxToolbarButton,UIxToolbarSeparator}.m were removed
4732 and an invocation to the UIxToolbar component was put at the top
4733 of UI/Templaces/UIxPageFrame.wox.
4735 * UI/Common/UIxToolbar.m: new "isLastGroup" method to determine
4736 within the templates whether a separator should be displayed.
4738 * UI/Common/UIxToolbar.m ([UIxToolbar -hasButtons]): new method
4739 that returns NO if the toolbar is empty.
4741 2006-07-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4743 * UI/Templates/UIxPageFrame.wox: replaced central table with a DIV.
4745 * UI/Common/UIxToolbarSeparator.m, UI/Common/UIxToolbarButton.m:
4746 new toolbar objects.
4748 * UI/Templates/UIxPageFrame.wox: use the exact html code as below.
4750 * UI/Templates/MailerUI/UIxMailMainFrame.wox: redone the
4751 linkbanner as a DIV instead of a TABLE.
4753 * UI/MailerUI/UIxMailMainFrame.m [UIxMailMainFrame
4755 returns 'YES' to request the display of the navigation bar between
4758 2006-06-15 ludovic@inverse.ca
4760 * It's now possible to set the default
4761 domain using for email using the
4762 SOGoDefaultMailDomain preference key.
4764 2006-06-15 ludovic@inverse.ca
4766 * Initial import of SOGo from trunk.