1 2007-11-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3 * UI/MailPartViewers/UIxMailPartICalViewer.m
4 ([UIxMailPartICalViewer -acceptLink])
5 ([UIxMailPartICalViewer -declineLink])
6 ([UIxMailPartICalViewer -tentativeLink]): removed useless methods.
8 * UI/MailPartViewers/UIxMailPartICalAction.m ([UIxMailPartICalAction -addToCalendarAction])
9 ([UIxMailPartICalAction -deleteFromCalendarAction]): new stub
12 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
13 -lookupImap4BodyPartKey:]): make use of the new method below.
15 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
16 +bodyPartClassForMimeType:mimeTypeinContext:_ctx]): new method
17 that returns an appropriate Class depending on a given mime type.
19 * UI/SOGoUI/UIxComponent.m ([UIxComponent -canCreateOrModify]):
20 new boolean accessor that determines whether someone can create
21 (i.e. modify a new entry) or modify an existing entry.
23 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
24 -lookupName:lookupNameinContext:localContextacquire:acquire]):
25 overriden method to bind looked up keys to So methods but by
26 avoiding a call to toOneRelationshipKeys. This will be the top
27 method of the chain, meant to override SoObject's behaviour.
29 * SoObjects/Contacts/SOGoContactLDAPFolder.m
30 ([SOGoContactLDAPFolder
31 -lookupName:objectNameinContext:lookupContextacquire:acquire]):
32 removed hack to prevent [super lookupName...] to read the entire
33 LDAP directory when looking up a record.
35 2007-11-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
37 * SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
38 +folderWithSubscriptionReference:referenceinContainer:aContainer]):
41 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
42 ([UIxMailPartHTMLViewer -_attachmentIds]): the reference was one
43 character too short, which cause the images not to be displayed
44 sometimes and crashes to happen whenever the references on a
45 message were wrong (due to bugs in SOPE).
47 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
48 -hasMessageAttachment]): consider an attachment any content that
49 has a non-nil disposition.
51 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
52 -newFolderWithName:nameandNameInContainer:newNameInContainer]):
53 fixed method to make use of the parameters instead of the useless
54 remains that weren't even initialized.
56 * SoObjects/Appointments/SOGoAppointmentObject.m
57 ([SOGoAppointmentObject -saveContentString:_iCalbaseSequence:_v]):
58 don't propagate the event among the attendees if this is not an
60 ([SOGoAppointmentObject -deleteWithBaseSequence:]): same as above.
62 * Main/SOGo.m ([SOGo -authenticatorInContext:context]): make use
63 of the new category method below.
65 * SoObjects/SOGo/WORequest+SOGo.m ([WORequest
66 -handledByDefaultHandler]): new method that returns whether this
67 is an "so" or alike request.
69 * SoObjects/SOGo/WORequest+SOGo.[hm]: new category module.
71 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
72 -newFolderWithName:nameandNameInContainer:newNameInContainer]):
73 write the new folder's name in the folder cache.
75 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
76 -calendars]): same as below.
78 * UI/Contacts/UIxContactsListViewContainer.m
79 ([UIxContactsListViewContainer -currentContactFolderName]):
80 translate the display name if its the default one.
82 * SoObjects/Appointments/SOGoAppointmentFolder.m
83 ([SOGoAppointmentFolder -create]): overriden method that invokes
84 its ancestor and then activate itself within the user settings.
86 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
87 -appendPersonalSources]): when the user is the owner of the
88 current folder, we create the "personal" folder if it doesn't
89 exist by invoking "create".
91 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
92 -primaryFetchProfile]): when no row is returned, we initialize
93 "values" to a new dictionary. This solves a bug where the defaults
94 would not be initialized properly.
96 2007-11-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
98 * SoObjects/SOGo/SOGoGCSFolder.m ([-compare:otherFolder]): method
99 moved into the SOGoFolder class.
101 * SoObjects/Appointments/SOGoAppointmentObject.m
102 ([SOGoAppointmentObject -saveContentString:_iCalinUIDs:_uids]):
103 simplified method by directly building a similar appointment
104 object with the current folder as container.
106 * SoObjects/Contacts/SOGoContactLDAPFolder.m
107 ([SOGoContactLDAPFolder
108 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
109 take the content of an object returned by
110 lookupName:inContext:acquire: instead of the dictionary passed as
111 parameter since it represents a flattened entry return by
112 lookupContactsWithFilter...
114 * SoObjects/Contacts/SOGoFolder+CardDAV.m: NSObject+CardDAV
115 category renamed to SOGoFolder+CardDAV.
117 * SoObjects/SOGo/SOGoParentFolder.m: no longer a subclass of
118 SOGoObject, but of SOGoFolder instead.
120 * SoObjects/SOGo/SOGoUserFolder.m: no longer a subclass of
121 SOGoGCSFolder, but of SOGoFolder instead.
123 * SoObjects/Appointments/SOGoAppointmentFolder.m
124 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): fixed
125 to take the new SOGoParentFolder class into account. Also, create
126 the personal folder if it doesn't exist.
128 * SoObjects/SOGo/SOGoFolder.[hm]: new class module implementing
129 the parent of all SOGo containers.
131 * SoObjects/SOGo/SOGoGCSFolder.[hm]: SOGoFolder class renamed to
134 2007-11-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
136 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection
137 -getAddressesFromFormValues:_dict]): take NSString and NSArray
138 values. Ignore addresses with a length of 0.
140 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -mailAccounts]): we now
141 fetch the accounts from the user defaults and create default
144 2007-11-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
146 * UI/MailPartViewers/UIxMailPartTextViewer.m
147 ([UIxMailPartTextViewer -flatContentAsString]): re-added
148 conversion of line-break to sequences of HTML "BR", with a fast
151 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
152 -flatContentAsString]): simplified method now that we know
153 -[NSString stringWithData:usingEncodingNamed:] has a more robust
156 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
157 -showToAddress]): the answer is cached.
159 * UI/Common/UIxObjectActions.m ([UIxObjectActions +initialize]):
160 read "SOGoACLsSendEMailNotifications" from the user defaults to
161 determiner whether to send an email when a user is added or
162 removed from an object's acl.
164 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
165 -contentForEditing]): make sure the htmlContent flag is set to NO
166 when we select the textual part. Also we select only the relevant
169 * UI/MailerUI/WOContext+UIxMailer.m ([-mailSubjectFormatter]):
172 * UI/MailerUI/UIxMailView.m ([UIxMailView -messageSubject]): new
173 method replacing -objectTitle, written like the ones below.
175 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
176 -messageSubject]): rewrote method to act the one below.
178 * UI/MailPartViewers/UIxMailPartMessageViewer.m
179 ([UIxMailPartMessageViewer -messageSubject]): new method that
180 returns the decoded mail subject or "Untitled" if the subject is
183 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
184 -decodedSubject]): new method that invoke -decodedSubject from the
185 NSString and NSData class, depending on the identity of the
186 subject obtained from the envelope.
188 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
189 -subjectForReply]): take the value of -[SOGoMail decodedSubject]
190 instead of the subject of the envelope.
191 ([SOGoMailObject -filenameForForward]): same as above.
192 ([SOGoMailObject -subjectForForward]): same as above.
194 * SoObjects/Mailer/NSString+Mail.m ([NSString -decodedSubject]):
195 same as below for NSString.
197 * SoObjects/Mailer/NSData+Mail.m ([NSData -decodedSubject]): new
198 method that decodes the subject of a mail taken as an NSData
199 instance. Handling the exceptions and the badly formatted headers.
201 * UI/MailerUI/UIxSubjectFormatter.[hm]: dropped class module.
203 2007-11-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
205 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
206 -deleteEntriesWithIds:ids]): make sure the objects returned by
207 lookupName:... are not instances of NSException.
209 2007-11-03 Ludovic Marcotte <ludovic@inverse.ca>
211 * UI/Scheduler/UIxAppointmentEditor.m
212 Fixed monthly recurrences support.
214 2007-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
216 * SoObjects/Appointments/SOGoAppointmentObject.m
217 ([SOGoAppointmentObject -deleteWithBaseSequence:]): an email was
218 sent when modifying an event, when the event was considered
219 relevant. The same thing is now implemented for event deletion.
221 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
222 -primaryFetchProfile]): make sure that the deserialized "values"
223 is an instance of NSMutableDictionary, otherwise we override it
226 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
227 -contentForReply]): make use of the SOGoMailReply WO page.
229 * SoObjects/Mailer/SOGoMailReply.[hm]: new class module copied
230 from SOGoMailForward to handle mail replies instead. Only three
231 methods remaining: date, from and messageBody. The latter is
234 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
235 -fetchMailForForwarding:sourceMail]): fetch attachments for
238 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
239 -hasMessageAttachment]): initialize hasAttachment with "NO" to
240 avoid false positives.
242 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event])
243 ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]):
244 set title to an empty string where the event/task summary is null.
246 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
247 -setHeaders:newHeaders]): make sure there is a message id in the
248 headers dictionary, if not, generate one.
249 ([SOGoDraftObject -fetchMailForEditing:sourceMail]): retrieve the
250 message id from the existing draft.
251 ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): store the
252 message id in the header map.
254 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
255 -deleteFolderAction]): no longer prefix the target folder with
258 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
259 -listMailboxesAction]): base the folder type on the folder
262 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
263 -lookupName:_keyinContext:acquire:_acquire]): compare the full
264 traversal to the potential looked up folder with the special
265 folder names and return an object with the appropriate
266 SOGoMailFolder subclass.
268 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
269 -traversalFromMailAccount]): don't prepend the whole string with
272 * SoObjects/Mailer/SOGoMailAccount.m
273 ([-lookupSentFolder:_keyinContext:_ctx])
274 ([-lookupDraftsFolder:_keyinContext:_ctx])
275 ([-lookupTrashFolder:_keyinContext:_ctx])
276 ([-lookupFiltersFolder:_key:_ctx]): removed methods.
277 ([SOGoMailAccount -inboxFolderNameInContext:])
278 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
279 ([SOGoMailAccount -sentFolderNameInContext:])
280 ([SOGoMailAccount -trashFolderNameInContext:]): no longer prefixes
281 the resulting name with "prefix" since we might return a nested
283 ([SOGoMailAccount -allFolderPaths]): prefixes all special folder
284 names with "/". Sorts the resulting folder list with
285 localizedCaseInsensitiveCompare: instead of
286 caseInsensitiveCompare:. No longer use the -[lookupXXX] methods
287 that were removed, instead, we choose the appropriate class
288 depending on the folder name. And since we are in SOGoMailAccount,
289 we don't have to compute a traversal path to match the key with
292 -folderWithTraversal:traversalandClassName:className]): new method
293 that returns an instance of the specified SOGoMailFolder subclass,
294 based on the traversal path passed as parameter.
295 ([SOGoMailAccount -inboxFolderInContext:_ctx])
296 ([SOGoMailAccount -draftsFolderInContext:_ctx])
297 ([-sentFolderInContext:_ctx])
298 ([SOGoMailAccount -trashFolderInContext:_ctx]): invoke the new
299 -folderWithTraversal:andClassName: method described above.
301 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
302 -primaryFetchProfile]): make use of -[NSPropertyListSerialization
303 propertyListFromData:mutabilityOption:format:errorDescription:] to
304 deserialize the plist. Removed variant for libFoundation since it
305 should support the above.
306 ([AgenorUserDefaults -generateSQLForInsert])
307 ([AgenorUserDefaults -generateSQLForUpdate]): make use of
308 -[NSPropertyListSerialization
309 dataFromPropertyList:format:errorDescription:] to serialize the
310 plist. Removed variant for libFoundation since it should support
311 the above. Escape the backslashes from the resulting string.
313 2007-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
315 * SoObjects/Mailer/SOGoMailFolder.[hm]: added a new subclass of
316 SOGoMailFolder: SOGoMailSpecialFolder.
318 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
319 -traversalFromMailAccount]): overridden method that returns the
320 initialized mutable string.
321 ([SOGoMailAccount -allFolderPaths]): take the special folder paths
322 with -traversalFromMailAccount and reposition them at the
323 beginning of the list. By creating the special folders during that
324 request, we also make sure that the folder exists thanks to the
325 new initialisation method of the new "SOGoSpecialMailFolder"
327 ([SOGoMailAccount -lookupSentFolder:_keyinContext:_ctx]): new
329 ([SOGoMailAccount -lookupTrashFolder:_keyinContext:_ctx]): new
331 ([SOGoMailAccount -lookupName:_keyinContext:acquire:_flag]): no
332 longer use lookupImap4Folder.
333 ([SOGoMailAccount -lookupImap4Folder:_keyinContext:_ctx]): removed
336 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
337 -traversalFromMailAccount]): new method that returns the full
338 IMAP4 path to the object.
340 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): retain
341 "superUsernames" after fetching it from the ud.
343 2007-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
345 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
346 -eventsListAction]): substitude the start and end date with their
347 UTC counterpart, taking into account the offset from UTC related
348 to those dates instead of the current one. This renders
349 -[UIxCalMainView -userUTCOffset] obsolete because the computings
350 that occured in javascript are now done server-side.
352 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView -userUTCOffset]):
353 removed obsolete method.
355 * SoObjects/Mailer/NSString+Mail.m ([NSString -htmlToText]): new
356 method converting html content to plain text.
358 * SoObjects/Mailer/NSString+Mail.[hm]: new category module
359 enhancing NSString with utility methods pertaining to mail handling.
361 * SoObjects/Mailer/SOGoMailObject.m
362 ([-shouldFetchPartOfType:_typesubtype:_subtype]): removed obsolete method.
364 -addRequiredKeysOfStructure:infopath:ptoArray:keysacceptedTypes:types]):
365 modified method to be always recursive and to take an array of the
366 accepted mime-types as parameter. The returned array now contains
367 the mime-type as well as the part keys.
369 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
370 -contentForEditingOnParts:_prtskeys:_k]): removed obsolete method.
371 ([SOGoMailObject -contentForEditing]): rewrote method to take into
372 account the first text/plain part or the first text/html part
373 converted to text/plain with our new -[NSString htmlToText]
376 * UI/MailerUI/UIxMailActions.m ([-replyToAllAction]): invoke
377 "replyToAll:" with YES as parameter instead of NO.
379 2007-10-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
381 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
382 -davContentType]): ignore any possible parameter taken from the
383 mime-info of the body part.
385 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
386 -lastFirstMessageNumber]): new accessor that returns the first
387 message number of the last series of messages.
388 ([UIxMailListView -fetchKeys]): request the bodystructure for each
390 ([UIxMailListView -hasMessageAttachment]): extract the attachment
391 information from the message bodystructure.
393 2007-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
395 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
396 -GETAction:]): use the "application/octet-stream" mime type for
397 elements of type "application/x-xpinstall" to avoid confusing
400 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -messageCheckList])
401 ([UIxPreferences -itemMessageCheckText])
402 ([UIxPreferences -userMessageCheck])
403 ([UIxPreferences -setUserMessageCheck:newMessageCheck]): new
404 methods for handling the retrieval of new messages automatically.
406 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -messageCheck]): new method
407 that returns the interval of time between automatic message
410 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
411 -defaultAction]): now expunges the last folder marked for expunge.
413 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
414 -trashInContext:_ctx]): now marks the container folder for
417 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
418 -markForExpunge]): new method that marks the folder for the next
419 automatic expunge operation in the user settings.
420 ([SOGoMailFolder -expungeLastMarkedFolder]): new methods that
421 takes the last folder marked for expunge, expunges it and removes
422 it from the user settings, if it exists.
424 2007-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
426 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
427 -messageSubjectCellStyleClass]): added support for replied,
428 forwarded, forwarded and replied mails.
430 * SoObjects/Mailer/NSData+Mail.m ([NSData
431 -bodyDataFromEncoding:encoding]): new utility method that decodes
432 the NSData instance properly depending on the encoding string
435 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
436 -fetchFileAttachmentKeys]): fetch the attachment encoding as well.
438 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
439 -stringForData:_datapartInfo:_info]): simplified by invoking
440 -bodyDataFromEncoding: from our new NSData category methods.
442 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
443 -fetchMailForEditing:sourceMail]): work-around a bug in SOPE-mime
444 where only the body part of the first of the keys fetched was
445 returned. Also decodes the body parts properly following their
448 * SoObjects/Mailer/NSData+Mail.[hm]: new extension module that
449 extends the NSData class with utility methods useful for handling
452 2007-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
454 * SoObjects/SOGo/NSArray+Utilities.m
455 ([NSArray -stringsWithFormat:format]): replace instances of NSNull
458 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
459 -keysWithFormat:keyFormat]): replace instances of NSNull with
462 * SoObjects/Contacts/SOGoContactLDAPFolder.m: if "displayName" is
463 empty, use "c_cn" instead.
465 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
466 ([SOGoMailAccount -draftsFolderInContext:_ctx])
467 ([SOGoMailAccount -sentFolderInContext:_ctx]): no longer make use
468 of the "SOGoSpecialFoldersInRoot" user defaults. The folders will
469 no always be specified from the root instead of sometimes from the
472 2007-10-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
474 * UI/Common/UIxPageFrame.m ([UIxPageFrame -commonLocalizableStrings])
475 ([UIxPageFrame -productLocalizableStrings]): invoke the new
476 +[SOGoUser language] method if the user is nil.
478 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +language]): new method
479 that returns any generically-found language.
480 ([SoUser -language]): modified to call the above.
481 ([SOGoUser -language]): modified to call the above if the user
482 language has a null length.
484 * SoObjects/Contacts/SOGoContactLDIFEntry.m ([SOGoContactLDIFEntry
485 -davEntityTag]): modified to return the "hash" of the vCard string.
487 * UI/MailerUI/UIxMailActions.m ([UIxMailActions
488 -removeAllLabelsAction]): new method that removes all label flags
489 from the associated message.
490 ([UIxMailActions -addLabel1Action]
491 [UIxMailActions -addLabel2Action]
492 [UIxMailActions -addLabel3Action
493 [UIxMailActions -addLabel4Action]
494 [UIxMailActions -addLabel5Action]): new methods that adds label
495 flags to the associated message.
496 ([UIxMailActions -removeLabel1Action]
497 [UIxMailActions -removeLabel2Action]
498 [UIxMailActions -removeLabel3Action
499 [UIxMailActions -removeLabel4Action]
500 [UIxMailActions -removeLabel5Action]): new methods that removes
501 label flags from the associated message.
503 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -msgLabels]):
504 new accessor that returns the labels associated with the message.
506 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
507 -allFolderPaths]): new method that returns all the paths of all
508 the subfolders of the folder object.
509 ([SOGoMailFolder -allFolderURLs]): new method replacing
512 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
513 -aclsForUser:uid]): object inherits the 'SOGoRole_ObjectEditor'
514 role from its parent folder.
516 2007-10-19 Francis Lachapelle <flachapelle@inverse.ca>
518 * SoObjects/SOGo/SOGoUser.m
519 ([SOGoUser -rolesForObject:objectinContext:context]): allow
520 multiple super usernames to be defined. The user default
521 SOGoSuperUsername is renamed SOGoSuperUsernames and must be
524 2007-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
526 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
527 -userInContext:]): override the super method by returning
528 anonymous if the super returns nil.
530 * UI/Common/UIxPageFrame.m ([UIxPageFrame
531 -productLocalizableStrings]): new method that returns the
532 product-specific translation dictionary as a JSON hash.
533 ([UIxPageFrame -commonLocalizableStrings]): same as above but for
534 the "Common" framework.
535 ([UIxPageFrame -setJsFiles:newJSFiles]): new setter that enables
536 the requestor components to require additional Javascript files.
537 This is useful now that all the scripts are loaded at the end of
539 ([UIxPageFrame -additionalJSFiles]): new getter related to the
542 2007-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
544 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -copyAction]):
545 implemented new web method.
547 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
548 -copyToFolderNamed:folderNameinContext:]): new method with the
549 code cut/pasted from -moveToFolderNamed:inContext:.
550 ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]):
551 modified to use the code from -copyToFolderNamed:inContext:, which
552 is common between the two actions.
554 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
555 ([SOGoMailAccount -sentFolderNameInContext:])
556 ([SOGoMailAccount -trashFolderNameInContext:]): modified to take
557 the user settings into account.
559 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -setAsDraftsFolderAction])
560 ([UIxMailFolderActions -setAsSentFolderAction])
561 ([UIxMailFolderActions -setAsTrashFolderAction]): new web methods
562 that change the purpose of the active folder to "Sent", "Drafts"
565 * UI/SOGoUI/SOGoACLAdvisory.m ([SOGoACLAdvisory -subject]):
566 returns the subject as quoted-printable.
568 * UI/SOGoUI/SOGoACLAdvisory.[hm]: added two intermediary classes:
569 SOGoACLAdditionAdvisory and SOGoACLRemovalAdvisory implementing
570 the "aclMethod" method for the subsequent language-dependent
573 * UI/SOGoUI/SOGoFolderAdvisory.m ([SOGoFolderAdvisory -subject]):
574 returns the subject as quoted-printable.
576 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
577 -dealloc]): release item, aptStartDate and aptEndDate.
579 2007-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
581 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
582 -initWithName:newNameinContainer:newContainer]): the owner of a
583 shared folder is set to "nobody" by default.
585 * UI/Common/UIxAclEditor.m ([UIxAclEditor -hasOwner]): new method
586 that returns whether the object has an owner or not.
588 2007-10-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
590 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
591 the folder even if the current user is not its owner.
593 2007-10-10 Ludovic Marcotte <ludovic@inverse.ca>
595 * We now send advisory emails when folders
596 are created / deleted.
598 * Fixed the sending of advisory emails upon
599 ACL changes on folders.
601 2007-10-10 Ludovic Marcotte <ludovic@inverse.ca>
603 * UI/Scheduler/UIxComponentEditor.m
604 Implemented event/task priority support.
606 * SoObjects/Contacts/SOGoContactGCSFolder.m
607 Added CardDAV support.
609 * SoObjects/SOGo/LDAPUserManager.m and SOGoUser.m
610 Implemented From: based on LDAP results based on
611 the MailFieldNames attribute (an array) specified
612 in every LDAP-based authentication sources.
614 * UI/MailPartViewers/UIxMailPartTextViewer.m and
615 UI/WebServerResources/MailerUI.css
616 We avoid replacing "\r\n" and "\n" with <br /> and
617 rather use CSS capabilities for proper formatting.
618 This is _WAY_ faster on very large mails.
620 2007-10-10 Francis Lachapelle <flachapelle@inverse.ca>
622 * UI/Scheduler/UIxComponentEditor.m
623 ([UIxComponentEditor -componentCalendar]): returns the calendar
624 object of the current event.
626 2007-10-05 Ludovic Marcotte <ludovic@inverse.ca>
628 * UI/WebServerResources/MailerUI.js
629 We check if at least one message is selected
630 before performing a Reply/Reply All/Forward
632 * SoObjects/Appointments/SOGoAppointmentFolder.m
633 and others - implemented support for recurring
634 events (with some known limitations right now,
635 all soon to be fixed).
637 2007-10-04 Francis Lachapelle <flachapelle@inverse.ca>
639 * Main/SOGo.m ([SOGo -isUserName:_keyinContext:_ctx]): removed
640 the constraint that a username can't start with a digit.
642 2007-10-02 Francis Lachapelle <flachapelle@inverse.ca>
644 * Moved SOPE/sope-gdl1/GDLContentStore from the default trunk
645 repository to Inverse's branch.
647 2007-09-28 Francis Lachapelle <flachapelle@inverse.ca>
649 * SoObjects/Mailer/SOGoDraftObject.m
650 ([SOGoDraftObject -isValidAttachmentName:_name]): removed
651 constraint on space in file name.
652 ([SOGoDraftObject -saveAttachment:_attachwithMetadata:metadata]):
653 now removes from file name all characters preceding a backslash.
654 This happens with IE7 because the complete attachment file path
657 2007-09-25 Francis Lachapelle <flachapelle@inverse.ca>
659 * SoObjects/Appointments/SOGoAptMailNotification.m
660 ([SOGoAptMailNotification -appointmentURL]): set personal as the
661 default calendar where to add the event.
663 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
664 activate the SOGoUIxDefaultModule user defaults.
666 2007-09-21 Francis Lachapelle <flachapelle@inverse.ca>
668 * UI/SOGoUI/UIxComponent.m
669 ([UIxComponent -shortUserNameForDisplay]): returns the string
670 "wrongusernamepassword" when authentication failed.
672 2007-09-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
674 * UI/MailPartViewers/UIxMailPartICalViewer.m
675 ([UIxMailPartICalViewer -calendarFolder]): returns the "personal"
676 entry of the Calendars parent folder.
678 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
679 -messageSubject]): new accessor method to work-around a problem
680 within SOPE where a subject could be returned as an NSData.
682 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
683 -appendPersonalSources]): make sure the value of the "c_path4" of
684 the returned rows are not NSNull, otherwise, discard them.
686 2007-09-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
688 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
689 -compare:otherFolder]): new overriden method that compares two
690 contact foldes based on their class and then transfer the control
691 to the super method in SOGoFolder.
693 * SoObjects/Contacts/SOGoContactLDAPFolder.m
694 ([SOGoContactLDAPFolder -compare:otherFolder]): new method that
695 compare two contact folders based on their class and then their
698 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -compare:otherFolder]):
699 new method for sorting folders. The folders are compared based on
700 their ownership, whether they are a main folder and finally
701 depending on their display name.
703 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
704 -pathArrayToSOGoObject]): do not reorder the paths if the third
705 element is an instance of NSNull.
707 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
708 -subFolders]): returns a sorted array using the "compare:"
711 2007-09-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
713 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
714 -calendars]): also returns the owner of the listed folders.
716 * SoObjects/Appointments/SOGoAppointmentFolder.m
717 ([-deleteEntriesWithIds:ids]): moved method into SOGoFolder.
719 * UI/Scheduler/UIxCalMainView.m ([-batchDeleteAction]): moved
720 method into UIxFolderActions.
722 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
723 -fetchFreeBusyInfosFrom:_startDateto:_endDate]): fetch the
724 freebusy info from the "personal" calendar.
726 * UI/Common/UIxParentFolderActions.m ([UIxParentFolderActions
727 -createFolderAction]): new standardized method for requesting
728 folder creations among gcs-based modules.
730 * UI/Common/UIxParentFolderActions.[hm]: new action class module.
732 * SoObjects/Appointments/SOGoAppointmentFolders.m: new class
733 module, equivalent to the SOGoParentFolder's child
734 SOGoContactFolders, but for calendars.
736 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -labelForKey:key]): new
737 method that returns translated strings for controller bundles
738 (same as what UIxComponent does for view bundles).
739 ([SOGoObject -pathArrayToSOGoObject]): new method that returns
740 the real path to a subscribed folder (if subscribed).
741 ([SOGoObject +globallyUniqueObjectId]): move method from SOGoFolder.
742 ([SOGoObject -globallyUniqueObjectId]): new instance method
743 calling its class equivalent.
745 2007-09-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
747 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage -defaultAction]): test
748 whether the user is logged in and if so, redirect to his/her
750 ([SOGoRootPage -appendToResponse:inContext:]): removed useless
753 2007-09-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
755 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
756 +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
758 ([SOGoFolder -displayName]): new method.
759 ([SOGoFolder -delete]): accept to proceed only if nameInContainer
762 * SoObjects/Contacts/SOGoContactLDAPFolder.m
763 ([SOGoContactLDAPFolder
764 +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
765 renamed from "contactFolderWithName..." for compatibility with SOGoFolder.
767 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
768 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
769 removed method, reimplemented in SOGoFolder.
770 ([SOGoContactGCSFolder -displayName]): removed method,
771 reimplemented in SOGoFolder.
772 ([-delete]): removed method, modified in SOGoFolder.
774 * SoObjects/Contacts/SOGoContactFolders.[hm]: modified class to be
775 a subclass of SOGoParentFolder.
777 * SoObjects/SOGo/SOGoParentFolder.[hm]: new class module derived
778 from SOGoContactFolders and modified to be more content-independent.
780 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -markMessageUnreadAction])
781 ([UIxMailActions -markMessageReadAction]): new methods moved from
782 UIxMailListView and adapted to invoke the client object directly,
783 since the previous versions had to to a lookup from the parent
786 * UI/MailerUI/UIxMailListView.m ([-markMessageUnreadAction]): move
787 method into UIxMailActions.
788 ([-markMessageReadAction]): same as above.
789 ([-viewAction]): removed useless method.
790 ([-javaScriptOK]): removed useless method.
791 ([-isJavaScriptRequest]): removed useless method.
792 ([-lookupActiveMessage]): removed useless method.
794 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
795 -responseWithStatus:status]): new method that returns a WOResponse
796 initialized with the specified status code.
797 ([WODirectAction -responseWith204]): new method that invokes the
798 above one with "204" as parameter.
799 ([WODirectAction -redirectToLocation:newLocation]): rewrote method
800 to make use of -responseWithStatus:.
802 * UI/SOGoUI/UIxComponent.m ([UIxComponent -responseWith204]): new
803 method that returns a WOResponse initialized with the 204 status
806 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sortedUIDs]):
807 always use a "not deleted" search qualifier along with the user
808 qualifier (if present).
810 2007-09-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
812 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
813 -contactSearchAction]): only return the records which have an
816 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
817 -trashInContext:_ctx]): no longer expunge the mailbox after
818 marking a message deleted.
819 ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]): same
822 * UI/MailerUI/UIxMailView.m ([-deleteAction]): removed method.
823 ([-trashAction]): moved method into UIxMailActions.
824 ([-moveAction]): moved method into UIxMailActions.
826 2007-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
828 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
829 ([_UIxHTMLMailContentHandler
830 -endElement:_localNamenamespace:_nsrawName:_rawName]): remove HTML
831 comments from the CSS code, do not add the CSS code to the body
832 content and remove references of body from the CSS declarations.
833 ([UIxMailPartHTMLViewer -cssContent]): new accessor method.
834 ([UIxMailPartHTMLViewer -flatContentAsString]): separated code
835 common with cssContent in a different method and invoke it only
838 * UI/MainUI/SOGoRootPage.[hm]: made a subclass of UIxComponent
839 instead of UIxPageFrame.
841 2007-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
843 * UI/MainUI/SOGoRootPage.m ([-defaultAction]): commented out.
844 ([-appendToResponse:responseinContext:ctx]): commented out.
845 ([SOGoRootPage -connectURL]): new accessor that returns the full
846 url the the "connect" method.
847 ([-connectAction]): rewrote method to return a properly formatted
848 auth. cookie based on the username and password passed as
851 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
852 set the value of the cookie to "discard" and set its expiration
855 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
856 -preprocessCredentialsInContext:context]): consider the user
857 anonymous if the cookie value is "discard".
858 ([SOGoWebAuthenticator
859 -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
860 set the expiration date of the cookie to yesterday.
862 * UI/SOGoUI/UIxComponent.m ([UIxComponent -applicationPath]):
863 returns the path to the application if the clientObject is not a
866 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder +initialize]):
867 moved the requirement of authentication from the SOGo application
870 * SoObjects/Appointments/SOGoAppointmentObject.m
871 ([SOGoAppointmentObject -saveContentString:_iCalbaseSequence:_v]):
872 check whether the new appointment object is still relevant before
873 sending a notification.
875 2007-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
877 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
878 -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
879 render the login page through the SoDefaultRenderer.
881 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage
882 -isPublicInContext:localContext]): new overriden method that
885 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
886 -currentCalendarLogin]): replace css-unsafe characters with _.
888 * UI/SOGoUI/UIxComponent.m ([UIxComponent
889 -shortUserNameForDisplay]): simplified method.
890 ([-user]): removed method since [context activeUser] is as useful.
892 2007-09-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
894 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
895 set the cookie path to "/".
897 * Main/SOGo.m ([SOGo -authenticatorInContext:_ctx]): choose the
898 authenticator based on the request handler key. "dav" returns the
899 SOGoDAVAuthenticator, anything else returns the Web authenticator.
901 * SoObjects/SOGo/SOGoDAVAuthenticator.m: renamed module from
904 * SoObjects/SOGo/SOGoWebAuthenticator.m: new class module
905 implementing a subclass of SoCookieAuthenticator, designed for
906 web-based cookie authentication of users.m
908 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
909 new method that resets the authentification cookie.
911 2007-08-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
913 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
914 -checkLogin:loginToCheckandPassword:passwordToCheck]): initialize
915 didBind to NO to make sure no false authentication is returned if
916 the bind operation is not executed.
918 2007-08-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
920 * SoObjects/Mailer/SOGoDraftObject.m: added support for the
921 "In-Reply-To" header field when replying.
923 * UI/MainUI/SOGoUserHomePage.m: add the "c_" prefix to the quick
924 table field names that are queried.
926 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
927 -iCalStringForFreeBusyInfos:_infosfrom:_startDateto:_endDate]):
928 add the "c_" prefix to the quick table field names that are
931 2007-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
933 * SoObjects/Appointments/SOGoAppointmentFolder.m
934 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): add
935 "personal" to the ocs path of the appointment folder.
937 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
938 -flatContentAsString]): use latin1 when the encoding is not
939 specified, and to reencode data chunk which were not correctly
940 decoded with the original charset.
942 * SoObjects/Appointments/SOGoAppointmentFolder.m ([SOGoAppointmentFolder -aclUsersForObjectAtPath:objectPathArray])
943 ([SOGoAppointmentFolder -aclsForUser:uidforObjectAtPath:objectPathArray])
944 ([SOGoAppointmentFolder -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray])
945 ([SOGoAppointmentFolder
946 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]):
947 override those methods to use the "personal" additional directory.
949 * SoObjects/SOGo/SOGoUserFolder.m ([-ocsPrivateCalendarPath]):
950 append "/personal" to the calendar path to simulate a single
951 calendar in a choice of many.
953 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
954 -lookupName:_keyinContext:acquire:_acquire]): moved the lookup
955 methods back here. Moved the folder existence check here, and do
956 it on self only when the lookup happens for a non-folder object.
957 This permits to accept entries for folders with parents who
960 2007-08-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
962 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
963 -shouldTakeValuesFromRequest:requestinContext:context]): same as
966 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
967 -shouldTakeValuesFromRequest:requestinContext:context]):
968 redesigned method since any method called can be received from a
969 POST or a GET. Instead we check the method call itself and we
970 accept only if it has the "save" prefix.
972 * SoObjects/Appointments/SOGoAptMailNotification.m
973 ([SOGoAptMailNotification -getSubject]): returns the subject an a
974 quoted-printable encoded string, if needed.
976 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
977 -asQPSubjectString:encoding]): moved method into
978 NSString+Utilities.m.
980 2007-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
982 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
983 -messageForwardingList])
984 ([UIxPreferences -itemMessageForwardingText])D
985 ([UIxPreferences -userMessageForwarding])
986 ([UIxPreferences -setUserMessageForwarding:newMessageForwarding]):
987 new template methods for manage the user preference regarding
990 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -language]): change the
991 algorithm to return, in order, the user's defined language or the
992 first browser language or, finally, the default language.
993 ([SOGoUser -messageForwarding]): new method that returns the user
994 preference for message forwarding: "inline" or "attached",
995 defaulting to "attached".
997 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
998 -contentForInlineForward]): new method that returns the content of
999 the message for inline forwarding based on the SOGoMailForward
1002 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1003 -fetchMailForForwarding:sourceMail]): check the user preference
1004 for message forwarding and compose inline forwarded messages if required.
1006 * SoObjects/Appointments/SOGoCalendarComponent.m
1007 ([SOGoCalendarComponent
1008 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
1009 now use a template based on the language returned from the
1012 * SoObjects/Mailer/SOGoMailEnglishForward.m: new module containing
1013 a subclass of SOGoMailForward for English locale.
1015 * SoObjects/Mailer/SOGoMailFrenchForward.m: new module containing
1016 a subclass of SOGoMailForward for French locale.
1018 * SoObjects/Mailer/SOGoMailForward.[hm]: new module class that
1019 helps build template for inline forwarded messages.
1021 2007-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1023 * UI/SOGoElements/SOGoIEConditional.m: new extension module class
1024 to handle "<var:if-ie>" template tags.
1026 * UI/SOGoElements: new extension bundle containing sogo-specific
1029 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1030 -takeValuesFromRequest:_rqinContext:_ctx]): save the category
1031 selected in the dialog.
1032 ([UIxComponentEditor -setComponent:newComponent]): retrieve the
1033 first category, if ever, of the calendar entity.
1035 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1036 -composeAction]): restored method since it is needed by the
1039 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1040 -composeAction]): the address fields should be arrays and not
1043 * UI/Common/UIxPageFrame.m ([UIxPageFrame -buildDate]): new method
1044 that returns the build date of SOGo in the template.
1046 2007-08-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1048 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1049 -_flattenedRecords:records]): when the c_cn field is empty,
1050 returns set a formatted string with the concatenation of
1051 c_givenname and c_sn as the displayName.
1053 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
1054 -isValidMailAccountName:_key]): prevent unknown accounts from
1057 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
1058 -pathToAttachmentObject]): we no longer need the filename
1059 extension for SoLookup...
1061 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
1062 -lookupName:_keyinContext:_ctxacquire:_flag]): do not require the
1063 filename to have an extension, and thus accept any filename.
1065 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1066 -currentCName]): new method that returns the c_name of the
1067 contact, correctly escaped to be passed by url afterwards.
1069 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
1070 ([UIxMailPartHTMLViewer -flatContentAsString]): pass the NSData
1071 instance of [self decodedFlatContent] instead of the buggy
1072 NSString from [super flatContentAsString] to the parser.
1074 2007-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1076 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -deleteAction]):
1077 new category method to reponds to the "delete" web command on
1079 ([UIxMailActions -deleteAttachmentAction]): new category method to
1080 reponds to the "deleteAttachment" web command on drafts, taking
1081 the "filename" url parameter into account.
1083 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
1084 -contentForEditing]): new method that retrieve the editable mail
1086 ([SOGoMailObject -fetchFileAttachmentKeys]): new method that
1087 returns the body keys for attached files (parts with a "filename"
1090 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
1091 -asQPSubjectString:encoding]): do not change the string if the
1092 encoded string has the same length (which means it is already
1094 ([SOGoDraftObject -fetchMailForEditing:sourceMail]): new method
1095 that retrieve a draft along with its attachments for editing.
1096 ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): no longer
1097 choke if the "to" header field is empty.
1098 ([SOGoDraftObject -delete]): new method to delete the draft folder
1099 whenever operations are done.
1101 2007-08-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1103 * UI/MailerUI/UIxMailEditor.m ([-patchFlagsInStore]): removed
1104 useless stub method, of which the intention was implemented in
1106 ([-lookupSentFolderUsingAccount]): removed obsolete method.
1107 ([-selectedMailIdentity]): removed obsolete method.
1108 ([-lookupSentFolderUsingFrom]): removed obsolete method.
1109 ([-storeMailInSentFolder:_path]): removed obsolete method, of
1110 which the mechanism has been put in -[SOGoDraftObject sendMail]
1112 ([UIxMailEditor -_saveFormInfo], [UIxMailEditor -defaultAction])
1113 ([UIxMailEditor -saveAction], [UIxMailEditor -sendAction]):
1114 adapted algorithms to the new SOGoDraftObject methods.
1115 ([-deleteAction]): removed method since local draft objects cannot
1116 be removed by the user.
1118 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1119 -expungeAction]): new method replacing the one previously found in
1121 ([UIxMailFolderActions -createFolderAction])
1122 ([UIxMailFolderActions -renameFolderAction])
1123 ([UIxMailFolderActions -deleteFolderAction])
1124 ([UIxMailFolderActions -emptyTrashAction])
1125 ([UIxMailFolderActions -subscribeAction])
1126 ([UIxMailFolderActions -unsubscribeAction]): error situations
1127 should have http return code 500 instead of 403.
1129 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1130 -composeAction]): new method replacing the one previously in
1133 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1134 -imap4URLString]): removed overriden method (see below).
1136 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -aclUsers]):
1137 cache the mailbox acl.
1138 ([SOGoMailFolder -aclsForUser:uid]): cache the mailbox acl.
1139 ([SOGoMailFolder -setRoles:rolesforUser:uid]): reset the mailbox
1141 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): modified to use
1142 the new method of determining the users mail accounts.
1144 * SoObjects/Mailer/SOGoMailBaseObject.m ([-imap4URLString]): no
1145 longer adds a "/" at the end of the string (the default for
1146 folders), therefore this will be overriden in SOGoMailFolder
1147 rather than in SOGoMailObject.
1149 * UI/MailerUI/UIxMailListView.m ([-expungeAction]): removed
1150 method, moved into the new UIxMailActions module class.
1152 * SoObjects/Mailer/SOGoDraftsFolder.m ([SOGoDraftsFolder
1153 -newDraft]): new method that returns a new SOGoDraftObject
1154 instance with a unique filename based on the current timestamp and
1155 the "newDraft" prefix.
1157 -lookupName:nameinContext:localContextacquire:acquire]): overriden
1158 method by detecting local drafts with their "newDraft" prefix.
1159 ([SOGoDraftsFolder -isInDraftsFolder]): returns YES.
1161 * SoObjects/Mailer/SOGoDraftsFolder.[hm]: rewrote class module
1162 from scratch by making it a subclass of SOGoMailFolder.
1164 * UI/MailerUI/UIxMailReplyAction.m: removed obsolete class
1167 * UI/MailerUI/UIxMailForwardAction.m: removed obsolete class
1170 * UI/MailerUI/UIxMailEditorAction.[hm]: removed obsolete class
1173 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -init]):
1174 new method, initializing the new ivars: IMAP4ID, headers, text,
1175 sourceURL and sourceFlag.
1176 ([-spoolFileManager], [SOGoDraftObject -userSpoolFolderPath])
1177 ([-_ensureUserSpoolFolderPath])
1178 ([-saveMimeMessageToTemporaryFileWithHeaders:])
1179 ([SOGoDraftObject -mimeMessageWithHeaders:_headers])
1180 ([-deleteTemporaryMessageFile:], [-delete], [-content])
1181 ([-GETAction:_ctx], [-DELETEAction:_ctx], [-fetchParts:])
1182 ([-uid], [-flags], [-size], [-envelope]): removed methods.
1183 ([SOGoDraftObject -storeInfo]): rewrote method to take the new
1185 ([SOGoDraftObject -setSourceURL:newSourceURL])
1186 ([SOGoDraftObject -setSourceFlag:newSourceFlag]): new accessor
1187 methods to store the url of the original message between accesses
1188 so that, depending on the action taken (forward or reply), the
1189 correct flag can be given.
1190 ([SOGoDraftObject -setIMAP4ID:]): new accessor method that sets
1191 the imap4 id that is returned for the message whenever it is saved
1192 into the drafts folder.
1193 ([SOGoDraftObject -save]): new method that takes in charge the
1194 saving of the message in the IMAP drafts folder.
1195 ([SOGoDraftObject -fetchMailForReplying:sourceMailtoAll:toAll]):
1196 new method that fills the original data of the new message with
1197 the reply content of the original message.
1198 ([SOGoDraftObject -fetchMailForForwarding:sourceMail]): same as
1199 above for message forwarding.
1200 ([-spoolFileManager]): removed useless method (only returned the
1201 default filemanager...)
1202 ([SOGoDraftObject -mimeMessageAsData]): new method that returns
1203 the resulting message as an NSData chunk.
1205 * SoObjects/Mailer/SOGoMailObject+Draft.m: new extension module
1206 containing a rewrite of the mail action methods found in
1207 UI/Mailer/, that needed to be put in the SOGoMailObject class.
1208 ([SOGoMailObject -subjectForReply]): new method that returns a
1209 subject suitable for replies.
1210 ([SOGoMailObject -contentForReply]): new method that returns the
1211 textual content of an email, quoted for replying.
1212 ([SOGoMailObject -filenameForForward]): new method that returns
1213 the name of the filename that should contain the forwarded
1214 message, based on its subject.
1215 ([SOGoMailObject -subjectForForward]): explicit.
1217 2007-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1219 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1220 -mailAccounts]): rewrote method to return the name of the mail
1221 accounts now available with the -[SOGoUser mailAccounts] method.
1222 ([UIxMailMainFrame -showLinkBanner]): removed method.
1223 ([UIxMailMainFrame -bannerToolbarStyle]): removed method.
1224 ([UIxMailMainFrame -bannerConsumeStyle]): removed method.
1225 ([UIxMailMainFrame -rootURL]): removed method.
1226 ([UIxMailMainFrame -userRootURL]): removed method.
1227 ([UIxMailMainFrame -calendarRootURL]): removed method.
1228 ([UIxMailMainFrame -contactsRootURL]): removed method.
1229 ([UIxMailMainFrame -hasErrorText])
1230 ([UIxMailMainFrame -errorText])
1231 ([UIxMailMainFrame -errorAlertJavaScript]): removed methods.
1232 ([-composeAction]): removed method. Now provided by
1233 UIxMailAccountActions.
1234 ([UIxMailMainFrame -setHideFolderTree:_flag]): removed method.
1235 ([UIxMailMainFrame -hideFolderTree]): removed method.
1236 ([UIxMailMainFrame -treeRootClassName]): removed method.
1237 ([UIxMailMainFrame +initialize]): removed method.
1238 SOGoMailTreeRootClass userdefaults will no longer have any effect.
1240 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
1241 -redirectToLocation:newLocation]): new method that implements the
1242 same functionality as WOComponent.
1244 * UI/Common/WODirectAction+SOGo.[hm]: new class extension module.
1246 * UI/MailerUI/UIxMailView.m ([UIxMailView -mailIsDraft]): new
1247 method that returns whether the current mail is store in the
1248 drafts folder hierarchy.
1250 * SoObjects/SOGo/SOGoUser.m ([-fullEmail]): removed method.
1251 ([-primaryEmail]): removed method.
1252 ([SOGoUser -primaryIMAP4AccountString]): removed method.
1253 ([SOGoUser -mailAccounts]): new method that returns an array
1254 containing description dictionaries for all the user mail
1255 accounts. Each account also contain the user's identities for that
1257 ([SOGoUser -allIdentities]): new utility method that returns all
1258 the user identities on all accounts.
1259 ([SOGoUser -primaryIdentity]): new method return the first
1260 identity of the first account.
1262 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]):
1264 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1265 -isInDraftsFolder]): returns NO.
1266 ([-preferredIdentity]): removed method, replaced with -[SOGoUser
1268 ([SOGoMailAccount -draftsFolderInContext:_ctx]): new method.
1270 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1271 -isInDraftsFolder]): new method that detects if self is contained
1272 by the drafts folder by calling itself on the container object.
1274 * SoObjects/Mailer/SOGoMailAccounts.m ([-fetchAllIdentities]):
1276 ([-fetchIdentitiesWithEmitterPermissions]): removed method.
1277 ([SOGoMailAccounts -toManyRelationshipKeys]): rewrote method to
1278 return the name of the mail accounts now available with the
1279 -[SOGoUser mailAccounts] method.
1281 * SoObjects/Mailer/SOGoUser+Mail.[hm]: removed useless class
1284 * SoObjects/Mailer/SOGoMailIdentity.[hm]: removed useless class
1287 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
1288 -keysWithFormat:format]): method that forward the method of the
1289 same name to each member of the array, considering they all are
1290 instances of NSDictionary.
1291 ([NSArray -objectsForKey:key]): same principle as above.
1292 ([NSArray -flattenedArray]): new method that transforms an array
1293 of arrays into a single array containing all the elements of the
1296 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
1297 -keysWithFormat:keyFormat]): new method inspired by the python
1298 string formatting system and which replaces occurences of "%{key}"
1299 by the corresponding keys.
1301 2007-08-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1303 * Main/SOGo.m ([SOGo -run]): check for channel-type specific
1304 sql script before the generic one when initializing mandatory
1307 2007-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1309 * SoObjects/SOGo/NSString+Utilities.m ([NSString
1310 -pureEMailAddress]): new utility method inspired by the
1311 "_rawSender" private method in SOGoDraftObject, which it now
1314 * SoObjects/SOGo/SOGoMailer.m: new abstraction class module that
1315 provides a common API for sending emails, no matter what the
1318 2007-08-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1320 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1321 -quotasAction]): invoke "relativeImap4Name" instead of
1322 "nameInContainer" since the latter also returns the "folder"
1325 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1326 -listMailboxesAction]): declare the output as text/plain in UTF-8.
1328 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1329 -deleteFolderAction]): fixed the url of the destination folder.
1331 * Main/SOGo.m ([SOGo +initialize]): show the build date and
1332 hostname at startup.
1334 2007-08-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1336 * SoObjects/Appointments/SOGoCalendarComponent.m
1337 ([SOGoCalendarComponent
1338 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
1339 set the mail date to the current date string returned by our
1340 rfc822DateString extension method.
1342 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1343 -_gcsFoldersFromFolder:): ignore the personal folders who are
1344 returned but don't really exist.
1346 2007-08-02 Francis Lachapelle <flachapelle@inverse.ca>
1348 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView _responseForResults:]):
1349 has to return only one element.
1351 2007-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1353 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
1354 -content]): new method returning the decoded content of the
1355 corresponding attachment as an NSData instance.
1356 ([UIxMailPartViewer -filename]): if the "filename" parameter of
1357 the metadata parameterList is empty, try to find out the filename
1358 from the "disposition" metadata returned with the BODYSTRUCTURE
1361 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1362 -composeAction]): prefix the INBOX folder with "folder".
1364 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailBaseObject
1365 -relativeImap4Name]): return nameInContainer stripped from its
1366 first 6 characters since all folder names are prefixed with
1369 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1370 -imap4URLString]): invoke -relativeImap4Name instead of
1371 "nameInContainer" since the former will return the fixed IMAP4
1372 foldername and the latter the SoObject name.
1374 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1375 +initialize]): we now fetch the "BODYSTRUCTURE" key instead of "BODY".
1377 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderNameInContext:])
1378 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
1379 ([SOGoMailAccount -sieveFolderNameInContext:_ctx])
1380 ([SOGoMailAccount -sentFolderNameInContext:])
1381 ([SOGoMailAccount -trashFolderNameInContext:]): prefix the folder
1382 names with "folder".
1383 ([SOGoMailAccount -inboxFolderInContext:_ctx])
1384 ([SOGoMailAccount -sentFolderInContext:_ctx])
1385 ([SOGoMailAccount -trashFolderInContext:_ctx]): no longer prefix
1386 the folder names with "folder" since they are prefixed earlier.
1388 2007-07-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1390 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
1391 ([-sentFolderInContext:], [-trashFolderInContext:]): folder keys
1392 all starts with "folder".
1394 * SoObjects/SOGo/SOGoObject.m ([SOGoObject +initialize]): no
1395 longer declare security info from here.
1397 * SoObjects/Mailer/SOGoMailFolder.m
1398 ([-isMessageKey:_keyinContext:_ctx]): removed useless method.
1399 ([SOGoMailFolder -lookupName:_keyinContext:acquire:_acquire]):
1400 folder names now always start with "folder".
1402 * SoObjects/Mailer/SOGoMailAccount.m
1403 ([-lookupName:inContext:acquire:]): folder names now always start
1406 2007-07-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1408 * UI/MailerUI/UIxMailForwardAction.m ([UIxMailForwardAction
1409 -forwardAction]): adapted to the new saveAttachment:withMetadata:
1412 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -saveAction]): added
1413 code to save the attached filenames with the filename returned by
1414 the web server as well as their mime types.
1416 * UI/MailPartViewers/UIxMailPartMessageViewer.m ([UIxMailPartMessageViewer -fromAddresses])
1417 ([UIxMailPartMessageViewer -toAddresses])
1418 ([UIxMailPartMessageViewer -ccAddresses]): new methods returning
1419 the corresponding fields separated with a ", " (if needed).
1421 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1422 -saveAttachment:_attachwithMetadata:metadata]): new method
1423 replacing -saveAttachment:withName: and which takes a dictionary
1424 as parameter with the filename and the mime type of the
1426 The mimetype is then saved in a hidden text file.
1427 ([SOGoDraftObject -contentTypeForAttachmentWithName:]): if exists,
1428 take the mime type from the hidden text file related to the
1431 * SoObjects/Contacts/SOGoContactGCSFolder.m ()
1432 ([SOGoContactGCSFolder
1433 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
1434 return records if the db records are > 0 and not just > 1...
1436 2007-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1438 * UI/Contacts/UIxContactsListView.m ([-displayName]): removed
1440 ([UIxContactsListView -defaultSortKey]): changed to "displayName".
1442 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1443 ([SOGoContactLDAPFolder
1444 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
1445 translate the returned records to a normalized form.
1447 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1448 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
1449 translate the returned records to a normalized form.
1451 * UI/Scheduler/UIxCalListingActions.m,
1452 UI/Contacts/UIxContactsListView.m, SoObjects/SOGo/SOGoUser.m,
1453 SoObjects/SOGo/AgenorUserDefaults.m,
1454 SoObjects/Contacts/SOGoContactGCSFolder.m,
1455 SoObjects/Appointments/SOGoAppointmentFolder.m,
1456 OGoContentStore/OCSiCalFieldExtractor.m,
1457 OGoContentStore/OCSContactFieldExtractor.m: prefixed all quick
1458 table fields with "c_".
1460 2007-07-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1462 * SoObjects/SOGo/LDAPSource.m ([LDAPSource +initialize]): query
1463 the values for SOGoLDAPQueryLimit and SOGoLDAPQueryTimeout from
1464 the application settings. If set, both limit will influence the
1465 maximum size of the resultsets and the time taken to solve them.
1466 ([LDAPSource -_initLDAPConnection]): initialize the limits.
1468 2007-07-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1470 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder -davNamespaces]): added new overriden
1471 method that declares the DAV namespace related to CardDAV.
1472 ([SOGoContactGCSFolder -davComplianceClassesInContext:]): new
1473 method that declares the "access-control" and "addressbook-access"
1474 classes to the list.
1476 * SoObjects/Appointments/SOGoAppointmentFolder.m
1477 ([-lookupActionForCalDAVMethod:]): removed method.
1478 ([SOGoAppointmentFolder -davNamespaces]): added new overriden
1479 method that declares the DAV namespace related to CalDAV.
1481 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davNamespaces]): new
1482 optional method for subclasses which handle specific extensions to
1483 the DAV protocol: CardDAV or CalDAV.
1485 -lookupName:lookupNameinContext:localContextacquire:acquire]):
1486 new overriden method that handles dav invocations for extensions
1487 to DAV by returning an appropriate SoSelectorInvocation.
1489 * SoObjects/SOGo/NSString+Utilities.m ([NSString
1490 -asDavInvocation]): new method returning a dictionary with a "ns"
1491 key representing the dav namespace and a "method" key representing
1492 the dav method name of the request.
1494 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
1495 +initialize]): scan the value of SOGoUIxUserCanChangePassword.
1497 ([UIxPreferences -shouldDisplayPasswordChange]): new template
1498 method that returns the value of SOGoUIxUserCanChangePassword.
1500 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
1501 scan the value of SOGoUIxDefaultModule. If not set, the default
1502 module defaults to "Calendar".
1503 ([SOGoUserHomePage -defaultAction]): redirect the user to the
1504 value of "SOGoUIxDefaultModule".
1506 2007-07-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1508 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1509 -contactInfos]): cache the results to avoid multiple invocations.
1511 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1512 ([SOGoContactLDAPFolder -toOneRelationshipKeys]): check whether we
1513 really should return something or if we fake to return nil...
1515 2007-07-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1517 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): set
1518 acceptAnyUser to YES only when the SOGoAuthentificationMethod user
1519 default is set to "bypass".
1521 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
1522 -checkLogin:_loginpassword:_pwd]): accepts unverified connections
1523 when authMethod is set to "bypass" from now on. This would avoid a
1524 security concern with a default installation of SOGo.
1525 AuthentificationMethod is now prefixed with "SOGo" for better
1528 2007-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1530 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1531 -quotasAction]): new method that returns a json representation of
1534 2007-07-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1536 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1537 -imap4URL]): rewrote method to support accented mailbox names.
1538 ([SOGoMailBaseObject imap4Password]): rewrote to simply use
1539 SOGoAuthenticator's passwordInContext:.
1541 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
1542 -takeValuesFromRequest:_rqinContext:_ctx]): explicitly set the
1543 start and due dates to nil if hasStartDate and hasDueDate are
1546 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
1547 -passwordInContext:context]): made method public.
1549 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
1550 -extractQuickFieldsFromTodo:_task]): set "isallday" and "isopaque"
1551 to false to avoid a null violation.
1553 2007-07-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1555 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1556 -contentAsString]): returns the message encoded in ISO Latin 1
1559 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): read the
1560 SOGoSuperUsername user defaults.
1561 ([SOGoUser -initWithLogin:newLoginroles:newRoles]): simplified
1563 ([SOGoUser -rolesForObject:objectinContext:context]): if the
1564 current user is the superuser, grant him/her the "owner" role.
1566 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
1567 the folder only if the current user is the owner of the future
1570 * SoObjects/Appointments/SOGoCalendarComponent.m
1571 ([SOGoCalendarComponent -contentAsString]): we return the content
1572 based on the permissions returned by the security manager instead
1573 of by looking at the user roles.
1575 * SoObjects/Appointments/SOGoAppointmentFolder.m
1576 ([SOGoAppointmentFolder -calendarFolders]): read the calendar
1577 folders of the user to whom this folder belongs instead of the
1578 active user. This way, a delegate user will be able to have the
1579 same view that the original user has if he connects from his user
1582 * Main/SOGo.m ([SOGo -lookupUser:_keyinContext:]): check if the
1583 user exists before creating the SOGoUserFolder instance. If not,
1586 * UI/MailerUI/UIxMailSourceView.[hm]: new class module designed to
1587 return the message source code in plain text.
1589 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1590 -contentAsString]): returns the message encoded in UTF8.
1592 2007-07-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1594 * OGoContentStore/iCalRepeatableEntityObject+OCS.m
1595 ([iCalRepeatableEntityObject -cycleInfo]): no longer take the
1596 leading tagname into account when serializing the element values.
1598 * Main/SOGoProductLoader.m: only load bundle directories ending
1599 with the "SOGo" extension.
1601 * Main/SOGo.m ([SOGo
1602 -_checkTableWithCM:cmtableURL:urlandType:tableType]): empty the
1603 result set if the query has caused no exception. Otherwise we get
1604 an "evaluation is in progress exception".
1606 2007-06-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1608 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
1609 -generateSQLForInsert]): initialize error to nil before the
1610 serialization. Otherwise the method can get confused if it ever is
1611 initialized to something else.
1613 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
1614 -folderIsMandatory]): returns NO unconditionnally.
1616 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
1617 -appendPersonalSources]): add the "personal" folder to the list of
1618 user folders even if it doesn't exist, so that it is created when
1619 the user accesses it.
1621 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1622 -folderIsMandatory]): returns YES if nameInContainer is set to
1623 "personal", which is the default address book.
1625 * SoObjects/Appointments/SOGoAppointmentFolder.m
1626 ([SOGoAppointmentFolder -folderIsMandatory]): returns YES since
1627 users must have one Calendar folder (one and only one).
1628 ([SOGoAppointmentFolder -_privacySqlString]): unescape the
1629 escaping '\' so make the carriage return a real one. This way,
1630 PgSQL 8 won't complain about escaping the string.
1632 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): new
1633 method that create the folder if considered mandatory.
1634 ([SOGoFolder -folderIsMandatory]): new method that determines
1635 whether the folder should be created automatically or not. To be
1636 overriden by subclasses.
1638 * Main/SOGo.m ([SOGo -run]): override method and create the
1639 missing system tables if needed.
1641 2007-06-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1643 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
1644 -mailDateFormatter]): returns the user's date formatter.
1646 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject -date]):
1647 applies the user timezone to the date object before returning it.
1649 * UI/Common/UIxSortButton.m: removed useless class module.
1651 * UI/Common/UIxSortableTableHeader.m: removed useless class
1654 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1655 -contactInfos]): use the "asc" url parameter instead of "desc" to
1656 determine the ordering.
1657 ([-sortOrdering]): removed method.
1658 ([UIxContactsListView -init]): removed the "searchText" ivar.
1659 (general): the template no longer use the UIxSortableTableHeader
1662 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1663 -defaultSortKey]): default sort following the messages arrival
1664 instead of their date.
1665 ([-isSortedDescending]): removed method.
1666 ([-imap4SortOrdering]): use the "asc" url parameter instead of
1667 "desc" to determine the ordering.
1668 (general): the template no longer use the UIxSortableTableHeader
1671 2007-06-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1673 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sleep]):
1675 ([-setQualifier:_msg], [-qualifier]): removed methods.
1676 ([UIxMailListView -defaultAction]): added code to handle the
1677 search criteria and value passed as url parameters. Also, we now
1678 handle the same search criterias as Thunderbird/Icedove.
1680 2007-06-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1682 * UI/PreferencesUI/UIxJSONPreferences.m ([UIxJSONPreferences
1683 -jsonDefaultsAction]): bug fix: returns a WOResponse instance with
1684 the string instead of the string itself.
1685 ([UIxJSONPreferences -jsonSettingsAction]): same as above.
1687 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): new module
1688 bool var "acceptAnyUser" that is set when the AuthenticationMethod
1689 user default is nil.
1690 ([SOGoUser -initWithLogin:newLoginroles:newRoles]):
1691 unconditionnally returns an instance whenever acceptAnyUser is set.
1693 2007-06-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1695 * Main/sogod.m (main): prevent SOGo from running as root.
1697 2007-06-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1699 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
1700 -setCurrentPassword:newPassword]): new stub method.
1701 ([SOGoUser -dateFormatterInContext:context]): new method that
1702 returns an instance of SOGoDateFormatter configured based on the
1705 * UI/Common/UIxPageFrame.m ([UIxPageFrame
1706 -relativePreferencesPath]): new method.
1708 * UI/Scheduler/UIxComponentEditor.m ([-titleDateFormatter]):
1709 removed useless method.
1711 * SoObjects/SOGo/SOGoDateFormatter.m: rewrote class to accept
1712 different configurable formats (long and short date + time).
1714 * SoObjects/SOGo/SOGoDateFormatter.[hm]: moved from UI/SOGoUI/.
1716 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
1717 -isInternetRequest]): removed method.
1719 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
1720 -jsonRepresentation]): new method with an explicit name.
1722 * UI/PreferencesUI/product.plist: new bundle that provides a web
1723 ui for handling user defaults.
1725 * UI/Scheduler/UIxTaskView.[hm]: removed unused module.
1727 * UI/Scheduler/UIxAppointmentView.[hm]: removed unused module.
1729 * SoObjects/SOGo/WOContext+Agenor.[hm]: removed unused module.
1731 2007-06-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1733 * SoObjects/SOGo/SOGoLRUCache.m: removed unused module.
1735 2007-06-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1737 * UI/Scheduler/NSArray+Scheduler.m ([NSArray
1738 -compareEventsAscending:otherEvent]): no longer use compare: on
1739 the time objects since one of them could be an NSNull, which
1740 crashes when comparing with anything.
1742 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1743 -eventsListAction]): sort events from here.
1744 ([UIxCalListingActions -tasksListAction]): sort tasks from here.
1746 * SoObjects/SOGo/NSObject+AptComparison.[hm]: removed category
1747 module, replaced with NSArray+Scheduler in UI/SchedulerUI/.
1749 * SoObjects/Appointments/SOGoAppointmentFolder.m
1750 ([SOGoAppointmentFolder
1751 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]):
1752 no longer sort elements from here.
1754 2007-06-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1756 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1757 -aclsForUser:uid]): implemented method by forwarding the request
1758 to the container. This fixes a bug where users could no longer
1759 read emails from shared folders.
1761 * SoObjects/Appointments/SOGoCalendarComponent.m
1762 ([SOGoCalendarComponent -init]): "isNew" is no longer defined
1763 here, but rather in its parent class.
1765 * UI/SOGoUI/SOGoDateFormatter.m ([SOGoDateFormatter
1766 -stringForSecondsSinceThe70s:seconds]): new utility method.
1768 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1769 -eventsListAction]): no longer reduce the end day of one day for
1770 all day events since everything has been fixed in
1771 OCSiCalFieldExtractor.
1773 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
1774 -extractQuickFieldsFromEvent:_event]): reduce the seconds/70 of
1775 the end date of all day events of 1 so that they stay on their
1778 2007-06-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1780 * UI/Scheduler/UIxCalMonthView.m: no longer retrieve appointments.
1782 * UI/Scheduler/UIxCalView.m ([-fetchCoreAppointmentsInfos]):
1784 ([-fetchCoreTasksInfos]): removed method.
1786 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1787 -init]): initialize an instance of SOGoDateFormatter.
1788 ([UIxCalListingActions -eventsListAction]): the display start and
1789 end dates are added to the listing for each event.
1791 * UI/Scheduler/UIxCalDayTable.m: no longer retrieve appointments.
1793 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1794 -isAllDay]): returns YES if the "hm" url parameter is set to
1796 ([UIxAppointmentEditor -defaultAction]): if isAllDay, the enddate
1797 is displayed one day earlier.
1799 2007-06-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1801 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1802 -_setupContext]): take the range of dates specified by the popup
1805 * UI/Scheduler/UIxCalListingActions.[hm]: new subclass of
1806 WODirectAction that returns WOResponse objects with the events or
1807 todos satisfying the parameters passed in the url.
1809 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1810 -takeValuesFromRequest:_rqinContext:_ctx]): take the new ivar
1811 "isAllDay" into account and compute the amount of days to pass to
1814 2007-06-06 Francis Lachapelle <flachapelle@inverse.ca>
1816 * SoObjects/SOGo/NSNumber+Utilities.m: initial import.
1817 * SoObjects/SOGo/NSNull+Utilities.m: initial import.
1818 * UI/Scheduler/UIxCalTasksListView.m ([WOResponse -tasksListAction]):
1819 new method that returns a json-formatted array of the visible tasks
1820 for the current user.
1822 2007-06-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1824 * SoObjects/Appointments/SOGoAppointmentObject.m: the owner of the
1825 object must be present in the list of UIDs we delete the object
1826 from. Otherwise Calendar objects having no organizer and no
1827 attendees will remain in their owner's Calendar.
1829 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1830 -_urlPreferringParticle:expectedoverThisOne:possible]): remove the
1831 first 3 elements of the path array if the url returned by
1832 baseURLInContext: returns a hostname.
1834 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1835 -_adjustOwner]): sharedFolderName and otherUsersFolderName may be
1836 nil, in which case a crash happens when calling hasPrefix:.
1837 ([SOGoMailFolder -_sharesACLs]): same as above.
1838 ([SOGoMailFolder -otherUsersPathToFolder]): same as above. If
1839 otherUsersFolderName is nil, we return nil.
1840 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): if we receive
1841 nil from [self otherUsersPathToFolder], we return nil too.
1843 2007-06-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1845 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1846 -_urlPreferringParticle:expectedoverThisOne:possible]): unescape
1847 the result of [self baseURLInContext:] to avoid a double escaping
1848 in the resulting string.
1850 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -aclsForUser:uid]): if
1851 the user has the "ObjectReader" role on the parent container, then
1852 he is granted the "ObjectViewer" role on this object. Same for
1853 "ObjectEraser", although this might change later.
1855 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1856 -toolbar]): determine the toolbar filename based on the
1857 permissions declared by the securitymanager. The role mechanism
1858 has been adjusted on a lowerlevel so we can simplify the code.
1860 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
1861 -initWithName:newNameinContainer:newContainer]): read the content
1862 directly from here. That way we can determine whether the object
1864 ([SOGoContentObject -aclsForUser:uid]): if the object is new and
1865 the ObjectCreator role is enabled, we also grant the ObjectEditor
1866 role to the current user.
1868 * UI/Common/UIxFolderActions.m ([-canAccessContentAction]):
1869 changed the method paradigm to only return HTTP code 204. Not test
1870 is done whatsoever since the security manager does it for us.
1872 * UI/Contacts/UIxContactsListView.m ([-canAccessContentAction]):
1873 removed method because the same exists in UIxFolderActions.m
1875 * UI/Contacts/UIxContactsUserRightsEditor.m
1876 ([UIxContactsUserRightsEditor
1877 -setUserCanReadObjects:userCanReadObjects]): new method.
1879 * SoObjects/SOGo/SOGoPermissions.m: added roles "FolderViewer" and
1880 "FolderEraser" and special permission "Access Object". Removed
1881 role "SOGoMailRole_MessageEraser" since "SOGoRole_ObjectEraser"
1882 can be used instead. Removed "FolderReader" since it is useless.
1884 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
1885 -vCard]): directly use the "content" ivar since it is initialized
1886 during object creation.
1888 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1889 ([SOGoContactLDAPFolder -init]): no longer handle the
1890 nameInContainer no the container ivars. They were removed because
1891 this class is a descendant of SOGoObject which already has them.
1892 ([SOGoContactLDAPFolder -davDisplayName]): new overriden method
1893 returning "displayName".
1894 ([SOGoContactLDAPFolder -isFolderish]): new overriden method
1897 * SoObjects/Appointments/SOGoCalendarComponent.m
1898 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): commented out.
1899 ([SOGoCalendarComponent -findParticipant:user]): new name for
1900 method "participant:".
1901 ([SOGoCalendarComponent -findParticipantWithUID:uid]): same as
1902 findparticipant but taking a uid string as parameter.
1903 ([SOGoCalendarComponent -contentAsString]): don't regenerate the
1904 iCalendar automatically. Instead, this is done only when the user
1905 is a "date and time viewer".
1906 ([SOGoCalendarComponent -aclsForUser:uid]): take delegation roles
1907 (modifier and responder) into account by compiling them with the
1910 * SoObjects/Contacts/SOGoContactFolder.h: removed
1911 "nameInContainer" from the list of required methods.
1913 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
1914 -davContentType]): returns "text/calendar".
1916 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1917 ([SOGoContactLDAPFolder -davResourceType]): declare the correct
1918 groupdav resource-type.
1920 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
1921 -davContentType]): same as below.
1923 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1924 -initWithName:newNameinContainer:newContainer]): new overriden
1925 method setting the custom owner directly.
1927 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
1928 -davContentType]): same as below.
1930 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1931 -davContentType]): same as below.
1933 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davContentType]):
1934 declare "httpd/unix-directory".
1936 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): declare
1937 "UTC" as fallback timezone instead of "Canada/Eastern".
1938 ([-hasEmail:email]): make use of the new NSArray's
1939 containsCaseInsensitiveString: method.
1941 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1942 -davContentType]): declare "message/rfc822" as content type.
1944 * SoObjects/Appointments/SOGoAppointmentFolder.m
1945 ([SOGoAppointmentFolder -_privacySqlString]): "owner" is now an
1947 ([SOGoAppointmentFolder
1948 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): same as above.
1949 ([-fetchContentObjectNames]): commented out method since it was
1950 usefull only for testing Funambol.
1952 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
1953 -containsCaseInsensitiveString:match]): an enhanced version of
1956 * UI/MailerUI/UIxMailView.m ([-isTrashingAllowed]): removed
1958 ([-showMarkDeletedButton]): removed useless method.
1959 ([-showTrashButton]): removed useless method.
1961 * SoObjects/Appointments/iCalEntityObject+SOGo.m
1962 ([iCalEntityObject -userIsParticipant:user]): new proxy method
1963 that invoked isParticipant on self for each possible email
1964 addresses of the user passed as parameter.
1965 ([iCalEntityObject -userIsOrganizer:user]): same as above.
1967 * SoObjects/Appointments/iCalEntityObject+SOGo.[hm]: new class
1970 * SoObjects/Appointments/SOGoAppointmentObject.m
1971 ([SOGoAppointmentObject
1972 -saveContentString:contentStringbaseVersion:baseVersion]): remove
1973 method since an event may not have an organizer.
1975 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1976 -GETAction:localContext]): clarified method. Added support for
1977 content-type (thanks to Helge Hess).
1978 ([SOGoObject -initWithName:_nameinContainer:_container]):
1979 initialize and retain the owner.
1980 ([SOGoObject -davContentType]): returns "text/plain".
1982 2007-05-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1984 * UI/Common/UIxObjectActions.m ([UIxObjectActions
1985 -addUserInAclsAction]): send an acl addition mail.
1986 ([UIxObjectActions -removeUserFromAclsAction]): send an acl
1989 * UI/Common/UIxFolderActions.m ([UIxFolderActions
1990 -_realActionWithFolderName:folderDict]): handle the possible
1991 presence of the "mail-invitation" url parameter. If present, the
1992 user will be redirected to the relevant folder.
1994 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -fullEmail]): new proxy method.
1995 ([SOGoUser -language]): new method that returns the user's
1996 preferred language, or the system's if none has been set yet.
1998 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -davURL]): new method
1999 that returns the full dav url to self.
2000 ([SOGoObject -soURL]): same as above but for the so url (Web UI).
2001 ([SOGoObject -soURLToBaseContainerForUser:uid]): new method that
2002 returns the full so url to the base of the SOGo module to which
2003 self belongs, and for the specified user.
2004 ([SOGoObject -soURLToBaseContainerForCurrentUser]): same as above
2005 but for the current user.
2006 ([SOGoObject -httpURLForAdvisoryToUser:uid]): new protocol method
2007 required by the acl advisory templates and which returns a link
2008 the target user can click to activate its new subscription.
2009 ([SOGoObject -resourceURLForAdvisoryToUser:uid]): same as above
2010 but for inclusion of the application/x-sogo-notification part,
2011 which will be handled by the Lightning enhancer plugin.
2013 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -subscribeAction])
2014 ([UIxMailFolderActions -unsubscribeAction]): new stub methods that
2015 do nothing yet since imap folder subscription is not handled yet.
2017 * SoObjects/SOGo/SOGoContentObject.m
2018 ([-hasSupportForDefaultRoles]): removed method.
2020 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
2021 -getFullEmailForUID:uid]): new method that returns the username +
2024 * SoObjects/Appointments/SOGoCalendarComponent.m
2025 ([SOGoCalendarComponent +initialize]): the default language for
2026 mail templates is now set to English.
2028 * UI/SOGoUI/SOGoACLFrenchRemovalAdvisory.[hm]: new subclass of
2029 SOGoACLAdvisory implementing the french template for user removal
2032 * UI/SOGoUI/SOGoACLFrenchAdditionAdvisory.[hm]: new subclass of
2033 SOGoACLAdvisory implementing the french template for user
2036 * UI/SOGoUI/SOGoACLEnglishRemovalAdvisory.[hm]: new subclass of
2037 SOGoACLAdvisory implementing the english template for user removal
2040 * UI/SOGoUI/SOGoACLEnglishAdditionAdvisory.[hm]: new subclass of
2041 SOGoACLAdvisory implementing the english template for user
2044 * UI/SOGoUI/SOGoACLAdvisory.[hm]: new class module implemented the
2045 supercall of all the acl advistory templates. The model is based
2046 on SOGoAptMailNotification except that the template encapsulates
2047 the message to be sent. Later, we might create a superclass common
2048 to all template-based emails.
2050 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
2051 -addRange:newRange]): new method that store a string
2052 representation of the NSRange passed as parameter.
2053 ([NSMutableArray -hasRangeIntersection:testRange]): tests whether
2054 any range contained in self intersect with the one passed as parameter.
2056 * SoObjects/SOGo/NSString+Utilities.m ([-stringByDetectingURLs]):
2057 store ranges in an array to prevent them from intersecting with
2058 each other during the passes.
2060 2007-05-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2062 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2063 -primaryFetchMailboxInfo]): useless method. Removed.
2065 2007-05-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2067 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2068 -toManyRelationshipKeys]): invoke [self subfolders].
2069 ([SOGoMailFolder -subfolders]): new method containing what used to
2070 be in toManyRelationshipKeys.
2071 ([SOGoMailFolder -subfoldersURL]): same as above but returns imap
2074 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2075 -allFolderPaths]): renamed version of "allFolderPathes", sorted by
2076 named and at the beginning of which we put the predefined folders.
2078 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2079 -emptyTrashAction]): new method inspired by a similar one from
2080 UIxMailListView, to which we added the ability to remove
2083 * UI/MailerUI/UIxMailListView.m ([-emptyTrashAction]): removed
2084 method. Replaced with a similar one in UIxMailFolderActions.
2086 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2087 -renameFolderAction]): implemented method.
2088 ([UIxMailFolderActions -deleteFolderAction]): no longer delete the
2089 specified folder. Instead, we put it in the trash folder.
2091 * UI/MailerUI/UIxMailListView.m ([-createFolderAction]): removed
2092 method, replaced with a similar method in the new
2093 UIxMailFolderAction class module.
2094 ([-deleteFolderAction]): idem.
2096 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2097 -createFolderAction]): new method implementing subfolder creation.
2098 ([UIxMailFolderActions -renameFolderAction]): new method
2099 implementing subfolder renaming (basic implementation to be
2101 ([UIxMailFolderActions -deleteFolderAction]): new method
2102 implementing folder deletion.
2104 * UI/MailerUI/UIxMailFolderActions.[hm]: new module implementing
2105 web actions related to the handling of imap folder.
2107 2007-05-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2109 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2110 -ownerInContext:localContext]): overriden method because we are an
2111 IMAP4 client and we need a bit more intelligence to deduce the
2112 owner of the current folder.
2113 ([SOGoMailFolder -aclsForUser:uid]): aclForMailboxAtURL might
2114 return an NSException so we need to be careful here to avoid a
2116 ([SOGoMailFolder -aclUsers]): aclForMailboxAtURL might return an
2117 NSException so we need to be careful here to avoid a crash.
2119 * SoObjects/Mailer/SOGoMailAccounts.m
2120 ([SOGoMailAccounts -fetchIdentitiesWithOnlyEmitterAccess:_flag])
2121 there is no longer any concept of Intranet or Internet connection
2124 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2125 -sharedFolderName]): new method.
2126 ([SOGoMailAccount -otherUsersFolderName]): new method.
2128 * UI/MailerUI/UIxMailFolderMenu.[hm]: removed module, obsoleted by
2129 new javascript code and the new UIxMailAccountActions class.
2131 * UI/MailerUI/UIxMailTree.[hm]: removed module, obsoleted by new
2132 javascript code and the new UIxMailAccountActions class.
2134 * UI/MailerUI/UIxMailTreeBlock.[hm]: removed module, obsoleted by
2135 new javascript code and the new UIxMailAccountActions class.
2137 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
2138 -listMailboxesAction]): new method that returns a json-formatted
2139 tree of all the mailboxes available to the current user.
2141 * UI/MailerUI/UIxMailAccountActions.[hm]: new module implementing
2142 web actions related to the handling of mail accounts.
2144 * SoObjects/SOGo/NSDictionary+Utilities.[hm]: new extension
2147 * SoObjects/SOGo/NSObject+Utilities.m ([NSObject
2148 -jsonRepresentation]): new interface method meant to be overriden
2149 by the primitive classes.
2151 2007-05-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2153 * UI/MailerUI/UIxMailSplashView.m: removed.
2155 * SoObjects/Appointments/SOGoCalendarComponent.m
2156 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]): add
2157 the uid to the list only when the user email is recognized by the
2160 2007-05-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2162 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2163 -isDeletionAllowed]): completed method with the new imap acl api.
2165 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultAclRoles]):
2168 * SoObjects/SOGo/SOGoPermissions.m: added the new role
2169 "SOGoMailRole_MessageEraser".
2171 * UI/Common/UIxAclEditor.m ([UIxAclEditor -defaultUserID])
2172 ([UIxAclEditor -_prepareUsers]): take the new SOGoObject's
2173 "defaultUserID" method into account.
2175 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -userIsDefaultUser])
2176 ([UIxUserRightsEditor -_initRights]): take the new SOGoObject's
2177 "defaultUserID" method into account.
2179 * UI/MailerUI/UIxMailUserRightsEditor.m: added all the missing
2180 methods to support the IMAP acls mentionned in the RFC 4314,
2181 removed the ones specific to Cyrus.
2183 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultUserID]): new
2184 mandatory method for subclasses. Removed the SOGoDefaultUserID
2187 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -defaultUserID]):
2188 overriden method to return @"<default>".
2190 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2191 -defaultUserID]): overriden method to return @"<default>".
2193 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2194 -aclsForUser:uid]): overriden method.
2195 ([SOGoMailFolder -removeAclsForUsers:users]): overriden method.
2196 ([SOGoMailFolder -setRoles:rolesforUser:uid]): overriden method.
2197 ([SOGoMailFolder -defaultUserID]): overriden method.
2198 ([SOGoMailFolder -hasSupportForDefaultRoles]): overriden method.
2200 2007-05-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2202 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2203 -aclUsersForObjectAtPath:objectPathArray]): new method that being
2204 forwarded the calles to aclUsers for the GCS-based subclasses of
2207 * SoObjects/Mailer/SOGoMailFolder.m: removed all the previous
2208 methods that would have been used to support IMAP acls. Replaced
2209 them with the new protocol for them that has been implemented in
2210 SOGo during the last few weeks.
2212 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2213 -hasSupportForDefaultRoles]): override method by returning "YES".
2215 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
2216 -addObjectUniquely:object]): new method with an explicit name.
2218 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -aclUsers]): renamed
2219 "acl" to "aclUsers". Now designed to return only the uid of the
2220 users involved in an ACL.
2221 ([SOGoObject -hasSupportForDefaultRoles]): new method returning
2222 "NO" by default. To indicate to the acl editor that we don't want
2223 to handle a default user.
2225 * SoObjects/SOGo/SOGoPermissions.[hm]: added the
2226 SOGoRole_ObjectReader, SOGoRole_Folder*, and SOGoMailRole_*
2229 * UI/MailerUI/UIxMailUserRightsEditor.[hm]: new class module that
2230 provides a view to the IMAP acls.
2232 * UI/MailerUI/UIxMailFolderACLEditor.m: removed obsolete module.
2234 * UI/WebServerResources/MailerUI.js: replaced all invocations of
2235 addEventListener to the use of prototype's Event object. Also,
2236 configured all menus programmatically following descriptions lists
2237 containing their callbacks, or nulls, submenus id or separators.
2239 2007-05-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2241 * UI/Common/UIxObjectActions.m ([UIxObjectActions
2242 -addUserInAclsAction]): save the previous roles of the user
2243 (unlikely) or the default roles, or None instead of saving the
2244 roles that should appear the first time in the role editor when no
2245 default has been set...
2247 * SoObjects/SOGo/SOGoObject.m: defined a new constant
2248 "SOGoDefaultUserID".
2250 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2251 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]):
2252 ignore the "AuthorizedSubscriber" role and add the "None" role
2253 when no other role is found.
2255 * UI/Common/UIxAclEditor.m: added a button for the new default
2258 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
2259 -_initRights]): don't take the "None" role into account when
2260 initializing the list of current roles.
2262 * SoObjects/SOGo/SOGoPermissions.m: added a new void role
2265 2007-05-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2267 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2268 -_rangeOfURLInRange:refRange]): urls cannot end with "&" nor "=".
2269 There is no need to subscract the start from the length if a space
2270 is not found since the range has not changed either. Finally, the
2271 first character before the url might also be a tab or a cr, so we
2272 match it against the "urlAfterEndingChars" custom NSCharacterSet.
2273 ([NSString -stringByDetectingURLs]): modified to handle email
2274 addresses and add a correct "mailto:" link.
2276 2007-05-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2278 * SoObjects/Appointments/SOGoAppointmentFolder.m
2279 ([SOGoAppointmentFolder -fetchContentObjectNames]): override
2280 method to return the events in the range of 2 weeks ago up to 4
2283 * UI/MailPartViewers/UIxMailPartTextViewer.m
2284 ([UIxMailPartTextViewer -flatContentAsString]): use the new
2285 "stringByDetectingURLs" method to offer clickable urls.
2287 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2288 -stringByDetectingURLs]): this new method replaces passive URLS
2289 with active ones for HTML resolution of the text.
2291 2007-05-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2293 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
2294 -asQPSubjectString:encoding]): simplified method.
2295 The headers indicates "utf-8" again thank to our fix in
2298 * SoObjects/SOGo/SOGoObject.m: fail to build if libFoundation is
2301 2007-05-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2303 * UI/Common/UIxObjectActions.m ([UIxObjectActions
2304 -removeUserFromAclsAction]): implemented this method which was
2305 missing and is required to remove users from ACLs.
2307 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2308 -subscribeAction]): folderDict was not autoreleased, resulting in
2311 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2312 -primaryFetchProfile]): when building with libFoundation, don't
2313 use the "propertyList" method from NSString. Rather, we convert
2314 the string to an NSData instance and passit as parameter to
2315 NSDeserializer. This way, we obtain a mutable dictionary rather
2316 than an immutable one.
2318 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -bodyPartForText])
2319 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): use the
2320 constant string "contentTypeValue".
2321 contentTypeValue is now set back to iso-8859-1 since NGMime
2322 converts extracts the data in that encoding.
2324 2007-05-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2326 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
2327 -checkLogin:loginToCheckandPassword:passwordToCheck]): if a
2328 "bindFields" value is present in the user defaults, use the
2329 specified fields to find the dn of the user to bind.
2330 ([LDAPSource -allEntryIDs])
2331 ([LDAPSource -fetchContactsMatching:match])
2332 ([LDAPSource -lookupContactEntry:entryID])
2333 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]):
2334 bind and unbind the connection on each request.
2336 * UI/MailerUI/UIxMailAddressbook.m: removed obsolete module.
2338 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2339 -contactSearchAction]): simplified method to use the facilities
2340 provided by the LDAPUserManager. No longer takes care of the
2341 "ldap-only" url parameter since all requests are handled by the
2344 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2345 -primaryFetchProfile]): check that the value returned is not null
2346 before interpreting it.
2348 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
2349 -contactInfosForUserWithUIDorEmail:uid]): check that uid is not empty.
2350 ([LDAPUserManager -_fillContactMailRecords:contact]): if the
2351 system email is already present, remove it before adding it.
2353 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
2354 -checkLogin:loginToCheckandPassword:passwordToCheck]): check that
2355 loginToCheck is not empty.
2356 ([LDAPSource -fetchContactsMatching:match]): check that match is
2358 ([LDAPSource -lookupContactEntry:entryID]): check that entryID is
2360 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]): check that
2363 2007-05-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2365 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -primaryEmail]): new name
2367 ([SOGoUser -systemEmail]): returns the email formed from the
2368 username and the default mail domain.
2369 ([SOGoUser -hasEmail:email]): test whether the user has the
2370 specified email, in a case-insensitive way.
2372 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2373 -LDAPCheckLogin:_loginpassword:_pwd]): use the user manager to
2374 check login information.
2376 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2377 ([SOGoContactLDAPFolder
2378 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
2379 no longer manage LDAP connections. The requests are forwarded to
2380 the relevant LDAPSource instead.
2382 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2383 -appendSystemSources]): pass LDAPSource objects to
2384 SOGoContactLDAPFolder instances.
2386 * SoObjects/Mailer/SOGoDraftObject.m: extract the raw email
2387 address of the "from" field before sending the message. Otherwise,
2388 sending the mail won't work.
2390 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -fromEMails]):
2391 rewrote this method to request all the available email identities
2392 for the current user. Also, the from field also contains the full
2393 name of the user, not just his/her email address.
2395 * SoObjects/Appointments/SOGoCalendarComponent.m
2396 ([SOGoCalendarComponent -iCalPersonWithUID:uid]): new method taken
2397 from the previous module iCalEntityObject+Agenor.
2398 ([SOGoCalendarComponent -getUIDForICalPerson:person]): idem.
2399 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]):
2402 * SoObjects/Contacts/SOGoContactLDIFEntry.[hm]: new class module
2403 replacing the SOGoContactLDAPEntry module. It was renamed as such
2404 because it now receives a dictionary instead of an NGLdapEntry.
2405 It thus can now handle data from any source of LDIF data, not
2406 only coming from LDAP.
2408 * SoObjects/SOGo/LDAPUserManager.[hm]: new class module
2409 implementing most of what used to be the AgenorUserManager class.
2410 The difference is that users are cached in the forme of
2411 dictionaries and many sources are used. Also, it can be used to
2412 search LDAP contacts.
2414 * SoObjects/SOGo/LDAPSource.[hm]: new class module implementing
2415 the concept of "ldap source", to be used by all the classes
2416 needing access to LDAP-provided information: addressbooks and the
2417 user manager. Most the method thereing are transcriptions of
2418 methods previously found in SOGoContactLDAPFolder. It also contain
2419 utility methods for user matching and authentification.
2421 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: removed
2422 module, rendered useless by code refactoring.
2424 * SoObjects/SOGo/AgenorUserManager.[hm]: removed module, replaced
2425 with the freshly written "LDAPUserManager".
2427 2007-05-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2429 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: renamed to
2430 SOGOContactLDIFEntry.
2432 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: removed class
2433 module, obsoleted by code in SOGo/LDAPSource.[hm].
2435 2007-05-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2437 * UI/Common/UIxAclEditor.m ([UIxAclEditor -currentUserIsOwner]):
2438 new method with an explicit name.
2440 2007-05-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2442 * SoObjects/Appointments/SOGoCalendarComponent.m
2443 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): new method
2444 replacing "isOrganizer:orOwner:" by taking only one instance of
2445 SOGoUser as parameter.
2446 ([SOGoCalendarComponent -participant:user]): new method replacing
2447 the previous "isParticipant" boolean method by returning the first
2448 participant matching the user passed as parameter. This method is
2449 used so that both the regular email address and the "system email
2450 address" of the user are matched against the participants emails.
2452 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
2453 -getSystemEMailForUID:uid]): new method that returns the email
2454 formed with the user's uid and the default mail domain.
2456 * SoObjects/Appointments/SOGoCalendarComponent.m
2457 ([SOGoCalendarComponent -rolesOfUser:login]): removed method that
2458 was previously commented out.
2460 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -systemEmail]): new method
2461 forwared to [AgenorUserManager getSystemEmailForUID:].
2463 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2464 -toolbar]): method replacing the one with the same name in the
2465 task and appointment editor classes. This method makes also use of
2466 the new method "isOrganizerOrOwner:" and "participant:" in
2467 SOGoCalendarComponent.
2469 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2470 -toolbar]): removed method, replaced with a method with the same
2471 name in UIxComponentEditor.
2473 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -toolbar]): removed
2474 method, replaced with a method with the same name in
2477 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2478 -primaryFetchProfile]): the values returned from the database are
2479 converted to a put dictionary first, since the dictionary returned
2480 is actually an immutable one, which can cause a crash afterwards.
2482 2007-04-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2484 * SoObjects/SOGo/SOGoPermissions.m: added "SOGoRole_ObjectViewer"
2485 and "SOGoRole_ObjectEditor".
2487 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
2488 -prepareRightsForm]): this method is no longer mandatory.
2490 * UI/Contacts/UIxContactsUserRightsEditor.m
2491 ([UIxContactsUserRightsEditor
2492 -setUserCanCreateObjects:userCanCreateObjects]): new subclass
2493 module to handle acls related to the address books. Partial
2496 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2497 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): cache
2500 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): remove
2501 specified roles from cache.
2502 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
2503 put resulting roles in cache.
2505 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -init]): do not invoke
2506 initWithName:inContainer:. Instead, directly initialize the ivars
2507 as it is supposed to be to avoid an infinite loop whenever one of
2508 those two methods are overriden.
2510 * SoObjects/SOGo/SOGoContentObject.m ([-rolesOfUser:login]):
2513 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
2514 -aclsForUser:uid]): override method so that SOGo won't crash when
2515 loading the contact card.
2517 2007-04-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2519 * SoObjects/Appointments/SOGoAppointmentFolder.m
2520 ([SOGoAppointmentFolder -_privacySqlString]): the string for the
2521 "freebusy" special user should only require opaque elements.
2523 2007-04-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2525 * SoObjects/Appointments/SOGoAppointmentFolder.m
2526 ([SOGoAppointmentFolder -davResourceType]): fixed a problem with
2527 our double declaration where the resulting XML would be screwed.
2528 There is only one collection per namespace.
2530 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
2531 rfc822DateString]): new method that returns a string conform to
2532 rfc 822 and suitable for email headers.
2534 * SoObjects/Mailer/SOGoDraftObject.m: invoke the new
2535 "rfc822DateString" category method on the date we put in the
2538 2007-04-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2540 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -defaultAction])
2541 ([UIxUserRightsEditor -saveUserRightsAction]): new action methods
2542 which should never be overriden.
2543 ([UIxUserRightsEditor -appendRight:newRight])
2544 ([UIxUserRightsEditor -removeRight:right])
2545 ([UIxUserRightsEditor -appendExclusiveRight:newRightfromList:list])
2546 ([UIxUserRightsEditor -removeAllRightsFromList:list]): new utility
2547 methods that can be used by the subclasses.
2548 ([UIxUserRightsEditor -prepareRightsForm]): new method that should
2549 mandatorily be overriden to prepare the elements of the subclassed
2551 ([UIxUserRightsEditor -updateRights]): new method that should
2552 mandatorily be overriden to update the user rights from the
2553 elements of the subclassed form.
2555 * UI/Common/UIxAclEditor.m ([UIxAclEditor -_prepareUsers]): we
2556 check if the uid is already listed before adding it to our array.
2557 This is because the acl table can contain more than one record per
2558 user/object relationship.
2560 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2561 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): the
2562 "roles" parameter is now an NSArray instead of a string. Therefore
2563 we loop throughout the array to populate the table. All the
2564 relevant records are removed prior to the addition of the new
2567 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
2568 -aclsForUser:uid]): new override that returns nil until we add
2569 support for IMAP acls.
2571 * SoObjects/Mailer/SOGoMailAccounts.m
2572 ([SOGoMailAccounts -aclsForUser:uid]): same as below.
2574 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2575 ([SOGoContactLDAPFolder -aclsForUser:uid]): same as below.
2577 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2578 -aclsForUser:uid]): override this method which will always return
2581 * SoObjects/SOGo/SOGoPermissions.[hm]: added
2582 [Public,Private,Confidential]
2583 x[Viewer,DAndTViewer,Responder,Modifier]. Renamed
2584 SOGoRole_ORganizer to SOGoCalendarRole_Organizer. Same for
2585 ..._Participant. Removed SOGoRole_Assistant and SOGoRole_Delegate.
2587 * SoObjects/Appointments/SOGoAppointmentFolder.m
2588 ([SOGoAppointmentFolder -defaultAclRoles]): new overriden method
2589 that defines default roles for new elements in the acl.
2591 * UI/Scheduler/UIxCalUserRightsEditor.[hm]: new component class
2592 module and subclass of UIxUserRightsEditor specific to the
2593 handling of user rights on calendar folders.
2595 2007-04-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2597 * SoObjects/Appointments/SOGoAppointmentFolder.m
2598 ([SOGoAppointmentFolder -groupDavResourceType]): return both
2599 "vevent-collection" and "vtodo-collection".
2601 * UI/Common/UIxUserRightsEditor.[hm]: new template class module
2602 that implements the detailed editor of user rights per-object.
2604 2007-04-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2606 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
2607 -rolesForObject:objectinContext:context]): no longer query objects
2608 for "roleForUser:". Instead, all objects should implement
2611 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject -acls]):
2612 new method to comply with the new acl "protocol" in SOGoObject.
2613 Uses SOGoFolder's new facilities for ACLS.
2614 ([SOGoContentObject -aclsForUser:uid]): idem.
2615 ([SOGoContentObject -setRoles:rolesforUser:uid]): idem.
2616 ([SOGoContentObject -removeAclsForUsers:users]): idem.
2618 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2619 -aclsForObjectAtPath:objectPathArray]): new method generic to GCS
2620 based folders. This method is derived from the code that was in
2621 UIxAclFolder before its removal.
2622 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
2625 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): idem.
2627 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): idem.
2628 ([SOGoFolder -setRoleForUsers:uidsto:role])
2629 ([SOGoFolder -setRoleForUsers:uidsto:role]): removed method.
2631 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -acls]): stub method
2632 that requires overriding by subclasses.
2633 ([SOGoObject -aclsForUser:uid]): idem.
2634 ([SOGoObject -defaultAclRoles]): idem.
2635 ([SOGoObject -setRoles:rolesforUser:uid]): idem.
2636 ([SOGoObject -removeAclsForUsers:users]): idem.
2638 * UI/Common/UIxObjectActions.m: new module implementing the web
2639 actions common to SOGoObject and all its subclasses.
2640 ([UIxObjectActions -addUserInAclsAction]): new method that adds a
2641 user with the clientObject defaults user rights to the object's
2644 * UI/Common/UIxAclEditor.m: modified module so as to simplify it
2645 to the point where it will only list the users (and their name)
2646 associated with an object acl.
2648 * SoObjects/SOGo/SOGoAclsFolder.m: removed module because its
2649 methods have been moved into SOGoObject and SOGoFolder during a
2652 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2653 -iCalParticipantsAndResourcesStringFromQueryParameters]): removed
2654 method made useless by the programmatic handling of iCalendar
2656 ([UIxComponentEditor -iCalParticipantsStringFromQueryParameters]): idem.
2657 ([UIxComponentEditor -iCalResourcesStringFromQueryParameters]): idem.
2658 ([UIxComponentEditor -iCalStringFromQueryParameter:_qpformat:_format]): idem.
2660 * UI/WebServerResources/MailerUI.js (initDnd): enable drag and
2661 drop on all folder nodes, not just on leaves.
2663 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2664 ([SOGoContactLDAPFolder
2665 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): request field "uid" when doing a search.
2667 2007-04-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2669 * Main/SOGo.m ([SOGo +initialize]): on GNUstep, trigger some
2670 debugging facilities when the SOGoDebugObjectAllocation user
2673 2007-04-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2675 * SoObjects/SOGo/NSString+Utilities.m ([NSString -boolValue]): new
2676 method that SOGo will need with non-gnustep Foundation
2678 ([NSString -stringByAppendingPathComponent:component]): new method
2679 that SOGo will need when building with libFoundation. Method
2680 removed later since it is available from
2681 Foundation/NSPathUtilities.h.
2683 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -timeZone]): method moved
2686 * SoObjects/SOGo/SOGoObject.m: new ivar "context" that permits
2687 every subclass to access [WOApplication context] without having to
2688 invoke it more than once.
2690 * SoObjects/Appointments/SOGoCalendarComponent.m
2691 ([SOGoCalendarComponent -changeParticipationStatus:_status]):
2692 moved method from SOGoTaskObject and SOGoAppointmentObject up to
2695 * UI/Scheduler/UIxCalSelectTab.m: removed module.
2697 2007-04-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2699 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
2700 -vCard]): test the prefix of the card in a case-independent way.
2702 * OGoContentStore/OCSContactFieldExtractor.m
2703 ([OCSContactFieldExtractor
2704 -extractQuickFieldsFromContent:content]): we no longer accept
2705 records in a format other than versit vCard so we can get rid of a
2708 2007-04-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2710 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2711 -selectorComponentClass]): restored method.
2713 2007-04-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2715 * UI/Scheduler/UIxCalTasksListView.m ([UIxCalTasksListView
2716 -shouldDisplayCurrentTask]): the current task is not displayed if
2717 it is NOT completed or if the "showCompletedTasks" flag is set.
2718 The logic was inverted in Lightning and is now in SOGo too.
2720 2007-04-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2722 * UI/Contacts/UIxContactView.m ([UIxContactView -workUrl]): we
2723 want the "work" url instead of the "home".
2725 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
2726 -_saveSnapshot]): save url values from snapshot.
2727 ([UIxContactEditor -initSnapshot]): load url values from snapshot.
2729 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2730 -calendarList]): new method replacing "availableCalendars".
2732 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
2733 -calendarFolders]): we now take the list of subscribed calendar
2736 * SoObjects/Appointments/SOGoAppointmentFolder.m
2737 ([SOGoAppointmentFolder -calendarFoldersInContext:context]): new
2738 method derived from and replacing [UIxCalView calendarFolders].
2740 2007-03-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2742 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2743 -toManyRelationshipKeys]): don't put the predefined folders in the
2744 list if they are returned by the server.
2746 * UI/MailerUI/UIxMailTree.m ([UIxMailTree -flattenedNodes]): we no
2747 longer store the "flattenedBlocks" in a dictionary since the
2748 object will be deleted anyway and we don't need to put the folders
2751 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
2752 ([UIxMailPartHTMLViewer -_attachmentIds]): take the current
2753 attachment path into account when computing the part urls.
2755 2007-03-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2757 * UI/Contacts/UIxContactsListViewContainer.m
2758 ([UIxContactsListViewContainer -additionalFolders]): take the list
2759 of subscribed folders from the new property list used for the user
2760 settings. The value of its key is SubscribedFolders for the
2761 dictionary entry named "Contacts".
2763 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2764 -canAccessContentAction]): new method to override the one from
2765 UIxFoldersActions by taking into account the fact that, this time,
2766 the clientObject is an ldap folder. Removed many method that used
2767 to be related to the handling of the user selector.
2769 * UI/Scheduler/UIxCalDayView.m: commented out many unused methods
2770 to make sure they can be removed.
2772 * UI/Scheduler/UIxCalView.m ([UIxCalView -_setupCalendarFolders]):
2773 populate the calendar entries based on the user settings plist.
2775 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2776 -selectForMailerAction]): restored method.
2778 * UI/Scheduler/UIxCalendarSelector.m: new template module derived
2779 from a simplified version of the old UIxContactEditor (removed).
2781 * UI/Contacts/UIxContactsUserFolders.m: new template module for
2782 selecting users or user folders through an LDAP search of which
2783 the results are displayed as a tree.
2785 * UI/WebServerResources/UIxMailEditor.js: moved previous generic
2786 method "onContactAdd" here since the Mailer is now the only module
2787 to use it when composing emails.
2789 * UI/WebServerResources/generic.js: added code for handling the
2790 new scheme used for describing SOGo folders, common code to handle
2791 folder addition or removal.
2793 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2794 -activateFolderAction]): new method that change the "active"
2795 settings in the folder-related fields in the user settings.
2796 ([UIxFolderActions -deactivateFolderAction]): see above.
2798 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2799 -checkRightsAction]): removed method.
2801 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2802 -updateAdditionalAddressBooksAction]): removed method.
2804 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
2805 -updateCalendarsAction]): removed method.
2807 2007-03-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2809 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
2810 -checkRightsAction]): removed method.
2812 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2813 -canAccessContentAction]): new method designed to replace
2814 [UIxCalMainView checkRightsAction] in a more universal way.
2816 2007-03-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2818 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2819 -roleOfUser:uidinContext:context]): take all the subkeys into
2820 account, not only the "personal" folder.
2822 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2823 -takeValuesFromRequest:_rqinContext:_ctx]): append a "uid" field
2824 to the new components.
2826 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -userSettings]): new method
2829 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
2830 -getUserDefaultsForUID:uid]): rewrote method to use the "defaults"
2831 field of the sogo_user_profile table, where the user-customizable
2832 changes will be saved.
2833 ([AgenorUserManager -getUserSettingsForUID:uid]): new method
2834 similar to the one above, using the "settings" field where the
2835 automatic settings will be saved.
2837 * SoObjects/SOGo/AgenorUserDefaults.m: rewrote a big part of the
2838 module to bind the userdefaults to a property list contained in a
2839 specified field of the sogo_user_profile table.
2840 ([AgenorUserDefaults
2841 -initWithTableURL:tableURLuid:userIDfieldName:defaultsFieldName]):
2842 added a "fieldName" parameter.
2844 * UI/Common/UIxFolderActions.m: new module implementing web
2845 actions common to all GCS-based folders.
2847 2007-03-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2849 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -labelForDay]):
2850 put a carriage return after the day name.
2852 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
2853 -readFreeBusyAction]): restored method.
2855 2007-03-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2857 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
2858 -defaultAction]): remade module to redirect automatically to the
2861 * SoObjects/Contacts/NSDictionary+Contact.m: removed module.
2863 2007-03-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2865 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2866 -deleteAction]): new web method to delete personal addressbook
2869 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
2870 -delete]): override method to refuse the deletion of the folder if
2871 its nameInContainer is "personal".
2873 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -delete]): new method
2874 that forwards the deletion request to the folder manager.
2876 2007-03-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2878 * UI/Scheduler/UIxAttendeesEditor.m ([UIxAttendeesEditor
2879 -zoomList]): new method that returns the list of available zoom factors.
2881 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
2882 -changeStatusAction]): rewrote method.
2884 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2885 -_handleAttendeesEdition]): make sure "attendeesNames" has a
2886 length > 0 before computing the attendees. Otherwise there will be
2887 an invalid empty entry.
2888 ([UIxComponentEditor -_handleOrganizer]): new method that adds the
2889 organizer when there are attendees and remove it when the
2890 attendees are removed.
2892 2007-03-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2894 * UI/Scheduler/UIxAttendeesEditor.m): new component.
2896 * UI/Scheduler/UIxComponentEditor.m: no longer a superclass for
2897 the task and appointment editors. Now a container component
2898 handling the common elements of tasks and events.
2900 * UI/Scheduler/UIxTaskEditor.m: same as below.
2902 * UI/Scheduler/UIxAppointmentEditor.m: rewrote template. No longer
2903 a subclass of UIxComponentEditor but a subcomponent of it.
2905 * UI/Common/UIxToolbar.m ([UIxToolbar -toolbarConfig]): the
2906 toolbar can have the special value "none" to indicate there is
2907 none attached to the window.
2909 * SoObjects/Appointments/SOGoCalendarComponent.m
2910 ([SOGoCalendarComponent -isOrganizer:emailorOwner:login]): new
2912 ([SOGoCalendarComponent -isParticipant:email]): new method.
2913 ([SOGoCalendarComponent -calendar:create]): takes one parameter
2914 "create" which is a boolean indicating whether we want to create
2915 the calendar if it does not exist.
2917 2007-03-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2919 * UI/Scheduler/UIxCalMonthView.m: changed view to use divs instead
2920 of a table, the same way the dayly and weekly views have been for
2923 2007-02-09 Helge Hess <helge.hess@opengroupware.org>
2925 * SoObjects/Appointments/SOGoAppointmentFolder.m: added CalDAV
2928 * SoObjects/SOGo/SOGoUserFolder.m: added davCalendarHomeSet CalDAV
2929 property to point at the user folder
2931 2007-03-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2933 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2934 -userInContext:]): returns "SOGoUser".
2936 * SoObjects/Appointments/SOGoCalendarComponent.m
2937 ([SOGoCalendarComponent -contentAsString]): overriden method that
2938 takes the privacy into account and discard the relevant fields if
2939 needed by generating a new content string and caching it.
2940 ([SOGoCalendarComponent
2941 -saveContentString:contentStringbaseVersion:baseVersion]): if the
2942 new method above has cached a content string, release it and set
2943 it to nil so that it will have to be regenerated in the case it is
2945 ([SOGoCalendarComponent -_filterPrivateComponent:component]):
2946 discard the fields that have to be hidden when the card is
2949 * SoObjects/Appointments/SOGoAppointmentFolder.m
2950 ([SOGoAppointmentFolder
2951 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]): make
2952 sure the cards are now handled as instances of
2953 SOGoCalendarComponent instead of SOGoContentObject so that their
2954 content string is taking the privacy classifiction into account.
2955 ([SOGoAppointmentFolder -_privacySqlString]): new method that
2956 generates a query to determine what information can be given and
2957 if the card itself has to be shown.
2959 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
2960 -getICalPersonsFromValue:selectorValue]): removed useless
2961 "isAccessRestricted" method.
2963 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
2964 -setStyle:_style]): test whether the values of orgmail and
2965 partmails are null before manipulating them, otherwise SOGo sends
2966 a "rangeOfString:" message to an NSNull, which makes it crashes.
2968 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2969 -extractQuickFieldsFromEvent:_event]): we now use the new
2970 "symbolicAccessClass" method from iCalEntity to determine the
2971 value of the "classifiction" field.
2972 ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]): same
2975 2007-03-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2977 * SoObjects/Appointments/SOGoAppointmentFolder.m
2978 ([SOGoAppointmentFolder
2979 -fetchCoreInfosFrom:_startDateto:_endDatecomponent:_component]):
2980 see below, the query is adapted consequently.
2982 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2983 -extractQuickFieldsFromTodo:_task]): the field "ispublic" was
2984 renamed to "classification" and can any integer as value.
2985 ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event]):
2988 2007-02-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2990 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
2991 ([_UIxHTMLMailContentHandler -_appendStyle:_charslength:_len]):
2992 don't prepend anything to the class and id named. Instead, we
2993 make each style embedded in the ".SOGoHTMLMail-CSS-Delimiter"
2996 2007-02-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2998 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2999 -rolesOfUser:logininContext:context]): if object does not exists
3000 (for example when it's being created), the current user has the
3001 same rights on it than he/she has on its parent container.
3003 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
3004 -nameExistsInFolder:objectName]): methods that tests if a c_name
3005 corresponding to the name passed as parameter is present in the db
3008 2007-02-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3010 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
3011 -rolesForObject:objectinContext:context]): test for
3012 "rolesOfUser:inContext:" in addition to "roleOfUser:...".
3014 * SoObjects/Appointments/SOGoCalendarComponent.m
3015 ([SOGoCalendarComponent -rolesOfUser:logininContext:context]):
3016 returns the roles of the user on the container object if the event
3019 2007-02-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3021 * UI/MailPartViewers/UIxMailRenderingContext.m: returns the
3022 alternativeViewer a multipart/related message is being handled.
3024 * UI/MailPartViewers/UIxMailPartHTMLViewer.m: reimplemented module
3027 * UI/MailPartViewers/UIxMailPartAlternativeViewer.m: select the
3028 text/html component before text/plain.
3030 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3031 -addRequiredKeysOfStructure:path:toArray:recurse:]): accepts the
3032 fetching of HTML parts.
3034 * SoObjects/Appointments/SOGoCalendarComponent.m
3035 ([SOGoCalendarComponent -componentTag]): new template method that
3036 returns the vcalendar tag of the current object.
3037 ([SOGoCalendarComponent -component]): new method that returns the
3038 first object matching [self componentTag] within the current
3039 calendar object. This method replaces 'firstEventInCalendar:' as
3040 well as "firstTaskInCalendar:".
3041 ([SOGoCalendarComponent -roleOfUser:logininContext:context]):
3042 moved method from SOGoAppointmentObject.m.
3044 2007-02-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3046 * UI/Scheduler/UIxCalMulticolumnDayView.[hm]: new daily view
3047 module which shows each selected user's calendar in a different
3048 column instead of mixing their events together.
3050 * UI/Scheduler/UIxCalView.m ([UIxCalView -redirectForUIDsAction]):
3051 replaced use of [NSString stringByTrimmingWhiteSpaces] with
3052 [NSString stringByTrimmingSpaces].
3054 * UI/MailPartViewers/UIxMailPartICalViewer.m: request the key
3055 "cnWithoutQuotes" instead of "cnForDisplay", which no longer
3058 * UI/Scheduler/UIxCalDayOverview.m,
3059 UI/Scheduler/UIxCalDayChartview.m,
3060 UI/Scheduler/UIxCalDayListview.m,
3061 UI/Scheduler/UIxCalWeekOverview.m,
3062 UI/Scheduler/UIxCalWeekChartview.m,
3063 UI/Scheduler/UIxCalWeekListview.m,
3064 UI/Scheduler/UIxCalInlineMonthOverview.m,
3065 UI/Scheduler/UIxCalYearOverview.m: removed unused modules.
3067 2007-02-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3069 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3070 -appendPersonalSourcesInContext:context]): release connectoin
3071 channel when everything is done.
3073 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3074 -newAbAction]): new action method to crate a new contact folder
3077 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -create]): new method
3078 that requests the folder manager to create a folder table with the
3079 specified type at the specified path. The type is taken from [self
3082 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3083 -folderType]): implemented.
3085 * SoObjects/Appointments/SOGoAppointmentFolder.m
3086 ([SOGoAppointmentFolder -folderType]): implemented.
3088 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3089 -appendPersonalSourcesInContext:context]): we now fetch all
3090 folders with type "Contact" that belong to the current user.
3091 ([SOGoContactFolders -newFolderWithName:name]): new method to
3092 create a new contact folder.
3094 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]): treat
3095 resulting url with [NSString+Utilities hostlessURL] instead of
3096 using NSURL. This is because the url in question sometimes has a
3097 hostname and sometimes not. "hostlessURL" ensure the hostname is
3099 ([UIxComponent -applicationPath]): same as above.
3101 2007-02-08 Ludovic Marcotte <ludovic@inverse.ca>
3103 * SoObjects/Mailer/SOGoMailFolder.m: priorize the lookup of
3104 folders before doing the one on messages.
3106 2007-02-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3108 * SoObjects/SOGo/NSArray+Utilities.m: added an implementation of
3109 makeObjectsPerform:withObject:withObject: for GNUstep
3112 * OGoContentStore/GNUmakefile, Protocols/common.make,
3113 SoObjects/common.make, UI/common.make: install in
3114 GNUSTEP_INSTALLATION_DIR instead of GNUSTEP_USER_DIR.
3116 2007-02-07 Ludovic Marcotte <ludovic@inverse.ca>
3118 * UI/Scheduler/English.lproj/Localizable.strings: fixed typo for
3121 2007-02-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3123 * UI/MailerUI/UIxMailTree.m ([UIxMailTree
3124 -getTitle:folderType:andIcon:forObject:]): disabled Sieve folders
3127 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3128 -checkLogin:_loginpassword:_pwd]): fixed a bug where a wrong
3129 password would be accepted anyway as long as its length was > 0.
3130 This can be the case ONLY when LDAP is disabled otherwise we have
3131 a serious security issue...
3133 * SoObjects/Appointments/SOGoAppointmentObject.m
3134 ([SOGoAppointmentObject -roleOfUser:logininContext:context]): if a
3135 user is not an organizer nor a participant, he is declared as
3136 "Owner" if he owns the calendar the entry where the entry is
3137 contained. Other cases should not be possible.
3139 2007-02-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3141 * UI/Contacts/UIxContactEditor.m: display and handle the new
3144 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3145 ([SOGoContactLDAPFolder -_searchAttributes]): retrieve "calFBURL"
3148 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3149 -vCard]): put the LDAP "calFBURL" field in the vCard's "FBURL"
3152 2007-01-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3154 * SoObjects/Appointments/SOGoCalendarComponent.m
3155 ([SOGoCalendarComponent -sendEMailNotifications]): new method that
3156 returns the value of ud "SOGoAppointmentSendEMailNotifications"
3158 ([SOGoCalendarComponent
3159 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]): method moved from SOGoAppointmentObject/SOGoTaskObject, replacing occurences of "appointment" to "object" in its name.
3161 2007-01-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3163 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
3164 -defaultAction]): invoke "flushMailCaches" on [self clientObject]
3165 so that the mailbox cache is refreshed everytime the user presses
3166 on "get mail". I doubt a mailbox cache really is useful in general
3169 2007-01-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3171 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3172 -userInContext:]): if the lookup is on "freebusy.ifb" and the
3173 username is "anonymous" the user is automatically set to
3176 2007-01-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3178 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3179 -checkLogin:_loginpassword:_pwd]): authorize special "freebusy"
3180 user with password "freebusy".
3182 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
3183 -contentAsString]): the default timerange is now 14 days before
3184 currentday and 1 month after.
3186 2007-01-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3188 * SoObjects/Appointments/SOGoAppointmentFolder.m
3189 ([SOGoAppointmentFolder
3190 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
3191 escape the record string in a way suitable with XML encoding.
3193 2007-01-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3195 * UI/WebServerResources/SchedulerUI.js: fixed a bug where the
3196 calendar view would not be updated properly.
3198 2007-01-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3200 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3201 -newStartDate]): fix the handling of the component start date
3202 depending on the "hm" and the "day" parameters.
3204 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
3205 -roleOfUser:uidinContext:context]): set role of current user to
3206 "Assistant" if the object that is accessed is "freebusy.ifb".
3208 * SoObjects/Appointments/SOGoAppointmentFolder.m
3209 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): method
3210 moved from UI/Scheduler/UIxCalView:calendarFolderForUID:.
3211 ([SOGoAppointmentFolder
3212 -lookupCalendarFoldersForUIDs:_uidsinContext:]): now use the new
3213 lookupCalendarFolderForUID: method, which doesn't do security
3216 2007-01-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3218 * UI/Common/UIxAclEditor.m ([UIxAclEditor -assistantsValue]): new
3219 accessor that returns the comma-separated list of users with role
3221 ([UIxAclEditor -delegatesValue]): same as above for "Delegate".
3222 ([UIxAclEditor -_prepareUsers]): there is no longer a concept of
3223 "checkedUsers". Instead, each user is either classified in the
3224 list of assistants or the list of delegates.
3226 2006-12-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3228 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
3229 -composeAction]): method imported from removed container modules.
3230 ([UIxMailMainFrame -mailFolderName]): method imported from removed
3233 * UI/MailerUI/UIxMailPopupView.m: a new special popup component
3234 for wrapping UIxMailView with the "popupview" action.
3236 * UI/MailerUI/UIxMailAccountView.m: renamed to UIxMailSplashView,
3237 since its the component that displays the same splash screen than
3238 the one in Thunderbird/Icedove.
3240 * UI/MailerUI/UIxMailAccountViewContainer.[hm],
3241 UI/MailerUI/UI/MailerUI/UIxMailAccountsView.m,
3242 UI/MailerUI/UIxMailListViewContainer.[hm],
3243 UI/MailerUI/UIxMailViewContainer.[hm]: removed
3245 2006-12-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3247 * UI/WebServerResources/HTMLElement.js: replaced the functional
3248 selectNode() and deselectNode() functions with select() and
3249 deselect() methods of HTMLElement.
3251 * UI/WebServerResources/ContactsUI.js: cleanup, most of the
3252 events are initialized from here now instead of in the HTML code.
3254 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3255 -checkRightsAction]): new method similar to the one with the same
3256 name in UIxCalMainView.m.
3258 * UI/Common/UIxAclEditor.m ([UIxAclEditor -saveAclsAction]): added
3259 code to handle the publishing of freebusy information.
3261 2006-12-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3263 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3264 -checkRightsAction]): new action method that returns a
3265 comma-separated list of boolean values matching the right of the
3266 current user to "view" (as a permission) each foreign calendar
3267 stored in his preferences.
3269 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -setOwner:newOwner]):
3270 new method that sets a customOwner, which can be returned with
3271 ownerInContext it set.
3273 * SoObjects/Appointments/SOGoAppointmentFolder.m
3274 ([SOGoAppointmentFolder
3275 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): no longer set the owner of elements here.
3277 2006-12-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3279 * SoObjects/SOGo/SOGoUserFolder.m: same as for SOGoContactFolders
3280 below, but for the Contacts and Calendar collections.
3282 * SoObjects/SOGo/SOGoAclsFolder.m: convert the class to user the
3283 new acl facilities method from sope-gdl/GCSFolder.m.
3285 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3286 -roleOfUser:uidinContext:context]): new method that returns
3287 SOGoRole_Assistant when the user is an assistant or a delegate on
3288 the "personal" ab object. This is so that setting roles on the
3289 SOGoContactFolders object is not required.
3291 2006-12-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3293 * Main/SOGo.m: declare "Freebusy" permissions for the top objects.
3295 * UI/Contacts/UIxContactsAclsSelection.m: new component specific
3296 to the handling of the user selection for the acls.
3298 * SoObjects/SOGo/SOGoPermissions.[hm]: new module that extends the
3299 values from SoPermissions with ones specific to SOGo.
3301 * SoObjects/SOGo/SOGoAclsFolder.[hm]: new class module that
3302 handles the storage for the acls.
3304 * SoObjects/Appointments/SOGoCalendarComponent.[hm]: new parent
3305 class for SOGoAppointmentObject and SOGoTaskObject.
3307 * UI/Common/UIxAclEditor.[hm]: new component that provides a
3308 general editor for folder acls.
3310 * SoObjects/SOGo/NSString+Utilities.[hm]: old "NSString+URL"
3312 ([NSString -davMethodToObjC]): method that returns the method name
3313 for a DAV property implementation.
3315 * SoObjects/SOGo/NSArray+Utilities.m: new extension module to
3317 ([NSArray -stringsWithFormat:format]): new method that returns
3318 formatted occurences of the strings stored in the array.
3320 * SoObjects/SOGo/SOGoDAVRendererTypes.m ([SOGoDAVSet
3321 +davSetWithArray:newValuesofValuesTaggedAs:newValueTag]): a new
3322 subclass module of SoWebDAVValue that supports collections of
3323 properties of the same type.
3325 2006-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3327 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
3328 -lookupFolder:ofClassNamed:inContext:]): added the ability to
3329 configure the name of the SOGoDraftFolders with the ud var
3330 "SOGoDraftsFolderName".
3332 2006-11-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3334 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
3335 -userTimeZone:username]): new method that returns the timezone for
3336 the specified user depending on his preferences and the server
3339 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3340 -stringForData:partInfo:]): take the encoding into account and
3341 translate the text to "normal" before processing the charset data.
3343 2006-11-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3345 * UI/WebServerResources/generic.js: the progress indicator is on
3346 when loading the page so we turn it off, and we turn it back on
3347 whenever we switch to another module...
3349 * UI/WebServerResources/SchedulerUI.js: make sure the day view
3350 synchronization mechanism works everywhere.
3352 * UI/WebServerResources/generic.js: the log window is not only
3353 visible when UIxDebugEnabled is set.
3355 * UI/WebServerResources/SchedulerUI.js: the month overview's day
3356 cells are now initialized with the DOM event interface methods
3357 instead of with html attributes.
3359 * UI/Templates/MailerUI/UIxMailView.wox: don't display useless
3360 headers (should be made configurable at some point)...
3362 * OGoContentStore/sql/generate-folderinfo-sql-for-users.sh: drop
3363 "not null" constraint on startdate, enddate, isopaque,
3364 participants and partmails.
3366 2006-11-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3368 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
3369 -hoursToDisplay]): prevent a crash by retaining the
3370 "hoursToDisplay" array after it's created.
3371 ([UIxCalDayTable -clickableHourCellClass]): new method for the new
3372 clickable hours DIV.
3374 * UI/WebServerResources/SchedulerUI.js: made the event
3375 participation status modification asynchronous, which also fixes a
3376 bug where the window would sometimes close before the accept or
3377 decline action was completed. Also, adapted the event handling
3378 related to the days or weeks view with the new DIV-based layout.
3380 * UI/Scheduler/UIxCalInlineAptView.m: same as the first below...
3382 * UI/Scheduler/UIxCalDayTable.m: enhanced to provide the new
3383 DIV-based presentation of the days and weeks.
3385 * SoObjects/Appointments/SOGoTaskObject.m: same as below...
3387 * SoObjects/Appointments/SOGoAppointmentObject.m: lookupName:...
3388 might return an exception so we have to handle it if we don't
3391 2006-11-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3393 * UI/WebServerResources/SchedulerUI.js: updated the list
3394 initialization code to use the new event management scheme, adding
3395 what was missing to be able to delete events and tasks again.
3397 * UI/WebServerResources/MailerUI.js: added code to activate the
3398 "Get mails" button. Fixed a bug which prevented messages to be
3401 * UI/WebServerResources/UIxFreeBusyUserSelector.js: handle tab
3402 navigation and focus handling of INPUTs.
3404 2006-11-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3406 * UI/WebServerResources/MailerUI.js: added code to handle the
3407 possible drag and drop events to manager in the mail module.
3408 Moving messages, opening parent folders, ...
3410 * UI/WebServerResources/SOGoDragAndDrop.js: new file containing
3411 the drag and drop manager as well as the interface to HTMLElement
3412 to trigger drag and drop events.
3414 * UI/MailerUI/UIxMailView.m ([UIxMailView -moveAction]): new
3415 action to move the current message to the mailbox named after the
3416 value of parameter "tofolder".
3418 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3419 -moveToFolderNamed:folderNameinContext:]): new method base on
3422 2006-11-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3424 * UI/WebServerResources/generic.js: added and activated many
3425 "load" handlers to configure generic widgets used across the
3426 modules. More events are now handled in a DOM-fashion way instead
3427 of by setting the relative attributes in the templates.
3429 * UI/Templates/UIxSortableTableHeader.wox: all the events are
3430 declared from the javascript DOM onload handlers.
3432 * UI/Templates/UIxPageFrame.wox: load the new SOGoDragHandles.js
3435 * UI/Templates/MailerUI/UIxMailListView.wox: all the events are
3436 declared from the javascript DOM onload handlers.
3438 * UI/MailerUI/UIxMailListView.m: removed all the JS methods since
3439 we want everything to be separated from each other, as much as
3442 * UI/WebServerResources/SOGoDragHandles.js: new module containing
3443 the "SOGoDragHandlesInterface", implementing methods that can be
3444 attributed to DIV so that they can be used as drag handles.
3446 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
3447 -asQPSubjectString]): initialize the tmp strings with '0' to make
3448 sure they don't contain garbage.
3450 2006-11-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3452 * UI/WebServerResources/MailerUI.js: register the messageList
3453 table as a dragging source and the leaf of the navigation tree as
3454 dnd destinations to the DNDManager.
3456 * UI/WebServerResources/generic.js: initialize tabs from the
3457 "unload" event listener that is added programmatically instead of
3458 from the template... Also, added the new DNDManager object.
3460 * UI/WebServerResources/HTMLTableElement.js: added code to
3461 simulate XUL drag n drop events. This code will possibly be moved
3462 to HTMLElement.js instead later...
3464 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3465 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): same as
3468 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3469 -_qualifierForFilter:filter]): only search records which starts
3470 with the specified pattern.
3472 2006-11-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3474 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
3475 -asQPSubjectString]): new method that returns the special QP
3476 string with its qp declaration for email subjects.
3477 ([SOGoDraftObject -bodyPartForText])
3478 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): don't
3479 double-encode data in UTF-8.
3481 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3482 -newStartDate]): new method to determine the start date depending
3483 on the URL parameters, the current day and the current time.
3484 ([UIxComponentEditor -toolbar]): new method to determine the
3485 filename of the toolbar that should be drawn depending on the
3486 ownership and the list of attendees of the task/event wrt to the
3489 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
3490 -setDayStartHour:aStartHour]): adjust the minutes to the next
3491 quarter of hour, if not already set to a quarter.
3493 * UI/WebServerResources/UIxAppointmentEditor.js,
3494 UI/WebServerResources/UIxTaskEditor.js: added code to manage start
3497 2006-11-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3499 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3500 -loadValuesFromComponent:component]): handles access class
3501 (privacy) and status.
3503 * UI/Contacts/UIxContactsListViewContainer.m
3504 ([UIxContactsListViewContainer -additionalFolders]): return nil if
3505 [self additionalAddressBooks] returns an empty string.
3507 2006-11-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3509 * UI/Scheduler/UIxCalMonthView.m ([UIxCalMonthView
3510 rangesOf7Days]): enhanced and debugged algorithm to feed the array
3511 with slices where the first day is still in the requested month.
3513 * UI/Templates/UIxPageFrame.wox: the logConsole is created only on
3516 * UI/SOGoUI/SOGoAptFormatter.m: added code to handle the display
3517 of events in the day boxes of the calendar's monthly view.
3519 * SoObjects/Appointments/SOGoTaskObject.m ([SOGoTaskObject
3520 -davContentType]): declare "text/calendar".
3522 * SoObjects/Appointments/SOGoAppointmentObject.m
3523 ([SOGoAppointmentObject -davContentType]): declare
3526 * SoObjects/Appointments/SOGoAppointmentFolder.m
3527 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): certain
3528 HTTP methods are handled by SOPE and requires nil to be returned,
3529 this method now invokes the new
3530 "requestNamedIsHandledLater:inContext:" method to check that.
3531 ([SOGoAppointmentFolder
3532 -requestNamedIsHandledLater:nameinContext:context]): new methods
3533 that returns "YES" only for the "OPTIONS" http method (for now...).
3534 ([SOGoAppointmentFolder -davComplianceClassesInContext:]):
3535 overloaded method to append the "access-control" and
3536 "calendar-access" DAV abilities to the initial declaration.
3538 * UI/Scheduler/UIxCalMonthView.[hm]: rewritten module entirely to
3539 imitate the look of Sunbird/Lightning's monthly view.
3541 * UI/Scheduler/UIxCalMonthView.[hm]: renamed to
3542 UIxCalMonthViewOld.[hm].
3544 2006-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3546 * UI/Scheduler/UIxFreeBusyUserSelectorTable.m
3547 ([UIxFreeBusyUserSelectorTable -currentContactHasStatus]): new
3549 ([UIxFreeBusyUserSelectorTable -currentContactStatusImage]):
3550 returns an image name based on the participation status of the
3553 * UI/WebServerResources/SchedulerUI.js: same strip down as for
3556 * UI/Contacts/UIxContactsListViewContainer.m ([UIxContactsListViewContainer -additionalAddressBooks])
3557 ([UIxContactsListViewContainer -additionalFolders])
3558 ([UIxContactsListViewContainer -setCurrentAdditionalFolder:newCurrentAdditionalFolder])
3559 ([UIxContactsListViewContainer -currentAdditionalFolder]): new
3560 methods to handle the external addressbooks a user has subscribed
3561 too, by retriving them from his preferences.
3563 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3564 -updateAdditionalAddressBooksAction]): new method that updates the
3565 user settings with the list of addressbook he has subscribed to.
3567 * UI/Contacts/UIxContactsAddressBooksSelection.m: new component
3568 module for the address book selector.
3570 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
3571 a toolbar with two buttons ("add" and "remove") to manage the
3572 additional addressbooks a user might subscribe to.
3574 * UI/WebServerResources/ContactsUI.js: added code to handle
3575 "external addressbooks" from the Javascript point-of-view, by
3576 extending existing methods and adding code for the "add ab" and
3577 "remove ab" buttons.
3579 * UI/WebServerResources/generic.js: moved extensions methods to
3580 DOM elements to separate files for better clarity.
3582 * UI/Common/UIxPageFrame.m ([UIxPageFrame -pageContentClasses]):
3583 new method that returns "pageContent" as class, but also "popup"
3584 for the DIV where the page content lies, so that we can manipulate
3585 the content of popup's with CSS identifiers.
3587 2006-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3589 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
3590 -displayStyle]): new method that returns a string containing the
3591 css style relative to the current appointment cell. This code is
3592 currently inactive but might be reused later.
3594 * UI/WebServerResources/SchedulerUI.js: added code to handle the
3595 display of the selected day (the day pointed by the mouse, or the
3596 current day when changing the view).
3598 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
3599 -dayCellClasses]): new method that returns a string containing the
3600 css classes applicable to the current cell, depending on the
3601 position of the day in the week, the day of today and the
3604 * UI/Scheduler/UIxCalCalendarsListView.m ([UIxCalCalendarsListView
3605 -currentContactAptBorder]): new method that returns the
3606 appropriate border color for the specified user.
3608 * SoObjects/Appointments/SOGoAppointmentObject.m
3609 ([SOGoAppointmentObject
3610 -saveContentString:contentStringbaseVersion:baseVersion]):
3611 overloaded method that parse new events and detects if they have
3612 an organizer or not. If they are new and have no organizer set
3613 (Sunbird/Lightning...), the owner of the event is set as
3616 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: new
3617 category that provides facility methods and interfaces to the
3620 * SoObjects/Contacts/product.plist: give full access to ANY
3621 authenticated user, not just the owner (to every objects...).
3623 2006-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3625 * UI/WebServerResources/UIxFreeBusyUserSelector.js: make sure
3626 every replica widgets are declared as such to their master
3627 counterpart. Take the days into account when displaying the time
3628 range taken by the appointment.
3630 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
3631 -getICalPersonsFromValue:selectorValue]): method taken from
3632 UIxFreeBusyUserSelector, that is shared both by
3633 UIxFreeBusyUserSelector and UIxFreeBusyUserSelectorTable.
3635 * SoObjects/Appointments/SOGoAppointmentFolder.m
3636 ([SOGoAppointmentFolder
3637 -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.
3639 * UI/Scheduler/UIxFreeBusyUserSelectorTable.[hm]: new subcomponent
3640 derived and taken as a subset of UIxFreeBusyUserSelector that
3641 implements the table part of the FreeBusy view. Most of the
3642 methods of UIxFreeBusyUserSelector relative to that table were
3643 moved into UIxFreeBusyUserSelectorTable, which can also be used as
3644 a standalone view for AJAX operations.
3646 2006-10-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3648 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3649 -vCard]): change reverted.
3651 * UI/Contacts/UIxContactEditor.m: check whether the client contact
3652 folder has selector "globallyUniqueObjectId" before calling that
3655 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3656 -vCard]): the "setVClass" NGVCard method really is "setClass"
3659 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3660 ([SOGoContactLDAPFolder -_searchAttributes]): fixed typo to
3661 request the "streetAddress" instead of the "streetaddress".
3662 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): lookup
3663 mails that *contain*, and not just *start with* the search
3666 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3667 -vCard]): mark address returned from LDAP as the work address.
3669 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: made the whole
3670 span covered with the anchor, not only the textual information
3673 * UI/Templates/SchedulerUI/UIxCalMainView.wox: specify the type
3674 argument (event or task) to newEvent in the appointmentListMenu.
3675 Make the appointmentsListView display the appointmentsListMenu.
3677 * UI/SOGoUI/SOGoAptFormatter.m: enlarge the text size limit from
3678 12 to 50 before displaying "...".
3679 ([SOGoAptFormatter -fullDetailsForApt::]): display location only
3680 if its length > 0, whether location itself is nil or not...
3681 ([SOGoAptFormatter -tooltipForApt::_refDate]): display information
3682 of which the length > 0.
3684 2006-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3686 * UI/WebServerResources/UIxAppointmentEditor.js: correctly handles
3687 french and ISO dates.
3689 * UI/Scheduler/UIxFreeBusyUserSelector.[hm]: added code an ivars
3690 from UIxContactSelector to handle contact lists (current and
3691 additional contacts).
3693 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3694 -_freeBusyAsText]): added handling of an "additional"-named query
3695 parameter that describe the number of additional days after
3696 enddate that should be returned.
3698 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3699 -_responseForResults:results]): give priority to results with
3700 "c_uid" fields. If none returned, use the first contact received.
3702 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3703 -extractQuickFieldsFromEvent:_event]): changed "TENTATIVE" code to
3704 2 and "CANCELLED" to 0.
3706 2006-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3708 * UI/WebServerResources/UIxAppointmentEditor.js: handle conversion
3709 of start and end dates to short string dates.
3711 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3712 -readFreeBusyAction]): new method that returns an array of numbers
3713 corresponding to the state in the freebusy of each "quarter of an
3714 hour" between the "sday" and "eday" date parameters passed in the
3715 url. This permits to handle the display of the freebusy with Ajax
3717 ([SOGoUserHomePage -_freeBusyAsText]): add 2 days to the end date
3718 since the free busy displays 2 days ahead.
3720 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3721 -contactSearchAction]): new action that returns the uid and the
3722 username + email of the user whose name contain the value of the
3723 "search" url parameter.
3725 * SoObjects/Appointments/SOGoAppointmentFolder.m
3726 ([SOGoAppointmentFolder
3727 -fetchFreebusyInfosFrom:_startDateto:_endDate]): added fields
3728 useful for the computing of the status of the freebusy.
3730 * UI/Scheduler/UIxFreeBusyUserSelector.m ([UIxFreeBusyUserSelector
3731 -init]): new component that incarnates a user selector for events
3732 inspired by the new one found in Thunderbird Lightning.
3734 2006-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3736 * UI/WebServerResources/generic.js: added code to enable or
3737 disable anchor visually (following our internal algorithm).
3739 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -init]):
3740 added new "url" ivar with its classic accessors.
3741 ([UIxComponentEditor -urlButtonClasses]): new method that returns
3742 the class strings for the url button on the appointment/task
3743 editor (depending on the validity of the url).
3745 * UI/Templates/SchedulerUI/UIxTaskEditor.wox,
3746 UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: start rewriting
3747 the template to match the Lightning's new task/appointment editor.
3749 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor -saveValuesIntoAppointment:_appointment]): initialize url from the components'url.
3751 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveValuesIntoTask:_task]): initialize url from the components'url.
3753 2006-10-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3755 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3756 ([SOGoContactLDAPFolder
3757 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): perform the searchs on objects which start with instead of contain the lookup key.
3759 * SoObjects/Appointments/SOGoAptMailNotification.[hm]: work on
3760 iCalEntityObject instances instead of just iCalEvent's.
3762 * SoObjects/Appointments/SOGoAppointmentFolder.m
3763 ([SOGoAppointmentFolder
3764 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): set ownership of returned records by adding an "owner" key to the resulting dictionaries.
3766 * SoObjects/SOGo/NSObject+Owner.[hm]: removed module since it's a
3767 bad way of handling ownership that way.
3769 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3770 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): search also
3771 on "cn", just like Mozilla.
3773 2006-10-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3775 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]):
3776 "to" should be retained, otherwise it will be autoreleased and a
3779 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3780 -writeAction]): updated method to fetch the card before initing
3783 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3784 -extractQuickFieldsFromTodo:_task]): fixed to use NSNull instead
3787 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
3788 -iCalStringTemplate]): start and due date are now optional.
3790 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
3791 -setDayStartHour:aStartHour]): added a new "isDisabled" ivar with
3792 appropriate accessors to be settable through the templates.
3794 * UI/Scheduler/UIxDatePicker.m ([UIxDatePicker -init]): added a
3795 new "isDisabled" ivar with appropriate accessors to be
3796 settable through the templates.
3798 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3799 -availableCalendars]): new method that list the calendars to which
3800 the user has subscribed.
3801 ([UIxComponentEditor -componentOwner]): returns the owner of the
3804 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3805 -extractQuickFieldsFromTodo:_task]): set the start and enddate of
3806 quickentries to null whenever each or all of them are null, by
3807 providing an impossible timestamp from with NSNotFound as value.
3809 2006-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3811 * UI/WebServerResources/UIxMailEditor.js: update the algorithm
3812 that handles the creation of new fields with the new APIs and the
3813 new node structure on the page.
3815 * UI/Scheduler/UIxAppointmentEditor.m,
3816 UI/Scheduler/UIxTaskEditor.m:
3817 refactored to user UIxComponentEditor as parent class.
3819 * UI/Scheduler/UIxComponentEditor.[hm]: new class module
3820 containing the methods common to the UIxTaskEditor and the
3821 UIxAppointmentEditor.
3823 2006-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3825 * SoObjects/Appointments/SOGoAppointmentFolder.m
3826 ([SOGoAppointmentFolder -doCalendarQuery:context]): now supports
3827 the handling of time-ranges.
3829 * UI/WebServerResources/ContactsUI.js: specify a notification type as
3830 parameters when onConfirmContactSelection in invoked.
3832 * UI/WebServerResources/generic.js: specify a notification type as
3833 parameters when onContactRemove in invoked.
3835 * UI/WebServerResources/SchedulerUI.js: when the user deselects
3836 all calendars, select his entry.
3838 2006-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3840 * UI/WebServerResources/SchedulerUI.js: edit and delete events
3841 with their owner-relative urls. Generate a correct entry in the
3842 css color table when a user is added to the calendars list. Put
3843 the same color next to the user id.
3845 * UI/WebServerResources/generic.js: implemented some new helper
3848 * SoObjects/Appointments/SOGoAppointmentFolder.m
3849 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): don't delete
3850 entries if their owner is not the current user.
3852 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
3853 -displayClasses]): return the correct class for the current event
3854 representation depending on its owner.
3856 * UI/Scheduler/UIxCalCalendarsListView.m: added method to create
3857 and associate a color for each user login depending on its
3858 position in the list.
3860 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView
3861 -currentRowCSSClass]): return the correct class for the current
3862 row depending on the owner of the event.
3864 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
3865 -setColors:colors]): new method to associate a color table with
3866 each user in the list.
3868 * SoObjects/Appointments/SOGoAppointmentFolder.m
3869 ([SOGoAppointmentFolder
3870 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): associate each returned record with the owner of the table they are retrieved from.
3872 * SoObjects/SOGo/NSObject+Owner.[hm]: new extension module to
3873 NSObject to associate an instance with a user.
3875 2006-10-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3877 * UI/WebServerResources/SchedulerUI.js: added handling of multiple
3880 * UI/WebServerResources/ContactsUI.js: added handling of
3881 notification of changes to contact selectors.
3883 * UI/WebServerResources/generic.js: added handling of notification
3884 of changes to contact selectors.
3886 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3887 -updateCalendarsAction]): proxy method to update the user
3888 preference table with the new selected calendar uids.
3890 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3891 -calendarsContactsAction]): new method.
3893 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector -setCheckedBoxes:boxes])
3894 ([UIxContactSelector -setHasCheckBoxes:aBool])
3895 ([UIxContactSelector -isCheckBoxChecked]): new accessors method to
3896 permit the drawing of checkboxes instead of card icons.
3898 * UI/Scheduler/UIxCalCalendarsListView.m: new component class that
3899 wrap a selector the the "Calendars" tab.
3901 * UI/Contacts/UIxContactsCalendarsSelection.m: buttons for the
3902 new user calendar selector.
3904 2006-10-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3906 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: time ranges
3907 may cover hour 0 to hour 23.
3909 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
3910 -iCalStringFromQueryParameter:format:]): dates explicitly set to
3913 * UI/WebServerResources/SchedulerUI.js: manage both lists of
3914 objects wrt to the toolbar actions.
3916 * UI/WebServerResources/generic.js: added code to the "String"
3917 class to decode number-encoded char entities.
3919 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3920 -batchDeleteAction]): new method to delete selected entries in the
3923 * SoObjects/Appointments/SOGoAppointmentFolder.m
3924 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): new method
3925 that delete identified entries in batch.
3927 * UI/SOGoUI/UIxComponent.m ([UIxComponent
3928 -jsCloseWithRefreshMethod:methodName]): new method with explicit purpose.
3930 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]),
3931 UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
3932 -saveAction]), UI/MailerUI/UIxMailEditor.m ([UIxMailEditor
3933 -sendAction]), UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3935 return a UIxJSClose component if everything went fine.
3937 * UI/Scheduler/UIxTaskEditor.h: interface extracted from
3940 * UI/Scheduler/UIxAppointmentEditor.h: interface extracted from
3941 UIxAppointmentEditor.m.
3943 * UI/Common/UIxJSClose.[hm]: new UIxComponent designed to display
3944 a very light page with javascript code to close a window, by
3945 calling a method on the opener if specified. This component is
3946 designed to work as a response to form postings.
3948 2006-10-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3950 * SoObjects/Appointments/SOGoTaskObject.[hm]: clone of
3951 SOGoAppointmentObject adapted for the handling of tasks.
3953 * SoObjects/Appointments/NSArray+Appointments.[hm]: category
3954 extracted from SOGoAppointmentObject.
3956 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
3957 -saveUrl]): returns the url needed to POST the new form to.
3958 redirect the user to <aptid>/editAsAppointment instead of /edit,
3959 so that SOGoAppointmentFolder can return the correct object type.
3961 * SoObjects/SOGo/NSObject+AptComparison.m ([NSObject
3962 -compareAptsAscending:_other]): accept empty start or end dates.
3964 * SoObjects/Appointments/SOGoAppointmentFolder.m
3965 ([SOGoAppointmentFolder
3966 -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.
3967 ([SOGoAppointmentFolder -doCalendarQuery:context]): fetch
3968 components of type "vtodo" as well as "vevent".
3969 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): if the
3970 url specified ends with AsTask or AsAppointment, returns the
3971 an object of the appropriate class, otherwise deduce it from its
3972 content if the HTTP method is "PUT", otherwise read its type from
3975 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3976 -extractQuickFieldsFromTodo:_task]): extract quick fields from
3979 * UI/Scheduler/UIxCalView.m ([UIxCalView
3980 -fetchCoreAppointmentsInfos]): replacement methods for
3981 fetchCoreInfos but by retrieving object with component "vevent".
3982 ([UIxCalView -fetchCoreTasksInfos]): same as above for "vtodo"
3985 * UI/Scheduler/UIxCalTasksListView.[hm]: clone of
3986 UIxCalAptListView adapted for the handling of tasks.
3988 * UI/Scheduler/UIxTaskProposal.[hm],
3989 UI/Scheduler/UIxTaskView.[hm], UI/Scheduler/UIxTaskEditor.[hm]:
3990 clones of the UIxAppointment* classes for the handling of tasks.
3992 * UI/WebServerResources/UIxTaskEditor.js: clone of
3993 UIxAppointmentEditor adapted for the handling of tasks.
3995 * UI/WebServerResources/SchedulerUI.js: added support for tasks.
3996 Scroll the daily view to the appropriate hour when an appointment
3997 is selected in the appointments list.
3999 2006-10-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4001 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4002 -setDayStartHour:aStartHour]): specifies the user timezone on the
4005 * UI/Scheduler/UIxAppointmentEditor.m: indicate DTSTAMP with "GMT"
4008 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate -adjustedDate])
4009 ([NSCalendarDate -driftedDate]): methods made useless by a better
4010 comprehension of the NSTimeZone API...
4012 2006-10-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4014 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): call
4015 new methods from the NSCalendarDate methods.
4017 * SoObjects/SOGo/NSCalendarDate+SOGo.m: module replacing and
4018 extending UI/Scheduler/NSCalendarDate+Scheduler.m.
4020 +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).
4021 ([NSCalendarDate -adjustedDate]): this method returns another
4022 instance set to the correct hour after the original date was set
4023 from a non-GMT timezone. This date can be used for storage.
4024 ([NSCalendarDate -driftedDate]): this method does exactly the
4025 opposite of -adjutedDate, that is, it enables the method
4026 hourOfDay, minuteOfHour etc... to return the values according to
4027 the original date's timezone. This date CANNOT be used for storage.
4029 * UI/Scheduler/NSCalendarDate+Scheduler.m ([NSCalendarDate
4030 -shortDateString]): new method that will return a "short date
4031 string" (yyyymmdd) from a calendar date object.
4033 * UI/SOGoUI/UIxComponent.m ([UIxComponent
4034 -_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.
4036 * Main/sogod.m (main): initialize the NSTimeZone's defaultTimeZone
4037 to the value of SOGoServerTimeZone or "Canada/Eastern" if not found.
4039 2006-10-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4041 * UI/WebServerResources/SchedulerUI.js: added code to scroll the
4042 view of the day at the height of hour 8:00.
4044 * UI/Scheduler/UIxCalView.m ([UIxCalView -dayStartHour]): returns 0.
4045 ([UIxCalView -dayEndHour]): returns 24.
4047 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView -defaultAction])
4048 ([UIxContactFoldersView -newAction]): invoke
4049 _selectActionForApplication: on self with the proper attribute too.
4051 * UI/Contacts/UIxContactsSelectionViewContainer.m: removed since
4052 we now use the action mechanism in UIxContactsListView to keep the
4053 same view for the contact selectors and the regular contact view.
4055 * UI/Contacts/UIxContactsListViewContainer.[hm]: replaces
4056 UIxContactsListViewContainerBase.[hm]
4058 * UI/Contacts/UIxContactsListView.[hm]: replaces UIxContactsListViewBase.[hm]
4060 * UI/WebServerResources/generic.js: generalized emailstring
4061 handling functions. Generalized address book access functions.
4063 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
4064 -isPopup]): return YES if the "popup" query parameter is set.
4066 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4067 -defaultAction]): keep the url parameters when redirecting.
4068 ([UIxContactFoldersView -selectForSchedulerAction])
4069 ([UIxContactFoldersView -selectForMailerAction]): new action
4070 methods for the /scheduler-contacts and /mailer-contacts invocations.
4072 * SoObjects/SOGo/SOGoObject.m: compose the action url using the
4073 newly available NSString+URL category.
4075 * SoObjects/SOGo/NSDictionary+URL.m ([NSDictionary
4076 -asURLParameters]): handle dictionary entries which could be
4077 instances of NSArray rather than NSString.
4079 * SoObjects/SOGo/NSString+URL.m ([NSString
4080 -composeURLWithAction:actionparameters:urlParametersandHash:useHash]): when composing the url, remove the encoded parameters first since they will be added later.
4081 ([NSString -urlWithoutParameters]): new method that returns the
4082 url without its parameters.
4084 * SoObjects/SOGo/NSString+iCal.h: deleted obsolete file.
4086 * SoObjects/SOGo/NSDictionary+URL.[hm],
4087 UI/SOGoUI/NSString+URL.[hm]: moved from UI/SOGoUI/.
4089 * UI/WebServerResources/UIxMailEditor.js: add support for
4090 additions of different types (to, cc, bcc) of recipients from the
4093 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): added the
4096 * UI/Contacts/UIxContactsMailerSelection.m,
4097 UI/Contacts/UIxContactsSchedulerSelection.m: classes replacing
4098 UI/Contacts/UIxContactsSelectionView.m to provide a different set
4099 of widgets depending on the application invoking the contact list.
4101 2006-09-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4103 * UI/WebServerResources/ContactsUI.js: hide the current contact
4104 whenever the user changes of contact folder.
4106 * UI/WebServerResources/UIxContactEditor.js: the contact UID is
4107 now provided by the template when loading the page.
4109 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
4110 -iCalPersonWithUid:uid]): new method taken from removed module
4113 2006-09-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4115 * UI/Scheduler/UIxAppointmentView.m ([UIxAppointmentView
4116 -categoriesAsString]): same as below.
4118 * UI/Scheduler/UIxAppointmentEditor.m: adapted by using the new
4119 vcalendar API's iCalEvent instead of the removed SOGoAppointment.
4121 * SoObjects/Appointments/SOGoAppointmentObject.m
4122 ([SOGoAppointmentObject -calendarFromContent:cnt]): new helper method.
4123 ([SOGoAppointmentObject -firstEventFromCalendar:calendar]): new
4126 * SoObjects/Appointments/SOGoAppointmentFolder.m
4127 ([SOGoAppointmentFolder -doCalendarQuery:context]): added a
4128 hackish test to detect whether the request concernes VEVENT's or
4129 anything else. Return events only in the former case.
4130 ([SOGoAppointmentFolder
4131 -fetchOverviewInfosFrom:_startDateto:_endDate]): retrieve the
4132 c_name quickfield so that the calendar list can identify the
4133 appointments with their complete "filename".
4135 * OGoContentStore/OCSiCalFieldExtractor.m: use CardGroup's
4136 groupsOfClass:fromSource: to parse the given vcalendar.
4138 * UI/Scheduler/iCalRecurrenceRule+SOGo.m: removed obsolete class.
4140 * UI/Scheduler/SOGoAppointment+UIx.h: removed obsolete class.
4142 * SoObjects/SOGo/SOGoAppointmentICalRenderer.[hm]: removed
4145 * SoObjects/SOGo/SOGoAppointment.[hm]: removed obsolete class.
4147 2006-09-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4149 * SoObjects/Appointments/SOGoAppointmentFolder.m
4150 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): be
4151 sensitive to the CalDAV method names.
4152 ([SOGoAppointmentFolder -doCalendarQuery:context]): method for the
4153 "calendar-query" CalDAV method name.
4155 * UI/WebServerResources/ContactsUI.js: removed a lot of useless
4156 code coming originally from MailerUI.js.
4158 * UI/WebServerResources/UIxContactEditor.js: imitate the
4159 Thunderbird address book by completing the display name with the
4160 content of the first and last name fields, until the display name
4161 is modified manually.
4163 * UI/WebServerResources/generic.js: added a "trim" method to the
4166 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
4167 -displayName]): new method that returns the display name from "cn"
4168 or from the "displayName" key if found.
4170 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4171 -initSnapshot]): check if "[card n]" returns anything to avoid a
4174 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): new method
4175 that returns an unparsed doctype definition for the pages.
4177 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4178 -vCard]): set the card's fn to attribute "displayName" if found
4181 2006-09-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4183 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4184 -vCard]): handle the "streetAddress" and "l" fields.
4186 * UI/Templates/MailerUI/UIxMailEditor.wox: arranged the message
4187 header fields by converting the tables to DIVs and SPANs.
4189 * UI/WebServerResources/generic.css: attempted unification of font
4190 families and size across all the elements. changed the
4191 logConsole's "position" from "fixed" to "absolute" to avoid
4194 2006-09-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4196 * UI/WebServerResources/ContactsUI.js (uixDeleteSelectedContacts):
4197 empty the contact view when the current contact is being deleted.
4199 * UI/WebServerResources/MailerUI.js (newContactFromEmail): fully
4200 parse the email field and provide the address full name if found
4201 as the "contactFN" parameter.
4203 * UI/WebServerResources/generic.js (openMailTo): do not give a
4204 name to the opened window so that serveral ones can be opened at
4207 * UI/MailPartViewers/UIxMailPartTextViewer.m
4208 ([UIxMailPartTextViewer -flatContentAsString]): override method by
4209 replacing carriage returns with "<br />" in the result string from
4210 super's implementation.
4212 * UI/Contacts/UIxContactView.m ([UIxContactView
4213 -_urlOfType:aType]): don't manage non-mailto urls through
4214 javascript, let the user decide what's best for him.
4216 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4217 -newAction]): transfer all the query parameters by using the
4218 "asURLParameters"'s result string from [self queryParameters].
4220 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4221 -initSnapshot]): retrieve "contactEmail" and "contactFN" from the
4222 query parameters and put their values (if any) into the snapshot.
4224 * UI/Contacts/UIxContactView.m ([UIxContactView -note]): convert
4225 carriage-returns to "<br />".
4226 ([UIxContactView -workCompany]): explicitly initialize company to
4227 nil if org is nil or empty.
4229 * UI/WebServerResources/UIxContactEditor.js: updated validation
4230 code after we added and renamed some fields.
4232 * UI/WebServerResources/ContactsUI.js: added code to cache contact
4233 cards and to handle card updates.
4235 2006-09-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4237 * UI/Contacts/UIxContactView.m ([UIxContactView -hasOtherInfos]):
4238 test the length of the returned string since they will never be
4241 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor -saveAction]):
4242 return self if the process went successful, returns an exception
4243 otherwise (and only otherwise...).
4245 * OGoContentStore/OCSContactFieldExtractor.m
4246 ([OCSContactFieldExtractor -extractQuickFieldsFromVCard:_vCard]):
4247 adapted method to the new VCard api. Since the cards are stored in
4248 vcard format, we no longer deal with a dictionary but with a
4251 2006-09-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4253 * UI/Contacts/UIxContactView.m ([UIxContactView -preferredEmail]):
4254 return a string with a "mailto" url.
4255 ([UIxContactView -_urlOfType:aType]): generic method to return a
4256 url string with a html anchor pointing to it.
4258 * UI/Contacts/UIxContactEditor.[hm]: UIxContactEditorBase renamed
4259 since subclass "UIxContactEditor" did nothing. Implemented code to
4260 display and modify the values parsed from the vcards, displayed in
4261 a way similar to the Thunderbird addressbook.
4263 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4264 -save]): new dummy method.
4266 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
4267 -save]): made method void.
4269 2006-09-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4271 * UI/Contacts/UIxContactView.m: added many wrapper methods to
4272 display blocks of data à la Thunderbird Addressbook. If data is
4273 available, those wrappers (around the NGVCard methods) will
4274 enclose the results in a proper HTML output with the correct label
4275 (if present), otherwise it will return an empty string.
4276 ([UIxContactView -vcardAction]): new action to return the contact
4277 as text/vcard (for exporting).
4279 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4280 +contactEntryWithName:aNamewithLDAPEntry:anEntryinContainer:aContainer]): adapted the mapping of the LDIF data with the new NGVCard API.
4282 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
4283 -vCard]): create a new NGVCard instance when no data is available
4285 ([SOGoContactGCSEntry -save]): save the vCard using the new
4286 "versitString" API method/message.
4288 * UI/Contacts/UIxContactView.h: separated interface from
4291 * UI/WebServerResources/ContactsUI.js: add-ed code to download card
4292 views and display them beneath the list.
4294 2006-09-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4296 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -userTimeZone]): retain
4297 the timezone even when it's the server timezone.
4299 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
4300 -privateContacts:inContext:]): no long configure the calendar
4301 object with the user's timezone since it's now accessible
4302 application-wide throught the SOGoObject methods.
4304 * UI/SOGoUI/UIxComponent.[hm]: removed the "viewTimeZone" ivar and
4305 method. Removed the "backendTimeZone" method.
4307 * UI/MainUI/SOGoUserHomePage.[hm]: made a subclass of UIxComponent
4308 instead of SoComponent.
4310 * SoObjects/Appointments/SOGoAppointmentObject.m:
4311 ([SOGoAppointmentObject -viewTimeZoneForPerson:_person]): returns
4312 [self serverTimeZone] instead of "EST" (which was removed).
4314 * SoObjects/Appointments/SOGoAppointmentFolder.[hm]: removed the
4315 "timeZone" ivar and its accessors.
4317 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -serverTimeZone]): new
4318 centralized method returing the timezone configured in the
4319 userdefaults db or "Canada/Eastern" if missing.
4320 ([SOGoObject -userTimeZone]): new centralized method returing the
4321 timezone of the current user or the server timezone if missing
4322 from the user configuration table.
4324 2006-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4326 * UI/WebServerResources/SchedulerUI.js: implemented caching of
4329 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]):
4330 return a path based on the object's context instead of the first
4331 level in SOGo's object hierarchy...
4333 2006-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4335 * UI/Templates/SchedulerUI/UIxCalDayTable.wox: day columns can now
4338 * UI/Templates/SchedulerUI/UIxCalDateSelector.wox: pass the user's
4339 timezone ([self viewTimeZone]) to the WEMonthOverview component to
4340 avoid a confusion with the days.
4342 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: appointments
4345 * UI/WebServerResources/SchedulerUI.js: implemented a mechanism to
4346 imitate Sunbird's synchronization between the 3 visible views.
4348 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): make
4349 sure the numbers in dateString are formatted so as to take 4 chars
4350 for the year and 2 for the day and the month, otherwise
4351 NSCalendarDate will return a nil date.
4352 ([UIxComponent -applicationPath]): return a path based on the
4353 object's context instead of the second level in SOGo's object
4356 2006-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4358 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): add the
4359 user's timezone abbreviation to the date string passed as parameter to
4360 NSCalendarDate to generate an accurate date instance. Do the same
4361 when no date is specified and today is chosen.
4363 * UI/WebServerResources/UIxAppointmentEditor.js: convert the
4364 form's time values to integers before comparing them.
4366 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -currentStartTime])
4367 ([UIxCalAptListView -currentEndTime]): initialize the resulting
4368 dates timezone with [self viewTimeZone].
4370 * UI/SOGoUI/UIxComponent.m ([UIxComponent -init]): new
4371 "viewTimeZone" ivar destined to hold an instance of the user's
4373 ([UIxComponent -viewTimeZone]): take the timezone from the user's
4376 2006-08-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4378 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: completely
4379 rearranged the layout.
4381 * UI/WebServerResources/UIxAppointmentEditor.js: added code to
4382 manage showing and hiding appointment details.
4384 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
4385 -privateContacts:inContext:]): init the SOGoAppointmentFolder's
4386 timezone by taking the current user's timezone setting.
4388 * SoObjects/Appointments/SOGoAptMailNotification.m: same as below.
4390 * SoObjects/Appointments/SOGoAppointmentObject.m
4391 ([SOGoAppointmentObject -changeParticipationStatus:inContext:]):
4392 set default timezone to EST, although this code should be
4393 rewritten to handle a system and a user default value.
4395 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4396 -takeValuesFromRequest:_rqinContext:_ctx]): enhanced method to
4397 take the values from the hour and minute INPUTs when data is
4398 POSTed since we no longer use the UIxTimeSelector component.
4399 ([UIxTimeDateControl -selectableHours])
4400 ([UIxTimeDateControl -selectableMinutes]): new methods used by the
4401 template SELECTs to display reasonable and acceptable values
4402 instead of all the possibilities.
4404 * UI/WebServerResources/generic.js: adapted code for the new
4405 implementation of the UIxContactSelector component (added a
4406 "remove" button, removed the previous INPUT and replaced them with
4407 links of class "button").
4409 * UI/Scheduler/UIxTimeDateControl.h: separated interface from
4410 UIxTimeDateControl.m.
4412 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -currentAppointmentDay])
4413 ([UIxCalDayTable -currentAppointmentHour]): new methods that
4414 returns correctly formatted values used as attributes for JS code.
4416 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
4417 -initialContactsAsString]): renamed implementation of
4418 initialParticipants.
4419 ([UIxContactSelector -currentContactId])
4420 ([UIxContactSelector -currentContactName]): new methods used when
4421 listing the initial contacts in the widget. Currently, both return
4422 the person's cn but the latter should ultimately return a user
4425 * UI/Contacts/UIxContactSelector.h: separated interface from
4426 UIxContactSelector.m.
4428 * UI/Scheduler/UIxDatePickerScript.[hm]: component removed since
4429 all javascript code is now put in Scheduler.js/generic.js.
4431 * UI/Scheduler/NSCalendarDate+UIx.[hm]: category removed, code
4432 moved into NSCalendarDate+Scheduler instead.
4434 * SoObjects/Appointments/SOGoAppointmentFolder.m
4435 ([SOGoAppointmentFolder -setTimeZone:newTZ]): new method to
4436 configure the timezone from SOGoUserFolder when the instance is
4438 ([SOGoAppointmentFolder -viewTimeZone]): MET was removed. Returns
4439 the value of the new "timezone" ivar.
4441 2006-08-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4443 * UI/WebServerResources/SchedulerUI.{css,js}: added a tabview with
4444 the date selector in the first page and the container of the
4445 future calendar selector in the second page.
4447 * UI/WebServerResources/generic.js: added code for handling tabbed
4450 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productFrameworkName]):
4451 returns the bundle name associated to the current running product.
4453 2006-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4455 * UI/WebServerResources/UIxAppointmentEditor.js: fixed the AJAX
4456 exception by invoking a timeout on the opener rather than invoking
4457 the list refresh method.
4459 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]):
4462 * UI/Scheduler/UIxCalWeekView.m ([UIxCalWeekView -weekBeforePrevWeekQueryParameters])
4463 ([UIxCalWeekView -prevWeekQueryParameters])
4464 ([UIxCalWeekView -nextWeekQueryParameters])
4465 ([UIxCalWeekView -weekAfterNextWeekQueryParameters]): new methods
4466 that return the dates relatively to the current day.
4467 ([UIxCalWeekView -lastWeekName])
4468 ([UIxCalWeekView -currentWeekName])
4469 ([UIxCalWeekView -nextWeekName])
4470 ([UIxCalWeekView -weekAfterNextWeekName])
4471 ([UIxCalWeekView -_weekNumberWithOffsetFromToday:offset]): new
4472 methods that returns the label for the corresponding weeks.
4474 * UI/Scheduler/UIxCalDayTable.[hm]: new class module/component
4475 used by UIxCalDayView and UIxCalWeekView to display the events
4476 occuring in one or more days.
4478 2006-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4480 * UI/Scheduler/UIxCalMainView.m: extended class to populate the
4481 entries in the new "monthMenu" and "yearMenu".
4483 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]): new
4484 method to return the current day as a string formatted depending
4485 on the current locale.
4487 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
4488 ([UIxCalAptListView -endDate]): "today" is now the default filter
4489 for displayed events.
4490 ([UIxCalAptListView -currentSerialDay]): new method returning the
4491 date of the current enumerated appointment in serial form
4494 * UI/WebServerResources/SchedulerUI.js: added code to select the
4495 relevant day when an appointment is selected. Added code to popup
4496 a month and a year menu whenever the header entries are clicked in
4497 the calendar widget.
4499 * UI/WebServerResources/generic.js: made addClassName and
4500 removeClassName methods of HTMLElement.
4502 2006-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4504 * UI/WebServerResources/MailerUI.js: fixed the contact creation
4505 from email addresses.
4507 * UI/WebServerResources/generic.js: centralized the search-related
4508 functions here since the same code was used across the 3
4511 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
4512 ([UIxCalAptListView -endDate]): return the required dates needed
4513 depending on the value given to the "filterpopup" url parameter.
4515 * UI/Common/UIxToolbar.m ([UIxToolbar -buttonLabel]): reduced the
4516 code by invoking UIxComponent's labelForKey:.
4518 * UI/SOGoUI/UIxComponent.m ([UIxComponent -labelForKey:]): use
4519 [self pageResourceManager] instead of [self resourceManager].
4521 * UI/Contacts/UIxContactEditorBase.m: invokes
4522 globallyUniqueObjectId on the clientobject's class instead of the
4523 hardcoded "SOGoFolder".
4525 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4526 -newAction]): redirect the "new" action to the personal (default)
4529 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
4530 +objectWithName:inContainer:]): new constructor.
4532 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
4533 -lookupContactWithId:recordId]): always create a contact object,
4534 even if it does not exist.
4536 2006-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4538 * UI/Scheduler/UIxCalMainView.[hm]: new class to serve as a pseudo
4539 component that lays out the different components of SOGoCalendar.
4540 Only serves as an Objective-C counterpart to its xml template.
4542 * UI/Scheduler/UIxCalInlineMonthOverview.h: interface extracted
4545 * UI/Scheduler/UIxCalFilterPanel.[hm]: new class designed to
4546 display a widget to handle the information displayed in the
4547 appointments list. Not currently used, lacks implementation.
4549 * UI/Scheduler/UIxCalDateSelector.[hm]: new class designed to
4550 display a calendar as a dynamic widget from where one can select
4551 the current visible day.
4553 * UI/Scheduler/NSCalendarDate+Scheduler.[hm]: category code
4554 extracted from UIxCalInlineMonthOverview.m.
4556 * UI/Scheduler/UIxDatePicker.m: removed the jsPopup, jsCode and
4557 calendarPageURL methods. The javascript code is handled by .js
4558 files as much as possible...
4560 * UI/WebServerResources/ContactsUI.js,
4561 UI/WebServerResources/MailerUI.js: adapted to the code refactoring
4564 * UI/WebServerResources/SchedulerUI.js: implemented functions to
4565 handle the new widgets. XmlHTTPRequest code taken from
4568 * UI/WebServerResources/generic.js: put some functions related to
4569 element selections as methods to HTMLElement and HTMLTableElement.
4571 * UI/Scheduler/UIxCalAptListView.[hm]: new class designed to
4572 display the list of appointments (embodies the code-size of
4573 UIxCalAptListView; answers to the "aptlist" method).
4575 2006-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4577 * UI/Scheduler/UIxCalWeekOverview.m ([UIxCalWeekOverview
4578 -correctURLAction]): new short action method replacing the method
4579 below by taking far less code.
4581 * SoObjects/Appointments/SOGoAppointmentFolder.m
4582 ([SOGoAppointmentFolder -GETAction:]): removed method. Replaced
4583 with an action in the view-related code.
4585 * UI/Scheduler/UIxAppointmentEditor.m: invoke
4586 "stringByEscapingHTMLString" on the resulting value to avoid
4587 issues with accented characters.
4588 ([-jsCode]): removed method since the javascript code was merged
4589 into SchedulerUI.js.
4591 2006-08-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4593 * UI/Scheduler/iCalPerson+UIx.m ([iCalPerson +personWithUid:]):
4594 new class method that returns an iCalPerson based on the UID given
4597 * UI/Contacts/UIxContactsListViewContainerBase.m:
4598 UIxContactsListViewContainer renamed to serve as a base class for
4599 the contact lists in both the contact editor and the contact
4602 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4603 ([SOGoContactLDAPFolder
4604 -LDAPSetHostname:setPort:setBindDN:setBindPW:setContactIdentifier:
4605 setUserIdentifier:setRootDN:]): an LDAP field specifying the
4606 loginname of the users can now be specified.
4608 * UI/WebServerResources/generic.js: added code to manage contact
4609 lists through the new implementation of the UIxContactSelector.
4611 * UI/Templates: put the templates related to SchedulerUI in its
4614 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
4615 -asDictionaryWithAttributeNames:withUID:andCName:cName]): add an
4616 entry for "uid" with the field name representing the login name of
4617 the user in the corresponding LDAP branch.
4619 2006-08-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4621 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
4622 -lookupName:_keyinContext:_ctxacquire:_flag]): when the HTTP
4623 request is a PUT, always create an entry, even if we're not sure
4626 2006-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4628 * UI/WebServerResources/ContactsUI.js: implemented live-search.
4630 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
4631 -appendSystemSourcesInContext:context]): populated method with
4632 code that creates entries mapped to instances SOGoContactFolder,
4633 based on the configuration found in the NSUserDefaults under the
4634 key "SOGoLDAPAddressBooks".
4635 ([SOGoContactFolders
4636 -lookupName:nameinContext:contextacquire:acquire]):
4637 "contactsources" do not exist anymore, SOGoContactFolder was split
4638 into two classes: SOGoContactGCSFolder and SOGoContactLDAPFolder
4639 and one protocol: SOGOContactFolder, instead.
4640 ([SOGoContactFolders -contactFolders]): new accessor used by the
4641 views of SOGoContactXXXFolder to list the possible sources.
4643 * SoObjects/Contacts/SOGoContactObject.h: new protocol that
4644 defines the methods that UIxContactsView, ..Editor and so on...
4647 * SoObjects/Contacts/SOGoContactFolder.h: new protocol that
4648 defines the methods that UIxContactsListViewBase expects as well
4649 as the data fields returned in the contact lists.
4651 * SoObjects/Contacts/SOGoContactLDAPFolder.[hm]: new class that
4652 returns entries an LDAP server. Conforms to the new
4653 SOGOContactFolder protocol.
4655 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: new class that
4656 returns a vCard based on contact entries from an LDAP server.
4657 Conforms to the new SOGOContactObject protocol.
4659 * SoObjects/Contacts/NGVCardSimpleValue+Contact.m
4660 ([NGVCardSimpleValue -vCardEntryString]): generates the correct
4661 entry for the textual representation of the vCard.
4663 * SoObjects/Contacts/NGVCardSimpleValue+Contact.[hm]: new class
4666 * SoObjects/Contacts/SOGoContactGCSEntry.[hm]: new module name of
4667 "SOGoContactObject".
4669 * SoObjects/Contacts/NGVCard+Contact.m ([NGVCard -asString]): new
4670 method that generates a textual representation of the vcard.
4672 * SoObjects/Contacts/NGVCard+Contact.[hm]: new class extension.
4674 * SoObjects/Contacts/SOGoContactGCSFolder.[hm]: new module name of
4675 "SOGoContactFolder".
4677 * SoObjects/Contacts/SOGoContactSource.h,
4678 SoObjects/Contacts/SOGoPersonalAB.[hm]: unused classes and
4681 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
4682 -singleAttributeWithName:key]): new method that returns the first
4683 object associated with an ldap key (where generally one value is
4686 -asDictionaryWithAttributeNames:attributeNamesandCName:cName]):
4687 map the entry into an NSDictionary for processing by
4688 UIxContactsListViewBase.m with the least possible overhead.
4690 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: new class
4693 2006-08-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4695 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
4696 -privateContacts:inContext:]): now returns an instance of
4699 * UI/Contacts/UIxContactsListViewContainer.m
4700 ([UIxContactsListViewContainer -contactFolderName]): new method to
4701 return the absolute path to the current contact folder, called
4702 from within the template.
4704 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
4705 JS code to initialize the 'currentContactFolder' generic var.
4707 * SoObjects/Contacts/SOGoContactFolder.m ([SOGoContactFolder
4708 +contactFolderWithSource:inContainer:andName:]): new class
4709 method meant to return an instance connected to the specified
4710 source. Currently useless but won't be anymore in the next few
4713 * SoObjects/SOGo/SOGoUserFolder.h: commented out declaration of
4714 the "lookupFreeBusyObject" method since it does not exist.
4716 * UI/Contacts/UIxContactFoldersView.[hm]: new class module serving
4717 as a "view" for the SOGoContactFolders object. Does nothing but
4718 redirect the browser to the URL of the personal address book of
4719 the user. It does not even have a template.
4721 * SoObjects/Contacts/SOGoPersonalAB.[hm]: new class module
4722 implementing the SOGoContactSource protocol. Does nothing
4723 currently but will be used to implement access to the personal
4724 address book of the user stored in the SOGo database.
4726 * SoObjects/Contacts/SOGoContactSource.h: new "SOGoContactSource"
4727 protocol defining an API common to all possible types of contact
4730 * SoObjects/Contacts/SOGoContactFolders.[hm]: new class module
4731 serving as the root of the contact folders available to the
4732 current user. Correctly lists the contact sources in webdav.
4734 2006-08-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4736 * UI/MailerUI/UIxMailAccountsView.m ([UIxMailAccountsView
4737 -composeAction]): new action method that permits external object
4738 to write a message from the default (primary) account.
4740 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
4741 -initSnapshot]): new method with code taken from "defaultAction"
4742 but needed for others.
4743 ([UIxContactEditorBase -writeAction]): new action designed to
4744 compose the correct URL needed to obtain the MailerUI's email
4745 editor with the correct "mailto" parameter.
4747 * UI/Common/UIxSortableTableHeader.m: moved from MailerUI to
4748 Common so that other modules can use it.
4750 * UI/Contacts/UIxContactsListViewContainer.m: container to make it
4751 easier to manage both ajax and non-ajax requests.
4753 * UI/Contacts/UIxContactsFilterPanel.m: clone of
4754 UIxMailFilterPanel, but applicable to contact lists.
4756 * SoObjects/Contacts/NSDictionary+Contact.m ([NSDictionary
4757 -vcardContentFromSOGoContactRecord]): use the new standard methods
4758 created for each type of entry. If a line is determined to not
4759 contain information, it will be skipped.
4761 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
4762 +initialize]): init defaultMailDomain with the user default
4763 "SOGoDefaultMailDomain".
4765 2006-08-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4767 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
4768 -saveAction]): reorganized methods to only have ONE return point.
4769 Invoke saveRecord: directly on the clientObject instead of
4770 saveContentString, which does the same thing anyway.
4772 * SoObjects/Contacts/NSDictionary+Contact.m
4773 ([NSDictionary -vcardContentFromSOGoContactRecord]): extension
4774 method to convert the dictionary returned with the user submission
4775 to a record in VCARD format to be stored in the database.
4777 2006-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4779 * UI/WebServerResources/MailerUI.js: when opening the context menu
4780 of the message list, select the message below the mouse cursor and
4781 deselect the other selected messages temporarily. This mimics the
4782 behaviour of Thunderbird for that matter and was already
4783 implemented for the entries of the folder tree.
4785 * UI/MailerUI/UIxMailFolderMenu.m ([UIxMailFolderMenu
4786 -iconForMenuItem]): new method that returns the fully qualified
4787 relative URL to the icon representing the mailbox, or the default
4788 mailbox icon if needed.
4790 * UI/SOGoUI/UIxComponent.m ([UIxComponent
4791 -urlForResourceFilename:filename]): automatically return an empty
4792 string whenever the filename passed as argument is nil.
4794 * UI/WebServerResources/MailerUI.js: open the mailboxes with the
4795 "desc" parameter set to 1 so that they are sorted in descending
4796 order by default. Also, added "onHeaderClick()", triggered by
4797 clicking on the message list header elements.
4799 * UI/MailerUI/UIxMailSortableTableHeader.m
4800 ([UIxMailSortableTableHeader -isSortedDescending]): same as below.
4802 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
4803 -isSortedDescending]): defaults to "YES" when the sort order is
4806 2006-07-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4808 * UI/WebServerResources/MailerUI.js:
4809 - message cache: set the max num of cached messages to 20. Limit
4810 the cached message size to 30000 bytes.
4811 - ajax: when a message request is called while one is already
4812 being performed, the latter will be cancelled. Idem when
4813 retrieving the content of a mailbox.
4814 - folder tree: when a mailbox is selected because of the URL
4815 requested (initMailboxSelection), the dtree is expanded throughout
4816 the mailbox entry's parent hierarchy to ensure it is made visible
4817 when the page is being displayed. (new function: expandUpperTree).
4818 - mailbox loading: when loading a mailbox where a message was
4819 previously selected, we invoke its url with the "pageforuid"
4820 parameter correctly specified. During callback processing, we scan
4821 the table for the related row and reselect it.
4822 Also, the message area is set blank before loading any mailbox.
4824 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
4825 -defaultAction]): if the "pageforuid" parameter is passed in the
4826 url, take its value and invoke [self firstMessageOfPageFor:]
4827 consequently to deduce the first message to display. Otherwise,
4828 set it to "idx", otherwise set it to 0.
4829 ([UIxMailListView -firstMessageOfPageFor:]): new method
4830 that determines the first message of the page where the message
4831 passed as parameter is contained.
4833 * UI/WebServerResources/UIxMailListView.js: removed this module,
4834 its code was put in MailerUI.js instead.
4836 2006-07-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4838 * UI/MailerUI/UIxMailFolderMenu.m: a descendent of UIxMailTree
4839 which returns the nodes for the parent specified in "parentMenu".
4840 Used to generate the javascript code for the folder dtree.
4842 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: the components
4843 using that container-template are now using UIxMailMainFrame
4844 since UIxMailPanelFrame had no real interest. File removed.
4846 * UI/WebServerResources/dtree.{css,js}: new files to handle
4847 javascript-generated mailbox tree. Modified from original version
4848 by integrating the previous code with the one we are using for
4849 selections and mailbox handling. Minor visual enhancements too...
4851 2006-07-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4853 * SoObjects/Mailer/SOGoUser+Mail.m: if only one identity is to be
4854 returned, put it in an NSArray before returning it (fixes
4857 2006-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4859 * UI/SOGoUI/NSString+URL.m ([NSString -hostlessURL]): new method
4860 that returns a url string stripped from its "http://hostname"
4863 * UI/SOGoUI/NSDictionary+URL.[hm]: moved from UI/Common.
4865 * UI/SOGoUI/NSString+URL.[hm]: moved from UI/Common.
4867 2006-07-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4869 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
4870 -mailDateFormatter]): retrieve the timezone from the user settings
4871 and pass it to the returned dateFormatter. Also, the dateFormatter
4872 is kept in a static variable to avoid useless
4873 creations/destructions.
4875 * UI/MailerUI/UIxMailFormatter.m ([UIxMailDateFormatter
4876 -setTimeZone:newTimeZone]): new accessor to specify the timezone.
4878 * UI/MailerUI/UIxMailFilterPanel.m ([UIxMailFilterPanel -setSearchCriteria:])
4879 ([UIxMailFilterPanel -searchCriteria]): new methods, similar to
4880 s/Criteria/Text/ to handle the "criteria" form parameter.
4882 2006-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4884 * UI/WebServerResources/uix.css: enhanced the toolbar appearance
4885 to integrate better with the firefox look&feel. Added entries for
4886 the new "menu" DIV class (popup menus).
4888 * UI/WebServerResources/generic.js: added "sanitizeMailTo" which
4889 takes any chunk of text as param, detects the user email and the
4890 optional first and last names and return them in a well-formatted
4891 way. Renamed "getSelection" to "getSelectedNodes" to avoid a
4892 namespace conflict. Added "onMenuClick(node, event, menuId)" to
4893 handle popup menus through "onclick" element attributes (node =
4894 this, event = event and menuId = name of the menu DIV id to
4897 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
4898 -snapshot]): add an entry for "email" into the snapshot
4899 dictionary if a "contactEmail" URL parameter was detected and if
4900 the entry for "email" is empty.
4902 * UI/Contacts/Toolbars/SOGoContactFolder.toolbar: the "new card"
4903 button now invokes the newContact() js function in ContactsUI.js
4904 instead of opening "new" directly. newContact() pops up a window
4905 stripped from its navigation bar.
4907 * UI/Contacts/ContactsUI.js: new module specific to the ContactsUI
4908 bundle (AddressBook).
4910 * UI/Templates/MailerUI/UIxMailView.wox: added a div of class
4911 "menu" and id "addressMenu" have the header email addresses
4912 display it with the new menu code in generic.js.
4914 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: same as below +
4915 replaced the body tables with a div of class "pageContent"
4916 (standardization across the page templates).
4918 * UI/Templates/MailerUI/UIxMailMainFrame.wox: include
4919 productJavaScriptURL and pageJavaScriptURL (conditionnally) since
4920 those are now inherited from UIxPageFrame.
4922 * UI/MailerUI/UIxMailView.js: new file specific to UIxMailView.
4924 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]): if
4925 a "mailto" URL parameter is detected and the "to" array is empty,
4926 initialize "to" with the value of "mailto" before returning it.
4928 * UI/MailerUI/UIxMailEditorAction.m ([UIxMailEditorAction
4929 -composeAction]): rewrote method in a cleaner way and with usage
4930 of the URL extensions to NSString and NSDictionary (see below).
4931 Also, if a "mailto" url parameter is detected, pass it to the
4934 * UI/MailerUI/UIxMailMainFrame.m: subclassed from UIxPageFrame to
4937 * UI/Common/NSDictionary+URL.m ([NSDictionary -asURLParameters]):
4938 returns a parameter string to add to a base URL.
4940 * UI/Common/NSString+URL.m ([NSString
4941 -composeURLWithAction:parameters:andHash:useHash]): new method to
4942 compose a complete URL from an object URL with parameters and an
4943 optional '#' character.
4945 * UI/Common/UIxPageFrame.h: separated interface from
4948 2006-07-07 Wsourdeau Sourdeau <wsourdeau@inverse.ca>
4950 * UI/Scheduler/UIxAppointmentEditor.m: returns yes to "isPopup";
4952 * UI/WebServerResources/generic.js: added code to manage
4953 selections within HTML containers.
4955 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productJavaScriptURL]):
4956 added method to determine the possible URL for a product-specific
4957 javascript filename of the forme <productname>.js.
4958 ([UIxPageFrame -hasProductSpecificJavaScript]): new method.
4959 ([UIxPageFrame -isPopup]): new method to determine whether the
4960 application navigator bar should be displayed (main page) or not
4963 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
4964 -LDAPCheckLogin:_loginpassword:_pwd]): new method to authenticate
4965 the user through LDAP.
4967 2006-07-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4969 * The toolbar code from the MailerUI product was taken, renamed as
4970 "UIxToolBar" and put into UI/Common. Toolbar plists were created
4971 for the Contacts and Scheduler products and put in their respectir
4972 Toolbars/ subdirectories. Finally,
4973 UI/Templates/{UIxToolbarButton,UIxToolbarSeparator}.wox, and
4974 UI/Common/{UIxToolbarButton,UIxToolbarSeparator}.m were removed
4975 and an invocation to the UIxToolbar component was put at the top
4976 of UI/Templaces/UIxPageFrame.wox.
4978 * UI/Common/UIxToolbar.m: new "isLastGroup" method to determine
4979 within the templates whether a separator should be displayed.
4981 * UI/Common/UIxToolbar.m ([UIxToolbar -hasButtons]): new method
4982 that returns NO if the toolbar is empty.
4984 2006-07-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4986 * UI/Templates/UIxPageFrame.wox: replaced central table with a DIV.
4988 * UI/Common/UIxToolbarSeparator.m, UI/Common/UIxToolbarButton.m:
4989 new toolbar objects.
4991 * UI/Templates/UIxPageFrame.wox: use the exact html code as below.
4993 * UI/Templates/MailerUI/UIxMailMainFrame.wox: redone the
4994 linkbanner as a DIV instead of a TABLE.
4996 * UI/MailerUI/UIxMailMainFrame.m [UIxMailMainFrame
4998 returns 'YES' to request the display of the navigation bar between
5001 2006-06-15 ludovic@inverse.ca
5003 * It's now possible to set the default
5004 domain using for email using the
5005 SOGoDefaultMailDomain preference key.
5007 2006-06-15 ludovic@inverse.ca
5009 * Initial import of SOGo from trunk.