1 2007-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3 * SoObjects/Appointments/SOGoAppointmentObject.m
4 ([SOGoAppointmentObject -deleteWithBaseSequence:]): an email was
5 sent when modifying an event, when the event was considered
6 relevant. The same thing is now implemented for event deletion.
8 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
9 -primaryFetchProfile]): make sure that the deserialized "values"
10 is an instance of NSMutableDictionary, otherwise we override it
13 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
14 -contentForReply]): make use of the SOGoMailReply WO page.
16 * SoObjects/Mailer/SOGoMailReply.[hm]: new class module copied
17 from SOGoMailForward to handle mail replies instead. Only three
18 methods remaining: date, from and messageBody. The latter is
21 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
22 -fetchMailForForwarding:sourceMail]): fetch attachments for
25 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
26 -hasMessageAttachment]): initialize hasAttachment with "NO" to
27 avoid false positives.
29 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event])
30 ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]):
31 set title to an empty string where the event/task summary is null.
33 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
34 -setHeaders:newHeaders]): make sure there is a message id in the
35 headers dictionary, if not, generate one.
36 ([SOGoDraftObject -fetchMailForEditing:sourceMail]): retrieve the
37 message id from the existing draft.
38 ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): store the
39 message id in the header map.
41 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
42 -deleteFolderAction]): no longer prefix the target folder with
45 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
46 -listMailboxesAction]): base the folder type on the folder
49 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
50 -lookupName:_keyinContext:acquire:_acquire]): compare the full
51 traversal to the potential looked up folder with the special
52 folder names and return an object with the appropriate
53 SOGoMailFolder subclass.
55 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
56 -traversalFromMailAccount]): don't prepend the whole string with
59 * SoObjects/Mailer/SOGoMailAccount.m
60 ([-lookupSentFolder:_keyinContext:_ctx])
61 ([-lookupDraftsFolder:_keyinContext:_ctx])
62 ([-lookupTrashFolder:_keyinContext:_ctx])
63 ([-lookupFiltersFolder:_key:_ctx]): removed methods.
64 ([SOGoMailAccount -inboxFolderNameInContext:])
65 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
66 ([SOGoMailAccount -sentFolderNameInContext:])
67 ([SOGoMailAccount -trashFolderNameInContext:]): no longer prefixes
68 the resulting name with "prefix" since we might return a nested
70 ([SOGoMailAccount -allFolderPaths]): prefixes all special folder
71 names with "/". Sorts the resulting folder list with
72 localizedCaseInsensitiveCompare: instead of
73 caseInsensitiveCompare:. No longer use the -[lookupXXX] methods
74 that were removed, instead, we choose the appropriate class
75 depending on the folder name. And since we are in SOGoMailAccount,
76 we don't have to compute a traversal path to match the key with
79 -folderWithTraversal:traversalandClassName:className]): new method
80 that returns an instance of the specified SOGoMailFolder subclass,
81 based on the traversal path passed as parameter.
82 ([SOGoMailAccount -inboxFolderInContext:_ctx])
83 ([SOGoMailAccount -draftsFolderInContext:_ctx])
84 ([-sentFolderInContext:_ctx])
85 ([SOGoMailAccount -trashFolderInContext:_ctx]): invoke the new
86 -folderWithTraversal:andClassName: method described above.
88 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
89 -primaryFetchProfile]): make use of -[NSPropertyListSerialization
90 propertyListFromData:mutabilityOption:format:errorDescription:] to
91 deserialize the plist. Removed variant for libFoundation since it
92 should support the above.
93 ([AgenorUserDefaults -generateSQLForInsert])
94 ([AgenorUserDefaults -generateSQLForUpdate]): make use of
95 -[NSPropertyListSerialization
96 dataFromPropertyList:format:errorDescription:] to serialize the
97 plist. Removed variant for libFoundation since it should support
98 the above. Escape the backslashes from the resulting string.
100 2007-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
102 * SoObjects/Mailer/SOGoMailFolder.[hm]: added a new subclass of
103 SOGoMailFolder: SOGoMailSpecialFolder.
105 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
106 -traversalFromMailAccount]): overridden method that returns the
107 initialized mutable string.
108 ([SOGoMailAccount -allFolderPaths]): take the special folder paths
109 with -traversalFromMailAccount and reposition them at the
110 beginning of the list. By creating the special folders during that
111 request, we also make sure that the folder exists thanks to the
112 new initialisation method of the new "SOGoSpecialMailFolder"
114 ([SOGoMailAccount -lookupSentFolder:_keyinContext:_ctx]): new
116 ([SOGoMailAccount -lookupTrashFolder:_keyinContext:_ctx]): new
118 ([SOGoMailAccount -lookupName:_keyinContext:acquire:_flag]): no
119 longer use lookupImap4Folder.
120 ([SOGoMailAccount -lookupImap4Folder:_keyinContext:_ctx]): removed
123 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
124 -traversalFromMailAccount]): new method that returns the full
125 IMAP4 path to the object.
127 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): retain
128 "superUsernames" after fetching it from the ud.
130 2007-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
132 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
133 -eventsListAction]): substitude the start and end date with their
134 UTC counterpart, taking into account the offset from UTC related
135 to those dates instead of the current one. This renders
136 -[UIxCalMainView -userUTCOffset] obsolete because the computings
137 that occured in javascript are now done server-side.
139 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView -userUTCOffset]):
140 removed obsolete method.
142 * SoObjects/Mailer/NSString+Mail.m ([NSString -htmlToText]): new
143 method converting html content to plain text.
145 * SoObjects/Mailer/NSString+Mail.[hm]: new category module
146 enhancing NSString with utility methods pertaining to mail handling.
148 * SoObjects/Mailer/SOGoMailObject.m
149 ([-shouldFetchPartOfType:_typesubtype:_subtype]): removed obsolete method.
151 -addRequiredKeysOfStructure:infopath:ptoArray:keysacceptedTypes:types]):
152 modified method to be always recursive and to take an array of the
153 accepted mime-types as parameter. The returned array now contains
154 the mime-type as well as the part keys.
156 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
157 -contentForEditingOnParts:_prtskeys:_k]): removed obsolete method.
158 ([SOGoMailObject -contentForEditing]): rewrote method to take into
159 account the first text/plain part or the first text/html part
160 converted to text/plain with our new -[NSString htmlToText]
163 * UI/MailerUI/UIxMailActions.m ([-replyToAllAction]): invoke
164 "replyToAll:" with YES as parameter instead of NO.
166 2007-10-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
168 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
169 -davContentType]): ignore any possible parameter taken from the
170 mime-info of the body part.
172 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
173 -lastFirstMessageNumber]): new accessor that returns the first
174 message number of the last series of messages.
175 ([UIxMailListView -fetchKeys]): request the bodystructure for each
177 ([UIxMailListView -hasMessageAttachment]): extract the attachment
178 information from the message bodystructure.
180 2007-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
182 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
183 -GETAction:]): use the "application/octet-stream" mime type for
184 elements of type "application/x-xpinstall" to avoid confusing
187 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -messageCheckList])
188 ([UIxPreferences -itemMessageCheckText])
189 ([UIxPreferences -userMessageCheck])
190 ([UIxPreferences -setUserMessageCheck:newMessageCheck]): new
191 methods for handling the retrieval of new messages automatically.
193 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -messageCheck]): new method
194 that returns the interval of time between automatic message
197 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
198 -defaultAction]): now expunges the last folder marked for expunge.
200 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
201 -trashInContext:_ctx]): now marks the container folder for
204 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
205 -markForExpunge]): new method that marks the folder for the next
206 automatic expunge operation in the user settings.
207 ([SOGoMailFolder -expungeLastMarkedFolder]): new methods that
208 takes the last folder marked for expunge, expunges it and removes
209 it from the user settings, if it exists.
211 2007-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
213 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
214 -messageSubjectCellStyleClass]): added support for replied,
215 forwarded, forwarded and replied mails.
217 * SoObjects/Mailer/NSData+Mail.m ([NSData
218 -bodyDataFromEncoding:encoding]): new utility method that decodes
219 the NSData instance properly depending on the encoding string
222 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
223 -fetchFileAttachmentKeys]): fetch the attachment encoding as well.
225 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
226 -stringForData:_datapartInfo:_info]): simplified by invoking
227 -bodyDataFromEncoding: from our new NSData category methods.
229 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
230 -fetchMailForEditing:sourceMail]): work-around a bug in SOPE-mime
231 where only the body part of the first of the keys fetched was
232 returned. Also decodes the body parts properly following their
235 * SoObjects/Mailer/NSData+Mail.[hm]: new extension module that
236 extends the NSData class with utility methods useful for handling
239 2007-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
241 * SoObjects/SOGo/NSArray+Utilities.m
242 ([NSArray -stringsWithFormat:format]): replace instances of NSNull
245 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
246 -keysWithFormat:keyFormat]): replace instances of NSNull with
249 * SoObjects/Contacts/SOGoContactLDAPFolder.m: if "displayName" is
250 empty, use "c_cn" instead.
252 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
253 ([SOGoMailAccount -draftsFolderInContext:_ctx])
254 ([SOGoMailAccount -sentFolderInContext:_ctx]): no longer make use
255 of the "SOGoSpecialFoldersInRoot" user defaults. The folders will
256 no always be specified from the root instead of sometimes from the
259 2007-10-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
261 * UI/Common/UIxPageFrame.m ([UIxPageFrame -commonLocalizableStrings])
262 ([UIxPageFrame -productLocalizableStrings]): invoke the new
263 +[SOGoUser language] method if the user is nil.
265 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +language]): new method
266 that returns any generically-found language.
267 ([SoUser -language]): modified to call the above.
268 ([SOGoUser -language]): modified to call the above if the user
269 language has a null length.
271 * SoObjects/Contacts/SOGoContactLDIFEntry.m ([SOGoContactLDIFEntry
272 -davEntityTag]): modified to return the "hash" of the vCard string.
274 * UI/MailerUI/UIxMailActions.m ([UIxMailActions
275 -removeAllLabelsAction]): new method that removes all label flags
276 from the associated message.
277 ([UIxMailActions -addLabel1Action]
278 [UIxMailActions -addLabel2Action]
279 [UIxMailActions -addLabel3Action
280 [UIxMailActions -addLabel4Action]
281 [UIxMailActions -addLabel5Action]): new methods that adds label
282 flags to the associated message.
283 ([UIxMailActions -removeLabel1Action]
284 [UIxMailActions -removeLabel2Action]
285 [UIxMailActions -removeLabel3Action
286 [UIxMailActions -removeLabel4Action]
287 [UIxMailActions -removeLabel5Action]): new methods that removes
288 label flags from the associated message.
290 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -msgLabels]):
291 new accessor that returns the labels associated with the message.
293 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
294 -allFolderPaths]): new method that returns all the paths of all
295 the subfolders of the folder object.
296 ([SOGoMailFolder -allFolderURLs]): new method replacing
299 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
300 -aclsForUser:uid]): object inherits the 'SOGoRole_ObjectEditor'
301 role from its parent folder.
303 2007-10-19 Francis Lachapelle <flachapelle@inverse.ca>
305 * SoObjects/SOGo/SOGoUser.m
306 ([SOGoUser -rolesForObject:objectinContext:context]): allow
307 multiple super usernames to be defined. The user default
308 SOGoSuperUsername is renamed SOGoSuperUsernames and must be
311 2007-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
313 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
314 -userInContext:]): override the super method by returning
315 anonymous if the super returns nil.
317 * UI/Common/UIxPageFrame.m ([UIxPageFrame
318 -productLocalizableStrings]): new method that returns the
319 product-specific translation dictionary as a JSON hash.
320 ([UIxPageFrame -commonLocalizableStrings]): same as above but for
321 the "Common" framework.
322 ([UIxPageFrame -setJsFiles:newJSFiles]): new setter that enables
323 the requestor components to require additional Javascript files.
324 This is useful now that all the scripts are loaded at the end of
326 ([UIxPageFrame -additionalJSFiles]): new getter related to the
329 2007-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
331 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -copyAction]):
332 implemented new web method.
334 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
335 -copyToFolderNamed:folderNameinContext:]): new method with the
336 code cut/pasted from -moveToFolderNamed:inContext:.
337 ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]):
338 modified to use the code from -copyToFolderNamed:inContext:, which
339 is common between the two actions.
341 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
342 ([SOGoMailAccount -sentFolderNameInContext:])
343 ([SOGoMailAccount -trashFolderNameInContext:]): modified to take
344 the user settings into account.
346 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -setAsDraftsFolderAction])
347 ([UIxMailFolderActions -setAsSentFolderAction])
348 ([UIxMailFolderActions -setAsTrashFolderAction]): new web methods
349 that change the purpose of the active folder to "Sent", "Drafts"
352 * UI/SOGoUI/SOGoACLAdvisory.m ([SOGoACLAdvisory -subject]):
353 returns the subject as quoted-printable.
355 * UI/SOGoUI/SOGoACLAdvisory.[hm]: added two intermediary classes:
356 SOGoACLAdditionAdvisory and SOGoACLRemovalAdvisory implementing
357 the "aclMethod" method for the subsequent language-dependent
360 * UI/SOGoUI/SOGoFolderAdvisory.m ([SOGoFolderAdvisory -subject]):
361 returns the subject as quoted-printable.
363 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
364 -dealloc]): release item, aptStartDate and aptEndDate.
366 2007-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
368 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
369 -initWithName:newNameinContainer:newContainer]): the owner of a
370 shared folder is set to "nobody" by default.
372 * UI/Common/UIxAclEditor.m ([UIxAclEditor -hasOwner]): new method
373 that returns whether the object has an owner or not.
375 2007-10-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
377 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
378 the folder even if the current user is not its owner.
380 2007-10-10 Ludovic Marcotte <ludovic@inverse.ca>
382 * We now send advisory emails when folders
383 are created / deleted.
385 * Fixed the sending of advisory emails upon
386 ACL changes on folders.
388 2007-10-10 Ludovic Marcotte <ludovic@inverse.ca>
390 * UI/Scheduler/UIxComponentEditor.m
391 Implemented event/task priority support.
393 * SoObjects/Contacts/SOGoContactGCSFolder.m
394 Added CardDAV support.
396 * SoObjects/SOGo/LDAPUserManager.m and SOGoUser.m
397 Implemented From: based on LDAP results based on
398 the MailFieldNames attribute (an array) specified
399 in every LDAP-based authentication sources.
401 * UI/MailPartViewers/UIxMailPartTextViewer.m and
402 UI/WebServerResources/MailerUI.css
403 We avoid replacing "\r\n" and "\n" with <br /> and
404 rather use CSS capabilities for proper formatting.
405 This is _WAY_ faster on very large mails.
407 2007-10-10 Francis Lachapelle <flachapelle@inverse.ca>
409 * UI/Scheduler/UIxComponentEditor.m
410 ([UIxComponentEditor -componentCalendar]): returns the calendar
411 object of the current event.
413 2007-10-05 Ludovic Marcotte <ludovic@inverse.ca>
415 * UI/WebServerResources/MailerUI.js
416 We check if at least one message is selected
417 before performing a Reply/Reply All/Forward
419 * SoObjects/Appointments/SOGoAppointmentFolder.m
420 and others - implemented support for recurring
421 events (with some known limitations right now,
422 all soon to be fixed).
424 2007-10-04 Francis Lachapelle <flachapelle@inverse.ca>
426 * Main/SOGo.m ([SOGo -isUserName:_keyinContext:_ctx]): removed
427 the constraint that a username can't start with a digit.
429 2007-10-02 Francis Lachapelle <flachapelle@inverse.ca>
431 * Moved SOPE/sope-gdl1/GDLContentStore from the default trunk
432 repository to Inverse's branch.
434 2007-09-28 Francis Lachapelle <flachapelle@inverse.ca>
436 * SoObjects/Mailer/SOGoDraftObject.m
437 ([SOGoDraftObject -isValidAttachmentName:_name]): removed
438 constraint on space in file name.
439 ([SOGoDraftObject -saveAttachment:_attachwithMetadata:metadata]):
440 now removes from file name all characters preceding a backslash.
441 This happens with IE7 because the complete attachment file path
444 2007-09-25 Francis Lachapelle <flachapelle@inverse.ca>
446 * SoObjects/Appointments/SOGoAptMailNotification.m
447 ([SOGoAptMailNotification -appointmentURL]): set personal as the
448 default calendar where to add the event.
450 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
451 activate the SOGoUIxDefaultModule user defaults.
453 2007-09-21 Francis Lachapelle <flachapelle@inverse.ca>
455 * UI/SOGoUI/UIxComponent.m
456 ([UIxComponent -shortUserNameForDisplay]): returns the string
457 "wrongusernamepassword" when authentication failed.
459 2007-09-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
461 * UI/MailPartViewers/UIxMailPartICalViewer.m
462 ([UIxMailPartICalViewer -calendarFolder]): returns the "personal"
463 entry of the Calendars parent folder.
465 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
466 -messageSubject]): new accessor method to work-around a problem
467 within SOPE where a subject could be returned as an NSData.
469 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
470 -appendPersonalSources]): make sure the value of the "c_path4" of
471 the returned rows are not NSNull, otherwise, discard them.
473 2007-09-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
475 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
476 -compare:otherFolder]): new overriden method that compares two
477 contact foldes based on their class and then transfer the control
478 to the super method in SOGoFolder.
480 * SoObjects/Contacts/SOGoContactLDAPFolder.m
481 ([SOGoContactLDAPFolder -compare:otherFolder]): new method that
482 compare two contact folders based on their class and then their
485 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -compare:otherFolder]):
486 new method for sorting folders. The folders are compared based on
487 their ownership, whether they are a main folder and finally
488 depending on their display name.
490 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
491 -pathArrayToSOGoObject]): do not reorder the paths if the third
492 element is an instance of NSNull.
494 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
495 -subFolders]): returns a sorted array using the "compare:"
498 2007-09-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
500 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
501 -calendars]): also returns the owner of the listed folders.
503 * SoObjects/Appointments/SOGoAppointmentFolder.m
504 ([-deleteEntriesWithIds:ids]): moved method into SOGoFolder.
506 * UI/Scheduler/UIxCalMainView.m ([-batchDeleteAction]): moved
507 method into UIxFolderActions.
509 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
510 -fetchFreeBusyInfosFrom:_startDateto:_endDate]): fetch the
511 freebusy info from the "personal" calendar.
513 * UI/Common/UIxParentFolderActions.m ([UIxParentFolderActions
514 -createFolderAction]): new standardized method for requesting
515 folder creations among gcs-based modules.
517 * UI/Common/UIxParentFolderActions.[hm]: new action class module.
519 * SoObjects/Appointments/SOGoAppointmentFolders.m: new class
520 module, equivalent to the SOGoParentFolder's child
521 SOGoContactFolders, but for calendars.
523 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -labelForKey:key]): new
524 method that returns translated strings for controller bundles
525 (same as what UIxComponent does for view bundles).
526 ([SOGoObject -pathArrayToSOGoObject]): new method that returns
527 the real path to a subscribed folder (if subscribed).
528 ([SOGoObject +globallyUniqueObjectId]): move method from SOGoFolder.
529 ([SOGoObject -globallyUniqueObjectId]): new instance method
530 calling its class equivalent.
532 2007-09-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
534 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage -defaultAction]): test
535 whether the user is logged in and if so, redirect to his/her
537 ([SOGoRootPage -appendToResponse:inContext:]): removed useless
540 2007-09-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
542 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
543 +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
545 ([SOGoFolder -displayName]): new method.
546 ([SOGoFolder -delete]): accept to proceed only if nameInContainer
549 * SoObjects/Contacts/SOGoContactLDAPFolder.m
550 ([SOGoContactLDAPFolder
551 +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
552 renamed from "contactFolderWithName..." for compatibility with SOGoFolder.
554 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
555 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
556 removed method, reimplemented in SOGoFolder.
557 ([SOGoContactGCSFolder -displayName]): removed method,
558 reimplemented in SOGoFolder.
559 ([-delete]): removed method, modified in SOGoFolder.
561 * SoObjects/Contacts/SOGoContactFolders.[hm]: modified class to be
562 a subclass of SOGoParentFolder.
564 * SoObjects/SOGo/SOGoParentFolder.[hm]: new class module derived
565 from SOGoContactFolders and modified to be more content-independent.
567 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -markMessageUnreadAction])
568 ([UIxMailActions -markMessageReadAction]): new methods moved from
569 UIxMailListView and adapted to invoke the client object directly,
570 since the previous versions had to to a lookup from the parent
573 * UI/MailerUI/UIxMailListView.m ([-markMessageUnreadAction]): move
574 method into UIxMailActions.
575 ([-markMessageReadAction]): same as above.
576 ([-viewAction]): removed useless method.
577 ([-javaScriptOK]): removed useless method.
578 ([-isJavaScriptRequest]): removed useless method.
579 ([-lookupActiveMessage]): removed useless method.
581 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
582 -responseWithStatus:status]): new method that returns a WOResponse
583 initialized with the specified status code.
584 ([WODirectAction -responseWith204]): new method that invokes the
585 above one with "204" as parameter.
586 ([WODirectAction -redirectToLocation:newLocation]): rewrote method
587 to make use of -responseWithStatus:.
589 * UI/SOGoUI/UIxComponent.m ([UIxComponent -responseWith204]): new
590 method that returns a WOResponse initialized with the 204 status
593 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sortedUIDs]):
594 always use a "not deleted" search qualifier along with the user
595 qualifier (if present).
597 2007-09-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
599 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
600 -contactSearchAction]): only return the records which have an
603 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
604 -trashInContext:_ctx]): no longer expunge the mailbox after
605 marking a message deleted.
606 ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]): same
609 * UI/MailerUI/UIxMailView.m ([-deleteAction]): removed method.
610 ([-trashAction]): moved method into UIxMailActions.
611 ([-moveAction]): moved method into UIxMailActions.
613 2007-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
615 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
616 ([_UIxHTMLMailContentHandler
617 -endElement:_localNamenamespace:_nsrawName:_rawName]): remove HTML
618 comments from the CSS code, do not add the CSS code to the body
619 content and remove references of body from the CSS declarations.
620 ([UIxMailPartHTMLViewer -cssContent]): new accessor method.
621 ([UIxMailPartHTMLViewer -flatContentAsString]): separated code
622 common with cssContent in a different method and invoke it only
625 * UI/MainUI/SOGoRootPage.[hm]: made a subclass of UIxComponent
626 instead of UIxPageFrame.
628 2007-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
630 * UI/MainUI/SOGoRootPage.m ([-defaultAction]): commented out.
631 ([-appendToResponse:responseinContext:ctx]): commented out.
632 ([SOGoRootPage -connectURL]): new accessor that returns the full
633 url the the "connect" method.
634 ([-connectAction]): rewrote method to return a properly formatted
635 auth. cookie based on the username and password passed as
638 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
639 set the value of the cookie to "discard" and set its expiration
642 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
643 -preprocessCredentialsInContext:context]): consider the user
644 anonymous if the cookie value is "discard".
645 ([SOGoWebAuthenticator
646 -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
647 set the expiration date of the cookie to yesterday.
649 * UI/SOGoUI/UIxComponent.m ([UIxComponent -applicationPath]):
650 returns the path to the application if the clientObject is not a
653 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder +initialize]):
654 moved the requirement of authentication from the SOGo application
657 * SoObjects/Appointments/SOGoAppointmentObject.m
658 ([SOGoAppointmentObject -saveContentString:_iCalbaseSequence:_v]):
659 check whether the new appointment object is still relevant before
660 sending a notification.
662 2007-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
664 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
665 -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
666 render the login page through the SoDefaultRenderer.
668 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage
669 -isPublicInContext:localContext]): new overriden method that
672 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
673 -currentCalendarLogin]): replace css-unsafe characters with _.
675 * UI/SOGoUI/UIxComponent.m ([UIxComponent
676 -shortUserNameForDisplay]): simplified method.
677 ([-user]): removed method since [context activeUser] is as useful.
679 2007-09-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
681 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
682 set the cookie path to "/".
684 * Main/SOGo.m ([SOGo -authenticatorInContext:_ctx]): choose the
685 authenticator based on the request handler key. "dav" returns the
686 SOGoDAVAuthenticator, anything else returns the Web authenticator.
688 * SoObjects/SOGo/SOGoDAVAuthenticator.m: renamed module from
691 * SoObjects/SOGo/SOGoWebAuthenticator.m: new class module
692 implementing a subclass of SoCookieAuthenticator, designed for
693 web-based cookie authentication of users.m
695 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
696 new method that resets the authentification cookie.
698 2007-08-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
700 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
701 -checkLogin:loginToCheckandPassword:passwordToCheck]): initialize
702 didBind to NO to make sure no false authentication is returned if
703 the bind operation is not executed.
705 2007-08-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
707 * SoObjects/Mailer/SOGoDraftObject.m: added support for the
708 "In-Reply-To" header field when replying.
710 * UI/MainUI/SOGoUserHomePage.m: add the "c_" prefix to the quick
711 table field names that are queried.
713 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
714 -iCalStringForFreeBusyInfos:_infosfrom:_startDateto:_endDate]):
715 add the "c_" prefix to the quick table field names that are
718 2007-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
720 * SoObjects/Appointments/SOGoAppointmentFolder.m
721 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): add
722 "personal" to the ocs path of the appointment folder.
724 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
725 -flatContentAsString]): use latin1 when the encoding is not
726 specified, and to reencode data chunk which were not correctly
727 decoded with the original charset.
729 * SoObjects/Appointments/SOGoAppointmentFolder.m ([SOGoAppointmentFolder -aclUsersForObjectAtPath:objectPathArray])
730 ([SOGoAppointmentFolder -aclsForUser:uidforObjectAtPath:objectPathArray])
731 ([SOGoAppointmentFolder -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray])
732 ([SOGoAppointmentFolder
733 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]):
734 override those methods to use the "personal" additional directory.
736 * SoObjects/SOGo/SOGoUserFolder.m ([-ocsPrivateCalendarPath]):
737 append "/personal" to the calendar path to simulate a single
738 calendar in a choice of many.
740 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
741 -lookupName:_keyinContext:acquire:_acquire]): moved the lookup
742 methods back here. Moved the folder existence check here, and do
743 it on self only when the lookup happens for a non-folder object.
744 This permits to accept entries for folders with parents who
747 2007-08-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
749 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
750 -shouldTakeValuesFromRequest:requestinContext:context]): same as
753 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
754 -shouldTakeValuesFromRequest:requestinContext:context]):
755 redesigned method since any method called can be received from a
756 POST or a GET. Instead we check the method call itself and we
757 accept only if it has the "save" prefix.
759 * SoObjects/Appointments/SOGoAptMailNotification.m
760 ([SOGoAptMailNotification -getSubject]): returns the subject an a
761 quoted-printable encoded string, if needed.
763 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
764 -asQPSubjectString:encoding]): moved method into
765 NSString+Utilities.m.
767 2007-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
769 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
770 -messageForwardingList])
771 ([UIxPreferences -itemMessageForwardingText])D
772 ([UIxPreferences -userMessageForwarding])
773 ([UIxPreferences -setUserMessageForwarding:newMessageForwarding]):
774 new template methods for manage the user preference regarding
777 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -language]): change the
778 algorithm to return, in order, the user's defined language or the
779 first browser language or, finally, the default language.
780 ([SOGoUser -messageForwarding]): new method that returns the user
781 preference for message forwarding: "inline" or "attached",
782 defaulting to "attached".
784 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
785 -contentForInlineForward]): new method that returns the content of
786 the message for inline forwarding based on the SOGoMailForward
789 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
790 -fetchMailForForwarding:sourceMail]): check the user preference
791 for message forwarding and compose inline forwarded messages if required.
793 * SoObjects/Appointments/SOGoCalendarComponent.m
794 ([SOGoCalendarComponent
795 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
796 now use a template based on the language returned from the
799 * SoObjects/Mailer/SOGoMailEnglishForward.m: new module containing
800 a subclass of SOGoMailForward for English locale.
802 * SoObjects/Mailer/SOGoMailFrenchForward.m: new module containing
803 a subclass of SOGoMailForward for French locale.
805 * SoObjects/Mailer/SOGoMailForward.[hm]: new module class that
806 helps build template for inline forwarded messages.
808 2007-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
810 * UI/SOGoElements/SOGoIEConditional.m: new extension module class
811 to handle "<var:if-ie>" template tags.
813 * UI/SOGoElements: new extension bundle containing sogo-specific
816 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
817 -takeValuesFromRequest:_rqinContext:_ctx]): save the category
818 selected in the dialog.
819 ([UIxComponentEditor -setComponent:newComponent]): retrieve the
820 first category, if ever, of the calendar entity.
822 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
823 -composeAction]): restored method since it is needed by the
826 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
827 -composeAction]): the address fields should be arrays and not
830 * UI/Common/UIxPageFrame.m ([UIxPageFrame -buildDate]): new method
831 that returns the build date of SOGo in the template.
833 2007-08-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
835 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
836 -_flattenedRecords:records]): when the c_cn field is empty,
837 returns set a formatted string with the concatenation of
838 c_givenname and c_sn as the displayName.
840 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
841 -isValidMailAccountName:_key]): prevent unknown accounts from
844 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
845 -pathToAttachmentObject]): we no longer need the filename
846 extension for SoLookup...
848 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
849 -lookupName:_keyinContext:_ctxacquire:_flag]): do not require the
850 filename to have an extension, and thus accept any filename.
852 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
853 -currentCName]): new method that returns the c_name of the
854 contact, correctly escaped to be passed by url afterwards.
856 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
857 ([UIxMailPartHTMLViewer -flatContentAsString]): pass the NSData
858 instance of [self decodedFlatContent] instead of the buggy
859 NSString from [super flatContentAsString] to the parser.
861 2007-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
863 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -deleteAction]):
864 new category method to reponds to the "delete" web command on
866 ([UIxMailActions -deleteAttachmentAction]): new category method to
867 reponds to the "deleteAttachment" web command on drafts, taking
868 the "filename" url parameter into account.
870 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
871 -contentForEditing]): new method that retrieve the editable mail
873 ([SOGoMailObject -fetchFileAttachmentKeys]): new method that
874 returns the body keys for attached files (parts with a "filename"
877 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
878 -asQPSubjectString:encoding]): do not change the string if the
879 encoded string has the same length (which means it is already
881 ([SOGoDraftObject -fetchMailForEditing:sourceMail]): new method
882 that retrieve a draft along with its attachments for editing.
883 ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): no longer
884 choke if the "to" header field is empty.
885 ([SOGoDraftObject -delete]): new method to delete the draft folder
886 whenever operations are done.
888 2007-08-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
890 * UI/MailerUI/UIxMailEditor.m ([-patchFlagsInStore]): removed
891 useless stub method, of which the intention was implemented in
893 ([-lookupSentFolderUsingAccount]): removed obsolete method.
894 ([-selectedMailIdentity]): removed obsolete method.
895 ([-lookupSentFolderUsingFrom]): removed obsolete method.
896 ([-storeMailInSentFolder:_path]): removed obsolete method, of
897 which the mechanism has been put in -[SOGoDraftObject sendMail]
899 ([UIxMailEditor -_saveFormInfo], [UIxMailEditor -defaultAction])
900 ([UIxMailEditor -saveAction], [UIxMailEditor -sendAction]):
901 adapted algorithms to the new SOGoDraftObject methods.
902 ([-deleteAction]): removed method since local draft objects cannot
903 be removed by the user.
905 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
906 -expungeAction]): new method replacing the one previously found in
908 ([UIxMailFolderActions -createFolderAction])
909 ([UIxMailFolderActions -renameFolderAction])
910 ([UIxMailFolderActions -deleteFolderAction])
911 ([UIxMailFolderActions -emptyTrashAction])
912 ([UIxMailFolderActions -subscribeAction])
913 ([UIxMailFolderActions -unsubscribeAction]): error situations
914 should have http return code 500 instead of 403.
916 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
917 -composeAction]): new method replacing the one previously in
920 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
921 -imap4URLString]): removed overriden method (see below).
923 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -aclUsers]):
924 cache the mailbox acl.
925 ([SOGoMailFolder -aclsForUser:uid]): cache the mailbox acl.
926 ([SOGoMailFolder -setRoles:rolesforUser:uid]): reset the mailbox
928 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): modified to use
929 the new method of determining the users mail accounts.
931 * SoObjects/Mailer/SOGoMailBaseObject.m ([-imap4URLString]): no
932 longer adds a "/" at the end of the string (the default for
933 folders), therefore this will be overriden in SOGoMailFolder
934 rather than in SOGoMailObject.
936 * UI/MailerUI/UIxMailListView.m ([-expungeAction]): removed
937 method, moved into the new UIxMailActions module class.
939 * SoObjects/Mailer/SOGoDraftsFolder.m ([SOGoDraftsFolder
940 -newDraft]): new method that returns a new SOGoDraftObject
941 instance with a unique filename based on the current timestamp and
942 the "newDraft" prefix.
944 -lookupName:nameinContext:localContextacquire:acquire]): overriden
945 method by detecting local drafts with their "newDraft" prefix.
946 ([SOGoDraftsFolder -isInDraftsFolder]): returns YES.
948 * SoObjects/Mailer/SOGoDraftsFolder.[hm]: rewrote class module
949 from scratch by making it a subclass of SOGoMailFolder.
951 * UI/MailerUI/UIxMailReplyAction.m: removed obsolete class
954 * UI/MailerUI/UIxMailForwardAction.m: removed obsolete class
957 * UI/MailerUI/UIxMailEditorAction.[hm]: removed obsolete class
960 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -init]):
961 new method, initializing the new ivars: IMAP4ID, headers, text,
962 sourceURL and sourceFlag.
963 ([-spoolFileManager], [SOGoDraftObject -userSpoolFolderPath])
964 ([-_ensureUserSpoolFolderPath])
965 ([-saveMimeMessageToTemporaryFileWithHeaders:])
966 ([SOGoDraftObject -mimeMessageWithHeaders:_headers])
967 ([-deleteTemporaryMessageFile:], [-delete], [-content])
968 ([-GETAction:_ctx], [-DELETEAction:_ctx], [-fetchParts:])
969 ([-uid], [-flags], [-size], [-envelope]): removed methods.
970 ([SOGoDraftObject -storeInfo]): rewrote method to take the new
972 ([SOGoDraftObject -setSourceURL:newSourceURL])
973 ([SOGoDraftObject -setSourceFlag:newSourceFlag]): new accessor
974 methods to store the url of the original message between accesses
975 so that, depending on the action taken (forward or reply), the
976 correct flag can be given.
977 ([SOGoDraftObject -setIMAP4ID:]): new accessor method that sets
978 the imap4 id that is returned for the message whenever it is saved
979 into the drafts folder.
980 ([SOGoDraftObject -save]): new method that takes in charge the
981 saving of the message in the IMAP drafts folder.
982 ([SOGoDraftObject -fetchMailForReplying:sourceMailtoAll:toAll]):
983 new method that fills the original data of the new message with
984 the reply content of the original message.
985 ([SOGoDraftObject -fetchMailForForwarding:sourceMail]): same as
986 above for message forwarding.
987 ([-spoolFileManager]): removed useless method (only returned the
988 default filemanager...)
989 ([SOGoDraftObject -mimeMessageAsData]): new method that returns
990 the resulting message as an NSData chunk.
992 * SoObjects/Mailer/SOGoMailObject+Draft.m: new extension module
993 containing a rewrite of the mail action methods found in
994 UI/Mailer/, that needed to be put in the SOGoMailObject class.
995 ([SOGoMailObject -subjectForReply]): new method that returns a
996 subject suitable for replies.
997 ([SOGoMailObject -contentForReply]): new method that returns the
998 textual content of an email, quoted for replying.
999 ([SOGoMailObject -filenameForForward]): new method that returns
1000 the name of the filename that should contain the forwarded
1001 message, based on its subject.
1002 ([SOGoMailObject -subjectForForward]): explicit.
1004 2007-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1006 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1007 -mailAccounts]): rewrote method to return the name of the mail
1008 accounts now available with the -[SOGoUser mailAccounts] method.
1009 ([UIxMailMainFrame -showLinkBanner]): removed method.
1010 ([UIxMailMainFrame -bannerToolbarStyle]): removed method.
1011 ([UIxMailMainFrame -bannerConsumeStyle]): removed method.
1012 ([UIxMailMainFrame -rootURL]): removed method.
1013 ([UIxMailMainFrame -userRootURL]): removed method.
1014 ([UIxMailMainFrame -calendarRootURL]): removed method.
1015 ([UIxMailMainFrame -contactsRootURL]): removed method.
1016 ([UIxMailMainFrame -hasErrorText])
1017 ([UIxMailMainFrame -errorText])
1018 ([UIxMailMainFrame -errorAlertJavaScript]): removed methods.
1019 ([-composeAction]): removed method. Now provided by
1020 UIxMailAccountActions.
1021 ([UIxMailMainFrame -setHideFolderTree:_flag]): removed method.
1022 ([UIxMailMainFrame -hideFolderTree]): removed method.
1023 ([UIxMailMainFrame -treeRootClassName]): removed method.
1024 ([UIxMailMainFrame +initialize]): removed method.
1025 SOGoMailTreeRootClass userdefaults will no longer have any effect.
1027 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
1028 -redirectToLocation:newLocation]): new method that implements the
1029 same functionality as WOComponent.
1031 * UI/Common/WODirectAction+SOGo.[hm]: new class extension module.
1033 * UI/MailerUI/UIxMailView.m ([UIxMailView -mailIsDraft]): new
1034 method that returns whether the current mail is store in the
1035 drafts folder hierarchy.
1037 * SoObjects/SOGo/SOGoUser.m ([-fullEmail]): removed method.
1038 ([-primaryEmail]): removed method.
1039 ([SOGoUser -primaryIMAP4AccountString]): removed method.
1040 ([SOGoUser -mailAccounts]): new method that returns an array
1041 containing description dictionaries for all the user mail
1042 accounts. Each account also contain the user's identities for that
1044 ([SOGoUser -allIdentities]): new utility method that returns all
1045 the user identities on all accounts.
1046 ([SOGoUser -primaryIdentity]): new method return the first
1047 identity of the first account.
1049 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]):
1051 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1052 -isInDraftsFolder]): returns NO.
1053 ([-preferredIdentity]): removed method, replaced with -[SOGoUser
1055 ([SOGoMailAccount -draftsFolderInContext:_ctx]): new method.
1057 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1058 -isInDraftsFolder]): new method that detects if self is contained
1059 by the drafts folder by calling itself on the container object.
1061 * SoObjects/Mailer/SOGoMailAccounts.m ([-fetchAllIdentities]):
1063 ([-fetchIdentitiesWithEmitterPermissions]): removed method.
1064 ([SOGoMailAccounts -toManyRelationshipKeys]): rewrote method to
1065 return the name of the mail accounts now available with the
1066 -[SOGoUser mailAccounts] method.
1068 * SoObjects/Mailer/SOGoUser+Mail.[hm]: removed useless class
1071 * SoObjects/Mailer/SOGoMailIdentity.[hm]: removed useless class
1074 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
1075 -keysWithFormat:format]): method that forward the method of the
1076 same name to each member of the array, considering they all are
1077 instances of NSDictionary.
1078 ([NSArray -objectsForKey:key]): same principle as above.
1079 ([NSArray -flattenedArray]): new method that transforms an array
1080 of arrays into a single array containing all the elements of the
1083 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
1084 -keysWithFormat:keyFormat]): new method inspired by the python
1085 string formatting system and which replaces occurences of "%{key}"
1086 by the corresponding keys.
1088 2007-08-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1090 * Main/SOGo.m ([SOGo -run]): check for channel-type specific
1091 sql script before the generic one when initializing mandatory
1094 2007-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1096 * SoObjects/SOGo/NSString+Utilities.m ([NSString
1097 -pureEMailAddress]): new utility method inspired by the
1098 "_rawSender" private method in SOGoDraftObject, which it now
1101 * SoObjects/SOGo/SOGoMailer.m: new abstraction class module that
1102 provides a common API for sending emails, no matter what the
1105 2007-08-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1107 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1108 -quotasAction]): invoke "relativeImap4Name" instead of
1109 "nameInContainer" since the latter also returns the "folder"
1112 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1113 -listMailboxesAction]): declare the output as text/plain in UTF-8.
1115 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1116 -deleteFolderAction]): fixed the url of the destination folder.
1118 * Main/SOGo.m ([SOGo +initialize]): show the build date and
1119 hostname at startup.
1121 2007-08-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1123 * SoObjects/Appointments/SOGoCalendarComponent.m
1124 ([SOGoCalendarComponent
1125 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
1126 set the mail date to the current date string returned by our
1127 rfc822DateString extension method.
1129 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1130 -_gcsFoldersFromFolder:): ignore the personal folders who are
1131 returned but don't really exist.
1133 2007-08-02 Francis Lachapelle <flachapelle@inverse.ca>
1135 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView _responseForResults:]):
1136 has to return only one element.
1138 2007-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1140 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
1141 -content]): new method returning the decoded content of the
1142 corresponding attachment as an NSData instance.
1143 ([UIxMailPartViewer -filename]): if the "filename" parameter of
1144 the metadata parameterList is empty, try to find out the filename
1145 from the "disposition" metadata returned with the BODYSTRUCTURE
1148 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1149 -composeAction]): prefix the INBOX folder with "folder".
1151 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailBaseObject
1152 -relativeImap4Name]): return nameInContainer stripped from its
1153 first 6 characters since all folder names are prefixed with
1156 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1157 -imap4URLString]): invoke -relativeImap4Name instead of
1158 "nameInContainer" since the former will return the fixed IMAP4
1159 foldername and the latter the SoObject name.
1161 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1162 +initialize]): we now fetch the "BODYSTRUCTURE" key instead of "BODY".
1164 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderNameInContext:])
1165 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
1166 ([SOGoMailAccount -sieveFolderNameInContext:_ctx])
1167 ([SOGoMailAccount -sentFolderNameInContext:])
1168 ([SOGoMailAccount -trashFolderNameInContext:]): prefix the folder
1169 names with "folder".
1170 ([SOGoMailAccount -inboxFolderInContext:_ctx])
1171 ([SOGoMailAccount -sentFolderInContext:_ctx])
1172 ([SOGoMailAccount -trashFolderInContext:_ctx]): no longer prefix
1173 the folder names with "folder" since they are prefixed earlier.
1175 2007-07-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1177 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
1178 ([-sentFolderInContext:], [-trashFolderInContext:]): folder keys
1179 all starts with "folder".
1181 * SoObjects/SOGo/SOGoObject.m ([SOGoObject +initialize]): no
1182 longer declare security info from here.
1184 * SoObjects/Mailer/SOGoMailFolder.m
1185 ([-isMessageKey:_keyinContext:_ctx]): removed useless method.
1186 ([SOGoMailFolder -lookupName:_keyinContext:acquire:_acquire]):
1187 folder names now always start with "folder".
1189 * SoObjects/Mailer/SOGoMailAccount.m
1190 ([-lookupName:inContext:acquire:]): folder names now always start
1193 2007-07-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1195 * UI/MailerUI/UIxMailForwardAction.m ([UIxMailForwardAction
1196 -forwardAction]): adapted to the new saveAttachment:withMetadata:
1199 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -saveAction]): added
1200 code to save the attached filenames with the filename returned by
1201 the web server as well as their mime types.
1203 * UI/MailPartViewers/UIxMailPartMessageViewer.m ([UIxMailPartMessageViewer -fromAddresses])
1204 ([UIxMailPartMessageViewer -toAddresses])
1205 ([UIxMailPartMessageViewer -ccAddresses]): new methods returning
1206 the corresponding fields separated with a ", " (if needed).
1208 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1209 -saveAttachment:_attachwithMetadata:metadata]): new method
1210 replacing -saveAttachment:withName: and which takes a dictionary
1211 as parameter with the filename and the mime type of the
1213 The mimetype is then saved in a hidden text file.
1214 ([SOGoDraftObject -contentTypeForAttachmentWithName:]): if exists,
1215 take the mime type from the hidden text file related to the
1218 * SoObjects/Contacts/SOGoContactGCSFolder.m ()
1219 ([SOGoContactGCSFolder
1220 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
1221 return records if the db records are > 0 and not just > 1...
1223 2007-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1225 * UI/Contacts/UIxContactsListView.m ([-displayName]): removed
1227 ([UIxContactsListView -defaultSortKey]): changed to "displayName".
1229 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1230 ([SOGoContactLDAPFolder
1231 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
1232 translate the returned records to a normalized form.
1234 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1235 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
1236 translate the returned records to a normalized form.
1238 * UI/Scheduler/UIxCalListingActions.m,
1239 UI/Contacts/UIxContactsListView.m, SoObjects/SOGo/SOGoUser.m,
1240 SoObjects/SOGo/AgenorUserDefaults.m,
1241 SoObjects/Contacts/SOGoContactGCSFolder.m,
1242 SoObjects/Appointments/SOGoAppointmentFolder.m,
1243 OGoContentStore/OCSiCalFieldExtractor.m,
1244 OGoContentStore/OCSContactFieldExtractor.m: prefixed all quick
1245 table fields with "c_".
1247 2007-07-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1249 * SoObjects/SOGo/LDAPSource.m ([LDAPSource +initialize]): query
1250 the values for SOGoLDAPQueryLimit and SOGoLDAPQueryTimeout from
1251 the application settings. If set, both limit will influence the
1252 maximum size of the resultsets and the time taken to solve them.
1253 ([LDAPSource -_initLDAPConnection]): initialize the limits.
1255 2007-07-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1257 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder -davNamespaces]): added new overriden
1258 method that declares the DAV namespace related to CardDAV.
1259 ([SOGoContactGCSFolder -davComplianceClassesInContext:]): new
1260 method that declares the "access-control" and "addressbook-access"
1261 classes to the list.
1263 * SoObjects/Appointments/SOGoAppointmentFolder.m
1264 ([-lookupActionForCalDAVMethod:]): removed method.
1265 ([SOGoAppointmentFolder -davNamespaces]): added new overriden
1266 method that declares the DAV namespace related to CalDAV.
1268 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davNamespaces]): new
1269 optional method for subclasses which handle specific extensions to
1270 the DAV protocol: CardDAV or CalDAV.
1272 -lookupName:lookupNameinContext:localContextacquire:acquire]):
1273 new overriden method that handles dav invocations for extensions
1274 to DAV by returning an appropriate SoSelectorInvocation.
1276 * SoObjects/SOGo/NSString+Utilities.m ([NSString
1277 -asDavInvocation]): new method returning a dictionary with a "ns"
1278 key representing the dav namespace and a "method" key representing
1279 the dav method name of the request.
1281 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
1282 +initialize]): scan the value of SOGoUIxUserCanChangePassword.
1284 ([UIxPreferences -shouldDisplayPasswordChange]): new template
1285 method that returns the value of SOGoUIxUserCanChangePassword.
1287 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
1288 scan the value of SOGoUIxDefaultModule. If not set, the default
1289 module defaults to "Calendar".
1290 ([SOGoUserHomePage -defaultAction]): redirect the user to the
1291 value of "SOGoUIxDefaultModule".
1293 2007-07-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1295 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1296 -contactInfos]): cache the results to avoid multiple invocations.
1298 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1299 ([SOGoContactLDAPFolder -toOneRelationshipKeys]): check whether we
1300 really should return something or if we fake to return nil...
1302 2007-07-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1304 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): set
1305 acceptAnyUser to YES only when the SOGoAuthentificationMethod user
1306 default is set to "bypass".
1308 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
1309 -checkLogin:_loginpassword:_pwd]): accepts unverified connections
1310 when authMethod is set to "bypass" from now on. This would avoid a
1311 security concern with a default installation of SOGo.
1312 AuthentificationMethod is now prefixed with "SOGo" for better
1315 2007-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1317 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1318 -quotasAction]): new method that returns a json representation of
1321 2007-07-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1323 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1324 -imap4URL]): rewrote method to support accented mailbox names.
1325 ([SOGoMailBaseObject imap4Password]): rewrote to simply use
1326 SOGoAuthenticator's passwordInContext:.
1328 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
1329 -takeValuesFromRequest:_rqinContext:_ctx]): explicitly set the
1330 start and due dates to nil if hasStartDate and hasDueDate are
1333 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
1334 -passwordInContext:context]): made method public.
1336 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
1337 -extractQuickFieldsFromTodo:_task]): set "isallday" and "isopaque"
1338 to false to avoid a null violation.
1340 2007-07-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1342 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1343 -contentAsString]): returns the message encoded in ISO Latin 1
1346 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): read the
1347 SOGoSuperUsername user defaults.
1348 ([SOGoUser -initWithLogin:newLoginroles:newRoles]): simplified
1350 ([SOGoUser -rolesForObject:objectinContext:context]): if the
1351 current user is the superuser, grant him/her the "owner" role.
1353 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
1354 the folder only if the current user is the owner of the future
1357 * SoObjects/Appointments/SOGoCalendarComponent.m
1358 ([SOGoCalendarComponent -contentAsString]): we return the content
1359 based on the permissions returned by the security manager instead
1360 of by looking at the user roles.
1362 * SoObjects/Appointments/SOGoAppointmentFolder.m
1363 ([SOGoAppointmentFolder -calendarFolders]): read the calendar
1364 folders of the user to whom this folder belongs instead of the
1365 active user. This way, a delegate user will be able to have the
1366 same view that the original user has if he connects from his user
1369 * Main/SOGo.m ([SOGo -lookupUser:_keyinContext:]): check if the
1370 user exists before creating the SOGoUserFolder instance. If not,
1373 * UI/MailerUI/UIxMailSourceView.[hm]: new class module designed to
1374 return the message source code in plain text.
1376 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1377 -contentAsString]): returns the message encoded in UTF8.
1379 2007-07-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1381 * OGoContentStore/iCalRepeatableEntityObject+OCS.m
1382 ([iCalRepeatableEntityObject -cycleInfo]): no longer take the
1383 leading tagname into account when serializing the element values.
1385 * Main/SOGoProductLoader.m: only load bundle directories ending
1386 with the "SOGo" extension.
1388 * Main/SOGo.m ([SOGo
1389 -_checkTableWithCM:cmtableURL:urlandType:tableType]): empty the
1390 result set if the query has caused no exception. Otherwise we get
1391 an "evaluation is in progress exception".
1393 2007-06-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1395 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
1396 -generateSQLForInsert]): initialize error to nil before the
1397 serialization. Otherwise the method can get confused if it ever is
1398 initialized to something else.
1400 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
1401 -folderIsMandatory]): returns NO unconditionnally.
1403 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
1404 -appendPersonalSources]): add the "personal" folder to the list of
1405 user folders even if it doesn't exist, so that it is created when
1406 the user accesses it.
1408 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1409 -folderIsMandatory]): returns YES if nameInContainer is set to
1410 "personal", which is the default address book.
1412 * SoObjects/Appointments/SOGoAppointmentFolder.m
1413 ([SOGoAppointmentFolder -folderIsMandatory]): returns YES since
1414 users must have one Calendar folder (one and only one).
1415 ([SOGoAppointmentFolder -_privacySqlString]): unescape the
1416 escaping '\' so make the carriage return a real one. This way,
1417 PgSQL 8 won't complain about escaping the string.
1419 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): new
1420 method that create the folder if considered mandatory.
1421 ([SOGoFolder -folderIsMandatory]): new method that determines
1422 whether the folder should be created automatically or not. To be
1423 overriden by subclasses.
1425 * Main/SOGo.m ([SOGo -run]): override method and create the
1426 missing system tables if needed.
1428 2007-06-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1430 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
1431 -mailDateFormatter]): returns the user's date formatter.
1433 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject -date]):
1434 applies the user timezone to the date object before returning it.
1436 * UI/Common/UIxSortButton.m: removed useless class module.
1438 * UI/Common/UIxSortableTableHeader.m: removed useless class
1441 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1442 -contactInfos]): use the "asc" url parameter instead of "desc" to
1443 determine the ordering.
1444 ([-sortOrdering]): removed method.
1445 ([UIxContactsListView -init]): removed the "searchText" ivar.
1446 (general): the template no longer use the UIxSortableTableHeader
1449 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1450 -defaultSortKey]): default sort following the messages arrival
1451 instead of their date.
1452 ([-isSortedDescending]): removed method.
1453 ([-imap4SortOrdering]): use the "asc" url parameter instead of
1454 "desc" to determine the ordering.
1455 (general): the template no longer use the UIxSortableTableHeader
1458 2007-06-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1460 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sleep]):
1462 ([-setQualifier:_msg], [-qualifier]): removed methods.
1463 ([UIxMailListView -defaultAction]): added code to handle the
1464 search criteria and value passed as url parameters. Also, we now
1465 handle the same search criterias as Thunderbird/Icedove.
1467 2007-06-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1469 * UI/PreferencesUI/UIxJSONPreferences.m ([UIxJSONPreferences
1470 -jsonDefaultsAction]): bug fix: returns a WOResponse instance with
1471 the string instead of the string itself.
1472 ([UIxJSONPreferences -jsonSettingsAction]): same as above.
1474 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): new module
1475 bool var "acceptAnyUser" that is set when the AuthenticationMethod
1476 user default is nil.
1477 ([SOGoUser -initWithLogin:newLoginroles:newRoles]):
1478 unconditionnally returns an instance whenever acceptAnyUser is set.
1480 2007-06-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1482 * Main/sogod.m (main): prevent SOGo from running as root.
1484 2007-06-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1486 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
1487 -setCurrentPassword:newPassword]): new stub method.
1488 ([SOGoUser -dateFormatterInContext:context]): new method that
1489 returns an instance of SOGoDateFormatter configured based on the
1492 * UI/Common/UIxPageFrame.m ([UIxPageFrame
1493 -relativePreferencesPath]): new method.
1495 * UI/Scheduler/UIxComponentEditor.m ([-titleDateFormatter]):
1496 removed useless method.
1498 * SoObjects/SOGo/SOGoDateFormatter.m: rewrote class to accept
1499 different configurable formats (long and short date + time).
1501 * SoObjects/SOGo/SOGoDateFormatter.[hm]: moved from UI/SOGoUI/.
1503 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
1504 -isInternetRequest]): removed method.
1506 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
1507 -jsonRepresentation]): new method with an explicit name.
1509 * UI/PreferencesUI/product.plist: new bundle that provides a web
1510 ui for handling user defaults.
1512 * UI/Scheduler/UIxTaskView.[hm]: removed unused module.
1514 * UI/Scheduler/UIxAppointmentView.[hm]: removed unused module.
1516 * SoObjects/SOGo/WOContext+Agenor.[hm]: removed unused module.
1518 2007-06-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1520 * SoObjects/SOGo/SOGoLRUCache.m: removed unused module.
1522 2007-06-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1524 * UI/Scheduler/NSArray+Scheduler.m ([NSArray
1525 -compareEventsAscending:otherEvent]): no longer use compare: on
1526 the time objects since one of them could be an NSNull, which
1527 crashes when comparing with anything.
1529 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1530 -eventsListAction]): sort events from here.
1531 ([UIxCalListingActions -tasksListAction]): sort tasks from here.
1533 * SoObjects/SOGo/NSObject+AptComparison.[hm]: removed category
1534 module, replaced with NSArray+Scheduler in UI/SchedulerUI/.
1536 * SoObjects/Appointments/SOGoAppointmentFolder.m
1537 ([SOGoAppointmentFolder
1538 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]):
1539 no longer sort elements from here.
1541 2007-06-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1543 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1544 -aclsForUser:uid]): implemented method by forwarding the request
1545 to the container. This fixes a bug where users could no longer
1546 read emails from shared folders.
1548 * SoObjects/Appointments/SOGoCalendarComponent.m
1549 ([SOGoCalendarComponent -init]): "isNew" is no longer defined
1550 here, but rather in its parent class.
1552 * UI/SOGoUI/SOGoDateFormatter.m ([SOGoDateFormatter
1553 -stringForSecondsSinceThe70s:seconds]): new utility method.
1555 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1556 -eventsListAction]): no longer reduce the end day of one day for
1557 all day events since everything has been fixed in
1558 OCSiCalFieldExtractor.
1560 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
1561 -extractQuickFieldsFromEvent:_event]): reduce the seconds/70 of
1562 the end date of all day events of 1 so that they stay on their
1565 2007-06-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1567 * UI/Scheduler/UIxCalMonthView.m: no longer retrieve appointments.
1569 * UI/Scheduler/UIxCalView.m ([-fetchCoreAppointmentsInfos]):
1571 ([-fetchCoreTasksInfos]): removed method.
1573 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1574 -init]): initialize an instance of SOGoDateFormatter.
1575 ([UIxCalListingActions -eventsListAction]): the display start and
1576 end dates are added to the listing for each event.
1578 * UI/Scheduler/UIxCalDayTable.m: no longer retrieve appointments.
1580 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1581 -isAllDay]): returns YES if the "hm" url parameter is set to
1583 ([UIxAppointmentEditor -defaultAction]): if isAllDay, the enddate
1584 is displayed one day earlier.
1586 2007-06-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1588 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1589 -_setupContext]): take the range of dates specified by the popup
1592 * UI/Scheduler/UIxCalListingActions.[hm]: new subclass of
1593 WODirectAction that returns WOResponse objects with the events or
1594 todos satisfying the parameters passed in the url.
1596 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1597 -takeValuesFromRequest:_rqinContext:_ctx]): take the new ivar
1598 "isAllDay" into account and compute the amount of days to pass to
1601 2007-06-06 Francis Lachapelle <flachapelle@inverse.ca>
1603 * SoObjects/SOGo/NSNumber+Utilities.m: initial import.
1604 * SoObjects/SOGo/NSNull+Utilities.m: initial import.
1605 * UI/Scheduler/UIxCalTasksListView.m ([WOResponse -tasksListAction]):
1606 new method that returns a json-formatted array of the visible tasks
1607 for the current user.
1609 2007-06-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1611 * SoObjects/Appointments/SOGoAppointmentObject.m: the owner of the
1612 object must be present in the list of UIDs we delete the object
1613 from. Otherwise Calendar objects having no organizer and no
1614 attendees will remain in their owner's Calendar.
1616 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1617 -_urlPreferringParticle:expectedoverThisOne:possible]): remove the
1618 first 3 elements of the path array if the url returned by
1619 baseURLInContext: returns a hostname.
1621 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1622 -_adjustOwner]): sharedFolderName and otherUsersFolderName may be
1623 nil, in which case a crash happens when calling hasPrefix:.
1624 ([SOGoMailFolder -_sharesACLs]): same as above.
1625 ([SOGoMailFolder -otherUsersPathToFolder]): same as above. If
1626 otherUsersFolderName is nil, we return nil.
1627 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): if we receive
1628 nil from [self otherUsersPathToFolder], we return nil too.
1630 2007-06-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1632 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1633 -_urlPreferringParticle:expectedoverThisOne:possible]): unescape
1634 the result of [self baseURLInContext:] to avoid a double escaping
1635 in the resulting string.
1637 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -aclsForUser:uid]): if
1638 the user has the "ObjectReader" role on the parent container, then
1639 he is granted the "ObjectViewer" role on this object. Same for
1640 "ObjectEraser", although this might change later.
1642 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1643 -toolbar]): determine the toolbar filename based on the
1644 permissions declared by the securitymanager. The role mechanism
1645 has been adjusted on a lowerlevel so we can simplify the code.
1647 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
1648 -initWithName:newNameinContainer:newContainer]): read the content
1649 directly from here. That way we can determine whether the object
1651 ([SOGoContentObject -aclsForUser:uid]): if the object is new and
1652 the ObjectCreator role is enabled, we also grant the ObjectEditor
1653 role to the current user.
1655 * UI/Common/UIxFolderActions.m ([-canAccessContentAction]):
1656 changed the method paradigm to only return HTTP code 204. Not test
1657 is done whatsoever since the security manager does it for us.
1659 * UI/Contacts/UIxContactsListView.m ([-canAccessContentAction]):
1660 removed method because the same exists in UIxFolderActions.m
1662 * UI/Contacts/UIxContactsUserRightsEditor.m
1663 ([UIxContactsUserRightsEditor
1664 -setUserCanReadObjects:userCanReadObjects]): new method.
1666 * SoObjects/SOGo/SOGoPermissions.m: added roles "FolderViewer" and
1667 "FolderEraser" and special permission "Access Object". Removed
1668 role "SOGoMailRole_MessageEraser" since "SOGoRole_ObjectEraser"
1669 can be used instead. Removed "FolderReader" since it is useless.
1671 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
1672 -vCard]): directly use the "content" ivar since it is initialized
1673 during object creation.
1675 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1676 ([SOGoContactLDAPFolder -init]): no longer handle the
1677 nameInContainer no the container ivars. They were removed because
1678 this class is a descendant of SOGoObject which already has them.
1679 ([SOGoContactLDAPFolder -davDisplayName]): new overriden method
1680 returning "displayName".
1681 ([SOGoContactLDAPFolder -isFolderish]): new overriden method
1684 * SoObjects/Appointments/SOGoCalendarComponent.m
1685 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): commented out.
1686 ([SOGoCalendarComponent -findParticipant:user]): new name for
1687 method "participant:".
1688 ([SOGoCalendarComponent -findParticipantWithUID:uid]): same as
1689 findparticipant but taking a uid string as parameter.
1690 ([SOGoCalendarComponent -contentAsString]): don't regenerate the
1691 iCalendar automatically. Instead, this is done only when the user
1692 is a "date and time viewer".
1693 ([SOGoCalendarComponent -aclsForUser:uid]): take delegation roles
1694 (modifier and responder) into account by compiling them with the
1697 * SoObjects/Contacts/SOGoContactFolder.h: removed
1698 "nameInContainer" from the list of required methods.
1700 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
1701 -davContentType]): returns "text/calendar".
1703 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1704 ([SOGoContactLDAPFolder -davResourceType]): declare the correct
1705 groupdav resource-type.
1707 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
1708 -davContentType]): same as below.
1710 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1711 -initWithName:newNameinContainer:newContainer]): new overriden
1712 method setting the custom owner directly.
1714 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
1715 -davContentType]): same as below.
1717 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1718 -davContentType]): same as below.
1720 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davContentType]):
1721 declare "httpd/unix-directory".
1723 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): declare
1724 "UTC" as fallback timezone instead of "Canada/Eastern".
1725 ([-hasEmail:email]): make use of the new NSArray's
1726 containsCaseInsensitiveString: method.
1728 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1729 -davContentType]): declare "message/rfc822" as content type.
1731 * SoObjects/Appointments/SOGoAppointmentFolder.m
1732 ([SOGoAppointmentFolder -_privacySqlString]): "owner" is now an
1734 ([SOGoAppointmentFolder
1735 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): same as above.
1736 ([-fetchContentObjectNames]): commented out method since it was
1737 usefull only for testing Funambol.
1739 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
1740 -containsCaseInsensitiveString:match]): an enhanced version of
1743 * UI/MailerUI/UIxMailView.m ([-isTrashingAllowed]): removed
1745 ([-showMarkDeletedButton]): removed useless method.
1746 ([-showTrashButton]): removed useless method.
1748 * SoObjects/Appointments/iCalEntityObject+SOGo.m
1749 ([iCalEntityObject -userIsParticipant:user]): new proxy method
1750 that invoked isParticipant on self for each possible email
1751 addresses of the user passed as parameter.
1752 ([iCalEntityObject -userIsOrganizer:user]): same as above.
1754 * SoObjects/Appointments/iCalEntityObject+SOGo.[hm]: new class
1757 * SoObjects/Appointments/SOGoAppointmentObject.m
1758 ([SOGoAppointmentObject
1759 -saveContentString:contentStringbaseVersion:baseVersion]): remove
1760 method since an event may not have an organizer.
1762 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1763 -GETAction:localContext]): clarified method. Added support for
1764 content-type (thanks to Helge Hess).
1765 ([SOGoObject -initWithName:_nameinContainer:_container]):
1766 initialize and retain the owner.
1767 ([SOGoObject -davContentType]): returns "text/plain".
1769 2007-05-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1771 * UI/Common/UIxObjectActions.m ([UIxObjectActions
1772 -addUserInAclsAction]): send an acl addition mail.
1773 ([UIxObjectActions -removeUserFromAclsAction]): send an acl
1776 * UI/Common/UIxFolderActions.m ([UIxFolderActions
1777 -_realActionWithFolderName:folderDict]): handle the possible
1778 presence of the "mail-invitation" url parameter. If present, the
1779 user will be redirected to the relevant folder.
1781 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -fullEmail]): new proxy method.
1782 ([SOGoUser -language]): new method that returns the user's
1783 preferred language, or the system's if none has been set yet.
1785 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -davURL]): new method
1786 that returns the full dav url to self.
1787 ([SOGoObject -soURL]): same as above but for the so url (Web UI).
1788 ([SOGoObject -soURLToBaseContainerForUser:uid]): new method that
1789 returns the full so url to the base of the SOGo module to which
1790 self belongs, and for the specified user.
1791 ([SOGoObject -soURLToBaseContainerForCurrentUser]): same as above
1792 but for the current user.
1793 ([SOGoObject -httpURLForAdvisoryToUser:uid]): new protocol method
1794 required by the acl advisory templates and which returns a link
1795 the target user can click to activate its new subscription.
1796 ([SOGoObject -resourceURLForAdvisoryToUser:uid]): same as above
1797 but for inclusion of the application/x-sogo-notification part,
1798 which will be handled by the Lightning enhancer plugin.
1800 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -subscribeAction])
1801 ([UIxMailFolderActions -unsubscribeAction]): new stub methods that
1802 do nothing yet since imap folder subscription is not handled yet.
1804 * SoObjects/SOGo/SOGoContentObject.m
1805 ([-hasSupportForDefaultRoles]): removed method.
1807 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
1808 -getFullEmailForUID:uid]): new method that returns the username +
1811 * SoObjects/Appointments/SOGoCalendarComponent.m
1812 ([SOGoCalendarComponent +initialize]): the default language for
1813 mail templates is now set to English.
1815 * UI/SOGoUI/SOGoACLFrenchRemovalAdvisory.[hm]: new subclass of
1816 SOGoACLAdvisory implementing the french template for user removal
1819 * UI/SOGoUI/SOGoACLFrenchAdditionAdvisory.[hm]: new subclass of
1820 SOGoACLAdvisory implementing the french template for user
1823 * UI/SOGoUI/SOGoACLEnglishRemovalAdvisory.[hm]: new subclass of
1824 SOGoACLAdvisory implementing the english template for user removal
1827 * UI/SOGoUI/SOGoACLEnglishAdditionAdvisory.[hm]: new subclass of
1828 SOGoACLAdvisory implementing the english template for user
1831 * UI/SOGoUI/SOGoACLAdvisory.[hm]: new class module implemented the
1832 supercall of all the acl advistory templates. The model is based
1833 on SOGoAptMailNotification except that the template encapsulates
1834 the message to be sent. Later, we might create a superclass common
1835 to all template-based emails.
1837 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
1838 -addRange:newRange]): new method that store a string
1839 representation of the NSRange passed as parameter.
1840 ([NSMutableArray -hasRangeIntersection:testRange]): tests whether
1841 any range contained in self intersect with the one passed as parameter.
1843 * SoObjects/SOGo/NSString+Utilities.m ([-stringByDetectingURLs]):
1844 store ranges in an array to prevent them from intersecting with
1845 each other during the passes.
1847 2007-05-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1849 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1850 -primaryFetchMailboxInfo]): useless method. Removed.
1852 2007-05-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1854 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1855 -toManyRelationshipKeys]): invoke [self subfolders].
1856 ([SOGoMailFolder -subfolders]): new method containing what used to
1857 be in toManyRelationshipKeys.
1858 ([SOGoMailFolder -subfoldersURL]): same as above but returns imap
1861 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1862 -allFolderPaths]): renamed version of "allFolderPathes", sorted by
1863 named and at the beginning of which we put the predefined folders.
1865 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1866 -emptyTrashAction]): new method inspired by a similar one from
1867 UIxMailListView, to which we added the ability to remove
1870 * UI/MailerUI/UIxMailListView.m ([-emptyTrashAction]): removed
1871 method. Replaced with a similar one in UIxMailFolderActions.
1873 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1874 -renameFolderAction]): implemented method.
1875 ([UIxMailFolderActions -deleteFolderAction]): no longer delete the
1876 specified folder. Instead, we put it in the trash folder.
1878 * UI/MailerUI/UIxMailListView.m ([-createFolderAction]): removed
1879 method, replaced with a similar method in the new
1880 UIxMailFolderAction class module.
1881 ([-deleteFolderAction]): idem.
1883 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1884 -createFolderAction]): new method implementing subfolder creation.
1885 ([UIxMailFolderActions -renameFolderAction]): new method
1886 implementing subfolder renaming (basic implementation to be
1888 ([UIxMailFolderActions -deleteFolderAction]): new method
1889 implementing folder deletion.
1891 * UI/MailerUI/UIxMailFolderActions.[hm]: new module implementing
1892 web actions related to the handling of imap folder.
1894 2007-05-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1896 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1897 -ownerInContext:localContext]): overriden method because we are an
1898 IMAP4 client and we need a bit more intelligence to deduce the
1899 owner of the current folder.
1900 ([SOGoMailFolder -aclsForUser:uid]): aclForMailboxAtURL might
1901 return an NSException so we need to be careful here to avoid a
1903 ([SOGoMailFolder -aclUsers]): aclForMailboxAtURL might return an
1904 NSException so we need to be careful here to avoid a crash.
1906 * SoObjects/Mailer/SOGoMailAccounts.m
1907 ([SOGoMailAccounts -fetchIdentitiesWithOnlyEmitterAccess:_flag])
1908 there is no longer any concept of Intranet or Internet connection
1911 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1912 -sharedFolderName]): new method.
1913 ([SOGoMailAccount -otherUsersFolderName]): new method.
1915 * UI/MailerUI/UIxMailFolderMenu.[hm]: removed module, obsoleted by
1916 new javascript code and the new UIxMailAccountActions class.
1918 * UI/MailerUI/UIxMailTree.[hm]: removed module, obsoleted by new
1919 javascript code and the new UIxMailAccountActions class.
1921 * UI/MailerUI/UIxMailTreeBlock.[hm]: removed module, obsoleted by
1922 new javascript code and the new UIxMailAccountActions class.
1924 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1925 -listMailboxesAction]): new method that returns a json-formatted
1926 tree of all the mailboxes available to the current user.
1928 * UI/MailerUI/UIxMailAccountActions.[hm]: new module implementing
1929 web actions related to the handling of mail accounts.
1931 * SoObjects/SOGo/NSDictionary+Utilities.[hm]: new extension
1934 * SoObjects/SOGo/NSObject+Utilities.m ([NSObject
1935 -jsonRepresentation]): new interface method meant to be overriden
1936 by the primitive classes.
1938 2007-05-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1940 * UI/MailerUI/UIxMailSplashView.m: removed.
1942 * SoObjects/Appointments/SOGoCalendarComponent.m
1943 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]): add
1944 the uid to the list only when the user email is recognized by the
1947 2007-05-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1949 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1950 -isDeletionAllowed]): completed method with the new imap acl api.
1952 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultAclRoles]):
1955 * SoObjects/SOGo/SOGoPermissions.m: added the new role
1956 "SOGoMailRole_MessageEraser".
1958 * UI/Common/UIxAclEditor.m ([UIxAclEditor -defaultUserID])
1959 ([UIxAclEditor -_prepareUsers]): take the new SOGoObject's
1960 "defaultUserID" method into account.
1962 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -userIsDefaultUser])
1963 ([UIxUserRightsEditor -_initRights]): take the new SOGoObject's
1964 "defaultUserID" method into account.
1966 * UI/MailerUI/UIxMailUserRightsEditor.m: added all the missing
1967 methods to support the IMAP acls mentionned in the RFC 4314,
1968 removed the ones specific to Cyrus.
1970 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultUserID]): new
1971 mandatory method for subclasses. Removed the SOGoDefaultUserID
1974 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -defaultUserID]):
1975 overriden method to return @"<default>".
1977 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
1978 -defaultUserID]): overriden method to return @"<default>".
1980 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1981 -aclsForUser:uid]): overriden method.
1982 ([SOGoMailFolder -removeAclsForUsers:users]): overriden method.
1983 ([SOGoMailFolder -setRoles:rolesforUser:uid]): overriden method.
1984 ([SOGoMailFolder -defaultUserID]): overriden method.
1985 ([SOGoMailFolder -hasSupportForDefaultRoles]): overriden method.
1987 2007-05-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1989 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
1990 -aclUsersForObjectAtPath:objectPathArray]): new method that being
1991 forwarded the calles to aclUsers for the GCS-based subclasses of
1994 * SoObjects/Mailer/SOGoMailFolder.m: removed all the previous
1995 methods that would have been used to support IMAP acls. Replaced
1996 them with the new protocol for them that has been implemented in
1997 SOGo during the last few weeks.
1999 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2000 -hasSupportForDefaultRoles]): override method by returning "YES".
2002 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
2003 -addObjectUniquely:object]): new method with an explicit name.
2005 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -aclUsers]): renamed
2006 "acl" to "aclUsers". Now designed to return only the uid of the
2007 users involved in an ACL.
2008 ([SOGoObject -hasSupportForDefaultRoles]): new method returning
2009 "NO" by default. To indicate to the acl editor that we don't want
2010 to handle a default user.
2012 * SoObjects/SOGo/SOGoPermissions.[hm]: added the
2013 SOGoRole_ObjectReader, SOGoRole_Folder*, and SOGoMailRole_*
2016 * UI/MailerUI/UIxMailUserRightsEditor.[hm]: new class module that
2017 provides a view to the IMAP acls.
2019 * UI/MailerUI/UIxMailFolderACLEditor.m: removed obsolete module.
2021 * UI/WebServerResources/MailerUI.js: replaced all invocations of
2022 addEventListener to the use of prototype's Event object. Also,
2023 configured all menus programmatically following descriptions lists
2024 containing their callbacks, or nulls, submenus id or separators.
2026 2007-05-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2028 * UI/Common/UIxObjectActions.m ([UIxObjectActions
2029 -addUserInAclsAction]): save the previous roles of the user
2030 (unlikely) or the default roles, or None instead of saving the
2031 roles that should appear the first time in the role editor when no
2032 default has been set...
2034 * SoObjects/SOGo/SOGoObject.m: defined a new constant
2035 "SOGoDefaultUserID".
2037 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2038 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]):
2039 ignore the "AuthorizedSubscriber" role and add the "None" role
2040 when no other role is found.
2042 * UI/Common/UIxAclEditor.m: added a button for the new default
2045 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
2046 -_initRights]): don't take the "None" role into account when
2047 initializing the list of current roles.
2049 * SoObjects/SOGo/SOGoPermissions.m: added a new void role
2052 2007-05-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2054 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2055 -_rangeOfURLInRange:refRange]): urls cannot end with "&" nor "=".
2056 There is no need to subscract the start from the length if a space
2057 is not found since the range has not changed either. Finally, the
2058 first character before the url might also be a tab or a cr, so we
2059 match it against the "urlAfterEndingChars" custom NSCharacterSet.
2060 ([NSString -stringByDetectingURLs]): modified to handle email
2061 addresses and add a correct "mailto:" link.
2063 2007-05-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2065 * SoObjects/Appointments/SOGoAppointmentFolder.m
2066 ([SOGoAppointmentFolder -fetchContentObjectNames]): override
2067 method to return the events in the range of 2 weeks ago up to 4
2070 * UI/MailPartViewers/UIxMailPartTextViewer.m
2071 ([UIxMailPartTextViewer -flatContentAsString]): use the new
2072 "stringByDetectingURLs" method to offer clickable urls.
2074 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2075 -stringByDetectingURLs]): this new method replaces passive URLS
2076 with active ones for HTML resolution of the text.
2078 2007-05-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2080 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
2081 -asQPSubjectString:encoding]): simplified method.
2082 The headers indicates "utf-8" again thank to our fix in
2085 * SoObjects/SOGo/SOGoObject.m: fail to build if libFoundation is
2088 2007-05-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2090 * UI/Common/UIxObjectActions.m ([UIxObjectActions
2091 -removeUserFromAclsAction]): implemented this method which was
2092 missing and is required to remove users from ACLs.
2094 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2095 -subscribeAction]): folderDict was not autoreleased, resulting in
2098 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2099 -primaryFetchProfile]): when building with libFoundation, don't
2100 use the "propertyList" method from NSString. Rather, we convert
2101 the string to an NSData instance and passit as parameter to
2102 NSDeserializer. This way, we obtain a mutable dictionary rather
2103 than an immutable one.
2105 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -bodyPartForText])
2106 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): use the
2107 constant string "contentTypeValue".
2108 contentTypeValue is now set back to iso-8859-1 since NGMime
2109 converts extracts the data in that encoding.
2111 2007-05-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2113 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
2114 -checkLogin:loginToCheckandPassword:passwordToCheck]): if a
2115 "bindFields" value is present in the user defaults, use the
2116 specified fields to find the dn of the user to bind.
2117 ([LDAPSource -allEntryIDs])
2118 ([LDAPSource -fetchContactsMatching:match])
2119 ([LDAPSource -lookupContactEntry:entryID])
2120 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]):
2121 bind and unbind the connection on each request.
2123 * UI/MailerUI/UIxMailAddressbook.m: removed obsolete module.
2125 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2126 -contactSearchAction]): simplified method to use the facilities
2127 provided by the LDAPUserManager. No longer takes care of the
2128 "ldap-only" url parameter since all requests are handled by the
2131 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2132 -primaryFetchProfile]): check that the value returned is not null
2133 before interpreting it.
2135 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
2136 -contactInfosForUserWithUIDorEmail:uid]): check that uid is not empty.
2137 ([LDAPUserManager -_fillContactMailRecords:contact]): if the
2138 system email is already present, remove it before adding it.
2140 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
2141 -checkLogin:loginToCheckandPassword:passwordToCheck]): check that
2142 loginToCheck is not empty.
2143 ([LDAPSource -fetchContactsMatching:match]): check that match is
2145 ([LDAPSource -lookupContactEntry:entryID]): check that entryID is
2147 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]): check that
2150 2007-05-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2152 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -primaryEmail]): new name
2154 ([SOGoUser -systemEmail]): returns the email formed from the
2155 username and the default mail domain.
2156 ([SOGoUser -hasEmail:email]): test whether the user has the
2157 specified email, in a case-insensitive way.
2159 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2160 -LDAPCheckLogin:_loginpassword:_pwd]): use the user manager to
2161 check login information.
2163 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2164 ([SOGoContactLDAPFolder
2165 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
2166 no longer manage LDAP connections. The requests are forwarded to
2167 the relevant LDAPSource instead.
2169 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2170 -appendSystemSources]): pass LDAPSource objects to
2171 SOGoContactLDAPFolder instances.
2173 * SoObjects/Mailer/SOGoDraftObject.m: extract the raw email
2174 address of the "from" field before sending the message. Otherwise,
2175 sending the mail won't work.
2177 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -fromEMails]):
2178 rewrote this method to request all the available email identities
2179 for the current user. Also, the from field also contains the full
2180 name of the user, not just his/her email address.
2182 * SoObjects/Appointments/SOGoCalendarComponent.m
2183 ([SOGoCalendarComponent -iCalPersonWithUID:uid]): new method taken
2184 from the previous module iCalEntityObject+Agenor.
2185 ([SOGoCalendarComponent -getUIDForICalPerson:person]): idem.
2186 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]):
2189 * SoObjects/Contacts/SOGoContactLDIFEntry.[hm]: new class module
2190 replacing the SOGoContactLDAPEntry module. It was renamed as such
2191 because it now receives a dictionary instead of an NGLdapEntry.
2192 It thus can now handle data from any source of LDIF data, not
2193 only coming from LDAP.
2195 * SoObjects/SOGo/LDAPUserManager.[hm]: new class module
2196 implementing most of what used to be the AgenorUserManager class.
2197 The difference is that users are cached in the forme of
2198 dictionaries and many sources are used. Also, it can be used to
2199 search LDAP contacts.
2201 * SoObjects/SOGo/LDAPSource.[hm]: new class module implementing
2202 the concept of "ldap source", to be used by all the classes
2203 needing access to LDAP-provided information: addressbooks and the
2204 user manager. Most the method thereing are transcriptions of
2205 methods previously found in SOGoContactLDAPFolder. It also contain
2206 utility methods for user matching and authentification.
2208 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: removed
2209 module, rendered useless by code refactoring.
2211 * SoObjects/SOGo/AgenorUserManager.[hm]: removed module, replaced
2212 with the freshly written "LDAPUserManager".
2214 2007-05-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2216 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: renamed to
2217 SOGOContactLDIFEntry.
2219 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: removed class
2220 module, obsoleted by code in SOGo/LDAPSource.[hm].
2222 2007-05-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2224 * UI/Common/UIxAclEditor.m ([UIxAclEditor -currentUserIsOwner]):
2225 new method with an explicit name.
2227 2007-05-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2229 * SoObjects/Appointments/SOGoCalendarComponent.m
2230 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): new method
2231 replacing "isOrganizer:orOwner:" by taking only one instance of
2232 SOGoUser as parameter.
2233 ([SOGoCalendarComponent -participant:user]): new method replacing
2234 the previous "isParticipant" boolean method by returning the first
2235 participant matching the user passed as parameter. This method is
2236 used so that both the regular email address and the "system email
2237 address" of the user are matched against the participants emails.
2239 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
2240 -getSystemEMailForUID:uid]): new method that returns the email
2241 formed with the user's uid and the default mail domain.
2243 * SoObjects/Appointments/SOGoCalendarComponent.m
2244 ([SOGoCalendarComponent -rolesOfUser:login]): removed method that
2245 was previously commented out.
2247 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -systemEmail]): new method
2248 forwared to [AgenorUserManager getSystemEmailForUID:].
2250 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2251 -toolbar]): method replacing the one with the same name in the
2252 task and appointment editor classes. This method makes also use of
2253 the new method "isOrganizerOrOwner:" and "participant:" in
2254 SOGoCalendarComponent.
2256 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2257 -toolbar]): removed method, replaced with a method with the same
2258 name in UIxComponentEditor.
2260 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -toolbar]): removed
2261 method, replaced with a method with the same name in
2264 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2265 -primaryFetchProfile]): the values returned from the database are
2266 converted to a put dictionary first, since the dictionary returned
2267 is actually an immutable one, which can cause a crash afterwards.
2269 2007-04-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2271 * SoObjects/SOGo/SOGoPermissions.m: added "SOGoRole_ObjectViewer"
2272 and "SOGoRole_ObjectEditor".
2274 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
2275 -prepareRightsForm]): this method is no longer mandatory.
2277 * UI/Contacts/UIxContactsUserRightsEditor.m
2278 ([UIxContactsUserRightsEditor
2279 -setUserCanCreateObjects:userCanCreateObjects]): new subclass
2280 module to handle acls related to the address books. Partial
2283 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2284 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): cache
2287 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): remove
2288 specified roles from cache.
2289 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
2290 put resulting roles in cache.
2292 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -init]): do not invoke
2293 initWithName:inContainer:. Instead, directly initialize the ivars
2294 as it is supposed to be to avoid an infinite loop whenever one of
2295 those two methods are overriden.
2297 * SoObjects/SOGo/SOGoContentObject.m ([-rolesOfUser:login]):
2300 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
2301 -aclsForUser:uid]): override method so that SOGo won't crash when
2302 loading the contact card.
2304 2007-04-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2306 * SoObjects/Appointments/SOGoAppointmentFolder.m
2307 ([SOGoAppointmentFolder -_privacySqlString]): the string for the
2308 "freebusy" special user should only require opaque elements.
2310 2007-04-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2312 * SoObjects/Appointments/SOGoAppointmentFolder.m
2313 ([SOGoAppointmentFolder -davResourceType]): fixed a problem with
2314 our double declaration where the resulting XML would be screwed.
2315 There is only one collection per namespace.
2317 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
2318 rfc822DateString]): new method that returns a string conform to
2319 rfc 822 and suitable for email headers.
2321 * SoObjects/Mailer/SOGoDraftObject.m: invoke the new
2322 "rfc822DateString" category method on the date we put in the
2325 2007-04-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2327 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -defaultAction])
2328 ([UIxUserRightsEditor -saveUserRightsAction]): new action methods
2329 which should never be overriden.
2330 ([UIxUserRightsEditor -appendRight:newRight])
2331 ([UIxUserRightsEditor -removeRight:right])
2332 ([UIxUserRightsEditor -appendExclusiveRight:newRightfromList:list])
2333 ([UIxUserRightsEditor -removeAllRightsFromList:list]): new utility
2334 methods that can be used by the subclasses.
2335 ([UIxUserRightsEditor -prepareRightsForm]): new method that should
2336 mandatorily be overriden to prepare the elements of the subclassed
2338 ([UIxUserRightsEditor -updateRights]): new method that should
2339 mandatorily be overriden to update the user rights from the
2340 elements of the subclassed form.
2342 * UI/Common/UIxAclEditor.m ([UIxAclEditor -_prepareUsers]): we
2343 check if the uid is already listed before adding it to our array.
2344 This is because the acl table can contain more than one record per
2345 user/object relationship.
2347 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2348 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): the
2349 "roles" parameter is now an NSArray instead of a string. Therefore
2350 we loop throughout the array to populate the table. All the
2351 relevant records are removed prior to the addition of the new
2354 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
2355 -aclsForUser:uid]): new override that returns nil until we add
2356 support for IMAP acls.
2358 * SoObjects/Mailer/SOGoMailAccounts.m
2359 ([SOGoMailAccounts -aclsForUser:uid]): same as below.
2361 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2362 ([SOGoContactLDAPFolder -aclsForUser:uid]): same as below.
2364 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2365 -aclsForUser:uid]): override this method which will always return
2368 * SoObjects/SOGo/SOGoPermissions.[hm]: added
2369 [Public,Private,Confidential]
2370 x[Viewer,DAndTViewer,Responder,Modifier]. Renamed
2371 SOGoRole_ORganizer to SOGoCalendarRole_Organizer. Same for
2372 ..._Participant. Removed SOGoRole_Assistant and SOGoRole_Delegate.
2374 * SoObjects/Appointments/SOGoAppointmentFolder.m
2375 ([SOGoAppointmentFolder -defaultAclRoles]): new overriden method
2376 that defines default roles for new elements in the acl.
2378 * UI/Scheduler/UIxCalUserRightsEditor.[hm]: new component class
2379 module and subclass of UIxUserRightsEditor specific to the
2380 handling of user rights on calendar folders.
2382 2007-04-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2384 * SoObjects/Appointments/SOGoAppointmentFolder.m
2385 ([SOGoAppointmentFolder -groupDavResourceType]): return both
2386 "vevent-collection" and "vtodo-collection".
2388 * UI/Common/UIxUserRightsEditor.[hm]: new template class module
2389 that implements the detailed editor of user rights per-object.
2391 2007-04-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2393 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
2394 -rolesForObject:objectinContext:context]): no longer query objects
2395 for "roleForUser:". Instead, all objects should implement
2398 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject -acls]):
2399 new method to comply with the new acl "protocol" in SOGoObject.
2400 Uses SOGoFolder's new facilities for ACLS.
2401 ([SOGoContentObject -aclsForUser:uid]): idem.
2402 ([SOGoContentObject -setRoles:rolesforUser:uid]): idem.
2403 ([SOGoContentObject -removeAclsForUsers:users]): idem.
2405 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2406 -aclsForObjectAtPath:objectPathArray]): new method generic to GCS
2407 based folders. This method is derived from the code that was in
2408 UIxAclFolder before its removal.
2409 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
2412 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): idem.
2414 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): idem.
2415 ([SOGoFolder -setRoleForUsers:uidsto:role])
2416 ([SOGoFolder -setRoleForUsers:uidsto:role]): removed method.
2418 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -acls]): stub method
2419 that requires overriding by subclasses.
2420 ([SOGoObject -aclsForUser:uid]): idem.
2421 ([SOGoObject -defaultAclRoles]): idem.
2422 ([SOGoObject -setRoles:rolesforUser:uid]): idem.
2423 ([SOGoObject -removeAclsForUsers:users]): idem.
2425 * UI/Common/UIxObjectActions.m: new module implementing the web
2426 actions common to SOGoObject and all its subclasses.
2427 ([UIxObjectActions -addUserInAclsAction]): new method that adds a
2428 user with the clientObject defaults user rights to the object's
2431 * UI/Common/UIxAclEditor.m: modified module so as to simplify it
2432 to the point where it will only list the users (and their name)
2433 associated with an object acl.
2435 * SoObjects/SOGo/SOGoAclsFolder.m: removed module because its
2436 methods have been moved into SOGoObject and SOGoFolder during a
2439 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2440 -iCalParticipantsAndResourcesStringFromQueryParameters]): removed
2441 method made useless by the programmatic handling of iCalendar
2443 ([UIxComponentEditor -iCalParticipantsStringFromQueryParameters]): idem.
2444 ([UIxComponentEditor -iCalResourcesStringFromQueryParameters]): idem.
2445 ([UIxComponentEditor -iCalStringFromQueryParameter:_qpformat:_format]): idem.
2447 * UI/WebServerResources/MailerUI.js (initDnd): enable drag and
2448 drop on all folder nodes, not just on leaves.
2450 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2451 ([SOGoContactLDAPFolder
2452 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): request field "uid" when doing a search.
2454 2007-04-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2456 * Main/SOGo.m ([SOGo +initialize]): on GNUstep, trigger some
2457 debugging facilities when the SOGoDebugObjectAllocation user
2460 2007-04-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2462 * SoObjects/SOGo/NSString+Utilities.m ([NSString -boolValue]): new
2463 method that SOGo will need with non-gnustep Foundation
2465 ([NSString -stringByAppendingPathComponent:component]): new method
2466 that SOGo will need when building with libFoundation. Method
2467 removed later since it is available from
2468 Foundation/NSPathUtilities.h.
2470 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -timeZone]): method moved
2473 * SoObjects/SOGo/SOGoObject.m: new ivar "context" that permits
2474 every subclass to access [WOApplication context] without having to
2475 invoke it more than once.
2477 * SoObjects/Appointments/SOGoCalendarComponent.m
2478 ([SOGoCalendarComponent -changeParticipationStatus:_status]):
2479 moved method from SOGoTaskObject and SOGoAppointmentObject up to
2482 * UI/Scheduler/UIxCalSelectTab.m: removed module.
2484 2007-04-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2486 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
2487 -vCard]): test the prefix of the card in a case-independent way.
2489 * OGoContentStore/OCSContactFieldExtractor.m
2490 ([OCSContactFieldExtractor
2491 -extractQuickFieldsFromContent:content]): we no longer accept
2492 records in a format other than versit vCard so we can get rid of a
2495 2007-04-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2497 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2498 -selectorComponentClass]): restored method.
2500 2007-04-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2502 * UI/Scheduler/UIxCalTasksListView.m ([UIxCalTasksListView
2503 -shouldDisplayCurrentTask]): the current task is not displayed if
2504 it is NOT completed or if the "showCompletedTasks" flag is set.
2505 The logic was inverted in Lightning and is now in SOGo too.
2507 2007-04-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2509 * UI/Contacts/UIxContactView.m ([UIxContactView -workUrl]): we
2510 want the "work" url instead of the "home".
2512 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
2513 -_saveSnapshot]): save url values from snapshot.
2514 ([UIxContactEditor -initSnapshot]): load url values from snapshot.
2516 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2517 -calendarList]): new method replacing "availableCalendars".
2519 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
2520 -calendarFolders]): we now take the list of subscribed calendar
2523 * SoObjects/Appointments/SOGoAppointmentFolder.m
2524 ([SOGoAppointmentFolder -calendarFoldersInContext:context]): new
2525 method derived from and replacing [UIxCalView calendarFolders].
2527 2007-03-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2529 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2530 -toManyRelationshipKeys]): don't put the predefined folders in the
2531 list if they are returned by the server.
2533 * UI/MailerUI/UIxMailTree.m ([UIxMailTree -flattenedNodes]): we no
2534 longer store the "flattenedBlocks" in a dictionary since the
2535 object will be deleted anyway and we don't need to put the folders
2538 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
2539 ([UIxMailPartHTMLViewer -_attachmentIds]): take the current
2540 attachment path into account when computing the part urls.
2542 2007-03-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2544 * UI/Contacts/UIxContactsListViewContainer.m
2545 ([UIxContactsListViewContainer -additionalFolders]): take the list
2546 of subscribed folders from the new property list used for the user
2547 settings. The value of its key is SubscribedFolders for the
2548 dictionary entry named "Contacts".
2550 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2551 -canAccessContentAction]): new method to override the one from
2552 UIxFoldersActions by taking into account the fact that, this time,
2553 the clientObject is an ldap folder. Removed many method that used
2554 to be related to the handling of the user selector.
2556 * UI/Scheduler/UIxCalDayView.m: commented out many unused methods
2557 to make sure they can be removed.
2559 * UI/Scheduler/UIxCalView.m ([UIxCalView -_setupCalendarFolders]):
2560 populate the calendar entries based on the user settings plist.
2562 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2563 -selectForMailerAction]): restored method.
2565 * UI/Scheduler/UIxCalendarSelector.m: new template module derived
2566 from a simplified version of the old UIxContactEditor (removed).
2568 * UI/Contacts/UIxContactsUserFolders.m: new template module for
2569 selecting users or user folders through an LDAP search of which
2570 the results are displayed as a tree.
2572 * UI/WebServerResources/UIxMailEditor.js: moved previous generic
2573 method "onContactAdd" here since the Mailer is now the only module
2574 to use it when composing emails.
2576 * UI/WebServerResources/generic.js: added code for handling the
2577 new scheme used for describing SOGo folders, common code to handle
2578 folder addition or removal.
2580 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2581 -activateFolderAction]): new method that change the "active"
2582 settings in the folder-related fields in the user settings.
2583 ([UIxFolderActions -deactivateFolderAction]): see above.
2585 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2586 -checkRightsAction]): removed method.
2588 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2589 -updateAdditionalAddressBooksAction]): removed method.
2591 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
2592 -updateCalendarsAction]): removed method.
2594 2007-03-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2596 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
2597 -checkRightsAction]): removed method.
2599 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2600 -canAccessContentAction]): new method designed to replace
2601 [UIxCalMainView checkRightsAction] in a more universal way.
2603 2007-03-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2605 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2606 -roleOfUser:uidinContext:context]): take all the subkeys into
2607 account, not only the "personal" folder.
2609 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2610 -takeValuesFromRequest:_rqinContext:_ctx]): append a "uid" field
2611 to the new components.
2613 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -userSettings]): new method
2616 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
2617 -getUserDefaultsForUID:uid]): rewrote method to use the "defaults"
2618 field of the sogo_user_profile table, where the user-customizable
2619 changes will be saved.
2620 ([AgenorUserManager -getUserSettingsForUID:uid]): new method
2621 similar to the one above, using the "settings" field where the
2622 automatic settings will be saved.
2624 * SoObjects/SOGo/AgenorUserDefaults.m: rewrote a big part of the
2625 module to bind the userdefaults to a property list contained in a
2626 specified field of the sogo_user_profile table.
2627 ([AgenorUserDefaults
2628 -initWithTableURL:tableURLuid:userIDfieldName:defaultsFieldName]):
2629 added a "fieldName" parameter.
2631 * UI/Common/UIxFolderActions.m: new module implementing web
2632 actions common to all GCS-based folders.
2634 2007-03-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2636 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -labelForDay]):
2637 put a carriage return after the day name.
2639 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
2640 -readFreeBusyAction]): restored method.
2642 2007-03-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2644 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
2645 -defaultAction]): remade module to redirect automatically to the
2648 * SoObjects/Contacts/NSDictionary+Contact.m: removed module.
2650 2007-03-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2652 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2653 -deleteAction]): new web method to delete personal addressbook
2656 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
2657 -delete]): override method to refuse the deletion of the folder if
2658 its nameInContainer is "personal".
2660 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -delete]): new method
2661 that forwards the deletion request to the folder manager.
2663 2007-03-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2665 * UI/Scheduler/UIxAttendeesEditor.m ([UIxAttendeesEditor
2666 -zoomList]): new method that returns the list of available zoom factors.
2668 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
2669 -changeStatusAction]): rewrote method.
2671 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2672 -_handleAttendeesEdition]): make sure "attendeesNames" has a
2673 length > 0 before computing the attendees. Otherwise there will be
2674 an invalid empty entry.
2675 ([UIxComponentEditor -_handleOrganizer]): new method that adds the
2676 organizer when there are attendees and remove it when the
2677 attendees are removed.
2679 2007-03-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2681 * UI/Scheduler/UIxAttendeesEditor.m): new component.
2683 * UI/Scheduler/UIxComponentEditor.m: no longer a superclass for
2684 the task and appointment editors. Now a container component
2685 handling the common elements of tasks and events.
2687 * UI/Scheduler/UIxTaskEditor.m: same as below.
2689 * UI/Scheduler/UIxAppointmentEditor.m: rewrote template. No longer
2690 a subclass of UIxComponentEditor but a subcomponent of it.
2692 * UI/Common/UIxToolbar.m ([UIxToolbar -toolbarConfig]): the
2693 toolbar can have the special value "none" to indicate there is
2694 none attached to the window.
2696 * SoObjects/Appointments/SOGoCalendarComponent.m
2697 ([SOGoCalendarComponent -isOrganizer:emailorOwner:login]): new
2699 ([SOGoCalendarComponent -isParticipant:email]): new method.
2700 ([SOGoCalendarComponent -calendar:create]): takes one parameter
2701 "create" which is a boolean indicating whether we want to create
2702 the calendar if it does not exist.
2704 2007-03-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2706 * UI/Scheduler/UIxCalMonthView.m: changed view to use divs instead
2707 of a table, the same way the dayly and weekly views have been for
2710 2007-02-09 Helge Hess <helge.hess@opengroupware.org>
2712 * SoObjects/Appointments/SOGoAppointmentFolder.m: added CalDAV
2715 * SoObjects/SOGo/SOGoUserFolder.m: added davCalendarHomeSet CalDAV
2716 property to point at the user folder
2718 2007-03-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2720 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2721 -userInContext:]): returns "SOGoUser".
2723 * SoObjects/Appointments/SOGoCalendarComponent.m
2724 ([SOGoCalendarComponent -contentAsString]): overriden method that
2725 takes the privacy into account and discard the relevant fields if
2726 needed by generating a new content string and caching it.
2727 ([SOGoCalendarComponent
2728 -saveContentString:contentStringbaseVersion:baseVersion]): if the
2729 new method above has cached a content string, release it and set
2730 it to nil so that it will have to be regenerated in the case it is
2732 ([SOGoCalendarComponent -_filterPrivateComponent:component]):
2733 discard the fields that have to be hidden when the card is
2736 * SoObjects/Appointments/SOGoAppointmentFolder.m
2737 ([SOGoAppointmentFolder
2738 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]): make
2739 sure the cards are now handled as instances of
2740 SOGoCalendarComponent instead of SOGoContentObject so that their
2741 content string is taking the privacy classifiction into account.
2742 ([SOGoAppointmentFolder -_privacySqlString]): new method that
2743 generates a query to determine what information can be given and
2744 if the card itself has to be shown.
2746 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
2747 -getICalPersonsFromValue:selectorValue]): removed useless
2748 "isAccessRestricted" method.
2750 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
2751 -setStyle:_style]): test whether the values of orgmail and
2752 partmails are null before manipulating them, otherwise SOGo sends
2753 a "rangeOfString:" message to an NSNull, which makes it crashes.
2755 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2756 -extractQuickFieldsFromEvent:_event]): we now use the new
2757 "symbolicAccessClass" method from iCalEntity to determine the
2758 value of the "classifiction" field.
2759 ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]): same
2762 2007-03-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2764 * SoObjects/Appointments/SOGoAppointmentFolder.m
2765 ([SOGoAppointmentFolder
2766 -fetchCoreInfosFrom:_startDateto:_endDatecomponent:_component]):
2767 see below, the query is adapted consequently.
2769 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2770 -extractQuickFieldsFromTodo:_task]): the field "ispublic" was
2771 renamed to "classification" and can any integer as value.
2772 ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event]):
2775 2007-02-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2777 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
2778 ([_UIxHTMLMailContentHandler -_appendStyle:_charslength:_len]):
2779 don't prepend anything to the class and id named. Instead, we
2780 make each style embedded in the ".SOGoHTMLMail-CSS-Delimiter"
2783 2007-02-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2785 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2786 -rolesOfUser:logininContext:context]): if object does not exists
2787 (for example when it's being created), the current user has the
2788 same rights on it than he/she has on its parent container.
2790 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2791 -nameExistsInFolder:objectName]): methods that tests if a c_name
2792 corresponding to the name passed as parameter is present in the db
2795 2007-02-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2797 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
2798 -rolesForObject:objectinContext:context]): test for
2799 "rolesOfUser:inContext:" in addition to "roleOfUser:...".
2801 * SoObjects/Appointments/SOGoCalendarComponent.m
2802 ([SOGoCalendarComponent -rolesOfUser:logininContext:context]):
2803 returns the roles of the user on the container object if the event
2806 2007-02-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2808 * UI/MailPartViewers/UIxMailRenderingContext.m: returns the
2809 alternativeViewer a multipart/related message is being handled.
2811 * UI/MailPartViewers/UIxMailPartHTMLViewer.m: reimplemented module
2814 * UI/MailPartViewers/UIxMailPartAlternativeViewer.m: select the
2815 text/html component before text/plain.
2817 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2818 -addRequiredKeysOfStructure:path:toArray:recurse:]): accepts the
2819 fetching of HTML parts.
2821 * SoObjects/Appointments/SOGoCalendarComponent.m
2822 ([SOGoCalendarComponent -componentTag]): new template method that
2823 returns the vcalendar tag of the current object.
2824 ([SOGoCalendarComponent -component]): new method that returns the
2825 first object matching [self componentTag] within the current
2826 calendar object. This method replaces 'firstEventInCalendar:' as
2827 well as "firstTaskInCalendar:".
2828 ([SOGoCalendarComponent -roleOfUser:logininContext:context]):
2829 moved method from SOGoAppointmentObject.m.
2831 2007-02-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2833 * UI/Scheduler/UIxCalMulticolumnDayView.[hm]: new daily view
2834 module which shows each selected user's calendar in a different
2835 column instead of mixing their events together.
2837 * UI/Scheduler/UIxCalView.m ([UIxCalView -redirectForUIDsAction]):
2838 replaced use of [NSString stringByTrimmingWhiteSpaces] with
2839 [NSString stringByTrimmingSpaces].
2841 * UI/MailPartViewers/UIxMailPartICalViewer.m: request the key
2842 "cnWithoutQuotes" instead of "cnForDisplay", which no longer
2845 * UI/Scheduler/UIxCalDayOverview.m,
2846 UI/Scheduler/UIxCalDayChartview.m,
2847 UI/Scheduler/UIxCalDayListview.m,
2848 UI/Scheduler/UIxCalWeekOverview.m,
2849 UI/Scheduler/UIxCalWeekChartview.m,
2850 UI/Scheduler/UIxCalWeekListview.m,
2851 UI/Scheduler/UIxCalInlineMonthOverview.m,
2852 UI/Scheduler/UIxCalYearOverview.m: removed unused modules.
2854 2007-02-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2856 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2857 -appendPersonalSourcesInContext:context]): release connectoin
2858 channel when everything is done.
2860 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2861 -newAbAction]): new action method to crate a new contact folder
2864 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -create]): new method
2865 that requests the folder manager to create a folder table with the
2866 specified type at the specified path. The type is taken from [self
2869 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
2870 -folderType]): implemented.
2872 * SoObjects/Appointments/SOGoAppointmentFolder.m
2873 ([SOGoAppointmentFolder -folderType]): implemented.
2875 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2876 -appendPersonalSourcesInContext:context]): we now fetch all
2877 folders with type "Contact" that belong to the current user.
2878 ([SOGoContactFolders -newFolderWithName:name]): new method to
2879 create a new contact folder.
2881 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]): treat
2882 resulting url with [NSString+Utilities hostlessURL] instead of
2883 using NSURL. This is because the url in question sometimes has a
2884 hostname and sometimes not. "hostlessURL" ensure the hostname is
2886 ([UIxComponent -applicationPath]): same as above.
2888 2007-02-08 Ludovic Marcotte <ludovic@inverse.ca>
2890 * SoObjects/Mailer/SOGoMailFolder.m: priorize the lookup of
2891 folders before doing the one on messages.
2893 2007-02-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2895 * SoObjects/SOGo/NSArray+Utilities.m: added an implementation of
2896 makeObjectsPerform:withObject:withObject: for GNUstep
2899 * OGoContentStore/GNUmakefile, Protocols/common.make,
2900 SoObjects/common.make, UI/common.make: install in
2901 GNUSTEP_INSTALLATION_DIR instead of GNUSTEP_USER_DIR.
2903 2007-02-07 Ludovic Marcotte <ludovic@inverse.ca>
2905 * UI/Scheduler/English.lproj/Localizable.strings: fixed typo for
2908 2007-02-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2910 * UI/MailerUI/UIxMailTree.m ([UIxMailTree
2911 -getTitle:folderType:andIcon:forObject:]): disabled Sieve folders
2914 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2915 -checkLogin:_loginpassword:_pwd]): fixed a bug where a wrong
2916 password would be accepted anyway as long as its length was > 0.
2917 This can be the case ONLY when LDAP is disabled otherwise we have
2918 a serious security issue...
2920 * SoObjects/Appointments/SOGoAppointmentObject.m
2921 ([SOGoAppointmentObject -roleOfUser:logininContext:context]): if a
2922 user is not an organizer nor a participant, he is declared as
2923 "Owner" if he owns the calendar the entry where the entry is
2924 contained. Other cases should not be possible.
2926 2007-02-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2928 * UI/Contacts/UIxContactEditor.m: display and handle the new
2931 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2932 ([SOGoContactLDAPFolder -_searchAttributes]): retrieve "calFBURL"
2935 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
2936 -vCard]): put the LDAP "calFBURL" field in the vCard's "FBURL"
2939 2007-01-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2941 * SoObjects/Appointments/SOGoCalendarComponent.m
2942 ([SOGoCalendarComponent -sendEMailNotifications]): new method that
2943 returns the value of ud "SOGoAppointmentSendEMailNotifications"
2945 ([SOGoCalendarComponent
2946 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]): method moved from SOGoAppointmentObject/SOGoTaskObject, replacing occurences of "appointment" to "object" in its name.
2948 2007-01-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2950 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
2951 -defaultAction]): invoke "flushMailCaches" on [self clientObject]
2952 so that the mailbox cache is refreshed everytime the user presses
2953 on "get mail". I doubt a mailbox cache really is useful in general
2956 2007-01-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2958 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2959 -userInContext:]): if the lookup is on "freebusy.ifb" and the
2960 username is "anonymous" the user is automatically set to
2963 2007-01-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2965 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2966 -checkLogin:_loginpassword:_pwd]): authorize special "freebusy"
2967 user with password "freebusy".
2969 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
2970 -contentAsString]): the default timerange is now 14 days before
2971 currentday and 1 month after.
2973 2007-01-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2975 * SoObjects/Appointments/SOGoAppointmentFolder.m
2976 ([SOGoAppointmentFolder
2977 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
2978 escape the record string in a way suitable with XML encoding.
2980 2007-01-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2982 * UI/WebServerResources/SchedulerUI.js: fixed a bug where the
2983 calendar view would not be updated properly.
2985 2007-01-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2987 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2988 -newStartDate]): fix the handling of the component start date
2989 depending on the "hm" and the "day" parameters.
2991 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
2992 -roleOfUser:uidinContext:context]): set role of current user to
2993 "Assistant" if the object that is accessed is "freebusy.ifb".
2995 * SoObjects/Appointments/SOGoAppointmentFolder.m
2996 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): method
2997 moved from UI/Scheduler/UIxCalView:calendarFolderForUID:.
2998 ([SOGoAppointmentFolder
2999 -lookupCalendarFoldersForUIDs:_uidsinContext:]): now use the new
3000 lookupCalendarFolderForUID: method, which doesn't do security
3003 2007-01-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3005 * UI/Common/UIxAclEditor.m ([UIxAclEditor -assistantsValue]): new
3006 accessor that returns the comma-separated list of users with role
3008 ([UIxAclEditor -delegatesValue]): same as above for "Delegate".
3009 ([UIxAclEditor -_prepareUsers]): there is no longer a concept of
3010 "checkedUsers". Instead, each user is either classified in the
3011 list of assistants or the list of delegates.
3013 2006-12-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3015 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
3016 -composeAction]): method imported from removed container modules.
3017 ([UIxMailMainFrame -mailFolderName]): method imported from removed
3020 * UI/MailerUI/UIxMailPopupView.m: a new special popup component
3021 for wrapping UIxMailView with the "popupview" action.
3023 * UI/MailerUI/UIxMailAccountView.m: renamed to UIxMailSplashView,
3024 since its the component that displays the same splash screen than
3025 the one in Thunderbird/Icedove.
3027 * UI/MailerUI/UIxMailAccountViewContainer.[hm],
3028 UI/MailerUI/UI/MailerUI/UIxMailAccountsView.m,
3029 UI/MailerUI/UIxMailListViewContainer.[hm],
3030 UI/MailerUI/UIxMailViewContainer.[hm]: removed
3032 2006-12-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3034 * UI/WebServerResources/HTMLElement.js: replaced the functional
3035 selectNode() and deselectNode() functions with select() and
3036 deselect() methods of HTMLElement.
3038 * UI/WebServerResources/ContactsUI.js: cleanup, most of the
3039 events are initialized from here now instead of in the HTML code.
3041 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3042 -checkRightsAction]): new method similar to the one with the same
3043 name in UIxCalMainView.m.
3045 * UI/Common/UIxAclEditor.m ([UIxAclEditor -saveAclsAction]): added
3046 code to handle the publishing of freebusy information.
3048 2006-12-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3050 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3051 -checkRightsAction]): new action method that returns a
3052 comma-separated list of boolean values matching the right of the
3053 current user to "view" (as a permission) each foreign calendar
3054 stored in his preferences.
3056 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -setOwner:newOwner]):
3057 new method that sets a customOwner, which can be returned with
3058 ownerInContext it set.
3060 * SoObjects/Appointments/SOGoAppointmentFolder.m
3061 ([SOGoAppointmentFolder
3062 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): no longer set the owner of elements here.
3064 2006-12-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3066 * SoObjects/SOGo/SOGoUserFolder.m: same as for SOGoContactFolders
3067 below, but for the Contacts and Calendar collections.
3069 * SoObjects/SOGo/SOGoAclsFolder.m: convert the class to user the
3070 new acl facilities method from sope-gdl/GCSFolder.m.
3072 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3073 -roleOfUser:uidinContext:context]): new method that returns
3074 SOGoRole_Assistant when the user is an assistant or a delegate on
3075 the "personal" ab object. This is so that setting roles on the
3076 SOGoContactFolders object is not required.
3078 2006-12-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3080 * Main/SOGo.m: declare "Freebusy" permissions for the top objects.
3082 * UI/Contacts/UIxContactsAclsSelection.m: new component specific
3083 to the handling of the user selection for the acls.
3085 * SoObjects/SOGo/SOGoPermissions.[hm]: new module that extends the
3086 values from SoPermissions with ones specific to SOGo.
3088 * SoObjects/SOGo/SOGoAclsFolder.[hm]: new class module that
3089 handles the storage for the acls.
3091 * SoObjects/Appointments/SOGoCalendarComponent.[hm]: new parent
3092 class for SOGoAppointmentObject and SOGoTaskObject.
3094 * UI/Common/UIxAclEditor.[hm]: new component that provides a
3095 general editor for folder acls.
3097 * SoObjects/SOGo/NSString+Utilities.[hm]: old "NSString+URL"
3099 ([NSString -davMethodToObjC]): method that returns the method name
3100 for a DAV property implementation.
3102 * SoObjects/SOGo/NSArray+Utilities.m: new extension module to
3104 ([NSArray -stringsWithFormat:format]): new method that returns
3105 formatted occurences of the strings stored in the array.
3107 * SoObjects/SOGo/SOGoDAVRendererTypes.m ([SOGoDAVSet
3108 +davSetWithArray:newValuesofValuesTaggedAs:newValueTag]): a new
3109 subclass module of SoWebDAVValue that supports collections of
3110 properties of the same type.
3112 2006-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3114 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
3115 -lookupFolder:ofClassNamed:inContext:]): added the ability to
3116 configure the name of the SOGoDraftFolders with the ud var
3117 "SOGoDraftsFolderName".
3119 2006-11-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3121 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
3122 -userTimeZone:username]): new method that returns the timezone for
3123 the specified user depending on his preferences and the server
3126 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3127 -stringForData:partInfo:]): take the encoding into account and
3128 translate the text to "normal" before processing the charset data.
3130 2006-11-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3132 * UI/WebServerResources/generic.js: the progress indicator is on
3133 when loading the page so we turn it off, and we turn it back on
3134 whenever we switch to another module...
3136 * UI/WebServerResources/SchedulerUI.js: make sure the day view
3137 synchronization mechanism works everywhere.
3139 * UI/WebServerResources/generic.js: the log window is not only
3140 visible when UIxDebugEnabled is set.
3142 * UI/WebServerResources/SchedulerUI.js: the month overview's day
3143 cells are now initialized with the DOM event interface methods
3144 instead of with html attributes.
3146 * UI/Templates/MailerUI/UIxMailView.wox: don't display useless
3147 headers (should be made configurable at some point)...
3149 * OGoContentStore/sql/generate-folderinfo-sql-for-users.sh: drop
3150 "not null" constraint on startdate, enddate, isopaque,
3151 participants and partmails.
3153 2006-11-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3155 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
3156 -hoursToDisplay]): prevent a crash by retaining the
3157 "hoursToDisplay" array after it's created.
3158 ([UIxCalDayTable -clickableHourCellClass]): new method for the new
3159 clickable hours DIV.
3161 * UI/WebServerResources/SchedulerUI.js: made the event
3162 participation status modification asynchronous, which also fixes a
3163 bug where the window would sometimes close before the accept or
3164 decline action was completed. Also, adapted the event handling
3165 related to the days or weeks view with the new DIV-based layout.
3167 * UI/Scheduler/UIxCalInlineAptView.m: same as the first below...
3169 * UI/Scheduler/UIxCalDayTable.m: enhanced to provide the new
3170 DIV-based presentation of the days and weeks.
3172 * SoObjects/Appointments/SOGoTaskObject.m: same as below...
3174 * SoObjects/Appointments/SOGoAppointmentObject.m: lookupName:...
3175 might return an exception so we have to handle it if we don't
3178 2006-11-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3180 * UI/WebServerResources/SchedulerUI.js: updated the list
3181 initialization code to use the new event management scheme, adding
3182 what was missing to be able to delete events and tasks again.
3184 * UI/WebServerResources/MailerUI.js: added code to activate the
3185 "Get mails" button. Fixed a bug which prevented messages to be
3188 * UI/WebServerResources/UIxFreeBusyUserSelector.js: handle tab
3189 navigation and focus handling of INPUTs.
3191 2006-11-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3193 * UI/WebServerResources/MailerUI.js: added code to handle the
3194 possible drag and drop events to manager in the mail module.
3195 Moving messages, opening parent folders, ...
3197 * UI/WebServerResources/SOGoDragAndDrop.js: new file containing
3198 the drag and drop manager as well as the interface to HTMLElement
3199 to trigger drag and drop events.
3201 * UI/MailerUI/UIxMailView.m ([UIxMailView -moveAction]): new
3202 action to move the current message to the mailbox named after the
3203 value of parameter "tofolder".
3205 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3206 -moveToFolderNamed:folderNameinContext:]): new method base on
3209 2006-11-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3211 * UI/WebServerResources/generic.js: added and activated many
3212 "load" handlers to configure generic widgets used across the
3213 modules. More events are now handled in a DOM-fashion way instead
3214 of by setting the relative attributes in the templates.
3216 * UI/Templates/UIxSortableTableHeader.wox: all the events are
3217 declared from the javascript DOM onload handlers.
3219 * UI/Templates/UIxPageFrame.wox: load the new SOGoDragHandles.js
3222 * UI/Templates/MailerUI/UIxMailListView.wox: all the events are
3223 declared from the javascript DOM onload handlers.
3225 * UI/MailerUI/UIxMailListView.m: removed all the JS methods since
3226 we want everything to be separated from each other, as much as
3229 * UI/WebServerResources/SOGoDragHandles.js: new module containing
3230 the "SOGoDragHandlesInterface", implementing methods that can be
3231 attributed to DIV so that they can be used as drag handles.
3233 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
3234 -asQPSubjectString]): initialize the tmp strings with '0' to make
3235 sure they don't contain garbage.
3237 2006-11-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3239 * UI/WebServerResources/MailerUI.js: register the messageList
3240 table as a dragging source and the leaf of the navigation tree as
3241 dnd destinations to the DNDManager.
3243 * UI/WebServerResources/generic.js: initialize tabs from the
3244 "unload" event listener that is added programmatically instead of
3245 from the template... Also, added the new DNDManager object.
3247 * UI/WebServerResources/HTMLTableElement.js: added code to
3248 simulate XUL drag n drop events. This code will possibly be moved
3249 to HTMLElement.js instead later...
3251 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3252 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): same as
3255 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3256 -_qualifierForFilter:filter]): only search records which starts
3257 with the specified pattern.
3259 2006-11-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3261 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
3262 -asQPSubjectString]): new method that returns the special QP
3263 string with its qp declaration for email subjects.
3264 ([SOGoDraftObject -bodyPartForText])
3265 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): don't
3266 double-encode data in UTF-8.
3268 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3269 -newStartDate]): new method to determine the start date depending
3270 on the URL parameters, the current day and the current time.
3271 ([UIxComponentEditor -toolbar]): new method to determine the
3272 filename of the toolbar that should be drawn depending on the
3273 ownership and the list of attendees of the task/event wrt to the
3276 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
3277 -setDayStartHour:aStartHour]): adjust the minutes to the next
3278 quarter of hour, if not already set to a quarter.
3280 * UI/WebServerResources/UIxAppointmentEditor.js,
3281 UI/WebServerResources/UIxTaskEditor.js: added code to manage start
3284 2006-11-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3286 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3287 -loadValuesFromComponent:component]): handles access class
3288 (privacy) and status.
3290 * UI/Contacts/UIxContactsListViewContainer.m
3291 ([UIxContactsListViewContainer -additionalFolders]): return nil if
3292 [self additionalAddressBooks] returns an empty string.
3294 2006-11-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3296 * UI/Scheduler/UIxCalMonthView.m ([UIxCalMonthView
3297 rangesOf7Days]): enhanced and debugged algorithm to feed the array
3298 with slices where the first day is still in the requested month.
3300 * UI/Templates/UIxPageFrame.wox: the logConsole is created only on
3303 * UI/SOGoUI/SOGoAptFormatter.m: added code to handle the display
3304 of events in the day boxes of the calendar's monthly view.
3306 * SoObjects/Appointments/SOGoTaskObject.m ([SOGoTaskObject
3307 -davContentType]): declare "text/calendar".
3309 * SoObjects/Appointments/SOGoAppointmentObject.m
3310 ([SOGoAppointmentObject -davContentType]): declare
3313 * SoObjects/Appointments/SOGoAppointmentFolder.m
3314 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): certain
3315 HTTP methods are handled by SOPE and requires nil to be returned,
3316 this method now invokes the new
3317 "requestNamedIsHandledLater:inContext:" method to check that.
3318 ([SOGoAppointmentFolder
3319 -requestNamedIsHandledLater:nameinContext:context]): new methods
3320 that returns "YES" only for the "OPTIONS" http method (for now...).
3321 ([SOGoAppointmentFolder -davComplianceClassesInContext:]):
3322 overloaded method to append the "access-control" and
3323 "calendar-access" DAV abilities to the initial declaration.
3325 * UI/Scheduler/UIxCalMonthView.[hm]: rewritten module entirely to
3326 imitate the look of Sunbird/Lightning's monthly view.
3328 * UI/Scheduler/UIxCalMonthView.[hm]: renamed to
3329 UIxCalMonthViewOld.[hm].
3331 2006-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3333 * UI/Scheduler/UIxFreeBusyUserSelectorTable.m
3334 ([UIxFreeBusyUserSelectorTable -currentContactHasStatus]): new
3336 ([UIxFreeBusyUserSelectorTable -currentContactStatusImage]):
3337 returns an image name based on the participation status of the
3340 * UI/WebServerResources/SchedulerUI.js: same strip down as for
3343 * UI/Contacts/UIxContactsListViewContainer.m ([UIxContactsListViewContainer -additionalAddressBooks])
3344 ([UIxContactsListViewContainer -additionalFolders])
3345 ([UIxContactsListViewContainer -setCurrentAdditionalFolder:newCurrentAdditionalFolder])
3346 ([UIxContactsListViewContainer -currentAdditionalFolder]): new
3347 methods to handle the external addressbooks a user has subscribed
3348 too, by retriving them from his preferences.
3350 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3351 -updateAdditionalAddressBooksAction]): new method that updates the
3352 user settings with the list of addressbook he has subscribed to.
3354 * UI/Contacts/UIxContactsAddressBooksSelection.m: new component
3355 module for the address book selector.
3357 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
3358 a toolbar with two buttons ("add" and "remove") to manage the
3359 additional addressbooks a user might subscribe to.
3361 * UI/WebServerResources/ContactsUI.js: added code to handle
3362 "external addressbooks" from the Javascript point-of-view, by
3363 extending existing methods and adding code for the "add ab" and
3364 "remove ab" buttons.
3366 * UI/WebServerResources/generic.js: moved extensions methods to
3367 DOM elements to separate files for better clarity.
3369 * UI/Common/UIxPageFrame.m ([UIxPageFrame -pageContentClasses]):
3370 new method that returns "pageContent" as class, but also "popup"
3371 for the DIV where the page content lies, so that we can manipulate
3372 the content of popup's with CSS identifiers.
3374 2006-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3376 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
3377 -displayStyle]): new method that returns a string containing the
3378 css style relative to the current appointment cell. This code is
3379 currently inactive but might be reused later.
3381 * UI/WebServerResources/SchedulerUI.js: added code to handle the
3382 display of the selected day (the day pointed by the mouse, or the
3383 current day when changing the view).
3385 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
3386 -dayCellClasses]): new method that returns a string containing the
3387 css classes applicable to the current cell, depending on the
3388 position of the day in the week, the day of today and the
3391 * UI/Scheduler/UIxCalCalendarsListView.m ([UIxCalCalendarsListView
3392 -currentContactAptBorder]): new method that returns the
3393 appropriate border color for the specified user.
3395 * SoObjects/Appointments/SOGoAppointmentObject.m
3396 ([SOGoAppointmentObject
3397 -saveContentString:contentStringbaseVersion:baseVersion]):
3398 overloaded method that parse new events and detects if they have
3399 an organizer or not. If they are new and have no organizer set
3400 (Sunbird/Lightning...), the owner of the event is set as
3403 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: new
3404 category that provides facility methods and interfaces to the
3407 * SoObjects/Contacts/product.plist: give full access to ANY
3408 authenticated user, not just the owner (to every objects...).
3410 2006-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3412 * UI/WebServerResources/UIxFreeBusyUserSelector.js: make sure
3413 every replica widgets are declared as such to their master
3414 counterpart. Take the days into account when displaying the time
3415 range taken by the appointment.
3417 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
3418 -getICalPersonsFromValue:selectorValue]): method taken from
3419 UIxFreeBusyUserSelector, that is shared both by
3420 UIxFreeBusyUserSelector and UIxFreeBusyUserSelectorTable.
3422 * SoObjects/Appointments/SOGoAppointmentFolder.m
3423 ([SOGoAppointmentFolder
3424 -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.
3426 * UI/Scheduler/UIxFreeBusyUserSelectorTable.[hm]: new subcomponent
3427 derived and taken as a subset of UIxFreeBusyUserSelector that
3428 implements the table part of the FreeBusy view. Most of the
3429 methods of UIxFreeBusyUserSelector relative to that table were
3430 moved into UIxFreeBusyUserSelectorTable, which can also be used as
3431 a standalone view for AJAX operations.
3433 2006-10-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3435 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3436 -vCard]): change reverted.
3438 * UI/Contacts/UIxContactEditor.m: check whether the client contact
3439 folder has selector "globallyUniqueObjectId" before calling that
3442 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3443 -vCard]): the "setVClass" NGVCard method really is "setClass"
3446 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3447 ([SOGoContactLDAPFolder -_searchAttributes]): fixed typo to
3448 request the "streetAddress" instead of the "streetaddress".
3449 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): lookup
3450 mails that *contain*, and not just *start with* the search
3453 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3454 -vCard]): mark address returned from LDAP as the work address.
3456 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: made the whole
3457 span covered with the anchor, not only the textual information
3460 * UI/Templates/SchedulerUI/UIxCalMainView.wox: specify the type
3461 argument (event or task) to newEvent in the appointmentListMenu.
3462 Make the appointmentsListView display the appointmentsListMenu.
3464 * UI/SOGoUI/SOGoAptFormatter.m: enlarge the text size limit from
3465 12 to 50 before displaying "...".
3466 ([SOGoAptFormatter -fullDetailsForApt::]): display location only
3467 if its length > 0, whether location itself is nil or not...
3468 ([SOGoAptFormatter -tooltipForApt::_refDate]): display information
3469 of which the length > 0.
3471 2006-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3473 * UI/WebServerResources/UIxAppointmentEditor.js: correctly handles
3474 french and ISO dates.
3476 * UI/Scheduler/UIxFreeBusyUserSelector.[hm]: added code an ivars
3477 from UIxContactSelector to handle contact lists (current and
3478 additional contacts).
3480 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3481 -_freeBusyAsText]): added handling of an "additional"-named query
3482 parameter that describe the number of additional days after
3483 enddate that should be returned.
3485 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3486 -_responseForResults:results]): give priority to results with
3487 "c_uid" fields. If none returned, use the first contact received.
3489 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3490 -extractQuickFieldsFromEvent:_event]): changed "TENTATIVE" code to
3491 2 and "CANCELLED" to 0.
3493 2006-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3495 * UI/WebServerResources/UIxAppointmentEditor.js: handle conversion
3496 of start and end dates to short string dates.
3498 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3499 -readFreeBusyAction]): new method that returns an array of numbers
3500 corresponding to the state in the freebusy of each "quarter of an
3501 hour" between the "sday" and "eday" date parameters passed in the
3502 url. This permits to handle the display of the freebusy with Ajax
3504 ([SOGoUserHomePage -_freeBusyAsText]): add 2 days to the end date
3505 since the free busy displays 2 days ahead.
3507 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3508 -contactSearchAction]): new action that returns the uid and the
3509 username + email of the user whose name contain the value of the
3510 "search" url parameter.
3512 * SoObjects/Appointments/SOGoAppointmentFolder.m
3513 ([SOGoAppointmentFolder
3514 -fetchFreebusyInfosFrom:_startDateto:_endDate]): added fields
3515 useful for the computing of the status of the freebusy.
3517 * UI/Scheduler/UIxFreeBusyUserSelector.m ([UIxFreeBusyUserSelector
3518 -init]): new component that incarnates a user selector for events
3519 inspired by the new one found in Thunderbird Lightning.
3521 2006-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3523 * UI/WebServerResources/generic.js: added code to enable or
3524 disable anchor visually (following our internal algorithm).
3526 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -init]):
3527 added new "url" ivar with its classic accessors.
3528 ([UIxComponentEditor -urlButtonClasses]): new method that returns
3529 the class strings for the url button on the appointment/task
3530 editor (depending on the validity of the url).
3532 * UI/Templates/SchedulerUI/UIxTaskEditor.wox,
3533 UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: start rewriting
3534 the template to match the Lightning's new task/appointment editor.
3536 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor -saveValuesIntoAppointment:_appointment]): initialize url from the components'url.
3538 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveValuesIntoTask:_task]): initialize url from the components'url.
3540 2006-10-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3542 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3543 ([SOGoContactLDAPFolder
3544 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): perform the searchs on objects which start with instead of contain the lookup key.
3546 * SoObjects/Appointments/SOGoAptMailNotification.[hm]: work on
3547 iCalEntityObject instances instead of just iCalEvent's.
3549 * SoObjects/Appointments/SOGoAppointmentFolder.m
3550 ([SOGoAppointmentFolder
3551 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): set ownership of returned records by adding an "owner" key to the resulting dictionaries.
3553 * SoObjects/SOGo/NSObject+Owner.[hm]: removed module since it's a
3554 bad way of handling ownership that way.
3556 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3557 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): search also
3558 on "cn", just like Mozilla.
3560 2006-10-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3562 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]):
3563 "to" should be retained, otherwise it will be autoreleased and a
3566 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3567 -writeAction]): updated method to fetch the card before initing
3570 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3571 -extractQuickFieldsFromTodo:_task]): fixed to use NSNull instead
3574 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
3575 -iCalStringTemplate]): start and due date are now optional.
3577 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
3578 -setDayStartHour:aStartHour]): added a new "isDisabled" ivar with
3579 appropriate accessors to be settable through the templates.
3581 * UI/Scheduler/UIxDatePicker.m ([UIxDatePicker -init]): added a
3582 new "isDisabled" ivar with appropriate accessors to be
3583 settable through the templates.
3585 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3586 -availableCalendars]): new method that list the calendars to which
3587 the user has subscribed.
3588 ([UIxComponentEditor -componentOwner]): returns the owner of the
3591 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3592 -extractQuickFieldsFromTodo:_task]): set the start and enddate of
3593 quickentries to null whenever each or all of them are null, by
3594 providing an impossible timestamp from with NSNotFound as value.
3596 2006-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3598 * UI/WebServerResources/UIxMailEditor.js: update the algorithm
3599 that handles the creation of new fields with the new APIs and the
3600 new node structure on the page.
3602 * UI/Scheduler/UIxAppointmentEditor.m,
3603 UI/Scheduler/UIxTaskEditor.m:
3604 refactored to user UIxComponentEditor as parent class.
3606 * UI/Scheduler/UIxComponentEditor.[hm]: new class module
3607 containing the methods common to the UIxTaskEditor and the
3608 UIxAppointmentEditor.
3610 2006-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3612 * SoObjects/Appointments/SOGoAppointmentFolder.m
3613 ([SOGoAppointmentFolder -doCalendarQuery:context]): now supports
3614 the handling of time-ranges.
3616 * UI/WebServerResources/ContactsUI.js: specify a notification type as
3617 parameters when onConfirmContactSelection in invoked.
3619 * UI/WebServerResources/generic.js: specify a notification type as
3620 parameters when onContactRemove in invoked.
3622 * UI/WebServerResources/SchedulerUI.js: when the user deselects
3623 all calendars, select his entry.
3625 2006-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3627 * UI/WebServerResources/SchedulerUI.js: edit and delete events
3628 with their owner-relative urls. Generate a correct entry in the
3629 css color table when a user is added to the calendars list. Put
3630 the same color next to the user id.
3632 * UI/WebServerResources/generic.js: implemented some new helper
3635 * SoObjects/Appointments/SOGoAppointmentFolder.m
3636 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): don't delete
3637 entries if their owner is not the current user.
3639 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
3640 -displayClasses]): return the correct class for the current event
3641 representation depending on its owner.
3643 * UI/Scheduler/UIxCalCalendarsListView.m: added method to create
3644 and associate a color for each user login depending on its
3645 position in the list.
3647 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView
3648 -currentRowCSSClass]): return the correct class for the current
3649 row depending on the owner of the event.
3651 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
3652 -setColors:colors]): new method to associate a color table with
3653 each user in the list.
3655 * SoObjects/Appointments/SOGoAppointmentFolder.m
3656 ([SOGoAppointmentFolder
3657 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): associate each returned record with the owner of the table they are retrieved from.
3659 * SoObjects/SOGo/NSObject+Owner.[hm]: new extension module to
3660 NSObject to associate an instance with a user.
3662 2006-10-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3664 * UI/WebServerResources/SchedulerUI.js: added handling of multiple
3667 * UI/WebServerResources/ContactsUI.js: added handling of
3668 notification of changes to contact selectors.
3670 * UI/WebServerResources/generic.js: added handling of notification
3671 of changes to contact selectors.
3673 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3674 -updateCalendarsAction]): proxy method to update the user
3675 preference table with the new selected calendar uids.
3677 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3678 -calendarsContactsAction]): new method.
3680 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector -setCheckedBoxes:boxes])
3681 ([UIxContactSelector -setHasCheckBoxes:aBool])
3682 ([UIxContactSelector -isCheckBoxChecked]): new accessors method to
3683 permit the drawing of checkboxes instead of card icons.
3685 * UI/Scheduler/UIxCalCalendarsListView.m: new component class that
3686 wrap a selector the the "Calendars" tab.
3688 * UI/Contacts/UIxContactsCalendarsSelection.m: buttons for the
3689 new user calendar selector.
3691 2006-10-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3693 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: time ranges
3694 may cover hour 0 to hour 23.
3696 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
3697 -iCalStringFromQueryParameter:format:]): dates explicitly set to
3700 * UI/WebServerResources/SchedulerUI.js: manage both lists of
3701 objects wrt to the toolbar actions.
3703 * UI/WebServerResources/generic.js: added code to the "String"
3704 class to decode number-encoded char entities.
3706 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3707 -batchDeleteAction]): new method to delete selected entries in the
3710 * SoObjects/Appointments/SOGoAppointmentFolder.m
3711 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): new method
3712 that delete identified entries in batch.
3714 * UI/SOGoUI/UIxComponent.m ([UIxComponent
3715 -jsCloseWithRefreshMethod:methodName]): new method with explicit purpose.
3717 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]),
3718 UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
3719 -saveAction]), UI/MailerUI/UIxMailEditor.m ([UIxMailEditor
3720 -sendAction]), UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3722 return a UIxJSClose component if everything went fine.
3724 * UI/Scheduler/UIxTaskEditor.h: interface extracted from
3727 * UI/Scheduler/UIxAppointmentEditor.h: interface extracted from
3728 UIxAppointmentEditor.m.
3730 * UI/Common/UIxJSClose.[hm]: new UIxComponent designed to display
3731 a very light page with javascript code to close a window, by
3732 calling a method on the opener if specified. This component is
3733 designed to work as a response to form postings.
3735 2006-10-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3737 * SoObjects/Appointments/SOGoTaskObject.[hm]: clone of
3738 SOGoAppointmentObject adapted for the handling of tasks.
3740 * SoObjects/Appointments/NSArray+Appointments.[hm]: category
3741 extracted from SOGoAppointmentObject.
3743 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
3744 -saveUrl]): returns the url needed to POST the new form to.
3745 redirect the user to <aptid>/editAsAppointment instead of /edit,
3746 so that SOGoAppointmentFolder can return the correct object type.
3748 * SoObjects/SOGo/NSObject+AptComparison.m ([NSObject
3749 -compareAptsAscending:_other]): accept empty start or end dates.
3751 * SoObjects/Appointments/SOGoAppointmentFolder.m
3752 ([SOGoAppointmentFolder
3753 -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.
3754 ([SOGoAppointmentFolder -doCalendarQuery:context]): fetch
3755 components of type "vtodo" as well as "vevent".
3756 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): if the
3757 url specified ends with AsTask or AsAppointment, returns the
3758 an object of the appropriate class, otherwise deduce it from its
3759 content if the HTTP method is "PUT", otherwise read its type from
3762 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3763 -extractQuickFieldsFromTodo:_task]): extract quick fields from
3766 * UI/Scheduler/UIxCalView.m ([UIxCalView
3767 -fetchCoreAppointmentsInfos]): replacement methods for
3768 fetchCoreInfos but by retrieving object with component "vevent".
3769 ([UIxCalView -fetchCoreTasksInfos]): same as above for "vtodo"
3772 * UI/Scheduler/UIxCalTasksListView.[hm]: clone of
3773 UIxCalAptListView adapted for the handling of tasks.
3775 * UI/Scheduler/UIxTaskProposal.[hm],
3776 UI/Scheduler/UIxTaskView.[hm], UI/Scheduler/UIxTaskEditor.[hm]:
3777 clones of the UIxAppointment* classes for the handling of tasks.
3779 * UI/WebServerResources/UIxTaskEditor.js: clone of
3780 UIxAppointmentEditor adapted for the handling of tasks.
3782 * UI/WebServerResources/SchedulerUI.js: added support for tasks.
3783 Scroll the daily view to the appropriate hour when an appointment
3784 is selected in the appointments list.
3786 2006-10-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3788 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
3789 -setDayStartHour:aStartHour]): specifies the user timezone on the
3792 * UI/Scheduler/UIxAppointmentEditor.m: indicate DTSTAMP with "GMT"
3795 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate -adjustedDate])
3796 ([NSCalendarDate -driftedDate]): methods made useless by a better
3797 comprehension of the NSTimeZone API...
3799 2006-10-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3801 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): call
3802 new methods from the NSCalendarDate methods.
3804 * SoObjects/SOGo/NSCalendarDate+SOGo.m: module replacing and
3805 extending UI/Scheduler/NSCalendarDate+Scheduler.m.
3807 +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).
3808 ([NSCalendarDate -adjustedDate]): this method returns another
3809 instance set to the correct hour after the original date was set
3810 from a non-GMT timezone. This date can be used for storage.
3811 ([NSCalendarDate -driftedDate]): this method does exactly the
3812 opposite of -adjutedDate, that is, it enables the method
3813 hourOfDay, minuteOfHour etc... to return the values according to
3814 the original date's timezone. This date CANNOT be used for storage.
3816 * UI/Scheduler/NSCalendarDate+Scheduler.m ([NSCalendarDate
3817 -shortDateString]): new method that will return a "short date
3818 string" (yyyymmdd) from a calendar date object.
3820 * UI/SOGoUI/UIxComponent.m ([UIxComponent
3821 -_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.
3823 * Main/sogod.m (main): initialize the NSTimeZone's defaultTimeZone
3824 to the value of SOGoServerTimeZone or "Canada/Eastern" if not found.
3826 2006-10-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3828 * UI/WebServerResources/SchedulerUI.js: added code to scroll the
3829 view of the day at the height of hour 8:00.
3831 * UI/Scheduler/UIxCalView.m ([UIxCalView -dayStartHour]): returns 0.
3832 ([UIxCalView -dayEndHour]): returns 24.
3834 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView -defaultAction])
3835 ([UIxContactFoldersView -newAction]): invoke
3836 _selectActionForApplication: on self with the proper attribute too.
3838 * UI/Contacts/UIxContactsSelectionViewContainer.m: removed since
3839 we now use the action mechanism in UIxContactsListView to keep the
3840 same view for the contact selectors and the regular contact view.
3842 * UI/Contacts/UIxContactsListViewContainer.[hm]: replaces
3843 UIxContactsListViewContainerBase.[hm]
3845 * UI/Contacts/UIxContactsListView.[hm]: replaces UIxContactsListViewBase.[hm]
3847 * UI/WebServerResources/generic.js: generalized emailstring
3848 handling functions. Generalized address book access functions.
3850 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
3851 -isPopup]): return YES if the "popup" query parameter is set.
3853 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3854 -defaultAction]): keep the url parameters when redirecting.
3855 ([UIxContactFoldersView -selectForSchedulerAction])
3856 ([UIxContactFoldersView -selectForMailerAction]): new action
3857 methods for the /scheduler-contacts and /mailer-contacts invocations.
3859 * SoObjects/SOGo/SOGoObject.m: compose the action url using the
3860 newly available NSString+URL category.
3862 * SoObjects/SOGo/NSDictionary+URL.m ([NSDictionary
3863 -asURLParameters]): handle dictionary entries which could be
3864 instances of NSArray rather than NSString.
3866 * SoObjects/SOGo/NSString+URL.m ([NSString
3867 -composeURLWithAction:actionparameters:urlParametersandHash:useHash]): when composing the url, remove the encoded parameters first since they will be added later.
3868 ([NSString -urlWithoutParameters]): new method that returns the
3869 url without its parameters.
3871 * SoObjects/SOGo/NSString+iCal.h: deleted obsolete file.
3873 * SoObjects/SOGo/NSDictionary+URL.[hm],
3874 UI/SOGoUI/NSString+URL.[hm]: moved from UI/SOGoUI/.
3876 * UI/WebServerResources/UIxMailEditor.js: add support for
3877 additions of different types (to, cc, bcc) of recipients from the
3880 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): added the
3883 * UI/Contacts/UIxContactsMailerSelection.m,
3884 UI/Contacts/UIxContactsSchedulerSelection.m: classes replacing
3885 UI/Contacts/UIxContactsSelectionView.m to provide a different set
3886 of widgets depending on the application invoking the contact list.
3888 2006-09-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3890 * UI/WebServerResources/ContactsUI.js: hide the current contact
3891 whenever the user changes of contact folder.
3893 * UI/WebServerResources/UIxContactEditor.js: the contact UID is
3894 now provided by the template when loading the page.
3896 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
3897 -iCalPersonWithUid:uid]): new method taken from removed module
3900 2006-09-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3902 * UI/Scheduler/UIxAppointmentView.m ([UIxAppointmentView
3903 -categoriesAsString]): same as below.
3905 * UI/Scheduler/UIxAppointmentEditor.m: adapted by using the new
3906 vcalendar API's iCalEvent instead of the removed SOGoAppointment.
3908 * SoObjects/Appointments/SOGoAppointmentObject.m
3909 ([SOGoAppointmentObject -calendarFromContent:cnt]): new helper method.
3910 ([SOGoAppointmentObject -firstEventFromCalendar:calendar]): new
3913 * SoObjects/Appointments/SOGoAppointmentFolder.m
3914 ([SOGoAppointmentFolder -doCalendarQuery:context]): added a
3915 hackish test to detect whether the request concernes VEVENT's or
3916 anything else. Return events only in the former case.
3917 ([SOGoAppointmentFolder
3918 -fetchOverviewInfosFrom:_startDateto:_endDate]): retrieve the
3919 c_name quickfield so that the calendar list can identify the
3920 appointments with their complete "filename".
3922 * OGoContentStore/OCSiCalFieldExtractor.m: use CardGroup's
3923 groupsOfClass:fromSource: to parse the given vcalendar.
3925 * UI/Scheduler/iCalRecurrenceRule+SOGo.m: removed obsolete class.
3927 * UI/Scheduler/SOGoAppointment+UIx.h: removed obsolete class.
3929 * SoObjects/SOGo/SOGoAppointmentICalRenderer.[hm]: removed
3932 * SoObjects/SOGo/SOGoAppointment.[hm]: removed obsolete class.
3934 2006-09-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3936 * SoObjects/Appointments/SOGoAppointmentFolder.m
3937 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): be
3938 sensitive to the CalDAV method names.
3939 ([SOGoAppointmentFolder -doCalendarQuery:context]): method for the
3940 "calendar-query" CalDAV method name.
3942 * UI/WebServerResources/ContactsUI.js: removed a lot of useless
3943 code coming originally from MailerUI.js.
3945 * UI/WebServerResources/UIxContactEditor.js: imitate the
3946 Thunderbird address book by completing the display name with the
3947 content of the first and last name fields, until the display name
3948 is modified manually.
3950 * UI/WebServerResources/generic.js: added a "trim" method to the
3953 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
3954 -displayName]): new method that returns the display name from "cn"
3955 or from the "displayName" key if found.
3957 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3958 -initSnapshot]): check if "[card n]" returns anything to avoid a
3961 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): new method
3962 that returns an unparsed doctype definition for the pages.
3964 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3965 -vCard]): set the card's fn to attribute "displayName" if found
3968 2006-09-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3970 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3971 -vCard]): handle the "streetAddress" and "l" fields.
3973 * UI/Templates/MailerUI/UIxMailEditor.wox: arranged the message
3974 header fields by converting the tables to DIVs and SPANs.
3976 * UI/WebServerResources/generic.css: attempted unification of font
3977 families and size across all the elements. changed the
3978 logConsole's "position" from "fixed" to "absolute" to avoid
3981 2006-09-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3983 * UI/WebServerResources/ContactsUI.js (uixDeleteSelectedContacts):
3984 empty the contact view when the current contact is being deleted.
3986 * UI/WebServerResources/MailerUI.js (newContactFromEmail): fully
3987 parse the email field and provide the address full name if found
3988 as the "contactFN" parameter.
3990 * UI/WebServerResources/generic.js (openMailTo): do not give a
3991 name to the opened window so that serveral ones can be opened at
3994 * UI/MailPartViewers/UIxMailPartTextViewer.m
3995 ([UIxMailPartTextViewer -flatContentAsString]): override method by
3996 replacing carriage returns with "<br />" in the result string from
3997 super's implementation.
3999 * UI/Contacts/UIxContactView.m ([UIxContactView
4000 -_urlOfType:aType]): don't manage non-mailto urls through
4001 javascript, let the user decide what's best for him.
4003 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4004 -newAction]): transfer all the query parameters by using the
4005 "asURLParameters"'s result string from [self queryParameters].
4007 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4008 -initSnapshot]): retrieve "contactEmail" and "contactFN" from the
4009 query parameters and put their values (if any) into the snapshot.
4011 * UI/Contacts/UIxContactView.m ([UIxContactView -note]): convert
4012 carriage-returns to "<br />".
4013 ([UIxContactView -workCompany]): explicitly initialize company to
4014 nil if org is nil or empty.
4016 * UI/WebServerResources/UIxContactEditor.js: updated validation
4017 code after we added and renamed some fields.
4019 * UI/WebServerResources/ContactsUI.js: added code to cache contact
4020 cards and to handle card updates.
4022 2006-09-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4024 * UI/Contacts/UIxContactView.m ([UIxContactView -hasOtherInfos]):
4025 test the length of the returned string since they will never be
4028 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor -saveAction]):
4029 return self if the process went successful, returns an exception
4030 otherwise (and only otherwise...).
4032 * OGoContentStore/OCSContactFieldExtractor.m
4033 ([OCSContactFieldExtractor -extractQuickFieldsFromVCard:_vCard]):
4034 adapted method to the new VCard api. Since the cards are stored in
4035 vcard format, we no longer deal with a dictionary but with a
4038 2006-09-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4040 * UI/Contacts/UIxContactView.m ([UIxContactView -preferredEmail]):
4041 return a string with a "mailto" url.
4042 ([UIxContactView -_urlOfType:aType]): generic method to return a
4043 url string with a html anchor pointing to it.
4045 * UI/Contacts/UIxContactEditor.[hm]: UIxContactEditorBase renamed
4046 since subclass "UIxContactEditor" did nothing. Implemented code to
4047 display and modify the values parsed from the vcards, displayed in
4048 a way similar to the Thunderbird addressbook.
4050 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4051 -save]): new dummy method.
4053 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
4054 -save]): made method void.
4056 2006-09-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4058 * UI/Contacts/UIxContactView.m: added many wrapper methods to
4059 display blocks of data à la Thunderbird Addressbook. If data is
4060 available, those wrappers (around the NGVCard methods) will
4061 enclose the results in a proper HTML output with the correct label
4062 (if present), otherwise it will return an empty string.
4063 ([UIxContactView -vcardAction]): new action to return the contact
4064 as text/vcard (for exporting).
4066 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4067 +contactEntryWithName:aNamewithLDAPEntry:anEntryinContainer:aContainer]): adapted the mapping of the LDIF data with the new NGVCard API.
4069 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
4070 -vCard]): create a new NGVCard instance when no data is available
4072 ([SOGoContactGCSEntry -save]): save the vCard using the new
4073 "versitString" API method/message.
4075 * UI/Contacts/UIxContactView.h: separated interface from
4078 * UI/WebServerResources/ContactsUI.js: add-ed code to download card
4079 views and display them beneath the list.
4081 2006-09-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4083 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -userTimeZone]): retain
4084 the timezone even when it's the server timezone.
4086 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
4087 -privateContacts:inContext:]): no long configure the calendar
4088 object with the user's timezone since it's now accessible
4089 application-wide throught the SOGoObject methods.
4091 * UI/SOGoUI/UIxComponent.[hm]: removed the "viewTimeZone" ivar and
4092 method. Removed the "backendTimeZone" method.
4094 * UI/MainUI/SOGoUserHomePage.[hm]: made a subclass of UIxComponent
4095 instead of SoComponent.
4097 * SoObjects/Appointments/SOGoAppointmentObject.m:
4098 ([SOGoAppointmentObject -viewTimeZoneForPerson:_person]): returns
4099 [self serverTimeZone] instead of "EST" (which was removed).
4101 * SoObjects/Appointments/SOGoAppointmentFolder.[hm]: removed the
4102 "timeZone" ivar and its accessors.
4104 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -serverTimeZone]): new
4105 centralized method returing the timezone configured in the
4106 userdefaults db or "Canada/Eastern" if missing.
4107 ([SOGoObject -userTimeZone]): new centralized method returing the
4108 timezone of the current user or the server timezone if missing
4109 from the user configuration table.
4111 2006-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4113 * UI/WebServerResources/SchedulerUI.js: implemented caching of
4116 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]):
4117 return a path based on the object's context instead of the first
4118 level in SOGo's object hierarchy...
4120 2006-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4122 * UI/Templates/SchedulerUI/UIxCalDayTable.wox: day columns can now
4125 * UI/Templates/SchedulerUI/UIxCalDateSelector.wox: pass the user's
4126 timezone ([self viewTimeZone]) to the WEMonthOverview component to
4127 avoid a confusion with the days.
4129 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: appointments
4132 * UI/WebServerResources/SchedulerUI.js: implemented a mechanism to
4133 imitate Sunbird's synchronization between the 3 visible views.
4135 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): make
4136 sure the numbers in dateString are formatted so as to take 4 chars
4137 for the year and 2 for the day and the month, otherwise
4138 NSCalendarDate will return a nil date.
4139 ([UIxComponent -applicationPath]): return a path based on the
4140 object's context instead of the second level in SOGo's object
4143 2006-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4145 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): add the
4146 user's timezone abbreviation to the date string passed as parameter to
4147 NSCalendarDate to generate an accurate date instance. Do the same
4148 when no date is specified and today is chosen.
4150 * UI/WebServerResources/UIxAppointmentEditor.js: convert the
4151 form's time values to integers before comparing them.
4153 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -currentStartTime])
4154 ([UIxCalAptListView -currentEndTime]): initialize the resulting
4155 dates timezone with [self viewTimeZone].
4157 * UI/SOGoUI/UIxComponent.m ([UIxComponent -init]): new
4158 "viewTimeZone" ivar destined to hold an instance of the user's
4160 ([UIxComponent -viewTimeZone]): take the timezone from the user's
4163 2006-08-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4165 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: completely
4166 rearranged the layout.
4168 * UI/WebServerResources/UIxAppointmentEditor.js: added code to
4169 manage showing and hiding appointment details.
4171 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
4172 -privateContacts:inContext:]): init the SOGoAppointmentFolder's
4173 timezone by taking the current user's timezone setting.
4175 * SoObjects/Appointments/SOGoAptMailNotification.m: same as below.
4177 * SoObjects/Appointments/SOGoAppointmentObject.m
4178 ([SOGoAppointmentObject -changeParticipationStatus:inContext:]):
4179 set default timezone to EST, although this code should be
4180 rewritten to handle a system and a user default value.
4182 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4183 -takeValuesFromRequest:_rqinContext:_ctx]): enhanced method to
4184 take the values from the hour and minute INPUTs when data is
4185 POSTed since we no longer use the UIxTimeSelector component.
4186 ([UIxTimeDateControl -selectableHours])
4187 ([UIxTimeDateControl -selectableMinutes]): new methods used by the
4188 template SELECTs to display reasonable and acceptable values
4189 instead of all the possibilities.
4191 * UI/WebServerResources/generic.js: adapted code for the new
4192 implementation of the UIxContactSelector component (added a
4193 "remove" button, removed the previous INPUT and replaced them with
4194 links of class "button").
4196 * UI/Scheduler/UIxTimeDateControl.h: separated interface from
4197 UIxTimeDateControl.m.
4199 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -currentAppointmentDay])
4200 ([UIxCalDayTable -currentAppointmentHour]): new methods that
4201 returns correctly formatted values used as attributes for JS code.
4203 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
4204 -initialContactsAsString]): renamed implementation of
4205 initialParticipants.
4206 ([UIxContactSelector -currentContactId])
4207 ([UIxContactSelector -currentContactName]): new methods used when
4208 listing the initial contacts in the widget. Currently, both return
4209 the person's cn but the latter should ultimately return a user
4212 * UI/Contacts/UIxContactSelector.h: separated interface from
4213 UIxContactSelector.m.
4215 * UI/Scheduler/UIxDatePickerScript.[hm]: component removed since
4216 all javascript code is now put in Scheduler.js/generic.js.
4218 * UI/Scheduler/NSCalendarDate+UIx.[hm]: category removed, code
4219 moved into NSCalendarDate+Scheduler instead.
4221 * SoObjects/Appointments/SOGoAppointmentFolder.m
4222 ([SOGoAppointmentFolder -setTimeZone:newTZ]): new method to
4223 configure the timezone from SOGoUserFolder when the instance is
4225 ([SOGoAppointmentFolder -viewTimeZone]): MET was removed. Returns
4226 the value of the new "timezone" ivar.
4228 2006-08-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4230 * UI/WebServerResources/SchedulerUI.{css,js}: added a tabview with
4231 the date selector in the first page and the container of the
4232 future calendar selector in the second page.
4234 * UI/WebServerResources/generic.js: added code for handling tabbed
4237 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productFrameworkName]):
4238 returns the bundle name associated to the current running product.
4240 2006-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4242 * UI/WebServerResources/UIxAppointmentEditor.js: fixed the AJAX
4243 exception by invoking a timeout on the opener rather than invoking
4244 the list refresh method.
4246 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]):
4249 * UI/Scheduler/UIxCalWeekView.m ([UIxCalWeekView -weekBeforePrevWeekQueryParameters])
4250 ([UIxCalWeekView -prevWeekQueryParameters])
4251 ([UIxCalWeekView -nextWeekQueryParameters])
4252 ([UIxCalWeekView -weekAfterNextWeekQueryParameters]): new methods
4253 that return the dates relatively to the current day.
4254 ([UIxCalWeekView -lastWeekName])
4255 ([UIxCalWeekView -currentWeekName])
4256 ([UIxCalWeekView -nextWeekName])
4257 ([UIxCalWeekView -weekAfterNextWeekName])
4258 ([UIxCalWeekView -_weekNumberWithOffsetFromToday:offset]): new
4259 methods that returns the label for the corresponding weeks.
4261 * UI/Scheduler/UIxCalDayTable.[hm]: new class module/component
4262 used by UIxCalDayView and UIxCalWeekView to display the events
4263 occuring in one or more days.
4265 2006-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4267 * UI/Scheduler/UIxCalMainView.m: extended class to populate the
4268 entries in the new "monthMenu" and "yearMenu".
4270 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]): new
4271 method to return the current day as a string formatted depending
4272 on the current locale.
4274 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
4275 ([UIxCalAptListView -endDate]): "today" is now the default filter
4276 for displayed events.
4277 ([UIxCalAptListView -currentSerialDay]): new method returning the
4278 date of the current enumerated appointment in serial form
4281 * UI/WebServerResources/SchedulerUI.js: added code to select the
4282 relevant day when an appointment is selected. Added code to popup
4283 a month and a year menu whenever the header entries are clicked in
4284 the calendar widget.
4286 * UI/WebServerResources/generic.js: made addClassName and
4287 removeClassName methods of HTMLElement.
4289 2006-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4291 * UI/WebServerResources/MailerUI.js: fixed the contact creation
4292 from email addresses.
4294 * UI/WebServerResources/generic.js: centralized the search-related
4295 functions here since the same code was used across the 3
4298 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
4299 ([UIxCalAptListView -endDate]): return the required dates needed
4300 depending on the value given to the "filterpopup" url parameter.
4302 * UI/Common/UIxToolbar.m ([UIxToolbar -buttonLabel]): reduced the
4303 code by invoking UIxComponent's labelForKey:.
4305 * UI/SOGoUI/UIxComponent.m ([UIxComponent -labelForKey:]): use
4306 [self pageResourceManager] instead of [self resourceManager].
4308 * UI/Contacts/UIxContactEditorBase.m: invokes
4309 globallyUniqueObjectId on the clientobject's class instead of the
4310 hardcoded "SOGoFolder".
4312 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4313 -newAction]): redirect the "new" action to the personal (default)
4316 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
4317 +objectWithName:inContainer:]): new constructor.
4319 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
4320 -lookupContactWithId:recordId]): always create a contact object,
4321 even if it does not exist.
4323 2006-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4325 * UI/Scheduler/UIxCalMainView.[hm]: new class to serve as a pseudo
4326 component that lays out the different components of SOGoCalendar.
4327 Only serves as an Objective-C counterpart to its xml template.
4329 * UI/Scheduler/UIxCalInlineMonthOverview.h: interface extracted
4332 * UI/Scheduler/UIxCalFilterPanel.[hm]: new class designed to
4333 display a widget to handle the information displayed in the
4334 appointments list. Not currently used, lacks implementation.
4336 * UI/Scheduler/UIxCalDateSelector.[hm]: new class designed to
4337 display a calendar as a dynamic widget from where one can select
4338 the current visible day.
4340 * UI/Scheduler/NSCalendarDate+Scheduler.[hm]: category code
4341 extracted from UIxCalInlineMonthOverview.m.
4343 * UI/Scheduler/UIxDatePicker.m: removed the jsPopup, jsCode and
4344 calendarPageURL methods. The javascript code is handled by .js
4345 files as much as possible...
4347 * UI/WebServerResources/ContactsUI.js,
4348 UI/WebServerResources/MailerUI.js: adapted to the code refactoring
4351 * UI/WebServerResources/SchedulerUI.js: implemented functions to
4352 handle the new widgets. XmlHTTPRequest code taken from
4355 * UI/WebServerResources/generic.js: put some functions related to
4356 element selections as methods to HTMLElement and HTMLTableElement.
4358 * UI/Scheduler/UIxCalAptListView.[hm]: new class designed to
4359 display the list of appointments (embodies the code-size of
4360 UIxCalAptListView; answers to the "aptlist" method).
4362 2006-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4364 * UI/Scheduler/UIxCalWeekOverview.m ([UIxCalWeekOverview
4365 -correctURLAction]): new short action method replacing the method
4366 below by taking far less code.
4368 * SoObjects/Appointments/SOGoAppointmentFolder.m
4369 ([SOGoAppointmentFolder -GETAction:]): removed method. Replaced
4370 with an action in the view-related code.
4372 * UI/Scheduler/UIxAppointmentEditor.m: invoke
4373 "stringByEscapingHTMLString" on the resulting value to avoid
4374 issues with accented characters.
4375 ([-jsCode]): removed method since the javascript code was merged
4376 into SchedulerUI.js.
4378 2006-08-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4380 * UI/Scheduler/iCalPerson+UIx.m ([iCalPerson +personWithUid:]):
4381 new class method that returns an iCalPerson based on the UID given
4384 * UI/Contacts/UIxContactsListViewContainerBase.m:
4385 UIxContactsListViewContainer renamed to serve as a base class for
4386 the contact lists in both the contact editor and the contact
4389 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4390 ([SOGoContactLDAPFolder
4391 -LDAPSetHostname:setPort:setBindDN:setBindPW:setContactIdentifier:
4392 setUserIdentifier:setRootDN:]): an LDAP field specifying the
4393 loginname of the users can now be specified.
4395 * UI/WebServerResources/generic.js: added code to manage contact
4396 lists through the new implementation of the UIxContactSelector.
4398 * UI/Templates: put the templates related to SchedulerUI in its
4401 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
4402 -asDictionaryWithAttributeNames:withUID:andCName:cName]): add an
4403 entry for "uid" with the field name representing the login name of
4404 the user in the corresponding LDAP branch.
4406 2006-08-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4408 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
4409 -lookupName:_keyinContext:_ctxacquire:_flag]): when the HTTP
4410 request is a PUT, always create an entry, even if we're not sure
4413 2006-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4415 * UI/WebServerResources/ContactsUI.js: implemented live-search.
4417 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
4418 -appendSystemSourcesInContext:context]): populated method with
4419 code that creates entries mapped to instances SOGoContactFolder,
4420 based on the configuration found in the NSUserDefaults under the
4421 key "SOGoLDAPAddressBooks".
4422 ([SOGoContactFolders
4423 -lookupName:nameinContext:contextacquire:acquire]):
4424 "contactsources" do not exist anymore, SOGoContactFolder was split
4425 into two classes: SOGoContactGCSFolder and SOGoContactLDAPFolder
4426 and one protocol: SOGOContactFolder, instead.
4427 ([SOGoContactFolders -contactFolders]): new accessor used by the
4428 views of SOGoContactXXXFolder to list the possible sources.
4430 * SoObjects/Contacts/SOGoContactObject.h: new protocol that
4431 defines the methods that UIxContactsView, ..Editor and so on...
4434 * SoObjects/Contacts/SOGoContactFolder.h: new protocol that
4435 defines the methods that UIxContactsListViewBase expects as well
4436 as the data fields returned in the contact lists.
4438 * SoObjects/Contacts/SOGoContactLDAPFolder.[hm]: new class that
4439 returns entries an LDAP server. Conforms to the new
4440 SOGOContactFolder protocol.
4442 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: new class that
4443 returns a vCard based on contact entries from an LDAP server.
4444 Conforms to the new SOGOContactObject protocol.
4446 * SoObjects/Contacts/NGVCardSimpleValue+Contact.m
4447 ([NGVCardSimpleValue -vCardEntryString]): generates the correct
4448 entry for the textual representation of the vCard.
4450 * SoObjects/Contacts/NGVCardSimpleValue+Contact.[hm]: new class
4453 * SoObjects/Contacts/SOGoContactGCSEntry.[hm]: new module name of
4454 "SOGoContactObject".
4456 * SoObjects/Contacts/NGVCard+Contact.m ([NGVCard -asString]): new
4457 method that generates a textual representation of the vcard.
4459 * SoObjects/Contacts/NGVCard+Contact.[hm]: new class extension.
4461 * SoObjects/Contacts/SOGoContactGCSFolder.[hm]: new module name of
4462 "SOGoContactFolder".
4464 * SoObjects/Contacts/SOGoContactSource.h,
4465 SoObjects/Contacts/SOGoPersonalAB.[hm]: unused classes and
4468 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
4469 -singleAttributeWithName:key]): new method that returns the first
4470 object associated with an ldap key (where generally one value is
4473 -asDictionaryWithAttributeNames:attributeNamesandCName:cName]):
4474 map the entry into an NSDictionary for processing by
4475 UIxContactsListViewBase.m with the least possible overhead.
4477 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: new class
4480 2006-08-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4482 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
4483 -privateContacts:inContext:]): now returns an instance of
4486 * UI/Contacts/UIxContactsListViewContainer.m
4487 ([UIxContactsListViewContainer -contactFolderName]): new method to
4488 return the absolute path to the current contact folder, called
4489 from within the template.
4491 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
4492 JS code to initialize the 'currentContactFolder' generic var.
4494 * SoObjects/Contacts/SOGoContactFolder.m ([SOGoContactFolder
4495 +contactFolderWithSource:inContainer:andName:]): new class
4496 method meant to return an instance connected to the specified
4497 source. Currently useless but won't be anymore in the next few
4500 * SoObjects/SOGo/SOGoUserFolder.h: commented out declaration of
4501 the "lookupFreeBusyObject" method since it does not exist.
4503 * UI/Contacts/UIxContactFoldersView.[hm]: new class module serving
4504 as a "view" for the SOGoContactFolders object. Does nothing but
4505 redirect the browser to the URL of the personal address book of
4506 the user. It does not even have a template.
4508 * SoObjects/Contacts/SOGoPersonalAB.[hm]: new class module
4509 implementing the SOGoContactSource protocol. Does nothing
4510 currently but will be used to implement access to the personal
4511 address book of the user stored in the SOGo database.
4513 * SoObjects/Contacts/SOGoContactSource.h: new "SOGoContactSource"
4514 protocol defining an API common to all possible types of contact
4517 * SoObjects/Contacts/SOGoContactFolders.[hm]: new class module
4518 serving as the root of the contact folders available to the
4519 current user. Correctly lists the contact sources in webdav.
4521 2006-08-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4523 * UI/MailerUI/UIxMailAccountsView.m ([UIxMailAccountsView
4524 -composeAction]): new action method that permits external object
4525 to write a message from the default (primary) account.
4527 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
4528 -initSnapshot]): new method with code taken from "defaultAction"
4529 but needed for others.
4530 ([UIxContactEditorBase -writeAction]): new action designed to
4531 compose the correct URL needed to obtain the MailerUI's email
4532 editor with the correct "mailto" parameter.
4534 * UI/Common/UIxSortableTableHeader.m: moved from MailerUI to
4535 Common so that other modules can use it.
4537 * UI/Contacts/UIxContactsListViewContainer.m: container to make it
4538 easier to manage both ajax and non-ajax requests.
4540 * UI/Contacts/UIxContactsFilterPanel.m: clone of
4541 UIxMailFilterPanel, but applicable to contact lists.
4543 * SoObjects/Contacts/NSDictionary+Contact.m ([NSDictionary
4544 -vcardContentFromSOGoContactRecord]): use the new standard methods
4545 created for each type of entry. If a line is determined to not
4546 contain information, it will be skipped.
4548 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
4549 +initialize]): init defaultMailDomain with the user default
4550 "SOGoDefaultMailDomain".
4552 2006-08-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4554 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
4555 -saveAction]): reorganized methods to only have ONE return point.
4556 Invoke saveRecord: directly on the clientObject instead of
4557 saveContentString, which does the same thing anyway.
4559 * SoObjects/Contacts/NSDictionary+Contact.m
4560 ([NSDictionary -vcardContentFromSOGoContactRecord]): extension
4561 method to convert the dictionary returned with the user submission
4562 to a record in VCARD format to be stored in the database.
4564 2006-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4566 * UI/WebServerResources/MailerUI.js: when opening the context menu
4567 of the message list, select the message below the mouse cursor and
4568 deselect the other selected messages temporarily. This mimics the
4569 behaviour of Thunderbird for that matter and was already
4570 implemented for the entries of the folder tree.
4572 * UI/MailerUI/UIxMailFolderMenu.m ([UIxMailFolderMenu
4573 -iconForMenuItem]): new method that returns the fully qualified
4574 relative URL to the icon representing the mailbox, or the default
4575 mailbox icon if needed.
4577 * UI/SOGoUI/UIxComponent.m ([UIxComponent
4578 -urlForResourceFilename:filename]): automatically return an empty
4579 string whenever the filename passed as argument is nil.
4581 * UI/WebServerResources/MailerUI.js: open the mailboxes with the
4582 "desc" parameter set to 1 so that they are sorted in descending
4583 order by default. Also, added "onHeaderClick()", triggered by
4584 clicking on the message list header elements.
4586 * UI/MailerUI/UIxMailSortableTableHeader.m
4587 ([UIxMailSortableTableHeader -isSortedDescending]): same as below.
4589 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
4590 -isSortedDescending]): defaults to "YES" when the sort order is
4593 2006-07-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4595 * UI/WebServerResources/MailerUI.js:
4596 - message cache: set the max num of cached messages to 20. Limit
4597 the cached message size to 30000 bytes.
4598 - ajax: when a message request is called while one is already
4599 being performed, the latter will be cancelled. Idem when
4600 retrieving the content of a mailbox.
4601 - folder tree: when a mailbox is selected because of the URL
4602 requested (initMailboxSelection), the dtree is expanded throughout
4603 the mailbox entry's parent hierarchy to ensure it is made visible
4604 when the page is being displayed. (new function: expandUpperTree).
4605 - mailbox loading: when loading a mailbox where a message was
4606 previously selected, we invoke its url with the "pageforuid"
4607 parameter correctly specified. During callback processing, we scan
4608 the table for the related row and reselect it.
4609 Also, the message area is set blank before loading any mailbox.
4611 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
4612 -defaultAction]): if the "pageforuid" parameter is passed in the
4613 url, take its value and invoke [self firstMessageOfPageFor:]
4614 consequently to deduce the first message to display. Otherwise,
4615 set it to "idx", otherwise set it to 0.
4616 ([UIxMailListView -firstMessageOfPageFor:]): new method
4617 that determines the first message of the page where the message
4618 passed as parameter is contained.
4620 * UI/WebServerResources/UIxMailListView.js: removed this module,
4621 its code was put in MailerUI.js instead.
4623 2006-07-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4625 * UI/MailerUI/UIxMailFolderMenu.m: a descendent of UIxMailTree
4626 which returns the nodes for the parent specified in "parentMenu".
4627 Used to generate the javascript code for the folder dtree.
4629 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: the components
4630 using that container-template are now using UIxMailMainFrame
4631 since UIxMailPanelFrame had no real interest. File removed.
4633 * UI/WebServerResources/dtree.{css,js}: new files to handle
4634 javascript-generated mailbox tree. Modified from original version
4635 by integrating the previous code with the one we are using for
4636 selections and mailbox handling. Minor visual enhancements too...
4638 2006-07-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4640 * SoObjects/Mailer/SOGoUser+Mail.m: if only one identity is to be
4641 returned, put it in an NSArray before returning it (fixes
4644 2006-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4646 * UI/SOGoUI/NSString+URL.m ([NSString -hostlessURL]): new method
4647 that returns a url string stripped from its "http://hostname"
4650 * UI/SOGoUI/NSDictionary+URL.[hm]: moved from UI/Common.
4652 * UI/SOGoUI/NSString+URL.[hm]: moved from UI/Common.
4654 2006-07-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4656 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
4657 -mailDateFormatter]): retrieve the timezone from the user settings
4658 and pass it to the returned dateFormatter. Also, the dateFormatter
4659 is kept in a static variable to avoid useless
4660 creations/destructions.
4662 * UI/MailerUI/UIxMailFormatter.m ([UIxMailDateFormatter
4663 -setTimeZone:newTimeZone]): new accessor to specify the timezone.
4665 * UI/MailerUI/UIxMailFilterPanel.m ([UIxMailFilterPanel -setSearchCriteria:])
4666 ([UIxMailFilterPanel -searchCriteria]): new methods, similar to
4667 s/Criteria/Text/ to handle the "criteria" form parameter.
4669 2006-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4671 * UI/WebServerResources/uix.css: enhanced the toolbar appearance
4672 to integrate better with the firefox look&feel. Added entries for
4673 the new "menu" DIV class (popup menus).
4675 * UI/WebServerResources/generic.js: added "sanitizeMailTo" which
4676 takes any chunk of text as param, detects the user email and the
4677 optional first and last names and return them in a well-formatted
4678 way. Renamed "getSelection" to "getSelectedNodes" to avoid a
4679 namespace conflict. Added "onMenuClick(node, event, menuId)" to
4680 handle popup menus through "onclick" element attributes (node =
4681 this, event = event and menuId = name of the menu DIV id to
4684 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
4685 -snapshot]): add an entry for "email" into the snapshot
4686 dictionary if a "contactEmail" URL parameter was detected and if
4687 the entry for "email" is empty.
4689 * UI/Contacts/Toolbars/SOGoContactFolder.toolbar: the "new card"
4690 button now invokes the newContact() js function in ContactsUI.js
4691 instead of opening "new" directly. newContact() pops up a window
4692 stripped from its navigation bar.
4694 * UI/Contacts/ContactsUI.js: new module specific to the ContactsUI
4695 bundle (AddressBook).
4697 * UI/Templates/MailerUI/UIxMailView.wox: added a div of class
4698 "menu" and id "addressMenu" have the header email addresses
4699 display it with the new menu code in generic.js.
4701 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: same as below +
4702 replaced the body tables with a div of class "pageContent"
4703 (standardization across the page templates).
4705 * UI/Templates/MailerUI/UIxMailMainFrame.wox: include
4706 productJavaScriptURL and pageJavaScriptURL (conditionnally) since
4707 those are now inherited from UIxPageFrame.
4709 * UI/MailerUI/UIxMailView.js: new file specific to UIxMailView.
4711 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]): if
4712 a "mailto" URL parameter is detected and the "to" array is empty,
4713 initialize "to" with the value of "mailto" before returning it.
4715 * UI/MailerUI/UIxMailEditorAction.m ([UIxMailEditorAction
4716 -composeAction]): rewrote method in a cleaner way and with usage
4717 of the URL extensions to NSString and NSDictionary (see below).
4718 Also, if a "mailto" url parameter is detected, pass it to the
4721 * UI/MailerUI/UIxMailMainFrame.m: subclassed from UIxPageFrame to
4724 * UI/Common/NSDictionary+URL.m ([NSDictionary -asURLParameters]):
4725 returns a parameter string to add to a base URL.
4727 * UI/Common/NSString+URL.m ([NSString
4728 -composeURLWithAction:parameters:andHash:useHash]): new method to
4729 compose a complete URL from an object URL with parameters and an
4730 optional '#' character.
4732 * UI/Common/UIxPageFrame.h: separated interface from
4735 2006-07-07 Wsourdeau Sourdeau <wsourdeau@inverse.ca>
4737 * UI/Scheduler/UIxAppointmentEditor.m: returns yes to "isPopup";
4739 * UI/WebServerResources/generic.js: added code to manage
4740 selections within HTML containers.
4742 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productJavaScriptURL]):
4743 added method to determine the possible URL for a product-specific
4744 javascript filename of the forme <productname>.js.
4745 ([UIxPageFrame -hasProductSpecificJavaScript]): new method.
4746 ([UIxPageFrame -isPopup]): new method to determine whether the
4747 application navigator bar should be displayed (main page) or not
4750 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
4751 -LDAPCheckLogin:_loginpassword:_pwd]): new method to authenticate
4752 the user through LDAP.
4754 2006-07-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4756 * The toolbar code from the MailerUI product was taken, renamed as
4757 "UIxToolBar" and put into UI/Common. Toolbar plists were created
4758 for the Contacts and Scheduler products and put in their respectir
4759 Toolbars/ subdirectories. Finally,
4760 UI/Templates/{UIxToolbarButton,UIxToolbarSeparator}.wox, and
4761 UI/Common/{UIxToolbarButton,UIxToolbarSeparator}.m were removed
4762 and an invocation to the UIxToolbar component was put at the top
4763 of UI/Templaces/UIxPageFrame.wox.
4765 * UI/Common/UIxToolbar.m: new "isLastGroup" method to determine
4766 within the templates whether a separator should be displayed.
4768 * UI/Common/UIxToolbar.m ([UIxToolbar -hasButtons]): new method
4769 that returns NO if the toolbar is empty.
4771 2006-07-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4773 * UI/Templates/UIxPageFrame.wox: replaced central table with a DIV.
4775 * UI/Common/UIxToolbarSeparator.m, UI/Common/UIxToolbarButton.m:
4776 new toolbar objects.
4778 * UI/Templates/UIxPageFrame.wox: use the exact html code as below.
4780 * UI/Templates/MailerUI/UIxMailMainFrame.wox: redone the
4781 linkbanner as a DIV instead of a TABLE.
4783 * UI/MailerUI/UIxMailMainFrame.m [UIxMailMainFrame
4785 returns 'YES' to request the display of the navigation bar between
4788 2006-06-15 ludovic@inverse.ca
4790 * It's now possible to set the default
4791 domain using for email using the
4792 SOGoDefaultMailDomain preference key.
4794 2006-06-15 ludovic@inverse.ca
4796 * Initial import of SOGo from trunk.