1 2007-11-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
4 ([UIxMailPartHTMLViewer -_attachmentIds]): the reference was one
5 character too short, which cause the images not to be displayed
6 sometimes and crashes to happen whenever the references on a
7 message were wrong (due to bugs in SOPE).
9 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
10 -hasMessageAttachment]): consider an attachment any content that
11 has a non-nil disposition.
13 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
14 -newFolderWithName:nameandNameInContainer:newNameInContainer]):
15 fixed method to make use of the parameters instead of the useless
16 remains that weren't even initialized.
18 * SoObjects/Appointments/SOGoAppointmentObject.m
19 ([SOGoAppointmentObject -saveContentString:_iCalbaseSequence:_v]):
20 don't propagate the event among the attendees if this is not an
22 ([SOGoAppointmentObject -deleteWithBaseSequence:]): same as above.
24 * Main/SOGo.m ([SOGo -authenticatorInContext:context]): make use
25 of the new category method below.
27 * SoObjects/SOGo/WORequest+SOGo.m ([WORequest
28 -handledByDefaultHandler]): new method that returns whether this
29 is an "so" or alike request.
31 * SoObjects/SOGo/WORequest+SOGo.[hm]: new category module.
33 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
34 -newFolderWithName:nameandNameInContainer:newNameInContainer]):
35 write the new folder's name in the folder cache.
37 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
38 -calendars]): same as below.
40 * UI/Contacts/UIxContactsListViewContainer.m
41 ([UIxContactsListViewContainer -currentContactFolderName]):
42 translate the display name if its the default one.
44 * SoObjects/Appointments/SOGoAppointmentFolder.m
45 ([SOGoAppointmentFolder -create]): overriden method that invokes
46 its ancestor and then activate itself within the user settings.
48 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
49 -appendPersonalSources]): when the user is the owner of the
50 current folder, we create the "personal" folder if it doesn't
51 exist by invoking "create".
53 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
54 -primaryFetchProfile]): when no row is returned, we initialize
55 "values" to a new dictionary. This solves a bug where the defaults
56 would not be initialized properly.
58 2007-11-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
60 * SoObjects/SOGo/SOGoGCSFolder.m ([-compare:otherFolder]): method
61 moved into the SOGoFolder class.
63 * SoObjects/Appointments/SOGoAppointmentObject.m
64 ([SOGoAppointmentObject -saveContentString:_iCalinUIDs:_uids]):
65 simplified method by directly building a similar appointment
66 object with the current folder as container.
68 * SoObjects/Contacts/SOGoContactLDAPFolder.m
69 ([SOGoContactLDAPFolder
70 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
71 take the content of an object returned by
72 lookupName:inContext:acquire: instead of the dictionary passed as
73 parameter since it represents a flattened entry return by
74 lookupContactsWithFilter...
76 * SoObjects/Contacts/SOGoFolder+CardDAV.m: NSObject+CardDAV
77 category renamed to SOGoFolder+CardDAV.
79 * SoObjects/SOGo/SOGoParentFolder.m: no longer a subclass of
80 SOGoObject, but of SOGoFolder instead.
82 * SoObjects/SOGo/SOGoUserFolder.m: no longer a subclass of
83 SOGoGCSFolder, but of SOGoFolder instead.
85 * SoObjects/Appointments/SOGoAppointmentFolder.m
86 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): fixed
87 to take the new SOGoParentFolder class into account. Also, create
88 the personal folder if it doesn't exist.
90 * SoObjects/SOGo/SOGoFolder.[hm]: new class module implementing
91 the parent of all SOGo containers.
93 * SoObjects/SOGo/SOGoGCSFolder.[hm]: SOGoFolder class renamed to
96 2007-11-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
98 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection
99 -getAddressesFromFormValues:_dict]): take NSString and NSArray
100 values. Ignore addresses with a length of 0.
102 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -mailAccounts]): we now
103 fetch the accounts from the user defaults and create default
106 2007-11-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
108 * UI/MailPartViewers/UIxMailPartTextViewer.m
109 ([UIxMailPartTextViewer -flatContentAsString]): re-added
110 conversion of line-break to sequences of HTML "BR", with a fast
113 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
114 -flatContentAsString]): simplified method now that we know
115 -[NSString stringWithData:usingEncodingNamed:] has a more robust
118 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
119 -showToAddress]): the answer is cached.
121 * UI/Common/UIxObjectActions.m ([UIxObjectActions +initialize]):
122 read "SOGoACLsSendEMailNotifications" from the user defaults to
123 determiner whether to send an email when a user is added or
124 removed from an object's acl.
126 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
127 -contentForEditing]): make sure the htmlContent flag is set to NO
128 when we select the textual part. Also we select only the relevant
131 * UI/MailerUI/WOContext+UIxMailer.m ([-mailSubjectFormatter]):
134 * UI/MailerUI/UIxMailView.m ([UIxMailView -messageSubject]): new
135 method replacing -objectTitle, written like the ones below.
137 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
138 -messageSubject]): rewrote method to act the one below.
140 * UI/MailPartViewers/UIxMailPartMessageViewer.m
141 ([UIxMailPartMessageViewer -messageSubject]): new method that
142 returns the decoded mail subject or "Untitled" if the subject is
145 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
146 -decodedSubject]): new method that invoke -decodedSubject from the
147 NSString and NSData class, depending on the identity of the
148 subject obtained from the envelope.
150 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
151 -subjectForReply]): take the value of -[SOGoMail decodedSubject]
152 instead of the subject of the envelope.
153 ([SOGoMailObject -filenameForForward]): same as above.
154 ([SOGoMailObject -subjectForForward]): same as above.
156 * SoObjects/Mailer/NSString+Mail.m ([NSString -decodedSubject]):
157 same as below for NSString.
159 * SoObjects/Mailer/NSData+Mail.m ([NSData -decodedSubject]): new
160 method that decodes the subject of a mail taken as an NSData
161 instance. Handling the exceptions and the badly formatted headers.
163 * UI/MailerUI/UIxSubjectFormatter.[hm]: dropped class module.
165 2007-11-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
167 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
168 -deleteEntriesWithIds:ids]): make sure the objects returned by
169 lookupName:... are not instances of NSException.
171 2007-11-03 Ludovic Marcotte <ludovic@inverse.ca>
173 * UI/Scheduler/UIxAppointmentEditor.m
174 Fixed monthly recurrences support.
176 2007-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
178 * SoObjects/Appointments/SOGoAppointmentObject.m
179 ([SOGoAppointmentObject -deleteWithBaseSequence:]): an email was
180 sent when modifying an event, when the event was considered
181 relevant. The same thing is now implemented for event deletion.
183 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
184 -primaryFetchProfile]): make sure that the deserialized "values"
185 is an instance of NSMutableDictionary, otherwise we override it
188 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
189 -contentForReply]): make use of the SOGoMailReply WO page.
191 * SoObjects/Mailer/SOGoMailReply.[hm]: new class module copied
192 from SOGoMailForward to handle mail replies instead. Only three
193 methods remaining: date, from and messageBody. The latter is
196 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
197 -fetchMailForForwarding:sourceMail]): fetch attachments for
200 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
201 -hasMessageAttachment]): initialize hasAttachment with "NO" to
202 avoid false positives.
204 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event])
205 ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]):
206 set title to an empty string where the event/task summary is null.
208 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
209 -setHeaders:newHeaders]): make sure there is a message id in the
210 headers dictionary, if not, generate one.
211 ([SOGoDraftObject -fetchMailForEditing:sourceMail]): retrieve the
212 message id from the existing draft.
213 ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): store the
214 message id in the header map.
216 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
217 -deleteFolderAction]): no longer prefix the target folder with
220 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
221 -listMailboxesAction]): base the folder type on the folder
224 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
225 -lookupName:_keyinContext:acquire:_acquire]): compare the full
226 traversal to the potential looked up folder with the special
227 folder names and return an object with the appropriate
228 SOGoMailFolder subclass.
230 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
231 -traversalFromMailAccount]): don't prepend the whole string with
234 * SoObjects/Mailer/SOGoMailAccount.m
235 ([-lookupSentFolder:_keyinContext:_ctx])
236 ([-lookupDraftsFolder:_keyinContext:_ctx])
237 ([-lookupTrashFolder:_keyinContext:_ctx])
238 ([-lookupFiltersFolder:_key:_ctx]): removed methods.
239 ([SOGoMailAccount -inboxFolderNameInContext:])
240 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
241 ([SOGoMailAccount -sentFolderNameInContext:])
242 ([SOGoMailAccount -trashFolderNameInContext:]): no longer prefixes
243 the resulting name with "prefix" since we might return a nested
245 ([SOGoMailAccount -allFolderPaths]): prefixes all special folder
246 names with "/". Sorts the resulting folder list with
247 localizedCaseInsensitiveCompare: instead of
248 caseInsensitiveCompare:. No longer use the -[lookupXXX] methods
249 that were removed, instead, we choose the appropriate class
250 depending on the folder name. And since we are in SOGoMailAccount,
251 we don't have to compute a traversal path to match the key with
254 -folderWithTraversal:traversalandClassName:className]): new method
255 that returns an instance of the specified SOGoMailFolder subclass,
256 based on the traversal path passed as parameter.
257 ([SOGoMailAccount -inboxFolderInContext:_ctx])
258 ([SOGoMailAccount -draftsFolderInContext:_ctx])
259 ([-sentFolderInContext:_ctx])
260 ([SOGoMailAccount -trashFolderInContext:_ctx]): invoke the new
261 -folderWithTraversal:andClassName: method described above.
263 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
264 -primaryFetchProfile]): make use of -[NSPropertyListSerialization
265 propertyListFromData:mutabilityOption:format:errorDescription:] to
266 deserialize the plist. Removed variant for libFoundation since it
267 should support the above.
268 ([AgenorUserDefaults -generateSQLForInsert])
269 ([AgenorUserDefaults -generateSQLForUpdate]): make use of
270 -[NSPropertyListSerialization
271 dataFromPropertyList:format:errorDescription:] to serialize the
272 plist. Removed variant for libFoundation since it should support
273 the above. Escape the backslashes from the resulting string.
275 2007-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
277 * SoObjects/Mailer/SOGoMailFolder.[hm]: added a new subclass of
278 SOGoMailFolder: SOGoMailSpecialFolder.
280 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
281 -traversalFromMailAccount]): overridden method that returns the
282 initialized mutable string.
283 ([SOGoMailAccount -allFolderPaths]): take the special folder paths
284 with -traversalFromMailAccount and reposition them at the
285 beginning of the list. By creating the special folders during that
286 request, we also make sure that the folder exists thanks to the
287 new initialisation method of the new "SOGoSpecialMailFolder"
289 ([SOGoMailAccount -lookupSentFolder:_keyinContext:_ctx]): new
291 ([SOGoMailAccount -lookupTrashFolder:_keyinContext:_ctx]): new
293 ([SOGoMailAccount -lookupName:_keyinContext:acquire:_flag]): no
294 longer use lookupImap4Folder.
295 ([SOGoMailAccount -lookupImap4Folder:_keyinContext:_ctx]): removed
298 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
299 -traversalFromMailAccount]): new method that returns the full
300 IMAP4 path to the object.
302 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): retain
303 "superUsernames" after fetching it from the ud.
305 2007-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
307 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
308 -eventsListAction]): substitude the start and end date with their
309 UTC counterpart, taking into account the offset from UTC related
310 to those dates instead of the current one. This renders
311 -[UIxCalMainView -userUTCOffset] obsolete because the computings
312 that occured in javascript are now done server-side.
314 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView -userUTCOffset]):
315 removed obsolete method.
317 * SoObjects/Mailer/NSString+Mail.m ([NSString -htmlToText]): new
318 method converting html content to plain text.
320 * SoObjects/Mailer/NSString+Mail.[hm]: new category module
321 enhancing NSString with utility methods pertaining to mail handling.
323 * SoObjects/Mailer/SOGoMailObject.m
324 ([-shouldFetchPartOfType:_typesubtype:_subtype]): removed obsolete method.
326 -addRequiredKeysOfStructure:infopath:ptoArray:keysacceptedTypes:types]):
327 modified method to be always recursive and to take an array of the
328 accepted mime-types as parameter. The returned array now contains
329 the mime-type as well as the part keys.
331 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
332 -contentForEditingOnParts:_prtskeys:_k]): removed obsolete method.
333 ([SOGoMailObject -contentForEditing]): rewrote method to take into
334 account the first text/plain part or the first text/html part
335 converted to text/plain with our new -[NSString htmlToText]
338 * UI/MailerUI/UIxMailActions.m ([-replyToAllAction]): invoke
339 "replyToAll:" with YES as parameter instead of NO.
341 2007-10-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
343 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
344 -davContentType]): ignore any possible parameter taken from the
345 mime-info of the body part.
347 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
348 -lastFirstMessageNumber]): new accessor that returns the first
349 message number of the last series of messages.
350 ([UIxMailListView -fetchKeys]): request the bodystructure for each
352 ([UIxMailListView -hasMessageAttachment]): extract the attachment
353 information from the message bodystructure.
355 2007-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
357 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
358 -GETAction:]): use the "application/octet-stream" mime type for
359 elements of type "application/x-xpinstall" to avoid confusing
362 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -messageCheckList])
363 ([UIxPreferences -itemMessageCheckText])
364 ([UIxPreferences -userMessageCheck])
365 ([UIxPreferences -setUserMessageCheck:newMessageCheck]): new
366 methods for handling the retrieval of new messages automatically.
368 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -messageCheck]): new method
369 that returns the interval of time between automatic message
372 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
373 -defaultAction]): now expunges the last folder marked for expunge.
375 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
376 -trashInContext:_ctx]): now marks the container folder for
379 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
380 -markForExpunge]): new method that marks the folder for the next
381 automatic expunge operation in the user settings.
382 ([SOGoMailFolder -expungeLastMarkedFolder]): new methods that
383 takes the last folder marked for expunge, expunges it and removes
384 it from the user settings, if it exists.
386 2007-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
388 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
389 -messageSubjectCellStyleClass]): added support for replied,
390 forwarded, forwarded and replied mails.
392 * SoObjects/Mailer/NSData+Mail.m ([NSData
393 -bodyDataFromEncoding:encoding]): new utility method that decodes
394 the NSData instance properly depending on the encoding string
397 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
398 -fetchFileAttachmentKeys]): fetch the attachment encoding as well.
400 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
401 -stringForData:_datapartInfo:_info]): simplified by invoking
402 -bodyDataFromEncoding: from our new NSData category methods.
404 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
405 -fetchMailForEditing:sourceMail]): work-around a bug in SOPE-mime
406 where only the body part of the first of the keys fetched was
407 returned. Also decodes the body parts properly following their
410 * SoObjects/Mailer/NSData+Mail.[hm]: new extension module that
411 extends the NSData class with utility methods useful for handling
414 2007-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
416 * SoObjects/SOGo/NSArray+Utilities.m
417 ([NSArray -stringsWithFormat:format]): replace instances of NSNull
420 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
421 -keysWithFormat:keyFormat]): replace instances of NSNull with
424 * SoObjects/Contacts/SOGoContactLDAPFolder.m: if "displayName" is
425 empty, use "c_cn" instead.
427 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
428 ([SOGoMailAccount -draftsFolderInContext:_ctx])
429 ([SOGoMailAccount -sentFolderInContext:_ctx]): no longer make use
430 of the "SOGoSpecialFoldersInRoot" user defaults. The folders will
431 no always be specified from the root instead of sometimes from the
434 2007-10-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
436 * UI/Common/UIxPageFrame.m ([UIxPageFrame -commonLocalizableStrings])
437 ([UIxPageFrame -productLocalizableStrings]): invoke the new
438 +[SOGoUser language] method if the user is nil.
440 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +language]): new method
441 that returns any generically-found language.
442 ([SoUser -language]): modified to call the above.
443 ([SOGoUser -language]): modified to call the above if the user
444 language has a null length.
446 * SoObjects/Contacts/SOGoContactLDIFEntry.m ([SOGoContactLDIFEntry
447 -davEntityTag]): modified to return the "hash" of the vCard string.
449 * UI/MailerUI/UIxMailActions.m ([UIxMailActions
450 -removeAllLabelsAction]): new method that removes all label flags
451 from the associated message.
452 ([UIxMailActions -addLabel1Action]
453 [UIxMailActions -addLabel2Action]
454 [UIxMailActions -addLabel3Action
455 [UIxMailActions -addLabel4Action]
456 [UIxMailActions -addLabel5Action]): new methods that adds label
457 flags to the associated message.
458 ([UIxMailActions -removeLabel1Action]
459 [UIxMailActions -removeLabel2Action]
460 [UIxMailActions -removeLabel3Action
461 [UIxMailActions -removeLabel4Action]
462 [UIxMailActions -removeLabel5Action]): new methods that removes
463 label flags from the associated message.
465 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -msgLabels]):
466 new accessor that returns the labels associated with the message.
468 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
469 -allFolderPaths]): new method that returns all the paths of all
470 the subfolders of the folder object.
471 ([SOGoMailFolder -allFolderURLs]): new method replacing
474 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
475 -aclsForUser:uid]): object inherits the 'SOGoRole_ObjectEditor'
476 role from its parent folder.
478 2007-10-19 Francis Lachapelle <flachapelle@inverse.ca>
480 * SoObjects/SOGo/SOGoUser.m
481 ([SOGoUser -rolesForObject:objectinContext:context]): allow
482 multiple super usernames to be defined. The user default
483 SOGoSuperUsername is renamed SOGoSuperUsernames and must be
486 2007-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
488 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
489 -userInContext:]): override the super method by returning
490 anonymous if the super returns nil.
492 * UI/Common/UIxPageFrame.m ([UIxPageFrame
493 -productLocalizableStrings]): new method that returns the
494 product-specific translation dictionary as a JSON hash.
495 ([UIxPageFrame -commonLocalizableStrings]): same as above but for
496 the "Common" framework.
497 ([UIxPageFrame -setJsFiles:newJSFiles]): new setter that enables
498 the requestor components to require additional Javascript files.
499 This is useful now that all the scripts are loaded at the end of
501 ([UIxPageFrame -additionalJSFiles]): new getter related to the
504 2007-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
506 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -copyAction]):
507 implemented new web method.
509 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
510 -copyToFolderNamed:folderNameinContext:]): new method with the
511 code cut/pasted from -moveToFolderNamed:inContext:.
512 ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]):
513 modified to use the code from -copyToFolderNamed:inContext:, which
514 is common between the two actions.
516 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
517 ([SOGoMailAccount -sentFolderNameInContext:])
518 ([SOGoMailAccount -trashFolderNameInContext:]): modified to take
519 the user settings into account.
521 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -setAsDraftsFolderAction])
522 ([UIxMailFolderActions -setAsSentFolderAction])
523 ([UIxMailFolderActions -setAsTrashFolderAction]): new web methods
524 that change the purpose of the active folder to "Sent", "Drafts"
527 * UI/SOGoUI/SOGoACLAdvisory.m ([SOGoACLAdvisory -subject]):
528 returns the subject as quoted-printable.
530 * UI/SOGoUI/SOGoACLAdvisory.[hm]: added two intermediary classes:
531 SOGoACLAdditionAdvisory and SOGoACLRemovalAdvisory implementing
532 the "aclMethod" method for the subsequent language-dependent
535 * UI/SOGoUI/SOGoFolderAdvisory.m ([SOGoFolderAdvisory -subject]):
536 returns the subject as quoted-printable.
538 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
539 -dealloc]): release item, aptStartDate and aptEndDate.
541 2007-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
543 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
544 -initWithName:newNameinContainer:newContainer]): the owner of a
545 shared folder is set to "nobody" by default.
547 * UI/Common/UIxAclEditor.m ([UIxAclEditor -hasOwner]): new method
548 that returns whether the object has an owner or not.
550 2007-10-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
552 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
553 the folder even if the current user is not its owner.
555 2007-10-10 Ludovic Marcotte <ludovic@inverse.ca>
557 * We now send advisory emails when folders
558 are created / deleted.
560 * Fixed the sending of advisory emails upon
561 ACL changes on folders.
563 2007-10-10 Ludovic Marcotte <ludovic@inverse.ca>
565 * UI/Scheduler/UIxComponentEditor.m
566 Implemented event/task priority support.
568 * SoObjects/Contacts/SOGoContactGCSFolder.m
569 Added CardDAV support.
571 * SoObjects/SOGo/LDAPUserManager.m and SOGoUser.m
572 Implemented From: based on LDAP results based on
573 the MailFieldNames attribute (an array) specified
574 in every LDAP-based authentication sources.
576 * UI/MailPartViewers/UIxMailPartTextViewer.m and
577 UI/WebServerResources/MailerUI.css
578 We avoid replacing "\r\n" and "\n" with <br /> and
579 rather use CSS capabilities for proper formatting.
580 This is _WAY_ faster on very large mails.
582 2007-10-10 Francis Lachapelle <flachapelle@inverse.ca>
584 * UI/Scheduler/UIxComponentEditor.m
585 ([UIxComponentEditor -componentCalendar]): returns the calendar
586 object of the current event.
588 2007-10-05 Ludovic Marcotte <ludovic@inverse.ca>
590 * UI/WebServerResources/MailerUI.js
591 We check if at least one message is selected
592 before performing a Reply/Reply All/Forward
594 * SoObjects/Appointments/SOGoAppointmentFolder.m
595 and others - implemented support for recurring
596 events (with some known limitations right now,
597 all soon to be fixed).
599 2007-10-04 Francis Lachapelle <flachapelle@inverse.ca>
601 * Main/SOGo.m ([SOGo -isUserName:_keyinContext:_ctx]): removed
602 the constraint that a username can't start with a digit.
604 2007-10-02 Francis Lachapelle <flachapelle@inverse.ca>
606 * Moved SOPE/sope-gdl1/GDLContentStore from the default trunk
607 repository to Inverse's branch.
609 2007-09-28 Francis Lachapelle <flachapelle@inverse.ca>
611 * SoObjects/Mailer/SOGoDraftObject.m
612 ([SOGoDraftObject -isValidAttachmentName:_name]): removed
613 constraint on space in file name.
614 ([SOGoDraftObject -saveAttachment:_attachwithMetadata:metadata]):
615 now removes from file name all characters preceding a backslash.
616 This happens with IE7 because the complete attachment file path
619 2007-09-25 Francis Lachapelle <flachapelle@inverse.ca>
621 * SoObjects/Appointments/SOGoAptMailNotification.m
622 ([SOGoAptMailNotification -appointmentURL]): set personal as the
623 default calendar where to add the event.
625 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
626 activate the SOGoUIxDefaultModule user defaults.
628 2007-09-21 Francis Lachapelle <flachapelle@inverse.ca>
630 * UI/SOGoUI/UIxComponent.m
631 ([UIxComponent -shortUserNameForDisplay]): returns the string
632 "wrongusernamepassword" when authentication failed.
634 2007-09-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
636 * UI/MailPartViewers/UIxMailPartICalViewer.m
637 ([UIxMailPartICalViewer -calendarFolder]): returns the "personal"
638 entry of the Calendars parent folder.
640 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
641 -messageSubject]): new accessor method to work-around a problem
642 within SOPE where a subject could be returned as an NSData.
644 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
645 -appendPersonalSources]): make sure the value of the "c_path4" of
646 the returned rows are not NSNull, otherwise, discard them.
648 2007-09-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
650 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
651 -compare:otherFolder]): new overriden method that compares two
652 contact foldes based on their class and then transfer the control
653 to the super method in SOGoFolder.
655 * SoObjects/Contacts/SOGoContactLDAPFolder.m
656 ([SOGoContactLDAPFolder -compare:otherFolder]): new method that
657 compare two contact folders based on their class and then their
660 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -compare:otherFolder]):
661 new method for sorting folders. The folders are compared based on
662 their ownership, whether they are a main folder and finally
663 depending on their display name.
665 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
666 -pathArrayToSOGoObject]): do not reorder the paths if the third
667 element is an instance of NSNull.
669 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
670 -subFolders]): returns a sorted array using the "compare:"
673 2007-09-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
675 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
676 -calendars]): also returns the owner of the listed folders.
678 * SoObjects/Appointments/SOGoAppointmentFolder.m
679 ([-deleteEntriesWithIds:ids]): moved method into SOGoFolder.
681 * UI/Scheduler/UIxCalMainView.m ([-batchDeleteAction]): moved
682 method into UIxFolderActions.
684 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
685 -fetchFreeBusyInfosFrom:_startDateto:_endDate]): fetch the
686 freebusy info from the "personal" calendar.
688 * UI/Common/UIxParentFolderActions.m ([UIxParentFolderActions
689 -createFolderAction]): new standardized method for requesting
690 folder creations among gcs-based modules.
692 * UI/Common/UIxParentFolderActions.[hm]: new action class module.
694 * SoObjects/Appointments/SOGoAppointmentFolders.m: new class
695 module, equivalent to the SOGoParentFolder's child
696 SOGoContactFolders, but for calendars.
698 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -labelForKey:key]): new
699 method that returns translated strings for controller bundles
700 (same as what UIxComponent does for view bundles).
701 ([SOGoObject -pathArrayToSOGoObject]): new method that returns
702 the real path to a subscribed folder (if subscribed).
703 ([SOGoObject +globallyUniqueObjectId]): move method from SOGoFolder.
704 ([SOGoObject -globallyUniqueObjectId]): new instance method
705 calling its class equivalent.
707 2007-09-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
709 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage -defaultAction]): test
710 whether the user is logged in and if so, redirect to his/her
712 ([SOGoRootPage -appendToResponse:inContext:]): removed useless
715 2007-09-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
717 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
718 +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
720 ([SOGoFolder -displayName]): new method.
721 ([SOGoFolder -delete]): accept to proceed only if nameInContainer
724 * SoObjects/Contacts/SOGoContactLDAPFolder.m
725 ([SOGoContactLDAPFolder
726 +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
727 renamed from "contactFolderWithName..." for compatibility with SOGoFolder.
729 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
730 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
731 removed method, reimplemented in SOGoFolder.
732 ([SOGoContactGCSFolder -displayName]): removed method,
733 reimplemented in SOGoFolder.
734 ([-delete]): removed method, modified in SOGoFolder.
736 * SoObjects/Contacts/SOGoContactFolders.[hm]: modified class to be
737 a subclass of SOGoParentFolder.
739 * SoObjects/SOGo/SOGoParentFolder.[hm]: new class module derived
740 from SOGoContactFolders and modified to be more content-independent.
742 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -markMessageUnreadAction])
743 ([UIxMailActions -markMessageReadAction]): new methods moved from
744 UIxMailListView and adapted to invoke the client object directly,
745 since the previous versions had to to a lookup from the parent
748 * UI/MailerUI/UIxMailListView.m ([-markMessageUnreadAction]): move
749 method into UIxMailActions.
750 ([-markMessageReadAction]): same as above.
751 ([-viewAction]): removed useless method.
752 ([-javaScriptOK]): removed useless method.
753 ([-isJavaScriptRequest]): removed useless method.
754 ([-lookupActiveMessage]): removed useless method.
756 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
757 -responseWithStatus:status]): new method that returns a WOResponse
758 initialized with the specified status code.
759 ([WODirectAction -responseWith204]): new method that invokes the
760 above one with "204" as parameter.
761 ([WODirectAction -redirectToLocation:newLocation]): rewrote method
762 to make use of -responseWithStatus:.
764 * UI/SOGoUI/UIxComponent.m ([UIxComponent -responseWith204]): new
765 method that returns a WOResponse initialized with the 204 status
768 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sortedUIDs]):
769 always use a "not deleted" search qualifier along with the user
770 qualifier (if present).
772 2007-09-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
774 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
775 -contactSearchAction]): only return the records which have an
778 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
779 -trashInContext:_ctx]): no longer expunge the mailbox after
780 marking a message deleted.
781 ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]): same
784 * UI/MailerUI/UIxMailView.m ([-deleteAction]): removed method.
785 ([-trashAction]): moved method into UIxMailActions.
786 ([-moveAction]): moved method into UIxMailActions.
788 2007-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
790 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
791 ([_UIxHTMLMailContentHandler
792 -endElement:_localNamenamespace:_nsrawName:_rawName]): remove HTML
793 comments from the CSS code, do not add the CSS code to the body
794 content and remove references of body from the CSS declarations.
795 ([UIxMailPartHTMLViewer -cssContent]): new accessor method.
796 ([UIxMailPartHTMLViewer -flatContentAsString]): separated code
797 common with cssContent in a different method and invoke it only
800 * UI/MainUI/SOGoRootPage.[hm]: made a subclass of UIxComponent
801 instead of UIxPageFrame.
803 2007-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
805 * UI/MainUI/SOGoRootPage.m ([-defaultAction]): commented out.
806 ([-appendToResponse:responseinContext:ctx]): commented out.
807 ([SOGoRootPage -connectURL]): new accessor that returns the full
808 url the the "connect" method.
809 ([-connectAction]): rewrote method to return a properly formatted
810 auth. cookie based on the username and password passed as
813 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
814 set the value of the cookie to "discard" and set its expiration
817 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
818 -preprocessCredentialsInContext:context]): consider the user
819 anonymous if the cookie value is "discard".
820 ([SOGoWebAuthenticator
821 -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
822 set the expiration date of the cookie to yesterday.
824 * UI/SOGoUI/UIxComponent.m ([UIxComponent -applicationPath]):
825 returns the path to the application if the clientObject is not a
828 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder +initialize]):
829 moved the requirement of authentication from the SOGo application
832 * SoObjects/Appointments/SOGoAppointmentObject.m
833 ([SOGoAppointmentObject -saveContentString:_iCalbaseSequence:_v]):
834 check whether the new appointment object is still relevant before
835 sending a notification.
837 2007-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
839 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
840 -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
841 render the login page through the SoDefaultRenderer.
843 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage
844 -isPublicInContext:localContext]): new overriden method that
847 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
848 -currentCalendarLogin]): replace css-unsafe characters with _.
850 * UI/SOGoUI/UIxComponent.m ([UIxComponent
851 -shortUserNameForDisplay]): simplified method.
852 ([-user]): removed method since [context activeUser] is as useful.
854 2007-09-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
856 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
857 set the cookie path to "/".
859 * Main/SOGo.m ([SOGo -authenticatorInContext:_ctx]): choose the
860 authenticator based on the request handler key. "dav" returns the
861 SOGoDAVAuthenticator, anything else returns the Web authenticator.
863 * SoObjects/SOGo/SOGoDAVAuthenticator.m: renamed module from
866 * SoObjects/SOGo/SOGoWebAuthenticator.m: new class module
867 implementing a subclass of SoCookieAuthenticator, designed for
868 web-based cookie authentication of users.m
870 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
871 new method that resets the authentification cookie.
873 2007-08-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
875 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
876 -checkLogin:loginToCheckandPassword:passwordToCheck]): initialize
877 didBind to NO to make sure no false authentication is returned if
878 the bind operation is not executed.
880 2007-08-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
882 * SoObjects/Mailer/SOGoDraftObject.m: added support for the
883 "In-Reply-To" header field when replying.
885 * UI/MainUI/SOGoUserHomePage.m: add the "c_" prefix to the quick
886 table field names that are queried.
888 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
889 -iCalStringForFreeBusyInfos:_infosfrom:_startDateto:_endDate]):
890 add the "c_" prefix to the quick table field names that are
893 2007-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
895 * SoObjects/Appointments/SOGoAppointmentFolder.m
896 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): add
897 "personal" to the ocs path of the appointment folder.
899 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
900 -flatContentAsString]): use latin1 when the encoding is not
901 specified, and to reencode data chunk which were not correctly
902 decoded with the original charset.
904 * SoObjects/Appointments/SOGoAppointmentFolder.m ([SOGoAppointmentFolder -aclUsersForObjectAtPath:objectPathArray])
905 ([SOGoAppointmentFolder -aclsForUser:uidforObjectAtPath:objectPathArray])
906 ([SOGoAppointmentFolder -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray])
907 ([SOGoAppointmentFolder
908 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]):
909 override those methods to use the "personal" additional directory.
911 * SoObjects/SOGo/SOGoUserFolder.m ([-ocsPrivateCalendarPath]):
912 append "/personal" to the calendar path to simulate a single
913 calendar in a choice of many.
915 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
916 -lookupName:_keyinContext:acquire:_acquire]): moved the lookup
917 methods back here. Moved the folder existence check here, and do
918 it on self only when the lookup happens for a non-folder object.
919 This permits to accept entries for folders with parents who
922 2007-08-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
924 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
925 -shouldTakeValuesFromRequest:requestinContext:context]): same as
928 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
929 -shouldTakeValuesFromRequest:requestinContext:context]):
930 redesigned method since any method called can be received from a
931 POST or a GET. Instead we check the method call itself and we
932 accept only if it has the "save" prefix.
934 * SoObjects/Appointments/SOGoAptMailNotification.m
935 ([SOGoAptMailNotification -getSubject]): returns the subject an a
936 quoted-printable encoded string, if needed.
938 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
939 -asQPSubjectString:encoding]): moved method into
940 NSString+Utilities.m.
942 2007-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
944 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
945 -messageForwardingList])
946 ([UIxPreferences -itemMessageForwardingText])D
947 ([UIxPreferences -userMessageForwarding])
948 ([UIxPreferences -setUserMessageForwarding:newMessageForwarding]):
949 new template methods for manage the user preference regarding
952 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -language]): change the
953 algorithm to return, in order, the user's defined language or the
954 first browser language or, finally, the default language.
955 ([SOGoUser -messageForwarding]): new method that returns the user
956 preference for message forwarding: "inline" or "attached",
957 defaulting to "attached".
959 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
960 -contentForInlineForward]): new method that returns the content of
961 the message for inline forwarding based on the SOGoMailForward
964 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
965 -fetchMailForForwarding:sourceMail]): check the user preference
966 for message forwarding and compose inline forwarded messages if required.
968 * SoObjects/Appointments/SOGoCalendarComponent.m
969 ([SOGoCalendarComponent
970 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
971 now use a template based on the language returned from the
974 * SoObjects/Mailer/SOGoMailEnglishForward.m: new module containing
975 a subclass of SOGoMailForward for English locale.
977 * SoObjects/Mailer/SOGoMailFrenchForward.m: new module containing
978 a subclass of SOGoMailForward for French locale.
980 * SoObjects/Mailer/SOGoMailForward.[hm]: new module class that
981 helps build template for inline forwarded messages.
983 2007-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
985 * UI/SOGoElements/SOGoIEConditional.m: new extension module class
986 to handle "<var:if-ie>" template tags.
988 * UI/SOGoElements: new extension bundle containing sogo-specific
991 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
992 -takeValuesFromRequest:_rqinContext:_ctx]): save the category
993 selected in the dialog.
994 ([UIxComponentEditor -setComponent:newComponent]): retrieve the
995 first category, if ever, of the calendar entity.
997 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
998 -composeAction]): restored method since it is needed by the
1001 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1002 -composeAction]): the address fields should be arrays and not
1005 * UI/Common/UIxPageFrame.m ([UIxPageFrame -buildDate]): new method
1006 that returns the build date of SOGo in the template.
1008 2007-08-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1010 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1011 -_flattenedRecords:records]): when the c_cn field is empty,
1012 returns set a formatted string with the concatenation of
1013 c_givenname and c_sn as the displayName.
1015 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
1016 -isValidMailAccountName:_key]): prevent unknown accounts from
1019 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
1020 -pathToAttachmentObject]): we no longer need the filename
1021 extension for SoLookup...
1023 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
1024 -lookupName:_keyinContext:_ctxacquire:_flag]): do not require the
1025 filename to have an extension, and thus accept any filename.
1027 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1028 -currentCName]): new method that returns the c_name of the
1029 contact, correctly escaped to be passed by url afterwards.
1031 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
1032 ([UIxMailPartHTMLViewer -flatContentAsString]): pass the NSData
1033 instance of [self decodedFlatContent] instead of the buggy
1034 NSString from [super flatContentAsString] to the parser.
1036 2007-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1038 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -deleteAction]):
1039 new category method to reponds to the "delete" web command on
1041 ([UIxMailActions -deleteAttachmentAction]): new category method to
1042 reponds to the "deleteAttachment" web command on drafts, taking
1043 the "filename" url parameter into account.
1045 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1046 -contentForEditing]): new method that retrieve the editable mail
1048 ([SOGoMailObject -fetchFileAttachmentKeys]): new method that
1049 returns the body keys for attached files (parts with a "filename"
1052 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
1053 -asQPSubjectString:encoding]): do not change the string if the
1054 encoded string has the same length (which means it is already
1056 ([SOGoDraftObject -fetchMailForEditing:sourceMail]): new method
1057 that retrieve a draft along with its attachments for editing.
1058 ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): no longer
1059 choke if the "to" header field is empty.
1060 ([SOGoDraftObject -delete]): new method to delete the draft folder
1061 whenever operations are done.
1063 2007-08-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1065 * UI/MailerUI/UIxMailEditor.m ([-patchFlagsInStore]): removed
1066 useless stub method, of which the intention was implemented in
1068 ([-lookupSentFolderUsingAccount]): removed obsolete method.
1069 ([-selectedMailIdentity]): removed obsolete method.
1070 ([-lookupSentFolderUsingFrom]): removed obsolete method.
1071 ([-storeMailInSentFolder:_path]): removed obsolete method, of
1072 which the mechanism has been put in -[SOGoDraftObject sendMail]
1074 ([UIxMailEditor -_saveFormInfo], [UIxMailEditor -defaultAction])
1075 ([UIxMailEditor -saveAction], [UIxMailEditor -sendAction]):
1076 adapted algorithms to the new SOGoDraftObject methods.
1077 ([-deleteAction]): removed method since local draft objects cannot
1078 be removed by the user.
1080 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1081 -expungeAction]): new method replacing the one previously found in
1083 ([UIxMailFolderActions -createFolderAction])
1084 ([UIxMailFolderActions -renameFolderAction])
1085 ([UIxMailFolderActions -deleteFolderAction])
1086 ([UIxMailFolderActions -emptyTrashAction])
1087 ([UIxMailFolderActions -subscribeAction])
1088 ([UIxMailFolderActions -unsubscribeAction]): error situations
1089 should have http return code 500 instead of 403.
1091 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1092 -composeAction]): new method replacing the one previously in
1095 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1096 -imap4URLString]): removed overriden method (see below).
1098 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -aclUsers]):
1099 cache the mailbox acl.
1100 ([SOGoMailFolder -aclsForUser:uid]): cache the mailbox acl.
1101 ([SOGoMailFolder -setRoles:rolesforUser:uid]): reset the mailbox
1103 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): modified to use
1104 the new method of determining the users mail accounts.
1106 * SoObjects/Mailer/SOGoMailBaseObject.m ([-imap4URLString]): no
1107 longer adds a "/" at the end of the string (the default for
1108 folders), therefore this will be overriden in SOGoMailFolder
1109 rather than in SOGoMailObject.
1111 * UI/MailerUI/UIxMailListView.m ([-expungeAction]): removed
1112 method, moved into the new UIxMailActions module class.
1114 * SoObjects/Mailer/SOGoDraftsFolder.m ([SOGoDraftsFolder
1115 -newDraft]): new method that returns a new SOGoDraftObject
1116 instance with a unique filename based on the current timestamp and
1117 the "newDraft" prefix.
1119 -lookupName:nameinContext:localContextacquire:acquire]): overriden
1120 method by detecting local drafts with their "newDraft" prefix.
1121 ([SOGoDraftsFolder -isInDraftsFolder]): returns YES.
1123 * SoObjects/Mailer/SOGoDraftsFolder.[hm]: rewrote class module
1124 from scratch by making it a subclass of SOGoMailFolder.
1126 * UI/MailerUI/UIxMailReplyAction.m: removed obsolete class
1129 * UI/MailerUI/UIxMailForwardAction.m: removed obsolete class
1132 * UI/MailerUI/UIxMailEditorAction.[hm]: removed obsolete class
1135 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -init]):
1136 new method, initializing the new ivars: IMAP4ID, headers, text,
1137 sourceURL and sourceFlag.
1138 ([-spoolFileManager], [SOGoDraftObject -userSpoolFolderPath])
1139 ([-_ensureUserSpoolFolderPath])
1140 ([-saveMimeMessageToTemporaryFileWithHeaders:])
1141 ([SOGoDraftObject -mimeMessageWithHeaders:_headers])
1142 ([-deleteTemporaryMessageFile:], [-delete], [-content])
1143 ([-GETAction:_ctx], [-DELETEAction:_ctx], [-fetchParts:])
1144 ([-uid], [-flags], [-size], [-envelope]): removed methods.
1145 ([SOGoDraftObject -storeInfo]): rewrote method to take the new
1147 ([SOGoDraftObject -setSourceURL:newSourceURL])
1148 ([SOGoDraftObject -setSourceFlag:newSourceFlag]): new accessor
1149 methods to store the url of the original message between accesses
1150 so that, depending on the action taken (forward or reply), the
1151 correct flag can be given.
1152 ([SOGoDraftObject -setIMAP4ID:]): new accessor method that sets
1153 the imap4 id that is returned for the message whenever it is saved
1154 into the drafts folder.
1155 ([SOGoDraftObject -save]): new method that takes in charge the
1156 saving of the message in the IMAP drafts folder.
1157 ([SOGoDraftObject -fetchMailForReplying:sourceMailtoAll:toAll]):
1158 new method that fills the original data of the new message with
1159 the reply content of the original message.
1160 ([SOGoDraftObject -fetchMailForForwarding:sourceMail]): same as
1161 above for message forwarding.
1162 ([-spoolFileManager]): removed useless method (only returned the
1163 default filemanager...)
1164 ([SOGoDraftObject -mimeMessageAsData]): new method that returns
1165 the resulting message as an NSData chunk.
1167 * SoObjects/Mailer/SOGoMailObject+Draft.m: new extension module
1168 containing a rewrite of the mail action methods found in
1169 UI/Mailer/, that needed to be put in the SOGoMailObject class.
1170 ([SOGoMailObject -subjectForReply]): new method that returns a
1171 subject suitable for replies.
1172 ([SOGoMailObject -contentForReply]): new method that returns the
1173 textual content of an email, quoted for replying.
1174 ([SOGoMailObject -filenameForForward]): new method that returns
1175 the name of the filename that should contain the forwarded
1176 message, based on its subject.
1177 ([SOGoMailObject -subjectForForward]): explicit.
1179 2007-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1181 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1182 -mailAccounts]): rewrote method to return the name of the mail
1183 accounts now available with the -[SOGoUser mailAccounts] method.
1184 ([UIxMailMainFrame -showLinkBanner]): removed method.
1185 ([UIxMailMainFrame -bannerToolbarStyle]): removed method.
1186 ([UIxMailMainFrame -bannerConsumeStyle]): removed method.
1187 ([UIxMailMainFrame -rootURL]): removed method.
1188 ([UIxMailMainFrame -userRootURL]): removed method.
1189 ([UIxMailMainFrame -calendarRootURL]): removed method.
1190 ([UIxMailMainFrame -contactsRootURL]): removed method.
1191 ([UIxMailMainFrame -hasErrorText])
1192 ([UIxMailMainFrame -errorText])
1193 ([UIxMailMainFrame -errorAlertJavaScript]): removed methods.
1194 ([-composeAction]): removed method. Now provided by
1195 UIxMailAccountActions.
1196 ([UIxMailMainFrame -setHideFolderTree:_flag]): removed method.
1197 ([UIxMailMainFrame -hideFolderTree]): removed method.
1198 ([UIxMailMainFrame -treeRootClassName]): removed method.
1199 ([UIxMailMainFrame +initialize]): removed method.
1200 SOGoMailTreeRootClass userdefaults will no longer have any effect.
1202 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
1203 -redirectToLocation:newLocation]): new method that implements the
1204 same functionality as WOComponent.
1206 * UI/Common/WODirectAction+SOGo.[hm]: new class extension module.
1208 * UI/MailerUI/UIxMailView.m ([UIxMailView -mailIsDraft]): new
1209 method that returns whether the current mail is store in the
1210 drafts folder hierarchy.
1212 * SoObjects/SOGo/SOGoUser.m ([-fullEmail]): removed method.
1213 ([-primaryEmail]): removed method.
1214 ([SOGoUser -primaryIMAP4AccountString]): removed method.
1215 ([SOGoUser -mailAccounts]): new method that returns an array
1216 containing description dictionaries for all the user mail
1217 accounts. Each account also contain the user's identities for that
1219 ([SOGoUser -allIdentities]): new utility method that returns all
1220 the user identities on all accounts.
1221 ([SOGoUser -primaryIdentity]): new method return the first
1222 identity of the first account.
1224 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]):
1226 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1227 -isInDraftsFolder]): returns NO.
1228 ([-preferredIdentity]): removed method, replaced with -[SOGoUser
1230 ([SOGoMailAccount -draftsFolderInContext:_ctx]): new method.
1232 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1233 -isInDraftsFolder]): new method that detects if self is contained
1234 by the drafts folder by calling itself on the container object.
1236 * SoObjects/Mailer/SOGoMailAccounts.m ([-fetchAllIdentities]):
1238 ([-fetchIdentitiesWithEmitterPermissions]): removed method.
1239 ([SOGoMailAccounts -toManyRelationshipKeys]): rewrote method to
1240 return the name of the mail accounts now available with the
1241 -[SOGoUser mailAccounts] method.
1243 * SoObjects/Mailer/SOGoUser+Mail.[hm]: removed useless class
1246 * SoObjects/Mailer/SOGoMailIdentity.[hm]: removed useless class
1249 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
1250 -keysWithFormat:format]): method that forward the method of the
1251 same name to each member of the array, considering they all are
1252 instances of NSDictionary.
1253 ([NSArray -objectsForKey:key]): same principle as above.
1254 ([NSArray -flattenedArray]): new method that transforms an array
1255 of arrays into a single array containing all the elements of the
1258 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
1259 -keysWithFormat:keyFormat]): new method inspired by the python
1260 string formatting system and which replaces occurences of "%{key}"
1261 by the corresponding keys.
1263 2007-08-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1265 * Main/SOGo.m ([SOGo -run]): check for channel-type specific
1266 sql script before the generic one when initializing mandatory
1269 2007-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1271 * SoObjects/SOGo/NSString+Utilities.m ([NSString
1272 -pureEMailAddress]): new utility method inspired by the
1273 "_rawSender" private method in SOGoDraftObject, which it now
1276 * SoObjects/SOGo/SOGoMailer.m: new abstraction class module that
1277 provides a common API for sending emails, no matter what the
1280 2007-08-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1282 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1283 -quotasAction]): invoke "relativeImap4Name" instead of
1284 "nameInContainer" since the latter also returns the "folder"
1287 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1288 -listMailboxesAction]): declare the output as text/plain in UTF-8.
1290 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1291 -deleteFolderAction]): fixed the url of the destination folder.
1293 * Main/SOGo.m ([SOGo +initialize]): show the build date and
1294 hostname at startup.
1296 2007-08-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1298 * SoObjects/Appointments/SOGoCalendarComponent.m
1299 ([SOGoCalendarComponent
1300 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
1301 set the mail date to the current date string returned by our
1302 rfc822DateString extension method.
1304 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1305 -_gcsFoldersFromFolder:): ignore the personal folders who are
1306 returned but don't really exist.
1308 2007-08-02 Francis Lachapelle <flachapelle@inverse.ca>
1310 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView _responseForResults:]):
1311 has to return only one element.
1313 2007-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1315 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
1316 -content]): new method returning the decoded content of the
1317 corresponding attachment as an NSData instance.
1318 ([UIxMailPartViewer -filename]): if the "filename" parameter of
1319 the metadata parameterList is empty, try to find out the filename
1320 from the "disposition" metadata returned with the BODYSTRUCTURE
1323 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1324 -composeAction]): prefix the INBOX folder with "folder".
1326 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailBaseObject
1327 -relativeImap4Name]): return nameInContainer stripped from its
1328 first 6 characters since all folder names are prefixed with
1331 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1332 -imap4URLString]): invoke -relativeImap4Name instead of
1333 "nameInContainer" since the former will return the fixed IMAP4
1334 foldername and the latter the SoObject name.
1336 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1337 +initialize]): we now fetch the "BODYSTRUCTURE" key instead of "BODY".
1339 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderNameInContext:])
1340 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
1341 ([SOGoMailAccount -sieveFolderNameInContext:_ctx])
1342 ([SOGoMailAccount -sentFolderNameInContext:])
1343 ([SOGoMailAccount -trashFolderNameInContext:]): prefix the folder
1344 names with "folder".
1345 ([SOGoMailAccount -inboxFolderInContext:_ctx])
1346 ([SOGoMailAccount -sentFolderInContext:_ctx])
1347 ([SOGoMailAccount -trashFolderInContext:_ctx]): no longer prefix
1348 the folder names with "folder" since they are prefixed earlier.
1350 2007-07-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1352 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
1353 ([-sentFolderInContext:], [-trashFolderInContext:]): folder keys
1354 all starts with "folder".
1356 * SoObjects/SOGo/SOGoObject.m ([SOGoObject +initialize]): no
1357 longer declare security info from here.
1359 * SoObjects/Mailer/SOGoMailFolder.m
1360 ([-isMessageKey:_keyinContext:_ctx]): removed useless method.
1361 ([SOGoMailFolder -lookupName:_keyinContext:acquire:_acquire]):
1362 folder names now always start with "folder".
1364 * SoObjects/Mailer/SOGoMailAccount.m
1365 ([-lookupName:inContext:acquire:]): folder names now always start
1368 2007-07-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1370 * UI/MailerUI/UIxMailForwardAction.m ([UIxMailForwardAction
1371 -forwardAction]): adapted to the new saveAttachment:withMetadata:
1374 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -saveAction]): added
1375 code to save the attached filenames with the filename returned by
1376 the web server as well as their mime types.
1378 * UI/MailPartViewers/UIxMailPartMessageViewer.m ([UIxMailPartMessageViewer -fromAddresses])
1379 ([UIxMailPartMessageViewer -toAddresses])
1380 ([UIxMailPartMessageViewer -ccAddresses]): new methods returning
1381 the corresponding fields separated with a ", " (if needed).
1383 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1384 -saveAttachment:_attachwithMetadata:metadata]): new method
1385 replacing -saveAttachment:withName: and which takes a dictionary
1386 as parameter with the filename and the mime type of the
1388 The mimetype is then saved in a hidden text file.
1389 ([SOGoDraftObject -contentTypeForAttachmentWithName:]): if exists,
1390 take the mime type from the hidden text file related to the
1393 * SoObjects/Contacts/SOGoContactGCSFolder.m ()
1394 ([SOGoContactGCSFolder
1395 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
1396 return records if the db records are > 0 and not just > 1...
1398 2007-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1400 * UI/Contacts/UIxContactsListView.m ([-displayName]): removed
1402 ([UIxContactsListView -defaultSortKey]): changed to "displayName".
1404 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1405 ([SOGoContactLDAPFolder
1406 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
1407 translate the returned records to a normalized form.
1409 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1410 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
1411 translate the returned records to a normalized form.
1413 * UI/Scheduler/UIxCalListingActions.m,
1414 UI/Contacts/UIxContactsListView.m, SoObjects/SOGo/SOGoUser.m,
1415 SoObjects/SOGo/AgenorUserDefaults.m,
1416 SoObjects/Contacts/SOGoContactGCSFolder.m,
1417 SoObjects/Appointments/SOGoAppointmentFolder.m,
1418 OGoContentStore/OCSiCalFieldExtractor.m,
1419 OGoContentStore/OCSContactFieldExtractor.m: prefixed all quick
1420 table fields with "c_".
1422 2007-07-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1424 * SoObjects/SOGo/LDAPSource.m ([LDAPSource +initialize]): query
1425 the values for SOGoLDAPQueryLimit and SOGoLDAPQueryTimeout from
1426 the application settings. If set, both limit will influence the
1427 maximum size of the resultsets and the time taken to solve them.
1428 ([LDAPSource -_initLDAPConnection]): initialize the limits.
1430 2007-07-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1432 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder -davNamespaces]): added new overriden
1433 method that declares the DAV namespace related to CardDAV.
1434 ([SOGoContactGCSFolder -davComplianceClassesInContext:]): new
1435 method that declares the "access-control" and "addressbook-access"
1436 classes to the list.
1438 * SoObjects/Appointments/SOGoAppointmentFolder.m
1439 ([-lookupActionForCalDAVMethod:]): removed method.
1440 ([SOGoAppointmentFolder -davNamespaces]): added new overriden
1441 method that declares the DAV namespace related to CalDAV.
1443 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davNamespaces]): new
1444 optional method for subclasses which handle specific extensions to
1445 the DAV protocol: CardDAV or CalDAV.
1447 -lookupName:lookupNameinContext:localContextacquire:acquire]):
1448 new overriden method that handles dav invocations for extensions
1449 to DAV by returning an appropriate SoSelectorInvocation.
1451 * SoObjects/SOGo/NSString+Utilities.m ([NSString
1452 -asDavInvocation]): new method returning a dictionary with a "ns"
1453 key representing the dav namespace and a "method" key representing
1454 the dav method name of the request.
1456 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
1457 +initialize]): scan the value of SOGoUIxUserCanChangePassword.
1459 ([UIxPreferences -shouldDisplayPasswordChange]): new template
1460 method that returns the value of SOGoUIxUserCanChangePassword.
1462 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
1463 scan the value of SOGoUIxDefaultModule. If not set, the default
1464 module defaults to "Calendar".
1465 ([SOGoUserHomePage -defaultAction]): redirect the user to the
1466 value of "SOGoUIxDefaultModule".
1468 2007-07-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1470 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1471 -contactInfos]): cache the results to avoid multiple invocations.
1473 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1474 ([SOGoContactLDAPFolder -toOneRelationshipKeys]): check whether we
1475 really should return something or if we fake to return nil...
1477 2007-07-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1479 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): set
1480 acceptAnyUser to YES only when the SOGoAuthentificationMethod user
1481 default is set to "bypass".
1483 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
1484 -checkLogin:_loginpassword:_pwd]): accepts unverified connections
1485 when authMethod is set to "bypass" from now on. This would avoid a
1486 security concern with a default installation of SOGo.
1487 AuthentificationMethod is now prefixed with "SOGo" for better
1490 2007-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1492 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1493 -quotasAction]): new method that returns a json representation of
1496 2007-07-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1498 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1499 -imap4URL]): rewrote method to support accented mailbox names.
1500 ([SOGoMailBaseObject imap4Password]): rewrote to simply use
1501 SOGoAuthenticator's passwordInContext:.
1503 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
1504 -takeValuesFromRequest:_rqinContext:_ctx]): explicitly set the
1505 start and due dates to nil if hasStartDate and hasDueDate are
1508 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
1509 -passwordInContext:context]): made method public.
1511 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
1512 -extractQuickFieldsFromTodo:_task]): set "isallday" and "isopaque"
1513 to false to avoid a null violation.
1515 2007-07-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1517 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1518 -contentAsString]): returns the message encoded in ISO Latin 1
1521 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): read the
1522 SOGoSuperUsername user defaults.
1523 ([SOGoUser -initWithLogin:newLoginroles:newRoles]): simplified
1525 ([SOGoUser -rolesForObject:objectinContext:context]): if the
1526 current user is the superuser, grant him/her the "owner" role.
1528 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
1529 the folder only if the current user is the owner of the future
1532 * SoObjects/Appointments/SOGoCalendarComponent.m
1533 ([SOGoCalendarComponent -contentAsString]): we return the content
1534 based on the permissions returned by the security manager instead
1535 of by looking at the user roles.
1537 * SoObjects/Appointments/SOGoAppointmentFolder.m
1538 ([SOGoAppointmentFolder -calendarFolders]): read the calendar
1539 folders of the user to whom this folder belongs instead of the
1540 active user. This way, a delegate user will be able to have the
1541 same view that the original user has if he connects from his user
1544 * Main/SOGo.m ([SOGo -lookupUser:_keyinContext:]): check if the
1545 user exists before creating the SOGoUserFolder instance. If not,
1548 * UI/MailerUI/UIxMailSourceView.[hm]: new class module designed to
1549 return the message source code in plain text.
1551 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1552 -contentAsString]): returns the message encoded in UTF8.
1554 2007-07-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1556 * OGoContentStore/iCalRepeatableEntityObject+OCS.m
1557 ([iCalRepeatableEntityObject -cycleInfo]): no longer take the
1558 leading tagname into account when serializing the element values.
1560 * Main/SOGoProductLoader.m: only load bundle directories ending
1561 with the "SOGo" extension.
1563 * Main/SOGo.m ([SOGo
1564 -_checkTableWithCM:cmtableURL:urlandType:tableType]): empty the
1565 result set if the query has caused no exception. Otherwise we get
1566 an "evaluation is in progress exception".
1568 2007-06-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1570 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
1571 -generateSQLForInsert]): initialize error to nil before the
1572 serialization. Otherwise the method can get confused if it ever is
1573 initialized to something else.
1575 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
1576 -folderIsMandatory]): returns NO unconditionnally.
1578 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
1579 -appendPersonalSources]): add the "personal" folder to the list of
1580 user folders even if it doesn't exist, so that it is created when
1581 the user accesses it.
1583 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1584 -folderIsMandatory]): returns YES if nameInContainer is set to
1585 "personal", which is the default address book.
1587 * SoObjects/Appointments/SOGoAppointmentFolder.m
1588 ([SOGoAppointmentFolder -folderIsMandatory]): returns YES since
1589 users must have one Calendar folder (one and only one).
1590 ([SOGoAppointmentFolder -_privacySqlString]): unescape the
1591 escaping '\' so make the carriage return a real one. This way,
1592 PgSQL 8 won't complain about escaping the string.
1594 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): new
1595 method that create the folder if considered mandatory.
1596 ([SOGoFolder -folderIsMandatory]): new method that determines
1597 whether the folder should be created automatically or not. To be
1598 overriden by subclasses.
1600 * Main/SOGo.m ([SOGo -run]): override method and create the
1601 missing system tables if needed.
1603 2007-06-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1605 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
1606 -mailDateFormatter]): returns the user's date formatter.
1608 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject -date]):
1609 applies the user timezone to the date object before returning it.
1611 * UI/Common/UIxSortButton.m: removed useless class module.
1613 * UI/Common/UIxSortableTableHeader.m: removed useless class
1616 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1617 -contactInfos]): use the "asc" url parameter instead of "desc" to
1618 determine the ordering.
1619 ([-sortOrdering]): removed method.
1620 ([UIxContactsListView -init]): removed the "searchText" ivar.
1621 (general): the template no longer use the UIxSortableTableHeader
1624 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1625 -defaultSortKey]): default sort following the messages arrival
1626 instead of their date.
1627 ([-isSortedDescending]): removed method.
1628 ([-imap4SortOrdering]): use the "asc" url parameter instead of
1629 "desc" to determine the ordering.
1630 (general): the template no longer use the UIxSortableTableHeader
1633 2007-06-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1635 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sleep]):
1637 ([-setQualifier:_msg], [-qualifier]): removed methods.
1638 ([UIxMailListView -defaultAction]): added code to handle the
1639 search criteria and value passed as url parameters. Also, we now
1640 handle the same search criterias as Thunderbird/Icedove.
1642 2007-06-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1644 * UI/PreferencesUI/UIxJSONPreferences.m ([UIxJSONPreferences
1645 -jsonDefaultsAction]): bug fix: returns a WOResponse instance with
1646 the string instead of the string itself.
1647 ([UIxJSONPreferences -jsonSettingsAction]): same as above.
1649 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): new module
1650 bool var "acceptAnyUser" that is set when the AuthenticationMethod
1651 user default is nil.
1652 ([SOGoUser -initWithLogin:newLoginroles:newRoles]):
1653 unconditionnally returns an instance whenever acceptAnyUser is set.
1655 2007-06-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1657 * Main/sogod.m (main): prevent SOGo from running as root.
1659 2007-06-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1661 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
1662 -setCurrentPassword:newPassword]): new stub method.
1663 ([SOGoUser -dateFormatterInContext:context]): new method that
1664 returns an instance of SOGoDateFormatter configured based on the
1667 * UI/Common/UIxPageFrame.m ([UIxPageFrame
1668 -relativePreferencesPath]): new method.
1670 * UI/Scheduler/UIxComponentEditor.m ([-titleDateFormatter]):
1671 removed useless method.
1673 * SoObjects/SOGo/SOGoDateFormatter.m: rewrote class to accept
1674 different configurable formats (long and short date + time).
1676 * SoObjects/SOGo/SOGoDateFormatter.[hm]: moved from UI/SOGoUI/.
1678 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
1679 -isInternetRequest]): removed method.
1681 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
1682 -jsonRepresentation]): new method with an explicit name.
1684 * UI/PreferencesUI/product.plist: new bundle that provides a web
1685 ui for handling user defaults.
1687 * UI/Scheduler/UIxTaskView.[hm]: removed unused module.
1689 * UI/Scheduler/UIxAppointmentView.[hm]: removed unused module.
1691 * SoObjects/SOGo/WOContext+Agenor.[hm]: removed unused module.
1693 2007-06-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1695 * SoObjects/SOGo/SOGoLRUCache.m: removed unused module.
1697 2007-06-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1699 * UI/Scheduler/NSArray+Scheduler.m ([NSArray
1700 -compareEventsAscending:otherEvent]): no longer use compare: on
1701 the time objects since one of them could be an NSNull, which
1702 crashes when comparing with anything.
1704 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1705 -eventsListAction]): sort events from here.
1706 ([UIxCalListingActions -tasksListAction]): sort tasks from here.
1708 * SoObjects/SOGo/NSObject+AptComparison.[hm]: removed category
1709 module, replaced with NSArray+Scheduler in UI/SchedulerUI/.
1711 * SoObjects/Appointments/SOGoAppointmentFolder.m
1712 ([SOGoAppointmentFolder
1713 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]):
1714 no longer sort elements from here.
1716 2007-06-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1718 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1719 -aclsForUser:uid]): implemented method by forwarding the request
1720 to the container. This fixes a bug where users could no longer
1721 read emails from shared folders.
1723 * SoObjects/Appointments/SOGoCalendarComponent.m
1724 ([SOGoCalendarComponent -init]): "isNew" is no longer defined
1725 here, but rather in its parent class.
1727 * UI/SOGoUI/SOGoDateFormatter.m ([SOGoDateFormatter
1728 -stringForSecondsSinceThe70s:seconds]): new utility method.
1730 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1731 -eventsListAction]): no longer reduce the end day of one day for
1732 all day events since everything has been fixed in
1733 OCSiCalFieldExtractor.
1735 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
1736 -extractQuickFieldsFromEvent:_event]): reduce the seconds/70 of
1737 the end date of all day events of 1 so that they stay on their
1740 2007-06-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1742 * UI/Scheduler/UIxCalMonthView.m: no longer retrieve appointments.
1744 * UI/Scheduler/UIxCalView.m ([-fetchCoreAppointmentsInfos]):
1746 ([-fetchCoreTasksInfos]): removed method.
1748 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1749 -init]): initialize an instance of SOGoDateFormatter.
1750 ([UIxCalListingActions -eventsListAction]): the display start and
1751 end dates are added to the listing for each event.
1753 * UI/Scheduler/UIxCalDayTable.m: no longer retrieve appointments.
1755 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1756 -isAllDay]): returns YES if the "hm" url parameter is set to
1758 ([UIxAppointmentEditor -defaultAction]): if isAllDay, the enddate
1759 is displayed one day earlier.
1761 2007-06-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1763 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1764 -_setupContext]): take the range of dates specified by the popup
1767 * UI/Scheduler/UIxCalListingActions.[hm]: new subclass of
1768 WODirectAction that returns WOResponse objects with the events or
1769 todos satisfying the parameters passed in the url.
1771 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1772 -takeValuesFromRequest:_rqinContext:_ctx]): take the new ivar
1773 "isAllDay" into account and compute the amount of days to pass to
1776 2007-06-06 Francis Lachapelle <flachapelle@inverse.ca>
1778 * SoObjects/SOGo/NSNumber+Utilities.m: initial import.
1779 * SoObjects/SOGo/NSNull+Utilities.m: initial import.
1780 * UI/Scheduler/UIxCalTasksListView.m ([WOResponse -tasksListAction]):
1781 new method that returns a json-formatted array of the visible tasks
1782 for the current user.
1784 2007-06-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1786 * SoObjects/Appointments/SOGoAppointmentObject.m: the owner of the
1787 object must be present in the list of UIDs we delete the object
1788 from. Otherwise Calendar objects having no organizer and no
1789 attendees will remain in their owner's Calendar.
1791 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1792 -_urlPreferringParticle:expectedoverThisOne:possible]): remove the
1793 first 3 elements of the path array if the url returned by
1794 baseURLInContext: returns a hostname.
1796 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1797 -_adjustOwner]): sharedFolderName and otherUsersFolderName may be
1798 nil, in which case a crash happens when calling hasPrefix:.
1799 ([SOGoMailFolder -_sharesACLs]): same as above.
1800 ([SOGoMailFolder -otherUsersPathToFolder]): same as above. If
1801 otherUsersFolderName is nil, we return nil.
1802 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): if we receive
1803 nil from [self otherUsersPathToFolder], we return nil too.
1805 2007-06-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1807 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1808 -_urlPreferringParticle:expectedoverThisOne:possible]): unescape
1809 the result of [self baseURLInContext:] to avoid a double escaping
1810 in the resulting string.
1812 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -aclsForUser:uid]): if
1813 the user has the "ObjectReader" role on the parent container, then
1814 he is granted the "ObjectViewer" role on this object. Same for
1815 "ObjectEraser", although this might change later.
1817 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1818 -toolbar]): determine the toolbar filename based on the
1819 permissions declared by the securitymanager. The role mechanism
1820 has been adjusted on a lowerlevel so we can simplify the code.
1822 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
1823 -initWithName:newNameinContainer:newContainer]): read the content
1824 directly from here. That way we can determine whether the object
1826 ([SOGoContentObject -aclsForUser:uid]): if the object is new and
1827 the ObjectCreator role is enabled, we also grant the ObjectEditor
1828 role to the current user.
1830 * UI/Common/UIxFolderActions.m ([-canAccessContentAction]):
1831 changed the method paradigm to only return HTTP code 204. Not test
1832 is done whatsoever since the security manager does it for us.
1834 * UI/Contacts/UIxContactsListView.m ([-canAccessContentAction]):
1835 removed method because the same exists in UIxFolderActions.m
1837 * UI/Contacts/UIxContactsUserRightsEditor.m
1838 ([UIxContactsUserRightsEditor
1839 -setUserCanReadObjects:userCanReadObjects]): new method.
1841 * SoObjects/SOGo/SOGoPermissions.m: added roles "FolderViewer" and
1842 "FolderEraser" and special permission "Access Object". Removed
1843 role "SOGoMailRole_MessageEraser" since "SOGoRole_ObjectEraser"
1844 can be used instead. Removed "FolderReader" since it is useless.
1846 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
1847 -vCard]): directly use the "content" ivar since it is initialized
1848 during object creation.
1850 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1851 ([SOGoContactLDAPFolder -init]): no longer handle the
1852 nameInContainer no the container ivars. They were removed because
1853 this class is a descendant of SOGoObject which already has them.
1854 ([SOGoContactLDAPFolder -davDisplayName]): new overriden method
1855 returning "displayName".
1856 ([SOGoContactLDAPFolder -isFolderish]): new overriden method
1859 * SoObjects/Appointments/SOGoCalendarComponent.m
1860 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): commented out.
1861 ([SOGoCalendarComponent -findParticipant:user]): new name for
1862 method "participant:".
1863 ([SOGoCalendarComponent -findParticipantWithUID:uid]): same as
1864 findparticipant but taking a uid string as parameter.
1865 ([SOGoCalendarComponent -contentAsString]): don't regenerate the
1866 iCalendar automatically. Instead, this is done only when the user
1867 is a "date and time viewer".
1868 ([SOGoCalendarComponent -aclsForUser:uid]): take delegation roles
1869 (modifier and responder) into account by compiling them with the
1872 * SoObjects/Contacts/SOGoContactFolder.h: removed
1873 "nameInContainer" from the list of required methods.
1875 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
1876 -davContentType]): returns "text/calendar".
1878 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1879 ([SOGoContactLDAPFolder -davResourceType]): declare the correct
1880 groupdav resource-type.
1882 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
1883 -davContentType]): same as below.
1885 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1886 -initWithName:newNameinContainer:newContainer]): new overriden
1887 method setting the custom owner directly.
1889 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
1890 -davContentType]): same as below.
1892 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1893 -davContentType]): same as below.
1895 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davContentType]):
1896 declare "httpd/unix-directory".
1898 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): declare
1899 "UTC" as fallback timezone instead of "Canada/Eastern".
1900 ([-hasEmail:email]): make use of the new NSArray's
1901 containsCaseInsensitiveString: method.
1903 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1904 -davContentType]): declare "message/rfc822" as content type.
1906 * SoObjects/Appointments/SOGoAppointmentFolder.m
1907 ([SOGoAppointmentFolder -_privacySqlString]): "owner" is now an
1909 ([SOGoAppointmentFolder
1910 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): same as above.
1911 ([-fetchContentObjectNames]): commented out method since it was
1912 usefull only for testing Funambol.
1914 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
1915 -containsCaseInsensitiveString:match]): an enhanced version of
1918 * UI/MailerUI/UIxMailView.m ([-isTrashingAllowed]): removed
1920 ([-showMarkDeletedButton]): removed useless method.
1921 ([-showTrashButton]): removed useless method.
1923 * SoObjects/Appointments/iCalEntityObject+SOGo.m
1924 ([iCalEntityObject -userIsParticipant:user]): new proxy method
1925 that invoked isParticipant on self for each possible email
1926 addresses of the user passed as parameter.
1927 ([iCalEntityObject -userIsOrganizer:user]): same as above.
1929 * SoObjects/Appointments/iCalEntityObject+SOGo.[hm]: new class
1932 * SoObjects/Appointments/SOGoAppointmentObject.m
1933 ([SOGoAppointmentObject
1934 -saveContentString:contentStringbaseVersion:baseVersion]): remove
1935 method since an event may not have an organizer.
1937 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1938 -GETAction:localContext]): clarified method. Added support for
1939 content-type (thanks to Helge Hess).
1940 ([SOGoObject -initWithName:_nameinContainer:_container]):
1941 initialize and retain the owner.
1942 ([SOGoObject -davContentType]): returns "text/plain".
1944 2007-05-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1946 * UI/Common/UIxObjectActions.m ([UIxObjectActions
1947 -addUserInAclsAction]): send an acl addition mail.
1948 ([UIxObjectActions -removeUserFromAclsAction]): send an acl
1951 * UI/Common/UIxFolderActions.m ([UIxFolderActions
1952 -_realActionWithFolderName:folderDict]): handle the possible
1953 presence of the "mail-invitation" url parameter. If present, the
1954 user will be redirected to the relevant folder.
1956 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -fullEmail]): new proxy method.
1957 ([SOGoUser -language]): new method that returns the user's
1958 preferred language, or the system's if none has been set yet.
1960 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -davURL]): new method
1961 that returns the full dav url to self.
1962 ([SOGoObject -soURL]): same as above but for the so url (Web UI).
1963 ([SOGoObject -soURLToBaseContainerForUser:uid]): new method that
1964 returns the full so url to the base of the SOGo module to which
1965 self belongs, and for the specified user.
1966 ([SOGoObject -soURLToBaseContainerForCurrentUser]): same as above
1967 but for the current user.
1968 ([SOGoObject -httpURLForAdvisoryToUser:uid]): new protocol method
1969 required by the acl advisory templates and which returns a link
1970 the target user can click to activate its new subscription.
1971 ([SOGoObject -resourceURLForAdvisoryToUser:uid]): same as above
1972 but for inclusion of the application/x-sogo-notification part,
1973 which will be handled by the Lightning enhancer plugin.
1975 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -subscribeAction])
1976 ([UIxMailFolderActions -unsubscribeAction]): new stub methods that
1977 do nothing yet since imap folder subscription is not handled yet.
1979 * SoObjects/SOGo/SOGoContentObject.m
1980 ([-hasSupportForDefaultRoles]): removed method.
1982 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
1983 -getFullEmailForUID:uid]): new method that returns the username +
1986 * SoObjects/Appointments/SOGoCalendarComponent.m
1987 ([SOGoCalendarComponent +initialize]): the default language for
1988 mail templates is now set to English.
1990 * UI/SOGoUI/SOGoACLFrenchRemovalAdvisory.[hm]: new subclass of
1991 SOGoACLAdvisory implementing the french template for user removal
1994 * UI/SOGoUI/SOGoACLFrenchAdditionAdvisory.[hm]: new subclass of
1995 SOGoACLAdvisory implementing the french template for user
1998 * UI/SOGoUI/SOGoACLEnglishRemovalAdvisory.[hm]: new subclass of
1999 SOGoACLAdvisory implementing the english template for user removal
2002 * UI/SOGoUI/SOGoACLEnglishAdditionAdvisory.[hm]: new subclass of
2003 SOGoACLAdvisory implementing the english template for user
2006 * UI/SOGoUI/SOGoACLAdvisory.[hm]: new class module implemented the
2007 supercall of all the acl advistory templates. The model is based
2008 on SOGoAptMailNotification except that the template encapsulates
2009 the message to be sent. Later, we might create a superclass common
2010 to all template-based emails.
2012 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
2013 -addRange:newRange]): new method that store a string
2014 representation of the NSRange passed as parameter.
2015 ([NSMutableArray -hasRangeIntersection:testRange]): tests whether
2016 any range contained in self intersect with the one passed as parameter.
2018 * SoObjects/SOGo/NSString+Utilities.m ([-stringByDetectingURLs]):
2019 store ranges in an array to prevent them from intersecting with
2020 each other during the passes.
2022 2007-05-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2024 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2025 -primaryFetchMailboxInfo]): useless method. Removed.
2027 2007-05-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2029 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2030 -toManyRelationshipKeys]): invoke [self subfolders].
2031 ([SOGoMailFolder -subfolders]): new method containing what used to
2032 be in toManyRelationshipKeys.
2033 ([SOGoMailFolder -subfoldersURL]): same as above but returns imap
2036 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2037 -allFolderPaths]): renamed version of "allFolderPathes", sorted by
2038 named and at the beginning of which we put the predefined folders.
2040 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2041 -emptyTrashAction]): new method inspired by a similar one from
2042 UIxMailListView, to which we added the ability to remove
2045 * UI/MailerUI/UIxMailListView.m ([-emptyTrashAction]): removed
2046 method. Replaced with a similar one in UIxMailFolderActions.
2048 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2049 -renameFolderAction]): implemented method.
2050 ([UIxMailFolderActions -deleteFolderAction]): no longer delete the
2051 specified folder. Instead, we put it in the trash folder.
2053 * UI/MailerUI/UIxMailListView.m ([-createFolderAction]): removed
2054 method, replaced with a similar method in the new
2055 UIxMailFolderAction class module.
2056 ([-deleteFolderAction]): idem.
2058 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2059 -createFolderAction]): new method implementing subfolder creation.
2060 ([UIxMailFolderActions -renameFolderAction]): new method
2061 implementing subfolder renaming (basic implementation to be
2063 ([UIxMailFolderActions -deleteFolderAction]): new method
2064 implementing folder deletion.
2066 * UI/MailerUI/UIxMailFolderActions.[hm]: new module implementing
2067 web actions related to the handling of imap folder.
2069 2007-05-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2071 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2072 -ownerInContext:localContext]): overriden method because we are an
2073 IMAP4 client and we need a bit more intelligence to deduce the
2074 owner of the current folder.
2075 ([SOGoMailFolder -aclsForUser:uid]): aclForMailboxAtURL might
2076 return an NSException so we need to be careful here to avoid a
2078 ([SOGoMailFolder -aclUsers]): aclForMailboxAtURL might return an
2079 NSException so we need to be careful here to avoid a crash.
2081 * SoObjects/Mailer/SOGoMailAccounts.m
2082 ([SOGoMailAccounts -fetchIdentitiesWithOnlyEmitterAccess:_flag])
2083 there is no longer any concept of Intranet or Internet connection
2086 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2087 -sharedFolderName]): new method.
2088 ([SOGoMailAccount -otherUsersFolderName]): new method.
2090 * UI/MailerUI/UIxMailFolderMenu.[hm]: removed module, obsoleted by
2091 new javascript code and the new UIxMailAccountActions class.
2093 * UI/MailerUI/UIxMailTree.[hm]: removed module, obsoleted by new
2094 javascript code and the new UIxMailAccountActions class.
2096 * UI/MailerUI/UIxMailTreeBlock.[hm]: removed module, obsoleted by
2097 new javascript code and the new UIxMailAccountActions class.
2099 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
2100 -listMailboxesAction]): new method that returns a json-formatted
2101 tree of all the mailboxes available to the current user.
2103 * UI/MailerUI/UIxMailAccountActions.[hm]: new module implementing
2104 web actions related to the handling of mail accounts.
2106 * SoObjects/SOGo/NSDictionary+Utilities.[hm]: new extension
2109 * SoObjects/SOGo/NSObject+Utilities.m ([NSObject
2110 -jsonRepresentation]): new interface method meant to be overriden
2111 by the primitive classes.
2113 2007-05-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2115 * UI/MailerUI/UIxMailSplashView.m: removed.
2117 * SoObjects/Appointments/SOGoCalendarComponent.m
2118 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]): add
2119 the uid to the list only when the user email is recognized by the
2122 2007-05-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2124 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2125 -isDeletionAllowed]): completed method with the new imap acl api.
2127 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultAclRoles]):
2130 * SoObjects/SOGo/SOGoPermissions.m: added the new role
2131 "SOGoMailRole_MessageEraser".
2133 * UI/Common/UIxAclEditor.m ([UIxAclEditor -defaultUserID])
2134 ([UIxAclEditor -_prepareUsers]): take the new SOGoObject's
2135 "defaultUserID" method into account.
2137 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -userIsDefaultUser])
2138 ([UIxUserRightsEditor -_initRights]): take the new SOGoObject's
2139 "defaultUserID" method into account.
2141 * UI/MailerUI/UIxMailUserRightsEditor.m: added all the missing
2142 methods to support the IMAP acls mentionned in the RFC 4314,
2143 removed the ones specific to Cyrus.
2145 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultUserID]): new
2146 mandatory method for subclasses. Removed the SOGoDefaultUserID
2149 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -defaultUserID]):
2150 overriden method to return @"<default>".
2152 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2153 -defaultUserID]): overriden method to return @"<default>".
2155 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2156 -aclsForUser:uid]): overriden method.
2157 ([SOGoMailFolder -removeAclsForUsers:users]): overriden method.
2158 ([SOGoMailFolder -setRoles:rolesforUser:uid]): overriden method.
2159 ([SOGoMailFolder -defaultUserID]): overriden method.
2160 ([SOGoMailFolder -hasSupportForDefaultRoles]): overriden method.
2162 2007-05-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2164 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2165 -aclUsersForObjectAtPath:objectPathArray]): new method that being
2166 forwarded the calles to aclUsers for the GCS-based subclasses of
2169 * SoObjects/Mailer/SOGoMailFolder.m: removed all the previous
2170 methods that would have been used to support IMAP acls. Replaced
2171 them with the new protocol for them that has been implemented in
2172 SOGo during the last few weeks.
2174 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2175 -hasSupportForDefaultRoles]): override method by returning "YES".
2177 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
2178 -addObjectUniquely:object]): new method with an explicit name.
2180 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -aclUsers]): renamed
2181 "acl" to "aclUsers". Now designed to return only the uid of the
2182 users involved in an ACL.
2183 ([SOGoObject -hasSupportForDefaultRoles]): new method returning
2184 "NO" by default. To indicate to the acl editor that we don't want
2185 to handle a default user.
2187 * SoObjects/SOGo/SOGoPermissions.[hm]: added the
2188 SOGoRole_ObjectReader, SOGoRole_Folder*, and SOGoMailRole_*
2191 * UI/MailerUI/UIxMailUserRightsEditor.[hm]: new class module that
2192 provides a view to the IMAP acls.
2194 * UI/MailerUI/UIxMailFolderACLEditor.m: removed obsolete module.
2196 * UI/WebServerResources/MailerUI.js: replaced all invocations of
2197 addEventListener to the use of prototype's Event object. Also,
2198 configured all menus programmatically following descriptions lists
2199 containing their callbacks, or nulls, submenus id or separators.
2201 2007-05-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2203 * UI/Common/UIxObjectActions.m ([UIxObjectActions
2204 -addUserInAclsAction]): save the previous roles of the user
2205 (unlikely) or the default roles, or None instead of saving the
2206 roles that should appear the first time in the role editor when no
2207 default has been set...
2209 * SoObjects/SOGo/SOGoObject.m: defined a new constant
2210 "SOGoDefaultUserID".
2212 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2213 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]):
2214 ignore the "AuthorizedSubscriber" role and add the "None" role
2215 when no other role is found.
2217 * UI/Common/UIxAclEditor.m: added a button for the new default
2220 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
2221 -_initRights]): don't take the "None" role into account when
2222 initializing the list of current roles.
2224 * SoObjects/SOGo/SOGoPermissions.m: added a new void role
2227 2007-05-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2229 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2230 -_rangeOfURLInRange:refRange]): urls cannot end with "&" nor "=".
2231 There is no need to subscract the start from the length if a space
2232 is not found since the range has not changed either. Finally, the
2233 first character before the url might also be a tab or a cr, so we
2234 match it against the "urlAfterEndingChars" custom NSCharacterSet.
2235 ([NSString -stringByDetectingURLs]): modified to handle email
2236 addresses and add a correct "mailto:" link.
2238 2007-05-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2240 * SoObjects/Appointments/SOGoAppointmentFolder.m
2241 ([SOGoAppointmentFolder -fetchContentObjectNames]): override
2242 method to return the events in the range of 2 weeks ago up to 4
2245 * UI/MailPartViewers/UIxMailPartTextViewer.m
2246 ([UIxMailPartTextViewer -flatContentAsString]): use the new
2247 "stringByDetectingURLs" method to offer clickable urls.
2249 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2250 -stringByDetectingURLs]): this new method replaces passive URLS
2251 with active ones for HTML resolution of the text.
2253 2007-05-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2255 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
2256 -asQPSubjectString:encoding]): simplified method.
2257 The headers indicates "utf-8" again thank to our fix in
2260 * SoObjects/SOGo/SOGoObject.m: fail to build if libFoundation is
2263 2007-05-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2265 * UI/Common/UIxObjectActions.m ([UIxObjectActions
2266 -removeUserFromAclsAction]): implemented this method which was
2267 missing and is required to remove users from ACLs.
2269 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2270 -subscribeAction]): folderDict was not autoreleased, resulting in
2273 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2274 -primaryFetchProfile]): when building with libFoundation, don't
2275 use the "propertyList" method from NSString. Rather, we convert
2276 the string to an NSData instance and passit as parameter to
2277 NSDeserializer. This way, we obtain a mutable dictionary rather
2278 than an immutable one.
2280 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -bodyPartForText])
2281 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): use the
2282 constant string "contentTypeValue".
2283 contentTypeValue is now set back to iso-8859-1 since NGMime
2284 converts extracts the data in that encoding.
2286 2007-05-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2288 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
2289 -checkLogin:loginToCheckandPassword:passwordToCheck]): if a
2290 "bindFields" value is present in the user defaults, use the
2291 specified fields to find the dn of the user to bind.
2292 ([LDAPSource -allEntryIDs])
2293 ([LDAPSource -fetchContactsMatching:match])
2294 ([LDAPSource -lookupContactEntry:entryID])
2295 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]):
2296 bind and unbind the connection on each request.
2298 * UI/MailerUI/UIxMailAddressbook.m: removed obsolete module.
2300 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2301 -contactSearchAction]): simplified method to use the facilities
2302 provided by the LDAPUserManager. No longer takes care of the
2303 "ldap-only" url parameter since all requests are handled by the
2306 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2307 -primaryFetchProfile]): check that the value returned is not null
2308 before interpreting it.
2310 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
2311 -contactInfosForUserWithUIDorEmail:uid]): check that uid is not empty.
2312 ([LDAPUserManager -_fillContactMailRecords:contact]): if the
2313 system email is already present, remove it before adding it.
2315 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
2316 -checkLogin:loginToCheckandPassword:passwordToCheck]): check that
2317 loginToCheck is not empty.
2318 ([LDAPSource -fetchContactsMatching:match]): check that match is
2320 ([LDAPSource -lookupContactEntry:entryID]): check that entryID is
2322 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]): check that
2325 2007-05-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2327 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -primaryEmail]): new name
2329 ([SOGoUser -systemEmail]): returns the email formed from the
2330 username and the default mail domain.
2331 ([SOGoUser -hasEmail:email]): test whether the user has the
2332 specified email, in a case-insensitive way.
2334 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2335 -LDAPCheckLogin:_loginpassword:_pwd]): use the user manager to
2336 check login information.
2338 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2339 ([SOGoContactLDAPFolder
2340 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
2341 no longer manage LDAP connections. The requests are forwarded to
2342 the relevant LDAPSource instead.
2344 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2345 -appendSystemSources]): pass LDAPSource objects to
2346 SOGoContactLDAPFolder instances.
2348 * SoObjects/Mailer/SOGoDraftObject.m: extract the raw email
2349 address of the "from" field before sending the message. Otherwise,
2350 sending the mail won't work.
2352 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -fromEMails]):
2353 rewrote this method to request all the available email identities
2354 for the current user. Also, the from field also contains the full
2355 name of the user, not just his/her email address.
2357 * SoObjects/Appointments/SOGoCalendarComponent.m
2358 ([SOGoCalendarComponent -iCalPersonWithUID:uid]): new method taken
2359 from the previous module iCalEntityObject+Agenor.
2360 ([SOGoCalendarComponent -getUIDForICalPerson:person]): idem.
2361 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]):
2364 * SoObjects/Contacts/SOGoContactLDIFEntry.[hm]: new class module
2365 replacing the SOGoContactLDAPEntry module. It was renamed as such
2366 because it now receives a dictionary instead of an NGLdapEntry.
2367 It thus can now handle data from any source of LDIF data, not
2368 only coming from LDAP.
2370 * SoObjects/SOGo/LDAPUserManager.[hm]: new class module
2371 implementing most of what used to be the AgenorUserManager class.
2372 The difference is that users are cached in the forme of
2373 dictionaries and many sources are used. Also, it can be used to
2374 search LDAP contacts.
2376 * SoObjects/SOGo/LDAPSource.[hm]: new class module implementing
2377 the concept of "ldap source", to be used by all the classes
2378 needing access to LDAP-provided information: addressbooks and the
2379 user manager. Most the method thereing are transcriptions of
2380 methods previously found in SOGoContactLDAPFolder. It also contain
2381 utility methods for user matching and authentification.
2383 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: removed
2384 module, rendered useless by code refactoring.
2386 * SoObjects/SOGo/AgenorUserManager.[hm]: removed module, replaced
2387 with the freshly written "LDAPUserManager".
2389 2007-05-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2391 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: renamed to
2392 SOGOContactLDIFEntry.
2394 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: removed class
2395 module, obsoleted by code in SOGo/LDAPSource.[hm].
2397 2007-05-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2399 * UI/Common/UIxAclEditor.m ([UIxAclEditor -currentUserIsOwner]):
2400 new method with an explicit name.
2402 2007-05-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2404 * SoObjects/Appointments/SOGoCalendarComponent.m
2405 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): new method
2406 replacing "isOrganizer:orOwner:" by taking only one instance of
2407 SOGoUser as parameter.
2408 ([SOGoCalendarComponent -participant:user]): new method replacing
2409 the previous "isParticipant" boolean method by returning the first
2410 participant matching the user passed as parameter. This method is
2411 used so that both the regular email address and the "system email
2412 address" of the user are matched against the participants emails.
2414 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
2415 -getSystemEMailForUID:uid]): new method that returns the email
2416 formed with the user's uid and the default mail domain.
2418 * SoObjects/Appointments/SOGoCalendarComponent.m
2419 ([SOGoCalendarComponent -rolesOfUser:login]): removed method that
2420 was previously commented out.
2422 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -systemEmail]): new method
2423 forwared to [AgenorUserManager getSystemEmailForUID:].
2425 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2426 -toolbar]): method replacing the one with the same name in the
2427 task and appointment editor classes. This method makes also use of
2428 the new method "isOrganizerOrOwner:" and "participant:" in
2429 SOGoCalendarComponent.
2431 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2432 -toolbar]): removed method, replaced with a method with the same
2433 name in UIxComponentEditor.
2435 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -toolbar]): removed
2436 method, replaced with a method with the same name in
2439 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2440 -primaryFetchProfile]): the values returned from the database are
2441 converted to a put dictionary first, since the dictionary returned
2442 is actually an immutable one, which can cause a crash afterwards.
2444 2007-04-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2446 * SoObjects/SOGo/SOGoPermissions.m: added "SOGoRole_ObjectViewer"
2447 and "SOGoRole_ObjectEditor".
2449 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
2450 -prepareRightsForm]): this method is no longer mandatory.
2452 * UI/Contacts/UIxContactsUserRightsEditor.m
2453 ([UIxContactsUserRightsEditor
2454 -setUserCanCreateObjects:userCanCreateObjects]): new subclass
2455 module to handle acls related to the address books. Partial
2458 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2459 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): cache
2462 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): remove
2463 specified roles from cache.
2464 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
2465 put resulting roles in cache.
2467 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -init]): do not invoke
2468 initWithName:inContainer:. Instead, directly initialize the ivars
2469 as it is supposed to be to avoid an infinite loop whenever one of
2470 those two methods are overriden.
2472 * SoObjects/SOGo/SOGoContentObject.m ([-rolesOfUser:login]):
2475 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
2476 -aclsForUser:uid]): override method so that SOGo won't crash when
2477 loading the contact card.
2479 2007-04-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2481 * SoObjects/Appointments/SOGoAppointmentFolder.m
2482 ([SOGoAppointmentFolder -_privacySqlString]): the string for the
2483 "freebusy" special user should only require opaque elements.
2485 2007-04-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2487 * SoObjects/Appointments/SOGoAppointmentFolder.m
2488 ([SOGoAppointmentFolder -davResourceType]): fixed a problem with
2489 our double declaration where the resulting XML would be screwed.
2490 There is only one collection per namespace.
2492 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
2493 rfc822DateString]): new method that returns a string conform to
2494 rfc 822 and suitable for email headers.
2496 * SoObjects/Mailer/SOGoDraftObject.m: invoke the new
2497 "rfc822DateString" category method on the date we put in the
2500 2007-04-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2502 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -defaultAction])
2503 ([UIxUserRightsEditor -saveUserRightsAction]): new action methods
2504 which should never be overriden.
2505 ([UIxUserRightsEditor -appendRight:newRight])
2506 ([UIxUserRightsEditor -removeRight:right])
2507 ([UIxUserRightsEditor -appendExclusiveRight:newRightfromList:list])
2508 ([UIxUserRightsEditor -removeAllRightsFromList:list]): new utility
2509 methods that can be used by the subclasses.
2510 ([UIxUserRightsEditor -prepareRightsForm]): new method that should
2511 mandatorily be overriden to prepare the elements of the subclassed
2513 ([UIxUserRightsEditor -updateRights]): new method that should
2514 mandatorily be overriden to update the user rights from the
2515 elements of the subclassed form.
2517 * UI/Common/UIxAclEditor.m ([UIxAclEditor -_prepareUsers]): we
2518 check if the uid is already listed before adding it to our array.
2519 This is because the acl table can contain more than one record per
2520 user/object relationship.
2522 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2523 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): the
2524 "roles" parameter is now an NSArray instead of a string. Therefore
2525 we loop throughout the array to populate the table. All the
2526 relevant records are removed prior to the addition of the new
2529 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
2530 -aclsForUser:uid]): new override that returns nil until we add
2531 support for IMAP acls.
2533 * SoObjects/Mailer/SOGoMailAccounts.m
2534 ([SOGoMailAccounts -aclsForUser:uid]): same as below.
2536 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2537 ([SOGoContactLDAPFolder -aclsForUser:uid]): same as below.
2539 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2540 -aclsForUser:uid]): override this method which will always return
2543 * SoObjects/SOGo/SOGoPermissions.[hm]: added
2544 [Public,Private,Confidential]
2545 x[Viewer,DAndTViewer,Responder,Modifier]. Renamed
2546 SOGoRole_ORganizer to SOGoCalendarRole_Organizer. Same for
2547 ..._Participant. Removed SOGoRole_Assistant and SOGoRole_Delegate.
2549 * SoObjects/Appointments/SOGoAppointmentFolder.m
2550 ([SOGoAppointmentFolder -defaultAclRoles]): new overriden method
2551 that defines default roles for new elements in the acl.
2553 * UI/Scheduler/UIxCalUserRightsEditor.[hm]: new component class
2554 module and subclass of UIxUserRightsEditor specific to the
2555 handling of user rights on calendar folders.
2557 2007-04-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2559 * SoObjects/Appointments/SOGoAppointmentFolder.m
2560 ([SOGoAppointmentFolder -groupDavResourceType]): return both
2561 "vevent-collection" and "vtodo-collection".
2563 * UI/Common/UIxUserRightsEditor.[hm]: new template class module
2564 that implements the detailed editor of user rights per-object.
2566 2007-04-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2568 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
2569 -rolesForObject:objectinContext:context]): no longer query objects
2570 for "roleForUser:". Instead, all objects should implement
2573 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject -acls]):
2574 new method to comply with the new acl "protocol" in SOGoObject.
2575 Uses SOGoFolder's new facilities for ACLS.
2576 ([SOGoContentObject -aclsForUser:uid]): idem.
2577 ([SOGoContentObject -setRoles:rolesforUser:uid]): idem.
2578 ([SOGoContentObject -removeAclsForUsers:users]): idem.
2580 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2581 -aclsForObjectAtPath:objectPathArray]): new method generic to GCS
2582 based folders. This method is derived from the code that was in
2583 UIxAclFolder before its removal.
2584 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
2587 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): idem.
2589 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): idem.
2590 ([SOGoFolder -setRoleForUsers:uidsto:role])
2591 ([SOGoFolder -setRoleForUsers:uidsto:role]): removed method.
2593 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -acls]): stub method
2594 that requires overriding by subclasses.
2595 ([SOGoObject -aclsForUser:uid]): idem.
2596 ([SOGoObject -defaultAclRoles]): idem.
2597 ([SOGoObject -setRoles:rolesforUser:uid]): idem.
2598 ([SOGoObject -removeAclsForUsers:users]): idem.
2600 * UI/Common/UIxObjectActions.m: new module implementing the web
2601 actions common to SOGoObject and all its subclasses.
2602 ([UIxObjectActions -addUserInAclsAction]): new method that adds a
2603 user with the clientObject defaults user rights to the object's
2606 * UI/Common/UIxAclEditor.m: modified module so as to simplify it
2607 to the point where it will only list the users (and their name)
2608 associated with an object acl.
2610 * SoObjects/SOGo/SOGoAclsFolder.m: removed module because its
2611 methods have been moved into SOGoObject and SOGoFolder during a
2614 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2615 -iCalParticipantsAndResourcesStringFromQueryParameters]): removed
2616 method made useless by the programmatic handling of iCalendar
2618 ([UIxComponentEditor -iCalParticipantsStringFromQueryParameters]): idem.
2619 ([UIxComponentEditor -iCalResourcesStringFromQueryParameters]): idem.
2620 ([UIxComponentEditor -iCalStringFromQueryParameter:_qpformat:_format]): idem.
2622 * UI/WebServerResources/MailerUI.js (initDnd): enable drag and
2623 drop on all folder nodes, not just on leaves.
2625 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2626 ([SOGoContactLDAPFolder
2627 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): request field "uid" when doing a search.
2629 2007-04-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2631 * Main/SOGo.m ([SOGo +initialize]): on GNUstep, trigger some
2632 debugging facilities when the SOGoDebugObjectAllocation user
2635 2007-04-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2637 * SoObjects/SOGo/NSString+Utilities.m ([NSString -boolValue]): new
2638 method that SOGo will need with non-gnustep Foundation
2640 ([NSString -stringByAppendingPathComponent:component]): new method
2641 that SOGo will need when building with libFoundation. Method
2642 removed later since it is available from
2643 Foundation/NSPathUtilities.h.
2645 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -timeZone]): method moved
2648 * SoObjects/SOGo/SOGoObject.m: new ivar "context" that permits
2649 every subclass to access [WOApplication context] without having to
2650 invoke it more than once.
2652 * SoObjects/Appointments/SOGoCalendarComponent.m
2653 ([SOGoCalendarComponent -changeParticipationStatus:_status]):
2654 moved method from SOGoTaskObject and SOGoAppointmentObject up to
2657 * UI/Scheduler/UIxCalSelectTab.m: removed module.
2659 2007-04-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2661 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
2662 -vCard]): test the prefix of the card in a case-independent way.
2664 * OGoContentStore/OCSContactFieldExtractor.m
2665 ([OCSContactFieldExtractor
2666 -extractQuickFieldsFromContent:content]): we no longer accept
2667 records in a format other than versit vCard so we can get rid of a
2670 2007-04-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2672 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2673 -selectorComponentClass]): restored method.
2675 2007-04-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2677 * UI/Scheduler/UIxCalTasksListView.m ([UIxCalTasksListView
2678 -shouldDisplayCurrentTask]): the current task is not displayed if
2679 it is NOT completed or if the "showCompletedTasks" flag is set.
2680 The logic was inverted in Lightning and is now in SOGo too.
2682 2007-04-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2684 * UI/Contacts/UIxContactView.m ([UIxContactView -workUrl]): we
2685 want the "work" url instead of the "home".
2687 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
2688 -_saveSnapshot]): save url values from snapshot.
2689 ([UIxContactEditor -initSnapshot]): load url values from snapshot.
2691 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2692 -calendarList]): new method replacing "availableCalendars".
2694 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
2695 -calendarFolders]): we now take the list of subscribed calendar
2698 * SoObjects/Appointments/SOGoAppointmentFolder.m
2699 ([SOGoAppointmentFolder -calendarFoldersInContext:context]): new
2700 method derived from and replacing [UIxCalView calendarFolders].
2702 2007-03-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2704 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2705 -toManyRelationshipKeys]): don't put the predefined folders in the
2706 list if they are returned by the server.
2708 * UI/MailerUI/UIxMailTree.m ([UIxMailTree -flattenedNodes]): we no
2709 longer store the "flattenedBlocks" in a dictionary since the
2710 object will be deleted anyway and we don't need to put the folders
2713 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
2714 ([UIxMailPartHTMLViewer -_attachmentIds]): take the current
2715 attachment path into account when computing the part urls.
2717 2007-03-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2719 * UI/Contacts/UIxContactsListViewContainer.m
2720 ([UIxContactsListViewContainer -additionalFolders]): take the list
2721 of subscribed folders from the new property list used for the user
2722 settings. The value of its key is SubscribedFolders for the
2723 dictionary entry named "Contacts".
2725 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2726 -canAccessContentAction]): new method to override the one from
2727 UIxFoldersActions by taking into account the fact that, this time,
2728 the clientObject is an ldap folder. Removed many method that used
2729 to be related to the handling of the user selector.
2731 * UI/Scheduler/UIxCalDayView.m: commented out many unused methods
2732 to make sure they can be removed.
2734 * UI/Scheduler/UIxCalView.m ([UIxCalView -_setupCalendarFolders]):
2735 populate the calendar entries based on the user settings plist.
2737 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2738 -selectForMailerAction]): restored method.
2740 * UI/Scheduler/UIxCalendarSelector.m: new template module derived
2741 from a simplified version of the old UIxContactEditor (removed).
2743 * UI/Contacts/UIxContactsUserFolders.m: new template module for
2744 selecting users or user folders through an LDAP search of which
2745 the results are displayed as a tree.
2747 * UI/WebServerResources/UIxMailEditor.js: moved previous generic
2748 method "onContactAdd" here since the Mailer is now the only module
2749 to use it when composing emails.
2751 * UI/WebServerResources/generic.js: added code for handling the
2752 new scheme used for describing SOGo folders, common code to handle
2753 folder addition or removal.
2755 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2756 -activateFolderAction]): new method that change the "active"
2757 settings in the folder-related fields in the user settings.
2758 ([UIxFolderActions -deactivateFolderAction]): see above.
2760 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2761 -checkRightsAction]): removed method.
2763 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2764 -updateAdditionalAddressBooksAction]): removed method.
2766 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
2767 -updateCalendarsAction]): removed method.
2769 2007-03-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2771 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
2772 -checkRightsAction]): removed method.
2774 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2775 -canAccessContentAction]): new method designed to replace
2776 [UIxCalMainView checkRightsAction] in a more universal way.
2778 2007-03-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2780 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2781 -roleOfUser:uidinContext:context]): take all the subkeys into
2782 account, not only the "personal" folder.
2784 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2785 -takeValuesFromRequest:_rqinContext:_ctx]): append a "uid" field
2786 to the new components.
2788 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -userSettings]): new method
2791 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
2792 -getUserDefaultsForUID:uid]): rewrote method to use the "defaults"
2793 field of the sogo_user_profile table, where the user-customizable
2794 changes will be saved.
2795 ([AgenorUserManager -getUserSettingsForUID:uid]): new method
2796 similar to the one above, using the "settings" field where the
2797 automatic settings will be saved.
2799 * SoObjects/SOGo/AgenorUserDefaults.m: rewrote a big part of the
2800 module to bind the userdefaults to a property list contained in a
2801 specified field of the sogo_user_profile table.
2802 ([AgenorUserDefaults
2803 -initWithTableURL:tableURLuid:userIDfieldName:defaultsFieldName]):
2804 added a "fieldName" parameter.
2806 * UI/Common/UIxFolderActions.m: new module implementing web
2807 actions common to all GCS-based folders.
2809 2007-03-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2811 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -labelForDay]):
2812 put a carriage return after the day name.
2814 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
2815 -readFreeBusyAction]): restored method.
2817 2007-03-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2819 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
2820 -defaultAction]): remade module to redirect automatically to the
2823 * SoObjects/Contacts/NSDictionary+Contact.m: removed module.
2825 2007-03-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2827 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2828 -deleteAction]): new web method to delete personal addressbook
2831 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
2832 -delete]): override method to refuse the deletion of the folder if
2833 its nameInContainer is "personal".
2835 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -delete]): new method
2836 that forwards the deletion request to the folder manager.
2838 2007-03-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2840 * UI/Scheduler/UIxAttendeesEditor.m ([UIxAttendeesEditor
2841 -zoomList]): new method that returns the list of available zoom factors.
2843 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
2844 -changeStatusAction]): rewrote method.
2846 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2847 -_handleAttendeesEdition]): make sure "attendeesNames" has a
2848 length > 0 before computing the attendees. Otherwise there will be
2849 an invalid empty entry.
2850 ([UIxComponentEditor -_handleOrganizer]): new method that adds the
2851 organizer when there are attendees and remove it when the
2852 attendees are removed.
2854 2007-03-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2856 * UI/Scheduler/UIxAttendeesEditor.m): new component.
2858 * UI/Scheduler/UIxComponentEditor.m: no longer a superclass for
2859 the task and appointment editors. Now a container component
2860 handling the common elements of tasks and events.
2862 * UI/Scheduler/UIxTaskEditor.m: same as below.
2864 * UI/Scheduler/UIxAppointmentEditor.m: rewrote template. No longer
2865 a subclass of UIxComponentEditor but a subcomponent of it.
2867 * UI/Common/UIxToolbar.m ([UIxToolbar -toolbarConfig]): the
2868 toolbar can have the special value "none" to indicate there is
2869 none attached to the window.
2871 * SoObjects/Appointments/SOGoCalendarComponent.m
2872 ([SOGoCalendarComponent -isOrganizer:emailorOwner:login]): new
2874 ([SOGoCalendarComponent -isParticipant:email]): new method.
2875 ([SOGoCalendarComponent -calendar:create]): takes one parameter
2876 "create" which is a boolean indicating whether we want to create
2877 the calendar if it does not exist.
2879 2007-03-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2881 * UI/Scheduler/UIxCalMonthView.m: changed view to use divs instead
2882 of a table, the same way the dayly and weekly views have been for
2885 2007-02-09 Helge Hess <helge.hess@opengroupware.org>
2887 * SoObjects/Appointments/SOGoAppointmentFolder.m: added CalDAV
2890 * SoObjects/SOGo/SOGoUserFolder.m: added davCalendarHomeSet CalDAV
2891 property to point at the user folder
2893 2007-03-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2895 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2896 -userInContext:]): returns "SOGoUser".
2898 * SoObjects/Appointments/SOGoCalendarComponent.m
2899 ([SOGoCalendarComponent -contentAsString]): overriden method that
2900 takes the privacy into account and discard the relevant fields if
2901 needed by generating a new content string and caching it.
2902 ([SOGoCalendarComponent
2903 -saveContentString:contentStringbaseVersion:baseVersion]): if the
2904 new method above has cached a content string, release it and set
2905 it to nil so that it will have to be regenerated in the case it is
2907 ([SOGoCalendarComponent -_filterPrivateComponent:component]):
2908 discard the fields that have to be hidden when the card is
2911 * SoObjects/Appointments/SOGoAppointmentFolder.m
2912 ([SOGoAppointmentFolder
2913 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]): make
2914 sure the cards are now handled as instances of
2915 SOGoCalendarComponent instead of SOGoContentObject so that their
2916 content string is taking the privacy classifiction into account.
2917 ([SOGoAppointmentFolder -_privacySqlString]): new method that
2918 generates a query to determine what information can be given and
2919 if the card itself has to be shown.
2921 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
2922 -getICalPersonsFromValue:selectorValue]): removed useless
2923 "isAccessRestricted" method.
2925 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
2926 -setStyle:_style]): test whether the values of orgmail and
2927 partmails are null before manipulating them, otherwise SOGo sends
2928 a "rangeOfString:" message to an NSNull, which makes it crashes.
2930 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2931 -extractQuickFieldsFromEvent:_event]): we now use the new
2932 "symbolicAccessClass" method from iCalEntity to determine the
2933 value of the "classifiction" field.
2934 ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]): same
2937 2007-03-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2939 * SoObjects/Appointments/SOGoAppointmentFolder.m
2940 ([SOGoAppointmentFolder
2941 -fetchCoreInfosFrom:_startDateto:_endDatecomponent:_component]):
2942 see below, the query is adapted consequently.
2944 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2945 -extractQuickFieldsFromTodo:_task]): the field "ispublic" was
2946 renamed to "classification" and can any integer as value.
2947 ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event]):
2950 2007-02-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2952 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
2953 ([_UIxHTMLMailContentHandler -_appendStyle:_charslength:_len]):
2954 don't prepend anything to the class and id named. Instead, we
2955 make each style embedded in the ".SOGoHTMLMail-CSS-Delimiter"
2958 2007-02-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2960 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2961 -rolesOfUser:logininContext:context]): if object does not exists
2962 (for example when it's being created), the current user has the
2963 same rights on it than he/she has on its parent container.
2965 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2966 -nameExistsInFolder:objectName]): methods that tests if a c_name
2967 corresponding to the name passed as parameter is present in the db
2970 2007-02-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2972 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
2973 -rolesForObject:objectinContext:context]): test for
2974 "rolesOfUser:inContext:" in addition to "roleOfUser:...".
2976 * SoObjects/Appointments/SOGoCalendarComponent.m
2977 ([SOGoCalendarComponent -rolesOfUser:logininContext:context]):
2978 returns the roles of the user on the container object if the event
2981 2007-02-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2983 * UI/MailPartViewers/UIxMailRenderingContext.m: returns the
2984 alternativeViewer a multipart/related message is being handled.
2986 * UI/MailPartViewers/UIxMailPartHTMLViewer.m: reimplemented module
2989 * UI/MailPartViewers/UIxMailPartAlternativeViewer.m: select the
2990 text/html component before text/plain.
2992 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2993 -addRequiredKeysOfStructure:path:toArray:recurse:]): accepts the
2994 fetching of HTML parts.
2996 * SoObjects/Appointments/SOGoCalendarComponent.m
2997 ([SOGoCalendarComponent -componentTag]): new template method that
2998 returns the vcalendar tag of the current object.
2999 ([SOGoCalendarComponent -component]): new method that returns the
3000 first object matching [self componentTag] within the current
3001 calendar object. This method replaces 'firstEventInCalendar:' as
3002 well as "firstTaskInCalendar:".
3003 ([SOGoCalendarComponent -roleOfUser:logininContext:context]):
3004 moved method from SOGoAppointmentObject.m.
3006 2007-02-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3008 * UI/Scheduler/UIxCalMulticolumnDayView.[hm]: new daily view
3009 module which shows each selected user's calendar in a different
3010 column instead of mixing their events together.
3012 * UI/Scheduler/UIxCalView.m ([UIxCalView -redirectForUIDsAction]):
3013 replaced use of [NSString stringByTrimmingWhiteSpaces] with
3014 [NSString stringByTrimmingSpaces].
3016 * UI/MailPartViewers/UIxMailPartICalViewer.m: request the key
3017 "cnWithoutQuotes" instead of "cnForDisplay", which no longer
3020 * UI/Scheduler/UIxCalDayOverview.m,
3021 UI/Scheduler/UIxCalDayChartview.m,
3022 UI/Scheduler/UIxCalDayListview.m,
3023 UI/Scheduler/UIxCalWeekOverview.m,
3024 UI/Scheduler/UIxCalWeekChartview.m,
3025 UI/Scheduler/UIxCalWeekListview.m,
3026 UI/Scheduler/UIxCalInlineMonthOverview.m,
3027 UI/Scheduler/UIxCalYearOverview.m: removed unused modules.
3029 2007-02-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3031 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3032 -appendPersonalSourcesInContext:context]): release connectoin
3033 channel when everything is done.
3035 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3036 -newAbAction]): new action method to crate a new contact folder
3039 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -create]): new method
3040 that requests the folder manager to create a folder table with the
3041 specified type at the specified path. The type is taken from [self
3044 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3045 -folderType]): implemented.
3047 * SoObjects/Appointments/SOGoAppointmentFolder.m
3048 ([SOGoAppointmentFolder -folderType]): implemented.
3050 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3051 -appendPersonalSourcesInContext:context]): we now fetch all
3052 folders with type "Contact" that belong to the current user.
3053 ([SOGoContactFolders -newFolderWithName:name]): new method to
3054 create a new contact folder.
3056 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]): treat
3057 resulting url with [NSString+Utilities hostlessURL] instead of
3058 using NSURL. This is because the url in question sometimes has a
3059 hostname and sometimes not. "hostlessURL" ensure the hostname is
3061 ([UIxComponent -applicationPath]): same as above.
3063 2007-02-08 Ludovic Marcotte <ludovic@inverse.ca>
3065 * SoObjects/Mailer/SOGoMailFolder.m: priorize the lookup of
3066 folders before doing the one on messages.
3068 2007-02-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3070 * SoObjects/SOGo/NSArray+Utilities.m: added an implementation of
3071 makeObjectsPerform:withObject:withObject: for GNUstep
3074 * OGoContentStore/GNUmakefile, Protocols/common.make,
3075 SoObjects/common.make, UI/common.make: install in
3076 GNUSTEP_INSTALLATION_DIR instead of GNUSTEP_USER_DIR.
3078 2007-02-07 Ludovic Marcotte <ludovic@inverse.ca>
3080 * UI/Scheduler/English.lproj/Localizable.strings: fixed typo for
3083 2007-02-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3085 * UI/MailerUI/UIxMailTree.m ([UIxMailTree
3086 -getTitle:folderType:andIcon:forObject:]): disabled Sieve folders
3089 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3090 -checkLogin:_loginpassword:_pwd]): fixed a bug where a wrong
3091 password would be accepted anyway as long as its length was > 0.
3092 This can be the case ONLY when LDAP is disabled otherwise we have
3093 a serious security issue...
3095 * SoObjects/Appointments/SOGoAppointmentObject.m
3096 ([SOGoAppointmentObject -roleOfUser:logininContext:context]): if a
3097 user is not an organizer nor a participant, he is declared as
3098 "Owner" if he owns the calendar the entry where the entry is
3099 contained. Other cases should not be possible.
3101 2007-02-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3103 * UI/Contacts/UIxContactEditor.m: display and handle the new
3106 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3107 ([SOGoContactLDAPFolder -_searchAttributes]): retrieve "calFBURL"
3110 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3111 -vCard]): put the LDAP "calFBURL" field in the vCard's "FBURL"
3114 2007-01-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3116 * SoObjects/Appointments/SOGoCalendarComponent.m
3117 ([SOGoCalendarComponent -sendEMailNotifications]): new method that
3118 returns the value of ud "SOGoAppointmentSendEMailNotifications"
3120 ([SOGoCalendarComponent
3121 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]): method moved from SOGoAppointmentObject/SOGoTaskObject, replacing occurences of "appointment" to "object" in its name.
3123 2007-01-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3125 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
3126 -defaultAction]): invoke "flushMailCaches" on [self clientObject]
3127 so that the mailbox cache is refreshed everytime the user presses
3128 on "get mail". I doubt a mailbox cache really is useful in general
3131 2007-01-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3133 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3134 -userInContext:]): if the lookup is on "freebusy.ifb" and the
3135 username is "anonymous" the user is automatically set to
3138 2007-01-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3140 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3141 -checkLogin:_loginpassword:_pwd]): authorize special "freebusy"
3142 user with password "freebusy".
3144 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
3145 -contentAsString]): the default timerange is now 14 days before
3146 currentday and 1 month after.
3148 2007-01-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3150 * SoObjects/Appointments/SOGoAppointmentFolder.m
3151 ([SOGoAppointmentFolder
3152 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
3153 escape the record string in a way suitable with XML encoding.
3155 2007-01-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3157 * UI/WebServerResources/SchedulerUI.js: fixed a bug where the
3158 calendar view would not be updated properly.
3160 2007-01-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3162 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3163 -newStartDate]): fix the handling of the component start date
3164 depending on the "hm" and the "day" parameters.
3166 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
3167 -roleOfUser:uidinContext:context]): set role of current user to
3168 "Assistant" if the object that is accessed is "freebusy.ifb".
3170 * SoObjects/Appointments/SOGoAppointmentFolder.m
3171 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): method
3172 moved from UI/Scheduler/UIxCalView:calendarFolderForUID:.
3173 ([SOGoAppointmentFolder
3174 -lookupCalendarFoldersForUIDs:_uidsinContext:]): now use the new
3175 lookupCalendarFolderForUID: method, which doesn't do security
3178 2007-01-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3180 * UI/Common/UIxAclEditor.m ([UIxAclEditor -assistantsValue]): new
3181 accessor that returns the comma-separated list of users with role
3183 ([UIxAclEditor -delegatesValue]): same as above for "Delegate".
3184 ([UIxAclEditor -_prepareUsers]): there is no longer a concept of
3185 "checkedUsers". Instead, each user is either classified in the
3186 list of assistants or the list of delegates.
3188 2006-12-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3190 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
3191 -composeAction]): method imported from removed container modules.
3192 ([UIxMailMainFrame -mailFolderName]): method imported from removed
3195 * UI/MailerUI/UIxMailPopupView.m: a new special popup component
3196 for wrapping UIxMailView with the "popupview" action.
3198 * UI/MailerUI/UIxMailAccountView.m: renamed to UIxMailSplashView,
3199 since its the component that displays the same splash screen than
3200 the one in Thunderbird/Icedove.
3202 * UI/MailerUI/UIxMailAccountViewContainer.[hm],
3203 UI/MailerUI/UI/MailerUI/UIxMailAccountsView.m,
3204 UI/MailerUI/UIxMailListViewContainer.[hm],
3205 UI/MailerUI/UIxMailViewContainer.[hm]: removed
3207 2006-12-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3209 * UI/WebServerResources/HTMLElement.js: replaced the functional
3210 selectNode() and deselectNode() functions with select() and
3211 deselect() methods of HTMLElement.
3213 * UI/WebServerResources/ContactsUI.js: cleanup, most of the
3214 events are initialized from here now instead of in the HTML code.
3216 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3217 -checkRightsAction]): new method similar to the one with the same
3218 name in UIxCalMainView.m.
3220 * UI/Common/UIxAclEditor.m ([UIxAclEditor -saveAclsAction]): added
3221 code to handle the publishing of freebusy information.
3223 2006-12-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3225 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3226 -checkRightsAction]): new action method that returns a
3227 comma-separated list of boolean values matching the right of the
3228 current user to "view" (as a permission) each foreign calendar
3229 stored in his preferences.
3231 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -setOwner:newOwner]):
3232 new method that sets a customOwner, which can be returned with
3233 ownerInContext it set.
3235 * SoObjects/Appointments/SOGoAppointmentFolder.m
3236 ([SOGoAppointmentFolder
3237 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): no longer set the owner of elements here.
3239 2006-12-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3241 * SoObjects/SOGo/SOGoUserFolder.m: same as for SOGoContactFolders
3242 below, but for the Contacts and Calendar collections.
3244 * SoObjects/SOGo/SOGoAclsFolder.m: convert the class to user the
3245 new acl facilities method from sope-gdl/GCSFolder.m.
3247 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3248 -roleOfUser:uidinContext:context]): new method that returns
3249 SOGoRole_Assistant when the user is an assistant or a delegate on
3250 the "personal" ab object. This is so that setting roles on the
3251 SOGoContactFolders object is not required.
3253 2006-12-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3255 * Main/SOGo.m: declare "Freebusy" permissions for the top objects.
3257 * UI/Contacts/UIxContactsAclsSelection.m: new component specific
3258 to the handling of the user selection for the acls.
3260 * SoObjects/SOGo/SOGoPermissions.[hm]: new module that extends the
3261 values from SoPermissions with ones specific to SOGo.
3263 * SoObjects/SOGo/SOGoAclsFolder.[hm]: new class module that
3264 handles the storage for the acls.
3266 * SoObjects/Appointments/SOGoCalendarComponent.[hm]: new parent
3267 class for SOGoAppointmentObject and SOGoTaskObject.
3269 * UI/Common/UIxAclEditor.[hm]: new component that provides a
3270 general editor for folder acls.
3272 * SoObjects/SOGo/NSString+Utilities.[hm]: old "NSString+URL"
3274 ([NSString -davMethodToObjC]): method that returns the method name
3275 for a DAV property implementation.
3277 * SoObjects/SOGo/NSArray+Utilities.m: new extension module to
3279 ([NSArray -stringsWithFormat:format]): new method that returns
3280 formatted occurences of the strings stored in the array.
3282 * SoObjects/SOGo/SOGoDAVRendererTypes.m ([SOGoDAVSet
3283 +davSetWithArray:newValuesofValuesTaggedAs:newValueTag]): a new
3284 subclass module of SoWebDAVValue that supports collections of
3285 properties of the same type.
3287 2006-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3289 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
3290 -lookupFolder:ofClassNamed:inContext:]): added the ability to
3291 configure the name of the SOGoDraftFolders with the ud var
3292 "SOGoDraftsFolderName".
3294 2006-11-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3296 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
3297 -userTimeZone:username]): new method that returns the timezone for
3298 the specified user depending on his preferences and the server
3301 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3302 -stringForData:partInfo:]): take the encoding into account and
3303 translate the text to "normal" before processing the charset data.
3305 2006-11-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3307 * UI/WebServerResources/generic.js: the progress indicator is on
3308 when loading the page so we turn it off, and we turn it back on
3309 whenever we switch to another module...
3311 * UI/WebServerResources/SchedulerUI.js: make sure the day view
3312 synchronization mechanism works everywhere.
3314 * UI/WebServerResources/generic.js: the log window is not only
3315 visible when UIxDebugEnabled is set.
3317 * UI/WebServerResources/SchedulerUI.js: the month overview's day
3318 cells are now initialized with the DOM event interface methods
3319 instead of with html attributes.
3321 * UI/Templates/MailerUI/UIxMailView.wox: don't display useless
3322 headers (should be made configurable at some point)...
3324 * OGoContentStore/sql/generate-folderinfo-sql-for-users.sh: drop
3325 "not null" constraint on startdate, enddate, isopaque,
3326 participants and partmails.
3328 2006-11-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3330 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
3331 -hoursToDisplay]): prevent a crash by retaining the
3332 "hoursToDisplay" array after it's created.
3333 ([UIxCalDayTable -clickableHourCellClass]): new method for the new
3334 clickable hours DIV.
3336 * UI/WebServerResources/SchedulerUI.js: made the event
3337 participation status modification asynchronous, which also fixes a
3338 bug where the window would sometimes close before the accept or
3339 decline action was completed. Also, adapted the event handling
3340 related to the days or weeks view with the new DIV-based layout.
3342 * UI/Scheduler/UIxCalInlineAptView.m: same as the first below...
3344 * UI/Scheduler/UIxCalDayTable.m: enhanced to provide the new
3345 DIV-based presentation of the days and weeks.
3347 * SoObjects/Appointments/SOGoTaskObject.m: same as below...
3349 * SoObjects/Appointments/SOGoAppointmentObject.m: lookupName:...
3350 might return an exception so we have to handle it if we don't
3353 2006-11-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3355 * UI/WebServerResources/SchedulerUI.js: updated the list
3356 initialization code to use the new event management scheme, adding
3357 what was missing to be able to delete events and tasks again.
3359 * UI/WebServerResources/MailerUI.js: added code to activate the
3360 "Get mails" button. Fixed a bug which prevented messages to be
3363 * UI/WebServerResources/UIxFreeBusyUserSelector.js: handle tab
3364 navigation and focus handling of INPUTs.
3366 2006-11-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3368 * UI/WebServerResources/MailerUI.js: added code to handle the
3369 possible drag and drop events to manager in the mail module.
3370 Moving messages, opening parent folders, ...
3372 * UI/WebServerResources/SOGoDragAndDrop.js: new file containing
3373 the drag and drop manager as well as the interface to HTMLElement
3374 to trigger drag and drop events.
3376 * UI/MailerUI/UIxMailView.m ([UIxMailView -moveAction]): new
3377 action to move the current message to the mailbox named after the
3378 value of parameter "tofolder".
3380 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3381 -moveToFolderNamed:folderNameinContext:]): new method base on
3384 2006-11-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3386 * UI/WebServerResources/generic.js: added and activated many
3387 "load" handlers to configure generic widgets used across the
3388 modules. More events are now handled in a DOM-fashion way instead
3389 of by setting the relative attributes in the templates.
3391 * UI/Templates/UIxSortableTableHeader.wox: all the events are
3392 declared from the javascript DOM onload handlers.
3394 * UI/Templates/UIxPageFrame.wox: load the new SOGoDragHandles.js
3397 * UI/Templates/MailerUI/UIxMailListView.wox: all the events are
3398 declared from the javascript DOM onload handlers.
3400 * UI/MailerUI/UIxMailListView.m: removed all the JS methods since
3401 we want everything to be separated from each other, as much as
3404 * UI/WebServerResources/SOGoDragHandles.js: new module containing
3405 the "SOGoDragHandlesInterface", implementing methods that can be
3406 attributed to DIV so that they can be used as drag handles.
3408 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
3409 -asQPSubjectString]): initialize the tmp strings with '0' to make
3410 sure they don't contain garbage.
3412 2006-11-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3414 * UI/WebServerResources/MailerUI.js: register the messageList
3415 table as a dragging source and the leaf of the navigation tree as
3416 dnd destinations to the DNDManager.
3418 * UI/WebServerResources/generic.js: initialize tabs from the
3419 "unload" event listener that is added programmatically instead of
3420 from the template... Also, added the new DNDManager object.
3422 * UI/WebServerResources/HTMLTableElement.js: added code to
3423 simulate XUL drag n drop events. This code will possibly be moved
3424 to HTMLElement.js instead later...
3426 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3427 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): same as
3430 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3431 -_qualifierForFilter:filter]): only search records which starts
3432 with the specified pattern.
3434 2006-11-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3436 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
3437 -asQPSubjectString]): new method that returns the special QP
3438 string with its qp declaration for email subjects.
3439 ([SOGoDraftObject -bodyPartForText])
3440 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): don't
3441 double-encode data in UTF-8.
3443 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3444 -newStartDate]): new method to determine the start date depending
3445 on the URL parameters, the current day and the current time.
3446 ([UIxComponentEditor -toolbar]): new method to determine the
3447 filename of the toolbar that should be drawn depending on the
3448 ownership and the list of attendees of the task/event wrt to the
3451 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
3452 -setDayStartHour:aStartHour]): adjust the minutes to the next
3453 quarter of hour, if not already set to a quarter.
3455 * UI/WebServerResources/UIxAppointmentEditor.js,
3456 UI/WebServerResources/UIxTaskEditor.js: added code to manage start
3459 2006-11-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3461 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3462 -loadValuesFromComponent:component]): handles access class
3463 (privacy) and status.
3465 * UI/Contacts/UIxContactsListViewContainer.m
3466 ([UIxContactsListViewContainer -additionalFolders]): return nil if
3467 [self additionalAddressBooks] returns an empty string.
3469 2006-11-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3471 * UI/Scheduler/UIxCalMonthView.m ([UIxCalMonthView
3472 rangesOf7Days]): enhanced and debugged algorithm to feed the array
3473 with slices where the first day is still in the requested month.
3475 * UI/Templates/UIxPageFrame.wox: the logConsole is created only on
3478 * UI/SOGoUI/SOGoAptFormatter.m: added code to handle the display
3479 of events in the day boxes of the calendar's monthly view.
3481 * SoObjects/Appointments/SOGoTaskObject.m ([SOGoTaskObject
3482 -davContentType]): declare "text/calendar".
3484 * SoObjects/Appointments/SOGoAppointmentObject.m
3485 ([SOGoAppointmentObject -davContentType]): declare
3488 * SoObjects/Appointments/SOGoAppointmentFolder.m
3489 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): certain
3490 HTTP methods are handled by SOPE and requires nil to be returned,
3491 this method now invokes the new
3492 "requestNamedIsHandledLater:inContext:" method to check that.
3493 ([SOGoAppointmentFolder
3494 -requestNamedIsHandledLater:nameinContext:context]): new methods
3495 that returns "YES" only for the "OPTIONS" http method (for now...).
3496 ([SOGoAppointmentFolder -davComplianceClassesInContext:]):
3497 overloaded method to append the "access-control" and
3498 "calendar-access" DAV abilities to the initial declaration.
3500 * UI/Scheduler/UIxCalMonthView.[hm]: rewritten module entirely to
3501 imitate the look of Sunbird/Lightning's monthly view.
3503 * UI/Scheduler/UIxCalMonthView.[hm]: renamed to
3504 UIxCalMonthViewOld.[hm].
3506 2006-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3508 * UI/Scheduler/UIxFreeBusyUserSelectorTable.m
3509 ([UIxFreeBusyUserSelectorTable -currentContactHasStatus]): new
3511 ([UIxFreeBusyUserSelectorTable -currentContactStatusImage]):
3512 returns an image name based on the participation status of the
3515 * UI/WebServerResources/SchedulerUI.js: same strip down as for
3518 * UI/Contacts/UIxContactsListViewContainer.m ([UIxContactsListViewContainer -additionalAddressBooks])
3519 ([UIxContactsListViewContainer -additionalFolders])
3520 ([UIxContactsListViewContainer -setCurrentAdditionalFolder:newCurrentAdditionalFolder])
3521 ([UIxContactsListViewContainer -currentAdditionalFolder]): new
3522 methods to handle the external addressbooks a user has subscribed
3523 too, by retriving them from his preferences.
3525 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3526 -updateAdditionalAddressBooksAction]): new method that updates the
3527 user settings with the list of addressbook he has subscribed to.
3529 * UI/Contacts/UIxContactsAddressBooksSelection.m: new component
3530 module for the address book selector.
3532 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
3533 a toolbar with two buttons ("add" and "remove") to manage the
3534 additional addressbooks a user might subscribe to.
3536 * UI/WebServerResources/ContactsUI.js: added code to handle
3537 "external addressbooks" from the Javascript point-of-view, by
3538 extending existing methods and adding code for the "add ab" and
3539 "remove ab" buttons.
3541 * UI/WebServerResources/generic.js: moved extensions methods to
3542 DOM elements to separate files for better clarity.
3544 * UI/Common/UIxPageFrame.m ([UIxPageFrame -pageContentClasses]):
3545 new method that returns "pageContent" as class, but also "popup"
3546 for the DIV where the page content lies, so that we can manipulate
3547 the content of popup's with CSS identifiers.
3549 2006-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3551 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
3552 -displayStyle]): new method that returns a string containing the
3553 css style relative to the current appointment cell. This code is
3554 currently inactive but might be reused later.
3556 * UI/WebServerResources/SchedulerUI.js: added code to handle the
3557 display of the selected day (the day pointed by the mouse, or the
3558 current day when changing the view).
3560 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
3561 -dayCellClasses]): new method that returns a string containing the
3562 css classes applicable to the current cell, depending on the
3563 position of the day in the week, the day of today and the
3566 * UI/Scheduler/UIxCalCalendarsListView.m ([UIxCalCalendarsListView
3567 -currentContactAptBorder]): new method that returns the
3568 appropriate border color for the specified user.
3570 * SoObjects/Appointments/SOGoAppointmentObject.m
3571 ([SOGoAppointmentObject
3572 -saveContentString:contentStringbaseVersion:baseVersion]):
3573 overloaded method that parse new events and detects if they have
3574 an organizer or not. If they are new and have no organizer set
3575 (Sunbird/Lightning...), the owner of the event is set as
3578 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: new
3579 category that provides facility methods and interfaces to the
3582 * SoObjects/Contacts/product.plist: give full access to ANY
3583 authenticated user, not just the owner (to every objects...).
3585 2006-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3587 * UI/WebServerResources/UIxFreeBusyUserSelector.js: make sure
3588 every replica widgets are declared as such to their master
3589 counterpart. Take the days into account when displaying the time
3590 range taken by the appointment.
3592 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
3593 -getICalPersonsFromValue:selectorValue]): method taken from
3594 UIxFreeBusyUserSelector, that is shared both by
3595 UIxFreeBusyUserSelector and UIxFreeBusyUserSelectorTable.
3597 * SoObjects/Appointments/SOGoAppointmentFolder.m
3598 ([SOGoAppointmentFolder
3599 -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.
3601 * UI/Scheduler/UIxFreeBusyUserSelectorTable.[hm]: new subcomponent
3602 derived and taken as a subset of UIxFreeBusyUserSelector that
3603 implements the table part of the FreeBusy view. Most of the
3604 methods of UIxFreeBusyUserSelector relative to that table were
3605 moved into UIxFreeBusyUserSelectorTable, which can also be used as
3606 a standalone view for AJAX operations.
3608 2006-10-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3610 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3611 -vCard]): change reverted.
3613 * UI/Contacts/UIxContactEditor.m: check whether the client contact
3614 folder has selector "globallyUniqueObjectId" before calling that
3617 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3618 -vCard]): the "setVClass" NGVCard method really is "setClass"
3621 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3622 ([SOGoContactLDAPFolder -_searchAttributes]): fixed typo to
3623 request the "streetAddress" instead of the "streetaddress".
3624 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): lookup
3625 mails that *contain*, and not just *start with* the search
3628 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3629 -vCard]): mark address returned from LDAP as the work address.
3631 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: made the whole
3632 span covered with the anchor, not only the textual information
3635 * UI/Templates/SchedulerUI/UIxCalMainView.wox: specify the type
3636 argument (event or task) to newEvent in the appointmentListMenu.
3637 Make the appointmentsListView display the appointmentsListMenu.
3639 * UI/SOGoUI/SOGoAptFormatter.m: enlarge the text size limit from
3640 12 to 50 before displaying "...".
3641 ([SOGoAptFormatter -fullDetailsForApt::]): display location only
3642 if its length > 0, whether location itself is nil or not...
3643 ([SOGoAptFormatter -tooltipForApt::_refDate]): display information
3644 of which the length > 0.
3646 2006-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3648 * UI/WebServerResources/UIxAppointmentEditor.js: correctly handles
3649 french and ISO dates.
3651 * UI/Scheduler/UIxFreeBusyUserSelector.[hm]: added code an ivars
3652 from UIxContactSelector to handle contact lists (current and
3653 additional contacts).
3655 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3656 -_freeBusyAsText]): added handling of an "additional"-named query
3657 parameter that describe the number of additional days after
3658 enddate that should be returned.
3660 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3661 -_responseForResults:results]): give priority to results with
3662 "c_uid" fields. If none returned, use the first contact received.
3664 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3665 -extractQuickFieldsFromEvent:_event]): changed "TENTATIVE" code to
3666 2 and "CANCELLED" to 0.
3668 2006-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3670 * UI/WebServerResources/UIxAppointmentEditor.js: handle conversion
3671 of start and end dates to short string dates.
3673 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3674 -readFreeBusyAction]): new method that returns an array of numbers
3675 corresponding to the state in the freebusy of each "quarter of an
3676 hour" between the "sday" and "eday" date parameters passed in the
3677 url. This permits to handle the display of the freebusy with Ajax
3679 ([SOGoUserHomePage -_freeBusyAsText]): add 2 days to the end date
3680 since the free busy displays 2 days ahead.
3682 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3683 -contactSearchAction]): new action that returns the uid and the
3684 username + email of the user whose name contain the value of the
3685 "search" url parameter.
3687 * SoObjects/Appointments/SOGoAppointmentFolder.m
3688 ([SOGoAppointmentFolder
3689 -fetchFreebusyInfosFrom:_startDateto:_endDate]): added fields
3690 useful for the computing of the status of the freebusy.
3692 * UI/Scheduler/UIxFreeBusyUserSelector.m ([UIxFreeBusyUserSelector
3693 -init]): new component that incarnates a user selector for events
3694 inspired by the new one found in Thunderbird Lightning.
3696 2006-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3698 * UI/WebServerResources/generic.js: added code to enable or
3699 disable anchor visually (following our internal algorithm).
3701 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -init]):
3702 added new "url" ivar with its classic accessors.
3703 ([UIxComponentEditor -urlButtonClasses]): new method that returns
3704 the class strings for the url button on the appointment/task
3705 editor (depending on the validity of the url).
3707 * UI/Templates/SchedulerUI/UIxTaskEditor.wox,
3708 UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: start rewriting
3709 the template to match the Lightning's new task/appointment editor.
3711 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor -saveValuesIntoAppointment:_appointment]): initialize url from the components'url.
3713 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveValuesIntoTask:_task]): initialize url from the components'url.
3715 2006-10-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3717 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3718 ([SOGoContactLDAPFolder
3719 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): perform the searchs on objects which start with instead of contain the lookup key.
3721 * SoObjects/Appointments/SOGoAptMailNotification.[hm]: work on
3722 iCalEntityObject instances instead of just iCalEvent's.
3724 * SoObjects/Appointments/SOGoAppointmentFolder.m
3725 ([SOGoAppointmentFolder
3726 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): set ownership of returned records by adding an "owner" key to the resulting dictionaries.
3728 * SoObjects/SOGo/NSObject+Owner.[hm]: removed module since it's a
3729 bad way of handling ownership that way.
3731 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3732 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): search also
3733 on "cn", just like Mozilla.
3735 2006-10-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3737 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]):
3738 "to" should be retained, otherwise it will be autoreleased and a
3741 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3742 -writeAction]): updated method to fetch the card before initing
3745 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3746 -extractQuickFieldsFromTodo:_task]): fixed to use NSNull instead
3749 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
3750 -iCalStringTemplate]): start and due date are now optional.
3752 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
3753 -setDayStartHour:aStartHour]): added a new "isDisabled" ivar with
3754 appropriate accessors to be settable through the templates.
3756 * UI/Scheduler/UIxDatePicker.m ([UIxDatePicker -init]): added a
3757 new "isDisabled" ivar with appropriate accessors to be
3758 settable through the templates.
3760 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3761 -availableCalendars]): new method that list the calendars to which
3762 the user has subscribed.
3763 ([UIxComponentEditor -componentOwner]): returns the owner of the
3766 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3767 -extractQuickFieldsFromTodo:_task]): set the start and enddate of
3768 quickentries to null whenever each or all of them are null, by
3769 providing an impossible timestamp from with NSNotFound as value.
3771 2006-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3773 * UI/WebServerResources/UIxMailEditor.js: update the algorithm
3774 that handles the creation of new fields with the new APIs and the
3775 new node structure on the page.
3777 * UI/Scheduler/UIxAppointmentEditor.m,
3778 UI/Scheduler/UIxTaskEditor.m:
3779 refactored to user UIxComponentEditor as parent class.
3781 * UI/Scheduler/UIxComponentEditor.[hm]: new class module
3782 containing the methods common to the UIxTaskEditor and the
3783 UIxAppointmentEditor.
3785 2006-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3787 * SoObjects/Appointments/SOGoAppointmentFolder.m
3788 ([SOGoAppointmentFolder -doCalendarQuery:context]): now supports
3789 the handling of time-ranges.
3791 * UI/WebServerResources/ContactsUI.js: specify a notification type as
3792 parameters when onConfirmContactSelection in invoked.
3794 * UI/WebServerResources/generic.js: specify a notification type as
3795 parameters when onContactRemove in invoked.
3797 * UI/WebServerResources/SchedulerUI.js: when the user deselects
3798 all calendars, select his entry.
3800 2006-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3802 * UI/WebServerResources/SchedulerUI.js: edit and delete events
3803 with their owner-relative urls. Generate a correct entry in the
3804 css color table when a user is added to the calendars list. Put
3805 the same color next to the user id.
3807 * UI/WebServerResources/generic.js: implemented some new helper
3810 * SoObjects/Appointments/SOGoAppointmentFolder.m
3811 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): don't delete
3812 entries if their owner is not the current user.
3814 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
3815 -displayClasses]): return the correct class for the current event
3816 representation depending on its owner.
3818 * UI/Scheduler/UIxCalCalendarsListView.m: added method to create
3819 and associate a color for each user login depending on its
3820 position in the list.
3822 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView
3823 -currentRowCSSClass]): return the correct class for the current
3824 row depending on the owner of the event.
3826 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
3827 -setColors:colors]): new method to associate a color table with
3828 each user in the list.
3830 * SoObjects/Appointments/SOGoAppointmentFolder.m
3831 ([SOGoAppointmentFolder
3832 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): associate each returned record with the owner of the table they are retrieved from.
3834 * SoObjects/SOGo/NSObject+Owner.[hm]: new extension module to
3835 NSObject to associate an instance with a user.
3837 2006-10-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3839 * UI/WebServerResources/SchedulerUI.js: added handling of multiple
3842 * UI/WebServerResources/ContactsUI.js: added handling of
3843 notification of changes to contact selectors.
3845 * UI/WebServerResources/generic.js: added handling of notification
3846 of changes to contact selectors.
3848 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3849 -updateCalendarsAction]): proxy method to update the user
3850 preference table with the new selected calendar uids.
3852 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3853 -calendarsContactsAction]): new method.
3855 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector -setCheckedBoxes:boxes])
3856 ([UIxContactSelector -setHasCheckBoxes:aBool])
3857 ([UIxContactSelector -isCheckBoxChecked]): new accessors method to
3858 permit the drawing of checkboxes instead of card icons.
3860 * UI/Scheduler/UIxCalCalendarsListView.m: new component class that
3861 wrap a selector the the "Calendars" tab.
3863 * UI/Contacts/UIxContactsCalendarsSelection.m: buttons for the
3864 new user calendar selector.
3866 2006-10-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3868 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: time ranges
3869 may cover hour 0 to hour 23.
3871 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
3872 -iCalStringFromQueryParameter:format:]): dates explicitly set to
3875 * UI/WebServerResources/SchedulerUI.js: manage both lists of
3876 objects wrt to the toolbar actions.
3878 * UI/WebServerResources/generic.js: added code to the "String"
3879 class to decode number-encoded char entities.
3881 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3882 -batchDeleteAction]): new method to delete selected entries in the
3885 * SoObjects/Appointments/SOGoAppointmentFolder.m
3886 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): new method
3887 that delete identified entries in batch.
3889 * UI/SOGoUI/UIxComponent.m ([UIxComponent
3890 -jsCloseWithRefreshMethod:methodName]): new method with explicit purpose.
3892 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]),
3893 UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
3894 -saveAction]), UI/MailerUI/UIxMailEditor.m ([UIxMailEditor
3895 -sendAction]), UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3897 return a UIxJSClose component if everything went fine.
3899 * UI/Scheduler/UIxTaskEditor.h: interface extracted from
3902 * UI/Scheduler/UIxAppointmentEditor.h: interface extracted from
3903 UIxAppointmentEditor.m.
3905 * UI/Common/UIxJSClose.[hm]: new UIxComponent designed to display
3906 a very light page with javascript code to close a window, by
3907 calling a method on the opener if specified. This component is
3908 designed to work as a response to form postings.
3910 2006-10-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3912 * SoObjects/Appointments/SOGoTaskObject.[hm]: clone of
3913 SOGoAppointmentObject adapted for the handling of tasks.
3915 * SoObjects/Appointments/NSArray+Appointments.[hm]: category
3916 extracted from SOGoAppointmentObject.
3918 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
3919 -saveUrl]): returns the url needed to POST the new form to.
3920 redirect the user to <aptid>/editAsAppointment instead of /edit,
3921 so that SOGoAppointmentFolder can return the correct object type.
3923 * SoObjects/SOGo/NSObject+AptComparison.m ([NSObject
3924 -compareAptsAscending:_other]): accept empty start or end dates.
3926 * SoObjects/Appointments/SOGoAppointmentFolder.m
3927 ([SOGoAppointmentFolder
3928 -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.
3929 ([SOGoAppointmentFolder -doCalendarQuery:context]): fetch
3930 components of type "vtodo" as well as "vevent".
3931 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): if the
3932 url specified ends with AsTask or AsAppointment, returns the
3933 an object of the appropriate class, otherwise deduce it from its
3934 content if the HTTP method is "PUT", otherwise read its type from
3937 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3938 -extractQuickFieldsFromTodo:_task]): extract quick fields from
3941 * UI/Scheduler/UIxCalView.m ([UIxCalView
3942 -fetchCoreAppointmentsInfos]): replacement methods for
3943 fetchCoreInfos but by retrieving object with component "vevent".
3944 ([UIxCalView -fetchCoreTasksInfos]): same as above for "vtodo"
3947 * UI/Scheduler/UIxCalTasksListView.[hm]: clone of
3948 UIxCalAptListView adapted for the handling of tasks.
3950 * UI/Scheduler/UIxTaskProposal.[hm],
3951 UI/Scheduler/UIxTaskView.[hm], UI/Scheduler/UIxTaskEditor.[hm]:
3952 clones of the UIxAppointment* classes for the handling of tasks.
3954 * UI/WebServerResources/UIxTaskEditor.js: clone of
3955 UIxAppointmentEditor adapted for the handling of tasks.
3957 * UI/WebServerResources/SchedulerUI.js: added support for tasks.
3958 Scroll the daily view to the appropriate hour when an appointment
3959 is selected in the appointments list.
3961 2006-10-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3963 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
3964 -setDayStartHour:aStartHour]): specifies the user timezone on the
3967 * UI/Scheduler/UIxAppointmentEditor.m: indicate DTSTAMP with "GMT"
3970 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate -adjustedDate])
3971 ([NSCalendarDate -driftedDate]): methods made useless by a better
3972 comprehension of the NSTimeZone API...
3974 2006-10-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3976 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): call
3977 new methods from the NSCalendarDate methods.
3979 * SoObjects/SOGo/NSCalendarDate+SOGo.m: module replacing and
3980 extending UI/Scheduler/NSCalendarDate+Scheduler.m.
3982 +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).
3983 ([NSCalendarDate -adjustedDate]): this method returns another
3984 instance set to the correct hour after the original date was set
3985 from a non-GMT timezone. This date can be used for storage.
3986 ([NSCalendarDate -driftedDate]): this method does exactly the
3987 opposite of -adjutedDate, that is, it enables the method
3988 hourOfDay, minuteOfHour etc... to return the values according to
3989 the original date's timezone. This date CANNOT be used for storage.
3991 * UI/Scheduler/NSCalendarDate+Scheduler.m ([NSCalendarDate
3992 -shortDateString]): new method that will return a "short date
3993 string" (yyyymmdd) from a calendar date object.
3995 * UI/SOGoUI/UIxComponent.m ([UIxComponent
3996 -_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.
3998 * Main/sogod.m (main): initialize the NSTimeZone's defaultTimeZone
3999 to the value of SOGoServerTimeZone or "Canada/Eastern" if not found.
4001 2006-10-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4003 * UI/WebServerResources/SchedulerUI.js: added code to scroll the
4004 view of the day at the height of hour 8:00.
4006 * UI/Scheduler/UIxCalView.m ([UIxCalView -dayStartHour]): returns 0.
4007 ([UIxCalView -dayEndHour]): returns 24.
4009 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView -defaultAction])
4010 ([UIxContactFoldersView -newAction]): invoke
4011 _selectActionForApplication: on self with the proper attribute too.
4013 * UI/Contacts/UIxContactsSelectionViewContainer.m: removed since
4014 we now use the action mechanism in UIxContactsListView to keep the
4015 same view for the contact selectors and the regular contact view.
4017 * UI/Contacts/UIxContactsListViewContainer.[hm]: replaces
4018 UIxContactsListViewContainerBase.[hm]
4020 * UI/Contacts/UIxContactsListView.[hm]: replaces UIxContactsListViewBase.[hm]
4022 * UI/WebServerResources/generic.js: generalized emailstring
4023 handling functions. Generalized address book access functions.
4025 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
4026 -isPopup]): return YES if the "popup" query parameter is set.
4028 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4029 -defaultAction]): keep the url parameters when redirecting.
4030 ([UIxContactFoldersView -selectForSchedulerAction])
4031 ([UIxContactFoldersView -selectForMailerAction]): new action
4032 methods for the /scheduler-contacts and /mailer-contacts invocations.
4034 * SoObjects/SOGo/SOGoObject.m: compose the action url using the
4035 newly available NSString+URL category.
4037 * SoObjects/SOGo/NSDictionary+URL.m ([NSDictionary
4038 -asURLParameters]): handle dictionary entries which could be
4039 instances of NSArray rather than NSString.
4041 * SoObjects/SOGo/NSString+URL.m ([NSString
4042 -composeURLWithAction:actionparameters:urlParametersandHash:useHash]): when composing the url, remove the encoded parameters first since they will be added later.
4043 ([NSString -urlWithoutParameters]): new method that returns the
4044 url without its parameters.
4046 * SoObjects/SOGo/NSString+iCal.h: deleted obsolete file.
4048 * SoObjects/SOGo/NSDictionary+URL.[hm],
4049 UI/SOGoUI/NSString+URL.[hm]: moved from UI/SOGoUI/.
4051 * UI/WebServerResources/UIxMailEditor.js: add support for
4052 additions of different types (to, cc, bcc) of recipients from the
4055 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): added the
4058 * UI/Contacts/UIxContactsMailerSelection.m,
4059 UI/Contacts/UIxContactsSchedulerSelection.m: classes replacing
4060 UI/Contacts/UIxContactsSelectionView.m to provide a different set
4061 of widgets depending on the application invoking the contact list.
4063 2006-09-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4065 * UI/WebServerResources/ContactsUI.js: hide the current contact
4066 whenever the user changes of contact folder.
4068 * UI/WebServerResources/UIxContactEditor.js: the contact UID is
4069 now provided by the template when loading the page.
4071 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
4072 -iCalPersonWithUid:uid]): new method taken from removed module
4075 2006-09-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4077 * UI/Scheduler/UIxAppointmentView.m ([UIxAppointmentView
4078 -categoriesAsString]): same as below.
4080 * UI/Scheduler/UIxAppointmentEditor.m: adapted by using the new
4081 vcalendar API's iCalEvent instead of the removed SOGoAppointment.
4083 * SoObjects/Appointments/SOGoAppointmentObject.m
4084 ([SOGoAppointmentObject -calendarFromContent:cnt]): new helper method.
4085 ([SOGoAppointmentObject -firstEventFromCalendar:calendar]): new
4088 * SoObjects/Appointments/SOGoAppointmentFolder.m
4089 ([SOGoAppointmentFolder -doCalendarQuery:context]): added a
4090 hackish test to detect whether the request concernes VEVENT's or
4091 anything else. Return events only in the former case.
4092 ([SOGoAppointmentFolder
4093 -fetchOverviewInfosFrom:_startDateto:_endDate]): retrieve the
4094 c_name quickfield so that the calendar list can identify the
4095 appointments with their complete "filename".
4097 * OGoContentStore/OCSiCalFieldExtractor.m: use CardGroup's
4098 groupsOfClass:fromSource: to parse the given vcalendar.
4100 * UI/Scheduler/iCalRecurrenceRule+SOGo.m: removed obsolete class.
4102 * UI/Scheduler/SOGoAppointment+UIx.h: removed obsolete class.
4104 * SoObjects/SOGo/SOGoAppointmentICalRenderer.[hm]: removed
4107 * SoObjects/SOGo/SOGoAppointment.[hm]: removed obsolete class.
4109 2006-09-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4111 * SoObjects/Appointments/SOGoAppointmentFolder.m
4112 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): be
4113 sensitive to the CalDAV method names.
4114 ([SOGoAppointmentFolder -doCalendarQuery:context]): method for the
4115 "calendar-query" CalDAV method name.
4117 * UI/WebServerResources/ContactsUI.js: removed a lot of useless
4118 code coming originally from MailerUI.js.
4120 * UI/WebServerResources/UIxContactEditor.js: imitate the
4121 Thunderbird address book by completing the display name with the
4122 content of the first and last name fields, until the display name
4123 is modified manually.
4125 * UI/WebServerResources/generic.js: added a "trim" method to the
4128 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
4129 -displayName]): new method that returns the display name from "cn"
4130 or from the "displayName" key if found.
4132 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4133 -initSnapshot]): check if "[card n]" returns anything to avoid a
4136 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): new method
4137 that returns an unparsed doctype definition for the pages.
4139 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4140 -vCard]): set the card's fn to attribute "displayName" if found
4143 2006-09-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4145 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4146 -vCard]): handle the "streetAddress" and "l" fields.
4148 * UI/Templates/MailerUI/UIxMailEditor.wox: arranged the message
4149 header fields by converting the tables to DIVs and SPANs.
4151 * UI/WebServerResources/generic.css: attempted unification of font
4152 families and size across all the elements. changed the
4153 logConsole's "position" from "fixed" to "absolute" to avoid
4156 2006-09-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4158 * UI/WebServerResources/ContactsUI.js (uixDeleteSelectedContacts):
4159 empty the contact view when the current contact is being deleted.
4161 * UI/WebServerResources/MailerUI.js (newContactFromEmail): fully
4162 parse the email field and provide the address full name if found
4163 as the "contactFN" parameter.
4165 * UI/WebServerResources/generic.js (openMailTo): do not give a
4166 name to the opened window so that serveral ones can be opened at
4169 * UI/MailPartViewers/UIxMailPartTextViewer.m
4170 ([UIxMailPartTextViewer -flatContentAsString]): override method by
4171 replacing carriage returns with "<br />" in the result string from
4172 super's implementation.
4174 * UI/Contacts/UIxContactView.m ([UIxContactView
4175 -_urlOfType:aType]): don't manage non-mailto urls through
4176 javascript, let the user decide what's best for him.
4178 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4179 -newAction]): transfer all the query parameters by using the
4180 "asURLParameters"'s result string from [self queryParameters].
4182 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4183 -initSnapshot]): retrieve "contactEmail" and "contactFN" from the
4184 query parameters and put their values (if any) into the snapshot.
4186 * UI/Contacts/UIxContactView.m ([UIxContactView -note]): convert
4187 carriage-returns to "<br />".
4188 ([UIxContactView -workCompany]): explicitly initialize company to
4189 nil if org is nil or empty.
4191 * UI/WebServerResources/UIxContactEditor.js: updated validation
4192 code after we added and renamed some fields.
4194 * UI/WebServerResources/ContactsUI.js: added code to cache contact
4195 cards and to handle card updates.
4197 2006-09-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4199 * UI/Contacts/UIxContactView.m ([UIxContactView -hasOtherInfos]):
4200 test the length of the returned string since they will never be
4203 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor -saveAction]):
4204 return self if the process went successful, returns an exception
4205 otherwise (and only otherwise...).
4207 * OGoContentStore/OCSContactFieldExtractor.m
4208 ([OCSContactFieldExtractor -extractQuickFieldsFromVCard:_vCard]):
4209 adapted method to the new VCard api. Since the cards are stored in
4210 vcard format, we no longer deal with a dictionary but with a
4213 2006-09-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4215 * UI/Contacts/UIxContactView.m ([UIxContactView -preferredEmail]):
4216 return a string with a "mailto" url.
4217 ([UIxContactView -_urlOfType:aType]): generic method to return a
4218 url string with a html anchor pointing to it.
4220 * UI/Contacts/UIxContactEditor.[hm]: UIxContactEditorBase renamed
4221 since subclass "UIxContactEditor" did nothing. Implemented code to
4222 display and modify the values parsed from the vcards, displayed in
4223 a way similar to the Thunderbird addressbook.
4225 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4226 -save]): new dummy method.
4228 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
4229 -save]): made method void.
4231 2006-09-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4233 * UI/Contacts/UIxContactView.m: added many wrapper methods to
4234 display blocks of data à la Thunderbird Addressbook. If data is
4235 available, those wrappers (around the NGVCard methods) will
4236 enclose the results in a proper HTML output with the correct label
4237 (if present), otherwise it will return an empty string.
4238 ([UIxContactView -vcardAction]): new action to return the contact
4239 as text/vcard (for exporting).
4241 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4242 +contactEntryWithName:aNamewithLDAPEntry:anEntryinContainer:aContainer]): adapted the mapping of the LDIF data with the new NGVCard API.
4244 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
4245 -vCard]): create a new NGVCard instance when no data is available
4247 ([SOGoContactGCSEntry -save]): save the vCard using the new
4248 "versitString" API method/message.
4250 * UI/Contacts/UIxContactView.h: separated interface from
4253 * UI/WebServerResources/ContactsUI.js: add-ed code to download card
4254 views and display them beneath the list.
4256 2006-09-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4258 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -userTimeZone]): retain
4259 the timezone even when it's the server timezone.
4261 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
4262 -privateContacts:inContext:]): no long configure the calendar
4263 object with the user's timezone since it's now accessible
4264 application-wide throught the SOGoObject methods.
4266 * UI/SOGoUI/UIxComponent.[hm]: removed the "viewTimeZone" ivar and
4267 method. Removed the "backendTimeZone" method.
4269 * UI/MainUI/SOGoUserHomePage.[hm]: made a subclass of UIxComponent
4270 instead of SoComponent.
4272 * SoObjects/Appointments/SOGoAppointmentObject.m:
4273 ([SOGoAppointmentObject -viewTimeZoneForPerson:_person]): returns
4274 [self serverTimeZone] instead of "EST" (which was removed).
4276 * SoObjects/Appointments/SOGoAppointmentFolder.[hm]: removed the
4277 "timeZone" ivar and its accessors.
4279 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -serverTimeZone]): new
4280 centralized method returing the timezone configured in the
4281 userdefaults db or "Canada/Eastern" if missing.
4282 ([SOGoObject -userTimeZone]): new centralized method returing the
4283 timezone of the current user or the server timezone if missing
4284 from the user configuration table.
4286 2006-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4288 * UI/WebServerResources/SchedulerUI.js: implemented caching of
4291 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]):
4292 return a path based on the object's context instead of the first
4293 level in SOGo's object hierarchy...
4295 2006-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4297 * UI/Templates/SchedulerUI/UIxCalDayTable.wox: day columns can now
4300 * UI/Templates/SchedulerUI/UIxCalDateSelector.wox: pass the user's
4301 timezone ([self viewTimeZone]) to the WEMonthOverview component to
4302 avoid a confusion with the days.
4304 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: appointments
4307 * UI/WebServerResources/SchedulerUI.js: implemented a mechanism to
4308 imitate Sunbird's synchronization between the 3 visible views.
4310 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): make
4311 sure the numbers in dateString are formatted so as to take 4 chars
4312 for the year and 2 for the day and the month, otherwise
4313 NSCalendarDate will return a nil date.
4314 ([UIxComponent -applicationPath]): return a path based on the
4315 object's context instead of the second level in SOGo's object
4318 2006-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4320 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): add the
4321 user's timezone abbreviation to the date string passed as parameter to
4322 NSCalendarDate to generate an accurate date instance. Do the same
4323 when no date is specified and today is chosen.
4325 * UI/WebServerResources/UIxAppointmentEditor.js: convert the
4326 form's time values to integers before comparing them.
4328 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -currentStartTime])
4329 ([UIxCalAptListView -currentEndTime]): initialize the resulting
4330 dates timezone with [self viewTimeZone].
4332 * UI/SOGoUI/UIxComponent.m ([UIxComponent -init]): new
4333 "viewTimeZone" ivar destined to hold an instance of the user's
4335 ([UIxComponent -viewTimeZone]): take the timezone from the user's
4338 2006-08-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4340 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: completely
4341 rearranged the layout.
4343 * UI/WebServerResources/UIxAppointmentEditor.js: added code to
4344 manage showing and hiding appointment details.
4346 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
4347 -privateContacts:inContext:]): init the SOGoAppointmentFolder's
4348 timezone by taking the current user's timezone setting.
4350 * SoObjects/Appointments/SOGoAptMailNotification.m: same as below.
4352 * SoObjects/Appointments/SOGoAppointmentObject.m
4353 ([SOGoAppointmentObject -changeParticipationStatus:inContext:]):
4354 set default timezone to EST, although this code should be
4355 rewritten to handle a system and a user default value.
4357 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4358 -takeValuesFromRequest:_rqinContext:_ctx]): enhanced method to
4359 take the values from the hour and minute INPUTs when data is
4360 POSTed since we no longer use the UIxTimeSelector component.
4361 ([UIxTimeDateControl -selectableHours])
4362 ([UIxTimeDateControl -selectableMinutes]): new methods used by the
4363 template SELECTs to display reasonable and acceptable values
4364 instead of all the possibilities.
4366 * UI/WebServerResources/generic.js: adapted code for the new
4367 implementation of the UIxContactSelector component (added a
4368 "remove" button, removed the previous INPUT and replaced them with
4369 links of class "button").
4371 * UI/Scheduler/UIxTimeDateControl.h: separated interface from
4372 UIxTimeDateControl.m.
4374 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -currentAppointmentDay])
4375 ([UIxCalDayTable -currentAppointmentHour]): new methods that
4376 returns correctly formatted values used as attributes for JS code.
4378 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
4379 -initialContactsAsString]): renamed implementation of
4380 initialParticipants.
4381 ([UIxContactSelector -currentContactId])
4382 ([UIxContactSelector -currentContactName]): new methods used when
4383 listing the initial contacts in the widget. Currently, both return
4384 the person's cn but the latter should ultimately return a user
4387 * UI/Contacts/UIxContactSelector.h: separated interface from
4388 UIxContactSelector.m.
4390 * UI/Scheduler/UIxDatePickerScript.[hm]: component removed since
4391 all javascript code is now put in Scheduler.js/generic.js.
4393 * UI/Scheduler/NSCalendarDate+UIx.[hm]: category removed, code
4394 moved into NSCalendarDate+Scheduler instead.
4396 * SoObjects/Appointments/SOGoAppointmentFolder.m
4397 ([SOGoAppointmentFolder -setTimeZone:newTZ]): new method to
4398 configure the timezone from SOGoUserFolder when the instance is
4400 ([SOGoAppointmentFolder -viewTimeZone]): MET was removed. Returns
4401 the value of the new "timezone" ivar.
4403 2006-08-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4405 * UI/WebServerResources/SchedulerUI.{css,js}: added a tabview with
4406 the date selector in the first page and the container of the
4407 future calendar selector in the second page.
4409 * UI/WebServerResources/generic.js: added code for handling tabbed
4412 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productFrameworkName]):
4413 returns the bundle name associated to the current running product.
4415 2006-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4417 * UI/WebServerResources/UIxAppointmentEditor.js: fixed the AJAX
4418 exception by invoking a timeout on the opener rather than invoking
4419 the list refresh method.
4421 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]):
4424 * UI/Scheduler/UIxCalWeekView.m ([UIxCalWeekView -weekBeforePrevWeekQueryParameters])
4425 ([UIxCalWeekView -prevWeekQueryParameters])
4426 ([UIxCalWeekView -nextWeekQueryParameters])
4427 ([UIxCalWeekView -weekAfterNextWeekQueryParameters]): new methods
4428 that return the dates relatively to the current day.
4429 ([UIxCalWeekView -lastWeekName])
4430 ([UIxCalWeekView -currentWeekName])
4431 ([UIxCalWeekView -nextWeekName])
4432 ([UIxCalWeekView -weekAfterNextWeekName])
4433 ([UIxCalWeekView -_weekNumberWithOffsetFromToday:offset]): new
4434 methods that returns the label for the corresponding weeks.
4436 * UI/Scheduler/UIxCalDayTable.[hm]: new class module/component
4437 used by UIxCalDayView and UIxCalWeekView to display the events
4438 occuring in one or more days.
4440 2006-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4442 * UI/Scheduler/UIxCalMainView.m: extended class to populate the
4443 entries in the new "monthMenu" and "yearMenu".
4445 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]): new
4446 method to return the current day as a string formatted depending
4447 on the current locale.
4449 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
4450 ([UIxCalAptListView -endDate]): "today" is now the default filter
4451 for displayed events.
4452 ([UIxCalAptListView -currentSerialDay]): new method returning the
4453 date of the current enumerated appointment in serial form
4456 * UI/WebServerResources/SchedulerUI.js: added code to select the
4457 relevant day when an appointment is selected. Added code to popup
4458 a month and a year menu whenever the header entries are clicked in
4459 the calendar widget.
4461 * UI/WebServerResources/generic.js: made addClassName and
4462 removeClassName methods of HTMLElement.
4464 2006-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4466 * UI/WebServerResources/MailerUI.js: fixed the contact creation
4467 from email addresses.
4469 * UI/WebServerResources/generic.js: centralized the search-related
4470 functions here since the same code was used across the 3
4473 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
4474 ([UIxCalAptListView -endDate]): return the required dates needed
4475 depending on the value given to the "filterpopup" url parameter.
4477 * UI/Common/UIxToolbar.m ([UIxToolbar -buttonLabel]): reduced the
4478 code by invoking UIxComponent's labelForKey:.
4480 * UI/SOGoUI/UIxComponent.m ([UIxComponent -labelForKey:]): use
4481 [self pageResourceManager] instead of [self resourceManager].
4483 * UI/Contacts/UIxContactEditorBase.m: invokes
4484 globallyUniqueObjectId on the clientobject's class instead of the
4485 hardcoded "SOGoFolder".
4487 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4488 -newAction]): redirect the "new" action to the personal (default)
4491 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
4492 +objectWithName:inContainer:]): new constructor.
4494 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
4495 -lookupContactWithId:recordId]): always create a contact object,
4496 even if it does not exist.
4498 2006-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4500 * UI/Scheduler/UIxCalMainView.[hm]: new class to serve as a pseudo
4501 component that lays out the different components of SOGoCalendar.
4502 Only serves as an Objective-C counterpart to its xml template.
4504 * UI/Scheduler/UIxCalInlineMonthOverview.h: interface extracted
4507 * UI/Scheduler/UIxCalFilterPanel.[hm]: new class designed to
4508 display a widget to handle the information displayed in the
4509 appointments list. Not currently used, lacks implementation.
4511 * UI/Scheduler/UIxCalDateSelector.[hm]: new class designed to
4512 display a calendar as a dynamic widget from where one can select
4513 the current visible day.
4515 * UI/Scheduler/NSCalendarDate+Scheduler.[hm]: category code
4516 extracted from UIxCalInlineMonthOverview.m.
4518 * UI/Scheduler/UIxDatePicker.m: removed the jsPopup, jsCode and
4519 calendarPageURL methods. The javascript code is handled by .js
4520 files as much as possible...
4522 * UI/WebServerResources/ContactsUI.js,
4523 UI/WebServerResources/MailerUI.js: adapted to the code refactoring
4526 * UI/WebServerResources/SchedulerUI.js: implemented functions to
4527 handle the new widgets. XmlHTTPRequest code taken from
4530 * UI/WebServerResources/generic.js: put some functions related to
4531 element selections as methods to HTMLElement and HTMLTableElement.
4533 * UI/Scheduler/UIxCalAptListView.[hm]: new class designed to
4534 display the list of appointments (embodies the code-size of
4535 UIxCalAptListView; answers to the "aptlist" method).
4537 2006-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4539 * UI/Scheduler/UIxCalWeekOverview.m ([UIxCalWeekOverview
4540 -correctURLAction]): new short action method replacing the method
4541 below by taking far less code.
4543 * SoObjects/Appointments/SOGoAppointmentFolder.m
4544 ([SOGoAppointmentFolder -GETAction:]): removed method. Replaced
4545 with an action in the view-related code.
4547 * UI/Scheduler/UIxAppointmentEditor.m: invoke
4548 "stringByEscapingHTMLString" on the resulting value to avoid
4549 issues with accented characters.
4550 ([-jsCode]): removed method since the javascript code was merged
4551 into SchedulerUI.js.
4553 2006-08-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4555 * UI/Scheduler/iCalPerson+UIx.m ([iCalPerson +personWithUid:]):
4556 new class method that returns an iCalPerson based on the UID given
4559 * UI/Contacts/UIxContactsListViewContainerBase.m:
4560 UIxContactsListViewContainer renamed to serve as a base class for
4561 the contact lists in both the contact editor and the contact
4564 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4565 ([SOGoContactLDAPFolder
4566 -LDAPSetHostname:setPort:setBindDN:setBindPW:setContactIdentifier:
4567 setUserIdentifier:setRootDN:]): an LDAP field specifying the
4568 loginname of the users can now be specified.
4570 * UI/WebServerResources/generic.js: added code to manage contact
4571 lists through the new implementation of the UIxContactSelector.
4573 * UI/Templates: put the templates related to SchedulerUI in its
4576 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
4577 -asDictionaryWithAttributeNames:withUID:andCName:cName]): add an
4578 entry for "uid" with the field name representing the login name of
4579 the user in the corresponding LDAP branch.
4581 2006-08-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4583 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
4584 -lookupName:_keyinContext:_ctxacquire:_flag]): when the HTTP
4585 request is a PUT, always create an entry, even if we're not sure
4588 2006-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4590 * UI/WebServerResources/ContactsUI.js: implemented live-search.
4592 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
4593 -appendSystemSourcesInContext:context]): populated method with
4594 code that creates entries mapped to instances SOGoContactFolder,
4595 based on the configuration found in the NSUserDefaults under the
4596 key "SOGoLDAPAddressBooks".
4597 ([SOGoContactFolders
4598 -lookupName:nameinContext:contextacquire:acquire]):
4599 "contactsources" do not exist anymore, SOGoContactFolder was split
4600 into two classes: SOGoContactGCSFolder and SOGoContactLDAPFolder
4601 and one protocol: SOGOContactFolder, instead.
4602 ([SOGoContactFolders -contactFolders]): new accessor used by the
4603 views of SOGoContactXXXFolder to list the possible sources.
4605 * SoObjects/Contacts/SOGoContactObject.h: new protocol that
4606 defines the methods that UIxContactsView, ..Editor and so on...
4609 * SoObjects/Contacts/SOGoContactFolder.h: new protocol that
4610 defines the methods that UIxContactsListViewBase expects as well
4611 as the data fields returned in the contact lists.
4613 * SoObjects/Contacts/SOGoContactLDAPFolder.[hm]: new class that
4614 returns entries an LDAP server. Conforms to the new
4615 SOGOContactFolder protocol.
4617 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: new class that
4618 returns a vCard based on contact entries from an LDAP server.
4619 Conforms to the new SOGOContactObject protocol.
4621 * SoObjects/Contacts/NGVCardSimpleValue+Contact.m
4622 ([NGVCardSimpleValue -vCardEntryString]): generates the correct
4623 entry for the textual representation of the vCard.
4625 * SoObjects/Contacts/NGVCardSimpleValue+Contact.[hm]: new class
4628 * SoObjects/Contacts/SOGoContactGCSEntry.[hm]: new module name of
4629 "SOGoContactObject".
4631 * SoObjects/Contacts/NGVCard+Contact.m ([NGVCard -asString]): new
4632 method that generates a textual representation of the vcard.
4634 * SoObjects/Contacts/NGVCard+Contact.[hm]: new class extension.
4636 * SoObjects/Contacts/SOGoContactGCSFolder.[hm]: new module name of
4637 "SOGoContactFolder".
4639 * SoObjects/Contacts/SOGoContactSource.h,
4640 SoObjects/Contacts/SOGoPersonalAB.[hm]: unused classes and
4643 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
4644 -singleAttributeWithName:key]): new method that returns the first
4645 object associated with an ldap key (where generally one value is
4648 -asDictionaryWithAttributeNames:attributeNamesandCName:cName]):
4649 map the entry into an NSDictionary for processing by
4650 UIxContactsListViewBase.m with the least possible overhead.
4652 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: new class
4655 2006-08-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4657 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
4658 -privateContacts:inContext:]): now returns an instance of
4661 * UI/Contacts/UIxContactsListViewContainer.m
4662 ([UIxContactsListViewContainer -contactFolderName]): new method to
4663 return the absolute path to the current contact folder, called
4664 from within the template.
4666 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
4667 JS code to initialize the 'currentContactFolder' generic var.
4669 * SoObjects/Contacts/SOGoContactFolder.m ([SOGoContactFolder
4670 +contactFolderWithSource:inContainer:andName:]): new class
4671 method meant to return an instance connected to the specified
4672 source. Currently useless but won't be anymore in the next few
4675 * SoObjects/SOGo/SOGoUserFolder.h: commented out declaration of
4676 the "lookupFreeBusyObject" method since it does not exist.
4678 * UI/Contacts/UIxContactFoldersView.[hm]: new class module serving
4679 as a "view" for the SOGoContactFolders object. Does nothing but
4680 redirect the browser to the URL of the personal address book of
4681 the user. It does not even have a template.
4683 * SoObjects/Contacts/SOGoPersonalAB.[hm]: new class module
4684 implementing the SOGoContactSource protocol. Does nothing
4685 currently but will be used to implement access to the personal
4686 address book of the user stored in the SOGo database.
4688 * SoObjects/Contacts/SOGoContactSource.h: new "SOGoContactSource"
4689 protocol defining an API common to all possible types of contact
4692 * SoObjects/Contacts/SOGoContactFolders.[hm]: new class module
4693 serving as the root of the contact folders available to the
4694 current user. Correctly lists the contact sources in webdav.
4696 2006-08-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4698 * UI/MailerUI/UIxMailAccountsView.m ([UIxMailAccountsView
4699 -composeAction]): new action method that permits external object
4700 to write a message from the default (primary) account.
4702 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
4703 -initSnapshot]): new method with code taken from "defaultAction"
4704 but needed for others.
4705 ([UIxContactEditorBase -writeAction]): new action designed to
4706 compose the correct URL needed to obtain the MailerUI's email
4707 editor with the correct "mailto" parameter.
4709 * UI/Common/UIxSortableTableHeader.m: moved from MailerUI to
4710 Common so that other modules can use it.
4712 * UI/Contacts/UIxContactsListViewContainer.m: container to make it
4713 easier to manage both ajax and non-ajax requests.
4715 * UI/Contacts/UIxContactsFilterPanel.m: clone of
4716 UIxMailFilterPanel, but applicable to contact lists.
4718 * SoObjects/Contacts/NSDictionary+Contact.m ([NSDictionary
4719 -vcardContentFromSOGoContactRecord]): use the new standard methods
4720 created for each type of entry. If a line is determined to not
4721 contain information, it will be skipped.
4723 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
4724 +initialize]): init defaultMailDomain with the user default
4725 "SOGoDefaultMailDomain".
4727 2006-08-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4729 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
4730 -saveAction]): reorganized methods to only have ONE return point.
4731 Invoke saveRecord: directly on the clientObject instead of
4732 saveContentString, which does the same thing anyway.
4734 * SoObjects/Contacts/NSDictionary+Contact.m
4735 ([NSDictionary -vcardContentFromSOGoContactRecord]): extension
4736 method to convert the dictionary returned with the user submission
4737 to a record in VCARD format to be stored in the database.
4739 2006-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4741 * UI/WebServerResources/MailerUI.js: when opening the context menu
4742 of the message list, select the message below the mouse cursor and
4743 deselect the other selected messages temporarily. This mimics the
4744 behaviour of Thunderbird for that matter and was already
4745 implemented for the entries of the folder tree.
4747 * UI/MailerUI/UIxMailFolderMenu.m ([UIxMailFolderMenu
4748 -iconForMenuItem]): new method that returns the fully qualified
4749 relative URL to the icon representing the mailbox, or the default
4750 mailbox icon if needed.
4752 * UI/SOGoUI/UIxComponent.m ([UIxComponent
4753 -urlForResourceFilename:filename]): automatically return an empty
4754 string whenever the filename passed as argument is nil.
4756 * UI/WebServerResources/MailerUI.js: open the mailboxes with the
4757 "desc" parameter set to 1 so that they are sorted in descending
4758 order by default. Also, added "onHeaderClick()", triggered by
4759 clicking on the message list header elements.
4761 * UI/MailerUI/UIxMailSortableTableHeader.m
4762 ([UIxMailSortableTableHeader -isSortedDescending]): same as below.
4764 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
4765 -isSortedDescending]): defaults to "YES" when the sort order is
4768 2006-07-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4770 * UI/WebServerResources/MailerUI.js:
4771 - message cache: set the max num of cached messages to 20. Limit
4772 the cached message size to 30000 bytes.
4773 - ajax: when a message request is called while one is already
4774 being performed, the latter will be cancelled. Idem when
4775 retrieving the content of a mailbox.
4776 - folder tree: when a mailbox is selected because of the URL
4777 requested (initMailboxSelection), the dtree is expanded throughout
4778 the mailbox entry's parent hierarchy to ensure it is made visible
4779 when the page is being displayed. (new function: expandUpperTree).
4780 - mailbox loading: when loading a mailbox where a message was
4781 previously selected, we invoke its url with the "pageforuid"
4782 parameter correctly specified. During callback processing, we scan
4783 the table for the related row and reselect it.
4784 Also, the message area is set blank before loading any mailbox.
4786 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
4787 -defaultAction]): if the "pageforuid" parameter is passed in the
4788 url, take its value and invoke [self firstMessageOfPageFor:]
4789 consequently to deduce the first message to display. Otherwise,
4790 set it to "idx", otherwise set it to 0.
4791 ([UIxMailListView -firstMessageOfPageFor:]): new method
4792 that determines the first message of the page where the message
4793 passed as parameter is contained.
4795 * UI/WebServerResources/UIxMailListView.js: removed this module,
4796 its code was put in MailerUI.js instead.
4798 2006-07-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4800 * UI/MailerUI/UIxMailFolderMenu.m: a descendent of UIxMailTree
4801 which returns the nodes for the parent specified in "parentMenu".
4802 Used to generate the javascript code for the folder dtree.
4804 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: the components
4805 using that container-template are now using UIxMailMainFrame
4806 since UIxMailPanelFrame had no real interest. File removed.
4808 * UI/WebServerResources/dtree.{css,js}: new files to handle
4809 javascript-generated mailbox tree. Modified from original version
4810 by integrating the previous code with the one we are using for
4811 selections and mailbox handling. Minor visual enhancements too...
4813 2006-07-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4815 * SoObjects/Mailer/SOGoUser+Mail.m: if only one identity is to be
4816 returned, put it in an NSArray before returning it (fixes
4819 2006-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4821 * UI/SOGoUI/NSString+URL.m ([NSString -hostlessURL]): new method
4822 that returns a url string stripped from its "http://hostname"
4825 * UI/SOGoUI/NSDictionary+URL.[hm]: moved from UI/Common.
4827 * UI/SOGoUI/NSString+URL.[hm]: moved from UI/Common.
4829 2006-07-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4831 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
4832 -mailDateFormatter]): retrieve the timezone from the user settings
4833 and pass it to the returned dateFormatter. Also, the dateFormatter
4834 is kept in a static variable to avoid useless
4835 creations/destructions.
4837 * UI/MailerUI/UIxMailFormatter.m ([UIxMailDateFormatter
4838 -setTimeZone:newTimeZone]): new accessor to specify the timezone.
4840 * UI/MailerUI/UIxMailFilterPanel.m ([UIxMailFilterPanel -setSearchCriteria:])
4841 ([UIxMailFilterPanel -searchCriteria]): new methods, similar to
4842 s/Criteria/Text/ to handle the "criteria" form parameter.
4844 2006-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4846 * UI/WebServerResources/uix.css: enhanced the toolbar appearance
4847 to integrate better with the firefox look&feel. Added entries for
4848 the new "menu" DIV class (popup menus).
4850 * UI/WebServerResources/generic.js: added "sanitizeMailTo" which
4851 takes any chunk of text as param, detects the user email and the
4852 optional first and last names and return them in a well-formatted
4853 way. Renamed "getSelection" to "getSelectedNodes" to avoid a
4854 namespace conflict. Added "onMenuClick(node, event, menuId)" to
4855 handle popup menus through "onclick" element attributes (node =
4856 this, event = event and menuId = name of the menu DIV id to
4859 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
4860 -snapshot]): add an entry for "email" into the snapshot
4861 dictionary if a "contactEmail" URL parameter was detected and if
4862 the entry for "email" is empty.
4864 * UI/Contacts/Toolbars/SOGoContactFolder.toolbar: the "new card"
4865 button now invokes the newContact() js function in ContactsUI.js
4866 instead of opening "new" directly. newContact() pops up a window
4867 stripped from its navigation bar.
4869 * UI/Contacts/ContactsUI.js: new module specific to the ContactsUI
4870 bundle (AddressBook).
4872 * UI/Templates/MailerUI/UIxMailView.wox: added a div of class
4873 "menu" and id "addressMenu" have the header email addresses
4874 display it with the new menu code in generic.js.
4876 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: same as below +
4877 replaced the body tables with a div of class "pageContent"
4878 (standardization across the page templates).
4880 * UI/Templates/MailerUI/UIxMailMainFrame.wox: include
4881 productJavaScriptURL and pageJavaScriptURL (conditionnally) since
4882 those are now inherited from UIxPageFrame.
4884 * UI/MailerUI/UIxMailView.js: new file specific to UIxMailView.
4886 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]): if
4887 a "mailto" URL parameter is detected and the "to" array is empty,
4888 initialize "to" with the value of "mailto" before returning it.
4890 * UI/MailerUI/UIxMailEditorAction.m ([UIxMailEditorAction
4891 -composeAction]): rewrote method in a cleaner way and with usage
4892 of the URL extensions to NSString and NSDictionary (see below).
4893 Also, if a "mailto" url parameter is detected, pass it to the
4896 * UI/MailerUI/UIxMailMainFrame.m: subclassed from UIxPageFrame to
4899 * UI/Common/NSDictionary+URL.m ([NSDictionary -asURLParameters]):
4900 returns a parameter string to add to a base URL.
4902 * UI/Common/NSString+URL.m ([NSString
4903 -composeURLWithAction:parameters:andHash:useHash]): new method to
4904 compose a complete URL from an object URL with parameters and an
4905 optional '#' character.
4907 * UI/Common/UIxPageFrame.h: separated interface from
4910 2006-07-07 Wsourdeau Sourdeau <wsourdeau@inverse.ca>
4912 * UI/Scheduler/UIxAppointmentEditor.m: returns yes to "isPopup";
4914 * UI/WebServerResources/generic.js: added code to manage
4915 selections within HTML containers.
4917 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productJavaScriptURL]):
4918 added method to determine the possible URL for a product-specific
4919 javascript filename of the forme <productname>.js.
4920 ([UIxPageFrame -hasProductSpecificJavaScript]): new method.
4921 ([UIxPageFrame -isPopup]): new method to determine whether the
4922 application navigator bar should be displayed (main page) or not
4925 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
4926 -LDAPCheckLogin:_loginpassword:_pwd]): new method to authenticate
4927 the user through LDAP.
4929 2006-07-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4931 * The toolbar code from the MailerUI product was taken, renamed as
4932 "UIxToolBar" and put into UI/Common. Toolbar plists were created
4933 for the Contacts and Scheduler products and put in their respectir
4934 Toolbars/ subdirectories. Finally,
4935 UI/Templates/{UIxToolbarButton,UIxToolbarSeparator}.wox, and
4936 UI/Common/{UIxToolbarButton,UIxToolbarSeparator}.m were removed
4937 and an invocation to the UIxToolbar component was put at the top
4938 of UI/Templaces/UIxPageFrame.wox.
4940 * UI/Common/UIxToolbar.m: new "isLastGroup" method to determine
4941 within the templates whether a separator should be displayed.
4943 * UI/Common/UIxToolbar.m ([UIxToolbar -hasButtons]): new method
4944 that returns NO if the toolbar is empty.
4946 2006-07-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4948 * UI/Templates/UIxPageFrame.wox: replaced central table with a DIV.
4950 * UI/Common/UIxToolbarSeparator.m, UI/Common/UIxToolbarButton.m:
4951 new toolbar objects.
4953 * UI/Templates/UIxPageFrame.wox: use the exact html code as below.
4955 * UI/Templates/MailerUI/UIxMailMainFrame.wox: redone the
4956 linkbanner as a DIV instead of a TABLE.
4958 * UI/MailerUI/UIxMailMainFrame.m [UIxMailMainFrame
4960 returns 'YES' to request the display of the navigation bar between
4963 2006-06-15 ludovic@inverse.ca
4965 * It's now possible to set the default
4966 domain using for email using the
4967 SOGoDefaultMailDomain preference key.
4969 2006-06-15 ludovic@inverse.ca
4971 * Initial import of SOGo from trunk.