1 2007-11-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3 * SoObjects/SOGo/SOGoGCSFolder.m ([-compare:otherFolder]): method
4 moved into the SOGoFolder class.
6 * SoObjects/Appointments/SOGoAppointmentObject.m
7 ([SOGoAppointmentObject -saveContentString:_iCalinUIDs:_uids]):
8 simplified method by directly building a similar appointment
9 object with the current folder as container.
11 * SoObjects/Contacts/SOGoContactLDAPFolder.m
12 ([SOGoContactLDAPFolder
13 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
14 take the content of an object returned by
15 lookupName:inContext:acquire: instead of the dictionary passed as
16 parameter since it represents a flattened entry return by
17 lookupContactsWithFilter...
19 * SoObjects/Contacts/SOGoFolder+CardDAV.m: NSObject+CardDAV
20 category renamed to SOGoFolder+CardDAV.
22 * SoObjects/SOGo/SOGoParentFolder.m: no longer a subclass of
23 SOGoObject, but of SOGoFolder instead.
25 * SoObjects/SOGo/SOGoUserFolder.m: no longer a subclass of
26 SOGoGCSFolder, but of SOGoFolder instead.
28 * SoObjects/Appointments/SOGoAppointmentFolder.m
29 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): fixed
30 to take the new SOGoParentFolder class into account. Also, create
31 the personal folder if it doesn't exist.
33 * SoObjects/SOGo/SOGoFolder.[hm]: new class module implementing
34 the parent of all SOGo containers.
36 * SoObjects/SOGo/SOGoGCSFolder.[hm]: SOGoFolder class renamed to
39 2007-11-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
41 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection
42 -getAddressesFromFormValues:_dict]): take NSString and NSArray
43 values. Ignore addresses with a length of 0.
45 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -mailAccounts]): we now
46 fetch the accounts from the user defaults and create default
49 2007-11-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
51 * UI/MailPartViewers/UIxMailPartTextViewer.m
52 ([UIxMailPartTextViewer -flatContentAsString]): re-added
53 conversion of line-break to sequences of HTML "BR", with a fast
56 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
57 -flatContentAsString]): simplified method now that we know
58 -[NSString stringWithData:usingEncodingNamed:] has a more robust
61 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
62 -showToAddress]): the answer is cached.
64 * UI/Common/UIxObjectActions.m ([UIxObjectActions +initialize]):
65 read "SOGoACLsSendEMailNotifications" from the user defaults to
66 determiner whether to send an email when a user is added or
67 removed from an object's acl.
69 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
70 -contentForEditing]): make sure the htmlContent flag is set to NO
71 when we select the textual part. Also we select only the relevant
74 * UI/MailerUI/WOContext+UIxMailer.m ([-mailSubjectFormatter]):
77 * UI/MailerUI/UIxMailView.m ([UIxMailView -messageSubject]): new
78 method replacing -objectTitle, written like the ones below.
80 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
81 -messageSubject]): rewrote method to act the one below.
83 * UI/MailPartViewers/UIxMailPartMessageViewer.m
84 ([UIxMailPartMessageViewer -messageSubject]): new method that
85 returns the decoded mail subject or "Untitled" if the subject is
88 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
89 -decodedSubject]): new method that invoke -decodedSubject from the
90 NSString and NSData class, depending on the identity of the
91 subject obtained from the envelope.
93 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
94 -subjectForReply]): take the value of -[SOGoMail decodedSubject]
95 instead of the subject of the envelope.
96 ([SOGoMailObject -filenameForForward]): same as above.
97 ([SOGoMailObject -subjectForForward]): same as above.
99 * SoObjects/Mailer/NSString+Mail.m ([NSString -decodedSubject]):
100 same as below for NSString.
102 * SoObjects/Mailer/NSData+Mail.m ([NSData -decodedSubject]): new
103 method that decodes the subject of a mail taken as an NSData
104 instance. Handling the exceptions and the badly formatted headers.
106 * UI/MailerUI/UIxSubjectFormatter.[hm]: dropped class module.
108 2007-11-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
110 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
111 -deleteEntriesWithIds:ids]): make sure the objects returned by
112 lookupName:... are not instances of NSException.
114 2007-11-03 Ludovic Marcotte <ludovic@inverse.ca>
116 * UI/Scheduler/UIxAppointmentEditor.m
117 Fixed monthly recurrences support.
119 2007-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
121 * SoObjects/Appointments/SOGoAppointmentObject.m
122 ([SOGoAppointmentObject -deleteWithBaseSequence:]): an email was
123 sent when modifying an event, when the event was considered
124 relevant. The same thing is now implemented for event deletion.
126 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
127 -primaryFetchProfile]): make sure that the deserialized "values"
128 is an instance of NSMutableDictionary, otherwise we override it
131 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
132 -contentForReply]): make use of the SOGoMailReply WO page.
134 * SoObjects/Mailer/SOGoMailReply.[hm]: new class module copied
135 from SOGoMailForward to handle mail replies instead. Only three
136 methods remaining: date, from and messageBody. The latter is
139 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
140 -fetchMailForForwarding:sourceMail]): fetch attachments for
143 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
144 -hasMessageAttachment]): initialize hasAttachment with "NO" to
145 avoid false positives.
147 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event])
148 ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]):
149 set title to an empty string where the event/task summary is null.
151 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
152 -setHeaders:newHeaders]): make sure there is a message id in the
153 headers dictionary, if not, generate one.
154 ([SOGoDraftObject -fetchMailForEditing:sourceMail]): retrieve the
155 message id from the existing draft.
156 ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): store the
157 message id in the header map.
159 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
160 -deleteFolderAction]): no longer prefix the target folder with
163 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
164 -listMailboxesAction]): base the folder type on the folder
167 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
168 -lookupName:_keyinContext:acquire:_acquire]): compare the full
169 traversal to the potential looked up folder with the special
170 folder names and return an object with the appropriate
171 SOGoMailFolder subclass.
173 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
174 -traversalFromMailAccount]): don't prepend the whole string with
177 * SoObjects/Mailer/SOGoMailAccount.m
178 ([-lookupSentFolder:_keyinContext:_ctx])
179 ([-lookupDraftsFolder:_keyinContext:_ctx])
180 ([-lookupTrashFolder:_keyinContext:_ctx])
181 ([-lookupFiltersFolder:_key:_ctx]): removed methods.
182 ([SOGoMailAccount -inboxFolderNameInContext:])
183 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
184 ([SOGoMailAccount -sentFolderNameInContext:])
185 ([SOGoMailAccount -trashFolderNameInContext:]): no longer prefixes
186 the resulting name with "prefix" since we might return a nested
188 ([SOGoMailAccount -allFolderPaths]): prefixes all special folder
189 names with "/". Sorts the resulting folder list with
190 localizedCaseInsensitiveCompare: instead of
191 caseInsensitiveCompare:. No longer use the -[lookupXXX] methods
192 that were removed, instead, we choose the appropriate class
193 depending on the folder name. And since we are in SOGoMailAccount,
194 we don't have to compute a traversal path to match the key with
197 -folderWithTraversal:traversalandClassName:className]): new method
198 that returns an instance of the specified SOGoMailFolder subclass,
199 based on the traversal path passed as parameter.
200 ([SOGoMailAccount -inboxFolderInContext:_ctx])
201 ([SOGoMailAccount -draftsFolderInContext:_ctx])
202 ([-sentFolderInContext:_ctx])
203 ([SOGoMailAccount -trashFolderInContext:_ctx]): invoke the new
204 -folderWithTraversal:andClassName: method described above.
206 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
207 -primaryFetchProfile]): make use of -[NSPropertyListSerialization
208 propertyListFromData:mutabilityOption:format:errorDescription:] to
209 deserialize the plist. Removed variant for libFoundation since it
210 should support the above.
211 ([AgenorUserDefaults -generateSQLForInsert])
212 ([AgenorUserDefaults -generateSQLForUpdate]): make use of
213 -[NSPropertyListSerialization
214 dataFromPropertyList:format:errorDescription:] to serialize the
215 plist. Removed variant for libFoundation since it should support
216 the above. Escape the backslashes from the resulting string.
218 2007-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
220 * SoObjects/Mailer/SOGoMailFolder.[hm]: added a new subclass of
221 SOGoMailFolder: SOGoMailSpecialFolder.
223 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
224 -traversalFromMailAccount]): overridden method that returns the
225 initialized mutable string.
226 ([SOGoMailAccount -allFolderPaths]): take the special folder paths
227 with -traversalFromMailAccount and reposition them at the
228 beginning of the list. By creating the special folders during that
229 request, we also make sure that the folder exists thanks to the
230 new initialisation method of the new "SOGoSpecialMailFolder"
232 ([SOGoMailAccount -lookupSentFolder:_keyinContext:_ctx]): new
234 ([SOGoMailAccount -lookupTrashFolder:_keyinContext:_ctx]): new
236 ([SOGoMailAccount -lookupName:_keyinContext:acquire:_flag]): no
237 longer use lookupImap4Folder.
238 ([SOGoMailAccount -lookupImap4Folder:_keyinContext:_ctx]): removed
241 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
242 -traversalFromMailAccount]): new method that returns the full
243 IMAP4 path to the object.
245 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): retain
246 "superUsernames" after fetching it from the ud.
248 2007-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
250 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
251 -eventsListAction]): substitude the start and end date with their
252 UTC counterpart, taking into account the offset from UTC related
253 to those dates instead of the current one. This renders
254 -[UIxCalMainView -userUTCOffset] obsolete because the computings
255 that occured in javascript are now done server-side.
257 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView -userUTCOffset]):
258 removed obsolete method.
260 * SoObjects/Mailer/NSString+Mail.m ([NSString -htmlToText]): new
261 method converting html content to plain text.
263 * SoObjects/Mailer/NSString+Mail.[hm]: new category module
264 enhancing NSString with utility methods pertaining to mail handling.
266 * SoObjects/Mailer/SOGoMailObject.m
267 ([-shouldFetchPartOfType:_typesubtype:_subtype]): removed obsolete method.
269 -addRequiredKeysOfStructure:infopath:ptoArray:keysacceptedTypes:types]):
270 modified method to be always recursive and to take an array of the
271 accepted mime-types as parameter. The returned array now contains
272 the mime-type as well as the part keys.
274 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
275 -contentForEditingOnParts:_prtskeys:_k]): removed obsolete method.
276 ([SOGoMailObject -contentForEditing]): rewrote method to take into
277 account the first text/plain part or the first text/html part
278 converted to text/plain with our new -[NSString htmlToText]
281 * UI/MailerUI/UIxMailActions.m ([-replyToAllAction]): invoke
282 "replyToAll:" with YES as parameter instead of NO.
284 2007-10-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
286 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
287 -davContentType]): ignore any possible parameter taken from the
288 mime-info of the body part.
290 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
291 -lastFirstMessageNumber]): new accessor that returns the first
292 message number of the last series of messages.
293 ([UIxMailListView -fetchKeys]): request the bodystructure for each
295 ([UIxMailListView -hasMessageAttachment]): extract the attachment
296 information from the message bodystructure.
298 2007-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
300 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
301 -GETAction:]): use the "application/octet-stream" mime type for
302 elements of type "application/x-xpinstall" to avoid confusing
305 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -messageCheckList])
306 ([UIxPreferences -itemMessageCheckText])
307 ([UIxPreferences -userMessageCheck])
308 ([UIxPreferences -setUserMessageCheck:newMessageCheck]): new
309 methods for handling the retrieval of new messages automatically.
311 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -messageCheck]): new method
312 that returns the interval of time between automatic message
315 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
316 -defaultAction]): now expunges the last folder marked for expunge.
318 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
319 -trashInContext:_ctx]): now marks the container folder for
322 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
323 -markForExpunge]): new method that marks the folder for the next
324 automatic expunge operation in the user settings.
325 ([SOGoMailFolder -expungeLastMarkedFolder]): new methods that
326 takes the last folder marked for expunge, expunges it and removes
327 it from the user settings, if it exists.
329 2007-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
331 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
332 -messageSubjectCellStyleClass]): added support for replied,
333 forwarded, forwarded and replied mails.
335 * SoObjects/Mailer/NSData+Mail.m ([NSData
336 -bodyDataFromEncoding:encoding]): new utility method that decodes
337 the NSData instance properly depending on the encoding string
340 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
341 -fetchFileAttachmentKeys]): fetch the attachment encoding as well.
343 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
344 -stringForData:_datapartInfo:_info]): simplified by invoking
345 -bodyDataFromEncoding: from our new NSData category methods.
347 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
348 -fetchMailForEditing:sourceMail]): work-around a bug in SOPE-mime
349 where only the body part of the first of the keys fetched was
350 returned. Also decodes the body parts properly following their
353 * SoObjects/Mailer/NSData+Mail.[hm]: new extension module that
354 extends the NSData class with utility methods useful for handling
357 2007-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
359 * SoObjects/SOGo/NSArray+Utilities.m
360 ([NSArray -stringsWithFormat:format]): replace instances of NSNull
363 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
364 -keysWithFormat:keyFormat]): replace instances of NSNull with
367 * SoObjects/Contacts/SOGoContactLDAPFolder.m: if "displayName" is
368 empty, use "c_cn" instead.
370 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
371 ([SOGoMailAccount -draftsFolderInContext:_ctx])
372 ([SOGoMailAccount -sentFolderInContext:_ctx]): no longer make use
373 of the "SOGoSpecialFoldersInRoot" user defaults. The folders will
374 no always be specified from the root instead of sometimes from the
377 2007-10-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
379 * UI/Common/UIxPageFrame.m ([UIxPageFrame -commonLocalizableStrings])
380 ([UIxPageFrame -productLocalizableStrings]): invoke the new
381 +[SOGoUser language] method if the user is nil.
383 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +language]): new method
384 that returns any generically-found language.
385 ([SoUser -language]): modified to call the above.
386 ([SOGoUser -language]): modified to call the above if the user
387 language has a null length.
389 * SoObjects/Contacts/SOGoContactLDIFEntry.m ([SOGoContactLDIFEntry
390 -davEntityTag]): modified to return the "hash" of the vCard string.
392 * UI/MailerUI/UIxMailActions.m ([UIxMailActions
393 -removeAllLabelsAction]): new method that removes all label flags
394 from the associated message.
395 ([UIxMailActions -addLabel1Action]
396 [UIxMailActions -addLabel2Action]
397 [UIxMailActions -addLabel3Action
398 [UIxMailActions -addLabel4Action]
399 [UIxMailActions -addLabel5Action]): new methods that adds label
400 flags to the associated message.
401 ([UIxMailActions -removeLabel1Action]
402 [UIxMailActions -removeLabel2Action]
403 [UIxMailActions -removeLabel3Action
404 [UIxMailActions -removeLabel4Action]
405 [UIxMailActions -removeLabel5Action]): new methods that removes
406 label flags from the associated message.
408 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -msgLabels]):
409 new accessor that returns the labels associated with the message.
411 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
412 -allFolderPaths]): new method that returns all the paths of all
413 the subfolders of the folder object.
414 ([SOGoMailFolder -allFolderURLs]): new method replacing
417 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
418 -aclsForUser:uid]): object inherits the 'SOGoRole_ObjectEditor'
419 role from its parent folder.
421 2007-10-19 Francis Lachapelle <flachapelle@inverse.ca>
423 * SoObjects/SOGo/SOGoUser.m
424 ([SOGoUser -rolesForObject:objectinContext:context]): allow
425 multiple super usernames to be defined. The user default
426 SOGoSuperUsername is renamed SOGoSuperUsernames and must be
429 2007-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
431 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
432 -userInContext:]): override the super method by returning
433 anonymous if the super returns nil.
435 * UI/Common/UIxPageFrame.m ([UIxPageFrame
436 -productLocalizableStrings]): new method that returns the
437 product-specific translation dictionary as a JSON hash.
438 ([UIxPageFrame -commonLocalizableStrings]): same as above but for
439 the "Common" framework.
440 ([UIxPageFrame -setJsFiles:newJSFiles]): new setter that enables
441 the requestor components to require additional Javascript files.
442 This is useful now that all the scripts are loaded at the end of
444 ([UIxPageFrame -additionalJSFiles]): new getter related to the
447 2007-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
449 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -copyAction]):
450 implemented new web method.
452 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
453 -copyToFolderNamed:folderNameinContext:]): new method with the
454 code cut/pasted from -moveToFolderNamed:inContext:.
455 ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]):
456 modified to use the code from -copyToFolderNamed:inContext:, which
457 is common between the two actions.
459 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
460 ([SOGoMailAccount -sentFolderNameInContext:])
461 ([SOGoMailAccount -trashFolderNameInContext:]): modified to take
462 the user settings into account.
464 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -setAsDraftsFolderAction])
465 ([UIxMailFolderActions -setAsSentFolderAction])
466 ([UIxMailFolderActions -setAsTrashFolderAction]): new web methods
467 that change the purpose of the active folder to "Sent", "Drafts"
470 * UI/SOGoUI/SOGoACLAdvisory.m ([SOGoACLAdvisory -subject]):
471 returns the subject as quoted-printable.
473 * UI/SOGoUI/SOGoACLAdvisory.[hm]: added two intermediary classes:
474 SOGoACLAdditionAdvisory and SOGoACLRemovalAdvisory implementing
475 the "aclMethod" method for the subsequent language-dependent
478 * UI/SOGoUI/SOGoFolderAdvisory.m ([SOGoFolderAdvisory -subject]):
479 returns the subject as quoted-printable.
481 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
482 -dealloc]): release item, aptStartDate and aptEndDate.
484 2007-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
486 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
487 -initWithName:newNameinContainer:newContainer]): the owner of a
488 shared folder is set to "nobody" by default.
490 * UI/Common/UIxAclEditor.m ([UIxAclEditor -hasOwner]): new method
491 that returns whether the object has an owner or not.
493 2007-10-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
495 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
496 the folder even if the current user is not its owner.
498 2007-10-10 Ludovic Marcotte <ludovic@inverse.ca>
500 * We now send advisory emails when folders
501 are created / deleted.
503 * Fixed the sending of advisory emails upon
504 ACL changes on folders.
506 2007-10-10 Ludovic Marcotte <ludovic@inverse.ca>
508 * UI/Scheduler/UIxComponentEditor.m
509 Implemented event/task priority support.
511 * SoObjects/Contacts/SOGoContactGCSFolder.m
512 Added CardDAV support.
514 * SoObjects/SOGo/LDAPUserManager.m and SOGoUser.m
515 Implemented From: based on LDAP results based on
516 the MailFieldNames attribute (an array) specified
517 in every LDAP-based authentication sources.
519 * UI/MailPartViewers/UIxMailPartTextViewer.m and
520 UI/WebServerResources/MailerUI.css
521 We avoid replacing "\r\n" and "\n" with <br /> and
522 rather use CSS capabilities for proper formatting.
523 This is _WAY_ faster on very large mails.
525 2007-10-10 Francis Lachapelle <flachapelle@inverse.ca>
527 * UI/Scheduler/UIxComponentEditor.m
528 ([UIxComponentEditor -componentCalendar]): returns the calendar
529 object of the current event.
531 2007-10-05 Ludovic Marcotte <ludovic@inverse.ca>
533 * UI/WebServerResources/MailerUI.js
534 We check if at least one message is selected
535 before performing a Reply/Reply All/Forward
537 * SoObjects/Appointments/SOGoAppointmentFolder.m
538 and others - implemented support for recurring
539 events (with some known limitations right now,
540 all soon to be fixed).
542 2007-10-04 Francis Lachapelle <flachapelle@inverse.ca>
544 * Main/SOGo.m ([SOGo -isUserName:_keyinContext:_ctx]): removed
545 the constraint that a username can't start with a digit.
547 2007-10-02 Francis Lachapelle <flachapelle@inverse.ca>
549 * Moved SOPE/sope-gdl1/GDLContentStore from the default trunk
550 repository to Inverse's branch.
552 2007-09-28 Francis Lachapelle <flachapelle@inverse.ca>
554 * SoObjects/Mailer/SOGoDraftObject.m
555 ([SOGoDraftObject -isValidAttachmentName:_name]): removed
556 constraint on space in file name.
557 ([SOGoDraftObject -saveAttachment:_attachwithMetadata:metadata]):
558 now removes from file name all characters preceding a backslash.
559 This happens with IE7 because the complete attachment file path
562 2007-09-25 Francis Lachapelle <flachapelle@inverse.ca>
564 * SoObjects/Appointments/SOGoAptMailNotification.m
565 ([SOGoAptMailNotification -appointmentURL]): set personal as the
566 default calendar where to add the event.
568 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
569 activate the SOGoUIxDefaultModule user defaults.
571 2007-09-21 Francis Lachapelle <flachapelle@inverse.ca>
573 * UI/SOGoUI/UIxComponent.m
574 ([UIxComponent -shortUserNameForDisplay]): returns the string
575 "wrongusernamepassword" when authentication failed.
577 2007-09-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
579 * UI/MailPartViewers/UIxMailPartICalViewer.m
580 ([UIxMailPartICalViewer -calendarFolder]): returns the "personal"
581 entry of the Calendars parent folder.
583 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
584 -messageSubject]): new accessor method to work-around a problem
585 within SOPE where a subject could be returned as an NSData.
587 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
588 -appendPersonalSources]): make sure the value of the "c_path4" of
589 the returned rows are not NSNull, otherwise, discard them.
591 2007-09-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
593 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
594 -compare:otherFolder]): new overriden method that compares two
595 contact foldes based on their class and then transfer the control
596 to the super method in SOGoFolder.
598 * SoObjects/Contacts/SOGoContactLDAPFolder.m
599 ([SOGoContactLDAPFolder -compare:otherFolder]): new method that
600 compare two contact folders based on their class and then their
603 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -compare:otherFolder]):
604 new method for sorting folders. The folders are compared based on
605 their ownership, whether they are a main folder and finally
606 depending on their display name.
608 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
609 -pathArrayToSOGoObject]): do not reorder the paths if the third
610 element is an instance of NSNull.
612 * SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
613 -subFolders]): returns a sorted array using the "compare:"
616 2007-09-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
618 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
619 -calendars]): also returns the owner of the listed folders.
621 * SoObjects/Appointments/SOGoAppointmentFolder.m
622 ([-deleteEntriesWithIds:ids]): moved method into SOGoFolder.
624 * UI/Scheduler/UIxCalMainView.m ([-batchDeleteAction]): moved
625 method into UIxFolderActions.
627 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
628 -fetchFreeBusyInfosFrom:_startDateto:_endDate]): fetch the
629 freebusy info from the "personal" calendar.
631 * UI/Common/UIxParentFolderActions.m ([UIxParentFolderActions
632 -createFolderAction]): new standardized method for requesting
633 folder creations among gcs-based modules.
635 * UI/Common/UIxParentFolderActions.[hm]: new action class module.
637 * SoObjects/Appointments/SOGoAppointmentFolders.m: new class
638 module, equivalent to the SOGoParentFolder's child
639 SOGoContactFolders, but for calendars.
641 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -labelForKey:key]): new
642 method that returns translated strings for controller bundles
643 (same as what UIxComponent does for view bundles).
644 ([SOGoObject -pathArrayToSOGoObject]): new method that returns
645 the real path to a subscribed folder (if subscribed).
646 ([SOGoObject +globallyUniqueObjectId]): move method from SOGoFolder.
647 ([SOGoObject -globallyUniqueObjectId]): new instance method
648 calling its class equivalent.
650 2007-09-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
652 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage -defaultAction]): test
653 whether the user is logged in and if so, redirect to his/her
655 ([SOGoRootPage -appendToResponse:inContext:]): removed useless
658 2007-09-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
660 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
661 +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
663 ([SOGoFolder -displayName]): new method.
664 ([SOGoFolder -delete]): accept to proceed only if nameInContainer
667 * SoObjects/Contacts/SOGoContactLDAPFolder.m
668 ([SOGoContactLDAPFolder
669 +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
670 renamed from "contactFolderWithName..." for compatibility with SOGoFolder.
672 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
673 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
674 removed method, reimplemented in SOGoFolder.
675 ([SOGoContactGCSFolder -displayName]): removed method,
676 reimplemented in SOGoFolder.
677 ([-delete]): removed method, modified in SOGoFolder.
679 * SoObjects/Contacts/SOGoContactFolders.[hm]: modified class to be
680 a subclass of SOGoParentFolder.
682 * SoObjects/SOGo/SOGoParentFolder.[hm]: new class module derived
683 from SOGoContactFolders and modified to be more content-independent.
685 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -markMessageUnreadAction])
686 ([UIxMailActions -markMessageReadAction]): new methods moved from
687 UIxMailListView and adapted to invoke the client object directly,
688 since the previous versions had to to a lookup from the parent
691 * UI/MailerUI/UIxMailListView.m ([-markMessageUnreadAction]): move
692 method into UIxMailActions.
693 ([-markMessageReadAction]): same as above.
694 ([-viewAction]): removed useless method.
695 ([-javaScriptOK]): removed useless method.
696 ([-isJavaScriptRequest]): removed useless method.
697 ([-lookupActiveMessage]): removed useless method.
699 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
700 -responseWithStatus:status]): new method that returns a WOResponse
701 initialized with the specified status code.
702 ([WODirectAction -responseWith204]): new method that invokes the
703 above one with "204" as parameter.
704 ([WODirectAction -redirectToLocation:newLocation]): rewrote method
705 to make use of -responseWithStatus:.
707 * UI/SOGoUI/UIxComponent.m ([UIxComponent -responseWith204]): new
708 method that returns a WOResponse initialized with the 204 status
711 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sortedUIDs]):
712 always use a "not deleted" search qualifier along with the user
713 qualifier (if present).
715 2007-09-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
717 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
718 -contactSearchAction]): only return the records which have an
721 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
722 -trashInContext:_ctx]): no longer expunge the mailbox after
723 marking a message deleted.
724 ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]): same
727 * UI/MailerUI/UIxMailView.m ([-deleteAction]): removed method.
728 ([-trashAction]): moved method into UIxMailActions.
729 ([-moveAction]): moved method into UIxMailActions.
731 2007-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
733 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
734 ([_UIxHTMLMailContentHandler
735 -endElement:_localNamenamespace:_nsrawName:_rawName]): remove HTML
736 comments from the CSS code, do not add the CSS code to the body
737 content and remove references of body from the CSS declarations.
738 ([UIxMailPartHTMLViewer -cssContent]): new accessor method.
739 ([UIxMailPartHTMLViewer -flatContentAsString]): separated code
740 common with cssContent in a different method and invoke it only
743 * UI/MainUI/SOGoRootPage.[hm]: made a subclass of UIxComponent
744 instead of UIxPageFrame.
746 2007-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
748 * UI/MainUI/SOGoRootPage.m ([-defaultAction]): commented out.
749 ([-appendToResponse:responseinContext:ctx]): commented out.
750 ([SOGoRootPage -connectURL]): new accessor that returns the full
751 url the the "connect" method.
752 ([-connectAction]): rewrote method to return a properly formatted
753 auth. cookie based on the username and password passed as
756 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
757 set the value of the cookie to "discard" and set its expiration
760 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
761 -preprocessCredentialsInContext:context]): consider the user
762 anonymous if the cookie value is "discard".
763 ([SOGoWebAuthenticator
764 -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
765 set the expiration date of the cookie to yesterday.
767 * UI/SOGoUI/UIxComponent.m ([UIxComponent -applicationPath]):
768 returns the path to the application if the clientObject is not a
771 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder +initialize]):
772 moved the requirement of authentication from the SOGo application
775 * SoObjects/Appointments/SOGoAppointmentObject.m
776 ([SOGoAppointmentObject -saveContentString:_iCalbaseSequence:_v]):
777 check whether the new appointment object is still relevant before
778 sending a notification.
780 2007-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
782 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
783 -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
784 render the login page through the SoDefaultRenderer.
786 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage
787 -isPublicInContext:localContext]): new overriden method that
790 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
791 -currentCalendarLogin]): replace css-unsafe characters with _.
793 * UI/SOGoUI/UIxComponent.m ([UIxComponent
794 -shortUserNameForDisplay]): simplified method.
795 ([-user]): removed method since [context activeUser] is as useful.
797 2007-09-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
799 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
800 set the cookie path to "/".
802 * Main/SOGo.m ([SOGo -authenticatorInContext:_ctx]): choose the
803 authenticator based on the request handler key. "dav" returns the
804 SOGoDAVAuthenticator, anything else returns the Web authenticator.
806 * SoObjects/SOGo/SOGoDAVAuthenticator.m: renamed module from
809 * SoObjects/SOGo/SOGoWebAuthenticator.m: new class module
810 implementing a subclass of SoCookieAuthenticator, designed for
811 web-based cookie authentication of users.m
813 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
814 new method that resets the authentification cookie.
816 2007-08-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
818 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
819 -checkLogin:loginToCheckandPassword:passwordToCheck]): initialize
820 didBind to NO to make sure no false authentication is returned if
821 the bind operation is not executed.
823 2007-08-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
825 * SoObjects/Mailer/SOGoDraftObject.m: added support for the
826 "In-Reply-To" header field when replying.
828 * UI/MainUI/SOGoUserHomePage.m: add the "c_" prefix to the quick
829 table field names that are queried.
831 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
832 -iCalStringForFreeBusyInfos:_infosfrom:_startDateto:_endDate]):
833 add the "c_" prefix to the quick table field names that are
836 2007-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
838 * SoObjects/Appointments/SOGoAppointmentFolder.m
839 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): add
840 "personal" to the ocs path of the appointment folder.
842 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
843 -flatContentAsString]): use latin1 when the encoding is not
844 specified, and to reencode data chunk which were not correctly
845 decoded with the original charset.
847 * SoObjects/Appointments/SOGoAppointmentFolder.m ([SOGoAppointmentFolder -aclUsersForObjectAtPath:objectPathArray])
848 ([SOGoAppointmentFolder -aclsForUser:uidforObjectAtPath:objectPathArray])
849 ([SOGoAppointmentFolder -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray])
850 ([SOGoAppointmentFolder
851 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]):
852 override those methods to use the "personal" additional directory.
854 * SoObjects/SOGo/SOGoUserFolder.m ([-ocsPrivateCalendarPath]):
855 append "/personal" to the calendar path to simulate a single
856 calendar in a choice of many.
858 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
859 -lookupName:_keyinContext:acquire:_acquire]): moved the lookup
860 methods back here. Moved the folder existence check here, and do
861 it on self only when the lookup happens for a non-folder object.
862 This permits to accept entries for folders with parents who
865 2007-08-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
867 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
868 -shouldTakeValuesFromRequest:requestinContext:context]): same as
871 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
872 -shouldTakeValuesFromRequest:requestinContext:context]):
873 redesigned method since any method called can be received from a
874 POST or a GET. Instead we check the method call itself and we
875 accept only if it has the "save" prefix.
877 * SoObjects/Appointments/SOGoAptMailNotification.m
878 ([SOGoAptMailNotification -getSubject]): returns the subject an a
879 quoted-printable encoded string, if needed.
881 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
882 -asQPSubjectString:encoding]): moved method into
883 NSString+Utilities.m.
885 2007-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
887 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
888 -messageForwardingList])
889 ([UIxPreferences -itemMessageForwardingText])D
890 ([UIxPreferences -userMessageForwarding])
891 ([UIxPreferences -setUserMessageForwarding:newMessageForwarding]):
892 new template methods for manage the user preference regarding
895 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -language]): change the
896 algorithm to return, in order, the user's defined language or the
897 first browser language or, finally, the default language.
898 ([SOGoUser -messageForwarding]): new method that returns the user
899 preference for message forwarding: "inline" or "attached",
900 defaulting to "attached".
902 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
903 -contentForInlineForward]): new method that returns the content of
904 the message for inline forwarding based on the SOGoMailForward
907 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
908 -fetchMailForForwarding:sourceMail]): check the user preference
909 for message forwarding and compose inline forwarded messages if required.
911 * SoObjects/Appointments/SOGoCalendarComponent.m
912 ([SOGoCalendarComponent
913 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
914 now use a template based on the language returned from the
917 * SoObjects/Mailer/SOGoMailEnglishForward.m: new module containing
918 a subclass of SOGoMailForward for English locale.
920 * SoObjects/Mailer/SOGoMailFrenchForward.m: new module containing
921 a subclass of SOGoMailForward for French locale.
923 * SoObjects/Mailer/SOGoMailForward.[hm]: new module class that
924 helps build template for inline forwarded messages.
926 2007-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
928 * UI/SOGoElements/SOGoIEConditional.m: new extension module class
929 to handle "<var:if-ie>" template tags.
931 * UI/SOGoElements: new extension bundle containing sogo-specific
934 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
935 -takeValuesFromRequest:_rqinContext:_ctx]): save the category
936 selected in the dialog.
937 ([UIxComponentEditor -setComponent:newComponent]): retrieve the
938 first category, if ever, of the calendar entity.
940 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
941 -composeAction]): restored method since it is needed by the
944 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
945 -composeAction]): the address fields should be arrays and not
948 * UI/Common/UIxPageFrame.m ([UIxPageFrame -buildDate]): new method
949 that returns the build date of SOGo in the template.
951 2007-08-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
953 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
954 -_flattenedRecords:records]): when the c_cn field is empty,
955 returns set a formatted string with the concatenation of
956 c_givenname and c_sn as the displayName.
958 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
959 -isValidMailAccountName:_key]): prevent unknown accounts from
962 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
963 -pathToAttachmentObject]): we no longer need the filename
964 extension for SoLookup...
966 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
967 -lookupName:_keyinContext:_ctxacquire:_flag]): do not require the
968 filename to have an extension, and thus accept any filename.
970 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
971 -currentCName]): new method that returns the c_name of the
972 contact, correctly escaped to be passed by url afterwards.
974 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
975 ([UIxMailPartHTMLViewer -flatContentAsString]): pass the NSData
976 instance of [self decodedFlatContent] instead of the buggy
977 NSString from [super flatContentAsString] to the parser.
979 2007-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
981 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -deleteAction]):
982 new category method to reponds to the "delete" web command on
984 ([UIxMailActions -deleteAttachmentAction]): new category method to
985 reponds to the "deleteAttachment" web command on drafts, taking
986 the "filename" url parameter into account.
988 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
989 -contentForEditing]): new method that retrieve the editable mail
991 ([SOGoMailObject -fetchFileAttachmentKeys]): new method that
992 returns the body keys for attached files (parts with a "filename"
995 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
996 -asQPSubjectString:encoding]): do not change the string if the
997 encoded string has the same length (which means it is already
999 ([SOGoDraftObject -fetchMailForEditing:sourceMail]): new method
1000 that retrieve a draft along with its attachments for editing.
1001 ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): no longer
1002 choke if the "to" header field is empty.
1003 ([SOGoDraftObject -delete]): new method to delete the draft folder
1004 whenever operations are done.
1006 2007-08-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1008 * UI/MailerUI/UIxMailEditor.m ([-patchFlagsInStore]): removed
1009 useless stub method, of which the intention was implemented in
1011 ([-lookupSentFolderUsingAccount]): removed obsolete method.
1012 ([-selectedMailIdentity]): removed obsolete method.
1013 ([-lookupSentFolderUsingFrom]): removed obsolete method.
1014 ([-storeMailInSentFolder:_path]): removed obsolete method, of
1015 which the mechanism has been put in -[SOGoDraftObject sendMail]
1017 ([UIxMailEditor -_saveFormInfo], [UIxMailEditor -defaultAction])
1018 ([UIxMailEditor -saveAction], [UIxMailEditor -sendAction]):
1019 adapted algorithms to the new SOGoDraftObject methods.
1020 ([-deleteAction]): removed method since local draft objects cannot
1021 be removed by the user.
1023 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1024 -expungeAction]): new method replacing the one previously found in
1026 ([UIxMailFolderActions -createFolderAction])
1027 ([UIxMailFolderActions -renameFolderAction])
1028 ([UIxMailFolderActions -deleteFolderAction])
1029 ([UIxMailFolderActions -emptyTrashAction])
1030 ([UIxMailFolderActions -subscribeAction])
1031 ([UIxMailFolderActions -unsubscribeAction]): error situations
1032 should have http return code 500 instead of 403.
1034 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1035 -composeAction]): new method replacing the one previously in
1038 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1039 -imap4URLString]): removed overriden method (see below).
1041 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -aclUsers]):
1042 cache the mailbox acl.
1043 ([SOGoMailFolder -aclsForUser:uid]): cache the mailbox acl.
1044 ([SOGoMailFolder -setRoles:rolesforUser:uid]): reset the mailbox
1046 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): modified to use
1047 the new method of determining the users mail accounts.
1049 * SoObjects/Mailer/SOGoMailBaseObject.m ([-imap4URLString]): no
1050 longer adds a "/" at the end of the string (the default for
1051 folders), therefore this will be overriden in SOGoMailFolder
1052 rather than in SOGoMailObject.
1054 * UI/MailerUI/UIxMailListView.m ([-expungeAction]): removed
1055 method, moved into the new UIxMailActions module class.
1057 * SoObjects/Mailer/SOGoDraftsFolder.m ([SOGoDraftsFolder
1058 -newDraft]): new method that returns a new SOGoDraftObject
1059 instance with a unique filename based on the current timestamp and
1060 the "newDraft" prefix.
1062 -lookupName:nameinContext:localContextacquire:acquire]): overriden
1063 method by detecting local drafts with their "newDraft" prefix.
1064 ([SOGoDraftsFolder -isInDraftsFolder]): returns YES.
1066 * SoObjects/Mailer/SOGoDraftsFolder.[hm]: rewrote class module
1067 from scratch by making it a subclass of SOGoMailFolder.
1069 * UI/MailerUI/UIxMailReplyAction.m: removed obsolete class
1072 * UI/MailerUI/UIxMailForwardAction.m: removed obsolete class
1075 * UI/MailerUI/UIxMailEditorAction.[hm]: removed obsolete class
1078 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -init]):
1079 new method, initializing the new ivars: IMAP4ID, headers, text,
1080 sourceURL and sourceFlag.
1081 ([-spoolFileManager], [SOGoDraftObject -userSpoolFolderPath])
1082 ([-_ensureUserSpoolFolderPath])
1083 ([-saveMimeMessageToTemporaryFileWithHeaders:])
1084 ([SOGoDraftObject -mimeMessageWithHeaders:_headers])
1085 ([-deleteTemporaryMessageFile:], [-delete], [-content])
1086 ([-GETAction:_ctx], [-DELETEAction:_ctx], [-fetchParts:])
1087 ([-uid], [-flags], [-size], [-envelope]): removed methods.
1088 ([SOGoDraftObject -storeInfo]): rewrote method to take the new
1090 ([SOGoDraftObject -setSourceURL:newSourceURL])
1091 ([SOGoDraftObject -setSourceFlag:newSourceFlag]): new accessor
1092 methods to store the url of the original message between accesses
1093 so that, depending on the action taken (forward or reply), the
1094 correct flag can be given.
1095 ([SOGoDraftObject -setIMAP4ID:]): new accessor method that sets
1096 the imap4 id that is returned for the message whenever it is saved
1097 into the drafts folder.
1098 ([SOGoDraftObject -save]): new method that takes in charge the
1099 saving of the message in the IMAP drafts folder.
1100 ([SOGoDraftObject -fetchMailForReplying:sourceMailtoAll:toAll]):
1101 new method that fills the original data of the new message with
1102 the reply content of the original message.
1103 ([SOGoDraftObject -fetchMailForForwarding:sourceMail]): same as
1104 above for message forwarding.
1105 ([-spoolFileManager]): removed useless method (only returned the
1106 default filemanager...)
1107 ([SOGoDraftObject -mimeMessageAsData]): new method that returns
1108 the resulting message as an NSData chunk.
1110 * SoObjects/Mailer/SOGoMailObject+Draft.m: new extension module
1111 containing a rewrite of the mail action methods found in
1112 UI/Mailer/, that needed to be put in the SOGoMailObject class.
1113 ([SOGoMailObject -subjectForReply]): new method that returns a
1114 subject suitable for replies.
1115 ([SOGoMailObject -contentForReply]): new method that returns the
1116 textual content of an email, quoted for replying.
1117 ([SOGoMailObject -filenameForForward]): new method that returns
1118 the name of the filename that should contain the forwarded
1119 message, based on its subject.
1120 ([SOGoMailObject -subjectForForward]): explicit.
1122 2007-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1124 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1125 -mailAccounts]): rewrote method to return the name of the mail
1126 accounts now available with the -[SOGoUser mailAccounts] method.
1127 ([UIxMailMainFrame -showLinkBanner]): removed method.
1128 ([UIxMailMainFrame -bannerToolbarStyle]): removed method.
1129 ([UIxMailMainFrame -bannerConsumeStyle]): removed method.
1130 ([UIxMailMainFrame -rootURL]): removed method.
1131 ([UIxMailMainFrame -userRootURL]): removed method.
1132 ([UIxMailMainFrame -calendarRootURL]): removed method.
1133 ([UIxMailMainFrame -contactsRootURL]): removed method.
1134 ([UIxMailMainFrame -hasErrorText])
1135 ([UIxMailMainFrame -errorText])
1136 ([UIxMailMainFrame -errorAlertJavaScript]): removed methods.
1137 ([-composeAction]): removed method. Now provided by
1138 UIxMailAccountActions.
1139 ([UIxMailMainFrame -setHideFolderTree:_flag]): removed method.
1140 ([UIxMailMainFrame -hideFolderTree]): removed method.
1141 ([UIxMailMainFrame -treeRootClassName]): removed method.
1142 ([UIxMailMainFrame +initialize]): removed method.
1143 SOGoMailTreeRootClass userdefaults will no longer have any effect.
1145 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
1146 -redirectToLocation:newLocation]): new method that implements the
1147 same functionality as WOComponent.
1149 * UI/Common/WODirectAction+SOGo.[hm]: new class extension module.
1151 * UI/MailerUI/UIxMailView.m ([UIxMailView -mailIsDraft]): new
1152 method that returns whether the current mail is store in the
1153 drafts folder hierarchy.
1155 * SoObjects/SOGo/SOGoUser.m ([-fullEmail]): removed method.
1156 ([-primaryEmail]): removed method.
1157 ([SOGoUser -primaryIMAP4AccountString]): removed method.
1158 ([SOGoUser -mailAccounts]): new method that returns an array
1159 containing description dictionaries for all the user mail
1160 accounts. Each account also contain the user's identities for that
1162 ([SOGoUser -allIdentities]): new utility method that returns all
1163 the user identities on all accounts.
1164 ([SOGoUser -primaryIdentity]): new method return the first
1165 identity of the first account.
1167 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]):
1169 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1170 -isInDraftsFolder]): returns NO.
1171 ([-preferredIdentity]): removed method, replaced with -[SOGoUser
1173 ([SOGoMailAccount -draftsFolderInContext:_ctx]): new method.
1175 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1176 -isInDraftsFolder]): new method that detects if self is contained
1177 by the drafts folder by calling itself on the container object.
1179 * SoObjects/Mailer/SOGoMailAccounts.m ([-fetchAllIdentities]):
1181 ([-fetchIdentitiesWithEmitterPermissions]): removed method.
1182 ([SOGoMailAccounts -toManyRelationshipKeys]): rewrote method to
1183 return the name of the mail accounts now available with the
1184 -[SOGoUser mailAccounts] method.
1186 * SoObjects/Mailer/SOGoUser+Mail.[hm]: removed useless class
1189 * SoObjects/Mailer/SOGoMailIdentity.[hm]: removed useless class
1192 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
1193 -keysWithFormat:format]): method that forward the method of the
1194 same name to each member of the array, considering they all are
1195 instances of NSDictionary.
1196 ([NSArray -objectsForKey:key]): same principle as above.
1197 ([NSArray -flattenedArray]): new method that transforms an array
1198 of arrays into a single array containing all the elements of the
1201 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
1202 -keysWithFormat:keyFormat]): new method inspired by the python
1203 string formatting system and which replaces occurences of "%{key}"
1204 by the corresponding keys.
1206 2007-08-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1208 * Main/SOGo.m ([SOGo -run]): check for channel-type specific
1209 sql script before the generic one when initializing mandatory
1212 2007-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1214 * SoObjects/SOGo/NSString+Utilities.m ([NSString
1215 -pureEMailAddress]): new utility method inspired by the
1216 "_rawSender" private method in SOGoDraftObject, which it now
1219 * SoObjects/SOGo/SOGoMailer.m: new abstraction class module that
1220 provides a common API for sending emails, no matter what the
1223 2007-08-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1225 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1226 -quotasAction]): invoke "relativeImap4Name" instead of
1227 "nameInContainer" since the latter also returns the "folder"
1230 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1231 -listMailboxesAction]): declare the output as text/plain in UTF-8.
1233 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1234 -deleteFolderAction]): fixed the url of the destination folder.
1236 * Main/SOGo.m ([SOGo +initialize]): show the build date and
1237 hostname at startup.
1239 2007-08-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1241 * SoObjects/Appointments/SOGoCalendarComponent.m
1242 ([SOGoCalendarComponent
1243 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
1244 set the mail date to the current date string returned by our
1245 rfc822DateString extension method.
1247 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1248 -_gcsFoldersFromFolder:): ignore the personal folders who are
1249 returned but don't really exist.
1251 2007-08-02 Francis Lachapelle <flachapelle@inverse.ca>
1253 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView _responseForResults:]):
1254 has to return only one element.
1256 2007-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1258 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
1259 -content]): new method returning the decoded content of the
1260 corresponding attachment as an NSData instance.
1261 ([UIxMailPartViewer -filename]): if the "filename" parameter of
1262 the metadata parameterList is empty, try to find out the filename
1263 from the "disposition" metadata returned with the BODYSTRUCTURE
1266 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1267 -composeAction]): prefix the INBOX folder with "folder".
1269 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailBaseObject
1270 -relativeImap4Name]): return nameInContainer stripped from its
1271 first 6 characters since all folder names are prefixed with
1274 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1275 -imap4URLString]): invoke -relativeImap4Name instead of
1276 "nameInContainer" since the former will return the fixed IMAP4
1277 foldername and the latter the SoObject name.
1279 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1280 +initialize]): we now fetch the "BODYSTRUCTURE" key instead of "BODY".
1282 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderNameInContext:])
1283 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
1284 ([SOGoMailAccount -sieveFolderNameInContext:_ctx])
1285 ([SOGoMailAccount -sentFolderNameInContext:])
1286 ([SOGoMailAccount -trashFolderNameInContext:]): prefix the folder
1287 names with "folder".
1288 ([SOGoMailAccount -inboxFolderInContext:_ctx])
1289 ([SOGoMailAccount -sentFolderInContext:_ctx])
1290 ([SOGoMailAccount -trashFolderInContext:_ctx]): no longer prefix
1291 the folder names with "folder" since they are prefixed earlier.
1293 2007-07-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1295 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
1296 ([-sentFolderInContext:], [-trashFolderInContext:]): folder keys
1297 all starts with "folder".
1299 * SoObjects/SOGo/SOGoObject.m ([SOGoObject +initialize]): no
1300 longer declare security info from here.
1302 * SoObjects/Mailer/SOGoMailFolder.m
1303 ([-isMessageKey:_keyinContext:_ctx]): removed useless method.
1304 ([SOGoMailFolder -lookupName:_keyinContext:acquire:_acquire]):
1305 folder names now always start with "folder".
1307 * SoObjects/Mailer/SOGoMailAccount.m
1308 ([-lookupName:inContext:acquire:]): folder names now always start
1311 2007-07-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1313 * UI/MailerUI/UIxMailForwardAction.m ([UIxMailForwardAction
1314 -forwardAction]): adapted to the new saveAttachment:withMetadata:
1317 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -saveAction]): added
1318 code to save the attached filenames with the filename returned by
1319 the web server as well as their mime types.
1321 * UI/MailPartViewers/UIxMailPartMessageViewer.m ([UIxMailPartMessageViewer -fromAddresses])
1322 ([UIxMailPartMessageViewer -toAddresses])
1323 ([UIxMailPartMessageViewer -ccAddresses]): new methods returning
1324 the corresponding fields separated with a ", " (if needed).
1326 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
1327 -saveAttachment:_attachwithMetadata:metadata]): new method
1328 replacing -saveAttachment:withName: and which takes a dictionary
1329 as parameter with the filename and the mime type of the
1331 The mimetype is then saved in a hidden text file.
1332 ([SOGoDraftObject -contentTypeForAttachmentWithName:]): if exists,
1333 take the mime type from the hidden text file related to the
1336 * SoObjects/Contacts/SOGoContactGCSFolder.m ()
1337 ([SOGoContactGCSFolder
1338 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
1339 return records if the db records are > 0 and not just > 1...
1341 2007-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1343 * UI/Contacts/UIxContactsListView.m ([-displayName]): removed
1345 ([UIxContactsListView -defaultSortKey]): changed to "displayName".
1347 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1348 ([SOGoContactLDAPFolder
1349 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
1350 translate the returned records to a normalized form.
1352 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1353 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
1354 translate the returned records to a normalized form.
1356 * UI/Scheduler/UIxCalListingActions.m,
1357 UI/Contacts/UIxContactsListView.m, SoObjects/SOGo/SOGoUser.m,
1358 SoObjects/SOGo/AgenorUserDefaults.m,
1359 SoObjects/Contacts/SOGoContactGCSFolder.m,
1360 SoObjects/Appointments/SOGoAppointmentFolder.m,
1361 OGoContentStore/OCSiCalFieldExtractor.m,
1362 OGoContentStore/OCSContactFieldExtractor.m: prefixed all quick
1363 table fields with "c_".
1365 2007-07-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1367 * SoObjects/SOGo/LDAPSource.m ([LDAPSource +initialize]): query
1368 the values for SOGoLDAPQueryLimit and SOGoLDAPQueryTimeout from
1369 the application settings. If set, both limit will influence the
1370 maximum size of the resultsets and the time taken to solve them.
1371 ([LDAPSource -_initLDAPConnection]): initialize the limits.
1373 2007-07-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1375 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder -davNamespaces]): added new overriden
1376 method that declares the DAV namespace related to CardDAV.
1377 ([SOGoContactGCSFolder -davComplianceClassesInContext:]): new
1378 method that declares the "access-control" and "addressbook-access"
1379 classes to the list.
1381 * SoObjects/Appointments/SOGoAppointmentFolder.m
1382 ([-lookupActionForCalDAVMethod:]): removed method.
1383 ([SOGoAppointmentFolder -davNamespaces]): added new overriden
1384 method that declares the DAV namespace related to CalDAV.
1386 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davNamespaces]): new
1387 optional method for subclasses which handle specific extensions to
1388 the DAV protocol: CardDAV or CalDAV.
1390 -lookupName:lookupNameinContext:localContextacquire:acquire]):
1391 new overriden method that handles dav invocations for extensions
1392 to DAV by returning an appropriate SoSelectorInvocation.
1394 * SoObjects/SOGo/NSString+Utilities.m ([NSString
1395 -asDavInvocation]): new method returning a dictionary with a "ns"
1396 key representing the dav namespace and a "method" key representing
1397 the dav method name of the request.
1399 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
1400 +initialize]): scan the value of SOGoUIxUserCanChangePassword.
1402 ([UIxPreferences -shouldDisplayPasswordChange]): new template
1403 method that returns the value of SOGoUIxUserCanChangePassword.
1405 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
1406 scan the value of SOGoUIxDefaultModule. If not set, the default
1407 module defaults to "Calendar".
1408 ([SOGoUserHomePage -defaultAction]): redirect the user to the
1409 value of "SOGoUIxDefaultModule".
1411 2007-07-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1413 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1414 -contactInfos]): cache the results to avoid multiple invocations.
1416 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1417 ([SOGoContactLDAPFolder -toOneRelationshipKeys]): check whether we
1418 really should return something or if we fake to return nil...
1420 2007-07-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1422 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): set
1423 acceptAnyUser to YES only when the SOGoAuthentificationMethod user
1424 default is set to "bypass".
1426 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
1427 -checkLogin:_loginpassword:_pwd]): accepts unverified connections
1428 when authMethod is set to "bypass" from now on. This would avoid a
1429 security concern with a default installation of SOGo.
1430 AuthentificationMethod is now prefixed with "SOGo" for better
1433 2007-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1435 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1436 -quotasAction]): new method that returns a json representation of
1439 2007-07-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1441 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1442 -imap4URL]): rewrote method to support accented mailbox names.
1443 ([SOGoMailBaseObject imap4Password]): rewrote to simply use
1444 SOGoAuthenticator's passwordInContext:.
1446 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
1447 -takeValuesFromRequest:_rqinContext:_ctx]): explicitly set the
1448 start and due dates to nil if hasStartDate and hasDueDate are
1451 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
1452 -passwordInContext:context]): made method public.
1454 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
1455 -extractQuickFieldsFromTodo:_task]): set "isallday" and "isopaque"
1456 to false to avoid a null violation.
1458 2007-07-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1460 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1461 -contentAsString]): returns the message encoded in ISO Latin 1
1464 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): read the
1465 SOGoSuperUsername user defaults.
1466 ([SOGoUser -initWithLogin:newLoginroles:newRoles]): simplified
1468 ([SOGoUser -rolesForObject:objectinContext:context]): if the
1469 current user is the superuser, grant him/her the "owner" role.
1471 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
1472 the folder only if the current user is the owner of the future
1475 * SoObjects/Appointments/SOGoCalendarComponent.m
1476 ([SOGoCalendarComponent -contentAsString]): we return the content
1477 based on the permissions returned by the security manager instead
1478 of by looking at the user roles.
1480 * SoObjects/Appointments/SOGoAppointmentFolder.m
1481 ([SOGoAppointmentFolder -calendarFolders]): read the calendar
1482 folders of the user to whom this folder belongs instead of the
1483 active user. This way, a delegate user will be able to have the
1484 same view that the original user has if he connects from his user
1487 * Main/SOGo.m ([SOGo -lookupUser:_keyinContext:]): check if the
1488 user exists before creating the SOGoUserFolder instance. If not,
1491 * UI/MailerUI/UIxMailSourceView.[hm]: new class module designed to
1492 return the message source code in plain text.
1494 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1495 -contentAsString]): returns the message encoded in UTF8.
1497 2007-07-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1499 * OGoContentStore/iCalRepeatableEntityObject+OCS.m
1500 ([iCalRepeatableEntityObject -cycleInfo]): no longer take the
1501 leading tagname into account when serializing the element values.
1503 * Main/SOGoProductLoader.m: only load bundle directories ending
1504 with the "SOGo" extension.
1506 * Main/SOGo.m ([SOGo
1507 -_checkTableWithCM:cmtableURL:urlandType:tableType]): empty the
1508 result set if the query has caused no exception. Otherwise we get
1509 an "evaluation is in progress exception".
1511 2007-06-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1513 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
1514 -generateSQLForInsert]): initialize error to nil before the
1515 serialization. Otherwise the method can get confused if it ever is
1516 initialized to something else.
1518 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
1519 -folderIsMandatory]): returns NO unconditionnally.
1521 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
1522 -appendPersonalSources]): add the "personal" folder to the list of
1523 user folders even if it doesn't exist, so that it is created when
1524 the user accesses it.
1526 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1527 -folderIsMandatory]): returns YES if nameInContainer is set to
1528 "personal", which is the default address book.
1530 * SoObjects/Appointments/SOGoAppointmentFolder.m
1531 ([SOGoAppointmentFolder -folderIsMandatory]): returns YES since
1532 users must have one Calendar folder (one and only one).
1533 ([SOGoAppointmentFolder -_privacySqlString]): unescape the
1534 escaping '\' so make the carriage return a real one. This way,
1535 PgSQL 8 won't complain about escaping the string.
1537 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): new
1538 method that create the folder if considered mandatory.
1539 ([SOGoFolder -folderIsMandatory]): new method that determines
1540 whether the folder should be created automatically or not. To be
1541 overriden by subclasses.
1543 * Main/SOGo.m ([SOGo -run]): override method and create the
1544 missing system tables if needed.
1546 2007-06-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1548 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
1549 -mailDateFormatter]): returns the user's date formatter.
1551 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject -date]):
1552 applies the user timezone to the date object before returning it.
1554 * UI/Common/UIxSortButton.m: removed useless class module.
1556 * UI/Common/UIxSortableTableHeader.m: removed useless class
1559 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1560 -contactInfos]): use the "asc" url parameter instead of "desc" to
1561 determine the ordering.
1562 ([-sortOrdering]): removed method.
1563 ([UIxContactsListView -init]): removed the "searchText" ivar.
1564 (general): the template no longer use the UIxSortableTableHeader
1567 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1568 -defaultSortKey]): default sort following the messages arrival
1569 instead of their date.
1570 ([-isSortedDescending]): removed method.
1571 ([-imap4SortOrdering]): use the "asc" url parameter instead of
1572 "desc" to determine the ordering.
1573 (general): the template no longer use the UIxSortableTableHeader
1576 2007-06-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1578 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sleep]):
1580 ([-setQualifier:_msg], [-qualifier]): removed methods.
1581 ([UIxMailListView -defaultAction]): added code to handle the
1582 search criteria and value passed as url parameters. Also, we now
1583 handle the same search criterias as Thunderbird/Icedove.
1585 2007-06-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1587 * UI/PreferencesUI/UIxJSONPreferences.m ([UIxJSONPreferences
1588 -jsonDefaultsAction]): bug fix: returns a WOResponse instance with
1589 the string instead of the string itself.
1590 ([UIxJSONPreferences -jsonSettingsAction]): same as above.
1592 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): new module
1593 bool var "acceptAnyUser" that is set when the AuthenticationMethod
1594 user default is nil.
1595 ([SOGoUser -initWithLogin:newLoginroles:newRoles]):
1596 unconditionnally returns an instance whenever acceptAnyUser is set.
1598 2007-06-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1600 * Main/sogod.m (main): prevent SOGo from running as root.
1602 2007-06-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1604 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
1605 -setCurrentPassword:newPassword]): new stub method.
1606 ([SOGoUser -dateFormatterInContext:context]): new method that
1607 returns an instance of SOGoDateFormatter configured based on the
1610 * UI/Common/UIxPageFrame.m ([UIxPageFrame
1611 -relativePreferencesPath]): new method.
1613 * UI/Scheduler/UIxComponentEditor.m ([-titleDateFormatter]):
1614 removed useless method.
1616 * SoObjects/SOGo/SOGoDateFormatter.m: rewrote class to accept
1617 different configurable formats (long and short date + time).
1619 * SoObjects/SOGo/SOGoDateFormatter.[hm]: moved from UI/SOGoUI/.
1621 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
1622 -isInternetRequest]): removed method.
1624 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
1625 -jsonRepresentation]): new method with an explicit name.
1627 * UI/PreferencesUI/product.plist: new bundle that provides a web
1628 ui for handling user defaults.
1630 * UI/Scheduler/UIxTaskView.[hm]: removed unused module.
1632 * UI/Scheduler/UIxAppointmentView.[hm]: removed unused module.
1634 * SoObjects/SOGo/WOContext+Agenor.[hm]: removed unused module.
1636 2007-06-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1638 * SoObjects/SOGo/SOGoLRUCache.m: removed unused module.
1640 2007-06-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1642 * UI/Scheduler/NSArray+Scheduler.m ([NSArray
1643 -compareEventsAscending:otherEvent]): no longer use compare: on
1644 the time objects since one of them could be an NSNull, which
1645 crashes when comparing with anything.
1647 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1648 -eventsListAction]): sort events from here.
1649 ([UIxCalListingActions -tasksListAction]): sort tasks from here.
1651 * SoObjects/SOGo/NSObject+AptComparison.[hm]: removed category
1652 module, replaced with NSArray+Scheduler in UI/SchedulerUI/.
1654 * SoObjects/Appointments/SOGoAppointmentFolder.m
1655 ([SOGoAppointmentFolder
1656 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]):
1657 no longer sort elements from here.
1659 2007-06-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1661 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1662 -aclsForUser:uid]): implemented method by forwarding the request
1663 to the container. This fixes a bug where users could no longer
1664 read emails from shared folders.
1666 * SoObjects/Appointments/SOGoCalendarComponent.m
1667 ([SOGoCalendarComponent -init]): "isNew" is no longer defined
1668 here, but rather in its parent class.
1670 * UI/SOGoUI/SOGoDateFormatter.m ([SOGoDateFormatter
1671 -stringForSecondsSinceThe70s:seconds]): new utility method.
1673 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1674 -eventsListAction]): no longer reduce the end day of one day for
1675 all day events since everything has been fixed in
1676 OCSiCalFieldExtractor.
1678 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
1679 -extractQuickFieldsFromEvent:_event]): reduce the seconds/70 of
1680 the end date of all day events of 1 so that they stay on their
1683 2007-06-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1685 * UI/Scheduler/UIxCalMonthView.m: no longer retrieve appointments.
1687 * UI/Scheduler/UIxCalView.m ([-fetchCoreAppointmentsInfos]):
1689 ([-fetchCoreTasksInfos]): removed method.
1691 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1692 -init]): initialize an instance of SOGoDateFormatter.
1693 ([UIxCalListingActions -eventsListAction]): the display start and
1694 end dates are added to the listing for each event.
1696 * UI/Scheduler/UIxCalDayTable.m: no longer retrieve appointments.
1698 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1699 -isAllDay]): returns YES if the "hm" url parameter is set to
1701 ([UIxAppointmentEditor -defaultAction]): if isAllDay, the enddate
1702 is displayed one day earlier.
1704 2007-06-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1706 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1707 -_setupContext]): take the range of dates specified by the popup
1710 * UI/Scheduler/UIxCalListingActions.[hm]: new subclass of
1711 WODirectAction that returns WOResponse objects with the events or
1712 todos satisfying the parameters passed in the url.
1714 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1715 -takeValuesFromRequest:_rqinContext:_ctx]): take the new ivar
1716 "isAllDay" into account and compute the amount of days to pass to
1719 2007-06-06 Francis Lachapelle <flachapelle@inverse.ca>
1721 * SoObjects/SOGo/NSNumber+Utilities.m: initial import.
1722 * SoObjects/SOGo/NSNull+Utilities.m: initial import.
1723 * UI/Scheduler/UIxCalTasksListView.m ([WOResponse -tasksListAction]):
1724 new method that returns a json-formatted array of the visible tasks
1725 for the current user.
1727 2007-06-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1729 * SoObjects/Appointments/SOGoAppointmentObject.m: the owner of the
1730 object must be present in the list of UIDs we delete the object
1731 from. Otherwise Calendar objects having no organizer and no
1732 attendees will remain in their owner's Calendar.
1734 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1735 -_urlPreferringParticle:expectedoverThisOne:possible]): remove the
1736 first 3 elements of the path array if the url returned by
1737 baseURLInContext: returns a hostname.
1739 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1740 -_adjustOwner]): sharedFolderName and otherUsersFolderName may be
1741 nil, in which case a crash happens when calling hasPrefix:.
1742 ([SOGoMailFolder -_sharesACLs]): same as above.
1743 ([SOGoMailFolder -otherUsersPathToFolder]): same as above. If
1744 otherUsersFolderName is nil, we return nil.
1745 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): if we receive
1746 nil from [self otherUsersPathToFolder], we return nil too.
1748 2007-06-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1750 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1751 -_urlPreferringParticle:expectedoverThisOne:possible]): unescape
1752 the result of [self baseURLInContext:] to avoid a double escaping
1753 in the resulting string.
1755 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -aclsForUser:uid]): if
1756 the user has the "ObjectReader" role on the parent container, then
1757 he is granted the "ObjectViewer" role on this object. Same for
1758 "ObjectEraser", although this might change later.
1760 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1761 -toolbar]): determine the toolbar filename based on the
1762 permissions declared by the securitymanager. The role mechanism
1763 has been adjusted on a lowerlevel so we can simplify the code.
1765 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
1766 -initWithName:newNameinContainer:newContainer]): read the content
1767 directly from here. That way we can determine whether the object
1769 ([SOGoContentObject -aclsForUser:uid]): if the object is new and
1770 the ObjectCreator role is enabled, we also grant the ObjectEditor
1771 role to the current user.
1773 * UI/Common/UIxFolderActions.m ([-canAccessContentAction]):
1774 changed the method paradigm to only return HTTP code 204. Not test
1775 is done whatsoever since the security manager does it for us.
1777 * UI/Contacts/UIxContactsListView.m ([-canAccessContentAction]):
1778 removed method because the same exists in UIxFolderActions.m
1780 * UI/Contacts/UIxContactsUserRightsEditor.m
1781 ([UIxContactsUserRightsEditor
1782 -setUserCanReadObjects:userCanReadObjects]): new method.
1784 * SoObjects/SOGo/SOGoPermissions.m: added roles "FolderViewer" and
1785 "FolderEraser" and special permission "Access Object". Removed
1786 role "SOGoMailRole_MessageEraser" since "SOGoRole_ObjectEraser"
1787 can be used instead. Removed "FolderReader" since it is useless.
1789 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
1790 -vCard]): directly use the "content" ivar since it is initialized
1791 during object creation.
1793 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1794 ([SOGoContactLDAPFolder -init]): no longer handle the
1795 nameInContainer no the container ivars. They were removed because
1796 this class is a descendant of SOGoObject which already has them.
1797 ([SOGoContactLDAPFolder -davDisplayName]): new overriden method
1798 returning "displayName".
1799 ([SOGoContactLDAPFolder -isFolderish]): new overriden method
1802 * SoObjects/Appointments/SOGoCalendarComponent.m
1803 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): commented out.
1804 ([SOGoCalendarComponent -findParticipant:user]): new name for
1805 method "participant:".
1806 ([SOGoCalendarComponent -findParticipantWithUID:uid]): same as
1807 findparticipant but taking a uid string as parameter.
1808 ([SOGoCalendarComponent -contentAsString]): don't regenerate the
1809 iCalendar automatically. Instead, this is done only when the user
1810 is a "date and time viewer".
1811 ([SOGoCalendarComponent -aclsForUser:uid]): take delegation roles
1812 (modifier and responder) into account by compiling them with the
1815 * SoObjects/Contacts/SOGoContactFolder.h: removed
1816 "nameInContainer" from the list of required methods.
1818 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
1819 -davContentType]): returns "text/calendar".
1821 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1822 ([SOGoContactLDAPFolder -davResourceType]): declare the correct
1823 groupdav resource-type.
1825 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
1826 -davContentType]): same as below.
1828 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1829 -initWithName:newNameinContainer:newContainer]): new overriden
1830 method setting the custom owner directly.
1832 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
1833 -davContentType]): same as below.
1835 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1836 -davContentType]): same as below.
1838 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davContentType]):
1839 declare "httpd/unix-directory".
1841 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): declare
1842 "UTC" as fallback timezone instead of "Canada/Eastern".
1843 ([-hasEmail:email]): make use of the new NSArray's
1844 containsCaseInsensitiveString: method.
1846 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1847 -davContentType]): declare "message/rfc822" as content type.
1849 * SoObjects/Appointments/SOGoAppointmentFolder.m
1850 ([SOGoAppointmentFolder -_privacySqlString]): "owner" is now an
1852 ([SOGoAppointmentFolder
1853 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): same as above.
1854 ([-fetchContentObjectNames]): commented out method since it was
1855 usefull only for testing Funambol.
1857 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
1858 -containsCaseInsensitiveString:match]): an enhanced version of
1861 * UI/MailerUI/UIxMailView.m ([-isTrashingAllowed]): removed
1863 ([-showMarkDeletedButton]): removed useless method.
1864 ([-showTrashButton]): removed useless method.
1866 * SoObjects/Appointments/iCalEntityObject+SOGo.m
1867 ([iCalEntityObject -userIsParticipant:user]): new proxy method
1868 that invoked isParticipant on self for each possible email
1869 addresses of the user passed as parameter.
1870 ([iCalEntityObject -userIsOrganizer:user]): same as above.
1872 * SoObjects/Appointments/iCalEntityObject+SOGo.[hm]: new class
1875 * SoObjects/Appointments/SOGoAppointmentObject.m
1876 ([SOGoAppointmentObject
1877 -saveContentString:contentStringbaseVersion:baseVersion]): remove
1878 method since an event may not have an organizer.
1880 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1881 -GETAction:localContext]): clarified method. Added support for
1882 content-type (thanks to Helge Hess).
1883 ([SOGoObject -initWithName:_nameinContainer:_container]):
1884 initialize and retain the owner.
1885 ([SOGoObject -davContentType]): returns "text/plain".
1887 2007-05-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1889 * UI/Common/UIxObjectActions.m ([UIxObjectActions
1890 -addUserInAclsAction]): send an acl addition mail.
1891 ([UIxObjectActions -removeUserFromAclsAction]): send an acl
1894 * UI/Common/UIxFolderActions.m ([UIxFolderActions
1895 -_realActionWithFolderName:folderDict]): handle the possible
1896 presence of the "mail-invitation" url parameter. If present, the
1897 user will be redirected to the relevant folder.
1899 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -fullEmail]): new proxy method.
1900 ([SOGoUser -language]): new method that returns the user's
1901 preferred language, or the system's if none has been set yet.
1903 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -davURL]): new method
1904 that returns the full dav url to self.
1905 ([SOGoObject -soURL]): same as above but for the so url (Web UI).
1906 ([SOGoObject -soURLToBaseContainerForUser:uid]): new method that
1907 returns the full so url to the base of the SOGo module to which
1908 self belongs, and for the specified user.
1909 ([SOGoObject -soURLToBaseContainerForCurrentUser]): same as above
1910 but for the current user.
1911 ([SOGoObject -httpURLForAdvisoryToUser:uid]): new protocol method
1912 required by the acl advisory templates and which returns a link
1913 the target user can click to activate its new subscription.
1914 ([SOGoObject -resourceURLForAdvisoryToUser:uid]): same as above
1915 but for inclusion of the application/x-sogo-notification part,
1916 which will be handled by the Lightning enhancer plugin.
1918 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -subscribeAction])
1919 ([UIxMailFolderActions -unsubscribeAction]): new stub methods that
1920 do nothing yet since imap folder subscription is not handled yet.
1922 * SoObjects/SOGo/SOGoContentObject.m
1923 ([-hasSupportForDefaultRoles]): removed method.
1925 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
1926 -getFullEmailForUID:uid]): new method that returns the username +
1929 * SoObjects/Appointments/SOGoCalendarComponent.m
1930 ([SOGoCalendarComponent +initialize]): the default language for
1931 mail templates is now set to English.
1933 * UI/SOGoUI/SOGoACLFrenchRemovalAdvisory.[hm]: new subclass of
1934 SOGoACLAdvisory implementing the french template for user removal
1937 * UI/SOGoUI/SOGoACLFrenchAdditionAdvisory.[hm]: new subclass of
1938 SOGoACLAdvisory implementing the french template for user
1941 * UI/SOGoUI/SOGoACLEnglishRemovalAdvisory.[hm]: new subclass of
1942 SOGoACLAdvisory implementing the english template for user removal
1945 * UI/SOGoUI/SOGoACLEnglishAdditionAdvisory.[hm]: new subclass of
1946 SOGoACLAdvisory implementing the english template for user
1949 * UI/SOGoUI/SOGoACLAdvisory.[hm]: new class module implemented the
1950 supercall of all the acl advistory templates. The model is based
1951 on SOGoAptMailNotification except that the template encapsulates
1952 the message to be sent. Later, we might create a superclass common
1953 to all template-based emails.
1955 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
1956 -addRange:newRange]): new method that store a string
1957 representation of the NSRange passed as parameter.
1958 ([NSMutableArray -hasRangeIntersection:testRange]): tests whether
1959 any range contained in self intersect with the one passed as parameter.
1961 * SoObjects/SOGo/NSString+Utilities.m ([-stringByDetectingURLs]):
1962 store ranges in an array to prevent them from intersecting with
1963 each other during the passes.
1965 2007-05-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1967 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1968 -primaryFetchMailboxInfo]): useless method. Removed.
1970 2007-05-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1972 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1973 -toManyRelationshipKeys]): invoke [self subfolders].
1974 ([SOGoMailFolder -subfolders]): new method containing what used to
1975 be in toManyRelationshipKeys.
1976 ([SOGoMailFolder -subfoldersURL]): same as above but returns imap
1979 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1980 -allFolderPaths]): renamed version of "allFolderPathes", sorted by
1981 named and at the beginning of which we put the predefined folders.
1983 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1984 -emptyTrashAction]): new method inspired by a similar one from
1985 UIxMailListView, to which we added the ability to remove
1988 * UI/MailerUI/UIxMailListView.m ([-emptyTrashAction]): removed
1989 method. Replaced with a similar one in UIxMailFolderActions.
1991 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1992 -renameFolderAction]): implemented method.
1993 ([UIxMailFolderActions -deleteFolderAction]): no longer delete the
1994 specified folder. Instead, we put it in the trash folder.
1996 * UI/MailerUI/UIxMailListView.m ([-createFolderAction]): removed
1997 method, replaced with a similar method in the new
1998 UIxMailFolderAction class module.
1999 ([-deleteFolderAction]): idem.
2001 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
2002 -createFolderAction]): new method implementing subfolder creation.
2003 ([UIxMailFolderActions -renameFolderAction]): new method
2004 implementing subfolder renaming (basic implementation to be
2006 ([UIxMailFolderActions -deleteFolderAction]): new method
2007 implementing folder deletion.
2009 * UI/MailerUI/UIxMailFolderActions.[hm]: new module implementing
2010 web actions related to the handling of imap folder.
2012 2007-05-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2014 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2015 -ownerInContext:localContext]): overriden method because we are an
2016 IMAP4 client and we need a bit more intelligence to deduce the
2017 owner of the current folder.
2018 ([SOGoMailFolder -aclsForUser:uid]): aclForMailboxAtURL might
2019 return an NSException so we need to be careful here to avoid a
2021 ([SOGoMailFolder -aclUsers]): aclForMailboxAtURL might return an
2022 NSException so we need to be careful here to avoid a crash.
2024 * SoObjects/Mailer/SOGoMailAccounts.m
2025 ([SOGoMailAccounts -fetchIdentitiesWithOnlyEmitterAccess:_flag])
2026 there is no longer any concept of Intranet or Internet connection
2029 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2030 -sharedFolderName]): new method.
2031 ([SOGoMailAccount -otherUsersFolderName]): new method.
2033 * UI/MailerUI/UIxMailFolderMenu.[hm]: removed module, obsoleted by
2034 new javascript code and the new UIxMailAccountActions class.
2036 * UI/MailerUI/UIxMailTree.[hm]: removed module, obsoleted by new
2037 javascript code and the new UIxMailAccountActions class.
2039 * UI/MailerUI/UIxMailTreeBlock.[hm]: removed module, obsoleted by
2040 new javascript code and the new UIxMailAccountActions class.
2042 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
2043 -listMailboxesAction]): new method that returns a json-formatted
2044 tree of all the mailboxes available to the current user.
2046 * UI/MailerUI/UIxMailAccountActions.[hm]: new module implementing
2047 web actions related to the handling of mail accounts.
2049 * SoObjects/SOGo/NSDictionary+Utilities.[hm]: new extension
2052 * SoObjects/SOGo/NSObject+Utilities.m ([NSObject
2053 -jsonRepresentation]): new interface method meant to be overriden
2054 by the primitive classes.
2056 2007-05-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2058 * UI/MailerUI/UIxMailSplashView.m: removed.
2060 * SoObjects/Appointments/SOGoCalendarComponent.m
2061 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]): add
2062 the uid to the list only when the user email is recognized by the
2065 2007-05-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2067 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2068 -isDeletionAllowed]): completed method with the new imap acl api.
2070 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultAclRoles]):
2073 * SoObjects/SOGo/SOGoPermissions.m: added the new role
2074 "SOGoMailRole_MessageEraser".
2076 * UI/Common/UIxAclEditor.m ([UIxAclEditor -defaultUserID])
2077 ([UIxAclEditor -_prepareUsers]): take the new SOGoObject's
2078 "defaultUserID" method into account.
2080 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -userIsDefaultUser])
2081 ([UIxUserRightsEditor -_initRights]): take the new SOGoObject's
2082 "defaultUserID" method into account.
2084 * UI/MailerUI/UIxMailUserRightsEditor.m: added all the missing
2085 methods to support the IMAP acls mentionned in the RFC 4314,
2086 removed the ones specific to Cyrus.
2088 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultUserID]): new
2089 mandatory method for subclasses. Removed the SOGoDefaultUserID
2092 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -defaultUserID]):
2093 overriden method to return @"<default>".
2095 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2096 -defaultUserID]): overriden method to return @"<default>".
2098 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
2099 -aclsForUser:uid]): overriden method.
2100 ([SOGoMailFolder -removeAclsForUsers:users]): overriden method.
2101 ([SOGoMailFolder -setRoles:rolesforUser:uid]): overriden method.
2102 ([SOGoMailFolder -defaultUserID]): overriden method.
2103 ([SOGoMailFolder -hasSupportForDefaultRoles]): overriden method.
2105 2007-05-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2107 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2108 -aclUsersForObjectAtPath:objectPathArray]): new method that being
2109 forwarded the calles to aclUsers for the GCS-based subclasses of
2112 * SoObjects/Mailer/SOGoMailFolder.m: removed all the previous
2113 methods that would have been used to support IMAP acls. Replaced
2114 them with the new protocol for them that has been implemented in
2115 SOGo during the last few weeks.
2117 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2118 -hasSupportForDefaultRoles]): override method by returning "YES".
2120 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
2121 -addObjectUniquely:object]): new method with an explicit name.
2123 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -aclUsers]): renamed
2124 "acl" to "aclUsers". Now designed to return only the uid of the
2125 users involved in an ACL.
2126 ([SOGoObject -hasSupportForDefaultRoles]): new method returning
2127 "NO" by default. To indicate to the acl editor that we don't want
2128 to handle a default user.
2130 * SoObjects/SOGo/SOGoPermissions.[hm]: added the
2131 SOGoRole_ObjectReader, SOGoRole_Folder*, and SOGoMailRole_*
2134 * UI/MailerUI/UIxMailUserRightsEditor.[hm]: new class module that
2135 provides a view to the IMAP acls.
2137 * UI/MailerUI/UIxMailFolderACLEditor.m: removed obsolete module.
2139 * UI/WebServerResources/MailerUI.js: replaced all invocations of
2140 addEventListener to the use of prototype's Event object. Also,
2141 configured all menus programmatically following descriptions lists
2142 containing their callbacks, or nulls, submenus id or separators.
2144 2007-05-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2146 * UI/Common/UIxObjectActions.m ([UIxObjectActions
2147 -addUserInAclsAction]): save the previous roles of the user
2148 (unlikely) or the default roles, or None instead of saving the
2149 roles that should appear the first time in the role editor when no
2150 default has been set...
2152 * SoObjects/SOGo/SOGoObject.m: defined a new constant
2153 "SOGoDefaultUserID".
2155 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2156 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]):
2157 ignore the "AuthorizedSubscriber" role and add the "None" role
2158 when no other role is found.
2160 * UI/Common/UIxAclEditor.m: added a button for the new default
2163 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
2164 -_initRights]): don't take the "None" role into account when
2165 initializing the list of current roles.
2167 * SoObjects/SOGo/SOGoPermissions.m: added a new void role
2170 2007-05-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2172 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2173 -_rangeOfURLInRange:refRange]): urls cannot end with "&" nor "=".
2174 There is no need to subscract the start from the length if a space
2175 is not found since the range has not changed either. Finally, the
2176 first character before the url might also be a tab or a cr, so we
2177 match it against the "urlAfterEndingChars" custom NSCharacterSet.
2178 ([NSString -stringByDetectingURLs]): modified to handle email
2179 addresses and add a correct "mailto:" link.
2181 2007-05-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2183 * SoObjects/Appointments/SOGoAppointmentFolder.m
2184 ([SOGoAppointmentFolder -fetchContentObjectNames]): override
2185 method to return the events in the range of 2 weeks ago up to 4
2188 * UI/MailPartViewers/UIxMailPartTextViewer.m
2189 ([UIxMailPartTextViewer -flatContentAsString]): use the new
2190 "stringByDetectingURLs" method to offer clickable urls.
2192 * SoObjects/SOGo/NSString+Utilities.m ([NSString
2193 -stringByDetectingURLs]): this new method replaces passive URLS
2194 with active ones for HTML resolution of the text.
2196 2007-05-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2198 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
2199 -asQPSubjectString:encoding]): simplified method.
2200 The headers indicates "utf-8" again thank to our fix in
2203 * SoObjects/SOGo/SOGoObject.m: fail to build if libFoundation is
2206 2007-05-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2208 * UI/Common/UIxObjectActions.m ([UIxObjectActions
2209 -removeUserFromAclsAction]): implemented this method which was
2210 missing and is required to remove users from ACLs.
2212 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2213 -subscribeAction]): folderDict was not autoreleased, resulting in
2216 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2217 -primaryFetchProfile]): when building with libFoundation, don't
2218 use the "propertyList" method from NSString. Rather, we convert
2219 the string to an NSData instance and passit as parameter to
2220 NSDeserializer. This way, we obtain a mutable dictionary rather
2221 than an immutable one.
2223 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -bodyPartForText])
2224 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): use the
2225 constant string "contentTypeValue".
2226 contentTypeValue is now set back to iso-8859-1 since NGMime
2227 converts extracts the data in that encoding.
2229 2007-05-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2231 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
2232 -checkLogin:loginToCheckandPassword:passwordToCheck]): if a
2233 "bindFields" value is present in the user defaults, use the
2234 specified fields to find the dn of the user to bind.
2235 ([LDAPSource -allEntryIDs])
2236 ([LDAPSource -fetchContactsMatching:match])
2237 ([LDAPSource -lookupContactEntry:entryID])
2238 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]):
2239 bind and unbind the connection on each request.
2241 * UI/MailerUI/UIxMailAddressbook.m: removed obsolete module.
2243 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2244 -contactSearchAction]): simplified method to use the facilities
2245 provided by the LDAPUserManager. No longer takes care of the
2246 "ldap-only" url parameter since all requests are handled by the
2249 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2250 -primaryFetchProfile]): check that the value returned is not null
2251 before interpreting it.
2253 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
2254 -contactInfosForUserWithUIDorEmail:uid]): check that uid is not empty.
2255 ([LDAPUserManager -_fillContactMailRecords:contact]): if the
2256 system email is already present, remove it before adding it.
2258 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
2259 -checkLogin:loginToCheckandPassword:passwordToCheck]): check that
2260 loginToCheck is not empty.
2261 ([LDAPSource -fetchContactsMatching:match]): check that match is
2263 ([LDAPSource -lookupContactEntry:entryID]): check that entryID is
2265 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]): check that
2268 2007-05-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2270 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -primaryEmail]): new name
2272 ([SOGoUser -systemEmail]): returns the email formed from the
2273 username and the default mail domain.
2274 ([SOGoUser -hasEmail:email]): test whether the user has the
2275 specified email, in a case-insensitive way.
2277 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2278 -LDAPCheckLogin:_loginpassword:_pwd]): use the user manager to
2279 check login information.
2281 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2282 ([SOGoContactLDAPFolder
2283 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
2284 no longer manage LDAP connections. The requests are forwarded to
2285 the relevant LDAPSource instead.
2287 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2288 -appendSystemSources]): pass LDAPSource objects to
2289 SOGoContactLDAPFolder instances.
2291 * SoObjects/Mailer/SOGoDraftObject.m: extract the raw email
2292 address of the "from" field before sending the message. Otherwise,
2293 sending the mail won't work.
2295 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -fromEMails]):
2296 rewrote this method to request all the available email identities
2297 for the current user. Also, the from field also contains the full
2298 name of the user, not just his/her email address.
2300 * SoObjects/Appointments/SOGoCalendarComponent.m
2301 ([SOGoCalendarComponent -iCalPersonWithUID:uid]): new method taken
2302 from the previous module iCalEntityObject+Agenor.
2303 ([SOGoCalendarComponent -getUIDForICalPerson:person]): idem.
2304 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]):
2307 * SoObjects/Contacts/SOGoContactLDIFEntry.[hm]: new class module
2308 replacing the SOGoContactLDAPEntry module. It was renamed as such
2309 because it now receives a dictionary instead of an NGLdapEntry.
2310 It thus can now handle data from any source of LDIF data, not
2311 only coming from LDAP.
2313 * SoObjects/SOGo/LDAPUserManager.[hm]: new class module
2314 implementing most of what used to be the AgenorUserManager class.
2315 The difference is that users are cached in the forme of
2316 dictionaries and many sources are used. Also, it can be used to
2317 search LDAP contacts.
2319 * SoObjects/SOGo/LDAPSource.[hm]: new class module implementing
2320 the concept of "ldap source", to be used by all the classes
2321 needing access to LDAP-provided information: addressbooks and the
2322 user manager. Most the method thereing are transcriptions of
2323 methods previously found in SOGoContactLDAPFolder. It also contain
2324 utility methods for user matching and authentification.
2326 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: removed
2327 module, rendered useless by code refactoring.
2329 * SoObjects/SOGo/AgenorUserManager.[hm]: removed module, replaced
2330 with the freshly written "LDAPUserManager".
2332 2007-05-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2334 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: renamed to
2335 SOGOContactLDIFEntry.
2337 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: removed class
2338 module, obsoleted by code in SOGo/LDAPSource.[hm].
2340 2007-05-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2342 * UI/Common/UIxAclEditor.m ([UIxAclEditor -currentUserIsOwner]):
2343 new method with an explicit name.
2345 2007-05-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2347 * SoObjects/Appointments/SOGoCalendarComponent.m
2348 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): new method
2349 replacing "isOrganizer:orOwner:" by taking only one instance of
2350 SOGoUser as parameter.
2351 ([SOGoCalendarComponent -participant:user]): new method replacing
2352 the previous "isParticipant" boolean method by returning the first
2353 participant matching the user passed as parameter. This method is
2354 used so that both the regular email address and the "system email
2355 address" of the user are matched against the participants emails.
2357 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
2358 -getSystemEMailForUID:uid]): new method that returns the email
2359 formed with the user's uid and the default mail domain.
2361 * SoObjects/Appointments/SOGoCalendarComponent.m
2362 ([SOGoCalendarComponent -rolesOfUser:login]): removed method that
2363 was previously commented out.
2365 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -systemEmail]): new method
2366 forwared to [AgenorUserManager getSystemEmailForUID:].
2368 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2369 -toolbar]): method replacing the one with the same name in the
2370 task and appointment editor classes. This method makes also use of
2371 the new method "isOrganizerOrOwner:" and "participant:" in
2372 SOGoCalendarComponent.
2374 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2375 -toolbar]): removed method, replaced with a method with the same
2376 name in UIxComponentEditor.
2378 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -toolbar]): removed
2379 method, replaced with a method with the same name in
2382 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
2383 -primaryFetchProfile]): the values returned from the database are
2384 converted to a put dictionary first, since the dictionary returned
2385 is actually an immutable one, which can cause a crash afterwards.
2387 2007-04-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2389 * SoObjects/SOGo/SOGoPermissions.m: added "SOGoRole_ObjectViewer"
2390 and "SOGoRole_ObjectEditor".
2392 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
2393 -prepareRightsForm]): this method is no longer mandatory.
2395 * UI/Contacts/UIxContactsUserRightsEditor.m
2396 ([UIxContactsUserRightsEditor
2397 -setUserCanCreateObjects:userCanCreateObjects]): new subclass
2398 module to handle acls related to the address books. Partial
2401 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2402 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): cache
2405 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): remove
2406 specified roles from cache.
2407 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
2408 put resulting roles in cache.
2410 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -init]): do not invoke
2411 initWithName:inContainer:. Instead, directly initialize the ivars
2412 as it is supposed to be to avoid an infinite loop whenever one of
2413 those two methods are overriden.
2415 * SoObjects/SOGo/SOGoContentObject.m ([-rolesOfUser:login]):
2418 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
2419 -aclsForUser:uid]): override method so that SOGo won't crash when
2420 loading the contact card.
2422 2007-04-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2424 * SoObjects/Appointments/SOGoAppointmentFolder.m
2425 ([SOGoAppointmentFolder -_privacySqlString]): the string for the
2426 "freebusy" special user should only require opaque elements.
2428 2007-04-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2430 * SoObjects/Appointments/SOGoAppointmentFolder.m
2431 ([SOGoAppointmentFolder -davResourceType]): fixed a problem with
2432 our double declaration where the resulting XML would be screwed.
2433 There is only one collection per namespace.
2435 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
2436 rfc822DateString]): new method that returns a string conform to
2437 rfc 822 and suitable for email headers.
2439 * SoObjects/Mailer/SOGoDraftObject.m: invoke the new
2440 "rfc822DateString" category method on the date we put in the
2443 2007-04-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2445 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -defaultAction])
2446 ([UIxUserRightsEditor -saveUserRightsAction]): new action methods
2447 which should never be overriden.
2448 ([UIxUserRightsEditor -appendRight:newRight])
2449 ([UIxUserRightsEditor -removeRight:right])
2450 ([UIxUserRightsEditor -appendExclusiveRight:newRightfromList:list])
2451 ([UIxUserRightsEditor -removeAllRightsFromList:list]): new utility
2452 methods that can be used by the subclasses.
2453 ([UIxUserRightsEditor -prepareRightsForm]): new method that should
2454 mandatorily be overriden to prepare the elements of the subclassed
2456 ([UIxUserRightsEditor -updateRights]): new method that should
2457 mandatorily be overriden to update the user rights from the
2458 elements of the subclassed form.
2460 * UI/Common/UIxAclEditor.m ([UIxAclEditor -_prepareUsers]): we
2461 check if the uid is already listed before adding it to our array.
2462 This is because the acl table can contain more than one record per
2463 user/object relationship.
2465 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2466 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): the
2467 "roles" parameter is now an NSArray instead of a string. Therefore
2468 we loop throughout the array to populate the table. All the
2469 relevant records are removed prior to the addition of the new
2472 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
2473 -aclsForUser:uid]): new override that returns nil until we add
2474 support for IMAP acls.
2476 * SoObjects/Mailer/SOGoMailAccounts.m
2477 ([SOGoMailAccounts -aclsForUser:uid]): same as below.
2479 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2480 ([SOGoContactLDAPFolder -aclsForUser:uid]): same as below.
2482 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2483 -aclsForUser:uid]): override this method which will always return
2486 * SoObjects/SOGo/SOGoPermissions.[hm]: added
2487 [Public,Private,Confidential]
2488 x[Viewer,DAndTViewer,Responder,Modifier]. Renamed
2489 SOGoRole_ORganizer to SOGoCalendarRole_Organizer. Same for
2490 ..._Participant. Removed SOGoRole_Assistant and SOGoRole_Delegate.
2492 * SoObjects/Appointments/SOGoAppointmentFolder.m
2493 ([SOGoAppointmentFolder -defaultAclRoles]): new overriden method
2494 that defines default roles for new elements in the acl.
2496 * UI/Scheduler/UIxCalUserRightsEditor.[hm]: new component class
2497 module and subclass of UIxUserRightsEditor specific to the
2498 handling of user rights on calendar folders.
2500 2007-04-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2502 * SoObjects/Appointments/SOGoAppointmentFolder.m
2503 ([SOGoAppointmentFolder -groupDavResourceType]): return both
2504 "vevent-collection" and "vtodo-collection".
2506 * UI/Common/UIxUserRightsEditor.[hm]: new template class module
2507 that implements the detailed editor of user rights per-object.
2509 2007-04-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2511 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
2512 -rolesForObject:objectinContext:context]): no longer query objects
2513 for "roleForUser:". Instead, all objects should implement
2516 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject -acls]):
2517 new method to comply with the new acl "protocol" in SOGoObject.
2518 Uses SOGoFolder's new facilities for ACLS.
2519 ([SOGoContentObject -aclsForUser:uid]): idem.
2520 ([SOGoContentObject -setRoles:rolesforUser:uid]): idem.
2521 ([SOGoContentObject -removeAclsForUsers:users]): idem.
2523 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2524 -aclsForObjectAtPath:objectPathArray]): new method generic to GCS
2525 based folders. This method is derived from the code that was in
2526 UIxAclFolder before its removal.
2527 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
2530 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): idem.
2532 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): idem.
2533 ([SOGoFolder -setRoleForUsers:uidsto:role])
2534 ([SOGoFolder -setRoleForUsers:uidsto:role]): removed method.
2536 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -acls]): stub method
2537 that requires overriding by subclasses.
2538 ([SOGoObject -aclsForUser:uid]): idem.
2539 ([SOGoObject -defaultAclRoles]): idem.
2540 ([SOGoObject -setRoles:rolesforUser:uid]): idem.
2541 ([SOGoObject -removeAclsForUsers:users]): idem.
2543 * UI/Common/UIxObjectActions.m: new module implementing the web
2544 actions common to SOGoObject and all its subclasses.
2545 ([UIxObjectActions -addUserInAclsAction]): new method that adds a
2546 user with the clientObject defaults user rights to the object's
2549 * UI/Common/UIxAclEditor.m: modified module so as to simplify it
2550 to the point where it will only list the users (and their name)
2551 associated with an object acl.
2553 * SoObjects/SOGo/SOGoAclsFolder.m: removed module because its
2554 methods have been moved into SOGoObject and SOGoFolder during a
2557 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2558 -iCalParticipantsAndResourcesStringFromQueryParameters]): removed
2559 method made useless by the programmatic handling of iCalendar
2561 ([UIxComponentEditor -iCalParticipantsStringFromQueryParameters]): idem.
2562 ([UIxComponentEditor -iCalResourcesStringFromQueryParameters]): idem.
2563 ([UIxComponentEditor -iCalStringFromQueryParameter:_qpformat:_format]): idem.
2565 * UI/WebServerResources/MailerUI.js (initDnd): enable drag and
2566 drop on all folder nodes, not just on leaves.
2568 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2569 ([SOGoContactLDAPFolder
2570 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): request field "uid" when doing a search.
2572 2007-04-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2574 * Main/SOGo.m ([SOGo +initialize]): on GNUstep, trigger some
2575 debugging facilities when the SOGoDebugObjectAllocation user
2578 2007-04-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2580 * SoObjects/SOGo/NSString+Utilities.m ([NSString -boolValue]): new
2581 method that SOGo will need with non-gnustep Foundation
2583 ([NSString -stringByAppendingPathComponent:component]): new method
2584 that SOGo will need when building with libFoundation. Method
2585 removed later since it is available from
2586 Foundation/NSPathUtilities.h.
2588 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -timeZone]): method moved
2591 * SoObjects/SOGo/SOGoObject.m: new ivar "context" that permits
2592 every subclass to access [WOApplication context] without having to
2593 invoke it more than once.
2595 * SoObjects/Appointments/SOGoCalendarComponent.m
2596 ([SOGoCalendarComponent -changeParticipationStatus:_status]):
2597 moved method from SOGoTaskObject and SOGoAppointmentObject up to
2600 * UI/Scheduler/UIxCalSelectTab.m: removed module.
2602 2007-04-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2604 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
2605 -vCard]): test the prefix of the card in a case-independent way.
2607 * OGoContentStore/OCSContactFieldExtractor.m
2608 ([OCSContactFieldExtractor
2609 -extractQuickFieldsFromContent:content]): we no longer accept
2610 records in a format other than versit vCard so we can get rid of a
2613 2007-04-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2615 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2616 -selectorComponentClass]): restored method.
2618 2007-04-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2620 * UI/Scheduler/UIxCalTasksListView.m ([UIxCalTasksListView
2621 -shouldDisplayCurrentTask]): the current task is not displayed if
2622 it is NOT completed or if the "showCompletedTasks" flag is set.
2623 The logic was inverted in Lightning and is now in SOGo too.
2625 2007-04-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2627 * UI/Contacts/UIxContactView.m ([UIxContactView -workUrl]): we
2628 want the "work" url instead of the "home".
2630 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
2631 -_saveSnapshot]): save url values from snapshot.
2632 ([UIxContactEditor -initSnapshot]): load url values from snapshot.
2634 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2635 -calendarList]): new method replacing "availableCalendars".
2637 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
2638 -calendarFolders]): we now take the list of subscribed calendar
2641 * SoObjects/Appointments/SOGoAppointmentFolder.m
2642 ([SOGoAppointmentFolder -calendarFoldersInContext:context]): new
2643 method derived from and replacing [UIxCalView calendarFolders].
2645 2007-03-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2647 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2648 -toManyRelationshipKeys]): don't put the predefined folders in the
2649 list if they are returned by the server.
2651 * UI/MailerUI/UIxMailTree.m ([UIxMailTree -flattenedNodes]): we no
2652 longer store the "flattenedBlocks" in a dictionary since the
2653 object will be deleted anyway and we don't need to put the folders
2656 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
2657 ([UIxMailPartHTMLViewer -_attachmentIds]): take the current
2658 attachment path into account when computing the part urls.
2660 2007-03-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2662 * UI/Contacts/UIxContactsListViewContainer.m
2663 ([UIxContactsListViewContainer -additionalFolders]): take the list
2664 of subscribed folders from the new property list used for the user
2665 settings. The value of its key is SubscribedFolders for the
2666 dictionary entry named "Contacts".
2668 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2669 -canAccessContentAction]): new method to override the one from
2670 UIxFoldersActions by taking into account the fact that, this time,
2671 the clientObject is an ldap folder. Removed many method that used
2672 to be related to the handling of the user selector.
2674 * UI/Scheduler/UIxCalDayView.m: commented out many unused methods
2675 to make sure they can be removed.
2677 * UI/Scheduler/UIxCalView.m ([UIxCalView -_setupCalendarFolders]):
2678 populate the calendar entries based on the user settings plist.
2680 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2681 -selectForMailerAction]): restored method.
2683 * UI/Scheduler/UIxCalendarSelector.m: new template module derived
2684 from a simplified version of the old UIxContactEditor (removed).
2686 * UI/Contacts/UIxContactsUserFolders.m: new template module for
2687 selecting users or user folders through an LDAP search of which
2688 the results are displayed as a tree.
2690 * UI/WebServerResources/UIxMailEditor.js: moved previous generic
2691 method "onContactAdd" here since the Mailer is now the only module
2692 to use it when composing emails.
2694 * UI/WebServerResources/generic.js: added code for handling the
2695 new scheme used for describing SOGo folders, common code to handle
2696 folder addition or removal.
2698 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2699 -activateFolderAction]): new method that change the "active"
2700 settings in the folder-related fields in the user settings.
2701 ([UIxFolderActions -deactivateFolderAction]): see above.
2703 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2704 -checkRightsAction]): removed method.
2706 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2707 -updateAdditionalAddressBooksAction]): removed method.
2709 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
2710 -updateCalendarsAction]): removed method.
2712 2007-03-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2714 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
2715 -checkRightsAction]): removed method.
2717 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2718 -canAccessContentAction]): new method designed to replace
2719 [UIxCalMainView checkRightsAction] in a more universal way.
2721 2007-03-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2723 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2724 -roleOfUser:uidinContext:context]): take all the subkeys into
2725 account, not only the "personal" folder.
2727 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2728 -takeValuesFromRequest:_rqinContext:_ctx]): append a "uid" field
2729 to the new components.
2731 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -userSettings]): new method
2734 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
2735 -getUserDefaultsForUID:uid]): rewrote method to use the "defaults"
2736 field of the sogo_user_profile table, where the user-customizable
2737 changes will be saved.
2738 ([AgenorUserManager -getUserSettingsForUID:uid]): new method
2739 similar to the one above, using the "settings" field where the
2740 automatic settings will be saved.
2742 * SoObjects/SOGo/AgenorUserDefaults.m: rewrote a big part of the
2743 module to bind the userdefaults to a property list contained in a
2744 specified field of the sogo_user_profile table.
2745 ([AgenorUserDefaults
2746 -initWithTableURL:tableURLuid:userIDfieldName:defaultsFieldName]):
2747 added a "fieldName" parameter.
2749 * UI/Common/UIxFolderActions.m: new module implementing web
2750 actions common to all GCS-based folders.
2752 2007-03-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2754 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -labelForDay]):
2755 put a carriage return after the day name.
2757 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
2758 -readFreeBusyAction]): restored method.
2760 2007-03-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2762 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
2763 -defaultAction]): remade module to redirect automatically to the
2766 * SoObjects/Contacts/NSDictionary+Contact.m: removed module.
2768 2007-03-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2770 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2771 -deleteAction]): new web method to delete personal addressbook
2774 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
2775 -delete]): override method to refuse the deletion of the folder if
2776 its nameInContainer is "personal".
2778 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -delete]): new method
2779 that forwards the deletion request to the folder manager.
2781 2007-03-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2783 * UI/Scheduler/UIxAttendeesEditor.m ([UIxAttendeesEditor
2784 -zoomList]): new method that returns the list of available zoom factors.
2786 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
2787 -changeStatusAction]): rewrote method.
2789 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2790 -_handleAttendeesEdition]): make sure "attendeesNames" has a
2791 length > 0 before computing the attendees. Otherwise there will be
2792 an invalid empty entry.
2793 ([UIxComponentEditor -_handleOrganizer]): new method that adds the
2794 organizer when there are attendees and remove it when the
2795 attendees are removed.
2797 2007-03-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2799 * UI/Scheduler/UIxAttendeesEditor.m): new component.
2801 * UI/Scheduler/UIxComponentEditor.m: no longer a superclass for
2802 the task and appointment editors. Now a container component
2803 handling the common elements of tasks and events.
2805 * UI/Scheduler/UIxTaskEditor.m: same as below.
2807 * UI/Scheduler/UIxAppointmentEditor.m: rewrote template. No longer
2808 a subclass of UIxComponentEditor but a subcomponent of it.
2810 * UI/Common/UIxToolbar.m ([UIxToolbar -toolbarConfig]): the
2811 toolbar can have the special value "none" to indicate there is
2812 none attached to the window.
2814 * SoObjects/Appointments/SOGoCalendarComponent.m
2815 ([SOGoCalendarComponent -isOrganizer:emailorOwner:login]): new
2817 ([SOGoCalendarComponent -isParticipant:email]): new method.
2818 ([SOGoCalendarComponent -calendar:create]): takes one parameter
2819 "create" which is a boolean indicating whether we want to create
2820 the calendar if it does not exist.
2822 2007-03-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2824 * UI/Scheduler/UIxCalMonthView.m: changed view to use divs instead
2825 of a table, the same way the dayly and weekly views have been for
2828 2007-02-09 Helge Hess <helge.hess@opengroupware.org>
2830 * SoObjects/Appointments/SOGoAppointmentFolder.m: added CalDAV
2833 * SoObjects/SOGo/SOGoUserFolder.m: added davCalendarHomeSet CalDAV
2834 property to point at the user folder
2836 2007-03-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2838 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2839 -userInContext:]): returns "SOGoUser".
2841 * SoObjects/Appointments/SOGoCalendarComponent.m
2842 ([SOGoCalendarComponent -contentAsString]): overriden method that
2843 takes the privacy into account and discard the relevant fields if
2844 needed by generating a new content string and caching it.
2845 ([SOGoCalendarComponent
2846 -saveContentString:contentStringbaseVersion:baseVersion]): if the
2847 new method above has cached a content string, release it and set
2848 it to nil so that it will have to be regenerated in the case it is
2850 ([SOGoCalendarComponent -_filterPrivateComponent:component]):
2851 discard the fields that have to be hidden when the card is
2854 * SoObjects/Appointments/SOGoAppointmentFolder.m
2855 ([SOGoAppointmentFolder
2856 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]): make
2857 sure the cards are now handled as instances of
2858 SOGoCalendarComponent instead of SOGoContentObject so that their
2859 content string is taking the privacy classifiction into account.
2860 ([SOGoAppointmentFolder -_privacySqlString]): new method that
2861 generates a query to determine what information can be given and
2862 if the card itself has to be shown.
2864 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
2865 -getICalPersonsFromValue:selectorValue]): removed useless
2866 "isAccessRestricted" method.
2868 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
2869 -setStyle:_style]): test whether the values of orgmail and
2870 partmails are null before manipulating them, otherwise SOGo sends
2871 a "rangeOfString:" message to an NSNull, which makes it crashes.
2873 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2874 -extractQuickFieldsFromEvent:_event]): we now use the new
2875 "symbolicAccessClass" method from iCalEntity to determine the
2876 value of the "classifiction" field.
2877 ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]): same
2880 2007-03-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2882 * SoObjects/Appointments/SOGoAppointmentFolder.m
2883 ([SOGoAppointmentFolder
2884 -fetchCoreInfosFrom:_startDateto:_endDatecomponent:_component]):
2885 see below, the query is adapted consequently.
2887 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2888 -extractQuickFieldsFromTodo:_task]): the field "ispublic" was
2889 renamed to "classification" and can any integer as value.
2890 ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event]):
2893 2007-02-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2895 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
2896 ([_UIxHTMLMailContentHandler -_appendStyle:_charslength:_len]):
2897 don't prepend anything to the class and id named. Instead, we
2898 make each style embedded in the ".SOGoHTMLMail-CSS-Delimiter"
2901 2007-02-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2903 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2904 -rolesOfUser:logininContext:context]): if object does not exists
2905 (for example when it's being created), the current user has the
2906 same rights on it than he/she has on its parent container.
2908 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2909 -nameExistsInFolder:objectName]): methods that tests if a c_name
2910 corresponding to the name passed as parameter is present in the db
2913 2007-02-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2915 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
2916 -rolesForObject:objectinContext:context]): test for
2917 "rolesOfUser:inContext:" in addition to "roleOfUser:...".
2919 * SoObjects/Appointments/SOGoCalendarComponent.m
2920 ([SOGoCalendarComponent -rolesOfUser:logininContext:context]):
2921 returns the roles of the user on the container object if the event
2924 2007-02-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2926 * UI/MailPartViewers/UIxMailRenderingContext.m: returns the
2927 alternativeViewer a multipart/related message is being handled.
2929 * UI/MailPartViewers/UIxMailPartHTMLViewer.m: reimplemented module
2932 * UI/MailPartViewers/UIxMailPartAlternativeViewer.m: select the
2933 text/html component before text/plain.
2935 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2936 -addRequiredKeysOfStructure:path:toArray:recurse:]): accepts the
2937 fetching of HTML parts.
2939 * SoObjects/Appointments/SOGoCalendarComponent.m
2940 ([SOGoCalendarComponent -componentTag]): new template method that
2941 returns the vcalendar tag of the current object.
2942 ([SOGoCalendarComponent -component]): new method that returns the
2943 first object matching [self componentTag] within the current
2944 calendar object. This method replaces 'firstEventInCalendar:' as
2945 well as "firstTaskInCalendar:".
2946 ([SOGoCalendarComponent -roleOfUser:logininContext:context]):
2947 moved method from SOGoAppointmentObject.m.
2949 2007-02-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2951 * UI/Scheduler/UIxCalMulticolumnDayView.[hm]: new daily view
2952 module which shows each selected user's calendar in a different
2953 column instead of mixing their events together.
2955 * UI/Scheduler/UIxCalView.m ([UIxCalView -redirectForUIDsAction]):
2956 replaced use of [NSString stringByTrimmingWhiteSpaces] with
2957 [NSString stringByTrimmingSpaces].
2959 * UI/MailPartViewers/UIxMailPartICalViewer.m: request the key
2960 "cnWithoutQuotes" instead of "cnForDisplay", which no longer
2963 * UI/Scheduler/UIxCalDayOverview.m,
2964 UI/Scheduler/UIxCalDayChartview.m,
2965 UI/Scheduler/UIxCalDayListview.m,
2966 UI/Scheduler/UIxCalWeekOverview.m,
2967 UI/Scheduler/UIxCalWeekChartview.m,
2968 UI/Scheduler/UIxCalWeekListview.m,
2969 UI/Scheduler/UIxCalInlineMonthOverview.m,
2970 UI/Scheduler/UIxCalYearOverview.m: removed unused modules.
2972 2007-02-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2974 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2975 -appendPersonalSourcesInContext:context]): release connectoin
2976 channel when everything is done.
2978 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2979 -newAbAction]): new action method to crate a new contact folder
2982 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -create]): new method
2983 that requests the folder manager to create a folder table with the
2984 specified type at the specified path. The type is taken from [self
2987 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
2988 -folderType]): implemented.
2990 * SoObjects/Appointments/SOGoAppointmentFolder.m
2991 ([SOGoAppointmentFolder -folderType]): implemented.
2993 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2994 -appendPersonalSourcesInContext:context]): we now fetch all
2995 folders with type "Contact" that belong to the current user.
2996 ([SOGoContactFolders -newFolderWithName:name]): new method to
2997 create a new contact folder.
2999 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]): treat
3000 resulting url with [NSString+Utilities hostlessURL] instead of
3001 using NSURL. This is because the url in question sometimes has a
3002 hostname and sometimes not. "hostlessURL" ensure the hostname is
3004 ([UIxComponent -applicationPath]): same as above.
3006 2007-02-08 Ludovic Marcotte <ludovic@inverse.ca>
3008 * SoObjects/Mailer/SOGoMailFolder.m: priorize the lookup of
3009 folders before doing the one on messages.
3011 2007-02-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3013 * SoObjects/SOGo/NSArray+Utilities.m: added an implementation of
3014 makeObjectsPerform:withObject:withObject: for GNUstep
3017 * OGoContentStore/GNUmakefile, Protocols/common.make,
3018 SoObjects/common.make, UI/common.make: install in
3019 GNUSTEP_INSTALLATION_DIR instead of GNUSTEP_USER_DIR.
3021 2007-02-07 Ludovic Marcotte <ludovic@inverse.ca>
3023 * UI/Scheduler/English.lproj/Localizable.strings: fixed typo for
3026 2007-02-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3028 * UI/MailerUI/UIxMailTree.m ([UIxMailTree
3029 -getTitle:folderType:andIcon:forObject:]): disabled Sieve folders
3032 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3033 -checkLogin:_loginpassword:_pwd]): fixed a bug where a wrong
3034 password would be accepted anyway as long as its length was > 0.
3035 This can be the case ONLY when LDAP is disabled otherwise we have
3036 a serious security issue...
3038 * SoObjects/Appointments/SOGoAppointmentObject.m
3039 ([SOGoAppointmentObject -roleOfUser:logininContext:context]): if a
3040 user is not an organizer nor a participant, he is declared as
3041 "Owner" if he owns the calendar the entry where the entry is
3042 contained. Other cases should not be possible.
3044 2007-02-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3046 * UI/Contacts/UIxContactEditor.m: display and handle the new
3049 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3050 ([SOGoContactLDAPFolder -_searchAttributes]): retrieve "calFBURL"
3053 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3054 -vCard]): put the LDAP "calFBURL" field in the vCard's "FBURL"
3057 2007-01-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3059 * SoObjects/Appointments/SOGoCalendarComponent.m
3060 ([SOGoCalendarComponent -sendEMailNotifications]): new method that
3061 returns the value of ud "SOGoAppointmentSendEMailNotifications"
3063 ([SOGoCalendarComponent
3064 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]): method moved from SOGoAppointmentObject/SOGoTaskObject, replacing occurences of "appointment" to "object" in its name.
3066 2007-01-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3068 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
3069 -defaultAction]): invoke "flushMailCaches" on [self clientObject]
3070 so that the mailbox cache is refreshed everytime the user presses
3071 on "get mail". I doubt a mailbox cache really is useful in general
3074 2007-01-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3076 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3077 -userInContext:]): if the lookup is on "freebusy.ifb" and the
3078 username is "anonymous" the user is automatically set to
3081 2007-01-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3083 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3084 -checkLogin:_loginpassword:_pwd]): authorize special "freebusy"
3085 user with password "freebusy".
3087 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
3088 -contentAsString]): the default timerange is now 14 days before
3089 currentday and 1 month after.
3091 2007-01-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3093 * SoObjects/Appointments/SOGoAppointmentFolder.m
3094 ([SOGoAppointmentFolder
3095 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
3096 escape the record string in a way suitable with XML encoding.
3098 2007-01-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3100 * UI/WebServerResources/SchedulerUI.js: fixed a bug where the
3101 calendar view would not be updated properly.
3103 2007-01-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3105 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3106 -newStartDate]): fix the handling of the component start date
3107 depending on the "hm" and the "day" parameters.
3109 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
3110 -roleOfUser:uidinContext:context]): set role of current user to
3111 "Assistant" if the object that is accessed is "freebusy.ifb".
3113 * SoObjects/Appointments/SOGoAppointmentFolder.m
3114 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): method
3115 moved from UI/Scheduler/UIxCalView:calendarFolderForUID:.
3116 ([SOGoAppointmentFolder
3117 -lookupCalendarFoldersForUIDs:_uidsinContext:]): now use the new
3118 lookupCalendarFolderForUID: method, which doesn't do security
3121 2007-01-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3123 * UI/Common/UIxAclEditor.m ([UIxAclEditor -assistantsValue]): new
3124 accessor that returns the comma-separated list of users with role
3126 ([UIxAclEditor -delegatesValue]): same as above for "Delegate".
3127 ([UIxAclEditor -_prepareUsers]): there is no longer a concept of
3128 "checkedUsers". Instead, each user is either classified in the
3129 list of assistants or the list of delegates.
3131 2006-12-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3133 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
3134 -composeAction]): method imported from removed container modules.
3135 ([UIxMailMainFrame -mailFolderName]): method imported from removed
3138 * UI/MailerUI/UIxMailPopupView.m: a new special popup component
3139 for wrapping UIxMailView with the "popupview" action.
3141 * UI/MailerUI/UIxMailAccountView.m: renamed to UIxMailSplashView,
3142 since its the component that displays the same splash screen than
3143 the one in Thunderbird/Icedove.
3145 * UI/MailerUI/UIxMailAccountViewContainer.[hm],
3146 UI/MailerUI/UI/MailerUI/UIxMailAccountsView.m,
3147 UI/MailerUI/UIxMailListViewContainer.[hm],
3148 UI/MailerUI/UIxMailViewContainer.[hm]: removed
3150 2006-12-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3152 * UI/WebServerResources/HTMLElement.js: replaced the functional
3153 selectNode() and deselectNode() functions with select() and
3154 deselect() methods of HTMLElement.
3156 * UI/WebServerResources/ContactsUI.js: cleanup, most of the
3157 events are initialized from here now instead of in the HTML code.
3159 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3160 -checkRightsAction]): new method similar to the one with the same
3161 name in UIxCalMainView.m.
3163 * UI/Common/UIxAclEditor.m ([UIxAclEditor -saveAclsAction]): added
3164 code to handle the publishing of freebusy information.
3166 2006-12-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3168 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3169 -checkRightsAction]): new action method that returns a
3170 comma-separated list of boolean values matching the right of the
3171 current user to "view" (as a permission) each foreign calendar
3172 stored in his preferences.
3174 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -setOwner:newOwner]):
3175 new method that sets a customOwner, which can be returned with
3176 ownerInContext it set.
3178 * SoObjects/Appointments/SOGoAppointmentFolder.m
3179 ([SOGoAppointmentFolder
3180 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): no longer set the owner of elements here.
3182 2006-12-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3184 * SoObjects/SOGo/SOGoUserFolder.m: same as for SOGoContactFolders
3185 below, but for the Contacts and Calendar collections.
3187 * SoObjects/SOGo/SOGoAclsFolder.m: convert the class to user the
3188 new acl facilities method from sope-gdl/GCSFolder.m.
3190 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3191 -roleOfUser:uidinContext:context]): new method that returns
3192 SOGoRole_Assistant when the user is an assistant or a delegate on
3193 the "personal" ab object. This is so that setting roles on the
3194 SOGoContactFolders object is not required.
3196 2006-12-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3198 * Main/SOGo.m: declare "Freebusy" permissions for the top objects.
3200 * UI/Contacts/UIxContactsAclsSelection.m: new component specific
3201 to the handling of the user selection for the acls.
3203 * SoObjects/SOGo/SOGoPermissions.[hm]: new module that extends the
3204 values from SoPermissions with ones specific to SOGo.
3206 * SoObjects/SOGo/SOGoAclsFolder.[hm]: new class module that
3207 handles the storage for the acls.
3209 * SoObjects/Appointments/SOGoCalendarComponent.[hm]: new parent
3210 class for SOGoAppointmentObject and SOGoTaskObject.
3212 * UI/Common/UIxAclEditor.[hm]: new component that provides a
3213 general editor for folder acls.
3215 * SoObjects/SOGo/NSString+Utilities.[hm]: old "NSString+URL"
3217 ([NSString -davMethodToObjC]): method that returns the method name
3218 for a DAV property implementation.
3220 * SoObjects/SOGo/NSArray+Utilities.m: new extension module to
3222 ([NSArray -stringsWithFormat:format]): new method that returns
3223 formatted occurences of the strings stored in the array.
3225 * SoObjects/SOGo/SOGoDAVRendererTypes.m ([SOGoDAVSet
3226 +davSetWithArray:newValuesofValuesTaggedAs:newValueTag]): a new
3227 subclass module of SoWebDAVValue that supports collections of
3228 properties of the same type.
3230 2006-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3232 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
3233 -lookupFolder:ofClassNamed:inContext:]): added the ability to
3234 configure the name of the SOGoDraftFolders with the ud var
3235 "SOGoDraftsFolderName".
3237 2006-11-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3239 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
3240 -userTimeZone:username]): new method that returns the timezone for
3241 the specified user depending on his preferences and the server
3244 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3245 -stringForData:partInfo:]): take the encoding into account and
3246 translate the text to "normal" before processing the charset data.
3248 2006-11-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3250 * UI/WebServerResources/generic.js: the progress indicator is on
3251 when loading the page so we turn it off, and we turn it back on
3252 whenever we switch to another module...
3254 * UI/WebServerResources/SchedulerUI.js: make sure the day view
3255 synchronization mechanism works everywhere.
3257 * UI/WebServerResources/generic.js: the log window is not only
3258 visible when UIxDebugEnabled is set.
3260 * UI/WebServerResources/SchedulerUI.js: the month overview's day
3261 cells are now initialized with the DOM event interface methods
3262 instead of with html attributes.
3264 * UI/Templates/MailerUI/UIxMailView.wox: don't display useless
3265 headers (should be made configurable at some point)...
3267 * OGoContentStore/sql/generate-folderinfo-sql-for-users.sh: drop
3268 "not null" constraint on startdate, enddate, isopaque,
3269 participants and partmails.
3271 2006-11-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3273 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
3274 -hoursToDisplay]): prevent a crash by retaining the
3275 "hoursToDisplay" array after it's created.
3276 ([UIxCalDayTable -clickableHourCellClass]): new method for the new
3277 clickable hours DIV.
3279 * UI/WebServerResources/SchedulerUI.js: made the event
3280 participation status modification asynchronous, which also fixes a
3281 bug where the window would sometimes close before the accept or
3282 decline action was completed. Also, adapted the event handling
3283 related to the days or weeks view with the new DIV-based layout.
3285 * UI/Scheduler/UIxCalInlineAptView.m: same as the first below...
3287 * UI/Scheduler/UIxCalDayTable.m: enhanced to provide the new
3288 DIV-based presentation of the days and weeks.
3290 * SoObjects/Appointments/SOGoTaskObject.m: same as below...
3292 * SoObjects/Appointments/SOGoAppointmentObject.m: lookupName:...
3293 might return an exception so we have to handle it if we don't
3296 2006-11-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3298 * UI/WebServerResources/SchedulerUI.js: updated the list
3299 initialization code to use the new event management scheme, adding
3300 what was missing to be able to delete events and tasks again.
3302 * UI/WebServerResources/MailerUI.js: added code to activate the
3303 "Get mails" button. Fixed a bug which prevented messages to be
3306 * UI/WebServerResources/UIxFreeBusyUserSelector.js: handle tab
3307 navigation and focus handling of INPUTs.
3309 2006-11-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3311 * UI/WebServerResources/MailerUI.js: added code to handle the
3312 possible drag and drop events to manager in the mail module.
3313 Moving messages, opening parent folders, ...
3315 * UI/WebServerResources/SOGoDragAndDrop.js: new file containing
3316 the drag and drop manager as well as the interface to HTMLElement
3317 to trigger drag and drop events.
3319 * UI/MailerUI/UIxMailView.m ([UIxMailView -moveAction]): new
3320 action to move the current message to the mailbox named after the
3321 value of parameter "tofolder".
3323 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
3324 -moveToFolderNamed:folderNameinContext:]): new method base on
3327 2006-11-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3329 * UI/WebServerResources/generic.js: added and activated many
3330 "load" handlers to configure generic widgets used across the
3331 modules. More events are now handled in a DOM-fashion way instead
3332 of by setting the relative attributes in the templates.
3334 * UI/Templates/UIxSortableTableHeader.wox: all the events are
3335 declared from the javascript DOM onload handlers.
3337 * UI/Templates/UIxPageFrame.wox: load the new SOGoDragHandles.js
3340 * UI/Templates/MailerUI/UIxMailListView.wox: all the events are
3341 declared from the javascript DOM onload handlers.
3343 * UI/MailerUI/UIxMailListView.m: removed all the JS methods since
3344 we want everything to be separated from each other, as much as
3347 * UI/WebServerResources/SOGoDragHandles.js: new module containing
3348 the "SOGoDragHandlesInterface", implementing methods that can be
3349 attributed to DIV so that they can be used as drag handles.
3351 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
3352 -asQPSubjectString]): initialize the tmp strings with '0' to make
3353 sure they don't contain garbage.
3355 2006-11-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3357 * UI/WebServerResources/MailerUI.js: register the messageList
3358 table as a dragging source and the leaf of the navigation tree as
3359 dnd destinations to the DNDManager.
3361 * UI/WebServerResources/generic.js: initialize tabs from the
3362 "unload" event listener that is added programmatically instead of
3363 from the template... Also, added the new DNDManager object.
3365 * UI/WebServerResources/HTMLTableElement.js: added code to
3366 simulate XUL drag n drop events. This code will possibly be moved
3367 to HTMLElement.js instead later...
3369 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3370 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): same as
3373 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3374 -_qualifierForFilter:filter]): only search records which starts
3375 with the specified pattern.
3377 2006-11-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3379 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
3380 -asQPSubjectString]): new method that returns the special QP
3381 string with its qp declaration for email subjects.
3382 ([SOGoDraftObject -bodyPartForText])
3383 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): don't
3384 double-encode data in UTF-8.
3386 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3387 -newStartDate]): new method to determine the start date depending
3388 on the URL parameters, the current day and the current time.
3389 ([UIxComponentEditor -toolbar]): new method to determine the
3390 filename of the toolbar that should be drawn depending on the
3391 ownership and the list of attendees of the task/event wrt to the
3394 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
3395 -setDayStartHour:aStartHour]): adjust the minutes to the next
3396 quarter of hour, if not already set to a quarter.
3398 * UI/WebServerResources/UIxAppointmentEditor.js,
3399 UI/WebServerResources/UIxTaskEditor.js: added code to manage start
3402 2006-11-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3404 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3405 -loadValuesFromComponent:component]): handles access class
3406 (privacy) and status.
3408 * UI/Contacts/UIxContactsListViewContainer.m
3409 ([UIxContactsListViewContainer -additionalFolders]): return nil if
3410 [self additionalAddressBooks] returns an empty string.
3412 2006-11-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3414 * UI/Scheduler/UIxCalMonthView.m ([UIxCalMonthView
3415 rangesOf7Days]): enhanced and debugged algorithm to feed the array
3416 with slices where the first day is still in the requested month.
3418 * UI/Templates/UIxPageFrame.wox: the logConsole is created only on
3421 * UI/SOGoUI/SOGoAptFormatter.m: added code to handle the display
3422 of events in the day boxes of the calendar's monthly view.
3424 * SoObjects/Appointments/SOGoTaskObject.m ([SOGoTaskObject
3425 -davContentType]): declare "text/calendar".
3427 * SoObjects/Appointments/SOGoAppointmentObject.m
3428 ([SOGoAppointmentObject -davContentType]): declare
3431 * SoObjects/Appointments/SOGoAppointmentFolder.m
3432 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): certain
3433 HTTP methods are handled by SOPE and requires nil to be returned,
3434 this method now invokes the new
3435 "requestNamedIsHandledLater:inContext:" method to check that.
3436 ([SOGoAppointmentFolder
3437 -requestNamedIsHandledLater:nameinContext:context]): new methods
3438 that returns "YES" only for the "OPTIONS" http method (for now...).
3439 ([SOGoAppointmentFolder -davComplianceClassesInContext:]):
3440 overloaded method to append the "access-control" and
3441 "calendar-access" DAV abilities to the initial declaration.
3443 * UI/Scheduler/UIxCalMonthView.[hm]: rewritten module entirely to
3444 imitate the look of Sunbird/Lightning's monthly view.
3446 * UI/Scheduler/UIxCalMonthView.[hm]: renamed to
3447 UIxCalMonthViewOld.[hm].
3449 2006-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3451 * UI/Scheduler/UIxFreeBusyUserSelectorTable.m
3452 ([UIxFreeBusyUserSelectorTable -currentContactHasStatus]): new
3454 ([UIxFreeBusyUserSelectorTable -currentContactStatusImage]):
3455 returns an image name based on the participation status of the
3458 * UI/WebServerResources/SchedulerUI.js: same strip down as for
3461 * UI/Contacts/UIxContactsListViewContainer.m ([UIxContactsListViewContainer -additionalAddressBooks])
3462 ([UIxContactsListViewContainer -additionalFolders])
3463 ([UIxContactsListViewContainer -setCurrentAdditionalFolder:newCurrentAdditionalFolder])
3464 ([UIxContactsListViewContainer -currentAdditionalFolder]): new
3465 methods to handle the external addressbooks a user has subscribed
3466 too, by retriving them from his preferences.
3468 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3469 -updateAdditionalAddressBooksAction]): new method that updates the
3470 user settings with the list of addressbook he has subscribed to.
3472 * UI/Contacts/UIxContactsAddressBooksSelection.m: new component
3473 module for the address book selector.
3475 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
3476 a toolbar with two buttons ("add" and "remove") to manage the
3477 additional addressbooks a user might subscribe to.
3479 * UI/WebServerResources/ContactsUI.js: added code to handle
3480 "external addressbooks" from the Javascript point-of-view, by
3481 extending existing methods and adding code for the "add ab" and
3482 "remove ab" buttons.
3484 * UI/WebServerResources/generic.js: moved extensions methods to
3485 DOM elements to separate files for better clarity.
3487 * UI/Common/UIxPageFrame.m ([UIxPageFrame -pageContentClasses]):
3488 new method that returns "pageContent" as class, but also "popup"
3489 for the DIV where the page content lies, so that we can manipulate
3490 the content of popup's with CSS identifiers.
3492 2006-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3494 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
3495 -displayStyle]): new method that returns a string containing the
3496 css style relative to the current appointment cell. This code is
3497 currently inactive but might be reused later.
3499 * UI/WebServerResources/SchedulerUI.js: added code to handle the
3500 display of the selected day (the day pointed by the mouse, or the
3501 current day when changing the view).
3503 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
3504 -dayCellClasses]): new method that returns a string containing the
3505 css classes applicable to the current cell, depending on the
3506 position of the day in the week, the day of today and the
3509 * UI/Scheduler/UIxCalCalendarsListView.m ([UIxCalCalendarsListView
3510 -currentContactAptBorder]): new method that returns the
3511 appropriate border color for the specified user.
3513 * SoObjects/Appointments/SOGoAppointmentObject.m
3514 ([SOGoAppointmentObject
3515 -saveContentString:contentStringbaseVersion:baseVersion]):
3516 overloaded method that parse new events and detects if they have
3517 an organizer or not. If they are new and have no organizer set
3518 (Sunbird/Lightning...), the owner of the event is set as
3521 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: new
3522 category that provides facility methods and interfaces to the
3525 * SoObjects/Contacts/product.plist: give full access to ANY
3526 authenticated user, not just the owner (to every objects...).
3528 2006-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3530 * UI/WebServerResources/UIxFreeBusyUserSelector.js: make sure
3531 every replica widgets are declared as such to their master
3532 counterpart. Take the days into account when displaying the time
3533 range taken by the appointment.
3535 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
3536 -getICalPersonsFromValue:selectorValue]): method taken from
3537 UIxFreeBusyUserSelector, that is shared both by
3538 UIxFreeBusyUserSelector and UIxFreeBusyUserSelectorTable.
3540 * SoObjects/Appointments/SOGoAppointmentFolder.m
3541 ([SOGoAppointmentFolder
3542 -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.
3544 * UI/Scheduler/UIxFreeBusyUserSelectorTable.[hm]: new subcomponent
3545 derived and taken as a subset of UIxFreeBusyUserSelector that
3546 implements the table part of the FreeBusy view. Most of the
3547 methods of UIxFreeBusyUserSelector relative to that table were
3548 moved into UIxFreeBusyUserSelectorTable, which can also be used as
3549 a standalone view for AJAX operations.
3551 2006-10-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3553 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3554 -vCard]): change reverted.
3556 * UI/Contacts/UIxContactEditor.m: check whether the client contact
3557 folder has selector "globallyUniqueObjectId" before calling that
3560 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3561 -vCard]): the "setVClass" NGVCard method really is "setClass"
3564 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3565 ([SOGoContactLDAPFolder -_searchAttributes]): fixed typo to
3566 request the "streetAddress" instead of the "streetaddress".
3567 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): lookup
3568 mails that *contain*, and not just *start with* the search
3571 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3572 -vCard]): mark address returned from LDAP as the work address.
3574 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: made the whole
3575 span covered with the anchor, not only the textual information
3578 * UI/Templates/SchedulerUI/UIxCalMainView.wox: specify the type
3579 argument (event or task) to newEvent in the appointmentListMenu.
3580 Make the appointmentsListView display the appointmentsListMenu.
3582 * UI/SOGoUI/SOGoAptFormatter.m: enlarge the text size limit from
3583 12 to 50 before displaying "...".
3584 ([SOGoAptFormatter -fullDetailsForApt::]): display location only
3585 if its length > 0, whether location itself is nil or not...
3586 ([SOGoAptFormatter -tooltipForApt::_refDate]): display information
3587 of which the length > 0.
3589 2006-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3591 * UI/WebServerResources/UIxAppointmentEditor.js: correctly handles
3592 french and ISO dates.
3594 * UI/Scheduler/UIxFreeBusyUserSelector.[hm]: added code an ivars
3595 from UIxContactSelector to handle contact lists (current and
3596 additional contacts).
3598 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3599 -_freeBusyAsText]): added handling of an "additional"-named query
3600 parameter that describe the number of additional days after
3601 enddate that should be returned.
3603 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3604 -_responseForResults:results]): give priority to results with
3605 "c_uid" fields. If none returned, use the first contact received.
3607 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3608 -extractQuickFieldsFromEvent:_event]): changed "TENTATIVE" code to
3609 2 and "CANCELLED" to 0.
3611 2006-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3613 * UI/WebServerResources/UIxAppointmentEditor.js: handle conversion
3614 of start and end dates to short string dates.
3616 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
3617 -readFreeBusyAction]): new method that returns an array of numbers
3618 corresponding to the state in the freebusy of each "quarter of an
3619 hour" between the "sday" and "eday" date parameters passed in the
3620 url. This permits to handle the display of the freebusy with Ajax
3622 ([SOGoUserHomePage -_freeBusyAsText]): add 2 days to the end date
3623 since the free busy displays 2 days ahead.
3625 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3626 -contactSearchAction]): new action that returns the uid and the
3627 username + email of the user whose name contain the value of the
3628 "search" url parameter.
3630 * SoObjects/Appointments/SOGoAppointmentFolder.m
3631 ([SOGoAppointmentFolder
3632 -fetchFreebusyInfosFrom:_startDateto:_endDate]): added fields
3633 useful for the computing of the status of the freebusy.
3635 * UI/Scheduler/UIxFreeBusyUserSelector.m ([UIxFreeBusyUserSelector
3636 -init]): new component that incarnates a user selector for events
3637 inspired by the new one found in Thunderbird Lightning.
3639 2006-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3641 * UI/WebServerResources/generic.js: added code to enable or
3642 disable anchor visually (following our internal algorithm).
3644 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -init]):
3645 added new "url" ivar with its classic accessors.
3646 ([UIxComponentEditor -urlButtonClasses]): new method that returns
3647 the class strings for the url button on the appointment/task
3648 editor (depending on the validity of the url).
3650 * UI/Templates/SchedulerUI/UIxTaskEditor.wox,
3651 UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: start rewriting
3652 the template to match the Lightning's new task/appointment editor.
3654 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor -saveValuesIntoAppointment:_appointment]): initialize url from the components'url.
3656 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveValuesIntoTask:_task]): initialize url from the components'url.
3658 2006-10-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3660 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3661 ([SOGoContactLDAPFolder
3662 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): perform the searchs on objects which start with instead of contain the lookup key.
3664 * SoObjects/Appointments/SOGoAptMailNotification.[hm]: work on
3665 iCalEntityObject instances instead of just iCalEvent's.
3667 * SoObjects/Appointments/SOGoAppointmentFolder.m
3668 ([SOGoAppointmentFolder
3669 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): set ownership of returned records by adding an "owner" key to the resulting dictionaries.
3671 * SoObjects/SOGo/NSObject+Owner.[hm]: removed module since it's a
3672 bad way of handling ownership that way.
3674 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3675 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): search also
3676 on "cn", just like Mozilla.
3678 2006-10-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3680 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]):
3681 "to" should be retained, otherwise it will be autoreleased and a
3684 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3685 -writeAction]): updated method to fetch the card before initing
3688 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3689 -extractQuickFieldsFromTodo:_task]): fixed to use NSNull instead
3692 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
3693 -iCalStringTemplate]): start and due date are now optional.
3695 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
3696 -setDayStartHour:aStartHour]): added a new "isDisabled" ivar with
3697 appropriate accessors to be settable through the templates.
3699 * UI/Scheduler/UIxDatePicker.m ([UIxDatePicker -init]): added a
3700 new "isDisabled" ivar with appropriate accessors to be
3701 settable through the templates.
3703 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3704 -availableCalendars]): new method that list the calendars to which
3705 the user has subscribed.
3706 ([UIxComponentEditor -componentOwner]): returns the owner of the
3709 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3710 -extractQuickFieldsFromTodo:_task]): set the start and enddate of
3711 quickentries to null whenever each or all of them are null, by
3712 providing an impossible timestamp from with NSNotFound as value.
3714 2006-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3716 * UI/WebServerResources/UIxMailEditor.js: update the algorithm
3717 that handles the creation of new fields with the new APIs and the
3718 new node structure on the page.
3720 * UI/Scheduler/UIxAppointmentEditor.m,
3721 UI/Scheduler/UIxTaskEditor.m:
3722 refactored to user UIxComponentEditor as parent class.
3724 * UI/Scheduler/UIxComponentEditor.[hm]: new class module
3725 containing the methods common to the UIxTaskEditor and the
3726 UIxAppointmentEditor.
3728 2006-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3730 * SoObjects/Appointments/SOGoAppointmentFolder.m
3731 ([SOGoAppointmentFolder -doCalendarQuery:context]): now supports
3732 the handling of time-ranges.
3734 * UI/WebServerResources/ContactsUI.js: specify a notification type as
3735 parameters when onConfirmContactSelection in invoked.
3737 * UI/WebServerResources/generic.js: specify a notification type as
3738 parameters when onContactRemove in invoked.
3740 * UI/WebServerResources/SchedulerUI.js: when the user deselects
3741 all calendars, select his entry.
3743 2006-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3745 * UI/WebServerResources/SchedulerUI.js: edit and delete events
3746 with their owner-relative urls. Generate a correct entry in the
3747 css color table when a user is added to the calendars list. Put
3748 the same color next to the user id.
3750 * UI/WebServerResources/generic.js: implemented some new helper
3753 * SoObjects/Appointments/SOGoAppointmentFolder.m
3754 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): don't delete
3755 entries if their owner is not the current user.
3757 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
3758 -displayClasses]): return the correct class for the current event
3759 representation depending on its owner.
3761 * UI/Scheduler/UIxCalCalendarsListView.m: added method to create
3762 and associate a color for each user login depending on its
3763 position in the list.
3765 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView
3766 -currentRowCSSClass]): return the correct class for the current
3767 row depending on the owner of the event.
3769 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
3770 -setColors:colors]): new method to associate a color table with
3771 each user in the list.
3773 * SoObjects/Appointments/SOGoAppointmentFolder.m
3774 ([SOGoAppointmentFolder
3775 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): associate each returned record with the owner of the table they are retrieved from.
3777 * SoObjects/SOGo/NSObject+Owner.[hm]: new extension module to
3778 NSObject to associate an instance with a user.
3780 2006-10-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3782 * UI/WebServerResources/SchedulerUI.js: added handling of multiple
3785 * UI/WebServerResources/ContactsUI.js: added handling of
3786 notification of changes to contact selectors.
3788 * UI/WebServerResources/generic.js: added handling of notification
3789 of changes to contact selectors.
3791 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3792 -updateCalendarsAction]): proxy method to update the user
3793 preference table with the new selected calendar uids.
3795 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3796 -calendarsContactsAction]): new method.
3798 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector -setCheckedBoxes:boxes])
3799 ([UIxContactSelector -setHasCheckBoxes:aBool])
3800 ([UIxContactSelector -isCheckBoxChecked]): new accessors method to
3801 permit the drawing of checkboxes instead of card icons.
3803 * UI/Scheduler/UIxCalCalendarsListView.m: new component class that
3804 wrap a selector the the "Calendars" tab.
3806 * UI/Contacts/UIxContactsCalendarsSelection.m: buttons for the
3807 new user calendar selector.
3809 2006-10-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3811 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: time ranges
3812 may cover hour 0 to hour 23.
3814 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
3815 -iCalStringFromQueryParameter:format:]): dates explicitly set to
3818 * UI/WebServerResources/SchedulerUI.js: manage both lists of
3819 objects wrt to the toolbar actions.
3821 * UI/WebServerResources/generic.js: added code to the "String"
3822 class to decode number-encoded char entities.
3824 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3825 -batchDeleteAction]): new method to delete selected entries in the
3828 * SoObjects/Appointments/SOGoAppointmentFolder.m
3829 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): new method
3830 that delete identified entries in batch.
3832 * UI/SOGoUI/UIxComponent.m ([UIxComponent
3833 -jsCloseWithRefreshMethod:methodName]): new method with explicit purpose.
3835 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]),
3836 UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
3837 -saveAction]), UI/MailerUI/UIxMailEditor.m ([UIxMailEditor
3838 -sendAction]), UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3840 return a UIxJSClose component if everything went fine.
3842 * UI/Scheduler/UIxTaskEditor.h: interface extracted from
3845 * UI/Scheduler/UIxAppointmentEditor.h: interface extracted from
3846 UIxAppointmentEditor.m.
3848 * UI/Common/UIxJSClose.[hm]: new UIxComponent designed to display
3849 a very light page with javascript code to close a window, by
3850 calling a method on the opener if specified. This component is
3851 designed to work as a response to form postings.
3853 2006-10-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3855 * SoObjects/Appointments/SOGoTaskObject.[hm]: clone of
3856 SOGoAppointmentObject adapted for the handling of tasks.
3858 * SoObjects/Appointments/NSArray+Appointments.[hm]: category
3859 extracted from SOGoAppointmentObject.
3861 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
3862 -saveUrl]): returns the url needed to POST the new form to.
3863 redirect the user to <aptid>/editAsAppointment instead of /edit,
3864 so that SOGoAppointmentFolder can return the correct object type.
3866 * SoObjects/SOGo/NSObject+AptComparison.m ([NSObject
3867 -compareAptsAscending:_other]): accept empty start or end dates.
3869 * SoObjects/Appointments/SOGoAppointmentFolder.m
3870 ([SOGoAppointmentFolder
3871 -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.
3872 ([SOGoAppointmentFolder -doCalendarQuery:context]): fetch
3873 components of type "vtodo" as well as "vevent".
3874 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): if the
3875 url specified ends with AsTask or AsAppointment, returns the
3876 an object of the appropriate class, otherwise deduce it from its
3877 content if the HTTP method is "PUT", otherwise read its type from
3880 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3881 -extractQuickFieldsFromTodo:_task]): extract quick fields from
3884 * UI/Scheduler/UIxCalView.m ([UIxCalView
3885 -fetchCoreAppointmentsInfos]): replacement methods for
3886 fetchCoreInfos but by retrieving object with component "vevent".
3887 ([UIxCalView -fetchCoreTasksInfos]): same as above for "vtodo"
3890 * UI/Scheduler/UIxCalTasksListView.[hm]: clone of
3891 UIxCalAptListView adapted for the handling of tasks.
3893 * UI/Scheduler/UIxTaskProposal.[hm],
3894 UI/Scheduler/UIxTaskView.[hm], UI/Scheduler/UIxTaskEditor.[hm]:
3895 clones of the UIxAppointment* classes for the handling of tasks.
3897 * UI/WebServerResources/UIxTaskEditor.js: clone of
3898 UIxAppointmentEditor adapted for the handling of tasks.
3900 * UI/WebServerResources/SchedulerUI.js: added support for tasks.
3901 Scroll the daily view to the appropriate hour when an appointment
3902 is selected in the appointments list.
3904 2006-10-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3906 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
3907 -setDayStartHour:aStartHour]): specifies the user timezone on the
3910 * UI/Scheduler/UIxAppointmentEditor.m: indicate DTSTAMP with "GMT"
3913 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate -adjustedDate])
3914 ([NSCalendarDate -driftedDate]): methods made useless by a better
3915 comprehension of the NSTimeZone API...
3917 2006-10-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3919 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): call
3920 new methods from the NSCalendarDate methods.
3922 * SoObjects/SOGo/NSCalendarDate+SOGo.m: module replacing and
3923 extending UI/Scheduler/NSCalendarDate+Scheduler.m.
3925 +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).
3926 ([NSCalendarDate -adjustedDate]): this method returns another
3927 instance set to the correct hour after the original date was set
3928 from a non-GMT timezone. This date can be used for storage.
3929 ([NSCalendarDate -driftedDate]): this method does exactly the
3930 opposite of -adjutedDate, that is, it enables the method
3931 hourOfDay, minuteOfHour etc... to return the values according to
3932 the original date's timezone. This date CANNOT be used for storage.
3934 * UI/Scheduler/NSCalendarDate+Scheduler.m ([NSCalendarDate
3935 -shortDateString]): new method that will return a "short date
3936 string" (yyyymmdd) from a calendar date object.
3938 * UI/SOGoUI/UIxComponent.m ([UIxComponent
3939 -_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.
3941 * Main/sogod.m (main): initialize the NSTimeZone's defaultTimeZone
3942 to the value of SOGoServerTimeZone or "Canada/Eastern" if not found.
3944 2006-10-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3946 * UI/WebServerResources/SchedulerUI.js: added code to scroll the
3947 view of the day at the height of hour 8:00.
3949 * UI/Scheduler/UIxCalView.m ([UIxCalView -dayStartHour]): returns 0.
3950 ([UIxCalView -dayEndHour]): returns 24.
3952 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView -defaultAction])
3953 ([UIxContactFoldersView -newAction]): invoke
3954 _selectActionForApplication: on self with the proper attribute too.
3956 * UI/Contacts/UIxContactsSelectionViewContainer.m: removed since
3957 we now use the action mechanism in UIxContactsListView to keep the
3958 same view for the contact selectors and the regular contact view.
3960 * UI/Contacts/UIxContactsListViewContainer.[hm]: replaces
3961 UIxContactsListViewContainerBase.[hm]
3963 * UI/Contacts/UIxContactsListView.[hm]: replaces UIxContactsListViewBase.[hm]
3965 * UI/WebServerResources/generic.js: generalized emailstring
3966 handling functions. Generalized address book access functions.
3968 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
3969 -isPopup]): return YES if the "popup" query parameter is set.
3971 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3972 -defaultAction]): keep the url parameters when redirecting.
3973 ([UIxContactFoldersView -selectForSchedulerAction])
3974 ([UIxContactFoldersView -selectForMailerAction]): new action
3975 methods for the /scheduler-contacts and /mailer-contacts invocations.
3977 * SoObjects/SOGo/SOGoObject.m: compose the action url using the
3978 newly available NSString+URL category.
3980 * SoObjects/SOGo/NSDictionary+URL.m ([NSDictionary
3981 -asURLParameters]): handle dictionary entries which could be
3982 instances of NSArray rather than NSString.
3984 * SoObjects/SOGo/NSString+URL.m ([NSString
3985 -composeURLWithAction:actionparameters:urlParametersandHash:useHash]): when composing the url, remove the encoded parameters first since they will be added later.
3986 ([NSString -urlWithoutParameters]): new method that returns the
3987 url without its parameters.
3989 * SoObjects/SOGo/NSString+iCal.h: deleted obsolete file.
3991 * SoObjects/SOGo/NSDictionary+URL.[hm],
3992 UI/SOGoUI/NSString+URL.[hm]: moved from UI/SOGoUI/.
3994 * UI/WebServerResources/UIxMailEditor.js: add support for
3995 additions of different types (to, cc, bcc) of recipients from the
3998 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): added the
4001 * UI/Contacts/UIxContactsMailerSelection.m,
4002 UI/Contacts/UIxContactsSchedulerSelection.m: classes replacing
4003 UI/Contacts/UIxContactsSelectionView.m to provide a different set
4004 of widgets depending on the application invoking the contact list.
4006 2006-09-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4008 * UI/WebServerResources/ContactsUI.js: hide the current contact
4009 whenever the user changes of contact folder.
4011 * UI/WebServerResources/UIxContactEditor.js: the contact UID is
4012 now provided by the template when loading the page.
4014 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
4015 -iCalPersonWithUid:uid]): new method taken from removed module
4018 2006-09-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4020 * UI/Scheduler/UIxAppointmentView.m ([UIxAppointmentView
4021 -categoriesAsString]): same as below.
4023 * UI/Scheduler/UIxAppointmentEditor.m: adapted by using the new
4024 vcalendar API's iCalEvent instead of the removed SOGoAppointment.
4026 * SoObjects/Appointments/SOGoAppointmentObject.m
4027 ([SOGoAppointmentObject -calendarFromContent:cnt]): new helper method.
4028 ([SOGoAppointmentObject -firstEventFromCalendar:calendar]): new
4031 * SoObjects/Appointments/SOGoAppointmentFolder.m
4032 ([SOGoAppointmentFolder -doCalendarQuery:context]): added a
4033 hackish test to detect whether the request concernes VEVENT's or
4034 anything else. Return events only in the former case.
4035 ([SOGoAppointmentFolder
4036 -fetchOverviewInfosFrom:_startDateto:_endDate]): retrieve the
4037 c_name quickfield so that the calendar list can identify the
4038 appointments with their complete "filename".
4040 * OGoContentStore/OCSiCalFieldExtractor.m: use CardGroup's
4041 groupsOfClass:fromSource: to parse the given vcalendar.
4043 * UI/Scheduler/iCalRecurrenceRule+SOGo.m: removed obsolete class.
4045 * UI/Scheduler/SOGoAppointment+UIx.h: removed obsolete class.
4047 * SoObjects/SOGo/SOGoAppointmentICalRenderer.[hm]: removed
4050 * SoObjects/SOGo/SOGoAppointment.[hm]: removed obsolete class.
4052 2006-09-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4054 * SoObjects/Appointments/SOGoAppointmentFolder.m
4055 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): be
4056 sensitive to the CalDAV method names.
4057 ([SOGoAppointmentFolder -doCalendarQuery:context]): method for the
4058 "calendar-query" CalDAV method name.
4060 * UI/WebServerResources/ContactsUI.js: removed a lot of useless
4061 code coming originally from MailerUI.js.
4063 * UI/WebServerResources/UIxContactEditor.js: imitate the
4064 Thunderbird address book by completing the display name with the
4065 content of the first and last name fields, until the display name
4066 is modified manually.
4068 * UI/WebServerResources/generic.js: added a "trim" method to the
4071 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
4072 -displayName]): new method that returns the display name from "cn"
4073 or from the "displayName" key if found.
4075 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4076 -initSnapshot]): check if "[card n]" returns anything to avoid a
4079 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): new method
4080 that returns an unparsed doctype definition for the pages.
4082 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4083 -vCard]): set the card's fn to attribute "displayName" if found
4086 2006-09-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4088 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4089 -vCard]): handle the "streetAddress" and "l" fields.
4091 * UI/Templates/MailerUI/UIxMailEditor.wox: arranged the message
4092 header fields by converting the tables to DIVs and SPANs.
4094 * UI/WebServerResources/generic.css: attempted unification of font
4095 families and size across all the elements. changed the
4096 logConsole's "position" from "fixed" to "absolute" to avoid
4099 2006-09-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4101 * UI/WebServerResources/ContactsUI.js (uixDeleteSelectedContacts):
4102 empty the contact view when the current contact is being deleted.
4104 * UI/WebServerResources/MailerUI.js (newContactFromEmail): fully
4105 parse the email field and provide the address full name if found
4106 as the "contactFN" parameter.
4108 * UI/WebServerResources/generic.js (openMailTo): do not give a
4109 name to the opened window so that serveral ones can be opened at
4112 * UI/MailPartViewers/UIxMailPartTextViewer.m
4113 ([UIxMailPartTextViewer -flatContentAsString]): override method by
4114 replacing carriage returns with "<br />" in the result string from
4115 super's implementation.
4117 * UI/Contacts/UIxContactView.m ([UIxContactView
4118 -_urlOfType:aType]): don't manage non-mailto urls through
4119 javascript, let the user decide what's best for him.
4121 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4122 -newAction]): transfer all the query parameters by using the
4123 "asURLParameters"'s result string from [self queryParameters].
4125 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
4126 -initSnapshot]): retrieve "contactEmail" and "contactFN" from the
4127 query parameters and put their values (if any) into the snapshot.
4129 * UI/Contacts/UIxContactView.m ([UIxContactView -note]): convert
4130 carriage-returns to "<br />".
4131 ([UIxContactView -workCompany]): explicitly initialize company to
4132 nil if org is nil or empty.
4134 * UI/WebServerResources/UIxContactEditor.js: updated validation
4135 code after we added and renamed some fields.
4137 * UI/WebServerResources/ContactsUI.js: added code to cache contact
4138 cards and to handle card updates.
4140 2006-09-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4142 * UI/Contacts/UIxContactView.m ([UIxContactView -hasOtherInfos]):
4143 test the length of the returned string since they will never be
4146 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor -saveAction]):
4147 return self if the process went successful, returns an exception
4148 otherwise (and only otherwise...).
4150 * OGoContentStore/OCSContactFieldExtractor.m
4151 ([OCSContactFieldExtractor -extractQuickFieldsFromVCard:_vCard]):
4152 adapted method to the new VCard api. Since the cards are stored in
4153 vcard format, we no longer deal with a dictionary but with a
4156 2006-09-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4158 * UI/Contacts/UIxContactView.m ([UIxContactView -preferredEmail]):
4159 return a string with a "mailto" url.
4160 ([UIxContactView -_urlOfType:aType]): generic method to return a
4161 url string with a html anchor pointing to it.
4163 * UI/Contacts/UIxContactEditor.[hm]: UIxContactEditorBase renamed
4164 since subclass "UIxContactEditor" did nothing. Implemented code to
4165 display and modify the values parsed from the vcards, displayed in
4166 a way similar to the Thunderbird addressbook.
4168 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4169 -save]): new dummy method.
4171 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
4172 -save]): made method void.
4174 2006-09-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4176 * UI/Contacts/UIxContactView.m: added many wrapper methods to
4177 display blocks of data à la Thunderbird Addressbook. If data is
4178 available, those wrappers (around the NGVCard methods) will
4179 enclose the results in a proper HTML output with the correct label
4180 (if present), otherwise it will return an empty string.
4181 ([UIxContactView -vcardAction]): new action to return the contact
4182 as text/vcard (for exporting).
4184 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
4185 +contactEntryWithName:aNamewithLDAPEntry:anEntryinContainer:aContainer]): adapted the mapping of the LDIF data with the new NGVCard API.
4187 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
4188 -vCard]): create a new NGVCard instance when no data is available
4190 ([SOGoContactGCSEntry -save]): save the vCard using the new
4191 "versitString" API method/message.
4193 * UI/Contacts/UIxContactView.h: separated interface from
4196 * UI/WebServerResources/ContactsUI.js: add-ed code to download card
4197 views and display them beneath the list.
4199 2006-09-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4201 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -userTimeZone]): retain
4202 the timezone even when it's the server timezone.
4204 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
4205 -privateContacts:inContext:]): no long configure the calendar
4206 object with the user's timezone since it's now accessible
4207 application-wide throught the SOGoObject methods.
4209 * UI/SOGoUI/UIxComponent.[hm]: removed the "viewTimeZone" ivar and
4210 method. Removed the "backendTimeZone" method.
4212 * UI/MainUI/SOGoUserHomePage.[hm]: made a subclass of UIxComponent
4213 instead of SoComponent.
4215 * SoObjects/Appointments/SOGoAppointmentObject.m:
4216 ([SOGoAppointmentObject -viewTimeZoneForPerson:_person]): returns
4217 [self serverTimeZone] instead of "EST" (which was removed).
4219 * SoObjects/Appointments/SOGoAppointmentFolder.[hm]: removed the
4220 "timeZone" ivar and its accessors.
4222 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -serverTimeZone]): new
4223 centralized method returing the timezone configured in the
4224 userdefaults db or "Canada/Eastern" if missing.
4225 ([SOGoObject -userTimeZone]): new centralized method returing the
4226 timezone of the current user or the server timezone if missing
4227 from the user configuration table.
4229 2006-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4231 * UI/WebServerResources/SchedulerUI.js: implemented caching of
4234 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]):
4235 return a path based on the object's context instead of the first
4236 level in SOGo's object hierarchy...
4238 2006-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4240 * UI/Templates/SchedulerUI/UIxCalDayTable.wox: day columns can now
4243 * UI/Templates/SchedulerUI/UIxCalDateSelector.wox: pass the user's
4244 timezone ([self viewTimeZone]) to the WEMonthOverview component to
4245 avoid a confusion with the days.
4247 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: appointments
4250 * UI/WebServerResources/SchedulerUI.js: implemented a mechanism to
4251 imitate Sunbird's synchronization between the 3 visible views.
4253 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): make
4254 sure the numbers in dateString are formatted so as to take 4 chars
4255 for the year and 2 for the day and the month, otherwise
4256 NSCalendarDate will return a nil date.
4257 ([UIxComponent -applicationPath]): return a path based on the
4258 object's context instead of the second level in SOGo's object
4261 2006-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4263 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): add the
4264 user's timezone abbreviation to the date string passed as parameter to
4265 NSCalendarDate to generate an accurate date instance. Do the same
4266 when no date is specified and today is chosen.
4268 * UI/WebServerResources/UIxAppointmentEditor.js: convert the
4269 form's time values to integers before comparing them.
4271 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -currentStartTime])
4272 ([UIxCalAptListView -currentEndTime]): initialize the resulting
4273 dates timezone with [self viewTimeZone].
4275 * UI/SOGoUI/UIxComponent.m ([UIxComponent -init]): new
4276 "viewTimeZone" ivar destined to hold an instance of the user's
4278 ([UIxComponent -viewTimeZone]): take the timezone from the user's
4281 2006-08-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4283 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: completely
4284 rearranged the layout.
4286 * UI/WebServerResources/UIxAppointmentEditor.js: added code to
4287 manage showing and hiding appointment details.
4289 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
4290 -privateContacts:inContext:]): init the SOGoAppointmentFolder's
4291 timezone by taking the current user's timezone setting.
4293 * SoObjects/Appointments/SOGoAptMailNotification.m: same as below.
4295 * SoObjects/Appointments/SOGoAppointmentObject.m
4296 ([SOGoAppointmentObject -changeParticipationStatus:inContext:]):
4297 set default timezone to EST, although this code should be
4298 rewritten to handle a system and a user default value.
4300 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
4301 -takeValuesFromRequest:_rqinContext:_ctx]): enhanced method to
4302 take the values from the hour and minute INPUTs when data is
4303 POSTed since we no longer use the UIxTimeSelector component.
4304 ([UIxTimeDateControl -selectableHours])
4305 ([UIxTimeDateControl -selectableMinutes]): new methods used by the
4306 template SELECTs to display reasonable and acceptable values
4307 instead of all the possibilities.
4309 * UI/WebServerResources/generic.js: adapted code for the new
4310 implementation of the UIxContactSelector component (added a
4311 "remove" button, removed the previous INPUT and replaced them with
4312 links of class "button").
4314 * UI/Scheduler/UIxTimeDateControl.h: separated interface from
4315 UIxTimeDateControl.m.
4317 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -currentAppointmentDay])
4318 ([UIxCalDayTable -currentAppointmentHour]): new methods that
4319 returns correctly formatted values used as attributes for JS code.
4321 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
4322 -initialContactsAsString]): renamed implementation of
4323 initialParticipants.
4324 ([UIxContactSelector -currentContactId])
4325 ([UIxContactSelector -currentContactName]): new methods used when
4326 listing the initial contacts in the widget. Currently, both return
4327 the person's cn but the latter should ultimately return a user
4330 * UI/Contacts/UIxContactSelector.h: separated interface from
4331 UIxContactSelector.m.
4333 * UI/Scheduler/UIxDatePickerScript.[hm]: component removed since
4334 all javascript code is now put in Scheduler.js/generic.js.
4336 * UI/Scheduler/NSCalendarDate+UIx.[hm]: category removed, code
4337 moved into NSCalendarDate+Scheduler instead.
4339 * SoObjects/Appointments/SOGoAppointmentFolder.m
4340 ([SOGoAppointmentFolder -setTimeZone:newTZ]): new method to
4341 configure the timezone from SOGoUserFolder when the instance is
4343 ([SOGoAppointmentFolder -viewTimeZone]): MET was removed. Returns
4344 the value of the new "timezone" ivar.
4346 2006-08-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4348 * UI/WebServerResources/SchedulerUI.{css,js}: added a tabview with
4349 the date selector in the first page and the container of the
4350 future calendar selector in the second page.
4352 * UI/WebServerResources/generic.js: added code for handling tabbed
4355 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productFrameworkName]):
4356 returns the bundle name associated to the current running product.
4358 2006-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4360 * UI/WebServerResources/UIxAppointmentEditor.js: fixed the AJAX
4361 exception by invoking a timeout on the opener rather than invoking
4362 the list refresh method.
4364 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]):
4367 * UI/Scheduler/UIxCalWeekView.m ([UIxCalWeekView -weekBeforePrevWeekQueryParameters])
4368 ([UIxCalWeekView -prevWeekQueryParameters])
4369 ([UIxCalWeekView -nextWeekQueryParameters])
4370 ([UIxCalWeekView -weekAfterNextWeekQueryParameters]): new methods
4371 that return the dates relatively to the current day.
4372 ([UIxCalWeekView -lastWeekName])
4373 ([UIxCalWeekView -currentWeekName])
4374 ([UIxCalWeekView -nextWeekName])
4375 ([UIxCalWeekView -weekAfterNextWeekName])
4376 ([UIxCalWeekView -_weekNumberWithOffsetFromToday:offset]): new
4377 methods that returns the label for the corresponding weeks.
4379 * UI/Scheduler/UIxCalDayTable.[hm]: new class module/component
4380 used by UIxCalDayView and UIxCalWeekView to display the events
4381 occuring in one or more days.
4383 2006-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4385 * UI/Scheduler/UIxCalMainView.m: extended class to populate the
4386 entries in the new "monthMenu" and "yearMenu".
4388 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]): new
4389 method to return the current day as a string formatted depending
4390 on the current locale.
4392 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
4393 ([UIxCalAptListView -endDate]): "today" is now the default filter
4394 for displayed events.
4395 ([UIxCalAptListView -currentSerialDay]): new method returning the
4396 date of the current enumerated appointment in serial form
4399 * UI/WebServerResources/SchedulerUI.js: added code to select the
4400 relevant day when an appointment is selected. Added code to popup
4401 a month and a year menu whenever the header entries are clicked in
4402 the calendar widget.
4404 * UI/WebServerResources/generic.js: made addClassName and
4405 removeClassName methods of HTMLElement.
4407 2006-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4409 * UI/WebServerResources/MailerUI.js: fixed the contact creation
4410 from email addresses.
4412 * UI/WebServerResources/generic.js: centralized the search-related
4413 functions here since the same code was used across the 3
4416 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
4417 ([UIxCalAptListView -endDate]): return the required dates needed
4418 depending on the value given to the "filterpopup" url parameter.
4420 * UI/Common/UIxToolbar.m ([UIxToolbar -buttonLabel]): reduced the
4421 code by invoking UIxComponent's labelForKey:.
4423 * UI/SOGoUI/UIxComponent.m ([UIxComponent -labelForKey:]): use
4424 [self pageResourceManager] instead of [self resourceManager].
4426 * UI/Contacts/UIxContactEditorBase.m: invokes
4427 globallyUniqueObjectId on the clientobject's class instead of the
4428 hardcoded "SOGoFolder".
4430 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
4431 -newAction]): redirect the "new" action to the personal (default)
4434 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
4435 +objectWithName:inContainer:]): new constructor.
4437 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
4438 -lookupContactWithId:recordId]): always create a contact object,
4439 even if it does not exist.
4441 2006-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4443 * UI/Scheduler/UIxCalMainView.[hm]: new class to serve as a pseudo
4444 component that lays out the different components of SOGoCalendar.
4445 Only serves as an Objective-C counterpart to its xml template.
4447 * UI/Scheduler/UIxCalInlineMonthOverview.h: interface extracted
4450 * UI/Scheduler/UIxCalFilterPanel.[hm]: new class designed to
4451 display a widget to handle the information displayed in the
4452 appointments list. Not currently used, lacks implementation.
4454 * UI/Scheduler/UIxCalDateSelector.[hm]: new class designed to
4455 display a calendar as a dynamic widget from where one can select
4456 the current visible day.
4458 * UI/Scheduler/NSCalendarDate+Scheduler.[hm]: category code
4459 extracted from UIxCalInlineMonthOverview.m.
4461 * UI/Scheduler/UIxDatePicker.m: removed the jsPopup, jsCode and
4462 calendarPageURL methods. The javascript code is handled by .js
4463 files as much as possible...
4465 * UI/WebServerResources/ContactsUI.js,
4466 UI/WebServerResources/MailerUI.js: adapted to the code refactoring
4469 * UI/WebServerResources/SchedulerUI.js: implemented functions to
4470 handle the new widgets. XmlHTTPRequest code taken from
4473 * UI/WebServerResources/generic.js: put some functions related to
4474 element selections as methods to HTMLElement and HTMLTableElement.
4476 * UI/Scheduler/UIxCalAptListView.[hm]: new class designed to
4477 display the list of appointments (embodies the code-size of
4478 UIxCalAptListView; answers to the "aptlist" method).
4480 2006-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4482 * UI/Scheduler/UIxCalWeekOverview.m ([UIxCalWeekOverview
4483 -correctURLAction]): new short action method replacing the method
4484 below by taking far less code.
4486 * SoObjects/Appointments/SOGoAppointmentFolder.m
4487 ([SOGoAppointmentFolder -GETAction:]): removed method. Replaced
4488 with an action in the view-related code.
4490 * UI/Scheduler/UIxAppointmentEditor.m: invoke
4491 "stringByEscapingHTMLString" on the resulting value to avoid
4492 issues with accented characters.
4493 ([-jsCode]): removed method since the javascript code was merged
4494 into SchedulerUI.js.
4496 2006-08-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4498 * UI/Scheduler/iCalPerson+UIx.m ([iCalPerson +personWithUid:]):
4499 new class method that returns an iCalPerson based on the UID given
4502 * UI/Contacts/UIxContactsListViewContainerBase.m:
4503 UIxContactsListViewContainer renamed to serve as a base class for
4504 the contact lists in both the contact editor and the contact
4507 * SoObjects/Contacts/SOGoContactLDAPFolder.m
4508 ([SOGoContactLDAPFolder
4509 -LDAPSetHostname:setPort:setBindDN:setBindPW:setContactIdentifier:
4510 setUserIdentifier:setRootDN:]): an LDAP field specifying the
4511 loginname of the users can now be specified.
4513 * UI/WebServerResources/generic.js: added code to manage contact
4514 lists through the new implementation of the UIxContactSelector.
4516 * UI/Templates: put the templates related to SchedulerUI in its
4519 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
4520 -asDictionaryWithAttributeNames:withUID:andCName:cName]): add an
4521 entry for "uid" with the field name representing the login name of
4522 the user in the corresponding LDAP branch.
4524 2006-08-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4526 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
4527 -lookupName:_keyinContext:_ctxacquire:_flag]): when the HTTP
4528 request is a PUT, always create an entry, even if we're not sure
4531 2006-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4533 * UI/WebServerResources/ContactsUI.js: implemented live-search.
4535 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
4536 -appendSystemSourcesInContext:context]): populated method with
4537 code that creates entries mapped to instances SOGoContactFolder,
4538 based on the configuration found in the NSUserDefaults under the
4539 key "SOGoLDAPAddressBooks".
4540 ([SOGoContactFolders
4541 -lookupName:nameinContext:contextacquire:acquire]):
4542 "contactsources" do not exist anymore, SOGoContactFolder was split
4543 into two classes: SOGoContactGCSFolder and SOGoContactLDAPFolder
4544 and one protocol: SOGOContactFolder, instead.
4545 ([SOGoContactFolders -contactFolders]): new accessor used by the
4546 views of SOGoContactXXXFolder to list the possible sources.
4548 * SoObjects/Contacts/SOGoContactObject.h: new protocol that
4549 defines the methods that UIxContactsView, ..Editor and so on...
4552 * SoObjects/Contacts/SOGoContactFolder.h: new protocol that
4553 defines the methods that UIxContactsListViewBase expects as well
4554 as the data fields returned in the contact lists.
4556 * SoObjects/Contacts/SOGoContactLDAPFolder.[hm]: new class that
4557 returns entries an LDAP server. Conforms to the new
4558 SOGOContactFolder protocol.
4560 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: new class that
4561 returns a vCard based on contact entries from an LDAP server.
4562 Conforms to the new SOGOContactObject protocol.
4564 * SoObjects/Contacts/NGVCardSimpleValue+Contact.m
4565 ([NGVCardSimpleValue -vCardEntryString]): generates the correct
4566 entry for the textual representation of the vCard.
4568 * SoObjects/Contacts/NGVCardSimpleValue+Contact.[hm]: new class
4571 * SoObjects/Contacts/SOGoContactGCSEntry.[hm]: new module name of
4572 "SOGoContactObject".
4574 * SoObjects/Contacts/NGVCard+Contact.m ([NGVCard -asString]): new
4575 method that generates a textual representation of the vcard.
4577 * SoObjects/Contacts/NGVCard+Contact.[hm]: new class extension.
4579 * SoObjects/Contacts/SOGoContactGCSFolder.[hm]: new module name of
4580 "SOGoContactFolder".
4582 * SoObjects/Contacts/SOGoContactSource.h,
4583 SoObjects/Contacts/SOGoPersonalAB.[hm]: unused classes and
4586 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
4587 -singleAttributeWithName:key]): new method that returns the first
4588 object associated with an ldap key (where generally one value is
4591 -asDictionaryWithAttributeNames:attributeNamesandCName:cName]):
4592 map the entry into an NSDictionary for processing by
4593 UIxContactsListViewBase.m with the least possible overhead.
4595 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: new class
4598 2006-08-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4600 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
4601 -privateContacts:inContext:]): now returns an instance of
4604 * UI/Contacts/UIxContactsListViewContainer.m
4605 ([UIxContactsListViewContainer -contactFolderName]): new method to
4606 return the absolute path to the current contact folder, called
4607 from within the template.
4609 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
4610 JS code to initialize the 'currentContactFolder' generic var.
4612 * SoObjects/Contacts/SOGoContactFolder.m ([SOGoContactFolder
4613 +contactFolderWithSource:inContainer:andName:]): new class
4614 method meant to return an instance connected to the specified
4615 source. Currently useless but won't be anymore in the next few
4618 * SoObjects/SOGo/SOGoUserFolder.h: commented out declaration of
4619 the "lookupFreeBusyObject" method since it does not exist.
4621 * UI/Contacts/UIxContactFoldersView.[hm]: new class module serving
4622 as a "view" for the SOGoContactFolders object. Does nothing but
4623 redirect the browser to the URL of the personal address book of
4624 the user. It does not even have a template.
4626 * SoObjects/Contacts/SOGoPersonalAB.[hm]: new class module
4627 implementing the SOGoContactSource protocol. Does nothing
4628 currently but will be used to implement access to the personal
4629 address book of the user stored in the SOGo database.
4631 * SoObjects/Contacts/SOGoContactSource.h: new "SOGoContactSource"
4632 protocol defining an API common to all possible types of contact
4635 * SoObjects/Contacts/SOGoContactFolders.[hm]: new class module
4636 serving as the root of the contact folders available to the
4637 current user. Correctly lists the contact sources in webdav.
4639 2006-08-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4641 * UI/MailerUI/UIxMailAccountsView.m ([UIxMailAccountsView
4642 -composeAction]): new action method that permits external object
4643 to write a message from the default (primary) account.
4645 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
4646 -initSnapshot]): new method with code taken from "defaultAction"
4647 but needed for others.
4648 ([UIxContactEditorBase -writeAction]): new action designed to
4649 compose the correct URL needed to obtain the MailerUI's email
4650 editor with the correct "mailto" parameter.
4652 * UI/Common/UIxSortableTableHeader.m: moved from MailerUI to
4653 Common so that other modules can use it.
4655 * UI/Contacts/UIxContactsListViewContainer.m: container to make it
4656 easier to manage both ajax and non-ajax requests.
4658 * UI/Contacts/UIxContactsFilterPanel.m: clone of
4659 UIxMailFilterPanel, but applicable to contact lists.
4661 * SoObjects/Contacts/NSDictionary+Contact.m ([NSDictionary
4662 -vcardContentFromSOGoContactRecord]): use the new standard methods
4663 created for each type of entry. If a line is determined to not
4664 contain information, it will be skipped.
4666 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
4667 +initialize]): init defaultMailDomain with the user default
4668 "SOGoDefaultMailDomain".
4670 2006-08-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4672 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
4673 -saveAction]): reorganized methods to only have ONE return point.
4674 Invoke saveRecord: directly on the clientObject instead of
4675 saveContentString, which does the same thing anyway.
4677 * SoObjects/Contacts/NSDictionary+Contact.m
4678 ([NSDictionary -vcardContentFromSOGoContactRecord]): extension
4679 method to convert the dictionary returned with the user submission
4680 to a record in VCARD format to be stored in the database.
4682 2006-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4684 * UI/WebServerResources/MailerUI.js: when opening the context menu
4685 of the message list, select the message below the mouse cursor and
4686 deselect the other selected messages temporarily. This mimics the
4687 behaviour of Thunderbird for that matter and was already
4688 implemented for the entries of the folder tree.
4690 * UI/MailerUI/UIxMailFolderMenu.m ([UIxMailFolderMenu
4691 -iconForMenuItem]): new method that returns the fully qualified
4692 relative URL to the icon representing the mailbox, or the default
4693 mailbox icon if needed.
4695 * UI/SOGoUI/UIxComponent.m ([UIxComponent
4696 -urlForResourceFilename:filename]): automatically return an empty
4697 string whenever the filename passed as argument is nil.
4699 * UI/WebServerResources/MailerUI.js: open the mailboxes with the
4700 "desc" parameter set to 1 so that they are sorted in descending
4701 order by default. Also, added "onHeaderClick()", triggered by
4702 clicking on the message list header elements.
4704 * UI/MailerUI/UIxMailSortableTableHeader.m
4705 ([UIxMailSortableTableHeader -isSortedDescending]): same as below.
4707 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
4708 -isSortedDescending]): defaults to "YES" when the sort order is
4711 2006-07-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4713 * UI/WebServerResources/MailerUI.js:
4714 - message cache: set the max num of cached messages to 20. Limit
4715 the cached message size to 30000 bytes.
4716 - ajax: when a message request is called while one is already
4717 being performed, the latter will be cancelled. Idem when
4718 retrieving the content of a mailbox.
4719 - folder tree: when a mailbox is selected because of the URL
4720 requested (initMailboxSelection), the dtree is expanded throughout
4721 the mailbox entry's parent hierarchy to ensure it is made visible
4722 when the page is being displayed. (new function: expandUpperTree).
4723 - mailbox loading: when loading a mailbox where a message was
4724 previously selected, we invoke its url with the "pageforuid"
4725 parameter correctly specified. During callback processing, we scan
4726 the table for the related row and reselect it.
4727 Also, the message area is set blank before loading any mailbox.
4729 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
4730 -defaultAction]): if the "pageforuid" parameter is passed in the
4731 url, take its value and invoke [self firstMessageOfPageFor:]
4732 consequently to deduce the first message to display. Otherwise,
4733 set it to "idx", otherwise set it to 0.
4734 ([UIxMailListView -firstMessageOfPageFor:]): new method
4735 that determines the first message of the page where the message
4736 passed as parameter is contained.
4738 * UI/WebServerResources/UIxMailListView.js: removed this module,
4739 its code was put in MailerUI.js instead.
4741 2006-07-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4743 * UI/MailerUI/UIxMailFolderMenu.m: a descendent of UIxMailTree
4744 which returns the nodes for the parent specified in "parentMenu".
4745 Used to generate the javascript code for the folder dtree.
4747 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: the components
4748 using that container-template are now using UIxMailMainFrame
4749 since UIxMailPanelFrame had no real interest. File removed.
4751 * UI/WebServerResources/dtree.{css,js}: new files to handle
4752 javascript-generated mailbox tree. Modified from original version
4753 by integrating the previous code with the one we are using for
4754 selections and mailbox handling. Minor visual enhancements too...
4756 2006-07-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4758 * SoObjects/Mailer/SOGoUser+Mail.m: if only one identity is to be
4759 returned, put it in an NSArray before returning it (fixes
4762 2006-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4764 * UI/SOGoUI/NSString+URL.m ([NSString -hostlessURL]): new method
4765 that returns a url string stripped from its "http://hostname"
4768 * UI/SOGoUI/NSDictionary+URL.[hm]: moved from UI/Common.
4770 * UI/SOGoUI/NSString+URL.[hm]: moved from UI/Common.
4772 2006-07-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4774 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
4775 -mailDateFormatter]): retrieve the timezone from the user settings
4776 and pass it to the returned dateFormatter. Also, the dateFormatter
4777 is kept in a static variable to avoid useless
4778 creations/destructions.
4780 * UI/MailerUI/UIxMailFormatter.m ([UIxMailDateFormatter
4781 -setTimeZone:newTimeZone]): new accessor to specify the timezone.
4783 * UI/MailerUI/UIxMailFilterPanel.m ([UIxMailFilterPanel -setSearchCriteria:])
4784 ([UIxMailFilterPanel -searchCriteria]): new methods, similar to
4785 s/Criteria/Text/ to handle the "criteria" form parameter.
4787 2006-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4789 * UI/WebServerResources/uix.css: enhanced the toolbar appearance
4790 to integrate better with the firefox look&feel. Added entries for
4791 the new "menu" DIV class (popup menus).
4793 * UI/WebServerResources/generic.js: added "sanitizeMailTo" which
4794 takes any chunk of text as param, detects the user email and the
4795 optional first and last names and return them in a well-formatted
4796 way. Renamed "getSelection" to "getSelectedNodes" to avoid a
4797 namespace conflict. Added "onMenuClick(node, event, menuId)" to
4798 handle popup menus through "onclick" element attributes (node =
4799 this, event = event and menuId = name of the menu DIV id to
4802 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
4803 -snapshot]): add an entry for "email" into the snapshot
4804 dictionary if a "contactEmail" URL parameter was detected and if
4805 the entry for "email" is empty.
4807 * UI/Contacts/Toolbars/SOGoContactFolder.toolbar: the "new card"
4808 button now invokes the newContact() js function in ContactsUI.js
4809 instead of opening "new" directly. newContact() pops up a window
4810 stripped from its navigation bar.
4812 * UI/Contacts/ContactsUI.js: new module specific to the ContactsUI
4813 bundle (AddressBook).
4815 * UI/Templates/MailerUI/UIxMailView.wox: added a div of class
4816 "menu" and id "addressMenu" have the header email addresses
4817 display it with the new menu code in generic.js.
4819 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: same as below +
4820 replaced the body tables with a div of class "pageContent"
4821 (standardization across the page templates).
4823 * UI/Templates/MailerUI/UIxMailMainFrame.wox: include
4824 productJavaScriptURL and pageJavaScriptURL (conditionnally) since
4825 those are now inherited from UIxPageFrame.
4827 * UI/MailerUI/UIxMailView.js: new file specific to UIxMailView.
4829 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]): if
4830 a "mailto" URL parameter is detected and the "to" array is empty,
4831 initialize "to" with the value of "mailto" before returning it.
4833 * UI/MailerUI/UIxMailEditorAction.m ([UIxMailEditorAction
4834 -composeAction]): rewrote method in a cleaner way and with usage
4835 of the URL extensions to NSString and NSDictionary (see below).
4836 Also, if a "mailto" url parameter is detected, pass it to the
4839 * UI/MailerUI/UIxMailMainFrame.m: subclassed from UIxPageFrame to
4842 * UI/Common/NSDictionary+URL.m ([NSDictionary -asURLParameters]):
4843 returns a parameter string to add to a base URL.
4845 * UI/Common/NSString+URL.m ([NSString
4846 -composeURLWithAction:parameters:andHash:useHash]): new method to
4847 compose a complete URL from an object URL with parameters and an
4848 optional '#' character.
4850 * UI/Common/UIxPageFrame.h: separated interface from
4853 2006-07-07 Wsourdeau Sourdeau <wsourdeau@inverse.ca>
4855 * UI/Scheduler/UIxAppointmentEditor.m: returns yes to "isPopup";
4857 * UI/WebServerResources/generic.js: added code to manage
4858 selections within HTML containers.
4860 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productJavaScriptURL]):
4861 added method to determine the possible URL for a product-specific
4862 javascript filename of the forme <productname>.js.
4863 ([UIxPageFrame -hasProductSpecificJavaScript]): new method.
4864 ([UIxPageFrame -isPopup]): new method to determine whether the
4865 application navigator bar should be displayed (main page) or not
4868 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
4869 -LDAPCheckLogin:_loginpassword:_pwd]): new method to authenticate
4870 the user through LDAP.
4872 2006-07-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4874 * The toolbar code from the MailerUI product was taken, renamed as
4875 "UIxToolBar" and put into UI/Common. Toolbar plists were created
4876 for the Contacts and Scheduler products and put in their respectir
4877 Toolbars/ subdirectories. Finally,
4878 UI/Templates/{UIxToolbarButton,UIxToolbarSeparator}.wox, and
4879 UI/Common/{UIxToolbarButton,UIxToolbarSeparator}.m were removed
4880 and an invocation to the UIxToolbar component was put at the top
4881 of UI/Templaces/UIxPageFrame.wox.
4883 * UI/Common/UIxToolbar.m: new "isLastGroup" method to determine
4884 within the templates whether a separator should be displayed.
4886 * UI/Common/UIxToolbar.m ([UIxToolbar -hasButtons]): new method
4887 that returns NO if the toolbar is empty.
4889 2006-07-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4891 * UI/Templates/UIxPageFrame.wox: replaced central table with a DIV.
4893 * UI/Common/UIxToolbarSeparator.m, UI/Common/UIxToolbarButton.m:
4894 new toolbar objects.
4896 * UI/Templates/UIxPageFrame.wox: use the exact html code as below.
4898 * UI/Templates/MailerUI/UIxMailMainFrame.wox: redone the
4899 linkbanner as a DIV instead of a TABLE.
4901 * UI/MailerUI/UIxMailMainFrame.m [UIxMailMainFrame
4903 returns 'YES' to request the display of the navigation bar between
4906 2006-06-15 ludovic@inverse.ca
4908 * It's now possible to set the default
4909 domain using for email using the
4910 SOGoDefaultMailDomain preference key.
4912 2006-06-15 ludovic@inverse.ca
4914 * Initial import of SOGo from trunk.