1 2007-09-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3 * SoObjects/Appointments/SOGoAppointmentFolder.m
4 ([-deleteEntriesWithIds:ids]): moved method into SOGoFolder.
6 * UI/Scheduler/UIxCalMainView.m ([-batchDeleteAction]): moved
7 method into UIxFolderActions.
9 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
10 -fetchFreeBusyInfosFrom:_startDateto:_endDate]): fetch the
11 freebusy info from the "personal" calendar.
13 * UI/Common/UIxParentFolderActions.m ([UIxParentFolderActions
14 -createFolderAction]): new standardized method for requesting
15 folder creations among gcs-based modules.
17 * UI/Common/UIxParentFolderActions.[hm]: new action class module.
19 * SoObjects/Appointments/SOGoAppointmentFolders.m: new class
20 module, equivalent to the SOGoParentFolder's child
21 SOGoContactFolders, but for calendars.
23 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -labelForKey:key]): new
24 method that returns translated strings for controller bundles
25 (same as what UIxComponent does for view bundles).
26 ([SOGoObject -pathArrayToSOGoObject]): new method that returns
27 the real path to a subscribed folder (if subscribed).
28 ([SOGoObject +globallyUniqueObjectId]): move method from SOGoFolder.
29 ([SOGoObject -globallyUniqueObjectId]): new instance method
30 calling its class equivalent.
32 2007-09-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
34 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage -defaultAction]): test
35 whether the user is logged in and if so, redirect to his/her
37 ([SOGoRootPage -appendToResponse:inContext:]): removed useless
40 2007-09-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
42 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
43 +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
45 ([SOGoFolder -displayName]): new method.
46 ([SOGoFolder -delete]): accept to proceed only if nameInContainer
49 * SoObjects/Contacts/SOGoContactLDAPFolder.m
50 ([SOGoContactLDAPFolder
51 +folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
52 renamed from "contactFolderWithName..." for compatibility with SOGoFolder.
54 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
55 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
56 removed method, reimplemented in SOGoFolder.
57 ([SOGoContactGCSFolder -displayName]): removed method,
58 reimplemented in SOGoFolder.
59 ([-delete]): removed method, modified in SOGoFolder.
61 * SoObjects/Contacts/SOGoContactFolders.[hm]: modified class to be
62 a subclass of SOGoParentFolder.
64 * SoObjects/SOGo/SOGoParentFolder.[hm]: new class module derived
65 from SOGoContactFolders and modified to be more content-independent.
67 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -markMessageUnreadAction])
68 ([UIxMailActions -markMessageReadAction]): new methods moved from
69 UIxMailListView and adapted to invoke the client object directly,
70 since the previous versions had to to a lookup from the parent
73 * UI/MailerUI/UIxMailListView.m ([-markMessageUnreadAction]): move
74 method into UIxMailActions.
75 ([-markMessageReadAction]): same as above.
76 ([-viewAction]): removed useless method.
77 ([-javaScriptOK]): removed useless method.
78 ([-isJavaScriptRequest]): removed useless method.
79 ([-lookupActiveMessage]): removed useless method.
81 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
82 -responseWithStatus:status]): new method that returns a WOResponse
83 initialized with the specified status code.
84 ([WODirectAction -responseWith204]): new method that invokes the
85 above one with "204" as parameter.
86 ([WODirectAction -redirectToLocation:newLocation]): rewrote method
87 to make use of -responseWithStatus:.
89 * UI/SOGoUI/UIxComponent.m ([UIxComponent -responseWith204]): new
90 method that returns a WOResponse initialized with the 204 status
93 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sortedUIDs]):
94 always use a "not deleted" search qualifier along with the user
95 qualifier (if present).
97 2007-09-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
99 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
100 -contactSearchAction]): only return the records which have an
103 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
104 -trashInContext:_ctx]): no longer expunge the mailbox after
105 marking a message deleted.
106 ([SOGoMailObject -moveToFolderNamed:folderNameinContext:]): same
109 * UI/MailerUI/UIxMailView.m ([-deleteAction]): removed method.
110 ([-trashAction]): moved method into UIxMailActions.
111 ([-moveAction]): moved method into UIxMailActions.
113 2007-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
115 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
116 ([_UIxHTMLMailContentHandler
117 -endElement:_localNamenamespace:_nsrawName:_rawName]): remove HTML
118 comments from the CSS code, do not add the CSS code to the body
119 content and remove references of body from the CSS declarations.
120 ([UIxMailPartHTMLViewer -cssContent]): new accessor method.
121 ([UIxMailPartHTMLViewer -flatContentAsString]): separated code
122 common with cssContent in a different method and invoke it only
125 * UI/MainUI/SOGoRootPage.[hm]: made a subclass of UIxComponent
126 instead of UIxPageFrame.
128 2007-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
130 * UI/MainUI/SOGoRootPage.m ([-defaultAction]): commented out.
131 ([-appendToResponse:responseinContext:ctx]): commented out.
132 ([SOGoRootPage -connectURL]): new accessor that returns the full
133 url the the "connect" method.
134 ([-connectAction]): rewrote method to return a properly formatted
135 auth. cookie based on the username and password passed as
138 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
139 set the value of the cookie to "discard" and set its expiration
142 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
143 -preprocessCredentialsInContext:context]): consider the user
144 anonymous if the cookie value is "discard".
145 ([SOGoWebAuthenticator
146 -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
147 set the expiration date of the cookie to yesterday.
149 * UI/SOGoUI/UIxComponent.m ([UIxComponent -applicationPath]):
150 returns the path to the application if the clientObject is not a
153 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder +initialize]):
154 moved the requirement of authentication from the SOGo application
157 * SoObjects/Appointments/SOGoAppointmentObject.m
158 ([SOGoAppointmentObject -saveContentString:_iCalbaseSequence:_v]):
159 check whether the new appointment object is still relevant before
160 sending a notification.
162 2007-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
164 * SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
165 -setupAuthFailResponse:responsewithReason:reasoninContext:context]):
166 render the login page through the SoDefaultRenderer.
168 * UI/MainUI/SOGoRootPage.m ([SOGoRootPage
169 -isPublicInContext:localContext]): new overriden method that
172 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
173 -currentCalendarLogin]): replace css-unsafe characters with _.
175 * UI/SOGoUI/UIxComponent.m ([UIxComponent
176 -shortUserNameForDisplay]): simplified method.
177 ([-user]): removed method since [context activeUser] is as useful.
179 2007-09-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
181 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
182 set the cookie path to "/".
184 * Main/SOGo.m ([SOGo -authenticatorInContext:_ctx]): choose the
185 authenticator based on the request handler key. "dav" returns the
186 SOGoDAVAuthenticator, anything else returns the Web authenticator.
188 * SoObjects/SOGo/SOGoDAVAuthenticator.m: renamed module from
191 * SoObjects/SOGo/SOGoWebAuthenticator.m: new class module
192 implementing a subclass of SoCookieAuthenticator, designed for
193 web-based cookie authentication of users.m
195 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
196 new method that resets the authentification cookie.
198 2007-08-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
200 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
201 -checkLogin:loginToCheckandPassword:passwordToCheck]): initialize
202 didBind to NO to make sure no false authentication is returned if
203 the bind operation is not executed.
205 2007-08-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
207 * SoObjects/Mailer/SOGoDraftObject.m: added support for the
208 "In-Reply-To" header field when replying.
210 * UI/MainUI/SOGoUserHomePage.m: add the "c_" prefix to the quick
211 table field names that are queried.
213 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
214 -iCalStringForFreeBusyInfos:_infosfrom:_startDateto:_endDate]):
215 add the "c_" prefix to the quick table field names that are
218 2007-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
220 * SoObjects/Appointments/SOGoAppointmentFolder.m
221 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): add
222 "personal" to the ocs path of the appointment folder.
224 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
225 -flatContentAsString]): use latin1 when the encoding is not
226 specified, and to reencode data chunk which were not correctly
227 decoded with the original charset.
229 * SoObjects/Appointments/SOGoAppointmentFolder.m ([SOGoAppointmentFolder -aclUsersForObjectAtPath:objectPathArray])
230 ([SOGoAppointmentFolder -aclsForUser:uidforObjectAtPath:objectPathArray])
231 ([SOGoAppointmentFolder -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray])
232 ([SOGoAppointmentFolder
233 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]):
234 override those methods to use the "personal" additional directory.
236 * SoObjects/SOGo/SOGoUserFolder.m ([-ocsPrivateCalendarPath]):
237 append "/personal" to the calendar path to simulate a single
238 calendar in a choice of many.
240 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
241 -lookupName:_keyinContext:acquire:_acquire]): moved the lookup
242 methods back here. Moved the folder existence check here, and do
243 it on self only when the lookup happens for a non-folder object.
244 This permits to accept entries for folders with parents who
247 2007-08-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
249 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
250 -shouldTakeValuesFromRequest:requestinContext:context]): same as
253 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
254 -shouldTakeValuesFromRequest:requestinContext:context]):
255 redesigned method since any method called can be received from a
256 POST or a GET. Instead we check the method call itself and we
257 accept only if it has the "save" prefix.
259 * SoObjects/Appointments/SOGoAptMailNotification.m
260 ([SOGoAptMailNotification -getSubject]): returns the subject an a
261 quoted-printable encoded string, if needed.
263 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
264 -asQPSubjectString:encoding]): moved method into
265 NSString+Utilities.m.
267 2007-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
269 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
270 -messageForwardingList])
271 ([UIxPreferences -itemMessageForwardingText])D
272 ([UIxPreferences -userMessageForwarding])
273 ([UIxPreferences -setUserMessageForwarding:newMessageForwarding]):
274 new template methods for manage the user preference regarding
277 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -language]): change the
278 algorithm to return, in order, the user's defined language or the
279 first browser language or, finally, the default language.
280 ([SOGoUser -messageForwarding]): new method that returns the user
281 preference for message forwarding: "inline" or "attached",
282 defaulting to "attached".
284 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
285 -contentForInlineForward]): new method that returns the content of
286 the message for inline forwarding based on the SOGoMailForward
289 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
290 -fetchMailForForwarding:sourceMail]): check the user preference
291 for message forwarding and compose inline forwarded messages if required.
293 * SoObjects/Appointments/SOGoCalendarComponent.m
294 ([SOGoCalendarComponent
295 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
296 now use a template based on the language returned from the
299 * SoObjects/Mailer/SOGoMailEnglishForward.m: new module containing
300 a subclass of SOGoMailForward for English locale.
302 * SoObjects/Mailer/SOGoMailFrenchForward.m: new module containing
303 a subclass of SOGoMailForward for French locale.
305 * SoObjects/Mailer/SOGoMailForward.[hm]: new module class that
306 helps build template for inline forwarded messages.
308 2007-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
310 * UI/SOGoElements/SOGoIEConditional.m: new extension module class
311 to handle "<var:if-ie>" template tags.
313 * UI/SOGoElements: new extension bundle containing sogo-specific
316 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
317 -takeValuesFromRequest:_rqinContext:_ctx]): save the category
318 selected in the dialog.
319 ([UIxComponentEditor -setComponent:newComponent]): retrieve the
320 first category, if ever, of the calendar entity.
322 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
323 -composeAction]): restored method since it is needed by the
326 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
327 -composeAction]): the address fields should be arrays and not
330 * UI/Common/UIxPageFrame.m ([UIxPageFrame -buildDate]): new method
331 that returns the build date of SOGo in the template.
333 2007-08-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
335 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
336 -_flattenedRecords:records]): when the c_cn field is empty,
337 returns set a formatted string with the concatenation of
338 c_givenname and c_sn as the displayName.
340 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
341 -isValidMailAccountName:_key]): prevent unknown accounts from
344 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
345 -pathToAttachmentObject]): we no longer need the filename
346 extension for SoLookup...
348 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
349 -lookupName:_keyinContext:_ctxacquire:_flag]): do not require the
350 filename to have an extension, and thus accept any filename.
352 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
353 -currentCName]): new method that returns the c_name of the
354 contact, correctly escaped to be passed by url afterwards.
356 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
357 ([UIxMailPartHTMLViewer -flatContentAsString]): pass the NSData
358 instance of [self decodedFlatContent] instead of the buggy
359 NSString from [super flatContentAsString] to the parser.
361 2007-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
363 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -deleteAction]):
364 new category method to reponds to the "delete" web command on
366 ([UIxMailActions -deleteAttachmentAction]): new category method to
367 reponds to the "deleteAttachment" web command on drafts, taking
368 the "filename" url parameter into account.
370 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
371 -contentForEditing]): new method that retrieve the editable mail
373 ([SOGoMailObject -fetchFileAttachmentKeys]): new method that
374 returns the body keys for attached files (parts with a "filename"
377 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
378 -asQPSubjectString:encoding]): do not change the string if the
379 encoded string has the same length (which means it is already
381 ([SOGoDraftObject -fetchMailForEditing:sourceMail]): new method
382 that retrieve a draft along with its attachments for editing.
383 ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): no longer
384 choke if the "to" header field is empty.
385 ([SOGoDraftObject -delete]): new method to delete the draft folder
386 whenever operations are done.
388 2007-08-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
390 * UI/MailerUI/UIxMailEditor.m ([-patchFlagsInStore]): removed
391 useless stub method, of which the intention was implemented in
393 ([-lookupSentFolderUsingAccount]): removed obsolete method.
394 ([-selectedMailIdentity]): removed obsolete method.
395 ([-lookupSentFolderUsingFrom]): removed obsolete method.
396 ([-storeMailInSentFolder:_path]): removed obsolete method, of
397 which the mechanism has been put in -[SOGoDraftObject sendMail]
399 ([UIxMailEditor -_saveFormInfo], [UIxMailEditor -defaultAction])
400 ([UIxMailEditor -saveAction], [UIxMailEditor -sendAction]):
401 adapted algorithms to the new SOGoDraftObject methods.
402 ([-deleteAction]): removed method since local draft objects cannot
403 be removed by the user.
405 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
406 -expungeAction]): new method replacing the one previously found in
408 ([UIxMailFolderActions -createFolderAction])
409 ([UIxMailFolderActions -renameFolderAction])
410 ([UIxMailFolderActions -deleteFolderAction])
411 ([UIxMailFolderActions -emptyTrashAction])
412 ([UIxMailFolderActions -subscribeAction])
413 ([UIxMailFolderActions -unsubscribeAction]): error situations
414 should have http return code 500 instead of 403.
416 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
417 -composeAction]): new method replacing the one previously in
420 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
421 -imap4URLString]): removed overriden method (see below).
423 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -aclUsers]):
424 cache the mailbox acl.
425 ([SOGoMailFolder -aclsForUser:uid]): cache the mailbox acl.
426 ([SOGoMailFolder -setRoles:rolesforUser:uid]): reset the mailbox
428 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): modified to use
429 the new method of determining the users mail accounts.
431 * SoObjects/Mailer/SOGoMailBaseObject.m ([-imap4URLString]): no
432 longer adds a "/" at the end of the string (the default for
433 folders), therefore this will be overriden in SOGoMailFolder
434 rather than in SOGoMailObject.
436 * UI/MailerUI/UIxMailListView.m ([-expungeAction]): removed
437 method, moved into the new UIxMailActions module class.
439 * SoObjects/Mailer/SOGoDraftsFolder.m ([SOGoDraftsFolder
440 -newDraft]): new method that returns a new SOGoDraftObject
441 instance with a unique filename based on the current timestamp and
442 the "newDraft" prefix.
444 -lookupName:nameinContext:localContextacquire:acquire]): overriden
445 method by detecting local drafts with their "newDraft" prefix.
446 ([SOGoDraftsFolder -isInDraftsFolder]): returns YES.
448 * SoObjects/Mailer/SOGoDraftsFolder.[hm]: rewrote class module
449 from scratch by making it a subclass of SOGoMailFolder.
451 * UI/MailerUI/UIxMailReplyAction.m: removed obsolete class
454 * UI/MailerUI/UIxMailForwardAction.m: removed obsolete class
457 * UI/MailerUI/UIxMailEditorAction.[hm]: removed obsolete class
460 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -init]):
461 new method, initializing the new ivars: IMAP4ID, headers, text,
462 sourceURL and sourceFlag.
463 ([-spoolFileManager], [SOGoDraftObject -userSpoolFolderPath])
464 ([-_ensureUserSpoolFolderPath])
465 ([-saveMimeMessageToTemporaryFileWithHeaders:])
466 ([SOGoDraftObject -mimeMessageWithHeaders:_headers])
467 ([-deleteTemporaryMessageFile:], [-delete], [-content])
468 ([-GETAction:_ctx], [-DELETEAction:_ctx], [-fetchParts:])
469 ([-uid], [-flags], [-size], [-envelope]): removed methods.
470 ([SOGoDraftObject -storeInfo]): rewrote method to take the new
472 ([SOGoDraftObject -setSourceURL:newSourceURL])
473 ([SOGoDraftObject -setSourceFlag:newSourceFlag]): new accessor
474 methods to store the url of the original message between accesses
475 so that, depending on the action taken (forward or reply), the
476 correct flag can be given.
477 ([SOGoDraftObject -setIMAP4ID:]): new accessor method that sets
478 the imap4 id that is returned for the message whenever it is saved
479 into the drafts folder.
480 ([SOGoDraftObject -save]): new method that takes in charge the
481 saving of the message in the IMAP drafts folder.
482 ([SOGoDraftObject -fetchMailForReplying:sourceMailtoAll:toAll]):
483 new method that fills the original data of the new message with
484 the reply content of the original message.
485 ([SOGoDraftObject -fetchMailForForwarding:sourceMail]): same as
486 above for message forwarding.
487 ([-spoolFileManager]): removed useless method (only returned the
488 default filemanager...)
489 ([SOGoDraftObject -mimeMessageAsData]): new method that returns
490 the resulting message as an NSData chunk.
492 * SoObjects/Mailer/SOGoMailObject+Draft.m: new extension module
493 containing a rewrite of the mail action methods found in
494 UI/Mailer/, that needed to be put in the SOGoMailObject class.
495 ([SOGoMailObject -subjectForReply]): new method that returns a
496 subject suitable for replies.
497 ([SOGoMailObject -contentForReply]): new method that returns the
498 textual content of an email, quoted for replying.
499 ([SOGoMailObject -filenameForForward]): new method that returns
500 the name of the filename that should contain the forwarded
501 message, based on its subject.
502 ([SOGoMailObject -subjectForForward]): explicit.
504 2007-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
506 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
507 -mailAccounts]): rewrote method to return the name of the mail
508 accounts now available with the -[SOGoUser mailAccounts] method.
509 ([UIxMailMainFrame -showLinkBanner]): removed method.
510 ([UIxMailMainFrame -bannerToolbarStyle]): removed method.
511 ([UIxMailMainFrame -bannerConsumeStyle]): removed method.
512 ([UIxMailMainFrame -rootURL]): removed method.
513 ([UIxMailMainFrame -userRootURL]): removed method.
514 ([UIxMailMainFrame -calendarRootURL]): removed method.
515 ([UIxMailMainFrame -contactsRootURL]): removed method.
516 ([UIxMailMainFrame -hasErrorText])
517 ([UIxMailMainFrame -errorText])
518 ([UIxMailMainFrame -errorAlertJavaScript]): removed methods.
519 ([-composeAction]): removed method. Now provided by
520 UIxMailAccountActions.
521 ([UIxMailMainFrame -setHideFolderTree:_flag]): removed method.
522 ([UIxMailMainFrame -hideFolderTree]): removed method.
523 ([UIxMailMainFrame -treeRootClassName]): removed method.
524 ([UIxMailMainFrame +initialize]): removed method.
525 SOGoMailTreeRootClass userdefaults will no longer have any effect.
527 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
528 -redirectToLocation:newLocation]): new method that implements the
529 same functionality as WOComponent.
531 * UI/Common/WODirectAction+SOGo.[hm]: new class extension module.
533 * UI/MailerUI/UIxMailView.m ([UIxMailView -mailIsDraft]): new
534 method that returns whether the current mail is store in the
535 drafts folder hierarchy.
537 * SoObjects/SOGo/SOGoUser.m ([-fullEmail]): removed method.
538 ([-primaryEmail]): removed method.
539 ([SOGoUser -primaryIMAP4AccountString]): removed method.
540 ([SOGoUser -mailAccounts]): new method that returns an array
541 containing description dictionaries for all the user mail
542 accounts. Each account also contain the user's identities for that
544 ([SOGoUser -allIdentities]): new utility method that returns all
545 the user identities on all accounts.
546 ([SOGoUser -primaryIdentity]): new method return the first
547 identity of the first account.
549 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]):
551 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
552 -isInDraftsFolder]): returns NO.
553 ([-preferredIdentity]): removed method, replaced with -[SOGoUser
555 ([SOGoMailAccount -draftsFolderInContext:_ctx]): new method.
557 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
558 -isInDraftsFolder]): new method that detects if self is contained
559 by the drafts folder by calling itself on the container object.
561 * SoObjects/Mailer/SOGoMailAccounts.m ([-fetchAllIdentities]):
563 ([-fetchIdentitiesWithEmitterPermissions]): removed method.
564 ([SOGoMailAccounts -toManyRelationshipKeys]): rewrote method to
565 return the name of the mail accounts now available with the
566 -[SOGoUser mailAccounts] method.
568 * SoObjects/Mailer/SOGoUser+Mail.[hm]: removed useless class
571 * SoObjects/Mailer/SOGoMailIdentity.[hm]: removed useless class
574 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
575 -keysWithFormat:format]): method that forward the method of the
576 same name to each member of the array, considering they all are
577 instances of NSDictionary.
578 ([NSArray -objectsForKey:key]): same principle as above.
579 ([NSArray -flattenedArray]): new method that transforms an array
580 of arrays into a single array containing all the elements of the
583 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
584 -keysWithFormat:keyFormat]): new method inspired by the python
585 string formatting system and which replaces occurences of "%{key}"
586 by the corresponding keys.
588 2007-08-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
590 * Main/SOGo.m ([SOGo -run]): check for channel-type specific
591 sql script before the generic one when initializing mandatory
594 2007-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
596 * SoObjects/SOGo/NSString+Utilities.m ([NSString
597 -pureEMailAddress]): new utility method inspired by the
598 "_rawSender" private method in SOGoDraftObject, which it now
601 * SoObjects/SOGo/SOGoMailer.m: new abstraction class module that
602 provides a common API for sending emails, no matter what the
605 2007-08-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
607 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
608 -quotasAction]): invoke "relativeImap4Name" instead of
609 "nameInContainer" since the latter also returns the "folder"
612 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
613 -listMailboxesAction]): declare the output as text/plain in UTF-8.
615 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
616 -deleteFolderAction]): fixed the url of the destination folder.
618 * Main/SOGo.m ([SOGo +initialize]): show the build date and
621 2007-08-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
623 * SoObjects/Appointments/SOGoCalendarComponent.m
624 ([SOGoCalendarComponent
625 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
626 set the mail date to the current date string returned by our
627 rfc822DateString extension method.
629 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
630 -_gcsFoldersFromFolder:): ignore the personal folders who are
631 returned but don't really exist.
633 2007-08-02 Francis Lachapelle <flachapelle@inverse.ca>
635 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView _responseForResults:]):
636 has to return only one element.
638 2007-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
640 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
641 -content]): new method returning the decoded content of the
642 corresponding attachment as an NSData instance.
643 ([UIxMailPartViewer -filename]): if the "filename" parameter of
644 the metadata parameterList is empty, try to find out the filename
645 from the "disposition" metadata returned with the BODYSTRUCTURE
648 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
649 -composeAction]): prefix the INBOX folder with "folder".
651 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailBaseObject
652 -relativeImap4Name]): return nameInContainer stripped from its
653 first 6 characters since all folder names are prefixed with
656 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
657 -imap4URLString]): invoke -relativeImap4Name instead of
658 "nameInContainer" since the former will return the fixed IMAP4
659 foldername and the latter the SoObject name.
661 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
662 +initialize]): we now fetch the "BODYSTRUCTURE" key instead of "BODY".
664 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderNameInContext:])
665 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
666 ([SOGoMailAccount -sieveFolderNameInContext:_ctx])
667 ([SOGoMailAccount -sentFolderNameInContext:])
668 ([SOGoMailAccount -trashFolderNameInContext:]): prefix the folder
670 ([SOGoMailAccount -inboxFolderInContext:_ctx])
671 ([SOGoMailAccount -sentFolderInContext:_ctx])
672 ([SOGoMailAccount -trashFolderInContext:_ctx]): no longer prefix
673 the folder names with "folder" since they are prefixed earlier.
675 2007-07-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
677 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
678 ([-sentFolderInContext:], [-trashFolderInContext:]): folder keys
679 all starts with "folder".
681 * SoObjects/SOGo/SOGoObject.m ([SOGoObject +initialize]): no
682 longer declare security info from here.
684 * SoObjects/Mailer/SOGoMailFolder.m
685 ([-isMessageKey:_keyinContext:_ctx]): removed useless method.
686 ([SOGoMailFolder -lookupName:_keyinContext:acquire:_acquire]):
687 folder names now always start with "folder".
689 * SoObjects/Mailer/SOGoMailAccount.m
690 ([-lookupName:inContext:acquire:]): folder names now always start
693 2007-07-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
695 * UI/MailerUI/UIxMailForwardAction.m ([UIxMailForwardAction
696 -forwardAction]): adapted to the new saveAttachment:withMetadata:
699 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -saveAction]): added
700 code to save the attached filenames with the filename returned by
701 the web server as well as their mime types.
703 * UI/MailPartViewers/UIxMailPartMessageViewer.m ([UIxMailPartMessageViewer -fromAddresses])
704 ([UIxMailPartMessageViewer -toAddresses])
705 ([UIxMailPartMessageViewer -ccAddresses]): new methods returning
706 the corresponding fields separated with a ", " (if needed).
708 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
709 -saveAttachment:_attachwithMetadata:metadata]): new method
710 replacing -saveAttachment:withName: and which takes a dictionary
711 as parameter with the filename and the mime type of the
713 The mimetype is then saved in a hidden text file.
714 ([SOGoDraftObject -contentTypeForAttachmentWithName:]): if exists,
715 take the mime type from the hidden text file related to the
718 * SoObjects/Contacts/SOGoContactGCSFolder.m ()
719 ([SOGoContactGCSFolder
720 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
721 return records if the db records are > 0 and not just > 1...
723 2007-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
725 * UI/Contacts/UIxContactsListView.m ([-displayName]): removed
727 ([UIxContactsListView -defaultSortKey]): changed to "displayName".
729 * SoObjects/Contacts/SOGoContactLDAPFolder.m
730 ([SOGoContactLDAPFolder
731 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
732 translate the returned records to a normalized form.
734 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
735 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
736 translate the returned records to a normalized form.
738 * UI/Scheduler/UIxCalListingActions.m,
739 UI/Contacts/UIxContactsListView.m, SoObjects/SOGo/SOGoUser.m,
740 SoObjects/SOGo/AgenorUserDefaults.m,
741 SoObjects/Contacts/SOGoContactGCSFolder.m,
742 SoObjects/Appointments/SOGoAppointmentFolder.m,
743 OGoContentStore/OCSiCalFieldExtractor.m,
744 OGoContentStore/OCSContactFieldExtractor.m: prefixed all quick
745 table fields with "c_".
747 2007-07-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
749 * SoObjects/SOGo/LDAPSource.m ([LDAPSource +initialize]): query
750 the values for SOGoLDAPQueryLimit and SOGoLDAPQueryTimeout from
751 the application settings. If set, both limit will influence the
752 maximum size of the resultsets and the time taken to solve them.
753 ([LDAPSource -_initLDAPConnection]): initialize the limits.
755 2007-07-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
757 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder -davNamespaces]): added new overriden
758 method that declares the DAV namespace related to CardDAV.
759 ([SOGoContactGCSFolder -davComplianceClassesInContext:]): new
760 method that declares the "access-control" and "addressbook-access"
763 * SoObjects/Appointments/SOGoAppointmentFolder.m
764 ([-lookupActionForCalDAVMethod:]): removed method.
765 ([SOGoAppointmentFolder -davNamespaces]): added new overriden
766 method that declares the DAV namespace related to CalDAV.
768 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davNamespaces]): new
769 optional method for subclasses which handle specific extensions to
770 the DAV protocol: CardDAV or CalDAV.
772 -lookupName:lookupNameinContext:localContextacquire:acquire]):
773 new overriden method that handles dav invocations for extensions
774 to DAV by returning an appropriate SoSelectorInvocation.
776 * SoObjects/SOGo/NSString+Utilities.m ([NSString
777 -asDavInvocation]): new method returning a dictionary with a "ns"
778 key representing the dav namespace and a "method" key representing
779 the dav method name of the request.
781 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
782 +initialize]): scan the value of SOGoUIxUserCanChangePassword.
784 ([UIxPreferences -shouldDisplayPasswordChange]): new template
785 method that returns the value of SOGoUIxUserCanChangePassword.
787 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
788 scan the value of SOGoUIxDefaultModule. If not set, the default
789 module defaults to "Calendar".
790 ([SOGoUserHomePage -defaultAction]): redirect the user to the
791 value of "SOGoUIxDefaultModule".
793 2007-07-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
795 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
796 -contactInfos]): cache the results to avoid multiple invocations.
798 * SoObjects/Contacts/SOGoContactLDAPFolder.m
799 ([SOGoContactLDAPFolder -toOneRelationshipKeys]): check whether we
800 really should return something or if we fake to return nil...
802 2007-07-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
804 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): set
805 acceptAnyUser to YES only when the SOGoAuthentificationMethod user
806 default is set to "bypass".
808 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
809 -checkLogin:_loginpassword:_pwd]): accepts unverified connections
810 when authMethod is set to "bypass" from now on. This would avoid a
811 security concern with a default installation of SOGo.
812 AuthentificationMethod is now prefixed with "SOGo" for better
815 2007-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
817 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
818 -quotasAction]): new method that returns a json representation of
821 2007-07-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
823 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
824 -imap4URL]): rewrote method to support accented mailbox names.
825 ([SOGoMailBaseObject imap4Password]): rewrote to simply use
826 SOGoAuthenticator's passwordInContext:.
828 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
829 -takeValuesFromRequest:_rqinContext:_ctx]): explicitly set the
830 start and due dates to nil if hasStartDate and hasDueDate are
833 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
834 -passwordInContext:context]): made method public.
836 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
837 -extractQuickFieldsFromTodo:_task]): set "isallday" and "isopaque"
838 to false to avoid a null violation.
840 2007-07-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
842 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
843 -contentAsString]): returns the message encoded in ISO Latin 1
846 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): read the
847 SOGoSuperUsername user defaults.
848 ([SOGoUser -initWithLogin:newLoginroles:newRoles]): simplified
850 ([SOGoUser -rolesForObject:objectinContext:context]): if the
851 current user is the superuser, grant him/her the "owner" role.
853 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
854 the folder only if the current user is the owner of the future
857 * SoObjects/Appointments/SOGoCalendarComponent.m
858 ([SOGoCalendarComponent -contentAsString]): we return the content
859 based on the permissions returned by the security manager instead
860 of by looking at the user roles.
862 * SoObjects/Appointments/SOGoAppointmentFolder.m
863 ([SOGoAppointmentFolder -calendarFolders]): read the calendar
864 folders of the user to whom this folder belongs instead of the
865 active user. This way, a delegate user will be able to have the
866 same view that the original user has if he connects from his user
869 * Main/SOGo.m ([SOGo -lookupUser:_keyinContext:]): check if the
870 user exists before creating the SOGoUserFolder instance. If not,
873 * UI/MailerUI/UIxMailSourceView.[hm]: new class module designed to
874 return the message source code in plain text.
876 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
877 -contentAsString]): returns the message encoded in UTF8.
879 2007-07-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
881 * OGoContentStore/iCalRepeatableEntityObject+OCS.m
882 ([iCalRepeatableEntityObject -cycleInfo]): no longer take the
883 leading tagname into account when serializing the element values.
885 * Main/SOGoProductLoader.m: only load bundle directories ending
886 with the "SOGo" extension.
889 -_checkTableWithCM:cmtableURL:urlandType:tableType]): empty the
890 result set if the query has caused no exception. Otherwise we get
891 an "evaluation is in progress exception".
893 2007-06-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
895 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
896 -generateSQLForInsert]): initialize error to nil before the
897 serialization. Otherwise the method can get confused if it ever is
898 initialized to something else.
900 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
901 -folderIsMandatory]): returns NO unconditionnally.
903 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
904 -appendPersonalSources]): add the "personal" folder to the list of
905 user folders even if it doesn't exist, so that it is created when
906 the user accesses it.
908 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
909 -folderIsMandatory]): returns YES if nameInContainer is set to
910 "personal", which is the default address book.
912 * SoObjects/Appointments/SOGoAppointmentFolder.m
913 ([SOGoAppointmentFolder -folderIsMandatory]): returns YES since
914 users must have one Calendar folder (one and only one).
915 ([SOGoAppointmentFolder -_privacySqlString]): unescape the
916 escaping '\' so make the carriage return a real one. This way,
917 PgSQL 8 won't complain about escaping the string.
919 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): new
920 method that create the folder if considered mandatory.
921 ([SOGoFolder -folderIsMandatory]): new method that determines
922 whether the folder should be created automatically or not. To be
923 overriden by subclasses.
925 * Main/SOGo.m ([SOGo -run]): override method and create the
926 missing system tables if needed.
928 2007-06-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
930 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
931 -mailDateFormatter]): returns the user's date formatter.
933 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject -date]):
934 applies the user timezone to the date object before returning it.
936 * UI/Common/UIxSortButton.m: removed useless class module.
938 * UI/Common/UIxSortableTableHeader.m: removed useless class
941 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
942 -contactInfos]): use the "asc" url parameter instead of "desc" to
943 determine the ordering.
944 ([-sortOrdering]): removed method.
945 ([UIxContactsListView -init]): removed the "searchText" ivar.
946 (general): the template no longer use the UIxSortableTableHeader
949 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
950 -defaultSortKey]): default sort following the messages arrival
951 instead of their date.
952 ([-isSortedDescending]): removed method.
953 ([-imap4SortOrdering]): use the "asc" url parameter instead of
954 "desc" to determine the ordering.
955 (general): the template no longer use the UIxSortableTableHeader
958 2007-06-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
960 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sleep]):
962 ([-setQualifier:_msg], [-qualifier]): removed methods.
963 ([UIxMailListView -defaultAction]): added code to handle the
964 search criteria and value passed as url parameters. Also, we now
965 handle the same search criterias as Thunderbird/Icedove.
967 2007-06-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
969 * UI/PreferencesUI/UIxJSONPreferences.m ([UIxJSONPreferences
970 -jsonDefaultsAction]): bug fix: returns a WOResponse instance with
971 the string instead of the string itself.
972 ([UIxJSONPreferences -jsonSettingsAction]): same as above.
974 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): new module
975 bool var "acceptAnyUser" that is set when the AuthenticationMethod
977 ([SOGoUser -initWithLogin:newLoginroles:newRoles]):
978 unconditionnally returns an instance whenever acceptAnyUser is set.
980 2007-06-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
982 * Main/sogod.m (main): prevent SOGo from running as root.
984 2007-06-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
986 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
987 -setCurrentPassword:newPassword]): new stub method.
988 ([SOGoUser -dateFormatterInContext:context]): new method that
989 returns an instance of SOGoDateFormatter configured based on the
992 * UI/Common/UIxPageFrame.m ([UIxPageFrame
993 -relativePreferencesPath]): new method.
995 * UI/Scheduler/UIxComponentEditor.m ([-titleDateFormatter]):
996 removed useless method.
998 * SoObjects/SOGo/SOGoDateFormatter.m: rewrote class to accept
999 different configurable formats (long and short date + time).
1001 * SoObjects/SOGo/SOGoDateFormatter.[hm]: moved from UI/SOGoUI/.
1003 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
1004 -isInternetRequest]): removed method.
1006 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
1007 -jsonRepresentation]): new method with an explicit name.
1009 * UI/PreferencesUI/product.plist: new bundle that provides a web
1010 ui for handling user defaults.
1012 * UI/Scheduler/UIxTaskView.[hm]: removed unused module.
1014 * UI/Scheduler/UIxAppointmentView.[hm]: removed unused module.
1016 * SoObjects/SOGo/WOContext+Agenor.[hm]: removed unused module.
1018 2007-06-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1020 * SoObjects/SOGo/SOGoLRUCache.m: removed unused module.
1022 2007-06-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1024 * UI/Scheduler/NSArray+Scheduler.m ([NSArray
1025 -compareEventsAscending:otherEvent]): no longer use compare: on
1026 the time objects since one of them could be an NSNull, which
1027 crashes when comparing with anything.
1029 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1030 -eventsListAction]): sort events from here.
1031 ([UIxCalListingActions -tasksListAction]): sort tasks from here.
1033 * SoObjects/SOGo/NSObject+AptComparison.[hm]: removed category
1034 module, replaced with NSArray+Scheduler in UI/SchedulerUI/.
1036 * SoObjects/Appointments/SOGoAppointmentFolder.m
1037 ([SOGoAppointmentFolder
1038 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]):
1039 no longer sort elements from here.
1041 2007-06-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1043 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1044 -aclsForUser:uid]): implemented method by forwarding the request
1045 to the container. This fixes a bug where users could no longer
1046 read emails from shared folders.
1048 * SoObjects/Appointments/SOGoCalendarComponent.m
1049 ([SOGoCalendarComponent -init]): "isNew" is no longer defined
1050 here, but rather in its parent class.
1052 * UI/SOGoUI/SOGoDateFormatter.m ([SOGoDateFormatter
1053 -stringForSecondsSinceThe70s:seconds]): new utility method.
1055 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1056 -eventsListAction]): no longer reduce the end day of one day for
1057 all day events since everything has been fixed in
1058 OCSiCalFieldExtractor.
1060 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
1061 -extractQuickFieldsFromEvent:_event]): reduce the seconds/70 of
1062 the end date of all day events of 1 so that they stay on their
1065 2007-06-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1067 * UI/Scheduler/UIxCalMonthView.m: no longer retrieve appointments.
1069 * UI/Scheduler/UIxCalView.m ([-fetchCoreAppointmentsInfos]):
1071 ([-fetchCoreTasksInfos]): removed method.
1073 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1074 -init]): initialize an instance of SOGoDateFormatter.
1075 ([UIxCalListingActions -eventsListAction]): the display start and
1076 end dates are added to the listing for each event.
1078 * UI/Scheduler/UIxCalDayTable.m: no longer retrieve appointments.
1080 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1081 -isAllDay]): returns YES if the "hm" url parameter is set to
1083 ([UIxAppointmentEditor -defaultAction]): if isAllDay, the enddate
1084 is displayed one day earlier.
1086 2007-06-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1088 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
1089 -_setupContext]): take the range of dates specified by the popup
1092 * UI/Scheduler/UIxCalListingActions.[hm]: new subclass of
1093 WODirectAction that returns WOResponse objects with the events or
1094 todos satisfying the parameters passed in the url.
1096 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1097 -takeValuesFromRequest:_rqinContext:_ctx]): take the new ivar
1098 "isAllDay" into account and compute the amount of days to pass to
1101 2007-06-06 Francis Lachapelle <flachapelle@inverse.ca>
1103 * SoObjects/SOGo/NSNumber+Utilities.m: initial import.
1104 * SoObjects/SOGo/NSNull+Utilities.m: initial import.
1105 * UI/Scheduler/UIxCalTasksListView.m ([WOResponse -tasksListAction]):
1106 new method that returns a json-formatted array of the visible tasks
1107 for the current user.
1109 2007-06-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1111 * SoObjects/Appointments/SOGoAppointmentObject.m: the owner of the
1112 object must be present in the list of UIDs we delete the object
1113 from. Otherwise Calendar objects having no organizer and no
1114 attendees will remain in their owner's Calendar.
1116 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1117 -_urlPreferringParticle:expectedoverThisOne:possible]): remove the
1118 first 3 elements of the path array if the url returned by
1119 baseURLInContext: returns a hostname.
1121 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1122 -_adjustOwner]): sharedFolderName and otherUsersFolderName may be
1123 nil, in which case a crash happens when calling hasPrefix:.
1124 ([SOGoMailFolder -_sharesACLs]): same as above.
1125 ([SOGoMailFolder -otherUsersPathToFolder]): same as above. If
1126 otherUsersFolderName is nil, we return nil.
1127 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): if we receive
1128 nil from [self otherUsersPathToFolder], we return nil too.
1130 2007-06-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1132 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1133 -_urlPreferringParticle:expectedoverThisOne:possible]): unescape
1134 the result of [self baseURLInContext:] to avoid a double escaping
1135 in the resulting string.
1137 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -aclsForUser:uid]): if
1138 the user has the "ObjectReader" role on the parent container, then
1139 he is granted the "ObjectViewer" role on this object. Same for
1140 "ObjectEraser", although this might change later.
1142 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1143 -toolbar]): determine the toolbar filename based on the
1144 permissions declared by the securitymanager. The role mechanism
1145 has been adjusted on a lowerlevel so we can simplify the code.
1147 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
1148 -initWithName:newNameinContainer:newContainer]): read the content
1149 directly from here. That way we can determine whether the object
1151 ([SOGoContentObject -aclsForUser:uid]): if the object is new and
1152 the ObjectCreator role is enabled, we also grant the ObjectEditor
1153 role to the current user.
1155 * UI/Common/UIxFolderActions.m ([-canAccessContentAction]):
1156 changed the method paradigm to only return HTTP code 204. Not test
1157 is done whatsoever since the security manager does it for us.
1159 * UI/Contacts/UIxContactsListView.m ([-canAccessContentAction]):
1160 removed method because the same exists in UIxFolderActions.m
1162 * UI/Contacts/UIxContactsUserRightsEditor.m
1163 ([UIxContactsUserRightsEditor
1164 -setUserCanReadObjects:userCanReadObjects]): new method.
1166 * SoObjects/SOGo/SOGoPermissions.m: added roles "FolderViewer" and
1167 "FolderEraser" and special permission "Access Object". Removed
1168 role "SOGoMailRole_MessageEraser" since "SOGoRole_ObjectEraser"
1169 can be used instead. Removed "FolderReader" since it is useless.
1171 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
1172 -vCard]): directly use the "content" ivar since it is initialized
1173 during object creation.
1175 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1176 ([SOGoContactLDAPFolder -init]): no longer handle the
1177 nameInContainer no the container ivars. They were removed because
1178 this class is a descendant of SOGoObject which already has them.
1179 ([SOGoContactLDAPFolder -davDisplayName]): new overriden method
1180 returning "displayName".
1181 ([SOGoContactLDAPFolder -isFolderish]): new overriden method
1184 * SoObjects/Appointments/SOGoCalendarComponent.m
1185 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): commented out.
1186 ([SOGoCalendarComponent -findParticipant:user]): new name for
1187 method "participant:".
1188 ([SOGoCalendarComponent -findParticipantWithUID:uid]): same as
1189 findparticipant but taking a uid string as parameter.
1190 ([SOGoCalendarComponent -contentAsString]): don't regenerate the
1191 iCalendar automatically. Instead, this is done only when the user
1192 is a "date and time viewer".
1193 ([SOGoCalendarComponent -aclsForUser:uid]): take delegation roles
1194 (modifier and responder) into account by compiling them with the
1197 * SoObjects/Contacts/SOGoContactFolder.h: removed
1198 "nameInContainer" from the list of required methods.
1200 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
1201 -davContentType]): returns "text/calendar".
1203 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1204 ([SOGoContactLDAPFolder -davResourceType]): declare the correct
1205 groupdav resource-type.
1207 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
1208 -davContentType]): same as below.
1210 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1211 -initWithName:newNameinContainer:newContainer]): new overriden
1212 method setting the custom owner directly.
1214 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
1215 -davContentType]): same as below.
1217 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1218 -davContentType]): same as below.
1220 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davContentType]):
1221 declare "httpd/unix-directory".
1223 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): declare
1224 "UTC" as fallback timezone instead of "Canada/Eastern".
1225 ([-hasEmail:email]): make use of the new NSArray's
1226 containsCaseInsensitiveString: method.
1228 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1229 -davContentType]): declare "message/rfc822" as content type.
1231 * SoObjects/Appointments/SOGoAppointmentFolder.m
1232 ([SOGoAppointmentFolder -_privacySqlString]): "owner" is now an
1234 ([SOGoAppointmentFolder
1235 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): same as above.
1236 ([-fetchContentObjectNames]): commented out method since it was
1237 usefull only for testing Funambol.
1239 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
1240 -containsCaseInsensitiveString:match]): an enhanced version of
1243 * UI/MailerUI/UIxMailView.m ([-isTrashingAllowed]): removed
1245 ([-showMarkDeletedButton]): removed useless method.
1246 ([-showTrashButton]): removed useless method.
1248 * SoObjects/Appointments/iCalEntityObject+SOGo.m
1249 ([iCalEntityObject -userIsParticipant:user]): new proxy method
1250 that invoked isParticipant on self for each possible email
1251 addresses of the user passed as parameter.
1252 ([iCalEntityObject -userIsOrganizer:user]): same as above.
1254 * SoObjects/Appointments/iCalEntityObject+SOGo.[hm]: new class
1257 * SoObjects/Appointments/SOGoAppointmentObject.m
1258 ([SOGoAppointmentObject
1259 -saveContentString:contentStringbaseVersion:baseVersion]): remove
1260 method since an event may not have an organizer.
1262 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1263 -GETAction:localContext]): clarified method. Added support for
1264 content-type (thanks to Helge Hess).
1265 ([SOGoObject -initWithName:_nameinContainer:_container]):
1266 initialize and retain the owner.
1267 ([SOGoObject -davContentType]): returns "text/plain".
1269 2007-05-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1271 * UI/Common/UIxObjectActions.m ([UIxObjectActions
1272 -addUserInAclsAction]): send an acl addition mail.
1273 ([UIxObjectActions -removeUserFromAclsAction]): send an acl
1276 * UI/Common/UIxFolderActions.m ([UIxFolderActions
1277 -_realActionWithFolderName:folderDict]): handle the possible
1278 presence of the "mail-invitation" url parameter. If present, the
1279 user will be redirected to the relevant folder.
1281 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -fullEmail]): new proxy method.
1282 ([SOGoUser -language]): new method that returns the user's
1283 preferred language, or the system's if none has been set yet.
1285 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -davURL]): new method
1286 that returns the full dav url to self.
1287 ([SOGoObject -soURL]): same as above but for the so url (Web UI).
1288 ([SOGoObject -soURLToBaseContainerForUser:uid]): new method that
1289 returns the full so url to the base of the SOGo module to which
1290 self belongs, and for the specified user.
1291 ([SOGoObject -soURLToBaseContainerForCurrentUser]): same as above
1292 but for the current user.
1293 ([SOGoObject -httpURLForAdvisoryToUser:uid]): new protocol method
1294 required by the acl advisory templates and which returns a link
1295 the target user can click to activate its new subscription.
1296 ([SOGoObject -resourceURLForAdvisoryToUser:uid]): same as above
1297 but for inclusion of the application/x-sogo-notification part,
1298 which will be handled by the Lightning enhancer plugin.
1300 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -subscribeAction])
1301 ([UIxMailFolderActions -unsubscribeAction]): new stub methods that
1302 do nothing yet since imap folder subscription is not handled yet.
1304 * SoObjects/SOGo/SOGoContentObject.m
1305 ([-hasSupportForDefaultRoles]): removed method.
1307 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
1308 -getFullEmailForUID:uid]): new method that returns the username +
1311 * SoObjects/Appointments/SOGoCalendarComponent.m
1312 ([SOGoCalendarComponent +initialize]): the default language for
1313 mail templates is now set to English.
1315 * UI/SOGoUI/SOGoACLFrenchRemovalAdvisory.[hm]: new subclass of
1316 SOGoACLAdvisory implementing the french template for user removal
1319 * UI/SOGoUI/SOGoACLFrenchAdditionAdvisory.[hm]: new subclass of
1320 SOGoACLAdvisory implementing the french template for user
1323 * UI/SOGoUI/SOGoACLEnglishRemovalAdvisory.[hm]: new subclass of
1324 SOGoACLAdvisory implementing the english template for user removal
1327 * UI/SOGoUI/SOGoACLEnglishAdditionAdvisory.[hm]: new subclass of
1328 SOGoACLAdvisory implementing the english template for user
1331 * UI/SOGoUI/SOGoACLAdvisory.[hm]: new class module implemented the
1332 supercall of all the acl advistory templates. The model is based
1333 on SOGoAptMailNotification except that the template encapsulates
1334 the message to be sent. Later, we might create a superclass common
1335 to all template-based emails.
1337 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
1338 -addRange:newRange]): new method that store a string
1339 representation of the NSRange passed as parameter.
1340 ([NSMutableArray -hasRangeIntersection:testRange]): tests whether
1341 any range contained in self intersect with the one passed as parameter.
1343 * SoObjects/SOGo/NSString+Utilities.m ([-stringByDetectingURLs]):
1344 store ranges in an array to prevent them from intersecting with
1345 each other during the passes.
1347 2007-05-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1349 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1350 -primaryFetchMailboxInfo]): useless method. Removed.
1352 2007-05-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1354 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1355 -toManyRelationshipKeys]): invoke [self subfolders].
1356 ([SOGoMailFolder -subfolders]): new method containing what used to
1357 be in toManyRelationshipKeys.
1358 ([SOGoMailFolder -subfoldersURL]): same as above but returns imap
1361 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1362 -allFolderPaths]): renamed version of "allFolderPathes", sorted by
1363 named and at the beginning of which we put the predefined folders.
1365 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1366 -emptyTrashAction]): new method inspired by a similar one from
1367 UIxMailListView, to which we added the ability to remove
1370 * UI/MailerUI/UIxMailListView.m ([-emptyTrashAction]): removed
1371 method. Replaced with a similar one in UIxMailFolderActions.
1373 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1374 -renameFolderAction]): implemented method.
1375 ([UIxMailFolderActions -deleteFolderAction]): no longer delete the
1376 specified folder. Instead, we put it in the trash folder.
1378 * UI/MailerUI/UIxMailListView.m ([-createFolderAction]): removed
1379 method, replaced with a similar method in the new
1380 UIxMailFolderAction class module.
1381 ([-deleteFolderAction]): idem.
1383 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1384 -createFolderAction]): new method implementing subfolder creation.
1385 ([UIxMailFolderActions -renameFolderAction]): new method
1386 implementing subfolder renaming (basic implementation to be
1388 ([UIxMailFolderActions -deleteFolderAction]): new method
1389 implementing folder deletion.
1391 * UI/MailerUI/UIxMailFolderActions.[hm]: new module implementing
1392 web actions related to the handling of imap folder.
1394 2007-05-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1396 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1397 -ownerInContext:localContext]): overriden method because we are an
1398 IMAP4 client and we need a bit more intelligence to deduce the
1399 owner of the current folder.
1400 ([SOGoMailFolder -aclsForUser:uid]): aclForMailboxAtURL might
1401 return an NSException so we need to be careful here to avoid a
1403 ([SOGoMailFolder -aclUsers]): aclForMailboxAtURL might return an
1404 NSException so we need to be careful here to avoid a crash.
1406 * SoObjects/Mailer/SOGoMailAccounts.m
1407 ([SOGoMailAccounts -fetchIdentitiesWithOnlyEmitterAccess:_flag])
1408 there is no longer any concept of Intranet or Internet connection
1411 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1412 -sharedFolderName]): new method.
1413 ([SOGoMailAccount -otherUsersFolderName]): new method.
1415 * UI/MailerUI/UIxMailFolderMenu.[hm]: removed module, obsoleted by
1416 new javascript code and the new UIxMailAccountActions class.
1418 * UI/MailerUI/UIxMailTree.[hm]: removed module, obsoleted by new
1419 javascript code and the new UIxMailAccountActions class.
1421 * UI/MailerUI/UIxMailTreeBlock.[hm]: removed module, obsoleted by
1422 new javascript code and the new UIxMailAccountActions class.
1424 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1425 -listMailboxesAction]): new method that returns a json-formatted
1426 tree of all the mailboxes available to the current user.
1428 * UI/MailerUI/UIxMailAccountActions.[hm]: new module implementing
1429 web actions related to the handling of mail accounts.
1431 * SoObjects/SOGo/NSDictionary+Utilities.[hm]: new extension
1434 * SoObjects/SOGo/NSObject+Utilities.m ([NSObject
1435 -jsonRepresentation]): new interface method meant to be overriden
1436 by the primitive classes.
1438 2007-05-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1440 * UI/MailerUI/UIxMailSplashView.m: removed.
1442 * SoObjects/Appointments/SOGoCalendarComponent.m
1443 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]): add
1444 the uid to the list only when the user email is recognized by the
1447 2007-05-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1449 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1450 -isDeletionAllowed]): completed method with the new imap acl api.
1452 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultAclRoles]):
1455 * SoObjects/SOGo/SOGoPermissions.m: added the new role
1456 "SOGoMailRole_MessageEraser".
1458 * UI/Common/UIxAclEditor.m ([UIxAclEditor -defaultUserID])
1459 ([UIxAclEditor -_prepareUsers]): take the new SOGoObject's
1460 "defaultUserID" method into account.
1462 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -userIsDefaultUser])
1463 ([UIxUserRightsEditor -_initRights]): take the new SOGoObject's
1464 "defaultUserID" method into account.
1466 * UI/MailerUI/UIxMailUserRightsEditor.m: added all the missing
1467 methods to support the IMAP acls mentionned in the RFC 4314,
1468 removed the ones specific to Cyrus.
1470 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultUserID]): new
1471 mandatory method for subclasses. Removed the SOGoDefaultUserID
1474 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -defaultUserID]):
1475 overriden method to return @"<default>".
1477 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
1478 -defaultUserID]): overriden method to return @"<default>".
1480 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1481 -aclsForUser:uid]): overriden method.
1482 ([SOGoMailFolder -removeAclsForUsers:users]): overriden method.
1483 ([SOGoMailFolder -setRoles:rolesforUser:uid]): overriden method.
1484 ([SOGoMailFolder -defaultUserID]): overriden method.
1485 ([SOGoMailFolder -hasSupportForDefaultRoles]): overriden method.
1487 2007-05-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1489 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
1490 -aclUsersForObjectAtPath:objectPathArray]): new method that being
1491 forwarded the calles to aclUsers for the GCS-based subclasses of
1494 * SoObjects/Mailer/SOGoMailFolder.m: removed all the previous
1495 methods that would have been used to support IMAP acls. Replaced
1496 them with the new protocol for them that has been implemented in
1497 SOGo during the last few weeks.
1499 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
1500 -hasSupportForDefaultRoles]): override method by returning "YES".
1502 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
1503 -addObjectUniquely:object]): new method with an explicit name.
1505 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -aclUsers]): renamed
1506 "acl" to "aclUsers". Now designed to return only the uid of the
1507 users involved in an ACL.
1508 ([SOGoObject -hasSupportForDefaultRoles]): new method returning
1509 "NO" by default. To indicate to the acl editor that we don't want
1510 to handle a default user.
1512 * SoObjects/SOGo/SOGoPermissions.[hm]: added the
1513 SOGoRole_ObjectReader, SOGoRole_Folder*, and SOGoMailRole_*
1516 * UI/MailerUI/UIxMailUserRightsEditor.[hm]: new class module that
1517 provides a view to the IMAP acls.
1519 * UI/MailerUI/UIxMailFolderACLEditor.m: removed obsolete module.
1521 * UI/WebServerResources/MailerUI.js: replaced all invocations of
1522 addEventListener to the use of prototype's Event object. Also,
1523 configured all menus programmatically following descriptions lists
1524 containing their callbacks, or nulls, submenus id or separators.
1526 2007-05-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1528 * UI/Common/UIxObjectActions.m ([UIxObjectActions
1529 -addUserInAclsAction]): save the previous roles of the user
1530 (unlikely) or the default roles, or None instead of saving the
1531 roles that should appear the first time in the role editor when no
1532 default has been set...
1534 * SoObjects/SOGo/SOGoObject.m: defined a new constant
1535 "SOGoDefaultUserID".
1537 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
1538 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]):
1539 ignore the "AuthorizedSubscriber" role and add the "None" role
1540 when no other role is found.
1542 * UI/Common/UIxAclEditor.m: added a button for the new default
1545 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
1546 -_initRights]): don't take the "None" role into account when
1547 initializing the list of current roles.
1549 * SoObjects/SOGo/SOGoPermissions.m: added a new void role
1552 2007-05-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1554 * SoObjects/SOGo/NSString+Utilities.m ([NSString
1555 -_rangeOfURLInRange:refRange]): urls cannot end with "&" nor "=".
1556 There is no need to subscract the start from the length if a space
1557 is not found since the range has not changed either. Finally, the
1558 first character before the url might also be a tab or a cr, so we
1559 match it against the "urlAfterEndingChars" custom NSCharacterSet.
1560 ([NSString -stringByDetectingURLs]): modified to handle email
1561 addresses and add a correct "mailto:" link.
1563 2007-05-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1565 * SoObjects/Appointments/SOGoAppointmentFolder.m
1566 ([SOGoAppointmentFolder -fetchContentObjectNames]): override
1567 method to return the events in the range of 2 weeks ago up to 4
1570 * UI/MailPartViewers/UIxMailPartTextViewer.m
1571 ([UIxMailPartTextViewer -flatContentAsString]): use the new
1572 "stringByDetectingURLs" method to offer clickable urls.
1574 * SoObjects/SOGo/NSString+Utilities.m ([NSString
1575 -stringByDetectingURLs]): this new method replaces passive URLS
1576 with active ones for HTML resolution of the text.
1578 2007-05-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1580 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
1581 -asQPSubjectString:encoding]): simplified method.
1582 The headers indicates "utf-8" again thank to our fix in
1585 * SoObjects/SOGo/SOGoObject.m: fail to build if libFoundation is
1588 2007-05-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1590 * UI/Common/UIxObjectActions.m ([UIxObjectActions
1591 -removeUserFromAclsAction]): implemented this method which was
1592 missing and is required to remove users from ACLs.
1594 * UI/Common/UIxFolderActions.m ([UIxFolderActions
1595 -subscribeAction]): folderDict was not autoreleased, resulting in
1598 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
1599 -primaryFetchProfile]): when building with libFoundation, don't
1600 use the "propertyList" method from NSString. Rather, we convert
1601 the string to an NSData instance and passit as parameter to
1602 NSDeserializer. This way, we obtain a mutable dictionary rather
1603 than an immutable one.
1605 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -bodyPartForText])
1606 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): use the
1607 constant string "contentTypeValue".
1608 contentTypeValue is now set back to iso-8859-1 since NGMime
1609 converts extracts the data in that encoding.
1611 2007-05-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1613 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
1614 -checkLogin:loginToCheckandPassword:passwordToCheck]): if a
1615 "bindFields" value is present in the user defaults, use the
1616 specified fields to find the dn of the user to bind.
1617 ([LDAPSource -allEntryIDs])
1618 ([LDAPSource -fetchContactsMatching:match])
1619 ([LDAPSource -lookupContactEntry:entryID])
1620 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]):
1621 bind and unbind the connection on each request.
1623 * UI/MailerUI/UIxMailAddressbook.m: removed obsolete module.
1625 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1626 -contactSearchAction]): simplified method to use the facilities
1627 provided by the LDAPUserManager. No longer takes care of the
1628 "ldap-only" url parameter since all requests are handled by the
1631 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
1632 -primaryFetchProfile]): check that the value returned is not null
1633 before interpreting it.
1635 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
1636 -contactInfosForUserWithUIDorEmail:uid]): check that uid is not empty.
1637 ([LDAPUserManager -_fillContactMailRecords:contact]): if the
1638 system email is already present, remove it before adding it.
1640 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
1641 -checkLogin:loginToCheckandPassword:passwordToCheck]): check that
1642 loginToCheck is not empty.
1643 ([LDAPSource -fetchContactsMatching:match]): check that match is
1645 ([LDAPSource -lookupContactEntry:entryID]): check that entryID is
1647 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]): check that
1650 2007-05-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1652 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -primaryEmail]): new name
1654 ([SOGoUser -systemEmail]): returns the email formed from the
1655 username and the default mail domain.
1656 ([SOGoUser -hasEmail:email]): test whether the user has the
1657 specified email, in a case-insensitive way.
1659 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
1660 -LDAPCheckLogin:_loginpassword:_pwd]): use the user manager to
1661 check login information.
1663 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1664 ([SOGoContactLDAPFolder
1665 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1666 no longer manage LDAP connections. The requests are forwarded to
1667 the relevant LDAPSource instead.
1669 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
1670 -appendSystemSources]): pass LDAPSource objects to
1671 SOGoContactLDAPFolder instances.
1673 * SoObjects/Mailer/SOGoDraftObject.m: extract the raw email
1674 address of the "from" field before sending the message. Otherwise,
1675 sending the mail won't work.
1677 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -fromEMails]):
1678 rewrote this method to request all the available email identities
1679 for the current user. Also, the from field also contains the full
1680 name of the user, not just his/her email address.
1682 * SoObjects/Appointments/SOGoCalendarComponent.m
1683 ([SOGoCalendarComponent -iCalPersonWithUID:uid]): new method taken
1684 from the previous module iCalEntityObject+Agenor.
1685 ([SOGoCalendarComponent -getUIDForICalPerson:person]): idem.
1686 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]):
1689 * SoObjects/Contacts/SOGoContactLDIFEntry.[hm]: new class module
1690 replacing the SOGoContactLDAPEntry module. It was renamed as such
1691 because it now receives a dictionary instead of an NGLdapEntry.
1692 It thus can now handle data from any source of LDIF data, not
1693 only coming from LDAP.
1695 * SoObjects/SOGo/LDAPUserManager.[hm]: new class module
1696 implementing most of what used to be the AgenorUserManager class.
1697 The difference is that users are cached in the forme of
1698 dictionaries and many sources are used. Also, it can be used to
1699 search LDAP contacts.
1701 * SoObjects/SOGo/LDAPSource.[hm]: new class module implementing
1702 the concept of "ldap source", to be used by all the classes
1703 needing access to LDAP-provided information: addressbooks and the
1704 user manager. Most the method thereing are transcriptions of
1705 methods previously found in SOGoContactLDAPFolder. It also contain
1706 utility methods for user matching and authentification.
1708 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: removed
1709 module, rendered useless by code refactoring.
1711 * SoObjects/SOGo/AgenorUserManager.[hm]: removed module, replaced
1712 with the freshly written "LDAPUserManager".
1714 2007-05-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1716 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: renamed to
1717 SOGOContactLDIFEntry.
1719 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: removed class
1720 module, obsoleted by code in SOGo/LDAPSource.[hm].
1722 2007-05-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1724 * UI/Common/UIxAclEditor.m ([UIxAclEditor -currentUserIsOwner]):
1725 new method with an explicit name.
1727 2007-05-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1729 * SoObjects/Appointments/SOGoCalendarComponent.m
1730 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): new method
1731 replacing "isOrganizer:orOwner:" by taking only one instance of
1732 SOGoUser as parameter.
1733 ([SOGoCalendarComponent -participant:user]): new method replacing
1734 the previous "isParticipant" boolean method by returning the first
1735 participant matching the user passed as parameter. This method is
1736 used so that both the regular email address and the "system email
1737 address" of the user are matched against the participants emails.
1739 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
1740 -getSystemEMailForUID:uid]): new method that returns the email
1741 formed with the user's uid and the default mail domain.
1743 * SoObjects/Appointments/SOGoCalendarComponent.m
1744 ([SOGoCalendarComponent -rolesOfUser:login]): removed method that
1745 was previously commented out.
1747 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -systemEmail]): new method
1748 forwared to [AgenorUserManager getSystemEmailForUID:].
1750 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1751 -toolbar]): method replacing the one with the same name in the
1752 task and appointment editor classes. This method makes also use of
1753 the new method "isOrganizerOrOwner:" and "participant:" in
1754 SOGoCalendarComponent.
1756 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1757 -toolbar]): removed method, replaced with a method with the same
1758 name in UIxComponentEditor.
1760 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -toolbar]): removed
1761 method, replaced with a method with the same name in
1764 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
1765 -primaryFetchProfile]): the values returned from the database are
1766 converted to a put dictionary first, since the dictionary returned
1767 is actually an immutable one, which can cause a crash afterwards.
1769 2007-04-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1771 * SoObjects/SOGo/SOGoPermissions.m: added "SOGoRole_ObjectViewer"
1772 and "SOGoRole_ObjectEditor".
1774 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
1775 -prepareRightsForm]): this method is no longer mandatory.
1777 * UI/Contacts/UIxContactsUserRightsEditor.m
1778 ([UIxContactsUserRightsEditor
1779 -setUserCanCreateObjects:userCanCreateObjects]): new subclass
1780 module to handle acls related to the address books. Partial
1783 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
1784 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): cache
1787 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): remove
1788 specified roles from cache.
1789 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
1790 put resulting roles in cache.
1792 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -init]): do not invoke
1793 initWithName:inContainer:. Instead, directly initialize the ivars
1794 as it is supposed to be to avoid an infinite loop whenever one of
1795 those two methods are overriden.
1797 * SoObjects/SOGo/SOGoContentObject.m ([-rolesOfUser:login]):
1800 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
1801 -aclsForUser:uid]): override method so that SOGo won't crash when
1802 loading the contact card.
1804 2007-04-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1806 * SoObjects/Appointments/SOGoAppointmentFolder.m
1807 ([SOGoAppointmentFolder -_privacySqlString]): the string for the
1808 "freebusy" special user should only require opaque elements.
1810 2007-04-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1812 * SoObjects/Appointments/SOGoAppointmentFolder.m
1813 ([SOGoAppointmentFolder -davResourceType]): fixed a problem with
1814 our double declaration where the resulting XML would be screwed.
1815 There is only one collection per namespace.
1817 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
1818 rfc822DateString]): new method that returns a string conform to
1819 rfc 822 and suitable for email headers.
1821 * SoObjects/Mailer/SOGoDraftObject.m: invoke the new
1822 "rfc822DateString" category method on the date we put in the
1825 2007-04-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1827 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -defaultAction])
1828 ([UIxUserRightsEditor -saveUserRightsAction]): new action methods
1829 which should never be overriden.
1830 ([UIxUserRightsEditor -appendRight:newRight])
1831 ([UIxUserRightsEditor -removeRight:right])
1832 ([UIxUserRightsEditor -appendExclusiveRight:newRightfromList:list])
1833 ([UIxUserRightsEditor -removeAllRightsFromList:list]): new utility
1834 methods that can be used by the subclasses.
1835 ([UIxUserRightsEditor -prepareRightsForm]): new method that should
1836 mandatorily be overriden to prepare the elements of the subclassed
1838 ([UIxUserRightsEditor -updateRights]): new method that should
1839 mandatorily be overriden to update the user rights from the
1840 elements of the subclassed form.
1842 * UI/Common/UIxAclEditor.m ([UIxAclEditor -_prepareUsers]): we
1843 check if the uid is already listed before adding it to our array.
1844 This is because the acl table can contain more than one record per
1845 user/object relationship.
1847 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
1848 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): the
1849 "roles" parameter is now an NSArray instead of a string. Therefore
1850 we loop throughout the array to populate the table. All the
1851 relevant records are removed prior to the addition of the new
1854 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1855 -aclsForUser:uid]): new override that returns nil until we add
1856 support for IMAP acls.
1858 * SoObjects/Mailer/SOGoMailAccounts.m
1859 ([SOGoMailAccounts -aclsForUser:uid]): same as below.
1861 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1862 ([SOGoContactLDAPFolder -aclsForUser:uid]): same as below.
1864 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
1865 -aclsForUser:uid]): override this method which will always return
1868 * SoObjects/SOGo/SOGoPermissions.[hm]: added
1869 [Public,Private,Confidential]
1870 x[Viewer,DAndTViewer,Responder,Modifier]. Renamed
1871 SOGoRole_ORganizer to SOGoCalendarRole_Organizer. Same for
1872 ..._Participant. Removed SOGoRole_Assistant and SOGoRole_Delegate.
1874 * SoObjects/Appointments/SOGoAppointmentFolder.m
1875 ([SOGoAppointmentFolder -defaultAclRoles]): new overriden method
1876 that defines default roles for new elements in the acl.
1878 * UI/Scheduler/UIxCalUserRightsEditor.[hm]: new component class
1879 module and subclass of UIxUserRightsEditor specific to the
1880 handling of user rights on calendar folders.
1882 2007-04-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1884 * SoObjects/Appointments/SOGoAppointmentFolder.m
1885 ([SOGoAppointmentFolder -groupDavResourceType]): return both
1886 "vevent-collection" and "vtodo-collection".
1888 * UI/Common/UIxUserRightsEditor.[hm]: new template class module
1889 that implements the detailed editor of user rights per-object.
1891 2007-04-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1893 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
1894 -rolesForObject:objectinContext:context]): no longer query objects
1895 for "roleForUser:". Instead, all objects should implement
1898 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject -acls]):
1899 new method to comply with the new acl "protocol" in SOGoObject.
1900 Uses SOGoFolder's new facilities for ACLS.
1901 ([SOGoContentObject -aclsForUser:uid]): idem.
1902 ([SOGoContentObject -setRoles:rolesforUser:uid]): idem.
1903 ([SOGoContentObject -removeAclsForUsers:users]): idem.
1905 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
1906 -aclsForObjectAtPath:objectPathArray]): new method generic to GCS
1907 based folders. This method is derived from the code that was in
1908 UIxAclFolder before its removal.
1909 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
1912 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): idem.
1914 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): idem.
1915 ([SOGoFolder -setRoleForUsers:uidsto:role])
1916 ([SOGoFolder -setRoleForUsers:uidsto:role]): removed method.
1918 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -acls]): stub method
1919 that requires overriding by subclasses.
1920 ([SOGoObject -aclsForUser:uid]): idem.
1921 ([SOGoObject -defaultAclRoles]): idem.
1922 ([SOGoObject -setRoles:rolesforUser:uid]): idem.
1923 ([SOGoObject -removeAclsForUsers:users]): idem.
1925 * UI/Common/UIxObjectActions.m: new module implementing the web
1926 actions common to SOGoObject and all its subclasses.
1927 ([UIxObjectActions -addUserInAclsAction]): new method that adds a
1928 user with the clientObject defaults user rights to the object's
1931 * UI/Common/UIxAclEditor.m: modified module so as to simplify it
1932 to the point where it will only list the users (and their name)
1933 associated with an object acl.
1935 * SoObjects/SOGo/SOGoAclsFolder.m: removed module because its
1936 methods have been moved into SOGoObject and SOGoFolder during a
1939 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1940 -iCalParticipantsAndResourcesStringFromQueryParameters]): removed
1941 method made useless by the programmatic handling of iCalendar
1943 ([UIxComponentEditor -iCalParticipantsStringFromQueryParameters]): idem.
1944 ([UIxComponentEditor -iCalResourcesStringFromQueryParameters]): idem.
1945 ([UIxComponentEditor -iCalStringFromQueryParameter:_qpformat:_format]): idem.
1947 * UI/WebServerResources/MailerUI.js (initDnd): enable drag and
1948 drop on all folder nodes, not just on leaves.
1950 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1951 ([SOGoContactLDAPFolder
1952 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): request field "uid" when doing a search.
1954 2007-04-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1956 * Main/SOGo.m ([SOGo +initialize]): on GNUstep, trigger some
1957 debugging facilities when the SOGoDebugObjectAllocation user
1960 2007-04-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1962 * SoObjects/SOGo/NSString+Utilities.m ([NSString -boolValue]): new
1963 method that SOGo will need with non-gnustep Foundation
1965 ([NSString -stringByAppendingPathComponent:component]): new method
1966 that SOGo will need when building with libFoundation. Method
1967 removed later since it is available from
1968 Foundation/NSPathUtilities.h.
1970 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -timeZone]): method moved
1973 * SoObjects/SOGo/SOGoObject.m: new ivar "context" that permits
1974 every subclass to access [WOApplication context] without having to
1975 invoke it more than once.
1977 * SoObjects/Appointments/SOGoCalendarComponent.m
1978 ([SOGoCalendarComponent -changeParticipationStatus:_status]):
1979 moved method from SOGoTaskObject and SOGoAppointmentObject up to
1982 * UI/Scheduler/UIxCalSelectTab.m: removed module.
1984 2007-04-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1986 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
1987 -vCard]): test the prefix of the card in a case-independent way.
1989 * OGoContentStore/OCSContactFieldExtractor.m
1990 ([OCSContactFieldExtractor
1991 -extractQuickFieldsFromContent:content]): we no longer accept
1992 records in a format other than versit vCard so we can get rid of a
1995 2007-04-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1997 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1998 -selectorComponentClass]): restored method.
2000 2007-04-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2002 * UI/Scheduler/UIxCalTasksListView.m ([UIxCalTasksListView
2003 -shouldDisplayCurrentTask]): the current task is not displayed if
2004 it is NOT completed or if the "showCompletedTasks" flag is set.
2005 The logic was inverted in Lightning and is now in SOGo too.
2007 2007-04-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2009 * UI/Contacts/UIxContactView.m ([UIxContactView -workUrl]): we
2010 want the "work" url instead of the "home".
2012 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
2013 -_saveSnapshot]): save url values from snapshot.
2014 ([UIxContactEditor -initSnapshot]): load url values from snapshot.
2016 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2017 -calendarList]): new method replacing "availableCalendars".
2019 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
2020 -calendarFolders]): we now take the list of subscribed calendar
2023 * SoObjects/Appointments/SOGoAppointmentFolder.m
2024 ([SOGoAppointmentFolder -calendarFoldersInContext:context]): new
2025 method derived from and replacing [UIxCalView calendarFolders].
2027 2007-03-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2029 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2030 -toManyRelationshipKeys]): don't put the predefined folders in the
2031 list if they are returned by the server.
2033 * UI/MailerUI/UIxMailTree.m ([UIxMailTree -flattenedNodes]): we no
2034 longer store the "flattenedBlocks" in a dictionary since the
2035 object will be deleted anyway and we don't need to put the folders
2038 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
2039 ([UIxMailPartHTMLViewer -_attachmentIds]): take the current
2040 attachment path into account when computing the part urls.
2042 2007-03-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2044 * UI/Contacts/UIxContactsListViewContainer.m
2045 ([UIxContactsListViewContainer -additionalFolders]): take the list
2046 of subscribed folders from the new property list used for the user
2047 settings. The value of its key is SubscribedFolders for the
2048 dictionary entry named "Contacts".
2050 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2051 -canAccessContentAction]): new method to override the one from
2052 UIxFoldersActions by taking into account the fact that, this time,
2053 the clientObject is an ldap folder. Removed many method that used
2054 to be related to the handling of the user selector.
2056 * UI/Scheduler/UIxCalDayView.m: commented out many unused methods
2057 to make sure they can be removed.
2059 * UI/Scheduler/UIxCalView.m ([UIxCalView -_setupCalendarFolders]):
2060 populate the calendar entries based on the user settings plist.
2062 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2063 -selectForMailerAction]): restored method.
2065 * UI/Scheduler/UIxCalendarSelector.m: new template module derived
2066 from a simplified version of the old UIxContactEditor (removed).
2068 * UI/Contacts/UIxContactsUserFolders.m: new template module for
2069 selecting users or user folders through an LDAP search of which
2070 the results are displayed as a tree.
2072 * UI/WebServerResources/UIxMailEditor.js: moved previous generic
2073 method "onContactAdd" here since the Mailer is now the only module
2074 to use it when composing emails.
2076 * UI/WebServerResources/generic.js: added code for handling the
2077 new scheme used for describing SOGo folders, common code to handle
2078 folder addition or removal.
2080 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2081 -activateFolderAction]): new method that change the "active"
2082 settings in the folder-related fields in the user settings.
2083 ([UIxFolderActions -deactivateFolderAction]): see above.
2085 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2086 -checkRightsAction]): removed method.
2088 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2089 -updateAdditionalAddressBooksAction]): removed method.
2091 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
2092 -updateCalendarsAction]): removed method.
2094 2007-03-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2096 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
2097 -checkRightsAction]): removed method.
2099 * UI/Common/UIxFolderActions.m ([UIxFolderActions
2100 -canAccessContentAction]): new method designed to replace
2101 [UIxCalMainView checkRightsAction] in a more universal way.
2103 2007-03-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2105 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2106 -roleOfUser:uidinContext:context]): take all the subkeys into
2107 account, not only the "personal" folder.
2109 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2110 -takeValuesFromRequest:_rqinContext:_ctx]): append a "uid" field
2111 to the new components.
2113 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -userSettings]): new method
2116 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
2117 -getUserDefaultsForUID:uid]): rewrote method to use the "defaults"
2118 field of the sogo_user_profile table, where the user-customizable
2119 changes will be saved.
2120 ([AgenorUserManager -getUserSettingsForUID:uid]): new method
2121 similar to the one above, using the "settings" field where the
2122 automatic settings will be saved.
2124 * SoObjects/SOGo/AgenorUserDefaults.m: rewrote a big part of the
2125 module to bind the userdefaults to a property list contained in a
2126 specified field of the sogo_user_profile table.
2127 ([AgenorUserDefaults
2128 -initWithTableURL:tableURLuid:userIDfieldName:defaultsFieldName]):
2129 added a "fieldName" parameter.
2131 * UI/Common/UIxFolderActions.m: new module implementing web
2132 actions common to all GCS-based folders.
2134 2007-03-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2136 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -labelForDay]):
2137 put a carriage return after the day name.
2139 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
2140 -readFreeBusyAction]): restored method.
2142 2007-03-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2144 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
2145 -defaultAction]): remade module to redirect automatically to the
2148 * SoObjects/Contacts/NSDictionary+Contact.m: removed module.
2150 2007-03-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2152 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2153 -deleteAction]): new web method to delete personal addressbook
2156 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
2157 -delete]): override method to refuse the deletion of the folder if
2158 its nameInContainer is "personal".
2160 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -delete]): new method
2161 that forwards the deletion request to the folder manager.
2163 2007-03-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2165 * UI/Scheduler/UIxAttendeesEditor.m ([UIxAttendeesEditor
2166 -zoomList]): new method that returns the list of available zoom factors.
2168 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
2169 -changeStatusAction]): rewrote method.
2171 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2172 -_handleAttendeesEdition]): make sure "attendeesNames" has a
2173 length > 0 before computing the attendees. Otherwise there will be
2174 an invalid empty entry.
2175 ([UIxComponentEditor -_handleOrganizer]): new method that adds the
2176 organizer when there are attendees and remove it when the
2177 attendees are removed.
2179 2007-03-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2181 * UI/Scheduler/UIxAttendeesEditor.m): new component.
2183 * UI/Scheduler/UIxComponentEditor.m: no longer a superclass for
2184 the task and appointment editors. Now a container component
2185 handling the common elements of tasks and events.
2187 * UI/Scheduler/UIxTaskEditor.m: same as below.
2189 * UI/Scheduler/UIxAppointmentEditor.m: rewrote template. No longer
2190 a subclass of UIxComponentEditor but a subcomponent of it.
2192 * UI/Common/UIxToolbar.m ([UIxToolbar -toolbarConfig]): the
2193 toolbar can have the special value "none" to indicate there is
2194 none attached to the window.
2196 * SoObjects/Appointments/SOGoCalendarComponent.m
2197 ([SOGoCalendarComponent -isOrganizer:emailorOwner:login]): new
2199 ([SOGoCalendarComponent -isParticipant:email]): new method.
2200 ([SOGoCalendarComponent -calendar:create]): takes one parameter
2201 "create" which is a boolean indicating whether we want to create
2202 the calendar if it does not exist.
2204 2007-03-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2206 * UI/Scheduler/UIxCalMonthView.m: changed view to use divs instead
2207 of a table, the same way the dayly and weekly views have been for
2210 2007-02-09 Helge Hess <helge.hess@opengroupware.org>
2212 * SoObjects/Appointments/SOGoAppointmentFolder.m: added CalDAV
2215 * SoObjects/SOGo/SOGoUserFolder.m: added davCalendarHomeSet CalDAV
2216 property to point at the user folder
2218 2007-03-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2220 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2221 -userInContext:]): returns "SOGoUser".
2223 * SoObjects/Appointments/SOGoCalendarComponent.m
2224 ([SOGoCalendarComponent -contentAsString]): overriden method that
2225 takes the privacy into account and discard the relevant fields if
2226 needed by generating a new content string and caching it.
2227 ([SOGoCalendarComponent
2228 -saveContentString:contentStringbaseVersion:baseVersion]): if the
2229 new method above has cached a content string, release it and set
2230 it to nil so that it will have to be regenerated in the case it is
2232 ([SOGoCalendarComponent -_filterPrivateComponent:component]):
2233 discard the fields that have to be hidden when the card is
2236 * SoObjects/Appointments/SOGoAppointmentFolder.m
2237 ([SOGoAppointmentFolder
2238 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]): make
2239 sure the cards are now handled as instances of
2240 SOGoCalendarComponent instead of SOGoContentObject so that their
2241 content string is taking the privacy classifiction into account.
2242 ([SOGoAppointmentFolder -_privacySqlString]): new method that
2243 generates a query to determine what information can be given and
2244 if the card itself has to be shown.
2246 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
2247 -getICalPersonsFromValue:selectorValue]): removed useless
2248 "isAccessRestricted" method.
2250 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
2251 -setStyle:_style]): test whether the values of orgmail and
2252 partmails are null before manipulating them, otherwise SOGo sends
2253 a "rangeOfString:" message to an NSNull, which makes it crashes.
2255 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2256 -extractQuickFieldsFromEvent:_event]): we now use the new
2257 "symbolicAccessClass" method from iCalEntity to determine the
2258 value of the "classifiction" field.
2259 ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]): same
2262 2007-03-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2264 * SoObjects/Appointments/SOGoAppointmentFolder.m
2265 ([SOGoAppointmentFolder
2266 -fetchCoreInfosFrom:_startDateto:_endDatecomponent:_component]):
2267 see below, the query is adapted consequently.
2269 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2270 -extractQuickFieldsFromTodo:_task]): the field "ispublic" was
2271 renamed to "classification" and can any integer as value.
2272 ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event]):
2275 2007-02-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2277 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
2278 ([_UIxHTMLMailContentHandler -_appendStyle:_charslength:_len]):
2279 don't prepend anything to the class and id named. Instead, we
2280 make each style embedded in the ".SOGoHTMLMail-CSS-Delimiter"
2283 2007-02-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2285 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
2286 -rolesOfUser:logininContext:context]): if object does not exists
2287 (for example when it's being created), the current user has the
2288 same rights on it than he/she has on its parent container.
2290 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
2291 -nameExistsInFolder:objectName]): methods that tests if a c_name
2292 corresponding to the name passed as parameter is present in the db
2295 2007-02-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2297 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
2298 -rolesForObject:objectinContext:context]): test for
2299 "rolesOfUser:inContext:" in addition to "roleOfUser:...".
2301 * SoObjects/Appointments/SOGoCalendarComponent.m
2302 ([SOGoCalendarComponent -rolesOfUser:logininContext:context]):
2303 returns the roles of the user on the container object if the event
2306 2007-02-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2308 * UI/MailPartViewers/UIxMailRenderingContext.m: returns the
2309 alternativeViewer a multipart/related message is being handled.
2311 * UI/MailPartViewers/UIxMailPartHTMLViewer.m: reimplemented module
2314 * UI/MailPartViewers/UIxMailPartAlternativeViewer.m: select the
2315 text/html component before text/plain.
2317 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2318 -addRequiredKeysOfStructure:path:toArray:recurse:]): accepts the
2319 fetching of HTML parts.
2321 * SoObjects/Appointments/SOGoCalendarComponent.m
2322 ([SOGoCalendarComponent -componentTag]): new template method that
2323 returns the vcalendar tag of the current object.
2324 ([SOGoCalendarComponent -component]): new method that returns the
2325 first object matching [self componentTag] within the current
2326 calendar object. This method replaces 'firstEventInCalendar:' as
2327 well as "firstTaskInCalendar:".
2328 ([SOGoCalendarComponent -roleOfUser:logininContext:context]):
2329 moved method from SOGoAppointmentObject.m.
2331 2007-02-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2333 * UI/Scheduler/UIxCalMulticolumnDayView.[hm]: new daily view
2334 module which shows each selected user's calendar in a different
2335 column instead of mixing their events together.
2337 * UI/Scheduler/UIxCalView.m ([UIxCalView -redirectForUIDsAction]):
2338 replaced use of [NSString stringByTrimmingWhiteSpaces] with
2339 [NSString stringByTrimmingSpaces].
2341 * UI/MailPartViewers/UIxMailPartICalViewer.m: request the key
2342 "cnWithoutQuotes" instead of "cnForDisplay", which no longer
2345 * UI/Scheduler/UIxCalDayOverview.m,
2346 UI/Scheduler/UIxCalDayChartview.m,
2347 UI/Scheduler/UIxCalDayListview.m,
2348 UI/Scheduler/UIxCalWeekOverview.m,
2349 UI/Scheduler/UIxCalWeekChartview.m,
2350 UI/Scheduler/UIxCalWeekListview.m,
2351 UI/Scheduler/UIxCalInlineMonthOverview.m,
2352 UI/Scheduler/UIxCalYearOverview.m: removed unused modules.
2354 2007-02-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2356 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2357 -appendPersonalSourcesInContext:context]): release connectoin
2358 channel when everything is done.
2360 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2361 -newAbAction]): new action method to crate a new contact folder
2364 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -create]): new method
2365 that requests the folder manager to create a folder table with the
2366 specified type at the specified path. The type is taken from [self
2369 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
2370 -folderType]): implemented.
2372 * SoObjects/Appointments/SOGoAppointmentFolder.m
2373 ([SOGoAppointmentFolder -folderType]): implemented.
2375 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2376 -appendPersonalSourcesInContext:context]): we now fetch all
2377 folders with type "Contact" that belong to the current user.
2378 ([SOGoContactFolders -newFolderWithName:name]): new method to
2379 create a new contact folder.
2381 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]): treat
2382 resulting url with [NSString+Utilities hostlessURL] instead of
2383 using NSURL. This is because the url in question sometimes has a
2384 hostname and sometimes not. "hostlessURL" ensure the hostname is
2386 ([UIxComponent -applicationPath]): same as above.
2388 2007-02-08 Ludovic Marcotte <ludovic@inverse.ca>
2390 * SoObjects/Mailer/SOGoMailFolder.m: priorize the lookup of
2391 folders before doing the one on messages.
2393 2007-02-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2395 * SoObjects/SOGo/NSArray+Utilities.m: added an implementation of
2396 makeObjectsPerform:withObject:withObject: for GNUstep
2399 * OGoContentStore/GNUmakefile, Protocols/common.make,
2400 SoObjects/common.make, UI/common.make: install in
2401 GNUSTEP_INSTALLATION_DIR instead of GNUSTEP_USER_DIR.
2403 2007-02-07 Ludovic Marcotte <ludovic@inverse.ca>
2405 * UI/Scheduler/English.lproj/Localizable.strings: fixed typo for
2408 2007-02-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2410 * UI/MailerUI/UIxMailTree.m ([UIxMailTree
2411 -getTitle:folderType:andIcon:forObject:]): disabled Sieve folders
2414 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2415 -checkLogin:_loginpassword:_pwd]): fixed a bug where a wrong
2416 password would be accepted anyway as long as its length was > 0.
2417 This can be the case ONLY when LDAP is disabled otherwise we have
2418 a serious security issue...
2420 * SoObjects/Appointments/SOGoAppointmentObject.m
2421 ([SOGoAppointmentObject -roleOfUser:logininContext:context]): if a
2422 user is not an organizer nor a participant, he is declared as
2423 "Owner" if he owns the calendar the entry where the entry is
2424 contained. Other cases should not be possible.
2426 2007-02-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2428 * UI/Contacts/UIxContactEditor.m: display and handle the new
2431 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2432 ([SOGoContactLDAPFolder -_searchAttributes]): retrieve "calFBURL"
2435 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
2436 -vCard]): put the LDAP "calFBURL" field in the vCard's "FBURL"
2439 2007-01-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2441 * SoObjects/Appointments/SOGoCalendarComponent.m
2442 ([SOGoCalendarComponent -sendEMailNotifications]): new method that
2443 returns the value of ud "SOGoAppointmentSendEMailNotifications"
2445 ([SOGoCalendarComponent
2446 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]): method moved from SOGoAppointmentObject/SOGoTaskObject, replacing occurences of "appointment" to "object" in its name.
2448 2007-01-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2450 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
2451 -defaultAction]): invoke "flushMailCaches" on [self clientObject]
2452 so that the mailbox cache is refreshed everytime the user presses
2453 on "get mail". I doubt a mailbox cache really is useful in general
2456 2007-01-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2458 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2459 -userInContext:]): if the lookup is on "freebusy.ifb" and the
2460 username is "anonymous" the user is automatically set to
2463 2007-01-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2465 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2466 -checkLogin:_loginpassword:_pwd]): authorize special "freebusy"
2467 user with password "freebusy".
2469 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
2470 -contentAsString]): the default timerange is now 14 days before
2471 currentday and 1 month after.
2473 2007-01-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2475 * SoObjects/Appointments/SOGoAppointmentFolder.m
2476 ([SOGoAppointmentFolder
2477 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
2478 escape the record string in a way suitable with XML encoding.
2480 2007-01-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2482 * UI/WebServerResources/SchedulerUI.js: fixed a bug where the
2483 calendar view would not be updated properly.
2485 2007-01-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2487 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2488 -newStartDate]): fix the handling of the component start date
2489 depending on the "hm" and the "day" parameters.
2491 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
2492 -roleOfUser:uidinContext:context]): set role of current user to
2493 "Assistant" if the object that is accessed is "freebusy.ifb".
2495 * SoObjects/Appointments/SOGoAppointmentFolder.m
2496 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): method
2497 moved from UI/Scheduler/UIxCalView:calendarFolderForUID:.
2498 ([SOGoAppointmentFolder
2499 -lookupCalendarFoldersForUIDs:_uidsinContext:]): now use the new
2500 lookupCalendarFolderForUID: method, which doesn't do security
2503 2007-01-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2505 * UI/Common/UIxAclEditor.m ([UIxAclEditor -assistantsValue]): new
2506 accessor that returns the comma-separated list of users with role
2508 ([UIxAclEditor -delegatesValue]): same as above for "Delegate".
2509 ([UIxAclEditor -_prepareUsers]): there is no longer a concept of
2510 "checkedUsers". Instead, each user is either classified in the
2511 list of assistants or the list of delegates.
2513 2006-12-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2515 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
2516 -composeAction]): method imported from removed container modules.
2517 ([UIxMailMainFrame -mailFolderName]): method imported from removed
2520 * UI/MailerUI/UIxMailPopupView.m: a new special popup component
2521 for wrapping UIxMailView with the "popupview" action.
2523 * UI/MailerUI/UIxMailAccountView.m: renamed to UIxMailSplashView,
2524 since its the component that displays the same splash screen than
2525 the one in Thunderbird/Icedove.
2527 * UI/MailerUI/UIxMailAccountViewContainer.[hm],
2528 UI/MailerUI/UI/MailerUI/UIxMailAccountsView.m,
2529 UI/MailerUI/UIxMailListViewContainer.[hm],
2530 UI/MailerUI/UIxMailViewContainer.[hm]: removed
2532 2006-12-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2534 * UI/WebServerResources/HTMLElement.js: replaced the functional
2535 selectNode() and deselectNode() functions with select() and
2536 deselect() methods of HTMLElement.
2538 * UI/WebServerResources/ContactsUI.js: cleanup, most of the
2539 events are initialized from here now instead of in the HTML code.
2541 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2542 -checkRightsAction]): new method similar to the one with the same
2543 name in UIxCalMainView.m.
2545 * UI/Common/UIxAclEditor.m ([UIxAclEditor -saveAclsAction]): added
2546 code to handle the publishing of freebusy information.
2548 2006-12-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2550 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
2551 -checkRightsAction]): new action method that returns a
2552 comma-separated list of boolean values matching the right of the
2553 current user to "view" (as a permission) each foreign calendar
2554 stored in his preferences.
2556 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -setOwner:newOwner]):
2557 new method that sets a customOwner, which can be returned with
2558 ownerInContext it set.
2560 * SoObjects/Appointments/SOGoAppointmentFolder.m
2561 ([SOGoAppointmentFolder
2562 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): no longer set the owner of elements here.
2564 2006-12-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2566 * SoObjects/SOGo/SOGoUserFolder.m: same as for SOGoContactFolders
2567 below, but for the Contacts and Calendar collections.
2569 * SoObjects/SOGo/SOGoAclsFolder.m: convert the class to user the
2570 new acl facilities method from sope-gdl/GCSFolder.m.
2572 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2573 -roleOfUser:uidinContext:context]): new method that returns
2574 SOGoRole_Assistant when the user is an assistant or a delegate on
2575 the "personal" ab object. This is so that setting roles on the
2576 SOGoContactFolders object is not required.
2578 2006-12-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2580 * Main/SOGo.m: declare "Freebusy" permissions for the top objects.
2582 * UI/Contacts/UIxContactsAclsSelection.m: new component specific
2583 to the handling of the user selection for the acls.
2585 * SoObjects/SOGo/SOGoPermissions.[hm]: new module that extends the
2586 values from SoPermissions with ones specific to SOGo.
2588 * SoObjects/SOGo/SOGoAclsFolder.[hm]: new class module that
2589 handles the storage for the acls.
2591 * SoObjects/Appointments/SOGoCalendarComponent.[hm]: new parent
2592 class for SOGoAppointmentObject and SOGoTaskObject.
2594 * UI/Common/UIxAclEditor.[hm]: new component that provides a
2595 general editor for folder acls.
2597 * SoObjects/SOGo/NSString+Utilities.[hm]: old "NSString+URL"
2599 ([NSString -davMethodToObjC]): method that returns the method name
2600 for a DAV property implementation.
2602 * SoObjects/SOGo/NSArray+Utilities.m: new extension module to
2604 ([NSArray -stringsWithFormat:format]): new method that returns
2605 formatted occurences of the strings stored in the array.
2607 * SoObjects/SOGo/SOGoDAVRendererTypes.m ([SOGoDAVSet
2608 +davSetWithArray:newValuesofValuesTaggedAs:newValueTag]): a new
2609 subclass module of SoWebDAVValue that supports collections of
2610 properties of the same type.
2612 2006-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2614 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2615 -lookupFolder:ofClassNamed:inContext:]): added the ability to
2616 configure the name of the SOGoDraftFolders with the ud var
2617 "SOGoDraftsFolderName".
2619 2006-11-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2621 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2622 -userTimeZone:username]): new method that returns the timezone for
2623 the specified user depending on his preferences and the server
2626 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2627 -stringForData:partInfo:]): take the encoding into account and
2628 translate the text to "normal" before processing the charset data.
2630 2006-11-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2632 * UI/WebServerResources/generic.js: the progress indicator is on
2633 when loading the page so we turn it off, and we turn it back on
2634 whenever we switch to another module...
2636 * UI/WebServerResources/SchedulerUI.js: make sure the day view
2637 synchronization mechanism works everywhere.
2639 * UI/WebServerResources/generic.js: the log window is not only
2640 visible when UIxDebugEnabled is set.
2642 * UI/WebServerResources/SchedulerUI.js: the month overview's day
2643 cells are now initialized with the DOM event interface methods
2644 instead of with html attributes.
2646 * UI/Templates/MailerUI/UIxMailView.wox: don't display useless
2647 headers (should be made configurable at some point)...
2649 * OGoContentStore/sql/generate-folderinfo-sql-for-users.sh: drop
2650 "not null" constraint on startdate, enddate, isopaque,
2651 participants and partmails.
2653 2006-11-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2655 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
2656 -hoursToDisplay]): prevent a crash by retaining the
2657 "hoursToDisplay" array after it's created.
2658 ([UIxCalDayTable -clickableHourCellClass]): new method for the new
2659 clickable hours DIV.
2661 * UI/WebServerResources/SchedulerUI.js: made the event
2662 participation status modification asynchronous, which also fixes a
2663 bug where the window would sometimes close before the accept or
2664 decline action was completed. Also, adapted the event handling
2665 related to the days or weeks view with the new DIV-based layout.
2667 * UI/Scheduler/UIxCalInlineAptView.m: same as the first below...
2669 * UI/Scheduler/UIxCalDayTable.m: enhanced to provide the new
2670 DIV-based presentation of the days and weeks.
2672 * SoObjects/Appointments/SOGoTaskObject.m: same as below...
2674 * SoObjects/Appointments/SOGoAppointmentObject.m: lookupName:...
2675 might return an exception so we have to handle it if we don't
2678 2006-11-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2680 * UI/WebServerResources/SchedulerUI.js: updated the list
2681 initialization code to use the new event management scheme, adding
2682 what was missing to be able to delete events and tasks again.
2684 * UI/WebServerResources/MailerUI.js: added code to activate the
2685 "Get mails" button. Fixed a bug which prevented messages to be
2688 * UI/WebServerResources/UIxFreeBusyUserSelector.js: handle tab
2689 navigation and focus handling of INPUTs.
2691 2006-11-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2693 * UI/WebServerResources/MailerUI.js: added code to handle the
2694 possible drag and drop events to manager in the mail module.
2695 Moving messages, opening parent folders, ...
2697 * UI/WebServerResources/SOGoDragAndDrop.js: new file containing
2698 the drag and drop manager as well as the interface to HTMLElement
2699 to trigger drag and drop events.
2701 * UI/MailerUI/UIxMailView.m ([UIxMailView -moveAction]): new
2702 action to move the current message to the mailbox named after the
2703 value of parameter "tofolder".
2705 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2706 -moveToFolderNamed:folderNameinContext:]): new method base on
2709 2006-11-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2711 * UI/WebServerResources/generic.js: added and activated many
2712 "load" handlers to configure generic widgets used across the
2713 modules. More events are now handled in a DOM-fashion way instead
2714 of by setting the relative attributes in the templates.
2716 * UI/Templates/UIxSortableTableHeader.wox: all the events are
2717 declared from the javascript DOM onload handlers.
2719 * UI/Templates/UIxPageFrame.wox: load the new SOGoDragHandles.js
2722 * UI/Templates/MailerUI/UIxMailListView.wox: all the events are
2723 declared from the javascript DOM onload handlers.
2725 * UI/MailerUI/UIxMailListView.m: removed all the JS methods since
2726 we want everything to be separated from each other, as much as
2729 * UI/WebServerResources/SOGoDragHandles.js: new module containing
2730 the "SOGoDragHandlesInterface", implementing methods that can be
2731 attributed to DIV so that they can be used as drag handles.
2733 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
2734 -asQPSubjectString]): initialize the tmp strings with '0' to make
2735 sure they don't contain garbage.
2737 2006-11-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2739 * UI/WebServerResources/MailerUI.js: register the messageList
2740 table as a dragging source and the leaf of the navigation tree as
2741 dnd destinations to the DNDManager.
2743 * UI/WebServerResources/generic.js: initialize tabs from the
2744 "unload" event listener that is added programmatically instead of
2745 from the template... Also, added the new DNDManager object.
2747 * UI/WebServerResources/HTMLTableElement.js: added code to
2748 simulate XUL drag n drop events. This code will possibly be moved
2749 to HTMLElement.js instead later...
2751 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2752 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): same as
2755 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
2756 -_qualifierForFilter:filter]): only search records which starts
2757 with the specified pattern.
2759 2006-11-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2761 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
2762 -asQPSubjectString]): new method that returns the special QP
2763 string with its qp declaration for email subjects.
2764 ([SOGoDraftObject -bodyPartForText])
2765 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): don't
2766 double-encode data in UTF-8.
2768 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2769 -newStartDate]): new method to determine the start date depending
2770 on the URL parameters, the current day and the current time.
2771 ([UIxComponentEditor -toolbar]): new method to determine the
2772 filename of the toolbar that should be drawn depending on the
2773 ownership and the list of attendees of the task/event wrt to the
2776 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
2777 -setDayStartHour:aStartHour]): adjust the minutes to the next
2778 quarter of hour, if not already set to a quarter.
2780 * UI/WebServerResources/UIxAppointmentEditor.js,
2781 UI/WebServerResources/UIxTaskEditor.js: added code to manage start
2784 2006-11-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2786 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2787 -loadValuesFromComponent:component]): handles access class
2788 (privacy) and status.
2790 * UI/Contacts/UIxContactsListViewContainer.m
2791 ([UIxContactsListViewContainer -additionalFolders]): return nil if
2792 [self additionalAddressBooks] returns an empty string.
2794 2006-11-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2796 * UI/Scheduler/UIxCalMonthView.m ([UIxCalMonthView
2797 rangesOf7Days]): enhanced and debugged algorithm to feed the array
2798 with slices where the first day is still in the requested month.
2800 * UI/Templates/UIxPageFrame.wox: the logConsole is created only on
2803 * UI/SOGoUI/SOGoAptFormatter.m: added code to handle the display
2804 of events in the day boxes of the calendar's monthly view.
2806 * SoObjects/Appointments/SOGoTaskObject.m ([SOGoTaskObject
2807 -davContentType]): declare "text/calendar".
2809 * SoObjects/Appointments/SOGoAppointmentObject.m
2810 ([SOGoAppointmentObject -davContentType]): declare
2813 * SoObjects/Appointments/SOGoAppointmentFolder.m
2814 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): certain
2815 HTTP methods are handled by SOPE and requires nil to be returned,
2816 this method now invokes the new
2817 "requestNamedIsHandledLater:inContext:" method to check that.
2818 ([SOGoAppointmentFolder
2819 -requestNamedIsHandledLater:nameinContext:context]): new methods
2820 that returns "YES" only for the "OPTIONS" http method (for now...).
2821 ([SOGoAppointmentFolder -davComplianceClassesInContext:]):
2822 overloaded method to append the "access-control" and
2823 "calendar-access" DAV abilities to the initial declaration.
2825 * UI/Scheduler/UIxCalMonthView.[hm]: rewritten module entirely to
2826 imitate the look of Sunbird/Lightning's monthly view.
2828 * UI/Scheduler/UIxCalMonthView.[hm]: renamed to
2829 UIxCalMonthViewOld.[hm].
2831 2006-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2833 * UI/Scheduler/UIxFreeBusyUserSelectorTable.m
2834 ([UIxFreeBusyUserSelectorTable -currentContactHasStatus]): new
2836 ([UIxFreeBusyUserSelectorTable -currentContactStatusImage]):
2837 returns an image name based on the participation status of the
2840 * UI/WebServerResources/SchedulerUI.js: same strip down as for
2843 * UI/Contacts/UIxContactsListViewContainer.m ([UIxContactsListViewContainer -additionalAddressBooks])
2844 ([UIxContactsListViewContainer -additionalFolders])
2845 ([UIxContactsListViewContainer -setCurrentAdditionalFolder:newCurrentAdditionalFolder])
2846 ([UIxContactsListViewContainer -currentAdditionalFolder]): new
2847 methods to handle the external addressbooks a user has subscribed
2848 too, by retriving them from his preferences.
2850 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2851 -updateAdditionalAddressBooksAction]): new method that updates the
2852 user settings with the list of addressbook he has subscribed to.
2854 * UI/Contacts/UIxContactsAddressBooksSelection.m: new component
2855 module for the address book selector.
2857 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
2858 a toolbar with two buttons ("add" and "remove") to manage the
2859 additional addressbooks a user might subscribe to.
2861 * UI/WebServerResources/ContactsUI.js: added code to handle
2862 "external addressbooks" from the Javascript point-of-view, by
2863 extending existing methods and adding code for the "add ab" and
2864 "remove ab" buttons.
2866 * UI/WebServerResources/generic.js: moved extensions methods to
2867 DOM elements to separate files for better clarity.
2869 * UI/Common/UIxPageFrame.m ([UIxPageFrame -pageContentClasses]):
2870 new method that returns "pageContent" as class, but also "popup"
2871 for the DIV where the page content lies, so that we can manipulate
2872 the content of popup's with CSS identifiers.
2874 2006-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2876 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
2877 -displayStyle]): new method that returns a string containing the
2878 css style relative to the current appointment cell. This code is
2879 currently inactive but might be reused later.
2881 * UI/WebServerResources/SchedulerUI.js: added code to handle the
2882 display of the selected day (the day pointed by the mouse, or the
2883 current day when changing the view).
2885 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
2886 -dayCellClasses]): new method that returns a string containing the
2887 css classes applicable to the current cell, depending on the
2888 position of the day in the week, the day of today and the
2891 * UI/Scheduler/UIxCalCalendarsListView.m ([UIxCalCalendarsListView
2892 -currentContactAptBorder]): new method that returns the
2893 appropriate border color for the specified user.
2895 * SoObjects/Appointments/SOGoAppointmentObject.m
2896 ([SOGoAppointmentObject
2897 -saveContentString:contentStringbaseVersion:baseVersion]):
2898 overloaded method that parse new events and detects if they have
2899 an organizer or not. If they are new and have no organizer set
2900 (Sunbird/Lightning...), the owner of the event is set as
2903 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: new
2904 category that provides facility methods and interfaces to the
2907 * SoObjects/Contacts/product.plist: give full access to ANY
2908 authenticated user, not just the owner (to every objects...).
2910 2006-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2912 * UI/WebServerResources/UIxFreeBusyUserSelector.js: make sure
2913 every replica widgets are declared as such to their master
2914 counterpart. Take the days into account when displaying the time
2915 range taken by the appointment.
2917 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
2918 -getICalPersonsFromValue:selectorValue]): method taken from
2919 UIxFreeBusyUserSelector, that is shared both by
2920 UIxFreeBusyUserSelector and UIxFreeBusyUserSelectorTable.
2922 * SoObjects/Appointments/SOGoAppointmentFolder.m
2923 ([SOGoAppointmentFolder
2924 -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.
2926 * UI/Scheduler/UIxFreeBusyUserSelectorTable.[hm]: new subcomponent
2927 derived and taken as a subset of UIxFreeBusyUserSelector that
2928 implements the table part of the FreeBusy view. Most of the
2929 methods of UIxFreeBusyUserSelector relative to that table were
2930 moved into UIxFreeBusyUserSelectorTable, which can also be used as
2931 a standalone view for AJAX operations.
2933 2006-10-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2935 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
2936 -vCard]): change reverted.
2938 * UI/Contacts/UIxContactEditor.m: check whether the client contact
2939 folder has selector "globallyUniqueObjectId" before calling that
2942 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
2943 -vCard]): the "setVClass" NGVCard method really is "setClass"
2946 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2947 ([SOGoContactLDAPFolder -_searchAttributes]): fixed typo to
2948 request the "streetAddress" instead of the "streetaddress".
2949 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): lookup
2950 mails that *contain*, and not just *start with* the search
2953 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
2954 -vCard]): mark address returned from LDAP as the work address.
2956 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: made the whole
2957 span covered with the anchor, not only the textual information
2960 * UI/Templates/SchedulerUI/UIxCalMainView.wox: specify the type
2961 argument (event or task) to newEvent in the appointmentListMenu.
2962 Make the appointmentsListView display the appointmentsListMenu.
2964 * UI/SOGoUI/SOGoAptFormatter.m: enlarge the text size limit from
2965 12 to 50 before displaying "...".
2966 ([SOGoAptFormatter -fullDetailsForApt::]): display location only
2967 if its length > 0, whether location itself is nil or not...
2968 ([SOGoAptFormatter -tooltipForApt::_refDate]): display information
2969 of which the length > 0.
2971 2006-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2973 * UI/WebServerResources/UIxAppointmentEditor.js: correctly handles
2974 french and ISO dates.
2976 * UI/Scheduler/UIxFreeBusyUserSelector.[hm]: added code an ivars
2977 from UIxContactSelector to handle contact lists (current and
2978 additional contacts).
2980 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
2981 -_freeBusyAsText]): added handling of an "additional"-named query
2982 parameter that describe the number of additional days after
2983 enddate that should be returned.
2985 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2986 -_responseForResults:results]): give priority to results with
2987 "c_uid" fields. If none returned, use the first contact received.
2989 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2990 -extractQuickFieldsFromEvent:_event]): changed "TENTATIVE" code to
2991 2 and "CANCELLED" to 0.
2993 2006-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2995 * UI/WebServerResources/UIxAppointmentEditor.js: handle conversion
2996 of start and end dates to short string dates.
2998 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
2999 -readFreeBusyAction]): new method that returns an array of numbers
3000 corresponding to the state in the freebusy of each "quarter of an
3001 hour" between the "sday" and "eday" date parameters passed in the
3002 url. This permits to handle the display of the freebusy with Ajax
3004 ([SOGoUserHomePage -_freeBusyAsText]): add 2 days to the end date
3005 since the free busy displays 2 days ahead.
3007 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3008 -contactSearchAction]): new action that returns the uid and the
3009 username + email of the user whose name contain the value of the
3010 "search" url parameter.
3012 * SoObjects/Appointments/SOGoAppointmentFolder.m
3013 ([SOGoAppointmentFolder
3014 -fetchFreebusyInfosFrom:_startDateto:_endDate]): added fields
3015 useful for the computing of the status of the freebusy.
3017 * UI/Scheduler/UIxFreeBusyUserSelector.m ([UIxFreeBusyUserSelector
3018 -init]): new component that incarnates a user selector for events
3019 inspired by the new one found in Thunderbird Lightning.
3021 2006-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3023 * UI/WebServerResources/generic.js: added code to enable or
3024 disable anchor visually (following our internal algorithm).
3026 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -init]):
3027 added new "url" ivar with its classic accessors.
3028 ([UIxComponentEditor -urlButtonClasses]): new method that returns
3029 the class strings for the url button on the appointment/task
3030 editor (depending on the validity of the url).
3032 * UI/Templates/SchedulerUI/UIxTaskEditor.wox,
3033 UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: start rewriting
3034 the template to match the Lightning's new task/appointment editor.
3036 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor -saveValuesIntoAppointment:_appointment]): initialize url from the components'url.
3038 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveValuesIntoTask:_task]): initialize url from the components'url.
3040 2006-10-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3042 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3043 ([SOGoContactLDAPFolder
3044 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): perform the searchs on objects which start with instead of contain the lookup key.
3046 * SoObjects/Appointments/SOGoAptMailNotification.[hm]: work on
3047 iCalEntityObject instances instead of just iCalEvent's.
3049 * SoObjects/Appointments/SOGoAppointmentFolder.m
3050 ([SOGoAppointmentFolder
3051 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): set ownership of returned records by adding an "owner" key to the resulting dictionaries.
3053 * SoObjects/SOGo/NSObject+Owner.[hm]: removed module since it's a
3054 bad way of handling ownership that way.
3056 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3057 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): search also
3058 on "cn", just like Mozilla.
3060 2006-10-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3062 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]):
3063 "to" should be retained, otherwise it will be autoreleased and a
3066 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3067 -writeAction]): updated method to fetch the card before initing
3070 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3071 -extractQuickFieldsFromTodo:_task]): fixed to use NSNull instead
3074 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
3075 -iCalStringTemplate]): start and due date are now optional.
3077 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
3078 -setDayStartHour:aStartHour]): added a new "isDisabled" ivar with
3079 appropriate accessors to be settable through the templates.
3081 * UI/Scheduler/UIxDatePicker.m ([UIxDatePicker -init]): added a
3082 new "isDisabled" ivar with appropriate accessors to be
3083 settable through the templates.
3085 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
3086 -availableCalendars]): new method that list the calendars to which
3087 the user has subscribed.
3088 ([UIxComponentEditor -componentOwner]): returns the owner of the
3091 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3092 -extractQuickFieldsFromTodo:_task]): set the start and enddate of
3093 quickentries to null whenever each or all of them are null, by
3094 providing an impossible timestamp from with NSNotFound as value.
3096 2006-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3098 * UI/WebServerResources/UIxMailEditor.js: update the algorithm
3099 that handles the creation of new fields with the new APIs and the
3100 new node structure on the page.
3102 * UI/Scheduler/UIxAppointmentEditor.m,
3103 UI/Scheduler/UIxTaskEditor.m:
3104 refactored to user UIxComponentEditor as parent class.
3106 * UI/Scheduler/UIxComponentEditor.[hm]: new class module
3107 containing the methods common to the UIxTaskEditor and the
3108 UIxAppointmentEditor.
3110 2006-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3112 * SoObjects/Appointments/SOGoAppointmentFolder.m
3113 ([SOGoAppointmentFolder -doCalendarQuery:context]): now supports
3114 the handling of time-ranges.
3116 * UI/WebServerResources/ContactsUI.js: specify a notification type as
3117 parameters when onConfirmContactSelection in invoked.
3119 * UI/WebServerResources/generic.js: specify a notification type as
3120 parameters when onContactRemove in invoked.
3122 * UI/WebServerResources/SchedulerUI.js: when the user deselects
3123 all calendars, select his entry.
3125 2006-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3127 * UI/WebServerResources/SchedulerUI.js: edit and delete events
3128 with their owner-relative urls. Generate a correct entry in the
3129 css color table when a user is added to the calendars list. Put
3130 the same color next to the user id.
3132 * UI/WebServerResources/generic.js: implemented some new helper
3135 * SoObjects/Appointments/SOGoAppointmentFolder.m
3136 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): don't delete
3137 entries if their owner is not the current user.
3139 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
3140 -displayClasses]): return the correct class for the current event
3141 representation depending on its owner.
3143 * UI/Scheduler/UIxCalCalendarsListView.m: added method to create
3144 and associate a color for each user login depending on its
3145 position in the list.
3147 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView
3148 -currentRowCSSClass]): return the correct class for the current
3149 row depending on the owner of the event.
3151 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
3152 -setColors:colors]): new method to associate a color table with
3153 each user in the list.
3155 * SoObjects/Appointments/SOGoAppointmentFolder.m
3156 ([SOGoAppointmentFolder
3157 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): associate each returned record with the owner of the table they are retrieved from.
3159 * SoObjects/SOGo/NSObject+Owner.[hm]: new extension module to
3160 NSObject to associate an instance with a user.
3162 2006-10-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3164 * UI/WebServerResources/SchedulerUI.js: added handling of multiple
3167 * UI/WebServerResources/ContactsUI.js: added handling of
3168 notification of changes to contact selectors.
3170 * UI/WebServerResources/generic.js: added handling of notification
3171 of changes to contact selectors.
3173 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3174 -updateCalendarsAction]): proxy method to update the user
3175 preference table with the new selected calendar uids.
3177 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
3178 -calendarsContactsAction]): new method.
3180 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector -setCheckedBoxes:boxes])
3181 ([UIxContactSelector -setHasCheckBoxes:aBool])
3182 ([UIxContactSelector -isCheckBoxChecked]): new accessors method to
3183 permit the drawing of checkboxes instead of card icons.
3185 * UI/Scheduler/UIxCalCalendarsListView.m: new component class that
3186 wrap a selector the the "Calendars" tab.
3188 * UI/Contacts/UIxContactsCalendarsSelection.m: buttons for the
3189 new user calendar selector.
3191 2006-10-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3193 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: time ranges
3194 may cover hour 0 to hour 23.
3196 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
3197 -iCalStringFromQueryParameter:format:]): dates explicitly set to
3200 * UI/WebServerResources/SchedulerUI.js: manage both lists of
3201 objects wrt to the toolbar actions.
3203 * UI/WebServerResources/generic.js: added code to the "String"
3204 class to decode number-encoded char entities.
3206 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
3207 -batchDeleteAction]): new method to delete selected entries in the
3210 * SoObjects/Appointments/SOGoAppointmentFolder.m
3211 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): new method
3212 that delete identified entries in batch.
3214 * UI/SOGoUI/UIxComponent.m ([UIxComponent
3215 -jsCloseWithRefreshMethod:methodName]): new method with explicit purpose.
3217 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]),
3218 UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
3219 -saveAction]), UI/MailerUI/UIxMailEditor.m ([UIxMailEditor
3220 -sendAction]), UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3222 return a UIxJSClose component if everything went fine.
3224 * UI/Scheduler/UIxTaskEditor.h: interface extracted from
3227 * UI/Scheduler/UIxAppointmentEditor.h: interface extracted from
3228 UIxAppointmentEditor.m.
3230 * UI/Common/UIxJSClose.[hm]: new UIxComponent designed to display
3231 a very light page with javascript code to close a window, by
3232 calling a method on the opener if specified. This component is
3233 designed to work as a response to form postings.
3235 2006-10-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3237 * SoObjects/Appointments/SOGoTaskObject.[hm]: clone of
3238 SOGoAppointmentObject adapted for the handling of tasks.
3240 * SoObjects/Appointments/NSArray+Appointments.[hm]: category
3241 extracted from SOGoAppointmentObject.
3243 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
3244 -saveUrl]): returns the url needed to POST the new form to.
3245 redirect the user to <aptid>/editAsAppointment instead of /edit,
3246 so that SOGoAppointmentFolder can return the correct object type.
3248 * SoObjects/SOGo/NSObject+AptComparison.m ([NSObject
3249 -compareAptsAscending:_other]): accept empty start or end dates.
3251 * SoObjects/Appointments/SOGoAppointmentFolder.m
3252 ([SOGoAppointmentFolder
3253 -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.
3254 ([SOGoAppointmentFolder -doCalendarQuery:context]): fetch
3255 components of type "vtodo" as well as "vevent".
3256 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): if the
3257 url specified ends with AsTask or AsAppointment, returns the
3258 an object of the appropriate class, otherwise deduce it from its
3259 content if the HTTP method is "PUT", otherwise read its type from
3262 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
3263 -extractQuickFieldsFromTodo:_task]): extract quick fields from
3266 * UI/Scheduler/UIxCalView.m ([UIxCalView
3267 -fetchCoreAppointmentsInfos]): replacement methods for
3268 fetchCoreInfos but by retrieving object with component "vevent".
3269 ([UIxCalView -fetchCoreTasksInfos]): same as above for "vtodo"
3272 * UI/Scheduler/UIxCalTasksListView.[hm]: clone of
3273 UIxCalAptListView adapted for the handling of tasks.
3275 * UI/Scheduler/UIxTaskProposal.[hm],
3276 UI/Scheduler/UIxTaskView.[hm], UI/Scheduler/UIxTaskEditor.[hm]:
3277 clones of the UIxAppointment* classes for the handling of tasks.
3279 * UI/WebServerResources/UIxTaskEditor.js: clone of
3280 UIxAppointmentEditor adapted for the handling of tasks.
3282 * UI/WebServerResources/SchedulerUI.js: added support for tasks.
3283 Scroll the daily view to the appropriate hour when an appointment
3284 is selected in the appointments list.
3286 2006-10-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3288 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
3289 -setDayStartHour:aStartHour]): specifies the user timezone on the
3292 * UI/Scheduler/UIxAppointmentEditor.m: indicate DTSTAMP with "GMT"
3295 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate -adjustedDate])
3296 ([NSCalendarDate -driftedDate]): methods made useless by a better
3297 comprehension of the NSTimeZone API...
3299 2006-10-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3301 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): call
3302 new methods from the NSCalendarDate methods.
3304 * SoObjects/SOGo/NSCalendarDate+SOGo.m: module replacing and
3305 extending UI/Scheduler/NSCalendarDate+Scheduler.m.
3307 +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).
3308 ([NSCalendarDate -adjustedDate]): this method returns another
3309 instance set to the correct hour after the original date was set
3310 from a non-GMT timezone. This date can be used for storage.
3311 ([NSCalendarDate -driftedDate]): this method does exactly the
3312 opposite of -adjutedDate, that is, it enables the method
3313 hourOfDay, minuteOfHour etc... to return the values according to
3314 the original date's timezone. This date CANNOT be used for storage.
3316 * UI/Scheduler/NSCalendarDate+Scheduler.m ([NSCalendarDate
3317 -shortDateString]): new method that will return a "short date
3318 string" (yyyymmdd) from a calendar date object.
3320 * UI/SOGoUI/UIxComponent.m ([UIxComponent
3321 -_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.
3323 * Main/sogod.m (main): initialize the NSTimeZone's defaultTimeZone
3324 to the value of SOGoServerTimeZone or "Canada/Eastern" if not found.
3326 2006-10-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3328 * UI/WebServerResources/SchedulerUI.js: added code to scroll the
3329 view of the day at the height of hour 8:00.
3331 * UI/Scheduler/UIxCalView.m ([UIxCalView -dayStartHour]): returns 0.
3332 ([UIxCalView -dayEndHour]): returns 24.
3334 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView -defaultAction])
3335 ([UIxContactFoldersView -newAction]): invoke
3336 _selectActionForApplication: on self with the proper attribute too.
3338 * UI/Contacts/UIxContactsSelectionViewContainer.m: removed since
3339 we now use the action mechanism in UIxContactsListView to keep the
3340 same view for the contact selectors and the regular contact view.
3342 * UI/Contacts/UIxContactsListViewContainer.[hm]: replaces
3343 UIxContactsListViewContainerBase.[hm]
3345 * UI/Contacts/UIxContactsListView.[hm]: replaces UIxContactsListViewBase.[hm]
3347 * UI/WebServerResources/generic.js: generalized emailstring
3348 handling functions. Generalized address book access functions.
3350 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
3351 -isPopup]): return YES if the "popup" query parameter is set.
3353 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3354 -defaultAction]): keep the url parameters when redirecting.
3355 ([UIxContactFoldersView -selectForSchedulerAction])
3356 ([UIxContactFoldersView -selectForMailerAction]): new action
3357 methods for the /scheduler-contacts and /mailer-contacts invocations.
3359 * SoObjects/SOGo/SOGoObject.m: compose the action url using the
3360 newly available NSString+URL category.
3362 * SoObjects/SOGo/NSDictionary+URL.m ([NSDictionary
3363 -asURLParameters]): handle dictionary entries which could be
3364 instances of NSArray rather than NSString.
3366 * SoObjects/SOGo/NSString+URL.m ([NSString
3367 -composeURLWithAction:actionparameters:urlParametersandHash:useHash]): when composing the url, remove the encoded parameters first since they will be added later.
3368 ([NSString -urlWithoutParameters]): new method that returns the
3369 url without its parameters.
3371 * SoObjects/SOGo/NSString+iCal.h: deleted obsolete file.
3373 * SoObjects/SOGo/NSDictionary+URL.[hm],
3374 UI/SOGoUI/NSString+URL.[hm]: moved from UI/SOGoUI/.
3376 * UI/WebServerResources/UIxMailEditor.js: add support for
3377 additions of different types (to, cc, bcc) of recipients from the
3380 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): added the
3383 * UI/Contacts/UIxContactsMailerSelection.m,
3384 UI/Contacts/UIxContactsSchedulerSelection.m: classes replacing
3385 UI/Contacts/UIxContactsSelectionView.m to provide a different set
3386 of widgets depending on the application invoking the contact list.
3388 2006-09-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3390 * UI/WebServerResources/ContactsUI.js: hide the current contact
3391 whenever the user changes of contact folder.
3393 * UI/WebServerResources/UIxContactEditor.js: the contact UID is
3394 now provided by the template when loading the page.
3396 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
3397 -iCalPersonWithUid:uid]): new method taken from removed module
3400 2006-09-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3402 * UI/Scheduler/UIxAppointmentView.m ([UIxAppointmentView
3403 -categoriesAsString]): same as below.
3405 * UI/Scheduler/UIxAppointmentEditor.m: adapted by using the new
3406 vcalendar API's iCalEvent instead of the removed SOGoAppointment.
3408 * SoObjects/Appointments/SOGoAppointmentObject.m
3409 ([SOGoAppointmentObject -calendarFromContent:cnt]): new helper method.
3410 ([SOGoAppointmentObject -firstEventFromCalendar:calendar]): new
3413 * SoObjects/Appointments/SOGoAppointmentFolder.m
3414 ([SOGoAppointmentFolder -doCalendarQuery:context]): added a
3415 hackish test to detect whether the request concernes VEVENT's or
3416 anything else. Return events only in the former case.
3417 ([SOGoAppointmentFolder
3418 -fetchOverviewInfosFrom:_startDateto:_endDate]): retrieve the
3419 c_name quickfield so that the calendar list can identify the
3420 appointments with their complete "filename".
3422 * OGoContentStore/OCSiCalFieldExtractor.m: use CardGroup's
3423 groupsOfClass:fromSource: to parse the given vcalendar.
3425 * UI/Scheduler/iCalRecurrenceRule+SOGo.m: removed obsolete class.
3427 * UI/Scheduler/SOGoAppointment+UIx.h: removed obsolete class.
3429 * SoObjects/SOGo/SOGoAppointmentICalRenderer.[hm]: removed
3432 * SoObjects/SOGo/SOGoAppointment.[hm]: removed obsolete class.
3434 2006-09-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3436 * SoObjects/Appointments/SOGoAppointmentFolder.m
3437 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): be
3438 sensitive to the CalDAV method names.
3439 ([SOGoAppointmentFolder -doCalendarQuery:context]): method for the
3440 "calendar-query" CalDAV method name.
3442 * UI/WebServerResources/ContactsUI.js: removed a lot of useless
3443 code coming originally from MailerUI.js.
3445 * UI/WebServerResources/UIxContactEditor.js: imitate the
3446 Thunderbird address book by completing the display name with the
3447 content of the first and last name fields, until the display name
3448 is modified manually.
3450 * UI/WebServerResources/generic.js: added a "trim" method to the
3453 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
3454 -displayName]): new method that returns the display name from "cn"
3455 or from the "displayName" key if found.
3457 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3458 -initSnapshot]): check if "[card n]" returns anything to avoid a
3461 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): new method
3462 that returns an unparsed doctype definition for the pages.
3464 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3465 -vCard]): set the card's fn to attribute "displayName" if found
3468 2006-09-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3470 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3471 -vCard]): handle the "streetAddress" and "l" fields.
3473 * UI/Templates/MailerUI/UIxMailEditor.wox: arranged the message
3474 header fields by converting the tables to DIVs and SPANs.
3476 * UI/WebServerResources/generic.css: attempted unification of font
3477 families and size across all the elements. changed the
3478 logConsole's "position" from "fixed" to "absolute" to avoid
3481 2006-09-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3483 * UI/WebServerResources/ContactsUI.js (uixDeleteSelectedContacts):
3484 empty the contact view when the current contact is being deleted.
3486 * UI/WebServerResources/MailerUI.js (newContactFromEmail): fully
3487 parse the email field and provide the address full name if found
3488 as the "contactFN" parameter.
3490 * UI/WebServerResources/generic.js (openMailTo): do not give a
3491 name to the opened window so that serveral ones can be opened at
3494 * UI/MailPartViewers/UIxMailPartTextViewer.m
3495 ([UIxMailPartTextViewer -flatContentAsString]): override method by
3496 replacing carriage returns with "<br />" in the result string from
3497 super's implementation.
3499 * UI/Contacts/UIxContactView.m ([UIxContactView
3500 -_urlOfType:aType]): don't manage non-mailto urls through
3501 javascript, let the user decide what's best for him.
3503 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3504 -newAction]): transfer all the query parameters by using the
3505 "asURLParameters"'s result string from [self queryParameters].
3507 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3508 -initSnapshot]): retrieve "contactEmail" and "contactFN" from the
3509 query parameters and put their values (if any) into the snapshot.
3511 * UI/Contacts/UIxContactView.m ([UIxContactView -note]): convert
3512 carriage-returns to "<br />".
3513 ([UIxContactView -workCompany]): explicitly initialize company to
3514 nil if org is nil or empty.
3516 * UI/WebServerResources/UIxContactEditor.js: updated validation
3517 code after we added and renamed some fields.
3519 * UI/WebServerResources/ContactsUI.js: added code to cache contact
3520 cards and to handle card updates.
3522 2006-09-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3524 * UI/Contacts/UIxContactView.m ([UIxContactView -hasOtherInfos]):
3525 test the length of the returned string since they will never be
3528 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor -saveAction]):
3529 return self if the process went successful, returns an exception
3530 otherwise (and only otherwise...).
3532 * OGoContentStore/OCSContactFieldExtractor.m
3533 ([OCSContactFieldExtractor -extractQuickFieldsFromVCard:_vCard]):
3534 adapted method to the new VCard api. Since the cards are stored in
3535 vcard format, we no longer deal with a dictionary but with a
3538 2006-09-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3540 * UI/Contacts/UIxContactView.m ([UIxContactView -preferredEmail]):
3541 return a string with a "mailto" url.
3542 ([UIxContactView -_urlOfType:aType]): generic method to return a
3543 url string with a html anchor pointing to it.
3545 * UI/Contacts/UIxContactEditor.[hm]: UIxContactEditorBase renamed
3546 since subclass "UIxContactEditor" did nothing. Implemented code to
3547 display and modify the values parsed from the vcards, displayed in
3548 a way similar to the Thunderbird addressbook.
3550 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3551 -save]): new dummy method.
3553 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
3554 -save]): made method void.
3556 2006-09-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3558 * UI/Contacts/UIxContactView.m: added many wrapper methods to
3559 display blocks of data à la Thunderbird Addressbook. If data is
3560 available, those wrappers (around the NGVCard methods) will
3561 enclose the results in a proper HTML output with the correct label
3562 (if present), otherwise it will return an empty string.
3563 ([UIxContactView -vcardAction]): new action to return the contact
3564 as text/vcard (for exporting).
3566 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3567 +contactEntryWithName:aNamewithLDAPEntry:anEntryinContainer:aContainer]): adapted the mapping of the LDIF data with the new NGVCard API.
3569 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
3570 -vCard]): create a new NGVCard instance when no data is available
3572 ([SOGoContactGCSEntry -save]): save the vCard using the new
3573 "versitString" API method/message.
3575 * UI/Contacts/UIxContactView.h: separated interface from
3578 * UI/WebServerResources/ContactsUI.js: add-ed code to download card
3579 views and display them beneath the list.
3581 2006-09-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3583 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -userTimeZone]): retain
3584 the timezone even when it's the server timezone.
3586 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
3587 -privateContacts:inContext:]): no long configure the calendar
3588 object with the user's timezone since it's now accessible
3589 application-wide throught the SOGoObject methods.
3591 * UI/SOGoUI/UIxComponent.[hm]: removed the "viewTimeZone" ivar and
3592 method. Removed the "backendTimeZone" method.
3594 * UI/MainUI/SOGoUserHomePage.[hm]: made a subclass of UIxComponent
3595 instead of SoComponent.
3597 * SoObjects/Appointments/SOGoAppointmentObject.m:
3598 ([SOGoAppointmentObject -viewTimeZoneForPerson:_person]): returns
3599 [self serverTimeZone] instead of "EST" (which was removed).
3601 * SoObjects/Appointments/SOGoAppointmentFolder.[hm]: removed the
3602 "timeZone" ivar and its accessors.
3604 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -serverTimeZone]): new
3605 centralized method returing the timezone configured in the
3606 userdefaults db or "Canada/Eastern" if missing.
3607 ([SOGoObject -userTimeZone]): new centralized method returing the
3608 timezone of the current user or the server timezone if missing
3609 from the user configuration table.
3611 2006-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3613 * UI/WebServerResources/SchedulerUI.js: implemented caching of
3616 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]):
3617 return a path based on the object's context instead of the first
3618 level in SOGo's object hierarchy...
3620 2006-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3622 * UI/Templates/SchedulerUI/UIxCalDayTable.wox: day columns can now
3625 * UI/Templates/SchedulerUI/UIxCalDateSelector.wox: pass the user's
3626 timezone ([self viewTimeZone]) to the WEMonthOverview component to
3627 avoid a confusion with the days.
3629 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: appointments
3632 * UI/WebServerResources/SchedulerUI.js: implemented a mechanism to
3633 imitate Sunbird's synchronization between the 3 visible views.
3635 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): make
3636 sure the numbers in dateString are formatted so as to take 4 chars
3637 for the year and 2 for the day and the month, otherwise
3638 NSCalendarDate will return a nil date.
3639 ([UIxComponent -applicationPath]): return a path based on the
3640 object's context instead of the second level in SOGo's object
3643 2006-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3645 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): add the
3646 user's timezone abbreviation to the date string passed as parameter to
3647 NSCalendarDate to generate an accurate date instance. Do the same
3648 when no date is specified and today is chosen.
3650 * UI/WebServerResources/UIxAppointmentEditor.js: convert the
3651 form's time values to integers before comparing them.
3653 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -currentStartTime])
3654 ([UIxCalAptListView -currentEndTime]): initialize the resulting
3655 dates timezone with [self viewTimeZone].
3657 * UI/SOGoUI/UIxComponent.m ([UIxComponent -init]): new
3658 "viewTimeZone" ivar destined to hold an instance of the user's
3660 ([UIxComponent -viewTimeZone]): take the timezone from the user's
3663 2006-08-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3665 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: completely
3666 rearranged the layout.
3668 * UI/WebServerResources/UIxAppointmentEditor.js: added code to
3669 manage showing and hiding appointment details.
3671 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
3672 -privateContacts:inContext:]): init the SOGoAppointmentFolder's
3673 timezone by taking the current user's timezone setting.
3675 * SoObjects/Appointments/SOGoAptMailNotification.m: same as below.
3677 * SoObjects/Appointments/SOGoAppointmentObject.m
3678 ([SOGoAppointmentObject -changeParticipationStatus:inContext:]):
3679 set default timezone to EST, although this code should be
3680 rewritten to handle a system and a user default value.
3682 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
3683 -takeValuesFromRequest:_rqinContext:_ctx]): enhanced method to
3684 take the values from the hour and minute INPUTs when data is
3685 POSTed since we no longer use the UIxTimeSelector component.
3686 ([UIxTimeDateControl -selectableHours])
3687 ([UIxTimeDateControl -selectableMinutes]): new methods used by the
3688 template SELECTs to display reasonable and acceptable values
3689 instead of all the possibilities.
3691 * UI/WebServerResources/generic.js: adapted code for the new
3692 implementation of the UIxContactSelector component (added a
3693 "remove" button, removed the previous INPUT and replaced them with
3694 links of class "button").
3696 * UI/Scheduler/UIxTimeDateControl.h: separated interface from
3697 UIxTimeDateControl.m.
3699 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -currentAppointmentDay])
3700 ([UIxCalDayTable -currentAppointmentHour]): new methods that
3701 returns correctly formatted values used as attributes for JS code.
3703 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
3704 -initialContactsAsString]): renamed implementation of
3705 initialParticipants.
3706 ([UIxContactSelector -currentContactId])
3707 ([UIxContactSelector -currentContactName]): new methods used when
3708 listing the initial contacts in the widget. Currently, both return
3709 the person's cn but the latter should ultimately return a user
3712 * UI/Contacts/UIxContactSelector.h: separated interface from
3713 UIxContactSelector.m.
3715 * UI/Scheduler/UIxDatePickerScript.[hm]: component removed since
3716 all javascript code is now put in Scheduler.js/generic.js.
3718 * UI/Scheduler/NSCalendarDate+UIx.[hm]: category removed, code
3719 moved into NSCalendarDate+Scheduler instead.
3721 * SoObjects/Appointments/SOGoAppointmentFolder.m
3722 ([SOGoAppointmentFolder -setTimeZone:newTZ]): new method to
3723 configure the timezone from SOGoUserFolder when the instance is
3725 ([SOGoAppointmentFolder -viewTimeZone]): MET was removed. Returns
3726 the value of the new "timezone" ivar.
3728 2006-08-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3730 * UI/WebServerResources/SchedulerUI.{css,js}: added a tabview with
3731 the date selector in the first page and the container of the
3732 future calendar selector in the second page.
3734 * UI/WebServerResources/generic.js: added code for handling tabbed
3737 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productFrameworkName]):
3738 returns the bundle name associated to the current running product.
3740 2006-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3742 * UI/WebServerResources/UIxAppointmentEditor.js: fixed the AJAX
3743 exception by invoking a timeout on the opener rather than invoking
3744 the list refresh method.
3746 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]):
3749 * UI/Scheduler/UIxCalWeekView.m ([UIxCalWeekView -weekBeforePrevWeekQueryParameters])
3750 ([UIxCalWeekView -prevWeekQueryParameters])
3751 ([UIxCalWeekView -nextWeekQueryParameters])
3752 ([UIxCalWeekView -weekAfterNextWeekQueryParameters]): new methods
3753 that return the dates relatively to the current day.
3754 ([UIxCalWeekView -lastWeekName])
3755 ([UIxCalWeekView -currentWeekName])
3756 ([UIxCalWeekView -nextWeekName])
3757 ([UIxCalWeekView -weekAfterNextWeekName])
3758 ([UIxCalWeekView -_weekNumberWithOffsetFromToday:offset]): new
3759 methods that returns the label for the corresponding weeks.
3761 * UI/Scheduler/UIxCalDayTable.[hm]: new class module/component
3762 used by UIxCalDayView and UIxCalWeekView to display the events
3763 occuring in one or more days.
3765 2006-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3767 * UI/Scheduler/UIxCalMainView.m: extended class to populate the
3768 entries in the new "monthMenu" and "yearMenu".
3770 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]): new
3771 method to return the current day as a string formatted depending
3772 on the current locale.
3774 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
3775 ([UIxCalAptListView -endDate]): "today" is now the default filter
3776 for displayed events.
3777 ([UIxCalAptListView -currentSerialDay]): new method returning the
3778 date of the current enumerated appointment in serial form
3781 * UI/WebServerResources/SchedulerUI.js: added code to select the
3782 relevant day when an appointment is selected. Added code to popup
3783 a month and a year menu whenever the header entries are clicked in
3784 the calendar widget.
3786 * UI/WebServerResources/generic.js: made addClassName and
3787 removeClassName methods of HTMLElement.
3789 2006-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3791 * UI/WebServerResources/MailerUI.js: fixed the contact creation
3792 from email addresses.
3794 * UI/WebServerResources/generic.js: centralized the search-related
3795 functions here since the same code was used across the 3
3798 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
3799 ([UIxCalAptListView -endDate]): return the required dates needed
3800 depending on the value given to the "filterpopup" url parameter.
3802 * UI/Common/UIxToolbar.m ([UIxToolbar -buttonLabel]): reduced the
3803 code by invoking UIxComponent's labelForKey:.
3805 * UI/SOGoUI/UIxComponent.m ([UIxComponent -labelForKey:]): use
3806 [self pageResourceManager] instead of [self resourceManager].
3808 * UI/Contacts/UIxContactEditorBase.m: invokes
3809 globallyUniqueObjectId on the clientobject's class instead of the
3810 hardcoded "SOGoFolder".
3812 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3813 -newAction]): redirect the "new" action to the personal (default)
3816 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
3817 +objectWithName:inContainer:]): new constructor.
3819 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3820 -lookupContactWithId:recordId]): always create a contact object,
3821 even if it does not exist.
3823 2006-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3825 * UI/Scheduler/UIxCalMainView.[hm]: new class to serve as a pseudo
3826 component that lays out the different components of SOGoCalendar.
3827 Only serves as an Objective-C counterpart to its xml template.
3829 * UI/Scheduler/UIxCalInlineMonthOverview.h: interface extracted
3832 * UI/Scheduler/UIxCalFilterPanel.[hm]: new class designed to
3833 display a widget to handle the information displayed in the
3834 appointments list. Not currently used, lacks implementation.
3836 * UI/Scheduler/UIxCalDateSelector.[hm]: new class designed to
3837 display a calendar as a dynamic widget from where one can select
3838 the current visible day.
3840 * UI/Scheduler/NSCalendarDate+Scheduler.[hm]: category code
3841 extracted from UIxCalInlineMonthOverview.m.
3843 * UI/Scheduler/UIxDatePicker.m: removed the jsPopup, jsCode and
3844 calendarPageURL methods. The javascript code is handled by .js
3845 files as much as possible...
3847 * UI/WebServerResources/ContactsUI.js,
3848 UI/WebServerResources/MailerUI.js: adapted to the code refactoring
3851 * UI/WebServerResources/SchedulerUI.js: implemented functions to
3852 handle the new widgets. XmlHTTPRequest code taken from
3855 * UI/WebServerResources/generic.js: put some functions related to
3856 element selections as methods to HTMLElement and HTMLTableElement.
3858 * UI/Scheduler/UIxCalAptListView.[hm]: new class designed to
3859 display the list of appointments (embodies the code-size of
3860 UIxCalAptListView; answers to the "aptlist" method).
3862 2006-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3864 * UI/Scheduler/UIxCalWeekOverview.m ([UIxCalWeekOverview
3865 -correctURLAction]): new short action method replacing the method
3866 below by taking far less code.
3868 * SoObjects/Appointments/SOGoAppointmentFolder.m
3869 ([SOGoAppointmentFolder -GETAction:]): removed method. Replaced
3870 with an action in the view-related code.
3872 * UI/Scheduler/UIxAppointmentEditor.m: invoke
3873 "stringByEscapingHTMLString" on the resulting value to avoid
3874 issues with accented characters.
3875 ([-jsCode]): removed method since the javascript code was merged
3876 into SchedulerUI.js.
3878 2006-08-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3880 * UI/Scheduler/iCalPerson+UIx.m ([iCalPerson +personWithUid:]):
3881 new class method that returns an iCalPerson based on the UID given
3884 * UI/Contacts/UIxContactsListViewContainerBase.m:
3885 UIxContactsListViewContainer renamed to serve as a base class for
3886 the contact lists in both the contact editor and the contact
3889 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3890 ([SOGoContactLDAPFolder
3891 -LDAPSetHostname:setPort:setBindDN:setBindPW:setContactIdentifier:
3892 setUserIdentifier:setRootDN:]): an LDAP field specifying the
3893 loginname of the users can now be specified.
3895 * UI/WebServerResources/generic.js: added code to manage contact
3896 lists through the new implementation of the UIxContactSelector.
3898 * UI/Templates: put the templates related to SchedulerUI in its
3901 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
3902 -asDictionaryWithAttributeNames:withUID:andCName:cName]): add an
3903 entry for "uid" with the field name representing the login name of
3904 the user in the corresponding LDAP branch.
3906 2006-08-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3908 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3909 -lookupName:_keyinContext:_ctxacquire:_flag]): when the HTTP
3910 request is a PUT, always create an entry, even if we're not sure
3913 2006-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3915 * UI/WebServerResources/ContactsUI.js: implemented live-search.
3917 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3918 -appendSystemSourcesInContext:context]): populated method with
3919 code that creates entries mapped to instances SOGoContactFolder,
3920 based on the configuration found in the NSUserDefaults under the
3921 key "SOGoLDAPAddressBooks".
3922 ([SOGoContactFolders
3923 -lookupName:nameinContext:contextacquire:acquire]):
3924 "contactsources" do not exist anymore, SOGoContactFolder was split
3925 into two classes: SOGoContactGCSFolder and SOGoContactLDAPFolder
3926 and one protocol: SOGOContactFolder, instead.
3927 ([SOGoContactFolders -contactFolders]): new accessor used by the
3928 views of SOGoContactXXXFolder to list the possible sources.
3930 * SoObjects/Contacts/SOGoContactObject.h: new protocol that
3931 defines the methods that UIxContactsView, ..Editor and so on...
3934 * SoObjects/Contacts/SOGoContactFolder.h: new protocol that
3935 defines the methods that UIxContactsListViewBase expects as well
3936 as the data fields returned in the contact lists.
3938 * SoObjects/Contacts/SOGoContactLDAPFolder.[hm]: new class that
3939 returns entries an LDAP server. Conforms to the new
3940 SOGOContactFolder protocol.
3942 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: new class that
3943 returns a vCard based on contact entries from an LDAP server.
3944 Conforms to the new SOGOContactObject protocol.
3946 * SoObjects/Contacts/NGVCardSimpleValue+Contact.m
3947 ([NGVCardSimpleValue -vCardEntryString]): generates the correct
3948 entry for the textual representation of the vCard.
3950 * SoObjects/Contacts/NGVCardSimpleValue+Contact.[hm]: new class
3953 * SoObjects/Contacts/SOGoContactGCSEntry.[hm]: new module name of
3954 "SOGoContactObject".
3956 * SoObjects/Contacts/NGVCard+Contact.m ([NGVCard -asString]): new
3957 method that generates a textual representation of the vcard.
3959 * SoObjects/Contacts/NGVCard+Contact.[hm]: new class extension.
3961 * SoObjects/Contacts/SOGoContactGCSFolder.[hm]: new module name of
3962 "SOGoContactFolder".
3964 * SoObjects/Contacts/SOGoContactSource.h,
3965 SoObjects/Contacts/SOGoPersonalAB.[hm]: unused classes and
3968 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
3969 -singleAttributeWithName:key]): new method that returns the first
3970 object associated with an ldap key (where generally one value is
3973 -asDictionaryWithAttributeNames:attributeNamesandCName:cName]):
3974 map the entry into an NSDictionary for processing by
3975 UIxContactsListViewBase.m with the least possible overhead.
3977 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: new class
3980 2006-08-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3982 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
3983 -privateContacts:inContext:]): now returns an instance of
3986 * UI/Contacts/UIxContactsListViewContainer.m
3987 ([UIxContactsListViewContainer -contactFolderName]): new method to
3988 return the absolute path to the current contact folder, called
3989 from within the template.
3991 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
3992 JS code to initialize the 'currentContactFolder' generic var.
3994 * SoObjects/Contacts/SOGoContactFolder.m ([SOGoContactFolder
3995 +contactFolderWithSource:inContainer:andName:]): new class
3996 method meant to return an instance connected to the specified
3997 source. Currently useless but won't be anymore in the next few
4000 * SoObjects/SOGo/SOGoUserFolder.h: commented out declaration of
4001 the "lookupFreeBusyObject" method since it does not exist.
4003 * UI/Contacts/UIxContactFoldersView.[hm]: new class module serving
4004 as a "view" for the SOGoContactFolders object. Does nothing but
4005 redirect the browser to the URL of the personal address book of
4006 the user. It does not even have a template.
4008 * SoObjects/Contacts/SOGoPersonalAB.[hm]: new class module
4009 implementing the SOGoContactSource protocol. Does nothing
4010 currently but will be used to implement access to the personal
4011 address book of the user stored in the SOGo database.
4013 * SoObjects/Contacts/SOGoContactSource.h: new "SOGoContactSource"
4014 protocol defining an API common to all possible types of contact
4017 * SoObjects/Contacts/SOGoContactFolders.[hm]: new class module
4018 serving as the root of the contact folders available to the
4019 current user. Correctly lists the contact sources in webdav.
4021 2006-08-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4023 * UI/MailerUI/UIxMailAccountsView.m ([UIxMailAccountsView
4024 -composeAction]): new action method that permits external object
4025 to write a message from the default (primary) account.
4027 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
4028 -initSnapshot]): new method with code taken from "defaultAction"
4029 but needed for others.
4030 ([UIxContactEditorBase -writeAction]): new action designed to
4031 compose the correct URL needed to obtain the MailerUI's email
4032 editor with the correct "mailto" parameter.
4034 * UI/Common/UIxSortableTableHeader.m: moved from MailerUI to
4035 Common so that other modules can use it.
4037 * UI/Contacts/UIxContactsListViewContainer.m: container to make it
4038 easier to manage both ajax and non-ajax requests.
4040 * UI/Contacts/UIxContactsFilterPanel.m: clone of
4041 UIxMailFilterPanel, but applicable to contact lists.
4043 * SoObjects/Contacts/NSDictionary+Contact.m ([NSDictionary
4044 -vcardContentFromSOGoContactRecord]): use the new standard methods
4045 created for each type of entry. If a line is determined to not
4046 contain information, it will be skipped.
4048 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
4049 +initialize]): init defaultMailDomain with the user default
4050 "SOGoDefaultMailDomain".
4052 2006-08-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4054 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
4055 -saveAction]): reorganized methods to only have ONE return point.
4056 Invoke saveRecord: directly on the clientObject instead of
4057 saveContentString, which does the same thing anyway.
4059 * SoObjects/Contacts/NSDictionary+Contact.m
4060 ([NSDictionary -vcardContentFromSOGoContactRecord]): extension
4061 method to convert the dictionary returned with the user submission
4062 to a record in VCARD format to be stored in the database.
4064 2006-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4066 * UI/WebServerResources/MailerUI.js: when opening the context menu
4067 of the message list, select the message below the mouse cursor and
4068 deselect the other selected messages temporarily. This mimics the
4069 behaviour of Thunderbird for that matter and was already
4070 implemented for the entries of the folder tree.
4072 * UI/MailerUI/UIxMailFolderMenu.m ([UIxMailFolderMenu
4073 -iconForMenuItem]): new method that returns the fully qualified
4074 relative URL to the icon representing the mailbox, or the default
4075 mailbox icon if needed.
4077 * UI/SOGoUI/UIxComponent.m ([UIxComponent
4078 -urlForResourceFilename:filename]): automatically return an empty
4079 string whenever the filename passed as argument is nil.
4081 * UI/WebServerResources/MailerUI.js: open the mailboxes with the
4082 "desc" parameter set to 1 so that they are sorted in descending
4083 order by default. Also, added "onHeaderClick()", triggered by
4084 clicking on the message list header elements.
4086 * UI/MailerUI/UIxMailSortableTableHeader.m
4087 ([UIxMailSortableTableHeader -isSortedDescending]): same as below.
4089 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
4090 -isSortedDescending]): defaults to "YES" when the sort order is
4093 2006-07-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4095 * UI/WebServerResources/MailerUI.js:
4096 - message cache: set the max num of cached messages to 20. Limit
4097 the cached message size to 30000 bytes.
4098 - ajax: when a message request is called while one is already
4099 being performed, the latter will be cancelled. Idem when
4100 retrieving the content of a mailbox.
4101 - folder tree: when a mailbox is selected because of the URL
4102 requested (initMailboxSelection), the dtree is expanded throughout
4103 the mailbox entry's parent hierarchy to ensure it is made visible
4104 when the page is being displayed. (new function: expandUpperTree).
4105 - mailbox loading: when loading a mailbox where a message was
4106 previously selected, we invoke its url with the "pageforuid"
4107 parameter correctly specified. During callback processing, we scan
4108 the table for the related row and reselect it.
4109 Also, the message area is set blank before loading any mailbox.
4111 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
4112 -defaultAction]): if the "pageforuid" parameter is passed in the
4113 url, take its value and invoke [self firstMessageOfPageFor:]
4114 consequently to deduce the first message to display. Otherwise,
4115 set it to "idx", otherwise set it to 0.
4116 ([UIxMailListView -firstMessageOfPageFor:]): new method
4117 that determines the first message of the page where the message
4118 passed as parameter is contained.
4120 * UI/WebServerResources/UIxMailListView.js: removed this module,
4121 its code was put in MailerUI.js instead.
4123 2006-07-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4125 * UI/MailerUI/UIxMailFolderMenu.m: a descendent of UIxMailTree
4126 which returns the nodes for the parent specified in "parentMenu".
4127 Used to generate the javascript code for the folder dtree.
4129 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: the components
4130 using that container-template are now using UIxMailMainFrame
4131 since UIxMailPanelFrame had no real interest. File removed.
4133 * UI/WebServerResources/dtree.{css,js}: new files to handle
4134 javascript-generated mailbox tree. Modified from original version
4135 by integrating the previous code with the one we are using for
4136 selections and mailbox handling. Minor visual enhancements too...
4138 2006-07-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4140 * SoObjects/Mailer/SOGoUser+Mail.m: if only one identity is to be
4141 returned, put it in an NSArray before returning it (fixes
4144 2006-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4146 * UI/SOGoUI/NSString+URL.m ([NSString -hostlessURL]): new method
4147 that returns a url string stripped from its "http://hostname"
4150 * UI/SOGoUI/NSDictionary+URL.[hm]: moved from UI/Common.
4152 * UI/SOGoUI/NSString+URL.[hm]: moved from UI/Common.
4154 2006-07-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4156 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
4157 -mailDateFormatter]): retrieve the timezone from the user settings
4158 and pass it to the returned dateFormatter. Also, the dateFormatter
4159 is kept in a static variable to avoid useless
4160 creations/destructions.
4162 * UI/MailerUI/UIxMailFormatter.m ([UIxMailDateFormatter
4163 -setTimeZone:newTimeZone]): new accessor to specify the timezone.
4165 * UI/MailerUI/UIxMailFilterPanel.m ([UIxMailFilterPanel -setSearchCriteria:])
4166 ([UIxMailFilterPanel -searchCriteria]): new methods, similar to
4167 s/Criteria/Text/ to handle the "criteria" form parameter.
4169 2006-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4171 * UI/WebServerResources/uix.css: enhanced the toolbar appearance
4172 to integrate better with the firefox look&feel. Added entries for
4173 the new "menu" DIV class (popup menus).
4175 * UI/WebServerResources/generic.js: added "sanitizeMailTo" which
4176 takes any chunk of text as param, detects the user email and the
4177 optional first and last names and return them in a well-formatted
4178 way. Renamed "getSelection" to "getSelectedNodes" to avoid a
4179 namespace conflict. Added "onMenuClick(node, event, menuId)" to
4180 handle popup menus through "onclick" element attributes (node =
4181 this, event = event and menuId = name of the menu DIV id to
4184 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
4185 -snapshot]): add an entry for "email" into the snapshot
4186 dictionary if a "contactEmail" URL parameter was detected and if
4187 the entry for "email" is empty.
4189 * UI/Contacts/Toolbars/SOGoContactFolder.toolbar: the "new card"
4190 button now invokes the newContact() js function in ContactsUI.js
4191 instead of opening "new" directly. newContact() pops up a window
4192 stripped from its navigation bar.
4194 * UI/Contacts/ContactsUI.js: new module specific to the ContactsUI
4195 bundle (AddressBook).
4197 * UI/Templates/MailerUI/UIxMailView.wox: added a div of class
4198 "menu" and id "addressMenu" have the header email addresses
4199 display it with the new menu code in generic.js.
4201 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: same as below +
4202 replaced the body tables with a div of class "pageContent"
4203 (standardization across the page templates).
4205 * UI/Templates/MailerUI/UIxMailMainFrame.wox: include
4206 productJavaScriptURL and pageJavaScriptURL (conditionnally) since
4207 those are now inherited from UIxPageFrame.
4209 * UI/MailerUI/UIxMailView.js: new file specific to UIxMailView.
4211 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]): if
4212 a "mailto" URL parameter is detected and the "to" array is empty,
4213 initialize "to" with the value of "mailto" before returning it.
4215 * UI/MailerUI/UIxMailEditorAction.m ([UIxMailEditorAction
4216 -composeAction]): rewrote method in a cleaner way and with usage
4217 of the URL extensions to NSString and NSDictionary (see below).
4218 Also, if a "mailto" url parameter is detected, pass it to the
4221 * UI/MailerUI/UIxMailMainFrame.m: subclassed from UIxPageFrame to
4224 * UI/Common/NSDictionary+URL.m ([NSDictionary -asURLParameters]):
4225 returns a parameter string to add to a base URL.
4227 * UI/Common/NSString+URL.m ([NSString
4228 -composeURLWithAction:parameters:andHash:useHash]): new method to
4229 compose a complete URL from an object URL with parameters and an
4230 optional '#' character.
4232 * UI/Common/UIxPageFrame.h: separated interface from
4235 2006-07-07 Wsourdeau Sourdeau <wsourdeau@inverse.ca>
4237 * UI/Scheduler/UIxAppointmentEditor.m: returns yes to "isPopup";
4239 * UI/WebServerResources/generic.js: added code to manage
4240 selections within HTML containers.
4242 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productJavaScriptURL]):
4243 added method to determine the possible URL for a product-specific
4244 javascript filename of the forme <productname>.js.
4245 ([UIxPageFrame -hasProductSpecificJavaScript]): new method.
4246 ([UIxPageFrame -isPopup]): new method to determine whether the
4247 application navigator bar should be displayed (main page) or not
4250 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
4251 -LDAPCheckLogin:_loginpassword:_pwd]): new method to authenticate
4252 the user through LDAP.
4254 2006-07-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4256 * The toolbar code from the MailerUI product was taken, renamed as
4257 "UIxToolBar" and put into UI/Common. Toolbar plists were created
4258 for the Contacts and Scheduler products and put in their respectir
4259 Toolbars/ subdirectories. Finally,
4260 UI/Templates/{UIxToolbarButton,UIxToolbarSeparator}.wox, and
4261 UI/Common/{UIxToolbarButton,UIxToolbarSeparator}.m were removed
4262 and an invocation to the UIxToolbar component was put at the top
4263 of UI/Templaces/UIxPageFrame.wox.
4265 * UI/Common/UIxToolbar.m: new "isLastGroup" method to determine
4266 within the templates whether a separator should be displayed.
4268 * UI/Common/UIxToolbar.m ([UIxToolbar -hasButtons]): new method
4269 that returns NO if the toolbar is empty.
4271 2006-07-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
4273 * UI/Templates/UIxPageFrame.wox: replaced central table with a DIV.
4275 * UI/Common/UIxToolbarSeparator.m, UI/Common/UIxToolbarButton.m:
4276 new toolbar objects.
4278 * UI/Templates/UIxPageFrame.wox: use the exact html code as below.
4280 * UI/Templates/MailerUI/UIxMailMainFrame.wox: redone the
4281 linkbanner as a DIV instead of a TABLE.
4283 * UI/MailerUI/UIxMailMainFrame.m [UIxMailMainFrame
4285 returns 'YES' to request the display of the navigation bar between
4288 2006-06-15 ludovic@inverse.ca
4290 * It's now possible to set the default
4291 domain using for email using the
4292 SOGoDefaultMailDomain preference key.
4294 2006-06-15 ludovic@inverse.ca
4296 * Initial import of SOGo from trunk.