1 2007-09-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
4 set the cookie path to "/".
6 * Main/SOGo.m ([SOGo -authenticatorInContext:_ctx]): choose the
7 authenticator based on the request handler key. "dav" returns the
8 SOGoDAVAuthenticator, anything else returns the Web authenticator.
10 * SoObjects/SOGo/SOGoDAVAuthenticator.m: renamed module from
13 * SoObjects/SOGo/SOGoWebAuthenticator.m: new class module
14 implementing a subclass of SoCookieAuthenticator, designed for
15 web-based cookie authentication of users.m
17 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
18 new method that resets the authentification cookie.
20 2007-08-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
22 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
23 -checkLogin:loginToCheckandPassword:passwordToCheck]): initialize
24 didBind to NO to make sure no false authentication is returned if
25 the bind operation is not executed.
27 2007-08-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
29 * SoObjects/Mailer/SOGoDraftObject.m: added support for the
30 "In-Reply-To" header field when replying.
32 * UI/MainUI/SOGoUserHomePage.m: add the "c_" prefix to the quick
33 table field names that are queried.
35 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
36 -iCalStringForFreeBusyInfos:_infosfrom:_startDateto:_endDate]):
37 add the "c_" prefix to the quick table field names that are
40 2007-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
42 * SoObjects/Appointments/SOGoAppointmentFolder.m
43 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): add
44 "personal" to the ocs path of the appointment folder.
46 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
47 -flatContentAsString]): use latin1 when the encoding is not
48 specified, and to reencode data chunk which were not correctly
49 decoded with the original charset.
51 * SoObjects/Appointments/SOGoAppointmentFolder.m ([SOGoAppointmentFolder -aclUsersForObjectAtPath:objectPathArray])
52 ([SOGoAppointmentFolder -aclsForUser:uidforObjectAtPath:objectPathArray])
53 ([SOGoAppointmentFolder -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray])
54 ([SOGoAppointmentFolder
55 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]):
56 override those methods to use the "personal" additional directory.
58 * SoObjects/SOGo/SOGoUserFolder.m ([-ocsPrivateCalendarPath]):
59 append "/personal" to the calendar path to simulate a single
60 calendar in a choice of many.
62 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
63 -lookupName:_keyinContext:acquire:_acquire]): moved the lookup
64 methods back here. Moved the folder existence check here, and do
65 it on self only when the lookup happens for a non-folder object.
66 This permits to accept entries for folders with parents who
69 2007-08-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
71 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
72 -shouldTakeValuesFromRequest:requestinContext:context]): same as
75 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
76 -shouldTakeValuesFromRequest:requestinContext:context]):
77 redesigned method since any method called can be received from a
78 POST or a GET. Instead we check the method call itself and we
79 accept only if it has the "save" prefix.
81 * SoObjects/Appointments/SOGoAptMailNotification.m
82 ([SOGoAptMailNotification -getSubject]): returns the subject an a
83 quoted-printable encoded string, if needed.
85 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
86 -asQPSubjectString:encoding]): moved method into
89 2007-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
91 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
92 -messageForwardingList])
93 ([UIxPreferences -itemMessageForwardingText])D
94 ([UIxPreferences -userMessageForwarding])
95 ([UIxPreferences -setUserMessageForwarding:newMessageForwarding]):
96 new template methods for manage the user preference regarding
99 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -language]): change the
100 algorithm to return, in order, the user's defined language or the
101 first browser language or, finally, the default language.
102 ([SOGoUser -messageForwarding]): new method that returns the user
103 preference for message forwarding: "inline" or "attached",
104 defaulting to "attached".
106 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
107 -contentForInlineForward]): new method that returns the content of
108 the message for inline forwarding based on the SOGoMailForward
111 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
112 -fetchMailForForwarding:sourceMail]): check the user preference
113 for message forwarding and compose inline forwarded messages if required.
115 * SoObjects/Appointments/SOGoCalendarComponent.m
116 ([SOGoCalendarComponent
117 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
118 now use a template based on the language returned from the
121 * SoObjects/Mailer/SOGoMailEnglishForward.m: new module containing
122 a subclass of SOGoMailForward for English locale.
124 * SoObjects/Mailer/SOGoMailFrenchForward.m: new module containing
125 a subclass of SOGoMailForward for French locale.
127 * SoObjects/Mailer/SOGoMailForward.[hm]: new module class that
128 helps build template for inline forwarded messages.
130 2007-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
132 * UI/SOGoElements/SOGoIEConditional.m: new extension module class
133 to handle "<var:if-ie>" template tags.
135 * UI/SOGoElements: new extension bundle containing sogo-specific
138 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
139 -takeValuesFromRequest:_rqinContext:_ctx]): save the category
140 selected in the dialog.
141 ([UIxComponentEditor -setComponent:newComponent]): retrieve the
142 first category, if ever, of the calendar entity.
144 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
145 -composeAction]): restored method since it is needed by the
148 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
149 -composeAction]): the address fields should be arrays and not
152 * UI/Common/UIxPageFrame.m ([UIxPageFrame -buildDate]): new method
153 that returns the build date of SOGo in the template.
155 2007-08-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
157 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
158 -_flattenedRecords:records]): when the c_cn field is empty,
159 returns set a formatted string with the concatenation of
160 c_givenname and c_sn as the displayName.
162 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
163 -isValidMailAccountName:_key]): prevent unknown accounts from
166 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
167 -pathToAttachmentObject]): we no longer need the filename
168 extension for SoLookup...
170 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
171 -lookupName:_keyinContext:_ctxacquire:_flag]): do not require the
172 filename to have an extension, and thus accept any filename.
174 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
175 -currentCName]): new method that returns the c_name of the
176 contact, correctly escaped to be passed by url afterwards.
178 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
179 ([UIxMailPartHTMLViewer -flatContentAsString]): pass the NSData
180 instance of [self decodedFlatContent] instead of the buggy
181 NSString from [super flatContentAsString] to the parser.
183 2007-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
185 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -deleteAction]):
186 new category method to reponds to the "delete" web command on
188 ([UIxMailActions -deleteAttachmentAction]): new category method to
189 reponds to the "deleteAttachment" web command on drafts, taking
190 the "filename" url parameter into account.
192 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
193 -contentForEditing]): new method that retrieve the editable mail
195 ([SOGoMailObject -fetchFileAttachmentKeys]): new method that
196 returns the body keys for attached files (parts with a "filename"
199 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
200 -asQPSubjectString:encoding]): do not change the string if the
201 encoded string has the same length (which means it is already
203 ([SOGoDraftObject -fetchMailForEditing:sourceMail]): new method
204 that retrieve a draft along with its attachments for editing.
205 ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): no longer
206 choke if the "to" header field is empty.
207 ([SOGoDraftObject -delete]): new method to delete the draft folder
208 whenever operations are done.
210 2007-08-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
212 * UI/MailerUI/UIxMailEditor.m ([-patchFlagsInStore]): removed
213 useless stub method, of which the intention was implemented in
215 ([-lookupSentFolderUsingAccount]): removed obsolete method.
216 ([-selectedMailIdentity]): removed obsolete method.
217 ([-lookupSentFolderUsingFrom]): removed obsolete method.
218 ([-storeMailInSentFolder:_path]): removed obsolete method, of
219 which the mechanism has been put in -[SOGoDraftObject sendMail]
221 ([UIxMailEditor -_saveFormInfo], [UIxMailEditor -defaultAction])
222 ([UIxMailEditor -saveAction], [UIxMailEditor -sendAction]):
223 adapted algorithms to the new SOGoDraftObject methods.
224 ([-deleteAction]): removed method since local draft objects cannot
225 be removed by the user.
227 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
228 -expungeAction]): new method replacing the one previously found in
230 ([UIxMailFolderActions -createFolderAction])
231 ([UIxMailFolderActions -renameFolderAction])
232 ([UIxMailFolderActions -deleteFolderAction])
233 ([UIxMailFolderActions -emptyTrashAction])
234 ([UIxMailFolderActions -subscribeAction])
235 ([UIxMailFolderActions -unsubscribeAction]): error situations
236 should have http return code 500 instead of 403.
238 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
239 -composeAction]): new method replacing the one previously in
242 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
243 -imap4URLString]): removed overriden method (see below).
245 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -aclUsers]):
246 cache the mailbox acl.
247 ([SOGoMailFolder -aclsForUser:uid]): cache the mailbox acl.
248 ([SOGoMailFolder -setRoles:rolesforUser:uid]): reset the mailbox
250 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): modified to use
251 the new method of determining the users mail accounts.
253 * SoObjects/Mailer/SOGoMailBaseObject.m ([-imap4URLString]): no
254 longer adds a "/" at the end of the string (the default for
255 folders), therefore this will be overriden in SOGoMailFolder
256 rather than in SOGoMailObject.
258 * UI/MailerUI/UIxMailListView.m ([-expungeAction]): removed
259 method, moved into the new UIxMailActions module class.
261 * SoObjects/Mailer/SOGoDraftsFolder.m ([SOGoDraftsFolder
262 -newDraft]): new method that returns a new SOGoDraftObject
263 instance with a unique filename based on the current timestamp and
264 the "newDraft" prefix.
266 -lookupName:nameinContext:localContextacquire:acquire]): overriden
267 method by detecting local drafts with their "newDraft" prefix.
268 ([SOGoDraftsFolder -isInDraftsFolder]): returns YES.
270 * SoObjects/Mailer/SOGoDraftsFolder.[hm]: rewrote class module
271 from scratch by making it a subclass of SOGoMailFolder.
273 * UI/MailerUI/UIxMailReplyAction.m: removed obsolete class
276 * UI/MailerUI/UIxMailForwardAction.m: removed obsolete class
279 * UI/MailerUI/UIxMailEditorAction.[hm]: removed obsolete class
282 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -init]):
283 new method, initializing the new ivars: IMAP4ID, headers, text,
284 sourceURL and sourceFlag.
285 ([-spoolFileManager], [SOGoDraftObject -userSpoolFolderPath])
286 ([-_ensureUserSpoolFolderPath])
287 ([-saveMimeMessageToTemporaryFileWithHeaders:])
288 ([SOGoDraftObject -mimeMessageWithHeaders:_headers])
289 ([-deleteTemporaryMessageFile:], [-delete], [-content])
290 ([-GETAction:_ctx], [-DELETEAction:_ctx], [-fetchParts:])
291 ([-uid], [-flags], [-size], [-envelope]): removed methods.
292 ([SOGoDraftObject -storeInfo]): rewrote method to take the new
294 ([SOGoDraftObject -setSourceURL:newSourceURL])
295 ([SOGoDraftObject -setSourceFlag:newSourceFlag]): new accessor
296 methods to store the url of the original message between accesses
297 so that, depending on the action taken (forward or reply), the
298 correct flag can be given.
299 ([SOGoDraftObject -setIMAP4ID:]): new accessor method that sets
300 the imap4 id that is returned for the message whenever it is saved
301 into the drafts folder.
302 ([SOGoDraftObject -save]): new method that takes in charge the
303 saving of the message in the IMAP drafts folder.
304 ([SOGoDraftObject -fetchMailForReplying:sourceMailtoAll:toAll]):
305 new method that fills the original data of the new message with
306 the reply content of the original message.
307 ([SOGoDraftObject -fetchMailForForwarding:sourceMail]): same as
308 above for message forwarding.
309 ([-spoolFileManager]): removed useless method (only returned the
310 default filemanager...)
311 ([SOGoDraftObject -mimeMessageAsData]): new method that returns
312 the resulting message as an NSData chunk.
314 * SoObjects/Mailer/SOGoMailObject+Draft.m: new extension module
315 containing a rewrite of the mail action methods found in
316 UI/Mailer/, that needed to be put in the SOGoMailObject class.
317 ([SOGoMailObject -subjectForReply]): new method that returns a
318 subject suitable for replies.
319 ([SOGoMailObject -contentForReply]): new method that returns the
320 textual content of an email, quoted for replying.
321 ([SOGoMailObject -filenameForForward]): new method that returns
322 the name of the filename that should contain the forwarded
323 message, based on its subject.
324 ([SOGoMailObject -subjectForForward]): explicit.
326 2007-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
328 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
329 -mailAccounts]): rewrote method to return the name of the mail
330 accounts now available with the -[SOGoUser mailAccounts] method.
331 ([UIxMailMainFrame -showLinkBanner]): removed method.
332 ([UIxMailMainFrame -bannerToolbarStyle]): removed method.
333 ([UIxMailMainFrame -bannerConsumeStyle]): removed method.
334 ([UIxMailMainFrame -rootURL]): removed method.
335 ([UIxMailMainFrame -userRootURL]): removed method.
336 ([UIxMailMainFrame -calendarRootURL]): removed method.
337 ([UIxMailMainFrame -contactsRootURL]): removed method.
338 ([UIxMailMainFrame -hasErrorText])
339 ([UIxMailMainFrame -errorText])
340 ([UIxMailMainFrame -errorAlertJavaScript]): removed methods.
341 ([-composeAction]): removed method. Now provided by
342 UIxMailAccountActions.
343 ([UIxMailMainFrame -setHideFolderTree:_flag]): removed method.
344 ([UIxMailMainFrame -hideFolderTree]): removed method.
345 ([UIxMailMainFrame -treeRootClassName]): removed method.
346 ([UIxMailMainFrame +initialize]): removed method.
347 SOGoMailTreeRootClass userdefaults will no longer have any effect.
349 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
350 -redirectToLocation:newLocation]): new method that implements the
351 same functionality as WOComponent.
353 * UI/Common/WODirectAction+SOGo.[hm]: new class extension module.
355 * UI/MailerUI/UIxMailView.m ([UIxMailView -mailIsDraft]): new
356 method that returns whether the current mail is store in the
357 drafts folder hierarchy.
359 * SoObjects/SOGo/SOGoUser.m ([-fullEmail]): removed method.
360 ([-primaryEmail]): removed method.
361 ([SOGoUser -primaryIMAP4AccountString]): removed method.
362 ([SOGoUser -mailAccounts]): new method that returns an array
363 containing description dictionaries for all the user mail
364 accounts. Each account also contain the user's identities for that
366 ([SOGoUser -allIdentities]): new utility method that returns all
367 the user identities on all accounts.
368 ([SOGoUser -primaryIdentity]): new method return the first
369 identity of the first account.
371 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]):
373 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
374 -isInDraftsFolder]): returns NO.
375 ([-preferredIdentity]): removed method, replaced with -[SOGoUser
377 ([SOGoMailAccount -draftsFolderInContext:_ctx]): new method.
379 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
380 -isInDraftsFolder]): new method that detects if self is contained
381 by the drafts folder by calling itself on the container object.
383 * SoObjects/Mailer/SOGoMailAccounts.m ([-fetchAllIdentities]):
385 ([-fetchIdentitiesWithEmitterPermissions]): removed method.
386 ([SOGoMailAccounts -toManyRelationshipKeys]): rewrote method to
387 return the name of the mail accounts now available with the
388 -[SOGoUser mailAccounts] method.
390 * SoObjects/Mailer/SOGoUser+Mail.[hm]: removed useless class
393 * SoObjects/Mailer/SOGoMailIdentity.[hm]: removed useless class
396 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
397 -keysWithFormat:format]): method that forward the method of the
398 same name to each member of the array, considering they all are
399 instances of NSDictionary.
400 ([NSArray -objectsForKey:key]): same principle as above.
401 ([NSArray -flattenedArray]): new method that transforms an array
402 of arrays into a single array containing all the elements of the
405 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
406 -keysWithFormat:keyFormat]): new method inspired by the python
407 string formatting system and which replaces occurences of "%{key}"
408 by the corresponding keys.
410 2007-08-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
412 * Main/SOGo.m ([SOGo -run]): check for channel-type specific
413 sql script before the generic one when initializing mandatory
416 2007-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
418 * SoObjects/SOGo/NSString+Utilities.m ([NSString
419 -pureEMailAddress]): new utility method inspired by the
420 "_rawSender" private method in SOGoDraftObject, which it now
423 * SoObjects/SOGo/SOGoMailer.m: new abstraction class module that
424 provides a common API for sending emails, no matter what the
427 2007-08-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
429 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
430 -quotasAction]): invoke "relativeImap4Name" instead of
431 "nameInContainer" since the latter also returns the "folder"
434 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
435 -listMailboxesAction]): declare the output as text/plain in UTF-8.
437 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
438 -deleteFolderAction]): fixed the url of the destination folder.
440 * Main/SOGo.m ([SOGo +initialize]): show the build date and
443 2007-08-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
445 * SoObjects/Appointments/SOGoCalendarComponent.m
446 ([SOGoCalendarComponent
447 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
448 set the mail date to the current date string returned by our
449 rfc822DateString extension method.
451 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
452 -_gcsFoldersFromFolder:): ignore the personal folders who are
453 returned but don't really exist.
455 2007-08-02 Francis Lachapelle <flachapelle@inverse.ca>
457 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView _responseForResults:]):
458 has to return only one element.
460 2007-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
462 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
463 -content]): new method returning the decoded content of the
464 corresponding attachment as an NSData instance.
465 ([UIxMailPartViewer -filename]): if the "filename" parameter of
466 the metadata parameterList is empty, try to find out the filename
467 from the "disposition" metadata returned with the BODYSTRUCTURE
470 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
471 -composeAction]): prefix the INBOX folder with "folder".
473 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailBaseObject
474 -relativeImap4Name]): return nameInContainer stripped from its
475 first 6 characters since all folder names are prefixed with
478 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
479 -imap4URLString]): invoke -relativeImap4Name instead of
480 "nameInContainer" since the former will return the fixed IMAP4
481 foldername and the latter the SoObject name.
483 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
484 +initialize]): we now fetch the "BODYSTRUCTURE" key instead of "BODY".
486 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderNameInContext:])
487 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
488 ([SOGoMailAccount -sieveFolderNameInContext:_ctx])
489 ([SOGoMailAccount -sentFolderNameInContext:])
490 ([SOGoMailAccount -trashFolderNameInContext:]): prefix the folder
492 ([SOGoMailAccount -inboxFolderInContext:_ctx])
493 ([SOGoMailAccount -sentFolderInContext:_ctx])
494 ([SOGoMailAccount -trashFolderInContext:_ctx]): no longer prefix
495 the folder names with "folder" since they are prefixed earlier.
497 2007-07-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
499 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
500 ([-sentFolderInContext:], [-trashFolderInContext:]): folder keys
501 all starts with "folder".
503 * SoObjects/SOGo/SOGoObject.m ([SOGoObject +initialize]): no
504 longer declare security info from here.
506 * SoObjects/Mailer/SOGoMailFolder.m
507 ([-isMessageKey:_keyinContext:_ctx]): removed useless method.
508 ([SOGoMailFolder -lookupName:_keyinContext:acquire:_acquire]):
509 folder names now always start with "folder".
511 * SoObjects/Mailer/SOGoMailAccount.m
512 ([-lookupName:inContext:acquire:]): folder names now always start
515 2007-07-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
517 * UI/MailerUI/UIxMailForwardAction.m ([UIxMailForwardAction
518 -forwardAction]): adapted to the new saveAttachment:withMetadata:
521 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -saveAction]): added
522 code to save the attached filenames with the filename returned by
523 the web server as well as their mime types.
525 * UI/MailPartViewers/UIxMailPartMessageViewer.m ([UIxMailPartMessageViewer -fromAddresses])
526 ([UIxMailPartMessageViewer -toAddresses])
527 ([UIxMailPartMessageViewer -ccAddresses]): new methods returning
528 the corresponding fields separated with a ", " (if needed).
530 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
531 -saveAttachment:_attachwithMetadata:metadata]): new method
532 replacing -saveAttachment:withName: and which takes a dictionary
533 as parameter with the filename and the mime type of the
535 The mimetype is then saved in a hidden text file.
536 ([SOGoDraftObject -contentTypeForAttachmentWithName:]): if exists,
537 take the mime type from the hidden text file related to the
540 * SoObjects/Contacts/SOGoContactGCSFolder.m ()
541 ([SOGoContactGCSFolder
542 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
543 return records if the db records are > 0 and not just > 1...
545 2007-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
547 * UI/Contacts/UIxContactsListView.m ([-displayName]): removed
549 ([UIxContactsListView -defaultSortKey]): changed to "displayName".
551 * SoObjects/Contacts/SOGoContactLDAPFolder.m
552 ([SOGoContactLDAPFolder
553 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
554 translate the returned records to a normalized form.
556 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
557 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
558 translate the returned records to a normalized form.
560 * UI/Scheduler/UIxCalListingActions.m,
561 UI/Contacts/UIxContactsListView.m, SoObjects/SOGo/SOGoUser.m,
562 SoObjects/SOGo/AgenorUserDefaults.m,
563 SoObjects/Contacts/SOGoContactGCSFolder.m,
564 SoObjects/Appointments/SOGoAppointmentFolder.m,
565 OGoContentStore/OCSiCalFieldExtractor.m,
566 OGoContentStore/OCSContactFieldExtractor.m: prefixed all quick
567 table fields with "c_".
569 2007-07-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
571 * SoObjects/SOGo/LDAPSource.m ([LDAPSource +initialize]): query
572 the values for SOGoLDAPQueryLimit and SOGoLDAPQueryTimeout from
573 the application settings. If set, both limit will influence the
574 maximum size of the resultsets and the time taken to solve them.
575 ([LDAPSource -_initLDAPConnection]): initialize the limits.
577 2007-07-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
579 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder -davNamespaces]): added new overriden
580 method that declares the DAV namespace related to CardDAV.
581 ([SOGoContactGCSFolder -davComplianceClassesInContext:]): new
582 method that declares the "access-control" and "addressbook-access"
585 * SoObjects/Appointments/SOGoAppointmentFolder.m
586 ([-lookupActionForCalDAVMethod:]): removed method.
587 ([SOGoAppointmentFolder -davNamespaces]): added new overriden
588 method that declares the DAV namespace related to CalDAV.
590 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davNamespaces]): new
591 optional method for subclasses which handle specific extensions to
592 the DAV protocol: CardDAV or CalDAV.
594 -lookupName:lookupNameinContext:localContextacquire:acquire]):
595 new overriden method that handles dav invocations for extensions
596 to DAV by returning an appropriate SoSelectorInvocation.
598 * SoObjects/SOGo/NSString+Utilities.m ([NSString
599 -asDavInvocation]): new method returning a dictionary with a "ns"
600 key representing the dav namespace and a "method" key representing
601 the dav method name of the request.
603 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
604 +initialize]): scan the value of SOGoUIxUserCanChangePassword.
606 ([UIxPreferences -shouldDisplayPasswordChange]): new template
607 method that returns the value of SOGoUIxUserCanChangePassword.
609 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
610 scan the value of SOGoUIxDefaultModule. If not set, the default
611 module defaults to "Calendar".
612 ([SOGoUserHomePage -defaultAction]): redirect the user to the
613 value of "SOGoUIxDefaultModule".
615 2007-07-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
617 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
618 -contactInfos]): cache the results to avoid multiple invocations.
620 * SoObjects/Contacts/SOGoContactLDAPFolder.m
621 ([SOGoContactLDAPFolder -toOneRelationshipKeys]): check whether we
622 really should return something or if we fake to return nil...
624 2007-07-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
626 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): set
627 acceptAnyUser to YES only when the SOGoAuthentificationMethod user
628 default is set to "bypass".
630 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
631 -checkLogin:_loginpassword:_pwd]): accepts unverified connections
632 when authMethod is set to "bypass" from now on. This would avoid a
633 security concern with a default installation of SOGo.
634 AuthentificationMethod is now prefixed with "SOGo" for better
637 2007-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
639 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
640 -quotasAction]): new method that returns a json representation of
643 2007-07-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
645 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
646 -imap4URL]): rewrote method to support accented mailbox names.
647 ([SOGoMailBaseObject imap4Password]): rewrote to simply use
648 SOGoAuthenticator's passwordInContext:.
650 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
651 -takeValuesFromRequest:_rqinContext:_ctx]): explicitly set the
652 start and due dates to nil if hasStartDate and hasDueDate are
655 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
656 -passwordInContext:context]): made method public.
658 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
659 -extractQuickFieldsFromTodo:_task]): set "isallday" and "isopaque"
660 to false to avoid a null violation.
662 2007-07-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
664 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
665 -contentAsString]): returns the message encoded in ISO Latin 1
668 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): read the
669 SOGoSuperUsername user defaults.
670 ([SOGoUser -initWithLogin:newLoginroles:newRoles]): simplified
672 ([SOGoUser -rolesForObject:objectinContext:context]): if the
673 current user is the superuser, grant him/her the "owner" role.
675 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
676 the folder only if the current user is the owner of the future
679 * SoObjects/Appointments/SOGoCalendarComponent.m
680 ([SOGoCalendarComponent -contentAsString]): we return the content
681 based on the permissions returned by the security manager instead
682 of by looking at the user roles.
684 * SoObjects/Appointments/SOGoAppointmentFolder.m
685 ([SOGoAppointmentFolder -calendarFolders]): read the calendar
686 folders of the user to whom this folder belongs instead of the
687 active user. This way, a delegate user will be able to have the
688 same view that the original user has if he connects from his user
691 * Main/SOGo.m ([SOGo -lookupUser:_keyinContext:]): check if the
692 user exists before creating the SOGoUserFolder instance. If not,
695 * UI/MailerUI/UIxMailSourceView.[hm]: new class module designed to
696 return the message source code in plain text.
698 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
699 -contentAsString]): returns the message encoded in UTF8.
701 2007-07-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
703 * OGoContentStore/iCalRepeatableEntityObject+OCS.m
704 ([iCalRepeatableEntityObject -cycleInfo]): no longer take the
705 leading tagname into account when serializing the element values.
707 * Main/SOGoProductLoader.m: only load bundle directories ending
708 with the "SOGo" extension.
711 -_checkTableWithCM:cmtableURL:urlandType:tableType]): empty the
712 result set if the query has caused no exception. Otherwise we get
713 an "evaluation is in progress exception".
715 2007-06-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
717 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
718 -generateSQLForInsert]): initialize error to nil before the
719 serialization. Otherwise the method can get confused if it ever is
720 initialized to something else.
722 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
723 -folderIsMandatory]): returns NO unconditionnally.
725 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
726 -appendPersonalSources]): add the "personal" folder to the list of
727 user folders even if it doesn't exist, so that it is created when
728 the user accesses it.
730 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
731 -folderIsMandatory]): returns YES if nameInContainer is set to
732 "personal", which is the default address book.
734 * SoObjects/Appointments/SOGoAppointmentFolder.m
735 ([SOGoAppointmentFolder -folderIsMandatory]): returns YES since
736 users must have one Calendar folder (one and only one).
737 ([SOGoAppointmentFolder -_privacySqlString]): unescape the
738 escaping '\' so make the carriage return a real one. This way,
739 PgSQL 8 won't complain about escaping the string.
741 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): new
742 method that create the folder if considered mandatory.
743 ([SOGoFolder -folderIsMandatory]): new method that determines
744 whether the folder should be created automatically or not. To be
745 overriden by subclasses.
747 * Main/SOGo.m ([SOGo -run]): override method and create the
748 missing system tables if needed.
750 2007-06-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
752 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
753 -mailDateFormatter]): returns the user's date formatter.
755 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject -date]):
756 applies the user timezone to the date object before returning it.
758 * UI/Common/UIxSortButton.m: removed useless class module.
760 * UI/Common/UIxSortableTableHeader.m: removed useless class
763 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
764 -contactInfos]): use the "asc" url parameter instead of "desc" to
765 determine the ordering.
766 ([-sortOrdering]): removed method.
767 ([UIxContactsListView -init]): removed the "searchText" ivar.
768 (general): the template no longer use the UIxSortableTableHeader
771 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
772 -defaultSortKey]): default sort following the messages arrival
773 instead of their date.
774 ([-isSortedDescending]): removed method.
775 ([-imap4SortOrdering]): use the "asc" url parameter instead of
776 "desc" to determine the ordering.
777 (general): the template no longer use the UIxSortableTableHeader
780 2007-06-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
782 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sleep]):
784 ([-setQualifier:_msg], [-qualifier]): removed methods.
785 ([UIxMailListView -defaultAction]): added code to handle the
786 search criteria and value passed as url parameters. Also, we now
787 handle the same search criterias as Thunderbird/Icedove.
789 2007-06-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
791 * UI/PreferencesUI/UIxJSONPreferences.m ([UIxJSONPreferences
792 -jsonDefaultsAction]): bug fix: returns a WOResponse instance with
793 the string instead of the string itself.
794 ([UIxJSONPreferences -jsonSettingsAction]): same as above.
796 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): new module
797 bool var "acceptAnyUser" that is set when the AuthenticationMethod
799 ([SOGoUser -initWithLogin:newLoginroles:newRoles]):
800 unconditionnally returns an instance whenever acceptAnyUser is set.
802 2007-06-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
804 * Main/sogod.m (main): prevent SOGo from running as root.
806 2007-06-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
808 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
809 -setCurrentPassword:newPassword]): new stub method.
810 ([SOGoUser -dateFormatterInContext:context]): new method that
811 returns an instance of SOGoDateFormatter configured based on the
814 * UI/Common/UIxPageFrame.m ([UIxPageFrame
815 -relativePreferencesPath]): new method.
817 * UI/Scheduler/UIxComponentEditor.m ([-titleDateFormatter]):
818 removed useless method.
820 * SoObjects/SOGo/SOGoDateFormatter.m: rewrote class to accept
821 different configurable formats (long and short date + time).
823 * SoObjects/SOGo/SOGoDateFormatter.[hm]: moved from UI/SOGoUI/.
825 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
826 -isInternetRequest]): removed method.
828 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
829 -jsonRepresentation]): new method with an explicit name.
831 * UI/PreferencesUI/product.plist: new bundle that provides a web
832 ui for handling user defaults.
834 * UI/Scheduler/UIxTaskView.[hm]: removed unused module.
836 * UI/Scheduler/UIxAppointmentView.[hm]: removed unused module.
838 * SoObjects/SOGo/WOContext+Agenor.[hm]: removed unused module.
840 2007-06-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
842 * SoObjects/SOGo/SOGoLRUCache.m: removed unused module.
844 2007-06-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
846 * UI/Scheduler/NSArray+Scheduler.m ([NSArray
847 -compareEventsAscending:otherEvent]): no longer use compare: on
848 the time objects since one of them could be an NSNull, which
849 crashes when comparing with anything.
851 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
852 -eventsListAction]): sort events from here.
853 ([UIxCalListingActions -tasksListAction]): sort tasks from here.
855 * SoObjects/SOGo/NSObject+AptComparison.[hm]: removed category
856 module, replaced with NSArray+Scheduler in UI/SchedulerUI/.
858 * SoObjects/Appointments/SOGoAppointmentFolder.m
859 ([SOGoAppointmentFolder
860 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]):
861 no longer sort elements from here.
863 2007-06-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
865 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
866 -aclsForUser:uid]): implemented method by forwarding the request
867 to the container. This fixes a bug where users could no longer
868 read emails from shared folders.
870 * SoObjects/Appointments/SOGoCalendarComponent.m
871 ([SOGoCalendarComponent -init]): "isNew" is no longer defined
872 here, but rather in its parent class.
874 * UI/SOGoUI/SOGoDateFormatter.m ([SOGoDateFormatter
875 -stringForSecondsSinceThe70s:seconds]): new utility method.
877 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
878 -eventsListAction]): no longer reduce the end day of one day for
879 all day events since everything has been fixed in
880 OCSiCalFieldExtractor.
882 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
883 -extractQuickFieldsFromEvent:_event]): reduce the seconds/70 of
884 the end date of all day events of 1 so that they stay on their
887 2007-06-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
889 * UI/Scheduler/UIxCalMonthView.m: no longer retrieve appointments.
891 * UI/Scheduler/UIxCalView.m ([-fetchCoreAppointmentsInfos]):
893 ([-fetchCoreTasksInfos]): removed method.
895 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
896 -init]): initialize an instance of SOGoDateFormatter.
897 ([UIxCalListingActions -eventsListAction]): the display start and
898 end dates are added to the listing for each event.
900 * UI/Scheduler/UIxCalDayTable.m: no longer retrieve appointments.
902 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
903 -isAllDay]): returns YES if the "hm" url parameter is set to
905 ([UIxAppointmentEditor -defaultAction]): if isAllDay, the enddate
906 is displayed one day earlier.
908 2007-06-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
910 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
911 -_setupContext]): take the range of dates specified by the popup
914 * UI/Scheduler/UIxCalListingActions.[hm]: new subclass of
915 WODirectAction that returns WOResponse objects with the events or
916 todos satisfying the parameters passed in the url.
918 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
919 -takeValuesFromRequest:_rqinContext:_ctx]): take the new ivar
920 "isAllDay" into account and compute the amount of days to pass to
923 2007-06-06 Francis Lachapelle <flachapelle@inverse.ca>
925 * SoObjects/SOGo/NSNumber+Utilities.m: initial import.
926 * SoObjects/SOGo/NSNull+Utilities.m: initial import.
927 * UI/Scheduler/UIxCalTasksListView.m ([WOResponse -tasksListAction]):
928 new method that returns a json-formatted array of the visible tasks
929 for the current user.
931 2007-06-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
933 * SoObjects/Appointments/SOGoAppointmentObject.m: the owner of the
934 object must be present in the list of UIDs we delete the object
935 from. Otherwise Calendar objects having no organizer and no
936 attendees will remain in their owner's Calendar.
938 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
939 -_urlPreferringParticle:expectedoverThisOne:possible]): remove the
940 first 3 elements of the path array if the url returned by
941 baseURLInContext: returns a hostname.
943 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
944 -_adjustOwner]): sharedFolderName and otherUsersFolderName may be
945 nil, in which case a crash happens when calling hasPrefix:.
946 ([SOGoMailFolder -_sharesACLs]): same as above.
947 ([SOGoMailFolder -otherUsersPathToFolder]): same as above. If
948 otherUsersFolderName is nil, we return nil.
949 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): if we receive
950 nil from [self otherUsersPathToFolder], we return nil too.
952 2007-06-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
954 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
955 -_urlPreferringParticle:expectedoverThisOne:possible]): unescape
956 the result of [self baseURLInContext:] to avoid a double escaping
957 in the resulting string.
959 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -aclsForUser:uid]): if
960 the user has the "ObjectReader" role on the parent container, then
961 he is granted the "ObjectViewer" role on this object. Same for
962 "ObjectEraser", although this might change later.
964 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
965 -toolbar]): determine the toolbar filename based on the
966 permissions declared by the securitymanager. The role mechanism
967 has been adjusted on a lowerlevel so we can simplify the code.
969 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
970 -initWithName:newNameinContainer:newContainer]): read the content
971 directly from here. That way we can determine whether the object
973 ([SOGoContentObject -aclsForUser:uid]): if the object is new and
974 the ObjectCreator role is enabled, we also grant the ObjectEditor
975 role to the current user.
977 * UI/Common/UIxFolderActions.m ([-canAccessContentAction]):
978 changed the method paradigm to only return HTTP code 204. Not test
979 is done whatsoever since the security manager does it for us.
981 * UI/Contacts/UIxContactsListView.m ([-canAccessContentAction]):
982 removed method because the same exists in UIxFolderActions.m
984 * UI/Contacts/UIxContactsUserRightsEditor.m
985 ([UIxContactsUserRightsEditor
986 -setUserCanReadObjects:userCanReadObjects]): new method.
988 * SoObjects/SOGo/SOGoPermissions.m: added roles "FolderViewer" and
989 "FolderEraser" and special permission "Access Object". Removed
990 role "SOGoMailRole_MessageEraser" since "SOGoRole_ObjectEraser"
991 can be used instead. Removed "FolderReader" since it is useless.
993 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
994 -vCard]): directly use the "content" ivar since it is initialized
995 during object creation.
997 * SoObjects/Contacts/SOGoContactLDAPFolder.m
998 ([SOGoContactLDAPFolder -init]): no longer handle the
999 nameInContainer no the container ivars. They were removed because
1000 this class is a descendant of SOGoObject which already has them.
1001 ([SOGoContactLDAPFolder -davDisplayName]): new overriden method
1002 returning "displayName".
1003 ([SOGoContactLDAPFolder -isFolderish]): new overriden method
1006 * SoObjects/Appointments/SOGoCalendarComponent.m
1007 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): commented out.
1008 ([SOGoCalendarComponent -findParticipant:user]): new name for
1009 method "participant:".
1010 ([SOGoCalendarComponent -findParticipantWithUID:uid]): same as
1011 findparticipant but taking a uid string as parameter.
1012 ([SOGoCalendarComponent -contentAsString]): don't regenerate the
1013 iCalendar automatically. Instead, this is done only when the user
1014 is a "date and time viewer".
1015 ([SOGoCalendarComponent -aclsForUser:uid]): take delegation roles
1016 (modifier and responder) into account by compiling them with the
1019 * SoObjects/Contacts/SOGoContactFolder.h: removed
1020 "nameInContainer" from the list of required methods.
1022 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
1023 -davContentType]): returns "text/calendar".
1025 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1026 ([SOGoContactLDAPFolder -davResourceType]): declare the correct
1027 groupdav resource-type.
1029 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
1030 -davContentType]): same as below.
1032 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1033 -initWithName:newNameinContainer:newContainer]): new overriden
1034 method setting the custom owner directly.
1036 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
1037 -davContentType]): same as below.
1039 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1040 -davContentType]): same as below.
1042 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davContentType]):
1043 declare "httpd/unix-directory".
1045 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): declare
1046 "UTC" as fallback timezone instead of "Canada/Eastern".
1047 ([-hasEmail:email]): make use of the new NSArray's
1048 containsCaseInsensitiveString: method.
1050 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1051 -davContentType]): declare "message/rfc822" as content type.
1053 * SoObjects/Appointments/SOGoAppointmentFolder.m
1054 ([SOGoAppointmentFolder -_privacySqlString]): "owner" is now an
1056 ([SOGoAppointmentFolder
1057 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): same as above.
1058 ([-fetchContentObjectNames]): commented out method since it was
1059 usefull only for testing Funambol.
1061 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
1062 -containsCaseInsensitiveString:match]): an enhanced version of
1065 * UI/MailerUI/UIxMailView.m ([-isTrashingAllowed]): removed
1067 ([-showMarkDeletedButton]): removed useless method.
1068 ([-showTrashButton]): removed useless method.
1070 * SoObjects/Appointments/iCalEntityObject+SOGo.m
1071 ([iCalEntityObject -userIsParticipant:user]): new proxy method
1072 that invoked isParticipant on self for each possible email
1073 addresses of the user passed as parameter.
1074 ([iCalEntityObject -userIsOrganizer:user]): same as above.
1076 * SoObjects/Appointments/iCalEntityObject+SOGo.[hm]: new class
1079 * SoObjects/Appointments/SOGoAppointmentObject.m
1080 ([SOGoAppointmentObject
1081 -saveContentString:contentStringbaseVersion:baseVersion]): remove
1082 method since an event may not have an organizer.
1084 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1085 -GETAction:localContext]): clarified method. Added support for
1086 content-type (thanks to Helge Hess).
1087 ([SOGoObject -initWithName:_nameinContainer:_container]):
1088 initialize and retain the owner.
1089 ([SOGoObject -davContentType]): returns "text/plain".
1091 2007-05-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1093 * UI/Common/UIxObjectActions.m ([UIxObjectActions
1094 -addUserInAclsAction]): send an acl addition mail.
1095 ([UIxObjectActions -removeUserFromAclsAction]): send an acl
1098 * UI/Common/UIxFolderActions.m ([UIxFolderActions
1099 -_realActionWithFolderName:folderDict]): handle the possible
1100 presence of the "mail-invitation" url parameter. If present, the
1101 user will be redirected to the relevant folder.
1103 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -fullEmail]): new proxy method.
1104 ([SOGoUser -language]): new method that returns the user's
1105 preferred language, or the system's if none has been set yet.
1107 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -davURL]): new method
1108 that returns the full dav url to self.
1109 ([SOGoObject -soURL]): same as above but for the so url (Web UI).
1110 ([SOGoObject -soURLToBaseContainerForUser:uid]): new method that
1111 returns the full so url to the base of the SOGo module to which
1112 self belongs, and for the specified user.
1113 ([SOGoObject -soURLToBaseContainerForCurrentUser]): same as above
1114 but for the current user.
1115 ([SOGoObject -httpURLForAdvisoryToUser:uid]): new protocol method
1116 required by the acl advisory templates and which returns a link
1117 the target user can click to activate its new subscription.
1118 ([SOGoObject -resourceURLForAdvisoryToUser:uid]): same as above
1119 but for inclusion of the application/x-sogo-notification part,
1120 which will be handled by the Lightning enhancer plugin.
1122 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -subscribeAction])
1123 ([UIxMailFolderActions -unsubscribeAction]): new stub methods that
1124 do nothing yet since imap folder subscription is not handled yet.
1126 * SoObjects/SOGo/SOGoContentObject.m
1127 ([-hasSupportForDefaultRoles]): removed method.
1129 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
1130 -getFullEmailForUID:uid]): new method that returns the username +
1133 * SoObjects/Appointments/SOGoCalendarComponent.m
1134 ([SOGoCalendarComponent +initialize]): the default language for
1135 mail templates is now set to English.
1137 * UI/SOGoUI/SOGoACLFrenchRemovalAdvisory.[hm]: new subclass of
1138 SOGoACLAdvisory implementing the french template for user removal
1141 * UI/SOGoUI/SOGoACLFrenchAdditionAdvisory.[hm]: new subclass of
1142 SOGoACLAdvisory implementing the french template for user
1145 * UI/SOGoUI/SOGoACLEnglishRemovalAdvisory.[hm]: new subclass of
1146 SOGoACLAdvisory implementing the english template for user removal
1149 * UI/SOGoUI/SOGoACLEnglishAdditionAdvisory.[hm]: new subclass of
1150 SOGoACLAdvisory implementing the english template for user
1153 * UI/SOGoUI/SOGoACLAdvisory.[hm]: new class module implemented the
1154 supercall of all the acl advistory templates. The model is based
1155 on SOGoAptMailNotification except that the template encapsulates
1156 the message to be sent. Later, we might create a superclass common
1157 to all template-based emails.
1159 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
1160 -addRange:newRange]): new method that store a string
1161 representation of the NSRange passed as parameter.
1162 ([NSMutableArray -hasRangeIntersection:testRange]): tests whether
1163 any range contained in self intersect with the one passed as parameter.
1165 * SoObjects/SOGo/NSString+Utilities.m ([-stringByDetectingURLs]):
1166 store ranges in an array to prevent them from intersecting with
1167 each other during the passes.
1169 2007-05-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1171 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1172 -primaryFetchMailboxInfo]): useless method. Removed.
1174 2007-05-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1176 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1177 -toManyRelationshipKeys]): invoke [self subfolders].
1178 ([SOGoMailFolder -subfolders]): new method containing what used to
1179 be in toManyRelationshipKeys.
1180 ([SOGoMailFolder -subfoldersURL]): same as above but returns imap
1183 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1184 -allFolderPaths]): renamed version of "allFolderPathes", sorted by
1185 named and at the beginning of which we put the predefined folders.
1187 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1188 -emptyTrashAction]): new method inspired by a similar one from
1189 UIxMailListView, to which we added the ability to remove
1192 * UI/MailerUI/UIxMailListView.m ([-emptyTrashAction]): removed
1193 method. Replaced with a similar one in UIxMailFolderActions.
1195 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1196 -renameFolderAction]): implemented method.
1197 ([UIxMailFolderActions -deleteFolderAction]): no longer delete the
1198 specified folder. Instead, we put it in the trash folder.
1200 * UI/MailerUI/UIxMailListView.m ([-createFolderAction]): removed
1201 method, replaced with a similar method in the new
1202 UIxMailFolderAction class module.
1203 ([-deleteFolderAction]): idem.
1205 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1206 -createFolderAction]): new method implementing subfolder creation.
1207 ([UIxMailFolderActions -renameFolderAction]): new method
1208 implementing subfolder renaming (basic implementation to be
1210 ([UIxMailFolderActions -deleteFolderAction]): new method
1211 implementing folder deletion.
1213 * UI/MailerUI/UIxMailFolderActions.[hm]: new module implementing
1214 web actions related to the handling of imap folder.
1216 2007-05-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1218 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1219 -ownerInContext:localContext]): overriden method because we are an
1220 IMAP4 client and we need a bit more intelligence to deduce the
1221 owner of the current folder.
1222 ([SOGoMailFolder -aclsForUser:uid]): aclForMailboxAtURL might
1223 return an NSException so we need to be careful here to avoid a
1225 ([SOGoMailFolder -aclUsers]): aclForMailboxAtURL might return an
1226 NSException so we need to be careful here to avoid a crash.
1228 * SoObjects/Mailer/SOGoMailAccounts.m
1229 ([SOGoMailAccounts -fetchIdentitiesWithOnlyEmitterAccess:_flag])
1230 there is no longer any concept of Intranet or Internet connection
1233 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1234 -sharedFolderName]): new method.
1235 ([SOGoMailAccount -otherUsersFolderName]): new method.
1237 * UI/MailerUI/UIxMailFolderMenu.[hm]: removed module, obsoleted by
1238 new javascript code and the new UIxMailAccountActions class.
1240 * UI/MailerUI/UIxMailTree.[hm]: removed module, obsoleted by new
1241 javascript code and the new UIxMailAccountActions class.
1243 * UI/MailerUI/UIxMailTreeBlock.[hm]: removed module, obsoleted by
1244 new javascript code and the new UIxMailAccountActions class.
1246 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1247 -listMailboxesAction]): new method that returns a json-formatted
1248 tree of all the mailboxes available to the current user.
1250 * UI/MailerUI/UIxMailAccountActions.[hm]: new module implementing
1251 web actions related to the handling of mail accounts.
1253 * SoObjects/SOGo/NSDictionary+Utilities.[hm]: new extension
1256 * SoObjects/SOGo/NSObject+Utilities.m ([NSObject
1257 -jsonRepresentation]): new interface method meant to be overriden
1258 by the primitive classes.
1260 2007-05-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1262 * UI/MailerUI/UIxMailSplashView.m: removed.
1264 * SoObjects/Appointments/SOGoCalendarComponent.m
1265 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]): add
1266 the uid to the list only when the user email is recognized by the
1269 2007-05-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1271 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1272 -isDeletionAllowed]): completed method with the new imap acl api.
1274 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultAclRoles]):
1277 * SoObjects/SOGo/SOGoPermissions.m: added the new role
1278 "SOGoMailRole_MessageEraser".
1280 * UI/Common/UIxAclEditor.m ([UIxAclEditor -defaultUserID])
1281 ([UIxAclEditor -_prepareUsers]): take the new SOGoObject's
1282 "defaultUserID" method into account.
1284 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -userIsDefaultUser])
1285 ([UIxUserRightsEditor -_initRights]): take the new SOGoObject's
1286 "defaultUserID" method into account.
1288 * UI/MailerUI/UIxMailUserRightsEditor.m: added all the missing
1289 methods to support the IMAP acls mentionned in the RFC 4314,
1290 removed the ones specific to Cyrus.
1292 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultUserID]): new
1293 mandatory method for subclasses. Removed the SOGoDefaultUserID
1296 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -defaultUserID]):
1297 overriden method to return @"<default>".
1299 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
1300 -defaultUserID]): overriden method to return @"<default>".
1302 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1303 -aclsForUser:uid]): overriden method.
1304 ([SOGoMailFolder -removeAclsForUsers:users]): overriden method.
1305 ([SOGoMailFolder -setRoles:rolesforUser:uid]): overriden method.
1306 ([SOGoMailFolder -defaultUserID]): overriden method.
1307 ([SOGoMailFolder -hasSupportForDefaultRoles]): overriden method.
1309 2007-05-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1311 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
1312 -aclUsersForObjectAtPath:objectPathArray]): new method that being
1313 forwarded the calles to aclUsers for the GCS-based subclasses of
1316 * SoObjects/Mailer/SOGoMailFolder.m: removed all the previous
1317 methods that would have been used to support IMAP acls. Replaced
1318 them with the new protocol for them that has been implemented in
1319 SOGo during the last few weeks.
1321 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
1322 -hasSupportForDefaultRoles]): override method by returning "YES".
1324 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
1325 -addObjectUniquely:object]): new method with an explicit name.
1327 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -aclUsers]): renamed
1328 "acl" to "aclUsers". Now designed to return only the uid of the
1329 users involved in an ACL.
1330 ([SOGoObject -hasSupportForDefaultRoles]): new method returning
1331 "NO" by default. To indicate to the acl editor that we don't want
1332 to handle a default user.
1334 * SoObjects/SOGo/SOGoPermissions.[hm]: added the
1335 SOGoRole_ObjectReader, SOGoRole_Folder*, and SOGoMailRole_*
1338 * UI/MailerUI/UIxMailUserRightsEditor.[hm]: new class module that
1339 provides a view to the IMAP acls.
1341 * UI/MailerUI/UIxMailFolderACLEditor.m: removed obsolete module.
1343 * UI/WebServerResources/MailerUI.js: replaced all invocations of
1344 addEventListener to the use of prototype's Event object. Also,
1345 configured all menus programmatically following descriptions lists
1346 containing their callbacks, or nulls, submenus id or separators.
1348 2007-05-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1350 * UI/Common/UIxObjectActions.m ([UIxObjectActions
1351 -addUserInAclsAction]): save the previous roles of the user
1352 (unlikely) or the default roles, or None instead of saving the
1353 roles that should appear the first time in the role editor when no
1354 default has been set...
1356 * SoObjects/SOGo/SOGoObject.m: defined a new constant
1357 "SOGoDefaultUserID".
1359 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
1360 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]):
1361 ignore the "AuthorizedSubscriber" role and add the "None" role
1362 when no other role is found.
1364 * UI/Common/UIxAclEditor.m: added a button for the new default
1367 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
1368 -_initRights]): don't take the "None" role into account when
1369 initializing the list of current roles.
1371 * SoObjects/SOGo/SOGoPermissions.m: added a new void role
1374 2007-05-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1376 * SoObjects/SOGo/NSString+Utilities.m ([NSString
1377 -_rangeOfURLInRange:refRange]): urls cannot end with "&" nor "=".
1378 There is no need to subscract the start from the length if a space
1379 is not found since the range has not changed either. Finally, the
1380 first character before the url might also be a tab or a cr, so we
1381 match it against the "urlAfterEndingChars" custom NSCharacterSet.
1382 ([NSString -stringByDetectingURLs]): modified to handle email
1383 addresses and add a correct "mailto:" link.
1385 2007-05-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1387 * SoObjects/Appointments/SOGoAppointmentFolder.m
1388 ([SOGoAppointmentFolder -fetchContentObjectNames]): override
1389 method to return the events in the range of 2 weeks ago up to 4
1392 * UI/MailPartViewers/UIxMailPartTextViewer.m
1393 ([UIxMailPartTextViewer -flatContentAsString]): use the new
1394 "stringByDetectingURLs" method to offer clickable urls.
1396 * SoObjects/SOGo/NSString+Utilities.m ([NSString
1397 -stringByDetectingURLs]): this new method replaces passive URLS
1398 with active ones for HTML resolution of the text.
1400 2007-05-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1402 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
1403 -asQPSubjectString:encoding]): simplified method.
1404 The headers indicates "utf-8" again thank to our fix in
1407 * SoObjects/SOGo/SOGoObject.m: fail to build if libFoundation is
1410 2007-05-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1412 * UI/Common/UIxObjectActions.m ([UIxObjectActions
1413 -removeUserFromAclsAction]): implemented this method which was
1414 missing and is required to remove users from ACLs.
1416 * UI/Common/UIxFolderActions.m ([UIxFolderActions
1417 -subscribeAction]): folderDict was not autoreleased, resulting in
1420 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
1421 -primaryFetchProfile]): when building with libFoundation, don't
1422 use the "propertyList" method from NSString. Rather, we convert
1423 the string to an NSData instance and passit as parameter to
1424 NSDeserializer. This way, we obtain a mutable dictionary rather
1425 than an immutable one.
1427 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -bodyPartForText])
1428 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): use the
1429 constant string "contentTypeValue".
1430 contentTypeValue is now set back to iso-8859-1 since NGMime
1431 converts extracts the data in that encoding.
1433 2007-05-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1435 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
1436 -checkLogin:loginToCheckandPassword:passwordToCheck]): if a
1437 "bindFields" value is present in the user defaults, use the
1438 specified fields to find the dn of the user to bind.
1439 ([LDAPSource -allEntryIDs])
1440 ([LDAPSource -fetchContactsMatching:match])
1441 ([LDAPSource -lookupContactEntry:entryID])
1442 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]):
1443 bind and unbind the connection on each request.
1445 * UI/MailerUI/UIxMailAddressbook.m: removed obsolete module.
1447 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1448 -contactSearchAction]): simplified method to use the facilities
1449 provided by the LDAPUserManager. No longer takes care of the
1450 "ldap-only" url parameter since all requests are handled by the
1453 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
1454 -primaryFetchProfile]): check that the value returned is not null
1455 before interpreting it.
1457 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
1458 -contactInfosForUserWithUIDorEmail:uid]): check that uid is not empty.
1459 ([LDAPUserManager -_fillContactMailRecords:contact]): if the
1460 system email is already present, remove it before adding it.
1462 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
1463 -checkLogin:loginToCheckandPassword:passwordToCheck]): check that
1464 loginToCheck is not empty.
1465 ([LDAPSource -fetchContactsMatching:match]): check that match is
1467 ([LDAPSource -lookupContactEntry:entryID]): check that entryID is
1469 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]): check that
1472 2007-05-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1474 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -primaryEmail]): new name
1476 ([SOGoUser -systemEmail]): returns the email formed from the
1477 username and the default mail domain.
1478 ([SOGoUser -hasEmail:email]): test whether the user has the
1479 specified email, in a case-insensitive way.
1481 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
1482 -LDAPCheckLogin:_loginpassword:_pwd]): use the user manager to
1483 check login information.
1485 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1486 ([SOGoContactLDAPFolder
1487 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1488 no longer manage LDAP connections. The requests are forwarded to
1489 the relevant LDAPSource instead.
1491 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
1492 -appendSystemSources]): pass LDAPSource objects to
1493 SOGoContactLDAPFolder instances.
1495 * SoObjects/Mailer/SOGoDraftObject.m: extract the raw email
1496 address of the "from" field before sending the message. Otherwise,
1497 sending the mail won't work.
1499 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -fromEMails]):
1500 rewrote this method to request all the available email identities
1501 for the current user. Also, the from field also contains the full
1502 name of the user, not just his/her email address.
1504 * SoObjects/Appointments/SOGoCalendarComponent.m
1505 ([SOGoCalendarComponent -iCalPersonWithUID:uid]): new method taken
1506 from the previous module iCalEntityObject+Agenor.
1507 ([SOGoCalendarComponent -getUIDForICalPerson:person]): idem.
1508 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]):
1511 * SoObjects/Contacts/SOGoContactLDIFEntry.[hm]: new class module
1512 replacing the SOGoContactLDAPEntry module. It was renamed as such
1513 because it now receives a dictionary instead of an NGLdapEntry.
1514 It thus can now handle data from any source of LDIF data, not
1515 only coming from LDAP.
1517 * SoObjects/SOGo/LDAPUserManager.[hm]: new class module
1518 implementing most of what used to be the AgenorUserManager class.
1519 The difference is that users are cached in the forme of
1520 dictionaries and many sources are used. Also, it can be used to
1521 search LDAP contacts.
1523 * SoObjects/SOGo/LDAPSource.[hm]: new class module implementing
1524 the concept of "ldap source", to be used by all the classes
1525 needing access to LDAP-provided information: addressbooks and the
1526 user manager. Most the method thereing are transcriptions of
1527 methods previously found in SOGoContactLDAPFolder. It also contain
1528 utility methods for user matching and authentification.
1530 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: removed
1531 module, rendered useless by code refactoring.
1533 * SoObjects/SOGo/AgenorUserManager.[hm]: removed module, replaced
1534 with the freshly written "LDAPUserManager".
1536 2007-05-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1538 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: renamed to
1539 SOGOContactLDIFEntry.
1541 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: removed class
1542 module, obsoleted by code in SOGo/LDAPSource.[hm].
1544 2007-05-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1546 * UI/Common/UIxAclEditor.m ([UIxAclEditor -currentUserIsOwner]):
1547 new method with an explicit name.
1549 2007-05-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1551 * SoObjects/Appointments/SOGoCalendarComponent.m
1552 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): new method
1553 replacing "isOrganizer:orOwner:" by taking only one instance of
1554 SOGoUser as parameter.
1555 ([SOGoCalendarComponent -participant:user]): new method replacing
1556 the previous "isParticipant" boolean method by returning the first
1557 participant matching the user passed as parameter. This method is
1558 used so that both the regular email address and the "system email
1559 address" of the user are matched against the participants emails.
1561 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
1562 -getSystemEMailForUID:uid]): new method that returns the email
1563 formed with the user's uid and the default mail domain.
1565 * SoObjects/Appointments/SOGoCalendarComponent.m
1566 ([SOGoCalendarComponent -rolesOfUser:login]): removed method that
1567 was previously commented out.
1569 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -systemEmail]): new method
1570 forwared to [AgenorUserManager getSystemEmailForUID:].
1572 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1573 -toolbar]): method replacing the one with the same name in the
1574 task and appointment editor classes. This method makes also use of
1575 the new method "isOrganizerOrOwner:" and "participant:" in
1576 SOGoCalendarComponent.
1578 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1579 -toolbar]): removed method, replaced with a method with the same
1580 name in UIxComponentEditor.
1582 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -toolbar]): removed
1583 method, replaced with a method with the same name in
1586 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
1587 -primaryFetchProfile]): the values returned from the database are
1588 converted to a put dictionary first, since the dictionary returned
1589 is actually an immutable one, which can cause a crash afterwards.
1591 2007-04-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1593 * SoObjects/SOGo/SOGoPermissions.m: added "SOGoRole_ObjectViewer"
1594 and "SOGoRole_ObjectEditor".
1596 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
1597 -prepareRightsForm]): this method is no longer mandatory.
1599 * UI/Contacts/UIxContactsUserRightsEditor.m
1600 ([UIxContactsUserRightsEditor
1601 -setUserCanCreateObjects:userCanCreateObjects]): new subclass
1602 module to handle acls related to the address books. Partial
1605 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
1606 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): cache
1609 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): remove
1610 specified roles from cache.
1611 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
1612 put resulting roles in cache.
1614 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -init]): do not invoke
1615 initWithName:inContainer:. Instead, directly initialize the ivars
1616 as it is supposed to be to avoid an infinite loop whenever one of
1617 those two methods are overriden.
1619 * SoObjects/SOGo/SOGoContentObject.m ([-rolesOfUser:login]):
1622 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
1623 -aclsForUser:uid]): override method so that SOGo won't crash when
1624 loading the contact card.
1626 2007-04-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1628 * SoObjects/Appointments/SOGoAppointmentFolder.m
1629 ([SOGoAppointmentFolder -_privacySqlString]): the string for the
1630 "freebusy" special user should only require opaque elements.
1632 2007-04-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1634 * SoObjects/Appointments/SOGoAppointmentFolder.m
1635 ([SOGoAppointmentFolder -davResourceType]): fixed a problem with
1636 our double declaration where the resulting XML would be screwed.
1637 There is only one collection per namespace.
1639 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
1640 rfc822DateString]): new method that returns a string conform to
1641 rfc 822 and suitable for email headers.
1643 * SoObjects/Mailer/SOGoDraftObject.m: invoke the new
1644 "rfc822DateString" category method on the date we put in the
1647 2007-04-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1649 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -defaultAction])
1650 ([UIxUserRightsEditor -saveUserRightsAction]): new action methods
1651 which should never be overriden.
1652 ([UIxUserRightsEditor -appendRight:newRight])
1653 ([UIxUserRightsEditor -removeRight:right])
1654 ([UIxUserRightsEditor -appendExclusiveRight:newRightfromList:list])
1655 ([UIxUserRightsEditor -removeAllRightsFromList:list]): new utility
1656 methods that can be used by the subclasses.
1657 ([UIxUserRightsEditor -prepareRightsForm]): new method that should
1658 mandatorily be overriden to prepare the elements of the subclassed
1660 ([UIxUserRightsEditor -updateRights]): new method that should
1661 mandatorily be overriden to update the user rights from the
1662 elements of the subclassed form.
1664 * UI/Common/UIxAclEditor.m ([UIxAclEditor -_prepareUsers]): we
1665 check if the uid is already listed before adding it to our array.
1666 This is because the acl table can contain more than one record per
1667 user/object relationship.
1669 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
1670 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): the
1671 "roles" parameter is now an NSArray instead of a string. Therefore
1672 we loop throughout the array to populate the table. All the
1673 relevant records are removed prior to the addition of the new
1676 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1677 -aclsForUser:uid]): new override that returns nil until we add
1678 support for IMAP acls.
1680 * SoObjects/Mailer/SOGoMailAccounts.m
1681 ([SOGoMailAccounts -aclsForUser:uid]): same as below.
1683 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1684 ([SOGoContactLDAPFolder -aclsForUser:uid]): same as below.
1686 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
1687 -aclsForUser:uid]): override this method which will always return
1690 * SoObjects/SOGo/SOGoPermissions.[hm]: added
1691 [Public,Private,Confidential]
1692 x[Viewer,DAndTViewer,Responder,Modifier]. Renamed
1693 SOGoRole_ORganizer to SOGoCalendarRole_Organizer. Same for
1694 ..._Participant. Removed SOGoRole_Assistant and SOGoRole_Delegate.
1696 * SoObjects/Appointments/SOGoAppointmentFolder.m
1697 ([SOGoAppointmentFolder -defaultAclRoles]): new overriden method
1698 that defines default roles for new elements in the acl.
1700 * UI/Scheduler/UIxCalUserRightsEditor.[hm]: new component class
1701 module and subclass of UIxUserRightsEditor specific to the
1702 handling of user rights on calendar folders.
1704 2007-04-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1706 * SoObjects/Appointments/SOGoAppointmentFolder.m
1707 ([SOGoAppointmentFolder -groupDavResourceType]): return both
1708 "vevent-collection" and "vtodo-collection".
1710 * UI/Common/UIxUserRightsEditor.[hm]: new template class module
1711 that implements the detailed editor of user rights per-object.
1713 2007-04-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1715 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
1716 -rolesForObject:objectinContext:context]): no longer query objects
1717 for "roleForUser:". Instead, all objects should implement
1720 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject -acls]):
1721 new method to comply with the new acl "protocol" in SOGoObject.
1722 Uses SOGoFolder's new facilities for ACLS.
1723 ([SOGoContentObject -aclsForUser:uid]): idem.
1724 ([SOGoContentObject -setRoles:rolesforUser:uid]): idem.
1725 ([SOGoContentObject -removeAclsForUsers:users]): idem.
1727 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
1728 -aclsForObjectAtPath:objectPathArray]): new method generic to GCS
1729 based folders. This method is derived from the code that was in
1730 UIxAclFolder before its removal.
1731 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
1734 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): idem.
1736 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): idem.
1737 ([SOGoFolder -setRoleForUsers:uidsto:role])
1738 ([SOGoFolder -setRoleForUsers:uidsto:role]): removed method.
1740 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -acls]): stub method
1741 that requires overriding by subclasses.
1742 ([SOGoObject -aclsForUser:uid]): idem.
1743 ([SOGoObject -defaultAclRoles]): idem.
1744 ([SOGoObject -setRoles:rolesforUser:uid]): idem.
1745 ([SOGoObject -removeAclsForUsers:users]): idem.
1747 * UI/Common/UIxObjectActions.m: new module implementing the web
1748 actions common to SOGoObject and all its subclasses.
1749 ([UIxObjectActions -addUserInAclsAction]): new method that adds a
1750 user with the clientObject defaults user rights to the object's
1753 * UI/Common/UIxAclEditor.m: modified module so as to simplify it
1754 to the point where it will only list the users (and their name)
1755 associated with an object acl.
1757 * SoObjects/SOGo/SOGoAclsFolder.m: removed module because its
1758 methods have been moved into SOGoObject and SOGoFolder during a
1761 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1762 -iCalParticipantsAndResourcesStringFromQueryParameters]): removed
1763 method made useless by the programmatic handling of iCalendar
1765 ([UIxComponentEditor -iCalParticipantsStringFromQueryParameters]): idem.
1766 ([UIxComponentEditor -iCalResourcesStringFromQueryParameters]): idem.
1767 ([UIxComponentEditor -iCalStringFromQueryParameter:_qpformat:_format]): idem.
1769 * UI/WebServerResources/MailerUI.js (initDnd): enable drag and
1770 drop on all folder nodes, not just on leaves.
1772 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1773 ([SOGoContactLDAPFolder
1774 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): request field "uid" when doing a search.
1776 2007-04-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1778 * Main/SOGo.m ([SOGo +initialize]): on GNUstep, trigger some
1779 debugging facilities when the SOGoDebugObjectAllocation user
1782 2007-04-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1784 * SoObjects/SOGo/NSString+Utilities.m ([NSString -boolValue]): new
1785 method that SOGo will need with non-gnustep Foundation
1787 ([NSString -stringByAppendingPathComponent:component]): new method
1788 that SOGo will need when building with libFoundation. Method
1789 removed later since it is available from
1790 Foundation/NSPathUtilities.h.
1792 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -timeZone]): method moved
1795 * SoObjects/SOGo/SOGoObject.m: new ivar "context" that permits
1796 every subclass to access [WOApplication context] without having to
1797 invoke it more than once.
1799 * SoObjects/Appointments/SOGoCalendarComponent.m
1800 ([SOGoCalendarComponent -changeParticipationStatus:_status]):
1801 moved method from SOGoTaskObject and SOGoAppointmentObject up to
1804 * UI/Scheduler/UIxCalSelectTab.m: removed module.
1806 2007-04-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1808 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
1809 -vCard]): test the prefix of the card in a case-independent way.
1811 * OGoContentStore/OCSContactFieldExtractor.m
1812 ([OCSContactFieldExtractor
1813 -extractQuickFieldsFromContent:content]): we no longer accept
1814 records in a format other than versit vCard so we can get rid of a
1817 2007-04-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1819 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1820 -selectorComponentClass]): restored method.
1822 2007-04-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1824 * UI/Scheduler/UIxCalTasksListView.m ([UIxCalTasksListView
1825 -shouldDisplayCurrentTask]): the current task is not displayed if
1826 it is NOT completed or if the "showCompletedTasks" flag is set.
1827 The logic was inverted in Lightning and is now in SOGo too.
1829 2007-04-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1831 * UI/Contacts/UIxContactView.m ([UIxContactView -workUrl]): we
1832 want the "work" url instead of the "home".
1834 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
1835 -_saveSnapshot]): save url values from snapshot.
1836 ([UIxContactEditor -initSnapshot]): load url values from snapshot.
1838 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1839 -calendarList]): new method replacing "availableCalendars".
1841 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
1842 -calendarFolders]): we now take the list of subscribed calendar
1845 * SoObjects/Appointments/SOGoAppointmentFolder.m
1846 ([SOGoAppointmentFolder -calendarFoldersInContext:context]): new
1847 method derived from and replacing [UIxCalView calendarFolders].
1849 2007-03-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1851 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1852 -toManyRelationshipKeys]): don't put the predefined folders in the
1853 list if they are returned by the server.
1855 * UI/MailerUI/UIxMailTree.m ([UIxMailTree -flattenedNodes]): we no
1856 longer store the "flattenedBlocks" in a dictionary since the
1857 object will be deleted anyway and we don't need to put the folders
1860 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
1861 ([UIxMailPartHTMLViewer -_attachmentIds]): take the current
1862 attachment path into account when computing the part urls.
1864 2007-03-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1866 * UI/Contacts/UIxContactsListViewContainer.m
1867 ([UIxContactsListViewContainer -additionalFolders]): take the list
1868 of subscribed folders from the new property list used for the user
1869 settings. The value of its key is SubscribedFolders for the
1870 dictionary entry named "Contacts".
1872 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1873 -canAccessContentAction]): new method to override the one from
1874 UIxFoldersActions by taking into account the fact that, this time,
1875 the clientObject is an ldap folder. Removed many method that used
1876 to be related to the handling of the user selector.
1878 * UI/Scheduler/UIxCalDayView.m: commented out many unused methods
1879 to make sure they can be removed.
1881 * UI/Scheduler/UIxCalView.m ([UIxCalView -_setupCalendarFolders]):
1882 populate the calendar entries based on the user settings plist.
1884 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1885 -selectForMailerAction]): restored method.
1887 * UI/Scheduler/UIxCalendarSelector.m: new template module derived
1888 from a simplified version of the old UIxContactEditor (removed).
1890 * UI/Contacts/UIxContactsUserFolders.m: new template module for
1891 selecting users or user folders through an LDAP search of which
1892 the results are displayed as a tree.
1894 * UI/WebServerResources/UIxMailEditor.js: moved previous generic
1895 method "onContactAdd" here since the Mailer is now the only module
1896 to use it when composing emails.
1898 * UI/WebServerResources/generic.js: added code for handling the
1899 new scheme used for describing SOGo folders, common code to handle
1900 folder addition or removal.
1902 * UI/Common/UIxFolderActions.m ([UIxFolderActions
1903 -activateFolderAction]): new method that change the "active"
1904 settings in the folder-related fields in the user settings.
1905 ([UIxFolderActions -deactivateFolderAction]): see above.
1907 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1908 -checkRightsAction]): removed method.
1910 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1911 -updateAdditionalAddressBooksAction]): removed method.
1913 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
1914 -updateCalendarsAction]): removed method.
1916 2007-03-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1918 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
1919 -checkRightsAction]): removed method.
1921 * UI/Common/UIxFolderActions.m ([UIxFolderActions
1922 -canAccessContentAction]): new method designed to replace
1923 [UIxCalMainView checkRightsAction] in a more universal way.
1925 2007-03-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1927 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
1928 -roleOfUser:uidinContext:context]): take all the subkeys into
1929 account, not only the "personal" folder.
1931 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1932 -takeValuesFromRequest:_rqinContext:_ctx]): append a "uid" field
1933 to the new components.
1935 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -userSettings]): new method
1938 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
1939 -getUserDefaultsForUID:uid]): rewrote method to use the "defaults"
1940 field of the sogo_user_profile table, where the user-customizable
1941 changes will be saved.
1942 ([AgenorUserManager -getUserSettingsForUID:uid]): new method
1943 similar to the one above, using the "settings" field where the
1944 automatic settings will be saved.
1946 * SoObjects/SOGo/AgenorUserDefaults.m: rewrote a big part of the
1947 module to bind the userdefaults to a property list contained in a
1948 specified field of the sogo_user_profile table.
1949 ([AgenorUserDefaults
1950 -initWithTableURL:tableURLuid:userIDfieldName:defaultsFieldName]):
1951 added a "fieldName" parameter.
1953 * UI/Common/UIxFolderActions.m: new module implementing web
1954 actions common to all GCS-based folders.
1956 2007-03-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1958 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -labelForDay]):
1959 put a carriage return after the day name.
1961 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
1962 -readFreeBusyAction]): restored method.
1964 2007-03-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1966 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
1967 -defaultAction]): remade module to redirect automatically to the
1970 * SoObjects/Contacts/NSDictionary+Contact.m: removed module.
1972 2007-03-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1974 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1975 -deleteAction]): new web method to delete personal addressbook
1978 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1979 -delete]): override method to refuse the deletion of the folder if
1980 its nameInContainer is "personal".
1982 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -delete]): new method
1983 that forwards the deletion request to the folder manager.
1985 2007-03-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1987 * UI/Scheduler/UIxAttendeesEditor.m ([UIxAttendeesEditor
1988 -zoomList]): new method that returns the list of available zoom factors.
1990 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
1991 -changeStatusAction]): rewrote method.
1993 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1994 -_handleAttendeesEdition]): make sure "attendeesNames" has a
1995 length > 0 before computing the attendees. Otherwise there will be
1996 an invalid empty entry.
1997 ([UIxComponentEditor -_handleOrganizer]): new method that adds the
1998 organizer when there are attendees and remove it when the
1999 attendees are removed.
2001 2007-03-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2003 * UI/Scheduler/UIxAttendeesEditor.m): new component.
2005 * UI/Scheduler/UIxComponentEditor.m: no longer a superclass for
2006 the task and appointment editors. Now a container component
2007 handling the common elements of tasks and events.
2009 * UI/Scheduler/UIxTaskEditor.m: same as below.
2011 * UI/Scheduler/UIxAppointmentEditor.m: rewrote template. No longer
2012 a subclass of UIxComponentEditor but a subcomponent of it.
2014 * UI/Common/UIxToolbar.m ([UIxToolbar -toolbarConfig]): the
2015 toolbar can have the special value "none" to indicate there is
2016 none attached to the window.
2018 * SoObjects/Appointments/SOGoCalendarComponent.m
2019 ([SOGoCalendarComponent -isOrganizer:emailorOwner:login]): new
2021 ([SOGoCalendarComponent -isParticipant:email]): new method.
2022 ([SOGoCalendarComponent -calendar:create]): takes one parameter
2023 "create" which is a boolean indicating whether we want to create
2024 the calendar if it does not exist.
2026 2007-03-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2028 * UI/Scheduler/UIxCalMonthView.m: changed view to use divs instead
2029 of a table, the same way the dayly and weekly views have been for
2032 2007-02-09 Helge Hess <helge.hess@opengroupware.org>
2034 * SoObjects/Appointments/SOGoAppointmentFolder.m: added CalDAV
2037 * SoObjects/SOGo/SOGoUserFolder.m: added davCalendarHomeSet CalDAV
2038 property to point at the user folder
2040 2007-03-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2042 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2043 -userInContext:]): returns "SOGoUser".
2045 * SoObjects/Appointments/SOGoCalendarComponent.m
2046 ([SOGoCalendarComponent -contentAsString]): overriden method that
2047 takes the privacy into account and discard the relevant fields if
2048 needed by generating a new content string and caching it.
2049 ([SOGoCalendarComponent
2050 -saveContentString:contentStringbaseVersion:baseVersion]): if the
2051 new method above has cached a content string, release it and set
2052 it to nil so that it will have to be regenerated in the case it is
2054 ([SOGoCalendarComponent -_filterPrivateComponent:component]):
2055 discard the fields that have to be hidden when the card is
2058 * SoObjects/Appointments/SOGoAppointmentFolder.m
2059 ([SOGoAppointmentFolder
2060 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]): make
2061 sure the cards are now handled as instances of
2062 SOGoCalendarComponent instead of SOGoContentObject so that their
2063 content string is taking the privacy classifiction into account.
2064 ([SOGoAppointmentFolder -_privacySqlString]): new method that
2065 generates a query to determine what information can be given and
2066 if the card itself has to be shown.
2068 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
2069 -getICalPersonsFromValue:selectorValue]): removed useless
2070 "isAccessRestricted" method.
2072 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
2073 -setStyle:_style]): test whether the values of orgmail and
2074 partmails are null before manipulating them, otherwise SOGo sends
2075 a "rangeOfString:" message to an NSNull, which makes it crashes.
2077 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2078 -extractQuickFieldsFromEvent:_event]): we now use the new
2079 "symbolicAccessClass" method from iCalEntity to determine the
2080 value of the "classifiction" field.
2081 ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]): same
2084 2007-03-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2086 * SoObjects/Appointments/SOGoAppointmentFolder.m
2087 ([SOGoAppointmentFolder
2088 -fetchCoreInfosFrom:_startDateto:_endDatecomponent:_component]):
2089 see below, the query is adapted consequently.
2091 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2092 -extractQuickFieldsFromTodo:_task]): the field "ispublic" was
2093 renamed to "classification" and can any integer as value.
2094 ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event]):
2097 2007-02-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2099 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
2100 ([_UIxHTMLMailContentHandler -_appendStyle:_charslength:_len]):
2101 don't prepend anything to the class and id named. Instead, we
2102 make each style embedded in the ".SOGoHTMLMail-CSS-Delimiter"
2105 2007-02-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2107 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2108 -rolesOfUser:logininContext:context]): if object does not exists
2109 (for example when it's being created), the current user has the
2110 same rights on it than he/she has on its parent container.
2112 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2113 -nameExistsInFolder:objectName]): methods that tests if a c_name
2114 corresponding to the name passed as parameter is present in the db
2117 2007-02-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2119 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
2120 -rolesForObject:objectinContext:context]): test for
2121 "rolesOfUser:inContext:" in addition to "roleOfUser:...".
2123 * SoObjects/Appointments/SOGoCalendarComponent.m
2124 ([SOGoCalendarComponent -rolesOfUser:logininContext:context]):
2125 returns the roles of the user on the container object if the event
2128 2007-02-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2130 * UI/MailPartViewers/UIxMailRenderingContext.m: returns the
2131 alternativeViewer a multipart/related message is being handled.
2133 * UI/MailPartViewers/UIxMailPartHTMLViewer.m: reimplemented module
2136 * UI/MailPartViewers/UIxMailPartAlternativeViewer.m: select the
2137 text/html component before text/plain.
2139 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2140 -addRequiredKeysOfStructure:path:toArray:recurse:]): accepts the
2141 fetching of HTML parts.
2143 * SoObjects/Appointments/SOGoCalendarComponent.m
2144 ([SOGoCalendarComponent -componentTag]): new template method that
2145 returns the vcalendar tag of the current object.
2146 ([SOGoCalendarComponent -component]): new method that returns the
2147 first object matching [self componentTag] within the current
2148 calendar object. This method replaces 'firstEventInCalendar:' as
2149 well as "firstTaskInCalendar:".
2150 ([SOGoCalendarComponent -roleOfUser:logininContext:context]):
2151 moved method from SOGoAppointmentObject.m.
2153 2007-02-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2155 * UI/Scheduler/UIxCalMulticolumnDayView.[hm]: new daily view
2156 module which shows each selected user's calendar in a different
2157 column instead of mixing their events together.
2159 * UI/Scheduler/UIxCalView.m ([UIxCalView -redirectForUIDsAction]):
2160 replaced use of [NSString stringByTrimmingWhiteSpaces] with
2161 [NSString stringByTrimmingSpaces].
2163 * UI/MailPartViewers/UIxMailPartICalViewer.m: request the key
2164 "cnWithoutQuotes" instead of "cnForDisplay", which no longer
2167 * UI/Scheduler/UIxCalDayOverview.m,
2168 UI/Scheduler/UIxCalDayChartview.m,
2169 UI/Scheduler/UIxCalDayListview.m,
2170 UI/Scheduler/UIxCalWeekOverview.m,
2171 UI/Scheduler/UIxCalWeekChartview.m,
2172 UI/Scheduler/UIxCalWeekListview.m,
2173 UI/Scheduler/UIxCalInlineMonthOverview.m,
2174 UI/Scheduler/UIxCalYearOverview.m: removed unused modules.
2176 2007-02-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2178 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2179 -appendPersonalSourcesInContext:context]): release connectoin
2180 channel when everything is done.
2182 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2183 -newAbAction]): new action method to crate a new contact folder
2186 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -create]): new method
2187 that requests the folder manager to create a folder table with the
2188 specified type at the specified path. The type is taken from [self
2191 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
2192 -folderType]): implemented.
2194 * SoObjects/Appointments/SOGoAppointmentFolder.m
2195 ([SOGoAppointmentFolder -folderType]): implemented.
2197 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2198 -appendPersonalSourcesInContext:context]): we now fetch all
2199 folders with type "Contact" that belong to the current user.
2200 ([SOGoContactFolders -newFolderWithName:name]): new method to
2201 create a new contact folder.
2203 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]): treat
2204 resulting url with [NSString+Utilities hostlessURL] instead of
2205 using NSURL. This is because the url in question sometimes has a
2206 hostname and sometimes not. "hostlessURL" ensure the hostname is
2208 ([UIxComponent -applicationPath]): same as above.
2210 2007-02-08 Ludovic Marcotte <ludovic@inverse.ca>
2212 * SoObjects/Mailer/SOGoMailFolder.m: priorize the lookup of
2213 folders before doing the one on messages.
2215 2007-02-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2217 * SoObjects/SOGo/NSArray+Utilities.m: added an implementation of
2218 makeObjectsPerform:withObject:withObject: for GNUstep
2221 * OGoContentStore/GNUmakefile, Protocols/common.make,
2222 SoObjects/common.make, UI/common.make: install in
2223 GNUSTEP_INSTALLATION_DIR instead of GNUSTEP_USER_DIR.
2225 2007-02-07 Ludovic Marcotte <ludovic@inverse.ca>
2227 * UI/Scheduler/English.lproj/Localizable.strings: fixed typo for
2230 2007-02-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2232 * UI/MailerUI/UIxMailTree.m ([UIxMailTree
2233 -getTitle:folderType:andIcon:forObject:]): disabled Sieve folders
2236 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2237 -checkLogin:_loginpassword:_pwd]): fixed a bug where a wrong
2238 password would be accepted anyway as long as its length was > 0.
2239 This can be the case ONLY when LDAP is disabled otherwise we have
2240 a serious security issue...
2242 * SoObjects/Appointments/SOGoAppointmentObject.m
2243 ([SOGoAppointmentObject -roleOfUser:logininContext:context]): if a
2244 user is not an organizer nor a participant, he is declared as
2245 "Owner" if he owns the calendar the entry where the entry is
2246 contained. Other cases should not be possible.
2248 2007-02-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2250 * UI/Contacts/UIxContactEditor.m: display and handle the new
2253 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2254 ([SOGoContactLDAPFolder -_searchAttributes]): retrieve "calFBURL"
2257 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
2258 -vCard]): put the LDAP "calFBURL" field in the vCard's "FBURL"
2261 2007-01-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2263 * SoObjects/Appointments/SOGoCalendarComponent.m
2264 ([SOGoCalendarComponent -sendEMailNotifications]): new method that
2265 returns the value of ud "SOGoAppointmentSendEMailNotifications"
2267 ([SOGoCalendarComponent
2268 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]): method moved from SOGoAppointmentObject/SOGoTaskObject, replacing occurences of "appointment" to "object" in its name.
2270 2007-01-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2272 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
2273 -defaultAction]): invoke "flushMailCaches" on [self clientObject]
2274 so that the mailbox cache is refreshed everytime the user presses
2275 on "get mail". I doubt a mailbox cache really is useful in general
2278 2007-01-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2280 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2281 -userInContext:]): if the lookup is on "freebusy.ifb" and the
2282 username is "anonymous" the user is automatically set to
2285 2007-01-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2287 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2288 -checkLogin:_loginpassword:_pwd]): authorize special "freebusy"
2289 user with password "freebusy".
2291 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
2292 -contentAsString]): the default timerange is now 14 days before
2293 currentday and 1 month after.
2295 2007-01-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2297 * SoObjects/Appointments/SOGoAppointmentFolder.m
2298 ([SOGoAppointmentFolder
2299 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
2300 escape the record string in a way suitable with XML encoding.
2302 2007-01-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2304 * UI/WebServerResources/SchedulerUI.js: fixed a bug where the
2305 calendar view would not be updated properly.
2307 2007-01-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2309 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2310 -newStartDate]): fix the handling of the component start date
2311 depending on the "hm" and the "day" parameters.
2313 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
2314 -roleOfUser:uidinContext:context]): set role of current user to
2315 "Assistant" if the object that is accessed is "freebusy.ifb".
2317 * SoObjects/Appointments/SOGoAppointmentFolder.m
2318 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): method
2319 moved from UI/Scheduler/UIxCalView:calendarFolderForUID:.
2320 ([SOGoAppointmentFolder
2321 -lookupCalendarFoldersForUIDs:_uidsinContext:]): now use the new
2322 lookupCalendarFolderForUID: method, which doesn't do security
2325 2007-01-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2327 * UI/Common/UIxAclEditor.m ([UIxAclEditor -assistantsValue]): new
2328 accessor that returns the comma-separated list of users with role
2330 ([UIxAclEditor -delegatesValue]): same as above for "Delegate".
2331 ([UIxAclEditor -_prepareUsers]): there is no longer a concept of
2332 "checkedUsers". Instead, each user is either classified in the
2333 list of assistants or the list of delegates.
2335 2006-12-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2337 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
2338 -composeAction]): method imported from removed container modules.
2339 ([UIxMailMainFrame -mailFolderName]): method imported from removed
2342 * UI/MailerUI/UIxMailPopupView.m: a new special popup component
2343 for wrapping UIxMailView with the "popupview" action.
2345 * UI/MailerUI/UIxMailAccountView.m: renamed to UIxMailSplashView,
2346 since its the component that displays the same splash screen than
2347 the one in Thunderbird/Icedove.
2349 * UI/MailerUI/UIxMailAccountViewContainer.[hm],
2350 UI/MailerUI/UI/MailerUI/UIxMailAccountsView.m,
2351 UI/MailerUI/UIxMailListViewContainer.[hm],
2352 UI/MailerUI/UIxMailViewContainer.[hm]: removed
2354 2006-12-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2356 * UI/WebServerResources/HTMLElement.js: replaced the functional
2357 selectNode() and deselectNode() functions with select() and
2358 deselect() methods of HTMLElement.
2360 * UI/WebServerResources/ContactsUI.js: cleanup, most of the
2361 events are initialized from here now instead of in the HTML code.
2363 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2364 -checkRightsAction]): new method similar to the one with the same
2365 name in UIxCalMainView.m.
2367 * UI/Common/UIxAclEditor.m ([UIxAclEditor -saveAclsAction]): added
2368 code to handle the publishing of freebusy information.
2370 2006-12-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2372 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
2373 -checkRightsAction]): new action method that returns a
2374 comma-separated list of boolean values matching the right of the
2375 current user to "view" (as a permission) each foreign calendar
2376 stored in his preferences.
2378 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -setOwner:newOwner]):
2379 new method that sets a customOwner, which can be returned with
2380 ownerInContext it set.
2382 * SoObjects/Appointments/SOGoAppointmentFolder.m
2383 ([SOGoAppointmentFolder
2384 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): no longer set the owner of elements here.
2386 2006-12-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2388 * SoObjects/SOGo/SOGoUserFolder.m: same as for SOGoContactFolders
2389 below, but for the Contacts and Calendar collections.
2391 * SoObjects/SOGo/SOGoAclsFolder.m: convert the class to user the
2392 new acl facilities method from sope-gdl/GCSFolder.m.
2394 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2395 -roleOfUser:uidinContext:context]): new method that returns
2396 SOGoRole_Assistant when the user is an assistant or a delegate on
2397 the "personal" ab object. This is so that setting roles on the
2398 SOGoContactFolders object is not required.
2400 2006-12-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2402 * Main/SOGo.m: declare "Freebusy" permissions for the top objects.
2404 * UI/Contacts/UIxContactsAclsSelection.m: new component specific
2405 to the handling of the user selection for the acls.
2407 * SoObjects/SOGo/SOGoPermissions.[hm]: new module that extends the
2408 values from SoPermissions with ones specific to SOGo.
2410 * SoObjects/SOGo/SOGoAclsFolder.[hm]: new class module that
2411 handles the storage for the acls.
2413 * SoObjects/Appointments/SOGoCalendarComponent.[hm]: new parent
2414 class for SOGoAppointmentObject and SOGoTaskObject.
2416 * UI/Common/UIxAclEditor.[hm]: new component that provides a
2417 general editor for folder acls.
2419 * SoObjects/SOGo/NSString+Utilities.[hm]: old "NSString+URL"
2421 ([NSString -davMethodToObjC]): method that returns the method name
2422 for a DAV property implementation.
2424 * SoObjects/SOGo/NSArray+Utilities.m: new extension module to
2426 ([NSArray -stringsWithFormat:format]): new method that returns
2427 formatted occurences of the strings stored in the array.
2429 * SoObjects/SOGo/SOGoDAVRendererTypes.m ([SOGoDAVSet
2430 +davSetWithArray:newValuesofValuesTaggedAs:newValueTag]): a new
2431 subclass module of SoWebDAVValue that supports collections of
2432 properties of the same type.
2434 2006-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2436 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2437 -lookupFolder:ofClassNamed:inContext:]): added the ability to
2438 configure the name of the SOGoDraftFolders with the ud var
2439 "SOGoDraftsFolderName".
2441 2006-11-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2443 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2444 -userTimeZone:username]): new method that returns the timezone for
2445 the specified user depending on his preferences and the server
2448 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2449 -stringForData:partInfo:]): take the encoding into account and
2450 translate the text to "normal" before processing the charset data.
2452 2006-11-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2454 * UI/WebServerResources/generic.js: the progress indicator is on
2455 when loading the page so we turn it off, and we turn it back on
2456 whenever we switch to another module...
2458 * UI/WebServerResources/SchedulerUI.js: make sure the day view
2459 synchronization mechanism works everywhere.
2461 * UI/WebServerResources/generic.js: the log window is not only
2462 visible when UIxDebugEnabled is set.
2464 * UI/WebServerResources/SchedulerUI.js: the month overview's day
2465 cells are now initialized with the DOM event interface methods
2466 instead of with html attributes.
2468 * UI/Templates/MailerUI/UIxMailView.wox: don't display useless
2469 headers (should be made configurable at some point)...
2471 * OGoContentStore/sql/generate-folderinfo-sql-for-users.sh: drop
2472 "not null" constraint on startdate, enddate, isopaque,
2473 participants and partmails.
2475 2006-11-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2477 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
2478 -hoursToDisplay]): prevent a crash by retaining the
2479 "hoursToDisplay" array after it's created.
2480 ([UIxCalDayTable -clickableHourCellClass]): new method for the new
2481 clickable hours DIV.
2483 * UI/WebServerResources/SchedulerUI.js: made the event
2484 participation status modification asynchronous, which also fixes a
2485 bug where the window would sometimes close before the accept or
2486 decline action was completed. Also, adapted the event handling
2487 related to the days or weeks view with the new DIV-based layout.
2489 * UI/Scheduler/UIxCalInlineAptView.m: same as the first below...
2491 * UI/Scheduler/UIxCalDayTable.m: enhanced to provide the new
2492 DIV-based presentation of the days and weeks.
2494 * SoObjects/Appointments/SOGoTaskObject.m: same as below...
2496 * SoObjects/Appointments/SOGoAppointmentObject.m: lookupName:...
2497 might return an exception so we have to handle it if we don't
2500 2006-11-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2502 * UI/WebServerResources/SchedulerUI.js: updated the list
2503 initialization code to use the new event management scheme, adding
2504 what was missing to be able to delete events and tasks again.
2506 * UI/WebServerResources/MailerUI.js: added code to activate the
2507 "Get mails" button. Fixed a bug which prevented messages to be
2510 * UI/WebServerResources/UIxFreeBusyUserSelector.js: handle tab
2511 navigation and focus handling of INPUTs.
2513 2006-11-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2515 * UI/WebServerResources/MailerUI.js: added code to handle the
2516 possible drag and drop events to manager in the mail module.
2517 Moving messages, opening parent folders, ...
2519 * UI/WebServerResources/SOGoDragAndDrop.js: new file containing
2520 the drag and drop manager as well as the interface to HTMLElement
2521 to trigger drag and drop events.
2523 * UI/MailerUI/UIxMailView.m ([UIxMailView -moveAction]): new
2524 action to move the current message to the mailbox named after the
2525 value of parameter "tofolder".
2527 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2528 -moveToFolderNamed:folderNameinContext:]): new method base on
2531 2006-11-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2533 * UI/WebServerResources/generic.js: added and activated many
2534 "load" handlers to configure generic widgets used across the
2535 modules. More events are now handled in a DOM-fashion way instead
2536 of by setting the relative attributes in the templates.
2538 * UI/Templates/UIxSortableTableHeader.wox: all the events are
2539 declared from the javascript DOM onload handlers.
2541 * UI/Templates/UIxPageFrame.wox: load the new SOGoDragHandles.js
2544 * UI/Templates/MailerUI/UIxMailListView.wox: all the events are
2545 declared from the javascript DOM onload handlers.
2547 * UI/MailerUI/UIxMailListView.m: removed all the JS methods since
2548 we want everything to be separated from each other, as much as
2551 * UI/WebServerResources/SOGoDragHandles.js: new module containing
2552 the "SOGoDragHandlesInterface", implementing methods that can be
2553 attributed to DIV so that they can be used as drag handles.
2555 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
2556 -asQPSubjectString]): initialize the tmp strings with '0' to make
2557 sure they don't contain garbage.
2559 2006-11-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2561 * UI/WebServerResources/MailerUI.js: register the messageList
2562 table as a dragging source and the leaf of the navigation tree as
2563 dnd destinations to the DNDManager.
2565 * UI/WebServerResources/generic.js: initialize tabs from the
2566 "unload" event listener that is added programmatically instead of
2567 from the template... Also, added the new DNDManager object.
2569 * UI/WebServerResources/HTMLTableElement.js: added code to
2570 simulate XUL drag n drop events. This code will possibly be moved
2571 to HTMLElement.js instead later...
2573 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2574 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): same as
2577 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
2578 -_qualifierForFilter:filter]): only search records which starts
2579 with the specified pattern.
2581 2006-11-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2583 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
2584 -asQPSubjectString]): new method that returns the special QP
2585 string with its qp declaration for email subjects.
2586 ([SOGoDraftObject -bodyPartForText])
2587 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): don't
2588 double-encode data in UTF-8.
2590 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2591 -newStartDate]): new method to determine the start date depending
2592 on the URL parameters, the current day and the current time.
2593 ([UIxComponentEditor -toolbar]): new method to determine the
2594 filename of the toolbar that should be drawn depending on the
2595 ownership and the list of attendees of the task/event wrt to the
2598 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
2599 -setDayStartHour:aStartHour]): adjust the minutes to the next
2600 quarter of hour, if not already set to a quarter.
2602 * UI/WebServerResources/UIxAppointmentEditor.js,
2603 UI/WebServerResources/UIxTaskEditor.js: added code to manage start
2606 2006-11-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2608 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2609 -loadValuesFromComponent:component]): handles access class
2610 (privacy) and status.
2612 * UI/Contacts/UIxContactsListViewContainer.m
2613 ([UIxContactsListViewContainer -additionalFolders]): return nil if
2614 [self additionalAddressBooks] returns an empty string.
2616 2006-11-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2618 * UI/Scheduler/UIxCalMonthView.m ([UIxCalMonthView
2619 rangesOf7Days]): enhanced and debugged algorithm to feed the array
2620 with slices where the first day is still in the requested month.
2622 * UI/Templates/UIxPageFrame.wox: the logConsole is created only on
2625 * UI/SOGoUI/SOGoAptFormatter.m: added code to handle the display
2626 of events in the day boxes of the calendar's monthly view.
2628 * SoObjects/Appointments/SOGoTaskObject.m ([SOGoTaskObject
2629 -davContentType]): declare "text/calendar".
2631 * SoObjects/Appointments/SOGoAppointmentObject.m
2632 ([SOGoAppointmentObject -davContentType]): declare
2635 * SoObjects/Appointments/SOGoAppointmentFolder.m
2636 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): certain
2637 HTTP methods are handled by SOPE and requires nil to be returned,
2638 this method now invokes the new
2639 "requestNamedIsHandledLater:inContext:" method to check that.
2640 ([SOGoAppointmentFolder
2641 -requestNamedIsHandledLater:nameinContext:context]): new methods
2642 that returns "YES" only for the "OPTIONS" http method (for now...).
2643 ([SOGoAppointmentFolder -davComplianceClassesInContext:]):
2644 overloaded method to append the "access-control" and
2645 "calendar-access" DAV abilities to the initial declaration.
2647 * UI/Scheduler/UIxCalMonthView.[hm]: rewritten module entirely to
2648 imitate the look of Sunbird/Lightning's monthly view.
2650 * UI/Scheduler/UIxCalMonthView.[hm]: renamed to
2651 UIxCalMonthViewOld.[hm].
2653 2006-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2655 * UI/Scheduler/UIxFreeBusyUserSelectorTable.m
2656 ([UIxFreeBusyUserSelectorTable -currentContactHasStatus]): new
2658 ([UIxFreeBusyUserSelectorTable -currentContactStatusImage]):
2659 returns an image name based on the participation status of the
2662 * UI/WebServerResources/SchedulerUI.js: same strip down as for
2665 * UI/Contacts/UIxContactsListViewContainer.m ([UIxContactsListViewContainer -additionalAddressBooks])
2666 ([UIxContactsListViewContainer -additionalFolders])
2667 ([UIxContactsListViewContainer -setCurrentAdditionalFolder:newCurrentAdditionalFolder])
2668 ([UIxContactsListViewContainer -currentAdditionalFolder]): new
2669 methods to handle the external addressbooks a user has subscribed
2670 too, by retriving them from his preferences.
2672 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2673 -updateAdditionalAddressBooksAction]): new method that updates the
2674 user settings with the list of addressbook he has subscribed to.
2676 * UI/Contacts/UIxContactsAddressBooksSelection.m: new component
2677 module for the address book selector.
2679 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
2680 a toolbar with two buttons ("add" and "remove") to manage the
2681 additional addressbooks a user might subscribe to.
2683 * UI/WebServerResources/ContactsUI.js: added code to handle
2684 "external addressbooks" from the Javascript point-of-view, by
2685 extending existing methods and adding code for the "add ab" and
2686 "remove ab" buttons.
2688 * UI/WebServerResources/generic.js: moved extensions methods to
2689 DOM elements to separate files for better clarity.
2691 * UI/Common/UIxPageFrame.m ([UIxPageFrame -pageContentClasses]):
2692 new method that returns "pageContent" as class, but also "popup"
2693 for the DIV where the page content lies, so that we can manipulate
2694 the content of popup's with CSS identifiers.
2696 2006-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2698 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
2699 -displayStyle]): new method that returns a string containing the
2700 css style relative to the current appointment cell. This code is
2701 currently inactive but might be reused later.
2703 * UI/WebServerResources/SchedulerUI.js: added code to handle the
2704 display of the selected day (the day pointed by the mouse, or the
2705 current day when changing the view).
2707 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
2708 -dayCellClasses]): new method that returns a string containing the
2709 css classes applicable to the current cell, depending on the
2710 position of the day in the week, the day of today and the
2713 * UI/Scheduler/UIxCalCalendarsListView.m ([UIxCalCalendarsListView
2714 -currentContactAptBorder]): new method that returns the
2715 appropriate border color for the specified user.
2717 * SoObjects/Appointments/SOGoAppointmentObject.m
2718 ([SOGoAppointmentObject
2719 -saveContentString:contentStringbaseVersion:baseVersion]):
2720 overloaded method that parse new events and detects if they have
2721 an organizer or not. If they are new and have no organizer set
2722 (Sunbird/Lightning...), the owner of the event is set as
2725 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: new
2726 category that provides facility methods and interfaces to the
2729 * SoObjects/Contacts/product.plist: give full access to ANY
2730 authenticated user, not just the owner (to every objects...).
2732 2006-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2734 * UI/WebServerResources/UIxFreeBusyUserSelector.js: make sure
2735 every replica widgets are declared as such to their master
2736 counterpart. Take the days into account when displaying the time
2737 range taken by the appointment.
2739 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
2740 -getICalPersonsFromValue:selectorValue]): method taken from
2741 UIxFreeBusyUserSelector, that is shared both by
2742 UIxFreeBusyUserSelector and UIxFreeBusyUserSelectorTable.
2744 * SoObjects/Appointments/SOGoAppointmentFolder.m
2745 ([SOGoAppointmentFolder
2746 -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.
2748 * UI/Scheduler/UIxFreeBusyUserSelectorTable.[hm]: new subcomponent
2749 derived and taken as a subset of UIxFreeBusyUserSelector that
2750 implements the table part of the FreeBusy view. Most of the
2751 methods of UIxFreeBusyUserSelector relative to that table were
2752 moved into UIxFreeBusyUserSelectorTable, which can also be used as
2753 a standalone view for AJAX operations.
2755 2006-10-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2757 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
2758 -vCard]): change reverted.
2760 * UI/Contacts/UIxContactEditor.m: check whether the client contact
2761 folder has selector "globallyUniqueObjectId" before calling that
2764 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
2765 -vCard]): the "setVClass" NGVCard method really is "setClass"
2768 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2769 ([SOGoContactLDAPFolder -_searchAttributes]): fixed typo to
2770 request the "streetAddress" instead of the "streetaddress".
2771 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): lookup
2772 mails that *contain*, and not just *start with* the search
2775 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
2776 -vCard]): mark address returned from LDAP as the work address.
2778 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: made the whole
2779 span covered with the anchor, not only the textual information
2782 * UI/Templates/SchedulerUI/UIxCalMainView.wox: specify the type
2783 argument (event or task) to newEvent in the appointmentListMenu.
2784 Make the appointmentsListView display the appointmentsListMenu.
2786 * UI/SOGoUI/SOGoAptFormatter.m: enlarge the text size limit from
2787 12 to 50 before displaying "...".
2788 ([SOGoAptFormatter -fullDetailsForApt::]): display location only
2789 if its length > 0, whether location itself is nil or not...
2790 ([SOGoAptFormatter -tooltipForApt::_refDate]): display information
2791 of which the length > 0.
2793 2006-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2795 * UI/WebServerResources/UIxAppointmentEditor.js: correctly handles
2796 french and ISO dates.
2798 * UI/Scheduler/UIxFreeBusyUserSelector.[hm]: added code an ivars
2799 from UIxContactSelector to handle contact lists (current and
2800 additional contacts).
2802 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
2803 -_freeBusyAsText]): added handling of an "additional"-named query
2804 parameter that describe the number of additional days after
2805 enddate that should be returned.
2807 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2808 -_responseForResults:results]): give priority to results with
2809 "c_uid" fields. If none returned, use the first contact received.
2811 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2812 -extractQuickFieldsFromEvent:_event]): changed "TENTATIVE" code to
2813 2 and "CANCELLED" to 0.
2815 2006-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2817 * UI/WebServerResources/UIxAppointmentEditor.js: handle conversion
2818 of start and end dates to short string dates.
2820 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
2821 -readFreeBusyAction]): new method that returns an array of numbers
2822 corresponding to the state in the freebusy of each "quarter of an
2823 hour" between the "sday" and "eday" date parameters passed in the
2824 url. This permits to handle the display of the freebusy with Ajax
2826 ([SOGoUserHomePage -_freeBusyAsText]): add 2 days to the end date
2827 since the free busy displays 2 days ahead.
2829 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2830 -contactSearchAction]): new action that returns the uid and the
2831 username + email of the user whose name contain the value of the
2832 "search" url parameter.
2834 * SoObjects/Appointments/SOGoAppointmentFolder.m
2835 ([SOGoAppointmentFolder
2836 -fetchFreebusyInfosFrom:_startDateto:_endDate]): added fields
2837 useful for the computing of the status of the freebusy.
2839 * UI/Scheduler/UIxFreeBusyUserSelector.m ([UIxFreeBusyUserSelector
2840 -init]): new component that incarnates a user selector for events
2841 inspired by the new one found in Thunderbird Lightning.
2843 2006-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2845 * UI/WebServerResources/generic.js: added code to enable or
2846 disable anchor visually (following our internal algorithm).
2848 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -init]):
2849 added new "url" ivar with its classic accessors.
2850 ([UIxComponentEditor -urlButtonClasses]): new method that returns
2851 the class strings for the url button on the appointment/task
2852 editor (depending on the validity of the url).
2854 * UI/Templates/SchedulerUI/UIxTaskEditor.wox,
2855 UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: start rewriting
2856 the template to match the Lightning's new task/appointment editor.
2858 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor -saveValuesIntoAppointment:_appointment]): initialize url from the components'url.
2860 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveValuesIntoTask:_task]): initialize url from the components'url.
2862 2006-10-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2864 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2865 ([SOGoContactLDAPFolder
2866 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): perform the searchs on objects which start with instead of contain the lookup key.
2868 * SoObjects/Appointments/SOGoAptMailNotification.[hm]: work on
2869 iCalEntityObject instances instead of just iCalEvent's.
2871 * SoObjects/Appointments/SOGoAppointmentFolder.m
2872 ([SOGoAppointmentFolder
2873 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): set ownership of returned records by adding an "owner" key to the resulting dictionaries.
2875 * SoObjects/SOGo/NSObject+Owner.[hm]: removed module since it's a
2876 bad way of handling ownership that way.
2878 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2879 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): search also
2880 on "cn", just like Mozilla.
2882 2006-10-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2884 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]):
2885 "to" should be retained, otherwise it will be autoreleased and a
2888 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
2889 -writeAction]): updated method to fetch the card before initing
2892 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2893 -extractQuickFieldsFromTodo:_task]): fixed to use NSNull instead
2896 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
2897 -iCalStringTemplate]): start and due date are now optional.
2899 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
2900 -setDayStartHour:aStartHour]): added a new "isDisabled" ivar with
2901 appropriate accessors to be settable through the templates.
2903 * UI/Scheduler/UIxDatePicker.m ([UIxDatePicker -init]): added a
2904 new "isDisabled" ivar with appropriate accessors to be
2905 settable through the templates.
2907 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2908 -availableCalendars]): new method that list the calendars to which
2909 the user has subscribed.
2910 ([UIxComponentEditor -componentOwner]): returns the owner of the
2913 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2914 -extractQuickFieldsFromTodo:_task]): set the start and enddate of
2915 quickentries to null whenever each or all of them are null, by
2916 providing an impossible timestamp from with NSNotFound as value.
2918 2006-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2920 * UI/WebServerResources/UIxMailEditor.js: update the algorithm
2921 that handles the creation of new fields with the new APIs and the
2922 new node structure on the page.
2924 * UI/Scheduler/UIxAppointmentEditor.m,
2925 UI/Scheduler/UIxTaskEditor.m:
2926 refactored to user UIxComponentEditor as parent class.
2928 * UI/Scheduler/UIxComponentEditor.[hm]: new class module
2929 containing the methods common to the UIxTaskEditor and the
2930 UIxAppointmentEditor.
2932 2006-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2934 * SoObjects/Appointments/SOGoAppointmentFolder.m
2935 ([SOGoAppointmentFolder -doCalendarQuery:context]): now supports
2936 the handling of time-ranges.
2938 * UI/WebServerResources/ContactsUI.js: specify a notification type as
2939 parameters when onConfirmContactSelection in invoked.
2941 * UI/WebServerResources/generic.js: specify a notification type as
2942 parameters when onContactRemove in invoked.
2944 * UI/WebServerResources/SchedulerUI.js: when the user deselects
2945 all calendars, select his entry.
2947 2006-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2949 * UI/WebServerResources/SchedulerUI.js: edit and delete events
2950 with their owner-relative urls. Generate a correct entry in the
2951 css color table when a user is added to the calendars list. Put
2952 the same color next to the user id.
2954 * UI/WebServerResources/generic.js: implemented some new helper
2957 * SoObjects/Appointments/SOGoAppointmentFolder.m
2958 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): don't delete
2959 entries if their owner is not the current user.
2961 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
2962 -displayClasses]): return the correct class for the current event
2963 representation depending on its owner.
2965 * UI/Scheduler/UIxCalCalendarsListView.m: added method to create
2966 and associate a color for each user login depending on its
2967 position in the list.
2969 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView
2970 -currentRowCSSClass]): return the correct class for the current
2971 row depending on the owner of the event.
2973 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
2974 -setColors:colors]): new method to associate a color table with
2975 each user in the list.
2977 * SoObjects/Appointments/SOGoAppointmentFolder.m
2978 ([SOGoAppointmentFolder
2979 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): associate each returned record with the owner of the table they are retrieved from.
2981 * SoObjects/SOGo/NSObject+Owner.[hm]: new extension module to
2982 NSObject to associate an instance with a user.
2984 2006-10-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2986 * UI/WebServerResources/SchedulerUI.js: added handling of multiple
2989 * UI/WebServerResources/ContactsUI.js: added handling of
2990 notification of changes to contact selectors.
2992 * UI/WebServerResources/generic.js: added handling of notification
2993 of changes to contact selectors.
2995 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
2996 -updateCalendarsAction]): proxy method to update the user
2997 preference table with the new selected calendar uids.
2999 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3000 -calendarsContactsAction]): new method.
3002 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector -setCheckedBoxes:boxes])
3003 ([UIxContactSelector -setHasCheckBoxes:aBool])
3004 ([UIxContactSelector -isCheckBoxChecked]): new accessors method to
3005 permit the drawing of checkboxes instead of card icons.
3007 * UI/Scheduler/UIxCalCalendarsListView.m: new component class that
3008 wrap a selector the the "Calendars" tab.
3010 * UI/Contacts/UIxContactsCalendarsSelection.m: buttons for the
3011 new user calendar selector.
3013 2006-10-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3015 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: time ranges
3016 may cover hour 0 to hour 23.
3018 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
3019 -iCalStringFromQueryParameter:format:]): dates explicitly set to
3022 * UI/WebServerResources/SchedulerUI.js: manage both lists of
3023 objects wrt to the toolbar actions.
3025 * UI/WebServerResources/generic.js: added code to the "String"
3026 class to decode number-encoded char entities.
3028 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3029 -batchDeleteAction]): new method to delete selected entries in the
3032 * SoObjects/Appointments/SOGoAppointmentFolder.m
3033 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): new method
3034 that delete identified entries in batch.
3036 * UI/SOGoUI/UIxComponent.m ([UIxComponent
3037 -jsCloseWithRefreshMethod:methodName]): new method with explicit purpose.
3039 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]),
3040 UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
3041 -saveAction]), UI/MailerUI/UIxMailEditor.m ([UIxMailEditor
3042 -sendAction]), UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3044 return a UIxJSClose component if everything went fine.
3046 * UI/Scheduler/UIxTaskEditor.h: interface extracted from
3049 * UI/Scheduler/UIxAppointmentEditor.h: interface extracted from
3050 UIxAppointmentEditor.m.
3052 * UI/Common/UIxJSClose.[hm]: new UIxComponent designed to display
3053 a very light page with javascript code to close a window, by
3054 calling a method on the opener if specified. This component is
3055 designed to work as a response to form postings.
3057 2006-10-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3059 * SoObjects/Appointments/SOGoTaskObject.[hm]: clone of
3060 SOGoAppointmentObject adapted for the handling of tasks.
3062 * SoObjects/Appointments/NSArray+Appointments.[hm]: category
3063 extracted from SOGoAppointmentObject.
3065 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
3066 -saveUrl]): returns the url needed to POST the new form to.
3067 redirect the user to <aptid>/editAsAppointment instead of /edit,
3068 so that SOGoAppointmentFolder can return the correct object type.
3070 * SoObjects/SOGo/NSObject+AptComparison.m ([NSObject
3071 -compareAptsAscending:_other]): accept empty start or end dates.
3073 * SoObjects/Appointments/SOGoAppointmentFolder.m
3074 ([SOGoAppointmentFolder
3075 -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.
3076 ([SOGoAppointmentFolder -doCalendarQuery:context]): fetch
3077 components of type "vtodo" as well as "vevent".
3078 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): if the
3079 url specified ends with AsTask or AsAppointment, returns the
3080 an object of the appropriate class, otherwise deduce it from its
3081 content if the HTTP method is "PUT", otherwise read its type from
3084 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3085 -extractQuickFieldsFromTodo:_task]): extract quick fields from
3088 * UI/Scheduler/UIxCalView.m ([UIxCalView
3089 -fetchCoreAppointmentsInfos]): replacement methods for
3090 fetchCoreInfos but by retrieving object with component "vevent".
3091 ([UIxCalView -fetchCoreTasksInfos]): same as above for "vtodo"
3094 * UI/Scheduler/UIxCalTasksListView.[hm]: clone of
3095 UIxCalAptListView adapted for the handling of tasks.
3097 * UI/Scheduler/UIxTaskProposal.[hm],
3098 UI/Scheduler/UIxTaskView.[hm], UI/Scheduler/UIxTaskEditor.[hm]:
3099 clones of the UIxAppointment* classes for the handling of tasks.
3101 * UI/WebServerResources/UIxTaskEditor.js: clone of
3102 UIxAppointmentEditor adapted for the handling of tasks.
3104 * UI/WebServerResources/SchedulerUI.js: added support for tasks.
3105 Scroll the daily view to the appropriate hour when an appointment
3106 is selected in the appointments list.
3108 2006-10-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3110 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
3111 -setDayStartHour:aStartHour]): specifies the user timezone on the
3114 * UI/Scheduler/UIxAppointmentEditor.m: indicate DTSTAMP with "GMT"
3117 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate -adjustedDate])
3118 ([NSCalendarDate -driftedDate]): methods made useless by a better
3119 comprehension of the NSTimeZone API...
3121 2006-10-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3123 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): call
3124 new methods from the NSCalendarDate methods.
3126 * SoObjects/SOGo/NSCalendarDate+SOGo.m: module replacing and
3127 extending UI/Scheduler/NSCalendarDate+Scheduler.m.
3129 +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).
3130 ([NSCalendarDate -adjustedDate]): this method returns another
3131 instance set to the correct hour after the original date was set
3132 from a non-GMT timezone. This date can be used for storage.
3133 ([NSCalendarDate -driftedDate]): this method does exactly the
3134 opposite of -adjutedDate, that is, it enables the method
3135 hourOfDay, minuteOfHour etc... to return the values according to
3136 the original date's timezone. This date CANNOT be used for storage.
3138 * UI/Scheduler/NSCalendarDate+Scheduler.m ([NSCalendarDate
3139 -shortDateString]): new method that will return a "short date
3140 string" (yyyymmdd) from a calendar date object.
3142 * UI/SOGoUI/UIxComponent.m ([UIxComponent
3143 -_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.
3145 * Main/sogod.m (main): initialize the NSTimeZone's defaultTimeZone
3146 to the value of SOGoServerTimeZone or "Canada/Eastern" if not found.
3148 2006-10-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3150 * UI/WebServerResources/SchedulerUI.js: added code to scroll the
3151 view of the day at the height of hour 8:00.
3153 * UI/Scheduler/UIxCalView.m ([UIxCalView -dayStartHour]): returns 0.
3154 ([UIxCalView -dayEndHour]): returns 24.
3156 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView -defaultAction])
3157 ([UIxContactFoldersView -newAction]): invoke
3158 _selectActionForApplication: on self with the proper attribute too.
3160 * UI/Contacts/UIxContactsSelectionViewContainer.m: removed since
3161 we now use the action mechanism in UIxContactsListView to keep the
3162 same view for the contact selectors and the regular contact view.
3164 * UI/Contacts/UIxContactsListViewContainer.[hm]: replaces
3165 UIxContactsListViewContainerBase.[hm]
3167 * UI/Contacts/UIxContactsListView.[hm]: replaces UIxContactsListViewBase.[hm]
3169 * UI/WebServerResources/generic.js: generalized emailstring
3170 handling functions. Generalized address book access functions.
3172 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
3173 -isPopup]): return YES if the "popup" query parameter is set.
3175 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3176 -defaultAction]): keep the url parameters when redirecting.
3177 ([UIxContactFoldersView -selectForSchedulerAction])
3178 ([UIxContactFoldersView -selectForMailerAction]): new action
3179 methods for the /scheduler-contacts and /mailer-contacts invocations.
3181 * SoObjects/SOGo/SOGoObject.m: compose the action url using the
3182 newly available NSString+URL category.
3184 * SoObjects/SOGo/NSDictionary+URL.m ([NSDictionary
3185 -asURLParameters]): handle dictionary entries which could be
3186 instances of NSArray rather than NSString.
3188 * SoObjects/SOGo/NSString+URL.m ([NSString
3189 -composeURLWithAction:actionparameters:urlParametersandHash:useHash]): when composing the url, remove the encoded parameters first since they will be added later.
3190 ([NSString -urlWithoutParameters]): new method that returns the
3191 url without its parameters.
3193 * SoObjects/SOGo/NSString+iCal.h: deleted obsolete file.
3195 * SoObjects/SOGo/NSDictionary+URL.[hm],
3196 UI/SOGoUI/NSString+URL.[hm]: moved from UI/SOGoUI/.
3198 * UI/WebServerResources/UIxMailEditor.js: add support for
3199 additions of different types (to, cc, bcc) of recipients from the
3202 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): added the
3205 * UI/Contacts/UIxContactsMailerSelection.m,
3206 UI/Contacts/UIxContactsSchedulerSelection.m: classes replacing
3207 UI/Contacts/UIxContactsSelectionView.m to provide a different set
3208 of widgets depending on the application invoking the contact list.
3210 2006-09-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3212 * UI/WebServerResources/ContactsUI.js: hide the current contact
3213 whenever the user changes of contact folder.
3215 * UI/WebServerResources/UIxContactEditor.js: the contact UID is
3216 now provided by the template when loading the page.
3218 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
3219 -iCalPersonWithUid:uid]): new method taken from removed module
3222 2006-09-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3224 * UI/Scheduler/UIxAppointmentView.m ([UIxAppointmentView
3225 -categoriesAsString]): same as below.
3227 * UI/Scheduler/UIxAppointmentEditor.m: adapted by using the new
3228 vcalendar API's iCalEvent instead of the removed SOGoAppointment.
3230 * SoObjects/Appointments/SOGoAppointmentObject.m
3231 ([SOGoAppointmentObject -calendarFromContent:cnt]): new helper method.
3232 ([SOGoAppointmentObject -firstEventFromCalendar:calendar]): new
3235 * SoObjects/Appointments/SOGoAppointmentFolder.m
3236 ([SOGoAppointmentFolder -doCalendarQuery:context]): added a
3237 hackish test to detect whether the request concernes VEVENT's or
3238 anything else. Return events only in the former case.
3239 ([SOGoAppointmentFolder
3240 -fetchOverviewInfosFrom:_startDateto:_endDate]): retrieve the
3241 c_name quickfield so that the calendar list can identify the
3242 appointments with their complete "filename".
3244 * OGoContentStore/OCSiCalFieldExtractor.m: use CardGroup's
3245 groupsOfClass:fromSource: to parse the given vcalendar.
3247 * UI/Scheduler/iCalRecurrenceRule+SOGo.m: removed obsolete class.
3249 * UI/Scheduler/SOGoAppointment+UIx.h: removed obsolete class.
3251 * SoObjects/SOGo/SOGoAppointmentICalRenderer.[hm]: removed
3254 * SoObjects/SOGo/SOGoAppointment.[hm]: removed obsolete class.
3256 2006-09-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3258 * SoObjects/Appointments/SOGoAppointmentFolder.m
3259 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): be
3260 sensitive to the CalDAV method names.
3261 ([SOGoAppointmentFolder -doCalendarQuery:context]): method for the
3262 "calendar-query" CalDAV method name.
3264 * UI/WebServerResources/ContactsUI.js: removed a lot of useless
3265 code coming originally from MailerUI.js.
3267 * UI/WebServerResources/UIxContactEditor.js: imitate the
3268 Thunderbird address book by completing the display name with the
3269 content of the first and last name fields, until the display name
3270 is modified manually.
3272 * UI/WebServerResources/generic.js: added a "trim" method to the
3275 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
3276 -displayName]): new method that returns the display name from "cn"
3277 or from the "displayName" key if found.
3279 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3280 -initSnapshot]): check if "[card n]" returns anything to avoid a
3283 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): new method
3284 that returns an unparsed doctype definition for the pages.
3286 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3287 -vCard]): set the card's fn to attribute "displayName" if found
3290 2006-09-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3292 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3293 -vCard]): handle the "streetAddress" and "l" fields.
3295 * UI/Templates/MailerUI/UIxMailEditor.wox: arranged the message
3296 header fields by converting the tables to DIVs and SPANs.
3298 * UI/WebServerResources/generic.css: attempted unification of font
3299 families and size across all the elements. changed the
3300 logConsole's "position" from "fixed" to "absolute" to avoid
3303 2006-09-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3305 * UI/WebServerResources/ContactsUI.js (uixDeleteSelectedContacts):
3306 empty the contact view when the current contact is being deleted.
3308 * UI/WebServerResources/MailerUI.js (newContactFromEmail): fully
3309 parse the email field and provide the address full name if found
3310 as the "contactFN" parameter.
3312 * UI/WebServerResources/generic.js (openMailTo): do not give a
3313 name to the opened window so that serveral ones can be opened at
3316 * UI/MailPartViewers/UIxMailPartTextViewer.m
3317 ([UIxMailPartTextViewer -flatContentAsString]): override method by
3318 replacing carriage returns with "<br />" in the result string from
3319 super's implementation.
3321 * UI/Contacts/UIxContactView.m ([UIxContactView
3322 -_urlOfType:aType]): don't manage non-mailto urls through
3323 javascript, let the user decide what's best for him.
3325 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3326 -newAction]): transfer all the query parameters by using the
3327 "asURLParameters"'s result string from [self queryParameters].
3329 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3330 -initSnapshot]): retrieve "contactEmail" and "contactFN" from the
3331 query parameters and put their values (if any) into the snapshot.
3333 * UI/Contacts/UIxContactView.m ([UIxContactView -note]): convert
3334 carriage-returns to "<br />".
3335 ([UIxContactView -workCompany]): explicitly initialize company to
3336 nil if org is nil or empty.
3338 * UI/WebServerResources/UIxContactEditor.js: updated validation
3339 code after we added and renamed some fields.
3341 * UI/WebServerResources/ContactsUI.js: added code to cache contact
3342 cards and to handle card updates.
3344 2006-09-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3346 * UI/Contacts/UIxContactView.m ([UIxContactView -hasOtherInfos]):
3347 test the length of the returned string since they will never be
3350 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor -saveAction]):
3351 return self if the process went successful, returns an exception
3352 otherwise (and only otherwise...).
3354 * OGoContentStore/OCSContactFieldExtractor.m
3355 ([OCSContactFieldExtractor -extractQuickFieldsFromVCard:_vCard]):
3356 adapted method to the new VCard api. Since the cards are stored in
3357 vcard format, we no longer deal with a dictionary but with a
3360 2006-09-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3362 * UI/Contacts/UIxContactView.m ([UIxContactView -preferredEmail]):
3363 return a string with a "mailto" url.
3364 ([UIxContactView -_urlOfType:aType]): generic method to return a
3365 url string with a html anchor pointing to it.
3367 * UI/Contacts/UIxContactEditor.[hm]: UIxContactEditorBase renamed
3368 since subclass "UIxContactEditor" did nothing. Implemented code to
3369 display and modify the values parsed from the vcards, displayed in
3370 a way similar to the Thunderbird addressbook.
3372 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3373 -save]): new dummy method.
3375 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
3376 -save]): made method void.
3378 2006-09-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3380 * UI/Contacts/UIxContactView.m: added many wrapper methods to
3381 display blocks of data à la Thunderbird Addressbook. If data is
3382 available, those wrappers (around the NGVCard methods) will
3383 enclose the results in a proper HTML output with the correct label
3384 (if present), otherwise it will return an empty string.
3385 ([UIxContactView -vcardAction]): new action to return the contact
3386 as text/vcard (for exporting).
3388 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3389 +contactEntryWithName:aNamewithLDAPEntry:anEntryinContainer:aContainer]): adapted the mapping of the LDIF data with the new NGVCard API.
3391 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
3392 -vCard]): create a new NGVCard instance when no data is available
3394 ([SOGoContactGCSEntry -save]): save the vCard using the new
3395 "versitString" API method/message.
3397 * UI/Contacts/UIxContactView.h: separated interface from
3400 * UI/WebServerResources/ContactsUI.js: add-ed code to download card
3401 views and display them beneath the list.
3403 2006-09-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3405 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -userTimeZone]): retain
3406 the timezone even when it's the server timezone.
3408 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
3409 -privateContacts:inContext:]): no long configure the calendar
3410 object with the user's timezone since it's now accessible
3411 application-wide throught the SOGoObject methods.
3413 * UI/SOGoUI/UIxComponent.[hm]: removed the "viewTimeZone" ivar and
3414 method. Removed the "backendTimeZone" method.
3416 * UI/MainUI/SOGoUserHomePage.[hm]: made a subclass of UIxComponent
3417 instead of SoComponent.
3419 * SoObjects/Appointments/SOGoAppointmentObject.m:
3420 ([SOGoAppointmentObject -viewTimeZoneForPerson:_person]): returns
3421 [self serverTimeZone] instead of "EST" (which was removed).
3423 * SoObjects/Appointments/SOGoAppointmentFolder.[hm]: removed the
3424 "timeZone" ivar and its accessors.
3426 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -serverTimeZone]): new
3427 centralized method returing the timezone configured in the
3428 userdefaults db or "Canada/Eastern" if missing.
3429 ([SOGoObject -userTimeZone]): new centralized method returing the
3430 timezone of the current user or the server timezone if missing
3431 from the user configuration table.
3433 2006-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3435 * UI/WebServerResources/SchedulerUI.js: implemented caching of
3438 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]):
3439 return a path based on the object's context instead of the first
3440 level in SOGo's object hierarchy...
3442 2006-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3444 * UI/Templates/SchedulerUI/UIxCalDayTable.wox: day columns can now
3447 * UI/Templates/SchedulerUI/UIxCalDateSelector.wox: pass the user's
3448 timezone ([self viewTimeZone]) to the WEMonthOverview component to
3449 avoid a confusion with the days.
3451 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: appointments
3454 * UI/WebServerResources/SchedulerUI.js: implemented a mechanism to
3455 imitate Sunbird's synchronization between the 3 visible views.
3457 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): make
3458 sure the numbers in dateString are formatted so as to take 4 chars
3459 for the year and 2 for the day and the month, otherwise
3460 NSCalendarDate will return a nil date.
3461 ([UIxComponent -applicationPath]): return a path based on the
3462 object's context instead of the second level in SOGo's object
3465 2006-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3467 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): add the
3468 user's timezone abbreviation to the date string passed as parameter to
3469 NSCalendarDate to generate an accurate date instance. Do the same
3470 when no date is specified and today is chosen.
3472 * UI/WebServerResources/UIxAppointmentEditor.js: convert the
3473 form's time values to integers before comparing them.
3475 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -currentStartTime])
3476 ([UIxCalAptListView -currentEndTime]): initialize the resulting
3477 dates timezone with [self viewTimeZone].
3479 * UI/SOGoUI/UIxComponent.m ([UIxComponent -init]): new
3480 "viewTimeZone" ivar destined to hold an instance of the user's
3482 ([UIxComponent -viewTimeZone]): take the timezone from the user's
3485 2006-08-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3487 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: completely
3488 rearranged the layout.
3490 * UI/WebServerResources/UIxAppointmentEditor.js: added code to
3491 manage showing and hiding appointment details.
3493 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
3494 -privateContacts:inContext:]): init the SOGoAppointmentFolder's
3495 timezone by taking the current user's timezone setting.
3497 * SoObjects/Appointments/SOGoAptMailNotification.m: same as below.
3499 * SoObjects/Appointments/SOGoAppointmentObject.m
3500 ([SOGoAppointmentObject -changeParticipationStatus:inContext:]):
3501 set default timezone to EST, although this code should be
3502 rewritten to handle a system and a user default value.
3504 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
3505 -takeValuesFromRequest:_rqinContext:_ctx]): enhanced method to
3506 take the values from the hour and minute INPUTs when data is
3507 POSTed since we no longer use the UIxTimeSelector component.
3508 ([UIxTimeDateControl -selectableHours])
3509 ([UIxTimeDateControl -selectableMinutes]): new methods used by the
3510 template SELECTs to display reasonable and acceptable values
3511 instead of all the possibilities.
3513 * UI/WebServerResources/generic.js: adapted code for the new
3514 implementation of the UIxContactSelector component (added a
3515 "remove" button, removed the previous INPUT and replaced them with
3516 links of class "button").
3518 * UI/Scheduler/UIxTimeDateControl.h: separated interface from
3519 UIxTimeDateControl.m.
3521 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -currentAppointmentDay])
3522 ([UIxCalDayTable -currentAppointmentHour]): new methods that
3523 returns correctly formatted values used as attributes for JS code.
3525 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
3526 -initialContactsAsString]): renamed implementation of
3527 initialParticipants.
3528 ([UIxContactSelector -currentContactId])
3529 ([UIxContactSelector -currentContactName]): new methods used when
3530 listing the initial contacts in the widget. Currently, both return
3531 the person's cn but the latter should ultimately return a user
3534 * UI/Contacts/UIxContactSelector.h: separated interface from
3535 UIxContactSelector.m.
3537 * UI/Scheduler/UIxDatePickerScript.[hm]: component removed since
3538 all javascript code is now put in Scheduler.js/generic.js.
3540 * UI/Scheduler/NSCalendarDate+UIx.[hm]: category removed, code
3541 moved into NSCalendarDate+Scheduler instead.
3543 * SoObjects/Appointments/SOGoAppointmentFolder.m
3544 ([SOGoAppointmentFolder -setTimeZone:newTZ]): new method to
3545 configure the timezone from SOGoUserFolder when the instance is
3547 ([SOGoAppointmentFolder -viewTimeZone]): MET was removed. Returns
3548 the value of the new "timezone" ivar.
3550 2006-08-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3552 * UI/WebServerResources/SchedulerUI.{css,js}: added a tabview with
3553 the date selector in the first page and the container of the
3554 future calendar selector in the second page.
3556 * UI/WebServerResources/generic.js: added code for handling tabbed
3559 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productFrameworkName]):
3560 returns the bundle name associated to the current running product.
3562 2006-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3564 * UI/WebServerResources/UIxAppointmentEditor.js: fixed the AJAX
3565 exception by invoking a timeout on the opener rather than invoking
3566 the list refresh method.
3568 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]):
3571 * UI/Scheduler/UIxCalWeekView.m ([UIxCalWeekView -weekBeforePrevWeekQueryParameters])
3572 ([UIxCalWeekView -prevWeekQueryParameters])
3573 ([UIxCalWeekView -nextWeekQueryParameters])
3574 ([UIxCalWeekView -weekAfterNextWeekQueryParameters]): new methods
3575 that return the dates relatively to the current day.
3576 ([UIxCalWeekView -lastWeekName])
3577 ([UIxCalWeekView -currentWeekName])
3578 ([UIxCalWeekView -nextWeekName])
3579 ([UIxCalWeekView -weekAfterNextWeekName])
3580 ([UIxCalWeekView -_weekNumberWithOffsetFromToday:offset]): new
3581 methods that returns the label for the corresponding weeks.
3583 * UI/Scheduler/UIxCalDayTable.[hm]: new class module/component
3584 used by UIxCalDayView and UIxCalWeekView to display the events
3585 occuring in one or more days.
3587 2006-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3589 * UI/Scheduler/UIxCalMainView.m: extended class to populate the
3590 entries in the new "monthMenu" and "yearMenu".
3592 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]): new
3593 method to return the current day as a string formatted depending
3594 on the current locale.
3596 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
3597 ([UIxCalAptListView -endDate]): "today" is now the default filter
3598 for displayed events.
3599 ([UIxCalAptListView -currentSerialDay]): new method returning the
3600 date of the current enumerated appointment in serial form
3603 * UI/WebServerResources/SchedulerUI.js: added code to select the
3604 relevant day when an appointment is selected. Added code to popup
3605 a month and a year menu whenever the header entries are clicked in
3606 the calendar widget.
3608 * UI/WebServerResources/generic.js: made addClassName and
3609 removeClassName methods of HTMLElement.
3611 2006-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3613 * UI/WebServerResources/MailerUI.js: fixed the contact creation
3614 from email addresses.
3616 * UI/WebServerResources/generic.js: centralized the search-related
3617 functions here since the same code was used across the 3
3620 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
3621 ([UIxCalAptListView -endDate]): return the required dates needed
3622 depending on the value given to the "filterpopup" url parameter.
3624 * UI/Common/UIxToolbar.m ([UIxToolbar -buttonLabel]): reduced the
3625 code by invoking UIxComponent's labelForKey:.
3627 * UI/SOGoUI/UIxComponent.m ([UIxComponent -labelForKey:]): use
3628 [self pageResourceManager] instead of [self resourceManager].
3630 * UI/Contacts/UIxContactEditorBase.m: invokes
3631 globallyUniqueObjectId on the clientobject's class instead of the
3632 hardcoded "SOGoFolder".
3634 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3635 -newAction]): redirect the "new" action to the personal (default)
3638 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
3639 +objectWithName:inContainer:]): new constructor.
3641 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3642 -lookupContactWithId:recordId]): always create a contact object,
3643 even if it does not exist.
3645 2006-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3647 * UI/Scheduler/UIxCalMainView.[hm]: new class to serve as a pseudo
3648 component that lays out the different components of SOGoCalendar.
3649 Only serves as an Objective-C counterpart to its xml template.
3651 * UI/Scheduler/UIxCalInlineMonthOverview.h: interface extracted
3654 * UI/Scheduler/UIxCalFilterPanel.[hm]: new class designed to
3655 display a widget to handle the information displayed in the
3656 appointments list. Not currently used, lacks implementation.
3658 * UI/Scheduler/UIxCalDateSelector.[hm]: new class designed to
3659 display a calendar as a dynamic widget from where one can select
3660 the current visible day.
3662 * UI/Scheduler/NSCalendarDate+Scheduler.[hm]: category code
3663 extracted from UIxCalInlineMonthOverview.m.
3665 * UI/Scheduler/UIxDatePicker.m: removed the jsPopup, jsCode and
3666 calendarPageURL methods. The javascript code is handled by .js
3667 files as much as possible...
3669 * UI/WebServerResources/ContactsUI.js,
3670 UI/WebServerResources/MailerUI.js: adapted to the code refactoring
3673 * UI/WebServerResources/SchedulerUI.js: implemented functions to
3674 handle the new widgets. XmlHTTPRequest code taken from
3677 * UI/WebServerResources/generic.js: put some functions related to
3678 element selections as methods to HTMLElement and HTMLTableElement.
3680 * UI/Scheduler/UIxCalAptListView.[hm]: new class designed to
3681 display the list of appointments (embodies the code-size of
3682 UIxCalAptListView; answers to the "aptlist" method).
3684 2006-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3686 * UI/Scheduler/UIxCalWeekOverview.m ([UIxCalWeekOverview
3687 -correctURLAction]): new short action method replacing the method
3688 below by taking far less code.
3690 * SoObjects/Appointments/SOGoAppointmentFolder.m
3691 ([SOGoAppointmentFolder -GETAction:]): removed method. Replaced
3692 with an action in the view-related code.
3694 * UI/Scheduler/UIxAppointmentEditor.m: invoke
3695 "stringByEscapingHTMLString" on the resulting value to avoid
3696 issues with accented characters.
3697 ([-jsCode]): removed method since the javascript code was merged
3698 into SchedulerUI.js.
3700 2006-08-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3702 * UI/Scheduler/iCalPerson+UIx.m ([iCalPerson +personWithUid:]):
3703 new class method that returns an iCalPerson based on the UID given
3706 * UI/Contacts/UIxContactsListViewContainerBase.m:
3707 UIxContactsListViewContainer renamed to serve as a base class for
3708 the contact lists in both the contact editor and the contact
3711 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3712 ([SOGoContactLDAPFolder
3713 -LDAPSetHostname:setPort:setBindDN:setBindPW:setContactIdentifier:
3714 setUserIdentifier:setRootDN:]): an LDAP field specifying the
3715 loginname of the users can now be specified.
3717 * UI/WebServerResources/generic.js: added code to manage contact
3718 lists through the new implementation of the UIxContactSelector.
3720 * UI/Templates: put the templates related to SchedulerUI in its
3723 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
3724 -asDictionaryWithAttributeNames:withUID:andCName:cName]): add an
3725 entry for "uid" with the field name representing the login name of
3726 the user in the corresponding LDAP branch.
3728 2006-08-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3730 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3731 -lookupName:_keyinContext:_ctxacquire:_flag]): when the HTTP
3732 request is a PUT, always create an entry, even if we're not sure
3735 2006-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3737 * UI/WebServerResources/ContactsUI.js: implemented live-search.
3739 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3740 -appendSystemSourcesInContext:context]): populated method with
3741 code that creates entries mapped to instances SOGoContactFolder,
3742 based on the configuration found in the NSUserDefaults under the
3743 key "SOGoLDAPAddressBooks".
3744 ([SOGoContactFolders
3745 -lookupName:nameinContext:contextacquire:acquire]):
3746 "contactsources" do not exist anymore, SOGoContactFolder was split
3747 into two classes: SOGoContactGCSFolder and SOGoContactLDAPFolder
3748 and one protocol: SOGOContactFolder, instead.
3749 ([SOGoContactFolders -contactFolders]): new accessor used by the
3750 views of SOGoContactXXXFolder to list the possible sources.
3752 * SoObjects/Contacts/SOGoContactObject.h: new protocol that
3753 defines the methods that UIxContactsView, ..Editor and so on...
3756 * SoObjects/Contacts/SOGoContactFolder.h: new protocol that
3757 defines the methods that UIxContactsListViewBase expects as well
3758 as the data fields returned in the contact lists.
3760 * SoObjects/Contacts/SOGoContactLDAPFolder.[hm]: new class that
3761 returns entries an LDAP server. Conforms to the new
3762 SOGOContactFolder protocol.
3764 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: new class that
3765 returns a vCard based on contact entries from an LDAP server.
3766 Conforms to the new SOGOContactObject protocol.
3768 * SoObjects/Contacts/NGVCardSimpleValue+Contact.m
3769 ([NGVCardSimpleValue -vCardEntryString]): generates the correct
3770 entry for the textual representation of the vCard.
3772 * SoObjects/Contacts/NGVCardSimpleValue+Contact.[hm]: new class
3775 * SoObjects/Contacts/SOGoContactGCSEntry.[hm]: new module name of
3776 "SOGoContactObject".
3778 * SoObjects/Contacts/NGVCard+Contact.m ([NGVCard -asString]): new
3779 method that generates a textual representation of the vcard.
3781 * SoObjects/Contacts/NGVCard+Contact.[hm]: new class extension.
3783 * SoObjects/Contacts/SOGoContactGCSFolder.[hm]: new module name of
3784 "SOGoContactFolder".
3786 * SoObjects/Contacts/SOGoContactSource.h,
3787 SoObjects/Contacts/SOGoPersonalAB.[hm]: unused classes and
3790 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
3791 -singleAttributeWithName:key]): new method that returns the first
3792 object associated with an ldap key (where generally one value is
3795 -asDictionaryWithAttributeNames:attributeNamesandCName:cName]):
3796 map the entry into an NSDictionary for processing by
3797 UIxContactsListViewBase.m with the least possible overhead.
3799 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: new class
3802 2006-08-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3804 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
3805 -privateContacts:inContext:]): now returns an instance of
3808 * UI/Contacts/UIxContactsListViewContainer.m
3809 ([UIxContactsListViewContainer -contactFolderName]): new method to
3810 return the absolute path to the current contact folder, called
3811 from within the template.
3813 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
3814 JS code to initialize the 'currentContactFolder' generic var.
3816 * SoObjects/Contacts/SOGoContactFolder.m ([SOGoContactFolder
3817 +contactFolderWithSource:inContainer:andName:]): new class
3818 method meant to return an instance connected to the specified
3819 source. Currently useless but won't be anymore in the next few
3822 * SoObjects/SOGo/SOGoUserFolder.h: commented out declaration of
3823 the "lookupFreeBusyObject" method since it does not exist.
3825 * UI/Contacts/UIxContactFoldersView.[hm]: new class module serving
3826 as a "view" for the SOGoContactFolders object. Does nothing but
3827 redirect the browser to the URL of the personal address book of
3828 the user. It does not even have a template.
3830 * SoObjects/Contacts/SOGoPersonalAB.[hm]: new class module
3831 implementing the SOGoContactSource protocol. Does nothing
3832 currently but will be used to implement access to the personal
3833 address book of the user stored in the SOGo database.
3835 * SoObjects/Contacts/SOGoContactSource.h: new "SOGoContactSource"
3836 protocol defining an API common to all possible types of contact
3839 * SoObjects/Contacts/SOGoContactFolders.[hm]: new class module
3840 serving as the root of the contact folders available to the
3841 current user. Correctly lists the contact sources in webdav.
3843 2006-08-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3845 * UI/MailerUI/UIxMailAccountsView.m ([UIxMailAccountsView
3846 -composeAction]): new action method that permits external object
3847 to write a message from the default (primary) account.
3849 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
3850 -initSnapshot]): new method with code taken from "defaultAction"
3851 but needed for others.
3852 ([UIxContactEditorBase -writeAction]): new action designed to
3853 compose the correct URL needed to obtain the MailerUI's email
3854 editor with the correct "mailto" parameter.
3856 * UI/Common/UIxSortableTableHeader.m: moved from MailerUI to
3857 Common so that other modules can use it.
3859 * UI/Contacts/UIxContactsListViewContainer.m: container to make it
3860 easier to manage both ajax and non-ajax requests.
3862 * UI/Contacts/UIxContactsFilterPanel.m: clone of
3863 UIxMailFilterPanel, but applicable to contact lists.
3865 * SoObjects/Contacts/NSDictionary+Contact.m ([NSDictionary
3866 -vcardContentFromSOGoContactRecord]): use the new standard methods
3867 created for each type of entry. If a line is determined to not
3868 contain information, it will be skipped.
3870 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
3871 +initialize]): init defaultMailDomain with the user default
3872 "SOGoDefaultMailDomain".
3874 2006-08-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3876 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
3877 -saveAction]): reorganized methods to only have ONE return point.
3878 Invoke saveRecord: directly on the clientObject instead of
3879 saveContentString, which does the same thing anyway.
3881 * SoObjects/Contacts/NSDictionary+Contact.m
3882 ([NSDictionary -vcardContentFromSOGoContactRecord]): extension
3883 method to convert the dictionary returned with the user submission
3884 to a record in VCARD format to be stored in the database.
3886 2006-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3888 * UI/WebServerResources/MailerUI.js: when opening the context menu
3889 of the message list, select the message below the mouse cursor and
3890 deselect the other selected messages temporarily. This mimics the
3891 behaviour of Thunderbird for that matter and was already
3892 implemented for the entries of the folder tree.
3894 * UI/MailerUI/UIxMailFolderMenu.m ([UIxMailFolderMenu
3895 -iconForMenuItem]): new method that returns the fully qualified
3896 relative URL to the icon representing the mailbox, or the default
3897 mailbox icon if needed.
3899 * UI/SOGoUI/UIxComponent.m ([UIxComponent
3900 -urlForResourceFilename:filename]): automatically return an empty
3901 string whenever the filename passed as argument is nil.
3903 * UI/WebServerResources/MailerUI.js: open the mailboxes with the
3904 "desc" parameter set to 1 so that they are sorted in descending
3905 order by default. Also, added "onHeaderClick()", triggered by
3906 clicking on the message list header elements.
3908 * UI/MailerUI/UIxMailSortableTableHeader.m
3909 ([UIxMailSortableTableHeader -isSortedDescending]): same as below.
3911 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
3912 -isSortedDescending]): defaults to "YES" when the sort order is
3915 2006-07-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3917 * UI/WebServerResources/MailerUI.js:
3918 - message cache: set the max num of cached messages to 20. Limit
3919 the cached message size to 30000 bytes.
3920 - ajax: when a message request is called while one is already
3921 being performed, the latter will be cancelled. Idem when
3922 retrieving the content of a mailbox.
3923 - folder tree: when a mailbox is selected because of the URL
3924 requested (initMailboxSelection), the dtree is expanded throughout
3925 the mailbox entry's parent hierarchy to ensure it is made visible
3926 when the page is being displayed. (new function: expandUpperTree).
3927 - mailbox loading: when loading a mailbox where a message was
3928 previously selected, we invoke its url with the "pageforuid"
3929 parameter correctly specified. During callback processing, we scan
3930 the table for the related row and reselect it.
3931 Also, the message area is set blank before loading any mailbox.
3933 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
3934 -defaultAction]): if the "pageforuid" parameter is passed in the
3935 url, take its value and invoke [self firstMessageOfPageFor:]
3936 consequently to deduce the first message to display. Otherwise,
3937 set it to "idx", otherwise set it to 0.
3938 ([UIxMailListView -firstMessageOfPageFor:]): new method
3939 that determines the first message of the page where the message
3940 passed as parameter is contained.
3942 * UI/WebServerResources/UIxMailListView.js: removed this module,
3943 its code was put in MailerUI.js instead.
3945 2006-07-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3947 * UI/MailerUI/UIxMailFolderMenu.m: a descendent of UIxMailTree
3948 which returns the nodes for the parent specified in "parentMenu".
3949 Used to generate the javascript code for the folder dtree.
3951 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: the components
3952 using that container-template are now using UIxMailMainFrame
3953 since UIxMailPanelFrame had no real interest. File removed.
3955 * UI/WebServerResources/dtree.{css,js}: new files to handle
3956 javascript-generated mailbox tree. Modified from original version
3957 by integrating the previous code with the one we are using for
3958 selections and mailbox handling. Minor visual enhancements too...
3960 2006-07-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3962 * SoObjects/Mailer/SOGoUser+Mail.m: if only one identity is to be
3963 returned, put it in an NSArray before returning it (fixes
3966 2006-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3968 * UI/SOGoUI/NSString+URL.m ([NSString -hostlessURL]): new method
3969 that returns a url string stripped from its "http://hostname"
3972 * UI/SOGoUI/NSDictionary+URL.[hm]: moved from UI/Common.
3974 * UI/SOGoUI/NSString+URL.[hm]: moved from UI/Common.
3976 2006-07-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3978 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
3979 -mailDateFormatter]): retrieve the timezone from the user settings
3980 and pass it to the returned dateFormatter. Also, the dateFormatter
3981 is kept in a static variable to avoid useless
3982 creations/destructions.
3984 * UI/MailerUI/UIxMailFormatter.m ([UIxMailDateFormatter
3985 -setTimeZone:newTimeZone]): new accessor to specify the timezone.
3987 * UI/MailerUI/UIxMailFilterPanel.m ([UIxMailFilterPanel -setSearchCriteria:])
3988 ([UIxMailFilterPanel -searchCriteria]): new methods, similar to
3989 s/Criteria/Text/ to handle the "criteria" form parameter.
3991 2006-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3993 * UI/WebServerResources/uix.css: enhanced the toolbar appearance
3994 to integrate better with the firefox look&feel. Added entries for
3995 the new "menu" DIV class (popup menus).
3997 * UI/WebServerResources/generic.js: added "sanitizeMailTo" which
3998 takes any chunk of text as param, detects the user email and the
3999 optional first and last names and return them in a well-formatted
4000 way. Renamed "getSelection" to "getSelectedNodes" to avoid a
4001 namespace conflict. Added "onMenuClick(node, event, menuId)" to
4002 handle popup menus through "onclick" element attributes (node =
4003 this, event = event and menuId = name of the menu DIV id to
4006 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
4007 -snapshot]): add an entry for "email" into the snapshot
4008 dictionary if a "contactEmail" URL parameter was detected and if
4009 the entry for "email" is empty.
4011 * UI/Contacts/Toolbars/SOGoContactFolder.toolbar: the "new card"
4012 button now invokes the newContact() js function in ContactsUI.js
4013 instead of opening "new" directly. newContact() pops up a window
4014 stripped from its navigation bar.
4016 * UI/Contacts/ContactsUI.js: new module specific to the ContactsUI
4017 bundle (AddressBook).
4019 * UI/Templates/MailerUI/UIxMailView.wox: added a div of class
4020 "menu" and id "addressMenu" have the header email addresses
4021 display it with the new menu code in generic.js.
4023 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: same as below +
4024 replaced the body tables with a div of class "pageContent"
4025 (standardization across the page templates).
4027 * UI/Templates/MailerUI/UIxMailMainFrame.wox: include
4028 productJavaScriptURL and pageJavaScriptURL (conditionnally) since
4029 those are now inherited from UIxPageFrame.
4031 * UI/MailerUI/UIxMailView.js: new file specific to UIxMailView.
4033 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]): if
4034 a "mailto" URL parameter is detected and the "to" array is empty,
4035 initialize "to" with the value of "mailto" before returning it.
4037 * UI/MailerUI/UIxMailEditorAction.m ([UIxMailEditorAction
4038 -composeAction]): rewrote method in a cleaner way and with usage
4039 of the URL extensions to NSString and NSDictionary (see below).
4040 Also, if a "mailto" url parameter is detected, pass it to the
4043 * UI/MailerUI/UIxMailMainFrame.m: subclassed from UIxPageFrame to
4046 * UI/Common/NSDictionary+URL.m ([NSDictionary -asURLParameters]):
4047 returns a parameter string to add to a base URL.
4049 * UI/Common/NSString+URL.m ([NSString
4050 -composeURLWithAction:parameters:andHash:useHash]): new method to
4051 compose a complete URL from an object URL with parameters and an
4052 optional '#' character.
4054 * UI/Common/UIxPageFrame.h: separated interface from
4057 2006-07-07 Wsourdeau Sourdeau <wsourdeau@inverse.ca>
4059 * UI/Scheduler/UIxAppointmentEditor.m: returns yes to "isPopup";
4061 * UI/WebServerResources/generic.js: added code to manage
4062 selections within HTML containers.
4064 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productJavaScriptURL]):
4065 added method to determine the possible URL for a product-specific
4066 javascript filename of the forme <productname>.js.
4067 ([UIxPageFrame -hasProductSpecificJavaScript]): new method.
4068 ([UIxPageFrame -isPopup]): new method to determine whether the
4069 application navigator bar should be displayed (main page) or not
4072 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
4073 -LDAPCheckLogin:_loginpassword:_pwd]): new method to authenticate
4074 the user through LDAP.
4076 2006-07-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4078 * The toolbar code from the MailerUI product was taken, renamed as
4079 "UIxToolBar" and put into UI/Common. Toolbar plists were created
4080 for the Contacts and Scheduler products and put in their respectir
4081 Toolbars/ subdirectories. Finally,
4082 UI/Templates/{UIxToolbarButton,UIxToolbarSeparator}.wox, and
4083 UI/Common/{UIxToolbarButton,UIxToolbarSeparator}.m were removed
4084 and an invocation to the UIxToolbar component was put at the top
4085 of UI/Templaces/UIxPageFrame.wox.
4087 * UI/Common/UIxToolbar.m: new "isLastGroup" method to determine
4088 within the templates whether a separator should be displayed.
4090 * UI/Common/UIxToolbar.m ([UIxToolbar -hasButtons]): new method
4091 that returns NO if the toolbar is empty.
4093 2006-07-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4095 * UI/Templates/UIxPageFrame.wox: replaced central table with a DIV.
4097 * UI/Common/UIxToolbarSeparator.m, UI/Common/UIxToolbarButton.m:
4098 new toolbar objects.
4100 * UI/Templates/UIxPageFrame.wox: use the exact html code as below.
4102 * UI/Templates/MailerUI/UIxMailMainFrame.wox: redone the
4103 linkbanner as a DIV instead of a TABLE.
4105 * UI/MailerUI/UIxMailMainFrame.m [UIxMailMainFrame
4107 returns 'YES' to request the display of the navigation bar between
4110 2006-06-15 ludovic@inverse.ca
4112 * It's now possible to set the default
4113 domain using for email using the
4114 SOGoDefaultMailDomain preference key.
4116 2006-06-15 ludovic@inverse.ca
4118 * Initial import of SOGo from trunk.