1 2007-11-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
4 +folderWithSubscriptionReference:referenceinContainer:aContainer]):
7 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
8 ([UIxMailPartHTMLViewer -_attachmentIds]): the reference was one
9 character too short, which cause the images not to be displayed
10 sometimes and crashes to happen whenever the references on a
11 message were wrong (due to bugs in SOPE).
13 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
14 -hasMessageAttachment]): consider an attachment any content that
15 has a non-nil disposition.
17 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
18 -newFolderWithName:nameandNameInContainer:newNameInContainer]):
19 fixed method to make use of the parameters instead of the useless
20 remains that weren't even initialized.
22 * SoObjects/Appointments/SOGoAppointmentObject.m
23 ([SOGoAppointmentObject -saveContentString:_iCalbaseSequence:_v]):
24 don't propagate the event among the attendees if this is not an
26 ([SOGoAppointmentObject -deleteWithBaseSequence:]): same as above.
28 * Main/SOGo.m ([SOGo -authenticatorInContext:context]): make use
29 of the new category method below.
31 * SoObjects/SOGo/WORequest+SOGo.m ([WORequest
32 -handledByDefaultHandler]): new method that returns whether this
33 is an "so" or alike request.
35 * SoObjects/SOGo/WORequest+SOGo.[hm]: new category module.
37 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
38 -newFolderWithName:nameandNameInContainer:newNameInContainer]):
39 write the new folder's name in the folder cache.
41 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
42 -calendars]): same as below.
44 * UI/Contacts/UIxContactsListViewContainer.m
45 ([UIxContactsListViewContainer -currentContactFolderName]):
46 translate the display name if its the default one.
48 * SoObjects/Appointments/SOGoAppointmentFolder.m
49 ([SOGoAppointmentFolder -create]): overriden method that invokes
50 its ancestor and then activate itself within the user settings.
52 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
53 -appendPersonalSources]): when the user is the owner of the
54 current folder, we create the "personal" folder if it doesn't
55 exist by invoking "create".
57 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
58 -primaryFetchProfile]): when no row is returned, we initialize
59 "values" to a new dictionary. This solves a bug where the defaults
60 would not be initialized properly.
62 2007-11-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
64 * SoObjects/SOGo/SOGoGCSFolder.m ([-compare:otherFolder]): method
65 moved into the SOGoFolder class.
67 * SoObjects/Appointments/SOGoAppointmentObject.m
68 ([SOGoAppointmentObject -saveContentString:_iCalinUIDs:_uids]):
69 simplified method by directly building a similar appointment
70 object with the current folder as container.
72 * SoObjects/Contacts/SOGoContactLDAPFolder.m
73 ([SOGoContactLDAPFolder
74 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
75 take the content of an object returned by
76 lookupName:inContext:acquire: instead of the dictionary passed as
77 parameter since it represents a flattened entry return by
78 lookupContactsWithFilter...
80 * SoObjects/Contacts/SOGoFolder+CardDAV.m: NSObject+CardDAV
81 category renamed to SOGoFolder+CardDAV.
83 * SoObjects/SOGo/SOGoParentFolder.m: no longer a subclass of
84 SOGoObject, but of SOGoFolder instead.
86 * SoObjects/SOGo/SOGoUserFolder.m: no longer a subclass of
87 SOGoGCSFolder, but of SOGoFolder instead.
89 * SoObjects/Appointments/SOGoAppointmentFolder.m
90 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): fixed
91 to take the new SOGoParentFolder class into account. Also, create
92 the personal folder if it doesn't exist.
94 * SoObjects/SOGo/SOGoFolder.[hm]: new class module implementing
95 the parent of all SOGo containers.
97 * SoObjects/SOGo/SOGoGCSFolder.[hm]: SOGoFolder class renamed to
100 2007-11-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
102 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection
103 -getAddressesFromFormValues:_dict]): take NSString and NSArray
104 values. Ignore addresses with a length of 0.
106 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -mailAccounts]): we now
107 fetch the accounts from the user defaults and create default
110 2007-11-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
112 * UI/MailPartViewers/UIxMailPartTextViewer.m
113 ([UIxMailPartTextViewer -flatContentAsString]): re-added
114 conversion of line-break to sequences of HTML "BR", with a fast
117 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
118 -flatContentAsString]): simplified method now that we know
119 -[NSString stringWithData:usingEncodingNamed:] has a more robust
122 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
123 -showToAddress]): the answer is cached.
125 * UI/Common/UIxObjectActions.m ([UIxObjectActions +initialize]):
126 read "SOGoACLsSendEMailNotifications" from the user defaults to
127 determiner whether to send an email when a user is added or
128 removed from an object's acl.
130 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
131 -contentForEditing]): make sure the htmlContent flag is set to NO
132 when we select the textual part. Also we select only the relevant
135 * UI/MailerUI/WOContext+UIxMailer.m ([-mailSubjectFormatter]):
138 * UI/MailerUI/UIxMailView.m ([UIxMailView -messageSubject]): new
139 method replacing -objectTitle, written like the ones below.
141 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
142 -messageSubject]): rewrote method to act the one below.
144 * UI/MailPartViewers/UIxMailPartMessageViewer.m
145 ([UIxMailPartMessageViewer -messageSubject]): new method that
146 returns the decoded mail subject or "Untitled" if the subject is
149 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
150 -decodedSubject]): new method that invoke -decodedSubject from the
151 NSString and NSData class, depending on the identity of the
152 subject obtained from the envelope.
154 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
155 -subjectForReply]): take the value of -[SOGoMail decodedSubject]
156 instead of the subject of the envelope.
157 ([SOGoMailObject -filenameForForward]): same as above.
158 ([SOGoMailObject -subjectForForward]): same as above.
160 * SoObjects/Mailer/NSString+Mail.m ([NSString -decodedSubject]):
161 same as below for NSString.
163 * SoObjects/Mailer/NSData+Mail.m ([NSData -decodedSubject]): new
164 method that decodes the subject of a mail taken as an NSData
165 instance. Handling the exceptions and the badly formatted headers.
167 * UI/MailerUI/UIxSubjectFormatter.[hm]: dropped class module.
169 2007-11-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
171 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
172 -deleteEntriesWithIds:ids]): make sure the objects returned by
173 lookupName:... are not instances of NSException.
175 2007-11-03 Ludovic Marcotte <ludovic@inverse.ca>
177 * UI/Scheduler/UIxAppointmentEditor.m
178 Fixed monthly recurrences support.
180 2007-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
182 * SoObjects/Appointments/SOGoAppointmentObject.m
183 ([SOGoAppointmentObject -deleteWithBaseSequence:]): an email was
184 sent when modifying an event, when the event was considered
185 relevant. The same thing is now implemented for event deletion.
187 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
188 -primaryFetchProfile]): make sure that the deserialized "values"
189 is an instance of NSMutableDictionary, otherwise we override it
192 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
193 -contentForReply]): make use of the SOGoMailReply WO page.
195 * SoObjects/Mailer/SOGoMailReply.[hm]: new class module copied
196 from SOGoMailForward to handle mail replies instead. Only three
197 methods remaining: date, from and messageBody. The latter is
200 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
201 -fetchMailForForwarding:sourceMail]): fetch attachments for
204 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
205 -hasMessageAttachment]): initialize hasAttachment with "NO" to
206 avoid false positives.
208 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event])
209 ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]):
210 set title to an empty string where the event/task summary is null.
212 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
213 -setHeaders:newHeaders]): make sure there is a message id in the
214 headers dictionary, if not, generate one.
215 ([SOGoDraftObject -fetchMailForEditing:sourceMail]): retrieve the
216 message id from the existing draft.
217 ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): store the
218 message id in the header map.
220 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
221 -deleteFolderAction]): no longer prefix the target folder with
224 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
225 -listMailboxesAction]): base the folder type on the folder
228 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
229 -lookupName:_keyinContext:acquire:_acquire]): compare the full
230 traversal to the potential looked up folder with the special
231 folder names and return an object with the appropriate
232 SOGoMailFolder subclass.
234 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
235 -traversalFromMailAccount]): don't prepend the whole string with
238 * SoObjects/Mailer/SOGoMailAccount.m
239 ([-lookupSentFolder:_keyinContext:_ctx])
240 ([-lookupDraftsFolder:_keyinContext:_ctx])
241 ([-lookupTrashFolder:_keyinContext:_ctx])
242 ([-lookupFiltersFolder:_key:_ctx]): removed methods.
243 ([SOGoMailAccount -inboxFolderNameInContext:])
244 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
245 ([SOGoMailAccount -sentFolderNameInContext:])
246 ([SOGoMailAccount -trashFolderNameInContext:]): no longer prefixes
247 the resulting name with "prefix" since we might return a nested
249 ([SOGoMailAccount -allFolderPaths]): prefixes all special folder
250 names with "/". Sorts the resulting folder list with
251 localizedCaseInsensitiveCompare: instead of
252 caseInsensitiveCompare:. No longer use the -[lookupXXX] methods
253 that were removed, instead, we choose the appropriate class
254 depending on the folder name. And since we are in SOGoMailAccount,
255 we don't have to compute a traversal path to match the key with
258 -folderWithTraversal:traversalandClassName:className]): new method
259 that returns an instance of the specified SOGoMailFolder subclass,
260 based on the traversal path passed as parameter.
261 ([SOGoMailAccount -inboxFolderInContext:_ctx])
262 ([SOGoMailAccount -draftsFolderInContext:_ctx])
263 ([-sentFolderInContext:_ctx])
264 ([SOGoMailAccount -trashFolderInContext:_ctx]): invoke the new
265 -folderWithTraversal:andClassName: method described above.
267 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
268 -primaryFetchProfile]): make use of -[NSPropertyListSerialization
269 propertyListFromData:mutabilityOption:format:errorDescription:] to
270 deserialize the plist. Removed variant for libFoundation since it
271 should support the above.
272 ([AgenorUserDefaults -generateSQLForInsert])
273 ([AgenorUserDefaults -generateSQLForUpdate]): make use of
274 -[NSPropertyListSerialization
275 dataFromPropertyList:format:errorDescription:] to serialize the
276 plist. Removed variant for libFoundation since it should support
277 the above. Escape the backslashes from the resulting string.
279 2007-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
281 * SoObjects/Mailer/SOGoMailFolder.[hm]: added a new subclass of
282 SOGoMailFolder: SOGoMailSpecialFolder.
284 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
285 -traversalFromMailAccount]): overridden method that returns the
286 initialized mutable string.
287 ([SOGoMailAccount -allFolderPaths]): take the special folder paths
288 with -traversalFromMailAccount and reposition them at the
289 beginning of the list. By creating the special folders during that
290 request, we also make sure that the folder exists thanks to the
291 new initialisation method of the new "SOGoSpecialMailFolder"
293 ([SOGoMailAccount -lookupSentFolder:_keyinContext:_ctx]): new
295 ([SOGoMailAccount -lookupTrashFolder:_keyinContext:_ctx]): new
297 ([SOGoMailAccount -lookupName:_keyinContext:acquire:_flag]): no
298 longer use lookupImap4Folder.
299 ([SOGoMailAccount -lookupImap4Folder:_keyinContext:_ctx]): removed
302 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
303 -traversalFromMailAccount]): new method that returns the full
304 IMAP4 path to the object.
306 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): retain
307 "superUsernames" after fetching it from the ud.
309 2007-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
311 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
312 -eventsListAction]): substitude the start and end date with their
313 UTC counterpart, taking into account the offset from UTC related
314 to those dates instead of the current one. This renders
315 -[UIxCalMainView -userUTCOffset] obsolete because the computings
316 that occured in javascript are now done server-side.
318 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView -userUTCOffset]):
319 removed obsolete method.
321 * SoObjects/Mailer/NSString+Mail.m ([NSString -htmlToText]): new
322 method converting html content to plain text.
324 * SoObjects/Mailer/NSString+Mail.[hm]: new category module
325 enhancing NSString with utility methods pertaining to mail handling.
327 * SoObjects/Mailer/SOGoMailObject.m
328 ([-shouldFetchPartOfType:_typesubtype:_subtype]): removed obsolete method.
330 -addRequiredKeysOfStructure:infopath:ptoArray:keysacceptedTypes:types]):
331 modified method to be always recursive and to take an array of the
332 accepted mime-types as parameter. The returned array now contains
333 the mime-type as well as the part keys.
335 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
336 -contentForEditingOnParts:_prtskeys:_k]): removed obsolete method.
337 ([SOGoMailObject -contentForEditing]): rewrote method to take into
338 account the first text/plain part or the first text/html part
339 converted to text/plain with our new -[NSString htmlToText]
342 * UI/MailerUI/UIxMailActions.m ([-replyToAllAction]): invoke
343 "replyToAll:" with YES as parameter instead of NO.
345 2007-10-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
347 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
348 -davContentType]): ignore any possible parameter taken from the
349 mime-info of the body part.
351 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
352 -lastFirstMessageNumber]): new accessor that returns the first
353 message number of the last series of messages.
354 ([UIxMailListView -fetchKeys]): request the bodystructure for each
356 ([UIxMailListView -hasMessageAttachment]): extract the attachment
357 information from the message bodystructure.
359 2007-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
361 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
362 -GETAction:]): use the "application/octet-stream" mime type for
363 elements of type "application/x-xpinstall" to avoid confusing
366 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -messageCheckList])
367 ([UIxPreferences -itemMessageCheckText])
368 ([UIxPreferences -userMessageCheck])
369 ([UIxPreferences -setUserMessageCheck:newMessageCheck]): new
370 methods for handling the retrieval of new messages automatically.
372 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -messageCheck]): new method
373 that returns the interval of time between automatic message
376 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
377 -defaultAction]): now expunges the last folder marked for expunge.
379 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
380 -trashInContext:_ctx]): now marks the container folder for
383 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
384 -markForExpunge]): new method that marks the folder for the next
385 automatic expunge operation in the user settings.
386 ([SOGoMailFolder -expungeLastMarkedFolder]): new methods that
387 takes the last folder marked for expunge, expunges it and removes
388 it from the user settings, if it exists.
390 2007-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
392 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
393 -messageSubjectCellStyleClass]): added support for replied,
394 forwarded, forwarded and replied mails.
396 * SoObjects/Mailer/NSData+Mail.m ([NSData
397 -bodyDataFromEncoding:encoding]): new utility method that decodes
398 the NSData instance properly depending on the encoding string
401 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
402 -fetchFileAttachmentKeys]): fetch the attachment encoding as well.
404 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
405 -stringForData:_datapartInfo:_info]): simplified by invoking
406 -bodyDataFromEncoding: from our new NSData category methods.
408 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
409 -fetchMailForEditing:sourceMail]): work-around a bug in SOPE-mime
410 where only the body part of the first of the keys fetched was
411 returned. Also decodes the body parts properly following their
414 * SoObjects/Mailer/NSData+Mail.[hm]: new extension module that
415 extends the NSData class with utility methods useful for handling
418 2007-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
420 * SoObjects/SOGo/NSArray+Utilities.m
421 ([NSArray -stringsWithFormat:format]): replace instances of NSNull
424 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
425 -keysWithFormat:keyFormat]): replace instances of NSNull with
428 * SoObjects/Contacts/SOGoContactLDAPFolder.m: if "displayName" is
429 empty, use "c_cn" instead.
431 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
432 ([SOGoMailAccount -draftsFolderInContext:_ctx])
433 ([SOGoMailAccount -sentFolderInContext:_ctx]): no longer make use
434 of the "SOGoSpecialFoldersInRoot" user defaults. The folders will
435 no always be specified from the root instead of sometimes from the
438 2007-10-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
440 * UI/Common/UIxPageFrame.m ([UIxPageFrame -commonLocalizableStrings])
441 ([UIxPageFrame -productLocalizableStrings]): invoke the new
442 +[SOGoUser language] method if the user is nil.
444 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +language]): new method
445 that returns any generically-found language.
446 ([SoUser -language]): modified to call the above.
447 ([SOGoUser -language]): modified to call the above if the user
448 language has a null length.
450 * SoObjects/Contacts/SOGoContactLDIFEntry.m ([SOGoContactLDIFEntry
451 -davEntityTag]): modified to return the "hash" of the vCard string.
453 * UI/MailerUI/UIxMailActions.m ([UIxMailActions
454 -removeAllLabelsAction]): new method that removes all label flags
455 from the associated message.
456 ([UIxMailActions -addLabel1Action]
457 [UIxMailActions -addLabel2Action]
458 [UIxMailActions -addLabel3Action
459 [UIxMailActions -addLabel4Action]
460 [UIxMailActions -addLabel5Action]): new methods that adds label
461 flags to the associated message.
462 ([UIxMailActions -removeLabel1Action]
463 [UIxMailActions -removeLabel2Action]
464 [UIxMailActions -removeLabel3Action
465 [UIxMailActions -removeLabel4Action]
466 [UIxMailActions -removeLabel5Action]): new methods that removes
467 label flags from the associated message.
469 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -msgLabels]):
470 new accessor that returns the labels associated with the message.
472 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
473 -allFolderPaths]): new method that returns all the paths of all
474 the subfolders of the folder object.
475 ([SOGoMailFolder -allFolderURLs]): new method replacing
478 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
479 -aclsForUser:uid]): object inherits the 'SOGoRole_ObjectEditor'
480 role from its parent folder.
482 2007-10-19 Francis Lachapelle <flachapelle@inverse.ca>
484 * SoObjects/SOGo/SOGoUser.m
485 ([SOGoUser -rolesForObject:objectinContext:context]): allow
486 multiple super usernames to be defined. The user default
487 SOGoSuperUsername is renamed SOGoSuperUsernames and must be
490 2007-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
492 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
493 -userInContext:]): override the super method by returning
494 anonymous if the super returns nil.
496 * UI/Common/UIxPageFrame.m ([UIxPageFrame
497 -productLocalizableStrings]): new method that returns the
498 product-specific translation dictionary as a JSON hash.
499 ([UIxPageFrame -commonLocalizableStrings]): same as above but for
500 the "Common" framework.
501 ([UIxPageFrame -setJsFiles:newJSFiles]): new setter that enables
502 the requestor components to require additional Javascript files.
503 This is useful now that all the scripts are loaded at the end of
505 ([UIxPageFrame -additionalJSFiles]): new getter related to the
508 2007-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
510 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -copyAction]):
511 implemented new web method.
513 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
514 -copyToFolderNamed:folderNameinContext:]): new method with the
515 code cut/pasted from -moveToFolderNamed:inContext:.
516 ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]):
517 modified to use the code from -copyToFolderNamed:inContext:, which
518 is common between the two actions.
520 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
521 ([SOGoMailAccount -sentFolderNameInContext:])
522 ([SOGoMailAccount -trashFolderNameInContext:]): modified to take
523 the user settings into account.
525 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -setAsDraftsFolderAction])
526 ([UIxMailFolderActions -setAsSentFolderAction])
527 ([UIxMailFolderActions -setAsTrashFolderAction]): new web methods
528 that change the purpose of the active folder to "Sent", "Drafts"
531 * UI/SOGoUI/SOGoACLAdvisory.m ([SOGoACLAdvisory -subject]):
532 returns the subject as quoted-printable.
534 * UI/SOGoUI/SOGoACLAdvisory.[hm]: added two intermediary classes:
535 SOGoACLAdditionAdvisory and SOGoACLRemovalAdvisory implementing
536 the "aclMethod" method for the subsequent language-dependent
539 * UI/SOGoUI/SOGoFolderAdvisory.m ([SOGoFolderAdvisory -subject]):
540 returns the subject as quoted-printable.
542 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
543 -dealloc]): release item, aptStartDate and aptEndDate.
545 2007-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
547 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
548 -initWithName:newNameinContainer:newContainer]): the owner of a
549 shared folder is set to "nobody" by default.
551 * UI/Common/UIxAclEditor.m ([UIxAclEditor -hasOwner]): new method
552 that returns whether the object has an owner or not.
554 2007-10-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
556 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
557 the folder even if the current user is not its owner.
559 2007-10-10 Ludovic Marcotte <ludovic@inverse.ca>
561 * We now send advisory emails when folders
562 are created / deleted.
564 * Fixed the sending of advisory emails upon
565 ACL changes on folders.
567 2007-10-10 Ludovic Marcotte <ludovic@inverse.ca>
569 * UI/Scheduler/UIxComponentEditor.m
570 Implemented event/task priority support.
572 * SoObjects/Contacts/SOGoContactGCSFolder.m
573 Added CardDAV support.
575 * SoObjects/SOGo/LDAPUserManager.m and SOGoUser.m
576 Implemented From: based on LDAP results based on
577 the MailFieldNames attribute (an array) specified
578 in every LDAP-based authentication sources.
580 * UI/MailPartViewers/UIxMailPartTextViewer.m and
581 UI/WebServerResources/MailerUI.css
582 We avoid replacing "\r\n" and "\n" with <br /> and
583 rather use CSS capabilities for proper formatting.
584 This is _WAY_ faster on very large mails.
586 2007-10-10 Francis Lachapelle <flachapelle@inverse.ca>
588 * UI/Scheduler/UIxComponentEditor.m
589 ([UIxComponentEditor -componentCalendar]): returns the calendar
590 object of the current event.
592 2007-10-05 Ludovic Marcotte <ludovic@inverse.ca>
594 * UI/WebServerResources/MailerUI.js
595 We check if at least one message is selected
596 before performing a Reply/Reply All/Forward
598 * SoObjects/Appointments/SOGoAppointmentFolder.m
599 and others - implemented support for recurring
600 events (with some known limitations right now,
601 all soon to be fixed).
603 2007-10-04 Francis Lachapelle <flachapelle@inverse.ca>
605 * Main/SOGo.m ([SOGo -isUserName:_keyinContext:_ctx]): removed
606 the constraint that a username can't start with a digit.
608 2007-10-02 Francis Lachapelle <flachapelle@inverse.ca>
610 * Moved SOPE/sope-gdl1/GDLContentStore from the default trunk
611 repository to Inverse's branch.
613 2007-09-28 Francis Lachapelle <flachapelle@inverse.ca>
615 * SoObjects/Mailer/SOGoDraftObject.m
616 ([SOGoDraftObject -isValidAttachmentName:_name]): removed
617 constraint on space in file name.
618 ([SOGoDraftObject -saveAttachment:_attachwithMetadata:metadata]):
619 now removes from file name all characters preceding a backslash.
620 This happens with IE7 because the complete attachment file path
623 2007-09-25 Francis Lachapelle <flachapelle@inverse.ca>
625 * SoObjects/Appointments/SOGoAptMailNotification.m
626 ([SOGoAptMailNotification -appointmentURL]): set personal as the
627 default calendar where to add the event.
629 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
630 activate the SOGoUIxDefaultModule user defaults.
632 2007-09-21 Francis Lachapelle <flachapelle@inverse.ca>
634 * UI/SOGoUI/UIxComponent.m
635 ([UIxComponent -shortUserNameForDisplay]): returns the string
636 "wrongusernamepassword" when authentication failed.
638 2007-09-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
640 * UI/MailPartViewers/UIxMailPartICalViewer.m
641 ([UIxMailPartICalViewer -calendarFolder]): returns the "personal"
642 entry of the Calendars parent folder.
644 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
645 -messageSubject]): new accessor method to work-around a problem
646 within SOPE where a subject could be returned as an NSData.
648 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
649 -appendPersonalSources]): make sure the value of the "c_path4" of
650 the returned rows are not NSNull, otherwise, discard them.
652 2007-09-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
654 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
655 -compare:otherFolder]): new overriden method that compares two
656 contact foldes based on their class and then transfer the control
657 to the super method in SOGoFolder.
659 * SoObjects/Contacts/SOGoContactLDAPFolder.m
660 ([SOGoContactLDAPFolder -compare:otherFolder]): new method that
661 compare two contact folders based on their class and then their
664 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -compare:otherFolder]):
665 new method for sorting folders. The folders are compared based on
666 their ownership, whether they are a main folder and finally
667 depending on their display name.
669 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
670 -pathArrayToSOGoObject]): do not reorder the paths if the third
671 element is an instance of NSNull.
673 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
674 -subFolders]): returns a sorted array using the "compare:"
677 2007-09-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
679 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
680 -calendars]): also returns the owner of the listed folders.
682 * SoObjects/Appointments/SOGoAppointmentFolder.m
683 ([-deleteEntriesWithIds:ids]): moved method into SOGoFolder.
685 * UI/Scheduler/UIxCalMainView.m ([-batchDeleteAction]): moved
686 method into UIxFolderActions.
688 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
689 -fetchFreeBusyInfosFrom:_startDateto:_endDate]): fetch the
690 freebusy info from the "personal" calendar.
692 * UI/Common/UIxParentFolderActions.m ([UIxParentFolderActions
693 -createFolderAction]): new standardized method for requesting
694 folder creations among gcs-based modules.
696 * UI/Common/UIxParentFolderActions.[hm]: new action class module.
698 * SoObjects/Appointments/SOGoAppointmentFolders.m: new class
699 module, equivalent to the SOGoParentFolder's child
700 SOGoContactFolders, but for calendars.
702 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -labelForKey:key]): new
703 method that returns translated strings for controller bundles
704 (same as what UIxComponent does for view bundles).
705 ([SOGoObject -pathArrayToSOGoObject]): new method that returns
706 the real path to a subscribed folder (if subscribed).
707 ([SOGoObject +globallyUniqueObjectId]): move method from SOGoFolder.
708 ([SOGoObject -globallyUniqueObjectId]): new instance method
709 calling its class equivalent.
711 2007-09-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
713 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage -defaultAction]): test
714 whether the user is logged in and if so, redirect to his/her
716 ([SOGoRootPage -appendToResponse:inContext:]): removed useless
719 2007-09-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
721 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
722 +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
724 ([SOGoFolder -displayName]): new method.
725 ([SOGoFolder -delete]): accept to proceed only if nameInContainer
728 * SoObjects/Contacts/SOGoContactLDAPFolder.m
729 ([SOGoContactLDAPFolder
730 +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
731 renamed from "contactFolderWithName..." for compatibility with SOGoFolder.
733 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
734 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
735 removed method, reimplemented in SOGoFolder.
736 ([SOGoContactGCSFolder -displayName]): removed method,
737 reimplemented in SOGoFolder.
738 ([-delete]): removed method, modified in SOGoFolder.
740 * SoObjects/Contacts/SOGoContactFolders.[hm]: modified class to be
741 a subclass of SOGoParentFolder.
743 * SoObjects/SOGo/SOGoParentFolder.[hm]: new class module derived
744 from SOGoContactFolders and modified to be more content-independent.
746 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -markMessageUnreadAction])
747 ([UIxMailActions -markMessageReadAction]): new methods moved from
748 UIxMailListView and adapted to invoke the client object directly,
749 since the previous versions had to to a lookup from the parent
752 * UI/MailerUI/UIxMailListView.m ([-markMessageUnreadAction]): move
753 method into UIxMailActions.
754 ([-markMessageReadAction]): same as above.
755 ([-viewAction]): removed useless method.
756 ([-javaScriptOK]): removed useless method.
757 ([-isJavaScriptRequest]): removed useless method.
758 ([-lookupActiveMessage]): removed useless method.
760 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
761 -responseWithStatus:status]): new method that returns a WOResponse
762 initialized with the specified status code.
763 ([WODirectAction -responseWith204]): new method that invokes the
764 above one with "204" as parameter.
765 ([WODirectAction -redirectToLocation:newLocation]): rewrote method
766 to make use of -responseWithStatus:.
768 * UI/SOGoUI/UIxComponent.m ([UIxComponent -responseWith204]): new
769 method that returns a WOResponse initialized with the 204 status
772 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sortedUIDs]):
773 always use a "not deleted" search qualifier along with the user
774 qualifier (if present).
776 2007-09-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
778 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
779 -contactSearchAction]): only return the records which have an
782 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
783 -trashInContext:_ctx]): no longer expunge the mailbox after
784 marking a message deleted.
785 ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]): same
788 * UI/MailerUI/UIxMailView.m ([-deleteAction]): removed method.
789 ([-trashAction]): moved method into UIxMailActions.
790 ([-moveAction]): moved method into UIxMailActions.
792 2007-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
794 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
795 ([_UIxHTMLMailContentHandler
796 -endElement:_localNamenamespace:_nsrawName:_rawName]): remove HTML
797 comments from the CSS code, do not add the CSS code to the body
798 content and remove references of body from the CSS declarations.
799 ([UIxMailPartHTMLViewer -cssContent]): new accessor method.
800 ([UIxMailPartHTMLViewer -flatContentAsString]): separated code
801 common with cssContent in a different method and invoke it only
804 * UI/MainUI/SOGoRootPage.[hm]: made a subclass of UIxComponent
805 instead of UIxPageFrame.
807 2007-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
809 * UI/MainUI/SOGoRootPage.m ([-defaultAction]): commented out.
810 ([-appendToResponse:responseinContext:ctx]): commented out.
811 ([SOGoRootPage -connectURL]): new accessor that returns the full
812 url the the "connect" method.
813 ([-connectAction]): rewrote method to return a properly formatted
814 auth. cookie based on the username and password passed as
817 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
818 set the value of the cookie to "discard" and set its expiration
821 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
822 -preprocessCredentialsInContext:context]): consider the user
823 anonymous if the cookie value is "discard".
824 ([SOGoWebAuthenticator
825 -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
826 set the expiration date of the cookie to yesterday.
828 * UI/SOGoUI/UIxComponent.m ([UIxComponent -applicationPath]):
829 returns the path to the application if the clientObject is not a
832 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder +initialize]):
833 moved the requirement of authentication from the SOGo application
836 * SoObjects/Appointments/SOGoAppointmentObject.m
837 ([SOGoAppointmentObject -saveContentString:_iCalbaseSequence:_v]):
838 check whether the new appointment object is still relevant before
839 sending a notification.
841 2007-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
843 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
844 -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
845 render the login page through the SoDefaultRenderer.
847 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage
848 -isPublicInContext:localContext]): new overriden method that
851 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
852 -currentCalendarLogin]): replace css-unsafe characters with _.
854 * UI/SOGoUI/UIxComponent.m ([UIxComponent
855 -shortUserNameForDisplay]): simplified method.
856 ([-user]): removed method since [context activeUser] is as useful.
858 2007-09-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
860 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
861 set the cookie path to "/".
863 * Main/SOGo.m ([SOGo -authenticatorInContext:_ctx]): choose the
864 authenticator based on the request handler key. "dav" returns the
865 SOGoDAVAuthenticator, anything else returns the Web authenticator.
867 * SoObjects/SOGo/SOGoDAVAuthenticator.m: renamed module from
870 * SoObjects/SOGo/SOGoWebAuthenticator.m: new class module
871 implementing a subclass of SoCookieAuthenticator, designed for
872 web-based cookie authentication of users.m
874 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
875 new method that resets the authentification cookie.
877 2007-08-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
879 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
880 -checkLogin:loginToCheckandPassword:passwordToCheck]): initialize
881 didBind to NO to make sure no false authentication is returned if
882 the bind operation is not executed.
884 2007-08-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
886 * SoObjects/Mailer/SOGoDraftObject.m: added support for the
887 "In-Reply-To" header field when replying.
889 * UI/MainUI/SOGoUserHomePage.m: add the "c_" prefix to the quick
890 table field names that are queried.
892 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
893 -iCalStringForFreeBusyInfos:_infosfrom:_startDateto:_endDate]):
894 add the "c_" prefix to the quick table field names that are
897 2007-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
899 * SoObjects/Appointments/SOGoAppointmentFolder.m
900 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): add
901 "personal" to the ocs path of the appointment folder.
903 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
904 -flatContentAsString]): use latin1 when the encoding is not
905 specified, and to reencode data chunk which were not correctly
906 decoded with the original charset.
908 * SoObjects/Appointments/SOGoAppointmentFolder.m ([SOGoAppointmentFolder -aclUsersForObjectAtPath:objectPathArray])
909 ([SOGoAppointmentFolder -aclsForUser:uidforObjectAtPath:objectPathArray])
910 ([SOGoAppointmentFolder -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray])
911 ([SOGoAppointmentFolder
912 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]):
913 override those methods to use the "personal" additional directory.
915 * SoObjects/SOGo/SOGoUserFolder.m ([-ocsPrivateCalendarPath]):
916 append "/personal" to the calendar path to simulate a single
917 calendar in a choice of many.
919 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
920 -lookupName:_keyinContext:acquire:_acquire]): moved the lookup
921 methods back here. Moved the folder existence check here, and do
922 it on self only when the lookup happens for a non-folder object.
923 This permits to accept entries for folders with parents who
926 2007-08-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
928 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
929 -shouldTakeValuesFromRequest:requestinContext:context]): same as
932 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
933 -shouldTakeValuesFromRequest:requestinContext:context]):
934 redesigned method since any method called can be received from a
935 POST or a GET. Instead we check the method call itself and we
936 accept only if it has the "save" prefix.
938 * SoObjects/Appointments/SOGoAptMailNotification.m
939 ([SOGoAptMailNotification -getSubject]): returns the subject an a
940 quoted-printable encoded string, if needed.
942 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
943 -asQPSubjectString:encoding]): moved method into
944 NSString+Utilities.m.
946 2007-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
948 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
949 -messageForwardingList])
950 ([UIxPreferences -itemMessageForwardingText])D
951 ([UIxPreferences -userMessageForwarding])
952 ([UIxPreferences -setUserMessageForwarding:newMessageForwarding]):
953 new template methods for manage the user preference regarding
956 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -language]): change the
957 algorithm to return, in order, the user's defined language or the
958 first browser language or, finally, the default language.
959 ([SOGoUser -messageForwarding]): new method that returns the user
960 preference for message forwarding: "inline" or "attached",
961 defaulting to "attached".
963 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
964 -contentForInlineForward]): new method that returns the content of
965 the message for inline forwarding based on the SOGoMailForward
968 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
969 -fetchMailForForwarding:sourceMail]): check the user preference
970 for message forwarding and compose inline forwarded messages if required.
972 * SoObjects/Appointments/SOGoCalendarComponent.m
973 ([SOGoCalendarComponent
974 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
975 now use a template based on the language returned from the
978 * SoObjects/Mailer/SOGoMailEnglishForward.m: new module containing
979 a subclass of SOGoMailForward for English locale.
981 * SoObjects/Mailer/SOGoMailFrenchForward.m: new module containing
982 a subclass of SOGoMailForward for French locale.
984 * SoObjects/Mailer/SOGoMailForward.[hm]: new module class that
985 helps build template for inline forwarded messages.
987 2007-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
989 * UI/SOGoElements/SOGoIEConditional.m: new extension module class
990 to handle "<var:if-ie>" template tags.
992 * UI/SOGoElements: new extension bundle containing sogo-specific
995 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
996 -takeValuesFromRequest:_rqinContext:_ctx]): save the category
997 selected in the dialog.
998 ([UIxComponentEditor -setComponent:newComponent]): retrieve the
999 first category, if ever, of the calendar entity.
1001 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1002 -composeAction]): restored method since it is needed by the
1005 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1006 -composeAction]): the address fields should be arrays and not
1009 * UI/Common/UIxPageFrame.m ([UIxPageFrame -buildDate]): new method
1010 that returns the build date of SOGo in the template.
1012 2007-08-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1014 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1015 -_flattenedRecords:records]): when the c_cn field is empty,
1016 returns set a formatted string with the concatenation of
1017 c_givenname and c_sn as the displayName.
1019 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
1020 -isValidMailAccountName:_key]): prevent unknown accounts from
1023 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
1024 -pathToAttachmentObject]): we no longer need the filename
1025 extension for SoLookup...
1027 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
1028 -lookupName:_keyinContext:_ctxacquire:_flag]): do not require the
1029 filename to have an extension, and thus accept any filename.
1031 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1032 -currentCName]): new method that returns the c_name of the
1033 contact, correctly escaped to be passed by url afterwards.
1035 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
1036 ([UIxMailPartHTMLViewer -flatContentAsString]): pass the NSData
1037 instance of [self decodedFlatContent] instead of the buggy
1038 NSString from [super flatContentAsString] to the parser.
1040 2007-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1042 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -deleteAction]):
1043 new category method to reponds to the "delete" web command on
1045 ([UIxMailActions -deleteAttachmentAction]): new category method to
1046 reponds to the "deleteAttachment" web command on drafts, taking
1047 the "filename" url parameter into account.
1049 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1050 -contentForEditing]): new method that retrieve the editable mail
1052 ([SOGoMailObject -fetchFileAttachmentKeys]): new method that
1053 returns the body keys for attached files (parts with a "filename"
1056 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
1057 -asQPSubjectString:encoding]): do not change the string if the
1058 encoded string has the same length (which means it is already
1060 ([SOGoDraftObject -fetchMailForEditing:sourceMail]): new method
1061 that retrieve a draft along with its attachments for editing.
1062 ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): no longer
1063 choke if the "to" header field is empty.
1064 ([SOGoDraftObject -delete]): new method to delete the draft folder
1065 whenever operations are done.
1067 2007-08-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1069 * UI/MailerUI/UIxMailEditor.m ([-patchFlagsInStore]): removed
1070 useless stub method, of which the intention was implemented in
1072 ([-lookupSentFolderUsingAccount]): removed obsolete method.
1073 ([-selectedMailIdentity]): removed obsolete method.
1074 ([-lookupSentFolderUsingFrom]): removed obsolete method.
1075 ([-storeMailInSentFolder:_path]): removed obsolete method, of
1076 which the mechanism has been put in -[SOGoDraftObject sendMail]
1078 ([UIxMailEditor -_saveFormInfo], [UIxMailEditor -defaultAction])
1079 ([UIxMailEditor -saveAction], [UIxMailEditor -sendAction]):
1080 adapted algorithms to the new SOGoDraftObject methods.
1081 ([-deleteAction]): removed method since local draft objects cannot
1082 be removed by the user.
1084 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1085 -expungeAction]): new method replacing the one previously found in
1087 ([UIxMailFolderActions -createFolderAction])
1088 ([UIxMailFolderActions -renameFolderAction])
1089 ([UIxMailFolderActions -deleteFolderAction])
1090 ([UIxMailFolderActions -emptyTrashAction])
1091 ([UIxMailFolderActions -subscribeAction])
1092 ([UIxMailFolderActions -unsubscribeAction]): error situations
1093 should have http return code 500 instead of 403.
1095 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1096 -composeAction]): new method replacing the one previously in
1099 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1100 -imap4URLString]): removed overriden method (see below).
1102 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -aclUsers]):
1103 cache the mailbox acl.
1104 ([SOGoMailFolder -aclsForUser:uid]): cache the mailbox acl.
1105 ([SOGoMailFolder -setRoles:rolesforUser:uid]): reset the mailbox
1107 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): modified to use
1108 the new method of determining the users mail accounts.
1110 * SoObjects/Mailer/SOGoMailBaseObject.m ([-imap4URLString]): no
1111 longer adds a "/" at the end of the string (the default for
1112 folders), therefore this will be overriden in SOGoMailFolder
1113 rather than in SOGoMailObject.
1115 * UI/MailerUI/UIxMailListView.m ([-expungeAction]): removed
1116 method, moved into the new UIxMailActions module class.
1118 * SoObjects/Mailer/SOGoDraftsFolder.m ([SOGoDraftsFolder
1119 -newDraft]): new method that returns a new SOGoDraftObject
1120 instance with a unique filename based on the current timestamp and
1121 the "newDraft" prefix.
1123 -lookupName:nameinContext:localContextacquire:acquire]): overriden
1124 method by detecting local drafts with their "newDraft" prefix.
1125 ([SOGoDraftsFolder -isInDraftsFolder]): returns YES.
1127 * SoObjects/Mailer/SOGoDraftsFolder.[hm]: rewrote class module
1128 from scratch by making it a subclass of SOGoMailFolder.
1130 * UI/MailerUI/UIxMailReplyAction.m: removed obsolete class
1133 * UI/MailerUI/UIxMailForwardAction.m: removed obsolete class
1136 * UI/MailerUI/UIxMailEditorAction.[hm]: removed obsolete class
1139 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -init]):
1140 new method, initializing the new ivars: IMAP4ID, headers, text,
1141 sourceURL and sourceFlag.
1142 ([-spoolFileManager], [SOGoDraftObject -userSpoolFolderPath])
1143 ([-_ensureUserSpoolFolderPath])
1144 ([-saveMimeMessageToTemporaryFileWithHeaders:])
1145 ([SOGoDraftObject -mimeMessageWithHeaders:_headers])
1146 ([-deleteTemporaryMessageFile:], [-delete], [-content])
1147 ([-GETAction:_ctx], [-DELETEAction:_ctx], [-fetchParts:])
1148 ([-uid], [-flags], [-size], [-envelope]): removed methods.
1149 ([SOGoDraftObject -storeInfo]): rewrote method to take the new
1151 ([SOGoDraftObject -setSourceURL:newSourceURL])
1152 ([SOGoDraftObject -setSourceFlag:newSourceFlag]): new accessor
1153 methods to store the url of the original message between accesses
1154 so that, depending on the action taken (forward or reply), the
1155 correct flag can be given.
1156 ([SOGoDraftObject -setIMAP4ID:]): new accessor method that sets
1157 the imap4 id that is returned for the message whenever it is saved
1158 into the drafts folder.
1159 ([SOGoDraftObject -save]): new method that takes in charge the
1160 saving of the message in the IMAP drafts folder.
1161 ([SOGoDraftObject -fetchMailForReplying:sourceMailtoAll:toAll]):
1162 new method that fills the original data of the new message with
1163 the reply content of the original message.
1164 ([SOGoDraftObject -fetchMailForForwarding:sourceMail]): same as
1165 above for message forwarding.
1166 ([-spoolFileManager]): removed useless method (only returned the
1167 default filemanager...)
1168 ([SOGoDraftObject -mimeMessageAsData]): new method that returns
1169 the resulting message as an NSData chunk.
1171 * SoObjects/Mailer/SOGoMailObject+Draft.m: new extension module
1172 containing a rewrite of the mail action methods found in
1173 UI/Mailer/, that needed to be put in the SOGoMailObject class.
1174 ([SOGoMailObject -subjectForReply]): new method that returns a
1175 subject suitable for replies.
1176 ([SOGoMailObject -contentForReply]): new method that returns the
1177 textual content of an email, quoted for replying.
1178 ([SOGoMailObject -filenameForForward]): new method that returns
1179 the name of the filename that should contain the forwarded
1180 message, based on its subject.
1181 ([SOGoMailObject -subjectForForward]): explicit.
1183 2007-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1185 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1186 -mailAccounts]): rewrote method to return the name of the mail
1187 accounts now available with the -[SOGoUser mailAccounts] method.
1188 ([UIxMailMainFrame -showLinkBanner]): removed method.
1189 ([UIxMailMainFrame -bannerToolbarStyle]): removed method.
1190 ([UIxMailMainFrame -bannerConsumeStyle]): removed method.
1191 ([UIxMailMainFrame -rootURL]): removed method.
1192 ([UIxMailMainFrame -userRootURL]): removed method.
1193 ([UIxMailMainFrame -calendarRootURL]): removed method.
1194 ([UIxMailMainFrame -contactsRootURL]): removed method.
1195 ([UIxMailMainFrame -hasErrorText])
1196 ([UIxMailMainFrame -errorText])
1197 ([UIxMailMainFrame -errorAlertJavaScript]): removed methods.
1198 ([-composeAction]): removed method. Now provided by
1199 UIxMailAccountActions.
1200 ([UIxMailMainFrame -setHideFolderTree:_flag]): removed method.
1201 ([UIxMailMainFrame -hideFolderTree]): removed method.
1202 ([UIxMailMainFrame -treeRootClassName]): removed method.
1203 ([UIxMailMainFrame +initialize]): removed method.
1204 SOGoMailTreeRootClass userdefaults will no longer have any effect.
1206 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
1207 -redirectToLocation:newLocation]): new method that implements the
1208 same functionality as WOComponent.
1210 * UI/Common/WODirectAction+SOGo.[hm]: new class extension module.
1212 * UI/MailerUI/UIxMailView.m ([UIxMailView -mailIsDraft]): new
1213 method that returns whether the current mail is store in the
1214 drafts folder hierarchy.
1216 * SoObjects/SOGo/SOGoUser.m ([-fullEmail]): removed method.
1217 ([-primaryEmail]): removed method.
1218 ([SOGoUser -primaryIMAP4AccountString]): removed method.
1219 ([SOGoUser -mailAccounts]): new method that returns an array
1220 containing description dictionaries for all the user mail
1221 accounts. Each account also contain the user's identities for that
1223 ([SOGoUser -allIdentities]): new utility method that returns all
1224 the user identities on all accounts.
1225 ([SOGoUser -primaryIdentity]): new method return the first
1226 identity of the first account.
1228 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]):
1230 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1231 -isInDraftsFolder]): returns NO.
1232 ([-preferredIdentity]): removed method, replaced with -[SOGoUser
1234 ([SOGoMailAccount -draftsFolderInContext:_ctx]): new method.
1236 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1237 -isInDraftsFolder]): new method that detects if self is contained
1238 by the drafts folder by calling itself on the container object.
1240 * SoObjects/Mailer/SOGoMailAccounts.m ([-fetchAllIdentities]):
1242 ([-fetchIdentitiesWithEmitterPermissions]): removed method.
1243 ([SOGoMailAccounts -toManyRelationshipKeys]): rewrote method to
1244 return the name of the mail accounts now available with the
1245 -[SOGoUser mailAccounts] method.
1247 * SoObjects/Mailer/SOGoUser+Mail.[hm]: removed useless class
1250 * SoObjects/Mailer/SOGoMailIdentity.[hm]: removed useless class
1253 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
1254 -keysWithFormat:format]): method that forward the method of the
1255 same name to each member of the array, considering they all are
1256 instances of NSDictionary.
1257 ([NSArray -objectsForKey:key]): same principle as above.
1258 ([NSArray -flattenedArray]): new method that transforms an array
1259 of arrays into a single array containing all the elements of the
1262 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
1263 -keysWithFormat:keyFormat]): new method inspired by the python
1264 string formatting system and which replaces occurences of "%{key}"
1265 by the corresponding keys.
1267 2007-08-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1269 * Main/SOGo.m ([SOGo -run]): check for channel-type specific
1270 sql script before the generic one when initializing mandatory
1273 2007-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1275 * SoObjects/SOGo/NSString+Utilities.m ([NSString
1276 -pureEMailAddress]): new utility method inspired by the
1277 "_rawSender" private method in SOGoDraftObject, which it now
1280 * SoObjects/SOGo/SOGoMailer.m: new abstraction class module that
1281 provides a common API for sending emails, no matter what the
1284 2007-08-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1286 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1287 -quotasAction]): invoke "relativeImap4Name" instead of
1288 "nameInContainer" since the latter also returns the "folder"
1291 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1292 -listMailboxesAction]): declare the output as text/plain in UTF-8.
1294 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1295 -deleteFolderAction]): fixed the url of the destination folder.
1297 * Main/SOGo.m ([SOGo +initialize]): show the build date and
1298 hostname at startup.
1300 2007-08-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1302 * SoObjects/Appointments/SOGoCalendarComponent.m
1303 ([SOGoCalendarComponent
1304 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
1305 set the mail date to the current date string returned by our
1306 rfc822DateString extension method.
1308 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1309 -_gcsFoldersFromFolder:): ignore the personal folders who are
1310 returned but don't really exist.
1312 2007-08-02 Francis Lachapelle <flachapelle@inverse.ca>
1314 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView _responseForResults:]):
1315 has to return only one element.
1317 2007-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1319 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
1320 -content]): new method returning the decoded content of the
1321 corresponding attachment as an NSData instance.
1322 ([UIxMailPartViewer -filename]): if the "filename" parameter of
1323 the metadata parameterList is empty, try to find out the filename
1324 from the "disposition" metadata returned with the BODYSTRUCTURE
1327 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1328 -composeAction]): prefix the INBOX folder with "folder".
1330 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailBaseObject
1331 -relativeImap4Name]): return nameInContainer stripped from its
1332 first 6 characters since all folder names are prefixed with
1335 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1336 -imap4URLString]): invoke -relativeImap4Name instead of
1337 "nameInContainer" since the former will return the fixed IMAP4
1338 foldername and the latter the SoObject name.
1340 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1341 +initialize]): we now fetch the "BODYSTRUCTURE" key instead of "BODY".
1343 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderNameInContext:])
1344 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
1345 ([SOGoMailAccount -sieveFolderNameInContext:_ctx])
1346 ([SOGoMailAccount -sentFolderNameInContext:])
1347 ([SOGoMailAccount -trashFolderNameInContext:]): prefix the folder
1348 names with "folder".
1349 ([SOGoMailAccount -inboxFolderInContext:_ctx])
1350 ([SOGoMailAccount -sentFolderInContext:_ctx])
1351 ([SOGoMailAccount -trashFolderInContext:_ctx]): no longer prefix
1352 the folder names with "folder" since they are prefixed earlier.
1354 2007-07-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1356 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
1357 ([-sentFolderInContext:], [-trashFolderInContext:]): folder keys
1358 all starts with "folder".
1360 * SoObjects/SOGo/SOGoObject.m ([SOGoObject +initialize]): no
1361 longer declare security info from here.
1363 * SoObjects/Mailer/SOGoMailFolder.m
1364 ([-isMessageKey:_keyinContext:_ctx]): removed useless method.
1365 ([SOGoMailFolder -lookupName:_keyinContext:acquire:_acquire]):
1366 folder names now always start with "folder".
1368 * SoObjects/Mailer/SOGoMailAccount.m
1369 ([-lookupName:inContext:acquire:]): folder names now always start
1372 2007-07-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1374 * UI/MailerUI/UIxMailForwardAction.m ([UIxMailForwardAction
1375 -forwardAction]): adapted to the new saveAttachment:withMetadata:
1378 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -saveAction]): added
1379 code to save the attached filenames with the filename returned by
1380 the web server as well as their mime types.
1382 * UI/MailPartViewers/UIxMailPartMessageViewer.m ([UIxMailPartMessageViewer -fromAddresses])
1383 ([UIxMailPartMessageViewer -toAddresses])
1384 ([UIxMailPartMessageViewer -ccAddresses]): new methods returning
1385 the corresponding fields separated with a ", " (if needed).
1387 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1388 -saveAttachment:_attachwithMetadata:metadata]): new method
1389 replacing -saveAttachment:withName: and which takes a dictionary
1390 as parameter with the filename and the mime type of the
1392 The mimetype is then saved in a hidden text file.
1393 ([SOGoDraftObject -contentTypeForAttachmentWithName:]): if exists,
1394 take the mime type from the hidden text file related to the
1397 * SoObjects/Contacts/SOGoContactGCSFolder.m ()
1398 ([SOGoContactGCSFolder
1399 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
1400 return records if the db records are > 0 and not just > 1...
1402 2007-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1404 * UI/Contacts/UIxContactsListView.m ([-displayName]): removed
1406 ([UIxContactsListView -defaultSortKey]): changed to "displayName".
1408 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1409 ([SOGoContactLDAPFolder
1410 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
1411 translate the returned records to a normalized form.
1413 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1414 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
1415 translate the returned records to a normalized form.
1417 * UI/Scheduler/UIxCalListingActions.m,
1418 UI/Contacts/UIxContactsListView.m, SoObjects/SOGo/SOGoUser.m,
1419 SoObjects/SOGo/AgenorUserDefaults.m,
1420 SoObjects/Contacts/SOGoContactGCSFolder.m,
1421 SoObjects/Appointments/SOGoAppointmentFolder.m,
1422 OGoContentStore/OCSiCalFieldExtractor.m,
1423 OGoContentStore/OCSContactFieldExtractor.m: prefixed all quick
1424 table fields with "c_".
1426 2007-07-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1428 * SoObjects/SOGo/LDAPSource.m ([LDAPSource +initialize]): query
1429 the values for SOGoLDAPQueryLimit and SOGoLDAPQueryTimeout from
1430 the application settings. If set, both limit will influence the
1431 maximum size of the resultsets and the time taken to solve them.
1432 ([LDAPSource -_initLDAPConnection]): initialize the limits.
1434 2007-07-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1436 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder -davNamespaces]): added new overriden
1437 method that declares the DAV namespace related to CardDAV.
1438 ([SOGoContactGCSFolder -davComplianceClassesInContext:]): new
1439 method that declares the "access-control" and "addressbook-access"
1440 classes to the list.
1442 * SoObjects/Appointments/SOGoAppointmentFolder.m
1443 ([-lookupActionForCalDAVMethod:]): removed method.
1444 ([SOGoAppointmentFolder -davNamespaces]): added new overriden
1445 method that declares the DAV namespace related to CalDAV.
1447 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davNamespaces]): new
1448 optional method for subclasses which handle specific extensions to
1449 the DAV protocol: CardDAV or CalDAV.
1451 -lookupName:lookupNameinContext:localContextacquire:acquire]):
1452 new overriden method that handles dav invocations for extensions
1453 to DAV by returning an appropriate SoSelectorInvocation.
1455 * SoObjects/SOGo/NSString+Utilities.m ([NSString
1456 -asDavInvocation]): new method returning a dictionary with a "ns"
1457 key representing the dav namespace and a "method" key representing
1458 the dav method name of the request.
1460 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
1461 +initialize]): scan the value of SOGoUIxUserCanChangePassword.
1463 ([UIxPreferences -shouldDisplayPasswordChange]): new template
1464 method that returns the value of SOGoUIxUserCanChangePassword.
1466 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
1467 scan the value of SOGoUIxDefaultModule. If not set, the default
1468 module defaults to "Calendar".
1469 ([SOGoUserHomePage -defaultAction]): redirect the user to the
1470 value of "SOGoUIxDefaultModule".
1472 2007-07-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1474 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1475 -contactInfos]): cache the results to avoid multiple invocations.
1477 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1478 ([SOGoContactLDAPFolder -toOneRelationshipKeys]): check whether we
1479 really should return something or if we fake to return nil...
1481 2007-07-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1483 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): set
1484 acceptAnyUser to YES only when the SOGoAuthentificationMethod user
1485 default is set to "bypass".
1487 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
1488 -checkLogin:_loginpassword:_pwd]): accepts unverified connections
1489 when authMethod is set to "bypass" from now on. This would avoid a
1490 security concern with a default installation of SOGo.
1491 AuthentificationMethod is now prefixed with "SOGo" for better
1494 2007-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1496 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1497 -quotasAction]): new method that returns a json representation of
1500 2007-07-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1502 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1503 -imap4URL]): rewrote method to support accented mailbox names.
1504 ([SOGoMailBaseObject imap4Password]): rewrote to simply use
1505 SOGoAuthenticator's passwordInContext:.
1507 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
1508 -takeValuesFromRequest:_rqinContext:_ctx]): explicitly set the
1509 start and due dates to nil if hasStartDate and hasDueDate are
1512 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
1513 -passwordInContext:context]): made method public.
1515 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
1516 -extractQuickFieldsFromTodo:_task]): set "isallday" and "isopaque"
1517 to false to avoid a null violation.
1519 2007-07-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1521 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1522 -contentAsString]): returns the message encoded in ISO Latin 1
1525 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): read the
1526 SOGoSuperUsername user defaults.
1527 ([SOGoUser -initWithLogin:newLoginroles:newRoles]): simplified
1529 ([SOGoUser -rolesForObject:objectinContext:context]): if the
1530 current user is the superuser, grant him/her the "owner" role.
1532 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
1533 the folder only if the current user is the owner of the future
1536 * SoObjects/Appointments/SOGoCalendarComponent.m
1537 ([SOGoCalendarComponent -contentAsString]): we return the content
1538 based on the permissions returned by the security manager instead
1539 of by looking at the user roles.
1541 * SoObjects/Appointments/SOGoAppointmentFolder.m
1542 ([SOGoAppointmentFolder -calendarFolders]): read the calendar
1543 folders of the user to whom this folder belongs instead of the
1544 active user. This way, a delegate user will be able to have the
1545 same view that the original user has if he connects from his user
1548 * Main/SOGo.m ([SOGo -lookupUser:_keyinContext:]): check if the
1549 user exists before creating the SOGoUserFolder instance. If not,
1552 * UI/MailerUI/UIxMailSourceView.[hm]: new class module designed to
1553 return the message source code in plain text.
1555 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1556 -contentAsString]): returns the message encoded in UTF8.
1558 2007-07-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1560 * OGoContentStore/iCalRepeatableEntityObject+OCS.m
1561 ([iCalRepeatableEntityObject -cycleInfo]): no longer take the
1562 leading tagname into account when serializing the element values.
1564 * Main/SOGoProductLoader.m: only load bundle directories ending
1565 with the "SOGo" extension.
1567 * Main/SOGo.m ([SOGo
1568 -_checkTableWithCM:cmtableURL:urlandType:tableType]): empty the
1569 result set if the query has caused no exception. Otherwise we get
1570 an "evaluation is in progress exception".
1572 2007-06-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1574 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
1575 -generateSQLForInsert]): initialize error to nil before the
1576 serialization. Otherwise the method can get confused if it ever is
1577 initialized to something else.
1579 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
1580 -folderIsMandatory]): returns NO unconditionnally.
1582 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
1583 -appendPersonalSources]): add the "personal" folder to the list of
1584 user folders even if it doesn't exist, so that it is created when
1585 the user accesses it.
1587 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1588 -folderIsMandatory]): returns YES if nameInContainer is set to
1589 "personal", which is the default address book.
1591 * SoObjects/Appointments/SOGoAppointmentFolder.m
1592 ([SOGoAppointmentFolder -folderIsMandatory]): returns YES since
1593 users must have one Calendar folder (one and only one).
1594 ([SOGoAppointmentFolder -_privacySqlString]): unescape the
1595 escaping '\' so make the carriage return a real one. This way,
1596 PgSQL 8 won't complain about escaping the string.
1598 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): new
1599 method that create the folder if considered mandatory.
1600 ([SOGoFolder -folderIsMandatory]): new method that determines
1601 whether the folder should be created automatically or not. To be
1602 overriden by subclasses.
1604 * Main/SOGo.m ([SOGo -run]): override method and create the
1605 missing system tables if needed.
1607 2007-06-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1609 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
1610 -mailDateFormatter]): returns the user's date formatter.
1612 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject -date]):
1613 applies the user timezone to the date object before returning it.
1615 * UI/Common/UIxSortButton.m: removed useless class module.
1617 * UI/Common/UIxSortableTableHeader.m: removed useless class
1620 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1621 -contactInfos]): use the "asc" url parameter instead of "desc" to
1622 determine the ordering.
1623 ([-sortOrdering]): removed method.
1624 ([UIxContactsListView -init]): removed the "searchText" ivar.
1625 (general): the template no longer use the UIxSortableTableHeader
1628 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1629 -defaultSortKey]): default sort following the messages arrival
1630 instead of their date.
1631 ([-isSortedDescending]): removed method.
1632 ([-imap4SortOrdering]): use the "asc" url parameter instead of
1633 "desc" to determine the ordering.
1634 (general): the template no longer use the UIxSortableTableHeader
1637 2007-06-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1639 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sleep]):
1641 ([-setQualifier:_msg], [-qualifier]): removed methods.
1642 ([UIxMailListView -defaultAction]): added code to handle the
1643 search criteria and value passed as url parameters. Also, we now
1644 handle the same search criterias as Thunderbird/Icedove.
1646 2007-06-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1648 * UI/PreferencesUI/UIxJSONPreferences.m ([UIxJSONPreferences
1649 -jsonDefaultsAction]): bug fix: returns a WOResponse instance with
1650 the string instead of the string itself.
1651 ([UIxJSONPreferences -jsonSettingsAction]): same as above.
1653 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): new module
1654 bool var "acceptAnyUser" that is set when the AuthenticationMethod
1655 user default is nil.
1656 ([SOGoUser -initWithLogin:newLoginroles:newRoles]):
1657 unconditionnally returns an instance whenever acceptAnyUser is set.
1659 2007-06-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1661 * Main/sogod.m (main): prevent SOGo from running as root.
1663 2007-06-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1665 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
1666 -setCurrentPassword:newPassword]): new stub method.
1667 ([SOGoUser -dateFormatterInContext:context]): new method that
1668 returns an instance of SOGoDateFormatter configured based on the
1671 * UI/Common/UIxPageFrame.m ([UIxPageFrame
1672 -relativePreferencesPath]): new method.
1674 * UI/Scheduler/UIxComponentEditor.m ([-titleDateFormatter]):
1675 removed useless method.
1677 * SoObjects/SOGo/SOGoDateFormatter.m: rewrote class to accept
1678 different configurable formats (long and short date + time).
1680 * SoObjects/SOGo/SOGoDateFormatter.[hm]: moved from UI/SOGoUI/.
1682 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
1683 -isInternetRequest]): removed method.
1685 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
1686 -jsonRepresentation]): new method with an explicit name.
1688 * UI/PreferencesUI/product.plist: new bundle that provides a web
1689 ui for handling user defaults.
1691 * UI/Scheduler/UIxTaskView.[hm]: removed unused module.
1693 * UI/Scheduler/UIxAppointmentView.[hm]: removed unused module.
1695 * SoObjects/SOGo/WOContext+Agenor.[hm]: removed unused module.
1697 2007-06-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1699 * SoObjects/SOGo/SOGoLRUCache.m: removed unused module.
1701 2007-06-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1703 * UI/Scheduler/NSArray+Scheduler.m ([NSArray
1704 -compareEventsAscending:otherEvent]): no longer use compare: on
1705 the time objects since one of them could be an NSNull, which
1706 crashes when comparing with anything.
1708 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1709 -eventsListAction]): sort events from here.
1710 ([UIxCalListingActions -tasksListAction]): sort tasks from here.
1712 * SoObjects/SOGo/NSObject+AptComparison.[hm]: removed category
1713 module, replaced with NSArray+Scheduler in UI/SchedulerUI/.
1715 * SoObjects/Appointments/SOGoAppointmentFolder.m
1716 ([SOGoAppointmentFolder
1717 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]):
1718 no longer sort elements from here.
1720 2007-06-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1722 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1723 -aclsForUser:uid]): implemented method by forwarding the request
1724 to the container. This fixes a bug where users could no longer
1725 read emails from shared folders.
1727 * SoObjects/Appointments/SOGoCalendarComponent.m
1728 ([SOGoCalendarComponent -init]): "isNew" is no longer defined
1729 here, but rather in its parent class.
1731 * UI/SOGoUI/SOGoDateFormatter.m ([SOGoDateFormatter
1732 -stringForSecondsSinceThe70s:seconds]): new utility method.
1734 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1735 -eventsListAction]): no longer reduce the end day of one day for
1736 all day events since everything has been fixed in
1737 OCSiCalFieldExtractor.
1739 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
1740 -extractQuickFieldsFromEvent:_event]): reduce the seconds/70 of
1741 the end date of all day events of 1 so that they stay on their
1744 2007-06-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1746 * UI/Scheduler/UIxCalMonthView.m: no longer retrieve appointments.
1748 * UI/Scheduler/UIxCalView.m ([-fetchCoreAppointmentsInfos]):
1750 ([-fetchCoreTasksInfos]): removed method.
1752 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1753 -init]): initialize an instance of SOGoDateFormatter.
1754 ([UIxCalListingActions -eventsListAction]): the display start and
1755 end dates are added to the listing for each event.
1757 * UI/Scheduler/UIxCalDayTable.m: no longer retrieve appointments.
1759 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1760 -isAllDay]): returns YES if the "hm" url parameter is set to
1762 ([UIxAppointmentEditor -defaultAction]): if isAllDay, the enddate
1763 is displayed one day earlier.
1765 2007-06-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1767 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1768 -_setupContext]): take the range of dates specified by the popup
1771 * UI/Scheduler/UIxCalListingActions.[hm]: new subclass of
1772 WODirectAction that returns WOResponse objects with the events or
1773 todos satisfying the parameters passed in the url.
1775 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1776 -takeValuesFromRequest:_rqinContext:_ctx]): take the new ivar
1777 "isAllDay" into account and compute the amount of days to pass to
1780 2007-06-06 Francis Lachapelle <flachapelle@inverse.ca>
1782 * SoObjects/SOGo/NSNumber+Utilities.m: initial import.
1783 * SoObjects/SOGo/NSNull+Utilities.m: initial import.
1784 * UI/Scheduler/UIxCalTasksListView.m ([WOResponse -tasksListAction]):
1785 new method that returns a json-formatted array of the visible tasks
1786 for the current user.
1788 2007-06-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1790 * SoObjects/Appointments/SOGoAppointmentObject.m: the owner of the
1791 object must be present in the list of UIDs we delete the object
1792 from. Otherwise Calendar objects having no organizer and no
1793 attendees will remain in their owner's Calendar.
1795 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1796 -_urlPreferringParticle:expectedoverThisOne:possible]): remove the
1797 first 3 elements of the path array if the url returned by
1798 baseURLInContext: returns a hostname.
1800 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1801 -_adjustOwner]): sharedFolderName and otherUsersFolderName may be
1802 nil, in which case a crash happens when calling hasPrefix:.
1803 ([SOGoMailFolder -_sharesACLs]): same as above.
1804 ([SOGoMailFolder -otherUsersPathToFolder]): same as above. If
1805 otherUsersFolderName is nil, we return nil.
1806 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): if we receive
1807 nil from [self otherUsersPathToFolder], we return nil too.
1809 2007-06-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1811 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1812 -_urlPreferringParticle:expectedoverThisOne:possible]): unescape
1813 the result of [self baseURLInContext:] to avoid a double escaping
1814 in the resulting string.
1816 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -aclsForUser:uid]): if
1817 the user has the "ObjectReader" role on the parent container, then
1818 he is granted the "ObjectViewer" role on this object. Same for
1819 "ObjectEraser", although this might change later.
1821 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1822 -toolbar]): determine the toolbar filename based on the
1823 permissions declared by the securitymanager. The role mechanism
1824 has been adjusted on a lowerlevel so we can simplify the code.
1826 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
1827 -initWithName:newNameinContainer:newContainer]): read the content
1828 directly from here. That way we can determine whether the object
1830 ([SOGoContentObject -aclsForUser:uid]): if the object is new and
1831 the ObjectCreator role is enabled, we also grant the ObjectEditor
1832 role to the current user.
1834 * UI/Common/UIxFolderActions.m ([-canAccessContentAction]):
1835 changed the method paradigm to only return HTTP code 204. Not test
1836 is done whatsoever since the security manager does it for us.
1838 * UI/Contacts/UIxContactsListView.m ([-canAccessContentAction]):
1839 removed method because the same exists in UIxFolderActions.m
1841 * UI/Contacts/UIxContactsUserRightsEditor.m
1842 ([UIxContactsUserRightsEditor
1843 -setUserCanReadObjects:userCanReadObjects]): new method.
1845 * SoObjects/SOGo/SOGoPermissions.m: added roles "FolderViewer" and
1846 "FolderEraser" and special permission "Access Object". Removed
1847 role "SOGoMailRole_MessageEraser" since "SOGoRole_ObjectEraser"
1848 can be used instead. Removed "FolderReader" since it is useless.
1850 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
1851 -vCard]): directly use the "content" ivar since it is initialized
1852 during object creation.
1854 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1855 ([SOGoContactLDAPFolder -init]): no longer handle the
1856 nameInContainer no the container ivars. They were removed because
1857 this class is a descendant of SOGoObject which already has them.
1858 ([SOGoContactLDAPFolder -davDisplayName]): new overriden method
1859 returning "displayName".
1860 ([SOGoContactLDAPFolder -isFolderish]): new overriden method
1863 * SoObjects/Appointments/SOGoCalendarComponent.m
1864 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): commented out.
1865 ([SOGoCalendarComponent -findParticipant:user]): new name for
1866 method "participant:".
1867 ([SOGoCalendarComponent -findParticipantWithUID:uid]): same as
1868 findparticipant but taking a uid string as parameter.
1869 ([SOGoCalendarComponent -contentAsString]): don't regenerate the
1870 iCalendar automatically. Instead, this is done only when the user
1871 is a "date and time viewer".
1872 ([SOGoCalendarComponent -aclsForUser:uid]): take delegation roles
1873 (modifier and responder) into account by compiling them with the
1876 * SoObjects/Contacts/SOGoContactFolder.h: removed
1877 "nameInContainer" from the list of required methods.
1879 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
1880 -davContentType]): returns "text/calendar".
1882 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1883 ([SOGoContactLDAPFolder -davResourceType]): declare the correct
1884 groupdav resource-type.
1886 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
1887 -davContentType]): same as below.
1889 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1890 -initWithName:newNameinContainer:newContainer]): new overriden
1891 method setting the custom owner directly.
1893 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
1894 -davContentType]): same as below.
1896 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1897 -davContentType]): same as below.
1899 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davContentType]):
1900 declare "httpd/unix-directory".
1902 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): declare
1903 "UTC" as fallback timezone instead of "Canada/Eastern".
1904 ([-hasEmail:email]): make use of the new NSArray's
1905 containsCaseInsensitiveString: method.
1907 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1908 -davContentType]): declare "message/rfc822" as content type.
1910 * SoObjects/Appointments/SOGoAppointmentFolder.m
1911 ([SOGoAppointmentFolder -_privacySqlString]): "owner" is now an
1913 ([SOGoAppointmentFolder
1914 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): same as above.
1915 ([-fetchContentObjectNames]): commented out method since it was
1916 usefull only for testing Funambol.
1918 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
1919 -containsCaseInsensitiveString:match]): an enhanced version of
1922 * UI/MailerUI/UIxMailView.m ([-isTrashingAllowed]): removed
1924 ([-showMarkDeletedButton]): removed useless method.
1925 ([-showTrashButton]): removed useless method.
1927 * SoObjects/Appointments/iCalEntityObject+SOGo.m
1928 ([iCalEntityObject -userIsParticipant:user]): new proxy method
1929 that invoked isParticipant on self for each possible email
1930 addresses of the user passed as parameter.
1931 ([iCalEntityObject -userIsOrganizer:user]): same as above.
1933 * SoObjects/Appointments/iCalEntityObject+SOGo.[hm]: new class
1936 * SoObjects/Appointments/SOGoAppointmentObject.m
1937 ([SOGoAppointmentObject
1938 -saveContentString:contentStringbaseVersion:baseVersion]): remove
1939 method since an event may not have an organizer.
1941 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1942 -GETAction:localContext]): clarified method. Added support for
1943 content-type (thanks to Helge Hess).
1944 ([SOGoObject -initWithName:_nameinContainer:_container]):
1945 initialize and retain the owner.
1946 ([SOGoObject -davContentType]): returns "text/plain".
1948 2007-05-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1950 * UI/Common/UIxObjectActions.m ([UIxObjectActions
1951 -addUserInAclsAction]): send an acl addition mail.
1952 ([UIxObjectActions -removeUserFromAclsAction]): send an acl
1955 * UI/Common/UIxFolderActions.m ([UIxFolderActions
1956 -_realActionWithFolderName:folderDict]): handle the possible
1957 presence of the "mail-invitation" url parameter. If present, the
1958 user will be redirected to the relevant folder.
1960 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -fullEmail]): new proxy method.
1961 ([SOGoUser -language]): new method that returns the user's
1962 preferred language, or the system's if none has been set yet.
1964 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -davURL]): new method
1965 that returns the full dav url to self.
1966 ([SOGoObject -soURL]): same as above but for the so url (Web UI).
1967 ([SOGoObject -soURLToBaseContainerForUser:uid]): new method that
1968 returns the full so url to the base of the SOGo module to which
1969 self belongs, and for the specified user.
1970 ([SOGoObject -soURLToBaseContainerForCurrentUser]): same as above
1971 but for the current user.
1972 ([SOGoObject -httpURLForAdvisoryToUser:uid]): new protocol method
1973 required by the acl advisory templates and which returns a link
1974 the target user can click to activate its new subscription.
1975 ([SOGoObject -resourceURLForAdvisoryToUser:uid]): same as above
1976 but for inclusion of the application/x-sogo-notification part,
1977 which will be handled by the Lightning enhancer plugin.
1979 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -subscribeAction])
1980 ([UIxMailFolderActions -unsubscribeAction]): new stub methods that
1981 do nothing yet since imap folder subscription is not handled yet.
1983 * SoObjects/SOGo/SOGoContentObject.m
1984 ([-hasSupportForDefaultRoles]): removed method.
1986 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
1987 -getFullEmailForUID:uid]): new method that returns the username +
1990 * SoObjects/Appointments/SOGoCalendarComponent.m
1991 ([SOGoCalendarComponent +initialize]): the default language for
1992 mail templates is now set to English.
1994 * UI/SOGoUI/SOGoACLFrenchRemovalAdvisory.[hm]: new subclass of
1995 SOGoACLAdvisory implementing the french template for user removal
1998 * UI/SOGoUI/SOGoACLFrenchAdditionAdvisory.[hm]: new subclass of
1999 SOGoACLAdvisory implementing the french template for user
2002 * UI/SOGoUI/SOGoACLEnglishRemovalAdvisory.[hm]: new subclass of
2003 SOGoACLAdvisory implementing the english template for user removal
2006 * UI/SOGoUI/SOGoACLEnglishAdditionAdvisory.[hm]: new subclass of
2007 SOGoACLAdvisory implementing the english template for user
2010 * UI/SOGoUI/SOGoACLAdvisory.[hm]: new class module implemented the
2011 supercall of all the acl advistory templates. The model is based
2012 on SOGoAptMailNotification except that the template encapsulates
2013 the message to be sent. Later, we might create a superclass common
2014 to all template-based emails.
2016 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
2017 -addRange:newRange]): new method that store a string
2018 representation of the NSRange passed as parameter.
2019 ([NSMutableArray -hasRangeIntersection:testRange]): tests whether
2020 any range contained in self intersect with the one passed as parameter.
2022 * SoObjects/SOGo/NSString+Utilities.m ([-stringByDetectingURLs]):
2023 store ranges in an array to prevent them from intersecting with
2024 each other during the passes.
2026 2007-05-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2028 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2029 -primaryFetchMailboxInfo]): useless method. Removed.
2031 2007-05-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2033 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2034 -toManyRelationshipKeys]): invoke [self subfolders].
2035 ([SOGoMailFolder -subfolders]): new method containing what used to
2036 be in toManyRelationshipKeys.
2037 ([SOGoMailFolder -subfoldersURL]): same as above but returns imap
2040 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2041 -allFolderPaths]): renamed version of "allFolderPathes", sorted by
2042 named and at the beginning of which we put the predefined folders.
2044 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2045 -emptyTrashAction]): new method inspired by a similar one from
2046 UIxMailListView, to which we added the ability to remove
2049 * UI/MailerUI/UIxMailListView.m ([-emptyTrashAction]): removed
2050 method. Replaced with a similar one in UIxMailFolderActions.
2052 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2053 -renameFolderAction]): implemented method.
2054 ([UIxMailFolderActions -deleteFolderAction]): no longer delete the
2055 specified folder. Instead, we put it in the trash folder.
2057 * UI/MailerUI/UIxMailListView.m ([-createFolderAction]): removed
2058 method, replaced with a similar method in the new
2059 UIxMailFolderAction class module.
2060 ([-deleteFolderAction]): idem.
2062 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2063 -createFolderAction]): new method implementing subfolder creation.
2064 ([UIxMailFolderActions -renameFolderAction]): new method
2065 implementing subfolder renaming (basic implementation to be
2067 ([UIxMailFolderActions -deleteFolderAction]): new method
2068 implementing folder deletion.
2070 * UI/MailerUI/UIxMailFolderActions.[hm]: new module implementing
2071 web actions related to the handling of imap folder.
2073 2007-05-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2075 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2076 -ownerInContext:localContext]): overriden method because we are an
2077 IMAP4 client and we need a bit more intelligence to deduce the
2078 owner of the current folder.
2079 ([SOGoMailFolder -aclsForUser:uid]): aclForMailboxAtURL might
2080 return an NSException so we need to be careful here to avoid a
2082 ([SOGoMailFolder -aclUsers]): aclForMailboxAtURL might return an
2083 NSException so we need to be careful here to avoid a crash.
2085 * SoObjects/Mailer/SOGoMailAccounts.m
2086 ([SOGoMailAccounts -fetchIdentitiesWithOnlyEmitterAccess:_flag])
2087 there is no longer any concept of Intranet or Internet connection
2090 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2091 -sharedFolderName]): new method.
2092 ([SOGoMailAccount -otherUsersFolderName]): new method.
2094 * UI/MailerUI/UIxMailFolderMenu.[hm]: removed module, obsoleted by
2095 new javascript code and the new UIxMailAccountActions class.
2097 * UI/MailerUI/UIxMailTree.[hm]: removed module, obsoleted by new
2098 javascript code and the new UIxMailAccountActions class.
2100 * UI/MailerUI/UIxMailTreeBlock.[hm]: removed module, obsoleted by
2101 new javascript code and the new UIxMailAccountActions class.
2103 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
2104 -listMailboxesAction]): new method that returns a json-formatted
2105 tree of all the mailboxes available to the current user.
2107 * UI/MailerUI/UIxMailAccountActions.[hm]: new module implementing
2108 web actions related to the handling of mail accounts.
2110 * SoObjects/SOGo/NSDictionary+Utilities.[hm]: new extension
2113 * SoObjects/SOGo/NSObject+Utilities.m ([NSObject
2114 -jsonRepresentation]): new interface method meant to be overriden
2115 by the primitive classes.
2117 2007-05-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2119 * UI/MailerUI/UIxMailSplashView.m: removed.
2121 * SoObjects/Appointments/SOGoCalendarComponent.m
2122 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]): add
2123 the uid to the list only when the user email is recognized by the
2126 2007-05-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2128 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2129 -isDeletionAllowed]): completed method with the new imap acl api.
2131 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultAclRoles]):
2134 * SoObjects/SOGo/SOGoPermissions.m: added the new role
2135 "SOGoMailRole_MessageEraser".
2137 * UI/Common/UIxAclEditor.m ([UIxAclEditor -defaultUserID])
2138 ([UIxAclEditor -_prepareUsers]): take the new SOGoObject's
2139 "defaultUserID" method into account.
2141 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -userIsDefaultUser])
2142 ([UIxUserRightsEditor -_initRights]): take the new SOGoObject's
2143 "defaultUserID" method into account.
2145 * UI/MailerUI/UIxMailUserRightsEditor.m: added all the missing
2146 methods to support the IMAP acls mentionned in the RFC 4314,
2147 removed the ones specific to Cyrus.
2149 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultUserID]): new
2150 mandatory method for subclasses. Removed the SOGoDefaultUserID
2153 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -defaultUserID]):
2154 overriden method to return @"<default>".
2156 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2157 -defaultUserID]): overriden method to return @"<default>".
2159 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2160 -aclsForUser:uid]): overriden method.
2161 ([SOGoMailFolder -removeAclsForUsers:users]): overriden method.
2162 ([SOGoMailFolder -setRoles:rolesforUser:uid]): overriden method.
2163 ([SOGoMailFolder -defaultUserID]): overriden method.
2164 ([SOGoMailFolder -hasSupportForDefaultRoles]): overriden method.
2166 2007-05-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2168 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2169 -aclUsersForObjectAtPath:objectPathArray]): new method that being
2170 forwarded the calles to aclUsers for the GCS-based subclasses of
2173 * SoObjects/Mailer/SOGoMailFolder.m: removed all the previous
2174 methods that would have been used to support IMAP acls. Replaced
2175 them with the new protocol for them that has been implemented in
2176 SOGo during the last few weeks.
2178 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2179 -hasSupportForDefaultRoles]): override method by returning "YES".
2181 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
2182 -addObjectUniquely:object]): new method with an explicit name.
2184 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -aclUsers]): renamed
2185 "acl" to "aclUsers". Now designed to return only the uid of the
2186 users involved in an ACL.
2187 ([SOGoObject -hasSupportForDefaultRoles]): new method returning
2188 "NO" by default. To indicate to the acl editor that we don't want
2189 to handle a default user.
2191 * SoObjects/SOGo/SOGoPermissions.[hm]: added the
2192 SOGoRole_ObjectReader, SOGoRole_Folder*, and SOGoMailRole_*
2195 * UI/MailerUI/UIxMailUserRightsEditor.[hm]: new class module that
2196 provides a view to the IMAP acls.
2198 * UI/MailerUI/UIxMailFolderACLEditor.m: removed obsolete module.
2200 * UI/WebServerResources/MailerUI.js: replaced all invocations of
2201 addEventListener to the use of prototype's Event object. Also,
2202 configured all menus programmatically following descriptions lists
2203 containing their callbacks, or nulls, submenus id or separators.
2205 2007-05-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2207 * UI/Common/UIxObjectActions.m ([UIxObjectActions
2208 -addUserInAclsAction]): save the previous roles of the user
2209 (unlikely) or the default roles, or None instead of saving the
2210 roles that should appear the first time in the role editor when no
2211 default has been set...
2213 * SoObjects/SOGo/SOGoObject.m: defined a new constant
2214 "SOGoDefaultUserID".
2216 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2217 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]):
2218 ignore the "AuthorizedSubscriber" role and add the "None" role
2219 when no other role is found.
2221 * UI/Common/UIxAclEditor.m: added a button for the new default
2224 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
2225 -_initRights]): don't take the "None" role into account when
2226 initializing the list of current roles.
2228 * SoObjects/SOGo/SOGoPermissions.m: added a new void role
2231 2007-05-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2233 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2234 -_rangeOfURLInRange:refRange]): urls cannot end with "&" nor "=".
2235 There is no need to subscract the start from the length if a space
2236 is not found since the range has not changed either. Finally, the
2237 first character before the url might also be a tab or a cr, so we
2238 match it against the "urlAfterEndingChars" custom NSCharacterSet.
2239 ([NSString -stringByDetectingURLs]): modified to handle email
2240 addresses and add a correct "mailto:" link.
2242 2007-05-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2244 * SoObjects/Appointments/SOGoAppointmentFolder.m
2245 ([SOGoAppointmentFolder -fetchContentObjectNames]): override
2246 method to return the events in the range of 2 weeks ago up to 4
2249 * UI/MailPartViewers/UIxMailPartTextViewer.m
2250 ([UIxMailPartTextViewer -flatContentAsString]): use the new
2251 "stringByDetectingURLs" method to offer clickable urls.
2253 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2254 -stringByDetectingURLs]): this new method replaces passive URLS
2255 with active ones for HTML resolution of the text.
2257 2007-05-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2259 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
2260 -asQPSubjectString:encoding]): simplified method.
2261 The headers indicates "utf-8" again thank to our fix in
2264 * SoObjects/SOGo/SOGoObject.m: fail to build if libFoundation is
2267 2007-05-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2269 * UI/Common/UIxObjectActions.m ([UIxObjectActions
2270 -removeUserFromAclsAction]): implemented this method which was
2271 missing and is required to remove users from ACLs.
2273 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2274 -subscribeAction]): folderDict was not autoreleased, resulting in
2277 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2278 -primaryFetchProfile]): when building with libFoundation, don't
2279 use the "propertyList" method from NSString. Rather, we convert
2280 the string to an NSData instance and passit as parameter to
2281 NSDeserializer. This way, we obtain a mutable dictionary rather
2282 than an immutable one.
2284 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -bodyPartForText])
2285 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): use the
2286 constant string "contentTypeValue".
2287 contentTypeValue is now set back to iso-8859-1 since NGMime
2288 converts extracts the data in that encoding.
2290 2007-05-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2292 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
2293 -checkLogin:loginToCheckandPassword:passwordToCheck]): if a
2294 "bindFields" value is present in the user defaults, use the
2295 specified fields to find the dn of the user to bind.
2296 ([LDAPSource -allEntryIDs])
2297 ([LDAPSource -fetchContactsMatching:match])
2298 ([LDAPSource -lookupContactEntry:entryID])
2299 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]):
2300 bind and unbind the connection on each request.
2302 * UI/MailerUI/UIxMailAddressbook.m: removed obsolete module.
2304 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2305 -contactSearchAction]): simplified method to use the facilities
2306 provided by the LDAPUserManager. No longer takes care of the
2307 "ldap-only" url parameter since all requests are handled by the
2310 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2311 -primaryFetchProfile]): check that the value returned is not null
2312 before interpreting it.
2314 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
2315 -contactInfosForUserWithUIDorEmail:uid]): check that uid is not empty.
2316 ([LDAPUserManager -_fillContactMailRecords:contact]): if the
2317 system email is already present, remove it before adding it.
2319 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
2320 -checkLogin:loginToCheckandPassword:passwordToCheck]): check that
2321 loginToCheck is not empty.
2322 ([LDAPSource -fetchContactsMatching:match]): check that match is
2324 ([LDAPSource -lookupContactEntry:entryID]): check that entryID is
2326 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]): check that
2329 2007-05-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2331 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -primaryEmail]): new name
2333 ([SOGoUser -systemEmail]): returns the email formed from the
2334 username and the default mail domain.
2335 ([SOGoUser -hasEmail:email]): test whether the user has the
2336 specified email, in a case-insensitive way.
2338 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2339 -LDAPCheckLogin:_loginpassword:_pwd]): use the user manager to
2340 check login information.
2342 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2343 ([SOGoContactLDAPFolder
2344 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
2345 no longer manage LDAP connections. The requests are forwarded to
2346 the relevant LDAPSource instead.
2348 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2349 -appendSystemSources]): pass LDAPSource objects to
2350 SOGoContactLDAPFolder instances.
2352 * SoObjects/Mailer/SOGoDraftObject.m: extract the raw email
2353 address of the "from" field before sending the message. Otherwise,
2354 sending the mail won't work.
2356 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -fromEMails]):
2357 rewrote this method to request all the available email identities
2358 for the current user. Also, the from field also contains the full
2359 name of the user, not just his/her email address.
2361 * SoObjects/Appointments/SOGoCalendarComponent.m
2362 ([SOGoCalendarComponent -iCalPersonWithUID:uid]): new method taken
2363 from the previous module iCalEntityObject+Agenor.
2364 ([SOGoCalendarComponent -getUIDForICalPerson:person]): idem.
2365 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]):
2368 * SoObjects/Contacts/SOGoContactLDIFEntry.[hm]: new class module
2369 replacing the SOGoContactLDAPEntry module. It was renamed as such
2370 because it now receives a dictionary instead of an NGLdapEntry.
2371 It thus can now handle data from any source of LDIF data, not
2372 only coming from LDAP.
2374 * SoObjects/SOGo/LDAPUserManager.[hm]: new class module
2375 implementing most of what used to be the AgenorUserManager class.
2376 The difference is that users are cached in the forme of
2377 dictionaries and many sources are used. Also, it can be used to
2378 search LDAP contacts.
2380 * SoObjects/SOGo/LDAPSource.[hm]: new class module implementing
2381 the concept of "ldap source", to be used by all the classes
2382 needing access to LDAP-provided information: addressbooks and the
2383 user manager. Most the method thereing are transcriptions of
2384 methods previously found in SOGoContactLDAPFolder. It also contain
2385 utility methods for user matching and authentification.
2387 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: removed
2388 module, rendered useless by code refactoring.
2390 * SoObjects/SOGo/AgenorUserManager.[hm]: removed module, replaced
2391 with the freshly written "LDAPUserManager".
2393 2007-05-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2395 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: renamed to
2396 SOGOContactLDIFEntry.
2398 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: removed class
2399 module, obsoleted by code in SOGo/LDAPSource.[hm].
2401 2007-05-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2403 * UI/Common/UIxAclEditor.m ([UIxAclEditor -currentUserIsOwner]):
2404 new method with an explicit name.
2406 2007-05-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2408 * SoObjects/Appointments/SOGoCalendarComponent.m
2409 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): new method
2410 replacing "isOrganizer:orOwner:" by taking only one instance of
2411 SOGoUser as parameter.
2412 ([SOGoCalendarComponent -participant:user]): new method replacing
2413 the previous "isParticipant" boolean method by returning the first
2414 participant matching the user passed as parameter. This method is
2415 used so that both the regular email address and the "system email
2416 address" of the user are matched against the participants emails.
2418 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
2419 -getSystemEMailForUID:uid]): new method that returns the email
2420 formed with the user's uid and the default mail domain.
2422 * SoObjects/Appointments/SOGoCalendarComponent.m
2423 ([SOGoCalendarComponent -rolesOfUser:login]): removed method that
2424 was previously commented out.
2426 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -systemEmail]): new method
2427 forwared to [AgenorUserManager getSystemEmailForUID:].
2429 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2430 -toolbar]): method replacing the one with the same name in the
2431 task and appointment editor classes. This method makes also use of
2432 the new method "isOrganizerOrOwner:" and "participant:" in
2433 SOGoCalendarComponent.
2435 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2436 -toolbar]): removed method, replaced with a method with the same
2437 name in UIxComponentEditor.
2439 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -toolbar]): removed
2440 method, replaced with a method with the same name in
2443 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2444 -primaryFetchProfile]): the values returned from the database are
2445 converted to a put dictionary first, since the dictionary returned
2446 is actually an immutable one, which can cause a crash afterwards.
2448 2007-04-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2450 * SoObjects/SOGo/SOGoPermissions.m: added "SOGoRole_ObjectViewer"
2451 and "SOGoRole_ObjectEditor".
2453 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
2454 -prepareRightsForm]): this method is no longer mandatory.
2456 * UI/Contacts/UIxContactsUserRightsEditor.m
2457 ([UIxContactsUserRightsEditor
2458 -setUserCanCreateObjects:userCanCreateObjects]): new subclass
2459 module to handle acls related to the address books. Partial
2462 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2463 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): cache
2466 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): remove
2467 specified roles from cache.
2468 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
2469 put resulting roles in cache.
2471 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -init]): do not invoke
2472 initWithName:inContainer:. Instead, directly initialize the ivars
2473 as it is supposed to be to avoid an infinite loop whenever one of
2474 those two methods are overriden.
2476 * SoObjects/SOGo/SOGoContentObject.m ([-rolesOfUser:login]):
2479 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
2480 -aclsForUser:uid]): override method so that SOGo won't crash when
2481 loading the contact card.
2483 2007-04-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2485 * SoObjects/Appointments/SOGoAppointmentFolder.m
2486 ([SOGoAppointmentFolder -_privacySqlString]): the string for the
2487 "freebusy" special user should only require opaque elements.
2489 2007-04-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2491 * SoObjects/Appointments/SOGoAppointmentFolder.m
2492 ([SOGoAppointmentFolder -davResourceType]): fixed a problem with
2493 our double declaration where the resulting XML would be screwed.
2494 There is only one collection per namespace.
2496 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
2497 rfc822DateString]): new method that returns a string conform to
2498 rfc 822 and suitable for email headers.
2500 * SoObjects/Mailer/SOGoDraftObject.m: invoke the new
2501 "rfc822DateString" category method on the date we put in the
2504 2007-04-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2506 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -defaultAction])
2507 ([UIxUserRightsEditor -saveUserRightsAction]): new action methods
2508 which should never be overriden.
2509 ([UIxUserRightsEditor -appendRight:newRight])
2510 ([UIxUserRightsEditor -removeRight:right])
2511 ([UIxUserRightsEditor -appendExclusiveRight:newRightfromList:list])
2512 ([UIxUserRightsEditor -removeAllRightsFromList:list]): new utility
2513 methods that can be used by the subclasses.
2514 ([UIxUserRightsEditor -prepareRightsForm]): new method that should
2515 mandatorily be overriden to prepare the elements of the subclassed
2517 ([UIxUserRightsEditor -updateRights]): new method that should
2518 mandatorily be overriden to update the user rights from the
2519 elements of the subclassed form.
2521 * UI/Common/UIxAclEditor.m ([UIxAclEditor -_prepareUsers]): we
2522 check if the uid is already listed before adding it to our array.
2523 This is because the acl table can contain more than one record per
2524 user/object relationship.
2526 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2527 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): the
2528 "roles" parameter is now an NSArray instead of a string. Therefore
2529 we loop throughout the array to populate the table. All the
2530 relevant records are removed prior to the addition of the new
2533 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
2534 -aclsForUser:uid]): new override that returns nil until we add
2535 support for IMAP acls.
2537 * SoObjects/Mailer/SOGoMailAccounts.m
2538 ([SOGoMailAccounts -aclsForUser:uid]): same as below.
2540 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2541 ([SOGoContactLDAPFolder -aclsForUser:uid]): same as below.
2543 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2544 -aclsForUser:uid]): override this method which will always return
2547 * SoObjects/SOGo/SOGoPermissions.[hm]: added
2548 [Public,Private,Confidential]
2549 x[Viewer,DAndTViewer,Responder,Modifier]. Renamed
2550 SOGoRole_ORganizer to SOGoCalendarRole_Organizer. Same for
2551 ..._Participant. Removed SOGoRole_Assistant and SOGoRole_Delegate.
2553 * SoObjects/Appointments/SOGoAppointmentFolder.m
2554 ([SOGoAppointmentFolder -defaultAclRoles]): new overriden method
2555 that defines default roles for new elements in the acl.
2557 * UI/Scheduler/UIxCalUserRightsEditor.[hm]: new component class
2558 module and subclass of UIxUserRightsEditor specific to the
2559 handling of user rights on calendar folders.
2561 2007-04-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2563 * SoObjects/Appointments/SOGoAppointmentFolder.m
2564 ([SOGoAppointmentFolder -groupDavResourceType]): return both
2565 "vevent-collection" and "vtodo-collection".
2567 * UI/Common/UIxUserRightsEditor.[hm]: new template class module
2568 that implements the detailed editor of user rights per-object.
2570 2007-04-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2572 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
2573 -rolesForObject:objectinContext:context]): no longer query objects
2574 for "roleForUser:". Instead, all objects should implement
2577 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject -acls]):
2578 new method to comply with the new acl "protocol" in SOGoObject.
2579 Uses SOGoFolder's new facilities for ACLS.
2580 ([SOGoContentObject -aclsForUser:uid]): idem.
2581 ([SOGoContentObject -setRoles:rolesforUser:uid]): idem.
2582 ([SOGoContentObject -removeAclsForUsers:users]): idem.
2584 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2585 -aclsForObjectAtPath:objectPathArray]): new method generic to GCS
2586 based folders. This method is derived from the code that was in
2587 UIxAclFolder before its removal.
2588 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
2591 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): idem.
2593 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): idem.
2594 ([SOGoFolder -setRoleForUsers:uidsto:role])
2595 ([SOGoFolder -setRoleForUsers:uidsto:role]): removed method.
2597 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -acls]): stub method
2598 that requires overriding by subclasses.
2599 ([SOGoObject -aclsForUser:uid]): idem.
2600 ([SOGoObject -defaultAclRoles]): idem.
2601 ([SOGoObject -setRoles:rolesforUser:uid]): idem.
2602 ([SOGoObject -removeAclsForUsers:users]): idem.
2604 * UI/Common/UIxObjectActions.m: new module implementing the web
2605 actions common to SOGoObject and all its subclasses.
2606 ([UIxObjectActions -addUserInAclsAction]): new method that adds a
2607 user with the clientObject defaults user rights to the object's
2610 * UI/Common/UIxAclEditor.m: modified module so as to simplify it
2611 to the point where it will only list the users (and their name)
2612 associated with an object acl.
2614 * SoObjects/SOGo/SOGoAclsFolder.m: removed module because its
2615 methods have been moved into SOGoObject and SOGoFolder during a
2618 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2619 -iCalParticipantsAndResourcesStringFromQueryParameters]): removed
2620 method made useless by the programmatic handling of iCalendar
2622 ([UIxComponentEditor -iCalParticipantsStringFromQueryParameters]): idem.
2623 ([UIxComponentEditor -iCalResourcesStringFromQueryParameters]): idem.
2624 ([UIxComponentEditor -iCalStringFromQueryParameter:_qpformat:_format]): idem.
2626 * UI/WebServerResources/MailerUI.js (initDnd): enable drag and
2627 drop on all folder nodes, not just on leaves.
2629 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2630 ([SOGoContactLDAPFolder
2631 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): request field "uid" when doing a search.
2633 2007-04-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2635 * Main/SOGo.m ([SOGo +initialize]): on GNUstep, trigger some
2636 debugging facilities when the SOGoDebugObjectAllocation user
2639 2007-04-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2641 * SoObjects/SOGo/NSString+Utilities.m ([NSString -boolValue]): new
2642 method that SOGo will need with non-gnustep Foundation
2644 ([NSString -stringByAppendingPathComponent:component]): new method
2645 that SOGo will need when building with libFoundation. Method
2646 removed later since it is available from
2647 Foundation/NSPathUtilities.h.
2649 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -timeZone]): method moved
2652 * SoObjects/SOGo/SOGoObject.m: new ivar "context" that permits
2653 every subclass to access [WOApplication context] without having to
2654 invoke it more than once.
2656 * SoObjects/Appointments/SOGoCalendarComponent.m
2657 ([SOGoCalendarComponent -changeParticipationStatus:_status]):
2658 moved method from SOGoTaskObject and SOGoAppointmentObject up to
2661 * UI/Scheduler/UIxCalSelectTab.m: removed module.
2663 2007-04-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2665 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
2666 -vCard]): test the prefix of the card in a case-independent way.
2668 * OGoContentStore/OCSContactFieldExtractor.m
2669 ([OCSContactFieldExtractor
2670 -extractQuickFieldsFromContent:content]): we no longer accept
2671 records in a format other than versit vCard so we can get rid of a
2674 2007-04-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2676 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2677 -selectorComponentClass]): restored method.
2679 2007-04-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2681 * UI/Scheduler/UIxCalTasksListView.m ([UIxCalTasksListView
2682 -shouldDisplayCurrentTask]): the current task is not displayed if
2683 it is NOT completed or if the "showCompletedTasks" flag is set.
2684 The logic was inverted in Lightning and is now in SOGo too.
2686 2007-04-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2688 * UI/Contacts/UIxContactView.m ([UIxContactView -workUrl]): we
2689 want the "work" url instead of the "home".
2691 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
2692 -_saveSnapshot]): save url values from snapshot.
2693 ([UIxContactEditor -initSnapshot]): load url values from snapshot.
2695 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2696 -calendarList]): new method replacing "availableCalendars".
2698 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
2699 -calendarFolders]): we now take the list of subscribed calendar
2702 * SoObjects/Appointments/SOGoAppointmentFolder.m
2703 ([SOGoAppointmentFolder -calendarFoldersInContext:context]): new
2704 method derived from and replacing [UIxCalView calendarFolders].
2706 2007-03-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2708 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2709 -toManyRelationshipKeys]): don't put the predefined folders in the
2710 list if they are returned by the server.
2712 * UI/MailerUI/UIxMailTree.m ([UIxMailTree -flattenedNodes]): we no
2713 longer store the "flattenedBlocks" in a dictionary since the
2714 object will be deleted anyway and we don't need to put the folders
2717 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
2718 ([UIxMailPartHTMLViewer -_attachmentIds]): take the current
2719 attachment path into account when computing the part urls.
2721 2007-03-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2723 * UI/Contacts/UIxContactsListViewContainer.m
2724 ([UIxContactsListViewContainer -additionalFolders]): take the list
2725 of subscribed folders from the new property list used for the user
2726 settings. The value of its key is SubscribedFolders for the
2727 dictionary entry named "Contacts".
2729 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2730 -canAccessContentAction]): new method to override the one from
2731 UIxFoldersActions by taking into account the fact that, this time,
2732 the clientObject is an ldap folder. Removed many method that used
2733 to be related to the handling of the user selector.
2735 * UI/Scheduler/UIxCalDayView.m: commented out many unused methods
2736 to make sure they can be removed.
2738 * UI/Scheduler/UIxCalView.m ([UIxCalView -_setupCalendarFolders]):
2739 populate the calendar entries based on the user settings plist.
2741 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2742 -selectForMailerAction]): restored method.
2744 * UI/Scheduler/UIxCalendarSelector.m: new template module derived
2745 from a simplified version of the old UIxContactEditor (removed).
2747 * UI/Contacts/UIxContactsUserFolders.m: new template module for
2748 selecting users or user folders through an LDAP search of which
2749 the results are displayed as a tree.
2751 * UI/WebServerResources/UIxMailEditor.js: moved previous generic
2752 method "onContactAdd" here since the Mailer is now the only module
2753 to use it when composing emails.
2755 * UI/WebServerResources/generic.js: added code for handling the
2756 new scheme used for describing SOGo folders, common code to handle
2757 folder addition or removal.
2759 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2760 -activateFolderAction]): new method that change the "active"
2761 settings in the folder-related fields in the user settings.
2762 ([UIxFolderActions -deactivateFolderAction]): see above.
2764 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2765 -checkRightsAction]): removed method.
2767 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2768 -updateAdditionalAddressBooksAction]): removed method.
2770 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
2771 -updateCalendarsAction]): removed method.
2773 2007-03-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2775 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
2776 -checkRightsAction]): removed method.
2778 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2779 -canAccessContentAction]): new method designed to replace
2780 [UIxCalMainView checkRightsAction] in a more universal way.
2782 2007-03-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2784 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2785 -roleOfUser:uidinContext:context]): take all the subkeys into
2786 account, not only the "personal" folder.
2788 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2789 -takeValuesFromRequest:_rqinContext:_ctx]): append a "uid" field
2790 to the new components.
2792 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -userSettings]): new method
2795 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
2796 -getUserDefaultsForUID:uid]): rewrote method to use the "defaults"
2797 field of the sogo_user_profile table, where the user-customizable
2798 changes will be saved.
2799 ([AgenorUserManager -getUserSettingsForUID:uid]): new method
2800 similar to the one above, using the "settings" field where the
2801 automatic settings will be saved.
2803 * SoObjects/SOGo/AgenorUserDefaults.m: rewrote a big part of the
2804 module to bind the userdefaults to a property list contained in a
2805 specified field of the sogo_user_profile table.
2806 ([AgenorUserDefaults
2807 -initWithTableURL:tableURLuid:userIDfieldName:defaultsFieldName]):
2808 added a "fieldName" parameter.
2810 * UI/Common/UIxFolderActions.m: new module implementing web
2811 actions common to all GCS-based folders.
2813 2007-03-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2815 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -labelForDay]):
2816 put a carriage return after the day name.
2818 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
2819 -readFreeBusyAction]): restored method.
2821 2007-03-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2823 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
2824 -defaultAction]): remade module to redirect automatically to the
2827 * SoObjects/Contacts/NSDictionary+Contact.m: removed module.
2829 2007-03-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2831 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2832 -deleteAction]): new web method to delete personal addressbook
2835 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
2836 -delete]): override method to refuse the deletion of the folder if
2837 its nameInContainer is "personal".
2839 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -delete]): new method
2840 that forwards the deletion request to the folder manager.
2842 2007-03-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2844 * UI/Scheduler/UIxAttendeesEditor.m ([UIxAttendeesEditor
2845 -zoomList]): new method that returns the list of available zoom factors.
2847 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
2848 -changeStatusAction]): rewrote method.
2850 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2851 -_handleAttendeesEdition]): make sure "attendeesNames" has a
2852 length > 0 before computing the attendees. Otherwise there will be
2853 an invalid empty entry.
2854 ([UIxComponentEditor -_handleOrganizer]): new method that adds the
2855 organizer when there are attendees and remove it when the
2856 attendees are removed.
2858 2007-03-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2860 * UI/Scheduler/UIxAttendeesEditor.m): new component.
2862 * UI/Scheduler/UIxComponentEditor.m: no longer a superclass for
2863 the task and appointment editors. Now a container component
2864 handling the common elements of tasks and events.
2866 * UI/Scheduler/UIxTaskEditor.m: same as below.
2868 * UI/Scheduler/UIxAppointmentEditor.m: rewrote template. No longer
2869 a subclass of UIxComponentEditor but a subcomponent of it.
2871 * UI/Common/UIxToolbar.m ([UIxToolbar -toolbarConfig]): the
2872 toolbar can have the special value "none" to indicate there is
2873 none attached to the window.
2875 * SoObjects/Appointments/SOGoCalendarComponent.m
2876 ([SOGoCalendarComponent -isOrganizer:emailorOwner:login]): new
2878 ([SOGoCalendarComponent -isParticipant:email]): new method.
2879 ([SOGoCalendarComponent -calendar:create]): takes one parameter
2880 "create" which is a boolean indicating whether we want to create
2881 the calendar if it does not exist.
2883 2007-03-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2885 * UI/Scheduler/UIxCalMonthView.m: changed view to use divs instead
2886 of a table, the same way the dayly and weekly views have been for
2889 2007-02-09 Helge Hess <helge.hess@opengroupware.org>
2891 * SoObjects/Appointments/SOGoAppointmentFolder.m: added CalDAV
2894 * SoObjects/SOGo/SOGoUserFolder.m: added davCalendarHomeSet CalDAV
2895 property to point at the user folder
2897 2007-03-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2899 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2900 -userInContext:]): returns "SOGoUser".
2902 * SoObjects/Appointments/SOGoCalendarComponent.m
2903 ([SOGoCalendarComponent -contentAsString]): overriden method that
2904 takes the privacy into account and discard the relevant fields if
2905 needed by generating a new content string and caching it.
2906 ([SOGoCalendarComponent
2907 -saveContentString:contentStringbaseVersion:baseVersion]): if the
2908 new method above has cached a content string, release it and set
2909 it to nil so that it will have to be regenerated in the case it is
2911 ([SOGoCalendarComponent -_filterPrivateComponent:component]):
2912 discard the fields that have to be hidden when the card is
2915 * SoObjects/Appointments/SOGoAppointmentFolder.m
2916 ([SOGoAppointmentFolder
2917 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]): make
2918 sure the cards are now handled as instances of
2919 SOGoCalendarComponent instead of SOGoContentObject so that their
2920 content string is taking the privacy classifiction into account.
2921 ([SOGoAppointmentFolder -_privacySqlString]): new method that
2922 generates a query to determine what information can be given and
2923 if the card itself has to be shown.
2925 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
2926 -getICalPersonsFromValue:selectorValue]): removed useless
2927 "isAccessRestricted" method.
2929 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
2930 -setStyle:_style]): test whether the values of orgmail and
2931 partmails are null before manipulating them, otherwise SOGo sends
2932 a "rangeOfString:" message to an NSNull, which makes it crashes.
2934 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2935 -extractQuickFieldsFromEvent:_event]): we now use the new
2936 "symbolicAccessClass" method from iCalEntity to determine the
2937 value of the "classifiction" field.
2938 ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]): same
2941 2007-03-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2943 * SoObjects/Appointments/SOGoAppointmentFolder.m
2944 ([SOGoAppointmentFolder
2945 -fetchCoreInfosFrom:_startDateto:_endDatecomponent:_component]):
2946 see below, the query is adapted consequently.
2948 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2949 -extractQuickFieldsFromTodo:_task]): the field "ispublic" was
2950 renamed to "classification" and can any integer as value.
2951 ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event]):
2954 2007-02-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2956 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
2957 ([_UIxHTMLMailContentHandler -_appendStyle:_charslength:_len]):
2958 don't prepend anything to the class and id named. Instead, we
2959 make each style embedded in the ".SOGoHTMLMail-CSS-Delimiter"
2962 2007-02-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2964 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2965 -rolesOfUser:logininContext:context]): if object does not exists
2966 (for example when it's being created), the current user has the
2967 same rights on it than he/she has on its parent container.
2969 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2970 -nameExistsInFolder:objectName]): methods that tests if a c_name
2971 corresponding to the name passed as parameter is present in the db
2974 2007-02-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2976 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
2977 -rolesForObject:objectinContext:context]): test for
2978 "rolesOfUser:inContext:" in addition to "roleOfUser:...".
2980 * SoObjects/Appointments/SOGoCalendarComponent.m
2981 ([SOGoCalendarComponent -rolesOfUser:logininContext:context]):
2982 returns the roles of the user on the container object if the event
2985 2007-02-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2987 * UI/MailPartViewers/UIxMailRenderingContext.m: returns the
2988 alternativeViewer a multipart/related message is being handled.
2990 * UI/MailPartViewers/UIxMailPartHTMLViewer.m: reimplemented module
2993 * UI/MailPartViewers/UIxMailPartAlternativeViewer.m: select the
2994 text/html component before text/plain.
2996 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2997 -addRequiredKeysOfStructure:path:toArray:recurse:]): accepts the
2998 fetching of HTML parts.
3000 * SoObjects/Appointments/SOGoCalendarComponent.m
3001 ([SOGoCalendarComponent -componentTag]): new template method that
3002 returns the vcalendar tag of the current object.
3003 ([SOGoCalendarComponent -component]): new method that returns the
3004 first object matching [self componentTag] within the current
3005 calendar object. This method replaces 'firstEventInCalendar:' as
3006 well as "firstTaskInCalendar:".
3007 ([SOGoCalendarComponent -roleOfUser:logininContext:context]):
3008 moved method from SOGoAppointmentObject.m.
3010 2007-02-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3012 * UI/Scheduler/UIxCalMulticolumnDayView.[hm]: new daily view
3013 module which shows each selected user's calendar in a different
3014 column instead of mixing their events together.
3016 * UI/Scheduler/UIxCalView.m ([UIxCalView -redirectForUIDsAction]):
3017 replaced use of [NSString stringByTrimmingWhiteSpaces] with
3018 [NSString stringByTrimmingSpaces].
3020 * UI/MailPartViewers/UIxMailPartICalViewer.m: request the key
3021 "cnWithoutQuotes" instead of "cnForDisplay", which no longer
3024 * UI/Scheduler/UIxCalDayOverview.m,
3025 UI/Scheduler/UIxCalDayChartview.m,
3026 UI/Scheduler/UIxCalDayListview.m,
3027 UI/Scheduler/UIxCalWeekOverview.m,
3028 UI/Scheduler/UIxCalWeekChartview.m,
3029 UI/Scheduler/UIxCalWeekListview.m,
3030 UI/Scheduler/UIxCalInlineMonthOverview.m,
3031 UI/Scheduler/UIxCalYearOverview.m: removed unused modules.
3033 2007-02-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3035 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3036 -appendPersonalSourcesInContext:context]): release connectoin
3037 channel when everything is done.
3039 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3040 -newAbAction]): new action method to crate a new contact folder
3043 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -create]): new method
3044 that requests the folder manager to create a folder table with the
3045 specified type at the specified path. The type is taken from [self
3048 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3049 -folderType]): implemented.
3051 * SoObjects/Appointments/SOGoAppointmentFolder.m
3052 ([SOGoAppointmentFolder -folderType]): implemented.
3054 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3055 -appendPersonalSourcesInContext:context]): we now fetch all
3056 folders with type "Contact" that belong to the current user.
3057 ([SOGoContactFolders -newFolderWithName:name]): new method to
3058 create a new contact folder.
3060 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]): treat
3061 resulting url with [NSString+Utilities hostlessURL] instead of
3062 using NSURL. This is because the url in question sometimes has a
3063 hostname and sometimes not. "hostlessURL" ensure the hostname is
3065 ([UIxComponent -applicationPath]): same as above.
3067 2007-02-08 Ludovic Marcotte <ludovic@inverse.ca>
3069 * SoObjects/Mailer/SOGoMailFolder.m: priorize the lookup of
3070 folders before doing the one on messages.
3072 2007-02-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3074 * SoObjects/SOGo/NSArray+Utilities.m: added an implementation of
3075 makeObjectsPerform:withObject:withObject: for GNUstep
3078 * OGoContentStore/GNUmakefile, Protocols/common.make,
3079 SoObjects/common.make, UI/common.make: install in
3080 GNUSTEP_INSTALLATION_DIR instead of GNUSTEP_USER_DIR.
3082 2007-02-07 Ludovic Marcotte <ludovic@inverse.ca>
3084 * UI/Scheduler/English.lproj/Localizable.strings: fixed typo for
3087 2007-02-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3089 * UI/MailerUI/UIxMailTree.m ([UIxMailTree
3090 -getTitle:folderType:andIcon:forObject:]): disabled Sieve folders
3093 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3094 -checkLogin:_loginpassword:_pwd]): fixed a bug where a wrong
3095 password would be accepted anyway as long as its length was > 0.
3096 This can be the case ONLY when LDAP is disabled otherwise we have
3097 a serious security issue...
3099 * SoObjects/Appointments/SOGoAppointmentObject.m
3100 ([SOGoAppointmentObject -roleOfUser:logininContext:context]): if a
3101 user is not an organizer nor a participant, he is declared as
3102 "Owner" if he owns the calendar the entry where the entry is
3103 contained. Other cases should not be possible.
3105 2007-02-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3107 * UI/Contacts/UIxContactEditor.m: display and handle the new
3110 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3111 ([SOGoContactLDAPFolder -_searchAttributes]): retrieve "calFBURL"
3114 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3115 -vCard]): put the LDAP "calFBURL" field in the vCard's "FBURL"
3118 2007-01-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3120 * SoObjects/Appointments/SOGoCalendarComponent.m
3121 ([SOGoCalendarComponent -sendEMailNotifications]): new method that
3122 returns the value of ud "SOGoAppointmentSendEMailNotifications"
3124 ([SOGoCalendarComponent
3125 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]): method moved from SOGoAppointmentObject/SOGoTaskObject, replacing occurences of "appointment" to "object" in its name.
3127 2007-01-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3129 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
3130 -defaultAction]): invoke "flushMailCaches" on [self clientObject]
3131 so that the mailbox cache is refreshed everytime the user presses
3132 on "get mail". I doubt a mailbox cache really is useful in general
3135 2007-01-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3137 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3138 -userInContext:]): if the lookup is on "freebusy.ifb" and the
3139 username is "anonymous" the user is automatically set to
3142 2007-01-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3144 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3145 -checkLogin:_loginpassword:_pwd]): authorize special "freebusy"
3146 user with password "freebusy".
3148 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
3149 -contentAsString]): the default timerange is now 14 days before
3150 currentday and 1 month after.
3152 2007-01-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3154 * SoObjects/Appointments/SOGoAppointmentFolder.m
3155 ([SOGoAppointmentFolder
3156 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
3157 escape the record string in a way suitable with XML encoding.
3159 2007-01-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3161 * UI/WebServerResources/SchedulerUI.js: fixed a bug where the
3162 calendar view would not be updated properly.
3164 2007-01-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3166 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3167 -newStartDate]): fix the handling of the component start date
3168 depending on the "hm" and the "day" parameters.
3170 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
3171 -roleOfUser:uidinContext:context]): set role of current user to
3172 "Assistant" if the object that is accessed is "freebusy.ifb".
3174 * SoObjects/Appointments/SOGoAppointmentFolder.m
3175 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): method
3176 moved from UI/Scheduler/UIxCalView:calendarFolderForUID:.
3177 ([SOGoAppointmentFolder
3178 -lookupCalendarFoldersForUIDs:_uidsinContext:]): now use the new
3179 lookupCalendarFolderForUID: method, which doesn't do security
3182 2007-01-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3184 * UI/Common/UIxAclEditor.m ([UIxAclEditor -assistantsValue]): new
3185 accessor that returns the comma-separated list of users with role
3187 ([UIxAclEditor -delegatesValue]): same as above for "Delegate".
3188 ([UIxAclEditor -_prepareUsers]): there is no longer a concept of
3189 "checkedUsers". Instead, each user is either classified in the
3190 list of assistants or the list of delegates.
3192 2006-12-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3194 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
3195 -composeAction]): method imported from removed container modules.
3196 ([UIxMailMainFrame -mailFolderName]): method imported from removed
3199 * UI/MailerUI/UIxMailPopupView.m: a new special popup component
3200 for wrapping UIxMailView with the "popupview" action.
3202 * UI/MailerUI/UIxMailAccountView.m: renamed to UIxMailSplashView,
3203 since its the component that displays the same splash screen than
3204 the one in Thunderbird/Icedove.
3206 * UI/MailerUI/UIxMailAccountViewContainer.[hm],
3207 UI/MailerUI/UI/MailerUI/UIxMailAccountsView.m,
3208 UI/MailerUI/UIxMailListViewContainer.[hm],
3209 UI/MailerUI/UIxMailViewContainer.[hm]: removed
3211 2006-12-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3213 * UI/WebServerResources/HTMLElement.js: replaced the functional
3214 selectNode() and deselectNode() functions with select() and
3215 deselect() methods of HTMLElement.
3217 * UI/WebServerResources/ContactsUI.js: cleanup, most of the
3218 events are initialized from here now instead of in the HTML code.
3220 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3221 -checkRightsAction]): new method similar to the one with the same
3222 name in UIxCalMainView.m.
3224 * UI/Common/UIxAclEditor.m ([UIxAclEditor -saveAclsAction]): added
3225 code to handle the publishing of freebusy information.
3227 2006-12-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3229 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3230 -checkRightsAction]): new action method that returns a
3231 comma-separated list of boolean values matching the right of the
3232 current user to "view" (as a permission) each foreign calendar
3233 stored in his preferences.
3235 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -setOwner:newOwner]):
3236 new method that sets a customOwner, which can be returned with
3237 ownerInContext it set.
3239 * SoObjects/Appointments/SOGoAppointmentFolder.m
3240 ([SOGoAppointmentFolder
3241 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): no longer set the owner of elements here.
3243 2006-12-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3245 * SoObjects/SOGo/SOGoUserFolder.m: same as for SOGoContactFolders
3246 below, but for the Contacts and Calendar collections.
3248 * SoObjects/SOGo/SOGoAclsFolder.m: convert the class to user the
3249 new acl facilities method from sope-gdl/GCSFolder.m.
3251 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3252 -roleOfUser:uidinContext:context]): new method that returns
3253 SOGoRole_Assistant when the user is an assistant or a delegate on
3254 the "personal" ab object. This is so that setting roles on the
3255 SOGoContactFolders object is not required.
3257 2006-12-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3259 * Main/SOGo.m: declare "Freebusy" permissions for the top objects.
3261 * UI/Contacts/UIxContactsAclsSelection.m: new component specific
3262 to the handling of the user selection for the acls.
3264 * SoObjects/SOGo/SOGoPermissions.[hm]: new module that extends the
3265 values from SoPermissions with ones specific to SOGo.
3267 * SoObjects/SOGo/SOGoAclsFolder.[hm]: new class module that
3268 handles the storage for the acls.
3270 * SoObjects/Appointments/SOGoCalendarComponent.[hm]: new parent
3271 class for SOGoAppointmentObject and SOGoTaskObject.
3273 * UI/Common/UIxAclEditor.[hm]: new component that provides a
3274 general editor for folder acls.
3276 * SoObjects/SOGo/NSString+Utilities.[hm]: old "NSString+URL"
3278 ([NSString -davMethodToObjC]): method that returns the method name
3279 for a DAV property implementation.
3281 * SoObjects/SOGo/NSArray+Utilities.m: new extension module to
3283 ([NSArray -stringsWithFormat:format]): new method that returns
3284 formatted occurences of the strings stored in the array.
3286 * SoObjects/SOGo/SOGoDAVRendererTypes.m ([SOGoDAVSet
3287 +davSetWithArray:newValuesofValuesTaggedAs:newValueTag]): a new
3288 subclass module of SoWebDAVValue that supports collections of
3289 properties of the same type.
3291 2006-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3293 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
3294 -lookupFolder:ofClassNamed:inContext:]): added the ability to
3295 configure the name of the SOGoDraftFolders with the ud var
3296 "SOGoDraftsFolderName".
3298 2006-11-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3300 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
3301 -userTimeZone:username]): new method that returns the timezone for
3302 the specified user depending on his preferences and the server
3305 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3306 -stringForData:partInfo:]): take the encoding into account and
3307 translate the text to "normal" before processing the charset data.
3309 2006-11-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3311 * UI/WebServerResources/generic.js: the progress indicator is on
3312 when loading the page so we turn it off, and we turn it back on
3313 whenever we switch to another module...
3315 * UI/WebServerResources/SchedulerUI.js: make sure the day view
3316 synchronization mechanism works everywhere.
3318 * UI/WebServerResources/generic.js: the log window is not only
3319 visible when UIxDebugEnabled is set.
3321 * UI/WebServerResources/SchedulerUI.js: the month overview's day
3322 cells are now initialized with the DOM event interface methods
3323 instead of with html attributes.
3325 * UI/Templates/MailerUI/UIxMailView.wox: don't display useless
3326 headers (should be made configurable at some point)...
3328 * OGoContentStore/sql/generate-folderinfo-sql-for-users.sh: drop
3329 "not null" constraint on startdate, enddate, isopaque,
3330 participants and partmails.
3332 2006-11-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3334 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
3335 -hoursToDisplay]): prevent a crash by retaining the
3336 "hoursToDisplay" array after it's created.
3337 ([UIxCalDayTable -clickableHourCellClass]): new method for the new
3338 clickable hours DIV.
3340 * UI/WebServerResources/SchedulerUI.js: made the event
3341 participation status modification asynchronous, which also fixes a
3342 bug where the window would sometimes close before the accept or
3343 decline action was completed. Also, adapted the event handling
3344 related to the days or weeks view with the new DIV-based layout.
3346 * UI/Scheduler/UIxCalInlineAptView.m: same as the first below...
3348 * UI/Scheduler/UIxCalDayTable.m: enhanced to provide the new
3349 DIV-based presentation of the days and weeks.
3351 * SoObjects/Appointments/SOGoTaskObject.m: same as below...
3353 * SoObjects/Appointments/SOGoAppointmentObject.m: lookupName:...
3354 might return an exception so we have to handle it if we don't
3357 2006-11-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3359 * UI/WebServerResources/SchedulerUI.js: updated the list
3360 initialization code to use the new event management scheme, adding
3361 what was missing to be able to delete events and tasks again.
3363 * UI/WebServerResources/MailerUI.js: added code to activate the
3364 "Get mails" button. Fixed a bug which prevented messages to be
3367 * UI/WebServerResources/UIxFreeBusyUserSelector.js: handle tab
3368 navigation and focus handling of INPUTs.
3370 2006-11-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3372 * UI/WebServerResources/MailerUI.js: added code to handle the
3373 possible drag and drop events to manager in the mail module.
3374 Moving messages, opening parent folders, ...
3376 * UI/WebServerResources/SOGoDragAndDrop.js: new file containing
3377 the drag and drop manager as well as the interface to HTMLElement
3378 to trigger drag and drop events.
3380 * UI/MailerUI/UIxMailView.m ([UIxMailView -moveAction]): new
3381 action to move the current message to the mailbox named after the
3382 value of parameter "tofolder".
3384 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3385 -moveToFolderNamed:folderNameinContext:]): new method base on
3388 2006-11-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3390 * UI/WebServerResources/generic.js: added and activated many
3391 "load" handlers to configure generic widgets used across the
3392 modules. More events are now handled in a DOM-fashion way instead
3393 of by setting the relative attributes in the templates.
3395 * UI/Templates/UIxSortableTableHeader.wox: all the events are
3396 declared from the javascript DOM onload handlers.
3398 * UI/Templates/UIxPageFrame.wox: load the new SOGoDragHandles.js
3401 * UI/Templates/MailerUI/UIxMailListView.wox: all the events are
3402 declared from the javascript DOM onload handlers.
3404 * UI/MailerUI/UIxMailListView.m: removed all the JS methods since
3405 we want everything to be separated from each other, as much as
3408 * UI/WebServerResources/SOGoDragHandles.js: new module containing
3409 the "SOGoDragHandlesInterface", implementing methods that can be
3410 attributed to DIV so that they can be used as drag handles.
3412 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
3413 -asQPSubjectString]): initialize the tmp strings with '0' to make
3414 sure they don't contain garbage.
3416 2006-11-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3418 * UI/WebServerResources/MailerUI.js: register the messageList
3419 table as a dragging source and the leaf of the navigation tree as
3420 dnd destinations to the DNDManager.
3422 * UI/WebServerResources/generic.js: initialize tabs from the
3423 "unload" event listener that is added programmatically instead of
3424 from the template... Also, added the new DNDManager object.
3426 * UI/WebServerResources/HTMLTableElement.js: added code to
3427 simulate XUL drag n drop events. This code will possibly be moved
3428 to HTMLElement.js instead later...
3430 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3431 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): same as
3434 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3435 -_qualifierForFilter:filter]): only search records which starts
3436 with the specified pattern.
3438 2006-11-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3440 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
3441 -asQPSubjectString]): new method that returns the special QP
3442 string with its qp declaration for email subjects.
3443 ([SOGoDraftObject -bodyPartForText])
3444 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): don't
3445 double-encode data in UTF-8.
3447 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3448 -newStartDate]): new method to determine the start date depending
3449 on the URL parameters, the current day and the current time.
3450 ([UIxComponentEditor -toolbar]): new method to determine the
3451 filename of the toolbar that should be drawn depending on the
3452 ownership and the list of attendees of the task/event wrt to the
3455 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
3456 -setDayStartHour:aStartHour]): adjust the minutes to the next
3457 quarter of hour, if not already set to a quarter.
3459 * UI/WebServerResources/UIxAppointmentEditor.js,
3460 UI/WebServerResources/UIxTaskEditor.js: added code to manage start
3463 2006-11-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3465 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3466 -loadValuesFromComponent:component]): handles access class
3467 (privacy) and status.
3469 * UI/Contacts/UIxContactsListViewContainer.m
3470 ([UIxContactsListViewContainer -additionalFolders]): return nil if
3471 [self additionalAddressBooks] returns an empty string.
3473 2006-11-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3475 * UI/Scheduler/UIxCalMonthView.m ([UIxCalMonthView
3476 rangesOf7Days]): enhanced and debugged algorithm to feed the array
3477 with slices where the first day is still in the requested month.
3479 * UI/Templates/UIxPageFrame.wox: the logConsole is created only on
3482 * UI/SOGoUI/SOGoAptFormatter.m: added code to handle the display
3483 of events in the day boxes of the calendar's monthly view.
3485 * SoObjects/Appointments/SOGoTaskObject.m ([SOGoTaskObject
3486 -davContentType]): declare "text/calendar".
3488 * SoObjects/Appointments/SOGoAppointmentObject.m
3489 ([SOGoAppointmentObject -davContentType]): declare
3492 * SoObjects/Appointments/SOGoAppointmentFolder.m
3493 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): certain
3494 HTTP methods are handled by SOPE and requires nil to be returned,
3495 this method now invokes the new
3496 "requestNamedIsHandledLater:inContext:" method to check that.
3497 ([SOGoAppointmentFolder
3498 -requestNamedIsHandledLater:nameinContext:context]): new methods
3499 that returns "YES" only for the "OPTIONS" http method (for now...).
3500 ([SOGoAppointmentFolder -davComplianceClassesInContext:]):
3501 overloaded method to append the "access-control" and
3502 "calendar-access" DAV abilities to the initial declaration.
3504 * UI/Scheduler/UIxCalMonthView.[hm]: rewritten module entirely to
3505 imitate the look of Sunbird/Lightning's monthly view.
3507 * UI/Scheduler/UIxCalMonthView.[hm]: renamed to
3508 UIxCalMonthViewOld.[hm].
3510 2006-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3512 * UI/Scheduler/UIxFreeBusyUserSelectorTable.m
3513 ([UIxFreeBusyUserSelectorTable -currentContactHasStatus]): new
3515 ([UIxFreeBusyUserSelectorTable -currentContactStatusImage]):
3516 returns an image name based on the participation status of the
3519 * UI/WebServerResources/SchedulerUI.js: same strip down as for
3522 * UI/Contacts/UIxContactsListViewContainer.m ([UIxContactsListViewContainer -additionalAddressBooks])
3523 ([UIxContactsListViewContainer -additionalFolders])
3524 ([UIxContactsListViewContainer -setCurrentAdditionalFolder:newCurrentAdditionalFolder])
3525 ([UIxContactsListViewContainer -currentAdditionalFolder]): new
3526 methods to handle the external addressbooks a user has subscribed
3527 too, by retriving them from his preferences.
3529 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3530 -updateAdditionalAddressBooksAction]): new method that updates the
3531 user settings with the list of addressbook he has subscribed to.
3533 * UI/Contacts/UIxContactsAddressBooksSelection.m: new component
3534 module for the address book selector.
3536 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
3537 a toolbar with two buttons ("add" and "remove") to manage the
3538 additional addressbooks a user might subscribe to.
3540 * UI/WebServerResources/ContactsUI.js: added code to handle
3541 "external addressbooks" from the Javascript point-of-view, by
3542 extending existing methods and adding code for the "add ab" and
3543 "remove ab" buttons.
3545 * UI/WebServerResources/generic.js: moved extensions methods to
3546 DOM elements to separate files for better clarity.
3548 * UI/Common/UIxPageFrame.m ([UIxPageFrame -pageContentClasses]):
3549 new method that returns "pageContent" as class, but also "popup"
3550 for the DIV where the page content lies, so that we can manipulate
3551 the content of popup's with CSS identifiers.
3553 2006-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3555 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
3556 -displayStyle]): new method that returns a string containing the
3557 css style relative to the current appointment cell. This code is
3558 currently inactive but might be reused later.
3560 * UI/WebServerResources/SchedulerUI.js: added code to handle the
3561 display of the selected day (the day pointed by the mouse, or the
3562 current day when changing the view).
3564 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
3565 -dayCellClasses]): new method that returns a string containing the
3566 css classes applicable to the current cell, depending on the
3567 position of the day in the week, the day of today and the
3570 * UI/Scheduler/UIxCalCalendarsListView.m ([UIxCalCalendarsListView
3571 -currentContactAptBorder]): new method that returns the
3572 appropriate border color for the specified user.
3574 * SoObjects/Appointments/SOGoAppointmentObject.m
3575 ([SOGoAppointmentObject
3576 -saveContentString:contentStringbaseVersion:baseVersion]):
3577 overloaded method that parse new events and detects if they have
3578 an organizer or not. If they are new and have no organizer set
3579 (Sunbird/Lightning...), the owner of the event is set as
3582 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: new
3583 category that provides facility methods and interfaces to the
3586 * SoObjects/Contacts/product.plist: give full access to ANY
3587 authenticated user, not just the owner (to every objects...).
3589 2006-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3591 * UI/WebServerResources/UIxFreeBusyUserSelector.js: make sure
3592 every replica widgets are declared as such to their master
3593 counterpart. Take the days into account when displaying the time
3594 range taken by the appointment.
3596 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
3597 -getICalPersonsFromValue:selectorValue]): method taken from
3598 UIxFreeBusyUserSelector, that is shared both by
3599 UIxFreeBusyUserSelector and UIxFreeBusyUserSelectorTable.
3601 * SoObjects/Appointments/SOGoAppointmentFolder.m
3602 ([SOGoAppointmentFolder
3603 -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.
3605 * UI/Scheduler/UIxFreeBusyUserSelectorTable.[hm]: new subcomponent
3606 derived and taken as a subset of UIxFreeBusyUserSelector that
3607 implements the table part of the FreeBusy view. Most of the
3608 methods of UIxFreeBusyUserSelector relative to that table were
3609 moved into UIxFreeBusyUserSelectorTable, which can also be used as
3610 a standalone view for AJAX operations.
3612 2006-10-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3614 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3615 -vCard]): change reverted.
3617 * UI/Contacts/UIxContactEditor.m: check whether the client contact
3618 folder has selector "globallyUniqueObjectId" before calling that
3621 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3622 -vCard]): the "setVClass" NGVCard method really is "setClass"
3625 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3626 ([SOGoContactLDAPFolder -_searchAttributes]): fixed typo to
3627 request the "streetAddress" instead of the "streetaddress".
3628 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): lookup
3629 mails that *contain*, and not just *start with* the search
3632 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3633 -vCard]): mark address returned from LDAP as the work address.
3635 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: made the whole
3636 span covered with the anchor, not only the textual information
3639 * UI/Templates/SchedulerUI/UIxCalMainView.wox: specify the type
3640 argument (event or task) to newEvent in the appointmentListMenu.
3641 Make the appointmentsListView display the appointmentsListMenu.
3643 * UI/SOGoUI/SOGoAptFormatter.m: enlarge the text size limit from
3644 12 to 50 before displaying "...".
3645 ([SOGoAptFormatter -fullDetailsForApt::]): display location only
3646 if its length > 0, whether location itself is nil or not...
3647 ([SOGoAptFormatter -tooltipForApt::_refDate]): display information
3648 of which the length > 0.
3650 2006-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3652 * UI/WebServerResources/UIxAppointmentEditor.js: correctly handles
3653 french and ISO dates.
3655 * UI/Scheduler/UIxFreeBusyUserSelector.[hm]: added code an ivars
3656 from UIxContactSelector to handle contact lists (current and
3657 additional contacts).
3659 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3660 -_freeBusyAsText]): added handling of an "additional"-named query
3661 parameter that describe the number of additional days after
3662 enddate that should be returned.
3664 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3665 -_responseForResults:results]): give priority to results with
3666 "c_uid" fields. If none returned, use the first contact received.
3668 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3669 -extractQuickFieldsFromEvent:_event]): changed "TENTATIVE" code to
3670 2 and "CANCELLED" to 0.
3672 2006-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3674 * UI/WebServerResources/UIxAppointmentEditor.js: handle conversion
3675 of start and end dates to short string dates.
3677 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3678 -readFreeBusyAction]): new method that returns an array of numbers
3679 corresponding to the state in the freebusy of each "quarter of an
3680 hour" between the "sday" and "eday" date parameters passed in the
3681 url. This permits to handle the display of the freebusy with Ajax
3683 ([SOGoUserHomePage -_freeBusyAsText]): add 2 days to the end date
3684 since the free busy displays 2 days ahead.
3686 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3687 -contactSearchAction]): new action that returns the uid and the
3688 username + email of the user whose name contain the value of the
3689 "search" url parameter.
3691 * SoObjects/Appointments/SOGoAppointmentFolder.m
3692 ([SOGoAppointmentFolder
3693 -fetchFreebusyInfosFrom:_startDateto:_endDate]): added fields
3694 useful for the computing of the status of the freebusy.
3696 * UI/Scheduler/UIxFreeBusyUserSelector.m ([UIxFreeBusyUserSelector
3697 -init]): new component that incarnates a user selector for events
3698 inspired by the new one found in Thunderbird Lightning.
3700 2006-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3702 * UI/WebServerResources/generic.js: added code to enable or
3703 disable anchor visually (following our internal algorithm).
3705 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -init]):
3706 added new "url" ivar with its classic accessors.
3707 ([UIxComponentEditor -urlButtonClasses]): new method that returns
3708 the class strings for the url button on the appointment/task
3709 editor (depending on the validity of the url).
3711 * UI/Templates/SchedulerUI/UIxTaskEditor.wox,
3712 UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: start rewriting
3713 the template to match the Lightning's new task/appointment editor.
3715 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor -saveValuesIntoAppointment:_appointment]): initialize url from the components'url.
3717 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveValuesIntoTask:_task]): initialize url from the components'url.
3719 2006-10-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3721 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3722 ([SOGoContactLDAPFolder
3723 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): perform the searchs on objects which start with instead of contain the lookup key.
3725 * SoObjects/Appointments/SOGoAptMailNotification.[hm]: work on
3726 iCalEntityObject instances instead of just iCalEvent's.
3728 * SoObjects/Appointments/SOGoAppointmentFolder.m
3729 ([SOGoAppointmentFolder
3730 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): set ownership of returned records by adding an "owner" key to the resulting dictionaries.
3732 * SoObjects/SOGo/NSObject+Owner.[hm]: removed module since it's a
3733 bad way of handling ownership that way.
3735 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3736 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): search also
3737 on "cn", just like Mozilla.
3739 2006-10-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3741 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]):
3742 "to" should be retained, otherwise it will be autoreleased and a
3745 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3746 -writeAction]): updated method to fetch the card before initing
3749 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3750 -extractQuickFieldsFromTodo:_task]): fixed to use NSNull instead
3753 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
3754 -iCalStringTemplate]): start and due date are now optional.
3756 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
3757 -setDayStartHour:aStartHour]): added a new "isDisabled" ivar with
3758 appropriate accessors to be settable through the templates.
3760 * UI/Scheduler/UIxDatePicker.m ([UIxDatePicker -init]): added a
3761 new "isDisabled" ivar with appropriate accessors to be
3762 settable through the templates.
3764 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3765 -availableCalendars]): new method that list the calendars to which
3766 the user has subscribed.
3767 ([UIxComponentEditor -componentOwner]): returns the owner of the
3770 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3771 -extractQuickFieldsFromTodo:_task]): set the start and enddate of
3772 quickentries to null whenever each or all of them are null, by
3773 providing an impossible timestamp from with NSNotFound as value.
3775 2006-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3777 * UI/WebServerResources/UIxMailEditor.js: update the algorithm
3778 that handles the creation of new fields with the new APIs and the
3779 new node structure on the page.
3781 * UI/Scheduler/UIxAppointmentEditor.m,
3782 UI/Scheduler/UIxTaskEditor.m:
3783 refactored to user UIxComponentEditor as parent class.
3785 * UI/Scheduler/UIxComponentEditor.[hm]: new class module
3786 containing the methods common to the UIxTaskEditor and the
3787 UIxAppointmentEditor.
3789 2006-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3791 * SoObjects/Appointments/SOGoAppointmentFolder.m
3792 ([SOGoAppointmentFolder -doCalendarQuery:context]): now supports
3793 the handling of time-ranges.
3795 * UI/WebServerResources/ContactsUI.js: specify a notification type as
3796 parameters when onConfirmContactSelection in invoked.
3798 * UI/WebServerResources/generic.js: specify a notification type as
3799 parameters when onContactRemove in invoked.
3801 * UI/WebServerResources/SchedulerUI.js: when the user deselects
3802 all calendars, select his entry.
3804 2006-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3806 * UI/WebServerResources/SchedulerUI.js: edit and delete events
3807 with their owner-relative urls. Generate a correct entry in the
3808 css color table when a user is added to the calendars list. Put
3809 the same color next to the user id.
3811 * UI/WebServerResources/generic.js: implemented some new helper
3814 * SoObjects/Appointments/SOGoAppointmentFolder.m
3815 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): don't delete
3816 entries if their owner is not the current user.
3818 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
3819 -displayClasses]): return the correct class for the current event
3820 representation depending on its owner.
3822 * UI/Scheduler/UIxCalCalendarsListView.m: added method to create
3823 and associate a color for each user login depending on its
3824 position in the list.
3826 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView
3827 -currentRowCSSClass]): return the correct class for the current
3828 row depending on the owner of the event.
3830 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
3831 -setColors:colors]): new method to associate a color table with
3832 each user in the list.
3834 * SoObjects/Appointments/SOGoAppointmentFolder.m
3835 ([SOGoAppointmentFolder
3836 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): associate each returned record with the owner of the table they are retrieved from.
3838 * SoObjects/SOGo/NSObject+Owner.[hm]: new extension module to
3839 NSObject to associate an instance with a user.
3841 2006-10-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3843 * UI/WebServerResources/SchedulerUI.js: added handling of multiple
3846 * UI/WebServerResources/ContactsUI.js: added handling of
3847 notification of changes to contact selectors.
3849 * UI/WebServerResources/generic.js: added handling of notification
3850 of changes to contact selectors.
3852 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3853 -updateCalendarsAction]): proxy method to update the user
3854 preference table with the new selected calendar uids.
3856 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3857 -calendarsContactsAction]): new method.
3859 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector -setCheckedBoxes:boxes])
3860 ([UIxContactSelector -setHasCheckBoxes:aBool])
3861 ([UIxContactSelector -isCheckBoxChecked]): new accessors method to
3862 permit the drawing of checkboxes instead of card icons.
3864 * UI/Scheduler/UIxCalCalendarsListView.m: new component class that
3865 wrap a selector the the "Calendars" tab.
3867 * UI/Contacts/UIxContactsCalendarsSelection.m: buttons for the
3868 new user calendar selector.
3870 2006-10-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3872 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: time ranges
3873 may cover hour 0 to hour 23.
3875 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
3876 -iCalStringFromQueryParameter:format:]): dates explicitly set to
3879 * UI/WebServerResources/SchedulerUI.js: manage both lists of
3880 objects wrt to the toolbar actions.
3882 * UI/WebServerResources/generic.js: added code to the "String"
3883 class to decode number-encoded char entities.
3885 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3886 -batchDeleteAction]): new method to delete selected entries in the
3889 * SoObjects/Appointments/SOGoAppointmentFolder.m
3890 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): new method
3891 that delete identified entries in batch.
3893 * UI/SOGoUI/UIxComponent.m ([UIxComponent
3894 -jsCloseWithRefreshMethod:methodName]): new method with explicit purpose.
3896 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]),
3897 UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
3898 -saveAction]), UI/MailerUI/UIxMailEditor.m ([UIxMailEditor
3899 -sendAction]), UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3901 return a UIxJSClose component if everything went fine.
3903 * UI/Scheduler/UIxTaskEditor.h: interface extracted from
3906 * UI/Scheduler/UIxAppointmentEditor.h: interface extracted from
3907 UIxAppointmentEditor.m.
3909 * UI/Common/UIxJSClose.[hm]: new UIxComponent designed to display
3910 a very light page with javascript code to close a window, by
3911 calling a method on the opener if specified. This component is
3912 designed to work as a response to form postings.
3914 2006-10-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3916 * SoObjects/Appointments/SOGoTaskObject.[hm]: clone of
3917 SOGoAppointmentObject adapted for the handling of tasks.
3919 * SoObjects/Appointments/NSArray+Appointments.[hm]: category
3920 extracted from SOGoAppointmentObject.
3922 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
3923 -saveUrl]): returns the url needed to POST the new form to.
3924 redirect the user to <aptid>/editAsAppointment instead of /edit,
3925 so that SOGoAppointmentFolder can return the correct object type.
3927 * SoObjects/SOGo/NSObject+AptComparison.m ([NSObject
3928 -compareAptsAscending:_other]): accept empty start or end dates.
3930 * SoObjects/Appointments/SOGoAppointmentFolder.m
3931 ([SOGoAppointmentFolder
3932 -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.
3933 ([SOGoAppointmentFolder -doCalendarQuery:context]): fetch
3934 components of type "vtodo" as well as "vevent".
3935 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): if the
3936 url specified ends with AsTask or AsAppointment, returns the
3937 an object of the appropriate class, otherwise deduce it from its
3938 content if the HTTP method is "PUT", otherwise read its type from
3941 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3942 -extractQuickFieldsFromTodo:_task]): extract quick fields from
3945 * UI/Scheduler/UIxCalView.m ([UIxCalView
3946 -fetchCoreAppointmentsInfos]): replacement methods for
3947 fetchCoreInfos but by retrieving object with component "vevent".
3948 ([UIxCalView -fetchCoreTasksInfos]): same as above for "vtodo"
3951 * UI/Scheduler/UIxCalTasksListView.[hm]: clone of
3952 UIxCalAptListView adapted for the handling of tasks.
3954 * UI/Scheduler/UIxTaskProposal.[hm],
3955 UI/Scheduler/UIxTaskView.[hm], UI/Scheduler/UIxTaskEditor.[hm]:
3956 clones of the UIxAppointment* classes for the handling of tasks.
3958 * UI/WebServerResources/UIxTaskEditor.js: clone of
3959 UIxAppointmentEditor adapted for the handling of tasks.
3961 * UI/WebServerResources/SchedulerUI.js: added support for tasks.
3962 Scroll the daily view to the appropriate hour when an appointment
3963 is selected in the appointments list.
3965 2006-10-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3967 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
3968 -setDayStartHour:aStartHour]): specifies the user timezone on the
3971 * UI/Scheduler/UIxAppointmentEditor.m: indicate DTSTAMP with "GMT"
3974 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate -adjustedDate])
3975 ([NSCalendarDate -driftedDate]): methods made useless by a better
3976 comprehension of the NSTimeZone API...
3978 2006-10-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3980 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): call
3981 new methods from the NSCalendarDate methods.
3983 * SoObjects/SOGo/NSCalendarDate+SOGo.m: module replacing and
3984 extending UI/Scheduler/NSCalendarDate+Scheduler.m.
3986 +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).
3987 ([NSCalendarDate -adjustedDate]): this method returns another
3988 instance set to the correct hour after the original date was set
3989 from a non-GMT timezone. This date can be used for storage.
3990 ([NSCalendarDate -driftedDate]): this method does exactly the
3991 opposite of -adjutedDate, that is, it enables the method
3992 hourOfDay, minuteOfHour etc... to return the values according to
3993 the original date's timezone. This date CANNOT be used for storage.
3995 * UI/Scheduler/NSCalendarDate+Scheduler.m ([NSCalendarDate
3996 -shortDateString]): new method that will return a "short date
3997 string" (yyyymmdd) from a calendar date object.
3999 * UI/SOGoUI/UIxComponent.m ([UIxComponent
4000 -_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.
4002 * Main/sogod.m (main): initialize the NSTimeZone's defaultTimeZone
4003 to the value of SOGoServerTimeZone or "Canada/Eastern" if not found.
4005 2006-10-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4007 * UI/WebServerResources/SchedulerUI.js: added code to scroll the
4008 view of the day at the height of hour 8:00.
4010 * UI/Scheduler/UIxCalView.m ([UIxCalView -dayStartHour]): returns 0.
4011 ([UIxCalView -dayEndHour]): returns 24.
4013 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView -defaultAction])
4014 ([UIxContactFoldersView -newAction]): invoke
4015 _selectActionForApplication: on self with the proper attribute too.
4017 * UI/Contacts/UIxContactsSelectionViewContainer.m: removed since
4018 we now use the action mechanism in UIxContactsListView to keep the
4019 same view for the contact selectors and the regular contact view.
4021 * UI/Contacts/UIxContactsListViewContainer.[hm]: replaces
4022 UIxContactsListViewContainerBase.[hm]
4024 * UI/Contacts/UIxContactsListView.[hm]: replaces UIxContactsListViewBase.[hm]
4026 * UI/WebServerResources/generic.js: generalized emailstring
4027 handling functions. Generalized address book access functions.
4029 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
4030 -isPopup]): return YES if the "popup" query parameter is set.
4032 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4033 -defaultAction]): keep the url parameters when redirecting.
4034 ([UIxContactFoldersView -selectForSchedulerAction])
4035 ([UIxContactFoldersView -selectForMailerAction]): new action
4036 methods for the /scheduler-contacts and /mailer-contacts invocations.
4038 * SoObjects/SOGo/SOGoObject.m: compose the action url using the
4039 newly available NSString+URL category.
4041 * SoObjects/SOGo/NSDictionary+URL.m ([NSDictionary
4042 -asURLParameters]): handle dictionary entries which could be
4043 instances of NSArray rather than NSString.
4045 * SoObjects/SOGo/NSString+URL.m ([NSString
4046 -composeURLWithAction:actionparameters:urlParametersandHash:useHash]): when composing the url, remove the encoded parameters first since they will be added later.
4047 ([NSString -urlWithoutParameters]): new method that returns the
4048 url without its parameters.
4050 * SoObjects/SOGo/NSString+iCal.h: deleted obsolete file.
4052 * SoObjects/SOGo/NSDictionary+URL.[hm],
4053 UI/SOGoUI/NSString+URL.[hm]: moved from UI/SOGoUI/.
4055 * UI/WebServerResources/UIxMailEditor.js: add support for
4056 additions of different types (to, cc, bcc) of recipients from the
4059 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): added the
4062 * UI/Contacts/UIxContactsMailerSelection.m,
4063 UI/Contacts/UIxContactsSchedulerSelection.m: classes replacing
4064 UI/Contacts/UIxContactsSelectionView.m to provide a different set
4065 of widgets depending on the application invoking the contact list.
4067 2006-09-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4069 * UI/WebServerResources/ContactsUI.js: hide the current contact
4070 whenever the user changes of contact folder.
4072 * UI/WebServerResources/UIxContactEditor.js: the contact UID is
4073 now provided by the template when loading the page.
4075 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
4076 -iCalPersonWithUid:uid]): new method taken from removed module
4079 2006-09-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4081 * UI/Scheduler/UIxAppointmentView.m ([UIxAppointmentView
4082 -categoriesAsString]): same as below.
4084 * UI/Scheduler/UIxAppointmentEditor.m: adapted by using the new
4085 vcalendar API's iCalEvent instead of the removed SOGoAppointment.
4087 * SoObjects/Appointments/SOGoAppointmentObject.m
4088 ([SOGoAppointmentObject -calendarFromContent:cnt]): new helper method.
4089 ([SOGoAppointmentObject -firstEventFromCalendar:calendar]): new
4092 * SoObjects/Appointments/SOGoAppointmentFolder.m
4093 ([SOGoAppointmentFolder -doCalendarQuery:context]): added a
4094 hackish test to detect whether the request concernes VEVENT's or
4095 anything else. Return events only in the former case.
4096 ([SOGoAppointmentFolder
4097 -fetchOverviewInfosFrom:_startDateto:_endDate]): retrieve the
4098 c_name quickfield so that the calendar list can identify the
4099 appointments with their complete "filename".
4101 * OGoContentStore/OCSiCalFieldExtractor.m: use CardGroup's
4102 groupsOfClass:fromSource: to parse the given vcalendar.
4104 * UI/Scheduler/iCalRecurrenceRule+SOGo.m: removed obsolete class.
4106 * UI/Scheduler/SOGoAppointment+UIx.h: removed obsolete class.
4108 * SoObjects/SOGo/SOGoAppointmentICalRenderer.[hm]: removed
4111 * SoObjects/SOGo/SOGoAppointment.[hm]: removed obsolete class.
4113 2006-09-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4115 * SoObjects/Appointments/SOGoAppointmentFolder.m
4116 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): be
4117 sensitive to the CalDAV method names.
4118 ([SOGoAppointmentFolder -doCalendarQuery:context]): method for the
4119 "calendar-query" CalDAV method name.
4121 * UI/WebServerResources/ContactsUI.js: removed a lot of useless
4122 code coming originally from MailerUI.js.
4124 * UI/WebServerResources/UIxContactEditor.js: imitate the
4125 Thunderbird address book by completing the display name with the
4126 content of the first and last name fields, until the display name
4127 is modified manually.
4129 * UI/WebServerResources/generic.js: added a "trim" method to the
4132 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
4133 -displayName]): new method that returns the display name from "cn"
4134 or from the "displayName" key if found.
4136 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4137 -initSnapshot]): check if "[card n]" returns anything to avoid a
4140 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): new method
4141 that returns an unparsed doctype definition for the pages.
4143 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4144 -vCard]): set the card's fn to attribute "displayName" if found
4147 2006-09-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4149 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4150 -vCard]): handle the "streetAddress" and "l" fields.
4152 * UI/Templates/MailerUI/UIxMailEditor.wox: arranged the message
4153 header fields by converting the tables to DIVs and SPANs.
4155 * UI/WebServerResources/generic.css: attempted unification of font
4156 families and size across all the elements. changed the
4157 logConsole's "position" from "fixed" to "absolute" to avoid
4160 2006-09-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4162 * UI/WebServerResources/ContactsUI.js (uixDeleteSelectedContacts):
4163 empty the contact view when the current contact is being deleted.
4165 * UI/WebServerResources/MailerUI.js (newContactFromEmail): fully
4166 parse the email field and provide the address full name if found
4167 as the "contactFN" parameter.
4169 * UI/WebServerResources/generic.js (openMailTo): do not give a
4170 name to the opened window so that serveral ones can be opened at
4173 * UI/MailPartViewers/UIxMailPartTextViewer.m
4174 ([UIxMailPartTextViewer -flatContentAsString]): override method by
4175 replacing carriage returns with "<br />" in the result string from
4176 super's implementation.
4178 * UI/Contacts/UIxContactView.m ([UIxContactView
4179 -_urlOfType:aType]): don't manage non-mailto urls through
4180 javascript, let the user decide what's best for him.
4182 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4183 -newAction]): transfer all the query parameters by using the
4184 "asURLParameters"'s result string from [self queryParameters].
4186 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4187 -initSnapshot]): retrieve "contactEmail" and "contactFN" from the
4188 query parameters and put their values (if any) into the snapshot.
4190 * UI/Contacts/UIxContactView.m ([UIxContactView -note]): convert
4191 carriage-returns to "<br />".
4192 ([UIxContactView -workCompany]): explicitly initialize company to
4193 nil if org is nil or empty.
4195 * UI/WebServerResources/UIxContactEditor.js: updated validation
4196 code after we added and renamed some fields.
4198 * UI/WebServerResources/ContactsUI.js: added code to cache contact
4199 cards and to handle card updates.
4201 2006-09-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4203 * UI/Contacts/UIxContactView.m ([UIxContactView -hasOtherInfos]):
4204 test the length of the returned string since they will never be
4207 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor -saveAction]):
4208 return self if the process went successful, returns an exception
4209 otherwise (and only otherwise...).
4211 * OGoContentStore/OCSContactFieldExtractor.m
4212 ([OCSContactFieldExtractor -extractQuickFieldsFromVCard:_vCard]):
4213 adapted method to the new VCard api. Since the cards are stored in
4214 vcard format, we no longer deal with a dictionary but with a
4217 2006-09-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4219 * UI/Contacts/UIxContactView.m ([UIxContactView -preferredEmail]):
4220 return a string with a "mailto" url.
4221 ([UIxContactView -_urlOfType:aType]): generic method to return a
4222 url string with a html anchor pointing to it.
4224 * UI/Contacts/UIxContactEditor.[hm]: UIxContactEditorBase renamed
4225 since subclass "UIxContactEditor" did nothing. Implemented code to
4226 display and modify the values parsed from the vcards, displayed in
4227 a way similar to the Thunderbird addressbook.
4229 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4230 -save]): new dummy method.
4232 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
4233 -save]): made method void.
4235 2006-09-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4237 * UI/Contacts/UIxContactView.m: added many wrapper methods to
4238 display blocks of data à la Thunderbird Addressbook. If data is
4239 available, those wrappers (around the NGVCard methods) will
4240 enclose the results in a proper HTML output with the correct label
4241 (if present), otherwise it will return an empty string.
4242 ([UIxContactView -vcardAction]): new action to return the contact
4243 as text/vcard (for exporting).
4245 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4246 +contactEntryWithName:aNamewithLDAPEntry:anEntryinContainer:aContainer]): adapted the mapping of the LDIF data with the new NGVCard API.
4248 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
4249 -vCard]): create a new NGVCard instance when no data is available
4251 ([SOGoContactGCSEntry -save]): save the vCard using the new
4252 "versitString" API method/message.
4254 * UI/Contacts/UIxContactView.h: separated interface from
4257 * UI/WebServerResources/ContactsUI.js: add-ed code to download card
4258 views and display them beneath the list.
4260 2006-09-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4262 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -userTimeZone]): retain
4263 the timezone even when it's the server timezone.
4265 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
4266 -privateContacts:inContext:]): no long configure the calendar
4267 object with the user's timezone since it's now accessible
4268 application-wide throught the SOGoObject methods.
4270 * UI/SOGoUI/UIxComponent.[hm]: removed the "viewTimeZone" ivar and
4271 method. Removed the "backendTimeZone" method.
4273 * UI/MainUI/SOGoUserHomePage.[hm]: made a subclass of UIxComponent
4274 instead of SoComponent.
4276 * SoObjects/Appointments/SOGoAppointmentObject.m:
4277 ([SOGoAppointmentObject -viewTimeZoneForPerson:_person]): returns
4278 [self serverTimeZone] instead of "EST" (which was removed).
4280 * SoObjects/Appointments/SOGoAppointmentFolder.[hm]: removed the
4281 "timeZone" ivar and its accessors.
4283 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -serverTimeZone]): new
4284 centralized method returing the timezone configured in the
4285 userdefaults db or "Canada/Eastern" if missing.
4286 ([SOGoObject -userTimeZone]): new centralized method returing the
4287 timezone of the current user or the server timezone if missing
4288 from the user configuration table.
4290 2006-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4292 * UI/WebServerResources/SchedulerUI.js: implemented caching of
4295 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]):
4296 return a path based on the object's context instead of the first
4297 level in SOGo's object hierarchy...
4299 2006-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4301 * UI/Templates/SchedulerUI/UIxCalDayTable.wox: day columns can now
4304 * UI/Templates/SchedulerUI/UIxCalDateSelector.wox: pass the user's
4305 timezone ([self viewTimeZone]) to the WEMonthOverview component to
4306 avoid a confusion with the days.
4308 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: appointments
4311 * UI/WebServerResources/SchedulerUI.js: implemented a mechanism to
4312 imitate Sunbird's synchronization between the 3 visible views.
4314 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): make
4315 sure the numbers in dateString are formatted so as to take 4 chars
4316 for the year and 2 for the day and the month, otherwise
4317 NSCalendarDate will return a nil date.
4318 ([UIxComponent -applicationPath]): return a path based on the
4319 object's context instead of the second level in SOGo's object
4322 2006-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4324 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): add the
4325 user's timezone abbreviation to the date string passed as parameter to
4326 NSCalendarDate to generate an accurate date instance. Do the same
4327 when no date is specified and today is chosen.
4329 * UI/WebServerResources/UIxAppointmentEditor.js: convert the
4330 form's time values to integers before comparing them.
4332 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -currentStartTime])
4333 ([UIxCalAptListView -currentEndTime]): initialize the resulting
4334 dates timezone with [self viewTimeZone].
4336 * UI/SOGoUI/UIxComponent.m ([UIxComponent -init]): new
4337 "viewTimeZone" ivar destined to hold an instance of the user's
4339 ([UIxComponent -viewTimeZone]): take the timezone from the user's
4342 2006-08-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4344 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: completely
4345 rearranged the layout.
4347 * UI/WebServerResources/UIxAppointmentEditor.js: added code to
4348 manage showing and hiding appointment details.
4350 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
4351 -privateContacts:inContext:]): init the SOGoAppointmentFolder's
4352 timezone by taking the current user's timezone setting.
4354 * SoObjects/Appointments/SOGoAptMailNotification.m: same as below.
4356 * SoObjects/Appointments/SOGoAppointmentObject.m
4357 ([SOGoAppointmentObject -changeParticipationStatus:inContext:]):
4358 set default timezone to EST, although this code should be
4359 rewritten to handle a system and a user default value.
4361 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4362 -takeValuesFromRequest:_rqinContext:_ctx]): enhanced method to
4363 take the values from the hour and minute INPUTs when data is
4364 POSTed since we no longer use the UIxTimeSelector component.
4365 ([UIxTimeDateControl -selectableHours])
4366 ([UIxTimeDateControl -selectableMinutes]): new methods used by the
4367 template SELECTs to display reasonable and acceptable values
4368 instead of all the possibilities.
4370 * UI/WebServerResources/generic.js: adapted code for the new
4371 implementation of the UIxContactSelector component (added a
4372 "remove" button, removed the previous INPUT and replaced them with
4373 links of class "button").
4375 * UI/Scheduler/UIxTimeDateControl.h: separated interface from
4376 UIxTimeDateControl.m.
4378 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -currentAppointmentDay])
4379 ([UIxCalDayTable -currentAppointmentHour]): new methods that
4380 returns correctly formatted values used as attributes for JS code.
4382 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
4383 -initialContactsAsString]): renamed implementation of
4384 initialParticipants.
4385 ([UIxContactSelector -currentContactId])
4386 ([UIxContactSelector -currentContactName]): new methods used when
4387 listing the initial contacts in the widget. Currently, both return
4388 the person's cn but the latter should ultimately return a user
4391 * UI/Contacts/UIxContactSelector.h: separated interface from
4392 UIxContactSelector.m.
4394 * UI/Scheduler/UIxDatePickerScript.[hm]: component removed since
4395 all javascript code is now put in Scheduler.js/generic.js.
4397 * UI/Scheduler/NSCalendarDate+UIx.[hm]: category removed, code
4398 moved into NSCalendarDate+Scheduler instead.
4400 * SoObjects/Appointments/SOGoAppointmentFolder.m
4401 ([SOGoAppointmentFolder -setTimeZone:newTZ]): new method to
4402 configure the timezone from SOGoUserFolder when the instance is
4404 ([SOGoAppointmentFolder -viewTimeZone]): MET was removed. Returns
4405 the value of the new "timezone" ivar.
4407 2006-08-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4409 * UI/WebServerResources/SchedulerUI.{css,js}: added a tabview with
4410 the date selector in the first page and the container of the
4411 future calendar selector in the second page.
4413 * UI/WebServerResources/generic.js: added code for handling tabbed
4416 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productFrameworkName]):
4417 returns the bundle name associated to the current running product.
4419 2006-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4421 * UI/WebServerResources/UIxAppointmentEditor.js: fixed the AJAX
4422 exception by invoking a timeout on the opener rather than invoking
4423 the list refresh method.
4425 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]):
4428 * UI/Scheduler/UIxCalWeekView.m ([UIxCalWeekView -weekBeforePrevWeekQueryParameters])
4429 ([UIxCalWeekView -prevWeekQueryParameters])
4430 ([UIxCalWeekView -nextWeekQueryParameters])
4431 ([UIxCalWeekView -weekAfterNextWeekQueryParameters]): new methods
4432 that return the dates relatively to the current day.
4433 ([UIxCalWeekView -lastWeekName])
4434 ([UIxCalWeekView -currentWeekName])
4435 ([UIxCalWeekView -nextWeekName])
4436 ([UIxCalWeekView -weekAfterNextWeekName])
4437 ([UIxCalWeekView -_weekNumberWithOffsetFromToday:offset]): new
4438 methods that returns the label for the corresponding weeks.
4440 * UI/Scheduler/UIxCalDayTable.[hm]: new class module/component
4441 used by UIxCalDayView and UIxCalWeekView to display the events
4442 occuring in one or more days.
4444 2006-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4446 * UI/Scheduler/UIxCalMainView.m: extended class to populate the
4447 entries in the new "monthMenu" and "yearMenu".
4449 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]): new
4450 method to return the current day as a string formatted depending
4451 on the current locale.
4453 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
4454 ([UIxCalAptListView -endDate]): "today" is now the default filter
4455 for displayed events.
4456 ([UIxCalAptListView -currentSerialDay]): new method returning the
4457 date of the current enumerated appointment in serial form
4460 * UI/WebServerResources/SchedulerUI.js: added code to select the
4461 relevant day when an appointment is selected. Added code to popup
4462 a month and a year menu whenever the header entries are clicked in
4463 the calendar widget.
4465 * UI/WebServerResources/generic.js: made addClassName and
4466 removeClassName methods of HTMLElement.
4468 2006-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4470 * UI/WebServerResources/MailerUI.js: fixed the contact creation
4471 from email addresses.
4473 * UI/WebServerResources/generic.js: centralized the search-related
4474 functions here since the same code was used across the 3
4477 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
4478 ([UIxCalAptListView -endDate]): return the required dates needed
4479 depending on the value given to the "filterpopup" url parameter.
4481 * UI/Common/UIxToolbar.m ([UIxToolbar -buttonLabel]): reduced the
4482 code by invoking UIxComponent's labelForKey:.
4484 * UI/SOGoUI/UIxComponent.m ([UIxComponent -labelForKey:]): use
4485 [self pageResourceManager] instead of [self resourceManager].
4487 * UI/Contacts/UIxContactEditorBase.m: invokes
4488 globallyUniqueObjectId on the clientobject's class instead of the
4489 hardcoded "SOGoFolder".
4491 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4492 -newAction]): redirect the "new" action to the personal (default)
4495 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
4496 +objectWithName:inContainer:]): new constructor.
4498 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
4499 -lookupContactWithId:recordId]): always create a contact object,
4500 even if it does not exist.
4502 2006-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4504 * UI/Scheduler/UIxCalMainView.[hm]: new class to serve as a pseudo
4505 component that lays out the different components of SOGoCalendar.
4506 Only serves as an Objective-C counterpart to its xml template.
4508 * UI/Scheduler/UIxCalInlineMonthOverview.h: interface extracted
4511 * UI/Scheduler/UIxCalFilterPanel.[hm]: new class designed to
4512 display a widget to handle the information displayed in the
4513 appointments list. Not currently used, lacks implementation.
4515 * UI/Scheduler/UIxCalDateSelector.[hm]: new class designed to
4516 display a calendar as a dynamic widget from where one can select
4517 the current visible day.
4519 * UI/Scheduler/NSCalendarDate+Scheduler.[hm]: category code
4520 extracted from UIxCalInlineMonthOverview.m.
4522 * UI/Scheduler/UIxDatePicker.m: removed the jsPopup, jsCode and
4523 calendarPageURL methods. The javascript code is handled by .js
4524 files as much as possible...
4526 * UI/WebServerResources/ContactsUI.js,
4527 UI/WebServerResources/MailerUI.js: adapted to the code refactoring
4530 * UI/WebServerResources/SchedulerUI.js: implemented functions to
4531 handle the new widgets. XmlHTTPRequest code taken from
4534 * UI/WebServerResources/generic.js: put some functions related to
4535 element selections as methods to HTMLElement and HTMLTableElement.
4537 * UI/Scheduler/UIxCalAptListView.[hm]: new class designed to
4538 display the list of appointments (embodies the code-size of
4539 UIxCalAptListView; answers to the "aptlist" method).
4541 2006-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4543 * UI/Scheduler/UIxCalWeekOverview.m ([UIxCalWeekOverview
4544 -correctURLAction]): new short action method replacing the method
4545 below by taking far less code.
4547 * SoObjects/Appointments/SOGoAppointmentFolder.m
4548 ([SOGoAppointmentFolder -GETAction:]): removed method. Replaced
4549 with an action in the view-related code.
4551 * UI/Scheduler/UIxAppointmentEditor.m: invoke
4552 "stringByEscapingHTMLString" on the resulting value to avoid
4553 issues with accented characters.
4554 ([-jsCode]): removed method since the javascript code was merged
4555 into SchedulerUI.js.
4557 2006-08-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4559 * UI/Scheduler/iCalPerson+UIx.m ([iCalPerson +personWithUid:]):
4560 new class method that returns an iCalPerson based on the UID given
4563 * UI/Contacts/UIxContactsListViewContainerBase.m:
4564 UIxContactsListViewContainer renamed to serve as a base class for
4565 the contact lists in both the contact editor and the contact
4568 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4569 ([SOGoContactLDAPFolder
4570 -LDAPSetHostname:setPort:setBindDN:setBindPW:setContactIdentifier:
4571 setUserIdentifier:setRootDN:]): an LDAP field specifying the
4572 loginname of the users can now be specified.
4574 * UI/WebServerResources/generic.js: added code to manage contact
4575 lists through the new implementation of the UIxContactSelector.
4577 * UI/Templates: put the templates related to SchedulerUI in its
4580 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
4581 -asDictionaryWithAttributeNames:withUID:andCName:cName]): add an
4582 entry for "uid" with the field name representing the login name of
4583 the user in the corresponding LDAP branch.
4585 2006-08-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4587 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
4588 -lookupName:_keyinContext:_ctxacquire:_flag]): when the HTTP
4589 request is a PUT, always create an entry, even if we're not sure
4592 2006-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4594 * UI/WebServerResources/ContactsUI.js: implemented live-search.
4596 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
4597 -appendSystemSourcesInContext:context]): populated method with
4598 code that creates entries mapped to instances SOGoContactFolder,
4599 based on the configuration found in the NSUserDefaults under the
4600 key "SOGoLDAPAddressBooks".
4601 ([SOGoContactFolders
4602 -lookupName:nameinContext:contextacquire:acquire]):
4603 "contactsources" do not exist anymore, SOGoContactFolder was split
4604 into two classes: SOGoContactGCSFolder and SOGoContactLDAPFolder
4605 and one protocol: SOGOContactFolder, instead.
4606 ([SOGoContactFolders -contactFolders]): new accessor used by the
4607 views of SOGoContactXXXFolder to list the possible sources.
4609 * SoObjects/Contacts/SOGoContactObject.h: new protocol that
4610 defines the methods that UIxContactsView, ..Editor and so on...
4613 * SoObjects/Contacts/SOGoContactFolder.h: new protocol that
4614 defines the methods that UIxContactsListViewBase expects as well
4615 as the data fields returned in the contact lists.
4617 * SoObjects/Contacts/SOGoContactLDAPFolder.[hm]: new class that
4618 returns entries an LDAP server. Conforms to the new
4619 SOGOContactFolder protocol.
4621 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: new class that
4622 returns a vCard based on contact entries from an LDAP server.
4623 Conforms to the new SOGOContactObject protocol.
4625 * SoObjects/Contacts/NGVCardSimpleValue+Contact.m
4626 ([NGVCardSimpleValue -vCardEntryString]): generates the correct
4627 entry for the textual representation of the vCard.
4629 * SoObjects/Contacts/NGVCardSimpleValue+Contact.[hm]: new class
4632 * SoObjects/Contacts/SOGoContactGCSEntry.[hm]: new module name of
4633 "SOGoContactObject".
4635 * SoObjects/Contacts/NGVCard+Contact.m ([NGVCard -asString]): new
4636 method that generates a textual representation of the vcard.
4638 * SoObjects/Contacts/NGVCard+Contact.[hm]: new class extension.
4640 * SoObjects/Contacts/SOGoContactGCSFolder.[hm]: new module name of
4641 "SOGoContactFolder".
4643 * SoObjects/Contacts/SOGoContactSource.h,
4644 SoObjects/Contacts/SOGoPersonalAB.[hm]: unused classes and
4647 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
4648 -singleAttributeWithName:key]): new method that returns the first
4649 object associated with an ldap key (where generally one value is
4652 -asDictionaryWithAttributeNames:attributeNamesandCName:cName]):
4653 map the entry into an NSDictionary for processing by
4654 UIxContactsListViewBase.m with the least possible overhead.
4656 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: new class
4659 2006-08-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4661 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
4662 -privateContacts:inContext:]): now returns an instance of
4665 * UI/Contacts/UIxContactsListViewContainer.m
4666 ([UIxContactsListViewContainer -contactFolderName]): new method to
4667 return the absolute path to the current contact folder, called
4668 from within the template.
4670 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
4671 JS code to initialize the 'currentContactFolder' generic var.
4673 * SoObjects/Contacts/SOGoContactFolder.m ([SOGoContactFolder
4674 +contactFolderWithSource:inContainer:andName:]): new class
4675 method meant to return an instance connected to the specified
4676 source. Currently useless but won't be anymore in the next few
4679 * SoObjects/SOGo/SOGoUserFolder.h: commented out declaration of
4680 the "lookupFreeBusyObject" method since it does not exist.
4682 * UI/Contacts/UIxContactFoldersView.[hm]: new class module serving
4683 as a "view" for the SOGoContactFolders object. Does nothing but
4684 redirect the browser to the URL of the personal address book of
4685 the user. It does not even have a template.
4687 * SoObjects/Contacts/SOGoPersonalAB.[hm]: new class module
4688 implementing the SOGoContactSource protocol. Does nothing
4689 currently but will be used to implement access to the personal
4690 address book of the user stored in the SOGo database.
4692 * SoObjects/Contacts/SOGoContactSource.h: new "SOGoContactSource"
4693 protocol defining an API common to all possible types of contact
4696 * SoObjects/Contacts/SOGoContactFolders.[hm]: new class module
4697 serving as the root of the contact folders available to the
4698 current user. Correctly lists the contact sources in webdav.
4700 2006-08-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4702 * UI/MailerUI/UIxMailAccountsView.m ([UIxMailAccountsView
4703 -composeAction]): new action method that permits external object
4704 to write a message from the default (primary) account.
4706 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
4707 -initSnapshot]): new method with code taken from "defaultAction"
4708 but needed for others.
4709 ([UIxContactEditorBase -writeAction]): new action designed to
4710 compose the correct URL needed to obtain the MailerUI's email
4711 editor with the correct "mailto" parameter.
4713 * UI/Common/UIxSortableTableHeader.m: moved from MailerUI to
4714 Common so that other modules can use it.
4716 * UI/Contacts/UIxContactsListViewContainer.m: container to make it
4717 easier to manage both ajax and non-ajax requests.
4719 * UI/Contacts/UIxContactsFilterPanel.m: clone of
4720 UIxMailFilterPanel, but applicable to contact lists.
4722 * SoObjects/Contacts/NSDictionary+Contact.m ([NSDictionary
4723 -vcardContentFromSOGoContactRecord]): use the new standard methods
4724 created for each type of entry. If a line is determined to not
4725 contain information, it will be skipped.
4727 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
4728 +initialize]): init defaultMailDomain with the user default
4729 "SOGoDefaultMailDomain".
4731 2006-08-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4733 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
4734 -saveAction]): reorganized methods to only have ONE return point.
4735 Invoke saveRecord: directly on the clientObject instead of
4736 saveContentString, which does the same thing anyway.
4738 * SoObjects/Contacts/NSDictionary+Contact.m
4739 ([NSDictionary -vcardContentFromSOGoContactRecord]): extension
4740 method to convert the dictionary returned with the user submission
4741 to a record in VCARD format to be stored in the database.
4743 2006-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4745 * UI/WebServerResources/MailerUI.js: when opening the context menu
4746 of the message list, select the message below the mouse cursor and
4747 deselect the other selected messages temporarily. This mimics the
4748 behaviour of Thunderbird for that matter and was already
4749 implemented for the entries of the folder tree.
4751 * UI/MailerUI/UIxMailFolderMenu.m ([UIxMailFolderMenu
4752 -iconForMenuItem]): new method that returns the fully qualified
4753 relative URL to the icon representing the mailbox, or the default
4754 mailbox icon if needed.
4756 * UI/SOGoUI/UIxComponent.m ([UIxComponent
4757 -urlForResourceFilename:filename]): automatically return an empty
4758 string whenever the filename passed as argument is nil.
4760 * UI/WebServerResources/MailerUI.js: open the mailboxes with the
4761 "desc" parameter set to 1 so that they are sorted in descending
4762 order by default. Also, added "onHeaderClick()", triggered by
4763 clicking on the message list header elements.
4765 * UI/MailerUI/UIxMailSortableTableHeader.m
4766 ([UIxMailSortableTableHeader -isSortedDescending]): same as below.
4768 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
4769 -isSortedDescending]): defaults to "YES" when the sort order is
4772 2006-07-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4774 * UI/WebServerResources/MailerUI.js:
4775 - message cache: set the max num of cached messages to 20. Limit
4776 the cached message size to 30000 bytes.
4777 - ajax: when a message request is called while one is already
4778 being performed, the latter will be cancelled. Idem when
4779 retrieving the content of a mailbox.
4780 - folder tree: when a mailbox is selected because of the URL
4781 requested (initMailboxSelection), the dtree is expanded throughout
4782 the mailbox entry's parent hierarchy to ensure it is made visible
4783 when the page is being displayed. (new function: expandUpperTree).
4784 - mailbox loading: when loading a mailbox where a message was
4785 previously selected, we invoke its url with the "pageforuid"
4786 parameter correctly specified. During callback processing, we scan
4787 the table for the related row and reselect it.
4788 Also, the message area is set blank before loading any mailbox.
4790 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
4791 -defaultAction]): if the "pageforuid" parameter is passed in the
4792 url, take its value and invoke [self firstMessageOfPageFor:]
4793 consequently to deduce the first message to display. Otherwise,
4794 set it to "idx", otherwise set it to 0.
4795 ([UIxMailListView -firstMessageOfPageFor:]): new method
4796 that determines the first message of the page where the message
4797 passed as parameter is contained.
4799 * UI/WebServerResources/UIxMailListView.js: removed this module,
4800 its code was put in MailerUI.js instead.
4802 2006-07-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4804 * UI/MailerUI/UIxMailFolderMenu.m: a descendent of UIxMailTree
4805 which returns the nodes for the parent specified in "parentMenu".
4806 Used to generate the javascript code for the folder dtree.
4808 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: the components
4809 using that container-template are now using UIxMailMainFrame
4810 since UIxMailPanelFrame had no real interest. File removed.
4812 * UI/WebServerResources/dtree.{css,js}: new files to handle
4813 javascript-generated mailbox tree. Modified from original version
4814 by integrating the previous code with the one we are using for
4815 selections and mailbox handling. Minor visual enhancements too...
4817 2006-07-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4819 * SoObjects/Mailer/SOGoUser+Mail.m: if only one identity is to be
4820 returned, put it in an NSArray before returning it (fixes
4823 2006-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4825 * UI/SOGoUI/NSString+URL.m ([NSString -hostlessURL]): new method
4826 that returns a url string stripped from its "http://hostname"
4829 * UI/SOGoUI/NSDictionary+URL.[hm]: moved from UI/Common.
4831 * UI/SOGoUI/NSString+URL.[hm]: moved from UI/Common.
4833 2006-07-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4835 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
4836 -mailDateFormatter]): retrieve the timezone from the user settings
4837 and pass it to the returned dateFormatter. Also, the dateFormatter
4838 is kept in a static variable to avoid useless
4839 creations/destructions.
4841 * UI/MailerUI/UIxMailFormatter.m ([UIxMailDateFormatter
4842 -setTimeZone:newTimeZone]): new accessor to specify the timezone.
4844 * UI/MailerUI/UIxMailFilterPanel.m ([UIxMailFilterPanel -setSearchCriteria:])
4845 ([UIxMailFilterPanel -searchCriteria]): new methods, similar to
4846 s/Criteria/Text/ to handle the "criteria" form parameter.
4848 2006-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4850 * UI/WebServerResources/uix.css: enhanced the toolbar appearance
4851 to integrate better with the firefox look&feel. Added entries for
4852 the new "menu" DIV class (popup menus).
4854 * UI/WebServerResources/generic.js: added "sanitizeMailTo" which
4855 takes any chunk of text as param, detects the user email and the
4856 optional first and last names and return them in a well-formatted
4857 way. Renamed "getSelection" to "getSelectedNodes" to avoid a
4858 namespace conflict. Added "onMenuClick(node, event, menuId)" to
4859 handle popup menus through "onclick" element attributes (node =
4860 this, event = event and menuId = name of the menu DIV id to
4863 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
4864 -snapshot]): add an entry for "email" into the snapshot
4865 dictionary if a "contactEmail" URL parameter was detected and if
4866 the entry for "email" is empty.
4868 * UI/Contacts/Toolbars/SOGoContactFolder.toolbar: the "new card"
4869 button now invokes the newContact() js function in ContactsUI.js
4870 instead of opening "new" directly. newContact() pops up a window
4871 stripped from its navigation bar.
4873 * UI/Contacts/ContactsUI.js: new module specific to the ContactsUI
4874 bundle (AddressBook).
4876 * UI/Templates/MailerUI/UIxMailView.wox: added a div of class
4877 "menu" and id "addressMenu" have the header email addresses
4878 display it with the new menu code in generic.js.
4880 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: same as below +
4881 replaced the body tables with a div of class "pageContent"
4882 (standardization across the page templates).
4884 * UI/Templates/MailerUI/UIxMailMainFrame.wox: include
4885 productJavaScriptURL and pageJavaScriptURL (conditionnally) since
4886 those are now inherited from UIxPageFrame.
4888 * UI/MailerUI/UIxMailView.js: new file specific to UIxMailView.
4890 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]): if
4891 a "mailto" URL parameter is detected and the "to" array is empty,
4892 initialize "to" with the value of "mailto" before returning it.
4894 * UI/MailerUI/UIxMailEditorAction.m ([UIxMailEditorAction
4895 -composeAction]): rewrote method in a cleaner way and with usage
4896 of the URL extensions to NSString and NSDictionary (see below).
4897 Also, if a "mailto" url parameter is detected, pass it to the
4900 * UI/MailerUI/UIxMailMainFrame.m: subclassed from UIxPageFrame to
4903 * UI/Common/NSDictionary+URL.m ([NSDictionary -asURLParameters]):
4904 returns a parameter string to add to a base URL.
4906 * UI/Common/NSString+URL.m ([NSString
4907 -composeURLWithAction:parameters:andHash:useHash]): new method to
4908 compose a complete URL from an object URL with parameters and an
4909 optional '#' character.
4911 * UI/Common/UIxPageFrame.h: separated interface from
4914 2006-07-07 Wsourdeau Sourdeau <wsourdeau@inverse.ca>
4916 * UI/Scheduler/UIxAppointmentEditor.m: returns yes to "isPopup";
4918 * UI/WebServerResources/generic.js: added code to manage
4919 selections within HTML containers.
4921 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productJavaScriptURL]):
4922 added method to determine the possible URL for a product-specific
4923 javascript filename of the forme <productname>.js.
4924 ([UIxPageFrame -hasProductSpecificJavaScript]): new method.
4925 ([UIxPageFrame -isPopup]): new method to determine whether the
4926 application navigator bar should be displayed (main page) or not
4929 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
4930 -LDAPCheckLogin:_loginpassword:_pwd]): new method to authenticate
4931 the user through LDAP.
4933 2006-07-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4935 * The toolbar code from the MailerUI product was taken, renamed as
4936 "UIxToolBar" and put into UI/Common. Toolbar plists were created
4937 for the Contacts and Scheduler products and put in their respectir
4938 Toolbars/ subdirectories. Finally,
4939 UI/Templates/{UIxToolbarButton,UIxToolbarSeparator}.wox, and
4940 UI/Common/{UIxToolbarButton,UIxToolbarSeparator}.m were removed
4941 and an invocation to the UIxToolbar component was put at the top
4942 of UI/Templaces/UIxPageFrame.wox.
4944 * UI/Common/UIxToolbar.m: new "isLastGroup" method to determine
4945 within the templates whether a separator should be displayed.
4947 * UI/Common/UIxToolbar.m ([UIxToolbar -hasButtons]): new method
4948 that returns NO if the toolbar is empty.
4950 2006-07-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4952 * UI/Templates/UIxPageFrame.wox: replaced central table with a DIV.
4954 * UI/Common/UIxToolbarSeparator.m, UI/Common/UIxToolbarButton.m:
4955 new toolbar objects.
4957 * UI/Templates/UIxPageFrame.wox: use the exact html code as below.
4959 * UI/Templates/MailerUI/UIxMailMainFrame.wox: redone the
4960 linkbanner as a DIV instead of a TABLE.
4962 * UI/MailerUI/UIxMailMainFrame.m [UIxMailMainFrame
4964 returns 'YES' to request the display of the navigation bar between
4967 2006-06-15 ludovic@inverse.ca
4969 * It's now possible to set the default
4970 domain using for email using the
4971 SOGoDefaultMailDomain preference key.
4973 2006-06-15 ludovic@inverse.ca
4975 * Initial import of SOGo from trunk.